⤴ Rebased from master
This commit is contained in:
397
src/assets/locales/bn.json
Normal file
397
src/assets/locales/bn.json
Normal file
@@ -0,0 +1,397 @@
|
||||
{
|
||||
"home": {
|
||||
"no-results": "কোন তথ্য পাওয়া যায়নি",
|
||||
"no-data": "কোন উপাত্ত সজ্জিত করা হয়নি",
|
||||
"no-items-section": "এখনও কোন তালিকা দেখানোর নেই"
|
||||
},
|
||||
"search": {
|
||||
"search-label": "খুঁজুন",
|
||||
"search-placeholder": "পরিস্রুত করার জন্য লিখতে শুরু করুন",
|
||||
"clear-search-tooltip": "মুছুন",
|
||||
"enter-to-search-web": "ওয়েবে খোঁজার জন্য এন্টার চাপুন"
|
||||
},
|
||||
"login": {
|
||||
"title": "ড্যাশি",
|
||||
"guest-label": "অতিথি প্রবেশ",
|
||||
"username-label": "ব্যবহারকারীর নাম",
|
||||
"password-label": "পাসওয়ার্ড",
|
||||
"login-button": "প্রবেশ করুন",
|
||||
"remember-me-label": "মনে রাখুন",
|
||||
"remember-me-never": "কখনোই না",
|
||||
"remember-me-hour": "৪ ঘন্টা",
|
||||
"remember-me-day": "১ দিন",
|
||||
"remember-me-week": "১ সপ্তাহ",
|
||||
"remember-me-long-time": "দীর্ঘকাল",
|
||||
"error-missing-username": "ব্যবহারকারীর নাম অনুপস্থিত",
|
||||
"error-missing-password": "পাসওয়ার্ড অনুপস্থিত",
|
||||
"error-incorrect-username": "ব্যবহারকারী পাওয়া যায়নি",
|
||||
"error-incorrect-password": "চাল পাসওয়ার্ড",
|
||||
"success-message": "প্রবেশ হচ্ছে...",
|
||||
"logout-message": "প্রস্থান",
|
||||
"already-logged-in-title": "ইতিমধ্যে প্রবেশ করা",
|
||||
"already-logged-in-text": "আপনি প্রবেশ করা আছেন এই নামে-",
|
||||
"proceed-to-dashboard": "ড্যাশবোর্ডে যান",
|
||||
"log-out-button": "প্রস্থান",
|
||||
"proceed-guest-button": "অতিথি হিসেবে অগ্রসর হন",
|
||||
"guest-intro-1": "এই উদাহরণে অতিথি অভিগমন সক্রিয় করা আছে।",
|
||||
"guest-intro-2": "অতিথিদের ড্যাশবোর্ডে শুধুমাত্র দেখার অধিকার আছে, তাই আপনি ডিস্কে কোনো পরিবর্তন লিখতে পারবেন না।",
|
||||
"error": "ত্রুটি",
|
||||
"error-no-user-configured": "প্রমাণীকরণ সক্ষম করা নেই, বা কোনো ব্যবহারকারী কনফিগার করা হয়নি",
|
||||
"error-go-home-button": "নীড়ে ফিরে যান",
|
||||
"logged-in-guest": "অতিথি হিসাবে প্রবেশ করেছেন, পুনঃনির্দেশ করা হচ্ছে...",
|
||||
"error-guest-access": "অতিথি প্রবেশ অনুমোদিত নয়"
|
||||
},
|
||||
"config": {
|
||||
"main-tab": "প্রধান সূচি",
|
||||
"view-config-tab": "সজ্জিতকরণ দেখুন",
|
||||
"edit-config-tab": "সজ্জিতকরণ সম্পাদনা করুন",
|
||||
"custom-css-tab": "নিজের পছন্দমত সজ্জা",
|
||||
"heading": "সজ্জিতকরণ বিকল্প",
|
||||
"download-config-button": "সজ্জিতকরণ দেখুন বা রপ্তানি করুন",
|
||||
"edit-config-button": "সজ্জিতকরণ সম্পাদনা করুন",
|
||||
"edit-css-button": "CSS সম্পাদনা করুন",
|
||||
"cloud-sync-button": "ক্লাউড সিঙ্ক সক্রিয় করুন",
|
||||
"edit-cloud-sync-button": "ক্লাউড সিঙ্ক সম্পাদনা করুন",
|
||||
"rebuild-app-button": "অ্যাপ্লিকেশন পুনর্নির্মাণ",
|
||||
"change-language-button": "ভাষা পরিবর্তন",
|
||||
"reset-settings-button": "স্থানিক সেটিংস রিসেট করুন",
|
||||
"app-info-button": "অ্যাপ সম্পর্কিত তথ্য",
|
||||
"backup-note": "পরিবর্তন করার আগে আপনার কনফিগারেশনের একটি ব্যাকআপ নেওয়ার পরামর্শ দেওয়া হচ্ছে।",
|
||||
"reset-config-msg-l1": "এটি স্থানীয় সংরক্ষণাগার থেকে সমস্ত ব্যবহারকারীর সেটিংস মুছে ফেলবে, কিন্তু আপনার 'conf.yml' ফাইলকে প্রভাবিত করবে না।",
|
||||
"reset-config-msg-l2": "আপনি যদি ভবিষ্যতে সেগুলি ব্যবহার করতে চান তবে প্রথমে স্থানীয়ভাবে আপনার করা যেকোনো পরিবর্তনের ব্যাকআপ নেওয়া উচিত।",
|
||||
"reset-config-msg-l3": "আপনি কি নিশ্চিত আপনি সামনে এগুতে চান?",
|
||||
"data-cleared-msg": "ডেটা সফলভাবে মুছে ফেলা হয়েছে৷",
|
||||
"actions-label": "ক্রিয়াকলাপ",
|
||||
"copy-config-label": "সজ্জিতকরণ অনুলিপি",
|
||||
"data-copied-msg": "কনফিগারেশনটি ক্লিপবোর্ডে অনুলিপি করা হয়েছে",
|
||||
"reset-config-label": "সজ্জিতকরণ পুন:স্থাপন",
|
||||
"css-save-btn": "পরিবর্তনগুলোর সংরক্ষন",
|
||||
"css-note-label": "বিঃদ্রঃ",
|
||||
"css-note-l1": "আপনার পরিবর্তনগুলি কার্যকর করার জন্য আপনাকে পৃষ্ঠাটি রিফ্রেশ করতে হবে।",
|
||||
"css-note-l2": "সজ্জা ওভাররাইড শুধুমাত্র স্থানীয়ভাবে সংরক্ষণ করা হয়, তাই এটি আপনার CSS এর একটি অনুলিপি তৈরি করার সুপারিশ করা হয়।",
|
||||
"css-note-l3": "সমস্ত কাস্টম সজ্জা সরাতে, বিষয়বস্তু মুছুন এবং পরিবর্তনগুলি সংরক্ষণ চাপুন।"
|
||||
},
|
||||
"alternate-views": {
|
||||
"alternate-view-heading": "দৃশ্য পরিবর্তন",
|
||||
"default": "ডিফল্ট",
|
||||
"workspace": "কর্মক্ষেত্র",
|
||||
"minimal": "ন্যূনতম"
|
||||
},
|
||||
"settings": {
|
||||
"theme-label": "থিম",
|
||||
"layout-label": "লেআউট",
|
||||
"layout-auto": "স্বয়ংক্রিয়",
|
||||
"layout-horizontal": "অনুভূমিক",
|
||||
"layout-vertical": "উলম্ব",
|
||||
"item-size-label": "আইটেম আকার",
|
||||
"item-size-small": "ছোট",
|
||||
"item-size-medium": "মাঝারি",
|
||||
"item-size-large": "বড়",
|
||||
"config-launcher-label": "সজ্জিতকরণ",
|
||||
"config-launcher-tooltip": "সজ্জিতকরণ হালনাগাদ",
|
||||
"sign-out-tooltip": "প্রস্থান",
|
||||
"sign-in-tooltip": "প্রবেশ",
|
||||
"sign-in-welcome": "শুভেচ্ছা {username}!"
|
||||
},
|
||||
"updates": {
|
||||
"app-version-note": "ড্যাশি সংস্করণ",
|
||||
"up-to-date": "বর্তমান সময় পর্যন্ত",
|
||||
"out-of-date": "হালনাগাদ লভ্য",
|
||||
"unsupported-version-l1": "আপনি ড্যাশির একটি অসমর্থিত সংস্করণ ব্যবহার করছেন৷",
|
||||
"unsupported-version-l2": "সেরা অভিজ্ঞতা এবং সাম্প্রতিক নিরাপত্তা প্যাচের জন্য, অনুগ্রহ করে হালনাগাদ করুন"
|
||||
},
|
||||
"language-switcher": {
|
||||
"title": "অ্যাপ্লিকেশনের ভাষা পরিবর্তন",
|
||||
"dropdown-label": "একটি ভাষা নির্বাচন করুন",
|
||||
"save-button": "সংরক্ষণ করুন",
|
||||
"success-msg": "ভাষা হালনাগাদ করা হয়েছে "
|
||||
},
|
||||
"theme-maker": {
|
||||
"title": "থিম সজ্জিতকরণ",
|
||||
"export-button": "কাস্টম ভেরিয়েবল এক্সপোর্ট করুন",
|
||||
"reset-button": "সজ্জা রিসেট করুন",
|
||||
"show-all-button": "সমস্ত ভেরিয়েবল সংরক্ষণ করুন",
|
||||
"change-fonts-button": "হরফ পরিবর্তন করুন",
|
||||
"save-button": "সংরক্ষণ করুন",
|
||||
"cancel-button": "বাতিল করুন",
|
||||
"saved-toast": "{theme} সফলভাবে হালনাগাদ করা হয়েছে৷",
|
||||
"copied-toast": "{theme}-এর থিম ডেটা ক্লিপবোর্ডে কপি করা হয়েছে",
|
||||
"reset-toast": "{theme}-এর জন্য কাস্টম রং সরানো হয়েছে"
|
||||
},
|
||||
"config-editor": {
|
||||
"save-location-label": "স্থান সংরক্ষন",
|
||||
"location-local-label": "স্থানীয়ভাবে আবেদন করুন",
|
||||
"location-disk-label": "কনফিগ ফাইলে পরিবর্তন লিখুন",
|
||||
"save-button": "পরিবর্তনগুলোর সংরক্ষন",
|
||||
"preview-button": "পূর্বরূপ পরিবর্তন",
|
||||
"valid-label": "কনফিগ বৈধ",
|
||||
"status-success-msg": "কাজ সম্পূর্ণ",
|
||||
"status-fail-msg": "কাজ ব্যর্থ হয়েছে৷",
|
||||
"success-msg-disk": "কনফিগ ফাইল সফলভাবে ডিস্কে লেখা হয়েছে",
|
||||
"success-msg-local": "স্থানীয় পরিবর্তনগুলি সফলভাবে সংরক্ষিত হয়েছে৷",
|
||||
"success-note-l1": "অ্যাপটি স্বয়ংক্রিয়ভাবে পুনর্নির্মাণ করা উচিত।",
|
||||
"success-note-l2": "এতে এক মিনিট পর্যন্ত সময় লাগতে পারে।",
|
||||
"success-note-l3": "পরিবর্তনগুলি কার্যকর করার জন্য আপনাকে পৃষ্ঠাটি রিফ্রেশ করতে হবে৷",
|
||||
"error-msg-save-mode": "অনুগ্রহ করে একটি সংরক্ষণ মোড নির্বাচন করুন: স্থানীয় বা ফাইল।",
|
||||
"error-msg-cannot-save": "কনফিগার সংরক্ষণ করার সময় একটি ত্রুটি ঘটেছে৷",
|
||||
"error-msg-bad-json": "JSON-এ ত্রুটি, সম্ভবত বিকৃত",
|
||||
"warning-msg-validation": "বৈধতা সতর্কতা",
|
||||
"not-admin-note": "আপনি ডিস্কে পরিবর্তিত লিখতে পারবেন না, কারণ আপনি অ্যাডমিন হিসাবে লগ ইন করেননি৷"
|
||||
},
|
||||
"app-rebuild": {
|
||||
"title": "অ্যাপ্লিকেশন পুনর্নির্মাণ",
|
||||
"rebuild-note-l1": "conf.yml ফাইলে লিখিত পরিবর্তনগুলি কার্যকর করার জন্য একটি পুনর্নির্মাণের প্রয়োজন।",
|
||||
"rebuild-note-l2": "এটি স্বয়ংক্রিয়ভাবে ঘটবে, কিন্তু যদি এটি না হয়ে থাকে, তাহলে আপনি এখানে ম্যানুয়ালি ট্রিগার করতে পারেন।",
|
||||
"rebuild-note-l3": "স্থানীয়ভাবে সংরক্ষিত পরিবর্তনের জন্য এটির প্রয়োজন নেই।",
|
||||
"rebuild-button": "নির্মাণ শুরু করুন",
|
||||
"rebuilding-status-1": "নির্মাণ হচ্ছে...",
|
||||
"rebuilding-status-2": "এতে কয়েক মিনিট সময় লাগতে পারে",
|
||||
"error-permission": "আপনার কাছে এই ক্রিয়াটি ট্রিগার করার অনুমতি নেই।",
|
||||
"success-msg": "নির্মাণ সফলভাবে সম্পন্ন হয়েছে",
|
||||
"fail-msg": "নির্মাণ ব্যর্থ হয়েছে",
|
||||
"reload-note": "পরিবর্তনগুলি কার্যকর হওয়ার জন্য একটি পৃষ্ঠা পুনরায় লোড করার প্রয়োজন নেই৷",
|
||||
"reload-button": "পৃষ্ঠাটি রিলোড করুন"
|
||||
},
|
||||
"cloud-sync": {
|
||||
"title": "ক্লাউড ব্যাকআপ এবং পুনরুদ্ধার",
|
||||
"intro-l1": "ক্লাউড ব্যাকআপ এবং পুনরুদ্ধার হল একটি ঐচ্ছিক বৈশিষ্ট্য, যা আপনাকে আপনার কনফিগারেশন ইন্টারনেটে আপলোড করতে এবং তারপর অন্য কোনো ডিভাইসে বা ড্যাশি-র উদাহরণে পুনরুদ্ধার করতে সক্ষম করে।",
|
||||
"intro-l2": "All data is fully end-to-end encrypted with AES, using your password as the key.",
|
||||
"intro-l3": "আরো তথ্যের জন্য, দেখুন",
|
||||
"backup-title-setup": "একটি ব্যাকআপ করুন",
|
||||
"backup-title-update": "ব্যাকআপ আপডেট করুন",
|
||||
"password-label-setup": "একটি পাসওয়ার্ড চয়ন করুন",
|
||||
"password-label-update": "আপনার পাসওয়ার্ড লিখুন",
|
||||
"backup-button-setup": "ব্যাকআপ",
|
||||
"backup-button-update": "ব্যাকআপ আপডেট করুন",
|
||||
"backup-id-label": "আপনার ব্যাকআপ আইডি",
|
||||
"backup-id-note": "এটি পরে ব্যাকআপ থেকে পুনরুদ্ধার করতে ব্যবহৃত হয়। তাই এটি আপনার পাসওয়ার্ড সহ কোথাও নিরাপদ রাখুন।",
|
||||
"restore-title": "একটি ব্যাকআপ পুনরুদ্ধার করুন",
|
||||
"restore-id-label": "পুনরুদ্ধার করুন আইডি",
|
||||
"restore-password-label": "পাসওয়ার্ড",
|
||||
"restore-button": "পুনরুদ্ধার",
|
||||
"backup-missing-password": "অনুপস্থিত পাসওয়ার্ড",
|
||||
"backup-error-unknown": "অনুরোধ প্রক্রিয়া করতে অক্ষম",
|
||||
"backup-error-password": "ভুল পাসওয়ার্ড। আপনার বর্তমান পাসওয়ার্ড লিখুন।",
|
||||
"backup-success-msg": "সফলভাবে সম্পন্ন",
|
||||
"restore-success-msg": "কনফিগারেশন সফলভাবে পুনরুদ্ধার করা হয়েছে"
|
||||
},
|
||||
"menu": {
|
||||
"open-section-title": "খুলুন",
|
||||
"sametab": "বর্তমান ট্যাব",
|
||||
"newtab": "নতুন ট্যাব",
|
||||
"modal": "পপ-আপ মডেল",
|
||||
"workspace": "ওয়ার্কস্পেস ভিউ",
|
||||
"options-section-title": "বিকল্প",
|
||||
"edit-item": "সম্পাদনা করুন",
|
||||
"move-item": "অনুলিপি বা সরান",
|
||||
"remove-item": "মুছুন"
|
||||
},
|
||||
"context-menus": {
|
||||
"item": {
|
||||
"open-section-title": "খুলুন",
|
||||
"sametab": "বর্তমান ট্যাব",
|
||||
"newtab": "নতুন ট্যাব",
|
||||
"modal": "পপ-আপ মডেল",
|
||||
"workspace": "ওয়ার্কস্পেস ভিউ",
|
||||
"clipboard": "ক্লিপবোর্ডে কপি করুন",
|
||||
"options-section-title": "বিকল্প",
|
||||
"edit-item": "সম্পাদনা করুন",
|
||||
"move-item": "অনুলিপি বা সরান",
|
||||
"remove-item": "মুছুন",
|
||||
"copied-toast": "URL ক্লিপবোর্ডে অনুলিপি করা হয়েছে"
|
||||
},
|
||||
"section": {
|
||||
"open-section": "বিভাগ খুলুন",
|
||||
"edit-section": "সম্পাদনা করুন",
|
||||
"expand-collapse": "প্রসারিত/সংকোচন করুন",
|
||||
"move-section": "সরান-",
|
||||
"remove-section": "মুছুন"
|
||||
}
|
||||
},
|
||||
"interactive-editor": {
|
||||
"menu": {
|
||||
"start-editing-tooltip": "ইন্টারেক্টিভ এডিটর লিখুন",
|
||||
"edit-site-data-subheading": "সাইট ডেটা সম্পাদনা করুন",
|
||||
"edit-page-info-btn": "পৃষ্ঠার তথ্য সম্পাদনা করুন",
|
||||
"edit-page-info-tooltip": "অ্যাপের শিরোনাম, বর্ণনা, নেভি লিঙ্ক, ফুটার তথ্য ইত্যাদি।",
|
||||
"edit-app-config-btn": "অ্যাপ কনফিগারেশন সম্পাদনা করুন",
|
||||
"edit-app-config-tooltip": "অন্যান্য সমস্ত অ্যাপ কনফিগারেশন বিকল্প",
|
||||
"edit-pages-btn": "পৃষ্ঠাগুলি সম্পাদনা করুন",
|
||||
"edit-pages-tooltip": "অতিরিক্ত ভিউ যোগ করুন বা সরান",
|
||||
"config-save-methods-subheading": "কনফিগার সংরক্ষণের বিকল্প",
|
||||
"save-locally-btn": "স্থানীয়ভাবে সংরক্ষণ করুন",
|
||||
"save-locally-tooltip": "ব্রাউজার স্টোরেজে স্থানীয়ভাবে কনফিগারেশন সংরক্ষণ করুন। এটি আপনার কনফিগারেশন ফাইলকে প্রভাবিত করবে না, তবে পরিবর্তনগুলি শুধুমাত্র এই ডিভাইসে সংরক্ষিত হবে৷",
|
||||
"save-disk-btn": "ডিস্কে সংরক্ষণ করুন",
|
||||
"save-disk-tooltip": "ডিস্কের conf.yml ফাইলে কনফিগ সংরক্ষণ করুন। এটি ব্যাকআপ করবে এবং তারপরে আপনার বিদ্যমান কনফিগারেশনটি ওভার-রাইট করবে",
|
||||
"export-config-btn": "এক্সপোর্ট কনফিগ",
|
||||
"export-config-tooltip": "নতুন কনফিগারেশন দেখুন এবং রপ্তানি করুন, হয় একটি ফাইলে বা ক্লিপবোর্ডে",
|
||||
"cloud-backup-btn": "ক্লাউডে ব্যাকআপ",
|
||||
"cloud-backup-tooltip": "ক্লাউডে কনফিগারেশনের এনক্রিপ্ট করা ব্যাকআপ সংরক্ষণ করুন",
|
||||
"edit-raw-config-btn": "কাঁচা কনফিগারেশন সম্পাদনা করুন",
|
||||
"edit-raw-config-tooltip": "JSON সম্পাদকের মাধ্যমে কাঁচা কনফিগার দেখুন এবং সংশোধন করুন",
|
||||
"cancel-changes-btn": "সম্পাদনা বাতিল করুন",
|
||||
"cancel-changes-tooltip": "বর্তমান পরিবর্তনগুলি পুনরায় সেট করুন এবং সম্পাদনা মোড থেকে প্রস্থান করুন৷ এটি আপনার সংরক্ষিত কনফিগারেশনকে প্রভাবিত করবে না",
|
||||
"edit-mode-name": "সম্পাদনা প্রণালী",
|
||||
"edit-mode-subtitle": "আপনি সম্পাদনা মোডে আছেন৷",
|
||||
"edit-mode-description": "এর মানে হল আপনি আপনার কনফিগারেশনে পরিবর্তন করতে পারেন, এবং ফলাফলের পূর্বরূপ দেখতে পারেন, কিন্তু যতক্ষণ না আপনি সংরক্ষণ করছেন, আপনার কোনো পরিবর্তনই সংরক্ষিত হবে না।",
|
||||
"save-stage-btn": "সংরক্ষণ",
|
||||
"cancel-stage-btn": "বাতিল",
|
||||
"save-locally-warning": "আপনি যদি এগিয়ে যান, পরিবর্তনগুলি শুধুমাত্র আপনার ব্রাউজারেই সংরক্ষিত হবে৷ অন্যান্য মেশিনে ব্যবহারের জন্য আপনার কনফিগারেশনের একটি অনুলিপি রপ্তানি করা উচিত। আপনি কি অবিরত করতে চান?"
|
||||
},
|
||||
"edit-item": {
|
||||
"missing-title-err": "একটি আইটেম শিরোনাম প্রয়োজন"
|
||||
},
|
||||
"edit-section": {
|
||||
"edit-section-title": "বিভাগ সম্পাদনা করুন",
|
||||
"add-section-title": "নতুন বিভাগ যোগ করুন",
|
||||
"edit-tooltip": "সম্পাদনা করতে ক্লিক করুন, বা আরও বিকল্পের জন্য ডান-ক্লিক করুন",
|
||||
"remove-confirm": "আপনি কি এই বিভাগটি সরানোর বিষয়ে নিশ্চিত? এই ক্রিয়াটি পরে পূর্বাবস্থায় ফেরানো যেতে পারে।"
|
||||
},
|
||||
"edit-app-config": {
|
||||
"warning-msg-title": "সাবধানতার সাথে এগিয়ে যান",
|
||||
"warning-msg-l1": "নিম্নলিখিত বিকল্পগুলি উন্নত অ্যাপ কনফিগারেশনের জন্য।",
|
||||
"warning-msg-l2": "আপনি যদি কোনো ক্ষেত্র সম্পর্কে অনিশ্চিত হন, তাহলে অনুগ্রহ করে উল্লেখ করুন",
|
||||
"warning-msg-docs": "ডকুমেন্টেশন",
|
||||
"warning-msg-l3": "অনাকাঙ্ক্ষিত পরিণতি এড়াতে।"
|
||||
},
|
||||
"export": {
|
||||
"export-title": "এক্সপোর্ট কনফিগার",
|
||||
"copy-clipboard-btn": "ক্লিপবোর্ডে কপি করুন",
|
||||
"copy-clipboard-tooltip": "YAML ফর্ম্যাটে, সিস্টেম ক্লিপবোর্ডে সমস্ত অ্যাপ কনফিগারেশন কপি করুন",
|
||||
"download-file-btn": "ফাইল হিসাবে ডাউনলোড করুন",
|
||||
"download-file-tooltip": "একটি YAML ফাইলে আপনার ডিভাইসে সমস্ত অ্যাপ কনফিগারেশন ডাউনলোড করুন",
|
||||
"view-title": "কনফিগ দেখুন"
|
||||
}
|
||||
},
|
||||
"widgets": {
|
||||
"general": {
|
||||
"loading": "লোড হচ্ছে...",
|
||||
"show-more": "বিস্তারিত বিবরণ...",
|
||||
"show-less": "কম প্রদর্শন",
|
||||
"open-link": "পড়া চালিয়ে যান"
|
||||
},
|
||||
"pi-hole": {
|
||||
"status-heading": "অবস্থা"
|
||||
},
|
||||
"stat-ping": {
|
||||
"up": "অনলাইন",
|
||||
"down": "অফলাইন"
|
||||
},
|
||||
"net-data": {
|
||||
"cpu-chart-title": "CPU ইতিহাস",
|
||||
"mem-chart-title": "স্মৃতি ব্যবহার",
|
||||
"mem-breakdown-title": "স্মৃতি ভাঙ্গন",
|
||||
"load-chart-title": "সিস্টেম লোড"
|
||||
},
|
||||
"glances": {
|
||||
"disk-space-free": "মুক্ত",
|
||||
"disk-space-used": "ব্যবহৃত",
|
||||
"disk-mount-point": "পর্বত বিন্দু",
|
||||
"disk-file-system": "নথি ব্যবস্থা",
|
||||
"disk-io-read": "পড়ুন",
|
||||
"disk-io-write": "লিখুন",
|
||||
"system-load-desc": "রান-কিউতে অপেক্ষা করা প্রসেসের সংখ্যা, সমস্ত কোর জুড়ে গড়"
|
||||
},
|
||||
"system-info": {
|
||||
"uptime": "আপটাইম"
|
||||
},
|
||||
"flight-data": {
|
||||
"arrivals": "আগমন",
|
||||
"departures": "বহির্গমন"
|
||||
},
|
||||
"tfl-status": {
|
||||
"good-service-all": "সমস্ত লাইনে প্রস্থান ভাল পরিষেবা",
|
||||
"good-service-rest": "অন্যান্য সমস্ত লাইনে ভাল পরিষেবা"
|
||||
},
|
||||
"synology-download": {
|
||||
"download": "ডাউনলোড করুন",
|
||||
"upload": "আপলোড করুন",
|
||||
"downloaded": "ডাউনলোড করা হয়েছে",
|
||||
"uploaded": "আপলোড করা হয়েছে",
|
||||
"remaining": "অবশিষ্ট",
|
||||
"up": "উপরে",
|
||||
"down": "নিচে"
|
||||
},
|
||||
"gluetun-status": {
|
||||
"vpn-ip": "ভিপিএন আইপি",
|
||||
"country": "দেশ",
|
||||
"region": "অঞ্চল",
|
||||
"city": "শহর",
|
||||
"post-code": "পোস্ট কোড",
|
||||
"location": "অবস্থান",
|
||||
"timezone": "সময় অঞ্চল",
|
||||
"organization": "সংগঠন"
|
||||
},
|
||||
"nextcloud": {
|
||||
"active": "সক্রিয়",
|
||||
"and": "এবং",
|
||||
"applications": "অ্যাপ্লিকেশন",
|
||||
"available": "সুলভ",
|
||||
"away": "দূরে",
|
||||
"cache-full": "ক্যাশ পূর্ণ",
|
||||
"chat-room": "আড্ডাখানা",
|
||||
"delete-all": "সব মুছে ফেলুন",
|
||||
"delete-notification": "বিজ্ঞপ্তি মুছুন",
|
||||
"disabled": "অক্ষম",
|
||||
"disk-quota": "ডিস্ক কোটা",
|
||||
"disk-space": "ডিস্ক স্পেস",
|
||||
"dnd": "বিরক্ত করবেন না",
|
||||
"email": "ইমেইন",
|
||||
"enabled": "সক্রিয়",
|
||||
"federated-shares-ucfirst": "ফেডারেটেড শেয়ার",
|
||||
"federated-shares": "ফেডারেটেড শেয়ার",
|
||||
"files": "ফাইল{plural}",
|
||||
"free": "মুক্ত",
|
||||
"groups": "দলগুলো",
|
||||
"hit-rate": "লক্ষ্যভেদ হার",
|
||||
"hits": "লক্ষ্যভেদ",
|
||||
"home": "নীড়",
|
||||
"in": "ভিতরে",
|
||||
"keys": "চাবিগুলো",
|
||||
"last-24-hours": "গত ২৪ ঘন্টা",
|
||||
"last-5-minutes": "শেষ ৫ মিনিটে",
|
||||
"last-hour": "শেষ ঘন্টায়",
|
||||
"last-login": "শেষ লগইন",
|
||||
"last-restart": "শেষ রিস্টার্ট",
|
||||
"load-averages": "সমস্ত CPU কোরের উপর গড় লোড",
|
||||
"local-shares": "স্থানীয় শেয়ার",
|
||||
"local": "স্থানীয়",
|
||||
"max-keys": "সর্বোচ্চ চাবি",
|
||||
"memory-used": "স্মৃতি ব্যবহৃত",
|
||||
"memory-utilisation": "স্মৃতি সদ্ব্যবহার",
|
||||
"memory": "স্মৃতি",
|
||||
"misses": "হারানো",
|
||||
"no-notifications": "বিজ্ঞপ্তি নেই",
|
||||
"no-pending-updates": "কোন মুলতুবি হালনাগাদ নেই",
|
||||
"nothing-to-show": "এই সময়ে এখানে দেখানোর কিছু নেই",
|
||||
"of-which": "কোনটি",
|
||||
"of": "এর",
|
||||
"offline": "অফলাইন",
|
||||
"online": "অনলাইন",
|
||||
"other": "অন্যান্য",
|
||||
"overall": "সামগ্রিকভাবে",
|
||||
"private-link": "ব্যক্তিগত লিঙ্ক",
|
||||
"public-link": "সর্বজনীন লিঙ্ক",
|
||||
"quota-enabled": "এই ব্যবহারকারীর জন্য ডিস্ক কোটা {অ}সক্রিয় করা আছে",
|
||||
"received": "প্রাপ্ত",
|
||||
"scripts": "স্ক্রিপ্ট",
|
||||
"sent": "পাঠানো",
|
||||
"started": "শুরু হয়েছে",
|
||||
"storages-by-type": "প্রকার অনুসারে স্টোরেজ",
|
||||
"storages": "সঞ্চয়স্থান{গুলো}",
|
||||
"strings-use": "স্ট্রিং ব্যবহার",
|
||||
"tasks": "কাজ",
|
||||
"total-files": "মোট ফাইল",
|
||||
"total-users": "মোট ব্যবহারকারী",
|
||||
"total": "মোট",
|
||||
"until": "পর্যন্ত",
|
||||
"updates-available-for": "জন্য আপডেট উপলব্ধ",
|
||||
"updates-available": "আপডেট {গুলো} উপলব্ধ",
|
||||
"used": "ব্যবহৃত",
|
||||
"user": "ব্যবহারকারী",
|
||||
"using": "ব্যবহার",
|
||||
"version": "সংস্করণ",
|
||||
"wasted": "নষ্ট"
|
||||
}
|
||||
}
|
||||
}
|
||||
318
src/assets/locales/cs.json
Normal file
318
src/assets/locales/cs.json
Normal file
@@ -0,0 +1,318 @@
|
||||
{
|
||||
"home": {
|
||||
"no-results": "Žádné výslekdy vyhledávání",
|
||||
"no-data": "nejsou nakonfigurované žádné údaje",
|
||||
"no-items-section": "Nic k zobrazení"
|
||||
},
|
||||
"search": {
|
||||
"search-label": "Vyhledávání",
|
||||
"search-placeholder": "Pro filtrování začněte psát",
|
||||
"clear-search-tooltip": "Vymazat vyhledávání",
|
||||
"enter-to-search-web": "Stiskněte Enter pro vyhledávání ne webu"
|
||||
},
|
||||
"login": {
|
||||
"title": "Dashy",
|
||||
"username-label": "Uživatelské jméno",
|
||||
"password-label": "Heslo",
|
||||
"login-button": "Prihlásit se",
|
||||
"remember-me-label": "Zapamatuj si mě",
|
||||
"remember-me-never": "Nikdy",
|
||||
"remember-me-hour": "4 hodiny",
|
||||
"remember-me-day": "1 den",
|
||||
"remember-me-week": "1 týden",
|
||||
"remember-me-long-time": "Dlouhý čas",
|
||||
"error-missing-username": "Zadejte uživatelské jméno",
|
||||
"error-missing-password": "Zadejte heslo",
|
||||
"error-incorrect-username": "Uživatel nenalezen",
|
||||
"error-incorrect-password": "Nesprávne heslo",
|
||||
"success-message": "Přihlašování...",
|
||||
"logout-message": "Byli jste odhlášeni",
|
||||
"already-logged-in-title": "Již přihlášen",
|
||||
"already-logged-in-text": "Přihlášen jako",
|
||||
"proceed-to-dashboard": "Pokračujte na Dashboard",
|
||||
"log-out-button": "Odhlásit se",
|
||||
"proceed-guest-button": "Pokračovat jako host"
|
||||
},
|
||||
"config": {
|
||||
"main-tab": "Hlavní menu",
|
||||
"view-config-tab": "Zobrazit konfiguraci",
|
||||
"edit-config-tab": "Upravit konfiguraci",
|
||||
"custom-css-tab": "Vlastní styly",
|
||||
"heading": "Možnosti konfigurace",
|
||||
"download-config-button": "Zobrazit / Exportovat konfiguraci",
|
||||
"edit-config-button": "Upravit konfiguraci",
|
||||
"edit-css-button": "Upravit vlastní CSS",
|
||||
"cloud-sync-button": "Povolit synchronizaci s cloudem",
|
||||
"edit-cloud-sync-button": "Upravit synchronizaci s cloudem",
|
||||
"rebuild-app-button": "Přestavit aplikaci",
|
||||
"change-language-button": "Změnit jazyk aplikacie",
|
||||
"reset-settings-button": "Obnovit místní nastavení",
|
||||
"app-info-button": "Informace o aplikaci",
|
||||
"backup-note": "Před vykonaním změn je doporučeno vytvorit zálohu vaší konfigurace.",
|
||||
"reset-config-msg-l1": "Toto odstraní všechna uživatelská nastavení z lokálního úložiště, ale neovlyvní to váš soubor 'conf.yml'.",
|
||||
"reset-config-msg-l2": "Všechny změny, které jste vykonali lokálně, byste si měli co nejdříve zálohovat, pokud je chcete použít v budoucnosti.",
|
||||
"reset-config-msg-l3": "Opravdu chcete pokračovat?",
|
||||
"data-cleared-msg": "Údaje byly úspěšne vymazány",
|
||||
"actions-label": "Akce",
|
||||
"copy-config-label": "Kopírovat konfiguraci",
|
||||
"data-copied-msg": "Konfigurace byla zkopírována do schránky",
|
||||
"reset-config-label": "Obnovit konfiguraci",
|
||||
"css-save-btn": "Uložit změny",
|
||||
"css-note-label": "Poznámka",
|
||||
"css-note-l1": "Aby se změny projevily, budete muset obnoviť stránku.",
|
||||
"css-note-l2": "Vlastní přepsání stylů se ukladá pouze lokálně, proto se doporučuje vytvorit kopii vašeho CSS.",
|
||||
"css-note-l3": "Pokud chcete odstraniť všechny vlastní styly, odstraňte obsah a stiskněte 'Uložit zmeny'"
|
||||
},
|
||||
"alternate-views": {
|
||||
"alternate-view-heading": "Přepnout zobrazení",
|
||||
"default": "Výchozí",
|
||||
"workspace": "Pracovná prostor",
|
||||
"minimal": "Minimalistické"
|
||||
},
|
||||
"settings": {
|
||||
"theme-label": "Téma",
|
||||
"layout-label": "Rozložení",
|
||||
"layout-auto": "Automaticky",
|
||||
"layout-horizontal": "Horizontální",
|
||||
"layout-vertical": "Vertikální",
|
||||
"item-size-label": "Velikost položky",
|
||||
"item-size-small": "Malá",
|
||||
"item-size-medium": "Střední",
|
||||
"item-size-large": "Velká",
|
||||
"config-launcher-label": "Konfigurace",
|
||||
"config-launcher-tooltip": "Aktualizovať konfiguraci",
|
||||
"sign-out-tooltip": "Odhlásit se",
|
||||
"sign-in-tooltip": "Přihlásit se",
|
||||
"sign-in-welcome": "Dobrý den, {username}!"
|
||||
},
|
||||
"updates": {
|
||||
"app-version-note": "Dashy verze",
|
||||
"up-to-date": "Aktuální",
|
||||
"out-of-date": "Aktualizace k dispozici",
|
||||
"unsupported-version-l1": "Používate nepodporovanou verzi Dashy",
|
||||
"unsupported-version-l2": "Pokud chcete získat nejlepší zážitek a nejnovější opravy zabezpečení, aktualizujte na"
|
||||
},
|
||||
"language-switcher": {
|
||||
"title": "Změnit jazyk aplikace",
|
||||
"dropdown-label": "Vyberte jazyk",
|
||||
"save-button": "Uložit",
|
||||
"success-msg": "Jazyk byl aktualizován na"
|
||||
},
|
||||
"theme-maker": {
|
||||
"title": "Konfigurátor motivů",
|
||||
"export-button": "Exportovať vlastní proměnné",
|
||||
"reset-button": "Obnoviť styly pro",
|
||||
"show-all-button": "Zobrazit všechny proměnné",
|
||||
"change-fonts-button": "Změnit písmo",
|
||||
"save-button": "Uložit",
|
||||
"cancel-button": "Zrušiť",
|
||||
"saved-toast": "{theme} úspěšně aktualizováno",
|
||||
"copied-toast": "Údaje motivu pro {theme} byly zkopírovany do schránky",
|
||||
"reset-toast": "Vlastní barvy pro {theme} byly odstraněny"
|
||||
},
|
||||
"config-editor": {
|
||||
"save-location-label": "Uložit umístění",
|
||||
"location-local-label": "Aplikovať lokálně",
|
||||
"location-disk-label": "Zapsat změny do konfiguračního souboru",
|
||||
"save-button": "Uložit změny",
|
||||
"preview-button": "Ukázka změn",
|
||||
"valid-label": "Konfigurace je platná",
|
||||
"status-success-msg": "Akce dokončena",
|
||||
"status-fail-msg": "Akce selhala",
|
||||
"success-msg-disk": "Konfigurační soubor byl úspěšně zapsán na disk",
|
||||
"success-msg-local": "Místní změny byly úspěšne uloženy",
|
||||
"success-note-l1": "Aplikace by se měla automaticky obnovit.",
|
||||
"success-note-l2": "Můýe to trvat až minutu.",
|
||||
"success-note-l3": "Aby se změny projevily, budete museť obnovit stránku.",
|
||||
"error-msg-save-mode": "Vyberte režim uložení: Místní/Soubor",
|
||||
"error-msg-cannot-save": "Při ukládání konfigurace se vyskytla chyba",
|
||||
"error-msg-bad-json": "Chyba v JSON, možná má nesprávny formát",
|
||||
"warning-msg-validation": "Chyba validace",
|
||||
"not-admin-note": "Nemůžete zapisovat změny na disk, protože nejste přihlášený/á jako správca"
|
||||
},
|
||||
"app-rebuild": {
|
||||
"title": "Přestavit aplikaci",
|
||||
"rebuild-note-l1": "Aby se změny zapsané do souboru conf.yml projevily, je potřebné přestavení aplikace.",
|
||||
"rebuild-note-l2": "Aplikace by se měla automaticky přestavit, ale pokud se tak nestalo, můžete přestavená spustiť manuálně zde.",
|
||||
"rebuild-note-l3": "Přestavení se nevyžaduje pro lokálně uložené úpravy.",
|
||||
"rebuild-button": "Spustit přestavení",
|
||||
"rebuilding-status-1": "Přestavování...",
|
||||
"rebuilding-status-2": "Může to trvat pár minut",
|
||||
"error-permission": "Na spuštení této akce nemáte oprávnění",
|
||||
"success-msg": "Přestavení bylo úspěšne dokončeno",
|
||||
"fail-msg": "Přestavení selhalo",
|
||||
"reload-note": "Aby se změny projevily, je nutné obnovit stránku",
|
||||
"reload-button": "Obnovit stránku"
|
||||
},
|
||||
"cloud-sync": {
|
||||
"title": "Cloud záloha a obnova",
|
||||
"intro-l1": "Cloudové zálohovaní a obnovení je volitelná funkce, která Vám umožňuje nahrát vaší konfiguraci na cloudové ulžiště a potom ji obnovit na jakémkoliv jiném zařízení anebo instanci Dashy.",
|
||||
"intro-l2": "Všechny údaje jsou end-to-end šifrované pomocí AES, pričemž jako klíč se používá Vaše heslo.",
|
||||
"intro-l3": "Více informací nájdete na",
|
||||
"backup-title-setup": "Vytvořit zálohu",
|
||||
"backup-title-update": "Aktualizovat zálohu",
|
||||
"password-label-setup": "Vytvořte heslo pro cloud",
|
||||
"password-label-update": "Zadajte heslo pro cloud",
|
||||
"backup-button-setup": "Záloha",
|
||||
"backup-button-update": "Aktualizovat zálohu",
|
||||
"backup-id-label": "ID zálohy",
|
||||
"backup-id-note": "Toto ID se používá pro obnovení ze zálohy. ID si spolu s heslem uschovejte na bezpečném místě.",
|
||||
"restore-title": "Obnovit zálohu",
|
||||
"restore-id-label": "Obnovit ID",
|
||||
"restore-password-label": "Heslo",
|
||||
"restore-button": "Obnovit",
|
||||
"backup-missing-password": "Chybý heslo",
|
||||
"backup-error-unknown": "Není možné zpracovat požadavek.",
|
||||
"backup-error-password": "Nesprávne heslo.",
|
||||
"backup-success-msg": "Záloha úspěšně dokončena.",
|
||||
"restore-success-msg": "Záloha byla úspěšně obnovena"
|
||||
},
|
||||
"menu": {
|
||||
"open-section-title": "Otevřít v",
|
||||
"sametab": "Aktuální karta",
|
||||
"newtab": "Nová karta",
|
||||
"modal": "Modální okno",
|
||||
"workspace": "Zobrazení pracovního prostoru",
|
||||
"options-section-title": "Možnosti",
|
||||
"edit-item": "Upravit",
|
||||
"move-item": "Kopírovat nebo přesunout",
|
||||
"remove-item": "Odstranit"
|
||||
},
|
||||
"context-menus": {
|
||||
"item": {
|
||||
"open-section-title": "Otevřít v",
|
||||
"sametab": "Aktuální karta",
|
||||
"newtab": "Nová karta",
|
||||
"modal": "Modální okno",
|
||||
"workspace": "Zobrazení pracovního prostoru",
|
||||
"clipboard": "Kopírovat do schránky",
|
||||
"options-section-title": "Možnosti",
|
||||
"edit-item": "Upravit",
|
||||
"move-item": "Kopírovat nebo přesunout",
|
||||
"remove-item": "Odstranit",
|
||||
"copied-toast": "URL adresa byla zkopírována do schránky"
|
||||
},
|
||||
"section": {
|
||||
"open-section": "Otevřená sekce",
|
||||
"edit-section": "Upravit",
|
||||
"expand-collapse": "Rozbalit / sbaliť",
|
||||
"move-section": "Přesunout do",
|
||||
"remove-section": "Odstranit"
|
||||
}
|
||||
},
|
||||
"interactive-editor": {
|
||||
"menu": {
|
||||
"start-editing-tooltip": "Otevřít interaktivní editor",
|
||||
"edit-site-data-subheading": "Upravit informace o stránkách",
|
||||
"edit-page-info-btn": "Upravit informáce o stránce",
|
||||
"edit-page-info-tooltip": "Název aplikace, popis, navigační odkazy, text patičky atd.",
|
||||
"edit-app-config-btn": "Upravit konfiguraci aplikace",
|
||||
"edit-app-config-tooltip": "Ostatné možnosti konfigurace aplikace",
|
||||
"edit-pages-btn": "Upravit stránky",
|
||||
"edit-pages-tooltip": "Přidat nebo odebrat další zobrazení",
|
||||
"config-save-methods-subheading": "Možnosti uložení konfigurace",
|
||||
"save-locally-btn": "Uložit lokálně",
|
||||
"save-locally-tooltip": "Uložit konfiguraci lokálně do úložiště prohlížeče. Toto neovlivní váš konfigurační soubor, ale změny se uloží poute na tomto zařízení",
|
||||
"save-disk-btn": "Uložit na disk",
|
||||
"save-disk-tooltip": "Uloží konfiguraci do souboru conf.yml na disku. Tím se zálohuje a potom sa přepíše vaše existující konfigurace",
|
||||
"export-config-btn": "Exportovat konfiguraci",
|
||||
"export-config-tooltip": "Zobrazit a exportovat novou konfiguraci, buď do souboru nebo do schránky",
|
||||
"cloud-backup-btn": "Zálohovat do cloudu",
|
||||
"cloud-backup-tooltip": "Uložit šifrovanou zálohu konfigurace do cloudu",
|
||||
"edit-raw-config-btn": "Upravit nezpracovanou konfiguraci",
|
||||
"edit-raw-config-tooltip": "Zobrazit a upravit surovou konfiguraci za pomoci editoru JSON",
|
||||
"cancel-changes-btn": "Zrušit úpravu",
|
||||
"cancel-changes-tooltip": "Resetujte aktuální úpravy a ukončíte režim úprav. Toto neovlivní vaši uloženou konfiguraci",
|
||||
"edit-mode-name": "Režim úprav",
|
||||
"edit-mode-subtitle": "Nacházíte se v režimu úprav",
|
||||
"edit-mode-description": "To znamená, že můžete vykonat úpravy ve své konfiguraci a zobrazit ukázku výsledků, ale pokud neuložíte, žádná z vašich změn se nezachová.",
|
||||
"save-stage-btn": "Uložit",
|
||||
"cancel-stage-btn": "Zrušit",
|
||||
"save-locally-warning": "Když budete pokračovat, změny se uloží pouze ve vašem prohlížeči. Měli by ste exportovat kopii své konfigurace pro použití na jiných zařízeních. Chcete pokračovat?"
|
||||
},
|
||||
"edit-item": {
|
||||
"missing-title-err": "Vyžaduje se název položky"
|
||||
},
|
||||
"edit-section": {
|
||||
"edit-section-title": "Upravit sekci",
|
||||
"add-section-title": "Přidat novou sekci",
|
||||
"edit-tooltip": "Kliknutím levým tlačítkem myši upravíte, kliknutím pravým tlačátkem myši zobrazíte další možnosti",
|
||||
"remove-confirm": "Opravdu chcete odstranit tuto sekci? Tuto akci není možné vrátit."
|
||||
},
|
||||
"edit-app-config": {
|
||||
"warning-msg-title": "Postupujte opatrně",
|
||||
"warning-msg-l1": "Nasledující možnosti jsou pro rozšířenou konfiguraci aplikace.",
|
||||
"warning-msg-l2": "Pokud si nejste jistí některým z polí, uveďte odkaz",
|
||||
"warning-msg-docs": "Dokuemntace",
|
||||
"warning-msg-l3": "Aby se předešlo neúmyslným následkům."
|
||||
},
|
||||
"export": {
|
||||
"export-title": "Exportovat konfiguraci",
|
||||
"copy-clipboard-btn": "Kopírovať do schránky",
|
||||
"copy-clipboard-tooltip": "Kopírovať všechny konfigurace aplikace do systémové schránky ve formátu YAML",
|
||||
"download-file-btn": "Stáhnout jako soubor",
|
||||
"download-file-tooltip": "Stáhnout všechny konfigurace aplikace do svého zažízení v souboru YAML",
|
||||
"view-title": "Zobrazit konfiguraci"
|
||||
}
|
||||
},
|
||||
"widgets": {
|
||||
"general": {
|
||||
"loading": "Načítání...",
|
||||
"show-more": "Rozbalit podrobnosti",
|
||||
"show-less": "Zobrazit méně",
|
||||
"open-link": "Pokračovať ve čtení"
|
||||
},
|
||||
"pi-hole": {
|
||||
"status-heading": "Stav"
|
||||
},
|
||||
"stat-ping": {
|
||||
"up": "Online",
|
||||
"down": "Offline"
|
||||
},
|
||||
"net-data": {
|
||||
"cpu-chart-title": "Historie CPU",
|
||||
"mem-chart-title": "Využití paměti",
|
||||
"mem-breakdown-title": "Selhání paměti",
|
||||
"load-chart-title": "Zatížení systému"
|
||||
},
|
||||
"glances": {
|
||||
"disk-space-free": "Volno",
|
||||
"disk-space-used": "Použito",
|
||||
"disk-mount-point": "Mount Point",
|
||||
"disk-file-system": "Systém souborů",
|
||||
"disk-io-read": "Čtení",
|
||||
"disk-io-write": "Zápis",
|
||||
"system-load-desc": "Počet procesů čekajících ve frontě spuštění, zprůměrovaný ve všech jádrech"
|
||||
},
|
||||
"system-info": {
|
||||
"uptime": "Čas provozu"
|
||||
},
|
||||
"flight-data": {
|
||||
"arrivals": "Přílety",
|
||||
"departures": "Odlety"
|
||||
},
|
||||
"tfl-status": {
|
||||
"good-service-all": "Dobré služby na všech linkách",
|
||||
"good-service-rest": "Dobré služby na všech ostatních linkách"
|
||||
},
|
||||
"synology-download": {
|
||||
"download": "Stáhnout",
|
||||
"upload": "Nahrat",
|
||||
"downloaded": "Stáhnuto",
|
||||
"uploaded": "Nahráno",
|
||||
"remaining": "Zbývající",
|
||||
"up": "Aktivní",
|
||||
"down": "Neaktivní"
|
||||
},
|
||||
"gluetun-status": {
|
||||
"vpn-ip": "IP VPN",
|
||||
"country": "Země",
|
||||
"region": "Region",
|
||||
"city": "Město",
|
||||
"post-code": "PSČ",
|
||||
"location": "Poloha",
|
||||
"timezone": "Časové pásmo",
|
||||
"organization": "Organizace"
|
||||
}
|
||||
}
|
||||
}
|
||||
389
src/assets/locales/da.json
Normal file
389
src/assets/locales/da.json
Normal file
@@ -0,0 +1,389 @@
|
||||
{
|
||||
"home": {
|
||||
"no-results": "Ingen søgeresultater",
|
||||
"no-data": "Ingen data konfigureret",
|
||||
"no-items-section": "Ingen genstander at vise endnu"
|
||||
},
|
||||
"search": {
|
||||
"search-label": "Søg",
|
||||
"search-placeholder": "Begynd at skrive for at filtrere",
|
||||
"clear-search-tooltip": "Ryd søgning",
|
||||
"enter-to-search-web": "Tryk på enter for at søge på nettet"
|
||||
},
|
||||
"login": {
|
||||
"title": "Dashy",
|
||||
"username-label": "Brugernavn",
|
||||
"password-label": "Adgangskode",
|
||||
"login-button": "Login",
|
||||
"remember-me-label": "Husk mig for",
|
||||
"remember-me-never": "aldrig",
|
||||
"remember-me-hour": "4 timer",
|
||||
"remember-me-day": "1 dag",
|
||||
"remember-me-week": "1 uge",
|
||||
"remember-me-long-time": "en lang tid",
|
||||
"error-missing-username": "Mangler brugernavn",
|
||||
"error-missing-password": "Manglende adgangskode",
|
||||
"error-incorrect-username": "Bruger ikke fundet",
|
||||
"error-incorrect-password": "Forkert kodeord",
|
||||
"success-message": "Logger ind...",
|
||||
"logout-message": "Logget ud",
|
||||
"already-logged-in-title": "Allerede logget ind",
|
||||
"already-logged-in-text": "Du er logget ind som",
|
||||
"proceed-to-dashboard": "Fortsæt til dashboard",
|
||||
"log-out-button": "Log ud",
|
||||
"proceed-guest-button": "Fortsæt som gæst"
|
||||
},
|
||||
"config": {
|
||||
"main-tab": "Hovedmenu",
|
||||
"view-config-tab": "Se konfiguration",
|
||||
"edit-config-tab": "Rediger konfiguration",
|
||||
"custom-css-tab": "Brugerdefinerede styles",
|
||||
"heading": "Konfigurationsmuligheder",
|
||||
"download-config-button": "Se/eksportér konfiguration",
|
||||
"edit-config-button": "Rediger konfiguration",
|
||||
"edit-css-button": "Rediger tilpasset CSS",
|
||||
"cloud-sync-button": "Aktiver Cloud Sync",
|
||||
"edit-cloud-sync-button": "Aktiver Cloud Sync",
|
||||
"rebuild-app-button": "Genopbyg applikation",
|
||||
"change-language-button": "Skift app-sprog",
|
||||
"reset-settings-button": "Nulstil lokale indstillinger",
|
||||
"app-info-button": "App Info",
|
||||
"backup-note": "Det anbefales at lave en sikkerhedskopi af din konfiguration, før du foretager ændringer.",
|
||||
"reset-config-msg-l1": "Dette vil fjerne alle brugerindstillinger fra local storage, men vil ikke påvirke din 'conf.yml'-fil.",
|
||||
"reset-config-msg-l2": "Du bør først sikkerhedskopiere eventuelle ændringer, du har foretaget lokalt, hvis du vil bruge dem i fremtiden.",
|
||||
"reset-config-msg-l3": "Er du sikker på at du vil fortsætte?",
|
||||
"data-cleared-msg": "Data blev succesfuldt ryddet",
|
||||
"actions-label": "Handlinger",
|
||||
"copy-config-label": "Kopiera Config",
|
||||
"data-copied-msg": "Konfigurationen er blevet kopieret til clipboard",
|
||||
"reset-config-label": "Nulstil konfiguration",
|
||||
"css-save-btn": "Gem ændringer",
|
||||
"css-note-label": "Bemærk",
|
||||
"css-note-l1": "Du skal opdatere siden for at dine ændringer træder i kraft.",
|
||||
"css-note-l2": "Styles overrides opbevares kun lokalt, så det anbefales at lave en kopi af din CSS.",
|
||||
"css-note-l3": "For at fjerne alle custom styles skal du slette indholdet og trykke på Gem ændringer"
|
||||
},
|
||||
"alternate-views": {
|
||||
"alternate-view-heading": "Skift visning",
|
||||
"default": "Standard",
|
||||
"workspace": "Workspace",
|
||||
"minimal": "Minimal"
|
||||
},
|
||||
"settings": {
|
||||
"theme-label": "Tema",
|
||||
"layout-label": "Layout",
|
||||
"layout-auto": "Auto",
|
||||
"layout-horizontal": "Vandret",
|
||||
"layout-vertical": "Lodret",
|
||||
"item-size-label": "Varestørrelse",
|
||||
"item-size-small": "Small",
|
||||
"item-size-medium": "Medium",
|
||||
"item-size-large": "Large",
|
||||
"config-launcher-label": "Konfiguration",
|
||||
"config-launcher-tooltip": "Opdater konfiguration",
|
||||
"sign-out-tooltip": "Log ud",
|
||||
"sign-in-tooltip": "Log in",
|
||||
"sign-in-welcome": "Hej {username}!"
|
||||
},
|
||||
"updates": {
|
||||
"app-version-note": "Dashy version",
|
||||
"up-to-date": "Opdatert",
|
||||
"out-of-date": "Opdatering tilgængelig",
|
||||
"unsupported-version-l1": "Du bruger en ikke-understøttet version af Dashy",
|
||||
"unsupported-version-l2": "For den bedste oplevelse og de seneste sikkerhedsrettelser skal du opdatere til"
|
||||
},
|
||||
"language-switcher": {
|
||||
"title": "Skift applikationssprog",
|
||||
"dropdown-label": "Valg en sprog",
|
||||
"save-button": "Gemme",
|
||||
"success-msg": "Sprog opdateret til"
|
||||
},
|
||||
"theme-maker": {
|
||||
"title": "Temakonfigurator",
|
||||
"export-button": "Eksporter tilpassede variabler",
|
||||
"reset-button": "Nulstil styles for",
|
||||
"show-all-button": "Vis alle variabler",
|
||||
"change-fonts-button": "Skift skrifttyper",
|
||||
"save-button": "Gemme",
|
||||
"cancel-button": "Ophæve",
|
||||
"saved-toast": "{theme} opdateret med succes",
|
||||
"copied-toast": "Temadata for {theme} kopieret til udklipsholder",
|
||||
"reset-toast": "Tilpassede farver for {theme} fjernet"
|
||||
},
|
||||
"config-editor": {
|
||||
"save-location-label": "Gemme beliggenhed",
|
||||
"location-local-label": "Anbringe lokalt",
|
||||
"location-disk-label": "Skriv ændringer til konfigurationsfil",
|
||||
"save-button": "Gemme ændringer",
|
||||
"preview-button": "Forhåndsvisning af ændringer",
|
||||
"valid-label": "Konfigurationen er gyldig",
|
||||
"status-success-msg": "Opgave fuldført",
|
||||
"status-fail-msg": "Opgave mislykkedes",
|
||||
"success-msg-disk": "Konfigurationsfilen er skrevet til disken",
|
||||
"success-msg-local": "Lokale ændringer blev gemt",
|
||||
"success-note-l1": "Appen skal genopbygges automatisk.",
|
||||
"success-note-l2": "Dette kan tage op til et minut.",
|
||||
"success-note-l3": "Du skal opdatere siden for at ændringerne træder i kraft.",
|
||||
"error-msg-save-mode": "Vælg venligst en gemtilstand: Lokal eller Fil",
|
||||
"error-msg-cannot-save": "Der opstod en fejl under lagring af konfiguration",
|
||||
"error-msg-bad-json": "Fejl i JSON, muligvis forkert udformet",
|
||||
"warning-msg-validation": "Valideringsadvarsel",
|
||||
"not-admin-note": "Du kan ikke skrive ændringer til disk, fordi du ikke er logget ind som admin"
|
||||
},
|
||||
"app-rebuild": {
|
||||
"title": "Genopbyg applikation",
|
||||
"rebuild-note-l1": "En genopbygning er påkrævet, for at ændringer skrevet til conf.yml-filen kan træde i kraft.",
|
||||
"rebuild-note-l2": "Dette skulle ske automatisk, men hvis det ikke er tilfældet, kan du manuelt udløse det her.",
|
||||
"rebuild-note-l3": "Dette er ikke nødvendigt for ændringer, der er gemt lokalt.",
|
||||
"rebuild-button": "Start byg",
|
||||
"rebuilding-status-1": "Bygger...",
|
||||
"rebuilding-status-2": "Dette kan tage et par minutter",
|
||||
"error-permission": "Du har ikke tilladelse til at udløse denne handling",
|
||||
"success-msg": "Byg fuldført med succes",
|
||||
"fail-msg": "Byggehandling mislykkedes",
|
||||
"reload-note": "Der kræves nu en genindlæsning af siden, for at ændringer kan træde i kraft",
|
||||
"reload-button": "Genindlæs siden"
|
||||
},
|
||||
"cloud-sync": {
|
||||
"title": "Cloud sikkerhedskopiering og gendannelse",
|
||||
"intro-l1": "Cloud sikkerhedskopiering og gendannelse er en valgfri funktion, der gør det muligt for dig at uploade din konfiguration til internettet og derefter gendanne den på en hvilken som helst anden enhed eller forekomst af Dashy.",
|
||||
"intro-l2": "Alle data er fuldstændigt end-to-end krypteret med AES, ved at bruge din adgangskode som nøglen.",
|
||||
"intro-l3": "For mere information, se venligst",
|
||||
"backup-title-setup": "Lav en sikkerhedskopi",
|
||||
"backup-title-update": "Opdater sikkerhedskopiering",
|
||||
"password-label-setup": "Vælg et kodeord",
|
||||
"password-label-update": "Skriv dit kodeord",
|
||||
"backup-button-setup": "Sikkerhedskopiering",
|
||||
"backup-button-update": "Opdater sikkerhedskopiering",
|
||||
"backup-id-label": "Din sikkerhedskopi-ID",
|
||||
"backup-id-note": "Dette bruges til at gendanne fra sikkerhedskopier senere. Så gem det sammen med din adgangskode et sikkert sted.",
|
||||
"restore-title": "Gendan en sikkerhedskopi",
|
||||
"restore-id-label": "Gendan-ID",
|
||||
"restore-password-label": "Kodeord",
|
||||
"restore-button": "Gendan",
|
||||
"backup-missing-password": "Manglende adgangskode",
|
||||
"backup-error-unknown": "Kan ikke behandle anmodningen",
|
||||
"backup-error-password": "Forkert kodeord. Indtast venligst din nuværende adgangskode.",
|
||||
"backup-success-msg": "Afsluttet med succes",
|
||||
"restore-success-msg": "Konfiguration gendan med succes"
|
||||
},
|
||||
"menu": {
|
||||
"open-section-title": "Åbn i",
|
||||
"sametab": "Aktuel fane",
|
||||
"newtab": "Ny fane",
|
||||
"modal": "Pop-Up Modal",
|
||||
"workspace": "Arbejdsrumsvisning",
|
||||
"options-section-title": "Muligheder",
|
||||
"edit-item": "Redigere",
|
||||
"move-item": "Kopier eller flyt",
|
||||
"remove-item": "Fjerne"
|
||||
},
|
||||
"context-menus": {
|
||||
"item": {
|
||||
"open-section-title": "Åbn i",
|
||||
"sametab": "Aktuel fane",
|
||||
"newtab": "Ny fane",
|
||||
"modal": "Pop-Up modal",
|
||||
"workspace": "Arbejdsrumsvisning",
|
||||
"clipboard": "Kopier til udklipsholder",
|
||||
"options-section-title": "Muligheder",
|
||||
"edit-item": "Redigere",
|
||||
"move-item": "Kopier eller flyt",
|
||||
"remove-item": "Fjerne",
|
||||
"copied-toast": "URL er blevet kopieret til udklipsholder"
|
||||
},
|
||||
"section": {
|
||||
"open-section": "Åbn sektion",
|
||||
"edit-section": "Redigere",
|
||||
"expand-collapse": "Udvid / Skjul",
|
||||
"move-section": "Flytte til",
|
||||
"remove-section": "Fjerne"
|
||||
}
|
||||
},
|
||||
"interactive-editor": {
|
||||
"menu": {
|
||||
"start-editing-tooltip": "Gå ind i den interaktive editor",
|
||||
"edit-site-data-subheading": "Rediger webstedsdata",
|
||||
"edit-page-info-btn": "Rediger sideoplysninger",
|
||||
"edit-page-info-tooltip": "Apptitel, beskrivelse, navigationslinks, sidefodstekst osv.",
|
||||
"edit-app-config-btn": "Redigere appkonfiguration",
|
||||
"edit-app-config-tooltip": "Alle andre appkonfigurationsmuligheder",
|
||||
"edit-pages-btn": "Redigere sider",
|
||||
"edit-pages-tooltip": "Tilføj eller fjern yderligere visninger",
|
||||
"config-save-methods-subheading": "Indstillinger for lagring af konfiguration",
|
||||
"save-locally-btn": "Gemme lokalt",
|
||||
"save-locally-tooltip": "Gem konfigurationen lokalt i browserlageret. Dette vil ikke påvirke din konfigurationsfil, men ændringer vil kun blive gemt på denne enhed",
|
||||
"save-disk-btn": "Gemme til disk",
|
||||
"save-disk-tooltip": "Gem konfigurationen i filen conf.yml på disken. Dette vil sikkerhedskopiere og derefter overskrive din eksisterende konfiguration",
|
||||
"export-config-btn": "Exportere konfiguration",
|
||||
"export-config-tooltip": "Se og eksporter ny konfiguration, enten til en fil eller til udklipsholder",
|
||||
"cloud-backup-btn": "Sikkerhedskopier til cloud",
|
||||
"cloud-backup-tooltip": "Gem krypteret backup af konfiguration til cloud",
|
||||
"edit-raw-config-btn": "Rediger rå konfiguration",
|
||||
"edit-raw-config-tooltip": "Se og rediger rå config via JSON-editor",
|
||||
"cancel-changes-btn": "Avbryd redigering",
|
||||
"cancel-changes-tooltip": "Nulstil aktuelle ændringer, og afslut redigeringstilstand. Dette vil ikke påvirke din gemte konfiguration",
|
||||
"edit-mode-name": "Redigeringstilstand",
|
||||
"edit-mode-subtitle": "Du er i redigeringstilstand",
|
||||
"edit-mode-description": "Det betyder, at du kan foretage ændringer i din konfiguration og se resultaterne, men indtil du gemmer, vil ingen af dine ændringer blive bevaret.",
|
||||
"save-stage-btn": "Gemme",
|
||||
"cancel-stage-btn": "Avbryd",
|
||||
"save-locally-warning": "Hvis du fortsætter, vil ændringer kun blive gemt i din browser. Du bør eksportere en kopi af din konfiguration til brug på andre maskiner. Vil du fortsætte?"
|
||||
},
|
||||
"edit-item": {
|
||||
"missing-title-err": "En varetitel er påkrævet"
|
||||
},
|
||||
"edit-section": {
|
||||
"edit-section-title": "Redigere sektion",
|
||||
"add-section-title": "Tilføj ny sektion",
|
||||
"edit-tooltip": "Klik for at redigere, eller højreklik for at få flere muligheder",
|
||||
"remove-confirm": "Er du sikker på, at du vil fjerne denne sektion? Denne handling kan fortrydes senere."
|
||||
},
|
||||
"edit-app-config": {
|
||||
"warning-msg-title": "Fortsæt med forsigtighed",
|
||||
"warning-msg-l1": "Følgende muligheder er for avanceret appkonfiguration.",
|
||||
"warning-msg-l2": "Hvis du er usikker på nogle af felterne, bedes du henvise til",
|
||||
"warning-msg-docs": "dokumentation",
|
||||
"warning-msg-l3": "for at undgå utilsigtede konsekvenser."
|
||||
},
|
||||
"export": {
|
||||
"export-title": "Eksporter konfiguration",
|
||||
"copy-clipboard-btn": "Kopier til udklipsholder",
|
||||
"copy-clipboard-tooltip": "Kopier alle app-konfigurationer til systemets udklipsholder i YAML-format",
|
||||
"download-file-btn": "Download som fil",
|
||||
"download-file-tooltip": "Download alle appkonfigurationer til din enhed i en YAML-fil",
|
||||
"view-title": "Se konfiguration"
|
||||
}
|
||||
},
|
||||
"widgets": {
|
||||
"general": {
|
||||
"loading": "Indlæser...",
|
||||
"show-more": "Udvid detaljer",
|
||||
"show-less": "Vis mindre",
|
||||
"open-link": "Fortsæt med at læse"
|
||||
},
|
||||
"pi-hole": {
|
||||
"status-heading": "Status"
|
||||
},
|
||||
"stat-ping": {
|
||||
"up": "Online",
|
||||
"down": "Offline"
|
||||
},
|
||||
"net-data": {
|
||||
"cpu-chart-title": "CPU-historie",
|
||||
"mem-chart-title": "Hukommelsesbrug",
|
||||
"mem-breakdown-title": "Hukommelsesnedbrydning",
|
||||
"load-chart-title": "Systeminlæsning"
|
||||
},
|
||||
"glances": {
|
||||
"disk-space-free": "Ledig",
|
||||
"disk-space-used": "I bruk",
|
||||
"disk-mount-point": "Mount Point",
|
||||
"disk-file-system": "Filsystem",
|
||||
"disk-io-read": "Læs",
|
||||
"disk-io-write": "Skrive",
|
||||
"system-load-desc": "Antal processer, der venter i køen, beregnet i gennemsnit på tværs af alle kerner"
|
||||
},
|
||||
"system-info": {
|
||||
"uptime": "Uptime"
|
||||
},
|
||||
"flight-data": {
|
||||
"arrivals": "Ankomster",
|
||||
"departures": "Afganger"
|
||||
},
|
||||
"tfl-status": {
|
||||
"good-service-all": "God service på alle linjer",
|
||||
"good-service-rest": "God service på alle andre linjer"
|
||||
},
|
||||
"synology-download": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"downloaded": "Downloaded",
|
||||
"uploaded": "Uploaded",
|
||||
"remaining": "Tilbage",
|
||||
"up": "Op",
|
||||
"down": "Ned"
|
||||
},
|
||||
"gluetun-status": {
|
||||
"vpn-ip": "VPN IP",
|
||||
"country": "Land",
|
||||
"region": "Område",
|
||||
"city": "By",
|
||||
"post-code": "Postnummer",
|
||||
"location": "Sted",
|
||||
"timezone": "Tidszone",
|
||||
"organization": "Organisation"
|
||||
},
|
||||
"nextcloud": {
|
||||
"active": "aktiv",
|
||||
"and": "og",
|
||||
"applications": "applikationer",
|
||||
"available": "ledig",
|
||||
"away": "Væk",
|
||||
"cache-full": "CACHE FULL",
|
||||
"chat-room": "chattrum",
|
||||
"delete-all": "Slet alt",
|
||||
"delete-notification": "Slet notifikation",
|
||||
"disabled": "avaktivert",
|
||||
"disk-quota": "Diskkvot",
|
||||
"disk-space": "Diskudrymme",
|
||||
"dnd": "Forstyr ikke",
|
||||
"email": "email",
|
||||
"enabled": "aktivert",
|
||||
"federated-shares-ucfirst": "Fødereret deler",
|
||||
"federated-shares": "fødereret deler",
|
||||
"files": "fil{plural}",
|
||||
"free": "fri",
|
||||
"groups": "grupper",
|
||||
"hit-rate": "træffefrekvens",
|
||||
"hits": "træffe",
|
||||
"home": "hjem",
|
||||
"in": "in",
|
||||
"keys": "keys",
|
||||
"last-24-hours": "sidste 24 timer",
|
||||
"last-5-minutes": "i de sidste 5 minutter",
|
||||
"last-hour": "i den sidste time",
|
||||
"last-login": "Sidste login",
|
||||
"last-restart": "Sidste genstart",
|
||||
"load-averages": "Belastningsgennemsnit over alle CPU-kerner",
|
||||
"local-shares": "Lokale deler",
|
||||
"local": "lokal",
|
||||
"max-keys": "max keys",
|
||||
"memory-used": "brugt hukommelse",
|
||||
"memory-utilisation": "hukommelsesudnyttelse",
|
||||
"memory": "hukommelse",
|
||||
"misses": "misses",
|
||||
"no-notifications": "Ingen meddelelser",
|
||||
"no-pending-updates": "ingen afventende opdateringer",
|
||||
"nothing-to-show": "Intet at vise her på nuværende tidspunkt",
|
||||
"of-which": "af hvilken",
|
||||
"of": "af",
|
||||
"offline": "Offline",
|
||||
"online": "Online",
|
||||
"other": "andet",
|
||||
"overall": "Samlet set",
|
||||
"private-link": "privat link",
|
||||
"public-link": "publik link",
|
||||
"quota-enabled": "Diskkvote er {not} aktiveret for denne bruger",
|
||||
"received": "modtaget",
|
||||
"scripts": "scripts",
|
||||
"sent": "sendt",
|
||||
"started": "Startede",
|
||||
"storages-by-type": "Opbevaring efter type",
|
||||
"storages": "Opbevaring{plural}",
|
||||
"strings-use": "strings brug",
|
||||
"tasks": "Opgaver",
|
||||
"total-files": "samlede filer",
|
||||
"total-users": "samlede bruger",
|
||||
"total": "total",
|
||||
"until": "Så længe",
|
||||
"updates-available-for": "Opdateringer er tilgængelige for",
|
||||
"updates-available": "opdatering{plural} tilgængelig",
|
||||
"used": "brugd",
|
||||
"user": "bruger",
|
||||
"using": "ved brug af",
|
||||
"version": "version",
|
||||
"wasted": "spildt"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,13 +2,15 @@
|
||||
"home":
|
||||
{
|
||||
"no-results": "keine Suchergebnisse",
|
||||
"no-data": "keine Daten konfiguriert"
|
||||
"no-data": "keine Daten konfiguriert",
|
||||
"no-items-section": "Noch keine Elemente zum Anzeigen"
|
||||
},
|
||||
"search":
|
||||
{
|
||||
"search-label": "Suche",
|
||||
"search-placeholder": "Tippen um zu filtern",
|
||||
"clear-search-tooltip": "Suchfeld leeren"
|
||||
"clear-search-tooltip": "Suchfeld leeren",
|
||||
"enter-to-search-web": "Drücke Enter um das Internet zu durchsuchen"
|
||||
},
|
||||
"login":
|
||||
{
|
||||
@@ -20,7 +22,19 @@
|
||||
"remember-me-never": "Niemals",
|
||||
"remember-me-hour": "4 Stunden",
|
||||
"remember-me-day": "1 Tag",
|
||||
"remember-me-week": "1 Woche"
|
||||
"remember-me-week": "1 Woche",
|
||||
"remember-me-long-time": "Eine lange Zeit",
|
||||
"error-missing-username": "Benutzername fehlt",
|
||||
"error-missing-password": "Passwort fehlt",
|
||||
"error-incorrect-username": "Benutzer nicht gefunden",
|
||||
"error-incorrect-password": "Falsches Passwort",
|
||||
"success-message": "Anmeldung läuft...",
|
||||
"logout-message": "Abgemeldet",
|
||||
"already-logged-in-title": "Bereits angemeldet",
|
||||
"already-logged-in-text": "Angemeldet als",
|
||||
"proceed-to-dashboard": "Zum Dashboard fortfahren",
|
||||
"log-out-button": "Abmelden",
|
||||
"proceed-guest-button": "Als Gast fortfahren"
|
||||
},
|
||||
"config":
|
||||
{
|
||||
@@ -32,11 +46,11 @@
|
||||
"download-config-button": "Konfigurationsdownload",
|
||||
"edit-config-button": "Konfiguration bearbeiten",
|
||||
"edit-css-button": "CSS bearbeiten",
|
||||
"cloud-sync-button": "Cloud-Synchronisation aktiveren",
|
||||
"cloud-sync-button": "Cloud-Synchronisation aktivieren",
|
||||
"edit-cloud-sync-button": "Cloud-Synchronisation bearbeiten",
|
||||
"rebuild-app-button": "Anwendung neu kompilieren",
|
||||
"change-language-button": "App-Sprache ändern",
|
||||
"reset-settings-button": "Einstellungen zurücksetzen",
|
||||
"reset-settings-button": "lokale Einstellungen zurücksetzen",
|
||||
"app-info-button": "App Informationen",
|
||||
"backup-note": "Es wird empfohlen ein Backup der Konfiguration zu erstellen bevor Änderungen durchgeführt werden.",
|
||||
"reset-config-msg-l1": "Dadurch werden alle Benutzereinstellungen aus dem lokalen Speicher entfernt, dies hat jedoch keine Auswirkungen auf Ihre Datei 'conf.yml'.",
|
||||
@@ -46,13 +60,19 @@
|
||||
"actions-label": "Aktionen",
|
||||
"copy-config-label": "Konfiguration kopieren",
|
||||
"data-copied-msg": "Konfiguration wurde in die Zwischenablage kopiert",
|
||||
"reset-config-label": "Konfiguration zurücksetzten",
|
||||
"reset-config-label": "Konfiguration zurücksetzen",
|
||||
"css-save-btn": "Änderungen speichern",
|
||||
"css-note-label": "Bemerkung",
|
||||
"css-note-l1": "Sie müssen die Seite aktualisieren, damit Ihre Änderungen wirksam werden.",
|
||||
"css-note-l2": "Stilüberschreibungen werden nur lokal gespeichert, daher wird empfohlen vorher eine Kopie Ihres CSS zu erstellen.",
|
||||
"css-note-l3": "Um alle benutzerdefinierten Stile zu entfernen löschen Sie den Inhalt und klicken Sie auf Änderungen speichern."
|
||||
},
|
||||
"alternate-views": {
|
||||
"alternate-view-heading": "Ansicht wechseln",
|
||||
"default": "Standard",
|
||||
"workspace": "Arbeitsplatz",
|
||||
"minimal": "Minimal"
|
||||
},
|
||||
"settings":
|
||||
{
|
||||
"theme-label": "Design",
|
||||
@@ -64,7 +84,11 @@
|
||||
"item-size-small": "klein",
|
||||
"item-size-medium": "mittel",
|
||||
"item-size-large": "groß",
|
||||
"config-launcher-label": "Konfiguration"
|
||||
"config-launcher-label": "Konfiguration",
|
||||
"config-launcher-tooltip": "Konfiguration aktualisieren",
|
||||
"sign-out-tooltip": "Abmelden",
|
||||
"sign-in-tooltip": "Anmelden",
|
||||
"sign-in-welcome": "Hallo {username}!"
|
||||
},
|
||||
"updates":
|
||||
{
|
||||
@@ -87,6 +111,7 @@
|
||||
"export-button": "Benutzerdefinierte Variablen exportieren",
|
||||
"reset-button": "CSS zurücksetzen für",
|
||||
"show-all-button": "Alle Variablen anzeigen",
|
||||
"change-fonts-button": "Schriftart ändern",
|
||||
"save-button": "Speichern",
|
||||
"cancel-button": "Abbrechen",
|
||||
"saved-toast": "{theme} wurde erfolgreich aktualisiert",
|
||||
@@ -96,9 +121,10 @@
|
||||
"config-editor":
|
||||
{
|
||||
"save-location-label": "Speicherort",
|
||||
"location-local-label": "Lokal",
|
||||
"location-local-label": "Lokal anwenden",
|
||||
"location-disk-label": "Änderungen in die Konfigurationsdatei schreiben",
|
||||
"save-button": "Änderungen speichern",
|
||||
"preview-button": "Vorschau der Änderungen",
|
||||
"valid-label": "Syntax ist gültig",
|
||||
"status-success-msg": "Aufgabe abgeschlossen",
|
||||
"status-fail-msg": "Aufgabe fehlgeschlagen",
|
||||
@@ -108,9 +134,10 @@
|
||||
"success-note-l2": "Dies kann bis zu einer Minute dauern.",
|
||||
"success-note-l3": "Sie müssen die Seite aktualisieren damit die Änderungen wirksam werden.",
|
||||
"error-msg-save-mode": "Bitte wählen Sie einen Speichermodus: Lokal oder Datei",
|
||||
"error-msg-cannot-save": "Beim speichern der Konfiguration ist ein Fehler aufgetreten",
|
||||
"error-msg-cannot-save": "Beim Speichern der Konfiguration ist ein Fehler aufgetreten",
|
||||
"error-msg-bad-json": "Fehler in JSON-Daten, möglicherweise fehlerhafter Syntax",
|
||||
"warning-msg-validation": "Validierungswarnung"
|
||||
"warning-msg-validation": "Validierungswarnung",
|
||||
"not-admin-note": "Änderungen können nicht auf die Festplatte gespeichert werden, da Sie nicht als Administrator angemeldet sind"
|
||||
},
|
||||
"app-rebuild":
|
||||
{
|
||||
@@ -124,14 +151,14 @@
|
||||
"error-permission": "Sie sind nicht berechtigt diese Aktion auszulösen",
|
||||
"success-msg": "Kompilierung erfolgreich abgeschlossen",
|
||||
"fail-msg": "Kompilierung fehlgeschlagen",
|
||||
"reload-note": "Ein neu laden der Seite ist erforderlich damit die Änderungen wirksam werden.",
|
||||
"reload-note": "Ein neu Laden der Seite ist erforderlich, damit die Änderungen wirksam werden.",
|
||||
"reload-button": "Seite neu laden"
|
||||
},
|
||||
"cloud-sync":
|
||||
{
|
||||
"title": "Cloud Backup & Wiederherstellung",
|
||||
"intro-l1": "Cloud-Backup und Wiederherstellung ist eine optionale Funktion mit der Sie Ihre Konfiguration in das Internet hochladen und dann auf einem anderen Gerät oder einer anderen Dashy-Instanz wiederherstellen können.",
|
||||
"intro-l2": "Alle Daten sind vollständig Ende-zu-Ende mit AES verschlüsselt. Ihr Passwort wird als Schlüssel verwendet wird.",
|
||||
"intro-l2": "Alle Daten sind vollständig Ende-zu-Ende mit AES verschlüsselt. Ihr Passwort wird als Schlüssel verwendet.",
|
||||
"intro-l3": "Weitere Informationen finden Sie im",
|
||||
"backup-title-setup": "Backup erstellen",
|
||||
"backup-title-update": "Backup aktualisieren",
|
||||
@@ -139,7 +166,7 @@
|
||||
"password-label-update": "Passwort eingeben",
|
||||
"backup-button-setup": "Backup",
|
||||
"backup-button-update": "Backup aktualisieren",
|
||||
"backup-id-label": "Deine Backup ID",
|
||||
"backup-id-label": "Ihre Backup ID",
|
||||
"backup-id-note": "Diese wird zusammen mit dem Passwort benötigt um Ihr Backup wiederherzustellen. Bewahren Sie sie zusammen mit Ihrem Passwort an einem sicheren Ort auf.",
|
||||
"restore-title": "Backup wiederherstellen",
|
||||
"restore-id-label": "ID wiederherstellen",
|
||||
@@ -147,7 +174,7 @@
|
||||
"restore-button": "Wiederherstellen",
|
||||
"backup-error-unknown": "Anfrage kann nicht verarbeitet werden",
|
||||
"backup-error-password": "Falsches Passwort. Bitte geben Sie Ihr aktuelles Passwort ein.",
|
||||
"backup-success-msg": "Erfolgreich beendet",
|
||||
"backup-success-msg": "Erfolgreich abgeschlossen",
|
||||
"restore-success-msg": "Konfiguration erfolgreich wiederhergestellt"
|
||||
},
|
||||
"menu":
|
||||
@@ -195,29 +222,29 @@
|
||||
"edit-site-data-subheading": "Seiteninformationen bearbeiten",
|
||||
"edit-page-info-btn": "Seiteninformationen bearbeiten",
|
||||
"edit-page-info-tooltip": "Applikationstitel, Beschreibung, Nav. links, Fußzeile, etc.",
|
||||
"edit-app-config-btn": "Applikatioonskonfiguration bearbeiten",
|
||||
"edit-app-config-btn": "Applikationskonfiguration bearbeiten",
|
||||
"edit-app-config-tooltip": "Alle anderen Konfigurationsoptionen",
|
||||
"edit-pages-btn": "Seiten bearbeiten",
|
||||
"edit-pages-tooltip": "Hinzufügen oder entfernen von zusätzlichen Ansichten",
|
||||
"config-save-methods-subheading": "Speicheroptionen der Konfiguration",
|
||||
"save-locally-btn": "Lokal speichern",
|
||||
"save-locally-tooltip": "Konfiguration lokal im Browser speichern. Dies hat keinen Einfluß auf di Konfigurationsdatei, aber Änderungen werden nur in diesem Browser gespeichert",
|
||||
"save-locally-tooltip": "Konfiguration lokal im Browser speichern. Dies hat keinen Einfluss auf die Konfigurationsdatei, aber Änderungen werden nur in diesem Browser gespeichert",
|
||||
"save-disk-btn": "Auf Festplatte speichern",
|
||||
"save-disk-tooltip": "Konfigurationsdatei conf.yml speichern. Dies erzeugt ein Backup und überschreibt dann die existierende Konfigurationsdatei",
|
||||
"export-config-btn": "Konfiguration exportieren",
|
||||
"export-config-tooltip": "Konfiguration anzeigen und exportieren, entweder in eine Datei oder in die Zwischenablage",
|
||||
"cloud-backup-btn": "Cloud-Backup starten",
|
||||
"cloud-backup-tooltip": "Speichert ein verrscglüsseltes Backup in die Cloud",
|
||||
"cloud-backup-tooltip": "Speichert ein verrschlüsseltes Backup in die Cloud",
|
||||
"edit-raw-config-btn": "Konfiguration als Rohdaten bearbeiten",
|
||||
"edit-raw-config-tooltip": "Anzeigen und bearbeiten der Konfiguration als Rohdaten im JSON-Editor",
|
||||
"cancel-changes-btn": "Verwerfen",
|
||||
"cancel-changes-tooltip": "Modifikationen zurücksetzen und Beenden. Dies hat keinen Einfluß auf die Konfigurationsdatei",
|
||||
"cancel-changes-tooltip": "Modifikationen zurücksetzen und Bearbeitungsmodus schließen. Dies hat keinen Einfluss auf die Konfigurationsdatei",
|
||||
"edit-mode-name": "Bearbeitung",
|
||||
"edit-mode-subtitle": "Du bist im Bearbeitungsmodus",
|
||||
"edit-mode-description": "Das bedeutet es Änderungen an der Konfigurationsdatei durchgeführt werden. Änderungen können vor dem Speichern betrachtet werden.",
|
||||
"edit-mode-subtitle": "Sie sind im Bearbeitungsmodus",
|
||||
"edit-mode-description": "Das bedeutet, dass Änderungen an der Konfigurationsdatei vorgenommen werden können. Änderungen können vor dem Speichern betrachtet werden.",
|
||||
"save-stage-btn": "Speichern",
|
||||
"cancel-stage-btn": "Abbrechen",
|
||||
"save-locally-warning": "Wenn du fortfährst werden die Änderungen nur in deinem Browser gespeichert. Um die Konfiguration auf anderen Geräten zu nutzen solltest du sie exportieren. Möchtest du fortfahren?"
|
||||
"save-locally-warning": "Wenn Sie fortfahren werden die Änderungen nur in Ihrem Browser gespeichert. Um die Konfiguration auf anderen Geräten zu nutzen sollten Sie sie exportieren. Möchten Sie fortfahren?"
|
||||
},
|
||||
"edit-item":
|
||||
{
|
||||
@@ -228,21 +255,21 @@
|
||||
"edit-section-title": "Sektion bearbeiten",
|
||||
"add-section-title": "Neue Sektion hinzufügen",
|
||||
"edit-tooltip": "Klicken zum Bearbeiten oder Rechtsklick für weitere Optionen",
|
||||
"remove-confirm": "Sind Sie sicher das sie diese Sektion entfernen möchten? Diese Aktion kann nicht rückgänging gemacht werden."
|
||||
"remove-confirm": "Sind Sie sicher, dass sie diese Sektion entfernen möchten? Diese Aktion kann nicht rückgänging gemacht werden."
|
||||
},
|
||||
"edit-app-config":
|
||||
{
|
||||
"warning-msg-title": "Ab hier ist Vorsicht geboten",
|
||||
"warning-msg-l1": "Die folgenden Optionen sind für fortgeschrittene Konfigurationen.",
|
||||
"warning-msg-l2": "Sollten Felder unklar sein konultieren Sie die",
|
||||
"warning-msg-l2": "Sollten Felder unklar sein, konsultieren Sie die",
|
||||
"warning-msg-docs": "Dokumentation",
|
||||
"warning-msg-l3": "um unerwartetes größtmöglich zu vermeiden."
|
||||
"warning-msg-l3": "um unbeabsichtigte Folgen zu vermeiden."
|
||||
},
|
||||
"export":
|
||||
{
|
||||
"export-title": "Konfiguration exportieren",
|
||||
"copy-clipboard-btn": "In Zwischenablage kopieren",
|
||||
"copy-clipboard-tooltip": "Applikationskonfiguration, als YAML, in Zwischenablage kopieren",
|
||||
"copy-clipboard-tooltip": "Applikationskonfiguration als YAML in Zwischenablage kopieren",
|
||||
"download-file-btn": "Datei herunterladen",
|
||||
"download-file-tooltip": "Applikationskonfiguration auf Ihr Gerät herunterladen",
|
||||
"view-title": "Konfiguration anzeigen"
|
||||
@@ -270,7 +297,7 @@
|
||||
{
|
||||
"cpu-chart-title": "CPU Historie",
|
||||
"mem-chart-title": "Speichernutzung",
|
||||
"mem-breakdown-title": "Speichernutzunbg",
|
||||
"mem-breakdown-title": "Speichernutzung",
|
||||
"load-chart-title": "Systemlast"
|
||||
},
|
||||
"glances":
|
||||
@@ -278,7 +305,7 @@
|
||||
"disk-space-free": "Frei",
|
||||
"disk-space-used": "Genutzt",
|
||||
"disk-mount-point": "Mount Punkt",
|
||||
"disk-file-system": "Dateisyste,",
|
||||
"disk-file-system": "Dateisystem,",
|
||||
"disk-io-read": "Lesen",
|
||||
"disk-io-write": "Schreiben",
|
||||
"system-load-desc": "Prozesse in Warteschlange. (Durchschnitt aller Kerne)"
|
||||
@@ -301,12 +328,23 @@
|
||||
{
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"downloaded": "Downloaded",
|
||||
"uploaded": "Uploaded",
|
||||
"downloaded": "Heruntergeladen",
|
||||
"uploaded": "Hochgeladen",
|
||||
"remaining": "Verbleibend",
|
||||
"up": "Hoch",
|
||||
"down": "Runter"
|
||||
},
|
||||
"gluetun-status":
|
||||
{
|
||||
"vpn-ip": "VPN IP",
|
||||
"country": "Land",
|
||||
"region": "Bundesland",
|
||||
"city": "Stadt",
|
||||
"post-code": "Postleitzahl",
|
||||
"location": "Standort",
|
||||
"timezone": "Zeitzone",
|
||||
"organization": "Organisation"
|
||||
},
|
||||
"nextcloud":
|
||||
{
|
||||
"active": "Aktiv",
|
||||
@@ -335,7 +373,7 @@
|
||||
"in": "in",
|
||||
"keys": "Schlüssel",
|
||||
"last-24-hours": "Letzte 24 Stunden",
|
||||
"last-5-minutes": "in den letzte 5 Minuten",
|
||||
"last-5-minutes": "in den letzten 5 Minuten",
|
||||
"last-hour": "in der letzten Stunde",
|
||||
"last-login": "Letzte Anmeldung",
|
||||
"last-restart": "Letzter Neustart",
|
||||
@@ -368,7 +406,7 @@
|
||||
"strings-use": "Strings benutzen",
|
||||
"tasks": "Aufgaben",
|
||||
"total-files": "Dateien gesamt",
|
||||
"total-users": "Bneutzer gesamt",
|
||||
"total-users": "Benutzer gesamt",
|
||||
"total": "Insgesamt",
|
||||
"until": "Bis",
|
||||
"updates-available-for": "Aktualisierungen sind verfügbar für",
|
||||
|
||||
366
src/assets/locales/el.json
Normal file
366
src/assets/locales/el.json
Normal file
@@ -0,0 +1,366 @@
|
||||
{
|
||||
"home": {
|
||||
"no-results": "Δεν βρέθηκαν αποτελέσματα αναζήτησης",
|
||||
"no-data": "Δεν έχουν διαμορφωθεί δεδομένα",
|
||||
"no-items-section": "Δεν υπάρχουν ακόμα στοιχεία προς εμφάνιση"
|
||||
},
|
||||
"search": {
|
||||
"search-label": "Αναζήτηση",
|
||||
"search-placeholder": "Ξεκινήστε να πληκτρολογείτε για να φιλτράρετε",
|
||||
"clear-search-tooltip": "Εκκαθάριση Αναζήτησης",
|
||||
"enter-to-search-web": "Πατήστε enter για αναζήτηση στον ιστό"
|
||||
},
|
||||
"splash-screen": {
|
||||
"loading": "Φόρτωση"
|
||||
},
|
||||
"login": {
|
||||
"title": "Dashy",
|
||||
"guest-label": "Πρόσβαση Επισκέπτη",
|
||||
"username-label": "Όνομα χρήστη",
|
||||
"password-label": "Κωδικός πρόσβασης",
|
||||
"login-button": "Σύνδεση",
|
||||
"remember-me-label": "Να με θυμάσαι για",
|
||||
"remember-me-never": "Ποτέ",
|
||||
"remember-me-hour": "4 Ωρες",
|
||||
"remember-me-day": "1 Ημέρα",
|
||||
"remember-me-week": "1 Εβδομάδα",
|
||||
"remember-me-long-time": "Πολύ καιρό",
|
||||
"error-missing-username": "Λείπει το όνομα χρήστη",
|
||||
"error-missing-password": "Λείπει ο κωδικός πρόσβασης",
|
||||
"error-incorrect-username": "Ο χρήστης δεν βρέθηκε",
|
||||
"error-incorrect-password": "Λάθος κωδικός πρόσβασης",
|
||||
"success-message": "Γίνεται σύνδεση...",
|
||||
"logout-message": "Εγινε αποσύνδεση",
|
||||
"already-logged-in-title": "Εχετε ήδη συνδεθεί",
|
||||
"already-logged-in-text": "Εχετε συνδεθεί ως",
|
||||
"proceed-to-dashboard": "Μεταβείτε στον Πίνακα Ελέγχου",
|
||||
"log-out-button": "Αποσύνδεση",
|
||||
"proceed-guest-button": "Συνεχίστε ως επισκέπτης",
|
||||
"guest-intro-1": "Η πρόσβαση για επισκέπτες είναι ενεργοποιημένη.",
|
||||
"guest-intro-2": "Οι επισκέπτες έχουν πρόσβαση μόνο για προβολή στα dashboards και δεν μπορούν να γράφουν αλλαγές στον δίσκο.",
|
||||
"error": "Σφάλμα",
|
||||
"error-no-user-configured": "Ο έλεγχος ταυτότητας δεν είναι ενεργοποιημένος ή δεν έχουν δημιουργηθεί χρήστες",
|
||||
"error-go-home-button": "Μετάβαση στην αρχική σελίδα",
|
||||
"logged-in-guest": "Συνδεθήκατε ως επισκέπτης. Γίνεται ανακατεύθυνση...",
|
||||
"error-guest-access": "Δεν Επιτρέπεται η Πρόσβαση Επισκέπτη"
|
||||
},
|
||||
"app-info": {
|
||||
"title": "Πληροφορίες Εφαρμογής",
|
||||
"error-log": "Αρχείο Καταγραφής Σφαλμάτων",
|
||||
"no-errors": "Δεν εντοπίστηκαν πρόσφατα σφάλματα",
|
||||
"help-support": "Βοήθεια & Υποστήριξη",
|
||||
"help-support-description" : "Για να λάβετε υποστήριξη σχετικά με την εκτέλεση ή με τη διαμόρφωση του Dashy, ανατρέξτε στις",
|
||||
"help-support-discussions": "Συζητήσεις",
|
||||
"support-dashy": "Υποστήριξη του Dashy",
|
||||
"support-dashy-description": "Για τρόπους με τους οποίους μπορείτε να συνεισφέρετε, ανατρέξτε στη",
|
||||
"support-dashy-link": "Σελίδα συνεισφορών",
|
||||
"report-bug": "Αναφέρετε Πρόβλημα",
|
||||
"report-bug-description": "Αν πιστεύετε ότι έχετε βρει κάποιο σφάλμα, τότε παρακαλείστε να",
|
||||
"report-bug-link": "υποβάλετε μια Αναφορά",
|
||||
"more-info": "Περισσότερες Πληροφορίες",
|
||||
"source": "Κώδικας",
|
||||
"documentation": "Τεκμηρίωση",
|
||||
"privacy-and-security": "Απόρρητο & Ασφάλεια",
|
||||
"privacy-and-security-l1": "Για μια ανάλυση του τρόπου διαχείρισης των δεδομένων σας από τον Dashy, ανατρέξτε στην",
|
||||
"privacy-and-security-privacy-policy": "Πολιτική Απορρήτου",
|
||||
"app-info.privacy-and-security-advice": "Για συμβουλές σχετικά με την ασφάλεια του dashboard σας, μπορείτε να ανατρέξετε στα",
|
||||
"app-info.privacy-and-security-advice-link": "Εγγραφα Διαχείρισης",
|
||||
"privacy-and-security-security-issue": "Αν έχετε εντοπίσει κάποιο πιθανό ζήτημα ασφαλείας, αναφέρετέ το ακολουθώντας την",
|
||||
"privacy-and-security-security-policy": "Πολιτική Ασφαλείας",
|
||||
"license": "Αδεια",
|
||||
"license-under": "Άδεια χρήσης σύμφωνα με την",
|
||||
"licence-third-party": "Για άδειες χρήσης δομοστοιχείων λογισμικού τρίτων, ανατρέξτε στο",
|
||||
"licence-third-party-link": "Νομικό Πλαίσιο",
|
||||
"list-contributors": "Για την πλήρη λίστα των συντελεστών και ευχαριστιών, ανατρέξτε στις",
|
||||
"list-contributors-link": "Ευχαριστίες",
|
||||
"version": "Εκδοση"
|
||||
},
|
||||
"config": {
|
||||
"main-tab": "Βασικό Μενού",
|
||||
"view-config-tab": "Προβολή Διαμόρφωσης",
|
||||
"edit-config-tab": "Επεξεργασία Διαμόρφωσης",
|
||||
"custom-css-tab": "Προσαρμοσμένα Styles",
|
||||
"heading": "Επιλογές Διαμόρφωσης",
|
||||
"download-config-button": "Προβολή / Εξαγωγή διαμόρφωσης",
|
||||
"edit-config-button": "Επεξεργασία διαμόρφωσης",
|
||||
"edit-css-button": "Επεξεργασία Προσαρμοσμένου CSS",
|
||||
"cloud-sync-button": "Ενεργοποίηση Συγχρονισμού με Cloud",
|
||||
"edit-cloud-sync-button": "Επεξεργασία Ρυθμίσεων Συγχρονισμού Cloud",
|
||||
"rebuild-app-button": "Ανακατασκευή Εφαρμογής",
|
||||
"change-language-button": "Αλλαγή Γλώσσας Εφαρμογής",
|
||||
"reset-settings-button": "Επαναφορά Τοπικών Ρυθμίσεων",
|
||||
"disabled-note": "Ορισμένες δυνατότητες διαμόρφωσης έχουν απενεργοποιηθεί από τον διαχειριστή σας",
|
||||
"small-screen-note": "Η ανάλυση της οθόνης σας είναι πολύ μικρή και ορισμένα στοιχεία αυτού το μενού ενδέχεται να μην εμφανίζονται σωστά",
|
||||
"app-info-button": "Πληροφορίες εφαρμογής",
|
||||
"backup-note": "Συνιστάται να δημιουργήσετε ένα αντίγραφο ασφαλείας της διαμόρφωσής σας πριν κάνετε αλλαγές.",
|
||||
"reset-config-msg-l1": "Αυτό θα καταργήσει όλες τις ρυθμίσεις χρήστη από τον τοπικό χώρο αποθήκευσης, αλλά δεν θα επηρεάσει το αρχείο conf.yml.",
|
||||
"reset-config-msg-l2": "Θα πρέπει πρώτα να δημιουργήσετε αντίγραφα ασφαλείας για τυχούσες αλλαγές που έχετε κάνει τοπικά, αν θέλετε να είναι διαθέσιμες για μελλοντική χρήση.",
|
||||
"reset-config-msg-l3": "Είστε βέβαιοι ότι θέλετε να συνεχίσετε;",
|
||||
"data-cleared-msg": "Τα δεδομένα εκκαθαρίστηκαν με επιτυχία",
|
||||
"actions-label": "Ενέργειες",
|
||||
"copy-config-label": "Αντιγραφή διαμόρφωσης",
|
||||
"data-copied-msg": "Η διαμόρφωση έχει αντιγραφεί στο πρόχειρο",
|
||||
"reset-config-label": "Επαναφορά Διαμόρφωσης",
|
||||
"css-save-btn": "Αποθήκευση Αλλαγών",
|
||||
"css-note-label": "Σημείωση",
|
||||
"css-note-l1": "Θα χρειαστεί να ανανεώσετε τη σελίδα για να τεθούν σε ισχύ οι αλλαγές σας.",
|
||||
"css-note-l2": "Οι παρακάμψεις των styles αποθηκεύονται μόνο τοπικά, επομένως συνιστάται να δημιουργήσετε ένα αντίγραφο του CSS σας.",
|
||||
"css-note-l3": "Για να καταργήσετε όλα τα προσαρμοσμένα στυλ, διαγράψτε τα περιεχόμενα και πατήστε Αποθήκευση Αλλαγών",
|
||||
"custom-css": {
|
||||
"title": "Προσαρμοσμένο CSS",
|
||||
"base-theme": "Βασικό Θέμα"
|
||||
}
|
||||
},
|
||||
"alternate-views": {
|
||||
"alternate-view-heading": "Εναλλαγή Προβολής",
|
||||
"default": "Προκαθορισμένη",
|
||||
"workspace": "Χώρου Εργασίας",
|
||||
"minimal": "Μινιμαλιστική"
|
||||
},
|
||||
"settings": {
|
||||
"theme-label": "Θέμα",
|
||||
"layout-label": "Διάταξη",
|
||||
"layout-auto": "Αυτόματη",
|
||||
"layout-horizontal": "Οριζόντια",
|
||||
"layout-vertical": "Κατακόρυφη",
|
||||
"item-size-label": "Μέγεθος Αντικειμένων",
|
||||
"item-size-small": "Μικρό",
|
||||
"item-size-medium": "Μεσαίο",
|
||||
"item-size-large": "Μεγάλο",
|
||||
"config-launcher-label": "Διαμόρφωση",
|
||||
"config-launcher-tooltip": "Ενημέρωση Διαμόρφωσης",
|
||||
"sign-out-tooltip": "Αποσύνδεση",
|
||||
"sign-in-tooltip": "Σύνδεση",
|
||||
"sign-in-welcome": "Γεια σου {username}!",
|
||||
"hide": "Απόκρυψη",
|
||||
"open": "Ανοιγμα"
|
||||
},
|
||||
"updates": {
|
||||
"app-version-note": "Dashy έκδοση",
|
||||
"up-to-date": "Ενημερωμένη",
|
||||
"out-of-date": "Διαθέσιμη Ενημέρωση",
|
||||
"unsupported-version-l1": "Χρησιμοποιείτε μια μη υποστηριζόμενη έκδοση του Dashy",
|
||||
"unsupported-version-l2": "Για την καλύτερη εμπειρία χρήσης και για να διασφαλίσετε ότι έχετε τις πιο πρόσφατες ενημερώσεις ασφαλείας, αναβαθμίστε σε"
|
||||
},
|
||||
"language-switcher": {
|
||||
"title": "Αλλαγή Γλώσσας Εφαρμογής",
|
||||
"dropdown-label": "Επιλέξτε μια Γλώσσα",
|
||||
"save-button": "Αποθήκευση",
|
||||
"success-msg": "Η γλώσσα άλλαξε σε"
|
||||
},
|
||||
"theme-maker": {
|
||||
"title": "Διαμορφωτής Θέματος",
|
||||
"export-button": "Εξαγωγή προσαρμοσμένων μεταβλητών",
|
||||
"reset-button": "Επαναφορά στυλ για",
|
||||
"show-all-button": "Εμφάνιση όλων των μεταβλητών",
|
||||
"change-fonts-button": "Αλλαγή Γραμματοσειρών",
|
||||
"save-button": "Αποθήκευση",
|
||||
"cancel-button": "Ακύρωση",
|
||||
"saved-toast": "{theme} Ενημερώθηκε Επιτυχώς",
|
||||
"copied-toast": "Τα δεδομένα θέματος για το {theme} αντιγράφηκαν στο πρόχειρο",
|
||||
"reset-toast": "Τα προσαρμοσμένα χρώματα για το {theme} καταργήθηκαν"
|
||||
},
|
||||
"config-editor": {
|
||||
"save-location-label": "Αποθήκευση Τοποθεσίας",
|
||||
"location-local-label": "Εφαρμογή Τοπικά",
|
||||
"location-disk-label": "Εγγραφή Αλλαγών στο Αρχείο Διαμόρφωσης",
|
||||
"save-button": "Αποθήκευση Αλλαγών",
|
||||
"preview-button": "Προεπισκόπηση Αλλαγών",
|
||||
"valid-label": "Η Διαμόρφωση είναι Εγκυρη",
|
||||
"status-success-msg": "Η Εργασία Ολοκληρώθηκε",
|
||||
"status-fail-msg": "Η Εργασία Απέτυχε",
|
||||
"success-msg-disk": "Το αρχείο διαμόρφωσης εγγράφηκε στον δίσκο επιτυχώς",
|
||||
"success-msg-local": "Οι τοπικές αλλαγές αποθηκεύτηκαν με επιτυχία",
|
||||
"success-note-l1": "Η εφαρμογή θα πρέπει να χτιστεί εκ νέου, αυτομάτως.",
|
||||
"success-note-l2": "Αυτό μπορεί να διαρκέσει έως και ένα λεπτό.",
|
||||
"success-note-l3": "Θα χρειαστεί να ανανεώσετε τη σελίδα για να τεθούν σε ισχύ οι αλλαγές.",
|
||||
"error-msg-save-mode": "Παρακαλώ επιλέξτε έναν τρόπο αποθήκευσης: Τοπικά ή σε Αρχείο",
|
||||
"error-msg-cannot-save": "Παρουσιάστηκε σφάλμα κατά την αποθήκευση των παραμέτρων",
|
||||
"error-msg-bad-json": "Σφάλμα στο JSON: Μη έγκυρη μορφοποίηση",
|
||||
"warning-msg-validation": "Προειδοποίηση επικύρωσης",
|
||||
"not-admin-note": "Δεν μπορείτε να γράψετε αλλαγές στον δίσκο, επειδή δεν έχετε συνδεθεί ως διαχειριστής"
|
||||
},
|
||||
"app-rebuild": {
|
||||
"title": "Επανάληψη Χτισίματος Εφαρμογής",
|
||||
"rebuild-note-l1": "Η εφαρμογή πρέπει να χτιστεί εκ νέου προκειμένου να ισχύσουν οι αλλαγές που έχουν αποθηκευτεί στο αρχείο conf.yml.",
|
||||
"rebuild-note-l2": "Αυτό θα έπρεπε να συμβεί αυτόματα, αλλά αν δεν έχει συμβεί, μπορείτε να το ενεργοποιήσετε με μη αυτόματο τρόπο εδώ.",
|
||||
"rebuild-note-l3": "Αυτό δεν απαιτείται για τροποποιήσεις που είναι αποθηκευμένες τοπικά.",
|
||||
"rebuild-button": "Εκκίνηση χτισίματος",
|
||||
"rebuilding-status-1": "Πραγματοποιείται χτίσιμο της εφαρμογής...",
|
||||
"rebuilding-status-2": "Αυτό μπορεί να διαρκέσει μερικά λεπτά",
|
||||
"error-permission": "Δεν έχετε τα απαραίτητα δικαιώματα για την εκτελέσετε αυτή την ενέργεια",
|
||||
"success-msg": "Το χτίσιμο της εφαρμογής πραγματοποιήθηκε με επιτυχία",
|
||||
"fail-msg": "Η διαδικασία χτισίματος της εφαρμογής απέτυχε",
|
||||
"reload-note": "Απαιτείται επαναφόρτωση της σελίδας για να τεθούν σε ισχύ οι αλλαγές",
|
||||
"reload-button": "Επαναφόρτωση σελίδας"
|
||||
},
|
||||
"cloud-sync": {
|
||||
"title": "Αντίγραφα Ασφαλείας στο Cloud & Επαναφορά",
|
||||
"intro-l1": "Τα αντίγραφα ασφαλείας στο cloud και η επαναφορά τους είναι μια προαιρετική λειτουργία που σας επιτρέπει να ανεβάσετε τη διαμόρφωσή σας στον ιστό και να την επαναφέρετε σε οποιαδήποτε άλλη συσκευή.",
|
||||
"intro-l2": "Όλα τα δεδομένα είναι πλήρως κρυπτογραφημένα από άκρο σε άκρο με AES, χρησιμοποιώντας τον κωδικό πρόσβασής σας ως κλειδί.",
|
||||
"intro-l3": "Για περισσότερες πληροφορίες, ανατρέξτε στα",
|
||||
"intro-docs": "έγγραφα",
|
||||
"backup-title-setup": "Δημιουργία αντιγράφου ασφαλείας",
|
||||
"backup-title-update": "Ενημέρωση αντιγράφου ασφαλείας",
|
||||
"password-label-setup": "Επιλέξτε έναν κωδικό πρόσβασης",
|
||||
"password-label-update": "Εισάγετε τον κωδικό σας",
|
||||
"backup-button-setup": "Αντίγραφο Ασφαλείας",
|
||||
"backup-button-update": "Επικαιροποίηση Backup",
|
||||
"backup-id-label": "Το Backup ID σας",
|
||||
"backup-id-note": "Χρησιμοποιείται για επαναφορά από αντίγραφα ασφαλείας, οπότε κρατήστε το μαζί με τον κωδικό σας σε ένα ασφαλές μέρος.",
|
||||
"restore-title": "Επαναφορά Αντιγράφου Ασφαλείας",
|
||||
"restore-id-label": "Επαναφορά ID",
|
||||
"restore-password-label": "Κωδικός",
|
||||
"restore-button": "Επαναφορά",
|
||||
"backup-missing-password": "Απουσία Κωδικού Πρόσβασης",
|
||||
"backup-error-unknown": "Αδυναμία διεκπεραίωσης του αιτήματος",
|
||||
"backup-error-password": "Λάθος κωδικός. Εισαγάγετε τον τρέχοντα κωδικό πρόσβασής σας.",
|
||||
"backup-success-msg": "Ολοκληρώθηκε Επιτυχώς",
|
||||
"restore-success-msg": "Η Διαμόρφωση Αποκαταστάθηκε Επιτυχώς"
|
||||
},
|
||||
"menu": {
|
||||
"open-section-title": "Ανοιγμα σε",
|
||||
"sametab": "Τρέχουσα Καρτέλα",
|
||||
"newtab": "Νέα Καρτέλα",
|
||||
"modal": "Αναδυόμενο Παράθυρο",
|
||||
"workspace": "Προβολή Χώρου Εργασίας",
|
||||
"options-section-title": "Επιλογές",
|
||||
"edit-item": "Επεξεργασία",
|
||||
"move-item": "Αντιγραφή ή Μετακίνηση",
|
||||
"remove-item": "Αφαίρεση"
|
||||
},
|
||||
"context-menus": {
|
||||
"item": {
|
||||
"open-section-title": "Ανοιγμα Σε",
|
||||
"sametab": "Τρέχουσα Καρτέλα",
|
||||
"newtab": "Νέα Καρτέλα",
|
||||
"modal": "Αναδυόμενο Παράθυρο",
|
||||
"workspace": "Προβολή Χώρου Εργασίας",
|
||||
"clipboard": "Αντιγραφή στο Πρόχειρο",
|
||||
"options-section-title": "Επιλογές",
|
||||
"edit-item": "Επεξεργασία",
|
||||
"move-item": "Αντιγραφή ή Μετακίνηση",
|
||||
"remove-item": "Αφαίρεση",
|
||||
"copied-toast": "Η διεύθυνση URL έχει αντιγραφεί στο πρόχειρο"
|
||||
},
|
||||
"section": {
|
||||
"open-section": "Ανοιγμα ενότητας",
|
||||
"edit-section": "Επεξεργασία",
|
||||
"expand-collapse": "Ανάπτυξη / Σύμπτυξη",
|
||||
"move-section": "Μετακίνηση σε",
|
||||
"remove-section": "Αφαίρεση"
|
||||
}
|
||||
},
|
||||
"footer": {
|
||||
"dev-by": "Αναπτύχθηκε από",
|
||||
"licensed-under": "Άδεια χρήσης σύμφωνα με την",
|
||||
"get-the": "Λάβετε τον",
|
||||
"source-code": "Πηγαίο Κώδικα"
|
||||
},
|
||||
"interactive-editor": {
|
||||
"menu": {
|
||||
"start-editing-tooltip": "Μπείτε στον Διαδραστικό Επεξεργαστή",
|
||||
"edit-site-data-subheading": "Επεξεργασία Δεδομένων Ιστότοπου",
|
||||
"edit-page-info-btn": "Επεξεργασία Πληροφοριών Σελίδας",
|
||||
"edit-page-info-tooltip": "Τίτλος εφαρμογής, περιγραφή, σύνδεσμοι πλοήγησης, κείμενο υποσέλιδου κ.τ.λ.",
|
||||
"edit-app-config-btn": "Επεξεργασία Διαμόρφωσης Εφαρμογής",
|
||||
"edit-app-config-tooltip": "Όλες οι άλλες επιλογές διαμόρφωσης της εφαρμογής",
|
||||
"edit-pages-btn": "Επεξεργασία Σελίδων",
|
||||
"edit-pages-tooltip": "Προσθήκη ή κατάργηση πρόσθετων προβολών",
|
||||
"config-save-methods-subheading": "Επιλογές Αποθήκευσης Διαμόρφωσης",
|
||||
"save-locally-btn": "Αποθήκευση Τοπικά",
|
||||
"save-locally-tooltip": "Αποθήκευση παραμέτρων τοπικά, στον χώρο αποθήκευσης του προγράμματος περιήγησης. Αυτό δεν θα επηρεάσει το αρχείο ρυθμίσεων. Οι αλλαγές θα αποθηκευτούν μόνο σε αυτή τη συσκευή",
|
||||
"save-disk-btn": "Αποθήκευση στον Δίσκο",
|
||||
"save-disk-tooltip": "Αποθηκεύστε τις ρυθμίσεις στο αρχείο conf.yml στον δίσκο. Αυτό θα δημιουργήσει αντίγραφο ασφαλείας και εν συνεχεία θα αντικαταστήσει τις υπάρχουσες ρυθμίσεις σας",
|
||||
"export-config-btn": "Εξαγωγή Διαμόρφωσης",
|
||||
"export-config-tooltip": "Προβολή και εξαγωγή νέας διαμόρφωσης, είτε σε αρχείο, είτε στο πρόχειρο",
|
||||
"cloud-backup-btn": "Δημιουργία Αντιγράφων Ασφαλείας στο Cloud",
|
||||
"cloud-backup-tooltip": "Αποθηκεύστε κρυπτογραφημένο αντίγραφο ασφαλείας της διαμόρφωσης στο cloud",
|
||||
"edit-raw-config-btn": "Επεξεργασία Διαμόρφωσης σε Ακατέργαστη Μορφή",
|
||||
"edit-raw-config-tooltip": "Προβολή και τροποποίηση της διαμόρφωσης με τον JSON editor",
|
||||
"cancel-changes-btn": "Ακύρωση Επεξεργασίας",
|
||||
"cancel-changes-tooltip": "Ακυρώστε τις τρέχουσες τροποποιήσεις και βγείτε από τη λειτουργία επεξεργασίας. Αυτό δεν θα επηρεάσει τις αποθηκευμένες ρυθμίσεις σας",
|
||||
"edit-mode-name": "Λειτουργία Επεξεργασίας",
|
||||
"edit-mode-subtitle": "Βρίσκεστε σε Λειτουργία Επεξεργασίας",
|
||||
"edit-mode-description": "Αυτό σημαίνει ότι μπορείτε να κάνετε τροποποιήσεις στη διαμόρφωσή σας και να κάνετε προεπισκόπηση των αποτελεσμάτων, ωστόσο αν δεν προβείτε σε αποθήκευση, καμία από τις αλλαγές σας δεν θα διατηρηθεί.",
|
||||
"save-stage-btn": "Αποθήκευση",
|
||||
"cancel-stage-btn": "Ακύρωση",
|
||||
"save-locally-warning": "Εάν συνεχίσετε, οι αλλαγές θα αποθηκευτούν μόνο στο πρόγραμμα περιήγησής σας. Θα πρέπει να εξαγάγετε ένα αντίγραφο της διαμόρφωσής σας για χρήση σε άλλες συσκευές. Επιθυμείτε να συνεχίσετε;"
|
||||
},
|
||||
"edit-item": {
|
||||
"missing-title-err": "Απαιτείται η συμπλήρωση τίτλου"
|
||||
},
|
||||
"edit-section": {
|
||||
"edit-section-title": "Επεξεργασία Ενότητας",
|
||||
"add-section-title": "Προσθήκη Νέας Ενότητας",
|
||||
"edit-tooltip": "Κάντε κλικ για Επεξεργασία ή δεξί κλικ για περισσότερες επιλογές",
|
||||
"remove-confirm": "Είστε βέβαιοι ότι θέλετε να καταργήσετε αυτή την ενότητα; Αυτή η ενέργεια μπορεί να αναιρεθεί αργότερα."
|
||||
},
|
||||
"edit-app-config": {
|
||||
"warning-msg-title": "Προχωρήστε με Προσοχή",
|
||||
"warning-msg-l1": "Οι παρακάτω επιλογές διαμόρφωσης είναι για προχωρημένους.",
|
||||
"warning-msg-l2": "Εάν δεν είστε σίγουροι για κάποιο από τα πεδία, ανατρέξτε στην",
|
||||
"warning-msg-docs": "τεκμηρίωση",
|
||||
"warning-msg-l3": "προς αποφυγή ανεπιθύμητων συνεπειών."
|
||||
},
|
||||
"export": {
|
||||
"export-title": "Εξαγωγή διαμόρφωσης",
|
||||
"copy-clipboard-btn": "Αντιγραφή στο πρόχειρο",
|
||||
"copy-clipboard-tooltip": "Αντιγράψτε όλες τις ρυθμίσεις της εφαρμογής στο πρόχειρο του συστήματος, σε YAML μορφή",
|
||||
"download-file-btn": "Λήψη ως Αρχείο",
|
||||
"download-file-tooltip": "Κατεβάστε όλες τις ρυθμίσεις της εφαρμογής στη συσκευή σας, σε ένα αρχείο YAML",
|
||||
"view-title": "Προβολή Διαμόρφωσης"
|
||||
}
|
||||
},
|
||||
"widgets": {
|
||||
"general": {
|
||||
"loading": "Γίνεται φόρτωση...",
|
||||
"show-more": "Ανάπτυξη Λεπτομερειών",
|
||||
"show-less": "Εμφάνιση Λιγότερων",
|
||||
"open-link": "Συνέχιση Ανάγνωσης"
|
||||
},
|
||||
"pi-hole": {
|
||||
"status-heading": "Κατάσταση"
|
||||
},
|
||||
"stat-ping": {
|
||||
"up": "Σε σύνδεση",
|
||||
"down": "Εκτός σύνδεσης"
|
||||
},
|
||||
"net-data": {
|
||||
"cpu-chart-title": "Ιστορικό χρήσης CPU",
|
||||
"mem-chart-title": "Χρήση Μνήμης",
|
||||
"mem-breakdown-title": "Κατάρρευση Μνήμης",
|
||||
"load-chart-title": "Φόρτος Συστήματος"
|
||||
},
|
||||
"glances": {
|
||||
"disk-space-free": "Ελεύθερο",
|
||||
"disk-space-used": "Χρησιμοποιείται",
|
||||
"disk-mount-point": "Σημείο Προσάρτησης",
|
||||
"disk-file-system": "Σύστημα Αρχείων",
|
||||
"disk-io-read": "Ανάγνωση",
|
||||
"disk-io-write": "Εγγραφή",
|
||||
"system-load-desc": "Αριθμός διεργασιών που εκκρεμούν στην ουρά εκτέλεσης, κατά μέσο όρο, σε όλους τους πυρήνες"
|
||||
},
|
||||
"system-info": {
|
||||
"uptime": "Χρόνος λειτουργίας"
|
||||
},
|
||||
"flight-data": {
|
||||
"arrivals": "Αφίξεις",
|
||||
"departures": "Αναχωρήσεις"
|
||||
},
|
||||
"tfl-status": {
|
||||
"good-service-all": "Καλή Εξυπηρέτηση σε όλες τις Γραμμές",
|
||||
"good-service-rest": "Καλή Εξυπηρέτηση σε όλες τις άλλες Γραμμές"
|
||||
},
|
||||
"gluetun-status": {
|
||||
"vpn-ip": "VPN IP",
|
||||
"country": "Χώρα",
|
||||
"region": "Περιοχή",
|
||||
"city": "Πόλη",
|
||||
"post-code": "Ταχυδρομικός Κώδικας",
|
||||
"location": "Τοποθεσία",
|
||||
"timezone": "Ζώνη ώρας",
|
||||
"organization": "Οργανισμός"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -10,8 +10,12 @@
|
||||
"clear-search-tooltip": "Clear Search",
|
||||
"enter-to-search-web": "Press enter to search the web"
|
||||
},
|
||||
"splash-screen": {
|
||||
"loading": "Loading"
|
||||
},
|
||||
"login": {
|
||||
"title": "Dashy",
|
||||
"guest-label": "Guest Access",
|
||||
"username-label": "Username",
|
||||
"password-label": "Password",
|
||||
"login-button": "Login",
|
||||
@@ -31,7 +35,45 @@
|
||||
"already-logged-in-text": "You're logged in as",
|
||||
"proceed-to-dashboard": "Proceed to Dashboard",
|
||||
"log-out-button": "Logout",
|
||||
"proceed-guest-button": "Proceed as Guest"
|
||||
"proceed-guest-button": "Proceed as Guest",
|
||||
"guest-intro-1": "This instance has guest access enabled.",
|
||||
"guest-intro-2": "Guests have view-only access to dashboards, so cannot write any changes to disk.",
|
||||
"error": "Error",
|
||||
"error-no-user-configured": "Authentication is not enabled, or no users have been configured",
|
||||
"error-go-home-button": "Go Home",
|
||||
"logged-in-guest": "Logged in as Guest, Redirecting...",
|
||||
"error-guest-access": "Guest Access Not Allowed"
|
||||
},
|
||||
"app-info": {
|
||||
"title": "App Info",
|
||||
"error-log": "Error Log",
|
||||
"no-errors": "No recent errors detected",
|
||||
"help-support": "Help & Support",
|
||||
"help-support-description" : "For getting support with running or configuring Dashy, see the",
|
||||
"help-support-discussions": "Discussions",
|
||||
"support-dashy": "Supporting Dashy",
|
||||
"support-dashy-description": "For ways that you can get involved, check out the",
|
||||
"support-dashy-link": "Contributions page",
|
||||
"report-bug": "Report a Bug",
|
||||
"report-bug-description": "If you think you've found a bug, then please",
|
||||
"report-bug-link": "raise an Issue",
|
||||
"more-info": "More Info",
|
||||
"source": "Source",
|
||||
"documentation": "Documentation",
|
||||
"privacy-and-security": "Privacy & Security",
|
||||
"privacy-and-security-l1": "For a break-down of how your data is managed by Dashy, see the",
|
||||
"privacy-and-security-privacy-policy": "Privacy Policy",
|
||||
"app-info.privacy-and-security-advice": "For advise in securing your dashboard, you can reference the",
|
||||
"app-info.privacy-and-security-advice-link": "Management Docs",
|
||||
"privacy-and-security-security-issue": "If you've found a potential security issue, report it following our",
|
||||
"privacy-and-security-security-policy": "Security Policy",
|
||||
"license": "License",
|
||||
"license-under": "Licensed under",
|
||||
"licence-third-party": "For licenses for third-party modules, please see",
|
||||
"licence-third-party-link": "Legal",
|
||||
"list-contributors": "For the full list of contributors and thanks, see",
|
||||
"list-contributors-link": "Credits",
|
||||
"version": "Version"
|
||||
},
|
||||
"config": {
|
||||
"main-tab": "Main Menu",
|
||||
@@ -47,9 +89,11 @@
|
||||
"rebuild-app-button": "Rebuild Application",
|
||||
"change-language-button": "Change App Language",
|
||||
"reset-settings-button": "Reset Local Settings",
|
||||
"disabled-note": "Some configuration features have been disabled by your administrator",
|
||||
"small-screen-note": "You are using a very small screen, and some screens in this menu may not be optimal",
|
||||
"app-info-button": "App Info",
|
||||
"backup-note": "It is recommended to make a backup of your configuration before making changes.",
|
||||
"reset-config-msg-l1": "This will remove all user settings from local storage, but won't effect your 'conf.yml' file.",
|
||||
"reset-config-msg-l1": "This will remove all user settings from local storage, but won't affect your 'conf.yml' file.",
|
||||
"reset-config-msg-l2": "You should first backup any changes you've made locally, if you want to use them in the future.",
|
||||
"reset-config-msg-l3": "Are you sure you want to proceed?",
|
||||
"data-cleared-msg": "Data cleared successfully",
|
||||
@@ -61,7 +105,11 @@
|
||||
"css-note-label": "Note",
|
||||
"css-note-l1": "You will need to refresh the page for your changes to take effect.",
|
||||
"css-note-l2": "Styles overrides are only stored locally, so it is recommended to make a copy of your CSS.",
|
||||
"css-note-l3": "To remove all custom styles, delete the contents and hit Save Changes"
|
||||
"css-note-l3": "To remove all custom styles, delete the contents and hit Save Changes",
|
||||
"custom-css": {
|
||||
"title": "Custom CSS",
|
||||
"base-theme": "Base Theme"
|
||||
}
|
||||
},
|
||||
"alternate-views": {
|
||||
"alternate-view-heading": "Switch View",
|
||||
@@ -83,7 +131,9 @@
|
||||
"config-launcher-tooltip": "Update Configuration",
|
||||
"sign-out-tooltip": "Sign Out",
|
||||
"sign-in-tooltip": "Log In",
|
||||
"sign-in-welcome": "Hello {username}!"
|
||||
"sign-in-welcome": "Hello {username}!",
|
||||
"hide": "Hide",
|
||||
"open": "Open"
|
||||
},
|
||||
"updates": {
|
||||
"app-version-note": "Dashy version",
|
||||
@@ -128,7 +178,7 @@
|
||||
"error-msg-cannot-save": "An error occurred saving config",
|
||||
"error-msg-bad-json": "Error in JSON, possibly malformed",
|
||||
"warning-msg-validation": "Validation Warning",
|
||||
"not-admin-note": "You cannot write changed to disk, because you are not logged in as an admin"
|
||||
"not-admin-note": "You cannot write changes to disk because you are not logged in as an administrator"
|
||||
},
|
||||
"app-rebuild": {
|
||||
"title": "Rebuild Application",
|
||||
@@ -149,6 +199,7 @@
|
||||
"intro-l1": "Cloud backup and restore is an optional feature, that enables you to upload your config to the internet, and then restore it on any other device or instance of Dashy.",
|
||||
"intro-l2": "All data is fully end-to-end encrypted with AES, using your password as the key.",
|
||||
"intro-l3": "For more info, please see the",
|
||||
"intro-docs": "docs",
|
||||
"backup-title-setup": "Make a Backup",
|
||||
"backup-title-update": "Update Backup",
|
||||
"password-label-setup": "Choose a Password",
|
||||
@@ -200,6 +251,12 @@
|
||||
"remove-section": "Remove"
|
||||
}
|
||||
},
|
||||
"footer": {
|
||||
"dev-by": "Developed by",
|
||||
"licensed-under": "Licensed under",
|
||||
"get-the": "Get the",
|
||||
"source-code": "Source Code"
|
||||
},
|
||||
"interactive-editor": {
|
||||
"menu": {
|
||||
"start-editing-tooltip": "Enter the Interactive Editor",
|
||||
@@ -322,12 +379,12 @@
|
||||
"away": "Away",
|
||||
"cache-full": "CACHE FULL",
|
||||
"chat-room": "chat room",
|
||||
"delete-all": "Deleta all",
|
||||
"delete-all": "Delete all",
|
||||
"delete-notification": "Delete notification",
|
||||
"disabled": "disabled",
|
||||
"disk-quota": "Disk Quota",
|
||||
"disk-space": "Disk Space",
|
||||
"dnd": "Do Not Distrub",
|
||||
"dnd": "Do Not Disturb",
|
||||
"email": "email",
|
||||
"enabled": "enabled",
|
||||
"federated-shares-ucfirst": "Federated shares",
|
||||
@@ -350,7 +407,7 @@
|
||||
"local": "local",
|
||||
"max-keys": "max keys",
|
||||
"memory-used": "memory used",
|
||||
"memory-utilisation": "memory utilisation",
|
||||
"memory-utilisation": "memory utilization",
|
||||
"memory": "memory",
|
||||
"misses": "misses",
|
||||
"no-notifications": "No notifications",
|
||||
@@ -361,7 +418,7 @@
|
||||
"offline": "Offline",
|
||||
"online": "Online",
|
||||
"other": "other",
|
||||
"overall": "Ovarall",
|
||||
"overall": "Overall",
|
||||
"private-link": "private link",
|
||||
"public-link": "public link",
|
||||
"quota-enabled": "Disk Quota is {not}enabled for this user",
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
{
|
||||
"home": {
|
||||
"no-results": "Tu búsqueda no ha obtenido resultados",
|
||||
"no-data": "Faltan datos en la configuración"
|
||||
"no-data": "Faltan datos en la configuración",
|
||||
"no-items-section": "No hay elementos para mostrar todavía"
|
||||
},
|
||||
"search": {
|
||||
"search-label": "Buscar",
|
||||
"search-placeholder": "Empieza a escribir para filtrar",
|
||||
"clear-search-tooltip": "Borrar búsqueda",
|
||||
"enter-to-search-web": "Pulsa Enter para buscar"
|
||||
"enter-to-search-web": "Pulsa Intro para buscar"
|
||||
},
|
||||
"login": {
|
||||
"title": "Dashy",
|
||||
@@ -19,10 +20,11 @@
|
||||
"remember-me-hour": "4 Horas",
|
||||
"remember-me-day": "1 Día",
|
||||
"remember-me-week": "1 Semana",
|
||||
"remember-me-long-time": "Mucho tiempo",
|
||||
"error-missing-username": "Falta Usuario",
|
||||
"error-missing-password": "Falta Contraseña",
|
||||
"error-incorrect-username": "El usuario no existe",
|
||||
"error-incorrect-password": "La Contraseña es incorrecta",
|
||||
"error-incorrect-password": "La contraseña es incorrecta",
|
||||
"success-message": "Accediendo...",
|
||||
"logout-message": "Desconectado",
|
||||
"already-logged-in-title": "Estás conectado",
|
||||
@@ -32,17 +34,17 @@
|
||||
"proceed-guest-button": "Acceder como Invitado"
|
||||
},
|
||||
"config": {
|
||||
"main-tab": "Menu Principal",
|
||||
"main-tab": "Menú Principal",
|
||||
"view-config-tab": "Ver Configuración",
|
||||
"edit-config-tab": "Editar Configuración",
|
||||
"custom-css-tab": "Personalizar apariencia",
|
||||
"heading": "Opciones de Configuración",
|
||||
"download-config-button": "Descargar Configuración",
|
||||
"download-config-button": "Ver / Exportar configuración",
|
||||
"edit-config-button": "Editar Configuración",
|
||||
"edit-css-button": "Personalizar aspecto - CSS",
|
||||
"cloud-sync-button": "Activar Sincronización Cloud",
|
||||
"edit-cloud-sync-button": "Editar Sincronización Cloud",
|
||||
"rebuild-app-button": "Rebuild de la App",
|
||||
"cloud-sync-button": "Activar Sincronización en la Nube",
|
||||
"edit-cloud-sync-button": "Editar Sincronización en la Nube",
|
||||
"rebuild-app-button": "Reconstruir la aplicación",
|
||||
"change-language-button": "Cambiar el Idioma",
|
||||
"reset-settings-button": "Restaurar los Ajustes",
|
||||
"app-info-button": "Info de la App",
|
||||
@@ -53,7 +55,7 @@
|
||||
"data-cleared-msg": "Datos eliminados correctamente",
|
||||
"actions-label": "Acciones",
|
||||
"copy-config-label": "Copiar la Configuración",
|
||||
"data-copied-msg": "La Configuración ha sido copiada al portapapeles",
|
||||
"data-copied-msg": "La configuración ha sido copiada al portapapeles",
|
||||
"reset-config-label": "Resetear la Configuración",
|
||||
"css-save-btn": "Guardar Cambios",
|
||||
"css-note-label": "Nota",
|
||||
@@ -73,7 +75,7 @@
|
||||
"layout-auto": "Auto",
|
||||
"layout-horizontal": "Horizontal",
|
||||
"layout-vertical": "Vertical",
|
||||
"item-size-label": "Tamaño de los Items",
|
||||
"item-size-label": "Tamaño de los Elementos",
|
||||
"item-size-small": "Pequeño",
|
||||
"item-size-medium": "Mediano",
|
||||
"item-size-large": "Grande",
|
||||
@@ -85,13 +87,13 @@
|
||||
},
|
||||
"updates": {
|
||||
"app-version-note": "Versión de Dashy",
|
||||
"up-to-date": "Actualizada",
|
||||
"up-to-date": "Actualizado",
|
||||
"out-of-date": "Actualización disponible",
|
||||
"unsupported-version-l1": "Estás usando una versión de Dashy no soportada",
|
||||
"unsupported-version-l2": "Si quieres una mejor experiencia de usuario, y aplicar los parches de seguridad disponibles, por favor actualiza a"
|
||||
},
|
||||
"language-switcher": {
|
||||
"title": "Cambiar el idioma de la App",
|
||||
"title": "Cambiar el idioma de la aplicación",
|
||||
"dropdown-label": "Selecciona un idioma",
|
||||
"save-button": "Guardar",
|
||||
"success-msg": "Idioma actualizado a"
|
||||
@@ -101,6 +103,7 @@
|
||||
"export-button": "Exportar las Variables",
|
||||
"reset-button": "Restaurar Estilo para",
|
||||
"show-all-button": "Mostrar todas las Variables",
|
||||
"change-fonts-button": "Cambiar Fuentes",
|
||||
"save-button": "Guardar",
|
||||
"cancel-button": "Cancelar",
|
||||
"saved-toast": "{theme} Actualizado correctamente",
|
||||
@@ -112,12 +115,13 @@
|
||||
"location-local-label": "Aplicar localmente",
|
||||
"location-disk-label": "Guardar cambion en el fichero de configuración",
|
||||
"save-button": "Guardar Cambios",
|
||||
"preview-button": "Previsualizar los cambios",
|
||||
"valid-label": "La configuración es válida",
|
||||
"status-success-msg": "Tarea Completada",
|
||||
"status-fail-msg": "La Tarea ha fallado",
|
||||
"success-msg-disk": "Fichero de configuración guardado en disco correctamente",
|
||||
"success-msg-local": "Los cambios locales se han guardado correctamente",
|
||||
"success-note-l1": "La App se recompilará automáticamente.",
|
||||
"success-note-l1": "La app se recompilará automáticamente.",
|
||||
"success-note-l2": "Esto puede llevar algo más de un minuto.",
|
||||
"success-note-l3": "Es necesario refrescar la página para que los cambios tengan efecto.",
|
||||
"error-msg-save-mode": "Por favor selecciona un modo de Guardar: Local o Fichero",
|
||||
@@ -127,16 +131,16 @@
|
||||
"not-admin-note": "No puedes guardar los cambios en el disco, porque no estás conectado como un Administrador"
|
||||
},
|
||||
"app-rebuild": {
|
||||
"title": "Rebuild la App",
|
||||
"title": "Reconstruir la aplicación",
|
||||
"rebuild-note-l1": "Se requiere recompilar, para que los cambios realizados en el 'conf.yml' tengan efecto.",
|
||||
"rebuild-note-l2": "Esto debería de suceder automáticamente, pero si no sucede, puedes forzarlo manualmente aquí.",
|
||||
"rebuild-note-l3": "No es necesario para modificaciones guardadas localmente.",
|
||||
"rebuild-button": "Iniciar Build",
|
||||
"rebuilding-status-1": "Building...",
|
||||
"rebuild-button": "Iniciar la construcción",
|
||||
"rebuilding-status-1": "Construyendo...",
|
||||
"rebuilding-status-2": "Esto puede llevar unos minutos",
|
||||
"error-permission": "No tienes privilegios para ejecutar esta acción",
|
||||
"success-msg": "Build completado correctamente",
|
||||
"fail-msg": "el Build ha fallado",
|
||||
"success-msg": "Construcción completada correctamente",
|
||||
"fail-msg": "la construcción ha fallado",
|
||||
"reload-note": "Se requiere refrescar la página para que los cambios tengan efecto",
|
||||
"reload-button": "Refrescar la página"
|
||||
},
|
||||
@@ -162,11 +166,224 @@
|
||||
"backup-error-password": "Contraseña incorrecta. Por favor introduce la contraseña.",
|
||||
"backup-success-msg": "Completado con éxito",
|
||||
"restore-success-msg": "Configuración restaurada con éxito"
|
||||
},
|
||||
},
|
||||
"menu": {
|
||||
"open-section-title": "Abrir en",
|
||||
"sametab": "Abrir en la pestaña actual",
|
||||
"newtab": "Abrir en una nueva pestaña",
|
||||
"modal": "Abrir en un Pop-Up",
|
||||
"workspace": "Abrir en el espacio de trabajo"
|
||||
}
|
||||
}
|
||||
"workspace": "Abrir en el espacio de trabajo",
|
||||
"options-section-title": "Opciones",
|
||||
"edit-item": "Editar",
|
||||
"move-item": "Copiar o Mover",
|
||||
"remove-item": "Eliminar"
|
||||
},
|
||||
"context-menus": {
|
||||
"item": {
|
||||
"open-section-title": "Abrir en",
|
||||
"sametab": "Pestaña actual",
|
||||
"newtab": "Nueva pestaña",
|
||||
"modal": "Pop-Up Modal",
|
||||
"workspace": "Vista de espacio de trabajo",
|
||||
"clipboard": "Copiar al portapapeles",
|
||||
"options-section-title": "Opciones",
|
||||
"edit-item": "Editar",
|
||||
"move-item": "Copiar o mover",
|
||||
"remove-item": "Eliminar",
|
||||
"copied-toast": "La URL se ha copiado en el portapapeles"
|
||||
},
|
||||
"section": {
|
||||
"open-section": "Abrir la sección",
|
||||
"edit-section": "Editar",
|
||||
"expand-collapse": "Expandir / Colapsar",
|
||||
"move-section": "Mover a",
|
||||
"remove-section": "Eliminar"
|
||||
}
|
||||
},
|
||||
"interactive-editor": {
|
||||
"menu": {
|
||||
"start-editing-tooltip": "Acceda al editor interactivo",
|
||||
"edit-site-data-subheading": "Editar datos del sitio",
|
||||
"edit-page-info-btn": "Editar la información de la página",
|
||||
"edit-page-info-tooltip": "Título de la aplicación, descripción, enlaces de navegación, texto del pie de página, etc.",
|
||||
"edit-app-config-btn": "Editar la configuración de la aplicación",
|
||||
"edit-app-config-tooltip": "Todas las demás opciones de configuración de la aplicación",
|
||||
"edit-pages-btn": "Editar páginas",
|
||||
"edit-pages-tooltip": "Añadir o eliminar vistas adicionales",
|
||||
"config-save-methods-subheading": "Opciones de guardado de la configuración",
|
||||
"save-locally-btn": "Guardar localmente",
|
||||
"save-locally-tooltip": "Guardar la configuración localmente, en el almacenamiento del navegador. Esto no afectará a su archivo de configuración, pero los cambios sólo se guardarán en este dispositivo.",
|
||||
"save-disk-btn": "Guardar en disco",
|
||||
"save-disk-tooltip": "Guarde la configuración en el archivo conf.yml en el disco. Esto hará una copia de seguridad, y luego sobrescribirá su configuración existente.",
|
||||
"export-config-btn": "Exportar configuración",
|
||||
"export-config-tooltip": "Ver y exportar la nueva configuración, ya sea a un archivo o al portapapeles",
|
||||
"cloud-backup-btn": "Copia de seguridad en la nube",
|
||||
"cloud-backup-tooltip": "Guardar una copia de seguridad encriptada de la configuración en la nube",
|
||||
"edit-raw-config-btn": "Editar la configuración en bruto",
|
||||
"edit-raw-config-tooltip": "Ver y modificar la configuración en bruto a través del editor JSON",
|
||||
"cancel-changes-btn": "Cancelar la edición",
|
||||
"cancel-changes-tooltip": "Restablecer las modificaciones actuales y salir del modo de edición. Esto no afectará a su configuración guardada",
|
||||
"edit-mode-name": "Modo de edición",
|
||||
"edit-mode-subtitle": "Estás en el modo de edición",
|
||||
"edit-mode-description": "Esto significa que puedes hacer modificaciones en tu configuración, y previsualizar los resultados, pero hasta que no guardes, no se conservará ninguno de tus cambios.",
|
||||
"save-stage-btn": "Guardar",
|
||||
"cancel-stage-btn": "Cancelar",
|
||||
"save-locally-warning": "Si procede, los cambios se guardarán sólo en su navegador. Deberá exportar una copia de su configuración para utilizarla en otras máquinas. ¿Desea continuar?"
|
||||
},
|
||||
"edit-item": {
|
||||
"missing-title-err": "Se requiere el título del elemento"
|
||||
},
|
||||
"edit-section": {
|
||||
"edit-section-title": "Editar sección",
|
||||
"add-section-title": "Añadir nueva sección",
|
||||
"edit-tooltip": "Haga clic para editar o haga clic con el botón derecho para más opciones",
|
||||
"remove-confirm": "¿Está seguro de que quiere eliminar esta sección? Esta acción puede deshacerse más tarde."
|
||||
},
|
||||
"edit-app-config": {
|
||||
"warning-msg-title": "Proceda con precaución",
|
||||
"warning-msg-l1": "Las siguientes opciones son para la configuración avanzada de la aplicación.",
|
||||
"warning-msg-l2": "Si no está seguro de alguno de los campos, consulte la",
|
||||
"warning-msg-docs": "documentación",
|
||||
"warning-msg-l3": "para evitar consecuencias imprevistas."
|
||||
},
|
||||
"export": {
|
||||
"export-title": "Exportar configuración",
|
||||
"copy-clipboard-btn": "Copiar al portapapeles",
|
||||
"copy-clipboard-tooltip": "Copiar toda la configuración de la aplicación al portapapeles del sistema, en formato YAML",
|
||||
"download-file-btn": "Descargar como archivo",
|
||||
"download-file-tooltip": "Descargue toda la configuración de la aplicación en su dispositivo, en un archivo YAML",
|
||||
"view-title": "Ver configuración"
|
||||
}
|
||||
},
|
||||
"widgets": {
|
||||
"general": {
|
||||
"loading": "Cargando...",
|
||||
"show-more": "Ampliar detalles",
|
||||
"show-less": "Mostrar menos",
|
||||
"open-link": "Continuar leyendo"
|
||||
},
|
||||
"pi-hole": {
|
||||
"status-heading": "Estado"
|
||||
},
|
||||
"stat-ping": {
|
||||
"up": "En línea",
|
||||
"down": "Fuera de línea"
|
||||
},
|
||||
"net-data": {
|
||||
"cpu-chart-title": "Historial del procesador",
|
||||
"mem-chart-title": "Consumo de memoria",
|
||||
"mem-breakdown-title": "Desglose de la memoria",
|
||||
"load-chart-title": "Carga del sistema"
|
||||
},
|
||||
"glances": {
|
||||
"disk-space-free": "Libre",
|
||||
"disk-space-used": "Usado",
|
||||
"disk-mount-point": "Punto de montaje",
|
||||
"disk-file-system": "Sistema de archivos",
|
||||
"disk-io-read": "Leído",
|
||||
"disk-io-write": "Escrito",
|
||||
"system-load-desc": "Número de procesos en espera en la cola de ejecución, promediado en todos los núcleos"
|
||||
},
|
||||
"system-info": {
|
||||
"uptime": "Tiempo de servicio"
|
||||
},
|
||||
"flight-data": {
|
||||
"arrivals": "Llegadas",
|
||||
"departures": "Salidas"
|
||||
},
|
||||
"tfl-status": {
|
||||
"good-service-all": "Buen servicio en todas las líneas",
|
||||
"good-service-rest": "Buen servicio en todas las demás líneas"
|
||||
},
|
||||
"synology-download": {
|
||||
"download": "Descargar",
|
||||
"upload": "Cargar",
|
||||
"downloaded": "Descargado",
|
||||
"uploaded": "Cargado",
|
||||
"remaining": "Restante",
|
||||
"up": "Levantado",
|
||||
"down": "Caído"
|
||||
},
|
||||
"gluetun-status": {
|
||||
"vpn-ip": "IP de la VPN",
|
||||
"country": "País",
|
||||
"region": "Región",
|
||||
"city": "Ciudad",
|
||||
"post-code": "Código Postal",
|
||||
"location": "Ubicación",
|
||||
"timezone": "Zona horaria",
|
||||
"organization": "Organización"
|
||||
},
|
||||
"nextcloud": {
|
||||
"active": "activo",
|
||||
"and": "y",
|
||||
"applications": "aplicaciones",
|
||||
"available": "disponible",
|
||||
"away": "Fuera",
|
||||
"cache-full": "CACHE LLENO",
|
||||
"chat-room": "sala del chat",
|
||||
"delete-all": "Borrar todo",
|
||||
"delete-notification": "Eliminar la notificación",
|
||||
"disabled": "deshabilitado",
|
||||
"disk-quota": "Cuota del disco",
|
||||
"disk-space": "Espacio del disco",
|
||||
"dnd": "No distribuir",
|
||||
"email": "email",
|
||||
"enabled": "habilitado",
|
||||
"federated-shares-ucfirst": "Acciones federadas",
|
||||
"federated-shares": "acciones federadas",
|
||||
"files": "archivo/s",
|
||||
"free": "libre",
|
||||
"groups": "grupos",
|
||||
"hit-rate": "tasa de aciertos",
|
||||
"hits": "aciertos",
|
||||
"home": "casa",
|
||||
"in": "en",
|
||||
"keys": "teclas",
|
||||
"last-24-hours": "últimas 24 horas",
|
||||
"last-5-minutes": "en los últimos 5 minutos",
|
||||
"last-hour": "en la última hora",
|
||||
"last-login": "Último acceso",
|
||||
"last-restart": "Último reinicio",
|
||||
"load-averages": "Promedios de carga en todos los núcleos del procesador",
|
||||
"local-shares": "Acciones locales",
|
||||
"local": "local",
|
||||
"max-keys": "teclas máx",
|
||||
"memory-used": "memoria usada",
|
||||
"memory-utilisation": "utilización de memoria",
|
||||
"memory": "memoria",
|
||||
"misses": "fallos",
|
||||
"no-notifications": "Sin notificaciones",
|
||||
"no-pending-updates": "no hay actualizaciones pendientes",
|
||||
"nothing-to-show": "Nada que mostrar aquí en este momento",
|
||||
"of-which": "de los cuales",
|
||||
"of": "de",
|
||||
"offline": "Fuera de línea",
|
||||
"online": "En línea",
|
||||
"other": "otros",
|
||||
"overall": "En general",
|
||||
"private-link": "enlace privado",
|
||||
"public-link": "enlace público",
|
||||
"quota-enabled": "La cuota de disco {no} está habilitado para este usuario",
|
||||
"received": "recibido",
|
||||
"scripts": "scripts",
|
||||
"sent": "enviado",
|
||||
"started": "Iniciado",
|
||||
"storages-by-type": "Almacenamientos por tipo",
|
||||
"storages": "almacenamiento/s",
|
||||
"strings-use": "uso de cadenas",
|
||||
"tasks": "Tareas",
|
||||
"total-files": "total de archivos",
|
||||
"total-users": "total de usuarios",
|
||||
"total": "total",
|
||||
"until": "Hasta",
|
||||
"updates-available-for": "Las actualizaciones están disponibles para",
|
||||
"updates-available": "actualizacion/es disponible",
|
||||
"used": "usado",
|
||||
"user": "usuario",
|
||||
"using": "usando",
|
||||
"version": "versión",
|
||||
"wasted": "gastado"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,24 +1,29 @@
|
||||
{
|
||||
"home": {
|
||||
"no-results": "Aucun résultat",
|
||||
"no-data": "Aucune donnée configurée"
|
||||
"no-data": "Aucune donnée configurée",
|
||||
"no-items-section": "Encore aucun élément à afficher"
|
||||
},
|
||||
"search": {
|
||||
"search-label": "Recherche",
|
||||
"search-label": "Rechercher",
|
||||
"search-placeholder": "Commencez à taper pour filtrer",
|
||||
"clear-search-tooltip": "Effacer la recherche",
|
||||
"enter-to-search-web": "Appuyez sur entrée pour rechercher sur le Web"
|
||||
},
|
||||
"splash-screen": {
|
||||
"loading": "Chargement"
|
||||
},
|
||||
"login": {
|
||||
"title": "Dashy",
|
||||
"guest-label": "Accès invité",
|
||||
"username-label": "Nom d'utilisateur",
|
||||
"password-label": "Mot de passe",
|
||||
"login-button": "Connexion",
|
||||
"remember-me-label": "Se souvenir de moi",
|
||||
"remember-me-never": "Jamais",
|
||||
"remember-me-hour": "4 Heures",
|
||||
"remember-me-day": "1 Jour",
|
||||
"remember-me-week": "1 Semaine",
|
||||
"remember-me-hour": "4 heures",
|
||||
"remember-me-day": "1 jour",
|
||||
"remember-me-week": "1 semaine",
|
||||
"remember-me-long-time": "Un long moment",
|
||||
"error-missing-username": "Nom d'utilisateur manquant",
|
||||
"error-missing-password": "Mot de passe manquant",
|
||||
@@ -30,15 +35,53 @@
|
||||
"already-logged-in-text": "Vous êtes connecté en tant que",
|
||||
"proceed-to-dashboard": "Accéder au Tableau de bord",
|
||||
"log-out-button": "Déconnexion",
|
||||
"proceed-guest-button": "Continuer en tant qu'invité"
|
||||
"proceed-guest-button": "Continuer en tant qu'invité",
|
||||
"guest-intro-1": "L'accès invité est activé pour cette instance.",
|
||||
"guest-intro-2": "Les invités n'ont qu'un accès en mode lecture aux tableaux de bord, et ne peuvent donc pas écrire de modifications sur le disque.",
|
||||
"error": "Erreur",
|
||||
"error-no-user-configured": "L'authentification n'est pas activée ou aucun utilisateur n'a été configuré.",
|
||||
"error-go-home-button": "Retour à l'accueil",
|
||||
"logged-in-guest": "Connecté en tant qu'invité, redirection...",
|
||||
"error-guest-access": "L'accès invité n'est pas autorisé"
|
||||
},
|
||||
"app-info": {
|
||||
"title": "Informations sur l'application",
|
||||
"error-log": "Journal des erreurs",
|
||||
"no-errors": "Aucune erreur récente détectée",
|
||||
"help-support": "Aide & Support",
|
||||
"help-support-description" : "Pour obtenir de l'aide pour faire tourner ou configurer Dashy, voir les",
|
||||
"help-support-discussions": "discussions",
|
||||
"support-dashy": "Soutenir Dashy",
|
||||
"support-dashy-description": "Pour savoir comment vous pouvez vous impliquer, consultez la page",
|
||||
"support-dashy-link": "« Contributions »",
|
||||
"report-bug": "Signaler un bug",
|
||||
"report-bug-description": "Si vous pensez avoir trouvé un bug, alors s'il vous plaît, ",
|
||||
"report-bug-link": "signalez-le",
|
||||
"more-info": "Plus d'informations",
|
||||
"source": "Source ",
|
||||
"documentation": "Documentation ",
|
||||
"privacy-and-security": "Vie privée & Sécurité",
|
||||
"privacy-and-security-l1": "Pour connaître la manière dont vos données sont gérées par Dashy, consultez la",
|
||||
"privacy-and-security-privacy-policy": "politique de confidentialité",
|
||||
"privacy-and-security-advice": "Pour obtenir des conseils sur la sécurisation de votre tableau de bord, vous pouvez vous référer à la",
|
||||
"privacy-and-security-advice-link": "documentation",
|
||||
"privacy-and-security-security-issue": "Si vous avez trouvé une potentielle faille de sécurité, signalez-la en suivant notre",
|
||||
"privacy-and-security-security-policy": "politique en matière de sécurité",
|
||||
"license": "Licence",
|
||||
"license-under": "Sous licence",
|
||||
"licence-third-party": "Pour les licences des modules tiers, veuillez consulter",
|
||||
"licence-third-party-link": "le document juridique",
|
||||
"list-contributors": "Pour la liste complète des contributeurs et les remerciements, voir",
|
||||
"list-contributors-link": "les crédits",
|
||||
"version": "Version"
|
||||
},
|
||||
"config": {
|
||||
"main-tab": "Menu principal",
|
||||
"view-config-tab": "Afficher la configuration",
|
||||
"edit-config-tab": "Modifier la configuration",
|
||||
"custom-css-tab": "Styles personnalisés",
|
||||
"heading": "Options de Configuration",
|
||||
"download-config-button": "Télécharger la configuration",
|
||||
"heading": "Options de configuration",
|
||||
"download-config-button": "Voir / télécharger la configuration",
|
||||
"edit-config-button": "Modifier la configuration",
|
||||
"edit-css-button": "Styles personnalisés",
|
||||
"cloud-sync-button": "Activer la synchro. dans le cloud",
|
||||
@@ -46,11 +89,13 @@
|
||||
"rebuild-app-button": "Reconstruire l'application",
|
||||
"change-language-button": "Changer la langue",
|
||||
"reset-settings-button": "Réinitialiser les paramètres locaux",
|
||||
"disabled-note": "Certaines fonctionnalités de configuration ont été désactivées par votre administrateur",
|
||||
"small-screen-note": "Vous utilisez un très petit écran, et certains menus peuvent ne pas apparaître de manière optimale",
|
||||
"app-info-button": "Informations sur l'application",
|
||||
"backup-note": "Il est recommandé de faire une sauvegarde de votre configuration avant d'apporter des modifications.",
|
||||
"reset-config-msg-l1": "Cela supprimera tous les paramètres utilisateur du stockage local, mais n'affectera pas votre fichier 'conf.yml'.",
|
||||
"reset-config-msg-l2": "Vous devez d'abord sauvegarder toutes les modifications locales si vous souhaitez les utiliser à l'avenir.",
|
||||
"reset-config-msg-l3": "Êtes-vous sur de vouloir continuer ?",
|
||||
"reset-config-msg-l3": "Êtes-vous sûr de vouloir continuer ?",
|
||||
"data-cleared-msg": "Données effacées avec succès",
|
||||
"actions-label": "Actions",
|
||||
"copy-config-label": "Copier la configuration",
|
||||
@@ -59,21 +104,25 @@
|
||||
"css-save-btn": "Enregistrer",
|
||||
"css-note-label": "Note",
|
||||
"css-note-l1": "Vous devrez actualiser la page pour que les modifications prennent effet.",
|
||||
"css-note-l2": "Les modifications ne sont stockés que localement, il est donc recommandé de faire une copie de votre CSS.",
|
||||
"css-note-l3": "Pour supprimer tous les styles personnalisés, supprimez le contenu et appuyez sur Enregistrer."
|
||||
"css-note-l2": "Les modifications ne sont stockées que localement, il est donc recommandé de faire une copie de votre CSS.",
|
||||
"css-note-l3": "Pour supprimer tous les styles personnalisés, supprimez le contenu et appuyez sur Enregistrer.",
|
||||
"custom-css": {
|
||||
"title": "CSS personnalisé",
|
||||
"base-theme": "Thème de base"
|
||||
}
|
||||
},
|
||||
"alternate-views": {
|
||||
"alternate-view-heading": "Changer le mode d'affichage",
|
||||
"default": "Défaut",
|
||||
"workspace": "Plein écran",
|
||||
"minimal": "Minimale"
|
||||
"default": "Par défaut",
|
||||
"workspace": "Espace de travail",
|
||||
"minimal": "Épuré"
|
||||
},
|
||||
"settings": {
|
||||
"theme-label": "Thème",
|
||||
"layout-label": "Disposition",
|
||||
"layout-auto": "Auto",
|
||||
"layout-horizontal": "Horizontal",
|
||||
"layout-vertical": "Vertical",
|
||||
"layout-auto": "Automatique",
|
||||
"layout-horizontal": "Horizontale",
|
||||
"layout-vertical": "Verticale",
|
||||
"item-size-label": "Taille",
|
||||
"item-size-small": "Petite",
|
||||
"item-size-medium": "Moyenne",
|
||||
@@ -82,27 +131,29 @@
|
||||
"config-launcher-tooltip": "Modifier la configuration",
|
||||
"sign-out-tooltip": "Déconnexion",
|
||||
"sign-in-tooltip": "Connexion",
|
||||
"sign-in-welcome": "Bonjour {username}!"
|
||||
"sign-in-welcome": "Bonjour {username} !",
|
||||
"hide": "Masquer",
|
||||
"open": "Ouvrir"
|
||||
},
|
||||
"updates": {
|
||||
"app-version-note": "Version de Dashy",
|
||||
"up-to-date": "À jour",
|
||||
"out-of-date": "Mise à jour disponible !",
|
||||
"out-of-date": "Mise à jour disponible !",
|
||||
"unsupported-version-l1": "Vous utilisez une version non prise en charge de Dashy",
|
||||
"unsupported-version-l2": "Pour une meilleure expérience et des correctifs de sécurité récents, veuillez mettre à jour vers"
|
||||
},
|
||||
"language-switcher": {
|
||||
"title": "Changer la langue",
|
||||
"dropdown-label": "Sélectionnez une langue",
|
||||
"dropdown-label": "Sélectionnez une langue ",
|
||||
"save-button": "Enregistrer",
|
||||
"success-msg": "Langue mise à jour vers"
|
||||
},
|
||||
"theme-maker": {
|
||||
"title": "Configurateur de Thèmes",
|
||||
"title": "Configurateur de thèmes",
|
||||
"export-button": "Exporter des variables personnalisées",
|
||||
"reset-button": "Réinitialiser les styles pour",
|
||||
"show-all-button": "Afficher toutes les variables",
|
||||
"change-fonts-button": "Changer les Polices d'écritures",
|
||||
"change-fonts-button": "Changer les polices d'écritures",
|
||||
"save-button": "Enregistrer",
|
||||
"cancel-button": "Annuler",
|
||||
"saved-toast": "{theme} mis à jour avec succès",
|
||||
@@ -114,7 +165,7 @@
|
||||
"location-local-label": "Appliquer localement",
|
||||
"location-disk-label": "Appliquer dans le fichier de configuration",
|
||||
"save-button": "Enregistrer",
|
||||
"preview-button": "Prévisuliser les modifications",
|
||||
"preview-button": "Prévisualiser les modifications",
|
||||
"valid-label": "La configuration est valide",
|
||||
"status-success-msg": "Tâche terminée",
|
||||
"status-fail-msg": "Échec de la tâche",
|
||||
@@ -130,7 +181,7 @@
|
||||
"not-admin-note": "Vous ne pouvez pas écrire les modifications sur le disque, car vous n'êtes pas connecté en tant qu'administrateur"
|
||||
},
|
||||
"app-rebuild": {
|
||||
"title": "Reconstruire l'application",
|
||||
"title": "Reconstruction de l'application",
|
||||
"rebuild-note-l1": "Une reconstruction est requise pour que les modifications écrites dans le fichier conf.yml prennent effet.",
|
||||
"rebuild-note-l2": "Cela devrait se produire automatiquement, mais si ce n'est pas le cas, vous pouvez le déclencher manuellement ici.",
|
||||
"rebuild-note-l3": "Ceci n'est pas nécessaire pour les modifications stockées localement.",
|
||||
@@ -148,11 +199,12 @@
|
||||
"intro-l1": "Ce service de sauvegarde et de restauration depuis le cloud est une fonctionnalité facultative qui vous permet de télécharger votre configuration sur Internet, puis de la restaurer sur n'importe quel autre appareil ou instance de Dashy.",
|
||||
"intro-l2": "Toutes les données sont entièrement chiffrées de bout en bout avec le protocole AES, en utilisant votre mot de passe comme clé.",
|
||||
"intro-l3": "Pour plus d'informations, veuillez consulter la",
|
||||
"backup-title-setup": "Sauvegarder",
|
||||
"intro-docs": "documentation",
|
||||
"backup-title-setup": "Sauvegarde",
|
||||
"backup-title-update": "Mettre à jour la sauvegarde",
|
||||
"password-label-setup": "Choisissez un mot de passe",
|
||||
"password-label-update": "Entrer votre mot de passe",
|
||||
"backup-button-setup": "Sauvegarde",
|
||||
"backup-button-setup": "Sauvegarder",
|
||||
"backup-button-update": "Mettre à jour la sauvegarde",
|
||||
"backup-id-label": "Votre identifiant de sauvegarde",
|
||||
"backup-id-note": "Il vous sera demandé par la suite pour restaurer à partir de votre sauvegarde. Alors gardez-le, avec votre mot de passe dans un endroit sûr.",
|
||||
@@ -184,18 +236,27 @@
|
||||
"newtab": "Ouvrir dans un nouvel onglet",
|
||||
"modal": "Ouvrir en mode fenêtré",
|
||||
"workspace": "Ouvrir en plein écran",
|
||||
"clipboard": "Copier vers le presse le presse-papiers",
|
||||
"options-section-title": "Options",
|
||||
"edit-item": "Modifier",
|
||||
"move-item": "Copier et Déplacer",
|
||||
"remove-item": "Supprimer"
|
||||
"move-item": "Copier et déplacer",
|
||||
"remove-item": "Supprimer",
|
||||
"copied-toast": "L'URL a été copiée dans le presse-papies"
|
||||
},
|
||||
"section": {
|
||||
"open-section": "Ouvrir",
|
||||
"edit-section": "Modifier",
|
||||
"expand-collapse": "Développer / Réduire",
|
||||
"move-section": "Déplacer vers",
|
||||
"remove-section": "Supprimer"
|
||||
}
|
||||
},
|
||||
"footer": {
|
||||
"dev-by": "Développé par",
|
||||
"licensed-under": "Sous licence",
|
||||
"get-the": "Obtenir le",
|
||||
"source-code": "code source"
|
||||
},
|
||||
"interactive-editor": {
|
||||
"menu": {
|
||||
"start-editing-tooltip": "Entrer dans l'éditeur interactif",
|
||||
@@ -204,29 +265,39 @@
|
||||
"edit-page-info-tooltip": "Titre de l'application, description, liens de navigation, texte de pied de page, etc.",
|
||||
"edit-app-config-btn": "Modifier la configuration",
|
||||
"edit-app-config-tooltip": "Toutes les autres options de configuration",
|
||||
"edit-pages-btn": "Éditer les pages",
|
||||
"edit-pages-tooltip": "Ajouter ou supprimer des vues supplémentaires",
|
||||
"config-save-methods-subheading": "Options de sauvegarde",
|
||||
"save-locally-btn": "Enregistrer localement",
|
||||
"save-locally-tooltip": "Enregistrez la configuration localement, dans le stockage du navigateur. Cela n'affectera pas votre fichier de configuration, mais les modifications ne seront présentes que sur cet appareil",
|
||||
"save-locally-tooltip": "Enregistre la configuration localement, dans le stockage du navigateur. Cela n'affectera pas votre fichier de configuration, mais les modifications ne seront présentes que sur cet appareil",
|
||||
"save-disk-btn": "Enregistrer sur le disque",
|
||||
"save-disk-tooltip": "Enregistrez la configuration dans le fichier conf.yml sur le disque. Cela sauvegardera, puis écrasera votre configuration existante",
|
||||
"save-disk-tooltip": "Enregistre la configuration dans le fichier conf.yml sur le disque. Cela sauvegardera, puis écrasera votre configuration existante",
|
||||
"export-config-btn": "Exporter la configuration",
|
||||
"export-config-tooltip": "Afficher et exporter la nouvelle configuration, soit dans un fichier, soit dans le presse-papier",
|
||||
"export-config-tooltip": "Affiche et exporte la nouvelle configuration, soit dans un fichier, soit dans le presse-papiers",
|
||||
"cloud-backup-btn": "Sauvegarde sur le cloud",
|
||||
"cloud-backup-tooltip": "Sauvegarde chiffrée de la configuration dans le cloud",
|
||||
"edit-raw-config-btn": "Éditer la configuration brute",
|
||||
"edit-raw-config-tooltip": "Voir et modifier la configuration brute via l'éditeur JSON",
|
||||
"cancel-changes-btn": "Annuler",
|
||||
"cancel-changes-tooltip": "Réinitialisez les modifications en cours et quittez le mode d'édition. Cela n'affectera pas votre configuration enregistrée",
|
||||
"cancel-changes-tooltip": "Réinitialise les modifications en cours et quittez le mode d'édition. Cela n'affectera pas votre configuration enregistrée",
|
||||
"edit-mode-name": "Éditeur interactif",
|
||||
"edit-mode-subtitle": "Vous êtes en mode d'édition",
|
||||
"edit-mode-description": "Vous pouvez apporter des modifications à votre configuration et prévisualiser les résultats, mais jusqu'à ce que vous sauvegardiez, aucune de vos modifications ne sera conservée.",
|
||||
"save-stage-btn": "Enregistrer",
|
||||
"cancel-stage-btn": "Annuler"
|
||||
"cancel-stage-btn": "Annuler",
|
||||
"save-locally-warning": "Si vous poursuivez, les modifications seront uniquement sauvegardés dans votre navigateur. Vous devriez exporter une copie de votre configuration pour être utilisée sur d'autres machines. Voulez-vous continuer ?"
|
||||
},
|
||||
"edit-item": {
|
||||
"missing-title-err": "Le titre de l'élément est requis"
|
||||
},
|
||||
"edit-section": {
|
||||
"edit-section-title": "Éditeur",
|
||||
"edit-section-title": "Éditeur de section",
|
||||
"add-section-title": "Ajouter une section",
|
||||
"edit-tooltip": "Cliquer pour modifier ou cliquer droit pour plus d'options",
|
||||
"remove-confirm": "Voulez-vous vraiment supprimer cette section ? Cette action peut être annulée ultérieurement."
|
||||
},
|
||||
"edit-app-config": {
|
||||
"warning-msg-title": "Procéder avec prudence",
|
||||
"warning-msg-title": "Poursuivre avec prudence",
|
||||
"warning-msg-l1": "Les options suivantes concernent la configuration avancée de l'application.",
|
||||
"warning-msg-l2": "Si vous n'êtes pas sûr de l'un des champs, veuillez consulter la",
|
||||
"warning-msg-docs": "documentation",
|
||||
@@ -234,11 +305,142 @@
|
||||
},
|
||||
"export": {
|
||||
"export-title": "Exporter la configuration",
|
||||
"copy-clipboard-btn": "Copier dans le presse-papier",
|
||||
"copy-clipboard-btn": "Copier dans le presse-papiers",
|
||||
"copy-clipboard-tooltip": "Copier la configuration complète de l'application sur votre appareil dans un fichier YAML",
|
||||
"download-file-btn": "Télécharger",
|
||||
"download-file-tooltip": "Téléchargez la configuration complète de l'application sur votre appareil dans un fichier YAML",
|
||||
"view-title": "Afficher la configuration"
|
||||
"download-file-btn": "Télécharger le fichier",
|
||||
"download-file-tooltip": "Télécharge la configuration complète de l'application sur votre appareil dans un fichier YAML",
|
||||
"view-title": "Affichage de la configuration"
|
||||
}
|
||||
},
|
||||
"widgets": {
|
||||
"general": {
|
||||
"loading": "Chargement ...",
|
||||
"show-more": "Développer les détails",
|
||||
"show-less": "Montrer moins",
|
||||
"open-link": "Lire la suite"
|
||||
},
|
||||
"pi-hole": {
|
||||
"status-heading": "Statut"
|
||||
},
|
||||
"stat-ping": {
|
||||
"up": "En ligne",
|
||||
"down": "Hors ligne"
|
||||
},
|
||||
"net-data": {
|
||||
"cpu-chart-title": "Historique CPU",
|
||||
"mem-chart-title": "Utilisation de la mémoire",
|
||||
"mem-breakdown-title": "Rupture mémoire",
|
||||
"load-chart-title": "Charge du système"
|
||||
},
|
||||
"glances": {
|
||||
"disk-space-free": "Libre",
|
||||
"disk-space-used": "Utilisé",
|
||||
"disk-mount-point": "Point de montage",
|
||||
"disk-file-system": "Système de fichiers",
|
||||
"disk-io-read": "Lecture",
|
||||
"disk-io-write": "Écriture",
|
||||
"system-load-desc": "Nombre de processus en attente dans la file d'attente, moyenne sur tous les cœurs"
|
||||
},
|
||||
"system-info": {
|
||||
"uptime": "Temps de fonctionnement"
|
||||
},
|
||||
"flight-data": {
|
||||
"arrivals": "Arrivées",
|
||||
"departures": "Départs"
|
||||
},
|
||||
"tfl-status": {
|
||||
"good-service-all": "Bon service sur toutes les lignes",
|
||||
"good-service-rest": "Bon service sur toutes les autres lignes"
|
||||
},
|
||||
"synology-download": {
|
||||
"download": "Téléchargement",
|
||||
"upload": "Envoi",
|
||||
"downloaded": "Téléchargé",
|
||||
"uploaded": "Envoyer",
|
||||
"remaining": "Restant",
|
||||
"up": "Up",
|
||||
"down": "Down"
|
||||
},
|
||||
"gluetun-status": {
|
||||
"vpn-ip": "VPN IP",
|
||||
"country": "Pays",
|
||||
"region": "Région",
|
||||
"city": "Ville",
|
||||
"post-code": "Code Postal",
|
||||
"location": "Localisation",
|
||||
"timezone": "Fuseau horaire",
|
||||
"organization": "Organisation"
|
||||
},
|
||||
"nextcloud": {
|
||||
"active": "actif",
|
||||
"and": "et",
|
||||
"applications": "applications",
|
||||
"available": "disponible",
|
||||
"away": "Away",
|
||||
"cache-full": "CACHE PLEIN",
|
||||
"chat-room": "salon de discussion",
|
||||
"delete-all": "Supprimer tout",
|
||||
"delete-notification": "Supprimer la notification",
|
||||
"disabled": "désactivé",
|
||||
"disk-quota": "Quota",
|
||||
"disk-space": "Espace disque",
|
||||
"dnd": "Ne pas déranger",
|
||||
"email": "email",
|
||||
"enabled": "activé",
|
||||
"federated-shares-ucfirst": "Partages Fédérés",
|
||||
"federated-shares": "partage fédéré",
|
||||
"files": "fichier{plural}",
|
||||
"free": "libre",
|
||||
"groups": "groupes",
|
||||
"hit-rate": "hit rate",
|
||||
"hits": "hits",
|
||||
"home": "home",
|
||||
"in": "in",
|
||||
"keys": "keys",
|
||||
"last-24-hours": "24 dernières heures",
|
||||
"last-5-minutes": "dans les 5 dernières minutes",
|
||||
"last-hour": "dans la dernière heure",
|
||||
"last-login": "Dernière connexion",
|
||||
"last-restart": "Dernier redémarrage",
|
||||
"load-averages": "Charge moyenne sur l'ensemble des coeurs du CPU",
|
||||
"local-shares": "Partage locaux",
|
||||
"local": "local",
|
||||
"max-keys": "max keys",
|
||||
"memory-used": "mémoire utilisée",
|
||||
"memory-utilisation": "utilisation de la mémoire",
|
||||
"memory": "mémoire",
|
||||
"misses": "misses",
|
||||
"no-notifications": "Aucune notification",
|
||||
"no-pending-updates": "aucune mise à jour en attente",
|
||||
"nothing-to-show": "Rien à afficher pour l'instant",
|
||||
"of-which": "of which",
|
||||
"of": "of",
|
||||
"offline": "Hors ligne",
|
||||
"online": "En ligne",
|
||||
"other": "autre",
|
||||
"overall": "Overall",
|
||||
"private-link": "lien privé",
|
||||
"public-link": "lien public",
|
||||
"quota-enabled": "Disk Quota is {not}enabled for this user",
|
||||
"received": "received",
|
||||
"scripts": "scripts",
|
||||
"sent": "sent",
|
||||
"started": "Started",
|
||||
"storages-by-type": "Storages by type",
|
||||
"storages": "stockage{plural}",
|
||||
"strings-use": "strings use",
|
||||
"tasks": "Tâches",
|
||||
"total-files": "total files",
|
||||
"total-users": "total users",
|
||||
"total": "total",
|
||||
"until": "Until",
|
||||
"updates-available-for": "Des mises à jour sont disponibles pour",
|
||||
"updates-available": "mise{plural} à jour disponible",
|
||||
"used": "used",
|
||||
"user": "user",
|
||||
"using": "using",
|
||||
"version": "version",
|
||||
"wasted": "wasted"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"home": {
|
||||
"no-results": "검색 결과 없음",
|
||||
"no-data": "구성된 데이터 없음",
|
||||
"no-data": "설정된 데이터 없음",
|
||||
"no-items-section": "아직 표시할 항목이 없습니다"
|
||||
},
|
||||
"search": {
|
||||
"search-label": "검색",
|
||||
"search-placeholder": "검색어 입력",
|
||||
"search-placeholder": "검색어를 입력하여 필터링",
|
||||
"clear-search-tooltip": "초기화",
|
||||
"enter-to-search-web": "웹에서 검색하려면 Enter 키를 누르세요"
|
||||
},
|
||||
@@ -35,28 +35,28 @@
|
||||
},
|
||||
"config": {
|
||||
"main-tab": "메인 메뉴",
|
||||
"view-config-tab": "구성창 보기",
|
||||
"edit-config-tab": "구성 수정",
|
||||
"custom-css-tab": "사용자지정 스타일",
|
||||
"heading": "구성 옵션",
|
||||
"download-config-button": "현재 구성 다운로드",
|
||||
"edit-config-button": "구성 수정하기",
|
||||
"view-config-tab": "설정창 보기",
|
||||
"edit-config-tab": "설정 수정",
|
||||
"custom-css-tab": "사용자 지정 스타일",
|
||||
"heading": "설정 옵션",
|
||||
"download-config-button": "현재 설정 다운로드",
|
||||
"edit-config-button": "설정 수정하기",
|
||||
"edit-css-button": "사용자 정의 스타일 수정하기",
|
||||
"cloud-sync-button": "클라우드 동기화 활성화",
|
||||
"edit-cloud-sync-button": "클라우드 동기화 수정",
|
||||
"rebuild-app-button": "애플리케이션 재구축",
|
||||
"change-language-button": "언어 변경",
|
||||
"reset-settings-button": "구성 초기화",
|
||||
"reset-settings-button": "설정 초기화",
|
||||
"app-info-button": "앱 정보",
|
||||
"backup-note": "변경하기 전에 구성을 백업하는 것이 좋습니다.",
|
||||
"reset-config-msg-l1": "로컬 저장소에서 모든 사용자 구성이 제거되지만 'conf.yml' 파일에는 영향을 미치지 않습니다.",
|
||||
"backup-note": "변경하기 전에 설정을 백업하는 것이 좋습니다.",
|
||||
"reset-config-msg-l1": "로컬 저장소에서 모든 사용자 설정이 제거되지만 'conf.yml' 파일에는 영향을 미치지 않습니다.",
|
||||
"reset-config-msg-l2": "나중에 사용하려면 먼저 로컬에서 변경한 내용을 백업해야 합니다.",
|
||||
"reset-config-msg-l3": "계속하시겠습니까?",
|
||||
"data-cleared-msg": "데이터 삭제 성공",
|
||||
"actions-label": "동작",
|
||||
"copy-config-label": "구성 복사",
|
||||
"data-copied-msg": "구성이 클립보드에 복사되었습니다.",
|
||||
"reset-config-label": "구성 초기화",
|
||||
"copy-config-label": "설정 복사",
|
||||
"data-copied-msg": "설정이 클립보드에 복사되었습니다.",
|
||||
"reset-config-label": "설정 초기화",
|
||||
"css-save-btn": "변경 사항을 저장",
|
||||
"css-note-label": "노트",
|
||||
"css-note-l1": "변경 사항을 적용하려면 페이지 새로고침이 필요합니다.",
|
||||
@@ -76,18 +76,18 @@
|
||||
"layout-horizontal": "수평 배치",
|
||||
"layout-vertical": "수직 배치",
|
||||
"item-size-label": "항목 크기",
|
||||
"item-size-small": "작음",
|
||||
"item-size-small": "작게",
|
||||
"item-size-medium": "중간",
|
||||
"item-size-large": "큼",
|
||||
"config-launcher-label": "구성",
|
||||
"config-launcher-tooltip": "구성 업데이트",
|
||||
"item-size-large": "크게",
|
||||
"config-launcher-label": "설정",
|
||||
"config-launcher-tooltip": "설정 업데이트",
|
||||
"sign-out-tooltip": "로그아웃",
|
||||
"sign-in-tooltip": "로그인",
|
||||
"sign-in-welcome": "{username}님 환영합니다!"
|
||||
},
|
||||
"updates": {
|
||||
"app-version-note": "Dashy 버전",
|
||||
"up-to-date": "최신의",
|
||||
"up-to-date": "최신 버전",
|
||||
"out-of-date": "업데이트 가능",
|
||||
"unsupported-version-l1": "지원되지 않는 버전의 Dashy를 사용하고 있습니다.",
|
||||
"unsupported-version-l2": "최상의 경험과 최신 보안 패치를 위해 다음 버전으로 업데이트하세요."
|
||||
@@ -99,7 +99,7 @@
|
||||
"success-msg": "언어가 업데이트 되었습니다."
|
||||
},
|
||||
"theme-maker": {
|
||||
"title": "테마 구성",
|
||||
"title": "테마 설정",
|
||||
"export-button": "시용자 정의 변수 저장",
|
||||
"reset-button": "테마 초기화",
|
||||
"show-all-button": "모든 변수 표시",
|
||||
@@ -111,27 +111,27 @@
|
||||
"reset-toast": "C{theme}에 대한 사용자 정의 색상이 제거되었습니다."
|
||||
},
|
||||
"config-editor": {
|
||||
"save-location-label": "위치 저장",
|
||||
"save-location-label": "저장 위치",
|
||||
"location-local-label": "로컬로 적용",
|
||||
"location-disk-label": "구성 파일에 변경 사항 쓰기",
|
||||
"location-disk-label": "설정 파일에 변경 사항 쓰기",
|
||||
"save-button": "변경 사항 저장",
|
||||
"preview-button": "변경 사항 미리보기",
|
||||
"valid-label": "유효한 구성",
|
||||
"valid-label": "유효한 설정",
|
||||
"status-success-msg": "작업 완료",
|
||||
"status-fail-msg": "작업 실패",
|
||||
"success-msg-disk": "구성 파일이 디스크에 성공적으로 저장되었습니다.",
|
||||
"success-msg-disk": "설정 파일이 디스크에 성공적으로 저장되었습니다.",
|
||||
"success-msg-local": "로컬 변경 사항이 성공적으로 저장되었습니다.",
|
||||
"success-note-l1": "앱이 자동으로 다시 빌드됩니다.",
|
||||
"success-note-l2": "이 작업은 최대 몇 분이 걸릴 수 있습니다.",
|
||||
"success-note-l3": "변경 사항을 적용하려면 페이지를 새로고침해야 합니다.",
|
||||
"error-msg-save-mode": "저장 모드를 선택하세요: 로컬 또는 파일",
|
||||
"error-msg-cannot-save": "구성을 저장하는 동안 오류가 발생했습니다.",
|
||||
"error-msg-bad-json": "JSON 오류, 형식이 잘못되었을 수 있음",
|
||||
"error-msg-cannot-save": "설정을 저장하는 동안 오류가 발생했습니다.",
|
||||
"error-msg-bad-json": "JSON 오류, 형식이 잘못되었을 수 있습니다.",
|
||||
"warning-msg-validation": "유효성 검증 경고",
|
||||
"not-admin-note": "관리자로 로그인하지 않았기 때문에 디스크에 변경 사항을 저장할 수 없습니다."
|
||||
},
|
||||
"app-rebuild": {
|
||||
"title": "애플리케이션 재구축",
|
||||
"title": "애플리케이션 다시 빌드",
|
||||
"rebuild-note-l1": "conf.yml 파일에 기록된 변경 사항을 적용하려면 다시 빌드해야 합니다.",
|
||||
"rebuild-note-l2": "이것은 자동으로 수행되어야 하지만 그렇지 않은 경우 여기에서 수동으로 실행할 수 있습니다.",
|
||||
"rebuild-note-l3": "로컬에 저장된 수정 사항에는 필요하지 않습니다..",
|
||||
@@ -146,10 +146,10 @@
|
||||
},
|
||||
"cloud-sync": {
|
||||
"title": "클라우드 백업 및 복원",
|
||||
"intro-l1": "클라우드 백업 및 복원은 옵션 기능으로 구성을 인터넷에 업로드한 다음 다른 기기나 Dashy 인스턴스에서 복원할 수 있습니다.",
|
||||
"intro-l1": "클라우드 백업 및 복원은 옵션 기능으로 설정을 인터넷에 업로드한 다음 다른 기기나 Dashy 인스턴스에서 복원할 수 있습니다.",
|
||||
"intro-l2": "모든 데이터는 암호를 키로 사용하여 AES로 종단 간 암호화됩니다..",
|
||||
"intro-l3": "자세한 내용은",
|
||||
"backup-title-setup": "백업 만들기",
|
||||
"backup-title-setup": "백업 생성하기",
|
||||
"backup-title-update": "백업 업데이트",
|
||||
"password-label-setup": "비밀번호 선택",
|
||||
"password-label-update": "비밀번호를 입력하세요",
|
||||
@@ -165,7 +165,7 @@
|
||||
"backup-error-unknown": "요청을 처리할 수 없습니다",
|
||||
"backup-error-password": "잘못된 비밀번호. 비밀번호를 다시 입력하세요.",
|
||||
"backup-success-msg": "성공적으로 완료됨",
|
||||
"restore-success-msg": "구성이 성공적으로 복원되었습니다."
|
||||
"restore-success-msg": "설정이 성공적으로 복원되었습니다."
|
||||
},
|
||||
"menu": {
|
||||
"open-section-title": "열기",
|
||||
@@ -185,7 +185,7 @@
|
||||
"newtab": "새로운 탭",
|
||||
"modal": "팝업 모달",
|
||||
"workspace": "작업 공간 보기",
|
||||
"clipboard": "클립 보드에 복사",
|
||||
"clipboard": "클립보드에 복사",
|
||||
"options-section-title": "옵션",
|
||||
"edit-item": "수정",
|
||||
"move-item": "복사 또는 이동",
|
||||
@@ -206,29 +206,29 @@
|
||||
"edit-site-data-subheading": "사이트 데이터 수정",
|
||||
"edit-page-info-btn": "페이지 정보 수정",
|
||||
"edit-page-info-tooltip": "앱 제목, 설명, 탐색 링크, 바닥글 텍스트 등",
|
||||
"edit-app-config-btn": "앱 구성 수정",
|
||||
"edit-app-config-tooltip": "기타 모든 앱 구성 옵션",
|
||||
"edit-app-config-btn": "앱 설정 수정",
|
||||
"edit-app-config-tooltip": "기타 모든 앱 설정 옵션",
|
||||
"edit-pages-btn": "페이지 편집",
|
||||
"edit-pages-tooltip": "보기 추가 또는 제거",
|
||||
"config-save-methods-subheading": "구성 저장 옵션",
|
||||
"config-save-methods-subheading": "설정 저장 옵션",
|
||||
"save-locally-btn": "로컬에 저장",
|
||||
"save-locally-tooltip": "구성을 브라우저 저장소에 로컬로 저장합니다. 이것은 구성 파일에 영향을 미치지 않지만 변경 사항은 이 장치에만 저장됩니다.",
|
||||
"save-locally-tooltip": "설정을 브라우저 저장소에 로컬로 저장합니다. 이것은 설정 파일에 영향을 미치지 않지만 변경 사항은 이 장치에만 저장됩니다.",
|
||||
"save-disk-btn": "디스크에 저장",
|
||||
"save-disk-tooltip": "디스크의 conf.yml 파일에 구성을 저장합니다. 백업한 다음 기존 구성을 덮어씁니다.",
|
||||
"export-config-btn": "구성 내보내기",
|
||||
"export-config-tooltip": "파일 또는 클립보드로 새 구성 보기 및 내보내기",
|
||||
"save-disk-tooltip": "디스크의 conf.yml 파일에 설정을 저장합니다. 백업한 다음 기존 설정을 덮어씁니다.",
|
||||
"export-config-btn": "설정 내보내기",
|
||||
"export-config-tooltip": "파일 또는 클립보드로 새 설정 보기 및 내보내기",
|
||||
"cloud-backup-btn": "클라우드에 백업",
|
||||
"cloud-backup-tooltip": "구성의 암호화된 백업을 클라우드에 저장",
|
||||
"edit-raw-config-btn": "구성 파일 편집",
|
||||
"edit-raw-config-tooltip": "JSON 편집기를 통해 구성 파일 보기 및 수정",
|
||||
"cloud-backup-tooltip": "설정의 암호화된 백업을 클라우드에 저장",
|
||||
"edit-raw-config-btn": "설정 파일 편집",
|
||||
"edit-raw-config-tooltip": "JSON 편집기를 통해 설정 파일 보기 및 수정",
|
||||
"cancel-changes-btn": "편집 취소",
|
||||
"cancel-changes-tooltip": "현재 수정 사항을 재구성하고 편집 모드를 종료합니다. 이것은 저장된 구성에 영향을 주지 않습니다",
|
||||
"cancel-changes-tooltip": "현재 수정 사항을 재설정하고 편집 모드를 종료합니다. 이것은 저장된 설정에 영향을 주지 않습니다",
|
||||
"edit-mode-name": "편집 모드",
|
||||
"edit-mode-subtitle": "편집 모드에 있습니다.",
|
||||
"edit-mode-description": "구성을 수정하고 결과를 미리 볼 수 있지만 저장할 때까지 변경 사항은 보존되지 않습니다.",
|
||||
"edit-mode-description": "설정을 수정하고 결과를 미리 볼 수 있지만 저장할 때까지 변경 사항은 보존되지 않습니다.",
|
||||
"save-stage-btn": "저장",
|
||||
"cancel-stage-btn": "취소",
|
||||
"save-locally-warning": "계속하면 변경 사항이 브라우저에만 저장됩니다. 다른 컴퓨터에서 사용하기 위해 구성 사본을 내보내야 합니다. 계속하시겠습니까?"
|
||||
"save-locally-warning": "계속하면 변경 사항이 브라우저에만 저장됩니다. 다른 컴퓨터에서 사용하기 위해 설정 사본을 내보내야 합니다. 계속하시겠습니까?"
|
||||
},
|
||||
"edit-item": {
|
||||
"missing-title-err": "제목은 반드시 입력해야 합니다"
|
||||
@@ -241,18 +241,18 @@
|
||||
},
|
||||
"edit-app-config": {
|
||||
"warning-msg-title": "변경에 주의가 필요함",
|
||||
"warning-msg-l1": "다음 옵션은 고급 앱 구성을 위한 것입니다.",
|
||||
"warning-msg-l1": "다음 옵션은 고급 앱 설정을 위한 것입니다.",
|
||||
"warning-msg-l2": "필드에 대해 확실하지 않은 경우 다음을 참조하십시오.",
|
||||
"warning-msg-docs": "도움말",
|
||||
"warning-msg-l3": "의도하지 않은 결과를 피하기 위해."
|
||||
},
|
||||
"export": {
|
||||
"export-title": "구성 내보내기",
|
||||
"export-title": "설정 내보내기",
|
||||
"copy-clipboard-btn": "클립보드에 복사",
|
||||
"copy-clipboard-tooltip": "모든 앱 구성을 YAML 형식으로 시스템 클립보드에 복사",
|
||||
"copy-clipboard-tooltip": "모든 앱 설정을 YAML 형식으로 시스템 클립보드에 복사",
|
||||
"download-file-btn": "파일로 다운로드",
|
||||
"download-file-tooltip": "모든 앱 구성을 YAML 파일로 기기에 다운로드합니다.",
|
||||
"view-title": "구성 보기"
|
||||
"download-file-tooltip": "모든 앱 설정을 YAML 파일로 기기에 다운로드합니다.",
|
||||
"view-title": "설정 보기"
|
||||
}
|
||||
},
|
||||
"widgets": {
|
||||
@@ -292,8 +292,8 @@
|
||||
"departures": "출발"
|
||||
},
|
||||
"tfl-status": {
|
||||
"good-service-all": "모든 Line 에서 좋은 서비스",
|
||||
"good-service-rest": "다른 모든 Line 에서 좋은 서비스"
|
||||
"good-service-all": "모든 노선 원활히 운행 중",
|
||||
"good-service-rest": "다른 모든 노선 원활히 운행 중"
|
||||
},
|
||||
"synology-download": {
|
||||
"download": "다운로드",
|
||||
@@ -303,6 +303,16 @@
|
||||
"remaining": "남은 작업",
|
||||
"up": "위로",
|
||||
"down": "아래로"
|
||||
},
|
||||
"gluetun-status": {
|
||||
"vpn-ip": "VPN IP",
|
||||
"country": "국가",
|
||||
"region": "지역",
|
||||
"city": "도시",
|
||||
"post-code": "우편번호",
|
||||
"location": "위경도",
|
||||
"timezone": "타임존",
|
||||
"organization": "조직"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
389
src/assets/locales/sk.json
Normal file
389
src/assets/locales/sk.json
Normal file
@@ -0,0 +1,389 @@
|
||||
{
|
||||
"home": {
|
||||
"no-results": "Žiadne výsledky vyhľadávania",
|
||||
"no-data": "Nie sú nakonfigurované žiadne údaje",
|
||||
"no-items-section": "Zatiaľ žiadne položky na zobrazenie"
|
||||
},
|
||||
"search": {
|
||||
"search-label": "Vyhľadávanie",
|
||||
"search-placeholder": "Ak chcete filtrovať, začnite písať",
|
||||
"clear-search-tooltip": "Vymazať vyhľadávanie",
|
||||
"enter-to-search-web": "Stlačením klávesu Enter spustíte vyhľadávanie na webe"
|
||||
},
|
||||
"login": {
|
||||
"title": "Dashy",
|
||||
"username-label": "Používateľské meno",
|
||||
"password-label": "Heslo",
|
||||
"login-button": "Prihlásiť sa",
|
||||
"remember-me-label": "Zapamätaj si ma",
|
||||
"remember-me-never": "Nikdy",
|
||||
"remember-me-hour": "4 hodiny",
|
||||
"remember-me-day": "1 deň",
|
||||
"remember-me-week": "1 týždeň",
|
||||
"remember-me-long-time": "Dlhý čas",
|
||||
"error-missing-username": "Chýba používateľské meno",
|
||||
"error-missing-password": "Chýba heslo",
|
||||
"error-incorrect-username": "Užívateľ Nenájdený",
|
||||
"error-incorrect-password": "Nesprávne heslo",
|
||||
"success-message": "Prihlasovanie...",
|
||||
"logout-message": "Odhlasený",
|
||||
"already-logged-in-title": "Už prihlásený",
|
||||
"already-logged-in-text": "Ste prihlásený ako",
|
||||
"proceed-to-dashboard": "Pokračujte na Dashboard",
|
||||
"log-out-button": "Odhlásiť sa",
|
||||
"proceed-guest-button": "Pokračovať ako hosť"
|
||||
},
|
||||
"config": {
|
||||
"main-tab": "Hlavné menu",
|
||||
"view-config-tab": "Zobraziť konfiguráciu",
|
||||
"edit-config-tab": "Upraviť konfiguráciu",
|
||||
"custom-css-tab": "Vlastné štýly",
|
||||
"heading": "Možnosti konfigurácie",
|
||||
"download-config-button": "Zobraziť / Exportovať konfiguráciu",
|
||||
"edit-config-button": "Upraviť konfiguráciu",
|
||||
"edit-css-button": "Upraviť vlastné CSS",
|
||||
"cloud-sync-button": "Povoliť synchronizáciu s cloudom",
|
||||
"edit-cloud-sync-button": "Upraviť synchronizáciu s cloudom",
|
||||
"rebuild-app-button": "Prestavať aplikáciu",
|
||||
"change-language-button": "Zmeniť jazyk aplikácie",
|
||||
"reset-settings-button": "Obnoviť miestne nastavenia",
|
||||
"app-info-button": "Informácie o aplikácii",
|
||||
"backup-note": "Pred vykonaním zmien sa odporúča vytvoriť zálohu vašej konfigurácie.",
|
||||
"reset-config-msg-l1": "Toto odstráni všetky používateľské nastavenia z lokálneho úložiska, ale neovplyvní to váš súbor 'conf.yml'.",
|
||||
"reset-config-msg-l2": "Všetky zmeny, ktoré ste vykonali lokálne, by ste si mali najskôr zálohovať, ak ich chcete použiť v budúcnosti.",
|
||||
"reset-config-msg-l3": "Naozaj chcete pokračovať?",
|
||||
"data-cleared-msg": "Údaje boli úspešne vymazané",
|
||||
"actions-label": "Akcie",
|
||||
"copy-config-label": "Kopírovať konfig",
|
||||
"data-copied-msg": "Konfigurácia bola skopírovaná do schránky",
|
||||
"reset-config-label": "Obnoviť konfiguráciu",
|
||||
"css-save-btn": "Uložiť zmeny",
|
||||
"css-note-label": "Poznámka",
|
||||
"css-note-l1": "Aby sa zmeny prejavili, budete musieť obnoviť stránku.",
|
||||
"css-note-l2": "Prepisy štýlov sa ukladajú iba lokálne, preto sa odporúča vytvoriť kópiu CSS.",
|
||||
"css-note-l3": "Ak chcete odstrániť všetky vlastné štýly, odstráňte obsah a stlačte Uložiť zmeny"
|
||||
},
|
||||
"alternate-views": {
|
||||
"alternate-view-heading": "Prepnúť zobrazenie",
|
||||
"default": "Predvolené",
|
||||
"workspace": "Pracovný priestor",
|
||||
"minimal": "Minimalistické"
|
||||
},
|
||||
"settings": {
|
||||
"theme-label": "Téma",
|
||||
"layout-label": "Rozloženie",
|
||||
"layout-auto": "Automaticky",
|
||||
"layout-horizontal": "Horizontálne",
|
||||
"layout-vertical": "Vertikálne",
|
||||
"item-size-label": "Veľkosť položky",
|
||||
"item-size-small": "Malé",
|
||||
"item-size-medium": "Stredné",
|
||||
"item-size-large": "Veľké",
|
||||
"config-launcher-label": "Konfigurácia",
|
||||
"config-launcher-tooltip": "Aktualizovať konfiguráciu",
|
||||
"sign-out-tooltip": "Odhlásiť sa",
|
||||
"sign-in-tooltip": "Prihlásiť sa",
|
||||
"sign-in-welcome": "Dobrý deň, {username}!"
|
||||
},
|
||||
"updates": {
|
||||
"app-version-note": "Dashy verzia",
|
||||
"up-to-date": "Aktuálne",
|
||||
"out-of-date": "Aktualizácia k dispozícii",
|
||||
"unsupported-version-l1": "Používate nepodporovanú verziu Dashy",
|
||||
"unsupported-version-l2": "Ak chcete získať najlepší zážitok a najnovšie opravy zabezpečenia, aktualizujte na"
|
||||
},
|
||||
"language-switcher": {
|
||||
"title": "Zmeniť jazyk aplikácie",
|
||||
"dropdown-label": "Vyberte jazyk",
|
||||
"save-button": "Uložiť",
|
||||
"success-msg": "Jazyk bol aktualizovaný na"
|
||||
},
|
||||
"theme-maker": {
|
||||
"title": "Konfigurátor tém",
|
||||
"export-button": "Exportovať vlastné premenné",
|
||||
"reset-button": "Obnoviť štýly pre",
|
||||
"show-all-button": "Zobraziť všetky premenné",
|
||||
"change-fonts-button": "Zmeniť písmo",
|
||||
"save-button": "Uložiť",
|
||||
"cancel-button": "Zrušiť",
|
||||
"saved-toast": "{theme} úspešne aktualizované",
|
||||
"copied-toast": "Údaje motívu pre {theme} boli skopírované do schránky",
|
||||
"reset-toast": "Vlastné farby pre {theme} boli odstránené"
|
||||
},
|
||||
"config-editor": {
|
||||
"save-location-label": "Uložiť umiestnenie",
|
||||
"location-local-label": "Aplikovať lokálne",
|
||||
"location-disk-label": "Zapíšte zmeny do konfiguračného súboru",
|
||||
"save-button": "Uložiť zmeny",
|
||||
"preview-button": "Ukážka zmien",
|
||||
"valid-label": "Konfigurácia je platná",
|
||||
"status-success-msg": "Úloha dokončená",
|
||||
"status-fail-msg": "Úloha zlyhala",
|
||||
"success-msg-disk": "Konfiguračný súbor bol úspešne zapísaný na disk",
|
||||
"success-msg-local": "Miestne zmeny boli úspešne uložené",
|
||||
"success-note-l1": "Aplikácia by sa mala automaticky obnoviť.",
|
||||
"success-note-l2": "Môže to trvať až minútu.",
|
||||
"success-note-l3": "Aby sa zmeny prejavili, budete musieť obnoviť stránku.",
|
||||
"error-msg-save-mode": "Vyberte režim uloženia: Miestny alebo Súbor",
|
||||
"error-msg-cannot-save": "Pri ukladaní konfigurácie sa vyskytla chyba",
|
||||
"error-msg-bad-json": "Chyba v JSON, možno má nesprávny formát",
|
||||
"warning-msg-validation": "Upozornenie na validáciu",
|
||||
"not-admin-note": "Nemôžete zapisovať zmeneny na disk, pretože nie ste prihlásený ako správca"
|
||||
},
|
||||
"app-rebuild": {
|
||||
"title": "Prestavať aplikáciu",
|
||||
"rebuild-note-l1": "Aby sa zmeny zapísané do súboru conf.yml prejavili, je potrebné opätovné zostavenie.",
|
||||
"rebuild-note-l2": "Malo by sa to stať automaticky, ale ak sa tak nestalo, môžete to spustiť manuálne tu.",
|
||||
"rebuild-note-l3": "Toto sa nevyžaduje pre lokálne uložené úpravy.",
|
||||
"rebuild-button": "Spustite zostavovanie",
|
||||
"rebuilding-status-1": "Zostavovanie...",
|
||||
"rebuilding-status-2": "Môže to trvať pár minút",
|
||||
"error-permission": "Na spustenie tejto akcie nemáte povolenie",
|
||||
"success-msg": "Zostavba bola úspešne dokončená",
|
||||
"fail-msg": "Operácia zostavenia zlyhala",
|
||||
"reload-note": "Aby sa zmeny prejavili, je teraz potrebné znovu načítať stránku",
|
||||
"reload-button": "Znovu načítať stránku"
|
||||
},
|
||||
"cloud-sync": {
|
||||
"title": "Cloud záloha & obnova",
|
||||
"intro-l1": "Cloudové zálohovanie a obnovenie je voliteľná funkcia, ktorá vám umožňuje nahrať vašu konfiguráciu na internet a potom ju obnoviť na akomkoľvek inom zariadení alebo inštancii Dashy.",
|
||||
"intro-l2": "Všetky údaje sú úplne end-to-end šifrované pomocou AES, pričom ako kľúč sa používa vaše heslo.",
|
||||
"intro-l3": "Viac informácií nájdete na",
|
||||
"backup-title-setup": "Vytvoriť zálohu",
|
||||
"backup-title-update": "Aktualizovať zálohu",
|
||||
"password-label-setup": "Vyberte si heslo",
|
||||
"password-label-update": "Zadajte svoje heslo",
|
||||
"backup-button-setup": "Záloha",
|
||||
"backup-button-update": "Aktualizovať zálohu",
|
||||
"backup-id-label": "Vaše ID zálohy",
|
||||
"backup-id-note": "Toto sa používa na neskoršie obnovenie zo záloh. Preto si ho spolu s heslom uschovajte na bezpečnom mieste.",
|
||||
"restore-title": "Obnoviť zálohu",
|
||||
"restore-id-label": "Obnoviť ID",
|
||||
"restore-password-label": "Heslo",
|
||||
"restore-button": "Obnoviť",
|
||||
"backup-missing-password": "Chýba heslo",
|
||||
"backup-error-unknown": "Nie je možné spracovať požiadavku",
|
||||
"backup-error-password": "Nesprávne heslo. Zadajte svoje aktuálne heslo.",
|
||||
"backup-success-msg": "Úspešne dokončené",
|
||||
"restore-success-msg": "Konfigurácia bola úspešne obnovená"
|
||||
},
|
||||
"menu": {
|
||||
"open-section-title": "Otvoriť v",
|
||||
"sametab": "Aktuálna karta",
|
||||
"newtab": "Nová karta",
|
||||
"modal": "Vyskakovací modal",
|
||||
"workspace": "Zobrazenie pracovného priestoru",
|
||||
"options-section-title": "Možnosti",
|
||||
"edit-item": "Upraviť",
|
||||
"move-item": "Kopírovať alebo presunúť",
|
||||
"remove-item": "Odstrániť"
|
||||
},
|
||||
"context-menus": {
|
||||
"item": {
|
||||
"open-section-title": "Otvoriť v",
|
||||
"sametab": "Aktuálna karta",
|
||||
"newtab": "Nová karta",
|
||||
"modal": "Vyskakovací modal",
|
||||
"workspace": "Zobrazenie pracovného priestoru",
|
||||
"clipboard": "Kopírovať do schránky",
|
||||
"options-section-title": "Možnosti",
|
||||
"edit-item": "Upraviť",
|
||||
"move-item": "Kopírovať alebo presunúť",
|
||||
"remove-item": "Odstrániť",
|
||||
"copied-toast": "Adresa URL bola skopírovaná do schránky"
|
||||
},
|
||||
"section": {
|
||||
"open-section": "Otvorená sekcia",
|
||||
"edit-section": "Upraviť",
|
||||
"expand-collapse": "Rozbaliť / zbaliť",
|
||||
"move-section": "Presunúť do",
|
||||
"remove-section": "Odstrániť"
|
||||
}
|
||||
},
|
||||
"interactive-editor": {
|
||||
"menu": {
|
||||
"start-editing-tooltip": "Vstúpte do interaktívneho editora",
|
||||
"edit-site-data-subheading": "Upraviť údaje stránok",
|
||||
"edit-page-info-btn": "Upraviť informácie o stránke",
|
||||
"edit-page-info-tooltip": "Názov aplikácie, popis, navigačné odkazy, text päty atď.",
|
||||
"edit-app-config-btn": "Upraviť konfiguráciu aplikácie",
|
||||
"edit-app-config-tooltip": "Všetky ostatné možnosti konfigurácie aplikácie",
|
||||
"edit-pages-btn": "Upraviť stránky",
|
||||
"edit-pages-tooltip": "Pridať alebo odstrániť ďalšie zobrazenia",
|
||||
"config-save-methods-subheading": "Možnosti uloženia konfigurácie",
|
||||
"save-locally-btn": "Uložiť lokálne",
|
||||
"save-locally-tooltip": "Uložiť konfiguráciu lokálne do úložiska prehliadača. Toto neovplyvní váš konfiguračný súbor, ale zmeny sa uložia iba na tomto zariadení",
|
||||
"save-disk-btn": "Uložiť na disk",
|
||||
"save-disk-tooltip": "Uložte konfiguráciu do súboru conf.yml na disku. Tým sa zálohuje a potom sa prepíše vaša existujúca konfigurácia",
|
||||
"export-config-btn": "Exportovať konfiguráciu",
|
||||
"export-config-tooltip": "Zobraziť a exportovať novú konfiguráciu, buď do súboru alebo do schránky",
|
||||
"cloud-backup-btn": "Zálohovať do cloudu",
|
||||
"cloud-backup-tooltip": "Uložiť šifrovanú zálohu konfigurácie do cloudu",
|
||||
"edit-raw-config-btn": "Upraviť nespracovanú konfiguráciu",
|
||||
"edit-raw-config-tooltip": "Zobraziť a upraviť surovú konfiguráciu pomocou editora JSON",
|
||||
"cancel-changes-btn": "Zrušiť úpravu",
|
||||
"cancel-changes-tooltip": "Resetujte aktuálne úpravy a ukončite režim úprav. Toto neovplyvní vašu uloženú konfiguráciu",
|
||||
"edit-mode-name": "Režim úprav",
|
||||
"edit-mode-subtitle": "Nachádzate sa v režime úprav",
|
||||
"edit-mode-description": "To znamená, že môžete vykonať úpravy vo svojej konfigurácii a zobraziť ukážku výsledkov, ale kým neuložíte, žiadna z vašich zmien sa nezachová.",
|
||||
"save-stage-btn": "Uložiť",
|
||||
"cancel-stage-btn": "Zrušiť",
|
||||
"save-locally-warning": "Ak budete pokračovať, zmeny sa uložia iba vo vašom prehliadači. Mali by ste exportovať kópiu svojej konfigurácie na použitie na iných počítačoch. Chcete pokračovať?"
|
||||
},
|
||||
"edit-item": {
|
||||
"missing-title-err": "Vyžaduje sa názov položky"
|
||||
},
|
||||
"edit-section": {
|
||||
"edit-section-title": "Upraviť sekciu",
|
||||
"add-section-title": "Pridať novú sekciu",
|
||||
"edit-tooltip": "Kliknutím upravíte alebo kliknutím pravým tlačidlom myši zobrazíte ďalšie možnosti",
|
||||
"remove-confirm": "Naozaj chcete odstrániť túto sekciu? Túto akciu je možné vrátiť neskôr."
|
||||
},
|
||||
"edit-app-config": {
|
||||
"warning-msg-title": "Postupujte opatrne",
|
||||
"warning-msg-l1": "Nasledujúce možnosti sú pre rozšírenú konfiguráciu aplikácie.",
|
||||
"warning-msg-l2": "Ak si nie ste istý niektorým z polí, uveďte odkaz",
|
||||
"warning-msg-docs": "dokumentácia",
|
||||
"warning-msg-l3": "aby sa predišlo neúmyselným následkom."
|
||||
},
|
||||
"export": {
|
||||
"export-title": "Exportovať konfiguráciu",
|
||||
"copy-clipboard-btn": "Kopírovať do schránky",
|
||||
"copy-clipboard-tooltip": "Kopírovať všetky konfigurácie aplikácie do systémovej schránky vo formáte YAML",
|
||||
"download-file-btn": "Stiahnuť ako súbor",
|
||||
"download-file-tooltip": "Stiahnuť všetky konfigurácie aplikácie do svojho zariadenia v súbore YAML",
|
||||
"view-title": "Zobraziť konfiguráciu"
|
||||
}
|
||||
},
|
||||
"widgets": {
|
||||
"general": {
|
||||
"loading": "Načítavam...",
|
||||
"show-more": "Rozbaliť podrobnosti",
|
||||
"show-less": "Zobraziť menej",
|
||||
"open-link": "Pokračovať v čítaní"
|
||||
},
|
||||
"pi-hole": {
|
||||
"status-heading": "Stav"
|
||||
},
|
||||
"stat-ping": {
|
||||
"up": "Online",
|
||||
"down": "Offline"
|
||||
},
|
||||
"net-data": {
|
||||
"cpu-chart-title": "História CPU",
|
||||
"mem-chart-title": "Využitie pamäte",
|
||||
"mem-breakdown-title": "Zlyhanie pamäte",
|
||||
"load-chart-title": "Načítanie systému"
|
||||
},
|
||||
"glances": {
|
||||
"disk-space-free": "Free",
|
||||
"disk-space-used": "Použité",
|
||||
"disk-mount-point": "Mount Point",
|
||||
"disk-file-system": "Systém súborov",
|
||||
"disk-io-read": "Prečítať",
|
||||
"disk-io-write": "Zápis",
|
||||
"system-load-desc": "Počet procesov čakajúcich vo fronte spustenia, spriemerovaný vo všetkých jadrách"
|
||||
},
|
||||
"system-info": {
|
||||
"uptime": "Čas prevádzky"
|
||||
},
|
||||
"flight-data": {
|
||||
"arrivals": "Príchody",
|
||||
"departures": "Odchody"
|
||||
},
|
||||
"tfl-status": {
|
||||
"good-service-all": "Dobré služby na všetkých linkách",
|
||||
"good-service-rest": "Dobré služby na všetkých ostatných linkách"
|
||||
},
|
||||
"synology-download": {
|
||||
"download": "Stiahnuť",
|
||||
"upload": "Nahrať",
|
||||
"downloaded": "Stiahnuté",
|
||||
"uploaded": "Nahrané",
|
||||
"remaining": "Zostávajúce",
|
||||
"up": "Aktívne",
|
||||
"down": "Neaktívne"
|
||||
},
|
||||
"gluetun-status": {
|
||||
"vpn-ip": "IP VPN",
|
||||
"country": "Krajina",
|
||||
"region": "Región",
|
||||
"city": "Mesto",
|
||||
"post-code": "PSČ",
|
||||
"location": "Poloha",
|
||||
"timezone": "Časové pásmo",
|
||||
"organization": "Organizácia"
|
||||
},
|
||||
"nextcloud": {
|
||||
"active": "active",
|
||||
"and": "a",
|
||||
"aplications": "aplikácie",
|
||||
"available": "dostupné",
|
||||
"away": "Preč",
|
||||
"cache-full": "MEDZIPAMÄTE PLNÉ",
|
||||
"chat-room": "chatovacia miestnosť",
|
||||
"delete-all": "Odstrániť všetko",
|
||||
"delete-notification": "Odstrániť upozornenie",
|
||||
"disabled": "zakázané",
|
||||
"disk-quota": "Disková kvóta",
|
||||
"disk-space": "Miesta na disku",
|
||||
"dnd": "Nerušiť",
|
||||
"email": "e-mail",
|
||||
"enabled": "povolené",
|
||||
"federated-shares-ucfirst": "Federované akcie",
|
||||
"federated-shares": "federované akcie",
|
||||
"files": "file{množné číslo}",
|
||||
"free": "zadarmo",
|
||||
"groups": "skupiny",
|
||||
"hit-rate": "miera prístupu",
|
||||
"hits": "hits",
|
||||
"home": "domov",
|
||||
"in": "v",
|
||||
"keys": "kľúče",
|
||||
"last-24-hours": "posledných 24 hodín",
|
||||
"last-5-minutes": "za posledných 5 minút",
|
||||
"last-hour": "za poslednú hodinu",
|
||||
"last-login": "Posledné prihlásenie",
|
||||
"last-restart": "Posledný reštart",
|
||||
"load-averages": "Priemery zaťaženia na všetkých jadrách CPU",
|
||||
"local-shares": "Miestne zdieľania",
|
||||
"local": "lokálne",
|
||||
"max-keys": "max kľúče",
|
||||
"memory-used": "použitá pamäť",
|
||||
"memory-utilisation": "využitie pamäte",
|
||||
"memory": "pamäť",
|
||||
"misses": "misses",
|
||||
"no-notifications": "Žiadne upozornenia",
|
||||
"no-pending-updates": "žiadne čakajúce aktualizácie",
|
||||
"nothing-to-show": "Momentálne tu nie je nič na zobrazenie",
|
||||
"of-which": "z ktorých",
|
||||
"of": "z",
|
||||
"offline": "Offline",
|
||||
"online": "Online",
|
||||
"other": "ostatné",
|
||||
"overall": "Celkovo",
|
||||
"private-link": "súkromný odkaz",
|
||||
"public-link": "verejný odkaz",
|
||||
"quota-enabled": "Disková kvóta je {not}povolená pre tohto používateľa",
|
||||
"received": "prijaté",
|
||||
"scripts": "skripty",
|
||||
"sent": "odoslané",
|
||||
"started": "Spustené",
|
||||
"storages-by-type": "Ukladacie priestory podľa typu",
|
||||
"storages": "úložisko{plural}",
|
||||
"strings-use": "použitie reťazcov",
|
||||
"tasks": "úlohy",
|
||||
"total-files": "celkový počet súborov",
|
||||
"total-users": "celkový počet používateľov",
|
||||
"total": "celkovo",
|
||||
"until": "Do",
|
||||
"updates-available-for": "Aktualizácie sú dostupné pre",
|
||||
"updates-available": "dostupná aktualizácia{plural}",
|
||||
"used": "použité",
|
||||
"user": "používateľ",
|
||||
"using": "používanie",
|
||||
"version": "verzia",
|
||||
"wasted": "plytvanie"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -8,7 +8,7 @@
|
||||
"search-label":"Sök",
|
||||
"search-placeholder":"Börja skriva för att filtrera",
|
||||
"clear-search-tooltip":"Rensa sök",
|
||||
"enter-to-search-web":"Tryck på Retur för att söka på webben"
|
||||
"enter-to-search-web":"Tryck på retur för att söka på webben"
|
||||
},
|
||||
"login":{
|
||||
"title":"Dashy",
|
||||
@@ -44,7 +44,7 @@
|
||||
"edit-css-button":"Redigera Custom CSS",
|
||||
"cloud-sync-button":"Aktivera molnsynk",
|
||||
"edit-cloud-sync-button":"Redigera molnsynk",
|
||||
"rebuild-app-button":"Återuppbygga appen",
|
||||
"rebuild-app-button":"Bygg om appen",
|
||||
"change-language-button":"Ändra appspråk",
|
||||
"reset-settings-button":"Återställ lokala inställningar",
|
||||
"app-info-button":"Appinfo",
|
||||
@@ -102,7 +102,7 @@
|
||||
"title":"Temakonfigurator",
|
||||
"export-button":"Exportera egendefinierade variabler",
|
||||
"reset-button":"Återställ stilmallar för",
|
||||
"show-all-button":"Vissa alla variabler",
|
||||
"show-all-button":"Visa alla variabler",
|
||||
"change-fonts-button":"Ändra typsnitt",
|
||||
"save-button":"Spara",
|
||||
"cancel-button":"Avbryt",
|
||||
@@ -117,8 +117,8 @@
|
||||
"save-button":"Spara ändringar",
|
||||
"preview-button":"Förhandsgranska ändringar",
|
||||
"valid-label":"Konfigurationen är giltig",
|
||||
"status-success-msg":"Åtgärden slutförts",
|
||||
"status-fail-msg":"Åtgärden misslyckats",
|
||||
"status-success-msg":"Åtgärden slutfördes",
|
||||
"status-fail-msg":"Åtgärden misslyckades",
|
||||
"success-msg-disk":"Konfigurationsfil har skrivits till disk utan problem",
|
||||
"success-msg-local":"Lokala ändringar har sparats utan problem",
|
||||
"success-note-l1":"Återskapa",
|
||||
@@ -139,8 +139,8 @@
|
||||
"rebuilding-status-1":"Återskapar...",
|
||||
"rebuilding-status-2":"Detta kan ta några minuter",
|
||||
"error-permission":"Du har inte behörighet att utföra denna åtgärd",
|
||||
"success-msg":"Återskapning lyckats",
|
||||
"fail-msg":"Återskapning misslyckats",
|
||||
"success-msg":"Återskapning lyckades",
|
||||
"fail-msg":"Återskapning misslyckades",
|
||||
"reload-note":"En omladdning av sidan krävs nu för att ändringarna ska gälla",
|
||||
"reload-button":"Ladda om sidan"
|
||||
},
|
||||
@@ -209,15 +209,15 @@
|
||||
"save-locally-btn":"Spara lokalt",
|
||||
"save-locally-tooltip":"Spara konfigurationen lokalt, till webbläsarens lagring. Detta påverkar inte din konfigurationsfil, men ändringarna sparas bara på denna enhet",
|
||||
"save-disk-btn":"Spara till disk",
|
||||
"save-disk-tooltip":"Spara konfiguration to conf.yml-filen på disk. Detta kommer att säkerhetskopiera och sedan skriva över din befintliga konfiguration",
|
||||
"save-disk-tooltip":"Spara konfiguration till conf.yml-filen på disk. Detta kommer att säkerhetskopiera och sedan skriva över din befintliga konfiguration",
|
||||
"export-config-btn":"Exportera konfiguration",
|
||||
"export-config-tooltip":"Visa och exportera den nya konfigurationen, antingen till fil eller urklipp",
|
||||
"cloud-backup-btn":"Säkerhetskopiera till molnet",
|
||||
"cloud-backup-tooltip":"Spara krypterad säkerhetskopia av konfigurationen i molnet",
|
||||
"edit-raw-config-btn":"Redigera raw-konfiguration",
|
||||
"edit-raw-config-tooltip":"Visa och redigera raw-konfiguration via JSON-redigeraren",
|
||||
"edit-raw-config-btn":"Redigera rawkonfiguration",
|
||||
"edit-raw-config-tooltip":"Visa och redigera rawkonfiguration via JSON-redigeraren",
|
||||
"cancel-changes-btn":"Avbryt redigering",
|
||||
"cancel-changes-tooltip":"Radera nuvarande ändringar och lämna Redigeringsläge. Detta kommer in påverka din sparade konfiguration.",
|
||||
"cancel-changes-tooltip":"Radera nuvarande ändringar och lämna Redigeringsläge. Detta kommer inte påverka din sparade konfiguration.",
|
||||
"edit-mode-name":"Redigeringsläge",
|
||||
"edit-mode-subtitle":"Du är i Redigeringsläge",
|
||||
"edit-mode-description":"Detta innebär att du kan göra ändringar i din konfiguration och förhandsgranska resultaten, men tills du sparar kommer inga av dina ändringar att bevaras.",
|
||||
@@ -230,7 +230,7 @@
|
||||
"edit-section":{
|
||||
"edit-section-title":"Redigera sektion",
|
||||
"add-section-title":"Lägg till ny sektion",
|
||||
"edit-tooltip":"Tryck för att redigera, eller högerklicka för fler alternativ",
|
||||
"edit-tooltip":"Tryck för att redigera eller högerklicka för fler alternativ",
|
||||
"remove-confirm":"Är du säker på att du vill ta bort denna sektion? Denna åtgärd kan ångras senare."
|
||||
},
|
||||
"edit-app-config":{
|
||||
@@ -277,8 +277,8 @@
|
||||
"departures":"Avgångar"
|
||||
},
|
||||
"tfl-status":{
|
||||
"good-service-all":"Good Service på alla linjer",
|
||||
"good-service-rest":"Good Service på alla övriga linjer"
|
||||
"good-service-all":"God service på alla linjer",
|
||||
"good-service-rest":"God Service på övriga linjer"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
397
src/assets/locales/tr.json
Normal file
397
src/assets/locales/tr.json
Normal file
@@ -0,0 +1,397 @@
|
||||
{
|
||||
"home": {
|
||||
"no-results": "Hiçbir Arama Sonucu Yok",
|
||||
"no-data": "Henüz Gösterilecek Öğe Yok",
|
||||
"no-items-section": "Henüz Gösterilecek Öğe Yok"
|
||||
},
|
||||
"search": {
|
||||
"search-label": "Ara",
|
||||
"search-placeholder": "Filtrelemek için yazmaya başla.",
|
||||
"clear-search-tooltip": "Aramayı Temizle",
|
||||
"enter-to-search-web": "Web'de aramak için enter'a bas"
|
||||
},
|
||||
"login": {
|
||||
"title": "Dashy",
|
||||
"guest-label": "Misafir Erisimi",
|
||||
"username-label": "Kullanıcı Adı",
|
||||
"password-label": "Parola",
|
||||
"login-button": "Giriş",
|
||||
"remember-me-label": "Beni hatırla",
|
||||
"remember-me-never": "Hiçbir zaman",
|
||||
"remember-me-hour": "4 Saat",
|
||||
"remember-me-day": "1 Gün",
|
||||
"remember-me-week": "1 Hafta",
|
||||
"remember-me-long-time": "Uzun zaman önce",
|
||||
"error-missing-username": "Kullanıcı adı eksık",
|
||||
"error-missing-password": "Parola Eksık",
|
||||
"error-incorrect-username": "Kullanıcı Bulunamadı",
|
||||
"error-incorrect-password": "Hatalı Parola",
|
||||
"success-message": "Giriş Yapılıyor...",
|
||||
"logout-message": "Çıkış Yapıldı",
|
||||
"already-logged-in-title": "Önceden giriş yapılmış",
|
||||
"already-logged-in-text": "Şu kullanıcı olarak giriş yaptınız",
|
||||
"proceed-to-dashboard": "Dashboard'a ilerleyin",
|
||||
"log-out-button": "Çıkış yap",
|
||||
"proceed-guest-button": "Misafir olarak devam et",
|
||||
"guest-intro-1": "Bu örneğin misafir erişimi etkin.",
|
||||
"guest-intro-2": "Misafirler panolara salt görüntüleme erişimine sahiptir, bu nedenle disk üzerinde herhangi bir değişiklik yazamazlar.",
|
||||
"error": "Hata",
|
||||
"error-no-user-configured": "Kimlik doğrulama etkinleştirilmemiş veya hiçbir kullanıcı yapılandırılmamış",
|
||||
"error-go-home-button": "Anasayfaya git",
|
||||
"logged-in-guest": "Misafir olarak giriş yapıldı, Yönlendiriliyor...",
|
||||
"error-guest-access": "Misafir Erişimine İzin Verilmiyor"
|
||||
},
|
||||
"config": {
|
||||
"main-tab": "Ana Menü",
|
||||
"view-config-tab": "Yapılandırmayı Görüntüle",
|
||||
"edit-config-tab": "Yapılandırmayı Düzenle",
|
||||
"custom-css-tab": "Özel Stiller",
|
||||
"heading": "Yapılandırma Seçenekleri",
|
||||
"download-config-button": "Yapılandırma Görüntüle / Dışa Aktar ",
|
||||
"edit-config-button": "Yapılandırmayı Düzenle",
|
||||
"edit-css-button": "Özel CSS Düzenle",
|
||||
"cloud-sync-button": "Bulut Senkronizasyonu Etkinleştir",
|
||||
"edit-cloud-sync-button": "Bulut Senkronizasyonu Düzenle",
|
||||
"rebuild-app-button": "Uygulamayı Tekrar Derle",
|
||||
"change-language-button": "Uygulama Dilini Değiştir",
|
||||
"reset-settings-button": "Yerel Ayarları Sıfırla",
|
||||
"app-info-button": "Uygulama Bilgisi",
|
||||
"backup-note": "Değişiklik yapmadan önce yapılandırmanızın yedeğini almanız önerilir.",
|
||||
"reset-config-msg-l1": "Bu, tüm kullanıcı ayarlarını yerel depolamadan kaldıracak, ancak 'conf.yml' dosyanızı etkilemeyecektir.",
|
||||
"reset-config-msg-l2": "Gelecekte kullanmak istiyorsanız, önce yerel olarak yaptığınız tüm değişiklikleri yedeklemelisiniz.",
|
||||
"reset-config-msg-l3": "Devam etmek istediğinizden emin misiniz?",
|
||||
"data-cleared-msg": "Veriler başarıyla temizlendi",
|
||||
"actions-label": "Eylemler",
|
||||
"copy-config-label": "Yapılandırmayı Kopyala",
|
||||
"data-copied-msg": "Yapılandırma panoya kopyalandı",
|
||||
"reset-config-label": "Yapılandırmayı Sıfırla",
|
||||
"css-save-btn": "Değişiklikleri Kaydet",
|
||||
"css-note-label": "Not",
|
||||
"css-note-l1": "Değişikliklerinizin etkili olması için sayfayı yenilemeniz gerekecek.",
|
||||
"css-note-l2": "Stil geçersiz kılmaları yalnızca yerel olarak depolanır, bu nedenle CSS'nizin bir kopyasını oluşturmanız önerilir.",
|
||||
"css-note-l3": "Tüm özel stilleri kaldırmak için içeriği silin ve Değişiklikleri Kaydet'e basın."
|
||||
},
|
||||
"alternate-views": {
|
||||
"alternate-view-heading": "Görünümü Değiştir",
|
||||
"default": "Varsayılan",
|
||||
"workspace": "Çalışma Alanı",
|
||||
"minimal": "Minimal"
|
||||
},
|
||||
"settings": {
|
||||
"theme-label": "Tema",
|
||||
"layout-label": "Düzen",
|
||||
"layout-auto": "Oto",
|
||||
"layout-horizontal": "Yatay",
|
||||
"layout-vertical": "Dikey",
|
||||
"item-size-label": "Item Size",
|
||||
"item-size-small": "Küçük",
|
||||
"item-size-medium": "Orta",
|
||||
"item-size-large": "Geniş",
|
||||
"config-launcher-label": "Yapılandırma",
|
||||
"config-launcher-tooltip": "Yapılandırmayı Güncelle",
|
||||
"sign-out-tooltip": "Çıkış Yap",
|
||||
"sign-in-tooltip": "Giriş Yap",
|
||||
"sign-in-welcome": "Merhaba {username}!"
|
||||
},
|
||||
"updates": {
|
||||
"app-version-note": "Dashy versiyon",
|
||||
"up-to-date": "Güncel",
|
||||
"out-of-date": "Güncelleştirme mevcut",
|
||||
"unsupported-version-l1": "Dashy'nin desteklenmeyen bir sürümünü kullanıyorsunuz",
|
||||
"unsupported-version-l2": "En iyi deneyim ve en son güvenlik yamaları için lütfen güncelleyin"
|
||||
},
|
||||
"language-switcher": {
|
||||
"title": "Uygulama Dilini Değiştir",
|
||||
"dropdown-label": "Bir Dil Seçin",
|
||||
"save-button": "Kaydet",
|
||||
"success-msg": "Dil şununla güncellendi:"
|
||||
},
|
||||
"theme-maker": {
|
||||
"title": "Tema Yapılandırıcı",
|
||||
"export-button": "Özel Değişkenleri Dışa Aktar",
|
||||
"reset-button": "Şunun için Stilleri Sıfırla:",
|
||||
"show-all-button": "Hepsini Göster",
|
||||
"change-fonts-button": "Yazı Tiplerini Değiştir",
|
||||
"save-button": "Kaydet",
|
||||
"cancel-button": "İptal",
|
||||
"saved-toast": "{theme} Başarıyla Güncellendi",
|
||||
"copied-toast": "{theme} için tema verileri panoya kopyalandı",
|
||||
"reset-toast": "{theme} İçin Özel Renkler Kaldırıldı"
|
||||
},
|
||||
"config-editor": {
|
||||
"save-location-label": "Konumu kaydet",
|
||||
"location-local-label": "Yerel Olarak Uygula",
|
||||
"location-disk-label": "Değişiklikleri Yapılandırma Dosyasına Yaz",
|
||||
"save-button": "Değişiklikleri Kaydet",
|
||||
"preview-button": "Değişiklikleri Önizle",
|
||||
"valid-label": "Yapılandırma Geçerli",
|
||||
"status-success-msg": "İşlem Tamamlandı",
|
||||
"status-fail-msg": "İşlem Başarısız",
|
||||
"success-msg-disk": "Yapılandırma dosyası diske başarıyla yazıldı",
|
||||
"success-msg-local": "Yerel değişiklikler başarıyla kaydedildi",
|
||||
"success-note-l1": "Uygulama otomatik olarak yeniden derlenmelidir.",
|
||||
"success-note-l2": "Bu bir dakika kadar sürebilir.",
|
||||
"success-note-l3": "Değişikliklerin etkili olması için sayfayı yenilemeniz gerekecek.",
|
||||
"error-msg-save-mode": "Lütfen bir Kaydetme Modu seçin: Yerel veya Dosya",
|
||||
"error-msg-cannot-save": "Yapılandırma kaydedilirken bir hata oluştu",
|
||||
"error-msg-bad-json": "JSON'da hata, muhtemelen hatalı biçimlendirilmiş",
|
||||
"warning-msg-validation": "Validation Warning",
|
||||
"not-admin-note": "Yönetici olarak giriş yapmadığınız için değiştirilenleri diske yazamazsınız."
|
||||
},
|
||||
"app-rebuild": {
|
||||
"title": "Uygulamayı Yeniden Derle",
|
||||
"rebuild-note-l1": "conf.yml dosyasına yazılan değişikliklerin etkili olması için yeniden derleme gereklidir.",
|
||||
"rebuild-note-l2": "Bu otomatik olarak gerçekleşmelidir, ancak olmadıysa, buradan manuel olarak tetikleyebilirsiniz.",
|
||||
"rebuild-note-l3": "Yerel olarak depolanan değişiklikler için bu gerekli değildir.",
|
||||
"rebuild-button": "Derlemeye Başla",
|
||||
"rebuilding-status-1": "Derleniyor...",
|
||||
"rebuilding-status-2": "Bu bir kaç dakika alabilir",
|
||||
"error-permission": "Bu eylemi tetikleme izniniz yok",
|
||||
"success-msg": "Derleme başarıyla tamamlandı",
|
||||
"fail-msg": "Derleme başarısız oldu",
|
||||
"reload-note": "Değişikliklerin etkili olması için sayfanın yeniden yüklenmesi gerekiyor",
|
||||
"reload-button": "Sayfayı Yenile"
|
||||
},
|
||||
"cloud-sync": {
|
||||
"title": "Bulut Yedekleme ve Geri Yükleme",
|
||||
"intro-l1": "Bulut yedekleme ve geri yükleme, yapılandırmanızı internete yüklemenizi ve ardından herhangi bir başka cihaza veya Dashy örneğine geri yüklemenizi sağlayan isteğe bağlı bir özelliktir.",
|
||||
"intro-l2": "Tüm veriler, anahtar olarak parolanız kullanılarak AES ile tamamen uçtan uca şifrelenir.",
|
||||
"intro-l3": "Daha fazla bilgi için lütfen şuraya bakın:",
|
||||
"backup-title-setup": "Yedekleme Yap",
|
||||
"backup-title-update": "Yedeği Güncelle",
|
||||
"password-label-setup": "Bir Parola seç",
|
||||
"password-label-update": "Şifrenizi Girin",
|
||||
"backup-button-setup": "Yedekle",
|
||||
"backup-button-update": "Yedeği Güncelle",
|
||||
"backup-id-label": "Yedek Kimliğiniz",
|
||||
"backup-id-note": "Bu, daha sonra yedeklerden geri yüklemek için kullanılır. Bu yüzden onu şifrenizle birlikte güvenli bir yerde saklayın.",
|
||||
"restore-title": "Bir Yedeği Geri Yükle",
|
||||
"restore-id-label": "Kimliği geri yükle",
|
||||
"restore-password-label": "Parola",
|
||||
"restore-button": "Geri Yükle",
|
||||
"backup-missing-password": "Eksik Şifre",
|
||||
"backup-error-unknown": "İstek işlenemiyor",
|
||||
"backup-error-password": "Yanlış parola. Lütfen mevcut şifrenizi giriniz.",
|
||||
"backup-success-msg": "Başarıyla tamamlandı",
|
||||
"restore-success-msg": "Yapılandırma Başarıyla Geri Yüklendi"
|
||||
},
|
||||
"menu": {
|
||||
"open-section-title": "Open In",
|
||||
"sametab": "Current Tab",
|
||||
"newtab": "New Tab",
|
||||
"modal": "Pop-Up Modal",
|
||||
"workspace": "Workspace View",
|
||||
"options-section-title": "Options",
|
||||
"edit-item": "Edit",
|
||||
"move-item": "Copy or Move",
|
||||
"remove-item": "Remove"
|
||||
},
|
||||
"context-menus": {
|
||||
"item": {
|
||||
"open-section-title": "Şurada aç:",
|
||||
"sametab": "Şu anki sekme",
|
||||
"newtab": "Yeni Sekme",
|
||||
"modal": "Açılır Pencere",
|
||||
"workspace": "Çalışma Alanı Görünümü",
|
||||
"clipboard": "Panoya Kopyala",
|
||||
"options-section-title": "Seçenekler",
|
||||
"edit-item": "Düzenle",
|
||||
"move-item": "Kopyala veya Taşı",
|
||||
"remove-item": "Kaldır",
|
||||
"copied-toast": "URL panoya kopyalandı"
|
||||
},
|
||||
"section": {
|
||||
"open-section": "Bölümü Aç",
|
||||
"edit-section": "Düzenle",
|
||||
"expand-collapse": "Genişlet / Daralt",
|
||||
"move-section": "Şuraya Taşı:",
|
||||
"remove-section": "Kaldır"
|
||||
}
|
||||
},
|
||||
"interactive-editor": {
|
||||
"menu": {
|
||||
"start-editing-tooltip": "Etkileşimli Düzenleyiciye girin",
|
||||
"edit-site-data-subheading": "Site Verilerini Düzenle",
|
||||
"edit-page-info-btn": "Sayfa Bilgilerini Düzenle",
|
||||
"edit-page-info-tooltip": "Uygulama başlığı, açıklama, gezinme bağlantıları, altbilgi metni vb.",
|
||||
"edit-app-config-btn": "Uygulama Yapılandırmasını Düzenle",
|
||||
"edit-app-config-tooltip": "Diğer tüm uygulama yapılandırma seçenekleri",
|
||||
"edit-pages-btn": "Sayfaları Düzenle",
|
||||
"edit-pages-tooltip": "Ek görünümler ekleyin veya kaldırın",
|
||||
"config-save-methods-subheading": "Kaydetme Seçeneklerini Yapılandırın",
|
||||
"save-locally-btn": "Yerel Olarak Kaydet",
|
||||
"save-locally-tooltip": "Yapılandırmayı yerel olarak tarayıcı depolama alanına kaydedin. Bu, yapılandırma dosyanızı etkilemeyecek ancak değişiklikler yalnızca bu cihaza kaydedilecek",
|
||||
"save-disk-btn": "Disk'e kaydet",
|
||||
"save-disk-tooltip": "Yapılandırmayı diskteki conf.yml dosyasına kaydedin. Bu, yedekleyecek ve ardından mevcut yapılandırmanızın üzerine yazacaktır.",
|
||||
"export-config-btn": "Yapılandırmayı Dışarı Aktar",
|
||||
"export-config-tooltip": "Yeni yapılandırmayı görüntüleyin ve bir dosyaya veya panoya aktarın",
|
||||
"cloud-backup-btn": "Buluta Yedekle",
|
||||
"cloud-backup-tooltip": "Yapılandırmanın şifrelenmiş yedeğini buluta kaydedin",
|
||||
"edit-raw-config-btn": "Ham Yapılandırmayı Düzenle",
|
||||
"edit-raw-config-tooltip": "JSON editörü aracılığıyla ham yapılandırmayı görüntüleyin ve değiştirin",
|
||||
"cancel-changes-btn": "Düzenlemeyi İptal Et",
|
||||
"cancel-changes-tooltip": "Mevcut değişiklikleri sıfırlayın ve Düzenleme Modundan çıkın. Bu, kayıtlı yapılandırmanızı etkilemez",
|
||||
"edit-mode-name": "Düzenleme modu",
|
||||
"edit-mode-subtitle": "Düzenleme Modundasınız",
|
||||
"edit-mode-description": "Bu, yapılandırmanızda değişiklikler yapabileceğiniz ve sonuçları önizleyebileceğiniz anlamına gelir, ancak siz kaydedene kadar değişikliklerinizin hiçbiri korunmaz.",
|
||||
"save-stage-btn": "Kaydet",
|
||||
"cancel-stage-btn": "İptal",
|
||||
"save-locally-warning": "Devam ederseniz, değişiklikler yalnızca tarayıcınıza kaydedilecektir. Diğer makinelerde kullanmak için yapılandırmanızın bir kopyasını dışa aktarmalısınız. Devam etmek ister misin?"
|
||||
},
|
||||
"edit-item": {
|
||||
"missing-title-err": "Öğe başlığı gerekli"
|
||||
},
|
||||
"edit-section": {
|
||||
"edit-section-title": "Bölümü düzenle",
|
||||
"add-section-title": "Yeni Bölüm Ekle",
|
||||
"edit-tooltip": "Düzenlemek için tıklayın veya daha fazla seçenek için sağ tıklayın",
|
||||
"remove-confirm": "Bu bölümü kaldırmak istediğinizden emin misiniz? Bu işlem daha sonra geri alınabilir."
|
||||
},
|
||||
"edit-app-config": {
|
||||
"warning-msg-title": "Dikkatle ilerleyin",
|
||||
"warning-msg-l1": "Aşağıdaki seçenekler, gelişmiş uygulama yapılandırması içindir.",
|
||||
"warning-msg-l2": "Herhangi bir alandan emin değilseniz, lütfen şu adrese bakın:",
|
||||
"warning-msg-docs": "dokümantasyon",
|
||||
"warning-msg-l3": "istenmeyen sonuçlardan kaçınmak için."
|
||||
},
|
||||
"export": {
|
||||
"export-title": "Yapılandırmayı Dışarı Aktar",
|
||||
"copy-clipboard-btn": "Yapılandırmayı Panoya Kopyala",
|
||||
"copy-clipboard-tooltip": "Tüm uygulama yapılandırmasını sistem panosuna YAML biçiminde kopyalayın",
|
||||
"download-file-btn": "Dosya Olarak İndir",
|
||||
"download-file-tooltip": "Tüm uygulama yapılandırmasını bir YAML dosyasında cihazınıza indirin",
|
||||
"view-title": "Yapılandırmayı Görüntüle"
|
||||
}
|
||||
},
|
||||
"widgets": {
|
||||
"general": {
|
||||
"loading": "Yükleniyor...",
|
||||
"show-more": "Ayrıntıları Genişlet",
|
||||
"show-less": "Daha Az Göster",
|
||||
"open-link": "Okumaya Devam Et"
|
||||
},
|
||||
"pi-hole": {
|
||||
"status-heading": "Durum"
|
||||
},
|
||||
"stat-ping": {
|
||||
"up": "Çevrimiçi",
|
||||
"down": "Çevrimdışı"
|
||||
},
|
||||
"net-data": {
|
||||
"cpu-chart-title": "CPU Geçmişi",
|
||||
"mem-chart-title": "Bellek Kullanımı",
|
||||
"mem-breakdown-title": "Bellek Bozulması",
|
||||
"load-chart-title": "Sistem Yükü"
|
||||
},
|
||||
"glances": {
|
||||
"disk-space-free": "Boşta",
|
||||
"disk-space-used": "Kullanılan",
|
||||
"disk-mount-point": "Bağlama Noktası",
|
||||
"disk-file-system": "Dosya Sistemi",
|
||||
"disk-io-read": "Okuma",
|
||||
"disk-io-write": "Yazma",
|
||||
"system-load-desc": "Çalışma kuyruğunda bekleyen işlemlerin sayısı, tüm çekirdeklerde ortalaması alınır"
|
||||
},
|
||||
"system-info": {
|
||||
"uptime": "Aktiflik Süresi"
|
||||
},
|
||||
"flight-data": {
|
||||
"arrivals": "Geliş",
|
||||
"departures": "Gidiş"
|
||||
},
|
||||
"tfl-status": {
|
||||
"good-service-all": "Tüm Hatlarda İyi Hizmet",
|
||||
"good-service-rest": "Diğer Hatlarda İyi Hizmet"
|
||||
},
|
||||
"synology-download": {
|
||||
"download": "İndir",
|
||||
"upload": "Yükle",
|
||||
"downloaded": "İndirildi",
|
||||
"uploaded": "Yüklendi",
|
||||
"remaining": "Kalan",
|
||||
"up": "Yükleme",
|
||||
"down": "İndirme"
|
||||
},
|
||||
"gluetun-status": {
|
||||
"vpn-ip": "VPN IP",
|
||||
"country": "Ülke",
|
||||
"region": "Bölge",
|
||||
"city": "Şehir",
|
||||
"post-code": "Posta Kodu",
|
||||
"location": "Konum",
|
||||
"timezone": "Zaman Dilimi",
|
||||
"organization": "Organizasyon"
|
||||
},
|
||||
"nextcloud": {
|
||||
"active": "aktif",
|
||||
"and": "ve",
|
||||
"applications": "uygulamalar",
|
||||
"available": "mevcut",
|
||||
"away": "Uzak",
|
||||
"cache-full": "ÖNBELLEK DOLU",
|
||||
"chat-room": "sohbet odası",
|
||||
"delete-all": "Hepsini Sil",
|
||||
"delete-notification": "Bildirimleri sil",
|
||||
"disabled": "pasif",
|
||||
"disk-quota": "Disk Kotası",
|
||||
"disk-space": "Disk Alanı",
|
||||
"dnd": "Rahatsız Etme",
|
||||
"email": "email",
|
||||
"enabled": "aktif",
|
||||
"federated-shares-ucfirst": "Federated shares",
|
||||
"federated-shares": "federated shares",
|
||||
"files": "dosya{plural}",
|
||||
"free": "boş",
|
||||
"groups": "gruplar",
|
||||
"hit-rate": "tıklama oranı",
|
||||
"hits": "tıklamalar",
|
||||
"home": "ana sayfa",
|
||||
"in": "in",
|
||||
"keys": "anahtarlar",
|
||||
"last-24-hours": "son 24 saat",
|
||||
"last-5-minutes": "son 5 dakika içerisinde",
|
||||
"last-hour": "son saat içerisinde",
|
||||
"last-login": "Son giriş",
|
||||
"last-restart": "Son yeniden başlatma",
|
||||
"load-averages": "Ortalamaları tüm CPU çekirdekleri üzerinden yükleyin",
|
||||
"local-shares": "Ortak Paylaşımlar",
|
||||
"local": "yerel",
|
||||
"max-keys": "maks anahtar",
|
||||
"memory-used": "bellek kullanıldı:",
|
||||
"memory-utilisation": "bellek kullanımı",
|
||||
"memory": "bellek",
|
||||
"misses": "misses",
|
||||
"no-notifications": "Hiç bildirim yok",
|
||||
"no-pending-updates": "bekleyen güncellemeler yok",
|
||||
"nothing-to-show": "Şu anda burada gösterilecek bir şey yok",
|
||||
"of-which": "of which",
|
||||
"of": "of",
|
||||
"offline": "Çevrimdışı",
|
||||
"online": "Çevrimiçi",
|
||||
"other": "diğer",
|
||||
"overall": "genel",
|
||||
"private-link": "gizli bağlantı",
|
||||
"public-link": "genel bağlantı",
|
||||
"quota-enabled": "Bu kullanıcı için Disk Kotası {not}etkin",
|
||||
"received": "alınan",
|
||||
"scripts": "betikler",
|
||||
"sent": "gönderildi",
|
||||
"started": "Başlatıldı",
|
||||
"storages-by-type": "Türe göre depolar",
|
||||
"storages": "depolama{plural}",
|
||||
"strings-use": "strings use",
|
||||
"tasks": "İşlemler",
|
||||
"total-files": "tüm dosyalar",
|
||||
"total-users": "tüm kullanıcılar",
|
||||
"total": "tüm",
|
||||
"until": "Until",
|
||||
"updates-available-for": "Şunun için güncellemeler mevcuttur:",
|
||||
"updates-available": "güncelleme {plural} için mevcut",
|
||||
"used": "kullanıldı",
|
||||
"user": "kullanıcı",
|
||||
"using": "kullanılıyor",
|
||||
"version": "versiyon",
|
||||
"wasted": "harcandı"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -12,6 +12,7 @@
|
||||
},
|
||||
"login": {
|
||||
"title": "Dashy",
|
||||
"guest-label": "访客访问",
|
||||
"username-label": "用户名",
|
||||
"password-label": "密码",
|
||||
"login-button": "登陆",
|
||||
@@ -31,7 +32,14 @@
|
||||
"already-logged-in-text": "你的登陆身份",
|
||||
"proceed-to-dashboard": "前往仪表板",
|
||||
"log-out-button": "注销",
|
||||
"proceed-guest-button": "以游客身份前往"
|
||||
"proceed-guest-button": "以游客身份前往",
|
||||
"guest-intro-1": "该实例已启用访客访问.",
|
||||
"guest-intro-2": "访客只有访问权限,无法保存变更",
|
||||
"error": "错误",
|
||||
"error-no-user-configured": "没有启用验证,或者未配置用户",
|
||||
"error-go-home-button": "Go Home",
|
||||
"logged-in-guest": "以访客身份登陆,正在跳转...",
|
||||
"error-guest-access": "不允许访客访问"
|
||||
},
|
||||
"config": {
|
||||
"main-tab": "主菜单",
|
||||
@@ -107,19 +115,19 @@
|
||||
"save-button": "保存",
|
||||
"cancel-button": "取消",
|
||||
"saved-toast": "{theme} 更新成功",
|
||||
"copied-toast": "{theme} 的主题数据已复制到剪切板",
|
||||
"copied-toast": "已复制 {theme} 的主题数据到剪切板",
|
||||
"reset-toast": "{theme} 的自定义颜色已经移除"
|
||||
},
|
||||
"config-editor": {
|
||||
"save-location-label": "保存位置",
|
||||
"location-local-label": "应用到本地",
|
||||
"location-disk-label": "将保存写入文件",
|
||||
"location-disk-label": "将变更写入配置文件",
|
||||
"save-button": "保存变更",
|
||||
"preview-button": "预览更改",
|
||||
"valid-label": "设置有效",
|
||||
"status-success-msg": "任务完成",
|
||||
"status-fail-msg": "任务失败",
|
||||
"success-msg-disk": "配置文件写入硬盘成功",
|
||||
"success-msg-disk": "配置文件保存成功",
|
||||
"success-msg-local": "本地变更保存成功",
|
||||
"success-note-l1": "应用需要自动重建",
|
||||
"success-note-l2": "这将持续一段时间",
|
||||
@@ -128,7 +136,7 @@
|
||||
"error-msg-cannot-save": "保存配置时出错",
|
||||
"error-msg-bad-json": "JSON 错误,可能格式错误",
|
||||
"warning-msg-validation": "验证警告",
|
||||
"not-admin-note": "你不能将更改写入磁盘,因为你没有以管理员身份登录"
|
||||
"not-admin-note": "不能保存变更到配置文件,因为你没有以管理员身份登录"
|
||||
},
|
||||
"app-rebuild": {
|
||||
"title": "重建应用",
|
||||
@@ -156,7 +164,7 @@
|
||||
"backup-button-setup": "备份",
|
||||
"backup-button-update": "更新备份",
|
||||
"backup-id-label": "你的恢复 ID",
|
||||
"backup-id-note": "这用于以后从备份中恢复。 所以把它和你的密码一起在安全的地方保存。",
|
||||
"backup-id-note": "这用于以后从备份中恢复。 所以把它和你的密码一起保存在安全的地方。",
|
||||
"restore-title": "恢复备份",
|
||||
"restore-id-label": "恢复 ID",
|
||||
"restore-password-label": "密码",
|
||||
@@ -211,10 +219,10 @@
|
||||
"edit-pages-btn": "修改页面",
|
||||
"edit-pages-tooltip": "添加或删除其他的视图",
|
||||
"config-save-methods-subheading": "配置保存选项",
|
||||
"save-locally-btn": "保存到本地",
|
||||
"save-locally-tooltip": "将配置保存到本地浏览器。 这不会影响你的配置文件,但更改只会保存在当前设备上",
|
||||
"save-disk-btn": "保存到硬盘",
|
||||
"save-disk-tooltip": "保存配置到本地 conf.yml 文件. 它会备份 并覆盖已存在的文件",
|
||||
"save-locally-btn": "暂存本地",
|
||||
"save-locally-tooltip": "将设置保存在本地浏览器上. 这不会影响配置文件,但更改只会保留在当前设备上.",
|
||||
"save-disk-btn": "保存",
|
||||
"save-disk-tooltip": "将设置保存到服务端的conf.yml文件.它会备份之前的配置文件.",
|
||||
"export-config-btn": "导出配置",
|
||||
"export-config-tooltip": "查看并导出新的配置 到 文件 或 剪贴板",
|
||||
"cloud-backup-btn": "备份到云端",
|
||||
@@ -257,7 +265,7 @@
|
||||
},
|
||||
"widgets": {
|
||||
"general": {
|
||||
"loading": "加载。。。",
|
||||
"loading": "加载中...",
|
||||
"show-more": "展开详情",
|
||||
"show-less": "显示更少信息",
|
||||
"open-link": "继续读取"
|
||||
@@ -303,6 +311,88 @@
|
||||
"remaining": "剩余",
|
||||
"up": "上行",
|
||||
"down": "下行"
|
||||
},
|
||||
"gluetun-status": {
|
||||
"vpn-ip": "VPN IP",
|
||||
"country": "国家",
|
||||
"region": "地区",
|
||||
"city": "城市",
|
||||
"post-code": "邮编",
|
||||
"location": "位置",
|
||||
"timezone": "时区",
|
||||
"organization": "组织"
|
||||
},
|
||||
"nextcloud": {
|
||||
"active": "激活",
|
||||
"and": "和",
|
||||
"applications": "应用程序",
|
||||
"available": "存在",
|
||||
"away": "离开",
|
||||
"cache-full": "缓存已满",
|
||||
"chat-room": "聊天室",
|
||||
"delete-all": "全部删除",
|
||||
"delete-notification": "删除通知",
|
||||
"disabled": "已禁用",
|
||||
"disk-quota": "磁盘配额",
|
||||
"disk-space": "磁盘空间",
|
||||
"dnd": "请勿打扰",
|
||||
"email": "邮箱",
|
||||
"enabled": "已启用",
|
||||
"federated-shares-ucfirst": "Federated shares",
|
||||
"federated-shares": "federated shares",
|
||||
"files": "文件{plural}",
|
||||
"free": "可用",
|
||||
"groups": "组",
|
||||
"hit-rate": "命中率",
|
||||
"hits": "命中",
|
||||
"home": "home",
|
||||
"in": "in",
|
||||
"keys": "keys",
|
||||
"last-24-hours": "24 小时内",
|
||||
"last-5-minutes": "5 分钟内",
|
||||
"last-hour": "1 小时内",
|
||||
"last-login": "最后登陆",
|
||||
"last-restart": "最后重启",
|
||||
"load-averages": "所有CPU的平均负载",
|
||||
"local-shares": "本地分享",
|
||||
"local": "本地",
|
||||
"max-keys": "max keys",
|
||||
"memory-used": "已用内存",
|
||||
"memory-utilisation": "内存使用率",
|
||||
"memory": "内存",
|
||||
"misses": "misses",
|
||||
"no-notifications": "暂无通知",
|
||||
"no-pending-updates": "没有挂起的更新",
|
||||
"nothing-to-show": "当前没有可展示的内容",
|
||||
"of-which": "of which",
|
||||
"of": "of",
|
||||
"offline": "离线",
|
||||
"online": "在线",
|
||||
"other": "其他",
|
||||
"overall": "Overall",
|
||||
"private-link": "私有链接",
|
||||
"public-link": "公开链接",
|
||||
"quota-enabled": "这个用户{not}启用磁盘配额",
|
||||
"received": "已收到",
|
||||
"scripts": "脚本",
|
||||
"sent": "发送",
|
||||
"started": "已开始",
|
||||
"storages-by-type": "按类型存储",
|
||||
"storages": "存储{plural}",
|
||||
"strings-use": "使用的字符",
|
||||
"tasks": "任务",
|
||||
"total-files": "文件总数",
|
||||
"total-users": "用户总数",
|
||||
"total": "全部",
|
||||
"until": "直到",
|
||||
"updates-available-for": "有可用的更新",
|
||||
"updates-available": "{plural} 有可用更新",
|
||||
"used": "已使用",
|
||||
"user": "用户",
|
||||
"using": "使用中",
|
||||
"version": "版本",
|
||||
"wasted": "浪费"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,41 +1,40 @@
|
||||
<template>
|
||||
<modal :name="modalName" :resizable="true" width="55%" height="80%" classes="dashy-modal">
|
||||
<div class="about-modal">
|
||||
<router-link to="/about" class="title"><h2>App Info</h2></router-link>
|
||||
<router-link to="/about" class="title"><h2>{{ $t('app-info.title') }}</h2></router-link>
|
||||
<!-- Error Log -->
|
||||
<h3>Error Log</h3>
|
||||
<h3>{{ $t('app-info.error-log') }}</h3>
|
||||
<pre v-if="errorLog" class="logs"><code>{{ errorLog }}</code></pre>
|
||||
<p v-else>No recent errors detected :)</p>
|
||||
<p v-else>{{ $t('app-info.no-errors') }} :)</p>
|
||||
<hr />
|
||||
<!-- Getting Help -->
|
||||
<h3>Help & Support</h3>
|
||||
For getting support with running or configuring Dashy, see the <a href="https://github.com/Lissy93/dashy/discussions">Discussions</a>
|
||||
<h3>{{ $t('app-info.help-support') }}</h3>
|
||||
{{ $t('app-info.help-support-description') }} <a href="https://github.com/Lissy93/dashy/discussions">{{ $t('app-info.help-support-discussions') }}</a>
|
||||
<!-- Please help out :) -->
|
||||
<h3>Supporting Dashy</h3>
|
||||
For ways that you can get involved, check out the <a href="https://github.com/Lissy93/dashy/blob/master/docs/contributing.md">Contributing</a> page.
|
||||
<h3>{{ $t('app-info.support-dashy') }}</h3>
|
||||
{{ $t('app-info.support-dashy-description') }} <a href="https://github.com/Lissy93/dashy/blob/master/docs/contributing.md">{{ $t('app-info.support-dashy-link') }}</a>.
|
||||
<!-- Bug Reports -->
|
||||
<h3>Report a Bug</h3>
|
||||
If you think you've found a bug, then please <a href="https://github.com/Lissy93/dashy/issues/new/choose">raise an Issue</a>.
|
||||
<h3>{{ $t('app-info.report-bug') }}</h3>
|
||||
{{ $t('app-info.report-bug-description') }} <a href="https://github.com/Lissy93/dashy/issues/new/choose">{{ $t('app-info.report-bug-link') }}</a>.
|
||||
<!-- Source and Docs Links -->
|
||||
<h3>More Info</h3>
|
||||
Source: <a href="https://github.com/lissy93/dashy">github.com/lissy93/dashy</a><br>
|
||||
Documentation: <a href="https://dashy.to/docs">dashy.to/docs</a>
|
||||
<h3>{{ $t('app-info.more-info') }}</h3>
|
||||
{{ $t('app-info.source') }}: <a href="https://github.com/lissy93/dashy">github.com/lissy93/dashy</a><br>
|
||||
{{ $t('app-info.documentation') }}: <a href="https://dashy.to/docs">dashy.to/docs</a>
|
||||
<!-- Privacy & Security -->
|
||||
<h3>Privacy & Security</h3>
|
||||
For a break-down of how your data is managed by Dashy, see
|
||||
the <a href="https://github.com/Lissy93/dashy/blob/master/docs/privacy.md">Privacy Policy</a>.<br>
|
||||
For advise in securing your dashboard, you can reference the
|
||||
<a href="https://github.com/Lissy93/dashy/blob/master/docs/management.md">Management Docs</a>.<br>
|
||||
If you've found a potential security issue, report it following our
|
||||
<a href="https://github.com/Lissy93/dashy/blob/master/.github/SECURITY.md">Security Policy</a>
|
||||
<h3>{{ $t('app-info.privacy-and-security') }}</h3>
|
||||
{{ $t('app-info.privacy-and-security-l1') }} <a href="https://github.com/Lissy93/dashy/blob/master/docs/privacy.md">{{ $t('app-info.privacy-and-security-privacy-policy') }}</a>.<br>
|
||||
{{ $t('app-info.privacy-and-security-advice') }}
|
||||
<a href="https://github.com/Lissy93/dashy/blob/master/docs/management.md">{{ $t('app-info.privacy-and-security-advice-link') }}</a>.<br>
|
||||
{{ $t('app-info.privacy-and-security-security-issue') }}
|
||||
<a href="https://github.com/Lissy93/dashy/blob/master/.github/SECURITY.md">{{ $t('app-info.privacy-and-security-security-policy') }}</a>
|
||||
<!-- License -->
|
||||
<h3>License</h3>
|
||||
Licensed under <a href="https://github.com/Lissy93/dashy/blob/master/LICENSE">MIT X11</a>.
|
||||
<h3>{{ $t('app-info.license') }}</h3>
|
||||
{{ $t('app-info.license-under') }} <a href="https://github.com/Lissy93/dashy/blob/master/LICENSE">MIT X11</a>.
|
||||
Copyright <a href="https://aliciasykes.com">Alicia Sykes</a> © 2021.<br>
|
||||
For licenses for third-party modules, please see <a href="https://github.com/Lissy93/dashy/blob/master/.github/LEGAL.md">Legal</a>.<br>
|
||||
For the full list of contributors and thanks, see <a href="https://github.com/Lissy93/dashy/blob/master/docs/credits.md">Credits</a>.
|
||||
{{ $t('app-info.licence-third-party') }} <a href="https://github.com/Lissy93/dashy/blob/master/.github/LEGAL.md">{{ $t('app-info.licence-third-party-link') }}</a>.<br>
|
||||
{{ $t('app-info.list-contributors') }} <a href="https://github.com/Lissy93/dashy/blob/master/docs/credits.md">{{ $t('app-info.list-contributors-link') }}</a>.
|
||||
<!-- App Version -->
|
||||
<h3>Version</h3>
|
||||
<h3>{{ $t('app-info.version') }}</h3>
|
||||
<AppVersion class="app-version" />
|
||||
</div>
|
||||
</modal>
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
{{ $t('cloud-sync.intro-l2') }}
|
||||
<br>
|
||||
{{ $t('cloud-sync.intro-l3') }}
|
||||
<a href="https://github.com/Lissy93/dashy/blob/master/docs/backup-restore.md">docs</a>
|
||||
<a href="https://github.com/Lissy93/dashy/blob/master/docs/backup-restore.md">{{ $t('cloud-sync.intro-docs') }}</a>.
|
||||
</p>
|
||||
</div>
|
||||
<!-- Create or update a backup form -->
|
||||
|
||||
@@ -54,12 +54,8 @@
|
||||
<AppVersion />
|
||||
</div>
|
||||
<!-- Display note if Config disabled, or if on mobile -->
|
||||
<p v-if="!enableConfig" class="config-disabled-note">
|
||||
Some configuration features have been disabled by your administrator
|
||||
</p>
|
||||
<p class="small-screen-note" style="display: none;">
|
||||
You are using a very small screen, and some screens in this menu may not be optimal
|
||||
</p>
|
||||
<p v-if="!enableConfig" class="config-disabled-note">{{ $t('config.disabled-note') }}</p>
|
||||
<p class="small-screen-note" style="display: none;">{{ $t('config.small-screen-note') }}</p>
|
||||
<div class="config-note">
|
||||
<span>{{ $t('config.backup-note') }}</span>
|
||||
</div>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<div class="css-editor-outer">
|
||||
<!-- Add raw custom CSS -->
|
||||
<div class="style-section css-wrapper">
|
||||
<h3>Custom CSS</h3>
|
||||
<h3>{{ $t('config.custom-css.title') }}</h3>
|
||||
<textarea class="css-editor" v-model="customCss" />
|
||||
<Button class="save-button" :click="save">{{ $t('config.css-save-btn') }}</Button>
|
||||
<p class="quick-note">
|
||||
@@ -12,7 +12,7 @@
|
||||
</div>
|
||||
<!-- Theme Selector -->
|
||||
<div class="style-section base-theme-wrapper">
|
||||
<h3>Base Theme</h3>
|
||||
<h3>{{ $t('config.custom-css.base-theme') }}</h3>
|
||||
<ThemeSelector :hidePallete="true" />
|
||||
</div>
|
||||
<!-- UI color configurator -->
|
||||
|
||||
@@ -70,7 +70,7 @@ export default {
|
||||
const filename = 'dashy_conf.yml';
|
||||
const config = this.convertJsonToYaml();
|
||||
const element = document.createElement('a');
|
||||
element.setAttribute('href', `data:text/plain;charset=utf-8, ${encodeURIComponent(config)}`);
|
||||
element.setAttribute('href', `data:text/plain;charset=utf-8,${encodeURIComponent(config)}`);
|
||||
element.setAttribute('download', filename);
|
||||
element.style.display = 'none';
|
||||
document.body.appendChild(element);
|
||||
|
||||
@@ -3,7 +3,8 @@
|
||||
classes="dashy-modal">
|
||||
<div slot="top-right" @click="hide()">Close</div>
|
||||
<a @click="hide()" class="close-button" title="Close">x</a>
|
||||
<iframe v-if="url" :src="url" @keydown.esc="close" class="frame" allow="fullscreen" />
|
||||
<iframe v-if="url" :src="url" @keydown.esc="close" class="frame"
|
||||
allow="fullscreen; clipboard-write" />
|
||||
<div v-else class="no-url">No URL Specified</div>
|
||||
</modal>
|
||||
</template>
|
||||
|
||||
@@ -14,16 +14,16 @@
|
||||
:style="customStyle"
|
||||
>
|
||||
<!-- Item Text -->
|
||||
<div :class="`tile-title ${!item.icon? 'bounce no-icon': ''}`" :id="`tile-${item.id}`" >
|
||||
<div :class="`tile-title ${!itemIcon? 'bounce no-icon': ''}`" :id="`tile-${item.id}`" >
|
||||
<span class="text">{{ item.title }}</span>
|
||||
<p class="description">{{ item.description }}</p>
|
||||
</div>
|
||||
<!-- Item Icon -->
|
||||
<Icon :icon="item.icon" :url="item.url" :size="size" :color="item.color"
|
||||
<Icon :icon="itemIcon" :url="item.url" :size="size" :color="item.color"
|
||||
v-bind:style="customStyles" class="bounce" />
|
||||
<!-- Small icon, showing opening method on hover -->
|
||||
<ItemOpenMethodIcon class="opening-method-icon"
|
||||
:isSmall="!item.icon || size === 'small'"
|
||||
:isSmall="!itemIcon || size === 'small'"
|
||||
:openingMethod="accumulatedTarget" position="bottom right"
|
||||
:hotkey="item.hotkey" />
|
||||
<!-- Status indicator dot (if enabled) showing weather service is available -->
|
||||
@@ -65,7 +65,6 @@ import MoveItemTo from '@/components/InteractiveEditor/MoveItemTo';
|
||||
import ContextMenu from '@/components/LinkItems/ItemContextMenu';
|
||||
import StoreKeys from '@/utils/StoreMutations';
|
||||
import ItemMixin from '@/mixins/ItemMixin';
|
||||
// import { targetValidator } from '@/utils/ConfigHelpers';
|
||||
import EditModeIcon from '@/assets/interface-icons/interactive-editor-edit-mode.svg';
|
||||
import { modalNames } from '@/utils/defaults';
|
||||
|
||||
@@ -89,6 +88,10 @@ export default {
|
||||
EditModeIcon,
|
||||
},
|
||||
computed: {
|
||||
/* Returns either item.icon, or appConfig.defaultIcon, or null */
|
||||
itemIcon() {
|
||||
return this.item.icon || this.$store.getters.appConfig?.defaultIcon;
|
||||
},
|
||||
makeColumnCount() {
|
||||
if ((this.sectionDisplayData || {}).itemCountX) return this.sectionDisplayData.itemCountX;
|
||||
if (this.sectionWidth < 380) return 1;
|
||||
@@ -101,8 +104,7 @@ export default {
|
||||
/* Based on item props, adjust class names */
|
||||
makeClassList() {
|
||||
const { isAddNew, isEditMode, size } = this;
|
||||
const { icon } = this.item;
|
||||
return `size-${size} ${!icon ? 'short' : ''} `
|
||||
return `size-${size} ${!this.itemIcon ? 'short' : ''} `
|
||||
+ `${isAddNew ? 'add-new' : ''} ${isEditMode ? 'is-edit-mode' : ''}`;
|
||||
},
|
||||
/* Used by certain themes (material), to show animated CSS icon */
|
||||
|
||||
@@ -202,7 +202,7 @@ export default {
|
||||
/* For a given URL, return the hostname only. Used for favicon and generative icons */
|
||||
getHostName(url) {
|
||||
try {
|
||||
return new URL(url).hostname.split('.').slice(-2).join('.');
|
||||
return new URL(url).hostname;
|
||||
} catch (e) {
|
||||
ErrorHandler('Unable to format URL');
|
||||
return url;
|
||||
|
||||
@@ -389,7 +389,9 @@ export default {
|
||||
justify-content: space-around;
|
||||
.widget-base {
|
||||
min-width: 10rem;
|
||||
width: stretch;
|
||||
width: -webkit-fill-available;
|
||||
width: -moz-available;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ export default {
|
||||
},
|
||||
computed: {
|
||||
subItemTooltip() {
|
||||
return this.title;
|
||||
return this.item.title;
|
||||
},
|
||||
},
|
||||
data() {
|
||||
|
||||
@@ -9,9 +9,12 @@
|
||||
© {{defaultInfo.date}}.
|
||||
Get the <a :href="defaultInfo.repoUrl">Source Code</a>.
|
||||
</span>
|
||||
<!-- Config info -->
|
||||
<span class="path-to-config">
|
||||
<span>
|
||||
Using: {{ $store.state.currentConfigId || 'Default Config' }}
|
||||
{{ $t('footer.dev-by') }} <a :href="authorUrl">{{authorName}}</a>.
|
||||
{{ $t('footer.licensed-under') }} <a :href="licenseUrl">{{license}}</a>
|
||||
{{ showCopyright? '©': '' }} {{date}}.
|
||||
{{ $t('footer.get-the') }} <a :href="repoUrl">{{ $t('footer.source-code') }}</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</template>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<div id="loading" v-if="isLoading" :class="c" @click="c = 'hide'">
|
||||
<h2>Dashy</h2>
|
||||
<div class="inner-container">
|
||||
<p>Loading</p>
|
||||
<p>{{ $t('splash-screen.loading')}}</p>
|
||||
<span class="dots-cont">
|
||||
<span class="dot dot-1"></span>
|
||||
<span class="dot dot-2"></span>
|
||||
|
||||
@@ -39,6 +39,11 @@ export default {
|
||||
showSeconds() {
|
||||
return !this.options.hideSeconds;
|
||||
},
|
||||
use12Hour() {
|
||||
if (typeof this.options.use12Hour === 'boolean') return this.options.use12Hour;
|
||||
// this is the default, it gets computed by the DateTimeFormat implementation
|
||||
return Intl.DateTimeFormat(this.timeFormat, { timeZone: this.timeZone, hour: 'numeric' }).resolvedOptions().hour12 ?? false;
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
update() {
|
||||
@@ -52,12 +57,17 @@ export default {
|
||||
hour: 'numeric',
|
||||
minute: 'numeric',
|
||||
...(this.showSeconds && { second: 'numeric' }),
|
||||
...(this.use12Hour && { hourCycle: 'h12' }),
|
||||
}).format();
|
||||
},
|
||||
/* Get and format the date */
|
||||
setDate() {
|
||||
this.date = new Date().toLocaleDateString(this.timeFormat, {
|
||||
weekday: 'long', day: 'numeric', year: 'numeric', month: 'short',
|
||||
weekday: 'long',
|
||||
day: 'numeric',
|
||||
year: 'numeric',
|
||||
month: 'short',
|
||||
timeZone: this.timeZone,
|
||||
});
|
||||
},
|
||||
},
|
||||
|
||||
74
src/components/Widgets/CustomSearch.vue
Normal file
74
src/components/Widgets/CustomSearch.vue
Normal file
@@ -0,0 +1,74 @@
|
||||
<template>
|
||||
<div class="custom-search">
|
||||
<input type="text" v-model="query"
|
||||
@keyup.enter="search(defaultEngine)"
|
||||
@keyup.stop @keydown.stop
|
||||
:placeholder="placeholder">
|
||||
<div class="buttons">
|
||||
<button
|
||||
v-for="(engine, key) in engines" :key="key"
|
||||
v-on:click="search(engine)">
|
||||
{{ engine.title }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import WidgetMixin from '@/mixins/WidgetMixin';
|
||||
|
||||
export default {
|
||||
mixins: [WidgetMixin],
|
||||
components: {},
|
||||
data() {
|
||||
return {
|
||||
query: '',
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
placeholder() {
|
||||
return this.options.placeholder || '';
|
||||
},
|
||||
engines() {
|
||||
return this.options.engines || [];
|
||||
},
|
||||
defaultEngine() {
|
||||
return this.engines[0];
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
search(engine) {
|
||||
if (engine !== undefined && this.query !== '') {
|
||||
window.open(engine.url + this.query, '_blank');
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
||||
.custom-search {
|
||||
font-size: 1.2rem;
|
||||
input {
|
||||
width: 80%;
|
||||
margin: 1rem 10%;
|
||||
padding: 0.5rem;
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
.buttons {
|
||||
text-align:center;
|
||||
button{
|
||||
margin: 0.5rem;
|
||||
padding: 0.5rem;
|
||||
border: none;
|
||||
color: var(--item-text-color);
|
||||
background: var(--item-background);
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
</style>
|
||||
@@ -92,7 +92,7 @@ export default {
|
||||
},
|
||||
endpoint() {
|
||||
return `${widgetApiEndpoints.cveVulnerabilities}?${this.sortBy}${this.limit}`
|
||||
+ `${this.minScore}${this.vendorId}${this.hasExploit}`;
|
||||
+ `${this.minScore}${this.vendorId}${this.productId}${this.hasExploit}`;
|
||||
},
|
||||
proxyReqEndpoint() {
|
||||
const baseUrl = process.env.VUE_APP_DOMAIN || window.location.origin;
|
||||
|
||||
238
src/components/Widgets/DroneCi.vue
Normal file
238
src/components/Widgets/DroneCi.vue
Normal file
@@ -0,0 +1,238 @@
|
||||
<template>
|
||||
<div class="droneci-builds-wrapper" v-if="builds">
|
||||
<div
|
||||
class="build-row"
|
||||
v-for="build in builds" :key="build.id"
|
||||
v-tooltip="infoTooltip(build)"
|
||||
>
|
||||
<div class="status">
|
||||
<p :class="build.build.status">{{ build.build.status | formatStatus }}</p>
|
||||
<span v-if="build.build.status == 'running'">
|
||||
{{ build.build.started*1000 | formatTimeAgo }} ago
|
||||
</span>
|
||||
<span v-else-if="build.build.status != 'pending' ">
|
||||
{{ formatBuildDuration(build) }}
|
||||
</span>
|
||||
<span v-else>
|
||||
{{ build.build.created*1000 | formatTimeAgo }} ago
|
||||
</span>
|
||||
</div>
|
||||
<div class="info">
|
||||
<div class="build-name">
|
||||
{{ build.name }}
|
||||
<a
|
||||
class="droneci-build-number"
|
||||
:href="build.baseurl + '/' + build.slug + '/' +build.build.number"
|
||||
target="_blank"
|
||||
>{{ build.build.number }}</a>
|
||||
</div>
|
||||
<div class="build-desc">
|
||||
<span class="droneci-extra">
|
||||
<template v-if="build.build.event == 'pull_request'">
|
||||
<a
|
||||
:href="build.build.link"
|
||||
target="_blank"
|
||||
class="droneci-extra-info"
|
||||
>#{{ formatPrId(build.build.link) }}</a> to
|
||||
</template>
|
||||
<template v-else-if="build.build.event == 'push'">
|
||||
<a
|
||||
:href="build.build.link"
|
||||
target="_blank"
|
||||
class="droneci-extra-info"
|
||||
>push</a> to
|
||||
</template>
|
||||
<a
|
||||
:href="build.git_http_url"
|
||||
target="_blank"
|
||||
class="droneci-extra-info"
|
||||
>
|
||||
{{ build.build.target }}
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import WidgetMixin from '@/mixins/WidgetMixin';
|
||||
import { getTimeAgo, getTimeDifference, timestampToDateTime } from '@/utils/MiscHelpers';
|
||||
|
||||
export default {
|
||||
mixins: [WidgetMixin],
|
||||
components: {},
|
||||
data() {
|
||||
return {
|
||||
builds: null,
|
||||
};
|
||||
},
|
||||
filters: {
|
||||
formatStatus(status) {
|
||||
let symbol = '';
|
||||
if (status === 'success') symbol = '✔';
|
||||
if (status === 'failure' || status === 'error' || status === 'killed') symbol = '✘';
|
||||
if (status === 'running') symbol = '❖';
|
||||
if (status === 'skipped') symbol = '↠';
|
||||
return `${symbol}`;
|
||||
},
|
||||
formatDate(timestamp) {
|
||||
return timestampToDateTime(timestamp);
|
||||
},
|
||||
formatTimeAgo(timestamp) {
|
||||
return getTimeAgo(timestamp);
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
/* API endpoint, either for self-hosted or managed instance */
|
||||
endpointBuilds() {
|
||||
if (!this.options.host) this.error('drone.ci Host is required');
|
||||
return `${this.options.host}/api/user/builds`;
|
||||
},
|
||||
endpointRepoInfo() {
|
||||
if (!this.options.host) this.error('drone.ci Host is required');
|
||||
return `${this.options.host}/api/repos/${this.options.repo}`;
|
||||
},
|
||||
endpointRepoBuilds() {
|
||||
if (!this.options.host) this.error('drone.ci Host is required');
|
||||
return `${this.options.host}/api/repos/${this.options.repo}/builds`;
|
||||
},
|
||||
repo() {
|
||||
if (this.options.repo) return this.options.repo;
|
||||
return false;
|
||||
},
|
||||
apiKey() {
|
||||
if (!this.options.apiKey) {
|
||||
this.error('An API key is required, please see the docs for more info');
|
||||
}
|
||||
return this.options.apiKey;
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
/* Fetch new data, configured by updateInterval */
|
||||
update() {
|
||||
this.startLoading();
|
||||
this.fetchData();
|
||||
this.finishLoading();
|
||||
},
|
||||
/* Make GET request to Drone CI API endpoint */
|
||||
fetchData() {
|
||||
const authHeaders = { Authorization: `Bearer ${this.apiKey}` };
|
||||
if (this.repo !== false) {
|
||||
this.makeRequest(this.endpointRepoInfo, authHeaders).then(
|
||||
(repoInfo) => {
|
||||
this.makeRequest(this.endpointRepoBuilds, authHeaders).then(
|
||||
(buildInfo) => {
|
||||
this.processRepoBuilds(repoInfo, buildInfo);
|
||||
},
|
||||
);
|
||||
},
|
||||
);
|
||||
} else {
|
||||
this.makeRequest(this.endpointBuilds, authHeaders).then(
|
||||
(response) => { this.processBuilds(response); },
|
||||
);
|
||||
}
|
||||
},
|
||||
/* Assign data variables to the returned data */
|
||||
processBuilds(data) {
|
||||
const results = data.slice(0, this.options.limit)
|
||||
.map((obj) => ({ ...obj, baseurl: this.options.host }));
|
||||
this.builds = results;
|
||||
},
|
||||
processRepoBuilds(repo, builds) {
|
||||
const results = builds.slice(0, this.options.limit)
|
||||
.map((obj) => ({ build: { ...obj }, baseurl: this.options.host, ...repo }));
|
||||
this.builds = results;
|
||||
},
|
||||
infoTooltip(build) {
|
||||
const content = `<b>Trigger:</b> ${build.build.event} by ${build.build.trigger}<br>`
|
||||
+ `<b>Repo:</b> ${build.slug}<br>`
|
||||
+ `<b>Branch:</b> ${build.build.target}<br>`;
|
||||
return {
|
||||
content, html: true, trigger: 'hover focus', delay: 250, classes: 'build-info-tt',
|
||||
};
|
||||
},
|
||||
formatPrId(link) {
|
||||
return link.split('/').pop();
|
||||
},
|
||||
formatBuildDuration(build) {
|
||||
return getTimeDifference(build.build.started * 1000, build.build.finished * 1000);
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.droneci-builds-wrapper {
|
||||
color: var(--widget-text-color);
|
||||
.build-row {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 2.5fr;
|
||||
justify-content: left;
|
||||
align-items: center;
|
||||
padding: 0.25rem 0;
|
||||
.status {
|
||||
font-size: 1rem;
|
||||
font-weight: bold;
|
||||
p {
|
||||
margin: 0;
|
||||
color: var(--info);
|
||||
&.success { color: var(--success); }
|
||||
&.failure { color: var(--danger); }
|
||||
&.error { color: var(--danger); }
|
||||
&.running { color: var(--neutral); }
|
||||
}
|
||||
span {
|
||||
font-size: 0.75rem;
|
||||
color: var(--secondary);
|
||||
}
|
||||
}
|
||||
.info {
|
||||
div.build-name {
|
||||
margin: 0.25rem 0;
|
||||
font-weight: bold;
|
||||
color: var(--widget-text-color);
|
||||
a, a:hover, a:visited, a:active {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
.droneci-build-number::before {
|
||||
content: "#";
|
||||
}
|
||||
}
|
||||
div.build-desc {
|
||||
margin: 0;
|
||||
font-size: 0.85rem;
|
||||
color: var(--widget-text-color);
|
||||
opacity: var(--dimming-factor);
|
||||
a, a:hover, a:visited, a:active {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
.droneci-extra {
|
||||
.droneci-extra-info {
|
||||
margin: 0.25em;
|
||||
padding: 0em 0.25em;
|
||||
background: var(--item-background);
|
||||
border: 1px solid var(--primary);
|
||||
border-radius: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
&:not(:last-child) {
|
||||
border-bottom: 1px dashed var(--widget-text-color);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<style lang="scss">
|
||||
.build-info-tt {
|
||||
min-width: 20rem;
|
||||
}
|
||||
</style>
|
||||
@@ -2,7 +2,7 @@
|
||||
<div class="glances-temp-wrapper" v-if="tempData">
|
||||
<div class="temp-row" v-for="sensor in tempData" :key="sensor.label">
|
||||
<p class="label">{{ sensor.label | formatLbl }}</p>
|
||||
<p :class="`temp range-${sensor.color}`">{{ sensor.value | formatVal }}</p>
|
||||
<p :class="`temp range-${sensor.color}`">{{ sensor.value | formatVal(sensor.unit) }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@@ -10,7 +10,7 @@
|
||||
<script>
|
||||
import WidgetMixin from '@/mixins/WidgetMixin';
|
||||
import GlancesMixin from '@/mixins/GlancesMixin';
|
||||
import { capitalize, fahrenheitToCelsius } from '@/utils/MiscHelpers';
|
||||
import { capitalize, celsiusToFahrenheit, fahrenheitToCelsius } from '@/utils/MiscHelpers';
|
||||
|
||||
export default {
|
||||
mixins: [WidgetMixin, GlancesMixin],
|
||||
@@ -29,28 +29,105 @@ export default {
|
||||
formatLbl(lbl) {
|
||||
return capitalize(lbl);
|
||||
},
|
||||
formatVal(val) {
|
||||
return `${Math.round(val)}°C`;
|
||||
formatVal(val, unit) {
|
||||
switch (unit) {
|
||||
case 'R':
|
||||
return `${Math.round(val)} rpm`;
|
||||
case '%':
|
||||
return `${Math.round(val)}%`;
|
||||
default:
|
||||
return `${Math.round(val)}°${unit}`;
|
||||
}
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
getDesiredUnits() {
|
||||
return this.options.units ?? 'C';
|
||||
},
|
||||
getDisplayValue(rawValue, units) {
|
||||
const desiredUnits = this.getDesiredUnits();
|
||||
if (units === desiredUnits) {
|
||||
return rawValue;
|
||||
}
|
||||
|
||||
return desiredUnits === 'C'
|
||||
? fahrenheitToCelsius(rawValue)
|
||||
: celsiusToFahrenheit(rawValue);
|
||||
},
|
||||
getCelsiusValue(rawValue, units) {
|
||||
if (units !== 'F' && units !== 'C') {
|
||||
return Number.NaN;
|
||||
}
|
||||
|
||||
return units === 'C' ? rawValue : fahrenheitToCelsius(rawValue);
|
||||
},
|
||||
getFahrenheitValue(rawValue, units) {
|
||||
if (units !== 'F' && units !== 'C') {
|
||||
return Number.NaN;
|
||||
}
|
||||
|
||||
return units === 'F' ? rawValue : celsiusToFahrenheit(rawValue);
|
||||
},
|
||||
getTempColor(temp) {
|
||||
if (temp <= 50) return 'green';
|
||||
if (temp > 50 && temp < 75) return 'yellow';
|
||||
if (temp >= 75) return 'red';
|
||||
return 'grey';
|
||||
},
|
||||
getPercentageColor(percentage) {
|
||||
if (percentage < 20) return 'red';
|
||||
if (percentage < 50) return 'orange';
|
||||
if (percentage < 75) return 'yellow';
|
||||
return 'green';
|
||||
},
|
||||
processData(sensorData) {
|
||||
const results = [];
|
||||
sensorData.forEach((sensor) => {
|
||||
const tempC = sensor.unit === 'F' ? fahrenheitToCelsius(sensor.value) : sensor.value;
|
||||
results.push({
|
||||
label: sensor.label,
|
||||
value: tempC,
|
||||
color: this.getTempColor(tempC),
|
||||
});
|
||||
});
|
||||
this.tempData = results;
|
||||
this.tempData = sensorData.map(sensor => {
|
||||
switch (sensor.unit) {
|
||||
case 'F':
|
||||
case 'C':
|
||||
return this.processTemperatureSensor(sensor);
|
||||
case 'R':
|
||||
return this.processFanSensor(sensor);
|
||||
case '%':
|
||||
return this.processBatterySensor(sensor);
|
||||
default:
|
||||
// Justification: This is a recoverable error that developers
|
||||
// should nevertheless be warned about.
|
||||
// eslint-disable-next-line
|
||||
console.warn('Unrecognized unit', sensor.unit);
|
||||
return null;
|
||||
}
|
||||
}).filter(Boolean);
|
||||
},
|
||||
processBatterySensor({ label, unit, value }) {
|
||||
const color = this.getPercentageColor(value);
|
||||
return {
|
||||
color,
|
||||
label,
|
||||
unit,
|
||||
value,
|
||||
};
|
||||
},
|
||||
processFanSensor({ label, unit, value }) {
|
||||
return {
|
||||
color: 'grey',
|
||||
label,
|
||||
unit,
|
||||
value,
|
||||
};
|
||||
},
|
||||
processTemperatureSensor({ label, unit, value: originalValue }) {
|
||||
const celsiusValue = this.getCelsiusValue(originalValue, unit);
|
||||
const color = this.getTempColor(celsiusValue);
|
||||
const displayValue = this.getDisplayValue(originalValue, unit);
|
||||
const displayUnits = this.getDesiredUnits();
|
||||
|
||||
return {
|
||||
color,
|
||||
label,
|
||||
unit: displayUnits,
|
||||
value: displayValue,
|
||||
};
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
@@ -43,9 +43,6 @@ export default {
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
fetchData() {
|
||||
this.makeRequest(this.endpoint).then(this.processData);
|
||||
},
|
||||
processData(diskData) {
|
||||
this.disks = diskData;
|
||||
},
|
||||
|
||||
@@ -1,18 +1,20 @@
|
||||
<template>
|
||||
<div class="health-checks-wrapper" v-if="crons">
|
||||
<div
|
||||
class="cron-row"
|
||||
v-for="cron in crons" :key="cron.id"
|
||||
v-tooltip="pingTimeTooltip(cron)"
|
||||
<template
|
||||
v-for="cron in crons"
|
||||
>
|
||||
<div class="status">
|
||||
<div class="status" v-bind:key="cron.id + 'status'">
|
||||
<p :class="cron.status">{{ cron.status | formatStatus }}</p>
|
||||
</div>
|
||||
<div class="info">
|
||||
<div
|
||||
class="info"
|
||||
v-tooltip="pingTimeTooltip(cron)"
|
||||
v-bind:key="cron.id + 'info'"
|
||||
>
|
||||
<p class="cron-name">{{ cron.name }}</p>
|
||||
<p class="cron-desc">{{ cron.desc }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -35,6 +37,8 @@ export default {
|
||||
if (status === 'up') symbol = '✔';
|
||||
if (status === 'down') symbol = '✘';
|
||||
if (status === 'new') symbol = '❖';
|
||||
if (status === 'paused') symbol = '⏸';
|
||||
if (status === 'running') symbol = '▶';
|
||||
return `${symbol} ${capitalize(status)}`;
|
||||
},
|
||||
formatDate(timestamp) {
|
||||
@@ -51,6 +55,9 @@ export default {
|
||||
if (!this.options.apiKey) {
|
||||
this.error('An API key is required, please see the docs for more info');
|
||||
}
|
||||
if (typeof this.options.apiKey === 'string') {
|
||||
return [this.options.apiKey];
|
||||
}
|
||||
return this.options.apiKey;
|
||||
},
|
||||
},
|
||||
@@ -58,14 +65,18 @@ export default {
|
||||
/* Make GET request to CoinGecko API endpoint */
|
||||
fetchData() {
|
||||
this.overrideProxyChoice = true;
|
||||
const authHeaders = { 'X-Api-Key': this.apiKey };
|
||||
this.makeRequest(this.endpoint, authHeaders).then(
|
||||
(response) => { this.processData(response); },
|
||||
);
|
||||
const results = [];
|
||||
this.apiKey.forEach((key) => {
|
||||
const authHeaders = { 'X-Api-Key': key };
|
||||
this.makeRequest(this.endpoint, authHeaders).then(
|
||||
(response) => { this.processData(response, results); },
|
||||
);
|
||||
});
|
||||
results.sort((a, b) => ((a.name > b.name) ? 1 : -1));
|
||||
this.crons = results;
|
||||
},
|
||||
/* Assign data variables to the returned data */
|
||||
processData(data) {
|
||||
const results = [];
|
||||
processData(data, results) {
|
||||
data.checks.forEach((cron) => {
|
||||
results.push({
|
||||
id: cron.slug,
|
||||
@@ -78,7 +89,7 @@ export default {
|
||||
url: this.makeUrl(cron.unique_key),
|
||||
});
|
||||
});
|
||||
this.crons = results;
|
||||
return results;
|
||||
},
|
||||
makeUrl(cronId) {
|
||||
const base = this.options.host || 'https://healthchecks.io';
|
||||
@@ -99,40 +110,40 @@ export default {
|
||||
|
||||
<style scoped lang="scss">
|
||||
.health-checks-wrapper {
|
||||
display: grid;
|
||||
justify-content: center;
|
||||
grid-template-columns: 1fr 2fr;
|
||||
color: var(--widget-text-color);
|
||||
.cron-row {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
padding: 0.25rem 0;
|
||||
.status {
|
||||
min-width: 5rem;
|
||||
font-size: 1.2rem;
|
||||
padding: 0.25rem 0;
|
||||
.status {
|
||||
min-width: 5rem;
|
||||
font-size: 1.2rem;
|
||||
font-weight: bold;
|
||||
p {
|
||||
margin: 0;
|
||||
color: var(--info);
|
||||
&.up { color: var(--success); }
|
||||
&.down { color: var(--danger); }
|
||||
&.new { color: var(--widget-text-color); }
|
||||
&.running { color: var(--warning); }
|
||||
&.paused { color: var(--info); }
|
||||
}
|
||||
}
|
||||
.info {
|
||||
p.cron-name {
|
||||
margin: 0.25rem 0;
|
||||
font-weight: bold;
|
||||
p {
|
||||
margin: 0;
|
||||
color: var(--info);
|
||||
&.up { color: var(--success); }
|
||||
&.down { color: var(--danger); }
|
||||
&.new { color: var(--neutral); }
|
||||
}
|
||||
color: var(--widget-text-color);
|
||||
}
|
||||
.info {
|
||||
p.cron-name {
|
||||
margin: 0.25rem 0;
|
||||
font-weight: bold;
|
||||
color: var(--widget-text-color);
|
||||
}
|
||||
p.cron-desc {
|
||||
margin: 0;
|
||||
color: var(--widget-text-color);
|
||||
opacity: var(--dimming-factor);
|
||||
}
|
||||
}
|
||||
&:not(:last-child) {
|
||||
border-bottom: 1px dashed var(--widget-text-color);
|
||||
p.cron-desc {
|
||||
margin: 0;
|
||||
color: var(--widget-text-color);
|
||||
opacity: var(--dimming-factor);
|
||||
}
|
||||
}
|
||||
&:not(:last-child) {
|
||||
border-bottom: 1px dashed var(--widget-text-color);
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
:src="frameUrl"
|
||||
:id="frameId"
|
||||
title="Iframe Widget"
|
||||
allow="fullscreen; clipboard-write"
|
||||
:style="frameHeight ? `height: ${frameHeight}px` : ''"
|
||||
/>
|
||||
</div>
|
||||
@@ -15,6 +16,9 @@ import WidgetMixin from '@/mixins/WidgetMixin';
|
||||
|
||||
export default {
|
||||
mixins: [WidgetMixin],
|
||||
data: () => ({
|
||||
updateCount: 0,
|
||||
}),
|
||||
computed: {
|
||||
/* Gets users specified URL to load into the iframe */
|
||||
frameUrl() {
|
||||
@@ -23,7 +27,7 @@ export default {
|
||||
this.error('Iframe widget expects a URL');
|
||||
return null;
|
||||
}
|
||||
return usersChoice;
|
||||
return `${usersChoice}${this.updatePathParam}`;
|
||||
},
|
||||
frameHeight() {
|
||||
return this.options.frameHeight;
|
||||
@@ -32,11 +36,16 @@ export default {
|
||||
frameId() {
|
||||
return `iframe-${btoa(this.frameUrl || 'empty').substring(0, 16)}`;
|
||||
},
|
||||
/* Generate a URL param, to be updated in order to re-fetch image */
|
||||
updatePathParam() {
|
||||
return this.updateCount ? `#dashy-update-${this.updateCount}` : '';
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
/* Refreshes iframe contents, called by parent */
|
||||
update() {
|
||||
this.startLoading();
|
||||
this.updateCount += 1;
|
||||
(document.getElementById(this.frameId) || {}).src = this.frameUrl;
|
||||
this.finishLoading();
|
||||
},
|
||||
@@ -48,7 +57,7 @@ export default {
|
||||
.iframe-widget {
|
||||
iframe {
|
||||
width: 100%;
|
||||
min-height: 240px;
|
||||
min-height: 80px;
|
||||
border: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div class="image-widget">
|
||||
<img :src="imagePath" class="embedded-image" />
|
||||
<img :src="imagePath" :style="imageDimensions" class="embedded-image" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -9,10 +9,46 @@ import WidgetMixin from '@/mixins/WidgetMixin';
|
||||
|
||||
export default {
|
||||
mixins: [WidgetMixin],
|
||||
data: () => ({
|
||||
updateCount: 0,
|
||||
}),
|
||||
computed: {
|
||||
/* The path to image to render */
|
||||
imagePath() {
|
||||
if (!this.options.imagePath) this.error('You must specify an imagePath');
|
||||
return this.options.imagePath;
|
||||
return `${this.options.imagePath}${this.updatePathParam}`;
|
||||
},
|
||||
/* If set, apply users specified image dimensions */
|
||||
imageDimensions() {
|
||||
// Skip if neither set
|
||||
if (!this.options.imageWidth && !this.options.imageHeight) return null;
|
||||
// Apply correct units to input val, if needed
|
||||
const makeDimensionsUnit = (userVal) => {
|
||||
if (!userVal) { // Nothing set, use auto
|
||||
return 'auto';
|
||||
} else if (!Number.isNaN(Number(userVal))) { // Number set, add px
|
||||
return `${userVal}px`;
|
||||
} else { // Value is string, likely already includes units
|
||||
return userVal;
|
||||
}
|
||||
};
|
||||
// Return CSS values for width and height
|
||||
return `
|
||||
width: ${makeDimensionsUnit(this.options.imageWidth)};
|
||||
height: ${makeDimensionsUnit(this.options.imageHeight)};
|
||||
`;
|
||||
},
|
||||
/* Generate a URL param, to be updated in order to re-fetch image */
|
||||
updatePathParam() {
|
||||
return this.updateCount ? `#dashy-update-${this.updateCount}` : '';
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
/* In order to re-fetch the image, we much update the URL with an arbitrary hash */
|
||||
update() {
|
||||
this.startLoading();
|
||||
this.updateCount += 1;
|
||||
this.finishLoading();
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
102
src/components/Widgets/Linkding.vue
Normal file
102
src/components/Widgets/Linkding.vue
Normal file
@@ -0,0 +1,102 @@
|
||||
<template>
|
||||
<div class="linkding-outer-wrapper">
|
||||
<div class="linkding-wrapper" v-if="links">
|
||||
<ul>
|
||||
<li
|
||||
v-for="link in links"
|
||||
v-bind:key="link.id"
|
||||
class="lingkding-link"
|
||||
>
|
||||
<a :href="link.url" target="_blank">
|
||||
<span class="linktext" v-tooltip="link.description">{{link.title}}</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import WidgetMixin from '@/mixins/WidgetMixin';
|
||||
|
||||
export default {
|
||||
mixins: [WidgetMixin],
|
||||
components: {},
|
||||
data() {
|
||||
return {
|
||||
links: null,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
endpoint() {
|
||||
if (!this.options.host) this.error('linkgding Host is required');
|
||||
return `${this.options.host}/api/bookmarks`;
|
||||
},
|
||||
apiKey() {
|
||||
if (!this.options.apiKey) this.error('linkgding apiKey is required');
|
||||
return this.options.apiKey;
|
||||
},
|
||||
filtertags() {
|
||||
return this.options.tags;
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
update() {
|
||||
this.startLoading();
|
||||
this.fetchData();
|
||||
this.finishLoading();
|
||||
},
|
||||
fetchData() {
|
||||
const authHeaders = { Authorization: `Token ${this.apiKey}` };
|
||||
this.makeRequest(this.endpoint, authHeaders).then(
|
||||
(response) => { this.processData(response); },
|
||||
);
|
||||
},
|
||||
processData(data) {
|
||||
const self = this;
|
||||
const fltr = (entry) => {
|
||||
if (self.filtertags === null) return true;
|
||||
for (let i = 0; i < self.filtertags.length; i += 1) {
|
||||
if (entry.tag_names.includes(self.filtertags[i])) return true;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
this.links = data.results.filter(
|
||||
entry => fltr(entry),
|
||||
);
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.linkdign-wrapper {
|
||||
}
|
||||
</style>
|
||||
<style scoped lang="scss">
|
||||
.linkding-wrapper {
|
||||
|
||||
ul {
|
||||
list-style: none;
|
||||
padding: 0px;
|
||||
color: var(--widget-text-color);
|
||||
li {
|
||||
opacity: var(--dimming-factor);
|
||||
a, a:hover, a:visited, a:active {
|
||||
font-weight: bold;
|
||||
color: var(--widget-text-color);
|
||||
}
|
||||
span.linktext {
|
||||
color: var(--widget-text-color);
|
||||
}
|
||||
padding-top:0.2em;
|
||||
padding-bottom:0.2em;
|
||||
&:before
|
||||
{
|
||||
content: '🔗';
|
||||
margin: 0 0.7em; /* any design */
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
353
src/components/Widgets/Mvg.vue
Normal file
353
src/components/Widgets/Mvg.vue
Normal file
@@ -0,0 +1,353 @@
|
||||
<template>
|
||||
<div class="mvg-wrapper" v-if="departures">
|
||||
<template
|
||||
v-for="departure in departures"
|
||||
>
|
||||
<div class="departure" v-bind:key="departure.key" v-tooltip="mvgTooltipDeparture(departure)">
|
||||
<span :class="{live: departure.live}">
|
||||
{{ departure.realtimeDepartureTime | formatDepartureTime }}
|
||||
</span>
|
||||
</div>
|
||||
<div class='line'
|
||||
v-bind:key="departure.key + 'line'"
|
||||
>
|
||||
<div
|
||||
class="transport"
|
||||
:class="['type-' + departure.transportType,
|
||||
'line-' + departure.label,
|
||||
]"
|
||||
>{{ departure.label }}</div>
|
||||
<div
|
||||
class='destination'
|
||||
v-tooltip="mvgTooltipDestination(departure)"
|
||||
:class="{cancelled: departure.cancelled}">{{ departure.destination }}</div>
|
||||
<span class="delay"
|
||||
:class="{'has-delay': departure.realtimeDepartureTime > departure.plannedDepartureTime}"
|
||||
>{{ Math.max(0,
|
||||
(departure.realtimeDepartureTime - departure.plannedDepartureTime)/60000) }}</span>
|
||||
<span class="occupancy"
|
||||
:class="'occupancy-' + departure.occupancy"
|
||||
v-if="departure.occupancy != 'UNKNOWN'"
|
||||
v-tooltip="departure.occupancy"
|
||||
>■</span>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import WidgetMixin from '@/mixins/WidgetMixin';
|
||||
import { widgetApiEndpoints } from '@/utils/defaults';
|
||||
import { timestampToTime } from '@/utils/MiscHelpers';
|
||||
|
||||
export default {
|
||||
mixins: [WidgetMixin],
|
||||
components: {},
|
||||
data() {
|
||||
return {
|
||||
departures: null,
|
||||
locationSearch: null,
|
||||
};
|
||||
},
|
||||
created() {
|
||||
if (!this.isLocationId) {
|
||||
this.makeRequest(this.endpointLocation).then(
|
||||
(response) => {
|
||||
const stations = response.filter((r) => r.type === 'STATION');
|
||||
if (stations.length > 0) {
|
||||
this.location = stations[0].globalId;
|
||||
this.fetchData();
|
||||
} else {
|
||||
this.error('Cannot find station for specified string');
|
||||
}
|
||||
},
|
||||
);
|
||||
} else {
|
||||
this.location = this.options.location;
|
||||
}
|
||||
},
|
||||
filters: {
|
||||
formatDepartureTime(timestamp) {
|
||||
const msDifference = new Date(timestamp).getTime() - new Date().getTime();
|
||||
const diff = Math.max(0, Math.round(msDifference / 60000));
|
||||
return diff;
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
isLocationId() {
|
||||
if (!this.options.location) {
|
||||
this.error('Location is required');
|
||||
}
|
||||
if (typeof this.options.location !== 'string') this.error('Location can only be a string');
|
||||
if (this.options.location.startsWith('de:09162:')) return true;
|
||||
return false;
|
||||
},
|
||||
offset() {
|
||||
if (this.options.offset) return this.options.offset;
|
||||
return 0;
|
||||
},
|
||||
limit() {
|
||||
return this.options.limit || 10;
|
||||
},
|
||||
endpointDeparture() {
|
||||
return `${widgetApiEndpoints.mvg}/departure?globalId=${this.location}&limit=30&offsetInMinutes=${this.offset}&transportTypes=UBAHN,TRAM,BUS,SBAHN`;
|
||||
},
|
||||
endpointLocation() {
|
||||
return `${widgetApiEndpoints.mvg}/location?query=${encodeURIComponent(this.options.location)}`;
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
update() {
|
||||
this.startLoading();
|
||||
this.fetchData();
|
||||
this.finishLoading();
|
||||
},
|
||||
fetchData() {
|
||||
if (this.location !== undefined) {
|
||||
this.makeRequest(this.endpointDeparture).then(
|
||||
(response) => { this.processData(response); },
|
||||
);
|
||||
}
|
||||
},
|
||||
/* Assign data variables to the returned data */
|
||||
processData(data) {
|
||||
let i = 0;
|
||||
const results = [];
|
||||
data
|
||||
.filter(this.filter_results)
|
||||
.sort(this.sort_results)
|
||||
.slice(0, this.limit).forEach((dep) => {
|
||||
results.push({ ...dep, key: `mvg-dep-${this.location}-${i}` });
|
||||
i += 1;
|
||||
});
|
||||
this.departures = results;
|
||||
},
|
||||
ensure_array(value) {
|
||||
if (typeof value === 'string') {
|
||||
return [value];
|
||||
}
|
||||
return value;
|
||||
},
|
||||
filter_results(value) {
|
||||
if (!this.options.filters) return true;
|
||||
let useEntry = (
|
||||
(!this.options.filters.line)
|
||||
|| this.ensure_array(this.options.filters.line).includes(value.label)
|
||||
);
|
||||
useEntry = useEntry
|
||||
&& (
|
||||
(!this.options.filters.product)
|
||||
|| this.ensure_array(this.options.filters.product)
|
||||
.some(x => x.toLowerCase() === value.transportType.toLowerCase())
|
||||
);
|
||||
useEntry = useEntry
|
||||
&& (
|
||||
(!this.options.filters.destination)
|
||||
|| this.ensure_array(this.options.filters.destination)
|
||||
.some(x => x.toLowerCase() === value.destination.toLowerCase())
|
||||
);
|
||||
return useEntry;
|
||||
},
|
||||
sort_results(a, b) {
|
||||
const depa = a.realtimeDepartureTime ? a.realtimeDepartureTime : a.plannedDepartureTime;
|
||||
const depb = b.realtimeDepartureTime ? b.realtimeDepartureTime : b.plannedDepartureTime;
|
||||
if (depa > depb) return 1;
|
||||
if (depa < depb) return -1;
|
||||
if (a.label < b.label) return 1;
|
||||
if (a.label > b.label) return -1;
|
||||
if (a.destination < b.destination) return 1;
|
||||
if (a.destination > b.destination) return -1;
|
||||
return 0;
|
||||
},
|
||||
makeUrl(cronId) {
|
||||
const base = this.options.host || 'https://healthchecks.io';
|
||||
return `${base}/checks/${cronId}/details`;
|
||||
},
|
||||
mvgTooltipDeparture(data) {
|
||||
let departureDetails = '';
|
||||
if (data.realtime) {
|
||||
departureDetails += `Live: ${timestampToTime(data.realtimeDepartureTime)}<br />`;
|
||||
}
|
||||
departureDetails += `Planned: ${timestampToTime(data.plannedDepartureTime)}<br />`;
|
||||
if (data.realtime) {
|
||||
departureDetails += 'Live!<br />';
|
||||
}
|
||||
return {
|
||||
content: departureDetails, html: true, trigger: 'hover', delay: 250, classes: 'mvg-info-tt',
|
||||
};
|
||||
},
|
||||
mvgTooltipDestination(data) {
|
||||
let departureDetails = `<b>Infos:</b><br />${data.messages.join('<br />')}`;
|
||||
if (data.platform) {
|
||||
departureDetails += `Platform: ${data.platform}<br />`;
|
||||
}
|
||||
if (data.cancelled) {
|
||||
departureDetails += '<b>Cancelled!</b><br />';
|
||||
}
|
||||
return {
|
||||
content: departureDetails, html: true, trigger: 'hover', delay: 250, classes: 'mvg-info-tt',
|
||||
};
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.mvg-wrapper {
|
||||
display: grid;
|
||||
justify-content: left;
|
||||
grid-template-columns: 1fr 9fr;
|
||||
color: var(--widget-text-color);
|
||||
padding: 0.25rem 0;
|
||||
grid-row-gap: 0.4em;
|
||||
.departure {
|
||||
min-width: 1rem;
|
||||
font-size: 1.1rem;
|
||||
font-weight: bold;
|
||||
text-align: right;
|
||||
margin-right: 0.2rem;
|
||||
span.live {
|
||||
color: var(--success);
|
||||
}
|
||||
}
|
||||
.line {
|
||||
background-color: #FFFFFF;
|
||||
margin: 0;
|
||||
padding-right: 0.2em;
|
||||
border-radius: 0.2em;
|
||||
display: grid;
|
||||
grid-template-columns: 2.2em 1fr minmax(1.5em,max-content) 0.75em;
|
||||
.type-UBAHN {
|
||||
border: 0px;
|
||||
}
|
||||
.type-SBAHN {
|
||||
border: 0px;
|
||||
}
|
||||
.type-BUS {
|
||||
}
|
||||
.type-TRAM {
|
||||
}
|
||||
.transport{
|
||||
border-top-left-radius: 0.2em 0.2em;
|
||||
border-bottom-left-radius: 0.2em 0.2em;
|
||||
margin: 0em;
|
||||
padding: 0.15em 0;
|
||||
color: #FFFFFF;
|
||||
margin-right: 0.40em;
|
||||
text-align: center;
|
||||
span {
|
||||
min-width: 2em;
|
||||
display: inline-block;
|
||||
}
|
||||
&.line-U1 {
|
||||
background-color: #468447;
|
||||
}
|
||||
&.line-U2 {
|
||||
background-color: #dd3d4d;
|
||||
}
|
||||
&.line-U3 {
|
||||
background-color: #ef8824;
|
||||
}
|
||||
&.line-U4 {
|
||||
background-color: #04af90;
|
||||
}
|
||||
&.line-U5 {
|
||||
background-color: #b78730;
|
||||
}
|
||||
&.line-U6 {
|
||||
background-color: #0472b3;
|
||||
}
|
||||
&.line-S1 {
|
||||
background-color: #79c6e7;
|
||||
}
|
||||
&.line-S2 {
|
||||
background-color: #9bc04c;
|
||||
}
|
||||
&.line-S3 {
|
||||
background-color: #942d8d;
|
||||
}
|
||||
&.line-S4 {
|
||||
background-color: #d4214d;
|
||||
}
|
||||
&.line-S5 {
|
||||
background-color: #03a074;
|
||||
}
|
||||
&.line-S6 {
|
||||
background-color: #03a074;
|
||||
}
|
||||
&.line-S7 {
|
||||
background-color: #964438;
|
||||
}
|
||||
&.line-S8 {
|
||||
background-color: #000000;
|
||||
}
|
||||
&.type-BUS {
|
||||
background-color: #0d5c70;
|
||||
}
|
||||
}
|
||||
.destination{
|
||||
border-radius: 0.2em;
|
||||
width: 100%;
|
||||
background-color: #FFFFFF;
|
||||
color: #000;
|
||||
padding-top: 0.15em;
|
||||
padding-bottom: 0.15em;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
span.cancelled {
|
||||
color: var(--danger);
|
||||
text-decoration: line-through;
|
||||
}
|
||||
span.destination {
|
||||
overflow: clip;
|
||||
margin-right: 0.25em;
|
||||
width: 75%;
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
|
||||
.delay{
|
||||
padding: 0.15em;
|
||||
font-weight: bold;
|
||||
&.has-delay{
|
||||
padding: 0.15em;
|
||||
background-color: var(--danger);
|
||||
color: #FFF;
|
||||
border-radius: 0.2em;
|
||||
}
|
||||
}
|
||||
.delay::before{
|
||||
content: "+";
|
||||
}
|
||||
.occupancy{
|
||||
display: inline-block;
|
||||
padding: 0 0.15em;
|
||||
border-radius: 0.2em;
|
||||
&.occupancy-LOW {
|
||||
color: green;
|
||||
}
|
||||
&.occupancy-MEDIUM {
|
||||
color: orange;
|
||||
}
|
||||
&.occupancy-HIGH {
|
||||
color: red;
|
||||
}
|
||||
}
|
||||
}
|
||||
&:not(:last-child) {
|
||||
border-bottom: 1px dashed var(--widget-text-color);
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<style lang="scss">
|
||||
.ping-times-tt {
|
||||
min-width: 20rem;
|
||||
}
|
||||
</style>
|
||||
<style lang="scss">
|
||||
.mvg-info-tt {
|
||||
min-width: 20rem;
|
||||
}
|
||||
</style>
|
||||
372
src/components/Widgets/MvgConnection.vue
Normal file
372
src/components/Widgets/MvgConnection.vue
Normal file
@@ -0,0 +1,372 @@
|
||||
<template>
|
||||
<div class="mvg-connections-outer-wrapper">
|
||||
<div class="mvg-connections-header" v-if="showTitle">{{ connectionName }}</div>
|
||||
<div class="mvg-wrapper" v-if="connections">
|
||||
<div
|
||||
v-for="connection in connections"
|
||||
v-bind:key="connection.uniqueId"
|
||||
class="line"
|
||||
v-tooltip="mvgTooltipConnection(connection)"
|
||||
>
|
||||
<div
|
||||
class="departure"
|
||||
>
|
||||
<span class="time"
|
||||
>
|
||||
{{connection.parts[0].from.plannedDeparture | formatTime}}
|
||||
</span>
|
||||
<span class="delay"
|
||||
:class="{'has-delay': connection.parts[0].from.departureDelayInMinutes > 0}"
|
||||
>{{ Math.max(parseInt(connection.parts[0].from.departureDelayInMinutes) || 0, 0) }}</span>
|
||||
</div>
|
||||
<div
|
||||
class="changes"
|
||||
>
|
||||
<template
|
||||
v-for="(part,index) in connection.parts"
|
||||
>
|
||||
<span
|
||||
v-if="index > 0"
|
||||
v-bind:key="'change-' + index"
|
||||
class="change"
|
||||
v-tooltip="part.from.name"
|
||||
>⬌</span>
|
||||
<span
|
||||
v-bind:key="'transport-' + index"
|
||||
:class="['type-' + part.line.transportType,
|
||||
'line-' + part.line.label,
|
||||
]"
|
||||
v-if="part.line.transportType != 'PEDESTRIAN'"
|
||||
class="transport"
|
||||
>{{part.line.label}}</span>
|
||||
<span v-else
|
||||
v-bind:key="'transport-' + index"
|
||||
>🚶</span>
|
||||
</template>
|
||||
</div>
|
||||
<span class="time">
|
||||
{{Date.parse(connection.parts[connection.parts.length-1]
|
||||
.to.plannedDeparture) - Date.parse(connection.parts[0]
|
||||
.from.plannedDeparture) | formatDuration}}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import WidgetMixin from '@/mixins/WidgetMixin';
|
||||
import { widgetApiEndpoints } from '@/utils/defaults';
|
||||
|
||||
export default {
|
||||
mixins: [WidgetMixin],
|
||||
components: {},
|
||||
data() {
|
||||
return {
|
||||
connections: null,
|
||||
locationSearch: null,
|
||||
connectionName: null,
|
||||
defaultTitle: 'Connection',
|
||||
locations: {
|
||||
origin: undefined,
|
||||
destination: undefined,
|
||||
},
|
||||
};
|
||||
},
|
||||
created() {
|
||||
const promStart = this.getLocationId(this.start);
|
||||
const promEnd = this.getLocationId(this.end);
|
||||
Promise.all([promStart, promEnd]).then(
|
||||
(results) => {
|
||||
[this.locations.origin, this.locations.destination] = results.map((r) => r[0]);
|
||||
this.defaultTitle = `${this.locations.origin.name} - ${this.locations.destination.name}`;
|
||||
this.fetchData();
|
||||
},
|
||||
);
|
||||
},
|
||||
filters: {
|
||||
formatDepartureTime(timestamp) {
|
||||
const msDifference = new Date(timestamp).getTime() - new Date().getTime();
|
||||
const diff = Math.max(0, Math.round(msDifference / 60000));
|
||||
return diff;
|
||||
},
|
||||
formatTime(str) {
|
||||
const d = new Date(Date.parse(str));
|
||||
function ii(i) {
|
||||
let s = `${i}`;
|
||||
if (s.length < 2) s = `0${s}`;
|
||||
return s;
|
||||
}
|
||||
return `${ii(d.getHours())}:${ii(d.getMinutes())}`;
|
||||
},
|
||||
formatDuration(val) {
|
||||
function ii(i) {
|
||||
let s = `${i}`;
|
||||
if (s.length < 2) s = `0${s}`;
|
||||
return s;
|
||||
}
|
||||
return `${Math.floor(val / 3600000)}:${ii(Math.floor(val / 60000))}`;
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
start() {
|
||||
return this.options.from || this.options.start || this.options.origin || 'Marienplatz';
|
||||
},
|
||||
end() {
|
||||
return this.options.to || this.options.end || this.options.destination || 'Giesing';
|
||||
},
|
||||
title() {
|
||||
if (this.options.title) {
|
||||
return this.options.title;
|
||||
}
|
||||
return this.defaultTitle;
|
||||
},
|
||||
showTitle() {
|
||||
return (this.options.header) ? this.options.header : true;
|
||||
},
|
||||
transportTypes() {
|
||||
if (this.options.transportations) {
|
||||
return this.options.transportations.join(',');
|
||||
}
|
||||
return 'UBAHN,TRAM,BUS,SBAHN';
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
formatPoint(point, typ) {
|
||||
if (point.type === 'ADDRESS' || point.type === 'POI') {
|
||||
return `${typ}Latitude=${point.latitude}&${typ}Longitude=${point.longitude}`;
|
||||
}
|
||||
return `${typ}StationGlobalId=${point.globalId}`;
|
||||
},
|
||||
isLocationId(loc) {
|
||||
if (!loc) {
|
||||
this.error('Location is required');
|
||||
}
|
||||
if (typeof loc !== 'string') this.error('Location can only be a string');
|
||||
return (loc.startsWith('de:09162:'));
|
||||
},
|
||||
getLocationId(loc) {
|
||||
return this.makeRequest(this.getEndpointLocation(loc));
|
||||
},
|
||||
getEndpointLocation(loc) {
|
||||
return `${widgetApiEndpoints.mvg}/location?query=${encodeURIComponent(loc)}`;
|
||||
},
|
||||
endpointConnection() {
|
||||
return `${widgetApiEndpoints.mvg}/connection?${this.formatPoint(this.locations.origin, 'origin')}&${this.formatPoint(this.locations.destination, 'destination')}&routingDateTime=${(new Date()).toISOString()}&offsetInMinutes=${this.offset}&transportTypes=${this.transportTypes}`;
|
||||
},
|
||||
update() {
|
||||
this.startLoading();
|
||||
this.fetchData();
|
||||
this.finishLoading();
|
||||
},
|
||||
fetchData() {
|
||||
if (this.locations.origin !== undefined
|
||||
&& this.locations.destination !== undefined) {
|
||||
this.makeRequest(this.endpointConnection()).then(
|
||||
(response) => { this.processData(response); },
|
||||
);
|
||||
}
|
||||
},
|
||||
/* Assign data variables to the returned data */
|
||||
processData(data) {
|
||||
this.connections = data;
|
||||
},
|
||||
ensure_array(value) {
|
||||
if (typeof value === 'string') {
|
||||
return [value];
|
||||
}
|
||||
return value;
|
||||
},
|
||||
mvgTooltipConnection(data) {
|
||||
let connectionDetails = '';
|
||||
const self = this;
|
||||
function addStep(step) {
|
||||
connectionDetails += `<b>${self.$options.filters.formatTime(step.plannedDeparture)}</b>
|
||||
<span class="delay">+${Math.max(parseInt(step.departureDelayInMinutes, 10) || 0, 0)}</span>
|
||||
<span>${step.name}</span>`;
|
||||
}
|
||||
addStep(data.parts[0].from);
|
||||
data.parts.forEach((part) => {
|
||||
addStep(part.to);
|
||||
});
|
||||
return {
|
||||
content: connectionDetails, html: true, trigger: 'hover', delay: 250, classes: 'mvg-connection-detail',
|
||||
};
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.mvg-header {
|
||||
color: var(--widget-text-color);
|
||||
font-size:1.2em;
|
||||
}
|
||||
.mvg-wrapper {
|
||||
display: grid;
|
||||
justify-content: left;
|
||||
grid-template-columns: 100%;
|
||||
color: var(--widget-text-color);
|
||||
padding: 0.25rem 0;
|
||||
grid-row-gap: 0.4em;
|
||||
.departure {
|
||||
min-width: 1rem;
|
||||
font-size: 1.1rem;
|
||||
font-weight: bold;
|
||||
text-align: right;
|
||||
margin-right: 0.2rem;
|
||||
span.live {
|
||||
color: var(--success);
|
||||
}
|
||||
}
|
||||
.line {
|
||||
margin: 0em;
|
||||
padding: 0em;
|
||||
border-radius: 0.2em;
|
||||
display: grid;
|
||||
grid-template-columns: 2fr 5fr 0.75fr;
|
||||
.changes {
|
||||
text-align: center;
|
||||
}
|
||||
.type-UBAHN {
|
||||
border: 0px;
|
||||
}
|
||||
.type-SBAHN {
|
||||
border: 0px;
|
||||
}
|
||||
.type-BUS {
|
||||
}
|
||||
.type-TRAM {
|
||||
background-color: #dd3d4d;
|
||||
}
|
||||
.transport{
|
||||
border-radius: 0.2em;
|
||||
margin: 0em;
|
||||
padding: 0.15em 0.15em;
|
||||
color: #FFFFFF;
|
||||
margin-right: 0.40em;
|
||||
margin-left: 0.40em;
|
||||
text-align: center;
|
||||
span {
|
||||
min-width: 2em;
|
||||
display: inline-block;
|
||||
}
|
||||
&.line-Fussweg {
|
||||
text-indent: 100%;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
}
|
||||
&.line-U1 {
|
||||
background-color: #468447;
|
||||
}
|
||||
&.line-U2 {
|
||||
background-color: #dd3d4d;
|
||||
}
|
||||
&.line-U3 {
|
||||
background-color: #ef8824;
|
||||
}
|
||||
&.line-U4 {
|
||||
background-color: #04af90;
|
||||
}
|
||||
&.line-U5 {
|
||||
background-color: #b78730;
|
||||
}
|
||||
&.line-U6 {
|
||||
background-color: #0472b3;
|
||||
}
|
||||
&.line-S1 {
|
||||
background-color: #79c6e7;
|
||||
}
|
||||
&.line-S2 {
|
||||
background-color: #9bc04c;
|
||||
}
|
||||
&.line-S3 {
|
||||
background-color: #942d8d;
|
||||
}
|
||||
&.line-S4 {
|
||||
background-color: #d4214d;
|
||||
}
|
||||
&.line-S5 {
|
||||
background-color: #03a074;
|
||||
}
|
||||
&.line-S6 {
|
||||
background-color: #03a074;
|
||||
}
|
||||
&.line-S7 {
|
||||
background-color: #964438;
|
||||
}
|
||||
&.line-S8 {
|
||||
background-color: #000000;
|
||||
}
|
||||
&.type-BUS {
|
||||
background-color: #0d5c70;
|
||||
}
|
||||
}
|
||||
.destination{
|
||||
border-radius: 0.2em;
|
||||
width: 100%;
|
||||
background-color: #FFFFFF;
|
||||
color: #000;
|
||||
padding-top: 0.15em;
|
||||
padding-bottom: 0.15em;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
span.cancelled {
|
||||
color: var(--danger);
|
||||
text-decoration: line-through;
|
||||
}
|
||||
span.destination {
|
||||
overflow: clip;
|
||||
margin-right: 0.25em;
|
||||
width: 75%;
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
|
||||
.delay{
|
||||
padding: 0.15em;
|
||||
font-weight: bold;
|
||||
&.has-delay{
|
||||
padding: 0.15em;
|
||||
background-color: var(--danger);
|
||||
color: #FFF;
|
||||
border-radius: 0.2em;
|
||||
}
|
||||
}
|
||||
.delay::before{
|
||||
content: "+";
|
||||
}
|
||||
.occupancy{
|
||||
display: inline-block;
|
||||
padding: 0 0.15em;
|
||||
border-radius: 0.2em;
|
||||
&.occupancy-LOW {
|
||||
color: green;
|
||||
}
|
||||
&.occupancy-MEDIUM {
|
||||
color: orange;
|
||||
}
|
||||
&.occupancy-HIGH {
|
||||
color: red;
|
||||
}
|
||||
}
|
||||
}
|
||||
&:not(:last-child) {
|
||||
border-bottom: 1px dashed var(--widget-text-color);
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<style lang="scss">
|
||||
.ping-times-tt {
|
||||
min-width: 20rem;
|
||||
}
|
||||
</style>
|
||||
<style lang="scss">
|
||||
.mvg-connection-detail .tooltip-inner {
|
||||
min-width: 20rem;
|
||||
display: grid;
|
||||
grid-template-columns: 2fr 1fr 6fr;
|
||||
}
|
||||
</style>
|
||||
@@ -40,8 +40,12 @@ export default {
|
||||
if (!usersChoice) this.error('You must specify the hostname for your Pi-Hole server');
|
||||
return usersChoice || 'http://pi.hole';
|
||||
},
|
||||
apiKey() {
|
||||
if (!this.options.apiKey) this.error('API Key is required, please see the docs');
|
||||
return this.options.apiKey;
|
||||
},
|
||||
endpoint() {
|
||||
return `${this.hostname}/admin/api.php`;
|
||||
return `${this.hostname}/admin/api.php?summary&auth=${this.apiKey}`;
|
||||
},
|
||||
hideStatus() { return this.options.hideStatus; },
|
||||
hideChart() { return this.options.hideChart; },
|
||||
@@ -57,7 +61,11 @@ export default {
|
||||
fetchData() {
|
||||
this.makeRequest(this.endpoint)
|
||||
.then((response) => {
|
||||
this.processData(response);
|
||||
if (Array.isArray(response)) {
|
||||
this.error('Got success, but found no results, possible authorization error');
|
||||
} else {
|
||||
this.processData(response);
|
||||
}
|
||||
});
|
||||
},
|
||||
/* Assign data variables to the returned data */
|
||||
|
||||
@@ -23,8 +23,12 @@ export default {
|
||||
if (!usersChoice) this.error('You must specify the hostname for your Pi-Hole server');
|
||||
return usersChoice || 'http://pi.hole';
|
||||
},
|
||||
apiKey() {
|
||||
if (!this.options.apiKey) this.error('API Key is required, please see the docs');
|
||||
return this.options.apiKey;
|
||||
},
|
||||
endpoint() {
|
||||
return `${this.hostname}/admin/api.php?overTimeData10mins`;
|
||||
return `${this.hostname}/admin/api.php?overTimeData10mins&auth=${this.apiKey}`;
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
@@ -38,7 +42,9 @@ export default {
|
||||
});
|
||||
},
|
||||
validate(response) {
|
||||
if (!response.ads_over_time || !response.domains_over_time) {
|
||||
if (Array.isArray(response)) {
|
||||
this.error('Got success, but found no results, possible authorization error');
|
||||
} else if (!response.ads_over_time || !response.domains_over_time) {
|
||||
this.error('Expected data was not returned from Pi-Hole');
|
||||
return false;
|
||||
} else if (response.ads_over_time.length < 1) {
|
||||
|
||||
156
src/components/Widgets/Proxmox.vue
Normal file
156
src/components/Widgets/Proxmox.vue
Normal file
@@ -0,0 +1,156 @@
|
||||
<template>
|
||||
<div class="proxmox-list">
|
||||
<div class="proxmox-title" v-if="title">
|
||||
<a v-if="titleAsLink" class="proxmox-link" :href="clusterUrl" target="_blank">
|
||||
{{ title }}
|
||||
</a>
|
||||
<span v-if="!titleAsLink">{{ title }}</span>
|
||||
</div>
|
||||
<div v-for="(item, key) in data" :key="key" class="proxmox-row">
|
||||
<div v-if="item.node" class="proxmox-cell">{{ item.node }}</div>
|
||||
<div v-if="item.name" class="proxmox-cell">{{ item.name }}</div>
|
||||
<div class="proxmox-cell proxmox-status"><span :class="item.status"></span></div>
|
||||
</div>
|
||||
<div class="proxmox-footer" v-if="footer">
|
||||
<a v-if="footerAsLink" class="proxmox-link" :href="clusterUrl" target="_blank">
|
||||
{{ footer }}
|
||||
</a>
|
||||
<span v-if="!footerAsLink">{{ title }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import WidgetMixin from '@/mixins/WidgetMixin';
|
||||
|
||||
export default {
|
||||
mixins: [WidgetMixin],
|
||||
components: {},
|
||||
data() {
|
||||
return {
|
||||
data: [],
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
clusterUrl() {
|
||||
if (!this.options.cluster_url) this.error('The cluster URL is required.');
|
||||
return this.options.cluster_url || '';
|
||||
},
|
||||
userName() {
|
||||
if (!this.options.user_name) this.error('The user name is required.');
|
||||
return this.options.user_name || '';
|
||||
},
|
||||
tokenName() {
|
||||
if (!this.options.token_name) this.error('The token name is required.');
|
||||
return this.options.token_name || '';
|
||||
},
|
||||
tokenUuid() {
|
||||
if (!this.options.token_uuid) this.error('The token uuid is required.');
|
||||
return this.options.token_uuid || '';
|
||||
},
|
||||
node() {
|
||||
return this.options.node || '';
|
||||
},
|
||||
nodeData() {
|
||||
return this.options.node_data || false;
|
||||
},
|
||||
hideTemplates() {
|
||||
return this.options.hide_templates || false;
|
||||
},
|
||||
title() {
|
||||
return this.options.title || '';
|
||||
},
|
||||
titleAsLink() {
|
||||
return this.options.title_as_link || false;
|
||||
},
|
||||
footer() {
|
||||
return this.options.footer || '';
|
||||
},
|
||||
footerAsLink() {
|
||||
return this.options.footer_as_link || false;
|
||||
},
|
||||
endpoint() {
|
||||
if (!this.node) {
|
||||
return `${this.clusterUrl}/api2/json/nodes`;
|
||||
}
|
||||
if (this.nodeData) {
|
||||
return `${this.clusterUrl}/api2/json/nodes/${this.node}/${this.nodeData}`;
|
||||
}
|
||||
return '';
|
||||
},
|
||||
authHeaders() {
|
||||
if (this.userName && this.tokenName && this.tokenUuid) {
|
||||
return { Authorization: `PVEAPIToken=${this.userName}!${this.tokenName}=${this.tokenUuid}` };
|
||||
}
|
||||
return false;
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
fetchData() {
|
||||
const auth = this.authHeaders;
|
||||
if (auth) {
|
||||
this.startLoading();
|
||||
this.makeRequest(this.endpoint, auth).then(this.processData);
|
||||
}
|
||||
},
|
||||
processData(data) {
|
||||
this.data = data.data.sort((a, b) => a.vmid > b.vmid);
|
||||
if (this.hideTemplates) {
|
||||
this.data = this.data.filter(item => item.template !== 1);
|
||||
}
|
||||
this.finishLoading();
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
||||
.proxmox-list {
|
||||
.proxmox-title, .proxmox-footer {
|
||||
outline: 2px solid transparent;
|
||||
border: 1px solid var(--outline-color);
|
||||
border-radius: var(--curve-factor);
|
||||
box-shadow: var(--item-shadow);
|
||||
color: var(--item-text-color);
|
||||
margin: .5rem;
|
||||
padding: 0.3rem;
|
||||
background: var(--item-background);
|
||||
text-align: center;
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
color: var(--item-text-color);
|
||||
}
|
||||
}
|
||||
.proxmox-row {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
color: var(--widget-text-color);
|
||||
font-size: 1.1rem;
|
||||
.proxmox-cell {
|
||||
display: inline-block;
|
||||
}
|
||||
.proxmox-status{
|
||||
.online, .running {
|
||||
width: 0.8rem;
|
||||
height: 0.8rem;
|
||||
border-radius: 50%;
|
||||
background-color: var(--success);
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
.proxmox-link {
|
||||
display: inline-block;
|
||||
padding: 0.2rem;
|
||||
margin: 0.1rem 0.2rem;
|
||||
|
||||
}
|
||||
&:not(:last-child) {
|
||||
border-bottom: 1px dashed var(--widget-text-color);
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -54,10 +54,17 @@ export default {
|
||||
const then = new Date((now.setMonth(now.getMonth() + this.monthsToShow)));
|
||||
return `${then.getDate()}-${then.getMonth() + 1}-${then.getFullYear()}`;
|
||||
},
|
||||
region() {
|
||||
if (this.options?.state) {
|
||||
return `®ion=${this.options.state}`;
|
||||
}
|
||||
return '';
|
||||
},
|
||||
endpoint() {
|
||||
return `${widgetApiEndpoints.holidays}`
|
||||
+ `&fromDate=${this.startDate}&toDate=${this.endDate}`
|
||||
+ `&country=${this.country}&holidayType=${this.holidayType}`;
|
||||
+ `&country=${this.country}&holidayType=${this.holidayType}`
|
||||
+ `${this.region}`;
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import * as Parser from 'rss-parser';
|
||||
import WidgetMixin from '@/mixins/WidgetMixin';
|
||||
import { widgetApiEndpoints } from '@/utils/defaults';
|
||||
|
||||
@@ -47,11 +48,14 @@ export default {
|
||||
/* The URL to users atom-format RSS feed */
|
||||
rssUrl() {
|
||||
if (!this.options.rssUrl) this.error('Missing feed URL');
|
||||
return encodeURIComponent(this.options.rssUrl || '');
|
||||
return this.options.rssUrl || '';
|
||||
},
|
||||
apiKey() {
|
||||
return this.options.apiKey;
|
||||
},
|
||||
parseLocally() {
|
||||
return this.options.parseLocally;
|
||||
},
|
||||
limit() {
|
||||
const usersChoice = this.options.limit;
|
||||
if (usersChoice) return usersChoice;
|
||||
@@ -73,8 +77,12 @@ export default {
|
||||
const limit = this.limit && this.apiKey ? `&count=${this.limit}` : '';
|
||||
const orderBy = this.orderBy && this.apiKey ? `&order_by=${this.orderBy}` : '';
|
||||
const direction = this.orderDirection ? `&order_dir=${this.orderDirection}` : '';
|
||||
return `${widgetApiEndpoints.rssToJson}?rss_url=${this.rssUrl}`
|
||||
+ `${apiKey}${limit}${orderBy}${direction}`;
|
||||
if (this.parseLocally) {
|
||||
return this.rssUrl;
|
||||
} else {
|
||||
return `${widgetApiEndpoints.rssToJson}?rss_url=${encodeURIComponent(this.rssUrl)}`
|
||||
+ `${apiKey}${limit}${orderBy}${direction}`;
|
||||
}
|
||||
},
|
||||
},
|
||||
filters: {
|
||||
@@ -88,31 +96,53 @@ export default {
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
/* Make GET request to Rss2Json */
|
||||
/* Make GET request to whatever endpoint we are using */
|
||||
fetchData() {
|
||||
this.makeRequest(this.endpoint).then(this.processData);
|
||||
},
|
||||
/* Assign data variables to the returned data */
|
||||
processData(data) {
|
||||
const { feed, items } = data;
|
||||
this.meta = {
|
||||
title: feed.title,
|
||||
link: feed.link,
|
||||
author: feed.author,
|
||||
description: feed.description,
|
||||
image: feed.image,
|
||||
};
|
||||
async processData(data) {
|
||||
if (this.parseLocally) {
|
||||
const parser = new Parser();
|
||||
const {
|
||||
link, title, items, author, description, image,
|
||||
} = await parser.parseString(data);
|
||||
this.meta = {
|
||||
title,
|
||||
link,
|
||||
author,
|
||||
description,
|
||||
image,
|
||||
};
|
||||
this.processItems(items);
|
||||
} else {
|
||||
const { feed, items } = data;
|
||||
this.meta = {
|
||||
title: feed.title,
|
||||
link: feed.link,
|
||||
author: feed.author,
|
||||
description: feed.description,
|
||||
image: feed.image,
|
||||
};
|
||||
this.processItems(items);
|
||||
}
|
||||
},
|
||||
processItems(items) {
|
||||
const posts = [];
|
||||
items.forEach((post) => {
|
||||
let { length } = items;
|
||||
if (this.limit) {
|
||||
length = this.limit;
|
||||
}
|
||||
for (let i = 0; length > i; i += 1) {
|
||||
posts.push({
|
||||
title: post.title,
|
||||
description: post.description,
|
||||
image: post.thumbnail,
|
||||
author: post.author,
|
||||
date: post.pubDate,
|
||||
link: post.link,
|
||||
title: items[i].title,
|
||||
description: items[i].description,
|
||||
image: items[i].thumbnail,
|
||||
author: items[i].author,
|
||||
date: items[i].pubDate,
|
||||
link: items[i].link,
|
||||
});
|
||||
});
|
||||
}
|
||||
this.posts = posts;
|
||||
},
|
||||
},
|
||||
|
||||
@@ -52,10 +52,12 @@ const COMPAT = {
|
||||
clock: 'Clock',
|
||||
'crypto-price-chart': 'CryptoPriceChart',
|
||||
'crypto-watch-list': 'CryptoWatchList',
|
||||
'custom-search': 'CustomSearch',
|
||||
'cve-vulnerabilities': 'CveVulnerabilities',
|
||||
'domain-monitor': 'DomainMonitor',
|
||||
'code-stats': 'CodeStats',
|
||||
'covid-stats': 'CovidStats',
|
||||
'drone-ci': 'DroneCi',
|
||||
embed: 'EmbedWidget',
|
||||
'eth-gas-prices': 'EthGasPrices',
|
||||
'exchange-rates': 'ExchangeRates',
|
||||
@@ -82,6 +84,9 @@ const COMPAT = {
|
||||
image: 'ImageWidget',
|
||||
joke: 'Jokes',
|
||||
'mullvad-status': 'MullvadStatus',
|
||||
mvg: 'Mvg',
|
||||
linkding: 'Linkding',
|
||||
'mvg-connection': 'MvgConnection',
|
||||
'nd-cpu-history': 'NdCpuHistory',
|
||||
'nd-load-history': 'NdLoadHistory',
|
||||
'nd-ram-history': 'NdRamHistory',
|
||||
@@ -95,6 +100,7 @@ const COMPAT = {
|
||||
'pi-hole-stats': 'PiHoleStats',
|
||||
'pi-hole-top-queries': 'PiHoleTopQueries',
|
||||
'pi-hole-traffic': 'PiHoleTraffic',
|
||||
'proxmox-lists': 'Proxmox',
|
||||
'public-holidays': 'PublicHolidays',
|
||||
'public-ip': 'PublicIp',
|
||||
'rss-feed': 'RssFeed',
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<template>
|
||||
<div class="xkcd-wrapper">
|
||||
<div class="xkcd-wrapper" v-tooltip="toolTip(alt)">
|
||||
<h3 class="xkcd-title">{{ title }}</h3>
|
||||
<a :href="`https://xkcd.com/${comicNum}/`">
|
||||
<img :src="image" :alt="alt" class="xkcd-comic" />
|
||||
<img :src="image" :alt="alt" class="xkcd-comic"/>
|
||||
</a>
|
||||
</div>
|
||||
</template>
|
||||
@@ -59,6 +59,12 @@ export default {
|
||||
this.alt = data.alt;
|
||||
this.comicNum = data.num;
|
||||
},
|
||||
toolTip(alt) {
|
||||
const content = alt;
|
||||
return {
|
||||
content, html: false, trigger: 'hover focus', delay: 250, classes: 'xkcd-alt-tt',
|
||||
};
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
@@ -80,3 +86,8 @@ export default {
|
||||
}
|
||||
|
||||
</style>
|
||||
<style lang="scss">
|
||||
.xkcd-alt-tt {
|
||||
min-width: 20rem;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -20,10 +20,10 @@
|
||||
</div>
|
||||
<!-- Show links for switching back to Home / Minimal views -->
|
||||
<div class="switch-view-buttons">
|
||||
<router-link to="/home">
|
||||
<router-link to="/home/">
|
||||
<IconHome class="view-icon" v-tooltip="$t('alternate-views.default')" />
|
||||
</router-link>
|
||||
<router-link to="/minimal">
|
||||
<router-link to="/minimal/">
|
||||
<IconMinimalView class="view-icon" v-tooltip="$t('alternate-views.minimal')" />
|
||||
</router-link>
|
||||
</div>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div class="web-content" :id="id">
|
||||
<iframe :src="url" allow="fullscreen" />
|
||||
<iframe :src="url" allow="fullscreen; clipboard-write" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ export default {
|
||||
computed: {
|
||||
/* Required, hostname (e.g. IP + port) for Glances instance */
|
||||
hostname() {
|
||||
if (!this.options.hostname) this.error('You must specify a \'hostname\' for Glaces');
|
||||
if (!this.options.hostname) this.error('You must specify a \'hostname\' for Glances');
|
||||
return this.options.hostname;
|
||||
},
|
||||
/* Optionally specify the API version, defaults to V 3 */
|
||||
|
||||
@@ -162,7 +162,7 @@ const HomeMixin = {
|
||||
/* If user has a background image, then generate CSS attributes */
|
||||
getBackgroundImage() {
|
||||
if (this.appConfig && this.appConfig.backgroundImg) {
|
||||
return `background: url('${this.appConfig.backgroundImg}');background-size:cover;`;
|
||||
return `background: url('${this.appConfig.backgroundImg}') no-repeat center fixed;background-size:cover;`;
|
||||
}
|
||||
return '';
|
||||
},
|
||||
|
||||
@@ -157,8 +157,8 @@ export default {
|
||||
this.$emit('itemClicked');
|
||||
// Update the most/ last used ledger, for smart-sorting
|
||||
if (!this.appConfig.disableSmartSort) {
|
||||
this.incrementMostUsedCount(this.id);
|
||||
this.incrementLastUsedCount(this.id);
|
||||
this.incrementMostUsedCount(this.item.id);
|
||||
this.incrementLastUsedCount(this.item.id);
|
||||
}
|
||||
},
|
||||
/* Open item, using specified method */
|
||||
|
||||
@@ -104,7 +104,8 @@ const store = new Vuex.Store({
|
||||
perms.allowWriteToDisk = false;
|
||||
}
|
||||
// Disable everything
|
||||
if (appConfig.disableConfiguration) {
|
||||
if (appConfig.disableConfiguration
|
||||
|| (appConfig.disableConfigurationForNonAdmin && !isUserAdmin())) {
|
||||
perms.allowWriteToDisk = false;
|
||||
perms.allowSaveLocally = false;
|
||||
perms.allowViewConfig = false;
|
||||
|
||||
@@ -21,10 +21,10 @@ i.owi {
|
||||
-webkit-font-smoothing: antialiased;
|
||||
color: var(--primary);
|
||||
|
||||
&.owi-01d::before { content: "\ea01"; }
|
||||
&.owi-01n::before { content: "\ea02"; }
|
||||
&.owi-02d::before { content: "\ea04"; }
|
||||
&.owi-02n::before { content: "\ea03"; }
|
||||
&.owi-01d::before { content: "\ea02"; }
|
||||
&.owi-01n::before { content: "\ea01"; }
|
||||
&.owi-02d::before { content: "\ea03"; }
|
||||
&.owi-02n::before { content: "\ea04"; }
|
||||
&.owi-03d::before { content: "\ea05"; }
|
||||
&.owi-03n::before { content: "\ea06"; }
|
||||
&.owi-04d::before { content: "\ea07"; }
|
||||
@@ -36,8 +36,8 @@ i.owi {
|
||||
&.owi-11d::before { content: "\ea0d"; }
|
||||
&.owi-11n::before { content: "\ea0e"; }
|
||||
&.owi-13d::before { content: "\ea10"; }
|
||||
&.owi-13n::before { content: "\ea12"; }
|
||||
&.owi-50d::before { content: "\ea11"; }
|
||||
&.owi-13n::before { content: "\ea11"; }
|
||||
&.owi-50d::before { content: "\ea12"; }
|
||||
&.owi-50n::before { content: "\ea13"; }
|
||||
&.owi-1232n::before { content: "\ea0f"; }
|
||||
}
|
||||
|
||||
@@ -56,18 +56,20 @@ const generateUserToken = (user) => {
|
||||
*/
|
||||
export const isLoggedIn = () => {
|
||||
const users = getUsers();
|
||||
const validTokens = users.map((user) => generateUserToken(user));
|
||||
let userAuthenticated = false;
|
||||
document.cookie.split(';').forEach((cookie) => {
|
||||
let userAuthenticated = document.cookie.split(';').some((cookie) => {
|
||||
if (cookie && cookie.split('=').length > 1) {
|
||||
const cookieKey = cookie.split('=')[0].trim();
|
||||
const cookieValue = cookie.split('=')[1].trim();
|
||||
if (cookieKey === cookieKeys.AUTH_TOKEN) {
|
||||
if (validTokens.includes(cookieValue)) {
|
||||
userAuthenticated = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
userAuthenticated = users.some((user) => {
|
||||
if (generateUserToken(user) === cookieValue) {
|
||||
localStorage.setItem(localStorageKeys.USERNAME, user.user);
|
||||
return true;
|
||||
} else return false;
|
||||
});
|
||||
return userAuthenticated;
|
||||
} else return false;
|
||||
} else return false;
|
||||
});
|
||||
return userAuthenticated;
|
||||
};
|
||||
@@ -127,7 +129,7 @@ export const login = (username, pass, timeout) => {
|
||||
const now = new Date();
|
||||
const expiry = new Date(now.setTime(now.getTime() + timeout)).toGMTString();
|
||||
const userObject = { user: username, hash: sha256(pass).toString().toLowerCase() };
|
||||
document.cookie = `authenticationToken=${generateUserToken(userObject)};`
|
||||
document.cookie = `${cookieKeys.AUTH_TOKEN}=${generateUserToken(userObject)};`
|
||||
+ `${timeout > 0 ? `expires=${expiry}` : ''}`;
|
||||
localStorage.setItem(localStorageKeys.USERNAME, username);
|
||||
};
|
||||
@@ -136,7 +138,7 @@ export const login = (username, pass, timeout) => {
|
||||
* Removed the browsers' cookie, causing user to be logged out
|
||||
*/
|
||||
export const logout = () => {
|
||||
document.cookie = 'authenticationToken=null';
|
||||
document.cookie = `${cookieKeys.AUTH_TOKEN}=null`;
|
||||
localStorage.removeItem(localStorageKeys.USERNAME);
|
||||
};
|
||||
|
||||
@@ -152,7 +154,7 @@ export const getCurrentUser = () => {
|
||||
let foundUserObject = false; // Value to return
|
||||
getUsers().forEach((user) => {
|
||||
// If current logged-in user found, then return that user
|
||||
if (user.user === username) foundUserObject = user;
|
||||
if (user.user.toLowerCase() === username.toLowerCase()) foundUserObject = user;
|
||||
});
|
||||
return foundUserObject;
|
||||
};
|
||||
@@ -161,10 +163,10 @@ export const getCurrentUser = () => {
|
||||
* Checks if the user is viewing the dashboard as a guest
|
||||
* Returns true if guest mode enabled, and user not logged in
|
||||
* */
|
||||
export const isLoggedInAsGuest = () => {
|
||||
export const isLoggedInAsGuest = (currentUser) => {
|
||||
const guestEnabled = isGuestAccessEnabled();
|
||||
const notLoggedIn = !isLoggedIn();
|
||||
return guestEnabled && notLoggedIn;
|
||||
const loggedIn = isLoggedIn() && currentUser;
|
||||
return guestEnabled && !loggedIn;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -182,7 +184,7 @@ export const isUserAdmin = () => {
|
||||
const currentUser = localStorage[localStorageKeys.USERNAME];
|
||||
let isAdmin = false;
|
||||
users.forEach((user) => {
|
||||
if (user.user === currentUser) {
|
||||
if (user.user.toLowerCase() === currentUser.toLowerCase()) {
|
||||
if (user.type === 'admin') isAdmin = true;
|
||||
}
|
||||
});
|
||||
|
||||
@@ -5,15 +5,14 @@
|
||||
*/
|
||||
|
||||
// Import helper functions from auth, to get current user, and check if guest
|
||||
import { getCurrentUser, isLoggedInAsGuest } from '@/utils/Auth';
|
||||
import { getCurrentUser } from '@/utils/Auth';
|
||||
import { isVisibleToUser } from '@/utils/IsVisibleToUser';
|
||||
|
||||
/* Putting it all together, the function to export */
|
||||
export const checkItemVisibility = (item) => {
|
||||
const currentUser = getCurrentUser(); // Get current user object
|
||||
const isGuest = isLoggedInAsGuest(); // Check if current user is a guest
|
||||
const displayData = item.displayData || {};
|
||||
return isVisibleToUser(displayData, currentUser, isGuest);
|
||||
return isVisibleToUser(displayData, currentUser);
|
||||
};
|
||||
|
||||
export default checkItemVisibility;
|
||||
|
||||
@@ -5,16 +5,15 @@
|
||||
*/
|
||||
|
||||
// Import helper functions from auth, to get current user, and check if guest
|
||||
import { getCurrentUser, isLoggedInAsGuest } from '@/utils/Auth';
|
||||
import { getCurrentUser } from '@/utils/Auth';
|
||||
import { isVisibleToUser } from '@/utils/IsVisibleToUser';
|
||||
|
||||
/* Putting it all together, the function to export */
|
||||
export const checkSectionVisibility = (sections) => {
|
||||
const currentUser = getCurrentUser(); // Get current user object
|
||||
const isGuest = isLoggedInAsGuest(); // Check if current user is a guest
|
||||
return sections.filter((currentSection) => {
|
||||
const displayData = currentSection.displayData || {};
|
||||
return isVisibleToUser(displayData, currentUser, isGuest);
|
||||
return isVisibleToUser(displayData, currentUser);
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
@@ -193,6 +193,11 @@
|
||||
"default": "allesedv",
|
||||
"description": "Which service to use to resolve favicons. Set to local to do this locally instead"
|
||||
},
|
||||
"defaultIcon": {
|
||||
"title": "Default Icon",
|
||||
"type": "string",
|
||||
"description": "An icon to apply to any items which don't yet have the icon set"
|
||||
},
|
||||
"layout": {
|
||||
"title": "Default Layout",
|
||||
"type": "string",
|
||||
@@ -476,6 +481,11 @@
|
||||
"type": "string",
|
||||
"description": "The Client ID of the client you created for use with Dashy"
|
||||
},
|
||||
"idpHint": {
|
||||
"title" : "IdP hint",
|
||||
"type": "string",
|
||||
"description": "Set to the 'Alias' of an existing Identity Provider in the specified realm to skip the Keycloak login page and redirect straight to the external IdP for authentication"
|
||||
},
|
||||
"legacySupport": {
|
||||
"title": "Legacy Support",
|
||||
"type": "boolean",
|
||||
@@ -509,6 +519,12 @@
|
||||
"default": false,
|
||||
"description": "If set to true, no users will be able to view or edit the config through the UI"
|
||||
},
|
||||
"disableConfigurationForNonAdmin": {
|
||||
"title": "Disable all UI Config for non admin users.",
|
||||
"type": "boolean",
|
||||
"default": false,
|
||||
"description": "If set to true, only admin users will be able to view or edit the config through the UI. disableConfiguration must not be set to true."
|
||||
},
|
||||
"allowConfigEdit": {
|
||||
"title": "Allow Config Editing",
|
||||
"type": "boolean",
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
|
||||
// Import helper functions from auth, to get current user, and check if guest
|
||||
import { localStorageKeys } from '@/utils/defaults';
|
||||
import { isLoggedInAsGuest } from '@/utils/Auth';
|
||||
|
||||
/* Helper function, checks if a given testValue is found in the visibility list */
|
||||
const determineVisibility = (visibilityList, testValue) => {
|
||||
@@ -25,7 +26,9 @@ const determineIntersection = (source = [], target = []) => {
|
||||
|
||||
/* Returns false if the displayData of a section/item
|
||||
should not be rendered for the current user/ guest */
|
||||
export const isVisibleToUser = (displayData, currentUser, isGuest) => {
|
||||
export const isVisibleToUser = (displayData, currentUser) => {
|
||||
const isGuest = isLoggedInAsGuest(currentUser); // Check if current user is a guest
|
||||
|
||||
// Checks if user explicitly has access to a certain section
|
||||
const checkVisibility = () => {
|
||||
if (!currentUser) return true;
|
||||
|
||||
@@ -13,25 +13,25 @@ class KeycloakAuth {
|
||||
constructor() {
|
||||
const { auth } = getAppConfig();
|
||||
const {
|
||||
serverUrl, realm, clientId, legacySupport,
|
||||
serverUrl, realm, clientId, idpHint, legacySupport,
|
||||
} = auth.keycloak;
|
||||
const url = legacySupport ? `${serverUrl}/auth` : serverUrl;
|
||||
const initOptions = {
|
||||
url, realm, clientId, onLoad: 'login-required',
|
||||
};
|
||||
const initOptions = { url, realm, clientId };
|
||||
const loginOptions = idpHint ? { idpHint } : {};
|
||||
|
||||
this.loginOptions = loginOptions;
|
||||
this.keycloakClient = Keycloak(initOptions);
|
||||
}
|
||||
|
||||
login() {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.keycloakClient.init({ onLoad: 'login-required' })
|
||||
this.keycloakClient.init({ onLoad: 'check-sso' })
|
||||
.then((auth) => {
|
||||
if (auth) {
|
||||
this.storeKeycloakInfo();
|
||||
return resolve();
|
||||
} else {
|
||||
return reject(new Error('Not authenticated'));
|
||||
return this.keycloakClient.login(this.loginOptions);
|
||||
}
|
||||
})
|
||||
.catch((reason) => reject(reason));
|
||||
|
||||
@@ -64,8 +64,8 @@ export const getCountryFlag = (countryCode, dimens) => {
|
||||
|
||||
/* Given a currency code, return path to corresponding countries flag icon */
|
||||
export const getCurrencyFlag = (currency) => {
|
||||
const cdn = 'https://raw.githubusercontent.com/transferwise/currency-flags';
|
||||
return `${cdn}/master/src/flags/${currency.toLowerCase()}.png`;
|
||||
const cdn = 'https://raw.githubusercontent.com/Lissy93/currency-flags';
|
||||
return `${cdn}/master/assets/flags_png_rectangle/${currency.toLowerCase()}.png`;
|
||||
};
|
||||
|
||||
/* Given a Latitude & Longitude object, and optional zoom level, return link to OSM */
|
||||
@@ -141,12 +141,27 @@ export const getTimeDifference = (startTime, endTime) => {
|
||||
const msDifference = new Date(endTime).getTime() - new Date(startTime).getTime();
|
||||
const diff = Math.abs(Math.round(msDifference / 1000));
|
||||
const divide = (time, round) => Math.round(time / round);
|
||||
if (diff < 60) return `${divide(diff, 1)} seconds`;
|
||||
if (diff < 3600) return `${divide(diff, 60)} minutes`;
|
||||
if (diff < 86400) return `${divide(diff, 3600)} hours`;
|
||||
if (diff < 604800) return `${divide(diff, 86400)} days`;
|
||||
if (diff < 31557600) return `${divide(diff, 604800)} weeks`;
|
||||
if (diff >= 31557600) return `${divide(diff, 31557600)} years`;
|
||||
|
||||
const periods = [
|
||||
{ noun: 'second', value: 1 },
|
||||
{ noun: 'minute', value: 60 },
|
||||
{ noun: 'hour', value: 3600 },
|
||||
{ noun: 'day', value: 86400 },
|
||||
{ noun: 'week', value: 604800 },
|
||||
{ noun: 'fortnight', value: 1209600 },
|
||||
{ noun: 'month', value: 2628000 },
|
||||
{ noun: 'year', value: 31557600 },
|
||||
];
|
||||
|
||||
for (let idx = 0; idx < periods.length; idx += 1) {
|
||||
if (diff < (periods[idx + 1]?.value ?? Infinity)) {
|
||||
const period = periods[idx];
|
||||
const value = divide(diff, period.value);
|
||||
const noun = value === 1 ? period.noun : `${period.noun}s`;
|
||||
return `${value} ${noun}`;
|
||||
}
|
||||
}
|
||||
|
||||
return 'unknown';
|
||||
};
|
||||
|
||||
@@ -165,6 +180,11 @@ export const getValueFromCss = (colorVar) => {
|
||||
return cssProps.getPropertyValue(`--${colorVar}`).trim();
|
||||
};
|
||||
|
||||
/* Given a temperature in Celsius, returns value in Fahrenheit */
|
||||
export const celsiusToFahrenheit = (celsius) => {
|
||||
return Math.round((celsius * 1.8) + 32);
|
||||
};
|
||||
|
||||
/* Given a temperature in Fahrenheit, returns value in Celsius */
|
||||
export const fahrenheitToCelsius = (fahrenheit) => {
|
||||
return Math.round(((fahrenheit - 32) * 5) / 9);
|
||||
|
||||
@@ -11,7 +11,7 @@ import ErrorHandler from '@/utils/ErrorHandler';
|
||||
const getDomainFromUrl = (url) => {
|
||||
if (!url) return '';
|
||||
const urlPattern = /^(?:https?:\/\/)?(?:w{3}\.)?([a-z\d.-]+)\.(?:[a-z.]{2,10})(?:[/\w.-]*)*/;
|
||||
const domainPattern = url.match(urlPattern);
|
||||
const domainPattern = urlPattern.exec(url);
|
||||
return domainPattern ? domainPattern[1] : '';
|
||||
};
|
||||
|
||||
@@ -24,8 +24,8 @@ const getDomainFromUrl = (url) => {
|
||||
*/
|
||||
const filterHelper = (compareStr, searchStr) => {
|
||||
if (!compareStr) return false;
|
||||
const process = (input) => input && input.toString().toLowerCase().replace(/[^\w\s]/gi, '');
|
||||
return process(compareStr).includes(process(searchStr));
|
||||
const process = (input) => input?.toString().toLowerCase().replace(/[^\w\s]/gi, '');
|
||||
return process(searchStr).split(/\s/).every(word => process(compareStr).includes(word));
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -136,7 +136,7 @@ module.exports = {
|
||||
},
|
||||
/* Key names for cookie identifiers */
|
||||
cookieKeys: {
|
||||
AUTH_TOKEN: 'authenticationToken',
|
||||
AUTH_TOKEN: 'dashyAuthToken',
|
||||
},
|
||||
/* Key names for session storage identifiers */
|
||||
sessionStorageKeys: {
|
||||
@@ -206,13 +206,13 @@ module.exports = {
|
||||
/* The URL to CDNs used for external icons. These are only loaded when required */
|
||||
iconCdns: {
|
||||
fa: 'https://kit.fontawesome.com',
|
||||
mdi: 'https://cdn.jsdelivr.net/npm/@mdi/font@5.9.55/css/materialdesignicons.min.css',
|
||||
si: 'https://unpkg.com/simple-icons@v5/icons',
|
||||
mdi: 'https://cdn.jsdelivr.net/npm/@mdi/font@7.0.96/css/materialdesignicons.min.css',
|
||||
si: 'https://unpkg.com/simple-icons@v7/icons',
|
||||
generative: 'https://avatars.dicebear.com/api/identicon/{icon}.svg',
|
||||
generativeFallback: 'https://evatar.io/{icon}',
|
||||
localPath: './item-icons',
|
||||
faviconName: 'favicon.ico',
|
||||
homeLabIcons: 'https://raw.githubusercontent.com/walkxhub/dashboard-icons/master/png/{icon}.png',
|
||||
homeLabIcons: 'https://raw.githubusercontent.com/walkxcode/dashboard-icons/master/png/{icon}.png',
|
||||
homeLabIconsFallback: 'https://raw.githubusercontent.com/NX211/homer-icons/master/png/{icon}.png',
|
||||
},
|
||||
/* API endpoints for widgets that need to fetch external data */
|
||||
@@ -236,6 +236,7 @@ module.exports = {
|
||||
jokes: 'https://v2.jokeapi.dev/joke/',
|
||||
news: 'https://api.currentsapi.services/v1/latest-news',
|
||||
mullvad: 'https://am.i.mullvad.net/json',
|
||||
mvg: 'https://www.mvg.de/api/fib/v2/',
|
||||
publicIp: 'https://ipapi.co/json',
|
||||
publicIp2: 'https://api.ipgeolocation.io/ipgeo',
|
||||
publicIp3: 'http://ip-api.com/json',
|
||||
|
||||
@@ -1,26 +1,33 @@
|
||||
// Locales - Import translation files here!
|
||||
// Locales - Import translation files here! (sort alphabetically)
|
||||
import en from '@/assets/locales/en.json';
|
||||
import ar from '@/assets/locales/ar.json';
|
||||
import bg from '@/assets/locales/bg.json';
|
||||
import bn from '@/assets/locales/bn.json';
|
||||
import cs from '@/assets/locales/cs.json';
|
||||
import da from '@/assets/locales/da.json';
|
||||
import de from '@/assets/locales/de.json';
|
||||
import el from '@/assets/locales/el.json';
|
||||
import es from '@/assets/locales/es.json';
|
||||
import fr from '@/assets/locales/fr.json';
|
||||
import hi from '@/assets/locales/hi.json';
|
||||
import it from '@/assets/locales/it.json';
|
||||
import ja from '@/assets/locales/ja.json';
|
||||
import ko from '@/assets/locales/ko.json';
|
||||
import nb from '@/assets/locales/nb.json';
|
||||
import nl from '@/assets/locales/nl.json';
|
||||
import pl from '@/assets/locales/pl.json';
|
||||
import fr from '@/assets/locales/fr.json';
|
||||
import sl from '@/assets/locales/sl.json';
|
||||
import es from '@/assets/locales/es.json';
|
||||
import it from '@/assets/locales/it.json';
|
||||
import zhCN from '@/assets/locales/zh-CN.json';
|
||||
import zhTW from '@/assets/locales/zh-TW.json';
|
||||
import ar from '@/assets/locales/ar.json';
|
||||
import hi from '@/assets/locales/hi.json';
|
||||
import ja from '@/assets/locales/ja.json';
|
||||
import pt from '@/assets/locales/pt.json';
|
||||
import ru from '@/assets/locales/ru.json';
|
||||
import nb from '@/assets/locales/nb.json';
|
||||
import pirate from '@/assets/locales/zz-pirate.json';
|
||||
import sk from '@/assets/locales/sk.json';
|
||||
import sl from '@/assets/locales/sl.json';
|
||||
import sv from '@/assets/locales/sv.json';
|
||||
import bg from '@/assets/locales/bg.json';
|
||||
import ko from '@/assets/locales/ko.json';
|
||||
import tr from '@/assets/locales/tr.json';
|
||||
import zhCN from '@/assets/locales/zh-CN.json';
|
||||
import zhTW from '@/assets/locales/zh-TW.json';
|
||||
import pirate from '@/assets/locales/zz-pirate.json';
|
||||
|
||||
// Language data - Next register your language by adding it to this list
|
||||
// Sorted alphabetically by code (except English which is first, and specials at the end)
|
||||
export const languages = [
|
||||
{
|
||||
name: 'English',
|
||||
@@ -28,14 +35,92 @@ export const languages = [
|
||||
locale: en,
|
||||
flag: '🇬🇧',
|
||||
},
|
||||
{ // Arabic
|
||||
name: 'العربية',
|
||||
code: 'ar',
|
||||
locale: ar,
|
||||
flag: '🇦🇪',
|
||||
},
|
||||
{ // Bulgarian
|
||||
name: 'Български',
|
||||
code: 'bg',
|
||||
locale: bg,
|
||||
flag: '🇧🇬',
|
||||
},
|
||||
{ // Bengali
|
||||
name: 'বাংলা',
|
||||
code: 'bn',
|
||||
locale: bn,
|
||||
flag: '🇧🇩',
|
||||
},
|
||||
{ // Czech
|
||||
name: 'Čeština',
|
||||
code: 'cs',
|
||||
locale: cs,
|
||||
flag: '🇨🇿',
|
||||
},
|
||||
{ // Danish
|
||||
name: 'Dansk',
|
||||
code: 'da',
|
||||
locale: da,
|
||||
flag: '🇩🇰',
|
||||
},
|
||||
{ // German
|
||||
name: 'Deutsch',
|
||||
code: 'de',
|
||||
locale: de,
|
||||
flag: '🇩🇪',
|
||||
},
|
||||
{ // Greek
|
||||
name: 'Ελληνικά',
|
||||
code: 'el',
|
||||
locale: el,
|
||||
flag: '🇬🇷',
|
||||
},
|
||||
{ // Spanish
|
||||
name: 'Español',
|
||||
code: 'es',
|
||||
locale: es,
|
||||
flag: '🇪🇸',
|
||||
},
|
||||
{
|
||||
name: 'Dutch',
|
||||
name: 'Français',
|
||||
code: 'fr',
|
||||
locale: fr,
|
||||
flag: '🇲🇫',
|
||||
},
|
||||
{ // Hindi
|
||||
name: 'नहीं',
|
||||
code: 'hi',
|
||||
locale: hi,
|
||||
flag: '🇮🇳',
|
||||
},
|
||||
{ // Italian
|
||||
name: 'Italiano',
|
||||
code: 'it',
|
||||
locale: it,
|
||||
flag: '🇮🇹',
|
||||
},
|
||||
{ // Japanese
|
||||
name: '日本語',
|
||||
code: 'ja',
|
||||
locale: ja,
|
||||
flag: '🇯🇵',
|
||||
},
|
||||
{ // Korean
|
||||
name: '한국어',
|
||||
code: 'ko',
|
||||
locale: ko,
|
||||
flag: '🇰🇷',
|
||||
},
|
||||
{ // Norwegian
|
||||
name: 'Norsk',
|
||||
code: 'nb',
|
||||
locale: nb,
|
||||
flag: '🇳🇴',
|
||||
},
|
||||
{ // Dutch
|
||||
name: 'Nederlands',
|
||||
code: 'nl',
|
||||
locale: nl,
|
||||
flag: '🇳🇱',
|
||||
@@ -46,60 +131,6 @@ export const languages = [
|
||||
locale: pl,
|
||||
flag: '🇵🇱',
|
||||
},
|
||||
{
|
||||
name: 'Français',
|
||||
code: 'fr',
|
||||
locale: fr,
|
||||
flag: '🇲🇫',
|
||||
},
|
||||
{
|
||||
name: 'Slovenščina',
|
||||
code: 'sl',
|
||||
locale: sl,
|
||||
flag: '🇸🇮',
|
||||
},
|
||||
{ // Spanish
|
||||
name: 'Español',
|
||||
code: 'es',
|
||||
locale: es,
|
||||
flag: '🇪🇸',
|
||||
},
|
||||
{ // Italian
|
||||
name: 'Italiano',
|
||||
code: 'it',
|
||||
locale: it,
|
||||
flag: '🇮🇹',
|
||||
},
|
||||
{ // Chinese
|
||||
name: '简体中文',
|
||||
code: 'cn',
|
||||
locale: zhCN,
|
||||
flag: '🇨🇳',
|
||||
},
|
||||
{ // Chinese
|
||||
name: '繁體中文',
|
||||
code: 'zh-TW',
|
||||
locale: zhTW,
|
||||
flag: '🇹🇼',
|
||||
},
|
||||
{ // Arabic
|
||||
name: 'العربية',
|
||||
code: 'ar',
|
||||
locale: ar,
|
||||
flag: '🇦🇪',
|
||||
},
|
||||
{ // Hindi
|
||||
name: 'नहीं',
|
||||
code: 'hi',
|
||||
locale: hi,
|
||||
flag: '🇮🇳',
|
||||
},
|
||||
{ // Japanese
|
||||
name: '日本語',
|
||||
code: 'ja',
|
||||
locale: ja,
|
||||
flag: '🇯🇵',
|
||||
},
|
||||
{ // Portuguese
|
||||
name: 'Português',
|
||||
code: 'pt',
|
||||
@@ -112,17 +143,17 @@ export const languages = [
|
||||
locale: ru,
|
||||
flag: '🇷🇺',
|
||||
},
|
||||
{ // Norwegian
|
||||
name: 'Norsk',
|
||||
code: 'nb',
|
||||
locale: nb,
|
||||
flag: '🇳🇴',
|
||||
{ // Slovak
|
||||
name: 'Slovenčina',
|
||||
code: 'sk',
|
||||
locale: sk,
|
||||
flag: '🇸🇰',
|
||||
},
|
||||
{ // Joke Language - Pirate
|
||||
name: 'Pirate',
|
||||
code: 'pirate',
|
||||
locale: pirate,
|
||||
flag: '🏴☠️',
|
||||
{
|
||||
name: 'Slovenščina',
|
||||
code: 'sl',
|
||||
locale: sl,
|
||||
flag: '🇸🇮',
|
||||
},
|
||||
{ // Swedish
|
||||
name: 'Svenska',
|
||||
@@ -130,17 +161,29 @@ export const languages = [
|
||||
locale: sv,
|
||||
flag: '🇸🇪',
|
||||
},
|
||||
{ // Bulgarian
|
||||
name: 'Български',
|
||||
code: 'bg',
|
||||
locale: bg,
|
||||
flag: '🇧🇬',
|
||||
{ // Turkish
|
||||
name: 'Türkçe',
|
||||
code: 'tr',
|
||||
locale: tr,
|
||||
flag: '🇹🇷',
|
||||
},
|
||||
{ // Korean
|
||||
name: '한국어',
|
||||
code: 'ko',
|
||||
locale: ko,
|
||||
flag: '🇰🇷',
|
||||
{ // Chinese
|
||||
name: '简体中文',
|
||||
code: 'cn',
|
||||
locale: zhCN,
|
||||
flag: '🇨🇳',
|
||||
},
|
||||
{ // Chinese
|
||||
name: '繁體中文',
|
||||
code: 'zh-TW',
|
||||
locale: zhTW,
|
||||
flag: '🇹🇼',
|
||||
},
|
||||
{ // Joke Language - Pirate
|
||||
name: 'Pirate',
|
||||
code: 'pirate',
|
||||
locale: pirate,
|
||||
flag: '🏴☠️',
|
||||
},
|
||||
];
|
||||
|
||||
|
||||
@@ -51,22 +51,21 @@
|
||||
<!-- Guest login form -->
|
||||
<form class="guest-form"
|
||||
v-if="isGuestAccessEnabled && !isUserAlreadyLoggedIn && isAuthenticationEnabled">
|
||||
<h2 class="login-title">Guest Access</h2>
|
||||
<h2 class="login-title">{{ $t('login.guest-label') }}</h2>
|
||||
<Button class="login-button" :click="guestLogin">
|
||||
{{ $t('login.proceed-guest-button') }}
|
||||
</Button>
|
||||
<p class="guest-intro">
|
||||
This instance has guest access enabled.<br>
|
||||
Guests have view-only access to dashboards,
|
||||
so cannot write any changes to disk.
|
||||
{{ $t('login.guest-intro-1') }}<br>
|
||||
{{ $t('login.guest-intro-2') }}
|
||||
</p>
|
||||
</form>
|
||||
<!-- Edge case - guest mode enabled, but no users configured -->
|
||||
<div class="not-configured" v-if="!isAuthenticationEnabled">
|
||||
<h2>Error</h2>
|
||||
<p>Authentication is not enabled, or no users have been configured</p>
|
||||
<h2>{{ $t('login.error') }}</h2>
|
||||
<p>{{ $t('login.error-no-user-configured') }}</p>
|
||||
<Button class="login-button" :click="guestLogin">
|
||||
Go Home
|
||||
{{ $t('login.error-go-home-button') }}
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
@@ -169,11 +168,11 @@ export default {
|
||||
guestLogin() {
|
||||
const isAllowed = this.isGuestAccessEnabled;
|
||||
if (isAllowed) {
|
||||
this.$toasted.show('Logged in as Guest, Redirecting...', { className: 'toast-success' });
|
||||
this.$toasted.show(this.$t('login.logged-in-guest'), { className: 'toast-success' });
|
||||
InfoHandler('Logged in as Guest', InfoKeys.AUTH);
|
||||
this.goHome();
|
||||
} else {
|
||||
this.$toasted.show('Guest Access Not Allowed', { className: 'toast-error' });
|
||||
this.$toasted.show(this.$t('login.error-guest-access'), { className: 'toast-error' });
|
||||
WarningInfoHandler('Guest Access Not Allowed', InfoKeys.AUTH);
|
||||
}
|
||||
},
|
||||
|
||||
@@ -118,7 +118,7 @@ export default {
|
||||
/* Make CSS styles to apply the users custom background image */
|
||||
getBackgroundImage() {
|
||||
if (this.appConfig && this.appConfig.backgroundImg) {
|
||||
return `background: url('${this.appConfig.backgroundImg}');background-size:cover;`;
|
||||
return `background: url('${this.appConfig.backgroundImg}') no-repeat center fixed;background-size:cover;`;
|
||||
}
|
||||
return '';
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user