diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 0eb2583d7..3bdca37e2 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -17,6 +17,8 @@ https://youtu.be/lngaePO96tM - Added a reload button when a sign-in verification method fails to load - Admins can now merge a duplicate SSO account made by 2.9.0 back into the original account - Hosts behind the same jump hosts now share one connection for status checks +- Simplified host status to just online or offline, removing the "last login failed" state +- Host status now updates every 15 seconds without a page refresh, and status checks run every 30 seconds by default - Completed the Simplified Chinese translation - Documented cookie and API key sign-in in the API docs @@ -43,6 +45,14 @@ https://youtu.be/lngaePO96tM - Too many database writes from session activity - Host editor tabs being hidden when they did not fit - SSH host keys being accepted without a check when the host was missing from the database -- The "last login failed" host status showing in English or mistranslated in several languages +- Host status only updating after a full page refresh +- Every host showing offline right after signing in +- Host status flipping between online and offline on refresh or after one dropped packet +- Hosts showing "last login failed" when they connected fine +- Hosts behind a jump host staying offline after the jump connection dropped +- Host status being wiped in the desktop app when the host list failed to load +- Tunnels, remote desktop logins and other host settings missing from shared hosts in the desktop app +- SSO and LDAP provider dialogs overflowing the screen and using mismatched toggles +- Plugin audit log entries failing to save when no user was signed in diff --git a/docker/Dockerfile b/docker/Dockerfile index a91347d93..473ffbd47 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -8,7 +8,9 @@ COPY plugins ./plugins RUN find plugins -mindepth 2 -maxdepth 2 ! -name package.json ! -name manifest.json -exec rm -rf {} + # Stage 1: Install dependencies -FROM node:26-slim AS deps +# The builders only produce JS, so they run on the build machine's own arch +# once instead of under QEMU per target. Rolldown hangs under arm64 emulation. +FROM --platform=$BUILDPLATFORM node:26-slim AS deps WORKDIR /app RUN apt-get update && apt-get install -y python3 make g++ && rm -rf /var/lib/apt/lists/* @@ -42,10 +44,6 @@ WORKDIR /app COPY . . -RUN rm -rf node_modules/better-sqlite3/prebuilds && \ - npm run build-release --prefix node_modules/better-sqlite3 && \ - test -f node_modules/better-sqlite3/build/Release/better_sqlite3.node - RUN npm run build:backend # Stage 4: Download OPKSSH binary for the target platform so the image works offline diff --git a/packages/plugin-sdk/src/backend.ts b/packages/plugin-sdk/src/backend.ts index d012d966b..660bad272 100644 --- a/packages/plugin-sdk/src/backend.ts +++ b/packages/plugin-sdk/src/backend.ts @@ -840,19 +840,24 @@ export interface PluginHosts { status: PluginHostStatusApi; } -/** online: a login worked. reachable: the port answers. offline: it does not. */ +/** + * online: the port answers, a session is open or a login worked. offline: the + * port does not answer. "reachable" is no longer sent and stays only so older + * plugins still type check. + */ export type PluginHostStatus = "online" | "reachable" | "offline"; export interface PluginHostStatusEntry { status: PluginHostStatus; lastChecked: string; + /** @deprecated No longer sent. */ reason?: "host_key_changed"; } /** * Core checks every host with status checks on by opening a TCP connection to - * it. A plugin that logs in to hosts tells core how that went, which is what - * turns "reachable" into "online". + * it. A plugin that logs in to hosts can report a working login, which marks + * the host online right away. */ export interface PluginHostStatusApi { /** @@ -862,7 +867,10 @@ export interface PluginHostStatusApi { get: (hostId: number) => Promise; /** Checks the host now unless core checked it recently. */ check: (hostId: number) => Promise; - /** Reports a login attempt. Not audited: pollers call it every sample. */ + /** + * Reports a login attempt. Only a working login changes the status; a + * failed one is ignored. Not audited: pollers call it every sample. + */ reportLogin: ( hostId: number, outcome: { ok: boolean; hostKeyChanged?: boolean }, diff --git a/packages/plugin-sdk/src/frontend.ts b/packages/plugin-sdk/src/frontend.ts index fa92480aa..109373cac 100644 --- a/packages/plugin-sdk/src/frontend.ts +++ b/packages/plugin-sdk/src/frontend.ts @@ -76,7 +76,7 @@ export interface PluginHostRecord { quickConnectSavable?: boolean; /** Assigned when a host is opened in a tab; tells duplicate tabs apart. */ instanceId?: string; - /** Core's status: "online" once a login worked. */ + /** Core's status: "online" when the host answers. */ status?: "online" | "reachable" | "offline" | "unknown"; online?: boolean; /** Someone else owns this host and shared it with the user. */ @@ -1134,11 +1134,13 @@ export interface ActivityTargetInfo { } /** - * Core's status for a host, the one behind the host list's dot. online: a - * login worked. reachable: the port answers. unknown: not checked yet. + * Core's status for a host, the one behind the host list's dot. online: the + * port answers. offline: it does not. unknown: not checked yet. "reachable" + * is no longer sent and stays only so older plugins still type check. */ export interface HostStatusInfo { status: "online" | "reachable" | "offline" | "unknown"; + /** @deprecated No longer sent. */ reason?: "host_key_changed"; } diff --git a/plugins/acme-ssl/locales/translated/af_ZA.json b/plugins/acme-ssl/locales/translated/af_ZA.json index 771b7deee..eb23329c7 100644 --- a/plugins/acme-ssl/locales/translated/af_ZA.json +++ b/plugins/acme-ssl/locales/translated/af_ZA.json @@ -54,5 +54,8 @@ "request": "Versoek nou 'n sertifikaat", "requesting": "Versoek sertifikaat...", "issued": "Sertifikaat uitgereik en geïnstalleer" + }, + "plugin": { + "name": "ACME Certificates" } } diff --git a/plugins/acme-ssl/locales/translated/ar_SA.json b/plugins/acme-ssl/locales/translated/ar_SA.json index 7b6e732e6..d66dc72e2 100644 --- a/plugins/acme-ssl/locales/translated/ar_SA.json +++ b/plugins/acme-ssl/locales/translated/ar_SA.json @@ -54,5 +54,8 @@ "request": "اطلب الشهادة الآن", "requesting": "جارٍ طلب الشهادة...", "issued": "تم إصدار الشهادة وتركيبها" + }, + "plugin": { + "name": "ACME Certificates" } } diff --git a/plugins/acme-ssl/locales/translated/bg_BG.json b/plugins/acme-ssl/locales/translated/bg_BG.json index 28007ffb7..d327bfcb4 100644 --- a/plugins/acme-ssl/locales/translated/bg_BG.json +++ b/plugins/acme-ssl/locales/translated/bg_BG.json @@ -54,5 +54,8 @@ "request": "Заявете сертификат сега", "requesting": "Заявка за сертификат...", "issued": "Сертификат издаден и инсталиран" + }, + "plugin": { + "name": "ACME Certificates" } } diff --git a/plugins/acme-ssl/locales/translated/bn_BD.json b/plugins/acme-ssl/locales/translated/bn_BD.json index 5c0aaa55b..5bf348b83 100644 --- a/plugins/acme-ssl/locales/translated/bn_BD.json +++ b/plugins/acme-ssl/locales/translated/bn_BD.json @@ -1,58 +1,61 @@ { "permissions": { "manage": { - "title": "Manage ACME certificates", - "description": "See the certificate status and request a new certificate now." + "title": "ACME সার্টিফিকেটগুলি পরিচালনা করুন", + "description": "সার্টিফিকেটের অবস্থা দেখুন এবং এখনই একটি নতুন সার্টিফিকেটের জন্য অনুরোধ করুন।" } }, "settings": { "autoRenew": { - "label": "Renew automatically", - "description": "Check twice a day and get a new certificate when there is none, it does not cover the domain, or it expires within 30 days." + "label": "স্বয়ংক্রিয়ভাবে নবায়ন করুন", + "description": "দিনে দুইবার পরীক্ষা করুন এবং যখন কোনো সার্টিফিকেট থাকবে না, সেটি ডোমেইনকে কভার করবে না, অথবা ৩০ দিনের মধ্যে এর মেয়াদ শেষ হয়ে যাবে, তখন একটি নতুন সার্টিফিকেট সংগ্রহ করুন।" }, "domain": { - "label": "Domain", - "description": "The public domain name for the certificate.", + "label": "ডোমেইন", + "description": "সার্টিফিকেটটির পাবলিক ডোমেইন নাম।", "placeholder": "termix.example.com" }, "email": { - "label": "Email", - "description": "Contact email for the ACME account and expiry notices.", + "label": "ইমেল", + "description": "ACME অ্যাকাউন্ট এবং মেয়াদ শেষ হওয়ার বিজ্ঞপ্তির জন্য যোগাযোগের ইমেল।", "placeholder": "admin@example.com" }, "provider": { - "label": "Certificate authority", - "description": "Where to get the certificate. Use staging to test without hitting Let's Encrypt rate limits.", - "letsencrypt": "Let's Encrypt", - "letsencryptStaging": "Let's Encrypt (staging)", - "custom": "Custom ACME directory" + "label": "শংসাপত্র কর্তৃপক্ষ", + "description": "সার্টিফিকেটটি কোথা থেকে পাবেন। Let's Encrypt-এর রেট লিমিট অতিক্রম না করে পরীক্ষা করার জন্য স্টেজিং ব্যবহার করুন।", + "letsencrypt": "আসুন এনক্রিপ্ট করি", + "letsencryptStaging": "লেটস এনক্রিপ্ট (স্টেজিং)", + "custom": "কাস্টম ACME ডিরেক্টরি" }, "directoryUrl": { - "label": "ACME directory URL", - "description": "Only for a custom certificate authority. Must be an https URL." + "label": "ACME ডিরেক্টরি URL", + "description": "শুধুমাত্র কাস্টম সার্টিফিকেট অথরিটির জন্য। অবশ্যই একটি https URL হতে হবে।" }, "challengeType": { - "label": "Challenge type", - "description": "How to prove you own the domain.", - "http": "HTTP - needs port 80 reachable from the internet", - "cloudflare": "DNS (Cloudflare) - needs a Cloudflare API token" + "label": "চ্যালেঞ্জের ধরণ", + "description": "ডোমেইনটির মালিকানা কীভাবে প্রমাণ করবেন।", + "http": "HTTP - এর জন্য ইন্টারনেট থেকে পোর্ট ৮০ অ্যাক্সেসযোগ্য হতে হবে।", + "cloudflare": "ডিএনএস (ক্লাউডফ্লেয়ার) - একটি ক্লাউডফ্লেয়ার এপিআই টোকেন প্রয়োজন" }, "cloudflareToken": { - "label": "Cloudflare API token", - "description": "Scoped token with Zone:DNS:Edit permission for your domain." + "label": "ক্লাউডফ্লেয়ার এপিআই টোকেন", + "description": "আপনার ডোমেনের জন্য Zone:DNS:Edit অনুমতিসহ স্কোপড টোকেন।" } }, "status": { - "title": "Certificate status", - "none": "No certificate", - "names": "Covers {{names}}", - "issuer": "Issued by {{issuer}}", - "expires": "Expires {{date}}", - "lastIssued": "Last issued {{date}}", - "lastError": "Last attempt failed: {{error}}", - "missing": "Set the domain, email and the fields your challenge type needs, then save, before requesting a certificate.", - "request": "Request certificate now", - "requesting": "Requesting certificate...", - "issued": "Certificate issued and installed" + "title": "সার্টিফিকেটের অবস্থা", + "none": "কোন সার্টিফিকেট নেই", + "names": "{{names}} কভার করে", + "issuer": "{{issuer}} দ্বারা জারি করা হয়েছে", + "expires": "মেয়াদ শেষ হবে {{date}}", + "lastIssued": "সর্বশেষ প্রকাশিত {{date}}", + "lastError": "শেষ চেষ্টা ব্যর্থ: {{error}}", + "missing": "সার্টিফিকেটের জন্য অনুরোধ করার আগে, ডোমেইন, ইমেল এবং আপনার চ্যালেঞ্জ টাইপের জন্য প্রয়োজনীয় ফিল্ডগুলো সেট করুন, তারপর সেভ করুন।", + "request": "এখনই সার্টিফিকেটের জন্য অনুরোধ করুন", + "requesting": "সার্টিফিকেটের জন্য অনুরোধ...", + "issued": "সার্টিফিকেট ইস্যু এবং ইনস্টল করা হয়েছে" + }, + "plugin": { + "name": "ACME Certificates" } } diff --git a/plugins/acme-ssl/locales/translated/ca_ES.json b/plugins/acme-ssl/locales/translated/ca_ES.json index 691ee75e8..3c15830af 100644 --- a/plugins/acme-ssl/locales/translated/ca_ES.json +++ b/plugins/acme-ssl/locales/translated/ca_ES.json @@ -54,5 +54,8 @@ "request": "Sol·licita el certificat ara", "requesting": "Sol·licitant certificat...", "issued": "Certificat emès i instal·lat" + }, + "plugin": { + "name": "ACME Certificates" } } diff --git a/plugins/acme-ssl/locales/translated/cs_CZ.json b/plugins/acme-ssl/locales/translated/cs_CZ.json index 16487134c..b55e1f14e 100644 --- a/plugins/acme-ssl/locales/translated/cs_CZ.json +++ b/plugins/acme-ssl/locales/translated/cs_CZ.json @@ -54,5 +54,8 @@ "request": "Vyžádejte si certifikát nyní", "requesting": "Žádost o certifikát...", "issued": "Certifikát vydán a nainstalován" + }, + "plugin": { + "name": "ACME Certificates" } } diff --git a/plugins/acme-ssl/locales/translated/da_DK.json b/plugins/acme-ssl/locales/translated/da_DK.json index e3b371479..258e1ac89 100644 --- a/plugins/acme-ssl/locales/translated/da_DK.json +++ b/plugins/acme-ssl/locales/translated/da_DK.json @@ -54,5 +54,8 @@ "request": "Anmod om certifikat nu", "requesting": "Anmoder om certifikat...", "issued": "Certifikat udstedt og installeret" + }, + "plugin": { + "name": "ACME Certificates" } } diff --git a/plugins/acme-ssl/locales/translated/de_DE.json b/plugins/acme-ssl/locales/translated/de_DE.json index cececddff..6ecadc449 100644 --- a/plugins/acme-ssl/locales/translated/de_DE.json +++ b/plugins/acme-ssl/locales/translated/de_DE.json @@ -54,5 +54,8 @@ "request": "Zertifikat jetzt anfordern", "requesting": "Zertifikat wird angefordert...", "issued": "Zertifikat ausgestellt und installiert" + }, + "plugin": { + "name": "ACME Certificates" } } diff --git a/plugins/acme-ssl/locales/translated/el_GR.json b/plugins/acme-ssl/locales/translated/el_GR.json index 0f29bcca3..265c46201 100644 --- a/plugins/acme-ssl/locales/translated/el_GR.json +++ b/plugins/acme-ssl/locales/translated/el_GR.json @@ -54,5 +54,8 @@ "request": "Ζητήστε πιστοποιητικό τώρα", "requesting": "Αίτημα πιστοποιητικού...", "issued": "Έκδοση και εγκατάσταση πιστοποιητικού" + }, + "plugin": { + "name": "ACME Certificates" } } diff --git a/plugins/acme-ssl/locales/translated/es_ES.json b/plugins/acme-ssl/locales/translated/es_ES.json index 16a863d76..eda5c2f95 100644 --- a/plugins/acme-ssl/locales/translated/es_ES.json +++ b/plugins/acme-ssl/locales/translated/es_ES.json @@ -54,5 +54,8 @@ "request": "Solicita tu certificado ahora", "requesting": "Solicitando certificado...", "issued": "Certificado emitido e instalado" + }, + "plugin": { + "name": "ACME Certificates" } } diff --git a/plugins/acme-ssl/locales/translated/fi_FI.json b/plugins/acme-ssl/locales/translated/fi_FI.json index 4fa05bdaa..e21cd61f2 100644 --- a/plugins/acme-ssl/locales/translated/fi_FI.json +++ b/plugins/acme-ssl/locales/translated/fi_FI.json @@ -54,5 +54,8 @@ "request": "Pyydä todistus nyt", "requesting": "Pyydetään varmennetta...", "issued": "Sertifikaatti myönnetty ja asennettu" + }, + "plugin": { + "name": "ACME Certificates" } } diff --git a/plugins/acme-ssl/locales/translated/fr_FR.json b/plugins/acme-ssl/locales/translated/fr_FR.json index b54c8552a..864abbd3f 100644 --- a/plugins/acme-ssl/locales/translated/fr_FR.json +++ b/plugins/acme-ssl/locales/translated/fr_FR.json @@ -54,5 +54,8 @@ "request": "Demandez votre certificat dès maintenant", "requesting": "Demande de certificat en cours...", "issued": "Certificat délivré et installé" + }, + "plugin": { + "name": "ACME Certificates" } } diff --git a/plugins/acme-ssl/locales/translated/he_IL.json b/plugins/acme-ssl/locales/translated/he_IL.json index fdbc2e9d6..1f858a0b2 100644 --- a/plugins/acme-ssl/locales/translated/he_IL.json +++ b/plugins/acme-ssl/locales/translated/he_IL.json @@ -54,5 +54,8 @@ "request": "בקשת תעודה עכשיו", "requesting": "מבקש תעודה...", "issued": "תעודה הונפקה והותקנה" + }, + "plugin": { + "name": "ACME Certificates" } } diff --git a/plugins/acme-ssl/locales/translated/hi_IN.json b/plugins/acme-ssl/locales/translated/hi_IN.json index 774d505b9..aee4104c0 100644 --- a/plugins/acme-ssl/locales/translated/hi_IN.json +++ b/plugins/acme-ssl/locales/translated/hi_IN.json @@ -1,14 +1,14 @@ { "permissions": { "manage": { - "title": "Manage ACME certificates", - "description": "See the certificate status and request a new certificate now." + "title": "ACME प्रमाणपत्रों का प्रबंधन करें", + "description": "प्रमाणपत्र की स्थिति देखें और अभी नए प्रमाणपत्र के लिए अनुरोध करें।" } }, "settings": { "autoRenew": { - "label": "Renew automatically", - "description": "Check twice a day and get a new certificate when there is none, it does not cover the domain, or it expires within 30 days." + "label": "स्वचालित रूप से नवीनीकरण करें", + "description": "दिन में दो बार जांच करें और यदि कोई प्रमाणपत्र मौजूद नहीं है, या वह डोमेन को कवर नहीं करता है, या 30 दिनों के भीतर समाप्त हो रहा है, तो नया प्रमाणपत्र प्राप्त करें।" }, "domain": { "label": "डोमेन", @@ -17,42 +17,45 @@ }, "email": { "label": "ईमेल", - "description": "Contact email for the ACME account and expiry notices.", + "description": "ACME खाते और समाप्ति सूचनाओं के लिए संपर्क ईमेल पता।", "placeholder": "admin@example.com" }, "provider": { "label": "प्रमाणपत्र प्राधिकरण", - "description": "Where to get the certificate. Use staging to test without hitting Let's Encrypt rate limits.", - "letsencrypt": "Let's Encrypt", - "letsencryptStaging": "Let's Encrypt (staging)", - "custom": "Custom ACME directory" + "description": "सर्टिफिकेट कहां से प्राप्त करें। Let's Encrypt की दर सीमा का उल्लंघन किए बिना परीक्षण के लिए स्टेजिंग का उपयोग करें।", + "letsencrypt": "आइए एन्क्रिप्ट करें", + "letsencryptStaging": "लेट्स एनक्रिप्ट (चरणबद्ध)", + "custom": "कस्टम एसीएमई निर्देशिका" }, "directoryUrl": { - "label": "ACME directory URL", - "description": "Only for a custom certificate authority. Must be an https URL." + "label": "ACME निर्देशिका URL", + "description": "केवल कस्टम सर्टिफिकेट अथॉरिटी के लिए। यूआरएल HTTPS होना चाहिए।" }, "challengeType": { - "label": "Challenge type", - "description": "How to prove you own the domain.", - "http": "HTTP - needs port 80 reachable from the internet", - "cloudflare": "DNS (Cloudflare) - needs a Cloudflare API token" + "label": "चुनौती का प्रकार", + "description": "आप डोमेन के मालिक होने का प्रमाण कैसे दे सकते हैं?", + "http": "HTTP - इसके लिए इंटरनेट से पोर्ट 80 तक पहुंच आवश्यक है।", + "cloudflare": "DNS (Cloudflare) - इसके लिए Cloudflare API टोकन की आवश्यकता होती है।" }, "cloudflareToken": { - "label": "Cloudflare API token", + "label": "क्लाउडफ्लेयर एपीआई टोकन", "description": "आपके डोमेन के लिए Zone:DNS:Edit अनुमति वाला स्कोप्ड टोकन।" } }, "status": { - "title": "Certificate status", + "title": "प्रमाणपत्र की स्थिति", "none": "कोई प्रमाणपत्र नहीं", - "names": "Covers {{names}}", - "issuer": "Issued by {{issuer}}", + "names": "कवर {{names}}", + "issuer": "{{issuer}} द्वारा जारी किया गया", "expires": "{{date}} को समाप्त होगा", "lastIssued": "अंतिम जारी: {{date}}", - "lastError": "Last attempt failed: {{error}}", - "missing": "Set the domain, email and the fields your challenge type needs, then save, before requesting a certificate.", - "request": "Request certificate now", + "lastError": "अंतिम प्रयास विफल रहा: {{error}}", + "missing": "डोमेन, ईमेल और आपके चैलेंज टाइप के लिए आवश्यक फ़ील्ड सेट करें, फिर प्रमाणपत्र का अनुरोध करने से पहले सेव करें।", + "request": "अभी प्रमाणपत्र का अनुरोध करें", "requesting": "प्रमाणपत्र अनुरोध किया जा रहा है...", - "issued": "Certificate issued and installed" + "issued": "प्रमाणपत्र जारी और स्थापित किया गया" + }, + "plugin": { + "name": "ACME Certificates" } } diff --git a/plugins/acme-ssl/locales/translated/hu_HU.json b/plugins/acme-ssl/locales/translated/hu_HU.json index 1eb71c5b7..c313fcff3 100644 --- a/plugins/acme-ssl/locales/translated/hu_HU.json +++ b/plugins/acme-ssl/locales/translated/hu_HU.json @@ -54,5 +54,8 @@ "request": "Igényeljen tanúsítványt most", "requesting": "Tanúsítvány kérése...", "issued": "Tanúsítvány kiállítva és telepítve" + }, + "plugin": { + "name": "ACME Certificates" } } diff --git a/plugins/acme-ssl/locales/translated/id_ID.json b/plugins/acme-ssl/locales/translated/id_ID.json index 5c0aaa55b..9848edb05 100644 --- a/plugins/acme-ssl/locales/translated/id_ID.json +++ b/plugins/acme-ssl/locales/translated/id_ID.json @@ -1,58 +1,61 @@ { "permissions": { "manage": { - "title": "Manage ACME certificates", - "description": "See the certificate status and request a new certificate now." + "title": "Kelola sertifikat ACME", + "description": "Lihat status sertifikat dan ajukan permohonan sertifikat baru sekarang." } }, "settings": { "autoRenew": { - "label": "Renew automatically", - "description": "Check twice a day and get a new certificate when there is none, it does not cover the domain, or it expires within 30 days." + "label": "Perpanjang secara otomatis", + "description": "Periksa dua kali sehari dan dapatkan sertifikat baru jika tidak ada, tidak mencakup domain, atau akan kedaluwarsa dalam 30 hari." }, "domain": { "label": "Domain", - "description": "The public domain name for the certificate.", + "description": "Nama domain publik untuk sertifikat tersebut.", "placeholder": "termix.example.com" }, "email": { - "label": "Email", - "description": "Contact email for the ACME account and expiry notices.", + "label": "E-mail", + "description": "Alamat email kontak untuk akun ACME dan pemberitahuan masa berlaku.", "placeholder": "admin@example.com" }, "provider": { - "label": "Certificate authority", - "description": "Where to get the certificate. Use staging to test without hitting Let's Encrypt rate limits.", - "letsencrypt": "Let's Encrypt", - "letsencryptStaging": "Let's Encrypt (staging)", - "custom": "Custom ACME directory" + "label": "Lembaga sertifikasi", + "description": "Di mana mendapatkan sertifikat? Gunakan staging untuk pengujian tanpa melampaui batas kuota Let's Encrypt.", + "letsencrypt": "Mari Enkripsi", + "letsencryptStaging": "Let's Encrypt (pementasan)", + "custom": "Direktori ACME khusus" }, "directoryUrl": { - "label": "ACME directory URL", - "description": "Only for a custom certificate authority. Must be an https URL." + "label": "URL direktori ACME", + "description": "Hanya untuk otoritas sertifikat khusus. Harus berupa URL https." }, "challengeType": { - "label": "Challenge type", - "description": "How to prove you own the domain.", - "http": "HTTP - needs port 80 reachable from the internet", - "cloudflare": "DNS (Cloudflare) - needs a Cloudflare API token" + "label": "Jenis tantangan", + "description": "Bagaimana cara membuktikan bahwa Anda pemilik domain tersebut.", + "http": "HTTP - memerlukan port 80 yang dapat diakses dari internet.", + "cloudflare": "DNS (Cloudflare) - memerlukan token API Cloudflare" }, "cloudflareToken": { - "label": "Cloudflare API token", - "description": "Scoped token with Zone:DNS:Edit permission for your domain." + "label": "Token API Cloudflare", + "description": "Token terlingkup dengan izin Zone:DNS:Edit untuk domain Anda." } }, "status": { - "title": "Certificate status", - "none": "No certificate", - "names": "Covers {{names}}", - "issuer": "Issued by {{issuer}}", - "expires": "Expires {{date}}", - "lastIssued": "Last issued {{date}}", - "lastError": "Last attempt failed: {{error}}", - "missing": "Set the domain, email and the fields your challenge type needs, then save, before requesting a certificate.", - "request": "Request certificate now", - "requesting": "Requesting certificate...", - "issued": "Certificate issued and installed" + "title": "Status sertifikat", + "none": "Tidak ada sertifikat", + "names": "Sampul {{names}}", + "issuer": "Dikeluarkan oleh {{issuer}}", + "expires": "Berakhir {{date}}", + "lastIssued": "Terakhir diterbitkan {{date}}", + "lastError": "Upaya terakhir gagal: {{error}}", + "missing": "Atur domain, email, dan kolom yang dibutuhkan oleh tipe tantangan Anda, lalu simpan, sebelum meminta sertifikat.", + "request": "Ajukan sertifikat sekarang", + "requesting": "Meminta sertifikat...", + "issued": "Sertifikat telah diterbitkan dan dipasang." + }, + "plugin": { + "name": "ACME Certificates" } } diff --git a/plugins/acme-ssl/locales/translated/it_IT.json b/plugins/acme-ssl/locales/translated/it_IT.json index 8993ef364..ac8f8ad4a 100644 --- a/plugins/acme-ssl/locales/translated/it_IT.json +++ b/plugins/acme-ssl/locales/translated/it_IT.json @@ -54,5 +54,8 @@ "request": "Richiedi subito il certificato", "requesting": "Richiesta certificato in corso...", "issued": "Certificato rilasciato e installato" + }, + "plugin": { + "name": "ACME Certificates" } } diff --git a/plugins/acme-ssl/locales/translated/ja_JP.json b/plugins/acme-ssl/locales/translated/ja_JP.json index 668b8c0cf..de1f8f8fa 100644 --- a/plugins/acme-ssl/locales/translated/ja_JP.json +++ b/plugins/acme-ssl/locales/translated/ja_JP.json @@ -54,5 +54,8 @@ "request": "今すぐ証明書を申請する", "requesting": "証明書をリクエスト中...", "issued": "証明書が発行され、インストールされました。" + }, + "plugin": { + "name": "ACME Certificates" } } diff --git a/plugins/acme-ssl/locales/translated/ko_KR.json b/plugins/acme-ssl/locales/translated/ko_KR.json index 3e5d9ed89..dc6e54edc 100644 --- a/plugins/acme-ssl/locales/translated/ko_KR.json +++ b/plugins/acme-ssl/locales/translated/ko_KR.json @@ -54,5 +54,8 @@ "request": "지금 인증서를 요청하세요", "requesting": "인증서 요청 중...", "issued": "인증서가 발급 및 설치되었습니다." + }, + "plugin": { + "name": "ACME Certificates" } } diff --git a/plugins/acme-ssl/locales/translated/nl_NL.json b/plugins/acme-ssl/locales/translated/nl_NL.json index bd5230214..a27215a35 100644 --- a/plugins/acme-ssl/locales/translated/nl_NL.json +++ b/plugins/acme-ssl/locales/translated/nl_NL.json @@ -54,5 +54,8 @@ "request": "Vraag nu uw certificaat aan", "requesting": "Certificaat aanvragen...", "issued": "Certificaat afgegeven en geïnstalleerd" + }, + "plugin": { + "name": "ACME Certificates" } } diff --git a/plugins/acme-ssl/locales/translated/no_NO.json b/plugins/acme-ssl/locales/translated/no_NO.json index 158b763a8..f38a4279a 100644 --- a/plugins/acme-ssl/locales/translated/no_NO.json +++ b/plugins/acme-ssl/locales/translated/no_NO.json @@ -1,58 +1,61 @@ { "permissions": { "manage": { - "title": "Manage ACME certificates", - "description": "See the certificate status and request a new certificate now." + "title": "Administrer ACME-sertifikater", + "description": "Se sertifikatstatusen og be om et nytt sertifikat nå." } }, "settings": { "autoRenew": { - "label": "Renew automatically", - "description": "Check twice a day and get a new certificate when there is none, it does not cover the domain, or it expires within 30 days." + "label": "Forny automatisk", + "description": "Sjekk to ganger om dagen og få et nytt sertifikat når det ikke finnes noe, det ikke dekker domenet, eller det utløper innen 30 dager." }, "domain": { - "label": "Domain", - "description": "The public domain name for the certificate.", + "label": "Domene", + "description": "Det offentlige domenenavnet for sertifikatet.", "placeholder": "termix.example.com" }, "email": { "label": "E-post", - "description": "Contact email for the ACME account and expiry notices.", + "description": "Kontakt-e-postadresse for ACME-kontoen og utløpsvarsler.", "placeholder": "admin@example.com" }, "provider": { - "label": "Certificate authority", - "description": "Where to get the certificate. Use staging to test without hitting Let's Encrypt rate limits.", - "letsencrypt": "Let's Encrypt", - "letsencryptStaging": "Let's Encrypt (staging)", - "custom": "Custom ACME directory" + "label": "Sertifikatmyndighet", + "description": "Hvor får man tak i sertifikatet? Bruk staging for å teste uten å nå hastighetsgrensene til Let's Encrypt.", + "letsencrypt": "La oss kryptere", + "letsencryptStaging": "La oss kryptere (staging)", + "custom": "Tilpasset ACME-katalog" }, "directoryUrl": { - "label": "ACME directory URL", - "description": "Only for a custom certificate authority. Must be an https URL." + "label": "URL-adressen til ACME-katalogen", + "description": "Kun for en tilpasset sertifiseringsinstans. Må være en https-URL." }, "challengeType": { - "label": "Challenge type", - "description": "How to prove you own the domain.", - "http": "HTTP - needs port 80 reachable from the internet", - "cloudflare": "DNS (Cloudflare) - needs a Cloudflare API token" + "label": "Utfordringstype", + "description": "Hvordan bevise at du eier domenet.", + "http": "HTTP - trenger port 80 som kan nås fra internett", + "cloudflare": "DNS (Cloudflare) – trenger et Cloudflare API-token" }, "cloudflareToken": { - "label": "Cloudflare API token", - "description": "Scoped token with Zone:DNS:Edit permission for your domain." + "label": "Cloudflare API-token", + "description": "Scope-token med Zone:DNS:Rediger-tillatelse for domenet ditt." } }, "status": { - "title": "Certificate status", - "none": "No certificate", - "names": "Covers {{names}}", - "issuer": "Issued by {{issuer}}", - "expires": "Expires {{date}}", - "lastIssued": "Last issued {{date}}", - "lastError": "Last attempt failed: {{error}}", - "missing": "Set the domain, email and the fields your challenge type needs, then save, before requesting a certificate.", - "request": "Request certificate now", - "requesting": "Requesting certificate...", - "issued": "Certificate issued and installed" + "title": "Sertifikatstatus", + "none": "Ingen sertifikat", + "names": "Omslag {{names}}", + "issuer": "Utstedt av {{issuer}}", + "expires": "Utløper {{date}}", + "lastIssued": "Sist utstedt {{date}}", + "lastError": "Siste forsøk mislyktes: {{error}}", + "missing": "Angi domenet, e-postadressen og feltene utfordringstypen din trenger, og lagre deretter før du ber om et sertifikat.", + "request": "Be om sertifikat nå", + "requesting": "Ber om sertifikat...", + "issued": "Sertifikat utstedt og installert" + }, + "plugin": { + "name": "ACME Certificates" } } diff --git a/plugins/acme-ssl/locales/translated/pl_PL.json b/plugins/acme-ssl/locales/translated/pl_PL.json index 6d01a8b64..97f83ca88 100644 --- a/plugins/acme-ssl/locales/translated/pl_PL.json +++ b/plugins/acme-ssl/locales/translated/pl_PL.json @@ -1,14 +1,14 @@ { "permissions": { "manage": { - "title": "Manage ACME certificates", - "description": "See the certificate status and request a new certificate now." + "title": "Zarządzaj certyfikatami ACME", + "description": "Sprawdź status certyfikatu i poproś o nowy certyfikat już teraz." } }, "settings": { "autoRenew": { - "label": "Renew automatically", - "description": "Check twice a day and get a new certificate when there is none, it does not cover the domain, or it expires within 30 days." + "label": "Odnów automatycznie", + "description": "Sprawdzaj dwa razy dziennie i wykup nowy certyfikat, jeśli go nie masz, nie obejmuje on tej domeny lub wygasa w ciągu 30 dni." }, "domain": { "label": "Domena", @@ -17,42 +17,45 @@ }, "email": { "label": "E-mail", - "description": "Contact email for the ACME account and expiry notices.", + "description": "Adres e-mail kontaktowy do konta ACME i powiadomień o wygaśnięciu.", "placeholder": "admin@example.com" }, "provider": { "label": "Urząd certyfikacji (CA)", - "description": "Where to get the certificate. Use staging to test without hitting Let's Encrypt rate limits.", - "letsencrypt": "Let's Encrypt", - "letsencryptStaging": "Let's Encrypt (staging)", - "custom": "Custom ACME directory" + "description": "Gdzie uzyskać certyfikat? Użyj środowiska testowego do testowania bez przekraczania limitów przepustowości Let's Encrypt.", + "letsencrypt": "Szyfrujmy", + "letsencryptStaging": "Let's Encrypt (etap przygotowawczy)", + "custom": "Niestandardowy katalog ACME" }, "directoryUrl": { - "label": "ACME directory URL", - "description": "Only for a custom certificate authority. Must be an https URL." + "label": "Adres URL katalogu ACME", + "description": "Tylko dla niestandardowego urzędu certyfikacji. Adres URL musi być w formacie https." }, "challengeType": { - "label": "Challenge type", - "description": "How to prove you own the domain.", - "http": "HTTP - needs port 80 reachable from the internet", - "cloudflare": "DNS (Cloudflare) - needs a Cloudflare API token" + "label": "Typ wyzwania", + "description": "Jak udowodnić, że jesteś właścicielem domeny.", + "http": "HTTP - wymaga dostępu do portu 80 z Internetu", + "cloudflare": "DNS (Cloudflare) – wymaga tokenu API Cloudflare" }, "cloudflareToken": { - "label": "Cloudflare API token", + "label": "Token API Cloudflare", "description": "Token zakresowy z uprawnieniem Zone:DNS:Edit dla Twojej domeny." } }, "status": { - "title": "Certificate status", + "title": "Status certyfikatu", "none": "Brak certyfikatu", - "names": "Covers {{names}}", - "issuer": "Issued by {{issuer}}", + "names": "Obejmuje {{names}}", + "issuer": "Wydane przez {{issuer}}", "expires": "Wygasa {{date}}", "lastIssued": "Ostatnio wystawiono {{date}}", - "lastError": "Last attempt failed: {{error}}", - "missing": "Set the domain, email and the fields your challenge type needs, then save, before requesting a certificate.", - "request": "Request certificate now", + "lastError": "Ostatnia próba nieudana: {{error}}", + "missing": "Ustaw domenę, adres e-mail i pola, których wymaga Twój typ wyzwania, a następnie zapisz, zanim poprosisz o certyfikat.", + "request": "Złóż wniosek o certyfikat już teraz", "requesting": "Żądanie certyfikatu...", - "issued": "Certificate issued and installed" + "issued": "Certyfikat wydany i zainstalowany" + }, + "plugin": { + "name": "ACME Certificates" } } diff --git a/plugins/acme-ssl/locales/translated/pt_BR.json b/plugins/acme-ssl/locales/translated/pt_BR.json index 5c0aaa55b..cd9a43f50 100644 --- a/plugins/acme-ssl/locales/translated/pt_BR.json +++ b/plugins/acme-ssl/locales/translated/pt_BR.json @@ -1,58 +1,61 @@ { "permissions": { "manage": { - "title": "Manage ACME certificates", - "description": "See the certificate status and request a new certificate now." + "title": "Gerenciar certificados ACME", + "description": "Veja o status do certificado e solicite um novo agora mesmo." } }, "settings": { "autoRenew": { - "label": "Renew automatically", - "description": "Check twice a day and get a new certificate when there is none, it does not cover the domain, or it expires within 30 days." + "label": "Renovar automaticamente", + "description": "Verifique duas vezes ao dia e obtenha um novo certificado quando não houver nenhum, se ele não cobrir o domínio ou se expirar em 30 dias." }, "domain": { - "label": "Domain", - "description": "The public domain name for the certificate.", + "label": "Domínio", + "description": "O nome de domínio público do certificado.", "placeholder": "termix.example.com" }, "email": { - "label": "Email", - "description": "Contact email for the ACME account and expiry notices.", + "label": "E-mail", + "description": "E-mail de contato para a conta ACME e avisos de vencimento.", "placeholder": "admin@example.com" }, "provider": { - "label": "Certificate authority", - "description": "Where to get the certificate. Use staging to test without hitting Let's Encrypt rate limits.", - "letsencrypt": "Let's Encrypt", - "letsencryptStaging": "Let's Encrypt (staging)", - "custom": "Custom ACME directory" + "label": "Autoridade certificadora", + "description": "Onde obter o certificado. Use o ambiente de teste para realizar os testes sem atingir os limites de requisição do Let's Encrypt.", + "letsencrypt": "Vamos criptografar", + "letsencryptStaging": "Let's Encrypt (em fase de testes)", + "custom": "Diretório ACME personalizado" }, "directoryUrl": { - "label": "ACME directory URL", - "description": "Only for a custom certificate authority. Must be an https URL." + "label": "URL do diretório ACME", + "description": "Somente para uma autoridade de certificação personalizada. Deve ser um URL https." }, "challengeType": { - "label": "Challenge type", - "description": "How to prove you own the domain.", - "http": "HTTP - needs port 80 reachable from the internet", - "cloudflare": "DNS (Cloudflare) - needs a Cloudflare API token" + "label": "Tipo de desafio", + "description": "Como comprovar que você é o proprietário do domínio.", + "http": "HTTP - requer que a porta 80 esteja acessível pela internet.", + "cloudflare": "DNS (Cloudflare) - requer um token de API do Cloudflare" }, "cloudflareToken": { - "label": "Cloudflare API token", - "description": "Scoped token with Zone:DNS:Edit permission for your domain." + "label": "Token da API Cloudflare", + "description": "Token com escopo definido e permissão Zone:DNS:Edit para o seu domínio." } }, "status": { - "title": "Certificate status", - "none": "No certificate", - "names": "Covers {{names}}", - "issuer": "Issued by {{issuer}}", - "expires": "Expires {{date}}", - "lastIssued": "Last issued {{date}}", - "lastError": "Last attempt failed: {{error}}", - "missing": "Set the domain, email and the fields your challenge type needs, then save, before requesting a certificate.", - "request": "Request certificate now", - "requesting": "Requesting certificate...", - "issued": "Certificate issued and installed" + "title": "Status do certificado", + "none": "Sem certificado", + "names": "Capas {{names}}", + "issuer": "Emitido por {{issuer}}", + "expires": "Expira em {{date}}", + "lastIssued": "Última edição {{date}}", + "lastError": "Última tentativa falhou: {{error}}", + "missing": "Defina o domínio, o e-mail e os campos necessários para o seu tipo de desafio e salve as alterações antes de solicitar um certificado.", + "request": "Solicite o certificado agora", + "requesting": "Solicitar certificado...", + "issued": "Certificado emitido e instalado." + }, + "plugin": { + "name": "ACME Certificates" } } diff --git a/plugins/acme-ssl/locales/translated/pt_PT.json b/plugins/acme-ssl/locales/translated/pt_PT.json index 103eded8b..975b670f9 100644 --- a/plugins/acme-ssl/locales/translated/pt_PT.json +++ b/plugins/acme-ssl/locales/translated/pt_PT.json @@ -1,14 +1,14 @@ { "permissions": { "manage": { - "title": "Manage ACME certificates", - "description": "See the certificate status and request a new certificate now." + "title": "Gerir certificados ACME", + "description": "Veja o estado do certificado e solicite um novo agora mesmo." } }, "settings": { "autoRenew": { - "label": "Renew automatically", - "description": "Check twice a day and get a new certificate when there is none, it does not cover the domain, or it expires within 30 days." + "label": "Renovar automaticamente", + "description": "Verifique duas vezes por dia e obtenha um novo certificado quando não houver nenhum, se não cobrir o domínio ou se expirar dentro de 30 dias." }, "domain": { "label": "Domínio", @@ -17,42 +17,45 @@ }, "email": { "label": "E-mail", - "description": "Contact email for the ACME account and expiry notices.", + "description": "E-mail de contacto para a conta ACME e avisos de vencimento.", "placeholder": "admin@example.com" }, "provider": { "label": "Autoridade de certificação", - "description": "Where to get the certificate. Use staging to test without hitting Let's Encrypt rate limits.", - "letsencrypt": "Let's Encrypt", - "letsencryptStaging": "Let's Encrypt (staging)", - "custom": "Custom ACME directory" + "description": "Onde obter o certificado. Utilize o ambiente de teste para realizar os testes sem atingir os limites de requisição do Let's Encrypt.", + "letsencrypt": "Vamos encriptar", + "letsencryptStaging": "Let's Encrypt (em fase de testes)", + "custom": "Diretório ACME personalizado" }, "directoryUrl": { - "label": "ACME directory URL", - "description": "Only for a custom certificate authority. Must be an https URL." + "label": "URL do diretório ACME", + "description": "Apenas para uma autoridade de certificação personalizada. Deve ser um URL https." }, "challengeType": { - "label": "Challenge type", - "description": "How to prove you own the domain.", - "http": "HTTP - needs port 80 reachable from the internet", - "cloudflare": "DNS (Cloudflare) - needs a Cloudflare API token" + "label": "Tipo de desafio", + "description": "Como comprovar que é o proprietário do domínio.", + "http": "HTTP - requer que a porta 80 esteja acessível através da internet.", + "cloudflare": "DNS (Cloudflare) - requer um token API do Cloudflare" }, "cloudflareToken": { - "label": "Cloudflare API token", + "label": "Token da API Cloudflare", "description": "Token com âmbito e permissão Zone:DNS:Edit para o seu domínio." } }, "status": { - "title": "Certificate status", + "title": "Estado do certificado", "none": "Sem certificado", - "names": "Covers {{names}}", - "issuer": "Issued by {{issuer}}", + "names": "Capas {{names}}", + "issuer": "Emitido por {{issuer}}", "expires": "Expira a {{date}}", "lastIssued": "Última emissão a {{date}}", - "lastError": "Last attempt failed: {{error}}", - "missing": "Set the domain, email and the fields your challenge type needs, then save, before requesting a certificate.", - "request": "Request certificate now", + "lastError": "Última tentativa falhada: {{error}}", + "missing": "Defina o domínio, o e-mail e os campos necessários para o seu tipo de desafio e guarde as alterações antes de solicitar um certificado.", + "request": "Solicite já o certificado", "requesting": "A solicitar certificado...", - "issued": "Certificate issued and installed" + "issued": "Certificado emitido e instalado." + }, + "plugin": { + "name": "ACME Certificates" } } diff --git a/plugins/acme-ssl/locales/translated/ro_RO.json b/plugins/acme-ssl/locales/translated/ro_RO.json index 99b2c3151..2243be8a9 100644 --- a/plugins/acme-ssl/locales/translated/ro_RO.json +++ b/plugins/acme-ssl/locales/translated/ro_RO.json @@ -54,5 +54,8 @@ "request": "Solicitați certificatul acum", "requesting": "Se solicită certificatul...", "issued": "Certificat emis și instalat" + }, + "plugin": { + "name": "ACME Certificates" } } diff --git a/plugins/acme-ssl/locales/translated/ru_RU.json b/plugins/acme-ssl/locales/translated/ru_RU.json index a398a4fdd..145ea9b07 100644 --- a/plugins/acme-ssl/locales/translated/ru_RU.json +++ b/plugins/acme-ssl/locales/translated/ru_RU.json @@ -1,14 +1,14 @@ { "permissions": { "manage": { - "title": "Manage ACME certificates", - "description": "See the certificate status and request a new certificate now." + "title": "Управление сертификатами ACME", + "description": "Проверьте статус сертификата и запросите новый сертификат прямо сейчас." } }, "settings": { "autoRenew": { - "label": "Renew automatically", - "description": "Check twice a day and get a new certificate when there is none, it does not cover the domain, or it expires within 30 days." + "label": "Автоматическое продление", + "description": "Проверяйте дважды в день и получайте новый сертификат, если его нет, если он не покрывает домен или если срок действия старого истекает в течение 30 дней." }, "domain": { "label": "Домен", @@ -17,42 +17,45 @@ }, "email": { "label": "Email", - "description": "Contact email for the ACME account and expiry notices.", + "description": "Адрес электронной почты, указанный в учетной записи ACME, для получения уведомлений об истечении срока действия.", "placeholder": "admin@example.com" }, "provider": { "label": "Центр сертификации", - "description": "Where to get the certificate. Use staging to test without hitting Let's Encrypt rate limits.", + "description": "Где получить сертификат. Используйте тестовую среду (staging) для проверки без превышения лимитов запросов Let's Encrypt.", "letsencrypt": "Let's Encrypt", - "letsencryptStaging": "Let's Encrypt (staging)", - "custom": "Custom ACME directory" + "letsencryptStaging": "Let's Encrypt (тестовая версия)", + "custom": "Пользовательский каталог ACME" }, "directoryUrl": { - "label": "ACME directory URL", - "description": "Only for a custom certificate authority. Must be an https URL." + "label": "URL-адрес каталога ACME", + "description": "Только для пользовательского центра сертификации. URL-адрес должен быть HTTPS." }, "challengeType": { - "label": "Challenge type", - "description": "How to prove you own the domain.", - "http": "HTTP - needs port 80 reachable from the internet", - "cloudflare": "DNS (Cloudflare) - needs a Cloudflare API token" + "label": "Тип задачи", + "description": "Как доказать, что вы являетесь владельцем домена.", + "http": "HTTP — требуется доступ к порту 80 из интернета.", + "cloudflare": "DNS (Cloudflare) — требуется токен API Cloudflare." }, "cloudflareToken": { - "label": "Cloudflare API token", + "label": "API-токен Cloudflare", "description": "Токен с ограниченной областью действия и разрешением Zone:DNS:Edit для вашего домена." } }, "status": { - "title": "Certificate status", + "title": "Статус сертификата", "none": "Сертификат отсутствует", - "names": "Covers {{names}}", - "issuer": "Issued by {{issuer}}", + "names": "Обложки {{names}}", + "issuer": "Выпущено {{issuer}}", "expires": "Истекает {{date}}", "lastIssued": "Последний выпуск {{date}}", - "lastError": "Last attempt failed: {{error}}", - "missing": "Set the domain, email and the fields your challenge type needs, then save, before requesting a certificate.", - "request": "Request certificate now", + "lastError": "Последняя попытка не удалась: {{error}}", + "missing": "Укажите домен, адрес электронной почты и поля, необходимые для типа проверки подлинности, затем сохраните изменения, прежде чем запрашивать сертификат.", + "request": "Запросить сертификат сейчас", "requesting": "Запрос сертификата...", - "issued": "Certificate issued and installed" + "issued": "Сертификат выдан и установлен." + }, + "plugin": { + "name": "ACME Certificates" } } diff --git a/plugins/acme-ssl/locales/translated/sr_SP.json b/plugins/acme-ssl/locales/translated/sr_SP.json index 5c0aaa55b..2a7bd1420 100644 --- a/plugins/acme-ssl/locales/translated/sr_SP.json +++ b/plugins/acme-ssl/locales/translated/sr_SP.json @@ -1,58 +1,61 @@ { "permissions": { "manage": { - "title": "Manage ACME certificates", - "description": "See the certificate status and request a new certificate now." + "title": "Управљање ACME сертификатима", + "description": "Погледајте статус сертификата и одмах затражите нови сертификат." } }, "settings": { "autoRenew": { - "label": "Renew automatically", - "description": "Check twice a day and get a new certificate when there is none, it does not cover the domain, or it expires within 30 days." + "label": "Аутоматски обнови", + "description": "Проверавајте два пута дневно и набавите нови сертификат када га нема, када не покрива домен или када истиче у року од 30 дана." }, "domain": { - "label": "Domain", - "description": "The public domain name for the certificate.", + "label": "Домен", + "description": "Јавно име домена за сертификат.", "placeholder": "termix.example.com" }, "email": { - "label": "Email", - "description": "Contact email for the ACME account and expiry notices.", + "label": "Е-пошта", + "description": "Контакт имејл за ACME налог и обавештења о истеку.", "placeholder": "admin@example.com" }, "provider": { - "label": "Certificate authority", - "description": "Where to get the certificate. Use staging to test without hitting Let's Encrypt rate limits.", - "letsencrypt": "Let's Encrypt", - "letsencryptStaging": "Let's Encrypt (staging)", - "custom": "Custom ACME directory" + "label": "Сертификатски ауторитет", + "description": "Где добити сертификат. Користите припрему за тестирање без достизања ограничења брзине Let's Encrypt-а.", + "letsencrypt": "Хајде да шифрујемо", + "letsencryptStaging": "Хајде да шифрујемо (припрема)", + "custom": "Прилагођени ACME директоријум" }, "directoryUrl": { - "label": "ACME directory URL", - "description": "Only for a custom certificate authority. Must be an https URL." + "label": "URL ACME директоријума", + "description": "Само за прилагођени ауторитет за сертификате. Мора бити https URL." }, "challengeType": { - "label": "Challenge type", - "description": "How to prove you own the domain.", - "http": "HTTP - needs port 80 reachable from the internet", - "cloudflare": "DNS (Cloudflare) - needs a Cloudflare API token" + "label": "Тип изазова", + "description": "Како доказати да сте власник домена.", + "http": "HTTP - потребан је порт 80 доступан са интернета", + "cloudflare": "DNS (Cloudflare) - потребан је Cloudflare API токен" }, "cloudflareToken": { - "label": "Cloudflare API token", - "description": "Scoped token with Zone:DNS:Edit permission for your domain." + "label": "Клаудфлејр АПИ токен", + "description": "Ограничени токен са дозволом Zone:DNS:Edit за ваш домен." } }, "status": { - "title": "Certificate status", - "none": "No certificate", - "names": "Covers {{names}}", - "issuer": "Issued by {{issuer}}", - "expires": "Expires {{date}}", - "lastIssued": "Last issued {{date}}", - "lastError": "Last attempt failed: {{error}}", - "missing": "Set the domain, email and the fields your challenge type needs, then save, before requesting a certificate.", - "request": "Request certificate now", - "requesting": "Requesting certificate...", - "issued": "Certificate issued and installed" + "title": "Статус сертификата", + "none": "Без сертификата", + "names": "Навлаке {{names}}", + "issuer": "Издао/ла {{issuer}}", + "expires": "Истиче {{date}}", + "lastIssued": "Последње издање {{date}}", + "lastError": "Последњи покушај није успео: {{error}}", + "missing": "Подесите домен, имејл адресу и поља која су потребна вашем типу изазова, а затим сачувајте подешавања пре него што затражите сертификат.", + "request": "Затражите сертификат сада", + "requesting": "Захтева се сертификат...", + "issued": "Сертификат издат и инсталиран" + }, + "plugin": { + "name": "ACME Certificates" } } diff --git a/plugins/acme-ssl/locales/translated/sv_SE.json b/plugins/acme-ssl/locales/translated/sv_SE.json index 5c0aaa55b..00154b1ad 100644 --- a/plugins/acme-ssl/locales/translated/sv_SE.json +++ b/plugins/acme-ssl/locales/translated/sv_SE.json @@ -1,58 +1,61 @@ { "permissions": { "manage": { - "title": "Manage ACME certificates", - "description": "See the certificate status and request a new certificate now." + "title": "Hantera ACME-certifikat", + "description": "Se certifikatets status och begär ett nytt certifikat nu." } }, "settings": { "autoRenew": { - "label": "Renew automatically", - "description": "Check twice a day and get a new certificate when there is none, it does not cover the domain, or it expires within 30 days." + "label": "Förnya automatiskt", + "description": "Kontrollera två gånger om dagen och skaffa ett nytt certifikat om det inte finns något, om det inte täcker domänen eller om det löper ut inom 30 dagar." }, "domain": { - "label": "Domain", - "description": "The public domain name for the certificate.", + "label": "Domän", + "description": "Det offentliga domännamnet för certifikatet.", "placeholder": "termix.example.com" }, "email": { - "label": "Email", - "description": "Contact email for the ACME account and expiry notices.", + "label": "E-post", + "description": "Kontakta e-postadressen för ACME-kontot och meddelanden om utgångsdatum.", "placeholder": "admin@example.com" }, "provider": { - "label": "Certificate authority", - "description": "Where to get the certificate. Use staging to test without hitting Let's Encrypt rate limits.", - "letsencrypt": "Let's Encrypt", - "letsencryptStaging": "Let's Encrypt (staging)", - "custom": "Custom ACME directory" + "label": "Certifikatutfärdare", + "description": "Var man kan hämta certifikatet. Använd staging för att testa utan att nå hastighetsgränserna för Let's Encrypt.", + "letsencrypt": "Låt oss kryptera", + "letsencryptStaging": "Låt oss kryptera (staging)", + "custom": "Anpassad ACME-katalog" }, "directoryUrl": { - "label": "ACME directory URL", - "description": "Only for a custom certificate authority. Must be an https URL." + "label": "ACME-katalogens URL", + "description": "Endast för en anpassad certifikatutfärdare. Måste vara en https-URL." }, "challengeType": { - "label": "Challenge type", - "description": "How to prove you own the domain.", - "http": "HTTP - needs port 80 reachable from the internet", - "cloudflare": "DNS (Cloudflare) - needs a Cloudflare API token" + "label": "Utmaningstyp", + "description": "Hur man bevisar att man äger domänen.", + "http": "HTTP - behöver port 80 som kan nås från internet", + "cloudflare": "DNS (Cloudflare) - behöver en Cloudflare API-token" }, "cloudflareToken": { - "label": "Cloudflare API token", - "description": "Scoped token with Zone:DNS:Edit permission for your domain." + "label": "Cloudflare API-token", + "description": "Scoped-token med Zone:DNS:Edit-behörighet för din domän." } }, "status": { - "title": "Certificate status", - "none": "No certificate", - "names": "Covers {{names}}", - "issuer": "Issued by {{issuer}}", - "expires": "Expires {{date}}", - "lastIssued": "Last issued {{date}}", - "lastError": "Last attempt failed: {{error}}", - "missing": "Set the domain, email and the fields your challenge type needs, then save, before requesting a certificate.", - "request": "Request certificate now", - "requesting": "Requesting certificate...", - "issued": "Certificate issued and installed" + "title": "Certifikatstatus", + "none": "Inget certifikat", + "names": "Omslag {{names}}", + "issuer": "Utfärdad av {{issuer}}", + "expires": "Utgångsdatum {{date}}", + "lastIssued": "Senast utfärdad {{date}}", + "lastError": "Senaste försöket misslyckades: {{error}}", + "missing": "Ange domän, e-postadress och de fält som din utmaningstyp behöver, spara sedan innan du begär ett certifikat.", + "request": "Begär certifikat nu", + "requesting": "Begär certifikat...", + "issued": "Certifikat utfärdat och installerat" + }, + "plugin": { + "name": "ACME Certificates" } } diff --git a/plugins/acme-ssl/locales/translated/th_TH.json b/plugins/acme-ssl/locales/translated/th_TH.json index 5c0aaa55b..489315489 100644 --- a/plugins/acme-ssl/locales/translated/th_TH.json +++ b/plugins/acme-ssl/locales/translated/th_TH.json @@ -1,58 +1,61 @@ { "permissions": { "manage": { - "title": "Manage ACME certificates", - "description": "See the certificate status and request a new certificate now." + "title": "จัดการใบรับรอง ACME", + "description": "ตรวจสอบสถานะใบรับรองและขอใบรับรองใหม่ได้เลยตอนนี้" } }, "settings": { "autoRenew": { - "label": "Renew automatically", - "description": "Check twice a day and get a new certificate when there is none, it does not cover the domain, or it expires within 30 days." + "label": "ต่ออายุอัตโนมัติ", + "description": "ตรวจสอบวันละสองครั้ง และขอใบรับรองใหม่เมื่อไม่มีใบรับรอง หากใบรับรองไม่ครอบคลุมโดเมน หรือหากใบรับรองหมดอายุภายใน 30 วัน" }, "domain": { - "label": "Domain", - "description": "The public domain name for the certificate.", - "placeholder": "termix.example.com" + "label": "โดเมน", + "description": "ชื่อโดเมนสาธารณะสำหรับใบรับรอง", + "placeholder": "เทอร์มิกซ์.ตัวอย่าง.com" }, "email": { - "label": "Email", - "description": "Contact email for the ACME account and expiry notices.", + "label": "อีเมล", + "description": "อีเมลสำหรับติดต่อเพื่อรับข้อมูลเกี่ยวกับบัญชี ACME และประกาศแจ้งเตือนวันหมดอายุ", "placeholder": "admin@example.com" }, "provider": { - "label": "Certificate authority", - "description": "Where to get the certificate. Use staging to test without hitting Let's Encrypt rate limits.", - "letsencrypt": "Let's Encrypt", - "letsencryptStaging": "Let's Encrypt (staging)", - "custom": "Custom ACME directory" + "label": "หน่วยงานออกใบรับรอง", + "description": "จะขอรับใบรับรองได้จากที่ไหน ใช้ระบบทดสอบ (staging) เพื่อทดสอบโดยไม่ให้เกินขีดจำกัดการใช้งานของ Let's Encrypt", + "letsencrypt": "เลทส์ เอนคริปท์", + "letsencryptStaging": "Let's Encrypt (รุ่นทดสอบ)", + "custom": "ไดเร็กทอรี ACME แบบกำหนดเอง" }, "directoryUrl": { - "label": "ACME directory URL", - "description": "Only for a custom certificate authority. Must be an https URL." + "label": "URL ของไดเร็กทอรี ACME", + "description": "ใช้ได้เฉพาะกับหน่วยงานออกใบรับรองที่กำหนดเองเท่านั้น ต้องเป็น URL ที่ใช้ HTTPS" }, "challengeType": { - "label": "Challenge type", - "description": "How to prove you own the domain.", - "http": "HTTP - needs port 80 reachable from the internet", - "cloudflare": "DNS (Cloudflare) - needs a Cloudflare API token" + "label": "ประเภทความท้าทาย", + "description": "วิธีพิสูจน์ว่าคุณเป็นเจ้าของโดเมน", + "http": "HTTP - ต้องมีพอร์ต 80 ที่สามารถเข้าถึงได้จากอินเทอร์เน็ต", + "cloudflare": "DNS (Cloudflare) - ต้องใช้โทเค็น API ของ Cloudflare" }, "cloudflareToken": { - "label": "Cloudflare API token", - "description": "Scoped token with Zone:DNS:Edit permission for your domain." + "label": "โทเค็น API ของ Cloudflare", + "description": "โทเค็นแบบจำกัดขอบเขตพร้อมสิทธิ์ Zone:DNS:Edit สำหรับโดเมนของคุณ" } }, "status": { - "title": "Certificate status", - "none": "No certificate", - "names": "Covers {{names}}", - "issuer": "Issued by {{issuer}}", - "expires": "Expires {{date}}", - "lastIssued": "Last issued {{date}}", - "lastError": "Last attempt failed: {{error}}", - "missing": "Set the domain, email and the fields your challenge type needs, then save, before requesting a certificate.", - "request": "Request certificate now", - "requesting": "Requesting certificate...", - "issued": "Certificate issued and installed" + "title": "สถานะใบรับรอง", + "none": "ไม่มีใบรับรอง", + "names": "ปก {{names}}", + "issuer": "ออกโดย {{issuer}}", + "expires": "หมดอายุ {{date}}", + "lastIssued": "ออกครั้งล่าสุด {{date}}", + "lastError": "ความพยายามครั้งล่าสุดล้มเหลว: {{error}}", + "missing": "ตั้งค่าโดเมน อีเมล และข้อมูลที่จำเป็นสำหรับประเภทการตรวจสอบสิทธิ์ของคุณ จากนั้นบันทึกก่อนที่จะขอใบรับรอง", + "request": "ขอใบรับรองตอนนี้", + "requesting": "ขอใบรับรอง...", + "issued": "ออกและติดตั้งใบรับรองแล้ว" + }, + "plugin": { + "name": "ACME Certificates" } } diff --git a/plugins/acme-ssl/locales/translated/tr_TR.json b/plugins/acme-ssl/locales/translated/tr_TR.json index 031945ccc..a58645b94 100644 --- a/plugins/acme-ssl/locales/translated/tr_TR.json +++ b/plugins/acme-ssl/locales/translated/tr_TR.json @@ -1,14 +1,14 @@ { "permissions": { "manage": { - "title": "Manage ACME certificates", - "description": "See the certificate status and request a new certificate now." + "title": "ACME sertifikalarını yönetin", + "description": "Sertifika durumunu kontrol edin ve şimdi yeni bir sertifika talep edin." } }, "settings": { "autoRenew": { - "label": "Renew automatically", - "description": "Check twice a day and get a new certificate when there is none, it does not cover the domain, or it expires within 30 days." + "label": "Otomatik olarak yenile", + "description": "Sertifikayı günde iki kez kontrol edin ve yoksa, alan adını kapsamıyorsa veya 30 gün içinde süresi dolacaksa yenisini alın." }, "domain": { "label": "Alan Adı", @@ -17,42 +17,45 @@ }, "email": { "label": "E-posta", - "description": "Contact email for the ACME account and expiry notices.", + "description": "ACME hesabı ve sona erme bildirimleri için iletişim e-posta adresi.", "placeholder": "admin@example.com" }, "provider": { "label": "Sertifika yetkilisi", - "description": "Where to get the certificate. Use staging to test without hitting Let's Encrypt rate limits.", + "description": "Sertifikayı nereden alabilirsiniz? Let's Encrypt'in hız sınırlamalarına takılmadan test etmek için hazırlık ortamını kullanın.", "letsencrypt": "Let's Encrypt", - "letsencryptStaging": "Let's Encrypt (staging)", - "custom": "Custom ACME directory" + "letsencryptStaging": "Let's Encrypt (test aşaması)", + "custom": "Özel ACME dizini" }, "directoryUrl": { - "label": "ACME directory URL", - "description": "Only for a custom certificate authority. Must be an https URL." + "label": "ACME dizin URL'si", + "description": "Yalnızca özel sertifika yetkilisi için geçerlidir. HTTPS URL'si olmalıdır." }, "challengeType": { - "label": "Challenge type", - "description": "How to prove you own the domain.", - "http": "HTTP - needs port 80 reachable from the internet", - "cloudflare": "DNS (Cloudflare) - needs a Cloudflare API token" + "label": "Meydan okuma türü", + "description": "Alan adının size ait olduğunu nasıl kanıtlayabilirsiniz?", + "http": "HTTP - internetten erişilebilir 80 numaralı porta ihtiyaç duyar.", + "cloudflare": "DNS (Cloudflare) - Cloudflare API belirteci gerektirir." }, "cloudflareToken": { - "label": "Cloudflare API token", + "label": "Cloudflare API belirteci", "description": "Alan adınız için Zone:DNS:Edit iznine sahip kapsamlı belirteç." } }, "status": { - "title": "Certificate status", + "title": "Sertifika durumu", "none": "Sertifika yok", - "names": "Covers {{names}}", - "issuer": "Issued by {{issuer}}", + "names": "Kapaklar {{names}}", + "issuer": "{{issuer}} tarafından yayınlandı", "expires": "Son kullanma: {{date}}", "lastIssued": "Son veriliş: {{date}}", - "lastError": "Last attempt failed: {{error}}", - "missing": "Set the domain, email and the fields your challenge type needs, then save, before requesting a certificate.", - "request": "Request certificate now", + "lastError": "Son deneme başarısız oldu: {{error}}", + "missing": "Sertifika talebinde bulunmadan önce etki alanını, e-postayı ve doğrulama türünüzün gerektirdiği alanları ayarlayın, ardından kaydedin.", + "request": "Şimdi sertifika talep edin", "requesting": "Sertifika isteniyor...", - "issued": "Certificate issued and installed" + "issued": "Sertifika düzenlendi ve kuruldu." + }, + "plugin": { + "name": "ACME Certificates" } } diff --git a/plugins/acme-ssl/locales/translated/uk_UA.json b/plugins/acme-ssl/locales/translated/uk_UA.json index 5c0aaa55b..c5c87b5ca 100644 --- a/plugins/acme-ssl/locales/translated/uk_UA.json +++ b/plugins/acme-ssl/locales/translated/uk_UA.json @@ -1,58 +1,61 @@ { "permissions": { "manage": { - "title": "Manage ACME certificates", - "description": "See the certificate status and request a new certificate now." + "title": "Керування сертифікатами ACME", + "description": "Перегляньте статус сертифіката та запросіть новий сертифікат зараз." } }, "settings": { "autoRenew": { - "label": "Renew automatically", - "description": "Check twice a day and get a new certificate when there is none, it does not cover the domain, or it expires within 30 days." + "label": "Автоматичне поновлення", + "description": "Перевіряйте двічі на день та отримуйте новий сертифікат, коли його немає, він не поширюється на домен або термін його дії закінчується протягом 30 днів." }, "domain": { - "label": "Domain", - "description": "The public domain name for the certificate.", + "label": "Домен", + "description": "Ім'я публічного домену для сертифіката.", "placeholder": "termix.example.com" }, "email": { - "label": "Email", - "description": "Contact email for the ACME account and expiry notices.", + "label": "Електронна пошта", + "description": "Контактна електронна адреса для облікового запису ACME та повідомлень про закінчення терміну дії.", "placeholder": "admin@example.com" }, "provider": { - "label": "Certificate authority", - "description": "Where to get the certificate. Use staging to test without hitting Let's Encrypt rate limits.", - "letsencrypt": "Let's Encrypt", - "letsencryptStaging": "Let's Encrypt (staging)", - "custom": "Custom ACME directory" + "label": "Центр сертифікації", + "description": "Де отримати сертифікат. Використовуйте проміжну версію для тестування без перевищення обмежень швидкості Let's Encrypt.", + "letsencrypt": "Давайте зашифруємо", + "letsencryptStaging": "Давайте зашифруємо (підготовка)", + "custom": "Користувацький каталог ACME" }, "directoryUrl": { - "label": "ACME directory URL", - "description": "Only for a custom certificate authority. Must be an https URL." + "label": "URL-адреса каталогу ACME", + "description": "Тільки для власного центру сертифікації. Має бути URL-адреса https." }, "challengeType": { - "label": "Challenge type", - "description": "How to prove you own the domain.", - "http": "HTTP - needs port 80 reachable from the internet", - "cloudflare": "DNS (Cloudflare) - needs a Cloudflare API token" + "label": "Тип виклику", + "description": "Як довести, що ви є власником домену.", + "http": "HTTP – потрібен порт 80, доступний з Інтернету", + "cloudflare": "DNS (Cloudflare) – потрібен токен API Cloudflare" }, "cloudflareToken": { - "label": "Cloudflare API token", - "description": "Scoped token with Zone:DNS:Edit permission for your domain." + "label": "Токен API Cloudflare", + "description": "Токен з обмеженою областю дії та дозволом Zone:DNS:Edit для вашого домену." } }, "status": { - "title": "Certificate status", - "none": "No certificate", - "names": "Covers {{names}}", - "issuer": "Issued by {{issuer}}", - "expires": "Expires {{date}}", - "lastIssued": "Last issued {{date}}", - "lastError": "Last attempt failed: {{error}}", - "missing": "Set the domain, email and the fields your challenge type needs, then save, before requesting a certificate.", - "request": "Request certificate now", - "requesting": "Requesting certificate...", - "issued": "Certificate issued and installed" + "title": "Статус сертифіката", + "none": "Без сертифіката", + "names": "Обкладинки {{names}}", + "issuer": "Видано {{issuer}}", + "expires": "Термін дії закінчується {{date}}", + "lastIssued": "Останній виданий {{date}}", + "lastError": "Остання спроба не вдалася: {{error}}", + "missing": "Вкажіть домен, електронну пошту та поля, необхідні для вашого типу завдання, а потім збережіть зміни, перш ніж запитувати сертифікат.", + "request": "Замовити сертифікат зараз", + "requesting": "Запит сертифіката...", + "issued": "Сертифікат видано та встановлено" + }, + "plugin": { + "name": "ACME Certificates" } } diff --git a/plugins/acme-ssl/locales/translated/vi_VN.json b/plugins/acme-ssl/locales/translated/vi_VN.json index 90cf7aa4a..4a7605c61 100644 --- a/plugins/acme-ssl/locales/translated/vi_VN.json +++ b/plugins/acme-ssl/locales/translated/vi_VN.json @@ -1,14 +1,14 @@ { "permissions": { "manage": { - "title": "Manage ACME certificates", - "description": "See the certificate status and request a new certificate now." + "title": "Quản lý chứng chỉ ACME", + "description": "Xem trạng thái chứng chỉ và yêu cầu chứng chỉ mới ngay bây giờ." } }, "settings": { "autoRenew": { - "label": "Renew automatically", - "description": "Check twice a day and get a new certificate when there is none, it does not cover the domain, or it expires within 30 days." + "label": "Tự động gia hạn", + "description": "Hãy kiểm tra hai lần một ngày và lấy chứng chỉ mới nếu chứng chỉ hiện không có, không bao phủ tên miền hoặc hết hạn trong vòng 30 ngày." }, "domain": { "label": "Tên miền", @@ -17,42 +17,45 @@ }, "email": { "label": "Email", - "description": "Contact email for the ACME account and expiry notices.", + "description": "Địa chỉ email liên hệ cho tài khoản ACME và thông báo hết hạn.", "placeholder": "admin@example.com" }, "provider": { "label": "Cơ quan chứng thực", - "description": "Where to get the certificate. Use staging to test without hitting Let's Encrypt rate limits.", - "letsencrypt": "Let's Encrypt", - "letsencryptStaging": "Let's Encrypt (staging)", - "custom": "Custom ACME directory" + "description": "Lấy chứng chỉ ở đâu? Sử dụng môi trường thử nghiệm để kiểm tra mà không vượt quá giới hạn số lượng yêu cầu của Let's Encrypt.", + "letsencrypt": "Hãy mã hóa", + "letsencryptStaging": "Let's Encrypt (phiên bản thử nghiệm)", + "custom": "Danh mục ACME tùy chỉnh" }, "directoryUrl": { - "label": "ACME directory URL", - "description": "Only for a custom certificate authority. Must be an https URL." + "label": "URL thư mục ACME", + "description": "Chỉ dành cho cơ quan cấp chứng chỉ tùy chỉnh. Phải là URL HTTPS." }, "challengeType": { - "label": "Challenge type", - "description": "How to prove you own the domain.", - "http": "HTTP - needs port 80 reachable from the internet", - "cloudflare": "DNS (Cloudflare) - needs a Cloudflare API token" + "label": "Loại thử thách", + "description": "Cách chứng minh bạn sở hữu tên miền.", + "http": "HTTP - cần cổng 80 có thể truy cập được từ internet", + "cloudflare": "DNS (Cloudflare) - cần mã thông báo API của Cloudflare." }, "cloudflareToken": { - "label": "Cloudflare API token", + "label": "Mã thông báo API Cloudflare", "description": "Token có phạm vi với quyền Zone:DNS:Edit cho tên miền của bạn." } }, "status": { - "title": "Certificate status", + "title": "Trạng thái chứng chỉ", "none": "Không có chứng chỉ", - "names": "Covers {{names}}", - "issuer": "Issued by {{issuer}}", + "names": "Ảnh bìa {{names}}", + "issuer": "Được phát hành bởi {{issuer}}", "expires": "Hết hạn {{date}}", "lastIssued": "Cấp lần cuối {{date}}", - "lastError": "Last attempt failed: {{error}}", - "missing": "Set the domain, email and the fields your challenge type needs, then save, before requesting a certificate.", - "request": "Request certificate now", + "lastError": "Lần thử cuối cùng thất bại: {{error}}", + "missing": "Hãy thiết lập tên miền, email và các trường thông tin mà loại thử thách của bạn yêu cầu, sau đó lưu lại trước khi yêu cầu chứng chỉ.", + "request": "Yêu cầu chứng chỉ ngay bây giờ", "requesting": "Đang yêu cầu chứng chỉ...", - "issued": "Certificate issued and installed" + "issued": "Giấy chứng nhận đã được cấp và cài đặt" + }, + "plugin": { + "name": "ACME Certificates" } } diff --git a/plugins/acme-ssl/locales/translated/zh_CN.json b/plugins/acme-ssl/locales/translated/zh_CN.json index a9646254c..abdf553a5 100644 --- a/plugins/acme-ssl/locales/translated/zh_CN.json +++ b/plugins/acme-ssl/locales/translated/zh_CN.json @@ -7,8 +7,8 @@ }, "settings": { "autoRenew": { - "label": "自动续期", - "description": "每天检查两次。在没有证书、证书未覆盖域名或将在 30 天内过期时申请新证书。" + "label": "自动续订", + "description": "每天检查两次,如果没有证书、证书不涵盖该域名或证书将在 30 天内过期,则获取新证书。" }, "domain": { "label": "域名", @@ -17,25 +17,25 @@ }, "email": { "label": "邮箱", - "description": "用于 ACME 账户和到期通知的联系邮箱。", + "description": "ACME账户及到期通知的联系邮箱。", "placeholder": "admin@example.com" }, "provider": { "label": "证书颁发机构", - "description": "证书申请来源。测试时使用测试环境,以免触发 Let's Encrypt 频率限制。", + "description": "证书获取途径。使用测试环境进行测试,避免超出 Let's Encrypt 的速率限制。", "letsencrypt": "Let's Encrypt", - "letsencryptStaging": "Let's Encrypt(测试环境)", + "letsencryptStaging": "Let's Encrypt(测试版)", "custom": "自定义 ACME 目录" }, "directoryUrl": { - "label": "ACME 目录 URL", - "description": "仅用于自定义证书颁发机构,必须为 HTTPS URL。" + "label": "ACME目录URL", + "description": "仅适用于自定义证书颁发机构。必须是 https URL。" }, "challengeType": { - "label": "验证类型", - "description": "用于证明域名所有权的方式。", - "http": "HTTP:需要互联网能够访问端口 80", - "cloudflare": "DNS(Cloudflare):需要 Cloudflare API 令牌" + "label": "挑战类型", + "description": "如何证明您拥有该域名。", + "http": "HTTP协议需要可通过互联网访问的80端口。", + "cloudflare": "DNS(Cloudflare)——需要 Cloudflare API 令牌" }, "cloudflareToken": { "label": "Cloudflare API 令牌", @@ -45,17 +45,17 @@ "status": { "title": "证书状态", "none": "无证书", - "names": "覆盖域名:{{names}}", - "issuer": "签发者:{{issuer}}", + "names": "封面 {{names}}", + "issuer": "由 {{issuer}} 发行", "expires": "过期于 {{date}}", "lastIssued": "上次签发于 {{date}}", - "lastError": "上次尝试失败:{{error}}", - "missing": "请先设置域名、邮箱及所选验证方式需要的字段,保存后再申请证书。", + "lastError": "最后一次尝试失败: {{error}}", + "missing": "设置域名、电子邮件和您的质询类型所需的字段,然后保存,再申请证书。", "request": "立即申请证书", "requesting": "正在请求证书...", - "issued": "证书已签发并安装" + "issued": "证书已颁发并安装" }, "plugin": { - "name": "ACME 证书" + "name": "ACME Certificates" } } diff --git a/plugins/acme-ssl/locales/translated/zh_TW.json b/plugins/acme-ssl/locales/translated/zh_TW.json index ec27c0005..22122ab8d 100644 --- a/plugins/acme-ssl/locales/translated/zh_TW.json +++ b/plugins/acme-ssl/locales/translated/zh_TW.json @@ -1,14 +1,14 @@ { "permissions": { "manage": { - "title": "Manage ACME certificates", - "description": "See the certificate status and request a new certificate now." + "title": "管理 ACME 證書", + "description": "查看證書狀態並立即申請新證書。" } }, "settings": { "autoRenew": { - "label": "Renew automatically", - "description": "Check twice a day and get a new certificate when there is none, it does not cover the domain, or it expires within 30 days." + "label": "自動續訂", + "description": "每天檢查兩次,如果沒有證書、證書不涵蓋該網域或證書將在 30 天內過期,則取得新證書。" }, "domain": { "label": "網域", @@ -17,42 +17,45 @@ }, "email": { "label": "電子郵件", - "description": "Contact email for the ACME account and expiry notices.", + "description": "ACME帳戶及到期通知的聯絡信箱。", "placeholder": "admin@example.com" }, "provider": { "label": "憑證授權中心", - "description": "Where to get the certificate. Use staging to test without hitting Let's Encrypt rate limits.", + "description": "證書取得途徑。使用測試環境進行測試,避免超出 Let's Encrypt 的速率限制。", "letsencrypt": "Let's Encrypt", - "letsencryptStaging": "Let's Encrypt (staging)", - "custom": "Custom ACME directory" + "letsencryptStaging": "Let's Encrypt(測試版)", + "custom": "自訂 ACME 目錄" }, "directoryUrl": { - "label": "ACME directory URL", - "description": "Only for a custom certificate authority. Must be an https URL." + "label": "ACME目錄URL", + "description": "僅適用於自訂憑證授權單位。必須是 https URL。" }, "challengeType": { - "label": "Challenge type", - "description": "How to prove you own the domain.", - "http": "HTTP - needs port 80 reachable from the internet", - "cloudflare": "DNS (Cloudflare) - needs a Cloudflare API token" + "label": "挑戰類型", + "description": "如何證明您擁有該網域。", + "http": "HTTP協定需要80個可透過網際網路存取的連接埠。", + "cloudflare": "DNS(Cloudflare)-需要 Cloudflare API 令牌" }, "cloudflareToken": { - "label": "Cloudflare API token", + "label": "Cloudflare API 令牌", "description": "具有您網域 Zone:DNS:Edit 權限的限定範圍權杖。" } }, "status": { - "title": "Certificate status", + "title": "證書狀態", "none": "無憑證", - "names": "Covers {{names}}", - "issuer": "Issued by {{issuer}}", + "names": "封面 {{names}}", + "issuer": "由 {{issuer}} 發行", "expires": "到期日 {{date}}", "lastIssued": "上次簽發日期 {{date}}", - "lastError": "Last attempt failed: {{error}}", - "missing": "Set the domain, email and the fields your challenge type needs, then save, before requesting a certificate.", - "request": "Request certificate now", + "lastError": "最後嘗試失敗: {{error}}", + "missing": "設定網域名稱、電子郵件和您的質詢類型所需的字段,然後儲存,再申請憑證。", + "request": "立即申請證書", "requesting": "請求憑證中...", - "issued": "Certificate issued and installed" + "issued": "證書已頒發並安裝" + }, + "plugin": { + "name": "ACME Certificates" } } diff --git a/plugins/ai/locales/translated/af_ZA.json b/plugins/ai/locales/translated/af_ZA.json index c252bc8be..3ae53903f 100644 --- a/plugins/ai/locales/translated/af_ZA.json +++ b/plugins/ai/locales/translated/af_ZA.json @@ -191,5 +191,8 @@ "reconnecting": "Reconnecting and restoring messages…", "unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue" + }, + "plugin": { + "name": "AI Assistant" } } diff --git a/plugins/ai/locales/translated/ar_SA.json b/plugins/ai/locales/translated/ar_SA.json index dcf0d8080..0469291a2 100644 --- a/plugins/ai/locales/translated/ar_SA.json +++ b/plugins/ai/locales/translated/ar_SA.json @@ -191,5 +191,8 @@ "reconnecting": "Reconnecting and restoring messages…", "unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue" + }, + "plugin": { + "name": "AI Assistant" } } diff --git a/plugins/ai/locales/translated/bg_BG.json b/plugins/ai/locales/translated/bg_BG.json index d9f7a3f46..00f398754 100644 --- a/plugins/ai/locales/translated/bg_BG.json +++ b/plugins/ai/locales/translated/bg_BG.json @@ -191,5 +191,8 @@ "reconnecting": "Reconnecting and restoring messages…", "unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue" + }, + "plugin": { + "name": "AI Assistant" } } diff --git a/plugins/ai/locales/translated/bn_BD.json b/plugins/ai/locales/translated/bn_BD.json index 3605ad2be..861b6915b 100644 --- a/plugins/ai/locales/translated/bn_BD.json +++ b/plugins/ai/locales/translated/bn_BD.json @@ -1,120 +1,120 @@ { "permissions": { "use": { - "title": "Use the assistant", - "description": "Open the assistant and ask it things." + "title": "সহকারী ব্যবহার করুন", + "description": "অ্যাসিস্ট্যান্টটি খুলুন এবং এটিকে বিভিন্ন জিনিস জিজ্ঞাসা করুন।" }, "manage_providers": { - "title": "Manage providers", - "description": "Add, edit and remove the AI providers and their API keys." + "title": "সরবরাহকারীদের পরিচালনা করুন", + "description": "এআই প্রোভাইডার এবং তাদের এপিআই কীগুলো যোগ, সম্পাদনা ও অপসারণ করুন।" }, "apply_proposals": { - "title": "Apply proposals", - "description": "Let the assistant carry out the changes it suggests." + "title": "প্রস্তাবগুলি প্রয়োগ করুন", + "description": "সহকারীকে তার প্রস্তাবিত পরিবর্তনগুলো কার্যকর করতে দিন।" }, "services.use": { - "title": "Use AI from other features", - "description": "Other features may call the assistant on your behalf." + "title": "অন্যান্য বৈশিষ্ট্য থেকে এআই ব্যবহার করুন", + "description": "অন্যান্য বৈশিষ্ট্য আপনার পক্ষ থেকে সহকারীকে ডাকতে পারে।" }, "secrets.share": { - "title": "Share the API key", - "description": "Other features may use the stored AI API key without seeing it." + "title": "এপিআই কী শেয়ার করুন", + "description": "অন্যান্য ফিচারগুলো সংরক্ষিত এআই এপিআই কী-টি না দেখেই ব্যবহার করতে পারে।" } }, "settings": { - "assistantUnavailable": "The AI assistant is turned off on this server.", - "providersNeedOptIn": "Turn on the AI assistant above to add providers.", + "assistantUnavailable": "এই সার্ভারে এআই অ্যাসিস্ট্যান্ট বন্ধ করা আছে।", + "providersNeedOptIn": "প্রোভাইডার যোগ করতে উপরের এআই অ্যাসিস্ট্যান্টটি চালু করুন।", "admin": { "globallyEnabled": { - "label": "AI assistant", - "description": "Let users turn on the AI assistant. While this is off, the assistant is hidden and blocked for everyone." + "label": "এআই সহকারী", + "description": "ব্যবহারকারীদের এআই অ্যাসিস্ট্যান্ট চালু করার সুযোগ দিন। এটি বন্ধ থাকা অবস্থায়, অ্যাসিস্ট্যান্টটি সকলের জন্য লুকানো এবং ব্লক করা থাকবে।" }, "privateEndpoints": { - "label": "Allowed private AI hosts", - "description": "Hosts on your private network that users may point a provider at, such as a self-hosted Ollama. Put one host on each line." + "label": "ব্যক্তিগত এআই হোস্ট অনুমোদিত", + "description": "আপনার প্রাইভেট নেটওয়ার্কে এমন হোস্ট রাখুন, যেগুলোকে ব্যবহারকারীরা কোনো প্রোভাইডারের দিকে নির্দেশ করতে পারে, যেমন একটি সেলফ-হোস্টেড ওলামা। প্রতিটি লাইনে একটি করে হোস্ট রাখুন।" } }, "host": { "enableAiAssistant": { - "label": "Enable AI Assistant", - "description": "Allow the AI assistant to help in this host's terminal. Off by default, and still needs AI enabled for your account." + "label": "এআই অ্যাসিস্ট্যান্ট সক্রিয় করুন", + "description": "এই হোস্টের টার্মিনালে সাহায্য করার জন্য এআই অ্যাসিস্ট্যান্টকে অনুমতি দিন। এটি ডিফল্টরূপে বন্ধ থাকে এবং আপনার অ্যাকাউন্টের জন্য এআই চালু করা প্রয়োজন।" } } }, "ai": { - "title": "Assistant", - "send": "Send", - "stop": "Stop", - "save": "Save", - "cancel": "Cancel", - "running": "running", - "approve": "Approve", - "reject": "Reject", - "inputPlaceholder": "Ask about your servers, or describe a change to propose", - "selectProvider": "Select a provider", - "providerSettings": "Provider settings", - "addProvider": "Add provider", - "editProvider": "Edit provider", - "removeProvider": "Remove provider", - "providerType": "Provider", - "providerLabel": "Name", - "providerLabelPlaceholder": "For example: Local Ollama", - "baseUrl": "Server address", - "apiKey": "API key", - "defaultModel": "Default model", - "defaultModelPlaceholder": "For example: llama3.1 or claude-opus-5", - "labelRequired": "Give this provider a name", - "providerSaveFailed": "Could not save the provider", - "providerUpdated": "Provider updated", - "providerDeleteFailed": "Could not remove the provider", - "privateEndpointHint": "Addresses on your private network need an administrator to allow the host first.", - "providerOllama": "Ollama", - "providerAnthropic": "Anthropic", - "providerOpenai": "OpenAI", - "providerGemini": "Google Gemini", - "providerOpenaiCompatible": "OpenAI compatible", - "toolArguments": "Input", - "toolResult": "Result", - "statusApplied": "Applied", - "statusRejected": "Rejected", - "proposalApplied": "Change applied", - "proposalApplyFailed": "Could not apply the change", - "proposalRejectFailed": "Could not reject the change", - "enableTitle": "Enable the AI assistant", - "enableDescription": "Let the assistant read your setup and suggest changes for you to approve.", - "readOnlyCommands": "Allow read-only diagnostic commands", - "readOnlyCommandsDescription": "The assistant may run a short list of safe commands like df and uptime without asking each time. Anything that changes a server is always proposed first.", - "modelDetectFailed": "Could not reach the provider, so this is a general list. You can type any model name.", - "modelCustom": "Enter a model name", - "modelRefresh": "Refresh list", - "modelPlaceholder": "Choose or type a model", - "attachHint": "Type @ to reference a host, snippet or automation. Changes are proposed for you to approve.", - "runCommandTitle": "Run command", - "assistant": "AI Assistant", - "terminalPanelEmpty": "Ask the assistant about this host. Anything that changes state needs your approval first.", - "terminalPanelPlaceholder": "Ask about this host...", - "noProvidersConfigured": "No AI provider is configured yet. Add one in the AI assistant tab.", - "runsInOpenTerminal": "Runs in your open terminal session.", - "runInTerminal": "Run", - "terminalContextPrefill": "Here is my terminal output:\n\n{{output}}\n\n", + "title": "সহকারী", + "send": "পাঠান", + "stop": "থামুন", + "save": "সংরক্ষণ করুন", + "cancel": "বাতিল করুন", + "running": "দৌড়ানো", + "approve": "অনুমোদন করুন", + "reject": "প্রত্যাখ্যান করুন", + "inputPlaceholder": "আপনার সার্ভারগুলো সম্পর্কে জিজ্ঞাসা করুন, অথবা কোনো পরিবর্তনের প্রস্তাব বর্ণনা করুন।", + "selectProvider": "একজন সরবরাহকারী নির্বাচন করুন", + "providerSettings": "প্রদানকারীর সেটিংস", + "addProvider": "প্রদানকারী যোগ করুন", + "editProvider": "সম্পাদনা প্রদানকারী", + "removeProvider": "প্রদানকারীকে অপসারণ করুন", + "providerType": "সরবরাহকারী", + "providerLabel": "নাম", + "providerLabelPlaceholder": "উদাহরণস্বরূপ: স্থানীয় ওলামা", + "baseUrl": "সার্ভারের ঠিকানা", + "apiKey": "এপিআই কী", + "defaultModel": "ডিফল্ট মডেল", + "defaultModelPlaceholder": "উদাহরণস্বরূপ: llama3.1 অথবা claude-opus-5", + "labelRequired": "এই সরবরাহকারীকে একটি নাম দিন", + "providerSaveFailed": "প্রদানকারীকে সংরক্ষণ করা যায়নি", + "providerUpdated": "প্রদানকারী আপডেট করেছেন", + "providerDeleteFailed": "প্রদানকারীকে সরানো যায়নি", + "privateEndpointHint": "আপনার ব্যক্তিগত নেটওয়ার্কের অ্যাড্রেসগুলো ব্যবহার করার জন্য প্রথমে একজন অ্যাডমিনিস্ট্রেটরের কাছ থেকে হোস্টটিকে অনুমতি নিতে হয়।", + "providerOllama": "ওল্লামা", + "providerAnthropic": "অ্যানথ্রোপিক", + "providerOpenai": "ওপেনএআই", + "providerGemini": "গুগল জেমিনি", + "providerOpenaiCompatible": "ওপেনএআই সামঞ্জস্যপূর্ণ", + "toolArguments": "ইনপুট", + "toolResult": "ফলাফল", + "statusApplied": "প্রয়োগ করা হয়েছে", + "statusRejected": "প্রত্যাখ্যাত", + "proposalApplied": "পরিবর্তন প্রয়োগ করা হয়েছে", + "proposalApplyFailed": "পরিবর্তনটি প্রয়োগ করা যায়নি।", + "proposalRejectFailed": "পরিবর্তনটি প্রত্যাখ্যান করা যায়নি", + "enableTitle": "এআই অ্যাসিস্ট্যান্ট সক্রিয় করুন", + "enableDescription": "সহকারীকে আপনার সেটআপটি পড়তে দিন এবং আপনার অনুমোদনের জন্য পরিবর্তনের পরামর্শ দিতে দিন।", + "readOnlyCommands": "শুধুমাত্র পঠনযোগ্য ডায়াগনস্টিক কমান্ডের অনুমতি দিন", + "readOnlyCommandsDescription": "সহকারী প্রতিবার অনুমতি না নিয়েই df এবং uptime-এর মতো কয়েকটি নিরাপদ কমান্ড চালাতে পারে। সার্ভার পরিবর্তন করে এমন যেকোনো কিছু সর্বদা প্রথমে প্রস্তাব করা হয়।", + "modelDetectFailed": "সরবরাহকারীর সাথে যোগাযোগ করা সম্ভব হয়নি, তাই এটি একটি সাধারণ তালিকা। আপনি যেকোনো মডেলের নাম টাইপ করতে পারেন।", + "modelCustom": "একটি মডেলের নাম লিখুন", + "modelRefresh": "তালিকা রিফ্রেশ করুন", + "modelPlaceholder": "একটি মডেল বেছে নিন বা টাইপ করুন", + "attachHint": "কোনো হোস্ট, স্নিপেট বা অটোমেশন উল্লেখ করতে @ টাইপ করুন। আপনার অনুমোদনের জন্য পরিবর্তনগুলো প্রস্তাব করা হবে।", + "runCommandTitle": "রান কমান্ড", + "assistant": "এআই সহকারী", + "terminalPanelEmpty": "এই হোস্ট সম্পর্কে অ্যাসিস্ট্যান্টকে জিজ্ঞাসা করুন। অবস্থা পরিবর্তনের জন্য প্রথমে আপনার অনুমোদন প্রয়োজন।", + "terminalPanelPlaceholder": "এই হোস্ট সম্পর্কে জিজ্ঞাসা করুন...", + "noProvidersConfigured": "এখনো কোনো এআই প্রোভাইডার কনফিগার করা হয়নি। এআই অ্যাসিস্ট্যান্ট ট্যাবে একটি যোগ করুন।", + "runsInOpenTerminal": "আপনার খোলা টার্মিনাল সেশনে চলে।", + "runInTerminal": "দৌড়", + "terminalContextPrefill": "আমার টার্মিনাল আউটপুট নিচে দেওয়া হলো:\n\n{{output}}\n\n", "secrets": { - "shareApiKey": "Let other features use your AI provider API key for their own requests. The key is never copied, and you can revoke this at any time." + "shareApiKey": "অন্যান্য ফিচারগুলোকে তাদের নিজস্ব অনুরোধের জন্য আপনার এআই প্রোভাইডার এপিআই কী ব্যবহার করতে দিন। কী-টি কখনোই কপি করা হয় না এবং আপনি যেকোনো সময় এটি প্রত্যাহার করতে পারেন।" } }, "nav": { - "ai": "AI" + "ai": "এআই" }, "onboarding": { - "aiTitle": "AI assistant", - "aiIntro": "Termix can include an optional AI assistant. You can change this later in your settings.", - "aiSkipTitle": "Leave it off", - "aiSkipDesc": "Termix works as it does now. The assistant stays hidden.", - "aiEnableTitle": "Turn it on", - "aiEnableDesc": "Adds an assistant that reads your setup and suggests changes you approve. Needs a provider you supply, such as a local Ollama.", - "aiNote": "Nothing is sent anywhere until you add a provider and send a message." + "aiTitle": "এআই সহকারী", + "aiIntro": "টারমিক্সে একটি ঐচ্ছিক এআই অ্যাসিস্ট্যান্ট অন্তর্ভুক্ত থাকতে পারে। আপনি পরবর্তীতে আপনার সেটিংসে এটি পরিবর্তন করতে পারবেন।", + "aiSkipTitle": "এটা ছেড়ে দাও", + "aiSkipDesc": "টারমিক্স এখন যেমন কাজ করে, তেমনই কাজ করে। অ্যাসিস্ট্যান্টটি লুকানো থাকে।", + "aiEnableTitle": "এটা চালু করুন", + "aiEnableDesc": "একজন সহকারী যোগ করে যে আপনার সেটআপ পড়ে এবং আপনার অনুমোদিত পরিবর্তনের পরামর্শ দেয়। এর জন্য আপনার সরবরাহ করা একজন প্রদানকারীর প্রয়োজন, যেমন একজন স্থানীয় ওলামা।", + "aiNote": "আপনি একজন প্রোভাইডার যোগ করে মেসেজ না পাঠানো পর্যন্ত কোথাও কিছু পাঠানো হয় না।" }, "hosts": { - "docsLink": "View docs" + "docsLink": "নথি দেখুন" }, "agents": { "title": "AI Agent", @@ -191,5 +191,8 @@ "reconnecting": "Reconnecting and restoring messages…", "unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue" + }, + "plugin": { + "name": "AI Assistant" } } diff --git a/plugins/ai/locales/translated/ca_ES.json b/plugins/ai/locales/translated/ca_ES.json index f09b681c7..6e4fb4326 100644 --- a/plugins/ai/locales/translated/ca_ES.json +++ b/plugins/ai/locales/translated/ca_ES.json @@ -191,5 +191,8 @@ "reconnecting": "Reconnecting and restoring messages…", "unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue" + }, + "plugin": { + "name": "AI Assistant" } } diff --git a/plugins/ai/locales/translated/cs_CZ.json b/plugins/ai/locales/translated/cs_CZ.json index ec49754ce..2986ae373 100644 --- a/plugins/ai/locales/translated/cs_CZ.json +++ b/plugins/ai/locales/translated/cs_CZ.json @@ -191,5 +191,8 @@ "reconnecting": "Reconnecting and restoring messages…", "unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue" + }, + "plugin": { + "name": "AI Assistant" } } diff --git a/plugins/ai/locales/translated/da_DK.json b/plugins/ai/locales/translated/da_DK.json index 498080017..f8a25b25b 100644 --- a/plugins/ai/locales/translated/da_DK.json +++ b/plugins/ai/locales/translated/da_DK.json @@ -191,5 +191,8 @@ "reconnecting": "Reconnecting and restoring messages…", "unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue" + }, + "plugin": { + "name": "AI Assistant" } } diff --git a/plugins/ai/locales/translated/de_DE.json b/plugins/ai/locales/translated/de_DE.json index 4d05faf1d..a540e4274 100644 --- a/plugins/ai/locales/translated/de_DE.json +++ b/plugins/ai/locales/translated/de_DE.json @@ -191,5 +191,8 @@ "reconnecting": "Reconnecting and restoring messages…", "unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue" + }, + "plugin": { + "name": "AI Assistant" } } diff --git a/plugins/ai/locales/translated/el_GR.json b/plugins/ai/locales/translated/el_GR.json index 8598f1f05..fc1018c41 100644 --- a/plugins/ai/locales/translated/el_GR.json +++ b/plugins/ai/locales/translated/el_GR.json @@ -191,5 +191,8 @@ "reconnecting": "Reconnecting and restoring messages…", "unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue" + }, + "plugin": { + "name": "AI Assistant" } } diff --git a/plugins/ai/locales/translated/es_ES.json b/plugins/ai/locales/translated/es_ES.json index 3ce7e9946..a03f2f226 100644 --- a/plugins/ai/locales/translated/es_ES.json +++ b/plugins/ai/locales/translated/es_ES.json @@ -191,5 +191,8 @@ "reconnecting": "Reconnecting and restoring messages…", "unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue" + }, + "plugin": { + "name": "AI Assistant" } } diff --git a/plugins/ai/locales/translated/fi_FI.json b/plugins/ai/locales/translated/fi_FI.json index 55d58e04b..015a13ac9 100644 --- a/plugins/ai/locales/translated/fi_FI.json +++ b/plugins/ai/locales/translated/fi_FI.json @@ -191,5 +191,8 @@ "reconnecting": "Reconnecting and restoring messages…", "unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue" + }, + "plugin": { + "name": "AI Assistant" } } diff --git a/plugins/ai/locales/translated/fr_FR.json b/plugins/ai/locales/translated/fr_FR.json index f77498c9f..2ebefed04 100644 --- a/plugins/ai/locales/translated/fr_FR.json +++ b/plugins/ai/locales/translated/fr_FR.json @@ -191,5 +191,8 @@ "reconnecting": "Reconnecting and restoring messages…", "unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue" + }, + "plugin": { + "name": "AI Assistant" } } diff --git a/plugins/ai/locales/translated/he_IL.json b/plugins/ai/locales/translated/he_IL.json index 606ddd78e..492d24759 100644 --- a/plugins/ai/locales/translated/he_IL.json +++ b/plugins/ai/locales/translated/he_IL.json @@ -191,5 +191,8 @@ "reconnecting": "Reconnecting and restoring messages…", "unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue" + }, + "plugin": { + "name": "AI Assistant" } } diff --git a/plugins/ai/locales/translated/hi_IN.json b/plugins/ai/locales/translated/hi_IN.json index 42fa2a32e..bd1a1b5f4 100644 --- a/plugins/ai/locales/translated/hi_IN.json +++ b/plugins/ai/locales/translated/hi_IN.json @@ -1,117 +1,117 @@ { "permissions": { "use": { - "title": "Use the assistant", - "description": "Open the assistant and ask it things." + "title": "सहायक का उपयोग करें", + "description": "असिस्टेंट खोलें और उससे सवाल पूछें।" }, "manage_providers": { - "title": "Manage providers", - "description": "Add, edit and remove the AI providers and their API keys." + "title": "प्रदाताओं का प्रबंधन करें", + "description": "एआई प्रदाताओं और उनकी एपीआई कुंजियों को जोड़ें, संपादित करें और हटाएं।" }, "apply_proposals": { - "title": "Apply proposals", - "description": "Let the assistant carry out the changes it suggests." + "title": "प्रस्ताव लागू करें", + "description": "सहायक को उसके द्वारा सुझाए गए बदलावों को लागू करने दें।" }, "services.use": { - "title": "Use AI from other features", - "description": "Other features may call the assistant on your behalf." + "title": "अन्य सुविधाओं से एआई का उपयोग करें", + "description": "अन्य सुविधाएं आपकी ओर से असिस्टेंट को कॉल कर सकती हैं।" }, "secrets.share": { - "title": "Share the API key", - "description": "Other features may use the stored AI API key without seeing it." + "title": "एपीआई कुंजी साझा करें", + "description": "अन्य सुविधाएं संग्रहीत एआई एपीआई कुंजी का उपयोग उसे देखे बिना भी कर सकती हैं।" } }, "settings": { - "assistantUnavailable": "The AI assistant is turned off on this server.", - "providersNeedOptIn": "Turn on the AI assistant above to add providers.", + "assistantUnavailable": "इस सर्वर पर एआई असिस्टेंट बंद है।", + "providersNeedOptIn": "प्रदाताओं को जोड़ने के लिए ऊपर दिए गए एआई सहायक को चालू करें।", "admin": { "globallyEnabled": { - "label": "AI assistant", - "description": "Let users turn on the AI assistant. While this is off, the assistant is hidden and blocked for everyone." + "label": "एआई सहायक", + "description": "उपयोगकर्ताओं को एआई सहायक चालू करने की अनुमति दें। जब यह बंद होगा, तो सहायक सभी के लिए छिपा हुआ और अवरुद्ध रहेगा।" }, "privateEndpoints": { - "label": "Allowed private AI hosts", - "description": "Hosts on your private network that users may point a provider at, such as a self-hosted Ollama. Put one host on each line." + "label": "निजी एआई होस्ट की अनुमति दी गई", + "description": "आपके निजी नेटवर्क पर मौजूद होस्ट, जिन्हें उपयोगकर्ता किसी प्रदाता से जोड़ सकते हैं, जैसे कि स्व-होस्टेड ओलामा। प्रत्येक पंक्ति में एक होस्ट रखें।" } }, "host": { "enableAiAssistant": { - "label": "Enable AI Assistant", - "description": "Allow the AI assistant to help in this host's terminal. Off by default, and still needs AI enabled for your account." + "label": "एआई असिस्टेंट को सक्षम करें", + "description": "इस होस्ट के टर्मिनल में एआई सहायक को मदद करने की अनुमति दें। यह डिफ़ॉल्ट रूप से बंद है, लेकिन आपके खाते के लिए एआई को सक्षम करना आवश्यक है।" } } }, "ai": { - "title": "Assistant", - "send": "Send", + "title": "सहायक", + "send": "भेजना", "stop": "स्टॉप", "save": "सहेजें", "cancel": "रद्द करें", "running": "चल रहे", - "approve": "Approve", - "reject": "Reject", - "inputPlaceholder": "Ask about your servers, or describe a change to propose", - "selectProvider": "Select a provider", - "providerSettings": "Provider settings", - "addProvider": "Add provider", - "editProvider": "Edit provider", - "removeProvider": "Remove provider", - "providerType": "Provider", + "approve": "मंज़ूरी देना", + "reject": "अस्वीकार करना", + "inputPlaceholder": "अपने सर्वरों के बारे में पूछें, या प्रस्तावित परिवर्तन का वर्णन करें।", + "selectProvider": "एक प्रदाता का चयन करें", + "providerSettings": "प्रदाता सेटिंग्स", + "addProvider": "प्रदाता जोड़ें", + "editProvider": "प्रदाता संपादित करें", + "removeProvider": "प्रदाता को हटाएँ", + "providerType": "प्रदाता", "providerLabel": "नाम", - "providerLabelPlaceholder": "For example: Local Ollama", - "baseUrl": "Server address", - "apiKey": "API key", - "defaultModel": "Default model", - "defaultModelPlaceholder": "For example: llama3.1 or claude-opus-5", - "labelRequired": "Give this provider a name", - "providerSaveFailed": "Could not save the provider", - "providerUpdated": "Provider updated", - "providerDeleteFailed": "Could not remove the provider", - "privateEndpointHint": "Addresses on your private network need an administrator to allow the host first.", - "providerOllama": "Ollama", - "providerAnthropic": "Anthropic", - "providerOpenai": "OpenAI", - "providerGemini": "Google Gemini", - "providerOpenaiCompatible": "OpenAI compatible", + "providerLabelPlaceholder": "उदाहरण के लिए: स्थानीय ओलामा", + "baseUrl": "सर्वर पता", + "apiKey": "एपीआई कुंजी", + "defaultModel": "डिफ़ॉल्ट मॉडल", + "defaultModelPlaceholder": "उदाहरण के लिए: llama3.1 या claude-opus-5", + "labelRequired": "इस प्रदाता को एक नाम दें", + "providerSaveFailed": "प्रदाता को बचाया नहीं जा सका", + "providerUpdated": "प्रदाता ने अपडेट किया", + "providerDeleteFailed": "प्रदाता को हटाया नहीं जा सका", + "privateEndpointHint": "आपके निजी नेटवर्क पर मौजूद पतों के लिए पहले एक प्रशासक द्वारा होस्ट को अनुमति देना आवश्यक है।", + "providerOllama": "ओलामा", + "providerAnthropic": "anthropic", + "providerOpenai": "ओपनएआई", + "providerGemini": "गूगल जेमिनी", + "providerOpenaiCompatible": "OpenAI संगत", "toolArguments": "इनपुट", - "toolResult": "Result", - "statusApplied": "Applied", - "statusRejected": "Rejected", - "proposalApplied": "Change applied", - "proposalApplyFailed": "Could not apply the change", - "proposalRejectFailed": "Could not reject the change", - "enableTitle": "Enable the AI assistant", - "enableDescription": "Let the assistant read your setup and suggest changes for you to approve.", - "readOnlyCommands": "Allow read-only diagnostic commands", - "readOnlyCommandsDescription": "The assistant may run a short list of safe commands like df and uptime without asking each time. Anything that changes a server is always proposed first.", - "modelDetectFailed": "Could not reach the provider, so this is a general list. You can type any model name.", - "modelCustom": "Enter a model name", - "modelRefresh": "Refresh list", - "modelPlaceholder": "Choose or type a model", - "attachHint": "Type @ to reference a host, snippet or automation. Changes are proposed for you to approve.", - "runCommandTitle": "Run command", - "assistant": "AI Assistant", - "terminalPanelEmpty": "Ask the assistant about this host. Anything that changes state needs your approval first.", - "terminalPanelPlaceholder": "Ask about this host...", - "noProvidersConfigured": "No AI provider is configured yet. Add one in the AI assistant tab.", - "runsInOpenTerminal": "Runs in your open terminal session.", + "toolResult": "परिणाम", + "statusApplied": "लागू किया गया", + "statusRejected": "अस्वीकार कर दिया", + "proposalApplied": "परिवर्तन लागू हो गया", + "proposalApplyFailed": "परिवर्तन लागू नहीं हो सका", + "proposalRejectFailed": "परिवर्तन को अस्वीकार नहीं किया जा सका", + "enableTitle": "एआई सहायक को सक्रिय करें", + "enableDescription": "सहायक को आपकी सेटअप प्रक्रिया पढ़ने दें और वह आपके अनुमोदन के लिए परिवर्तन सुझाएगा।", + "readOnlyCommands": "केवल पढ़ने योग्य डायग्नोस्टिक कमांड की अनुमति दें", + "readOnlyCommandsDescription": "सहायक बिना पूछे ही df और uptime जैसे कुछ सुरक्षित कमांड चला सकता है। सर्वर में कोई भी बदलाव करने का प्रस्ताव हमेशा पहले दिया जाता है।", + "modelDetectFailed": "प्रदाता से संपर्क नहीं हो सका, इसलिए यह एक सामान्य सूची है। आप किसी भी मॉडल का नाम टाइप कर सकते हैं।", + "modelCustom": "मॉडल का नाम दर्ज करें", + "modelRefresh": "सूची रीफ़्रेश करें", + "modelPlaceholder": "कोई मॉडल चुनें या टाइप करें", + "attachHint": "किसी होस्ट, स्निपेट या ऑटोमेशन को संदर्भित करने के लिए @ टाइप करें। आपके अनुमोदन के लिए परिवर्तन प्रस्तावित किए जा रहे हैं।", + "runCommandTitle": "कमांड चलाएँ", + "assistant": "एआई सहायक", + "terminalPanelEmpty": "इस होस्ट के बारे में असिस्टेंट से पूछें। किसी भी स्थिति में बदलाव के लिए पहले आपकी स्वीकृति आवश्यक है।", + "terminalPanelPlaceholder": "इस होस्ट के बारे में पूछें...", + "noProvidersConfigured": "अभी तक कोई एआई प्रदाता कॉन्फ़िगर नहीं किया गया है। एआई सहायक टैब में एक जोड़ें।", + "runsInOpenTerminal": "यह आपके खुले टर्मिनल सत्र में चलता है।", "runInTerminal": "चलाएं", - "terminalContextPrefill": "Here is my terminal output:\n\n{{output}}\n\n", + "terminalContextPrefill": "यह मेरे टर्मिनल का आउटपुट है:\n\n{{output}}\n\n", "secrets": { - "shareApiKey": "Let other features use your AI provider API key for their own requests. The key is never copied, and you can revoke this at any time." + "shareApiKey": "अन्य सुविधाओं को अपने अनुरोधों के लिए आपके एआई प्रदाता एपीआई कुंजी का उपयोग करने दें। कुंजी की कभी प्रतिलिपि नहीं बनाई जाती है, और आप इसे किसी भी समय रद्द कर सकते हैं।" } }, "nav": { - "ai": "AI" + "ai": "ऐ" }, "onboarding": { - "aiTitle": "AI assistant", - "aiIntro": "Termix can include an optional AI assistant. You can change this later in your settings.", - "aiSkipTitle": "Leave it off", - "aiSkipDesc": "Termix works as it does now. The assistant stays hidden.", - "aiEnableTitle": "Turn it on", - "aiEnableDesc": "Adds an assistant that reads your setup and suggests changes you approve. Needs a provider you supply, such as a local Ollama.", - "aiNote": "Nothing is sent anywhere until you add a provider and send a message." + "aiTitle": "एआई सहायक", + "aiIntro": "टर्मिक्स में एक वैकल्पिक एआई सहायक शामिल हो सकता है। आप इसे बाद में अपनी सेटिंग्स में बदल सकते हैं।", + "aiSkipTitle": "इसे बंद कर दो", + "aiSkipDesc": "टर्मिक्स अभी की तरह ही काम करता है। असिस्टेंट छिपा रहता है।", + "aiEnableTitle": "इसे चालू करें", + "aiEnableDesc": "यह एक सहायक सुविधा जोड़ता है जो आपके सेटअप को पढ़ता है और आपके द्वारा स्वीकृत किए जाने वाले परिवर्तनों का सुझाव देता है। इसके लिए आपको एक प्रदाता उपलब्ध कराना होगा, जैसे कि स्थानीय ओलामा।", + "aiNote": "जब तक आप कोई प्रदाता नहीं जोड़ते और संदेश नहीं भेजते, तब तक कुछ भी कहीं नहीं भेजा जाता।" }, "hosts": { "docsLink": "दस्तावेज़ देखें" @@ -191,5 +191,8 @@ "reconnecting": "Reconnecting and restoring messages…", "unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue" + }, + "plugin": { + "name": "AI Assistant" } } diff --git a/plugins/ai/locales/translated/hu_HU.json b/plugins/ai/locales/translated/hu_HU.json index 913ee669e..68213833f 100644 --- a/plugins/ai/locales/translated/hu_HU.json +++ b/plugins/ai/locales/translated/hu_HU.json @@ -191,5 +191,8 @@ "reconnecting": "Reconnecting and restoring messages…", "unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue" + }, + "plugin": { + "name": "AI Assistant" } } diff --git a/plugins/ai/locales/translated/id_ID.json b/plugins/ai/locales/translated/id_ID.json index 3605ad2be..867d64006 100644 --- a/plugins/ai/locales/translated/id_ID.json +++ b/plugins/ai/locales/translated/id_ID.json @@ -1,120 +1,120 @@ { "permissions": { "use": { - "title": "Use the assistant", - "description": "Open the assistant and ask it things." + "title": "Gunakan asisten", + "description": "Buka asisten dan ajukan pertanyaan kepadanya." }, "manage_providers": { - "title": "Manage providers", - "description": "Add, edit and remove the AI providers and their API keys." + "title": "Mengelola penyedia", + "description": "Tambahkan, edit, dan hapus penyedia AI dan kunci API mereka." }, "apply_proposals": { - "title": "Apply proposals", - "description": "Let the assistant carry out the changes it suggests." + "title": "Ajukan proposal", + "description": "Biarkan asisten tersebut menjalankan perubahan yang disarankannya." }, "services.use": { - "title": "Use AI from other features", - "description": "Other features may call the assistant on your behalf." + "title": "Gunakan AI dari fitur lain.", + "description": "Fitur lainnya mungkin akan memanggil asisten atas nama Anda." }, "secrets.share": { - "title": "Share the API key", - "description": "Other features may use the stored AI API key without seeing it." + "title": "Bagikan kunci API", + "description": "Fitur lain mungkin menggunakan kunci API AI yang tersimpan tanpa mengetahuinya." } }, "settings": { - "assistantUnavailable": "The AI assistant is turned off on this server.", - "providersNeedOptIn": "Turn on the AI assistant above to add providers.", + "assistantUnavailable": "Asisten AI dinonaktifkan di server ini.", + "providersNeedOptIn": "Aktifkan asisten AI di atas untuk menambahkan penyedia.", "admin": { "globallyEnabled": { - "label": "AI assistant", - "description": "Let users turn on the AI assistant. While this is off, the assistant is hidden and blocked for everyone." + "label": "Asisten AI", + "description": "Izinkan pengguna untuk mengaktifkan asisten AI. Saat dinonaktifkan, asisten akan disembunyikan dan diblokir untuk semua orang." }, "privateEndpoints": { - "label": "Allowed private AI hosts", - "description": "Hosts on your private network that users may point a provider at, such as a self-hosted Ollama. Put one host on each line." + "label": "Host AI pribadi yang diizinkan", + "description": "Host di jaringan pribadi Anda yang dapat diarahkan pengguna ke penyedia layanan, seperti Ollama yang dihosting sendiri. Letakkan satu host di setiap baris." } }, "host": { "enableAiAssistant": { - "label": "Enable AI Assistant", - "description": "Allow the AI assistant to help in this host's terminal. Off by default, and still needs AI enabled for your account." + "label": "Aktifkan Asisten AI", + "description": "Izinkan asisten AI untuk membantu di terminal host ini. Secara default dinonaktifkan, dan AI tetap perlu diaktifkan untuk akun Anda." } } }, "ai": { - "title": "Assistant", - "send": "Send", - "stop": "Stop", - "save": "Save", - "cancel": "Cancel", - "running": "running", - "approve": "Approve", - "reject": "Reject", - "inputPlaceholder": "Ask about your servers, or describe a change to propose", - "selectProvider": "Select a provider", - "providerSettings": "Provider settings", - "addProvider": "Add provider", - "editProvider": "Edit provider", - "removeProvider": "Remove provider", - "providerType": "Provider", - "providerLabel": "Name", - "providerLabelPlaceholder": "For example: Local Ollama", - "baseUrl": "Server address", - "apiKey": "API key", - "defaultModel": "Default model", - "defaultModelPlaceholder": "For example: llama3.1 or claude-opus-5", - "labelRequired": "Give this provider a name", - "providerSaveFailed": "Could not save the provider", - "providerUpdated": "Provider updated", - "providerDeleteFailed": "Could not remove the provider", - "privateEndpointHint": "Addresses on your private network need an administrator to allow the host first.", + "title": "Asisten", + "send": "Mengirim", + "stop": "Berhenti", + "save": "Menyimpan", + "cancel": "Membatalkan", + "running": "berlari", + "approve": "Menyetujui", + "reject": "Menolak", + "inputPlaceholder": "Tanyakan tentang server Anda, atau jelaskan perubahan yang ingin Anda usulkan.", + "selectProvider": "Pilih penyedia", + "providerSettings": "Pengaturan penyedia", + "addProvider": "Tambahkan penyedia", + "editProvider": "Penyedia pengeditan", + "removeProvider": "Hapus penyedia", + "providerType": "Penyedia", + "providerLabel": "Nama", + "providerLabelPlaceholder": "Contohnya: Ollama setempat", + "baseUrl": "Alamat server", + "apiKey": "Kunci API", + "defaultModel": "Model default", + "defaultModelPlaceholder": "Misalnya: llama3.1 atau claude-opus-5", + "labelRequired": "Beri nama penyedia ini", + "providerSaveFailed": "Penyedia layanan tidak dapat disimpan.", + "providerUpdated": "Penyedia diperbarui", + "providerDeleteFailed": "Penyedia layanan tidak dapat dihapus.", + "privateEndpointHint": "Alamat-alamat di jaringan pribadi Anda memerlukan izin administrator terlebih dahulu untuk host tersebut.", "providerOllama": "Ollama", - "providerAnthropic": "Anthropic", + "providerAnthropic": "Antropis", "providerOpenai": "OpenAI", "providerGemini": "Google Gemini", - "providerOpenaiCompatible": "OpenAI compatible", - "toolArguments": "Input", - "toolResult": "Result", - "statusApplied": "Applied", - "statusRejected": "Rejected", - "proposalApplied": "Change applied", - "proposalApplyFailed": "Could not apply the change", - "proposalRejectFailed": "Could not reject the change", - "enableTitle": "Enable the AI assistant", - "enableDescription": "Let the assistant read your setup and suggest changes for you to approve.", - "readOnlyCommands": "Allow read-only diagnostic commands", - "readOnlyCommandsDescription": "The assistant may run a short list of safe commands like df and uptime without asking each time. Anything that changes a server is always proposed first.", - "modelDetectFailed": "Could not reach the provider, so this is a general list. You can type any model name.", - "modelCustom": "Enter a model name", - "modelRefresh": "Refresh list", - "modelPlaceholder": "Choose or type a model", - "attachHint": "Type @ to reference a host, snippet or automation. Changes are proposed for you to approve.", - "runCommandTitle": "Run command", - "assistant": "AI Assistant", - "terminalPanelEmpty": "Ask the assistant about this host. Anything that changes state needs your approval first.", - "terminalPanelPlaceholder": "Ask about this host...", - "noProvidersConfigured": "No AI provider is configured yet. Add one in the AI assistant tab.", - "runsInOpenTerminal": "Runs in your open terminal session.", - "runInTerminal": "Run", - "terminalContextPrefill": "Here is my terminal output:\n\n{{output}}\n\n", + "providerOpenaiCompatible": "Kompatibel dengan OpenAI", + "toolArguments": "Masukan", + "toolResult": "Hasil", + "statusApplied": "Terapan", + "statusRejected": "Ditolak", + "proposalApplied": "Perubahan diterapkan", + "proposalApplyFailed": "Perubahan tidak dapat diterapkan.", + "proposalRejectFailed": "Tidak bisa menolak perubahan tersebut", + "enableTitle": "Aktifkan asisten AI", + "enableDescription": "Biarkan asisten membaca pengaturan Anda dan menyarankan perubahan yang perlu Anda setujui.", + "readOnlyCommands": "Izinkan perintah diagnostik hanya baca.", + "readOnlyCommandsDescription": "Asisten dapat menjalankan daftar singkat perintah aman seperti df dan uptime tanpa bertanya setiap kali. Apa pun yang mengubah server selalu diusulkan terlebih dahulu.", + "modelDetectFailed": "Tidak dapat menghubungi penyedia, jadi ini adalah daftar umum. Anda dapat mengetikkan nama model apa pun.", + "modelCustom": "Masukkan nama model", + "modelRefresh": "Perbarui daftar", + "modelPlaceholder": "Pilih atau ketik model", + "attachHint": "Ketik @ untuk merujuk ke host, cuplikan kode, atau otomatisasi. Perubahan diajukan untuk Anda setujui.", + "runCommandTitle": "Jalankan perintah", + "assistant": "Asisten AI", + "terminalPanelEmpty": "Tanyakan kepada asisten tentang tuan rumah ini. Segala sesuatu yang berubah status memerlukan persetujuan Anda terlebih dahulu.", + "terminalPanelPlaceholder": "Tanyakan tentang tuan rumah ini...", + "noProvidersConfigured": "Belum ada penyedia AI yang dikonfigurasi. Tambahkan satu di tab asisten AI.", + "runsInOpenTerminal": "Berjalan di sesi terminal Anda yang sedang terbuka.", + "runInTerminal": "Berlari", + "terminalContextPrefill": "Berikut adalah output terminal saya:\n\n{{output}}\n\n", "secrets": { - "shareApiKey": "Let other features use your AI provider API key for their own requests. The key is never copied, and you can revoke this at any time." + "shareApiKey": "Izinkan fitur lain menggunakan kunci API penyedia AI Anda untuk permintaan mereka sendiri. Kunci tersebut tidak pernah disalin, dan Anda dapat mencabutnya kapan saja." } }, "nav": { "ai": "AI" }, "onboarding": { - "aiTitle": "AI assistant", - "aiIntro": "Termix can include an optional AI assistant. You can change this later in your settings.", - "aiSkipTitle": "Leave it off", - "aiSkipDesc": "Termix works as it does now. The assistant stays hidden.", - "aiEnableTitle": "Turn it on", - "aiEnableDesc": "Adds an assistant that reads your setup and suggests changes you approve. Needs a provider you supply, such as a local Ollama.", - "aiNote": "Nothing is sent anywhere until you add a provider and send a message." + "aiTitle": "Asisten AI", + "aiIntro": "Termix dapat menyertakan asisten AI opsional. Anda dapat mengubahnya nanti di pengaturan Anda.", + "aiSkipTitle": "Biarkan saja", + "aiSkipDesc": "Termix berfungsi seperti sekarang. Asisten tetap tersembunyi.", + "aiEnableTitle": "Nyalakan", + "aiEnableDesc": "Menambahkan asisten yang membaca pengaturan Anda dan menyarankan perubahan yang Anda setujui. Membutuhkan penyedia yang Anda berikan, seperti Ollama lokal.", + "aiNote": "Tidak ada data yang dikirim ke mana pun sampai Anda menambahkan penyedia dan mengirim pesan." }, "hosts": { - "docsLink": "View docs" + "docsLink": "Lihat dokumen" }, "agents": { "title": "AI Agent", @@ -191,5 +191,8 @@ "reconnecting": "Reconnecting and restoring messages…", "unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue" + }, + "plugin": { + "name": "AI Assistant" } } diff --git a/plugins/ai/locales/translated/it_IT.json b/plugins/ai/locales/translated/it_IT.json index cf6e9f0a1..fbef060cf 100644 --- a/plugins/ai/locales/translated/it_IT.json +++ b/plugins/ai/locales/translated/it_IT.json @@ -191,5 +191,8 @@ "reconnecting": "Reconnecting and restoring messages…", "unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue" + }, + "plugin": { + "name": "AI Assistant" } } diff --git a/plugins/ai/locales/translated/ja_JP.json b/plugins/ai/locales/translated/ja_JP.json index b477851ec..cab8c0ae6 100644 --- a/plugins/ai/locales/translated/ja_JP.json +++ b/plugins/ai/locales/translated/ja_JP.json @@ -191,5 +191,8 @@ "reconnecting": "Reconnecting and restoring messages…", "unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue" + }, + "plugin": { + "name": "AI Assistant" } } diff --git a/plugins/ai/locales/translated/ko_KR.json b/plugins/ai/locales/translated/ko_KR.json index 807818108..ff76a33a4 100644 --- a/plugins/ai/locales/translated/ko_KR.json +++ b/plugins/ai/locales/translated/ko_KR.json @@ -191,5 +191,8 @@ "reconnecting": "Reconnecting and restoring messages…", "unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue" + }, + "plugin": { + "name": "AI Assistant" } } diff --git a/plugins/ai/locales/translated/nl_NL.json b/plugins/ai/locales/translated/nl_NL.json index 8a6b30df4..2f88416ec 100644 --- a/plugins/ai/locales/translated/nl_NL.json +++ b/plugins/ai/locales/translated/nl_NL.json @@ -191,5 +191,8 @@ "reconnecting": "Reconnecting and restoring messages…", "unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue" + }, + "plugin": { + "name": "AI Assistant" } } diff --git a/plugins/ai/locales/translated/no_NO.json b/plugins/ai/locales/translated/no_NO.json index b5141fd4e..eeaddb4a8 100644 --- a/plugins/ai/locales/translated/no_NO.json +++ b/plugins/ai/locales/translated/no_NO.json @@ -1,120 +1,120 @@ { "permissions": { "use": { - "title": "Use the assistant", - "description": "Open the assistant and ask it things." + "title": "Bruk assistenten", + "description": "Åpne assistenten og spør den om ting." }, "manage_providers": { - "title": "Manage providers", - "description": "Add, edit and remove the AI providers and their API keys." + "title": "Administrer leverandører", + "description": "Legg til, rediger og fjern AI-leverandørene og API-nøklene deres." }, "apply_proposals": { - "title": "Apply proposals", - "description": "Let the assistant carry out the changes it suggests." + "title": "Bruk forslag", + "description": "La assistenten utføre endringene den foreslår." }, "services.use": { - "title": "Use AI from other features", - "description": "Other features may call the assistant on your behalf." + "title": "Bruk AI fra andre funksjoner", + "description": "Andre funksjoner kan ringe assistenten på dine vegne." }, "secrets.share": { - "title": "Share the API key", - "description": "Other features may use the stored AI API key without seeing it." + "title": "Del API-nøkkelen", + "description": "Andre funksjoner kan bruke den lagrede AI API-nøkkelen uten å se den." } }, "settings": { - "assistantUnavailable": "The AI assistant is turned off on this server.", - "providersNeedOptIn": "Turn on the AI assistant above to add providers.", + "assistantUnavailable": "AI-assistenten er slått av på denne serveren.", + "providersNeedOptIn": "Slå på AI-assistenten ovenfor for å legge til leverandører.", "admin": { "globallyEnabled": { - "label": "AI assistant", - "description": "Let users turn on the AI assistant. While this is off, the assistant is hidden and blocked for everyone." + "label": "AI-assistent", + "description": "La brukere slå på AI-assistenten. Mens dette er av, er assistenten skjult og blokkert for alle." }, "privateEndpoints": { - "label": "Allowed private AI hosts", - "description": "Hosts on your private network that users may point a provider at, such as a self-hosted Ollama. Put one host on each line." + "label": "Tillatte private AI-verter", + "description": "Verter på ditt private nettverk som brukere kan peke en leverandør til, for eksempel en selvhostet Ollama. Plasser én vert på hver linje." } }, "host": { "enableAiAssistant": { - "label": "Enable AI Assistant", - "description": "Allow the AI assistant to help in this host's terminal. Off by default, and still needs AI enabled for your account." + "label": "Aktiver AI-assistent", + "description": "Tillat at AI-assistenten hjelper til i denne vertens terminal. Av som standard, og krever fortsatt at AI er aktivert for kontoen din." } } }, "ai": { - "title": "Assistant", - "send": "Send", + "title": "Assistent", + "send": "Sende", "stop": "Stopp", "save": "Lagre", "cancel": "Avbryt", "running": "kjører", - "approve": "Approve", - "reject": "Reject", - "inputPlaceholder": "Ask about your servers, or describe a change to propose", - "selectProvider": "Select a provider", - "providerSettings": "Provider settings", - "addProvider": "Add provider", - "editProvider": "Edit provider", - "removeProvider": "Remove provider", - "providerType": "Provider", + "approve": "Vedta", + "reject": "Avvis", + "inputPlaceholder": "Spør om servitørene dine, eller beskriv en endring du vil foreslå", + "selectProvider": "Velg en leverandør", + "providerSettings": "Leverandørinnstillinger", + "addProvider": "Legg til leverandør", + "editProvider": "Rediger leverandør", + "removeProvider": "Fjern leverandør", + "providerType": "Leverandør", "providerLabel": "Navn", - "providerLabelPlaceholder": "For example: Local Ollama", - "baseUrl": "Server address", - "apiKey": "API key", - "defaultModel": "Default model", - "defaultModelPlaceholder": "For example: llama3.1 or claude-opus-5", - "labelRequired": "Give this provider a name", - "providerSaveFailed": "Could not save the provider", - "providerUpdated": "Provider updated", - "providerDeleteFailed": "Could not remove the provider", - "privateEndpointHint": "Addresses on your private network need an administrator to allow the host first.", + "providerLabelPlaceholder": "For eksempel: Lokal Ollama", + "baseUrl": "Serveradresse", + "apiKey": "API-nøkkel", + "defaultModel": "Standardmodell", + "defaultModelPlaceholder": "For eksempel: llama3.1 eller claude-opus-5", + "labelRequired": "Gi denne leverandøren et navn", + "providerSaveFailed": "Kunne ikke lagre leverandøren", + "providerUpdated": "Leverandøren er oppdatert", + "providerDeleteFailed": "Kunne ikke fjerne leverandøren", + "privateEndpointHint": "Adresser på ditt private nettverk krever at en administrator tillater verten først.", "providerOllama": "Ollama", - "providerAnthropic": "Anthropic", - "providerOpenai": "OpenAI", + "providerAnthropic": "Antropisk", + "providerOpenai": "Åpen kunstig intelligens", "providerGemini": "Google Gemini", - "providerOpenaiCompatible": "OpenAI compatible", - "toolArguments": "Input", - "toolResult": "Result", - "statusApplied": "Applied", - "statusRejected": "Rejected", - "proposalApplied": "Change applied", - "proposalApplyFailed": "Could not apply the change", - "proposalRejectFailed": "Could not reject the change", - "enableTitle": "Enable the AI assistant", - "enableDescription": "Let the assistant read your setup and suggest changes for you to approve.", - "readOnlyCommands": "Allow read-only diagnostic commands", - "readOnlyCommandsDescription": "The assistant may run a short list of safe commands like df and uptime without asking each time. Anything that changes a server is always proposed first.", - "modelDetectFailed": "Could not reach the provider, so this is a general list. You can type any model name.", - "modelCustom": "Enter a model name", - "modelRefresh": "Refresh list", - "modelPlaceholder": "Choose or type a model", - "attachHint": "Type @ to reference a host, snippet or automation. Changes are proposed for you to approve.", - "runCommandTitle": "Run command", - "assistant": "AI Assistant", - "terminalPanelEmpty": "Ask the assistant about this host. Anything that changes state needs your approval first.", - "terminalPanelPlaceholder": "Ask about this host...", - "noProvidersConfigured": "No AI provider is configured yet. Add one in the AI assistant tab.", - "runsInOpenTerminal": "Runs in your open terminal session.", + "providerOpenaiCompatible": "OpenAI-kompatibel", + "toolArguments": "Inndata", + "toolResult": "Resultat", + "statusApplied": "Anvendt", + "statusRejected": "Avvist", + "proposalApplied": "Endringen er brukt", + "proposalApplyFailed": "Kunne ikke bruke endringen", + "proposalRejectFailed": "Kunne ikke avvise endringen", + "enableTitle": "Aktiver AI-assistenten", + "enableDescription": "La assistenten lese oppsettet ditt og foreslå endringer du kan godkjenne.", + "readOnlyCommands": "Tillat skrivebeskyttede diagnostiske kommandoer", + "readOnlyCommandsDescription": "Assistenten kan kjøre en kort liste med sikre kommandoer som df og uptime uten å spørre hver gang. Alt som endrer en server blir alltid foreslått først.", + "modelDetectFailed": "Kunne ikke nå leverandøren, så dette er en generell liste. Du kan skrive inn et hvilket som helst modellnavn.", + "modelCustom": "Skriv inn et modellnavn", + "modelRefresh": "Oppdater listen", + "modelPlaceholder": "Velg eller skriv inn en modell", + "attachHint": "Skriv inn @ for å referere til en vert, et kodeutdrag eller en automatisering. Endringer foreslås som du kan godkjenne.", + "runCommandTitle": "Kjør kommandoen", + "assistant": "AI-assistent", + "terminalPanelEmpty": "Spør assistenten om denne verten. Alt som endrer status trenger din godkjenning først.", + "terminalPanelPlaceholder": "Spør om denne verten...", + "noProvidersConfigured": "Ingen AI-leverandør er konfigurert ennå. Legg til en i AI-assistent-fanen.", + "runsInOpenTerminal": "Kjører i din åpne terminaløkt.", "runInTerminal": "Kjør", - "terminalContextPrefill": "Here is my terminal output:\n\n{{output}}\n\n", + "terminalContextPrefill": "Her er terminalutgangen min:\n\n{{output}}\n\n", "secrets": { - "shareApiKey": "Let other features use your AI provider API key for their own requests. The key is never copied, and you can revoke this at any time." + "shareApiKey": "La andre funksjoner bruke API-nøkkelen til AI-leverandøren din for sine egne forespørsler. Nøkkelen kopieres aldri, og du kan tilbakekalle den når som helst." } }, "nav": { "ai": "AI" }, "onboarding": { - "aiTitle": "AI assistant", - "aiIntro": "Termix can include an optional AI assistant. You can change this later in your settings.", - "aiSkipTitle": "Leave it off", - "aiSkipDesc": "Termix works as it does now. The assistant stays hidden.", - "aiEnableTitle": "Turn it on", - "aiEnableDesc": "Adds an assistant that reads your setup and suggests changes you approve. Needs a provider you supply, such as a local Ollama.", - "aiNote": "Nothing is sent anywhere until you add a provider and send a message." + "aiTitle": "AI-assistent", + "aiIntro": "Termix kan inkludere en valgfri AI-assistent. Du kan endre dette senere i innstillingene dine.", + "aiSkipTitle": "La det være av", + "aiSkipDesc": "Termix fungerer som den gjør nå. Assistenten forblir skjult.", + "aiEnableTitle": "Slå den på", + "aiEnableDesc": "Legger til en assistent som leser oppsettet ditt og foreslår endringer du godkjenner. Krever en leverandør du oppgir, for eksempel en lokal Ollama.", + "aiNote": "Ingenting sendes noe sted før du legger til en leverandør og sender en melding." }, "hosts": { - "docsLink": "View docs" + "docsLink": "Vis dokumenter" }, "agents": { "title": "AI Agent", @@ -191,5 +191,8 @@ "reconnecting": "Reconnecting and restoring messages…", "unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue" + }, + "plugin": { + "name": "AI Assistant" } } diff --git a/plugins/ai/locales/translated/pl_PL.json b/plugins/ai/locales/translated/pl_PL.json index 8695a871d..55bc57021 100644 --- a/plugins/ai/locales/translated/pl_PL.json +++ b/plugins/ai/locales/translated/pl_PL.json @@ -1,29 +1,29 @@ { "permissions": { "use": { - "title": "Use the assistant", - "description": "Open the assistant and ask it things." + "title": "Użyj asystenta", + "description": "Otwórz asystenta i zadaj mu pytania." }, "manage_providers": { - "title": "Manage providers", - "description": "Add, edit and remove the AI providers and their API keys." + "title": "Zarządzaj dostawcami", + "description": "Dodawaj, edytuj i usuwaj dostawców sztucznej inteligencji oraz ich klucze API." }, "apply_proposals": { - "title": "Apply proposals", - "description": "Let the assistant carry out the changes it suggests." + "title": "Zastosuj propozycje", + "description": "Pozwól asystentowi wprowadzić sugerowane zmiany." }, "services.use": { - "title": "Use AI from other features", - "description": "Other features may call the assistant on your behalf." + "title": "Użyj sztucznej inteligencji z innych funkcji", + "description": "Inne funkcje mogą umożliwiać wywoływanie asystenta w Twoim imieniu." }, "secrets.share": { - "title": "Share the API key", - "description": "Other features may use the stored AI API key without seeing it." + "title": "Udostępnij klucz API", + "description": "Inne funkcje mogą wykorzystywać zapisany klucz API AI, nawet go nie widząc." } }, "settings": { - "assistantUnavailable": "The AI assistant is turned off on this server.", - "providersNeedOptIn": "Turn on the AI assistant above to add providers.", + "assistantUnavailable": "Asystent AI jest wyłączony na tym serwerze.", + "providersNeedOptIn": "Włącz asystenta AI powyżej, aby dodać dostawców.", "admin": { "globallyEnabled": { "label": "Asystent AI", @@ -31,13 +31,13 @@ }, "privateEndpoints": { "label": "Dozwolone prywatne hosty AI", - "description": "Hosts on your private network that users may point a provider at, such as a self-hosted Ollama. Put one host on each line." + "description": "Hosty w Twojej sieci prywatnej, na które użytkownicy mogą wskazać dostawcę, na przykład samodzielnie hostowany Ollama. Umieść jednego hosta na każdej linii." } }, "host": { "enableAiAssistant": { - "label": "Enable AI Assistant", - "description": "Allow the AI assistant to help in this host's terminal. Off by default, and still needs AI enabled for your account." + "label": "Włącz asystenta AI", + "description": "Zezwól asystentowi AI na pomoc w terminalu tego hosta. Domyślnie wyłączone, ale nadal wymaga włączenia AI na Twoim koncie." } } }, @@ -90,15 +90,15 @@ "modelPlaceholder": "Wybierz lub wpisz model", "attachHint": "Wpisz @, aby odwołać się do hosta, snippetu lub automatyzacji. Zmiany są proponowane do Twojego zatwierdzenia.", "runCommandTitle": "Uruchom polecenie", - "assistant": "AI Assistant", - "terminalPanelEmpty": "Ask the assistant about this host. Anything that changes state needs your approval first.", - "terminalPanelPlaceholder": "Ask about this host...", - "noProvidersConfigured": "No AI provider is configured yet. Add one in the AI assistant tab.", - "runsInOpenTerminal": "Runs in your open terminal session.", + "assistant": "Asystent AI", + "terminalPanelEmpty": "Zapytaj asystenta o tego hosta. Każda zmiana stanu wymaga Twojej zgody.", + "terminalPanelPlaceholder": "Zapytaj o tego gospodarza...", + "noProvidersConfigured": "Nie skonfigurowano jeszcze żadnego dostawcy AI. Dodaj go w zakładce Asystent AI.", + "runsInOpenTerminal": "Działa w otwartej sesji terminalowej.", "runInTerminal": "Uruchom", - "terminalContextPrefill": "Here is my terminal output:\n\n{{output}}\n\n", + "terminalContextPrefill": "Oto wynik mojego terminala:\n\n{{output}}\n\n", "secrets": { - "shareApiKey": "Let other features use your AI provider API key for their own requests. The key is never copied, and you can revoke this at any time." + "shareApiKey": "Pozwól innym funkcjom używać klucza API dostawcy sztucznej inteligencji do własnych żądań. Klucz nigdy nie jest kopiowany i możesz go w dowolnym momencie cofnąć." } }, "nav": { @@ -191,5 +191,8 @@ "reconnecting": "Reconnecting and restoring messages…", "unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue" + }, + "plugin": { + "name": "AI Assistant" } } diff --git a/plugins/ai/locales/translated/pt_BR.json b/plugins/ai/locales/translated/pt_BR.json index a48c4d640..8c7085311 100644 --- a/plugins/ai/locales/translated/pt_BR.json +++ b/plugins/ai/locales/translated/pt_BR.json @@ -1,117 +1,117 @@ { "permissions": { "use": { - "title": "Use the assistant", - "description": "Open the assistant and ask it things." + "title": "Use o assistente", + "description": "Abra o assistente e faça perguntas." }, "manage_providers": { - "title": "Manage providers", - "description": "Add, edit and remove the AI providers and their API keys." + "title": "Gerenciar fornecedores", + "description": "Adicione, edite e remova os fornecedores de IA e suas chaves de API." }, "apply_proposals": { - "title": "Apply proposals", - "description": "Let the assistant carry out the changes it suggests." + "title": "Apresentar propostas", + "description": "Deixe que o assistente execute as alterações que sugerir." }, "services.use": { - "title": "Use AI from other features", - "description": "Other features may call the assistant on your behalf." + "title": "Utilizar IA de outras funcionalidades", + "description": "Outras funcionalidades podem chamar o assistente em seu nome." }, "secrets.share": { - "title": "Share the API key", - "description": "Other features may use the stored AI API key without seeing it." + "title": "Compartilhe a chave da API", + "description": "Outras funcionalidades podem usar a chave da API de IA armazenada sem visualizá-la." } }, "settings": { - "assistantUnavailable": "The AI assistant is turned off on this server.", - "providersNeedOptIn": "Turn on the AI assistant above to add providers.", + "assistantUnavailable": "O assistente de IA está desativado neste servidor.", + "providersNeedOptIn": "Ative o assistente de IA acima para adicionar fornecedores.", "admin": { "globallyEnabled": { - "label": "AI assistant", - "description": "Let users turn on the AI assistant. While this is off, the assistant is hidden and blocked for everyone." + "label": "assistente de IA", + "description": "Permita que os usuários ativem o assistente de IA. Quando estiver desativado, o assistente ficará oculto e bloqueado para todos." }, "privateEndpoints": { - "label": "Allowed private AI hosts", - "description": "Hosts on your private network that users may point a provider at, such as a self-hosted Ollama. Put one host on each line." + "label": "Hosts de IA privados permitidos", + "description": "Servidores na sua rede privada que os usuários podem usar como provedores, como um Ollama auto-hospedado. Coloque um servidor em cada linha." } }, "host": { "enableAiAssistant": { - "label": "Enable AI Assistant", - "description": "Allow the AI assistant to help in this host's terminal. Off by default, and still needs AI enabled for your account." + "label": "Ativar o assistente de IA", + "description": "Permita que o assistente de IA ajude no terminal deste host. Desativado por padrão, mas ainda precisa que a IA esteja ativada para sua conta." } } }, "ai": { - "title": "Assistant", - "send": "Send", - "stop": "Stop", + "title": "Assistente", + "send": "Enviar", + "stop": "Parar", "save": "Salvar", "cancel": "Cancelar", - "running": "running", - "approve": "Approve", - "reject": "Reject", - "inputPlaceholder": "Ask about your servers, or describe a change to propose", - "selectProvider": "Select a provider", - "providerSettings": "Provider settings", - "addProvider": "Add provider", - "editProvider": "Edit provider", - "removeProvider": "Remove provider", - "providerType": "Provider", - "providerLabel": "Name", - "providerLabelPlaceholder": "For example: Local Ollama", - "baseUrl": "Server address", - "apiKey": "API key", - "defaultModel": "Default model", - "defaultModelPlaceholder": "For example: llama3.1 or claude-opus-5", - "labelRequired": "Give this provider a name", - "providerSaveFailed": "Could not save the provider", - "providerUpdated": "Provider updated", - "providerDeleteFailed": "Could not remove the provider", - "privateEndpointHint": "Addresses on your private network need an administrator to allow the host first.", + "running": "correndo", + "approve": "Aprovar", + "reject": "Rejeitar", + "inputPlaceholder": "Pergunte sobre seus servidores ou descreva uma alteração que você gostaria de propor.", + "selectProvider": "Selecione um fornecedor", + "providerSettings": "Configurações do provedor", + "addProvider": "Adicionar provedor", + "editProvider": "Editar provedor", + "removeProvider": "Remover provedor", + "providerType": "Fornecedor", + "providerLabel": "Nome", + "providerLabelPlaceholder": "Por exemplo: Ollama local", + "baseUrl": "Endereço do servidor", + "apiKey": "Chave de API", + "defaultModel": "Modelo padrão", + "defaultModelPlaceholder": "Por exemplo: llama3.1 ou claude-opus-5", + "labelRequired": "Dê um nome a este fornecedor.", + "providerSaveFailed": "Não foi possível salvar o provedor.", + "providerUpdated": "Fornecedor atualizado", + "providerDeleteFailed": "Não foi possível remover o provedor.", + "privateEndpointHint": "Os endereços na sua rede privada precisam que um administrador autorize o host primeiro.", "providerOllama": "Ollama", - "providerAnthropic": "Anthropic", + "providerAnthropic": "Antrópico", "providerOpenai": "OpenAI", "providerGemini": "Google Gemini", - "providerOpenaiCompatible": "OpenAI compatible", + "providerOpenaiCompatible": "Compatível com OpenAI", "toolArguments": "Entrada", - "toolResult": "Result", - "statusApplied": "Applied", - "statusRejected": "Rejected", - "proposalApplied": "Change applied", - "proposalApplyFailed": "Could not apply the change", - "proposalRejectFailed": "Could not reject the change", - "enableTitle": "Enable the AI assistant", - "enableDescription": "Let the assistant read your setup and suggest changes for you to approve.", - "readOnlyCommands": "Allow read-only diagnostic commands", - "readOnlyCommandsDescription": "The assistant may run a short list of safe commands like df and uptime without asking each time. Anything that changes a server is always proposed first.", - "modelDetectFailed": "Could not reach the provider, so this is a general list. You can type any model name.", - "modelCustom": "Enter a model name", - "modelRefresh": "Refresh list", - "modelPlaceholder": "Choose or type a model", - "attachHint": "Type @ to reference a host, snippet or automation. Changes are proposed for you to approve.", - "runCommandTitle": "Run command", - "assistant": "AI Assistant", - "terminalPanelEmpty": "Ask the assistant about this host. Anything that changes state needs your approval first.", - "terminalPanelPlaceholder": "Ask about this host...", - "noProvidersConfigured": "No AI provider is configured yet. Add one in the AI assistant tab.", - "runsInOpenTerminal": "Runs in your open terminal session.", - "runInTerminal": "Run", - "terminalContextPrefill": "Here is my terminal output:\n\n{{output}}\n\n", + "toolResult": "Resultado", + "statusApplied": "Aplicado", + "statusRejected": "Rejeitado", + "proposalApplied": "Alteração aplicada", + "proposalApplyFailed": "Não foi possível aplicar a alteração.", + "proposalRejectFailed": "Não foi possível rejeitar a alteração.", + "enableTitle": "Ative o assistente de IA", + "enableDescription": "Deixe o assistente ler sua configuração e sugerir alterações para você aprovar.", + "readOnlyCommands": "Permitir comandos de diagnóstico somente leitura", + "readOnlyCommandsDescription": "O assistente pode executar uma pequena lista de comandos seguros, como `df` e `uptime`, sem perguntar a cada vez. Qualquer alteração que faça no servidor será sempre sugerida primeiro.", + "modelDetectFailed": "Não foi possível contatar o fornecedor, portanto esta é uma lista genérica. Você pode digitar o nome de qualquer modelo.", + "modelCustom": "Insira o nome do modelo", + "modelRefresh": "Atualizar lista", + "modelPlaceholder": "Selecione ou digite um modelo", + "attachHint": "Digite @ para fazer referência a um host, snippet ou automação. As alterações são propostas para sua aprovação.", + "runCommandTitle": "Executar comando", + "assistant": "Assistente de IA", + "terminalPanelEmpty": "Pergunte ao assistente sobre este anfitrião. Qualquer alteração de estado precisa da sua aprovação prévia.", + "terminalPanelPlaceholder": "Pergunte sobre este anfitrião...", + "noProvidersConfigured": "Nenhum provedor de IA está configurado ainda. Adicione um na aba do assistente de IA.", + "runsInOpenTerminal": "Executa na sua sessão de terminal aberta.", + "runInTerminal": "Correr", + "terminalContextPrefill": "Aqui está a saída do meu terminal:\n\n{{output}}\n\n", "secrets": { - "shareApiKey": "Let other features use your AI provider API key for their own requests. The key is never copied, and you can revoke this at any time." + "shareApiKey": "Permita que outros recursos usem sua chave de API do provedor de IA para suas próprias solicitações. A chave nunca é copiada e você pode revogá-la a qualquer momento." } }, "nav": { - "ai": "AI" + "ai": "IA" }, "onboarding": { - "aiTitle": "AI assistant", - "aiIntro": "Termix can include an optional AI assistant. You can change this later in your settings.", - "aiSkipTitle": "Leave it off", - "aiSkipDesc": "Termix works as it does now. The assistant stays hidden.", - "aiEnableTitle": "Turn it on", - "aiEnableDesc": "Adds an assistant that reads your setup and suggests changes you approve. Needs a provider you supply, such as a local Ollama.", - "aiNote": "Nothing is sent anywhere until you add a provider and send a message." + "aiTitle": "assistente de IA", + "aiIntro": "O Termix pode incluir um assistente de IA opcional. Você pode alterar isso posteriormente nas suas configurações.", + "aiSkipTitle": "Deixe desligado", + "aiSkipDesc": "O Termix funciona como está agora. O assistente permanece oculto.", + "aiEnableTitle": "Ligue-o", + "aiEnableDesc": "Adiciona um assistente que lê sua configuração e sugere alterações que você aprova. Requer um provedor fornecido por você, como um Ollama local.", + "aiNote": "Nada será enviado até que você adicione um provedor e envie uma mensagem." }, "hosts": { "docsLink": "Documentação" @@ -191,5 +191,8 @@ "reconnecting": "Reconnecting and restoring messages…", "unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue" + }, + "plugin": { + "name": "AI Assistant" } } diff --git a/plugins/ai/locales/translated/pt_PT.json b/plugins/ai/locales/translated/pt_PT.json index e03aae197..84675ebdd 100644 --- a/plugins/ai/locales/translated/pt_PT.json +++ b/plugins/ai/locales/translated/pt_PT.json @@ -1,117 +1,117 @@ { "permissions": { "use": { - "title": "Use the assistant", - "description": "Open the assistant and ask it things." + "title": "Utilize o assistente", + "description": "Abra o assistente e coloque questões." }, "manage_providers": { - "title": "Manage providers", - "description": "Add, edit and remove the AI providers and their API keys." + "title": "Gerir fornecedores", + "description": "Adicione, edite e remova os fornecedores de IA e as suas chaves API." }, "apply_proposals": { - "title": "Apply proposals", - "description": "Let the assistant carry out the changes it suggests." + "title": "Apresentar propostas", + "description": "Deixe que o assistente execute as alterações que sugerir." }, "services.use": { - "title": "Use AI from other features", - "description": "Other features may call the assistant on your behalf." + "title": "Utilizar IA de outras funcionalidades", + "description": "Outras funcionalidades podem chamar o assistente em seu nome." }, "secrets.share": { - "title": "Share the API key", - "description": "Other features may use the stored AI API key without seeing it." + "title": "Partilhar a chave da API", + "description": "Outras funcionalidades podem utilizar a chave da API de IA armazenada sem a visualizar." } }, "settings": { - "assistantUnavailable": "The AI assistant is turned off on this server.", - "providersNeedOptIn": "Turn on the AI assistant above to add providers.", + "assistantUnavailable": "O assistente de IA está desativado neste servidor.", + "providersNeedOptIn": "Ative o assistente de IA acima para adicionar fornecedores.", "admin": { "globallyEnabled": { - "label": "AI assistant", - "description": "Let users turn on the AI assistant. While this is off, the assistant is hidden and blocked for everyone." + "label": "assistente de IA", + "description": "Permita que os utilizadores ativem o assistente de IA. Quando estiver desativado, o assistente ficará oculto e bloqueado para todos." }, "privateEndpoints": { - "label": "Allowed private AI hosts", - "description": "Hosts on your private network that users may point a provider at, such as a self-hosted Ollama. Put one host on each line." + "label": "Hosts de IA privados permitidos", + "description": "Servidores na sua rede privada que os utilizadores podem utilizar como fornecedores, como um Ollama auto-hospedado. Coloque um servidor em cada linha." } }, "host": { "enableAiAssistant": { - "label": "Enable AI Assistant", - "description": "Allow the AI assistant to help in this host's terminal. Off by default, and still needs AI enabled for your account." + "label": "Ativar o assistente de IA", + "description": "Permita que o assistente de IA ajude no terminal deste host. Desativado por defeito, mas ainda precisa que a IA esteja ativada para a sua conta." } } }, "ai": { - "title": "Assistant", - "send": "Send", + "title": "Assistente", + "send": "Enviar", "stop": "Stop", "save": "Guardar", "cancel": "Cancelar", "running": "em execução", - "approve": "Approve", - "reject": "Reject", - "inputPlaceholder": "Ask about your servers, or describe a change to propose", - "selectProvider": "Select a provider", - "providerSettings": "Provider settings", - "addProvider": "Add provider", - "editProvider": "Edit provider", - "removeProvider": "Remove provider", - "providerType": "Provider", + "approve": "Aprovar", + "reject": "Rejeitar", + "inputPlaceholder": "Pergunte pelos seus servidores ou descreva uma alteração que gostaria de propor.", + "selectProvider": "Selecione um fornecedor", + "providerSettings": "Configurações do fornecedor", + "addProvider": "Adicionar provedor", + "editProvider": "Editar provedor", + "removeProvider": "Remover fornecedor", + "providerType": "Fornecedor", "providerLabel": "Nome", - "providerLabelPlaceholder": "For example: Local Ollama", - "baseUrl": "Server address", - "apiKey": "API key", - "defaultModel": "Default model", - "defaultModelPlaceholder": "For example: llama3.1 or claude-opus-5", - "labelRequired": "Give this provider a name", - "providerSaveFailed": "Could not save the provider", - "providerUpdated": "Provider updated", - "providerDeleteFailed": "Could not remove the provider", - "privateEndpointHint": "Addresses on your private network need an administrator to allow the host first.", + "providerLabelPlaceholder": "Por exemplo: Ollama local", + "baseUrl": "Endereço do servidor", + "apiKey": "Chave API", + "defaultModel": "Modelo padrão", + "defaultModelPlaceholder": "Por exemplo: llama3.1 ou claude-opus-5", + "labelRequired": "Dê um nome a este fornecedor.", + "providerSaveFailed": "Não foi possível guardar o fornecedor.", + "providerUpdated": "Fornecedor atualizado", + "providerDeleteFailed": "Não foi possível remover o fornecedor.", + "privateEndpointHint": "Os endereços na sua rede privada necessitam que um administrador autorize primeiro o host.", "providerOllama": "Ollama", - "providerAnthropic": "Anthropic", + "providerAnthropic": "Antrópico", "providerOpenai": "OpenAI", "providerGemini": "Google Gemini", - "providerOpenaiCompatible": "OpenAI compatible", + "providerOpenaiCompatible": "Compatível com OpenAI", "toolArguments": "Entrada", - "toolResult": "Result", - "statusApplied": "Applied", - "statusRejected": "Rejected", - "proposalApplied": "Change applied", - "proposalApplyFailed": "Could not apply the change", - "proposalRejectFailed": "Could not reject the change", - "enableTitle": "Enable the AI assistant", - "enableDescription": "Let the assistant read your setup and suggest changes for you to approve.", - "readOnlyCommands": "Allow read-only diagnostic commands", - "readOnlyCommandsDescription": "The assistant may run a short list of safe commands like df and uptime without asking each time. Anything that changes a server is always proposed first.", - "modelDetectFailed": "Could not reach the provider, so this is a general list. You can type any model name.", - "modelCustom": "Enter a model name", - "modelRefresh": "Refresh list", - "modelPlaceholder": "Choose or type a model", - "attachHint": "Type @ to reference a host, snippet or automation. Changes are proposed for you to approve.", - "runCommandTitle": "Run command", - "assistant": "AI Assistant", - "terminalPanelEmpty": "Ask the assistant about this host. Anything that changes state needs your approval first.", - "terminalPanelPlaceholder": "Ask about this host...", - "noProvidersConfigured": "No AI provider is configured yet. Add one in the AI assistant tab.", - "runsInOpenTerminal": "Runs in your open terminal session.", + "toolResult": "Resultado", + "statusApplied": "Aplicado", + "statusRejected": "Rejeitado", + "proposalApplied": "Alteração aplicada", + "proposalApplyFailed": "Não foi possível aplicar a alteração.", + "proposalRejectFailed": "Não foi possível rejeitar a alteração.", + "enableTitle": "Ative o assistente de IA", + "enableDescription": "Deixe o assistente ler a sua configuração e sugerir alterações para que a aprove.", + "readOnlyCommands": "Permitir comandos de diagnóstico de leitura apenas", + "readOnlyCommandsDescription": "O assistente pode executar uma pequena lista de comandos seguros, como `df` e `uptime`, sem perguntar de cada vez. Qualquer alteração que faça no servidor será sempre sugerida em primeiro lugar.", + "modelDetectFailed": "Não foi possível contactar o fornecedor, pelo que esta é uma lista genérica. Pode digitar o nome de qualquer modelo.", + "modelCustom": "Introduza o nome do modelo", + "modelRefresh": "Atualizar lista", + "modelPlaceholder": "Selecione ou introduza um modelo", + "attachHint": "Digite @ para fazer referência a um host, snippet ou automação. As alterações são propostas para a sua aprovação.", + "runCommandTitle": "Executar comando", + "assistant": "Assistente de IA", + "terminalPanelEmpty": "Pergunte ao assistente sobre este anfitrião. Qualquer alteração de estado necessita da sua aprovação prévia.", + "terminalPanelPlaceholder": "Pergunte sobre este anfitrião...", + "noProvidersConfigured": "Nenhum fornecedor de IA está configurado ainda. Adicione um no separador do assistente de IA.", + "runsInOpenTerminal": "Executa na sua sessão de terminal aberta.", "runInTerminal": "Executar", - "terminalContextPrefill": "Here is my terminal output:\n\n{{output}}\n\n", + "terminalContextPrefill": "Eis a saída do meu terminal:\n\n{{output}}\n\n", "secrets": { - "shareApiKey": "Let other features use your AI provider API key for their own requests. The key is never copied, and you can revoke this at any time." + "shareApiKey": "Permita que outros recursos utilizem a sua chave API do fornecedor de IA para os seus próprios pedidos. A chave nunca é copiada e pode revogá-la a qualquer momento." } }, "nav": { - "ai": "AI" + "ai": "IA" }, "onboarding": { - "aiTitle": "AI assistant", - "aiIntro": "Termix can include an optional AI assistant. You can change this later in your settings.", - "aiSkipTitle": "Leave it off", - "aiSkipDesc": "Termix works as it does now. The assistant stays hidden.", - "aiEnableTitle": "Turn it on", - "aiEnableDesc": "Adds an assistant that reads your setup and suggests changes you approve. Needs a provider you supply, such as a local Ollama.", - "aiNote": "Nothing is sent anywhere until you add a provider and send a message." + "aiTitle": "assistente de IA", + "aiIntro": "O Termix pode incluir um assistente de IA opcional. Pode alterar isso posteriormente nas suas definições.", + "aiSkipTitle": "Deixe desligado", + "aiSkipDesc": "O Termix funciona como está agora. O assistente permanece oculto.", + "aiEnableTitle": "Ligue-o", + "aiEnableDesc": "Adiciona um assistente que lê a sua configuração e sugere alterações que aprova. Requer um fornecedor fornecido por si, como um Ollama local.", + "aiNote": "Nada será enviado até que adicione um fornecedor e envie uma mensagem." }, "hosts": { "docsLink": "Ver documentação" @@ -191,5 +191,8 @@ "reconnecting": "Reconnecting and restoring messages…", "unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue" + }, + "plugin": { + "name": "AI Assistant" } } diff --git a/plugins/ai/locales/translated/ro_RO.json b/plugins/ai/locales/translated/ro_RO.json index 71174b46a..9f6fa508b 100644 --- a/plugins/ai/locales/translated/ro_RO.json +++ b/plugins/ai/locales/translated/ro_RO.json @@ -191,5 +191,8 @@ "reconnecting": "Reconnecting and restoring messages…", "unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue" + }, + "plugin": { + "name": "AI Assistant" } } diff --git a/plugins/ai/locales/translated/ru_RU.json b/plugins/ai/locales/translated/ru_RU.json index 7214aa114..05a750032 100644 --- a/plugins/ai/locales/translated/ru_RU.json +++ b/plugins/ai/locales/translated/ru_RU.json @@ -1,117 +1,117 @@ { "permissions": { "use": { - "title": "Use the assistant", - "description": "Open the assistant and ask it things." + "title": "Воспользуйтесь помощником", + "description": "Откройте ассистента и задайте ему вопросы." }, "manage_providers": { - "title": "Manage providers", - "description": "Add, edit and remove the AI providers and their API keys." + "title": "Управление поставщиками", + "description": "Добавляйте, редактируйте и удаляйте поставщиков ИИ и их API-ключи." }, "apply_proposals": { - "title": "Apply proposals", - "description": "Let the assistant carry out the changes it suggests." + "title": "Подайте заявки на участие в тендере.", + "description": "Пусть ассистент внесет предложенные им изменения." }, "services.use": { - "title": "Use AI from other features", - "description": "Other features may call the assistant on your behalf." + "title": "Используйте ИИ из других функций.", + "description": "Другие функции могут вызывать голосового помощника от вашего имени." }, "secrets.share": { - "title": "Share the API key", - "description": "Other features may use the stored AI API key without seeing it." + "title": "Поделитесь ключом API", + "description": "Другие функции могут использовать сохраненный ключ API ИИ, даже не видя его." } }, "settings": { - "assistantUnavailable": "The AI assistant is turned off on this server.", - "providersNeedOptIn": "Turn on the AI assistant above to add providers.", + "assistantUnavailable": "На этом сервере ИИ-помощник отключен.", + "providersNeedOptIn": "Включите ИИ-помощника выше, чтобы добавить поставщиков услуг.", "admin": { "globallyEnabled": { - "label": "AI assistant", - "description": "Let users turn on the AI assistant. While this is off, the assistant is hidden and blocked for everyone." + "label": "ИИ-помощник", + "description": "Разрешите пользователям включить голосового помощника. Если он выключен, помощник скрыт и заблокирован для всех." }, "privateEndpoints": { - "label": "Allowed private AI hosts", - "description": "Hosts on your private network that users may point a provider at, such as a self-hosted Ollama. Put one host on each line." + "label": "Разрешены частные хосты ИИ", + "description": "Разместите на каждой линии по одному хосту в вашей частной сети, на которые пользователи могут направлять запросы провайдера, например, самостоятельно размещенный Ollama." } }, "host": { "enableAiAssistant": { - "label": "Enable AI Assistant", - "description": "Allow the AI assistant to help in this host's terminal. Off by default, and still needs AI enabled for your account." + "label": "Включить ИИ-помощника", + "description": "Разрешите помощнику с искусственным интеллектом помогать на терминале этого хоста. По умолчанию отключено, но для вашей учетной записи ИИ все равно должен быть включен." } } }, "ai": { - "title": "Assistant", - "send": "Send", + "title": "Помощник", + "send": "Отправлять", "stop": "Остановить", "save": "Сохранить", "cancel": "Отмена", "running": "выполняется", - "approve": "Approve", - "reject": "Reject", - "inputPlaceholder": "Ask about your servers, or describe a change to propose", - "selectProvider": "Select a provider", - "providerSettings": "Provider settings", - "addProvider": "Add provider", - "editProvider": "Edit provider", - "removeProvider": "Remove provider", - "providerType": "Provider", + "approve": "Утвердить", + "reject": "Отклонять", + "inputPlaceholder": "Поинтересуйтесь состоянием ваших серверов или предложите внести изменения.", + "selectProvider": "Выберите поставщика", + "providerSettings": "Настройки поставщика", + "addProvider": "Добавить поставщика", + "editProvider": "Поставщик редактирования", + "removeProvider": "Удалить поставщика", + "providerType": "Поставщик", "providerLabel": "Название", - "providerLabelPlaceholder": "For example: Local Ollama", - "baseUrl": "Server address", - "apiKey": "API key", - "defaultModel": "Default model", - "defaultModelPlaceholder": "For example: llama3.1 or claude-opus-5", - "labelRequired": "Give this provider a name", - "providerSaveFailed": "Could not save the provider", - "providerUpdated": "Provider updated", - "providerDeleteFailed": "Could not remove the provider", - "privateEndpointHint": "Addresses on your private network need an administrator to allow the host first.", - "providerOllama": "Ollama", - "providerAnthropic": "Anthropic", + "providerLabelPlaceholder": "Например: Местная лама", + "baseUrl": "Адрес сервера", + "apiKey": "ключ API", + "defaultModel": "Модель по умолчанию", + "defaultModelPlaceholder": "Например: llama3.1 или claude-opus-5", + "labelRequired": "Укажите имя этого поставщика услуг.", + "providerSaveFailed": "Не удалось сохранить поставщика услуг.", + "providerUpdated": "Поставщик обновлен", + "providerDeleteFailed": "Не удалось удалить поставщика услуг.", + "privateEndpointHint": "Для доступа к адресам в вашей частной сети необходимо предварительное разрешение администратора.", + "providerOllama": "оллама", + "providerAnthropic": "Антропический", "providerOpenai": "OpenAI", "providerGemini": "Google Gemini", - "providerOpenaiCompatible": "OpenAI compatible", + "providerOpenaiCompatible": "Совместимость с OpenAI", "toolArguments": "Ввод", - "toolResult": "Result", - "statusApplied": "Applied", - "statusRejected": "Rejected", - "proposalApplied": "Change applied", - "proposalApplyFailed": "Could not apply the change", - "proposalRejectFailed": "Could not reject the change", - "enableTitle": "Enable the AI assistant", - "enableDescription": "Let the assistant read your setup and suggest changes for you to approve.", - "readOnlyCommands": "Allow read-only diagnostic commands", - "readOnlyCommandsDescription": "The assistant may run a short list of safe commands like df and uptime without asking each time. Anything that changes a server is always proposed first.", - "modelDetectFailed": "Could not reach the provider, so this is a general list. You can type any model name.", - "modelCustom": "Enter a model name", - "modelRefresh": "Refresh list", - "modelPlaceholder": "Choose or type a model", - "attachHint": "Type @ to reference a host, snippet or automation. Changes are proposed for you to approve.", - "runCommandTitle": "Run command", - "assistant": "AI Assistant", - "terminalPanelEmpty": "Ask the assistant about this host. Anything that changes state needs your approval first.", - "terminalPanelPlaceholder": "Ask about this host...", - "noProvidersConfigured": "No AI provider is configured yet. Add one in the AI assistant tab.", - "runsInOpenTerminal": "Runs in your open terminal session.", + "toolResult": "Результат", + "statusApplied": "Применяемый", + "statusRejected": "Отклоненный", + "proposalApplied": "Внесены изменения.", + "proposalApplyFailed": "Не удалось применить изменения.", + "proposalRejectFailed": "Не мог отклонить изменение.", + "enableTitle": "Включите ИИ-помощника", + "enableDescription": "Позвольте ассистенту ознакомиться с вашими настройками и предложить изменения для утверждения.", + "readOnlyCommands": "Разрешить диагностические команды только для чтения", + "readOnlyCommandsDescription": "Ассистент может выполнить короткий список безопасных команд, таких как df и uptime, не запрашивая подтверждения каждый раз. Любая команда, изменяющая состояние сервера, всегда предлагается в первую очередь.", + "modelDetectFailed": "Не удалось связаться с поставщиком, поэтому это общий список. Вы можете ввести любое название модели.", + "modelCustom": "Введите название модели", + "modelRefresh": "Обновить список", + "modelPlaceholder": "Выберите или введите модель", + "attachHint": "Введите @ для ссылки на хост, фрагмент кода или автоматизацию. Предлагаются изменения для вашего утверждения.", + "runCommandTitle": "Выполните команду", + "assistant": "ИИ-помощник", + "terminalPanelEmpty": "Спросите помощника об этом хосте. Любое изменение состояния требует вашего предварительного одобрения.", + "terminalPanelPlaceholder": "Спросите об этом хостинге...", + "noProvidersConfigured": "Поставщик ИИ пока не настроен. Добавьте его на вкладке «Помощник ИИ».", + "runsInOpenTerminal": "Запускается в открытой терминальной сессии.", "runInTerminal": "Запустить", - "terminalContextPrefill": "Here is my terminal output:\n\n{{output}}\n\n", + "terminalContextPrefill": "Вот вывод моего терминала:\n\n{{output}}\n\n", "secrets": { - "shareApiKey": "Let other features use your AI provider API key for their own requests. The key is never copied, and you can revoke this at any time." + "shareApiKey": "Разрешите другим функциям использовать ваш API-ключ поставщика ИИ для своих запросов. Ключ никогда не копируется, и вы можете отозвать его в любое время." } }, "nav": { - "ai": "AI" + "ai": "ИИ" }, "onboarding": { - "aiTitle": "AI assistant", - "aiIntro": "Termix can include an optional AI assistant. You can change this later in your settings.", - "aiSkipTitle": "Leave it off", - "aiSkipDesc": "Termix works as it does now. The assistant stays hidden.", - "aiEnableTitle": "Turn it on", - "aiEnableDesc": "Adds an assistant that reads your setup and suggests changes you approve. Needs a provider you supply, such as a local Ollama.", - "aiNote": "Nothing is sent anywhere until you add a provider and send a message." + "aiTitle": "ИИ-помощник", + "aiIntro": "В Termix можно добавить опционального ИИ-помощника. Это можно изменить позже в настройках.", + "aiSkipTitle": "Оставьте это выключенным.", + "aiSkipDesc": "Termix работает так, как сейчас. Ассистент остается скрытым.", + "aiEnableTitle": "Включите его", + "aiEnableDesc": "Добавляет помощника, который анализирует ваши настройки и предлагает изменения, которые вы одобряете. Требуется поставщик, которого вы предоставляете, например, местный Ollama.", + "aiNote": "Ничего никуда не отправляется, пока вы не добавите поставщика услуг и не отправите сообщение." }, "hosts": { "docsLink": "Документация" @@ -191,5 +191,8 @@ "reconnecting": "Reconnecting and restoring messages…", "unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue" + }, + "plugin": { + "name": "AI Assistant" } } diff --git a/plugins/ai/locales/translated/sr_SP.json b/plugins/ai/locales/translated/sr_SP.json index 3605ad2be..ae986d0b3 100644 --- a/plugins/ai/locales/translated/sr_SP.json +++ b/plugins/ai/locales/translated/sr_SP.json @@ -1,120 +1,120 @@ { "permissions": { "use": { - "title": "Use the assistant", - "description": "Open the assistant and ask it things." + "title": "Користите помоћника", + "description": "Отворите асистента и питајте га." }, "manage_providers": { - "title": "Manage providers", - "description": "Add, edit and remove the AI providers and their API keys." + "title": "Управљајте добављачима", + "description": "Додајте, уредите и уклоните добављаче вештачке интелигенције и њихове АПИ кључеве." }, "apply_proposals": { - "title": "Apply proposals", - "description": "Let the assistant carry out the changes it suggests." + "title": "Примени предлоге", + "description": "Нека асистент изврши измене које предложи." }, "services.use": { - "title": "Use AI from other features", - "description": "Other features may call the assistant on your behalf." + "title": "Користите вештачку интелигенцију из других функција", + "description": "Друге функције могу позвати асистента у ваше име." }, "secrets.share": { - "title": "Share the API key", - "description": "Other features may use the stored AI API key without seeing it." + "title": "Поделите API кључ", + "description": "Друге функције могу користити сачувани AI API кључ, а да га не виде." } }, "settings": { - "assistantUnavailable": "The AI assistant is turned off on this server.", - "providersNeedOptIn": "Turn on the AI assistant above to add providers.", + "assistantUnavailable": "АИ асистент је искључен на овом серверу.", + "providersNeedOptIn": "Укључите AI асистента изнад да бисте додали добављаче.", "admin": { "globallyEnabled": { - "label": "AI assistant", - "description": "Let users turn on the AI assistant. While this is off, the assistant is hidden and blocked for everyone." + "label": "Асистент за вештачку интелигенцију", + "description": "Дозволите корисницима да укључе вештачку интелигенцију асистента. Док је ово искључено, асистент је скривен и блокиран за све." }, "privateEndpoints": { - "label": "Allowed private AI hosts", - "description": "Hosts on your private network that users may point a provider at, such as a self-hosted Ollama. Put one host on each line." + "label": "Дозвољени приватни AI хостови", + "description": "Домаћини на вашој приватној мрежи на које корисници могу усмерити провајдера, као што је самостално хостовани Ollama. Ставите по један хост у сваки ред." } }, "host": { "enableAiAssistant": { - "label": "Enable AI Assistant", - "description": "Allow the AI assistant to help in this host's terminal. Off by default, and still needs AI enabled for your account." + "label": "Омогући AI асистент", + "description": "Дозволите вештачкој интелигенцији да помогне у терминалу овог хоста. Искључено је подразумевано, а и даље је потребно да вештачка интелигенција буде омогућена за ваш налог." } } }, "ai": { - "title": "Assistant", - "send": "Send", - "stop": "Stop", - "save": "Save", - "cancel": "Cancel", - "running": "running", - "approve": "Approve", - "reject": "Reject", - "inputPlaceholder": "Ask about your servers, or describe a change to propose", - "selectProvider": "Select a provider", - "providerSettings": "Provider settings", - "addProvider": "Add provider", - "editProvider": "Edit provider", - "removeProvider": "Remove provider", - "providerType": "Provider", - "providerLabel": "Name", - "providerLabelPlaceholder": "For example: Local Ollama", - "baseUrl": "Server address", - "apiKey": "API key", - "defaultModel": "Default model", - "defaultModelPlaceholder": "For example: llama3.1 or claude-opus-5", - "labelRequired": "Give this provider a name", - "providerSaveFailed": "Could not save the provider", - "providerUpdated": "Provider updated", - "providerDeleteFailed": "Could not remove the provider", - "privateEndpointHint": "Addresses on your private network need an administrator to allow the host first.", - "providerOllama": "Ollama", - "providerAnthropic": "Anthropic", + "title": "Асистент", + "send": "Пошаљи", + "stop": "Заустави", + "save": "Сачувај", + "cancel": "Откажи", + "running": "трчање", + "approve": "Одобри", + "reject": "Одбиј", + "inputPlaceholder": "Питајте о својим серверима или опишите промену коју желите да предложите", + "selectProvider": "Изаберите добављача", + "providerSettings": "Подешавања добављача", + "addProvider": "Додај добављача", + "editProvider": "Измени добављача", + "removeProvider": "Уклони добављача", + "providerType": "Провајдер", + "providerLabel": "Име", + "providerLabelPlaceholder": "На пример: Локална Олама", + "baseUrl": "Адреса сервера", + "apiKey": "API кључ", + "defaultModel": "Подразумевани модел", + "defaultModelPlaceholder": "На пример: llama3.1 или claude-opus-5", + "labelRequired": "Дајте име овом добављачу", + "providerSaveFailed": "Није могуће сачувати добављача", + "providerUpdated": "Провајдер је ажуриран", + "providerDeleteFailed": "Није могуће уклонити добављача", + "privateEndpointHint": "Адресе на вашој приватној мрежи прво треба да дозволе администратору хоста.", + "providerOllama": "Олама", + "providerAnthropic": "Антропски", "providerOpenai": "OpenAI", - "providerGemini": "Google Gemini", - "providerOpenaiCompatible": "OpenAI compatible", - "toolArguments": "Input", - "toolResult": "Result", - "statusApplied": "Applied", - "statusRejected": "Rejected", - "proposalApplied": "Change applied", - "proposalApplyFailed": "Could not apply the change", - "proposalRejectFailed": "Could not reject the change", - "enableTitle": "Enable the AI assistant", - "enableDescription": "Let the assistant read your setup and suggest changes for you to approve.", - "readOnlyCommands": "Allow read-only diagnostic commands", - "readOnlyCommandsDescription": "The assistant may run a short list of safe commands like df and uptime without asking each time. Anything that changes a server is always proposed first.", - "modelDetectFailed": "Could not reach the provider, so this is a general list. You can type any model name.", - "modelCustom": "Enter a model name", - "modelRefresh": "Refresh list", - "modelPlaceholder": "Choose or type a model", - "attachHint": "Type @ to reference a host, snippet or automation. Changes are proposed for you to approve.", - "runCommandTitle": "Run command", - "assistant": "AI Assistant", - "terminalPanelEmpty": "Ask the assistant about this host. Anything that changes state needs your approval first.", - "terminalPanelPlaceholder": "Ask about this host...", - "noProvidersConfigured": "No AI provider is configured yet. Add one in the AI assistant tab.", - "runsInOpenTerminal": "Runs in your open terminal session.", - "runInTerminal": "Run", - "terminalContextPrefill": "Here is my terminal output:\n\n{{output}}\n\n", + "providerGemini": "Гугл Џемини", + "providerOpenaiCompatible": "Компатибилно са OpenAI-ом", + "toolArguments": "Унос", + "toolResult": "Резултат", + "statusApplied": "Примењено", + "statusRejected": "Одбијено", + "proposalApplied": "Промена је примењена", + "proposalApplyFailed": "Није могуће применити промену", + "proposalRejectFailed": "Није могуће одбити промену", + "enableTitle": "Омогућите вештачку интелигенцију (AI) асистента", + "enableDescription": "Нека асистент прочита ваша подешавања и предложи измене које ћете одобрити.", + "readOnlyCommands": "Дозволи дијагностичке команде само за читање", + "readOnlyCommandsDescription": "Асистент може да покрене кратку листу безбедних команди као што су df и uptime без сваког питања. Све што мења сервер се увек прво предлаже.", + "modelDetectFailed": "Нисмо могли да контактирамо добављача, тако да је ово општа листа. Можете да унесете било који назив модела.", + "modelCustom": "Унесите назив модела", + "modelRefresh": "Освежи листу", + "modelPlaceholder": "Изаберите или унесите модел", + "attachHint": "Унесите @ да бисте референцирали хост, исечак кода или аутоматизацију. Промене се предлажу да бисте их одобрили.", + "runCommandTitle": "Покрени команду", + "assistant": "АИ асистент", + "terminalPanelEmpty": "Питајте асистента о овом домаћину. Све што мења стање прво захтева ваше одобрење.", + "terminalPanelPlaceholder": "Питајте о овом домаћину...", + "noProvidersConfigured": "Још увек није конфигурисан ниједан добављач вештачке интелигенције. Додајте га на картици помоћника за вештачку интелигенцију.", + "runsInOpenTerminal": "Покреће се у вашој отвореној терминалној сесији.", + "runInTerminal": "Трчи", + "terminalContextPrefill": "Ево мог терминалног излаза:\n\n{{output}}\n\n", "secrets": { - "shareApiKey": "Let other features use your AI provider API key for their own requests. The key is never copied, and you can revoke this at any time." + "shareApiKey": "Дозволите другим функцијама да користе ваш API кључ добављача вештачке интелигенције за сопствене захтеве. Кључ се никада не копира и можете га опозвати у било ком тренутку." } }, "nav": { - "ai": "AI" + "ai": "Вештачка интелигенција" }, "onboarding": { - "aiTitle": "AI assistant", - "aiIntro": "Termix can include an optional AI assistant. You can change this later in your settings.", - "aiSkipTitle": "Leave it off", - "aiSkipDesc": "Termix works as it does now. The assistant stays hidden.", - "aiEnableTitle": "Turn it on", - "aiEnableDesc": "Adds an assistant that reads your setup and suggests changes you approve. Needs a provider you supply, such as a local Ollama.", - "aiNote": "Nothing is sent anywhere until you add a provider and send a message." + "aiTitle": "Асистент за вештачку интелигенцију", + "aiIntro": "Termix може да укључи опционог AI асистента. Ово можете касније променити у подешавањима.", + "aiSkipTitle": "Остави то искључено", + "aiSkipDesc": "Термикс ради као и сада. Асистент остаје скривен.", + "aiEnableTitle": "Укључи га", + "aiEnableDesc": "Додаје асистента који чита ваша подешавања и предлаже измене које одобравате. Потребан је добављач кога ви обезбедите, као што је локални Олама.", + "aiNote": "Ништа се не шаље нигде док не додате провајдера и не пошаљете поруку." }, "hosts": { - "docsLink": "View docs" + "docsLink": "Прикажи документе" }, "agents": { "title": "AI Agent", @@ -191,5 +191,8 @@ "reconnecting": "Reconnecting and restoring messages…", "unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue" + }, + "plugin": { + "name": "AI Assistant" } } diff --git a/plugins/ai/locales/translated/sv_SE.json b/plugins/ai/locales/translated/sv_SE.json index 3605ad2be..929000df7 100644 --- a/plugins/ai/locales/translated/sv_SE.json +++ b/plugins/ai/locales/translated/sv_SE.json @@ -1,120 +1,120 @@ { "permissions": { "use": { - "title": "Use the assistant", - "description": "Open the assistant and ask it things." + "title": "Använd assistenten", + "description": "Öppna assistenten och fråga den saker." }, "manage_providers": { - "title": "Manage providers", - "description": "Add, edit and remove the AI providers and their API keys." + "title": "Hantera leverantörer", + "description": "Lägg till, redigera och ta bort AI-leverantörerna och deras API-nycklar." }, "apply_proposals": { - "title": "Apply proposals", - "description": "Let the assistant carry out the changes it suggests." + "title": "Tillämpa förslag", + "description": "Låt assistenten utföra de ändringar den föreslår." }, "services.use": { - "title": "Use AI from other features", - "description": "Other features may call the assistant on your behalf." + "title": "Använd AI från andra funktioner", + "description": "Andra funktioner kan ringa assistenten åt dig." }, "secrets.share": { - "title": "Share the API key", - "description": "Other features may use the stored AI API key without seeing it." + "title": "Dela API-nyckeln", + "description": "Andra funktioner kan använda den lagrade AI API-nyckeln utan att se den." } }, "settings": { - "assistantUnavailable": "The AI assistant is turned off on this server.", - "providersNeedOptIn": "Turn on the AI assistant above to add providers.", + "assistantUnavailable": "AI-assistenten är avstängd på den här servern.", + "providersNeedOptIn": "Aktivera AI-assistenten ovan för att lägga till leverantörer.", "admin": { "globallyEnabled": { - "label": "AI assistant", - "description": "Let users turn on the AI assistant. While this is off, the assistant is hidden and blocked for everyone." + "label": "AI-assistent", + "description": "Låt användare aktivera AI-assistenten. Medan detta är avstängt är assistenten dold och blockerad för alla." }, "privateEndpoints": { - "label": "Allowed private AI hosts", - "description": "Hosts on your private network that users may point a provider at, such as a self-hosted Ollama. Put one host on each line." + "label": "Tillåtna privata AI-värdar", + "description": "Värdar på ditt privata nätverk som användare kan hänvisa en leverantör till, till exempel en självhostad Ollama. Lägg en värd på varje rad." } }, "host": { "enableAiAssistant": { - "label": "Enable AI Assistant", - "description": "Allow the AI assistant to help in this host's terminal. Off by default, and still needs AI enabled for your account." + "label": "Aktivera AI-assistenten", + "description": "Tillåt AI-assistenten att hjälpa till i den här värdens terminal. Av som standard och kräver fortfarande att AI är aktiverat för ditt konto." } } }, "ai": { - "title": "Assistant", - "send": "Send", - "stop": "Stop", - "save": "Save", - "cancel": "Cancel", - "running": "running", - "approve": "Approve", - "reject": "Reject", - "inputPlaceholder": "Ask about your servers, or describe a change to propose", - "selectProvider": "Select a provider", - "providerSettings": "Provider settings", - "addProvider": "Add provider", - "editProvider": "Edit provider", - "removeProvider": "Remove provider", - "providerType": "Provider", - "providerLabel": "Name", - "providerLabelPlaceholder": "For example: Local Ollama", - "baseUrl": "Server address", - "apiKey": "API key", - "defaultModel": "Default model", - "defaultModelPlaceholder": "For example: llama3.1 or claude-opus-5", - "labelRequired": "Give this provider a name", - "providerSaveFailed": "Could not save the provider", - "providerUpdated": "Provider updated", - "providerDeleteFailed": "Could not remove the provider", - "privateEndpointHint": "Addresses on your private network need an administrator to allow the host first.", + "title": "Assistent", + "send": "Skicka", + "stop": "Stopp", + "save": "Spara", + "cancel": "Avboka", + "running": "spring", + "approve": "Godkänna", + "reject": "Avvisa", + "inputPlaceholder": "Fråga om era servrar, eller beskriv en förändring att föreslå", + "selectProvider": "Välj en leverantör", + "providerSettings": "Leverantörsinställningar", + "addProvider": "Lägg till leverantör", + "editProvider": "Redigera leverantör", + "removeProvider": "Ta bort leverantör", + "providerType": "Leverantör", + "providerLabel": "Namn", + "providerLabelPlaceholder": "Till exempel: Lokal Ollama", + "baseUrl": "Serveradress", + "apiKey": "API-nyckel", + "defaultModel": "Standardmodell", + "defaultModelPlaceholder": "Till exempel: llama3.1 eller claude-opus-5", + "labelRequired": "Ge den här leverantören ett namn", + "providerSaveFailed": "Kunde inte spara leverantören", + "providerUpdated": "Leverantören uppdaterad", + "providerDeleteFailed": "Kunde inte ta bort leverantören", + "privateEndpointHint": "Adresser i ditt privata nätverk behöver en administratör som först tillåter värden.", "providerOllama": "Ollama", - "providerAnthropic": "Anthropic", - "providerOpenai": "OpenAI", + "providerAnthropic": "Antropisk", + "providerOpenai": "Öppen AI", "providerGemini": "Google Gemini", - "providerOpenaiCompatible": "OpenAI compatible", + "providerOpenaiCompatible": "OpenAI-kompatibel", "toolArguments": "Input", - "toolResult": "Result", - "statusApplied": "Applied", - "statusRejected": "Rejected", - "proposalApplied": "Change applied", - "proposalApplyFailed": "Could not apply the change", - "proposalRejectFailed": "Could not reject the change", - "enableTitle": "Enable the AI assistant", - "enableDescription": "Let the assistant read your setup and suggest changes for you to approve.", - "readOnlyCommands": "Allow read-only diagnostic commands", - "readOnlyCommandsDescription": "The assistant may run a short list of safe commands like df and uptime without asking each time. Anything that changes a server is always proposed first.", - "modelDetectFailed": "Could not reach the provider, so this is a general list. You can type any model name.", - "modelCustom": "Enter a model name", - "modelRefresh": "Refresh list", - "modelPlaceholder": "Choose or type a model", - "attachHint": "Type @ to reference a host, snippet or automation. Changes are proposed for you to approve.", - "runCommandTitle": "Run command", - "assistant": "AI Assistant", - "terminalPanelEmpty": "Ask the assistant about this host. Anything that changes state needs your approval first.", - "terminalPanelPlaceholder": "Ask about this host...", - "noProvidersConfigured": "No AI provider is configured yet. Add one in the AI assistant tab.", - "runsInOpenTerminal": "Runs in your open terminal session.", - "runInTerminal": "Run", - "terminalContextPrefill": "Here is my terminal output:\n\n{{output}}\n\n", + "toolResult": "Resultat", + "statusApplied": "Tillämpad", + "statusRejected": "Avvisad", + "proposalApplied": "Ändring tillämpad", + "proposalApplyFailed": "Kunde inte tillämpa ändringen", + "proposalRejectFailed": "Kunde inte avvisa ändringen", + "enableTitle": "Aktivera AI-assistenten", + "enableDescription": "Låt assistenten läsa dina inställningar och föreslå ändringar som du kan godkänna.", + "readOnlyCommands": "Tillåt skrivskyddade diagnostikkommandon", + "readOnlyCommandsDescription": "Assistenten kan köra en kort lista med säkra kommandon som df och uptime utan att fråga varje gång. Allt som ändrar en server föreslås alltid först.", + "modelDetectFailed": "Kunde inte nå leverantören, så detta är en allmän lista. Du kan skriva in vilket modellnamn som helst.", + "modelCustom": "Ange ett modellnamn", + "modelRefresh": "Uppdatera listan", + "modelPlaceholder": "Välj eller skriv en modell", + "attachHint": "Skriv @ för att referera till en värd, ett kodavsnitt eller en automatisering. Ändringar föreslås för dig att godkänna.", + "runCommandTitle": "Kör kommando", + "assistant": "AI-assistent", + "terminalPanelEmpty": "Fråga assistenten om den här värden. Allt som ändras kräver ditt godkännande först.", + "terminalPanelPlaceholder": "Fråga om den här värden...", + "noProvidersConfigured": "Ingen AI-leverantör är konfigurerad ännu. Lägg till en på fliken AI-assistent.", + "runsInOpenTerminal": "Körs i din öppna terminalsession.", + "runInTerminal": "Sikt", + "terminalContextPrefill": "Här är min terminalutgång:\n\n{{output}}\n\n", "secrets": { - "shareApiKey": "Let other features use your AI provider API key for their own requests. The key is never copied, and you can revoke this at any time." + "shareApiKey": "Låt andra funktioner använda din AI-leverantörs API-nyckel för sina egna förfrågningar. Nyckeln kopieras aldrig och du kan återkalla den när som helst." } }, "nav": { "ai": "AI" }, "onboarding": { - "aiTitle": "AI assistant", - "aiIntro": "Termix can include an optional AI assistant. You can change this later in your settings.", - "aiSkipTitle": "Leave it off", - "aiSkipDesc": "Termix works as it does now. The assistant stays hidden.", - "aiEnableTitle": "Turn it on", - "aiEnableDesc": "Adds an assistant that reads your setup and suggests changes you approve. Needs a provider you supply, such as a local Ollama.", - "aiNote": "Nothing is sent anywhere until you add a provider and send a message." + "aiTitle": "AI-assistent", + "aiIntro": "Termix kan inkludera en valfri AI-assistent. Du kan ändra detta senare i dina inställningar.", + "aiSkipTitle": "Lämna den av", + "aiSkipDesc": "Termix fungerar som den gör nu. Assistenten förblir dold.", + "aiEnableTitle": "Slå på den", + "aiEnableDesc": "Lägger till en assistent som läser din installation och föreslår ändringar som du godkänner. Kräver en leverantör som du tillhandahåller, till exempel en lokal Ollama.", + "aiNote": "Ingenting skickas någonstans förrän du lägger till en leverantör och skickar ett meddelande." }, "hosts": { - "docsLink": "View docs" + "docsLink": "Visa dokument" }, "agents": { "title": "AI Agent", @@ -191,5 +191,8 @@ "reconnecting": "Reconnecting and restoring messages…", "unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue" + }, + "plugin": { + "name": "AI Assistant" } } diff --git a/plugins/ai/locales/translated/th_TH.json b/plugins/ai/locales/translated/th_TH.json index 3605ad2be..2aa4d8bd5 100644 --- a/plugins/ai/locales/translated/th_TH.json +++ b/plugins/ai/locales/translated/th_TH.json @@ -1,120 +1,120 @@ { "permissions": { "use": { - "title": "Use the assistant", - "description": "Open the assistant and ask it things." + "title": "ใช้ตัวช่วย", + "description": "เปิดผู้ช่วยเสมือนจริงแล้วถามคำถามได้เลย" }, "manage_providers": { - "title": "Manage providers", - "description": "Add, edit and remove the AI providers and their API keys." + "title": "จัดการผู้ให้บริการ", + "description": "เพิ่ม แก้ไข และลบผู้ให้บริการ AI และคีย์ API ของพวกเขา" }, "apply_proposals": { - "title": "Apply proposals", - "description": "Let the assistant carry out the changes it suggests." + "title": "ยื่นข้อเสนอ", + "description": "ให้ผู้ช่วยดำเนินการเปลี่ยนแปลงตามที่ระบบแนะนำ" }, "services.use": { - "title": "Use AI from other features", - "description": "Other features may call the assistant on your behalf." + "title": "ใช้ AI จากฟีเจอร์อื่นๆ", + "description": "ฟังก์ชันอื่นๆ อาจโทรติดต่อผู้ช่วยในนามของคุณ" }, "secrets.share": { - "title": "Share the API key", - "description": "Other features may use the stored AI API key without seeing it." + "title": "แชร์คีย์ API", + "description": "ฟังก์ชันอื่นๆ อาจใช้คีย์ API ของ AI ที่บันทึกไว้โดยไม่เห็นคีย์นั้น" } }, "settings": { - "assistantUnavailable": "The AI assistant is turned off on this server.", - "providersNeedOptIn": "Turn on the AI assistant above to add providers.", + "assistantUnavailable": "ระบบผู้ช่วย AI ถูกปิดใช้งานบนเซิร์ฟเวอร์นี้", + "providersNeedOptIn": "เปิดใช้งานผู้ช่วย AI ด้านบนเพื่อเพิ่มผู้ให้บริการ", "admin": { "globallyEnabled": { - "label": "AI assistant", - "description": "Let users turn on the AI assistant. While this is off, the assistant is hidden and blocked for everyone." + "label": "ผู้ช่วย AI", + "description": "อนุญาตให้ผู้ใช้เปิดใช้งานผู้ช่วย AI ได้ เมื่อปิดใช้งานอยู่ ผู้ช่วยจะถูกซ่อนและบล็อกไม่ให้ใครเห็น" }, "privateEndpoints": { - "label": "Allowed private AI hosts", - "description": "Hosts on your private network that users may point a provider at, such as a self-hosted Ollama. Put one host on each line." + "label": "อนุญาตให้โฮสต์ AI ส่วนตัว", + "description": "โฮสต์บนเครือข่ายส่วนตัวของคุณที่ผู้ใช้สามารถชี้ไปยังผู้ให้บริการได้ เช่น Ollama ที่ติดตั้งเอง ให้ใส่โฮสต์หนึ่งตัวต่อหนึ่งบรรทัด" } }, "host": { "enableAiAssistant": { - "label": "Enable AI Assistant", - "description": "Allow the AI assistant to help in this host's terminal. Off by default, and still needs AI enabled for your account." + "label": "เปิดใช้งานผู้ช่วย AI", + "description": "อนุญาตให้ผู้ช่วย AI ช่วยเหลือในเทอร์มินัลของโฮสต์นี้ โดยค่าเริ่มต้นจะปิดอยู่ และยังคงต้องเปิดใช้งาน AI สำหรับบัญชีของคุณก่อน" } } }, "ai": { - "title": "Assistant", - "send": "Send", - "stop": "Stop", - "save": "Save", - "cancel": "Cancel", - "running": "running", - "approve": "Approve", - "reject": "Reject", - "inputPlaceholder": "Ask about your servers, or describe a change to propose", - "selectProvider": "Select a provider", - "providerSettings": "Provider settings", - "addProvider": "Add provider", - "editProvider": "Edit provider", - "removeProvider": "Remove provider", - "providerType": "Provider", - "providerLabel": "Name", - "providerLabelPlaceholder": "For example: Local Ollama", - "baseUrl": "Server address", - "apiKey": "API key", - "defaultModel": "Default model", - "defaultModelPlaceholder": "For example: llama3.1 or claude-opus-5", - "labelRequired": "Give this provider a name", - "providerSaveFailed": "Could not save the provider", - "providerUpdated": "Provider updated", - "providerDeleteFailed": "Could not remove the provider", - "privateEndpointHint": "Addresses on your private network need an administrator to allow the host first.", - "providerOllama": "Ollama", - "providerAnthropic": "Anthropic", - "providerOpenai": "OpenAI", - "providerGemini": "Google Gemini", - "providerOpenaiCompatible": "OpenAI compatible", - "toolArguments": "Input", - "toolResult": "Result", - "statusApplied": "Applied", - "statusRejected": "Rejected", - "proposalApplied": "Change applied", - "proposalApplyFailed": "Could not apply the change", - "proposalRejectFailed": "Could not reject the change", - "enableTitle": "Enable the AI assistant", - "enableDescription": "Let the assistant read your setup and suggest changes for you to approve.", - "readOnlyCommands": "Allow read-only diagnostic commands", - "readOnlyCommandsDescription": "The assistant may run a short list of safe commands like df and uptime without asking each time. Anything that changes a server is always proposed first.", - "modelDetectFailed": "Could not reach the provider, so this is a general list. You can type any model name.", - "modelCustom": "Enter a model name", - "modelRefresh": "Refresh list", - "modelPlaceholder": "Choose or type a model", - "attachHint": "Type @ to reference a host, snippet or automation. Changes are proposed for you to approve.", - "runCommandTitle": "Run command", - "assistant": "AI Assistant", - "terminalPanelEmpty": "Ask the assistant about this host. Anything that changes state needs your approval first.", - "terminalPanelPlaceholder": "Ask about this host...", - "noProvidersConfigured": "No AI provider is configured yet. Add one in the AI assistant tab.", - "runsInOpenTerminal": "Runs in your open terminal session.", - "runInTerminal": "Run", - "terminalContextPrefill": "Here is my terminal output:\n\n{{output}}\n\n", + "title": "ผู้ช่วย", + "send": "ส่ง", + "stop": "หยุด", + "save": "บันทึก", + "cancel": "ยกเลิก", + "running": "วิ่ง", + "approve": "อนุมัติ", + "reject": "ปฏิเสธ", + "inputPlaceholder": "สอบถามเกี่ยวกับเซิร์ฟเวอร์ของคุณ หรืออธิบายการเปลี่ยนแปลงที่คุณต้องการเสนอแนะ", + "selectProvider": "เลือกผู้ให้บริการ", + "providerSettings": "การตั้งค่าผู้ให้บริการ", + "addProvider": "เพิ่มผู้ให้บริการ", + "editProvider": "แก้ไขผู้ให้บริการ", + "removeProvider": "ลบผู้ให้บริการ", + "providerType": "ผู้ให้บริการ", + "providerLabel": "ชื่อ", + "providerLabelPlaceholder": "ตัวอย่างเช่น: Ollama ท้องถิ่น", + "baseUrl": "ที่อยู่เซิร์ฟเวอร์", + "apiKey": "คีย์ API", + "defaultModel": "โมเดลเริ่มต้น", + "defaultModelPlaceholder": "ตัวอย่างเช่น: llama3.1 หรือ claude-opus-5", + "labelRequired": "ตั้งชื่อให้ผู้ให้บริการรายนี้", + "providerSaveFailed": "ไม่สามารถบันทึกผู้ให้บริการได้", + "providerUpdated": "ผู้ให้บริการได้รับการอัปเดตแล้ว", + "providerDeleteFailed": "ไม่สามารถลบผู้ให้บริการได้", + "privateEndpointHint": "การเข้าถึงที่อยู่บนเครือข่ายส่วนตัวของคุณนั้น จำเป็นต้องให้ผู้ดูแลระบบอนุญาตก่อน", + "providerOllama": "โอลาม่า", + "providerAnthropic": "แอนโทรปิก", + "providerOpenai": "โอเพ่นไอ", + "providerGemini": "กูเกิล เจมินี", + "providerOpenaiCompatible": "เข้ากันได้กับ OpenAI", + "toolArguments": "ป้อนข้อมูล", + "toolResult": "ผลลัพธ์", + "statusApplied": "สมัครแล้ว", + "statusRejected": "ถูกปฏิเสธ", + "proposalApplied": "มีการเปลี่ยนแปลงเกิดขึ้น", + "proposalApplyFailed": "ไม่สามารถทำการเปลี่ยนแปลงได้", + "proposalRejectFailed": "ไม่สามารถปฏิเสธการเปลี่ยนแปลงได้", + "enableTitle": "เปิดใช้งานผู้ช่วย AI", + "enableDescription": "ให้ผู้ช่วยอ่านการตั้งค่าของคุณและแนะนำการเปลี่ยนแปลงเพื่อให้คุณอนุมัติ", + "readOnlyCommands": "อนุญาตคำสั่งวินิจฉัยแบบอ่านอย่างเดียว", + "readOnlyCommandsDescription": "ผู้ช่วยอาจเรียกใช้คำสั่งที่ปลอดภัยเพียงไม่กี่คำสั่ง เช่น df และ uptime โดยไม่ต้องถามทุกครั้ง คำสั่งใดๆ ที่เปลี่ยนแปลงสถานะของเซิร์ฟเวอร์จะถูกเสนอให้ดำเนินการก่อนเสมอ", + "modelDetectFailed": "ไม่สามารถติดต่อผู้ให้บริการได้ ดังนั้นนี่จึงเป็นรายการทั่วไป คุณสามารถพิมพ์ชื่อรุ่นใดก็ได้", + "modelCustom": "ป้อนชื่อรุ่น", + "modelRefresh": "รีเฟรชรายการ", + "modelPlaceholder": "เลือกหรือพิมพ์แบบจำลอง", + "attachHint": "พิมพ์ @ เพื่ออ้างอิงถึงโฮสต์ สนิปเป็ต หรือระบบอัตโนมัติ การเปลี่ยนแปลงที่เสนอจะถูกนำมาให้คุณอนุมัติ", + "runCommandTitle": "เรียกใช้คำสั่ง", + "assistant": "ผู้ช่วย AI", + "terminalPanelEmpty": "สอบถามผู้ช่วยเกี่ยวกับโฮสต์นี้ การเปลี่ยนแปลงสถานะใดๆ ต้องได้รับการอนุมัติจากคุณก่อน", + "terminalPanelPlaceholder": "สอบถามเกี่ยวกับโฮสต์รายนี้...", + "noProvidersConfigured": "ยังไม่ได้ตั้งค่าผู้ให้บริการ AI เพิ่มผู้ให้บริการในแท็บผู้ช่วย AI", + "runsInOpenTerminal": "ทำงานในเซสชันเทอร์มินัลที่เปิดอยู่ของคุณ", + "runInTerminal": "วิ่ง", + "terminalContextPrefill": "นี่คือผลลัพธ์จากเทอร์มินัลของฉัน:\n\n{{output}}\n\n", "secrets": { - "shareApiKey": "Let other features use your AI provider API key for their own requests. The key is never copied, and you can revoke this at any time." + "shareApiKey": "อนุญาตให้ฟีเจอร์อื่นๆ ใช้คีย์ API ของผู้ให้บริการ AI ของคุณสำหรับการร้องขอของตนเอง คีย์นี้จะไม่ถูกคัดลอก และคุณสามารถยกเลิกได้ทุกเมื่อ" } }, "nav": { "ai": "AI" }, "onboarding": { - "aiTitle": "AI assistant", - "aiIntro": "Termix can include an optional AI assistant. You can change this later in your settings.", - "aiSkipTitle": "Leave it off", - "aiSkipDesc": "Termix works as it does now. The assistant stays hidden.", - "aiEnableTitle": "Turn it on", - "aiEnableDesc": "Adds an assistant that reads your setup and suggests changes you approve. Needs a provider you supply, such as a local Ollama.", - "aiNote": "Nothing is sent anywhere until you add a provider and send a message." + "aiTitle": "ผู้ช่วย AI", + "aiIntro": "Termix อาจมีผู้ช่วย AI เสริม คุณสามารถเปลี่ยนการตั้งค่าได้ในภายหลัง", + "aiSkipTitle": "ปิดมันไว้", + "aiSkipDesc": "Termix ทำงานเหมือนเดิมทุกประการ ตัวช่วยยังคงซ่อนอยู่", + "aiEnableTitle": "เปิดใช้งาน", + "aiEnableDesc": "เพิ่มผู้ช่วยที่จะอ่านการตั้งค่าของคุณและแนะนำการเปลี่ยนแปลงที่คุณต้องอนุมัติ จำเป็นต้องมีผู้ให้บริการที่คุณจัดหาให้ เช่น Ollama ในพื้นที่ของคุณ", + "aiNote": "จะไม่มีการส่งข้อมูลใดๆ จนกว่าคุณจะเพิ่มผู้ให้บริการและส่งข้อความ" }, "hosts": { - "docsLink": "View docs" + "docsLink": "ดูเอกสาร" }, "agents": { "title": "AI Agent", @@ -191,5 +191,8 @@ "reconnecting": "Reconnecting and restoring messages…", "unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue" + }, + "plugin": { + "name": "AI Assistant" } } diff --git a/plugins/ai/locales/translated/tr_TR.json b/plugins/ai/locales/translated/tr_TR.json index 00725ba3b..394681dd6 100644 --- a/plugins/ai/locales/translated/tr_TR.json +++ b/plugins/ai/locales/translated/tr_TR.json @@ -1,117 +1,117 @@ { "permissions": { "use": { - "title": "Use the assistant", - "description": "Open the assistant and ask it things." + "title": "Yardımcıyı kullanın", + "description": "Asistanı açın ve ona sorular sorun." }, "manage_providers": { - "title": "Manage providers", - "description": "Add, edit and remove the AI providers and their API keys." + "title": "Sağlayıcıları yönetin", + "description": "Yapay zeka sağlayıcılarını ve API anahtarlarını ekleyin, düzenleyin ve kaldırın." }, "apply_proposals": { - "title": "Apply proposals", - "description": "Let the assistant carry out the changes it suggests." + "title": "Tekliflerinizi sunun.", + "description": "Yardımcının önerdiği değişiklikleri uygulamasına izin verin." }, "services.use": { - "title": "Use AI from other features", - "description": "Other features may call the assistant on your behalf." + "title": "Diğer özelliklerden yapay zeka kullanın.", + "description": "Diğer özellikler sizin adınıza asistanı arayabilir." }, "secrets.share": { - "title": "Share the API key", - "description": "Other features may use the stored AI API key without seeing it." + "title": "API anahtarını paylaşın", + "description": "Diğer özellikler, kaydedilmiş yapay zeka API anahtarını görmeden kullanabilir." } }, "settings": { - "assistantUnavailable": "The AI assistant is turned off on this server.", - "providersNeedOptIn": "Turn on the AI assistant above to add providers.", + "assistantUnavailable": "Bu sunucuda yapay zeka asistanı devre dışı bırakılmıştır.", + "providersNeedOptIn": "Sağlayıcı eklemek için yukarıdaki yapay zeka asistanını açın.", "admin": { "globallyEnabled": { - "label": "AI assistant", - "description": "Let users turn on the AI assistant. While this is off, the assistant is hidden and blocked for everyone." + "label": "Yapay zeka asistanı", + "description": "Kullanıcıların yapay zeka asistanını açmasına izin verin. Bu özellik kapalıyken, asistan gizlenir ve herkes için engellenir." }, "privateEndpoints": { - "label": "Allowed private AI hosts", - "description": "Hosts on your private network that users may point a provider at, such as a self-hosted Ollama. Put one host on each line." + "label": "Özel yapay zeka sunucularına izin verildi.", + "description": "Kullanıcıların bir sağlayıcıya yönlendirebileceği özel ağınızdaki sunucular (örneğin, kendi sunucunuzda barındırdığınız Ollama). Her satıra bir sunucu yazın." } }, "host": { "enableAiAssistant": { - "label": "Enable AI Assistant", - "description": "Allow the AI assistant to help in this host's terminal. Off by default, and still needs AI enabled for your account." + "label": "Yapay Zeka Asistanını Etkinleştir", + "description": "Bu sunucunun terminalinde yapay zeka asistanının yardımcı olmasına izin verin. Varsayılan olarak kapalıdır ve hesabınız için yapay zekanın etkinleştirilmiş olması gerekir." } } }, "ai": { - "title": "Assistant", - "send": "Send", + "title": "Asistan", + "send": "Göndermek", "stop": "Durdurma", "save": "Kaydet", "cancel": "İptal", "running": "çalışan", - "approve": "Approve", - "reject": "Reject", - "inputPlaceholder": "Ask about your servers, or describe a change to propose", - "selectProvider": "Select a provider", - "providerSettings": "Provider settings", - "addProvider": "Add provider", - "editProvider": "Edit provider", - "removeProvider": "Remove provider", - "providerType": "Provider", + "approve": "Onaylamak", + "reject": "Reddetmek", + "inputPlaceholder": "Sunucularınız hakkında bilgi isteyin veya önereceğiniz bir değişikliği açıklayın.", + "selectProvider": "Bir sağlayıcı seçin", + "providerSettings": "Sağlayıcı ayarları", + "addProvider": "Sağlayıcı ekle", + "editProvider": "Sağlayıcıyı düzenle", + "removeProvider": "Sağlayıcıyı kaldır", + "providerType": "Sağlayıcı", "providerLabel": "Ad", - "providerLabelPlaceholder": "For example: Local Ollama", - "baseUrl": "Server address", - "apiKey": "API key", - "defaultModel": "Default model", - "defaultModelPlaceholder": "For example: llama3.1 or claude-opus-5", - "labelRequired": "Give this provider a name", - "providerSaveFailed": "Could not save the provider", - "providerUpdated": "Provider updated", - "providerDeleteFailed": "Could not remove the provider", - "privateEndpointHint": "Addresses on your private network need an administrator to allow the host first.", + "providerLabelPlaceholder": "Örneğin: Yerel Ollama", + "baseUrl": "Sunucu adresi", + "apiKey": "API anahtarı", + "defaultModel": "Varsayılan model", + "defaultModelPlaceholder": "Örneğin: llama3.1 veya claude-opus-5", + "labelRequired": "Bu sağlayıcıya bir isim verin.", + "providerSaveFailed": "Sağlayıcı kaydedilemedi.", + "providerUpdated": "Sağlayıcı güncellendi.", + "providerDeleteFailed": "Sağlayıcı kaldırılamadı.", + "privateEndpointHint": "Özel ağınızdaki adreslerin kullanılabilmesi için öncelikle yöneticinin sunucuya izin vermesi gerekmektedir.", "providerOllama": "Ollama", - "providerAnthropic": "Anthropic", + "providerAnthropic": "Antropik", "providerOpenai": "OpenAI", "providerGemini": "Google Gemini", - "providerOpenaiCompatible": "OpenAI compatible", + "providerOpenaiCompatible": "OpenAI uyumlu", "toolArguments": "Giriş", - "toolResult": "Result", - "statusApplied": "Applied", - "statusRejected": "Rejected", - "proposalApplied": "Change applied", - "proposalApplyFailed": "Could not apply the change", - "proposalRejectFailed": "Could not reject the change", - "enableTitle": "Enable the AI assistant", - "enableDescription": "Let the assistant read your setup and suggest changes for you to approve.", - "readOnlyCommands": "Allow read-only diagnostic commands", - "readOnlyCommandsDescription": "The assistant may run a short list of safe commands like df and uptime without asking each time. Anything that changes a server is always proposed first.", - "modelDetectFailed": "Could not reach the provider, so this is a general list. You can type any model name.", - "modelCustom": "Enter a model name", - "modelRefresh": "Refresh list", - "modelPlaceholder": "Choose or type a model", - "attachHint": "Type @ to reference a host, snippet or automation. Changes are proposed for you to approve.", - "runCommandTitle": "Run command", - "assistant": "AI Assistant", - "terminalPanelEmpty": "Ask the assistant about this host. Anything that changes state needs your approval first.", - "terminalPanelPlaceholder": "Ask about this host...", - "noProvidersConfigured": "No AI provider is configured yet. Add one in the AI assistant tab.", - "runsInOpenTerminal": "Runs in your open terminal session.", + "toolResult": "Sonuç", + "statusApplied": "Uygulandı", + "statusRejected": "Reddedilmiş", + "proposalApplied": "Değişiklik uygulandı.", + "proposalApplyFailed": "Değişiklik uygulanamadı.", + "proposalRejectFailed": "Değişikliği reddedemedim.", + "enableTitle": "Yapay zekâ asistanını etkinleştirin", + "enableDescription": "Asistanın ayarlarınızı okumasını ve onaylamanız için değişiklik önerileri sunmasını sağlayın.", + "readOnlyCommands": "Yalnızca okuma amaçlı tanı komutlarına izin ver", + "readOnlyCommandsDescription": "Yardımcı program, her seferinde sormadan df ve uptime gibi kısa bir güvenli komut listesini çalıştırabilir. Sunucuda değişiklik yapan her şey her zaman önce önerilir.", + "modelDetectFailed": "Sağlayıcıya ulaşılamadı, bu nedenle bu genel bir listedir. İstediğiniz model adını yazabilirsiniz.", + "modelCustom": "Bir model adı girin", + "modelRefresh": "Listeyi yenile", + "modelPlaceholder": "Bir model seçin veya yazın.", + "attachHint": "Bir sunucuya, kod parçasına veya otomasyona referans vermek için @ işaretini kullanın. Onaylamanız için değişiklikler öneriliyor.", + "runCommandTitle": "Çalıştır komutu", + "assistant": "Yapay Zeka Asistanı", + "terminalPanelEmpty": "Bu ev sahibi hakkında asistana danışın. Durum değişikliği gerektiren her şey önce sizin onayınızı gerektirir.", + "terminalPanelPlaceholder": "Bu ev sahibi hakkında bilgi isteyin...", + "noProvidersConfigured": "Henüz hiçbir yapay zeka sağlayıcısı yapılandırılmadı. Yapay zeka asistanı sekmesinden bir tane ekleyin.", + "runsInOpenTerminal": "Açık terminal oturumunuzda çalışır.", "runInTerminal": "Çalıştır", - "terminalContextPrefill": "Here is my terminal output:\n\n{{output}}\n\n", + "terminalContextPrefill": "İşte terminal çıktım:\n\n{{output}}\n\n", "secrets": { - "shareApiKey": "Let other features use your AI provider API key for their own requests. The key is never copied, and you can revoke this at any time." + "shareApiKey": "Diğer özelliklerin kendi istekleri için yapay zeka sağlayıcınızın API anahtarını kullanmasına izin verin. Anahtar asla kopyalanmaz ve bunu istediğiniz zaman iptal edebilirsiniz." } }, "nav": { - "ai": "AI" + "ai": "Yapay zeka" }, "onboarding": { - "aiTitle": "AI assistant", - "aiIntro": "Termix can include an optional AI assistant. You can change this later in your settings.", - "aiSkipTitle": "Leave it off", - "aiSkipDesc": "Termix works as it does now. The assistant stays hidden.", - "aiEnableTitle": "Turn it on", - "aiEnableDesc": "Adds an assistant that reads your setup and suggests changes you approve. Needs a provider you supply, such as a local Ollama.", - "aiNote": "Nothing is sent anywhere until you add a provider and send a message." + "aiTitle": "Yapay zeka asistanı", + "aiIntro": "Termix isteğe bağlı bir yapay zeka asistanı içerebilir. Bunu daha sonra ayarlarınızdan değiştirebilirsiniz.", + "aiSkipTitle": "Kapalı bırakın", + "aiSkipDesc": "Termix şu anki haliyle çalışıyor. Asistan gizli kalıyor.", + "aiEnableTitle": "Açın", + "aiEnableDesc": "Ayarlarınızı okuyan ve onaylamanız halinde değişiklikler öneren bir asistan ekler. Yerel bir Ollama gibi, sizin sağladığınız bir sağlayıcıya ihtiyaç duyar.", + "aiNote": "Bir sağlayıcı ekleyip mesaj gönderene kadar hiçbir şey hiçbir yere gönderilmez." }, "hosts": { "docsLink": "Dokümanları görüntüle" @@ -191,5 +191,8 @@ "reconnecting": "Reconnecting and restoring messages…", "unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue" + }, + "plugin": { + "name": "AI Assistant" } } diff --git a/plugins/ai/locales/translated/uk_UA.json b/plugins/ai/locales/translated/uk_UA.json index 3605ad2be..53752f19d 100644 --- a/plugins/ai/locales/translated/uk_UA.json +++ b/plugins/ai/locales/translated/uk_UA.json @@ -1,120 +1,120 @@ { "permissions": { "use": { - "title": "Use the assistant", - "description": "Open the assistant and ask it things." + "title": "Використовуйте помічника", + "description": "Відкрийте помічника та запитайте його." }, "manage_providers": { - "title": "Manage providers", - "description": "Add, edit and remove the AI providers and their API keys." + "title": "Керування постачальниками", + "description": "Додавайте, редагуйте та видаляйте постачальників штучного інтелекту та їхні ключі API." }, "apply_proposals": { - "title": "Apply proposals", - "description": "Let the assistant carry out the changes it suggests." + "title": "Застосувати пропозиції", + "description": "Нехай помічник внесе запропоновані ним зміни." }, "services.use": { - "title": "Use AI from other features", - "description": "Other features may call the assistant on your behalf." + "title": "Використання ШІ з інших функцій", + "description": "Інші функції можуть викликати помічника від вашого імені." }, "secrets.share": { - "title": "Share the API key", - "description": "Other features may use the stored AI API key without seeing it." + "title": "Поділитися ключем API", + "description": "Інші функції можуть використовувати збережений ключ API штучного інтелекту, не бачачи його." } }, "settings": { - "assistantUnavailable": "The AI assistant is turned off on this server.", - "providersNeedOptIn": "Turn on the AI assistant above to add providers.", + "assistantUnavailable": "Помічник зі штучним інтелектом вимкнено на цьому сервері.", + "providersNeedOptIn": "Увімкніть помічника зі штучним інтелектом вище, щоб додати постачальників.", "admin": { "globallyEnabled": { - "label": "AI assistant", - "description": "Let users turn on the AI assistant. While this is off, the assistant is hidden and blocked for everyone." + "label": "Асистент зі штучним інтелектом", + "description": "Дозвольте користувачам увімкнути помічника зі штучним інтелектом. Коли це вимкнено, помічник прихований і заблокований для всіх." }, "privateEndpoints": { - "label": "Allowed private AI hosts", - "description": "Hosts on your private network that users may point a provider at, such as a self-hosted Ollama. Put one host on each line." + "label": "Дозволені приватні хости ШІ", + "description": "Хости у вашій приватній мережі, на які користувачі можуть вказувати провайдера, наприклад, Ollama з власним хостингом. Розмістіть по одному хосту в кожному рядку." } }, "host": { "enableAiAssistant": { - "label": "Enable AI Assistant", - "description": "Allow the AI assistant to help in this host's terminal. Off by default, and still needs AI enabled for your account." + "label": "Увімкнути помічника зі штучним інтелектом", + "description": "Дозволити помічнику зі штучним інтелектом допомагати в терміналі цього хоста. Вимкнено за замовчуванням, але все одно потребує ввімкнення штучного інтелекту для вашого облікового запису." } } }, "ai": { - "title": "Assistant", - "send": "Send", - "stop": "Stop", - "save": "Save", - "cancel": "Cancel", - "running": "running", - "approve": "Approve", - "reject": "Reject", - "inputPlaceholder": "Ask about your servers, or describe a change to propose", - "selectProvider": "Select a provider", - "providerSettings": "Provider settings", - "addProvider": "Add provider", - "editProvider": "Edit provider", - "removeProvider": "Remove provider", - "providerType": "Provider", - "providerLabel": "Name", - "providerLabelPlaceholder": "For example: Local Ollama", - "baseUrl": "Server address", - "apiKey": "API key", - "defaultModel": "Default model", - "defaultModelPlaceholder": "For example: llama3.1 or claude-opus-5", - "labelRequired": "Give this provider a name", - "providerSaveFailed": "Could not save the provider", - "providerUpdated": "Provider updated", - "providerDeleteFailed": "Could not remove the provider", - "privateEndpointHint": "Addresses on your private network need an administrator to allow the host first.", - "providerOllama": "Ollama", - "providerAnthropic": "Anthropic", + "title": "Помічник", + "send": "Надіслати", + "stop": "СТІЙ", + "save": "Зберегти", + "cancel": "Скасувати", + "running": "біг", + "approve": "Схвалити", + "reject": "Відхилити", + "inputPlaceholder": "Запитайте про ваші сервери або опишіть зміну, яку ви хочете запропонувати", + "selectProvider": "Виберіть постачальника", + "providerSettings": "Налаштування постачальника", + "addProvider": "Додати постачальника", + "editProvider": "Редагувати постачальника", + "removeProvider": "Видалити постачальника", + "providerType": "Постачальник", + "providerLabel": "Ім'я", + "providerLabelPlaceholder": "Наприклад: Місцевий Оллама", + "baseUrl": "Адреса сервера", + "apiKey": "Ключ API", + "defaultModel": "Модель за замовчуванням", + "defaultModelPlaceholder": "Наприклад: llama3.1 або claude-opus-5", + "labelRequired": "Дайте назву цьому постачальнику", + "providerSaveFailed": "Не вдалося зберегти постачальника", + "providerUpdated": "Постачальника оновлено", + "providerDeleteFailed": "Не вдалося видалити постачальника", + "privateEndpointHint": "Адреси у вашій приватній мережі спочатку потребують дозволу адміністратора хоста.", + "providerOllama": "Оллама", + "providerAnthropic": "Антропний", "providerOpenai": "OpenAI", - "providerGemini": "Google Gemini", - "providerOpenaiCompatible": "OpenAI compatible", - "toolArguments": "Input", - "toolResult": "Result", - "statusApplied": "Applied", - "statusRejected": "Rejected", - "proposalApplied": "Change applied", - "proposalApplyFailed": "Could not apply the change", - "proposalRejectFailed": "Could not reject the change", - "enableTitle": "Enable the AI assistant", - "enableDescription": "Let the assistant read your setup and suggest changes for you to approve.", - "readOnlyCommands": "Allow read-only diagnostic commands", - "readOnlyCommandsDescription": "The assistant may run a short list of safe commands like df and uptime without asking each time. Anything that changes a server is always proposed first.", - "modelDetectFailed": "Could not reach the provider, so this is a general list. You can type any model name.", - "modelCustom": "Enter a model name", - "modelRefresh": "Refresh list", - "modelPlaceholder": "Choose or type a model", - "attachHint": "Type @ to reference a host, snippet or automation. Changes are proposed for you to approve.", - "runCommandTitle": "Run command", - "assistant": "AI Assistant", - "terminalPanelEmpty": "Ask the assistant about this host. Anything that changes state needs your approval first.", - "terminalPanelPlaceholder": "Ask about this host...", - "noProvidersConfigured": "No AI provider is configured yet. Add one in the AI assistant tab.", - "runsInOpenTerminal": "Runs in your open terminal session.", - "runInTerminal": "Run", - "terminalContextPrefill": "Here is my terminal output:\n\n{{output}}\n\n", + "providerGemini": "Google Близнюки", + "providerOpenaiCompatible": "Сумісний з OpenAI", + "toolArguments": "Вхід", + "toolResult": "Результат", + "statusApplied": "Застосовано", + "statusRejected": "Відхилено", + "proposalApplied": "Зміну застосовано", + "proposalApplyFailed": "Не вдалося застосувати зміну", + "proposalRejectFailed": "Не вдалося відхилити зміну", + "enableTitle": "Увімкнути помічника зі штучним інтелектом", + "enableDescription": "Дозвольте асистенту прочитати ваші налаштування та запропонувати зміни для вашого схвалення.", + "readOnlyCommands": "Дозволити діагностичні команди лише для читання", + "readOnlyCommandsDescription": "Помічник може виконувати короткий список безпечних команд, таких як df та uptime, не запитуючи щоразу. Будь-які зміни на сервері завжди пропонуються першими.", + "modelDetectFailed": "Не вдалося зв’язатися з постачальником, тому це загальний список. Ви можете ввести будь-яку назву моделі.", + "modelCustom": "Введіть назву моделі", + "modelRefresh": "Оновити список", + "modelPlaceholder": "Виберіть або введіть модель", + "attachHint": "Введіть @, щоб посилатися на хост, фрагмент або автоматизацію. Зміни пропонуються для вашого схвалення.", + "runCommandTitle": "Виконати команду", + "assistant": "Помічник зі штучним інтелектом", + "terminalPanelEmpty": "Запитайте асистента про цього хоста. Будь-яка зміна стану потребує вашого попереднього схвалення.", + "terminalPanelPlaceholder": "Запитайте про цього хоста...", + "noProvidersConfigured": "Постачальника штучного інтелекту ще не налаштовано. Додайте його на вкладці помічника штучного інтелекту.", + "runsInOpenTerminal": "Працює у вашому відкритому термінальному сеансі.", + "runInTerminal": "Бігти", + "terminalContextPrefill": "Ось мій вивід з терміналу:\n\n{{output}}\n\n", "secrets": { - "shareApiKey": "Let other features use your AI provider API key for their own requests. The key is never copied, and you can revoke this at any time." + "shareApiKey": "Дозвольте іншим функціям використовувати ваш ключ API постачальника штучного інтелекту для власних запитів. Ключ ніколи не копіюється, і ви можете скасувати його будь-коли." } }, "nav": { - "ai": "AI" + "ai": "Штучний інтелект" }, "onboarding": { - "aiTitle": "AI assistant", - "aiIntro": "Termix can include an optional AI assistant. You can change this later in your settings.", - "aiSkipTitle": "Leave it off", - "aiSkipDesc": "Termix works as it does now. The assistant stays hidden.", - "aiEnableTitle": "Turn it on", - "aiEnableDesc": "Adds an assistant that reads your setup and suggests changes you approve. Needs a provider you supply, such as a local Ollama.", - "aiNote": "Nothing is sent anywhere until you add a provider and send a message." + "aiTitle": "Асистент зі штучним інтелектом", + "aiIntro": "Termix може включати додатковий помічник зі штучним інтелектом. Ви можете змінити це пізніше в налаштуваннях.", + "aiSkipTitle": "Залиште це вимкненим", + "aiSkipDesc": "Termix працює як і зараз. Помічник залишається прихованим.", + "aiEnableTitle": "Увімкніть це", + "aiEnableDesc": "Додає помічника, який читає ваші налаштування та пропонує зміни, які ви схвалюєте. Потрібен постачальник, якого ви надаєте, наприклад, місцевий Ollama.", + "aiNote": "Нічого нікуди не надсилається, доки ви не додасте постачальника та не надішлете повідомлення." }, "hosts": { - "docsLink": "View docs" + "docsLink": "Переглянути документи" }, "agents": { "title": "AI Agent", @@ -191,5 +191,8 @@ "reconnecting": "Reconnecting and restoring messages…", "unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue" + }, + "plugin": { + "name": "AI Assistant" } } diff --git a/plugins/ai/locales/translated/vi_VN.json b/plugins/ai/locales/translated/vi_VN.json index 7272afdb3..a1651020e 100644 --- a/plugins/ai/locales/translated/vi_VN.json +++ b/plugins/ai/locales/translated/vi_VN.json @@ -1,117 +1,117 @@ { "permissions": { "use": { - "title": "Use the assistant", - "description": "Open the assistant and ask it things." + "title": "Sử dụng trợ lý", + "description": "Mở trợ lý ảo và hỏi nó những câu hỏi." }, "manage_providers": { - "title": "Manage providers", - "description": "Add, edit and remove the AI providers and their API keys." + "title": "Quản lý nhà cung cấp", + "description": "Thêm, chỉnh sửa và xóa các nhà cung cấp AI và khóa API của họ." }, "apply_proposals": { - "title": "Apply proposals", - "description": "Let the assistant carry out the changes it suggests." + "title": "Áp dụng các đề xuất", + "description": "Hãy để trợ lý thực hiện những thay đổi mà nó đề xuất." }, "services.use": { - "title": "Use AI from other features", - "description": "Other features may call the assistant on your behalf." + "title": "Sử dụng trí tuệ nhân tạo từ các tính năng khác", + "description": "Các tính năng khác có thể gọi trợ lý ảo thay mặt bạn." }, "secrets.share": { - "title": "Share the API key", - "description": "Other features may use the stored AI API key without seeing it." + "title": "Chia sẻ khóa API", + "description": "Các tính năng khác có thể sử dụng khóa API AI đã lưu trữ mà không cần nhìn thấy khóa đó." } }, "settings": { - "assistantUnavailable": "The AI assistant is turned off on this server.", - "providersNeedOptIn": "Turn on the AI assistant above to add providers.", + "assistantUnavailable": "Trợ lý AI đã bị tắt trên máy chủ này.", + "providersNeedOptIn": "Hãy bật trợ lý AI ở trên để thêm nhà cung cấp.", "admin": { "globallyEnabled": { - "label": "AI assistant", - "description": "Let users turn on the AI assistant. While this is off, the assistant is hidden and blocked for everyone." + "label": "Trợ lý AI", + "description": "Cho phép người dùng bật trợ lý AI. Khi chức năng này tắt, trợ lý sẽ bị ẩn và chặn đối với tất cả mọi người." }, "privateEndpoints": { - "label": "Allowed private AI hosts", - "description": "Hosts on your private network that users may point a provider at, such as a self-hosted Ollama. Put one host on each line." + "label": "Cho phép máy chủ AI riêng", + "description": "Các máy chủ trên mạng riêng của bạn mà người dùng có thể trỏ đến nhà cung cấp, chẳng hạn như Ollama tự lưu trữ. Đặt một máy chủ trên mỗi dòng." } }, "host": { "enableAiAssistant": { - "label": "Enable AI Assistant", - "description": "Allow the AI assistant to help in this host's terminal. Off by default, and still needs AI enabled for your account." + "label": "Kích hoạt Trợ lý AI", + "description": "Cho phép trợ lý AI hỗ trợ trong thiết bị đầu cuối của máy chủ này. Mặc định là tắt, nhưng bạn vẫn cần bật AI cho tài khoản của mình." } } }, "ai": { - "title": "Assistant", - "send": "Send", + "title": "Trợ lý", + "send": "Gửi", "stop": "Bit dừng", "save": "Lưu", "cancel": "Hủy", "running": "đang chạy", - "approve": "Approve", - "reject": "Reject", - "inputPlaceholder": "Ask about your servers, or describe a change to propose", - "selectProvider": "Select a provider", - "providerSettings": "Provider settings", - "addProvider": "Add provider", - "editProvider": "Edit provider", - "removeProvider": "Remove provider", - "providerType": "Provider", + "approve": "Chấp thuận", + "reject": "Từ chối", + "inputPlaceholder": "Hãy hỏi về máy chủ của bạn, hoặc mô tả một thay đổi mà bạn muốn đề xuất.", + "selectProvider": "Chọn nhà cung cấp", + "providerSettings": "Cài đặt nhà cung cấp", + "addProvider": "Thêm nhà cung cấp", + "editProvider": "Chỉnh sửa nhà cung cấp", + "removeProvider": "Xóa nhà cung cấp", + "providerType": "Nhà cung cấp", "providerLabel": "Tên", - "providerLabelPlaceholder": "For example: Local Ollama", - "baseUrl": "Server address", - "apiKey": "API key", - "defaultModel": "Default model", - "defaultModelPlaceholder": "For example: llama3.1 or claude-opus-5", - "labelRequired": "Give this provider a name", - "providerSaveFailed": "Could not save the provider", - "providerUpdated": "Provider updated", - "providerDeleteFailed": "Could not remove the provider", - "privateEndpointHint": "Addresses on your private network need an administrator to allow the host first.", + "providerLabelPlaceholder": "Ví dụ: Ollama địa phương", + "baseUrl": "Địa chỉ máy chủ", + "apiKey": "Khóa API", + "defaultModel": "Mô hình mặc định", + "defaultModelPlaceholder": "Ví dụ: llama3.1 hoặc claude-opus-5", + "labelRequired": "Đặt tên cho nhà cung cấp này", + "providerSaveFailed": "Không thể lưu nhà cung cấp", + "providerUpdated": "Nhà cung cấp đã cập nhật", + "providerDeleteFailed": "Không thể xóa nhà cung cấp", + "privateEndpointHint": "Các địa chỉ trên mạng riêng của bạn cần được quản trị viên cho phép truy cập trước.", "providerOllama": "Ollama", - "providerAnthropic": "Anthropic", + "providerAnthropic": "Nhân loại", "providerOpenai": "OpenAI", "providerGemini": "Google Gemini", - "providerOpenaiCompatible": "OpenAI compatible", + "providerOpenaiCompatible": "Tương thích với OpenAI", "toolArguments": "Nhập", - "toolResult": "Result", - "statusApplied": "Applied", - "statusRejected": "Rejected", - "proposalApplied": "Change applied", - "proposalApplyFailed": "Could not apply the change", - "proposalRejectFailed": "Could not reject the change", - "enableTitle": "Enable the AI assistant", - "enableDescription": "Let the assistant read your setup and suggest changes for you to approve.", - "readOnlyCommands": "Allow read-only diagnostic commands", - "readOnlyCommandsDescription": "The assistant may run a short list of safe commands like df and uptime without asking each time. Anything that changes a server is always proposed first.", - "modelDetectFailed": "Could not reach the provider, so this is a general list. You can type any model name.", - "modelCustom": "Enter a model name", - "modelRefresh": "Refresh list", - "modelPlaceholder": "Choose or type a model", - "attachHint": "Type @ to reference a host, snippet or automation. Changes are proposed for you to approve.", - "runCommandTitle": "Run command", - "assistant": "AI Assistant", - "terminalPanelEmpty": "Ask the assistant about this host. Anything that changes state needs your approval first.", - "terminalPanelPlaceholder": "Ask about this host...", - "noProvidersConfigured": "No AI provider is configured yet. Add one in the AI assistant tab.", - "runsInOpenTerminal": "Runs in your open terminal session.", + "toolResult": "Kết quả", + "statusApplied": "Đã áp dụng", + "statusRejected": "Vật bị loại bỏ", + "proposalApplied": "Thay đổi đã được áp dụng", + "proposalApplyFailed": "Không thể áp dụng thay đổi", + "proposalRejectFailed": "Không thể từ chối thay đổi", + "enableTitle": "Kích hoạt trợ lý AI", + "enableDescription": "Hãy để trợ lý đọc cấu hình của bạn và đề xuất các thay đổi để bạn phê duyệt.", + "readOnlyCommands": "Cho phép các lệnh chẩn đoán chỉ đọc", + "readOnlyCommandsDescription": "Trợ lý có thể chạy một danh sách ngắn các lệnh an toàn như df và uptime mà không cần hỏi mỗi lần. Bất kỳ lệnh nào thay đổi máy chủ đều được đề xuất trước tiên.", + "modelDetectFailed": "Không thể liên lạc được với nhà cung cấp, vì vậy đây là danh sách chung. Bạn có thể nhập bất kỳ tên mẫu nào.", + "modelCustom": "Nhập tên mẫu", + "modelRefresh": "Làm mới danh sách", + "modelPlaceholder": "Chọn hoặc nhập mô hình", + "attachHint": "Nhập @ để tham chiếu đến máy chủ, đoạn mã hoặc quy trình tự động hóa. Các thay đổi được đề xuất để bạn phê duyệt.", + "runCommandTitle": "Chạy lệnh", + "assistant": "Trợ lý AI", + "terminalPanelEmpty": "Hãy hỏi trợ lý về máy chủ này. Bất cứ thay đổi nào về trạng thái đều cần sự chấp thuận của bạn trước.", + "terminalPanelPlaceholder": "Hãy hỏi về chủ nhà này...", + "noProvidersConfigured": "Chưa có nhà cung cấp AI nào được cấu hình. Hãy thêm một nhà cung cấp trong tab trợ lý AI.", + "runsInOpenTerminal": "Chương trình này chạy trong cửa sổ dòng lệnh đang mở của bạn.", "runInTerminal": "Chạy", - "terminalContextPrefill": "Here is my terminal output:\n\n{{output}}\n\n", + "terminalContextPrefill": "Đây là kết quả hiển thị trên terminal của tôi:\n\n{{output}}\n\n", "secrets": { - "shareApiKey": "Let other features use your AI provider API key for their own requests. The key is never copied, and you can revoke this at any time." + "shareApiKey": "Cho phép các tính năng khác sử dụng khóa API của nhà cung cấp AI của bạn cho các yêu cầu riêng của chúng. Khóa này không bao giờ được sao chép và bạn có thể thu hồi nó bất cứ lúc nào." } }, "nav": { - "ai": "AI" + "ai": "Trí tuệ nhân tạo" }, "onboarding": { - "aiTitle": "AI assistant", - "aiIntro": "Termix can include an optional AI assistant. You can change this later in your settings.", - "aiSkipTitle": "Leave it off", - "aiSkipDesc": "Termix works as it does now. The assistant stays hidden.", - "aiEnableTitle": "Turn it on", - "aiEnableDesc": "Adds an assistant that reads your setup and suggests changes you approve. Needs a provider you supply, such as a local Ollama.", - "aiNote": "Nothing is sent anywhere until you add a provider and send a message." + "aiTitle": "Trợ lý AI", + "aiIntro": "Termix có thể bao gồm trợ lý AI tùy chọn. Bạn có thể thay đổi điều này sau trong phần cài đặt.", + "aiSkipTitle": "Đừng làm vậy", + "aiSkipDesc": "Termix vẫn hoạt động như hiện tại. Trợ lý ảo vẫn ẩn mình.", + "aiEnableTitle": "Bật nó lên", + "aiEnableDesc": "Thêm một trợ lý đọc cấu hình của bạn và đề xuất các thay đổi mà bạn chấp thuận. Cần có nhà cung cấp do bạn chỉ định, chẳng hạn như Ollama địa phương.", + "aiNote": "Không có dữ liệu nào được gửi đi cho đến khi bạn thêm nhà cung cấp và gửi tin nhắn." }, "hosts": { "docsLink": "Xem tài liệu" @@ -191,5 +191,8 @@ "reconnecting": "Reconnecting and restoring messages…", "unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue" + }, + "plugin": { + "name": "AI Assistant" } } diff --git a/plugins/ai/locales/translated/zh_CN.json b/plugins/ai/locales/translated/zh_CN.json index b039a3dc5..d639fea78 100644 --- a/plugins/ai/locales/translated/zh_CN.json +++ b/plugins/ai/locales/translated/zh_CN.json @@ -2,28 +2,28 @@ "permissions": { "use": { "title": "使用助手", - "description": "打开助手并向其提问。" + "description": "打开助手并向它提问。" }, "manage_providers": { - "title": "管理服务提供商", - "description": "添加、编辑和移除 AI 服务提供商及其 API 密钥。" + "title": "管理供应商", + "description": "添加、编辑和删除人工智能提供商及其 API 密钥。" }, "apply_proposals": { - "title": "应用建议", - "description": "允许助手执行其建议的更改。" + "title": "提交提案", + "description": "让助手执行它建议的更改。" }, "services.use": { - "title": "在其他功能中使用 AI", - "description": "其他功能可以代表你调用助手。" + "title": "利用其他功能中的人工智能", + "description": "其他功能可能会代表您呼叫语音助手。" }, "secrets.share": { - "title": "共享 API 密钥", - "description": "其他功能可以使用已保存的 AI API 密钥,但无法查看其内容。" + "title": "分享 API 密钥", + "description": "其他功能可能在看不到密钥的情况下使用已存储的 AI API 密钥。" } }, "settings": { - "assistantUnavailable": "此服务器已关闭 AI 助手。", - "providersNeedOptIn": "请先在上方启用 AI 助手,再添加服务提供商。", + "assistantUnavailable": "此服务器上的AI助手已关闭。", + "providersNeedOptIn": "开启上方的AI助手,即可添加服务提供商。", "admin": { "globallyEnabled": { "label": "AI 助手", @@ -31,13 +31,13 @@ }, "privateEndpoints": { "label": "允许的私有 AI 主机", - "description": "允许用户将服务提供商指向的内网主机,例如自托管的 Ollama。每行填写一台主机。" + "description": "用户可向服务提供商指向的私有网络上的主机,例如自托管的 Ollama。每行填写一个主机。" } }, "host": { "enableAiAssistant": { - "label": "启用 AI 助手", - "description": "允许 AI 助手在此主机的终端中提供帮助。默认关闭,且你的账户也必须启用 AI。" + "label": "启用人工智能助手", + "description": "允许 AI 助手在此主机的终端上提供帮助。默认情况下处于关闭状态,但仍需在您的帐户中启用 AI 功能。" } } }, @@ -50,24 +50,24 @@ "running": "运行中", "approve": "批准", "reject": "拒绝", - "inputPlaceholder": "询问服务器相关问题,或描述你想进行的更改", + "inputPlaceholder": "询问服务器相关情况,或描述要提出的变更建议", "selectProvider": "选择服务提供商", - "providerSettings": "服务提供商设置", - "addProvider": "添加服务提供商", + "providerSettings": "提供商设置", + "addProvider": "添加提供商", "editProvider": "编辑提供商", - "removeProvider": "移除服务提供商", + "removeProvider": "移除提供者", "providerType": "提供商", "providerLabel": "名称", "providerLabelPlaceholder": "例如:本地 Ollama", "baseUrl": "服务器地址", "apiKey": "API 密钥", "defaultModel": "默认模型", - "defaultModelPlaceholder": "例如 llama3.1 或 claude-opus-5", + "defaultModelPlaceholder": "例如:llama3.1 或 claude-opus-5", "labelRequired": "给此提供商起个名字", - "providerSaveFailed": "无法保存服务提供商", - "providerUpdated": "服务提供商已更新", - "providerDeleteFailed": "无法移除服务提供商", - "privateEndpointHint": "使用内网地址前,需要管理员先允许该主机。", + "providerSaveFailed": "无法保存提供商", + "providerUpdated": "提供商已更新", + "providerDeleteFailed": "无法移除提供商", + "privateEndpointHint": "您私有网络上的地址需要管理员先允许主机访问。", "providerOllama": "Ollama", "providerAnthropic": "Anthropic", "providerOpenai": "OpenAI", @@ -77,28 +77,28 @@ "toolResult": "结果", "statusApplied": "已应用", "statusRejected": "已拒绝", - "proposalApplied": "更改已应用", + "proposalApplied": "变更已生效", "proposalApplyFailed": "无法应用更改", "proposalRejectFailed": "无法拒绝更改", "enableTitle": "启用 AI 助手", - "enableDescription": "允许助手读取你的配置并提出更改建议,由你批准后执行。", + "enableDescription": "让助手读取您的设置并提出更改建议,供您批准。", "readOnlyCommands": "允许只读诊断命令", - "readOnlyCommandsDescription": "助手可以执行 df、uptime 等少量安全命令,无需每次询问。任何会修改服务器的操作都会先提交建议。", + "readOnlyCommandsDescription": "助手可能会在不每次都询问的情况下运行一些安全命令,例如 `df` 和 `uptime`。任何会更改服务器的操作都会优先被提出。", "modelDetectFailed": "无法联系到提供商,所以这里提供的是通用列表。您可以输入任何模型名称。", "modelCustom": "请输入模型名称", "modelRefresh": "刷新列表", "modelPlaceholder": "选择或输入模型", - "attachHint": "输入 @ 引用主机、代码片段或自动化。更改会先提交给你批准。", - "runCommandTitle": "执行命令", - "assistant": "AI 助手", - "terminalPanelEmpty": "向助手询问此主机的相关问题。任何会改变状态的操作都需要先获得你的批准。", - "terminalPanelPlaceholder": "询问此主机的相关问题……", - "noProvidersConfigured": "尚未配置 AI 服务提供商,请在 AI 助手标签页中添加。", - "runsInOpenTerminal": "在你已打开的终端会话中执行。", + "attachHint": "输入 @ 符号可引用主机、代码片段或自动化流程。系统会提出更改建议,供您批准。", + "runCommandTitle": "运行命令", + "assistant": "人工智能助手", + "terminalPanelEmpty": "向助理询问有关此房东的信息。任何状态变更都需要您先批准。", + "terminalPanelPlaceholder": "询问一下这位房东的情况……", + "noProvidersConfigured": "尚未配置任何 AI 提供商。请在 AI 助手选项卡中添加。", + "runsInOpenTerminal": "在打开的终端会话中运行。", "runInTerminal": "运行", "terminalContextPrefill": "以下是我的终端输出:\n\n{{output}}\n\n", "secrets": { - "shareApiKey": "允许其他功能使用你的 AI 服务提供商 API 密钥发起请求。密钥不会被复制,你可以随时撤销授权。" + "shareApiKey": "允许其他功能使用您的 AI 提供商 API 密钥发出各自的请求。该密钥绝不会被复制,您可以随时撤销此授权。" } }, "nav": { @@ -106,7 +106,7 @@ }, "onboarding": { "aiTitle": "AI 助手", - "aiIntro": "Termix 提供可选的 AI 助手,你可以稍后在设置中更改。", + "aiIntro": "Termix 可以包含一个可选的 AI 助手。您可以稍后在设置中更改此选项。", "aiSkipTitle": "禁用", "aiSkipDesc": "Termix 正常工作,AI 助手将保持隐藏状态。", "aiEnableTitle": "启用", @@ -193,6 +193,6 @@ "shortcuts": "Enter 发送或排队 · Shift+Enter 换行 · Esc 中断并暂停队列" }, "plugin": { - "name": "AI 助手" + "name": "AI Assistant" } } diff --git a/plugins/ai/locales/translated/zh_TW.json b/plugins/ai/locales/translated/zh_TW.json index dc5a3d049..5361d88da 100644 --- a/plugins/ai/locales/translated/zh_TW.json +++ b/plugins/ai/locales/translated/zh_TW.json @@ -1,117 +1,117 @@ { "permissions": { "use": { - "title": "Use the assistant", - "description": "Open the assistant and ask it things." + "title": "使用助手", + "description": "打開助手並向它提問。" }, "manage_providers": { - "title": "Manage providers", - "description": "Add, edit and remove the AI providers and their API keys." + "title": "管理供應商", + "description": "新增、編輯和刪除人工智慧提供者及其 API 金鑰。" }, "apply_proposals": { - "title": "Apply proposals", - "description": "Let the assistant carry out the changes it suggests." + "title": "提交提案", + "description": "讓助手執行它建議的更改。" }, "services.use": { - "title": "Use AI from other features", - "description": "Other features may call the assistant on your behalf." + "title": "利用其他功能中的人工智慧", + "description": "其他功能可能會代表您呼叫語音助理。" }, "secrets.share": { - "title": "Share the API key", - "description": "Other features may use the stored AI API key without seeing it." + "title": "分享 API 金鑰", + "description": "其他功能可能會在不查看金鑰的情況下使用已儲存的 AI API 金鑰。" } }, "settings": { - "assistantUnavailable": "The AI assistant is turned off on this server.", - "providersNeedOptIn": "Turn on the AI assistant above to add providers.", + "assistantUnavailable": "此伺服器上的AI助理已關閉。", + "providersNeedOptIn": "開啟上方的AI助手,即可新增服務提供者。", "admin": { "globallyEnabled": { - "label": "AI assistant", - "description": "Let users turn on the AI assistant. While this is off, the assistant is hidden and blocked for everyone." + "label": "人工智慧助手", + "description": "允許用戶開啟AI助理。關閉此功能後,助手將被隱藏,所有用戶均無法存取。" }, "privateEndpoints": { - "label": "Allowed private AI hosts", - "description": "Hosts on your private network that users may point a provider at, such as a self-hosted Ollama. Put one host on each line." + "label": "允許的私有人工智慧主機", + "description": "使用者可將服務提供者指向的私有網路上的主機,例如自架的 Ollama。每行填寫一個主機。" } }, "host": { "enableAiAssistant": { - "label": "Enable AI Assistant", - "description": "Allow the AI assistant to help in this host's terminal. Off by default, and still needs AI enabled for your account." + "label": "啟用人工智慧助手", + "description": "允許 AI 助理在此主機的終端機上提供協助。預設為關閉狀態,但仍需在您的帳戶中啟用 AI 功能。" } } }, "ai": { - "title": "Assistant", - "send": "Send", + "title": "助理", + "send": "傳送", "stop": "停止位元", "save": "儲存", "cancel": "取消", "running": "執行中", - "approve": "Approve", - "reject": "Reject", - "inputPlaceholder": "Ask about your servers, or describe a change to propose", - "selectProvider": "Select a provider", - "providerSettings": "Provider settings", - "addProvider": "Add provider", - "editProvider": "Edit provider", - "removeProvider": "Remove provider", - "providerType": "Provider", + "approve": "核准", + "reject": "拒絕", + "inputPlaceholder": "詢問伺服器相關情況,或描述要提出的變更建議", + "selectProvider": "選擇服務提供者", + "providerSettings": "提供者設定", + "addProvider": "新增提供者", + "editProvider": "編輯提供者", + "removeProvider": "移除提供者", + "providerType": "提供者", "providerLabel": "名稱", - "providerLabelPlaceholder": "For example: Local Ollama", - "baseUrl": "Server address", - "apiKey": "API key", - "defaultModel": "Default model", - "defaultModelPlaceholder": "For example: llama3.1 or claude-opus-5", - "labelRequired": "Give this provider a name", - "providerSaveFailed": "Could not save the provider", - "providerUpdated": "Provider updated", - "providerDeleteFailed": "Could not remove the provider", - "privateEndpointHint": "Addresses on your private network need an administrator to allow the host first.", - "providerOllama": "Ollama", - "providerAnthropic": "Anthropic", + "providerLabelPlaceholder": "例如:本地奧拉馬", + "baseUrl": "伺服器位址", + "apiKey": "API金鑰", + "defaultModel": "預設模型", + "defaultModelPlaceholder": "例如:llama3.1 或 claude-opus-5", + "labelRequired": "給這家服務提供者取個名字", + "providerSaveFailed": "無法儲存提供者", + "providerUpdated": "提供者已更新", + "providerDeleteFailed": "無法移除提供者", + "privateEndpointHint": "您私有網路上的位址需要管理員先允許主機存取。", + "providerOllama": "奧拉瑪", + "providerAnthropic": "人類學", "providerOpenai": "OpenAI", "providerGemini": "Google Gemini", - "providerOpenaiCompatible": "OpenAI compatible", + "providerOpenaiCompatible": "相容 OpenAI", "toolArguments": "輸入", - "toolResult": "Result", - "statusApplied": "Applied", - "statusRejected": "Rejected", - "proposalApplied": "Change applied", - "proposalApplyFailed": "Could not apply the change", - "proposalRejectFailed": "Could not reject the change", - "enableTitle": "Enable the AI assistant", - "enableDescription": "Let the assistant read your setup and suggest changes for you to approve.", - "readOnlyCommands": "Allow read-only diagnostic commands", - "readOnlyCommandsDescription": "The assistant may run a short list of safe commands like df and uptime without asking each time. Anything that changes a server is always proposed first.", - "modelDetectFailed": "Could not reach the provider, so this is a general list. You can type any model name.", - "modelCustom": "Enter a model name", - "modelRefresh": "Refresh list", - "modelPlaceholder": "Choose or type a model", - "attachHint": "Type @ to reference a host, snippet or automation. Changes are proposed for you to approve.", - "runCommandTitle": "Run command", - "assistant": "AI Assistant", - "terminalPanelEmpty": "Ask the assistant about this host. Anything that changes state needs your approval first.", - "terminalPanelPlaceholder": "Ask about this host...", - "noProvidersConfigured": "No AI provider is configured yet. Add one in the AI assistant tab.", - "runsInOpenTerminal": "Runs in your open terminal session.", + "toolResult": "結果", + "statusApplied": "應用", + "statusRejected": "已拒絕", + "proposalApplied": "變更已生效", + "proposalApplyFailed": "無法套用變更", + "proposalRejectFailed": "無法拒絕更改", + "enableTitle": "啟用人工智慧助手", + "enableDescription": "請助手讀取您的設定並提出更改建議,供您批准。", + "readOnlyCommands": "允許只讀診斷命令", + "readOnlyCommandsDescription": "助手可能會在不每次都詢問的情況下執行一些安全的命令,例如 `df` 和 `uptime`。任何會更改伺服器的操作都會優先被提出。", + "modelDetectFailed": "無法聯繫到供應商,所以這裡提供的是通用清單。您可以輸入任何型號名稱。", + "modelCustom": "請輸入型號名稱", + "modelRefresh": "重新整理清單", + "modelPlaceholder": "選擇或輸入型號", + "attachHint": "輸入 @ 符號可引用主機、程式碼片段或自動化流程。系統會提出更改建議,供您批准。", + "runCommandTitle": "運行命令", + "assistant": "人工智慧助手", + "terminalPanelEmpty": "向助理詢問有關此房東的資訊。任何狀態變更都需要您先批准。", + "terminalPanelPlaceholder": "詢問一下這位房東的狀況…", + "noProvidersConfigured": "尚未配置任何 AI 提供者。請在 AI 助理標籤中新增。", + "runsInOpenTerminal": "在開啟的終端機會話中運行。", "runInTerminal": "執行", - "terminalContextPrefill": "Here is my terminal output:\n\n{{output}}\n\n", + "terminalContextPrefill": "以下是我的終端輸出:\n\n{{output}}\n\n", "secrets": { - "shareApiKey": "Let other features use your AI provider API key for their own requests. The key is never copied, and you can revoke this at any time." + "shareApiKey": "允許其他功能使用您的 AI 提供者 API 金鑰發出各自的請求。該密鑰絕不會被複製,您可以隨時撤銷此授權。" } }, "nav": { - "ai": "AI" + "ai": "人工智慧" }, "onboarding": { - "aiTitle": "AI assistant", - "aiIntro": "Termix can include an optional AI assistant. You can change this later in your settings.", - "aiSkipTitle": "Leave it off", - "aiSkipDesc": "Termix works as it does now. The assistant stays hidden.", - "aiEnableTitle": "Turn it on", - "aiEnableDesc": "Adds an assistant that reads your setup and suggests changes you approve. Needs a provider you supply, such as a local Ollama.", - "aiNote": "Nothing is sent anywhere until you add a provider and send a message." + "aiTitle": "人工智慧助手", + "aiIntro": "Termix 可以包含一個可選的 AI 助手。您可以稍後在設定中變更此選項。", + "aiSkipTitle": "丟開", + "aiSkipDesc": "Termix 的運作方式與現在相同。助手保持隱藏狀態。", + "aiEnableTitle": "打開它", + "aiEnableDesc": "添加一個助手,它可以讀取您的設定並提出您批准的更改建議。需要您提供服務提供者,例如當地的 Ollama 服務提供者。", + "aiNote": "在您新增服務提供者並發送訊息之前,任何內容都不會發送到任何地方。" }, "hosts": { "docsLink": "檢視文件" @@ -191,5 +191,8 @@ "reconnecting": "Reconnecting and restoring messages…", "unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue" + }, + "plugin": { + "name": "AI Assistant" } } diff --git a/plugins/alerts/locales/translated/af_ZA.json b/plugins/alerts/locales/translated/af_ZA.json index d2a22d477..ee0ca13ae 100644 --- a/plugins/alerts/locales/translated/af_ZA.json +++ b/plugins/alerts/locales/translated/af_ZA.json @@ -168,5 +168,8 @@ "showRead": "Wys leeswaarskuwings", "allClear": "Alles duidelik", "loading": "Laai tans..." + }, + "plugin": { + "name": "Alerts" } } diff --git a/plugins/alerts/locales/translated/ar_SA.json b/plugins/alerts/locales/translated/ar_SA.json index cec6ba30e..0eabca844 100644 --- a/plugins/alerts/locales/translated/ar_SA.json +++ b/plugins/alerts/locales/translated/ar_SA.json @@ -168,5 +168,8 @@ "showRead": "عرض تنبيهات القراءة", "allClear": "كل شيء طبيعي", "loading": "جارٍ التحميل..." + }, + "plugin": { + "name": "Alerts" } } diff --git a/plugins/alerts/locales/translated/bg_BG.json b/plugins/alerts/locales/translated/bg_BG.json index 18f1553d6..23264b34d 100644 --- a/plugins/alerts/locales/translated/bg_BG.json +++ b/plugins/alerts/locales/translated/bg_BG.json @@ -168,5 +168,8 @@ "showRead": "Показване на известия за четене", "allClear": "Всичко е чисто", "loading": "Зареждане..." + }, + "plugin": { + "name": "Alerts" } } diff --git a/plugins/alerts/locales/translated/bn_BD.json b/plugins/alerts/locales/translated/bn_BD.json index 9d7514f0d..32680ab7e 100644 --- a/plugins/alerts/locales/translated/bn_BD.json +++ b/plugins/alerts/locales/translated/bn_BD.json @@ -1,172 +1,175 @@ { "nav": { - "alerts": "Alerts" + "alerts": "সতর্কতা" }, "permissions": { "use": { - "title": "Use alerts", - "description": "Get alerts in the inbox and send them to your own channels." + "title": "সতর্কতা ব্যবহার করুন", + "description": "ইনবক্সে অ্যালার্ট পান এবং সেগুলো আপনার নিজের চ্যানেলগুলোতে পাঠান।" } }, "onboarding": { - "feature": "Alerts", - "featureDesc": "Every alert in one inbox, sent on to Discord, ntfy, email or a webhook if you want." + "feature": "সতর্কতা", + "featureDesc": "সব অ্যালার্ট একটি ইনবক্সেই থাকবে, যা আপনি চাইলে ডিসকর্ড, এনটিএফওয়াই, ইমেল বা ওয়েবহুকে পাঠাতে পারবেন।" }, "settings": { "group": { - "general": "General", - "email": "Email" + "general": "সাধারণ", + "email": "ইমেল" }, "admin": { "announcements": { - "label": "Termix announcements", - "description": "Show news from the Termix team, like security notices and releases, in everyone's inbox." + "label": "টারমিক্স ঘোষণা", + "description": "টারমিক্স টিমের পক্ষ থেকে নিরাপত্তা বিজ্ঞপ্তি এবং নতুন রিলিজের মতো খবরগুলো সবার ইনবক্সে দেখান।" }, "retentionDays": { - "label": "Keep alerts for (days)", - "description": "Older alerts are removed from every inbox." + "label": "(দিন) পর্যন্ত সতর্কতা চালু রাখুন", + "description": "প্রতিটি ইনবক্স থেকে পুরোনো অ্যালার্টগুলো মুছে ফেলা হয়।" }, "smtpHost": { - "label": "SMTP server", - "description": "Needed for email channels. Leave empty to turn email off.", + "label": "SMTP সার্ভার", + "description": "ইমেল চ্যানেলের জন্য প্রয়োজন। ইমেল বন্ধ করতে খালি রাখুন।", "placeholder": "smtp.example.com" }, "smtpPort": { - "label": "SMTP port", - "description": "Usually 587 with STARTTLS or 465 with TLS." + "label": "SMTP পোর্ট", + "description": "সাধারণত STARTTLS সহ 587 অথবা TLS সহ 465।" }, "smtpSecure": { - "label": "Use TLS from the start", - "description": "Turn on for port 465. Leave off for 587, which upgrades to TLS on its own." + "label": "শুরু থেকেই TLS ব্যবহার করুন", + "description": "পোর্ট ৪৬৫-এর জন্য চালু করুন। ৫৮৭-এর জন্য বন্ধ রাখুন, যেটি নিজে থেকেই TLS-এ আপগ্রেড হয়ে যায়।" }, "smtpUser": { - "label": "SMTP username", - "description": "Leave empty if the server does not need a login." + "label": "SMTP ব্যবহারকারীর নাম", + "description": "সার্ভারে লগইন করার প্রয়োজন না হলে এই স্থানটি খালি রাখুন।" }, "smtpPassword": { - "label": "SMTP password", - "description": "Stored encrypted." + "label": "SMTP পাসওয়ার্ড", + "description": "এনক্রিপ্ট করে সংরক্ষণ করা হয়েছে।" }, "smtpFrom": { - "label": "From address", - "description": "The sender alerts come from.", - "placeholder": "Termix " + "label": "ঠিকানা থেকে", + "description": "প্রেরকের কাছ থেকে সতর্কতাগুলো আসে।", + "placeholder": "টারমিক্স " } }, "user": { "popups": { - "label": "Alert popups", - "description": "Which new alerts pop up while you use Termix. They always land in the inbox.", - "all": "All alerts", - "warning": "Warnings and critical", - "critical": "Critical only", - "off": "None" + "label": "সতর্কতা পপআপ", + "description": "আপনি Termix ব্যবহার করার সময় কোন নতুন অ্যালার্টগুলো আসে? সেগুলো সবসময় ইনবক্সে আসে।", + "all": "সমস্ত সতর্কতা", + "warning": "সতর্কতা এবং সমালোচনামূলক", + "critical": "শুধুমাত্র সমালোচনামূলক", + "off": "কোনোটিই না" } } }, "sections": { - "inbox": "Inbox", - "channels": "Channels", - "rules": "Delivery rules" + "inbox": "ইনবক্স", + "channels": "চ্যানেল", + "rules": "ডেলিভারি নিয়মাবলী" }, "severity": { - "info": "Info", - "success": "Success", - "warning": "Warning", - "critical": "Critical" + "info": "তথ্য", + "success": "সাফল্য", + "warning": "সতর্কতা", + "critical": "সমালোচনামূলক" }, "inbox": { - "sourceTermix": "Termix", - "openLink": "Open", - "view": "View", - "unread": "Unread", - "deliveryFailed_one": "{{count}} channel failed", - "deliveryFailed_other": "{{count}} channels failed", - "markRead": "Mark as read", - "markUnread": "Mark as unread", - "markAllRead": "Mark all as read", - "delete": "Delete", - "clearRead": "Delete read alerts", - "cleared_one": "Deleted {{count}} alert", - "cleared_other": "Deleted {{count}} alerts", - "filterAll": "All", - "filterUnread": "Unread", - "anySeverity": "Any severity", - "anySource": "Any source", - "openAll": "Open in a tab", - "empty": "No alerts yet.", - "emptyUnread": "You are all caught up.", - "loadMore": "Load more" + "sourceTermix": "টার্মিক্স", + "openLink": "খোলা", + "view": "দেখুন", + "unread": "অপঠিত", + "deliveryFailed_one": "{{count}} চ্যানেল ব্যর্থ হয়েছে", + "deliveryFailed_other": "{{count}} চ্যানেল ব্যর্থ হয়েছে", + "markRead": "পঠিত হিসেবে চিহ্নিত করুন", + "markUnread": "অপঠিত হিসাবে চিহ্নিত করুন", + "markAllRead": "সবগুলো পঠিত হিসেবে চিহ্নিত করুন।", + "delete": "মুছে ফেলুন", + "clearRead": "পঠিত সতর্কতাগুলি মুছুন", + "cleared_one": "{{count}} সতর্কতা মুছে ফেলা হয়েছে", + "cleared_other": "মুছে ফেলা {{count}} সতর্কতা", + "filterAll": "সব", + "filterUnread": "অপঠিত", + "anySeverity": "যেকোনো তীব্রতা", + "anySource": "যেকোনো উৎস", + "openAll": "একটি ট্যাবে খুলুন", + "empty": "এখনো কোনো সতর্কতা আসেনি।", + "emptyUnread": "আপনি সবকিছু জেনে গেছেন।", + "loadMore": "আরও লোড করুন" }, "channels": { - "intro": "Channels are where alerts can go outside Termix. Delivery rules pick which alerts use them.", - "add": "Add channel", - "edit": "Edit channel", - "test": "Send a test", - "testSent": "Test alert sent", - "testFailed": "Test failed: {{error}}", - "deleteConfirm": "Delete the channel \"{{name}}\"?", - "deleted": "Channel deleted", - "empty": "No channels yet.", - "enabled": "Enabled", - "needsSave": "This channel needs to be opened and saved again before it can send.", - "name": "Name", - "nameRequired": "Name is required", - "type": "Type", + "intro": "চ্যানেল হলো এমন জায়গা যেখানে অ্যালার্টগুলো টারমিক্সের বাইরে যেতে পারে। ডেলিভারি রুলগুলো নির্ধারণ করে কোন অ্যালার্টগুলো সেখানে ব্যবহৃত হবে।", + "add": "চ্যানেল যোগ করুন", + "edit": "চ্যানেল সম্পাদনা করুন", + "test": "একটি পরীক্ষা পাঠান", + "testSent": "পরীক্ষার সতর্কতা পাঠানো হয়েছে", + "testFailed": "পরীক্ষা ব্যর্থ হয়েছে: {{error}}", + "deleteConfirm": "\"{{name}} \" চ্যানেলটি মুছে ফেলবেন?", + "deleted": "চ্যানেল মুছে ফেলা হয়েছে", + "empty": "এখনো কোনো চ্যানেল নেই।", + "enabled": "সক্ষম করা হয়েছে", + "needsSave": "পাঠানোর আগে এই চ্যানেলটি আবার খুলতে ও সংরক্ষণ করতে হবে।", + "name": "নাম", + "nameRequired": "নাম আবশ্যক", + "type": "প্রকার", "types": { - "webhook": "Webhook", - "ntfy": "ntfy", - "discord": "Discord", - "email": "Email" + "webhook": "ওয়েবহুক", + "ntfy": "এনটিএফওয়াই", + "discord": "ডিসকর্ড", + "email": "ইমেল" }, - "emailUnavailable": "Email needs an SMTP server, which an admin sets up in the Alerts settings.", - "webhookUrl": "URL", - "webhookHint": "Gets a JSON body for every alert.", - "method": "Method", - "headers": "Headers", - "headersHint": "One per line, like Name: value.", - "ntfyServer": "Server URL", - "ntfyTopic": "Topic", - "ntfyToken": "Access token (optional)", - "discordUrl": "Discord webhook URL", - "discordHint": "From the channel's settings in Discord, under Integrations.", - "discordUsername": "Display name (optional)", - "discordAvatar": "Avatar URL (optional)", - "emailTo": "Send to", - "emailHint": "Separate more than one address with commas.", - "privateNetwork": "Allow a private network address", - "privateNetworkHint": "Only works for hosts an admin allows in the private endpoint list." + "emailUnavailable": "ইমেইলের জন্য একটি SMTP সার্ভার প্রয়োজন, যা অ্যাডমিন অ্যালার্ট সেটিংসে সেট আপ করেন।", + "webhookUrl": "ইউআরএল", + "webhookHint": "প্রতিটি অ্যালার্টের জন্য একটি JSON বডি পাওয়া যায়।", + "method": "পদ্ধতি", + "headers": "হেডার", + "headersHint": "প্রতি লাইনে একটি করে, যেমন নাম: মান।", + "ntfyServer": "সার্ভার ইউআরএল", + "ntfyTopic": "বিষয়", + "ntfyToken": "প্রবেশ টোকেন (ঐচ্ছিক)", + "discordUrl": "ডিসকর্ড ওয়েবহুক ইউআরএল", + "discordHint": "ডিসকর্ডে চ্যানেলের সেটিংস থেকে, ইন্টিগ্রেশনস-এর অধীনে।", + "discordUsername": "প্রদর্শনের নাম (ঐচ্ছিক)", + "discordAvatar": "অবতার ইউআরএল (ঐচ্ছিক)", + "emailTo": "পাঠান", + "emailHint": "একাধিক ঠিকানা কমা দিয়ে আলাদা করুন।", + "privateNetwork": "একটি ব্যক্তিগত নেটওয়ার্ক ঠিকানা অনুমোদন করুন", + "privateNetworkHint": "এটি শুধুমাত্র সেইসব হোস্টের ক্ষেত্রেই কাজ করে, যেগুলোকে অ্যাডমিন তার প্রাইভেট এন্ডপয়েন্ট তালিকায় অনুমোদন দেয়।" }, "rules": { - "intro": "A delivery rule sends matching alerts to your channels. Alerts always stay in the inbox too.", - "add": "Add rule", - "edit": "Edit rule", - "empty": "No rules yet, so alerts only show up in the inbox.", - "needChannel": "Add a channel first.", - "enabled": "Enabled", - "name": "Name", - "nameRequired": "Name is required", - "match": "Alerts to send", - "matchHint": "* for everything, automations.* for everything from automations, or one exact kind.", - "minSeverity": "At least", - "channels": "Send to", - "channelRequired": "Pick at least one channel", - "deleteConfirm": "Delete the rule \"{{name}}\"?", - "everything": "Everything", - "summary": "{{match}}, {{severity}} or higher, to {{channels}}" + "intro": "একটি ডেলিভারি রুল আপনার চ্যানেলগুলিতে প্রাসঙ্গিক অ্যালার্ট পাঠায়। অ্যালার্টগুলো সবসময় ইনবক্সেও থেকে যায়।", + "add": "নিয়ম যোগ করুন", + "edit": "নিয়ম সম্পাদনা করুন", + "empty": "এখনো কোনো নিয়ম তৈরি হয়নি, তাই অ্যালার্টগুলো শুধু ইনবক্সেই দেখা যায়।", + "needChannel": "প্রথমে একটি চ্যানেল যোগ করুন।", + "enabled": "সক্ষম করা হয়েছে", + "name": "নাম", + "nameRequired": "নাম আবশ্যক", + "match": "পাঠানোর জন্য সতর্কতা", + "matchHint": "সবকিছুর জন্য, অটোমেশন। অটোমেশন থেকে প্রাপ্ত সবকিছুর জন্য, অথবা ঠিক এক ধরনের।", + "minSeverity": "অন্তত", + "channels": "পাঠান", + "channelRequired": "অন্তত একটি চ্যানেল বেছে নিন", + "deleteConfirm": "\"{{name}} \" নিয়মটি মুছে ফেলুন?", + "everything": "সবকিছু", + "summary": "{{match}}, {{severity}} বা তার বেশি, থেকে {{channels}} পর্যন্ত" }, "actions": { - "cancel": "Cancel", - "save": "Save", - "saving": "Saving...", - "delete": "Delete" + "cancel": "বাতিল করুন", + "save": "সংরক্ষণ করুন", + "saving": "সঞ্চয়...", + "delete": "মুছে ফেলুন" }, "widget": { - "name": "Alert Feed", - "description": "Your latest alerts, with a quick way to mark them read", - "maxItems": "Max items", - "showRead": "Show read alerts", - "allClear": "All clear", - "loading": "Loading..." + "name": "সতর্কতা ফিড", + "description": "আপনার সর্বশেষ অ্যালার্টগুলো, এবং সেগুলোকে পঠিত হিসেবে চিহ্নিত করার একটি দ্রুত উপায়।", + "maxItems": "সর্বোচ্চ আইটেম", + "showRead": "পঠিত সতর্কতা দেখান", + "allClear": "সব পরিষ্কার", + "loading": "লোড হচ্ছে..." + }, + "plugin": { + "name": "Alerts" } } diff --git a/plugins/alerts/locales/translated/ca_ES.json b/plugins/alerts/locales/translated/ca_ES.json index 092d637eb..798c2cec0 100644 --- a/plugins/alerts/locales/translated/ca_ES.json +++ b/plugins/alerts/locales/translated/ca_ES.json @@ -168,5 +168,8 @@ "showRead": "Mostra les alertes de lectura", "allClear": "Tot clar", "loading": "S'està carregant..." + }, + "plugin": { + "name": "Alerts" } } diff --git a/plugins/alerts/locales/translated/cs_CZ.json b/plugins/alerts/locales/translated/cs_CZ.json index d8ac6e804..46e87bc69 100644 --- a/plugins/alerts/locales/translated/cs_CZ.json +++ b/plugins/alerts/locales/translated/cs_CZ.json @@ -168,5 +168,8 @@ "showRead": "Zobrazit upozornění na přečtení", "allClear": "Všechno čisté", "loading": "Načítání..." + }, + "plugin": { + "name": "Alerts" } } diff --git a/plugins/alerts/locales/translated/da_DK.json b/plugins/alerts/locales/translated/da_DK.json index 02034918f..d08463a4d 100644 --- a/plugins/alerts/locales/translated/da_DK.json +++ b/plugins/alerts/locales/translated/da_DK.json @@ -168,5 +168,8 @@ "showRead": "Vis læseadvarsler", "allClear": "Alt klart", "loading": "Indlæser..." + }, + "plugin": { + "name": "Alerts" } } diff --git a/plugins/alerts/locales/translated/de_DE.json b/plugins/alerts/locales/translated/de_DE.json index 842a45601..2acaf6184 100644 --- a/plugins/alerts/locales/translated/de_DE.json +++ b/plugins/alerts/locales/translated/de_DE.json @@ -168,5 +168,8 @@ "showRead": "Lesebenachrichtigungen anzeigen", "allClear": "Alles in Ordnung", "loading": "Laden..." + }, + "plugin": { + "name": "Alerts" } } diff --git a/plugins/alerts/locales/translated/el_GR.json b/plugins/alerts/locales/translated/el_GR.json index b47ac7762..1ea75a15f 100644 --- a/plugins/alerts/locales/translated/el_GR.json +++ b/plugins/alerts/locales/translated/el_GR.json @@ -168,5 +168,8 @@ "showRead": "Εμφάνιση ειδοποιήσεων ανάγνωσης", "allClear": "Ορίζοντας είναι σαφής", "loading": "Φόρτωση..." + }, + "plugin": { + "name": "Alerts" } } diff --git a/plugins/alerts/locales/translated/es_ES.json b/plugins/alerts/locales/translated/es_ES.json index aba6af717..eed85985d 100644 --- a/plugins/alerts/locales/translated/es_ES.json +++ b/plugins/alerts/locales/translated/es_ES.json @@ -168,5 +168,8 @@ "showRead": "Mostrar alertas de lectura", "allClear": "Todo correcto", "loading": "Cargando..." + }, + "plugin": { + "name": "Alerts" } } diff --git a/plugins/alerts/locales/translated/fi_FI.json b/plugins/alerts/locales/translated/fi_FI.json index 3e9748ae8..77f1fb230 100644 --- a/plugins/alerts/locales/translated/fi_FI.json +++ b/plugins/alerts/locales/translated/fi_FI.json @@ -168,5 +168,8 @@ "showRead": "Näytä lukuilmoitukset", "allClear": "Kaikki selvää", "loading": "Ladataan..." + }, + "plugin": { + "name": "Alerts" } } diff --git a/plugins/alerts/locales/translated/fr_FR.json b/plugins/alerts/locales/translated/fr_FR.json index 06d4a378a..c41d520f5 100644 --- a/plugins/alerts/locales/translated/fr_FR.json +++ b/plugins/alerts/locales/translated/fr_FR.json @@ -168,5 +168,8 @@ "showRead": "Afficher les alertes de lecture", "allClear": "Aucune alerte", "loading": "Chargement..." + }, + "plugin": { + "name": "Alerts" } } diff --git a/plugins/alerts/locales/translated/he_IL.json b/plugins/alerts/locales/translated/he_IL.json index 0f3b1a5dc..e0f220f60 100644 --- a/plugins/alerts/locales/translated/he_IL.json +++ b/plugins/alerts/locales/translated/he_IL.json @@ -168,5 +168,8 @@ "showRead": "הצג התראות קריאה", "allClear": "הכל ברור", "loading": "טְעִינָה..." + }, + "plugin": { + "name": "Alerts" } } diff --git a/plugins/alerts/locales/translated/hi_IN.json b/plugins/alerts/locales/translated/hi_IN.json index 92b403d80..91c335a21 100644 --- a/plugins/alerts/locales/translated/hi_IN.json +++ b/plugins/alerts/locales/translated/hi_IN.json @@ -4,13 +4,13 @@ }, "permissions": { "use": { - "title": "Use alerts", - "description": "Get alerts in the inbox and send them to your own channels." + "title": "अलर्ट का उपयोग करें", + "description": "इनबॉक्स में अलर्ट प्राप्त करें और उन्हें अपने चैनलों पर भेजें।" } }, "onboarding": { "feature": "अलर्ट", - "featureDesc": "Every alert in one inbox, sent on to Discord, ntfy, email or a webhook if you want." + "featureDesc": "सभी अलर्ट एक ही इनबॉक्स में, और यदि आप चाहें तो उन्हें डिस्कोर्ड, एनटीएफआई, ईमेल या वेबहुक पर भेजा जा सकता है।" }, "settings": { "group": { @@ -19,141 +19,141 @@ }, "admin": { "announcements": { - "label": "Termix announcements", - "description": "Show news from the Termix team, like security notices and releases, in everyone's inbox." + "label": "टर्मिक्स की घोषणाएँ", + "description": "टर्मिक्स टीम से संबंधित समाचार, जैसे कि सुरक्षा संबंधी सूचनाएं और विज्ञप्तियां, सभी के इनबॉक्स में दिखाएं।" }, "retentionDays": { - "label": "Keep alerts for (days)", - "description": "Older alerts are removed from every inbox." + "label": "(दिनों) के लिए अलर्ट चालू रखें", + "description": "सभी इनबॉक्स से पुराने अलर्ट हटा दिए जाते हैं।" }, "smtpHost": { - "label": "SMTP server", - "description": "Needed for email channels. Leave empty to turn email off.", + "label": "एसएमटीपी सर्वर", + "description": "ईमेल चैनलों के लिए आवश्यक। ईमेल बंद करने के लिए इसे खाली छोड़ दें।", "placeholder": "smtp.example.com" }, "smtpPort": { - "label": "SMTP port", - "description": "Usually 587 with STARTTLS or 465 with TLS." + "label": "एसएमटीपी पोर्ट", + "description": "आमतौर पर STARTTLS के साथ 587 या TLS के साथ 465 का उपयोग किया जाता है।" }, "smtpSecure": { - "label": "Use TLS from the start", - "description": "Turn on for port 465. Leave off for 587, which upgrades to TLS on its own." + "label": "शुरुआत से ही TLS का उपयोग करें", + "description": "पोर्ट 465 के लिए इसे चालू करें। पोर्ट 587 के लिए इसे बंद रखें, क्योंकि यह अपने आप TLS में अपग्रेड हो जाता है।" }, "smtpUser": { - "label": "SMTP username", - "description": "Leave empty if the server does not need a login." + "label": "एसएमटीपी उपयोगकर्ता नाम", + "description": "यदि सर्वर को लॉगिन की आवश्यकता नहीं है तो इसे खाली छोड़ दें।" }, "smtpPassword": { - "label": "SMTP password", - "description": "Stored encrypted." + "label": "एसएमटीपी पासवर्ड", + "description": "एन्क्रिप्टेड रूप में संग्रहीत।" }, "smtpFrom": { - "label": "From address", - "description": "The sender alerts come from.", - "placeholder": "Termix " + "label": "इस पते से", + "description": "प्रेषक अलर्ट कहाँ से आते हैं?", + "placeholder": "टर्मिक्स " } }, "user": { "popups": { - "label": "Alert popups", - "description": "Which new alerts pop up while you use Termix. They always land in the inbox.", - "all": "All alerts", - "warning": "Warnings and critical", - "critical": "Critical only", + "label": "अलर्ट पॉपअप", + "description": "टर्मिक्स का उपयोग करते समय कौन-कौन से नए अलर्ट आते हैं? वे हमेशा आपके इनबॉक्स में आते हैं।", + "all": "सभी अलर्ट", + "warning": "चेतावनी और महत्वपूर्ण", + "critical": "केवल महत्वपूर्ण", "off": "कोई नहीं" } } }, "sections": { - "inbox": "Inbox", + "inbox": "इनबॉक्स", "channels": "चैनल", - "rules": "Delivery rules" + "rules": "डिलीवरी नियम" }, "severity": { "info": "जानकारी", "success": "सफल", "warning": "चेतावनी", - "critical": "Critical" + "critical": "गंभीर" }, "inbox": { "sourceTermix": "Termix", "openLink": "खोलें", "view": "देखें", - "unread": "Unread", - "deliveryFailed_one": "{{count}} channel failed", - "deliveryFailed_other": "{{count}} channels failed", - "markRead": "Mark as read", - "markUnread": "Mark as unread", - "markAllRead": "Mark all as read", + "unread": "अपठित ग", + "deliveryFailed_one": "{{count}} चैनल विफल हो गया", + "deliveryFailed_other": "{{count}} चैनल विफल हो गए", + "markRead": "पढ़े हुए का चिह्न", + "markUnread": "अपठित के रूप में चिह्नित करें", + "markAllRead": "सभी को पढ़ा हुआ मार्क करें", "delete": "हटाएँ", - "clearRead": "Delete read alerts", - "cleared_one": "Deleted {{count}} alert", - "cleared_other": "Deleted {{count}} alerts", + "clearRead": "पढ़े गए अलर्ट हटाएं", + "cleared_one": "अलर्ट हटा दिया गया {{count}}", + "cleared_other": "हटाए गए {{count}} अलर्ट", "filterAll": "सभी", - "filterUnread": "Unread", - "anySeverity": "Any severity", - "anySource": "Any source", - "openAll": "Open in a tab", - "empty": "No alerts yet.", - "emptyUnread": "You are all caught up.", - "loadMore": "Load more" + "filterUnread": "अपठित ग", + "anySeverity": "किसी भी गंभीरता", + "anySource": "कोई भी स्रोत", + "openAll": "एक टैब में खोलें", + "empty": "अभी तक कोई अलर्ट नहीं है।", + "emptyUnread": "आप सभी अपडेट्स से अवगत हैं।", + "loadMore": "और लोड करें" }, "channels": { - "intro": "Channels are where alerts can go outside Termix. Delivery rules pick which alerts use them.", - "add": "Add channel", - "edit": "Edit channel", - "test": "Send a test", - "testSent": "Test alert sent", - "testFailed": "Test failed: {{error}}", - "deleteConfirm": "Delete the channel \"{{name}}\"?", - "deleted": "Channel deleted", - "empty": "No channels yet.", + "intro": "चैनल वो जगह हैं जहां अलर्ट टर्मिक्स से बाहर जा सकते हैं। डिलीवरी नियम तय करते हैं कि कौन से अलर्ट इनका उपयोग करेंगे।", + "add": "चैनल जोड़ें", + "edit": "चैनल संपादित करें", + "test": "टेस्ट भेजें", + "testSent": "परीक्षण अलर्ट भेजा गया", + "testFailed": "परीक्षण विफल: {{error}}", + "deleteConfirm": "चैनल \"{{name}} \" को हटा दें?", + "deleted": "चैनल हटा दिया गया", + "empty": "अभी तक कोई चैनल उपलब्ध नहीं हैं।", "enabled": "सक्षम", - "needsSave": "This channel needs to be opened and saved again before it can send.", + "needsSave": "भेजने से पहले इस चैनल को दोबारा खोलकर सेव करना होगा।", "name": "नाम", "nameRequired": "नाम आवश्यक है", "type": "प्रकार", "types": { - "webhook": "Webhook", + "webhook": "WEbhook", "ntfy": "ntfy", "discord": "Discord", "email": "ईमेल" }, - "emailUnavailable": "Email needs an SMTP server, which an admin sets up in the Alerts settings.", + "emailUnavailable": "ईमेल के लिए एक SMTP सर्वर की आवश्यकता होती है, जिसे एडमिन अलर्ट सेटिंग्स में सेट करता है।", "webhookUrl": "URL", - "webhookHint": "Gets a JSON body for every alert.", - "method": "Method", - "headers": "Headers", - "headersHint": "One per line, like Name: value.", + "webhookHint": "प्रत्येक अलर्ट के लिए एक JSON बॉडी प्राप्त करता है।", + "method": "तरीका", + "headers": "हेडर", + "headersHint": "एक पंक्ति में एक, जैसे नाम: मान।", "ntfyServer": "सर्वर URL", "ntfyTopic": "विषय", - "ntfyToken": "Access token (optional)", - "discordUrl": "Discord webhook URL", - "discordHint": "From the channel's settings in Discord, under Integrations.", - "discordUsername": "Display name (optional)", - "discordAvatar": "Avatar URL (optional)", - "emailTo": "Send to", - "emailHint": "Separate more than one address with commas.", - "privateNetwork": "Allow a private network address", - "privateNetworkHint": "Only works for hosts an admin allows in the private endpoint list." + "ntfyToken": "एक्सेस टोकन (वैकल्पिक)", + "discordUrl": "डिस्कॉर्ड वेबहुक यूआरएल", + "discordHint": "डिस्कोर्ड में चैनल की सेटिंग में, इंटीग्रेशन के अंतर्गत।", + "discordUsername": "प्रदर्शन नाम (वैकल्पिक)", + "discordAvatar": "अवतार यूआरएल (वैकल्पिक)", + "emailTo": "भेजना", + "emailHint": "एक से अधिक पतों को अल्पविराम से अलग करें।", + "privateNetwork": "एक निजी नेटवर्क पते की अनुमति दें", + "privateNetworkHint": "यह सुविधा केवल उन होस्ट्स के लिए काम करती है जिन्हें एडमिन निजी एंडपॉइंट सूची में शामिल करने की अनुमति देता है।" }, "rules": { - "intro": "A delivery rule sends matching alerts to your channels. Alerts always stay in the inbox too.", - "add": "Add rule", - "edit": "Edit rule", - "empty": "No rules yet, so alerts only show up in the inbox.", - "needChannel": "Add a channel first.", + "intro": "एक डिलीवरी नियम आपके चैनलों पर मिलान करने वाले अलर्ट भेजता है। अलर्ट हमेशा आपके इनबॉक्स में भी रहते हैं।", + "add": "नियम जोड़ें", + "edit": "नियम संपादित करें", + "empty": "अभी तक कोई नियम नहीं बने हैं, इसलिए अलर्ट केवल इनबॉक्स में ही दिखाई देंगे।", + "needChannel": "पहले एक चैनल जोड़ें।", "enabled": "सक्षम", "name": "नाम", "nameRequired": "नाम आवश्यक है", - "match": "Alerts to send", - "matchHint": "* for everything, automations.* for everything from automations, or one exact kind.", - "minSeverity": "At least", - "channels": "Send to", - "channelRequired": "Pick at least one channel", - "deleteConfirm": "Delete the rule \"{{name}}\"?", - "everything": "Everything", - "summary": "{{match}}, {{severity}} or higher, to {{channels}}" + "match": "भेजे जाने वाले अलर्ट", + "matchHint": "* हर चीज के लिए, स्वचालन। * स्वचालन से लेकर हर चीज के लिए, या एक सटीक प्रकार के लिए।", + "minSeverity": "कम से कम", + "channels": "भेजना", + "channelRequired": "कम से कम एक चैनल चुनें", + "deleteConfirm": "क्या नियम \"{{name}} \" को हटा दें?", + "everything": "सब कुछ", + "summary": "{{match}}, {{severity}} या इससे अधिक, से {{channels}} तक" }, "actions": { "cancel": "रद्द करें", @@ -163,10 +163,13 @@ }, "widget": { "name": "अलर्ट फीड", - "description": "Your latest alerts, with a quick way to mark them read", - "maxItems": "Max items", - "showRead": "Show read alerts", + "description": "आपके नवीनतम अलर्ट, जिन्हें आप आसानी से पढ़ सकते हैं।", + "maxItems": "अधिकतम आइटम", + "showRead": "पढ़े जाने के अलर्ट दिखाएँ", "allClear": "सब ठीक है", "loading": "लोड हो रहा है..." + }, + "plugin": { + "name": "Alerts" } } diff --git a/plugins/alerts/locales/translated/hu_HU.json b/plugins/alerts/locales/translated/hu_HU.json index 8f5fcd7b4..9ed84aaa1 100644 --- a/plugins/alerts/locales/translated/hu_HU.json +++ b/plugins/alerts/locales/translated/hu_HU.json @@ -168,5 +168,8 @@ "showRead": "Olvasási értesítések megjelenítése", "allClear": "Minden tiszta", "loading": "Terhelés..." + }, + "plugin": { + "name": "Alerts" } } diff --git a/plugins/alerts/locales/translated/id_ID.json b/plugins/alerts/locales/translated/id_ID.json index 9d7514f0d..b91790e6c 100644 --- a/plugins/alerts/locales/translated/id_ID.json +++ b/plugins/alerts/locales/translated/id_ID.json @@ -1,172 +1,175 @@ { "nav": { - "alerts": "Alerts" + "alerts": "Peringatan" }, "permissions": { "use": { - "title": "Use alerts", - "description": "Get alerts in the inbox and send them to your own channels." + "title": "Gunakan peringatan", + "description": "Dapatkan notifikasi di kotak masuk dan kirimkan ke saluran Anda sendiri." } }, "onboarding": { - "feature": "Alerts", - "featureDesc": "Every alert in one inbox, sent on to Discord, ntfy, email or a webhook if you want." + "feature": "Peringatan", + "featureDesc": "Semua notifikasi dalam satu kotak masuk, yang kemudian dikirim ke Discord, ntfy, email, atau webhook jika Anda mau." }, "settings": { "group": { - "general": "General", - "email": "Email" + "general": "Umum", + "email": "E-mail" }, "admin": { "announcements": { - "label": "Termix announcements", - "description": "Show news from the Termix team, like security notices and releases, in everyone's inbox." + "label": "Pengumuman Termix", + "description": "Tampilkan berita dari tim Termix, seperti pemberitahuan keamanan dan rilis, di kotak masuk setiap orang." }, "retentionDays": { - "label": "Keep alerts for (days)", - "description": "Older alerts are removed from every inbox." + "label": "Aktifkan peringatan selama (hari)", + "description": "Notifikasi lama dihapus dari setiap kotak masuk." }, "smtpHost": { - "label": "SMTP server", - "description": "Needed for email channels. Leave empty to turn email off.", + "label": "Server SMTP", + "description": "Diperlukan untuk saluran email. Biarkan kosong untuk menonaktifkan email.", "placeholder": "smtp.example.com" }, "smtpPort": { - "label": "SMTP port", - "description": "Usually 587 with STARTTLS or 465 with TLS." + "label": "Port SMTP", + "description": "Biasanya 587 dengan STARTTLS atau 465 dengan TLS." }, "smtpSecure": { - "label": "Use TLS from the start", - "description": "Turn on for port 465. Leave off for 587, which upgrades to TLS on its own." + "label": "Gunakan TLS sejak awal.", + "description": "Aktifkan untuk port 465. Biarkan nonaktif untuk port 587, yang akan secara otomatis diupgrade ke TLS." }, "smtpUser": { - "label": "SMTP username", - "description": "Leave empty if the server does not need a login." + "label": "Nama pengguna SMTP", + "description": "Biarkan kosong jika server tidak memerlukan login." }, "smtpPassword": { - "label": "SMTP password", - "description": "Stored encrypted." + "label": "Kata sandi SMTP", + "description": "Disimpan dalam keadaan terenkripsi." }, "smtpFrom": { - "label": "From address", - "description": "The sender alerts come from.", + "label": "Dari alamat", + "description": "Peringatan pengirim berasal dari.", "placeholder": "Termix " } }, "user": { "popups": { - "label": "Alert popups", - "description": "Which new alerts pop up while you use Termix. They always land in the inbox.", - "all": "All alerts", - "warning": "Warnings and critical", - "critical": "Critical only", - "off": "None" + "label": "Popup peringatan", + "description": "Notifikasi baru apa saja yang muncul saat Anda menggunakan Termix? Notifikasi tersebut selalu masuk ke kotak masuk Anda.", + "all": "Semua peringatan", + "warning": "Peringatan dan hal-hal penting", + "critical": "Kritik saja", + "off": "Tidak ada" } } }, "sections": { - "inbox": "Inbox", - "channels": "Channels", - "rules": "Delivery rules" + "inbox": "Kotak Masuk", + "channels": "Saluran", + "rules": "Aturan pengiriman" }, "severity": { - "info": "Info", - "success": "Success", - "warning": "Warning", - "critical": "Critical" + "info": "Informasi", + "success": "Kesuksesan", + "warning": "Peringatan", + "critical": "Kritis" }, "inbox": { "sourceTermix": "Termix", - "openLink": "Open", - "view": "View", - "unread": "Unread", - "deliveryFailed_one": "{{count}} channel failed", - "deliveryFailed_other": "{{count}} channels failed", - "markRead": "Mark as read", - "markUnread": "Mark as unread", - "markAllRead": "Mark all as read", - "delete": "Delete", - "clearRead": "Delete read alerts", - "cleared_one": "Deleted {{count}} alert", - "cleared_other": "Deleted {{count}} alerts", - "filterAll": "All", - "filterUnread": "Unread", - "anySeverity": "Any severity", - "anySource": "Any source", - "openAll": "Open in a tab", - "empty": "No alerts yet.", - "emptyUnread": "You are all caught up.", - "loadMore": "Load more" + "openLink": "Membuka", + "view": "Melihat", + "unread": "Belum dibaca", + "deliveryFailed_one": "{{count}} saluran gagal", + "deliveryFailed_other": "{{count}} saluran gagal", + "markRead": "Tandai sebagai sudah dibaca", + "markUnread": "Tandai sebagai belum dibaca", + "markAllRead": "Tandai semua sebagai sudah dibaca", + "delete": "Menghapus", + "clearRead": "Hapus notifikasi baca", + "cleared_one": "Peringatan {{count}} dihapus", + "cleared_other": "Peringatan {{count}} dihapus", + "filterAll": "Semua", + "filterUnread": "Belum dibaca", + "anySeverity": "Tingkat keparahan apa pun", + "anySource": "Sumber apa pun", + "openAll": "Buka di tab", + "empty": "Belum ada peringatan.", + "emptyUnread": "Anda sudah mengetahui semuanya.", + "loadMore": "Muat lebih banyak" }, "channels": { - "intro": "Channels are where alerts can go outside Termix. Delivery rules pick which alerts use them.", - "add": "Add channel", - "edit": "Edit channel", - "test": "Send a test", - "testSent": "Test alert sent", - "testFailed": "Test failed: {{error}}", - "deleteConfirm": "Delete the channel \"{{name}}\"?", - "deleted": "Channel deleted", - "empty": "No channels yet.", - "enabled": "Enabled", - "needsSave": "This channel needs to be opened and saved again before it can send.", - "name": "Name", - "nameRequired": "Name is required", - "type": "Type", + "intro": "Saluran adalah tempat peringatan dapat dikirim ke luar Termix. Aturan pengiriman memilih peringatan mana yang akan menggunakannya.", + "add": "Tambahkan saluran", + "edit": "Edit saluran", + "test": "Kirim tes", + "testSent": "Peringatan uji coba terkirim", + "testFailed": "Tes gagal: {{error}}", + "deleteConfirm": "Hapus saluran \"{{name}}\"?", + "deleted": "Saluran dihapus", + "empty": "Belum ada saluran.", + "enabled": "Diaktifkan", + "needsSave": "Saluran ini perlu dibuka dan disimpan kembali sebelum dapat mengirim data.", + "name": "Nama", + "nameRequired": "Nama wajib diisi.", + "type": "Jenis", "types": { "webhook": "Webhook", "ntfy": "ntfy", - "discord": "Discord", - "email": "Email" + "discord": "Perselisihan", + "email": "E-mail" }, - "emailUnavailable": "Email needs an SMTP server, which an admin sets up in the Alerts settings.", + "emailUnavailable": "Email memerlukan server SMTP, yang diatur oleh administrator di pengaturan Notifikasi.", "webhookUrl": "URL", - "webhookHint": "Gets a JSON body for every alert.", - "method": "Method", - "headers": "Headers", - "headersHint": "One per line, like Name: value.", - "ntfyServer": "Server URL", - "ntfyTopic": "Topic", - "ntfyToken": "Access token (optional)", - "discordUrl": "Discord webhook URL", - "discordHint": "From the channel's settings in Discord, under Integrations.", - "discordUsername": "Display name (optional)", - "discordAvatar": "Avatar URL (optional)", - "emailTo": "Send to", - "emailHint": "Separate more than one address with commas.", - "privateNetwork": "Allow a private network address", - "privateNetworkHint": "Only works for hosts an admin allows in the private endpoint list." + "webhookHint": "Menerima isi JSON untuk setiap peringatan.", + "method": "Metode", + "headers": "Judul", + "headersHint": "Satu per baris, seperti Nama: nilai.", + "ntfyServer": "URL Server", + "ntfyTopic": "Topik", + "ntfyToken": "Token akses (opsional)", + "discordUrl": "URL webhook Discord", + "discordHint": "Dari pengaturan saluran di Discord, di bawah Integrasi.", + "discordUsername": "Nama tampilan (opsional)", + "discordAvatar": "URL Avatar (opsional)", + "emailTo": "Kirim ke", + "emailHint": "Pisahkan lebih dari satu alamat dengan koma.", + "privateNetwork": "Izinkan alamat jaringan pribadi", + "privateNetworkHint": "Hanya berfungsi untuk host yang diizinkan oleh admin dalam daftar endpoint privat." }, "rules": { - "intro": "A delivery rule sends matching alerts to your channels. Alerts always stay in the inbox too.", - "add": "Add rule", - "edit": "Edit rule", - "empty": "No rules yet, so alerts only show up in the inbox.", - "needChannel": "Add a channel first.", - "enabled": "Enabled", - "name": "Name", - "nameRequired": "Name is required", - "match": "Alerts to send", - "matchHint": "* for everything, automations.* for everything from automations, or one exact kind.", - "minSeverity": "At least", - "channels": "Send to", - "channelRequired": "Pick at least one channel", - "deleteConfirm": "Delete the rule \"{{name}}\"?", - "everything": "Everything", - "summary": "{{match}}, {{severity}} or higher, to {{channels}}" + "intro": "Aturan pengiriman mengirimkan peringatan yang sesuai ke saluran Anda. Peringatan juga selalu tetap berada di kotak masuk.", + "add": "Tambahkan aturan", + "edit": "Edit aturan", + "empty": "Belum ada aturan, jadi notifikasi hanya muncul di kotak masuk.", + "needChannel": "Tambahkan saluran terlebih dahulu.", + "enabled": "Diaktifkan", + "name": "Nama", + "nameRequired": "Nama wajib diisi.", + "match": "Peringatan untuk dikirim", + "matchHint": "* untuk segala hal, otomatisasi.* untuk segala hal mulai dari otomatisasi, atau satu jenis tertentu.", + "minSeverity": "Setidaknya", + "channels": "Kirim ke", + "channelRequired": "Pilih setidaknya satu saluran", + "deleteConfirm": "Hapus aturan \"{{name}}\"?", + "everything": "Semuanya", + "summary": "{{match}}, {{severity}} atau lebih tinggi, hingga {{channels}}" }, "actions": { - "cancel": "Cancel", - "save": "Save", - "saving": "Saving...", - "delete": "Delete" + "cancel": "Membatalkan", + "save": "Menyimpan", + "saving": "Penghematan...", + "delete": "Menghapus" }, "widget": { - "name": "Alert Feed", - "description": "Your latest alerts, with a quick way to mark them read", - "maxItems": "Max items", - "showRead": "Show read alerts", - "allClear": "All clear", - "loading": "Loading..." + "name": "Umpan Peringatan", + "description": "Notifikasi terbaru Anda, dengan cara cepat untuk menandainya sebagai sudah dibaca.", + "maxItems": "Jumlah maksimum", + "showRead": "Tampilkan pemberitahuan telah dibaca", + "allClear": "Semuanya aman.", + "loading": "Memuat..." + }, + "plugin": { + "name": "Alerts" } } diff --git a/plugins/alerts/locales/translated/it_IT.json b/plugins/alerts/locales/translated/it_IT.json index d601c4a82..a9884fa3e 100644 --- a/plugins/alerts/locales/translated/it_IT.json +++ b/plugins/alerts/locales/translated/it_IT.json @@ -168,5 +168,8 @@ "showRead": "Mostra gli avvisi di lettura", "allClear": "Tutto a posto", "loading": "Caricamento in corso..." + }, + "plugin": { + "name": "Alerts" } } diff --git a/plugins/alerts/locales/translated/ja_JP.json b/plugins/alerts/locales/translated/ja_JP.json index 16274c924..ecd7baf0c 100644 --- a/plugins/alerts/locales/translated/ja_JP.json +++ b/plugins/alerts/locales/translated/ja_JP.json @@ -168,5 +168,8 @@ "showRead": "既読通知を表示する", "allClear": "すべて正常", "loading": "読み込み中..." + }, + "plugin": { + "name": "Alerts" } } diff --git a/plugins/alerts/locales/translated/ko_KR.json b/plugins/alerts/locales/translated/ko_KR.json index b3dfe9046..18f8d3263 100644 --- a/plugins/alerts/locales/translated/ko_KR.json +++ b/plugins/alerts/locales/translated/ko_KR.json @@ -168,5 +168,8 @@ "showRead": "읽음 알림 표시", "allClear": "모두 정상", "loading": "로딩 중..." + }, + "plugin": { + "name": "Alerts" } } diff --git a/plugins/alerts/locales/translated/nl_NL.json b/plugins/alerts/locales/translated/nl_NL.json index c8ae3775f..6ee048e75 100644 --- a/plugins/alerts/locales/translated/nl_NL.json +++ b/plugins/alerts/locales/translated/nl_NL.json @@ -168,5 +168,8 @@ "showRead": "Leeswaarschuwingen weergeven", "allClear": "Alles in orde", "loading": "Laden..." + }, + "plugin": { + "name": "Alerts" } } diff --git a/plugins/alerts/locales/translated/no_NO.json b/plugins/alerts/locales/translated/no_NO.json index 5e9f5305f..348cecefd 100644 --- a/plugins/alerts/locales/translated/no_NO.json +++ b/plugins/alerts/locales/translated/no_NO.json @@ -1,16 +1,16 @@ { "nav": { - "alerts": "Alerts" + "alerts": "Varsler" }, "permissions": { "use": { - "title": "Use alerts", - "description": "Get alerts in the inbox and send them to your own channels." + "title": "Bruk varsler", + "description": "Få varsler i innboksen og send dem til dine egne kanaler." } }, "onboarding": { - "feature": "Alerts", - "featureDesc": "Every alert in one inbox, sent on to Discord, ntfy, email or a webhook if you want." + "feature": "Varsler", + "featureDesc": "Alle varsler i én innboks, sendt videre til Discord, ntfy, e-post eller en webhook om du vil." }, "settings": { "group": { @@ -19,141 +19,141 @@ }, "admin": { "announcements": { - "label": "Termix announcements", - "description": "Show news from the Termix team, like security notices and releases, in everyone's inbox." + "label": "Termix-kunngjøringer", + "description": "Vis nyheter fra Termix-teamet, som sikkerhetsvarsler og utgivelser, i alles innboks." }, "retentionDays": { - "label": "Keep alerts for (days)", - "description": "Older alerts are removed from every inbox." + "label": "Behold varsler i (dager)", + "description": "Eldre varsler fjernes fra alle innbokser." }, "smtpHost": { - "label": "SMTP server", - "description": "Needed for email channels. Leave empty to turn email off.", + "label": "SMTP-server", + "description": "Nødvendig for e-postkanaler. La stå tomt for å slå av e-post.", "placeholder": "smtp.example.com" }, "smtpPort": { - "label": "SMTP port", - "description": "Usually 587 with STARTTLS or 465 with TLS." + "label": "SMTP-port", + "description": "Vanligvis 587 med STARTTLS eller 465 med TLS." }, "smtpSecure": { - "label": "Use TLS from the start", - "description": "Turn on for port 465. Leave off for 587, which upgrades to TLS on its own." + "label": "Bruk TLS fra starten av", + "description": "Slå på port 465. Slå av for port 587, som oppgraderer til TLS på egenhånd." }, "smtpUser": { - "label": "SMTP username", - "description": "Leave empty if the server does not need a login." + "label": "SMTP-brukernavn", + "description": "La feltet stå tomt hvis serveren ikke trenger pålogging." }, "smtpPassword": { - "label": "SMTP password", - "description": "Stored encrypted." + "label": "SMTP-passord", + "description": "Lagret kryptert." }, "smtpFrom": { - "label": "From address", - "description": "The sender alerts come from.", + "label": "Fra adresse", + "description": "Avsendervarslene kommer fra.", "placeholder": "Termix " } }, "user": { "popups": { - "label": "Alert popups", - "description": "Which new alerts pop up while you use Termix. They always land in the inbox.", - "all": "All alerts", - "warning": "Warnings and critical", - "critical": "Critical only", + "label": "Varselspopup-vinduer", + "description": "Hvilke nye varsler dukker opp mens du bruker Termix? De havner alltid i innboksen.", + "all": "Alle varsler", + "warning": "Advarsler og kritiske", + "critical": "Kun kritisk", "off": "Ingen" } } }, "sections": { - "inbox": "Inbox", - "channels": "Channels", - "rules": "Delivery rules" + "inbox": "Innboks", + "channels": "Kanaler", + "rules": "Leveringsregler" }, "severity": { "info": "Info", "success": "Suksess", "warning": "Advarsel", - "critical": "Critical" + "critical": "Kritisk" }, "inbox": { "sourceTermix": "Termix", - "openLink": "Open", - "view": "View", - "unread": "Unread", - "deliveryFailed_one": "{{count}} channel failed", - "deliveryFailed_other": "{{count}} channels failed", - "markRead": "Mark as read", - "markUnread": "Mark as unread", - "markAllRead": "Mark all as read", + "openLink": "Åpne", + "view": "Utsikt", + "unread": "Ulest", + "deliveryFailed_one": "{{count}} kanal mislyktes", + "deliveryFailed_other": "{{count}} kanaler mislyktes", + "markRead": "Merk som lest", + "markUnread": "Merk som ulest", + "markAllRead": "Merk alle som lest", "delete": "Slett", - "clearRead": "Delete read alerts", - "cleared_one": "Deleted {{count}} alert", - "cleared_other": "Deleted {{count}} alerts", - "filterAll": "All", - "filterUnread": "Unread", - "anySeverity": "Any severity", - "anySource": "Any source", - "openAll": "Open in a tab", - "empty": "No alerts yet.", - "emptyUnread": "You are all caught up.", - "loadMore": "Load more" + "clearRead": "Slett lesevarsler", + "cleared_one": "Slettet {{count}} -varsel", + "cleared_other": "Slettede {{count}} varsler", + "filterAll": "Alle", + "filterUnread": "Ulest", + "anySeverity": "Enhver alvorlighetsgrad", + "anySource": "Enhver kilde", + "openAll": "Åpne i en fane", + "empty": "Ingen varsler ennå.", + "emptyUnread": "Dere er helt oppdatert.", + "loadMore": "Last inn mer" }, "channels": { - "intro": "Channels are where alerts can go outside Termix. Delivery rules pick which alerts use them.", - "add": "Add channel", - "edit": "Edit channel", - "test": "Send a test", - "testSent": "Test alert sent", - "testFailed": "Test failed: {{error}}", - "deleteConfirm": "Delete the channel \"{{name}}\"?", - "deleted": "Channel deleted", - "empty": "No channels yet.", + "intro": "Kanaler er der varsler kan sendes utenfor Termix. Leveringsregler velger hvilke varsler som bruker dem.", + "add": "Legg til kanal", + "edit": "Rediger kanal", + "test": "Send en test", + "testSent": "Testvarsel sendt", + "testFailed": "Testen mislyktes: {{error}}", + "deleteConfirm": "Slette kanalen «{{name}}»?", + "deleted": "Kanalen slettet", + "empty": "Ingen kanaler ennå.", "enabled": "Aktivert", - "needsSave": "This channel needs to be opened and saved again before it can send.", + "needsSave": "Denne kanalen må åpnes og lagres på nytt før den kan sende.", "name": "Navn", "nameRequired": "Navn er påkrevd", "type": "Type", "types": { "webhook": "Webhook", "ntfy": "ntfy", - "discord": "Discord", + "discord": "Disharmoni", "email": "E-post" }, - "emailUnavailable": "Email needs an SMTP server, which an admin sets up in the Alerts settings.", - "webhookUrl": "URL", - "webhookHint": "Gets a JSON body for every alert.", - "method": "Method", - "headers": "Headers", - "headersHint": "One per line, like Name: value.", + "emailUnavailable": "E-post trenger en SMTP-server, som en administrator konfigurerer i varslingsinnstillingene.", + "webhookUrl": "URL-adresse", + "webhookHint": "Henter en JSON-tekst for hvert varsel.", + "method": "Metode", + "headers": "Overskrifter", + "headersHint": "Én per linje, som Navn: verdi.", "ntfyServer": "Server-URL", - "ntfyTopic": "Topic", - "ntfyToken": "Access token (optional)", - "discordUrl": "Discord webhook URL", - "discordHint": "From the channel's settings in Discord, under Integrations.", - "discordUsername": "Display name (optional)", - "discordAvatar": "Avatar URL (optional)", - "emailTo": "Send to", - "emailHint": "Separate more than one address with commas.", - "privateNetwork": "Allow a private network address", - "privateNetworkHint": "Only works for hosts an admin allows in the private endpoint list." + "ntfyTopic": "Emne", + "ntfyToken": "Tilgangstoken (valgfritt)", + "discordUrl": "Discord webhook-URL", + "discordHint": "Fra kanalens innstillinger i Discord, under Integrasjoner.", + "discordUsername": "Visningsnavn (valgfritt)", + "discordAvatar": "Avatar-URL (valgfritt)", + "emailTo": "Send til", + "emailHint": "Skill mer enn én adresse med komma.", + "privateNetwork": "Tillat en privat nettverksadresse", + "privateNetworkHint": "Fungerer bare for verter som en administrator tillater i listen over private endepunkter." }, "rules": { - "intro": "A delivery rule sends matching alerts to your channels. Alerts always stay in the inbox too.", - "add": "Add rule", - "edit": "Edit rule", - "empty": "No rules yet, so alerts only show up in the inbox.", - "needChannel": "Add a channel first.", + "intro": "En leveringsregel sender samsvarende varsler til kanalene dine. Varsler forblir også alltid i innboksen.", + "add": "Legg til regel", + "edit": "Rediger regel", + "empty": "Ingen regler ennå, så varsler vises bare i innboksen.", + "needChannel": "Legg til en kanal først.", "enabled": "Aktivert", "name": "Navn", "nameRequired": "Navn er påkrevd", - "match": "Alerts to send", - "matchHint": "* for everything, automations.* for everything from automations, or one exact kind.", - "minSeverity": "At least", - "channels": "Send to", - "channelRequired": "Pick at least one channel", - "deleteConfirm": "Delete the rule \"{{name}}\"?", - "everything": "Everything", - "summary": "{{match}}, {{severity}} or higher, to {{channels}}" + "match": "Varsler som skal sendes", + "matchHint": "* for alt, automatiseringer.* for alt fra automatiseringer, eller én eksakt type.", + "minSeverity": "Minst", + "channels": "Send til", + "channelRequired": "Velg minst én kanal", + "deleteConfirm": "Slette regelen «{{name}}»?", + "everything": "Alt", + "summary": "{{match}}, {{severity}} eller høyere, til {{channels}}" }, "actions": { "cancel": "Avbryt", @@ -162,11 +162,14 @@ "delete": "Slett" }, "widget": { - "name": "Alert Feed", - "description": "Your latest alerts, with a quick way to mark them read", - "maxItems": "Max items", - "showRead": "Show read alerts", - "allClear": "All clear", + "name": "Varselstrøm", + "description": "Dine siste varsler, med en rask måte å merke dem som lest", + "maxItems": "Maks antall varer", + "showRead": "Vis lesevarsler", + "allClear": "Alt klart", "loading": "Laster..." + }, + "plugin": { + "name": "Alerts" } } diff --git a/plugins/alerts/locales/translated/pl_PL.json b/plugins/alerts/locales/translated/pl_PL.json index c1bbf8b49..6915a6ca5 100644 --- a/plugins/alerts/locales/translated/pl_PL.json +++ b/plugins/alerts/locales/translated/pl_PL.json @@ -4,13 +4,13 @@ }, "permissions": { "use": { - "title": "Use alerts", - "description": "Get alerts in the inbox and send them to your own channels." + "title": "Użyj alertów", + "description": "Otrzymuj powiadomienia do skrzynki odbiorczej i wysyłaj je na swoje kanały." } }, "onboarding": { "feature": "Alerty", - "featureDesc": "Every alert in one inbox, sent on to Discord, ntfy, email or a webhook if you want." + "featureDesc": "Każdy alert w jednej skrzynce odbiorczej, wysyłany na Discord, ntfy, e-mail lub webhook, jeśli sobie tego życzysz." }, "settings": { "group": { @@ -19,97 +19,97 @@ }, "admin": { "announcements": { - "label": "Termix announcements", - "description": "Show news from the Termix team, like security notices and releases, in everyone's inbox." + "label": "Ogłoszenia Termix", + "description": "Wyświetlaj aktualności zespołu Termix, takie jak powiadomienia i komunikaty dotyczące bezpieczeństwa, w skrzynkach odbiorczych wszystkich użytkowników." }, "retentionDays": { - "label": "Keep alerts for (days)", - "description": "Older alerts are removed from every inbox." + "label": "Zachowaj alerty przez (dni)", + "description": "Starsze alerty zostaną usunięte ze wszystkich skrzynek odbiorczych." }, "smtpHost": { - "label": "SMTP server", - "description": "Needed for email channels. Leave empty to turn email off.", + "label": "Serwer SMTP", + "description": "Potrzebne dla kanałów e-mail. Pozostaw puste, aby wyłączyć pocztę e-mail.", "placeholder": "smtp.example.com" }, "smtpPort": { - "label": "SMTP port", - "description": "Usually 587 with STARTTLS or 465 with TLS." + "label": "Port SMTP", + "description": "Zwykle 587 z STARTTLS lub 465 z TLS." }, "smtpSecure": { - "label": "Use TLS from the start", - "description": "Turn on for port 465. Leave off for 587, which upgrades to TLS on its own." + "label": "Używaj protokołu TLS od samego początku", + "description": "Włącz dla portu 465. Pozostaw wyłączone dla portu 587, który automatycznie uaktualnia się do protokołu TLS." }, "smtpUser": { - "label": "SMTP username", - "description": "Leave empty if the server does not need a login." + "label": "Nazwa użytkownika SMTP", + "description": "Pozostaw puste, jeśli serwer nie wymaga logowania." }, "smtpPassword": { - "label": "SMTP password", - "description": "Stored encrypted." + "label": "Hasło SMTP", + "description": "Przechowywane w postaci zaszyfrowanej." }, "smtpFrom": { - "label": "From address", - "description": "The sender alerts come from.", + "label": "Z adresu", + "description": "Od nadawcy pochodzą alerty.", "placeholder": "Termix " } }, "user": { "popups": { - "label": "Alert popups", - "description": "Which new alerts pop up while you use Termix. They always land in the inbox.", - "all": "All alerts", - "warning": "Warnings and critical", - "critical": "Critical only", + "label": "Okienka z alertami", + "description": "Jakie nowe alerty pojawiają się podczas korzystania z Termix. Zawsze trafiają do skrzynki odbiorczej.", + "all": "Wszystkie alerty", + "warning": "Ostrzeżenia i ostrzeżenia krytyczne", + "critical": "Tylko krytyczne", "off": "Żaden" } } }, "sections": { - "inbox": "Inbox", + "inbox": "Skrzynka odbiorcza", "channels": "Kanały", - "rules": "Delivery rules" + "rules": "Zasady dostawy" }, "severity": { "info": "Informacje", "success": "Powodzenie", "warning": "Ostrzeżenie", - "critical": "Critical" + "critical": "Krytyczny" }, "inbox": { "sourceTermix": "Termix", "openLink": "Otwórz", "view": "Podgląd", - "unread": "Unread", - "deliveryFailed_one": "{{count}} channel failed", - "deliveryFailed_other": "{{count}} channels failed", - "markRead": "Mark as read", - "markUnread": "Mark as unread", - "markAllRead": "Mark all as read", + "unread": "Niewykształcony", + "deliveryFailed_one": "{{count}} kanał uszkodzony", + "deliveryFailed_other": "{{count}} kanałów nie powiodło się", + "markRead": "Oznacz jako przeczytane", + "markUnread": "Oznacz jako nieprzeczytane", + "markAllRead": "Oznacz wszystkie jako przeczytane", "delete": "Usuń", - "clearRead": "Delete read alerts", - "cleared_one": "Deleted {{count}} alert", - "cleared_other": "Deleted {{count}} alerts", + "clearRead": "Usuń alerty odczytu", + "cleared_one": "Usunięto alert {{count}}", + "cleared_other": "Usunięto {{count}} alertów", "filterAll": "Wszystkie", - "filterUnread": "Unread", - "anySeverity": "Any severity", - "anySource": "Any source", - "openAll": "Open in a tab", - "empty": "No alerts yet.", - "emptyUnread": "You are all caught up.", - "loadMore": "Load more" + "filterUnread": "Niewykształcony", + "anySeverity": "Jakakolwiek powaga", + "anySource": "Jakiekolwiek źródło", + "openAll": "Otwórz w karcie", + "empty": "Brak alertów.", + "emptyUnread": "Wszyscy jesteście na bieżąco.", + "loadMore": "Załaduj więcej" }, "channels": { - "intro": "Channels are where alerts can go outside Termix. Delivery rules pick which alerts use them.", - "add": "Add channel", - "edit": "Edit channel", - "test": "Send a test", - "testSent": "Test alert sent", - "testFailed": "Test failed: {{error}}", - "deleteConfirm": "Delete the channel \"{{name}}\"?", + "intro": "Kanały to miejsca, do których alerty mogą trafiać poza Termix. Reguły dostarczania określają, które alerty z nich korzystają.", + "add": "Dodaj kanał", + "edit": "Edytuj kanał", + "test": "Wyślij test", + "testSent": "Wysłano alert testowy", + "testFailed": "Test nie powiódł się: {{error}}", + "deleteConfirm": "Usunąć kanał „{{name}}”?", "deleted": "Kanał usunięty", - "empty": "No channels yet.", + "empty": "Brak kanałów.", "enabled": "Włączona", - "needsSave": "This channel needs to be opened and saved again before it can send.", + "needsSave": "Przed wysłaniem należy ponownie otworzyć i zapisać ten kanał.", "name": "Nazwa", "nameRequired": "Nazwa jest wymagana", "type": "Typ", @@ -119,41 +119,41 @@ "discord": "Discord", "email": "E-mail" }, - "emailUnavailable": "Email needs an SMTP server, which an admin sets up in the Alerts settings.", + "emailUnavailable": "Do obsługi poczty e-mail potrzebny jest serwer SMTP, który administrator konfiguruje w ustawieniach alertów.", "webhookUrl": "Adres URL", - "webhookHint": "Gets a JSON body for every alert.", + "webhookHint": "Pobiera treść JSON dla każdego alertu.", "method": "Metoda", - "headers": "Headers", - "headersHint": "One per line, like Name: value.", + "headers": "Nagłówki", + "headersHint": "Po jednym w każdym wierszu, np. Nazwa: wartość.", "ntfyServer": "Adres URL serwera", "ntfyTopic": "Temat", - "ntfyToken": "Access token (optional)", - "discordUrl": "Discord webhook URL", - "discordHint": "From the channel's settings in Discord, under Integrations.", - "discordUsername": "Display name (optional)", - "discordAvatar": "Avatar URL (optional)", - "emailTo": "Send to", - "emailHint": "Separate more than one address with commas.", - "privateNetwork": "Allow a private network address", - "privateNetworkHint": "Only works for hosts an admin allows in the private endpoint list." + "ntfyToken": "Token dostępu (opcjonalnie)", + "discordUrl": "Adres URL webhooka Discord", + "discordHint": "W ustawieniach kanału w Discordzie, w sekcji Integracje.", + "discordUsername": "Nazwa wyświetlana (opcjonalnie)", + "discordAvatar": "Adres URL awatara (opcjonalnie)", + "emailTo": "Wyślij do", + "emailHint": "Oddziel więcej niż jeden adres przecinkami.", + "privateNetwork": "Zezwól na prywatny adres sieciowy", + "privateNetworkHint": "Działa tylko w przypadku hostów dozwolonych przez administratora na liście prywatnych punktów końcowych." }, "rules": { - "intro": "A delivery rule sends matching alerts to your channels. Alerts always stay in the inbox too.", - "add": "Add rule", - "edit": "Edit rule", - "empty": "No rules yet, so alerts only show up in the inbox.", - "needChannel": "Add a channel first.", + "intro": "Reguła dostarczania wysyła pasujące alerty do Twoich kanałów. Alerty zawsze pozostają w skrzynce odbiorczej.", + "add": "Dodaj regułę", + "edit": "Edytuj regułę", + "empty": "Nie ma jeszcze żadnych reguł, więc powiadomienia pojawiają się tylko w skrzynce odbiorczej.", + "needChannel": "Najpierw dodaj kanał.", "enabled": "Włączona", "name": "Nazwa", "nameRequired": "Nazwa jest wymagana", - "match": "Alerts to send", - "matchHint": "* for everything, automations.* for everything from automations, or one exact kind.", - "minSeverity": "At least", - "channels": "Send to", - "channelRequired": "Pick at least one channel", - "deleteConfirm": "Delete the rule \"{{name}}\"?", - "everything": "Everything", - "summary": "{{match}}, {{severity}} or higher, to {{channels}}" + "match": "Alerty do wysłania", + "matchHint": "* do wszystkiego, automatyzacje.* do wszystkiego, od automatyzacji, lub jednego konkretnego rodzaju.", + "minSeverity": "Co najmniej", + "channels": "Wyślij do", + "channelRequired": "Wybierz co najmniej jeden kanał", + "deleteConfirm": "Usunąć regułę „{{name}}”?", + "everything": "Wszystko", + "summary": "{{match}}, {{severity}} lub wyższy, do {{channels}}" }, "actions": { "cancel": "Anuluj", @@ -163,10 +163,13 @@ }, "widget": { "name": "Kanał alertów", - "description": "Your latest alerts, with a quick way to mark them read", - "maxItems": "Max items", - "showRead": "Show read alerts", + "description": "Twoje najnowsze alerty z możliwością szybkiego oznaczenia ich jako przeczytanych", + "maxItems": "Maksymalna liczba elementów", + "showRead": "Pokaż alerty odczytu", "allClear": "Bez alertów", "loading": "Ładowanie..." + }, + "plugin": { + "name": "Alerts" } } diff --git a/plugins/alerts/locales/translated/pt_BR.json b/plugins/alerts/locales/translated/pt_BR.json index 0afaab20a..1bc8a1b54 100644 --- a/plugins/alerts/locales/translated/pt_BR.json +++ b/plugins/alerts/locales/translated/pt_BR.json @@ -1,159 +1,159 @@ { "nav": { - "alerts": "Alerts" + "alerts": "Alertas" }, "permissions": { "use": { - "title": "Use alerts", - "description": "Get alerts in the inbox and send them to your own channels." + "title": "Usar alertas", + "description": "Receba alertas na caixa de entrada e envie-os para seus próprios canais." } }, "onboarding": { - "feature": "Alerts", - "featureDesc": "Every alert in one inbox, sent on to Discord, ntfy, email or a webhook if you want." + "feature": "Alertas", + "featureDesc": "Todas as notificações em uma única caixa de entrada, enviadas para o Discord, NTfy, e-mail ou webhook, se desejar." }, "settings": { "group": { "general": "Geral", - "email": "Email" + "email": "E-mail" }, "admin": { "announcements": { - "label": "Termix announcements", - "description": "Show news from the Termix team, like security notices and releases, in everyone's inbox." + "label": "Anúncios da Termix", + "description": "Exibir notícias da equipe Termix, como avisos de segurança e comunicados, na caixa de entrada de todos." }, "retentionDays": { - "label": "Keep alerts for (days)", - "description": "Older alerts are removed from every inbox." + "label": "Manter alertas por (dias)", + "description": "Alertas antigos são removidos de todas as caixas de entrada." }, "smtpHost": { - "label": "SMTP server", - "description": "Needed for email channels. Leave empty to turn email off.", + "label": "Servidor SMTP", + "description": "Necessário para canais de e-mail. Deixe em branco para desativar o e-mail.", "placeholder": "smtp.example.com" }, "smtpPort": { - "label": "SMTP port", - "description": "Usually 587 with STARTTLS or 465 with TLS." + "label": "porta SMTP", + "description": "Normalmente, usa-se a porta 587 com STARTTLS ou a porta 465 com TLS." }, "smtpSecure": { - "label": "Use TLS from the start", - "description": "Turn on for port 465. Leave off for 587, which upgrades to TLS on its own." + "label": "Use TLS desde o início.", + "description": "Ative para a porta 465. Deixe desativado para a porta 587, que atualiza para TLS automaticamente." }, "smtpUser": { - "label": "SMTP username", - "description": "Leave empty if the server does not need a login." + "label": "nome de usuário SMTP", + "description": "Deixe em branco se o servidor não exigir login." }, "smtpPassword": { - "label": "SMTP password", - "description": "Stored encrypted." + "label": "Senha SMTP", + "description": "Armazenado criptografado." }, "smtpFrom": { - "label": "From address", - "description": "The sender alerts come from.", + "label": "Do endereço", + "description": "Os alertas do remetente vêm de:", "placeholder": "Termix " } }, "user": { "popups": { - "label": "Alert popups", - "description": "Which new alerts pop up while you use Termix. They always land in the inbox.", - "all": "All alerts", - "warning": "Warnings and critical", - "critical": "Critical only", + "label": "Janelas de alerta", + "description": "Quais novos alertas aparecem enquanto você usa o Termix? Eles sempre chegam na caixa de entrada.", + "all": "Todos os alertas", + "warning": "Avisos e alertas", + "critical": "Somente crítico", "off": "Nenhum" } } }, "sections": { - "inbox": "Inbox", - "channels": "Channels", - "rules": "Delivery rules" + "inbox": "Caixa de entrada", + "channels": "Canais", + "rules": "Regras de entrega" }, "severity": { - "info": "Info", - "success": "Success", + "info": "Informações", + "success": "Sucesso", "warning": "Atenção", - "critical": "Critical" + "critical": "Crítico" }, "inbox": { "sourceTermix": "Termix", - "openLink": "Open", - "view": "View", - "unread": "Unread", - "deliveryFailed_one": "{{count}} channel failed", - "deliveryFailed_other": "{{count}} channels failed", - "markRead": "Mark as read", - "markUnread": "Mark as unread", - "markAllRead": "Mark all as read", + "openLink": "Abrir", + "view": "Visualizar", + "unread": "Não lido", + "deliveryFailed_one": "{{count}} canal falhou", + "deliveryFailed_other": "{{count}} canais falharam", + "markRead": "Marcar como lido", + "markUnread": "Marcar como não lida", + "markAllRead": "Marcar tudo como lido", "delete": "Apagar", - "clearRead": "Delete read alerts", - "cleared_one": "Deleted {{count}} alert", - "cleared_other": "Deleted {{count}} alerts", - "filterAll": "All", - "filterUnread": "Unread", - "anySeverity": "Any severity", - "anySource": "Any source", - "openAll": "Open in a tab", - "empty": "No alerts yet.", - "emptyUnread": "You are all caught up.", - "loadMore": "Load more" + "clearRead": "Excluir alertas de leitura", + "cleared_one": "Alerta excluído {{count}}", + "cleared_other": "Alertas excluídos {{count}}", + "filterAll": "Todos", + "filterUnread": "Não lido", + "anySeverity": "Qualquer gravidade", + "anySource": "Qualquer fonte", + "openAll": "Abrir em uma aba", + "empty": "Ainda não há alertas.", + "emptyUnread": "Vocês estão todos a par da situação.", + "loadMore": "Carregar mais" }, "channels": { - "intro": "Channels are where alerts can go outside Termix. Delivery rules pick which alerts use them.", - "add": "Add channel", - "edit": "Edit channel", - "test": "Send a test", - "testSent": "Test alert sent", - "testFailed": "Test failed: {{error}}", - "deleteConfirm": "Delete the channel \"{{name}}\"?", - "deleted": "Channel deleted", - "empty": "No channels yet.", - "enabled": "Enabled", - "needsSave": "This channel needs to be opened and saved again before it can send.", - "name": "Name", - "nameRequired": "Name is required", + "intro": "Os canais são locais para onde os alertas podem ser enviados fora do Termix. As regras de entrega definem quais alertas os utilizarão.", + "add": "Adicionar canal", + "edit": "Editar canal", + "test": "Enviar um teste", + "testSent": "Alerta de teste enviado", + "testFailed": "Teste falhou: {{error}}", + "deleteConfirm": "Excluir o canal \"{{name}}\"?", + "deleted": "Canal excluído", + "empty": "Ainda não há canais.", + "enabled": "Habilitado", + "needsSave": "Este canal precisa ser aberto e salvo novamente antes de poder enviar mensagens.", + "name": "Nome", + "nameRequired": "O nome é obrigatório.", "type": "Tipo", "types": { "webhook": "Webhook", "ntfy": "ntfy", - "discord": "Discord", - "email": "Email" + "discord": "Discórdia", + "email": "E-mail" }, - "emailUnavailable": "Email needs an SMTP server, which an admin sets up in the Alerts settings.", + "emailUnavailable": "O envio de e-mails requer um servidor SMTP, que um administrador configura nas configurações de Alertas.", "webhookUrl": "URL", - "webhookHint": "Gets a JSON body for every alert.", - "method": "Method", - "headers": "Headers", - "headersHint": "One per line, like Name: value.", + "webhookHint": "Obtém um corpo JSON para cada alerta.", + "method": "Método", + "headers": "Cabeçalhos", + "headersHint": "Um por linha, como Nome: valor.", "ntfyServer": "URL do Servidor", - "ntfyTopic": "Topic", - "ntfyToken": "Access token (optional)", - "discordUrl": "Discord webhook URL", - "discordHint": "From the channel's settings in Discord, under Integrations.", - "discordUsername": "Display name (optional)", - "discordAvatar": "Avatar URL (optional)", - "emailTo": "Send to", - "emailHint": "Separate more than one address with commas.", - "privateNetwork": "Allow a private network address", - "privateNetworkHint": "Only works for hosts an admin allows in the private endpoint list." + "ntfyTopic": "Tópico", + "ntfyToken": "Token de acesso (opcional)", + "discordUrl": "URL do webhook do Discord", + "discordHint": "Nas configurações do canal no Discord, em Integrações.", + "discordUsername": "Nome de exibição (opcional)", + "discordAvatar": "URL do avatar (opcional)", + "emailTo": "Enviar para", + "emailHint": "Separe mais de um endereço com vírgulas.", + "privateNetwork": "Permitir um endereço de rede privada", + "privateNetworkHint": "Funciona apenas para hosts que um administrador permite na lista de endpoints privados." }, "rules": { - "intro": "A delivery rule sends matching alerts to your channels. Alerts always stay in the inbox too.", - "add": "Add rule", - "edit": "Edit rule", - "empty": "No rules yet, so alerts only show up in the inbox.", - "needChannel": "Add a channel first.", - "enabled": "Enabled", - "name": "Name", - "nameRequired": "Name is required", - "match": "Alerts to send", - "matchHint": "* for everything, automations.* for everything from automations, or one exact kind.", - "minSeverity": "At least", - "channels": "Send to", - "channelRequired": "Pick at least one channel", - "deleteConfirm": "Delete the rule \"{{name}}\"?", - "everything": "Everything", - "summary": "{{match}}, {{severity}} or higher, to {{channels}}" + "intro": "Uma regra de entrega envia alertas correspondentes aos seus canais. Os alertas também permanecem sempre na caixa de entrada.", + "add": "Adicionar regra", + "edit": "Editar regra", + "empty": "Ainda não existem regras, portanto os alertas só aparecem na caixa de entrada.", + "needChannel": "Primeiro, adicione um canal.", + "enabled": "Habilitado", + "name": "Nome", + "nameRequired": "O nome é obrigatório.", + "match": "Alertas a enviar", + "matchHint": "* para tudo, automações.* para tudo, desde automações, até um tipo específico.", + "minSeverity": "Pelo menos", + "channels": "Enviar para", + "channelRequired": "Escolha pelo menos um canal.", + "deleteConfirm": "Apagar a regra \"{{name}}\"?", + "everything": "Tudo", + "summary": "{{match}}, {{severity}} ou superior, para {{channels}}" }, "actions": { "cancel": "Cancelar", @@ -162,11 +162,14 @@ "delete": "Apagar" }, "widget": { - "name": "Alert Feed", - "description": "Your latest alerts, with a quick way to mark them read", - "maxItems": "Max items", - "showRead": "Show read alerts", - "allClear": "All clear", + "name": "Feed de alertas", + "description": "Seus alertas mais recentes, com uma maneira rápida de marcá-los como lidos.", + "maxItems": "Itens máximos", + "showRead": "Mostrar alertas de leitura", + "allClear": "Tudo certo", "loading": "Carregando..." + }, + "plugin": { + "name": "Alerts" } } diff --git a/plugins/alerts/locales/translated/pt_PT.json b/plugins/alerts/locales/translated/pt_PT.json index e90d1bf97..2c85ff6aa 100644 --- a/plugins/alerts/locales/translated/pt_PT.json +++ b/plugins/alerts/locales/translated/pt_PT.json @@ -4,13 +4,13 @@ }, "permissions": { "use": { - "title": "Use alerts", - "description": "Get alerts in the inbox and send them to your own channels." + "title": "Usar alertas", + "description": "Receba alertas na caixa de entrada e envie-os para os seus próprios canais." } }, "onboarding": { "feature": "Alertas", - "featureDesc": "Every alert in one inbox, sent on to Discord, ntfy, email or a webhook if you want." + "featureDesc": "Todas as notificações numa única caixa de entrada, enviadas para o Discord, NTfy, e-mail ou webhook, se desejar." }, "settings": { "group": { @@ -19,97 +19,97 @@ }, "admin": { "announcements": { - "label": "Termix announcements", - "description": "Show news from the Termix team, like security notices and releases, in everyone's inbox." + "label": "Anúncios da Termix", + "description": "Exibir notícias da equipa Termix, como avisos de segurança e comunicados, na caixa de entrada de todos." }, "retentionDays": { - "label": "Keep alerts for (days)", - "description": "Older alerts are removed from every inbox." + "label": "Manter alertas durante (dias)", + "description": "Os alertas antigos são removidos de todas as caixas de entrada." }, "smtpHost": { - "label": "SMTP server", - "description": "Needed for email channels. Leave empty to turn email off.", - "placeholder": "smtp.example.com" + "label": "Servidor SMTP", + "description": "Necessário para canais de e-mail. Deixe em branco para desativar o e-mail.", + "placeholder": "smtp.exemplo.com" }, "smtpPort": { - "label": "SMTP port", - "description": "Usually 587 with STARTTLS or 465 with TLS." + "label": "porta SMTP", + "description": "Normalmente, utiliza-se a porta 587 com STARTTLS ou a porta 465 com TLS." }, "smtpSecure": { - "label": "Use TLS from the start", - "description": "Turn on for port 465. Leave off for 587, which upgrades to TLS on its own." + "label": "Utilize TLS desde o início.", + "description": "Ative para a porta 465. Deixe desativado para a porta 587, que atualiza para TLS automaticamente." }, "smtpUser": { - "label": "SMTP username", - "description": "Leave empty if the server does not need a login." + "label": "nome de utilizador SMTP", + "description": "Deixe em branco se o servidor não necessitar de login." }, "smtpPassword": { - "label": "SMTP password", - "description": "Stored encrypted." + "label": "Palavra-passe SMTP", + "description": "Armazenado encriptado." }, "smtpFrom": { - "label": "From address", - "description": "The sender alerts come from.", + "label": "Do endereço", + "description": "Os alertas do remetente provêm de:", "placeholder": "Termix " } }, "user": { "popups": { - "label": "Alert popups", - "description": "Which new alerts pop up while you use Termix. They always land in the inbox.", - "all": "All alerts", - "warning": "Warnings and critical", - "critical": "Critical only", + "label": "Janelas de alerta", + "description": "Que novos alertas aparecem enquanto utiliza o Termix? Chegam sempre na caixa de entrada.", + "all": "Todos os alertas", + "warning": "Avisos e alertas", + "critical": "Somente crítico", "off": "Nenhuma" } } }, "sections": { - "inbox": "Inbox", + "inbox": "Caixa de entrada", "channels": "Canais", - "rules": "Delivery rules" + "rules": "Regras de entrega" }, "severity": { "info": "Info", "success": "Sucesso", "warning": "Aviso", - "critical": "Critical" + "critical": "Crítico" }, "inbox": { "sourceTermix": "Termix", "openLink": "Abrir", "view": "Ver", - "unread": "Unread", - "deliveryFailed_one": "{{count}} channel failed", - "deliveryFailed_other": "{{count}} channels failed", - "markRead": "Mark as read", - "markUnread": "Mark as unread", - "markAllRead": "Mark all as read", + "unread": "Não lido", + "deliveryFailed_one": "{{count}} canal falhou", + "deliveryFailed_other": "{{count}} canais falharam", + "markRead": "Marcar como lido", + "markUnread": "Marcar como não lida", + "markAllRead": "Marcar tudo como lido", "delete": "Eliminar", - "clearRead": "Delete read alerts", - "cleared_one": "Deleted {{count}} alert", - "cleared_other": "Deleted {{count}} alerts", + "clearRead": "Apagar alertas de leitura", + "cleared_one": "Alerta eliminado {{count}}", + "cleared_other": "Alertas excluídos {{count}}", "filterAll": "Todas", - "filterUnread": "Unread", - "anySeverity": "Any severity", - "anySource": "Any source", - "openAll": "Open in a tab", - "empty": "No alerts yet.", - "emptyUnread": "You are all caught up.", - "loadMore": "Load more" + "filterUnread": "Não lido", + "anySeverity": "Qualquer gravidade", + "anySource": "Qualquer fonte", + "openAll": "Abrir numa aba", + "empty": "Ainda não há alertas.", + "emptyUnread": "Estão todos a par da situação.", + "loadMore": "Carregar mais" }, "channels": { - "intro": "Channels are where alerts can go outside Termix. Delivery rules pick which alerts use them.", - "add": "Add channel", - "edit": "Edit channel", - "test": "Send a test", - "testSent": "Test alert sent", - "testFailed": "Test failed: {{error}}", - "deleteConfirm": "Delete the channel \"{{name}}\"?", - "deleted": "Channel deleted", - "empty": "No channels yet.", + "intro": "Os canais são locais para onde os alertas podem ser enviados fora do Termix. As regras de entrega definem quais os alertas que os irão utilizar.", + "add": "Adicionar canal", + "edit": "Editar canal", + "test": "Enviar um teste", + "testSent": "Alerta de teste enviado", + "testFailed": "Teste falhou: {{error}}", + "deleteConfirm": "Apagar o canal \"{{name}}\"?", + "deleted": "Canal excluído", + "empty": "Ainda não há canais.", "enabled": "Ativado", - "needsSave": "This channel needs to be opened and saved again before it can send.", + "needsSave": "Este canal precisa de ser aberto e guardado novamente antes de poder enviar mensagens.", "name": "Nome", "nameRequired": "O nome é obrigatório", "type": "Tipo", @@ -119,41 +119,41 @@ "discord": "Discord", "email": "E-mail" }, - "emailUnavailable": "Email needs an SMTP server, which an admin sets up in the Alerts settings.", + "emailUnavailable": "O envio de e-mails requer um servidor SMTP, que um administrador configura nas definições de Alertas.", "webhookUrl": "URL", - "webhookHint": "Gets a JSON body for every alert.", - "method": "Method", - "headers": "Headers", - "headersHint": "One per line, like Name: value.", + "webhookHint": "Obtém um corpo JSON para cada alerta.", + "method": "Método", + "headers": "Cabeçalhos", + "headersHint": "Um por linha, como por exemplo Nome: valor.", "ntfyServer": "URL do servidor", "ntfyTopic": "Tópico", - "ntfyToken": "Access token (optional)", - "discordUrl": "Discord webhook URL", - "discordHint": "From the channel's settings in Discord, under Integrations.", - "discordUsername": "Display name (optional)", - "discordAvatar": "Avatar URL (optional)", - "emailTo": "Send to", - "emailHint": "Separate more than one address with commas.", - "privateNetwork": "Allow a private network address", - "privateNetworkHint": "Only works for hosts an admin allows in the private endpoint list." + "ntfyToken": "Token de acesso (opcional)", + "discordUrl": "URL do webhook do Discord", + "discordHint": "Nas definições do canal no Discord, em Integrações.", + "discordUsername": "Nome de visualização (opcional)", + "discordAvatar": "URL do avatar (opcional)", + "emailTo": "Enviar para", + "emailHint": "Separe mais do que um endereço com vírgulas.", + "privateNetwork": "Permitir um endereço de rede privada", + "privateNetworkHint": "Funciona apenas para hosts que um administrador permite na lista de endpoints privados." }, "rules": { - "intro": "A delivery rule sends matching alerts to your channels. Alerts always stay in the inbox too.", - "add": "Add rule", - "edit": "Edit rule", - "empty": "No rules yet, so alerts only show up in the inbox.", - "needChannel": "Add a channel first.", + "intro": "Uma regra de entrega envia alertas correspondentes aos seus canais. Os alertas também permanecem sempre na caixa de entrada.", + "add": "Adicionar regra", + "edit": "Editar regra", + "empty": "Ainda não existem regras, pelo que os alertas apenas aparecem na caixa de entrada.", + "needChannel": "Primeiro, adicione um canal.", "enabled": "Ativado", "name": "Nome", "nameRequired": "O nome é obrigatório", - "match": "Alerts to send", - "matchHint": "* for everything, automations.* for everything from automations, or one exact kind.", - "minSeverity": "At least", - "channels": "Send to", - "channelRequired": "Pick at least one channel", - "deleteConfirm": "Delete the rule \"{{name}}\"?", - "everything": "Everything", - "summary": "{{match}}, {{severity}} or higher, to {{channels}}" + "match": "Alertas a enviar", + "matchHint": "* para tudo, automações.* para tudo, desde automações, a um tipo específico.", + "minSeverity": "Pelo menos", + "channels": "Enviar para", + "channelRequired": "Escolha pelo menos um canal.", + "deleteConfirm": "Apagar a regra \"{{name}}\"?", + "everything": "Tudo", + "summary": "{{match}}, {{severity}} ou superior, para {{channels}}" }, "actions": { "cancel": "Cancelar", @@ -163,10 +163,13 @@ }, "widget": { "name": "Feed de alertas", - "description": "Your latest alerts, with a quick way to mark them read", - "maxItems": "Max items", - "showRead": "Show read alerts", + "description": "Os seus alertas mais recentes, com uma forma rápida de os marcar como lidos.", + "maxItems": "Itens máximos", + "showRead": "Mostrar alertas de leitura", "allClear": "Tudo em ordem", "loading": "A carregar..." + }, + "plugin": { + "name": "Alerts" } } diff --git a/plugins/alerts/locales/translated/ro_RO.json b/plugins/alerts/locales/translated/ro_RO.json index 1d86d245e..c439fe9da 100644 --- a/plugins/alerts/locales/translated/ro_RO.json +++ b/plugins/alerts/locales/translated/ro_RO.json @@ -168,5 +168,8 @@ "showRead": "Afișează alertele de citire", "allClear": "Totul este clar", "loading": "Încărcare..." + }, + "plugin": { + "name": "Alerts" } } diff --git a/plugins/alerts/locales/translated/ru_RU.json b/plugins/alerts/locales/translated/ru_RU.json index 900f0ebff..909cdec02 100644 --- a/plugins/alerts/locales/translated/ru_RU.json +++ b/plugins/alerts/locales/translated/ru_RU.json @@ -4,13 +4,13 @@ }, "permissions": { "use": { - "title": "Use alerts", - "description": "Get alerts in the inbox and send them to your own channels." + "title": "Используйте оповещения", + "description": "Получайте уведомления на свою электронную почту и отправляйте их в свои каналы." } }, "onboarding": { "feature": "Оповещения", - "featureDesc": "Every alert in one inbox, sent on to Discord, ntfy, email or a webhook if you want." + "featureDesc": "Все оповещения в одном почтовом ящике, которые можно отправить в Discord, ntfy, на электронную почту или через веб-хук, если хотите." }, "settings": { "group": { @@ -19,141 +19,141 @@ }, "admin": { "announcements": { - "label": "Termix announcements", - "description": "Show news from the Termix team, like security notices and releases, in everyone's inbox." + "label": "Объявления компании Termix", + "description": "Показывайте новости от команды Termix, такие как уведомления о безопасности и обновления, в почтовые ящики всех пользователей." }, "retentionDays": { - "label": "Keep alerts for (days)", - "description": "Older alerts are removed from every inbox." + "label": "Сохранять оповещения в течение (дней)", + "description": "Более старые уведомления удаляются из всех почтовых ящиков." }, "smtpHost": { - "label": "SMTP server", - "description": "Needed for email channels. Leave empty to turn email off.", + "label": "SMTP-сервер", + "description": "Необходимо для каналов электронной почты. Оставьте поле пустым, чтобы отключить отправку писем.", "placeholder": "smtp.example.com" }, "smtpPort": { - "label": "SMTP port", - "description": "Usually 587 with STARTTLS or 465 with TLS." + "label": "SMTP-порт", + "description": "Обычно используется код 587 с STARTTLS или 465 с TLS." }, "smtpSecure": { - "label": "Use TLS from the start", - "description": "Turn on for port 465. Leave off for 587, which upgrades to TLS on its own." + "label": "Используйте TLS с самого начала.", + "description": "Включите порт 465. Оставьте выключенным порт 587, так как он автоматически переходит на TLS." }, "smtpUser": { - "label": "SMTP username", - "description": "Leave empty if the server does not need a login." + "label": "Имя пользователя SMTP", + "description": "Оставьте поле пустым, если серверу не требуется авторизация." }, "smtpPassword": { - "label": "SMTP password", - "description": "Stored encrypted." + "label": "SMTP-пароль", + "description": "Сохранено в зашифрованном виде." }, "smtpFrom": { - "label": "From address", - "description": "The sender alerts come from.", + "label": "От адреса", + "description": "Уведомления поступают от отправителя.", "placeholder": "Termix " } }, "user": { "popups": { - "label": "Alert popups", - "description": "Which new alerts pop up while you use Termix. They always land in the inbox.", - "all": "All alerts", - "warning": "Warnings and critical", - "critical": "Critical only", + "label": "Всплывающие уведомления", + "description": "Какие новые уведомления появляются во время использования Termix? Они всегда попадают во входящие сообщения.", + "all": "Все оповещения", + "warning": "Предупреждения и критические", + "critical": "Только критически важные", "off": "Ни одного" } } }, "sections": { - "inbox": "Inbox", + "inbox": "Входящие", "channels": "Каналы", - "rules": "Delivery rules" + "rules": "Правила доставки" }, "severity": { "info": "Информация", "success": "Успех", "warning": "Предупреждение", - "critical": "Critical" + "critical": "Критический" }, "inbox": { "sourceTermix": "Termix", "openLink": "Открыть", "view": "Просмотр", - "unread": "Unread", - "deliveryFailed_one": "{{count}} channel failed", - "deliveryFailed_other": "{{count}} channels failed", - "markRead": "Mark as read", - "markUnread": "Mark as unread", - "markAllRead": "Mark all as read", + "unread": "Непрочитано", + "deliveryFailed_one": "{{count}} канал не работает", + "deliveryFailed_other": "{{count}} каналы не работают", + "markRead": "Отметить как прочитанное", + "markUnread": "Отметить как непрочитанное", + "markAllRead": "Отметьте все как прочитанное", "delete": "Удалить", - "clearRead": "Delete read alerts", - "cleared_one": "Deleted {{count}} alert", - "cleared_other": "Deleted {{count}} alerts", + "clearRead": "Удалить оповещения о прочтении", + "cleared_one": "Удалено {{count}} оповещение", + "cleared_other": "Удалены {{count}} оповещения", "filterAll": "Все", - "filterUnread": "Unread", - "anySeverity": "Any severity", - "anySource": "Any source", - "openAll": "Open in a tab", - "empty": "No alerts yet.", - "emptyUnread": "You are all caught up.", - "loadMore": "Load more" + "filterUnread": "Непрочитано", + "anySeverity": "Любая степень тяжести", + "anySource": "Любой источник", + "openAll": "Открыть во вкладке", + "empty": "Пока нет оповещений.", + "emptyUnread": "Вы всё успели посмотреть.", + "loadMore": "Загрузить ещё" }, "channels": { - "intro": "Channels are where alerts can go outside Termix. Delivery rules pick which alerts use them.", - "add": "Add channel", - "edit": "Edit channel", - "test": "Send a test", - "testSent": "Test alert sent", - "testFailed": "Test failed: {{error}}", - "deleteConfirm": "Delete the channel \"{{name}}\"?", - "deleted": "Channel deleted", - "empty": "No channels yet.", + "intro": "Каналы — это место, куда могут отправляться оповещения за пределы Termix. Правила доставки определяют, какие оповещения будут их использовать.", + "add": "Добавить канал", + "edit": "Редактировать канал", + "test": "Отправить тест", + "testSent": "Отправлено тестовое оповещение", + "testFailed": "Тест не пройден: {{error}}", + "deleteConfirm": "Удалить канал \"{{name}}\"?", + "deleted": "Канал удален", + "empty": "Каналов пока нет.", "enabled": "Включено", - "needsSave": "This channel needs to be opened and saved again before it can send.", + "needsSave": "Перед отправкой сообщения этот канал необходимо снова открыть и сохранить.", "name": "Название", "nameRequired": "Имя обязательно", "type": "Тип", "types": { - "webhook": "Webhook", - "ntfy": "ntfy", + "webhook": "Вебхук", + "ntfy": "нтфи", "discord": "Discord", "email": "Email" }, - "emailUnavailable": "Email needs an SMTP server, which an admin sets up in the Alerts settings.", + "emailUnavailable": "Для работы электронной почты необходим SMTP-сервер, который администратор настраивает в параметрах оповещений.", "webhookUrl": "URL", - "webhookHint": "Gets a JSON body for every alert.", - "method": "Method", - "headers": "Headers", - "headersHint": "One per line, like Name: value.", + "webhookHint": "Получает JSON-тело для каждого оповещения.", + "method": "Метод", + "headers": "Заголовки", + "headersHint": "Один символ на строку, например, Имя: значение.", "ntfyServer": "URL сервера", "ntfyTopic": "Тема", - "ntfyToken": "Access token (optional)", - "discordUrl": "Discord webhook URL", - "discordHint": "From the channel's settings in Discord, under Integrations.", - "discordUsername": "Display name (optional)", - "discordAvatar": "Avatar URL (optional)", - "emailTo": "Send to", - "emailHint": "Separate more than one address with commas.", - "privateNetwork": "Allow a private network address", - "privateNetworkHint": "Only works for hosts an admin allows in the private endpoint list." + "ntfyToken": "Токен доступа (необязательно)", + "discordUrl": "URL веб-перехватчика Discord", + "discordHint": "В настройках канала в Discord, в разделе «Интеграции».", + "discordUsername": "Отображаемое имя (необязательно)", + "discordAvatar": "URL-адрес аватара (необязательно)", + "emailTo": "Отправить", + "emailHint": "Разделяя несколько адресов запятыми.", + "privateNetwork": "Разрешить использование частного сетевого адреса", + "privateNetworkHint": "Работает только для хостов, разрешенных администратором в списке частных конечных точек." }, "rules": { - "intro": "A delivery rule sends matching alerts to your channels. Alerts always stay in the inbox too.", - "add": "Add rule", - "edit": "Edit rule", - "empty": "No rules yet, so alerts only show up in the inbox.", - "needChannel": "Add a channel first.", + "intro": "Правило доставки отправляет соответствующие оповещения в ваши каналы. Оповещения также всегда остаются во входящих сообщениях.", + "add": "Добавить правило", + "edit": "Редактировать правило", + "empty": "Правил пока нет, поэтому уведомления отображаются только во входящих сообщениях.", + "needChannel": "Сначала добавьте канал.", "enabled": "Включено", "name": "Название", "nameRequired": "Имя обязательно", - "match": "Alerts to send", - "matchHint": "* for everything, automations.* for everything from automations, or one exact kind.", - "minSeverity": "At least", - "channels": "Send to", - "channelRequired": "Pick at least one channel", - "deleteConfirm": "Delete the rule \"{{name}}\"?", - "everything": "Everything", - "summary": "{{match}}, {{severity}} or higher, to {{channels}}" + "match": "Уведомления для отправки", + "matchHint": "* для всего, что связано с автоматизацией.* для всего, что связано с автоматизацией, или для одного конкретного типа.", + "minSeverity": "По меньшей мере", + "channels": "Отправить", + "channelRequired": "Выберите хотя бы один канал", + "deleteConfirm": "Удалить правило \"{{name}}\"?", + "everything": "Все", + "summary": "{{match}}, {{severity}} или выше, до {{channels}}" }, "actions": { "cancel": "Отмена", @@ -163,10 +163,13 @@ }, "widget": { "name": "Лента оповещений", - "description": "Your latest alerts, with a quick way to mark them read", - "maxItems": "Max items", - "showRead": "Show read alerts", + "description": "Ваши последние уведомления с возможностью быстрой пометки их как прочитанных.", + "maxItems": "Максимальное количество предметов", + "showRead": "Показать уведомления о прочтении", "allClear": "Всё в порядке", "loading": "Загрузка..." + }, + "plugin": { + "name": "Alerts" } } diff --git a/plugins/alerts/locales/translated/sr_SP.json b/plugins/alerts/locales/translated/sr_SP.json index 9d7514f0d..386636860 100644 --- a/plugins/alerts/locales/translated/sr_SP.json +++ b/plugins/alerts/locales/translated/sr_SP.json @@ -1,172 +1,175 @@ { "nav": { - "alerts": "Alerts" + "alerts": "Упозорења" }, "permissions": { "use": { - "title": "Use alerts", - "description": "Get alerts in the inbox and send them to your own channels." + "title": "Користите упозорења", + "description": "Добијајте обавештења у пријемно сандуче и шаљите их на своје канале." } }, "onboarding": { - "feature": "Alerts", - "featureDesc": "Every alert in one inbox, sent on to Discord, ntfy, email or a webhook if you want." + "feature": "Упозорења", + "featureDesc": "Свако упозорење у једном пријемном сандучету, послато на Discord, ntfy, имејл или вебхук ако желите." }, "settings": { "group": { - "general": "General", - "email": "Email" + "general": "Опште", + "email": "Е-пошта" }, "admin": { "announcements": { - "label": "Termix announcements", - "description": "Show news from the Termix team, like security notices and releases, in everyone's inbox." + "label": "Termix саопштења", + "description": "Прикажи вести од Termix тима, као што су безбедносна обавештења и издања, у пријемном сандучету свих корисника." }, "retentionDays": { - "label": "Keep alerts for (days)", - "description": "Older alerts are removed from every inbox." + "label": "Задржавај упозорења (дана)", + "description": "Старија упозорења се уклањају из сваког пријемног сандучета." }, "smtpHost": { - "label": "SMTP server", - "description": "Needed for email channels. Leave empty to turn email off.", + "label": "SMTP сервер", + "description": "Потребно за имејл канале. Оставите празно да бисте искључили имејл.", "placeholder": "smtp.example.com" }, "smtpPort": { - "label": "SMTP port", - "description": "Usually 587 with STARTTLS or 465 with TLS." + "label": "СМТП порт", + "description": "Обично 587 са STARTTLS-ом или 465 са TLS-ом." }, "smtpSecure": { - "label": "Use TLS from the start", - "description": "Turn on for port 465. Leave off for 587, which upgrades to TLS on its own." + "label": "Користите TLS од почетка", + "description": "Укључите за порт 465. Оставите искључено за порт 587, који се сам надограђује на TLS." }, "smtpUser": { - "label": "SMTP username", - "description": "Leave empty if the server does not need a login." + "label": "SMTP корисничко име", + "description": "Оставите празно ако сервер не захтева пријаву." }, "smtpPassword": { - "label": "SMTP password", - "description": "Stored encrypted." + "label": "СМТП лозинка", + "description": "Сачувано шифровано." }, "smtpFrom": { - "label": "From address", - "description": "The sender alerts come from.", - "placeholder": "Termix " + "label": "Адреса одакле", + "description": "Упозорења пошиљаоца долазе од.", + "placeholder": "Термикс " } }, "user": { "popups": { - "label": "Alert popups", - "description": "Which new alerts pop up while you use Termix. They always land in the inbox.", - "all": "All alerts", - "warning": "Warnings and critical", - "critical": "Critical only", - "off": "None" + "label": "Искачући прозори са упозорењима", + "description": "Која нова упозорења се појављују док користите Termix. Она увек стижу у пријемно сандуче.", + "all": "Сва упозорења", + "warning": "Упозорења и критичне информације", + "critical": "Само критично", + "off": "Ниједан" } } }, "sections": { - "inbox": "Inbox", - "channels": "Channels", - "rules": "Delivery rules" + "inbox": "Пријемно сандуче", + "channels": "Канали", + "rules": "Правила испоруке" }, "severity": { - "info": "Info", - "success": "Success", - "warning": "Warning", - "critical": "Critical" + "info": "Информације", + "success": "Успех", + "warning": "Упозорење", + "critical": "Критично" }, "inbox": { - "sourceTermix": "Termix", - "openLink": "Open", - "view": "View", - "unread": "Unread", - "deliveryFailed_one": "{{count}} channel failed", - "deliveryFailed_other": "{{count}} channels failed", - "markRead": "Mark as read", - "markUnread": "Mark as unread", - "markAllRead": "Mark all as read", - "delete": "Delete", - "clearRead": "Delete read alerts", - "cleared_one": "Deleted {{count}} alert", - "cleared_other": "Deleted {{count}} alerts", - "filterAll": "All", - "filterUnread": "Unread", - "anySeverity": "Any severity", - "anySource": "Any source", - "openAll": "Open in a tab", - "empty": "No alerts yet.", - "emptyUnread": "You are all caught up.", - "loadMore": "Load more" + "sourceTermix": "Термикс", + "openLink": "Отворено", + "view": "Поглед", + "unread": "Непрочитано", + "deliveryFailed_one": "{{count}} канал није успео", + "deliveryFailed_other": "{{count}} канала није успело", + "markRead": "Означи као прочитано", + "markUnread": "Означи као непрочитано", + "markAllRead": "Означи све као прочитано", + "delete": "Обриши", + "clearRead": "Обриши упозорења о читању", + "cleared_one": "Обрисано упозорење {{count}}", + "cleared_other": "Обрисана упозорења {{count}}", + "filterAll": "Сви", + "filterUnread": "Непрочитано", + "anySeverity": "Било која тежина", + "anySource": "Било који извор", + "openAll": "Отвори у картици", + "empty": "Још нема упозорења.", + "emptyUnread": "Све сте у току.", + "loadMore": "Учитај још" }, "channels": { - "intro": "Channels are where alerts can go outside Termix. Delivery rules pick which alerts use them.", - "add": "Add channel", - "edit": "Edit channel", - "test": "Send a test", - "testSent": "Test alert sent", - "testFailed": "Test failed: {{error}}", - "deleteConfirm": "Delete the channel \"{{name}}\"?", - "deleted": "Channel deleted", - "empty": "No channels yet.", - "enabled": "Enabled", - "needsSave": "This channel needs to be opened and saved again before it can send.", - "name": "Name", - "nameRequired": "Name is required", - "type": "Type", + "intro": "Канали су места где упозорења могу да се шаљу изван Termix-а. Правила испоруке бирају која упозорења их користе.", + "add": "Додај канал", + "edit": "Измени канал", + "test": "Пошаљи тест", + "testSent": "Послато је тестно упозорење", + "testFailed": "Тест није успео: {{error}}", + "deleteConfirm": "Обрисати канал „{{name}}“?", + "deleted": "Канал је обрисан", + "empty": "Још нема канала.", + "enabled": "Омогућено", + "needsSave": "Овај канал треба поново отворити и сачувати пре него што се може послати.", + "name": "Име", + "nameRequired": "Име је обавезно", + "type": "Тип", "types": { - "webhook": "Webhook", - "ntfy": "ntfy", - "discord": "Discord", - "email": "Email" + "webhook": "Вебхук", + "ntfy": "нтфи", + "discord": "Неслагање", + "email": "Е-пошта" }, - "emailUnavailable": "Email needs an SMTP server, which an admin sets up in the Alerts settings.", + "emailUnavailable": "Е-пошти је потребан SMTP сервер, који администратор подешава у подешавањима упозорења.", "webhookUrl": "URL", - "webhookHint": "Gets a JSON body for every alert.", - "method": "Method", - "headers": "Headers", - "headersHint": "One per line, like Name: value.", - "ntfyServer": "Server URL", - "ntfyTopic": "Topic", - "ntfyToken": "Access token (optional)", - "discordUrl": "Discord webhook URL", - "discordHint": "From the channel's settings in Discord, under Integrations.", - "discordUsername": "Display name (optional)", - "discordAvatar": "Avatar URL (optional)", - "emailTo": "Send to", - "emailHint": "Separate more than one address with commas.", - "privateNetwork": "Allow a private network address", - "privateNetworkHint": "Only works for hosts an admin allows in the private endpoint list." + "webhookHint": "Добија JSON тело за свако упозорење.", + "method": "Метод", + "headers": "Заглавља", + "headersHint": "Један по реду, као што је Име: вредност.", + "ntfyServer": "URL сервера", + "ntfyTopic": "Тема", + "ntfyToken": "Приступни токен (опционо)", + "discordUrl": "URL вебхука на Дискорду", + "discordHint": "Из подешавања канала на Дискорду, под Интеграције.", + "discordUsername": "Приказано име (опционо)", + "discordAvatar": "URL адреса аватара (опционо)", + "emailTo": "Пошаљи", + "emailHint": "Одвојите више од једне адресе зарезима.", + "privateNetwork": "Дозволи адресу приватне мреже", + "privateNetworkHint": "Ради само за хостове које администратор дозвољава на листи приватних крајњих тачака." }, "rules": { - "intro": "A delivery rule sends matching alerts to your channels. Alerts always stay in the inbox too.", - "add": "Add rule", - "edit": "Edit rule", - "empty": "No rules yet, so alerts only show up in the inbox.", - "needChannel": "Add a channel first.", - "enabled": "Enabled", - "name": "Name", - "nameRequired": "Name is required", - "match": "Alerts to send", - "matchHint": "* for everything, automations.* for everything from automations, or one exact kind.", - "minSeverity": "At least", - "channels": "Send to", - "channelRequired": "Pick at least one channel", - "deleteConfirm": "Delete the rule \"{{name}}\"?", - "everything": "Everything", - "summary": "{{match}}, {{severity}} or higher, to {{channels}}" + "intro": "Правило испоруке шаље одговарајућа упозорења вашим каналима. Упозорења такође увек остају у пријемном сандучету.", + "add": "Додај правило", + "edit": "Измени правило", + "empty": "Још нема правила, тако да се упозорења приказују само у пријемном сандучету.", + "needChannel": "Прво додајте канал.", + "enabled": "Омогућено", + "name": "Име", + "nameRequired": "Име је обавезно", + "match": "Обавештења за слање", + "matchHint": "* за све, аутоматизације.* за све од аутоматизација, или само једну врсту.", + "minSeverity": "Барем", + "channels": "Пошаљи", + "channelRequired": "Изаберите барем један канал", + "deleteConfirm": "Обрисати правило „{{name}}“?", + "everything": "Све", + "summary": "{{match}}, {{severity}} или више, до {{channels}}" }, "actions": { - "cancel": "Cancel", - "save": "Save", - "saving": "Saving...", - "delete": "Delete" + "cancel": "Откажи", + "save": "Сачувај", + "saving": "Чување...", + "delete": "Обриши" }, "widget": { - "name": "Alert Feed", - "description": "Your latest alerts, with a quick way to mark them read", - "maxItems": "Max items", - "showRead": "Show read alerts", - "allClear": "All clear", - "loading": "Loading..." + "name": "Фид обавештења", + "description": "Ваша најновија обавештења, са брзим начином да их означите као прочитане", + "maxItems": "Максималан број ставки", + "showRead": "Прикажи обавештења о читању", + "allClear": "Све је чисто", + "loading": "Учитавање..." + }, + "plugin": { + "name": "Alerts" } } diff --git a/plugins/alerts/locales/translated/sv_SE.json b/plugins/alerts/locales/translated/sv_SE.json index 9d7514f0d..6ec9ad34d 100644 --- a/plugins/alerts/locales/translated/sv_SE.json +++ b/plugins/alerts/locales/translated/sv_SE.json @@ -1,172 +1,175 @@ { "nav": { - "alerts": "Alerts" + "alerts": "Aviseringar" }, "permissions": { "use": { - "title": "Use alerts", - "description": "Get alerts in the inbox and send them to your own channels." + "title": "Använd varningar", + "description": "Få aviseringar i inkorgen och skicka dem till dina egna kanaler." } }, "onboarding": { - "feature": "Alerts", - "featureDesc": "Every alert in one inbox, sent on to Discord, ntfy, email or a webhook if you want." + "feature": "Aviseringar", + "featureDesc": "Varje avisering i en inkorg, skickad vidare till Discord, ntfy, e-post eller en webhook om du vill." }, "settings": { "group": { - "general": "General", - "email": "Email" + "general": "Allmän", + "email": "E-post" }, "admin": { "announcements": { - "label": "Termix announcements", - "description": "Show news from the Termix team, like security notices and releases, in everyone's inbox." + "label": "Termix-meddelanden", + "description": "Visa nyheter från Termix-teamet, som säkerhetsmeddelanden och pressmeddelanden, i allas inkorg." }, "retentionDays": { - "label": "Keep alerts for (days)", - "description": "Older alerts are removed from every inbox." + "label": "Behåll varningar i (dagar)", + "description": "Äldre aviseringar tas bort från alla inkorgar." }, "smtpHost": { - "label": "SMTP server", - "description": "Needed for email channels. Leave empty to turn email off.", + "label": "SMTP-server", + "description": "Behövs för e-postkanaler. Lämna tomt för att stänga av e-post.", "placeholder": "smtp.example.com" }, "smtpPort": { - "label": "SMTP port", - "description": "Usually 587 with STARTTLS or 465 with TLS." + "label": "SMTP-port", + "description": "Vanligtvis 587 med STARTTLS eller 465 med TLS." }, "smtpSecure": { - "label": "Use TLS from the start", - "description": "Turn on for port 465. Leave off for 587, which upgrades to TLS on its own." + "label": "Använd TLS från början", + "description": "Aktivera port 465. Avaktivera port 587, som uppgraderar till TLS på egen hand." }, "smtpUser": { - "label": "SMTP username", - "description": "Leave empty if the server does not need a login." + "label": "SMTP-användarnamn", + "description": "Lämna tomt om servern inte behöver inloggning." }, "smtpPassword": { - "label": "SMTP password", - "description": "Stored encrypted." + "label": "SMTP-lösenord", + "description": "Lagras krypterat." }, "smtpFrom": { - "label": "From address", - "description": "The sender alerts come from.", + "label": "Från adress", + "description": "Avsändaraviseringarna kommer från.", "placeholder": "Termix " } }, "user": { "popups": { - "label": "Alert popups", - "description": "Which new alerts pop up while you use Termix. They always land in the inbox.", - "all": "All alerts", - "warning": "Warnings and critical", - "critical": "Critical only", - "off": "None" + "label": "Aviseringspopup-fönster", + "description": "Vilka nya aviseringar dyker upp när du använder Termix? De hamnar alltid i inkorgen.", + "all": "Alla varningar", + "warning": "Varningar och kritiska", + "critical": "Endast kritisk", + "off": "Ingen" } } }, "sections": { - "inbox": "Inbox", - "channels": "Channels", - "rules": "Delivery rules" + "inbox": "Inkorg", + "channels": "Kanaler", + "rules": "Leveransregler" }, "severity": { "info": "Info", - "success": "Success", - "warning": "Warning", - "critical": "Critical" + "success": "Framgång", + "warning": "Varning", + "critical": "Kritisk" }, "inbox": { "sourceTermix": "Termix", - "openLink": "Open", - "view": "View", - "unread": "Unread", - "deliveryFailed_one": "{{count}} channel failed", - "deliveryFailed_other": "{{count}} channels failed", - "markRead": "Mark as read", - "markUnread": "Mark as unread", - "markAllRead": "Mark all as read", - "delete": "Delete", - "clearRead": "Delete read alerts", - "cleared_one": "Deleted {{count}} alert", - "cleared_other": "Deleted {{count}} alerts", - "filterAll": "All", - "filterUnread": "Unread", - "anySeverity": "Any severity", - "anySource": "Any source", - "openAll": "Open in a tab", - "empty": "No alerts yet.", - "emptyUnread": "You are all caught up.", - "loadMore": "Load more" + "openLink": "Öppna", + "view": "Se", + "unread": "Oläst", + "deliveryFailed_one": "{{count}} kanal misslyckades", + "deliveryFailed_other": "{{count}} kanaler misslyckades", + "markRead": "Markera som läst", + "markUnread": "Markera som oläst", + "markAllRead": "Markera alla som lästa", + "delete": "Radera", + "clearRead": "Ta bort läsaviseringar", + "cleared_one": "Borttagen {{count}} -avisering", + "cleared_other": "Borttagna {{count}} varningar", + "filterAll": "Alla", + "filterUnread": "Oläst", + "anySeverity": "Vilken allvarlighetsgrad som helst", + "anySource": "Vilken källa som helst", + "openAll": "Öppna i en flik", + "empty": "Inga varningar ännu.", + "emptyUnread": "Ni är helt uppdaterade.", + "loadMore": "Ladda mer" }, "channels": { - "intro": "Channels are where alerts can go outside Termix. Delivery rules pick which alerts use them.", - "add": "Add channel", - "edit": "Edit channel", - "test": "Send a test", - "testSent": "Test alert sent", - "testFailed": "Test failed: {{error}}", - "deleteConfirm": "Delete the channel \"{{name}}\"?", - "deleted": "Channel deleted", - "empty": "No channels yet.", - "enabled": "Enabled", - "needsSave": "This channel needs to be opened and saved again before it can send.", - "name": "Name", - "nameRequired": "Name is required", - "type": "Type", + "intro": "Kanaler är där aviseringar kan skickas utanför Termix. Leveransregler väljer vilka aviseringar som använder dem.", + "add": "Lägg till kanal", + "edit": "Redigera kanal", + "test": "Skicka ett test", + "testSent": "Testavisering skickad", + "testFailed": "Testet misslyckades: {{error}}", + "deleteConfirm": "Ta bort kanalen \"{{name}}\"?", + "deleted": "Kanal borttagen", + "empty": "Inga kanaler än.", + "enabled": "Aktiverad", + "needsSave": "Den här kanalen måste öppnas och sparas igen innan den kan skicka.", + "name": "Namn", + "nameRequired": "Namn krävs", + "type": "Typ", "types": { - "webhook": "Webhook", + "webhook": "Webbhook", "ntfy": "ntfy", - "discord": "Discord", - "email": "Email" + "discord": "Disharmoni", + "email": "E-post" }, - "emailUnavailable": "Email needs an SMTP server, which an admin sets up in the Alerts settings.", + "emailUnavailable": "E-post behöver en SMTP-server, vilket en administratör konfigurerar i aviseringsinställningarna.", "webhookUrl": "URL", - "webhookHint": "Gets a JSON body for every alert.", - "method": "Method", - "headers": "Headers", - "headersHint": "One per line, like Name: value.", - "ntfyServer": "Server URL", - "ntfyTopic": "Topic", - "ntfyToken": "Access token (optional)", - "discordUrl": "Discord webhook URL", - "discordHint": "From the channel's settings in Discord, under Integrations.", - "discordUsername": "Display name (optional)", - "discordAvatar": "Avatar URL (optional)", - "emailTo": "Send to", - "emailHint": "Separate more than one address with commas.", - "privateNetwork": "Allow a private network address", - "privateNetworkHint": "Only works for hosts an admin allows in the private endpoint list." + "webhookHint": "Hämtar en JSON-text för varje avisering.", + "method": "Metod", + "headers": "Rubriker", + "headersHint": "En per rad, som Namn: värde.", + "ntfyServer": "Server-URL", + "ntfyTopic": "Ämne", + "ntfyToken": "Åtkomsttoken (valfritt)", + "discordUrl": "Discord webhook-URL", + "discordHint": "Från kanalens inställningar i Discord, under Integrationer.", + "discordUsername": "Visningsnamn (valfritt)", + "discordAvatar": "Avatar-URL (valfritt)", + "emailTo": "Skicka till", + "emailHint": "Separera mer än en adress med kommatecken.", + "privateNetwork": "Tillåt en privat nätverksadress", + "privateNetworkHint": "Fungerar bara för värdar som en administratör tillåter i listan över privata slutpunkter." }, "rules": { - "intro": "A delivery rule sends matching alerts to your channels. Alerts always stay in the inbox too.", - "add": "Add rule", - "edit": "Edit rule", - "empty": "No rules yet, so alerts only show up in the inbox.", - "needChannel": "Add a channel first.", - "enabled": "Enabled", - "name": "Name", - "nameRequired": "Name is required", - "match": "Alerts to send", - "matchHint": "* for everything, automations.* for everything from automations, or one exact kind.", - "minSeverity": "At least", - "channels": "Send to", - "channelRequired": "Pick at least one channel", - "deleteConfirm": "Delete the rule \"{{name}}\"?", - "everything": "Everything", - "summary": "{{match}}, {{severity}} or higher, to {{channels}}" + "intro": "En leveransregel skickar matchande aviseringar till dina kanaler. Aviseringar finns alltid kvar i inkorgen också.", + "add": "Lägg till regel", + "edit": "Redigera regel", + "empty": "Inga regler ännu, så aviseringar visas bara i inkorgen.", + "needChannel": "Lägg till en kanal först.", + "enabled": "Aktiverad", + "name": "Namn", + "nameRequired": "Namn krävs", + "match": "Aviseringar att skicka", + "matchHint": "* för allt, automatiseringar.* för allt från automatiseringar, eller en exakt sort.", + "minSeverity": "Åtminstone", + "channels": "Skicka till", + "channelRequired": "Välj minst en kanal", + "deleteConfirm": "Ta bort regeln \"{{name}}\"?", + "everything": "Allt", + "summary": "{{match}}, {{severity}} eller högre, till {{channels}}" }, "actions": { - "cancel": "Cancel", - "save": "Save", - "saving": "Saving...", - "delete": "Delete" + "cancel": "Avboka", + "save": "Spara", + "saving": "Sparande...", + "delete": "Radera" }, "widget": { - "name": "Alert Feed", - "description": "Your latest alerts, with a quick way to mark them read", - "maxItems": "Max items", - "showRead": "Show read alerts", - "allClear": "All clear", - "loading": "Loading..." + "name": "Aviseringsflöde", + "description": "Dina senaste aviseringar, med ett snabbt sätt att markera dem som lästa", + "maxItems": "Max antal artiklar", + "showRead": "Visa läsaviseringar", + "allClear": "Faran över", + "loading": "Belastning..." + }, + "plugin": { + "name": "Alerts" } } diff --git a/plugins/alerts/locales/translated/th_TH.json b/plugins/alerts/locales/translated/th_TH.json index 9d7514f0d..f2967f355 100644 --- a/plugins/alerts/locales/translated/th_TH.json +++ b/plugins/alerts/locales/translated/th_TH.json @@ -1,172 +1,175 @@ { "nav": { - "alerts": "Alerts" + "alerts": "การแจ้งเตือน" }, "permissions": { "use": { - "title": "Use alerts", - "description": "Get alerts in the inbox and send them to your own channels." + "title": "ใช้การแจ้งเตือน", + "description": "รับการแจ้งเตือนในกล่องข้อความขาเข้า และส่งต่อไปยังช่องทางของคุณเองได้" } }, "onboarding": { - "feature": "Alerts", - "featureDesc": "Every alert in one inbox, sent on to Discord, ntfy, email or a webhook if you want." + "feature": "การแจ้งเตือน", + "featureDesc": "การแจ้งเตือนทั้งหมดจะถูกส่งไปยังกล่องข้อความเดียว และส่งต่อไปยัง Discord, NTFI, อีเมล หรือ Webhook ตามที่คุณต้องการ" }, "settings": { "group": { - "general": "General", - "email": "Email" + "general": "ทั่วไป", + "email": "อีเมล" }, "admin": { "announcements": { - "label": "Termix announcements", - "description": "Show news from the Termix team, like security notices and releases, in everyone's inbox." + "label": "ประกาศจาก Termix", + "description": "แสดงข่าวสารจากทีม Termix เช่น ประกาศด้านความปลอดภัยและการอัปเดตต่างๆ ในกล่องจดหมายของทุกคน" }, "retentionDays": { - "label": "Keep alerts for (days)", - "description": "Older alerts are removed from every inbox." + "label": "ตั้งค่าการแจ้งเตือนเป็นเวลา (วัน)", + "description": "การแจ้งเตือนเก่าๆ จะถูกลบออกจากกล่องจดหมายทุกกล่อง" }, "smtpHost": { - "label": "SMTP server", - "description": "Needed for email channels. Leave empty to turn email off.", + "label": "เซิร์ฟเวอร์ SMTP", + "description": "จำเป็นสำหรับช่องทางการส่งอีเมล เว้นว่างไว้เพื่อปิดการใช้งานอีเมล", "placeholder": "smtp.example.com" }, "smtpPort": { - "label": "SMTP port", - "description": "Usually 587 with STARTTLS or 465 with TLS." + "label": "พอร์ต SMTP", + "description": "โดยทั่วไปจะใช้พอร์ต 587 สำหรับ STARTTLS หรือ 465 สำหรับ TLS" }, "smtpSecure": { - "label": "Use TLS from the start", - "description": "Turn on for port 465. Leave off for 587, which upgrades to TLS on its own." + "label": "ใช้ TLS ตั้งแต่เริ่มต้น", + "description": "เปิดใช้งานสำหรับพอร์ต 465 ปิดใช้งานสำหรับพอร์ต 587 ซึ่งจะอัปเกรดเป็น TLS โดยอัตโนมัติ" }, "smtpUser": { - "label": "SMTP username", - "description": "Leave empty if the server does not need a login." + "label": "ชื่อผู้ใช้ SMTP", + "description": "เว้นว่างไว้หากเซิร์ฟเวอร์ไม่ต้องการการเข้าสู่ระบบ" }, "smtpPassword": { - "label": "SMTP password", - "description": "Stored encrypted." + "label": "รหัสผ่าน SMTP", + "description": "จัดเก็บในรูปแบบเข้ารหัส" }, "smtpFrom": { - "label": "From address", - "description": "The sender alerts come from.", - "placeholder": "Termix " + "label": "จากที่อยู่", + "description": "การแจ้งเตือนจากผู้ส่งมาจาก...", + "placeholder": "เทอร์มิกซ์ " } }, "user": { "popups": { - "label": "Alert popups", - "description": "Which new alerts pop up while you use Termix. They always land in the inbox.", - "all": "All alerts", - "warning": "Warnings and critical", - "critical": "Critical only", - "off": "None" + "label": "ป๊อปอัปแจ้งเตือน", + "description": "มีการแจ้งเตือนใหม่ๆ อะไรบ้างที่จะปรากฏขึ้นขณะที่คุณใช้งาน Termix การแจ้งเตือนเหล่านั้นจะถูกส่งไปยังกล่องจดหมายเข้าเสมอ", + "all": "การแจ้งเตือนทั้งหมด", + "warning": "คำเตือนและข้อสำคัญ", + "critical": "เฉพาะกรณีวิกฤติเท่านั้น", + "off": "ไม่มี" } } }, "sections": { - "inbox": "Inbox", - "channels": "Channels", - "rules": "Delivery rules" + "inbox": "กล่องขาเข้า", + "channels": "ช่องต่างๆ", + "rules": "กฎการจัดส่ง" }, "severity": { - "info": "Info", - "success": "Success", - "warning": "Warning", - "critical": "Critical" + "info": "ข้อมูล", + "success": "ความสำเร็จ", + "warning": "คำเตือน", + "critical": "วิกฤต" }, "inbox": { - "sourceTermix": "Termix", - "openLink": "Open", - "view": "View", - "unread": "Unread", - "deliveryFailed_one": "{{count}} channel failed", - "deliveryFailed_other": "{{count}} channels failed", - "markRead": "Mark as read", - "markUnread": "Mark as unread", - "markAllRead": "Mark all as read", - "delete": "Delete", - "clearRead": "Delete read alerts", - "cleared_one": "Deleted {{count}} alert", - "cleared_other": "Deleted {{count}} alerts", - "filterAll": "All", - "filterUnread": "Unread", - "anySeverity": "Any severity", - "anySource": "Any source", - "openAll": "Open in a tab", - "empty": "No alerts yet.", - "emptyUnread": "You are all caught up.", - "loadMore": "Load more" + "sourceTermix": "เทอร์มิกซ์", + "openLink": "เปิด", + "view": "ดู", + "unread": "ยังไม่ได้อ่าน", + "deliveryFailed_one": "{{count}} ช่องทางล้มเหลว", + "deliveryFailed_other": "{{count}} ช่องทางล้มเหลว", + "markRead": "ทำเครื่องหมายว่าอ่านแล้ว", + "markUnread": "ทำเครื่องหมายว่ายังไม่ได้อ่าน", + "markAllRead": "ทำเครื่องหมายว่าอ่านแล้วทั้งหมด", + "delete": "ลบ", + "clearRead": "ลบการแจ้งเตือนการอ่าน", + "cleared_one": "ลบการแจ้งเตือน {{count}} แล้ว", + "cleared_other": "ลบการแจ้งเตือน {{count}} แล้ว", + "filterAll": "ทั้งหมด", + "filterUnread": "ยังไม่ได้อ่าน", + "anySeverity": "ความรุนแรงใดๆ", + "anySource": "แหล่งที่มาใดๆ", + "openAll": "เปิดในแท็บใหม่", + "empty": "ยังไม่มีการแจ้งเตือนใดๆ", + "emptyUnread": "คุณได้รับข้อมูลครบถ้วนแล้ว", + "loadMore": "โหลดเพิ่มเติม" }, "channels": { - "intro": "Channels are where alerts can go outside Termix. Delivery rules pick which alerts use them.", - "add": "Add channel", - "edit": "Edit channel", - "test": "Send a test", - "testSent": "Test alert sent", - "testFailed": "Test failed: {{error}}", - "deleteConfirm": "Delete the channel \"{{name}}\"?", - "deleted": "Channel deleted", - "empty": "No channels yet.", - "enabled": "Enabled", - "needsSave": "This channel needs to be opened and saved again before it can send.", - "name": "Name", - "nameRequired": "Name is required", - "type": "Type", + "intro": "ช่องทางต่างๆ คือที่ที่การแจ้งเตือนสามารถส่งออกไปภายนอก Termix ได้ กฎการส่งจะเลือกว่าการแจ้งเตือนใดควรใช้ช่องทางเหล่านั้น", + "add": "เพิ่มช่องทาง", + "edit": "แก้ไขช่อง", + "test": "ส่งทดสอบ", + "testSent": "ส่งการแจ้งเตือนการทดสอบแล้ว", + "testFailed": "การทดสอบล้มเหลว: {{error}}", + "deleteConfirm": "ลบช่อง \"{{name}}\"?", + "deleted": "ช่องถูกลบแล้ว", + "empty": "ยังไม่มีช่องทางใด ๆ", + "enabled": "เปิดใช้งาน", + "needsSave": "ต้องเปิดและบันทึกช่องทางนี้อีกครั้งก่อนจึงจะสามารถส่งได้", + "name": "ชื่อ", + "nameRequired": "ต้องระบุชื่อ", + "type": "พิมพ์", "types": { - "webhook": "Webhook", + "webhook": "เว็บฮุค", "ntfy": "ntfy", - "discord": "Discord", - "email": "Email" + "discord": "ดิสคอร์ด", + "email": "อีเมล" }, - "emailUnavailable": "Email needs an SMTP server, which an admin sets up in the Alerts settings.", + "emailUnavailable": "อีเมลจำเป็นต้องมีเซิร์ฟเวอร์ SMTP ซึ่งผู้ดูแลระบบจะตั้งค่าไว้ในการตั้งค่าการแจ้งเตือน", "webhookUrl": "URL", - "webhookHint": "Gets a JSON body for every alert.", - "method": "Method", - "headers": "Headers", - "headersHint": "One per line, like Name: value.", - "ntfyServer": "Server URL", - "ntfyTopic": "Topic", - "ntfyToken": "Access token (optional)", - "discordUrl": "Discord webhook URL", - "discordHint": "From the channel's settings in Discord, under Integrations.", - "discordUsername": "Display name (optional)", - "discordAvatar": "Avatar URL (optional)", - "emailTo": "Send to", - "emailHint": "Separate more than one address with commas.", - "privateNetwork": "Allow a private network address", - "privateNetworkHint": "Only works for hosts an admin allows in the private endpoint list." + "webhookHint": "จะได้รับข้อมูล JSON สำหรับการแจ้งเตือนทุกครั้ง", + "method": "วิธี", + "headers": "ส่วนหัว", + "headersHint": "หนึ่งรายการต่อบรรทัด เช่น ชื่อ: ค่า", + "ntfyServer": "URL ของเซิร์ฟเวอร์", + "ntfyTopic": "หัวข้อ", + "ntfyToken": "โทเค็นการเข้าถึง (ไม่บังคับ)", + "discordUrl": "URL เว็บฮุคของ Discord", + "discordHint": "จากเมนูการตั้งค่าของช่องใน Discord ในส่วน \"การผสานรวม\"", + "discordUsername": "ชื่อที่แสดง (ไม่บังคับ)", + "discordAvatar": "URL รูปประจำตัว (ไม่บังคับ)", + "emailTo": "ส่งไปยัง", + "emailHint": "คั่นที่อยู่มากกว่าหนึ่งรายการด้วยเครื่องหมายจุลภาค", + "privateNetwork": "อนุญาตให้ใช้ที่อยู่เครือข่ายส่วนตัว", + "privateNetworkHint": "ใช้ได้เฉพาะกับโฮสต์ที่ผู้ดูแลระบบอนุญาตในรายการปลายทางส่วนตัวเท่านั้น" }, "rules": { - "intro": "A delivery rule sends matching alerts to your channels. Alerts always stay in the inbox too.", - "add": "Add rule", - "edit": "Edit rule", - "empty": "No rules yet, so alerts only show up in the inbox.", - "needChannel": "Add a channel first.", - "enabled": "Enabled", - "name": "Name", - "nameRequired": "Name is required", - "match": "Alerts to send", - "matchHint": "* for everything, automations.* for everything from automations, or one exact kind.", - "minSeverity": "At least", - "channels": "Send to", - "channelRequired": "Pick at least one channel", - "deleteConfirm": "Delete the rule \"{{name}}\"?", - "everything": "Everything", - "summary": "{{match}}, {{severity}} or higher, to {{channels}}" + "intro": "กฎการส่งจะส่งการแจ้งเตือนที่ตรงกันไปยังช่องทางต่างๆ ของคุณ การแจ้งเตือนเหล่านี้จะยังคงอยู่ในกล่องจดหมายเข้าเสมอ", + "add": "เพิ่มกฎ", + "edit": "แก้ไขกฎ", + "empty": "ยังไม่มีการกำหนดกฎเกณฑ์ใดๆ ดังนั้นการแจ้งเตือนจะปรากฏเฉพาะในกล่องจดหมายเข้าเท่านั้น", + "needChannel": "เพิ่มช่องทางก่อน", + "enabled": "เปิดใช้งาน", + "name": "ชื่อ", + "nameRequired": "ต้องระบุชื่อ", + "match": "การแจ้งเตือนที่จะส่ง", + "matchHint": "*สำหรับทุกสิ่งทุกอย่าง ระบบอัตโนมัติ* สำหรับทุกสิ่งทุกอย่างจากระบบอัตโนมัติ หรือระบบอัตโนมัติแบบใดแบบหนึ่งโดยเฉพาะ", + "minSeverity": "อย่างน้อย", + "channels": "ส่งไปยัง", + "channelRequired": "เลือกอย่างน้อยหนึ่งช่อง", + "deleteConfirm": "ลบกฎ \"{{name}} \" ออกหรือไม่?", + "everything": "ทุกอย่าง", + "summary": "{{match}}, {{severity}} หรือสูงกว่า ไปจนถึง {{channels}}" }, "actions": { - "cancel": "Cancel", - "save": "Save", - "saving": "Saving...", - "delete": "Delete" + "cancel": "ยกเลิก", + "save": "บันทึก", + "saving": "ประหยัด...", + "delete": "ลบ" }, "widget": { - "name": "Alert Feed", - "description": "Your latest alerts, with a quick way to mark them read", - "maxItems": "Max items", - "showRead": "Show read alerts", - "allClear": "All clear", - "loading": "Loading..." + "name": "ฟีดแจ้งเตือน", + "description": "การแจ้งเตือนล่าสุดของคุณ พร้อมวิธีทำเครื่องหมายว่าอ่านแล้วอย่างรวดเร็ว", + "maxItems": "ไอเทมสูงสุด", + "showRead": "แสดงการแจ้งเตือนการอ่าน", + "allClear": "ทุกอย่างเรียบร้อย", + "loading": "กำลังโหลด..." + }, + "plugin": { + "name": "Alerts" } } diff --git a/plugins/alerts/locales/translated/tr_TR.json b/plugins/alerts/locales/translated/tr_TR.json index 2e8dd2a69..711196804 100644 --- a/plugins/alerts/locales/translated/tr_TR.json +++ b/plugins/alerts/locales/translated/tr_TR.json @@ -4,13 +4,13 @@ }, "permissions": { "use": { - "title": "Use alerts", - "description": "Get alerts in the inbox and send them to your own channels." + "title": "Uyarıları kullanın", + "description": "Gelen kutunuza bildirimler alın ve bunları kendi kanallarınıza gönderin." } }, "onboarding": { "feature": "Uyarılar", - "featureDesc": "Every alert in one inbox, sent on to Discord, ntfy, email or a webhook if you want." + "featureDesc": "Tüm uyarılar tek bir gelen kutusunda toplanır ve isterseniz Discord, NTfy, e-posta veya webhook üzerinden de gönderilebilir." }, "settings": { "group": { @@ -19,97 +19,97 @@ }, "admin": { "announcements": { - "label": "Termix announcements", - "description": "Show news from the Termix team, like security notices and releases, in everyone's inbox." + "label": "Termix duyuruları", + "description": "Termix ekibinden gelen güvenlik uyarıları ve sürümler gibi haberleri herkesin e-posta kutusunda göster." }, "retentionDays": { - "label": "Keep alerts for (days)", - "description": "Older alerts are removed from every inbox." + "label": "Uyarıları (gün) süreyle açık tut", + "description": "Eski bildirimler tüm gelen kutularından silinir." }, "smtpHost": { - "label": "SMTP server", - "description": "Needed for email channels. Leave empty to turn email off.", + "label": "SMTP sunucusu", + "description": "E-posta kanalları için gereklidir. E-postayı kapatmak için boş bırakın.", "placeholder": "smtp.example.com" }, "smtpPort": { - "label": "SMTP port", - "description": "Usually 587 with STARTTLS or 465 with TLS." + "label": "SMTP bağlantı noktası", + "description": "Genellikle STARTTLS ile 587 veya TLS ile 465 kullanılır." }, "smtpSecure": { - "label": "Use TLS from the start", - "description": "Turn on for port 465. Leave off for 587, which upgrades to TLS on its own." + "label": "TLS'yi en başından itibaren kullanın.", + "description": "465 numaralı bağlantı noktası için etkinleştirin. 587 numaralı bağlantı noktasını ise devre dışı bırakın; bu bağlantı noktası otomatik olarak TLS'ye yükseltilir." }, "smtpUser": { - "label": "SMTP username", - "description": "Leave empty if the server does not need a login." + "label": "SMTP kullanıcı adı", + "description": "Sunucuya giriş yapılması gerekmiyorsa boş bırakın." }, "smtpPassword": { - "label": "SMTP password", - "description": "Stored encrypted." + "label": "SMTP şifresi", + "description": "Şifrelenmiş olarak saklanmaktadır." }, "smtpFrom": { - "label": "From address", - "description": "The sender alerts come from.", + "label": "Gönderen adresi", + "description": "Uyarı gönderen şuradan geliyor.", "placeholder": "Termix " } }, "user": { "popups": { - "label": "Alert popups", - "description": "Which new alerts pop up while you use Termix. They always land in the inbox.", - "all": "All alerts", - "warning": "Warnings and critical", - "critical": "Critical only", + "label": "Uyarı açılır pencereleri", + "description": "Termix kullanırken hangi yeni uyarılar belirir? Bunlar her zaman gelen kutunuza düşer.", + "all": "Tüm uyarılar", + "warning": "Uyarılar ve kritik noktalar", + "critical": "Sadece kritik", "off": "Yok" } } }, "sections": { - "inbox": "Inbox", + "inbox": "Gelen Kutusu", "channels": "Kanallar", - "rules": "Delivery rules" + "rules": "Teslimat kuralları" }, "severity": { "info": "Bilgi", "success": "Başarılı", "warning": "Uyarı", - "critical": "Critical" + "critical": "Kritik" }, "inbox": { "sourceTermix": "Termix", "openLink": "Aç", "view": "Görüntüle", - "unread": "Unread", - "deliveryFailed_one": "{{count}} channel failed", - "deliveryFailed_other": "{{count}} channels failed", - "markRead": "Mark as read", - "markUnread": "Mark as unread", - "markAllRead": "Mark all as read", + "unread": "Okunmamış", + "deliveryFailed_one": "{{count}} kanal başarısız oldu", + "deliveryFailed_other": "{{count}} kanal başarısız oldu", + "markRead": "Okundu olarak işaretle", + "markUnread": "Okunmamış olarak işaretle", + "markAllRead": "Tümünü okundu olarak işaretle", "delete": "Sil", - "clearRead": "Delete read alerts", - "cleared_one": "Deleted {{count}} alert", - "cleared_other": "Deleted {{count}} alerts", + "clearRead": "Okuma uyarılarını sil", + "cleared_one": "Silindi {{count}} uyarısı", + "cleared_other": "Silinen {{count}} uyarıları", "filterAll": "Tümü", - "filterUnread": "Unread", - "anySeverity": "Any severity", - "anySource": "Any source", - "openAll": "Open in a tab", - "empty": "No alerts yet.", - "emptyUnread": "You are all caught up.", - "loadMore": "Load more" + "filterUnread": "Okunmamış", + "anySeverity": "Herhangi bir şiddet", + "anySource": "Herhangi bir kaynak", + "openAll": "Yeni sekmede aç", + "empty": "Henüz herhangi bir uyarı yok.", + "emptyUnread": "Her şey tamamlandı.", + "loadMore": "Daha fazla yükle" }, "channels": { - "intro": "Channels are where alerts can go outside Termix. Delivery rules pick which alerts use them.", - "add": "Add channel", - "edit": "Edit channel", - "test": "Send a test", - "testSent": "Test alert sent", - "testFailed": "Test failed: {{error}}", - "deleteConfirm": "Delete the channel \"{{name}}\"?", - "deleted": "Channel deleted", - "empty": "No channels yet.", + "intro": "Kanallar, uyarıların Termix dışına gönderilebileceği yerlerdir. Teslimat kuralları, hangi uyarıların bu kanalları kullanacağını belirler.", + "add": "Kanal ekle", + "edit": "Kanalı düzenle", + "test": "Bir test gönderin", + "testSent": "Test uyarısı gönderildi", + "testFailed": "Test başarısız oldu: {{error}}", + "deleteConfirm": "\"{{name}} \" kanalını silmek mi istiyorsunuz?", + "deleted": "Kanal silindi", + "empty": "Henüz kanal yok.", "enabled": "Etkin", - "needsSave": "This channel needs to be opened and saved again before it can send.", + "needsSave": "Bu kanalın gönderilebilmesi için önce açılıp tekrar kaydedilmesi gerekiyor.", "name": "Ad", "nameRequired": "Ad zorunludur", "type": "Tür", @@ -119,41 +119,41 @@ "discord": "Discord", "email": "E-posta" }, - "emailUnavailable": "Email needs an SMTP server, which an admin sets up in the Alerts settings.", + "emailUnavailable": "E-posta göndermek için bir SMTP sunucusuna ihtiyaç vardır ve bu sunucu yönetici tarafından Uyarılar ayarlarında kurulur.", "webhookUrl": "URL", - "webhookHint": "Gets a JSON body for every alert.", - "method": "Method", - "headers": "Headers", - "headersHint": "One per line, like Name: value.", + "webhookHint": "Her uyarı için JSON formatında bir veri gövdesi alır.", + "method": "Yöntem", + "headers": "Başlıklar", + "headersHint": "Her satıra bir tane, örneğin İsim: değer şeklinde.", "ntfyServer": "Sunucu URL'si", "ntfyTopic": "Konu", - "ntfyToken": "Access token (optional)", + "ntfyToken": "Erişim belirteci (isteğe bağlı)", "discordUrl": "Discord webhook URL", - "discordHint": "From the channel's settings in Discord, under Integrations.", - "discordUsername": "Display name (optional)", - "discordAvatar": "Avatar URL (optional)", - "emailTo": "Send to", - "emailHint": "Separate more than one address with commas.", - "privateNetwork": "Allow a private network address", - "privateNetworkHint": "Only works for hosts an admin allows in the private endpoint list." + "discordHint": "Discord'daki kanal ayarlarından, Entegrasyonlar bölümünden.", + "discordUsername": "Görüntülenen ad (isteğe bağlı)", + "discordAvatar": "Avatar URL'si (isteğe bağlı)", + "emailTo": "Gönder", + "emailHint": "Birden fazla adresi virgülle ayırın.", + "privateNetwork": "Özel ağ adresine izin verin", + "privateNetworkHint": "Yalnızca yöneticinin özel uç nokta listesinde izin verdiği sunucular için çalışır." }, "rules": { - "intro": "A delivery rule sends matching alerts to your channels. Alerts always stay in the inbox too.", - "add": "Add rule", - "edit": "Edit rule", - "empty": "No rules yet, so alerts only show up in the inbox.", - "needChannel": "Add a channel first.", + "intro": "Bir teslimat kuralı, eşleşen uyarıları kanallarınıza gönderir. Uyarılar her zaman gelen kutunuzda da kalır.", + "add": "Kural ekle", + "edit": "Kuralı düzenle", + "empty": "Henüz kurallar belirlenmedi, bu nedenle uyarılar yalnızca gelen kutusunda görünüyor.", + "needChannel": "Önce bir kanal ekleyin.", "enabled": "Etkin", "name": "Ad", "nameRequired": "Ad zorunludur", - "match": "Alerts to send", - "matchHint": "* for everything, automations.* for everything from automations, or one exact kind.", - "minSeverity": "At least", - "channels": "Send to", - "channelRequired": "Pick at least one channel", - "deleteConfirm": "Delete the rule \"{{name}}\"?", - "everything": "Everything", - "summary": "{{match}}, {{severity}} or higher, to {{channels}}" + "match": "Gönderilecek uyarılar", + "matchHint": "*Her şey için otomasyonlar.* Otomasyonlardan her şeye veya belirli bir türe kadar.", + "minSeverity": "En azından", + "channels": "Gönder", + "channelRequired": "En az bir kanal seçin", + "deleteConfirm": "\"{{name}} \" kuralını silmek mi istiyorsunuz?", + "everything": "Her şey", + "summary": "{{match}}, {{severity}} veya daha yüksek, {{channels}}'ye kadar" }, "actions": { "cancel": "İptal", @@ -163,10 +163,13 @@ }, "widget": { "name": "Uyarı Akışı", - "description": "Your latest alerts, with a quick way to mark them read", - "maxItems": "Max items", - "showRead": "Show read alerts", + "description": "En son bildirimleriniz ve bunları okundu olarak işaretlemenin hızlı bir yolu.", + "maxItems": "Maksimum öğe", + "showRead": "Okuma uyarılarını göster", "allClear": "Her şey normal", "loading": "Yükleniyor..." + }, + "plugin": { + "name": "Alerts" } } diff --git a/plugins/alerts/locales/translated/uk_UA.json b/plugins/alerts/locales/translated/uk_UA.json index 9d7514f0d..94e4d6ada 100644 --- a/plugins/alerts/locales/translated/uk_UA.json +++ b/plugins/alerts/locales/translated/uk_UA.json @@ -1,172 +1,175 @@ { "nav": { - "alerts": "Alerts" + "alerts": "Сповіщення" }, "permissions": { "use": { - "title": "Use alerts", - "description": "Get alerts in the inbox and send them to your own channels." + "title": "Використовуйте сповіщення", + "description": "Отримуйте сповіщення у вхідні повідомлення та надсилайте їх на власні канали." } }, "onboarding": { - "feature": "Alerts", - "featureDesc": "Every alert in one inbox, sent on to Discord, ntfy, email or a webhook if you want." + "feature": "Сповіщення", + "featureDesc": "Кожне сповіщення в одній поштовій скриньці, що надсилається на Discord, ntfy, електронну пошту або вебхук, якщо хочете." }, "settings": { "group": { - "general": "General", - "email": "Email" + "general": "Загальне", + "email": "Електронна пошта" }, "admin": { "announcements": { - "label": "Termix announcements", - "description": "Show news from the Termix team, like security notices and releases, in everyone's inbox." + "label": "Оголошення Termix", + "description": "Показувати новини від команди Termix, такі як повідомлення та релізи безпеки, у папці \"Вхідні\" для всіх." }, "retentionDays": { - "label": "Keep alerts for (days)", - "description": "Older alerts are removed from every inbox." + "label": "Зберігати сповіщення протягом (днів)", + "description": "Старіші сповіщення видаляються з усіх папок \"Вхідні\"." }, "smtpHost": { - "label": "SMTP server", - "description": "Needed for email channels. Leave empty to turn email off.", + "label": "SMTP-сервер", + "description": "Потрібно для каналів електронної пошти. Залиште поле порожнім, щоб вимкнути електронну пошту.", "placeholder": "smtp.example.com" }, "smtpPort": { - "label": "SMTP port", - "description": "Usually 587 with STARTTLS or 465 with TLS." + "label": "SMTP-порт", + "description": "Зазвичай 587 з STARTTLS або 465 з TLS." }, "smtpSecure": { - "label": "Use TLS from the start", - "description": "Turn on for port 465. Leave off for 587, which upgrades to TLS on its own." + "label": "Використовуйте TLS з самого початку", + "description": "Увімкніть для порту 465. Вимкніть для порту 587, який самостійно оновлюється до TLS." }, "smtpUser": { - "label": "SMTP username", - "description": "Leave empty if the server does not need a login." + "label": "Ім'я користувача SMTP", + "description": "Залиште поле порожнім, якщо сервер не потребує входу." }, "smtpPassword": { - "label": "SMTP password", - "description": "Stored encrypted." + "label": "Пароль SMTP", + "description": "Зберігається зашифрованим." }, "smtpFrom": { - "label": "From address", - "description": "The sender alerts come from.", - "placeholder": "Termix " + "label": "З адреси", + "description": "Сповіщення відправника надходять з.", + "placeholder": "Термікс " } }, "user": { "popups": { - "label": "Alert popups", - "description": "Which new alerts pop up while you use Termix. They always land in the inbox.", - "all": "All alerts", - "warning": "Warnings and critical", - "critical": "Critical only", - "off": "None" + "label": "Спливаючі вікна сповіщень", + "description": "Які нові сповіщення з’являються під час використання Termix. Вони завжди потрапляють у папку «Вхідні».", + "all": "Усі сповіщення", + "warning": "Попередження та критичні", + "critical": "Тільки критично", + "off": "Жоден" } } }, "sections": { - "inbox": "Inbox", - "channels": "Channels", - "rules": "Delivery rules" + "inbox": "Вхідні", + "channels": "Канали", + "rules": "Правила доставки" }, "severity": { - "info": "Info", - "success": "Success", - "warning": "Warning", - "critical": "Critical" + "info": "Інформація", + "success": "Успіх", + "warning": "УВАГА", + "critical": "Критичний" }, "inbox": { - "sourceTermix": "Termix", - "openLink": "Open", - "view": "View", - "unread": "Unread", - "deliveryFailed_one": "{{count}} channel failed", - "deliveryFailed_other": "{{count}} channels failed", - "markRead": "Mark as read", - "markUnread": "Mark as unread", - "markAllRead": "Mark all as read", - "delete": "Delete", - "clearRead": "Delete read alerts", - "cleared_one": "Deleted {{count}} alert", - "cleared_other": "Deleted {{count}} alerts", - "filterAll": "All", - "filterUnread": "Unread", - "anySeverity": "Any severity", - "anySource": "Any source", - "openAll": "Open in a tab", - "empty": "No alerts yet.", - "emptyUnread": "You are all caught up.", - "loadMore": "Load more" + "sourceTermix": "Термікс", + "openLink": "ВІДЧИНЕНО", + "view": "Переглянути", + "unread": "Непрочитане", + "deliveryFailed_one": "{{count}} канал не вдався", + "deliveryFailed_other": "{{count}} каналів не вдалося", + "markRead": "Позначити як прочитане", + "markUnread": "Позначити як непрочитане", + "markAllRead": "Позначити всі як прочитані", + "delete": "Видалити", + "clearRead": "Видалити сповіщення про прочитання", + "cleared_one": "Видалено сповіщення {{count}}", + "cleared_other": "Видалено сповіщень {{count}}", + "filterAll": "Усі", + "filterUnread": "Непрочитане", + "anySeverity": "Будь-якої тяжкості", + "anySource": "Будь-яке джерело", + "openAll": "Відкрити у вкладці", + "empty": "Поки що немає сповіщень.", + "emptyUnread": "Ви все в курсі.", + "loadMore": "Завантажити більше" }, "channels": { - "intro": "Channels are where alerts can go outside Termix. Delivery rules pick which alerts use them.", - "add": "Add channel", - "edit": "Edit channel", - "test": "Send a test", - "testSent": "Test alert sent", - "testFailed": "Test failed: {{error}}", - "deleteConfirm": "Delete the channel \"{{name}}\"?", - "deleted": "Channel deleted", - "empty": "No channels yet.", - "enabled": "Enabled", - "needsSave": "This channel needs to be opened and saved again before it can send.", - "name": "Name", - "nameRequired": "Name is required", - "type": "Type", + "intro": "Канали – це місця, де сповіщення можуть надходити за межі Termix. Правила доставки вибирають, які сповіщення їх використовувати.", + "add": "Додати канал", + "edit": "Редагувати канал", + "test": "Надіслати тест", + "testSent": "Тестове сповіщення надіслано", + "testFailed": "Тест не вдався: {{error}}", + "deleteConfirm": "Видалити канал «{{name}}»?", + "deleted": "Канал видалено", + "empty": "Поки що немає каналів.", + "enabled": "Увімкнено", + "needsSave": "Цей канал потрібно знову відкрити та зберегти, перш ніж його можна буде надіслати.", + "name": "Ім'я", + "nameRequired": "Ім'я обов'язкове", + "type": "Тип", "types": { - "webhook": "Webhook", + "webhook": "Вебхук", "ntfy": "ntfy", - "discord": "Discord", - "email": "Email" + "discord": "Дискорд", + "email": "Електронна пошта" }, - "emailUnavailable": "Email needs an SMTP server, which an admin sets up in the Alerts settings.", - "webhookUrl": "URL", - "webhookHint": "Gets a JSON body for every alert.", - "method": "Method", - "headers": "Headers", - "headersHint": "One per line, like Name: value.", - "ntfyServer": "Server URL", - "ntfyTopic": "Topic", - "ntfyToken": "Access token (optional)", - "discordUrl": "Discord webhook URL", - "discordHint": "From the channel's settings in Discord, under Integrations.", - "discordUsername": "Display name (optional)", - "discordAvatar": "Avatar URL (optional)", - "emailTo": "Send to", - "emailHint": "Separate more than one address with commas.", - "privateNetwork": "Allow a private network address", - "privateNetworkHint": "Only works for hosts an admin allows in the private endpoint list." + "emailUnavailable": "Для електронної пошти потрібен SMTP-сервер, який адміністратор налаштовує в налаштуваннях сповіщень.", + "webhookUrl": "URL-адреса", + "webhookHint": "Отримує тіло JSON для кожного сповіщення.", + "method": "Метод", + "headers": "Заголовки", + "headersHint": "По одному на рядок, наприклад, Ім'я: значення.", + "ntfyServer": "URL-адреса сервера", + "ntfyTopic": "Тема", + "ntfyToken": "Токен доступу (необов'язково)", + "discordUrl": "URL-адреса вебхука Discord", + "discordHint": "У налаштуваннях каналу в Discord, у розділі «Інтеграції».", + "discordUsername": "Відображуване ім'я (необов'язково)", + "discordAvatar": "URL-адреса аватара (необов'язково)", + "emailTo": "Надіслати", + "emailHint": "Розділяйте більше однієї адреси комами.", + "privateNetwork": "Дозволити адресу приватної мережі", + "privateNetworkHint": "Працює лише для хостів, які адміністратор дозволяє в списку приватних кінцевих точок." }, "rules": { - "intro": "A delivery rule sends matching alerts to your channels. Alerts always stay in the inbox too.", - "add": "Add rule", - "edit": "Edit rule", - "empty": "No rules yet, so alerts only show up in the inbox.", - "needChannel": "Add a channel first.", - "enabled": "Enabled", - "name": "Name", - "nameRequired": "Name is required", - "match": "Alerts to send", - "matchHint": "* for everything, automations.* for everything from automations, or one exact kind.", - "minSeverity": "At least", - "channels": "Send to", - "channelRequired": "Pick at least one channel", - "deleteConfirm": "Delete the rule \"{{name}}\"?", - "everything": "Everything", - "summary": "{{match}}, {{severity}} or higher, to {{channels}}" + "intro": "Правило доставки надсилає відповідні сповіщення до ваших каналів. Сповіщення також завжди залишаються у вхідних повідомленнях.", + "add": "Додати правило", + "edit": "Редагувати правило", + "empty": "Поки що немає правил, тому сповіщення відображаються лише у вхідних повідомленнях.", + "needChannel": "Спочатку додайте канал.", + "enabled": "Увімкнено", + "name": "Ім'я", + "nameRequired": "Ім'я обов'язкове", + "match": "Сповіщення для надсилання", + "matchHint": "* для всього, автоматизації.* для всього, починаючи від автоматизації, або одного точного виду.", + "minSeverity": "Принаймні", + "channels": "Надіслати", + "channelRequired": "Виберіть хоча б один канал", + "deleteConfirm": "Видалити правило \"{{name}}\"?", + "everything": "Все", + "summary": "{{match}}, {{severity}} або вище, до {{channels}}" }, "actions": { - "cancel": "Cancel", - "save": "Save", - "saving": "Saving...", - "delete": "Delete" + "cancel": "Скасувати", + "save": "Зберегти", + "saving": "Збереження...", + "delete": "Видалити" }, "widget": { - "name": "Alert Feed", - "description": "Your latest alerts, with a quick way to mark them read", - "maxItems": "Max items", - "showRead": "Show read alerts", - "allClear": "All clear", - "loading": "Loading..." + "name": "Стрічка сповіщень", + "description": "Ваші останні сповіщення з можливістю швидко позначити їх як прочитані", + "maxItems": "Макс. кількість елементів", + "showRead": "Показувати сповіщення про прочитання", + "allClear": "Все чисто", + "loading": "Завантаження..." + }, + "plugin": { + "name": "Alerts" } } diff --git a/plugins/alerts/locales/translated/vi_VN.json b/plugins/alerts/locales/translated/vi_VN.json index 44d8a66ae..12564b46e 100644 --- a/plugins/alerts/locales/translated/vi_VN.json +++ b/plugins/alerts/locales/translated/vi_VN.json @@ -4,13 +4,13 @@ }, "permissions": { "use": { - "title": "Use alerts", - "description": "Get alerts in the inbox and send them to your own channels." + "title": "Sử dụng cảnh báo", + "description": "Nhận thông báo trong hộp thư đến và chia sẻ chúng lên các kênh của riêng bạn." } }, "onboarding": { "feature": "Cảnh báo", - "featureDesc": "Every alert in one inbox, sent on to Discord, ntfy, email or a webhook if you want." + "featureDesc": "Tất cả thông báo đều được tập trung trong một hộp thư đến, sau đó được gửi đến Discord, NTFS, email hoặc webhook nếu bạn muốn." }, "settings": { "group": { @@ -19,97 +19,97 @@ }, "admin": { "announcements": { - "label": "Termix announcements", - "description": "Show news from the Termix team, like security notices and releases, in everyone's inbox." + "label": "Thông báo của Termix", + "description": "Hiển thị tin tức từ đội ngũ Termix, chẳng hạn như thông báo bảo mật và bản phát hành, trong hộp thư đến của mọi người." }, "retentionDays": { - "label": "Keep alerts for (days)", - "description": "Older alerts are removed from every inbox." + "label": "Giữ cảnh báo trong (ngày)", + "description": "Các thông báo cũ hơn sẽ bị xóa khỏi mọi hộp thư đến." }, "smtpHost": { - "label": "SMTP server", - "description": "Needed for email channels. Leave empty to turn email off.", + "label": "Máy chủ SMTP", + "description": "Cần thiết cho các kênh email. Để trống nếu muốn tắt email.", "placeholder": "smtp.example.com" }, "smtpPort": { - "label": "SMTP port", - "description": "Usually 587 with STARTTLS or 465 with TLS." + "label": "Cổng SMTP", + "description": "Thông thường là cổng 587 với STARTTLS hoặc 465 với TLS." }, "smtpSecure": { - "label": "Use TLS from the start", - "description": "Turn on for port 465. Leave off for 587, which upgrades to TLS on its own." + "label": "Hãy sử dụng TLS ngay từ đầu.", + "description": "Bật tính năng này cho cổng 465. Tắt tính năng cho cổng 587, vì cổng này sẽ tự động nâng cấp lên TLS." }, "smtpUser": { - "label": "SMTP username", - "description": "Leave empty if the server does not need a login." + "label": "Tên người dùng SMTP", + "description": "Để trống nếu máy chủ không cần đăng nhập." }, "smtpPassword": { - "label": "SMTP password", - "description": "Stored encrypted." + "label": "Mật khẩu SMTP", + "description": "Được lưu trữ dưới dạng mã hóa." }, "smtpFrom": { - "label": "From address", - "description": "The sender alerts come from.", + "label": "Từ địa chỉ", + "description": "Thông báo đến từ nguồn nào?", "placeholder": "Termix " } }, "user": { "popups": { - "label": "Alert popups", - "description": "Which new alerts pop up while you use Termix. They always land in the inbox.", - "all": "All alerts", - "warning": "Warnings and critical", - "critical": "Critical only", + "label": "Cửa sổ bật lên cảnh báo", + "description": "Những thông báo mới nào xuất hiện khi bạn sử dụng Termix? Chúng luôn được gửi đến hộp thư đến.", + "all": "Tất cả cảnh báo", + "warning": "Cảnh báo và thông tin quan trọng", + "critical": "Chỉ quan trọng", "off": "Không" } } }, "sections": { - "inbox": "Inbox", + "inbox": "Hộp thư đến", "channels": "Kênh", - "rules": "Delivery rules" + "rules": "Quy tắc giao hàng" }, "severity": { "info": "Thông tin", "success": "Thành công", "warning": "Cảnh báo", - "critical": "Critical" + "critical": "Phê bình" }, "inbox": { "sourceTermix": "Termix", "openLink": "Mở", "view": "Xem", - "unread": "Unread", - "deliveryFailed_one": "{{count}} channel failed", - "deliveryFailed_other": "{{count}} channels failed", - "markRead": "Mark as read", - "markUnread": "Mark as unread", - "markAllRead": "Mark all as read", + "unread": "Chưa đọc", + "deliveryFailed_one": "{{count}} kênh bị lỗi", + "deliveryFailed_other": "{{count}} kênh bị lỗi", + "markRead": "Đánh dấu là đã đọc", + "markUnread": "Đánh dấu là chưa đọc", + "markAllRead": "Đánh dấu tất cả là đã đọc", "delete": "Xóa", - "clearRead": "Delete read alerts", - "cleared_one": "Deleted {{count}} alert", - "cleared_other": "Deleted {{count}} alerts", + "clearRead": "Xóa thông báo đã đọc", + "cleared_one": "Đã xóa cảnh báo {{count}}", + "cleared_other": "Đã xóa {{count}} cảnh báo", "filterAll": "Tất cả", - "filterUnread": "Unread", - "anySeverity": "Any severity", - "anySource": "Any source", - "openAll": "Open in a tab", - "empty": "No alerts yet.", - "emptyUnread": "You are all caught up.", - "loadMore": "Load more" + "filterUnread": "Chưa đọc", + "anySeverity": "Bất kỳ mức độ nghiêm trọng nào", + "anySource": "Bất kỳ nguồn nào", + "openAll": "Mở trong một tab", + "empty": "Chưa có thông báo nào.", + "emptyUnread": "Bạn đã nắm bắt được hết mọi thứ rồi.", + "loadMore": "Tải thêm" }, "channels": { - "intro": "Channels are where alerts can go outside Termix. Delivery rules pick which alerts use them.", - "add": "Add channel", - "edit": "Edit channel", - "test": "Send a test", - "testSent": "Test alert sent", - "testFailed": "Test failed: {{error}}", - "deleteConfirm": "Delete the channel \"{{name}}\"?", - "deleted": "Channel deleted", - "empty": "No channels yet.", + "intro": "Các kênh là nơi các cảnh báo có thể được gửi ra ngoài Termix. Các quy tắc phân phối sẽ chọn những cảnh báo nào sử dụng các kênh đó.", + "add": "Thêm kênh", + "edit": "Chỉnh sửa kênh", + "test": "Gửi một bài kiểm tra", + "testSent": "Đã gửi cảnh báo thử nghiệm", + "testFailed": "Kiểm tra thất bại: {{error}}", + "deleteConfirm": "Xóa kênh \"{{name}}\"?", + "deleted": "Kênh đã bị xóa", + "empty": "Chưa có kênh nào.", "enabled": "Đã bật", - "needsSave": "This channel needs to be opened and saved again before it can send.", + "needsSave": "Kênh này cần được mở và lưu lại một lần nữa trước khi có thể gửi.", "name": "Tên", "nameRequired": "Tên là bắt buộc", "type": "Loại", @@ -119,41 +119,41 @@ "discord": "Discord", "email": "Email" }, - "emailUnavailable": "Email needs an SMTP server, which an admin sets up in the Alerts settings.", + "emailUnavailable": "Email cần có máy chủ SMTP, mà quản trị viên sẽ thiết lập trong phần cài đặt Thông báo.", "webhookUrl": "URL", - "webhookHint": "Gets a JSON body for every alert.", - "method": "Method", - "headers": "Headers", - "headersHint": "One per line, like Name: value.", + "webhookHint": "Lấy nội dung JSON cho mỗi thông báo.", + "method": "Phương pháp", + "headers": "Tiêu đề", + "headersHint": "Mỗi mục một dòng, ví dụ: Tên: giá trị.", "ntfyServer": "URL máy chủ", "ntfyTopic": "Chủ đề", - "ntfyToken": "Access token (optional)", - "discordUrl": "Discord webhook URL", - "discordHint": "From the channel's settings in Discord, under Integrations.", - "discordUsername": "Display name (optional)", - "discordAvatar": "Avatar URL (optional)", - "emailTo": "Send to", - "emailHint": "Separate more than one address with commas.", - "privateNetwork": "Allow a private network address", - "privateNetworkHint": "Only works for hosts an admin allows in the private endpoint list." + "ntfyToken": "Mã truy cập (tùy chọn)", + "discordUrl": "URL webhook Discord", + "discordHint": "Bạn có thể chọn \"Integrations\" trong phần cài đặt kênh trên Discord.", + "discordUsername": "Tên hiển thị (tùy chọn)", + "discordAvatar": "URL ảnh đại diện (tùy chọn)", + "emailTo": "Gửi đến", + "emailHint": "Hãy sử dụng dấu phẩy để phân tách nhiều địa chỉ.", + "privateNetwork": "Cho phép địa chỉ mạng riêng", + "privateNetworkHint": "Chỉ hoạt động với các máy chủ mà quản trị viên cho phép trong danh sách điểm cuối riêng tư." }, "rules": { - "intro": "A delivery rule sends matching alerts to your channels. Alerts always stay in the inbox too.", - "add": "Add rule", - "edit": "Edit rule", - "empty": "No rules yet, so alerts only show up in the inbox.", - "needChannel": "Add a channel first.", + "intro": "Quy tắc phân phối sẽ gửi các thông báo phù hợp đến các kênh của bạn. Các thông báo này cũng luôn được lưu trữ trong hộp thư đến.", + "add": "Thêm quy tắc", + "edit": "Chỉnh sửa quy tắc", + "empty": "Hiện chưa có quy tắc nào, vì vậy thông báo chỉ hiển thị trong hộp thư đến.", + "needChannel": "Trước tiên hãy thêm kênh.", "enabled": "Đã bật", "name": "Tên", "nameRequired": "Tên là bắt buộc", - "match": "Alerts to send", - "matchHint": "* for everything, automations.* for everything from automations, or one exact kind.", - "minSeverity": "At least", - "channels": "Send to", - "channelRequired": "Pick at least one channel", - "deleteConfirm": "Delete the rule \"{{name}}\"?", - "everything": "Everything", - "summary": "{{match}}, {{severity}} or higher, to {{channels}}" + "match": "Thông báo cần gửi", + "matchHint": "* Cho mọi thứ, tự động hóa.* Cho mọi thứ từ tự động hóa, hoặc một loại cụ thể nào đó.", + "minSeverity": "Ít nhất", + "channels": "Gửi đến", + "channelRequired": "Chọn ít nhất một kênh", + "deleteConfirm": "Xóa quy tắc \"{{name}}\"?", + "everything": "Mọi thứ", + "summary": "{{match}}, {{severity}} hoặc cao hơn, đến {{channels}}" }, "actions": { "cancel": "Hủy", @@ -163,10 +163,13 @@ }, "widget": { "name": "Luồng cảnh báo", - "description": "Your latest alerts, with a quick way to mark them read", - "maxItems": "Max items", - "showRead": "Show read alerts", + "description": "Thông báo mới nhất của bạn, kèm theo cách nhanh để đánh dấu đã đọc.", + "maxItems": "Số lượng vật phẩm tối đa", + "showRead": "Hiển thị thông báo đã đọc", "allClear": "Tất cả ổn", "loading": "Đang tải..." + }, + "plugin": { + "name": "Alerts" } } diff --git a/plugins/alerts/locales/translated/zh_CN.json b/plugins/alerts/locales/translated/zh_CN.json index bc0c435f5..c74ea6ddb 100644 --- a/plugins/alerts/locales/translated/zh_CN.json +++ b/plugins/alerts/locales/translated/zh_CN.json @@ -4,13 +4,13 @@ }, "permissions": { "use": { - "title": "使用告警", - "description": "在收件箱中接收告警,并发送到你自己的渠道。" + "title": "使用提醒", + "description": "在收件箱中接收提醒,并将其发送到您自己的频道。" } }, "onboarding": { "feature": "告警", - "featureDesc": "在统一收件箱中查看所有告警,也可将它们发送到 Discord、ntfy、电子邮箱或 Webhook。" + "featureDesc": "所有提醒都集中在一个收件箱中,您可以选择将其发送到 Discord、ntfy、电子邮件或 webhook。" }, "settings": { "group": { @@ -19,47 +19,47 @@ }, "admin": { "announcements": { - "label": "Termix 公告", - "description": "在所有用户的收件箱中显示 Termix 团队发布的安全通知、版本更新等消息。" + "label": "Termix公告", + "description": "将 Termix 团队的新闻,例如安全通知和版本发布,发送到每个人的收件箱。" }, "retentionDays": { - "label": "告警保留天数", - "description": "超过保留时间的告警将从所有收件箱中移除。" + "label": "保持警报(天)", + "description": "所有收件箱中都会删除较旧的提醒邮件。" }, "smtpHost": { - "label": "SMTP 服务器", - "description": "邮件渠道需要此项,留空则关闭邮件发送。", + "label": "SMTP服务器", + "description": "需要用于电子邮件渠道。留空则关闭电子邮件功能。", "placeholder": "smtp.example.com" }, "smtpPort": { - "label": "SMTP 端口", - "description": "通常使用 587(STARTTLS)或 465(TLS)。" + "label": "SMTP端口", + "description": "通常使用 STARTTLS 的 587 端口或使用 TLS 的 465 端口。" }, "smtpSecure": { - "label": "连接时直接使用 TLS", - "description": "使用端口 465 时开启。使用端口 587 时关闭,该端口会自动升级为 TLS。" + "label": "从一开始就使用TLS", + "description": "启用 465 端口。保持 587 端口关闭,该端口会自动升级到 TLS。" }, "smtpUser": { "label": "SMTP 用户名", - "description": "服务器无需登录时留空。" + "description": "如果服务器不需要登录,请留空。" }, "smtpPassword": { - "label": "SMTP 密码", - "description": "加密保存。" + "label": "SMTP密码", + "description": "已加密存储。" }, "smtpFrom": { - "label": "发件人地址", - "description": "告警邮件的发件人。", - "placeholder": "Termix " + "label": "来自地址", + "description": "发件人警报来自。", + "placeholder": "终端 " } }, "user": { "popups": { - "label": "告警弹窗", - "description": "选择使用 Termix 时哪些新告警会弹出提示。所有告警都会保留在收件箱中。", - "all": "所有告警", - "warning": "警告和严重告警", - "critical": "仅严重告警", + "label": "弹出式警报", + "description": "使用Termix时会弹出哪些新提醒?它们都会发送到您的收件箱。", + "all": "所有警报", + "warning": "警告和关键信息", + "critical": "仅限关键", "off": "全不选" } } @@ -67,49 +67,49 @@ "sections": { "inbox": "收件箱", "channels": "通道", - "rules": "投递规则" + "rules": "配送规则" }, "severity": { "info": "信息", "success": "成功", "warning": "警告", - "critical": "严重" + "critical": "批判的" }, "inbox": { "sourceTermix": "Termix", "openLink": "打开", "view": "查看", "unread": "未读", - "deliveryFailed_one": "{{count}} 个渠道发送失败", - "deliveryFailed_other": "{{count}} 个渠道发送失败", + "deliveryFailed_one": "{{count}} 通道失败", + "deliveryFailed_other": "{{count}} 通道失败", "markRead": "标记为已读", "markUnread": "标记为未读", "markAllRead": "全部标记为已读", "delete": "删除", - "clearRead": "删除已读告警", - "cleared_one": "已删除 {{count}} 条告警", - "cleared_other": "已删除 {{count}} 条告警", + "clearRead": "删除已读提醒", + "cleared_one": "已删除 {{count}} 警报", + "cleared_other": "已删除 {{count}} 警报", "filterAll": "全部", "filterUnread": "未读", - "anySeverity": "任意严重程度", - "anySource": "任意来源", + "anySeverity": "任何严重程度", + "anySource": "任何来源", "openAll": "在标签页中打开", - "empty": "暂无告警。", - "emptyUnread": "没有未读消息。", + "empty": "目前尚未收到任何警报。", + "emptyUnread": "你们都跟上了。", "loadMore": "加载更多" }, "channels": { - "intro": "渠道用于将告警发送到 Termix 之外,投递规则决定哪些告警使用这些渠道。", - "add": "添加渠道", - "edit": "编辑渠道", - "test": "发送测试消息", - "testSent": "测试告警已发送", - "testFailed": "测试失败:{{error}}", - "deleteConfirm": "删除渠道“{{name}}”?", - "deleted": "渠道已删除", - "empty": "暂无渠道。", + "intro": "通道是警报可以发送到 Termix 外部的途径。发送规则决定哪些警报使用哪个通道。", + "add": "添加频道", + "edit": "编辑频道", + "test": "发送测试", + "testSent": "已发送测试警报", + "testFailed": "测试失败: {{error}}", + "deleteConfirm": "删除频道“{{name}}”?", + "deleted": "频道已删除", + "empty": "暂无频道。", "enabled": "已启用", - "needsSave": "此渠道需要重新打开并保存后才能发送。", + "needsSave": "该通道需要重新打开并保存才能发送消息。", "name": "名称", "nameRequired": "名称为必填项", "type": "类型", @@ -119,41 +119,41 @@ "discord": "Discord", "email": "邮箱" }, - "emailUnavailable": "邮件需要 SMTP 服务器,由管理员在告警设置中配置。", + "emailUnavailable": "电子邮件需要 SMTP 服务器,管理员可以在“警报”设置中进行设置。", "webhookUrl": "URL", - "webhookHint": "每条告警都会发送包含 JSON 数据的请求体。", - "method": "请求方法", - "headers": "请求头", - "headersHint": "每行一项,例如 Name: value。", + "webhookHint": "获取每个警报的 JSON 正文。", + "method": "方法", + "headers": "标题", + "headersHint": "每行一个,格式为:名称:值。", "ntfyServer": "服务器 URL", "ntfyTopic": "主题", "ntfyToken": "访问令牌(可选)", - "discordUrl": "Discord Webhook 地址", - "discordHint": "可在 Discord 频道设置的“集成”中获取。", + "discordUrl": "Discord webhook URL", + "discordHint": "在 Discord 的频道设置中,位于“集成”下。", "discordUsername": "显示名称(可选)", - "discordAvatar": "头像 URL(可选)", + "discordAvatar": "头像网址(可选)", "emailTo": "发送至", "emailHint": "多个地址之间用逗号分隔。", - "privateNetwork": "允许内网地址", - "privateNetworkHint": "仅适用于管理员在私有端点列表中允许的主机。" + "privateNetwork": "允许使用专用网络地址", + "privateNetworkHint": "仅适用于管理员允许添加到私有端点列表中的主机。" }, "rules": { - "intro": "投递规则将匹配的告警发送到你的渠道,告警也会始终保留在收件箱中。", + "intro": "发送规则会将匹配的提醒发送到您的渠道。提醒也会始终保留在收件箱中。", "add": "添加规则", "edit": "编辑规则", - "empty": "暂无规则,告警仅显示在收件箱中。", - "needChannel": "请先添加渠道。", + "empty": "目前还没有规则,所以提醒只会显示在收件箱中。", + "needChannel": "请先添加频道。", "enabled": "已启用", "name": "名称", "nameRequired": "名称为必填项", - "match": "要发送的告警", - "matchHint": "使用 * 匹配全部,automations.* 匹配所有自动化告警,或填写一个精确的类型。", - "minSeverity": "最低严重程度", + "match": "发送提醒", + "matchHint": "*适用于所有自动化操作。*适用于所有自动化操作,或某一特定类型。", + "minSeverity": "至少", "channels": "发送至", - "channelRequired": "请至少选择一个渠道", + "channelRequired": "至少选择一个频道", "deleteConfirm": "删除规则“{{name}}”?", - "everything": "全部", - "summary": "{{match}},{{severity}} 及以上,发送至 {{channels}}" + "everything": "一切", + "summary": "{{match}}、 {{severity}} 或更高,至 {{channels}}" }, "actions": { "cancel": "取消", @@ -163,13 +163,13 @@ }, "widget": { "name": "告警信息流", - "description": "显示最新告警,并可快速标记为已读", - "maxItems": "最大条目数", - "showRead": "显示已读告警", + "description": "您最新的提醒,以及快速标记为已读的功能。", + "maxItems": "最大物品数", + "showRead": "显示已读提醒", "allClear": "一切正常", "loading": "加载中..." }, "plugin": { - "name": "告警" + "name": "Alerts" } } diff --git a/plugins/alerts/locales/translated/zh_TW.json b/plugins/alerts/locales/translated/zh_TW.json index a5f743f1a..d506245c3 100644 --- a/plugins/alerts/locales/translated/zh_TW.json +++ b/plugins/alerts/locales/translated/zh_TW.json @@ -4,13 +4,13 @@ }, "permissions": { "use": { - "title": "Use alerts", - "description": "Get alerts in the inbox and send them to your own channels." + "title": "使用提醒", + "description": "在收件匣中接收提醒,並將其發送到您自己的頻道。" } }, "onboarding": { "feature": "警示", - "featureDesc": "Every alert in one inbox, sent on to Discord, ntfy, email or a webhook if you want." + "featureDesc": "所有提醒都集中在一個收件匣中,您可以選擇將其發送到 Discord、ntfy、電子郵件或 webhook。" }, "settings": { "group": { @@ -19,97 +19,97 @@ }, "admin": { "announcements": { - "label": "Termix announcements", - "description": "Show news from the Termix team, like security notices and releases, in everyone's inbox." + "label": "Termix公告", + "description": "將 Termix 團隊的新聞,例如安全通知和版本發布,發送到每個人的收件匣。" }, "retentionDays": { - "label": "Keep alerts for (days)", - "description": "Older alerts are removed from every inbox." + "label": "保持警報(天)", + "description": "所有收件匣中都會刪除較舊的提醒郵件。" }, "smtpHost": { - "label": "SMTP server", - "description": "Needed for email channels. Leave empty to turn email off.", + "label": "SMTP伺服器", + "description": "需要用於電子郵件管道。留空則關閉電子郵件功能。", "placeholder": "smtp.example.com" }, "smtpPort": { - "label": "SMTP port", - "description": "Usually 587 with STARTTLS or 465 with TLS." + "label": "SMTP連接埠", + "description": "通常使用 STARTTLS 的 587 連接埠或使用 TLS 的 465 連接埠。" }, "smtpSecure": { - "label": "Use TLS from the start", - "description": "Turn on for port 465. Leave off for 587, which upgrades to TLS on its own." + "label": "從一開始就使用TLS", + "description": "啟用 465 連接埠。保持 587 連接埠關閉,該連接埠會自動升級至 TLS。" }, "smtpUser": { - "label": "SMTP username", - "description": "Leave empty if the server does not need a login." + "label": "SMTP 使用者名稱", + "description": "如果伺服器不需要登錄,請留空。" }, "smtpPassword": { - "label": "SMTP password", - "description": "Stored encrypted." + "label": "SMTP密碼", + "description": "已加密儲存。" }, "smtpFrom": { - "label": "From address", - "description": "The sender alerts come from.", - "placeholder": "Termix " + "label": "來自地址", + "description": "寄件者警報來自。", + "placeholder": "終端 " } }, "user": { "popups": { - "label": "Alert popups", - "description": "Which new alerts pop up while you use Termix. They always land in the inbox.", - "all": "All alerts", - "warning": "Warnings and critical", - "critical": "Critical only", + "label": "彈出式警報", + "description": "使用Termix時會彈出哪些新提醒?它們都會發送到您的收件匣。", + "all": "所有警報", + "warning": "警告和關鍵訊息", + "critical": "僅限關鍵", "off": "取消全選" } } }, "sections": { - "inbox": "Inbox", + "inbox": "收件匣", "channels": "通道", - "rules": "Delivery rules" + "rules": "配送規則" }, "severity": { "info": "資訊", "success": "成功", "warning": "警告", - "critical": "Critical" + "critical": "批判的" }, "inbox": { "sourceTermix": "Termix", "openLink": "開啟", "view": "檢視", - "unread": "Unread", - "deliveryFailed_one": "{{count}} channel failed", - "deliveryFailed_other": "{{count}} channels failed", - "markRead": "Mark as read", - "markUnread": "Mark as unread", - "markAllRead": "Mark all as read", + "unread": "未讀", + "deliveryFailed_one": "{{count}} 頻道失敗", + "deliveryFailed_other": "{{count}} 頻道失敗", + "markRead": "標記為已讀", + "markUnread": "標記為未讀", + "markAllRead": "全部標記為已讀", "delete": "刪除", - "clearRead": "Delete read alerts", - "cleared_one": "Deleted {{count}} alert", - "cleared_other": "Deleted {{count}} alerts", + "clearRead": "刪除已讀提醒", + "cleared_one": "已刪除 {{count}} 警報", + "cleared_other": "已刪除 {{count}} 警報", "filterAll": "全選", - "filterUnread": "Unread", - "anySeverity": "Any severity", - "anySource": "Any source", - "openAll": "Open in a tab", - "empty": "No alerts yet.", - "emptyUnread": "You are all caught up.", - "loadMore": "Load more" + "filterUnread": "未讀", + "anySeverity": "任何嚴重程度", + "anySource": "任何來源", + "openAll": "在標籤頁中開啟", + "empty": "目前尚未收到任何警報。", + "emptyUnread": "你們都跟上了。", + "loadMore": "加載更多" }, "channels": { - "intro": "Channels are where alerts can go outside Termix. Delivery rules pick which alerts use them.", - "add": "Add channel", - "edit": "Edit channel", - "test": "Send a test", - "testSent": "Test alert sent", - "testFailed": "Test failed: {{error}}", - "deleteConfirm": "Delete the channel \"{{name}}\"?", - "deleted": "Channel deleted", - "empty": "No channels yet.", + "intro": "通道是警報可以發送到 Termix 外部的途徑。發送規則決定哪些警報使用哪個通道。", + "add": "新增頻道", + "edit": "編輯頻道", + "test": "發送測試", + "testSent": "已發送測試警報", + "testFailed": "測試失敗: {{error}}", + "deleteConfirm": "刪除頻道「{{name}}」?", + "deleted": "頻道已刪除", + "empty": "暫無頻道。", "enabled": "已啟用", - "needsSave": "This channel needs to be opened and saved again before it can send.", + "needsSave": "該通道需要重新打開並保存才能發送訊息。", "name": "名稱", "nameRequired": "名稱為必填", "type": "類型", @@ -119,41 +119,41 @@ "discord": "Discord", "email": "電子郵件" }, - "emailUnavailable": "Email needs an SMTP server, which an admin sets up in the Alerts settings.", + "emailUnavailable": "電子郵件需要 SMTP 伺服器,管理員可以在「警報」設定中進行設定。", "webhookUrl": "URL", - "webhookHint": "Gets a JSON body for every alert.", - "method": "Method", - "headers": "Headers", - "headersHint": "One per line, like Name: value.", + "webhookHint": "取得每個警報的 JSON 正文。", + "method": "方法", + "headers": "標題", + "headersHint": "每行一個,格式為:名稱:值。", "ntfyServer": "伺服器 URL", "ntfyTopic": "主題", - "ntfyToken": "Access token (optional)", + "ntfyToken": "訪問令牌(可選)", "discordUrl": "Discord webhook URL", - "discordHint": "From the channel's settings in Discord, under Integrations.", - "discordUsername": "Display name (optional)", - "discordAvatar": "Avatar URL (optional)", - "emailTo": "Send to", - "emailHint": "Separate more than one address with commas.", - "privateNetwork": "Allow a private network address", - "privateNetworkHint": "Only works for hosts an admin allows in the private endpoint list." + "discordHint": "在 Discord 的頻道設定中,位於「整合」下方。", + "discordUsername": "顯示名稱(可選)", + "discordAvatar": "頭像網址(可選)", + "emailTo": "發送至", + "emailHint": "多個地址之間以逗號分隔。", + "privateNetwork": "允許使用專用網路位址", + "privateNetworkHint": "僅適用於管理員允許新增至私有端點清單中的主機。" }, "rules": { - "intro": "A delivery rule sends matching alerts to your channels. Alerts always stay in the inbox too.", - "add": "Add rule", - "edit": "Edit rule", - "empty": "No rules yet, so alerts only show up in the inbox.", - "needChannel": "Add a channel first.", + "intro": "發送規則會將符合的提醒傳送到您的頻道。提醒也會始終保留在收件匣中。", + "add": "新增規則", + "edit": "編輯規則", + "empty": "目前還沒有規則,所以提醒只會顯示在收件匣中。", + "needChannel": "請先新增頻道。", "enabled": "已啟用", "name": "名稱", "nameRequired": "名稱為必填", - "match": "Alerts to send", - "matchHint": "* for everything, automations.* for everything from automations, or one exact kind.", - "minSeverity": "At least", - "channels": "Send to", - "channelRequired": "Pick at least one channel", - "deleteConfirm": "Delete the rule \"{{name}}\"?", - "everything": "Everything", - "summary": "{{match}}, {{severity}} or higher, to {{channels}}" + "match": "發送提醒", + "matchHint": "*適用於所有自動化操作。 *適用於所有自動化操作,或某一特定類型。", + "minSeverity": "至少", + "channels": "發送至", + "channelRequired": "至少選擇一個頻道", + "deleteConfirm": "刪除規則“{{name}}”?", + "everything": "一切", + "summary": "{{match}}、 {{severity}} 或更高,至 {{channels}}" }, "actions": { "cancel": "取消", @@ -163,10 +163,13 @@ }, "widget": { "name": "警報動態", - "description": "Your latest alerts, with a quick way to mark them read", - "maxItems": "Max items", - "showRead": "Show read alerts", + "description": "您最新的提醒,以及快速標記為已讀的功能。", + "maxItems": "最大物品數", + "showRead": "顯示已讀提醒", "allClear": "一切正常", "loading": "載入中..." + }, + "plugin": { + "name": "Alerts" } } diff --git a/plugins/automations/locales/translated/af_ZA.json b/plugins/automations/locales/translated/af_ZA.json index 68f0a8db6..91391e473 100644 --- a/plugins/automations/locales/translated/af_ZA.json +++ b/plugins/automations/locales/translated/af_ZA.json @@ -207,5 +207,19 @@ "remove": "Verwyder skedule", "loadFailed": "Kon nie onderhoudstatus verfris nie. Veranderinge is gedeaktiveer totdat dit gelaai kan word.", "loading": "Laai onderhoudstatus…" + }, + "ui": { + "sidebar": { + "automations": { + "options": { + "connect": "connect", + "disconnect": "disconnect", + "offline": "offline", + "online": "online", + "failing": "failing", + "recovered": "recovered" + } + } + } } } diff --git a/plugins/automations/locales/translated/ar_SA.json b/plugins/automations/locales/translated/ar_SA.json index 57ad4dc0c..937ab4670 100644 --- a/plugins/automations/locales/translated/ar_SA.json +++ b/plugins/automations/locales/translated/ar_SA.json @@ -207,5 +207,19 @@ "remove": "إزالة الجدول الزمني", "loadFailed": "تعذر تحديث حالة الصيانة. التغييرات معطلة حتى يتم تحميلها.", "loading": "جارٍ تحميل حالة الصيانة…" + }, + "ui": { + "sidebar": { + "automations": { + "options": { + "connect": "connect", + "disconnect": "disconnect", + "offline": "offline", + "online": "online", + "failing": "failing", + "recovered": "recovered" + } + } + } } } diff --git a/plugins/automations/locales/translated/bg_BG.json b/plugins/automations/locales/translated/bg_BG.json index f4ee12569..f5c4b9f6a 100644 --- a/plugins/automations/locales/translated/bg_BG.json +++ b/plugins/automations/locales/translated/bg_BG.json @@ -207,5 +207,19 @@ "remove": "Премахване на графика", "loadFailed": "Не можа да се обнови състоянието на поддръжката. Промените са деактивирани, докато не може да бъде заредено.", "loading": "Зареждане на състоянието на поддръжката…" + }, + "ui": { + "sidebar": { + "automations": { + "options": { + "connect": "connect", + "disconnect": "disconnect", + "offline": "offline", + "online": "online", + "failing": "failing", + "recovered": "recovered" + } + } + } } } diff --git a/plugins/automations/locales/translated/bn_BD.json b/plugins/automations/locales/translated/bn_BD.json index b459b4ade..b8a127860 100644 --- a/plugins/automations/locales/translated/bn_BD.json +++ b/plugins/automations/locales/translated/bn_BD.json @@ -1,211 +1,225 @@ { "permissions": { "view": { - "title": "View automations", - "description": "See the automations and their history." + "title": "অটোমেশনগুলি দেখুন", + "description": "স্বয়ংক্রিয় ব্যবস্থাগুলো এবং সেগুলোর ইতিহাস দেখুন।" }, "create": { - "title": "Create automations", - "description": "Add new automations." + "title": "অটোমেশন তৈরি করুন", + "description": "নতুন অটোমেশন যোগ করুন।" }, "edit": { - "title": "Edit automations", - "description": "Change existing automations." + "title": "অটোমেশন সম্পাদনা করুন", + "description": "বিদ্যমান অটোমেশনগুলো পরিবর্তন করুন।" }, "delete": { - "title": "Delete automations", - "description": "Remove automations." + "title": "অটোমেশনগুলি মুছুন", + "description": "অটোমেশনগুলো সরিয়ে ফেলুন।" }, "run": { - "title": "Run automations", - "description": "Trigger an automation by hand." + "title": "অটোমেশন চালান", + "description": "ম্যানুয়ালি অটোমেশনটি চালু করুন।" } }, "newUi": { "sidebar": { "automations": { - "title": "Automations", - "tabAutomations": "Automations", - "tabRuns": "Runs", - "tabChannels": "Channels", - "createAutomation": "New Automation", - "backToAutomations": "Back to Automations", - "createTitle": "New Automation", - "editTitle": "Edit Automation", - "empty": "No automations yet. Create one to react to a metric, a schedule, or an event.", - "emptyRuns": "No runs yet.", - "channelsHint": "Channels are set up in Alerts", - "noChannelsHint": "The alert always goes to your inbox. Add channels in Alerts to also send it somewhere else.", - "nameLabel": "Name", - "namePlaceholder": "e.g., Clean up /data when it fills", - "nameRequired": "Name is required", - "descriptionLabel": "Description", - "descriptionPlaceholder": "Optional description", - "enabledLabel": "Enabled", - "concurrencyLabel": "If it is already running", - "concurrencyHint": "What to do when this is triggered again before the last run has finished.", + "title": "অটোমেশন", + "tabAutomations": "অটোমেশন", + "tabRuns": "রান", + "tabChannels": "চ্যানেল", + "createAutomation": "নতুন অটোমেশন", + "backToAutomations": "অটোমেশনে ফিরে যান", + "createTitle": "নতুন অটোমেশন", + "editTitle": "সম্পাদনা অটোমেশন", + "empty": "এখনো কোনো অটোমেশন নেই। কোনো মেট্রিক, শিডিউল বা ইভেন্টের প্রতিক্রিয়ায় একটি তৈরি করুন।", + "emptyRuns": "এখনো কোনো রান হয়নি।", + "channelsHint": "অ্যালার্টে চ্যানেলগুলি সেট আপ করা আছে।", + "noChannelsHint": "অ্যালার্টটি সবসময় আপনার ইনবক্সে আসে। এটি অন্য কোথাও পাঠানোর জন্য অ্যালার্টে চ্যানেল যোগ করুন।", + "nameLabel": "নাম", + "namePlaceholder": "যেমন, /data পূর্ণ হয়ে গেলে তা পরিষ্কার করুন।", + "nameRequired": "নাম আবশ্যক", + "descriptionLabel": "বর্ণনা", + "descriptionPlaceholder": "ঐচ্ছিক বিবরণ", + "enabledLabel": "সক্ষম করা হয়েছে", + "concurrencyLabel": "যদি এটি ইতিমধ্যে চালু থাকে", + "concurrencyHint": "শেষ রান শেষ হওয়ার আগেই এটি আবার চালু হলে কী করতে হবে।", "concurrency": { - "skip": "Skip the new run", - "queue": "Wait and run after", - "allow": "Run both at once" + "skip": "নতুন রানটি এড়িয়ে যান।", + "queue": "অপেক্ষা করো এবং পিছনে দৌড়াও", + "allow": "একসাথে দুটোই চালান" }, - "save": "Save", - "created": "Automation created", - "updated": "Automation saved", - "deleted": "Automation deleted", - "deleteConfirm": "Delete this automation? Its run history is deleted too.", - "runNow": "Run now", - "testRun": "Test run", - "testRunHint": "Runs every step but does not touch anything outside Termix.", - "runStarted": "Run started", - "runFinished": "Run finished: {{status}}", - "trigger": "Trigger", - "steps": "Steps", - "addStep": "Add step", - "removeStep": "Remove step", - "moveUp": "Move up", - "moveDown": "Move down", - "noSteps": "No steps yet. Add one to say what should happen.", - "webhookTokenTitle": "Webhook URL", - "webhookTokenDescription": "This is shown once. Save it now, it cannot be retrieved later.", - "copy": "Copy", - "copied": "Copied", + "save": "সংরক্ষণ করুন", + "created": "অটোমেশন তৈরি করা হয়েছে", + "updated": "অটোমেশন সংরক্ষিত", + "deleted": "অটোমেশন মুছে ফেলা হয়েছে", + "deleteConfirm": "এই অটোমেশনটি ডিলিট করলে, এর রান হিস্ট্রিও ডিলিট হয়ে যাবে।", + "runNow": "এখনই দৌড়ান", + "testRun": "পরীক্ষামূলক চালনা", + "testRunHint": "প্রতিটি ধাপ চলে কিন্তু টার্মিক্সের বাইরের কোনো কিছু স্পর্শ করে না।", + "runStarted": "দৌড় শুরু হলো", + "runFinished": "দৌড় শেষ: {{status}}", + "trigger": "ট্রিগার", + "steps": "পদক্ষেপ", + "addStep": "ধাপ যোগ করুন", + "removeStep": "ধাপটি সরান", + "moveUp": "উপরে উঠুন", + "moveDown": "নিচে নামুন", + "noSteps": "এখনো কোনো ধাপ যোগ করা হয়নি। কী হওয়া উচিত তা জানাতে একটি ধাপ যোগ করুন।", + "webhookTokenTitle": "ওয়েবহুক ইউআরএল", + "webhookTokenDescription": "এটি একবারই দেখানো হবে। এখনই সংরক্ষণ করুন, পরে আর পুনরুদ্ধার করা যাবে না।", + "copy": "অনুলিপি", + "copied": "অনুলিপি করা হয়েছে", "viewJson": "JSON", - "viewBuilder": "Builder", - "viewGraph": "Graph", - "lastRun": "Last run", - "never": "Never", + "viewBuilder": "নির্মাতা", + "viewGraph": "গ্রাফ", + "lastRun": "শেষ দৌড়", + "never": "কখনো না", "duration": "{{seconds}}s", - "stepOutput": "Output", - "stepError": "Error", - "dryRunBadge": "Test run", + "stepOutput": "আউটপুট", + "stepError": "ত্রুটি", + "dryRunBadge": "পরীক্ষামূলক চালনা", "hostSelector": { - "trigger": "Triggering host", - "host": "Specific host", - "fleet": "Fleet", - "all": "All hosts" + "trigger": "ট্রিগারিং হোস্ট", + "host": "নির্দিষ্ট হোস্ট", + "fleet": "ফ্লিট", + "all": "সকল হোস্ট" }, "triggerKinds": { - "metric_threshold": "Metric threshold", - "host_status": "Host goes up or down", - "health_check": "Health check changes", - "schedule": "On a schedule", - "docker_event": "Container event", - "internal_event": "Termix event", - "webhook": "Incoming webhook" + "metric_threshold": "মেট্রিক থ্রেশহোল্ড", + "host_status": "হোস্ট উপরে বা নিচে যায়", + "health_check": "স্বাস্থ্য পরীক্ষার পরিবর্তন", + "schedule": "একটি সময়সূচী অনুযায়ী", + "docker_event": "কন্টেইনার ইভেন্ট", + "internal_event": "টারমিক্স ইভেন্ট", + "webhook": "ইনকামিং ওয়েবহুক" }, "stepTypes": { - "notify": "Send an alert", - "http": "Call a URL", - "run_snippet": "Run a snippet", - "run_command": "Run a command", - "docker": "Control a container", - "tunnel": "Control a tunnel", - "wol": "Wake a host", - "wait": "Wait", - "set_var": "Set a variable", - "if": "If / otherwise", - "run_automation": "Run another automation", - "stop": "Stop" + "notify": "একটি সতর্কতা পাঠান", + "http": "একটি URL কল করুন", + "run_snippet": "একটি স্নিপেট চালান", + "run_command": "একটি কমান্ড চালান", + "docker": "একটি কন্টেইনার নিয়ন্ত্রণ করুন", + "tunnel": "একটি টানেল নিয়ন্ত্রণ করুন", + "wol": "একজন হোস্টকে জাগান", + "wait": "অপেক্ষা করুন", + "set_var": "একটি ভেরিয়েবল সেট করুন", + "if": "যদি / অন্যথায়", + "run_automation": "আরেকটি অটোমেশন চালান", + "stop": "থামুন" }, "statuses": { - "running": "Running", - "success": "Success", - "failed": "Failed", - "timeout": "Timed out", - "skipped": "Skipped", - "cancelled": "Cancelled" + "running": "দৌড়ানো", + "success": "সাফল্য", + "failed": "ব্যর্থ", + "timeout": "সময়সীমা শেষ", + "skipped": "বাদ দেওয়া হয়েছে", + "cancelled": "বাতিল করা হয়েছে" }, "fields": { - "host": "Host", - "metric": "Metric", - "mount": "Mount point", - "operator": "Is", - "value": "Value", - "forSeconds": "Sustained for (seconds)", - "cooldown": "Cooldown (minutes)", - "cron": "Cron expression", - "intervalSeconds": "Every (seconds)", - "timezone": "Time zone", - "timezoneServer": "Server time", - "timezoneHint": "Cron times are read in this zone. Does not apply to interval schedules.", - "container": "Container", - "command": "Command", - "url": "URL", - "method": "Method", - "body": "Body", - "channels": "Also send to", - "title": "Title", - "message": "Message", - "snippet": "Snippet", - "seconds": "Seconds", - "conditionLeftPlaceholder": "Value to check", - "conditionRightPlaceholder": "Compare against", - "variableName": "Variable name", - "variableValue": "Value", - "elevated": "Run with sudo", - "onError": "If this fails", - "allowPrivateNetwork": "Allow local network addresses", - "allowPrivateNetworkHint": "Needed for a self-hosted service on your LAN. Off by default to prevent requests to internal addresses." + "host": "হোস্ট", + "metric": "মেট্রিক", + "mount": "মাউন্ট পয়েন্ট", + "operator": "হয়", + "value": "মূল্য", + "forSeconds": "(সেকেন্ড) ধরে স্থায়ী", + "cooldown": "কুলডাউন (মিনিট)", + "cron": "ক্রোন এক্সপ্রেশন", + "intervalSeconds": "প্রতি (সেকেন্ডে)", + "timezone": "সময় অঞ্চল", + "timezoneServer": "সার্ভারের সময়", + "timezoneHint": "এই জোনে ক্রন টাইম পড়া হয়। এটি ইন্টারভাল শিডিউলের ক্ষেত্রে প্রযোজ্য নয়।", + "container": "কন্টেইনার", + "command": "আদেশ", + "url": "ইউআরএল", + "method": "পদ্ধতি", + "body": "শরীর", + "channels": "এছাড়াও পাঠান", + "title": "শিরোনাম", + "message": "বার্তা", + "snippet": "স্নিপেট", + "seconds": "সেকেন্ড", + "conditionLeftPlaceholder": "যাচাই করার মান", + "conditionRightPlaceholder": "তুলনা করুন", + "variableName": "ভেরিয়েবলের নাম", + "variableValue": "মূল্য", + "elevated": "sudo দিয়ে চালান", + "onError": "যদি এটি ব্যর্থ হয়", + "allowPrivateNetwork": "স্থানীয় নেটওয়ার্ক ঠিকানাগুলির অনুমতি দিন", + "allowPrivateNetworkHint": "আপনার ল্যানে সেলফ-হোস্টেড সার্ভিসের জন্য প্রয়োজন। অভ্যন্তরীণ অ্যাড্রেসে অনুরোধ পাঠানো প্রতিরোধ করতে এটি ডিফল্টরূপে বন্ধ থাকে।" }, "onError": { - "stop": "Stop the run", - "continue": "Carry on" + "stop": "দৌড় থামাও", + "continue": "চালিয়ে যান" }, - "needsPlugin": "Needs {{plugin}}", - "needsPluginHint": "This automation is skipped until the feature it needs is available again.", - "offBadge": "Off", - "docsLink": "View docs", + "needsPlugin": "প্রয়োজন {{plugin}}", + "needsPluginHint": "প্রয়োজনীয় ফিচারটি পুনরায় উপলব্ধ না হওয়া পর্যন্ত এই অটোমেশনটি বাদ দেওয়া হয়।", + "offBadge": "বন্ধ", + "docsLink": "নথি দেখুন", "ago": { - "seconds": "{{count}}s ago", - "minutes": "{{count}}m ago", - "hours": "{{count}}h ago", - "days": "{{count}}d ago" + "seconds": "{{count}}সেকেন্ড আগে", + "minutes": "{{count}}মিনিট আগে", + "hours": "{{count}}ঘণ্টা আগে", + "days": "{{count}}দিন আগে" } } } }, "nav": { - "automations": "Automations" + "automations": "অটোমেশন" }, "onboarding": { - "feature_automations": "Automations", - "feature_automations_desc": "Run steps automatically when something happens, and get notified." + "feature_automations": "অটোমেশন", + "feature_automations_desc": "কোনো ঘটনা ঘটলে স্বয়ংক্রিয়ভাবে ধাপগুলো সম্পন্ন করুন এবং বিজ্ঞপ্তি পান।" }, "maintenance": { - "title": "Maintenance", - "description": "Pause host status, health, metric, container and tunnel-disconnection automations while work is in progress. Monitoring, manual runs and scheduled automations continue.", - "denied": "You do not have permission to view maintenance.", - "sharedReadOnly": "This host was shared with you. Only its owner can change maintenance.", - "failed": "Maintenance could not be updated.", - "active": "Maintenance active", - "estimated": "Estimated completion", - "noAutoEnd": "The estimate does not end maintenance. End it explicitly when the work is complete.", - "endConfirm": "End maintenance and resume event-triggered automations for this host?", - "confirmEnd": "Confirm end", - "cancel": "Cancel", - "end": "End maintenance", - "action": "Action", - "startNow": "Start now", - "schedule": "Schedule for later", - "reason": "Reason", - "startUtc": "First start (UTC)", - "repeat": "Repeat", - "once": "Once", - "weekly": "Weekly", - "monthly": "Monthly", - "utcHelp": "Schedules use UTC throughout the year. Monthly schedules skip months without the selected day. Planned windows cannot overlap; overrunning maintenance continues across later windows.", - "duration": "Estimated duration (minutes)", - "grace": "Grace period (minutes)", - "notify": "Notify once if still offline after the estimate plus grace period", - "addSchedule": "Add schedule", - "schedules": "Schedules", - "noSchedules": "No maintenance schedules.", - "completed": "Already started", - "minutes_one": "{{count}} minute", - "minutes_other": "{{count}} minutes", - "remove": "Remove schedule", - "loadFailed": "Could not refresh maintenance status. Changes are disabled until it can be loaded.", - "loading": "Loading maintenance status…" + "title": "রক্ষণাবেক্ষণ", + "description": "কাজ চলাকালীন হোস্ট স্ট্যাটাস, হেলথ, মেট্রিক, কন্টেইনার এবং টানেল-ডিসকানেকশন অটোমেশনগুলো থামিয়ে রাখুন। মনিটরিং, ম্যানুয়াল রান এবং নির্ধারিত অটোমেশনগুলো চলতে থাকবে।", + "denied": "রক্ষণাবেক্ষণ দেখার অনুমতি আপনার নেই।", + "sharedReadOnly": "এই হোস্টটি আপনার সাথে শেয়ার করা হয়েছে। শুধুমাত্র এর মালিকই রক্ষণাবেক্ষণ পরিবর্তন করতে পারেন।", + "failed": "রক্ষণাবেক্ষণ হালনাগাদ করা যায়নি।", + "active": "রক্ষণাবেক্ষণ সক্রিয়", + "estimated": "আনুমানিক সমাপ্তি", + "noAutoEnd": "প্রাক্কলনটি রক্ষণাবেক্ষণের কাজ শেষ করে না। কাজ সম্পন্ন হলে স্পষ্টভাবে এটি শেষ করুন।", + "endConfirm": "এই হোস্টের জন্য রক্ষণাবেক্ষণ শেষ করে ইভেন্ট-ট্রিগারড অটোমেশন পুনরায় চালু করবেন?", + "confirmEnd": "শেষ নিশ্চিত করুন", + "cancel": "বাতিল করুন", + "end": "শেষ রক্ষণাবেক্ষণ", + "action": "পদক্ষেপ", + "startNow": "এখনই শুরু করুন", + "schedule": "পরবর্তী সময়ের জন্য সময়সূচী", + "reason": "কারণ", + "startUtc": "প্রথম শুরু (ইউটিসি)", + "repeat": "পুনরাবৃত্তি", + "once": "একবার", + "weekly": "সাপ্তাহিক", + "monthly": "মাসিক", + "utcHelp": "সারা বছর ধরে সময়সূচী UTC ব্যবহার করে। মাসিক সময়সূচীতে নির্বাচিত দিনটি ছাড়া মাসগুলো বাদ দেওয়া হয়। পরিকল্পিত কাজের সময়সীমা একে অপরের উপর পড়তে পারে না; নির্ধারিত সময়ের অতিরিক্ত রক্ষণাবেক্ষণ পরবর্তী সময়সীমাগুলোতেও চলতে থাকে।", + "duration": "আনুমানিক সময়কাল (মিনিট)", + "grace": "অতিরিক্ত সময় (মিনিট)", + "notify": "আনুমানিক হিসাব এবং অতিরিক্ত সময়সীমার পরেও যদি অফলাইন থাকেন, তবে একবার জানান।", + "addSchedule": "সময়সূচী যোগ করুন", + "schedules": "সময়সূচী", + "noSchedules": "কোনো রক্ষণাবেক্ষণের সময়সূচী নেই।", + "completed": "ইতিমধ্যে শুরু হয়ে গেছে", + "minutes_one": "{{count}} মিনিট", + "minutes_other": "{{count}} মিনিট", + "remove": "সময়সূচী অপসারণ করুন", + "loadFailed": "রক্ষণাবেক্ষণের অবস্থা রিফ্রেশ করা যায়নি। লোড না হওয়া পর্যন্ত পরিবর্তনগুলি নিষ্ক্রিয় থাকবে।", + "loading": "রক্ষণাবেক্ষণের অবস্থা লোড হচ্ছে…" + }, + "ui": { + "sidebar": { + "automations": { + "options": { + "connect": "connect", + "disconnect": "disconnect", + "offline": "offline", + "online": "online", + "failing": "failing", + "recovered": "recovered" + } + } + } } } diff --git a/plugins/automations/locales/translated/ca_ES.json b/plugins/automations/locales/translated/ca_ES.json index e9836b346..494c80fe0 100644 --- a/plugins/automations/locales/translated/ca_ES.json +++ b/plugins/automations/locales/translated/ca_ES.json @@ -207,5 +207,19 @@ "remove": "Elimina la programació", "loadFailed": "No s'ha pogut actualitzar l'estat del manteniment. Els canvis estan desactivats fins que es pugui carregar.", "loading": "S'està carregant l'estat del manteniment…" + }, + "ui": { + "sidebar": { + "automations": { + "options": { + "connect": "connect", + "disconnect": "disconnect", + "offline": "offline", + "online": "online", + "failing": "failing", + "recovered": "recovered" + } + } + } } } diff --git a/plugins/automations/locales/translated/cs_CZ.json b/plugins/automations/locales/translated/cs_CZ.json index 14533a055..bb5d72779 100644 --- a/plugins/automations/locales/translated/cs_CZ.json +++ b/plugins/automations/locales/translated/cs_CZ.json @@ -207,5 +207,19 @@ "remove": "Odebrat plán", "loadFailed": "Nepodařilo se obnovit stav údržby. Změny jsou zakázány, dokud nebude možné jej načíst.", "loading": "Načítání stavu údržby…" + }, + "ui": { + "sidebar": { + "automations": { + "options": { + "connect": "connect", + "disconnect": "disconnect", + "offline": "offline", + "online": "online", + "failing": "failing", + "recovered": "recovered" + } + } + } } } diff --git a/plugins/automations/locales/translated/da_DK.json b/plugins/automations/locales/translated/da_DK.json index 6b887b51f..299234647 100644 --- a/plugins/automations/locales/translated/da_DK.json +++ b/plugins/automations/locales/translated/da_DK.json @@ -207,5 +207,19 @@ "remove": "Fjern tidsplan", "loadFailed": "Vedligeholdelsesstatus kunne ikke opdateres. Ændringer er deaktiveret, indtil den kan indlæses.", "loading": "Indlæser vedligeholdelsesstatus…" + }, + "ui": { + "sidebar": { + "automations": { + "options": { + "connect": "connect", + "disconnect": "disconnect", + "offline": "offline", + "online": "online", + "failing": "failing", + "recovered": "recovered" + } + } + } } } diff --git a/plugins/automations/locales/translated/de_DE.json b/plugins/automations/locales/translated/de_DE.json index 9e9842af8..0c8b0c603 100644 --- a/plugins/automations/locales/translated/de_DE.json +++ b/plugins/automations/locales/translated/de_DE.json @@ -207,5 +207,19 @@ "remove": "Zeitplan entfernen", "loadFailed": "Der Wartungsstatus konnte nicht aktualisiert werden. Änderungen sind deaktiviert, bis die Daten geladen werden können.", "loading": "Lade Wartungsstatus…" + }, + "ui": { + "sidebar": { + "automations": { + "options": { + "connect": "connect", + "disconnect": "disconnect", + "offline": "offline", + "online": "online", + "failing": "failing", + "recovered": "recovered" + } + } + } } } diff --git a/plugins/automations/locales/translated/el_GR.json b/plugins/automations/locales/translated/el_GR.json index 116e2b767..6a07649d1 100644 --- a/plugins/automations/locales/translated/el_GR.json +++ b/plugins/automations/locales/translated/el_GR.json @@ -207,5 +207,19 @@ "remove": "Κατάργηση χρονοδιαγράμματος", "loadFailed": "Δεν ήταν δυνατή η ανανέωση της κατάστασης συντήρησης. Οι αλλαγές είναι απενεργοποιημένες μέχρι να είναι δυνατή η φόρτωσή τους.", "loading": "Φόρτωση κατάστασης συντήρησης…" + }, + "ui": { + "sidebar": { + "automations": { + "options": { + "connect": "connect", + "disconnect": "disconnect", + "offline": "offline", + "online": "online", + "failing": "failing", + "recovered": "recovered" + } + } + } } } diff --git a/plugins/automations/locales/translated/es_ES.json b/plugins/automations/locales/translated/es_ES.json index 6daf1c195..6e56e9b01 100644 --- a/plugins/automations/locales/translated/es_ES.json +++ b/plugins/automations/locales/translated/es_ES.json @@ -207,5 +207,19 @@ "remove": "Eliminar horario", "loadFailed": "No se pudo actualizar el estado de mantenimiento. Los cambios están deshabilitados hasta que se puedan cargar.", "loading": "Cargando estado de mantenimiento…" + }, + "ui": { + "sidebar": { + "automations": { + "options": { + "connect": "connect", + "disconnect": "disconnect", + "offline": "offline", + "online": "online", + "failing": "failing", + "recovered": "recovered" + } + } + } } } diff --git a/plugins/automations/locales/translated/fi_FI.json b/plugins/automations/locales/translated/fi_FI.json index f18d8a66b..25235c805 100644 --- a/plugins/automations/locales/translated/fi_FI.json +++ b/plugins/automations/locales/translated/fi_FI.json @@ -207,5 +207,19 @@ "remove": "Poista aikataulu", "loadFailed": "Ylläpidon tilaa ei voitu päivittää. Muutokset on poistettu käytöstä, kunnes ne voidaan ladata.", "loading": "Ladataan ylläpitotilaa…" + }, + "ui": { + "sidebar": { + "automations": { + "options": { + "connect": "connect", + "disconnect": "disconnect", + "offline": "offline", + "online": "online", + "failing": "failing", + "recovered": "recovered" + } + } + } } } diff --git a/plugins/automations/locales/translated/fr_FR.json b/plugins/automations/locales/translated/fr_FR.json index 628674df9..7ce5f49e5 100644 --- a/plugins/automations/locales/translated/fr_FR.json +++ b/plugins/automations/locales/translated/fr_FR.json @@ -207,5 +207,19 @@ "remove": "Supprimer le planning", "loadFailed": "Impossible d'actualiser l'état de maintenance. Les modifications sont désactivées jusqu'à ce que le chargement soit possible.", "loading": "État de la maintenance en cours de chargement…" + }, + "ui": { + "sidebar": { + "automations": { + "options": { + "connect": "connect", + "disconnect": "disconnect", + "offline": "offline", + "online": "online", + "failing": "failing", + "recovered": "recovered" + } + } + } } } diff --git a/plugins/automations/locales/translated/he_IL.json b/plugins/automations/locales/translated/he_IL.json index 7e0312d94..d2551d3fe 100644 --- a/plugins/automations/locales/translated/he_IL.json +++ b/plugins/automations/locales/translated/he_IL.json @@ -207,5 +207,19 @@ "remove": "הסר את לוח הזמנים", "loadFailed": "לא ניתן היה לרענן את סטטוס התחזוקה. השינויים מושבתים עד שניתן יהיה לטעון אותו.", "loading": "טוען סטטוס תחזוקה…" + }, + "ui": { + "sidebar": { + "automations": { + "options": { + "connect": "connect", + "disconnect": "disconnect", + "offline": "offline", + "online": "online", + "failing": "failing", + "recovered": "recovered" + } + } + } } } diff --git a/plugins/automations/locales/translated/hi_IN.json b/plugins/automations/locales/translated/hi_IN.json index e4c13111a..745937a61 100644 --- a/plugins/automations/locales/translated/hi_IN.json +++ b/plugins/automations/locales/translated/hi_IN.json @@ -1,163 +1,163 @@ { "permissions": { "view": { - "title": "View automations", - "description": "See the automations and their history." + "title": "स्वचालित सेवाओं को देखें", + "description": "स्वचालित प्रक्रियाओं और उनके इतिहास को देखें।" }, "create": { - "title": "Create automations", - "description": "Add new automations." + "title": "स्वचालित प्रणालियाँ बनाएँ", + "description": "नई स्वचालित प्रणालियाँ जोड़ें।" }, "edit": { - "title": "Edit automations", - "description": "Change existing automations." + "title": "स्वचालित संपादन", + "description": "मौजूदा स्वचालित प्रक्रियाओं में बदलाव करें।" }, "delete": { - "title": "Delete automations", - "description": "Remove automations." + "title": "स्वचालित सेवाओं को हटाएं", + "description": "स्वचालित प्रक्रियाओं को हटा दें।" }, "run": { - "title": "Run automations", - "description": "Trigger an automation by hand." + "title": "स्वचालित संचालन चलाएँ", + "description": "किसी स्वचालित प्रक्रिया को मैन्युअल रूप से शुरू करें।" } }, "newUi": { "sidebar": { "automations": { - "title": "Automations", - "tabAutomations": "Automations", - "tabRuns": "Runs", + "title": "स्वचालन", + "tabAutomations": "स्वचालन", + "tabRuns": "दौड़ें", "tabChannels": "चैनल", - "createAutomation": "New Automation", - "backToAutomations": "Back to Automations", - "createTitle": "New Automation", - "editTitle": "Edit Automation", - "empty": "No automations yet. Create one to react to a metric, a schedule, or an event.", - "emptyRuns": "No runs yet.", - "channelsHint": "Channels are set up in Alerts", - "noChannelsHint": "The alert always goes to your inbox. Add channels in Alerts to also send it somewhere else.", + "createAutomation": "नया स्वचालन", + "backToAutomations": "स्वचालन पर वापस जाएँ", + "createTitle": "नया स्वचालन", + "editTitle": "संपादन स्वचालन", + "empty": "अभी तक कोई ऑटोमेशन नहीं है। किसी मेट्रिक, शेड्यूल या इवेंट के आधार पर प्रतिक्रिया देने के लिए एक ऑटोमेशन बनाएं।", + "emptyRuns": "अभी तक कोई रन नहीं बना है।", + "channelsHint": "अलर्ट में चैनल सेट किए जाते हैं।", + "noChannelsHint": "यह अलर्ट हमेशा आपके इनबॉक्स में आता है। इसे कहीं और भेजने के लिए अलर्ट में चैनल जोड़ें।", "nameLabel": "नाम", - "namePlaceholder": "e.g., Clean up /data when it fills", + "namePlaceholder": "उदाहरण के लिए, जब /data भर जाए तो उसे साफ़ कर दें।", "nameRequired": "नाम आवश्यक है", "descriptionLabel": "विवरण", "descriptionPlaceholder": "वैकल्पिक विवरण", "enabledLabel": "सक्षम", - "concurrencyLabel": "If it is already running", - "concurrencyHint": "What to do when this is triggered again before the last run has finished.", + "concurrencyLabel": "यदि यह पहले से चल रहा है", + "concurrencyHint": "पिछली बार रन पूरा होने से पहले ही अगर यह समस्या दोबारा उत्पन्न हो जाए तो क्या करें।", "concurrency": { - "skip": "Skip the new run", - "queue": "Wait and run after", - "allow": "Run both at once" + "skip": "नए रन को छोड़ दें", + "queue": "प्रतीक्षा करो और उसके पीछे दौड़ो", + "allow": "दोनों को एक साथ चलाएं" }, "save": "सहेजें", - "created": "Automation created", - "updated": "Automation saved", - "deleted": "Automation deleted", - "deleteConfirm": "Delete this automation? Its run history is deleted too.", - "runNow": "Run now", - "testRun": "Test run", - "testRunHint": "Runs every step but does not touch anything outside Termix.", - "runStarted": "Run started", - "runFinished": "Run finished: {{status}}", + "created": "स्वचालन द्वारा निर्मित", + "updated": "स्वचालन ने बचत की", + "deleted": "स्वचालित रूप से हटा दिया गया", + "deleteConfirm": "इस ऑटोमेशन को डिलीट करने पर, इसका रन हिस्ट्री भी डिलीट हो जाएगा।", + "runNow": "अब दौड़े", + "testRun": "परीक्षण के लिए चलाना", + "testRunHint": "यह हर चरण में दौड़ता है लेकिन टर्मिक्स के बाहर किसी भी चीज को नहीं छूता है।", + "runStarted": "दौड़ शुरू हो गई", + "runFinished": "रन समाप्त: {{status}}", "trigger": "ट्रिगर", - "steps": "Steps", - "addStep": "Add step", - "removeStep": "Remove step", - "moveUp": "Move up", - "moveDown": "Move down", - "noSteps": "No steps yet. Add one to say what should happen.", - "webhookTokenTitle": "Webhook URL", - "webhookTokenDescription": "This is shown once. Save it now, it cannot be retrieved later.", + "steps": "चरण", + "addStep": "चरण जोड़ें", + "removeStep": "चरण हटाएँ", + "moveUp": "बढ़ाना", + "moveDown": "नीचे की ओर", + "noSteps": "अभी तक कोई चरण निर्धारित नहीं हैं। कृपया एक चरण जोड़कर बताएं कि आगे क्या होना चाहिए।", + "webhookTokenTitle": "वेबहुक यूआरएल", + "webhookTokenDescription": "यह केवल एक बार दिखाया जाएगा। इसे अभी सहेज लें, बाद में इसे पुनः प्राप्त नहीं किया जा सकेगा।", "copy": "कॉपी", "copied": "कॉपी किया गया", - "viewJson": "JSON", - "viewBuilder": "Builder", - "viewGraph": "Graph", - "lastRun": "Last run", + "viewJson": "जेएन", + "viewBuilder": "निर्माता", + "viewGraph": "ग्राफ़", + "lastRun": "आखरी बार", "never": "कभी नहीं", "duration": "{{seconds}}s", "stepOutput": "आउटपुट", "stepError": "त्रुटि", - "dryRunBadge": "Test run", + "dryRunBadge": "परीक्षण के लिए चलाना", "hostSelector": { - "trigger": "Triggering host", - "host": "Specific host", - "fleet": "Fleet", + "trigger": "ट्रिगरिंग होस्ट", + "host": "विशिष्ट मेज़बान", + "fleet": "बेड़ा", "all": "सभी होस्ट" }, "triggerKinds": { - "metric_threshold": "Metric threshold", - "host_status": "Host goes up or down", - "health_check": "Health check changes", - "schedule": "On a schedule", - "docker_event": "Container event", - "internal_event": "Termix event", - "webhook": "Incoming webhook" + "metric_threshold": "मीट्रिक सीमा", + "host_status": "होस्ट ऊपर या नीचे जाता है", + "health_check": "स्वास्थ्य जांच में बदलाव", + "schedule": "एक निर्धारित कार्यक्रम के अनुसार", + "docker_event": "कंटेनर घटना", + "internal_event": "टर्मिक्स घटना", + "webhook": "इनकमिंग वेबहुक" }, "stepTypes": { - "notify": "Send an alert", - "http": "Call a URL", - "run_snippet": "Run a snippet", - "run_command": "Run a command", - "docker": "Control a container", - "tunnel": "Control a tunnel", - "wol": "Wake a host", - "wait": "Wait", - "set_var": "Set a variable", - "if": "If / otherwise", - "run_automation": "Run another automation", + "notify": "अलर्ट भेजें", + "http": "किसी URL को कॉल करें", + "run_snippet": "एक स्निपेट चलाएँ", + "run_command": "एक कमांड चलाएँ", + "docker": "एक कंटेनर को नियंत्रित करें", + "tunnel": "एक सुरंग को नियंत्रित करें", + "wol": "किसी मेजबान को जगाओ", + "wait": "इंतज़ार", + "set_var": "एक चर सेट करें", + "if": "यदि / अन्यथा", + "run_automation": "एक और ऑटोमेशन चलाएँ", "stop": "स्टॉप" }, "statuses": { "running": "चालू", "success": "सफल", "failed": "असफल", - "timeout": "Timed out", - "skipped": "Skipped", - "cancelled": "Cancelled" + "timeout": "समय समााप्त", + "skipped": "छोड़ा गया", + "cancelled": "रद्द कर दिया गया" }, "fields": { "host": "होस्ट", "metric": "मीट्रिक", - "mount": "Mount point", - "operator": "Is", - "value": "Value", - "forSeconds": "Sustained for (seconds)", + "mount": "माउंट पॉइंट", + "operator": "है", + "value": "कीमत", + "forSeconds": "(सेकंड) तक कायम रहा", "cooldown": "कूलडाउन (मिनट)", - "cron": "Cron expression", - "intervalSeconds": "Every (seconds)", - "timezone": "Time zone", - "timezoneServer": "Server time", - "timezoneHint": "Cron times are read in this zone. Does not apply to interval schedules.", - "container": "Container", + "cron": "क्रोन अभिव्यक्ति", + "intervalSeconds": "हर (सेकंड)", + "timezone": "समय क्षेत्र", + "timezoneServer": "सर्वर समय", + "timezoneHint": "इस ज़ोन में क्रॉन टाइम पढ़े जाते हैं। यह इंटरवल शेड्यूल पर लागू नहीं होता है।", + "container": "पात्र", "command": "कमांड", "url": "URL", - "method": "Method", - "body": "Body", - "channels": "Also send to", + "method": "तरीका", + "body": "शरीर", + "channels": "इसे भी भेजें", "title": "शीर्षक", - "message": "Message", - "snippet": "Snippet", - "seconds": "Seconds", - "conditionLeftPlaceholder": "Value to check", - "conditionRightPlaceholder": "Compare against", - "variableName": "Variable name", - "variableValue": "Value", - "elevated": "Run with sudo", - "onError": "If this fails", - "allowPrivateNetwork": "Allow local network addresses", - "allowPrivateNetworkHint": "Needed for a self-hosted service on your LAN. Off by default to prevent requests to internal addresses." + "message": "संदेश", + "snippet": "टुकड़ा", + "seconds": "सेकंड", + "conditionLeftPlaceholder": "जाँच करने के लिए मान", + "conditionRightPlaceholder": "तुलना करें", + "variableName": "चर का नाम", + "variableValue": "कीमत", + "elevated": "sudo के साथ चलाएँ", + "onError": "यदि यह विफल हो जाता है", + "allowPrivateNetwork": "स्थानीय नेटवर्क पतों की अनुमति दें", + "allowPrivateNetworkHint": "आपके लोकल एरिया नेटवर्क (LAN) पर सेल्फ-होस्टेड सेवा के लिए आवश्यक। आंतरिक पतों पर अनुरोधों को रोकने के लिए डिफ़ॉल्ट रूप से बंद।" }, "onError": { - "stop": "Stop the run", - "continue": "Carry on" + "stop": "दौड़ रोको", + "continue": "जारी रखो" }, - "needsPlugin": "Needs {{plugin}}", - "needsPluginHint": "This automation is skipped until the feature it needs is available again.", + "needsPlugin": "आवश्यकताएँ {{plugin}}", + "needsPluginHint": "यह स्वचालन तब तक स्थगित रहेगा जब तक कि आवश्यक सुविधा पुनः उपलब्ध न हो जाए।", "offBadge": "बंद", "docsLink": "दस्तावेज़ देखें", "ago": { - "seconds": "{{count}}s ago", + "seconds": "{{count}}सेकंड पहले", "minutes": "{{count}}m पहले", "hours": "{{count}}h पहले", "days": "{{count}}d पहले" @@ -166,46 +166,60 @@ } }, "nav": { - "automations": "Automations" + "automations": "स्वचालन" }, "onboarding": { - "feature_automations": "Automations", - "feature_automations_desc": "Run steps automatically when something happens, and get notified." + "feature_automations": "स्वचालन", + "feature_automations_desc": "कुछ घटित होने पर चरणों को स्वचालित रूप से चलाएं और सूचना प्राप्त करें।" }, "maintenance": { "title": "रखरखाव", - "description": "Pause host status, health, metric, container and tunnel-disconnection automations while work is in progress. Monitoring, manual runs and scheduled automations continue.", - "denied": "You do not have permission to view maintenance.", - "sharedReadOnly": "This host was shared with you. Only its owner can change maintenance.", - "failed": "Maintenance could not be updated.", - "active": "Maintenance active", - "estimated": "Estimated completion", - "noAutoEnd": "The estimate does not end maintenance. End it explicitly when the work is complete.", - "endConfirm": "End maintenance and resume event-triggered automations for this host?", - "confirmEnd": "Confirm end", + "description": "कार्य प्रगति पर रहते हुए होस्ट की स्थिति, स्वास्थ्य, मीट्रिक, कंटेनर और टनल-डिस्कनेक्शन से संबंधित स्वचालित प्रक्रियाओं को रोकें। मॉनिटरिंग, मैन्युअल रन और निर्धारित स्वचालित प्रक्रियाएं जारी रहेंगी।", + "denied": "आपको रखरखाव कार्य देखने की अनुमति नहीं है।", + "sharedReadOnly": "यह होस्ट आपके साथ साझा किया गया है। केवल इसका स्वामी ही रखरखाव में बदलाव कर सकता है।", + "failed": "रखरखाव अपडेट नहीं हो सका।", + "active": "रखरखाव सक्रिय है", + "estimated": "अनुमानित समापन", + "noAutoEnd": "यह अनुमान रखरखाव कार्य की समाप्ति का संकेत नहीं है। कार्य पूर्ण होने पर इसे स्पष्ट रूप से समाप्त करें।", + "endConfirm": "इस होस्ट के लिए रखरखाव समाप्त करें और इवेंट-ट्रिगर ऑटोमेशन को पुनः आरंभ करें?", + "confirmEnd": "समाप्ति की पुष्टि करें", "cancel": "रद्द करें", - "end": "End maintenance", + "end": "रखरखाव समाप्त करें", "action": "क्रिया", - "startNow": "Start now", - "schedule": "Schedule for later", - "reason": "Reason", - "startUtc": "First start (UTC)", - "repeat": "Repeat", - "once": "Once", - "weekly": "Weekly", - "monthly": "Monthly", - "utcHelp": "Schedules use UTC throughout the year. Monthly schedules skip months without the selected day. Planned windows cannot overlap; overrunning maintenance continues across later windows.", - "duration": "Estimated duration (minutes)", - "grace": "Grace period (minutes)", - "notify": "Notify once if still offline after the estimate plus grace period", - "addSchedule": "Add schedule", - "schedules": "Schedules", - "noSchedules": "No maintenance schedules.", - "completed": "Already started", - "minutes_one": "{{count}} minute", - "minutes_other": "{{count}} minutes", - "remove": "Remove schedule", - "loadFailed": "Could not refresh maintenance status. Changes are disabled until it can be loaded.", - "loading": "Loading maintenance status…" + "startNow": "शुरू करें", + "schedule": "बाद के लिए शेड्यूल करें", + "reason": "कारण", + "startUtc": "पहली शुरुआत (UTC)", + "repeat": "दोहराना", + "once": "एक बार", + "weekly": "साप्ताहिक", + "monthly": "महीने के", + "utcHelp": "शेड्यूल पूरे वर्ष UTC समय का उपयोग करते हैं। मासिक शेड्यूल चयनित दिन वाले महीनों को छोड़ देते हैं। नियोजित समय सीमाएँ एक-दूसरे से ओवरलैप नहीं हो सकतीं; निर्धारित रखरखाव कार्य निर्धारित समय सीमाओं में भी जारी रहता है।", + "duration": "अनुमानित अवधि (मिनटों में)", + "grace": "अनुग्रह अवधि (मिनटों में)", + "notify": "अनुमान और अनुग्रह अवधि के बाद भी ऑफ़लाइन रहने पर एक बार सूचित करें", + "addSchedule": "अनुसूची जोड़ें", + "schedules": "अनुसूचियों", + "noSchedules": "कोई रखरखाव कार्यक्रम नहीं।", + "completed": "पहले ही शुरू हो चुका है", + "minutes_one": "{{count}} मिनट", + "minutes_other": "{{count}} मिनट", + "remove": "अनुसूची हटाएँ", + "loadFailed": "रखरखाव की स्थिति को रीफ़्रेश नहीं किया जा सका। जब तक यह लोड नहीं हो जाता, तब तक परिवर्तन अक्षम रहेंगे।", + "loading": "रखरखाव की स्थिति लोड हो रही है…" + }, + "ui": { + "sidebar": { + "automations": { + "options": { + "connect": "connect", + "disconnect": "disconnect", + "offline": "offline", + "online": "online", + "failing": "failing", + "recovered": "recovered" + } + } + } } } diff --git a/plugins/automations/locales/translated/hu_HU.json b/plugins/automations/locales/translated/hu_HU.json index acb58a15e..135f72c62 100644 --- a/plugins/automations/locales/translated/hu_HU.json +++ b/plugins/automations/locales/translated/hu_HU.json @@ -207,5 +207,19 @@ "remove": "Ütemezés eltávolítása", "loadFailed": "Nem sikerült frissíteni a karbantartási állapotot. A változtatások le vannak tiltva, amíg be nem töltődik.", "loading": "Karbantartási állapot betöltése…" + }, + "ui": { + "sidebar": { + "automations": { + "options": { + "connect": "connect", + "disconnect": "disconnect", + "offline": "offline", + "online": "online", + "failing": "failing", + "recovered": "recovered" + } + } + } } } diff --git a/plugins/automations/locales/translated/id_ID.json b/plugins/automations/locales/translated/id_ID.json index 3e5f8c65e..bcb06a8a9 100644 --- a/plugins/automations/locales/translated/id_ID.json +++ b/plugins/automations/locales/translated/id_ID.json @@ -1,163 +1,163 @@ { "permissions": { "view": { - "title": "View automations", - "description": "See the automations and their history." + "title": "Lihat otomatisasi", + "description": "Lihat otomatisasi dan riwayatnya." }, "create": { - "title": "Create automations", - "description": "Add new automations." + "title": "Buat otomatisasi", + "description": "Tambahkan otomatisasi baru." }, "edit": { - "title": "Edit automations", - "description": "Change existing automations." + "title": "Edit otomatisasi", + "description": "Ubah otomatisasi yang ada." }, "delete": { - "title": "Delete automations", - "description": "Remove automations." + "title": "Hapus otomatisasi", + "description": "Hapus otomatisasi." }, "run": { - "title": "Run automations", - "description": "Trigger an automation by hand." + "title": "Jalankan otomatisasi", + "description": "Memicu otomatisasi secara manual." } }, "newUi": { "sidebar": { "automations": { - "title": "Automations", - "tabAutomations": "Automations", - "tabRuns": "Runs", - "tabChannels": "Channels", - "createAutomation": "New Automation", - "backToAutomations": "Back to Automations", - "createTitle": "New Automation", - "editTitle": "Edit Automation", - "empty": "No automations yet. Create one to react to a metric, a schedule, or an event.", - "emptyRuns": "No runs yet.", - "channelsHint": "Channels are set up in Alerts", - "noChannelsHint": "The alert always goes to your inbox. Add channels in Alerts to also send it somewhere else.", - "nameLabel": "Name", - "namePlaceholder": "e.g., Clean up /data when it fills", - "nameRequired": "Name is required", - "descriptionLabel": "Description", - "descriptionPlaceholder": "Optional description", - "enabledLabel": "Enabled", - "concurrencyLabel": "If it is already running", - "concurrencyHint": "What to do when this is triggered again before the last run has finished.", + "title": "Otomatisasi", + "tabAutomations": "Otomatisasi", + "tabRuns": "Lari", + "tabChannels": "Saluran", + "createAutomation": "Otomatisasi Baru", + "backToAutomations": "Kembali ke Otomatisasi", + "createTitle": "Otomatisasi Baru", + "editTitle": "Edit Otomatisasi", + "empty": "Belum ada otomatisasi. Buat satu untuk bereaksi terhadap metrik, jadwal, atau peristiwa.", + "emptyRuns": "Belum ada percobaan lari.", + "channelsHint": "Saluran diatur dalam Peringatan.", + "noChannelsHint": "Notifikasi selalu masuk ke kotak masuk Anda. Tambahkan saluran di Notifikasi untuk mengirimkannya ke tempat lain juga.", + "nameLabel": "Nama", + "namePlaceholder": "misalnya, Bersihkan /data saat sudah penuh", + "nameRequired": "Nama wajib diisi.", + "descriptionLabel": "Keterangan", + "descriptionPlaceholder": "Deskripsi opsional", + "enabledLabel": "Diaktifkan", + "concurrencyLabel": "Jika sudah berjalan", + "concurrencyHint": "Apa yang harus dilakukan jika ini terpicu lagi sebelum proses terakhir selesai.", "concurrency": { - "skip": "Skip the new run", - "queue": "Wait and run after", - "allow": "Run both at once" + "skip": "Lewati lari baru", + "queue": "Tunggu dan lari setelahnya", + "allow": "Jalankan keduanya sekaligus" }, - "save": "Save", - "created": "Automation created", - "updated": "Automation saved", - "deleted": "Automation deleted", - "deleteConfirm": "Delete this automation? Its run history is deleted too.", - "runNow": "Run now", - "testRun": "Test run", - "testRunHint": "Runs every step but does not touch anything outside Termix.", - "runStarted": "Run started", - "runFinished": "Run finished: {{status}}", - "trigger": "Trigger", - "steps": "Steps", - "addStep": "Add step", - "removeStep": "Remove step", - "moveUp": "Move up", - "moveDown": "Move down", - "noSteps": "No steps yet. Add one to say what should happen.", - "webhookTokenTitle": "Webhook URL", - "webhookTokenDescription": "This is shown once. Save it now, it cannot be retrieved later.", - "copy": "Copy", - "copied": "Copied", + "save": "Menyimpan", + "created": "Otomatisasi dibuat", + "updated": "Otomatisasi tersimpan", + "deleted": "Otomatisasi dihapus", + "deleteConfirm": "Hapus otomatisasi ini? Riwayat eksekusinya juga akan terhapus.", + "runNow": "Lari sekarang", + "testRun": "Uji coba", + "testRunHint": "Berjalan di setiap langkah tetapi tidak menyentuh apa pun di luar Termix.", + "runStarted": "Lari dimulai", + "runFinished": "Eksekusi selesai: {{status}}", + "trigger": "Pemicu", + "steps": "Tangga", + "addStep": "Tambahkan langkah", + "removeStep": "Hapus langkah", + "moveUp": "Naikkan", + "moveDown": "Turun ke bawah", + "noSteps": "Belum ada langkah. Tambahkan satu langkah untuk menjelaskan apa yang seharusnya terjadi.", + "webhookTokenTitle": "URL Webhook", + "webhookTokenDescription": "Ini hanya ditampilkan sekali. Simpan sekarang, karena tidak dapat diambil kembali nanti.", + "copy": "Menyalin", + "copied": "Disalin", "viewJson": "JSON", - "viewBuilder": "Builder", - "viewGraph": "Graph", - "lastRun": "Last run", - "never": "Never", + "viewBuilder": "Pembangun", + "viewGraph": "Grafik", + "lastRun": "Lari terakhir", + "never": "Tidak pernah", "duration": "{{seconds}}s", - "stepOutput": "Output", - "stepError": "Error", - "dryRunBadge": "Test run", + "stepOutput": "Keluaran", + "stepError": "Kesalahan", + "dryRunBadge": "Uji coba", "hostSelector": { - "trigger": "Triggering host", - "host": "Specific host", - "fleet": "Fleet", - "all": "All hosts" + "trigger": "Host pemicu", + "host": "Host spesifik", + "fleet": "Armada", + "all": "Semua tuan rumah" }, "triggerKinds": { - "metric_threshold": "Metric threshold", - "host_status": "Host goes up or down", - "health_check": "Health check changes", - "schedule": "On a schedule", - "docker_event": "Container event", - "internal_event": "Termix event", - "webhook": "Incoming webhook" + "metric_threshold": "Ambang batas metrik", + "host_status": "Pembawa acara naik atau turun", + "health_check": "Perubahan pemeriksaan kesehatan", + "schedule": "Sesuai jadwal", + "docker_event": "Acara kontainer", + "internal_event": "Acara Termix", + "webhook": "Webhook masuk" }, "stepTypes": { - "notify": "Send an alert", - "http": "Call a URL", - "run_snippet": "Run a snippet", - "run_command": "Run a command", - "docker": "Control a container", - "tunnel": "Control a tunnel", - "wol": "Wake a host", - "wait": "Wait", - "set_var": "Set a variable", - "if": "If / otherwise", - "run_automation": "Run another automation", - "stop": "Stop" + "notify": "Kirim peringatan", + "http": "Memanggil URL", + "run_snippet": "Jalankan cuplikan kode", + "run_command": "Jalankan perintah", + "docker": "Mengendalikan sebuah kontainer", + "tunnel": "Mengendalikan terowongan", + "wol": "Bangunkan tuan rumah", + "wait": "Tunggu", + "set_var": "Tetapkan sebuah variabel", + "if": "Jika/sebaliknya", + "run_automation": "Jalankan otomatisasi lainnya", + "stop": "Berhenti" }, "statuses": { - "running": "Running", - "success": "Success", - "failed": "Failed", - "timeout": "Timed out", - "skipped": "Skipped", - "cancelled": "Cancelled" + "running": "Berlari", + "success": "Kesuksesan", + "failed": "Gagal", + "timeout": "Waktu habis", + "skipped": "Dilewati", + "cancelled": "Dibatalkan" }, "fields": { - "host": "Host", - "metric": "Metric", - "mount": "Mount point", - "operator": "Is", - "value": "Value", - "forSeconds": "Sustained for (seconds)", - "cooldown": "Cooldown (minutes)", - "cron": "Cron expression", - "intervalSeconds": "Every (seconds)", - "timezone": "Time zone", - "timezoneServer": "Server time", - "timezoneHint": "Cron times are read in this zone. Does not apply to interval schedules.", - "container": "Container", - "command": "Command", + "host": "Tuan rumah", + "metric": "Metrik", + "mount": "Titik pemasangan", + "operator": "Adalah", + "value": "Nilai", + "forSeconds": "Berlangsung selama (detik)", + "cooldown": "Waktu pendinginan (menit)", + "cron": "Ekspresi Cron", + "intervalSeconds": "Setiap (detik)", + "timezone": "Zona waktu", + "timezoneServer": "Waktu server", + "timezoneHint": "Waktu Cron dibaca di zona ini. Tidak berlaku untuk jadwal interval.", + "container": "Wadah", + "command": "Memerintah", "url": "URL", - "method": "Method", - "body": "Body", - "channels": "Also send to", - "title": "Title", - "message": "Message", - "snippet": "Snippet", - "seconds": "Seconds", - "conditionLeftPlaceholder": "Value to check", - "conditionRightPlaceholder": "Compare against", - "variableName": "Variable name", - "variableValue": "Value", - "elevated": "Run with sudo", - "onError": "If this fails", - "allowPrivateNetwork": "Allow local network addresses", - "allowPrivateNetworkHint": "Needed for a self-hosted service on your LAN. Off by default to prevent requests to internal addresses." + "method": "Metode", + "body": "Tubuh", + "channels": "Kirim juga ke", + "title": "Judul", + "message": "Pesan", + "snippet": "Potongan", + "seconds": "Detik", + "conditionLeftPlaceholder": "Nilai yang perlu diperiksa", + "conditionRightPlaceholder": "Bandingkan dengan", + "variableName": "Nama variabel", + "variableValue": "Nilai", + "elevated": "Jalankan dengan sudo", + "onError": "Jika ini gagal", + "allowPrivateNetwork": "Izinkan alamat jaringan lokal", + "allowPrivateNetworkHint": "Diperlukan untuk layanan yang dihosting sendiri di LAN Anda. Secara default dinonaktifkan untuk mencegah permintaan ke alamat internal." }, "onError": { - "stop": "Stop the run", - "continue": "Carry on" + "stop": "Hentikan larinya", + "continue": "Melanjutkan" }, - "needsPlugin": "Needs {{plugin}}", - "needsPluginHint": "This automation is skipped until the feature it needs is available again.", - "offBadge": "Off", - "docsLink": "View docs", + "needsPlugin": "Membutuhkan {{plugin}}", + "needsPluginHint": "Otomatisasi ini dilewati hingga fitur yang dibutuhkan tersedia kembali.", + "offBadge": "Mati", + "docsLink": "Lihat dokumen", "ago": { - "seconds": "{{count}}s ago", + "seconds": "{{count}}detik yang lalu", "minutes": "{{count}} menit lalu", "hours": "{{count}} jam lalu", "days": "{{count}} detik lalu" @@ -166,46 +166,60 @@ } }, "nav": { - "automations": "Automations" + "automations": "Otomatisasi" }, "onboarding": { - "feature_automations": "Automations", - "feature_automations_desc": "Run steps automatically when something happens, and get notified." + "feature_automations": "Otomatisasi", + "feature_automations_desc": "Jalankan langkah-langkah secara otomatis saat sesuatu terjadi, dan dapatkan notifikasi." }, "maintenance": { - "title": "Maintenance", - "description": "Pause host status, health, metric, container and tunnel-disconnection automations while work is in progress. Monitoring, manual runs and scheduled automations continue.", - "denied": "You do not have permission to view maintenance.", - "sharedReadOnly": "This host was shared with you. Only its owner can change maintenance.", - "failed": "Maintenance could not be updated.", - "active": "Maintenance active", - "estimated": "Estimated completion", - "noAutoEnd": "The estimate does not end maintenance. End it explicitly when the work is complete.", - "endConfirm": "End maintenance and resume event-triggered automations for this host?", - "confirmEnd": "Confirm end", - "cancel": "Cancel", - "end": "End maintenance", - "action": "Action", - "startNow": "Start now", - "schedule": "Schedule for later", - "reason": "Reason", - "startUtc": "First start (UTC)", - "repeat": "Repeat", - "once": "Once", - "weekly": "Weekly", - "monthly": "Monthly", - "utcHelp": "Schedules use UTC throughout the year. Monthly schedules skip months without the selected day. Planned windows cannot overlap; overrunning maintenance continues across later windows.", - "duration": "Estimated duration (minutes)", - "grace": "Grace period (minutes)", - "notify": "Notify once if still offline after the estimate plus grace period", - "addSchedule": "Add schedule", - "schedules": "Schedules", - "noSchedules": "No maintenance schedules.", - "completed": "Already started", - "minutes_one": "{{count}} minute", - "minutes_other": "{{count}} minutes", - "remove": "Remove schedule", - "loadFailed": "Could not refresh maintenance status. Changes are disabled until it can be loaded.", - "loading": "Loading maintenance status…" + "title": "Pemeliharaan", + "description": "Jeda status host, kesehatan, metrik, kontainer, dan otomatisasi pemutusan koneksi terowongan saat pekerjaan sedang berlangsung. Pemantauan, eksekusi manual, dan otomatisasi terjadwal tetap berjalan.", + "denied": "Anda tidak memiliki izin untuk melihat pemeliharaan.", + "sharedReadOnly": "Host ini dibagikan kepada Anda. Hanya pemiliknya yang dapat mengubah pengaturan pemeliharaan.", + "failed": "Informasi pemeliharaan tidak dapat diperbarui.", + "active": "Pemeliharaan aktif", + "estimated": "Perkiraan penyelesaian", + "noAutoEnd": "Estimasi tersebut tidak mengakhiri pemeliharaan. Akhiri secara eksplisit ketika pekerjaan selesai.", + "endConfirm": "Akhiri pemeliharaan dan lanjutkan otomatisasi yang dipicu oleh peristiwa untuk host ini?", + "confirmEnd": "Konfirmasi akhir", + "cancel": "Membatalkan", + "end": "Akhir pemeliharaan", + "action": "Tindakan", + "startNow": "Mulai sekarang", + "schedule": "Jadwal untuk nanti", + "reason": "Alasan", + "startUtc": "Mulai pertama (UTC)", + "repeat": "Mengulang", + "once": "Sekali", + "weekly": "Mingguan", + "monthly": "Bulanan", + "utcHelp": "Jadwal menggunakan UTC sepanjang tahun. Jadwal bulanan melewatkan bulan-bulan yang tidak memiliki hari yang dipilih. Jendela waktu yang direncanakan tidak dapat tumpang tindih; pemeliharaan yang molor berlanjut ke jendela waktu berikutnya.", + "duration": "Perkiraan durasi (menit)", + "grace": "Masa tenggang (menit)", + "notify": "Beri tahu sekali jika masih offline setelah perkiraan ditambah masa tenggang.", + "addSchedule": "Tambahkan jadwal", + "schedules": "Jadwal", + "noSchedules": "Tidak ada jadwal perawatan.", + "completed": "Sudah dimulai", + "minutes_one": "{{count}} menit", + "minutes_other": "{{count}} menit", + "remove": "Hapus jadwal", + "loadFailed": "Status pemeliharaan tidak dapat diperbarui. Perubahan dinonaktifkan hingga status dapat dimuat.", + "loading": "Memuat status pemeliharaan…" + }, + "ui": { + "sidebar": { + "automations": { + "options": { + "connect": "connect", + "disconnect": "disconnect", + "offline": "offline", + "online": "online", + "failing": "failing", + "recovered": "recovered" + } + } + } } } diff --git a/plugins/automations/locales/translated/it_IT.json b/plugins/automations/locales/translated/it_IT.json index b5df9ff8a..2d5c24ac7 100644 --- a/plugins/automations/locales/translated/it_IT.json +++ b/plugins/automations/locales/translated/it_IT.json @@ -207,5 +207,19 @@ "remove": "Rimuovere la pianificazione", "loadFailed": "Impossibile aggiornare lo stato della manutenzione. Le modifiche sono disabilitate fino al caricamento.", "loading": "Caricamento dello stato di manutenzione…" + }, + "ui": { + "sidebar": { + "automations": { + "options": { + "connect": "connect", + "disconnect": "disconnect", + "offline": "offline", + "online": "online", + "failing": "failing", + "recovered": "recovered" + } + } + } } } diff --git a/plugins/automations/locales/translated/ja_JP.json b/plugins/automations/locales/translated/ja_JP.json index 539d90589..c305ab93d 100644 --- a/plugins/automations/locales/translated/ja_JP.json +++ b/plugins/automations/locales/translated/ja_JP.json @@ -207,5 +207,19 @@ "remove": "スケジュールを削除", "loadFailed": "メンテナンス状況を更新できませんでした。読み込みが完了するまで、変更は無効になっています。", "loading": "メンテナンスステータスをロード中…" + }, + "ui": { + "sidebar": { + "automations": { + "options": { + "connect": "connect", + "disconnect": "disconnect", + "offline": "offline", + "online": "online", + "failing": "failing", + "recovered": "recovered" + } + } + } } } diff --git a/plugins/automations/locales/translated/ko_KR.json b/plugins/automations/locales/translated/ko_KR.json index 3947cebab..030951a31 100644 --- a/plugins/automations/locales/translated/ko_KR.json +++ b/plugins/automations/locales/translated/ko_KR.json @@ -207,5 +207,19 @@ "remove": "일정을 삭제합니다", "loadFailed": "점검 상태를 새로 고칠 수 없습니다. 점검 상태가 로드될 때까지 변경 사항이 적용되지 않습니다.", "loading": "유지보수 상태 로딩 중…" + }, + "ui": { + "sidebar": { + "automations": { + "options": { + "connect": "connect", + "disconnect": "disconnect", + "offline": "offline", + "online": "online", + "failing": "failing", + "recovered": "recovered" + } + } + } } } diff --git a/plugins/automations/locales/translated/nl_NL.json b/plugins/automations/locales/translated/nl_NL.json index 17accf2fd..07a711359 100644 --- a/plugins/automations/locales/translated/nl_NL.json +++ b/plugins/automations/locales/translated/nl_NL.json @@ -207,5 +207,19 @@ "remove": "Schema verwijderen", "loadFailed": "De onderhoudsstatus kon niet worden vernieuwd. Wijzigingen zijn uitgeschakeld totdat de status kan worden geladen.", "loading": "Onderhoudsstatus laden…" + }, + "ui": { + "sidebar": { + "automations": { + "options": { + "connect": "connect", + "disconnect": "disconnect", + "offline": "offline", + "online": "online", + "failing": "failing", + "recovered": "recovered" + } + } + } } } diff --git a/plugins/automations/locales/translated/no_NO.json b/plugins/automations/locales/translated/no_NO.json index c74f6f289..6582b8920 100644 --- a/plugins/automations/locales/translated/no_NO.json +++ b/plugins/automations/locales/translated/no_NO.json @@ -1,211 +1,225 @@ { "permissions": { "view": { - "title": "View automations", - "description": "See the automations and their history." + "title": "Se automatiseringer", + "description": "Se automatiseringene og historikken deres." }, "create": { - "title": "Create automations", - "description": "Add new automations." + "title": "Opprett automatiseringer", + "description": "Legg til nye automatiseringer." }, "edit": { - "title": "Edit automations", - "description": "Change existing automations." + "title": "Rediger automatiseringer", + "description": "Endre eksisterende automatiseringer." }, "delete": { - "title": "Delete automations", - "description": "Remove automations." + "title": "Slett automatiseringer", + "description": "Fjern automatiseringer." }, "run": { - "title": "Run automations", - "description": "Trigger an automation by hand." + "title": "Kjør automatiseringer", + "description": "Utløs en automatisering manuelt." } }, "newUi": { "sidebar": { "automations": { - "title": "Automations", - "tabAutomations": "Automations", - "tabRuns": "Runs", - "tabChannels": "Channels", - "createAutomation": "New Automation", - "backToAutomations": "Back to Automations", - "createTitle": "New Automation", - "editTitle": "Edit Automation", - "empty": "No automations yet. Create one to react to a metric, a schedule, or an event.", - "emptyRuns": "No runs yet.", - "channelsHint": "Channels are set up in Alerts", - "noChannelsHint": "The alert always goes to your inbox. Add channels in Alerts to also send it somewhere else.", + "title": "Automatiseringer", + "tabAutomations": "Automatiseringer", + "tabRuns": "Løper", + "tabChannels": "Kanaler", + "createAutomation": "Ny automatisering", + "backToAutomations": "Tilbake til automatiseringer", + "createTitle": "Ny automatisering", + "editTitle": "Rediger automatisering", + "empty": "Ingen automatiseringer ennå. Opprett en for å reagere på en beregning, en tidsplan eller en hendelse.", + "emptyRuns": "Ingen løp ennå.", + "channelsHint": "Kanaler er satt opp i varsler", + "noChannelsHint": "Varselet går alltid til innboksen din. Legg til kanaler i varsler for å også sende det et annet sted.", "nameLabel": "Navn", - "namePlaceholder": "e.g., Clean up /data when it fills", + "namePlaceholder": "f.eks. Rydd opp i /data når den fylles", "nameRequired": "Navn er påkrevd", "descriptionLabel": "Beskrivelse", "descriptionPlaceholder": "Valgfri beskrivelse", "enabledLabel": "Aktivert", - "concurrencyLabel": "If it is already running", - "concurrencyHint": "What to do when this is triggered again before the last run has finished.", + "concurrencyLabel": "Hvis den allerede kjører", + "concurrencyHint": "Hva skal man gjøre når dette utløses igjen før siste kjøring er ferdig?", "concurrency": { - "skip": "Skip the new run", - "queue": "Wait and run after", - "allow": "Run both at once" + "skip": "Hopp over den nye kjøringen", + "queue": "Vent og løp etter", + "allow": "Kjør begge samtidig" }, "save": "Lagre", - "created": "Automation created", - "updated": "Automation saved", - "deleted": "Automation deleted", - "deleteConfirm": "Delete this automation? Its run history is deleted too.", - "runNow": "Run now", - "testRun": "Test run", - "testRunHint": "Runs every step but does not touch anything outside Termix.", - "runStarted": "Run started", - "runFinished": "Run finished: {{status}}", - "trigger": "Trigger", - "steps": "Steps", - "addStep": "Add step", - "removeStep": "Remove step", - "moveUp": "Move up", - "moveDown": "Move down", - "noSteps": "No steps yet. Add one to say what should happen.", - "webhookTokenTitle": "Webhook URL", - "webhookTokenDescription": "This is shown once. Save it now, it cannot be retrieved later.", + "created": "Automatisering opprettet", + "updated": "Automatisering lagret", + "deleted": "Automatisering slettet", + "deleteConfirm": "Vil du slette denne automatiseringen? Kjørehistorikken slettes også.", + "runNow": "Løp nå", + "testRun": "Testkjøring", + "testRunHint": "Kjører hvert trinn, men berører ikke noe utenfor Termix.", + "runStarted": "Løpet startet", + "runFinished": "Kjøring fullført: {{status}}", + "trigger": "Avtrekker", + "steps": "Trinn", + "addStep": "Legg til trinn", + "removeStep": "Fjern trinn", + "moveUp": "Flytt opp", + "moveDown": "Flytt ned", + "noSteps": "Ingen trinn ennå. Legg til ett for å si hva som skal skje.", + "webhookTokenTitle": "Webhook-URL", + "webhookTokenDescription": "Dette vises én gang. Lagre det nå, det kan ikke hentes frem senere.", "copy": "Kopier", - "copied": "Copied", + "copied": "Kopiert", "viewJson": "JSON", - "viewBuilder": "Builder", - "viewGraph": "Graph", - "lastRun": "Last run", - "never": "Never", + "viewBuilder": "Bygger", + "viewGraph": "Kurve", + "lastRun": "Siste løp", + "never": "Aldri", "duration": "{{seconds}}s", - "stepOutput": "Output", + "stepOutput": "Produksjon", "stepError": "Feil", - "dryRunBadge": "Test run", + "dryRunBadge": "Testkjøring", "hostSelector": { - "trigger": "Triggering host", - "host": "Specific host", - "fleet": "Fleet", - "all": "All hosts" + "trigger": "Utløsende vert", + "host": "Spesifikk vert", + "fleet": "Flåte", + "all": "Alle verter" }, "triggerKinds": { - "metric_threshold": "Metric threshold", - "host_status": "Host goes up or down", - "health_check": "Health check changes", - "schedule": "On a schedule", - "docker_event": "Container event", - "internal_event": "Termix event", - "webhook": "Incoming webhook" + "metric_threshold": "Metrisk terskel", + "host_status": "Verten går opp eller ned", + "health_check": "Endringer i helsesjekken", + "schedule": "På en tidsplan", + "docker_event": "Containerhendelse", + "internal_event": "Termix-arrangementet", + "webhook": "Innkommende webhook" }, "stepTypes": { - "notify": "Send an alert", - "http": "Call a URL", - "run_snippet": "Run a snippet", - "run_command": "Run a command", - "docker": "Control a container", - "tunnel": "Control a tunnel", - "wol": "Wake a host", - "wait": "Wait", - "set_var": "Set a variable", - "if": "If / otherwise", - "run_automation": "Run another automation", + "notify": "Send et varsel", + "http": "Kall en URL", + "run_snippet": "Kjør et utdrag", + "run_command": "Kjør en kommando", + "docker": "Kontroller en container", + "tunnel": "Kontroller en tunnel", + "wol": "Vekk en vert", + "wait": "Vente", + "set_var": "Angi en variabel", + "if": "Hvis / ellers", + "run_automation": "Kjør en annen automatisering", "stop": "Stopp" }, "statuses": { "running": "Kjører", "success": "Suksess", "failed": "Mislyktes", - "timeout": "Timed out", - "skipped": "Skipped", - "cancelled": "Cancelled" + "timeout": "Tidsavbrutt", + "skipped": "Hoppet over", + "cancelled": "Avlyst" }, "fields": { - "host": "Host", - "metric": "Metric", - "mount": "Mount point", - "operator": "Is", - "value": "Value", - "forSeconds": "Sustained for (seconds)", - "cooldown": "Cooldown (minutes)", - "cron": "Cron expression", - "intervalSeconds": "Every (seconds)", - "timezone": "Time zone", - "timezoneServer": "Server time", - "timezoneHint": "Cron times are read in this zone. Does not apply to interval schedules.", + "host": "Vert", + "metric": "Metrisk", + "mount": "Monteringspunkt", + "operator": "Er", + "value": "Verdi", + "forSeconds": "Vedvarende i (sekunder)", + "cooldown": "Nedkjølingstid (minutter)", + "cron": "Cron-uttrykk", + "intervalSeconds": "Hvert (sekund)", + "timezone": "Tidssone", + "timezoneServer": "Servertid", + "timezoneHint": "Cron-tider leses i denne sonen. Gjelder ikke for intervallplaner.", "container": "Container", "command": "Kommando", - "url": "URL", - "method": "Method", - "body": "Body", - "channels": "Also send to", - "title": "Title", - "message": "Message", - "snippet": "Snippet", - "seconds": "Seconds", - "conditionLeftPlaceholder": "Value to check", - "conditionRightPlaceholder": "Compare against", - "variableName": "Variable name", - "variableValue": "Value", - "elevated": "Run with sudo", - "onError": "If this fails", - "allowPrivateNetwork": "Allow local network addresses", - "allowPrivateNetworkHint": "Needed for a self-hosted service on your LAN. Off by default to prevent requests to internal addresses." + "url": "URL-adresse", + "method": "Metode", + "body": "Kropp", + "channels": "Send også til", + "title": "Tittel", + "message": "Beskjed", + "snippet": "Utdrag", + "seconds": "Sekunder", + "conditionLeftPlaceholder": "Verdi å sjekke", + "conditionRightPlaceholder": "Sammenlign mot", + "variableName": "Variabelnavn", + "variableValue": "Verdi", + "elevated": "Kjør med sudo", + "onError": "Hvis dette mislykkes", + "allowPrivateNetwork": "Tillat lokale nettverksadresser", + "allowPrivateNetworkHint": "Nødvendig for en selvhostet tjeneste på LAN-et ditt. Av som standard for å forhindre forespørsler til interne adresser." }, "onError": { - "stop": "Stop the run", - "continue": "Carry on" + "stop": "Stopp løpet", + "continue": "Fortsett" }, - "needsPlugin": "Needs {{plugin}}", - "needsPluginHint": "This automation is skipped until the feature it needs is available again.", - "offBadge": "Off", - "docsLink": "View docs", + "needsPlugin": "Trenger {{plugin}}", + "needsPluginHint": "Denne automatiseringen hoppes over inntil funksjonen den trenger er tilgjengelig igjen.", + "offBadge": "Av", + "docsLink": "Vis dokumenter", "ago": { - "seconds": "{{count}}s ago", - "minutes": "{{count}}m ago", - "hours": "{{count}}h ago", - "days": "{{count}}d ago" + "seconds": "For {{count}}sekunder siden", + "minutes": "For {{count}}minutter siden", + "hours": "for {{count}}t siden", + "days": "for {{count}}dager siden" } } } }, "nav": { - "automations": "Automations" + "automations": "Automatiseringer" }, "onboarding": { - "feature_automations": "Automations", - "feature_automations_desc": "Run steps automatically when something happens, and get notified." + "feature_automations": "Automatiseringer", + "feature_automations_desc": "Kjør trinnene automatisk når noe skjer, og bli varslet." }, "maintenance": { "title": "Vedlikehold", - "description": "Pause host status, health, metric, container and tunnel-disconnection automations while work is in progress. Monitoring, manual runs and scheduled automations continue.", - "denied": "You do not have permission to view maintenance.", - "sharedReadOnly": "This host was shared with you. Only its owner can change maintenance.", - "failed": "Maintenance could not be updated.", - "active": "Maintenance active", - "estimated": "Estimated completion", - "noAutoEnd": "The estimate does not end maintenance. End it explicitly when the work is complete.", - "endConfirm": "End maintenance and resume event-triggered automations for this host?", - "confirmEnd": "Confirm end", + "description": "Sett automatiseringer for vertsstatus, helse, målinger, containere og tunnelfrakobling på pause mens arbeidet pågår. Overvåking, manuelle kjøringer og planlagte automatiseringer fortsetter.", + "denied": "Du har ikke tillatelse til å se vedlikehold.", + "sharedReadOnly": "Denne verten ble delt med deg. Bare eieren kan endre vedlikeholdet.", + "failed": "Vedlikehold kunne ikke oppdateres.", + "active": "Vedlikehold aktivt", + "estimated": "Forventet ferdigstillelse", + "noAutoEnd": "Estimatet avslutter ikke vedlikeholdet. Avslutt det eksplisitt når arbeidet er fullført.", + "endConfirm": "Vil du avslutte vedlikehold og gjenoppta hendelsesutløste automatiseringer for denne verten?", + "confirmEnd": "Bekreft slutten", "cancel": "Avbryt", - "end": "End maintenance", - "action": "Action", - "startNow": "Start now", - "schedule": "Schedule for later", - "reason": "Reason", - "startUtc": "First start (UTC)", - "repeat": "Repeat", - "once": "Once", - "weekly": "Weekly", - "monthly": "Monthly", - "utcHelp": "Schedules use UTC throughout the year. Monthly schedules skip months without the selected day. Planned windows cannot overlap; overrunning maintenance continues across later windows.", - "duration": "Estimated duration (minutes)", - "grace": "Grace period (minutes)", - "notify": "Notify once if still offline after the estimate plus grace period", - "addSchedule": "Add schedule", - "schedules": "Schedules", - "noSchedules": "No maintenance schedules.", - "completed": "Already started", - "minutes_one": "{{count}} minute", - "minutes_other": "{{count}} minutes", - "remove": "Remove schedule", - "loadFailed": "Could not refresh maintenance status. Changes are disabled until it can be loaded.", - "loading": "Loading maintenance status…" + "end": "Avslutt vedlikehold", + "action": "Handling", + "startNow": "Start nå", + "schedule": "Planlegg for senere", + "reason": "Grunn", + "startUtc": "Første start (UTC)", + "repeat": "Gjenta", + "once": "En gang", + "weekly": "Ukentlig", + "monthly": "Månedlig", + "utcHelp": "Tidsplaner bruker UTC gjennom hele året. Månedlige tidsplaner hopper over måneder uten den valgte dagen. Planlagte vinduer kan ikke overlappe; overstyrt vedlikehold fortsetter på tvers av senere vinduer.", + "duration": "Estimert varighet (minutter)", + "grace": "Frist (minutter)", + "notify": "Varsle én gang hvis du fortsatt er frakoblet etter estimatet pluss respitperioden", + "addSchedule": "Legg til timeplan", + "schedules": "Tidsplaner", + "noSchedules": "Ingen vedlikeholdsplaner.", + "completed": "Allerede startet", + "minutes_one": "{{count}} minutt", + "minutes_other": "{{count}} minutter", + "remove": "Fjern tidsplan", + "loadFailed": "Kunne ikke oppdatere vedlikeholdsstatusen. Endringer er deaktivert inntil den kan lastes inn.", + "loading": "Laster inn vedlikeholdsstatus…" + }, + "ui": { + "sidebar": { + "automations": { + "options": { + "connect": "connect", + "disconnect": "disconnect", + "offline": "offline", + "online": "online", + "failing": "failing", + "recovered": "recovered" + } + } + } } } diff --git a/plugins/automations/locales/translated/pl_PL.json b/plugins/automations/locales/translated/pl_PL.json index 2a06a9864..c522be24b 100644 --- a/plugins/automations/locales/translated/pl_PL.json +++ b/plugins/automations/locales/translated/pl_PL.json @@ -1,24 +1,24 @@ { "permissions": { "view": { - "title": "View automations", - "description": "See the automations and their history." + "title": "Wyświetl automatyzacje", + "description": "Zobacz automatyzacje i ich historię." }, "create": { - "title": "Create automations", - "description": "Add new automations." + "title": "Twórz automatyzacje", + "description": "Dodaj nowe automatyzacje." }, "edit": { - "title": "Edit automations", - "description": "Change existing automations." + "title": "Edytuj automatyzacje", + "description": "Zmień istniejące automatyzacje." }, "delete": { - "title": "Delete automations", - "description": "Remove automations." + "title": "Usuń automatyzacje", + "description": "Usuń automatyzacje." }, "run": { - "title": "Run automations", - "description": "Trigger an automation by hand." + "title": "Uruchom automatyzacje", + "description": "Uruchom automatyzację ręcznie." } }, "newUi": { @@ -34,8 +34,8 @@ "editTitle": "Edytuj automatyzację", "empty": "Brak jeszcze automatyzacji. Utwórz automatyzację, która będzie reagować na metrykę, harmonogram lub zdarzenie.", "emptyRuns": "Brak uruchomień.", - "channelsHint": "Channels are set up in Alerts", - "noChannelsHint": "The alert always goes to your inbox. Add channels in Alerts to also send it somewhere else.", + "channelsHint": "Kanały są skonfigurowane w Alertach", + "noChannelsHint": "Alert zawsze trafia do Twojej skrzynki odbiorczej. Dodaj kanały w Alertach, aby wysłać go również gdzie indziej.", "nameLabel": "Nazwa", "namePlaceholder": "np. Wyczyść /data, gdy się zapełni", "nameRequired": "Nazwa jest wymagana", @@ -95,7 +95,7 @@ "webhook": "Przychodzący webhook" }, "stepTypes": { - "notify": "Send an alert", + "notify": "Wyślij alert", "http": "Wywołaj adres URL", "run_snippet": "Uruchom snippet", "run_command": "Uruchom polecenie", @@ -134,7 +134,7 @@ "url": "Adres URL", "method": "Metoda", "body": "Treść", - "channels": "Also send to", + "channels": "Wyślij również do", "title": "Tytuł", "message": "Wiadomość", "snippet": "Snippet", @@ -152,12 +152,12 @@ "stop": "Zatrzymaj uruchomienie", "continue": "Kontynuuj" }, - "needsPlugin": "Needs {{plugin}}", - "needsPluginHint": "This automation is skipped until the feature it needs is available again.", + "needsPlugin": "Potrzeba {{plugin}}", + "needsPluginHint": "Ta automatyzacja jest pomijana do momentu, aż potrzebna funkcja stanie się ponownie dostępna.", "offBadge": "Wył.", "docsLink": "Zobacz dokumentację", "ago": { - "seconds": "{{count}}s ago", + "seconds": "{{count}}s temu", "minutes": "{{count}} min temu", "hours": "{{count}} godz. temu", "days": "{{count}} dni temu" @@ -174,38 +174,52 @@ }, "maintenance": { "title": "Konserwacja", - "description": "Pause host status, health, metric, container and tunnel-disconnection automations while work is in progress. Monitoring, manual runs and scheduled automations continue.", - "denied": "You do not have permission to view maintenance.", - "sharedReadOnly": "This host was shared with you. Only its owner can change maintenance.", - "failed": "Maintenance could not be updated.", - "active": "Maintenance active", - "estimated": "Estimated completion", - "noAutoEnd": "The estimate does not end maintenance. End it explicitly when the work is complete.", - "endConfirm": "End maintenance and resume event-triggered automations for this host?", - "confirmEnd": "Confirm end", + "description": "Wstrzymaj automatyzację stanu hosta, kondycji, metryk, kontenerów i rozłączania tunelu na czas trwania pracy. Monitorowanie, ręczne uruchomienia i zaplanowane automatyzacje będą kontynuowane.", + "denied": "Nie masz uprawnień do przeglądania informacji o konserwacji.", + "sharedReadOnly": "Ten host został Ci udostępniony. Tylko jego właściciel może zmienić stan konserwacji.", + "failed": "Nie udało się zaktualizować konserwacji.", + "active": "Konserwacja aktywna", + "estimated": "Szacowany termin ukończenia", + "noAutoEnd": "Kosztorys nie kończy prac konserwacyjnych. Należy go jednoznacznie zakończyć po zakończeniu prac.", + "endConfirm": "Zakończyć konserwację i wznowić automatyzacje wyzwalane zdarzeniami dla tego hosta?", + "confirmEnd": "Potwierdź koniec", "cancel": "Anuluj", - "end": "End maintenance", + "end": "Zakończ konserwację", "action": "Akcja", - "startNow": "Start now", - "schedule": "Schedule for later", - "reason": "Reason", - "startUtc": "First start (UTC)", + "startNow": "Zacznij teraz", + "schedule": "Zaplanuj na później", + "reason": "Powód", + "startUtc": "Pierwsze uruchomienie (UTC)", "repeat": "Powtórz", - "once": "Once", - "weekly": "Weekly", - "monthly": "Monthly", - "utcHelp": "Schedules use UTC throughout the year. Monthly schedules skip months without the selected day. Planned windows cannot overlap; overrunning maintenance continues across later windows.", - "duration": "Estimated duration (minutes)", - "grace": "Grace period (minutes)", - "notify": "Notify once if still offline after the estimate plus grace period", - "addSchedule": "Add schedule", - "schedules": "Schedules", - "noSchedules": "No maintenance schedules.", - "completed": "Already started", - "minutes_one": "{{count}} minute", - "minutes_other": "{{count}} minutes", - "remove": "Remove schedule", - "loadFailed": "Could not refresh maintenance status. Changes are disabled until it can be loaded.", - "loading": "Loading maintenance status…" + "once": "Raz", + "weekly": "Tygodnik", + "monthly": "Miesięczny", + "utcHelp": "Harmonogramy korzystają z czasu UTC przez cały rok. Harmonogramy miesięczne pomijają miesiące bez wybranego dnia. Zaplanowane okna czasowe nie mogą się na siebie nakładać; nadwyżki konserwacyjne trwają również w kolejnych oknach czasowych.", + "duration": "Szacowany czas trwania (minuty)", + "grace": "Okres karencji (minuty)", + "notify": "Powiadom raz, jeśli po upływie okresu szacunkowego i okresu karencji nadal będziesz offline", + "addSchedule": "Dodaj harmonogram", + "schedules": "Harmonogramy", + "noSchedules": "Brak harmonogramów konserwacji.", + "completed": "Już zaczęto", + "minutes_one": "{{count}} minuta", + "minutes_other": "{{count}} minut", + "remove": "Usuń harmonogram", + "loadFailed": "Nie można odświeżyć statusu konserwacji. Zmiany są zablokowane do czasu ich załadowania.", + "loading": "Ładowanie statusu konserwacji…" + }, + "ui": { + "sidebar": { + "automations": { + "options": { + "connect": "connect", + "disconnect": "disconnect", + "offline": "offline", + "online": "online", + "failing": "failing", + "recovered": "recovered" + } + } + } } } diff --git a/plugins/automations/locales/translated/pt_BR.json b/plugins/automations/locales/translated/pt_BR.json index 5489a735d..4ff93642a 100644 --- a/plugins/automations/locales/translated/pt_BR.json +++ b/plugins/automations/locales/translated/pt_BR.json @@ -1,211 +1,225 @@ { "permissions": { "view": { - "title": "View automations", - "description": "See the automations and their history." + "title": "Visualizar automações", + "description": "Veja as automações e seu histórico." }, "create": { - "title": "Create automations", - "description": "Add new automations." + "title": "Criar automações", + "description": "Adicionar novas automações." }, "edit": { - "title": "Edit automations", - "description": "Change existing automations." + "title": "Editar automações", + "description": "Alterar as automações existentes." }, "delete": { - "title": "Delete automations", - "description": "Remove automations." + "title": "Excluir automações", + "description": "Remover automações." }, "run": { - "title": "Run automations", - "description": "Trigger an automation by hand." + "title": "Executar automações", + "description": "Acione uma automação manualmente." } }, "newUi": { "sidebar": { "automations": { - "title": "Automations", - "tabAutomations": "Automations", - "tabRuns": "Runs", - "tabChannels": "Channels", - "createAutomation": "New Automation", - "backToAutomations": "Back to Automations", - "createTitle": "New Automation", - "editTitle": "Edit Automation", - "empty": "No automations yet. Create one to react to a metric, a schedule, or an event.", - "emptyRuns": "No runs yet.", - "channelsHint": "Channels are set up in Alerts", - "noChannelsHint": "The alert always goes to your inbox. Add channels in Alerts to also send it somewhere else.", - "nameLabel": "Name", - "namePlaceholder": "e.g., Clean up /data when it fills", - "nameRequired": "Name is required", - "descriptionLabel": "Description", - "descriptionPlaceholder": "Optional description", - "enabledLabel": "Enabled", - "concurrencyLabel": "If it is already running", - "concurrencyHint": "What to do when this is triggered again before the last run has finished.", + "title": "Automações", + "tabAutomations": "Automações", + "tabRuns": "Corridas", + "tabChannels": "Canais", + "createAutomation": "Nova Automação", + "backToAutomations": "Voltar para Automações", + "createTitle": "Nova Automação", + "editTitle": "Editar Automação", + "empty": "Ainda não há automações. Crie uma para reagir a uma métrica, a um agendamento ou a um evento.", + "emptyRuns": "Ainda não houve nenhuma corrida.", + "channelsHint": "Os canais são configurados em Alertas.", + "noChannelsHint": "O alerta sempre será enviado para sua caixa de entrada. Adicione canais em Alertas para enviá-lo também para outros locais.", + "nameLabel": "Nome", + "namePlaceholder": "Por exemplo, limpe a pasta /data quando ela estiver cheia.", + "nameRequired": "O nome é obrigatório.", + "descriptionLabel": "Descrição", + "descriptionPlaceholder": "Descrição opcional", + "enabledLabel": "Habilitado", + "concurrencyLabel": "Se já estiver em execução", + "concurrencyHint": "O que fazer quando isso for acionado novamente antes da última execução terminar?", "concurrency": { - "skip": "Skip the new run", - "queue": "Wait and run after", - "allow": "Run both at once" + "skip": "Pule a nova corrida", + "queue": "Espere e corra atrás.", + "allow": "Execute ambos simultaneamente" }, "save": "Salvar", - "created": "Automation created", - "updated": "Automation saved", - "deleted": "Automation deleted", - "deleteConfirm": "Delete this automation? Its run history is deleted too.", - "runNow": "Run now", - "testRun": "Test run", - "testRunHint": "Runs every step but does not touch anything outside Termix.", - "runStarted": "Run started", - "runFinished": "Run finished: {{status}}", - "trigger": "Trigger", - "steps": "Steps", - "addStep": "Add step", - "removeStep": "Remove step", - "moveUp": "Move up", - "moveDown": "Move down", - "noSteps": "No steps yet. Add one to say what should happen.", - "webhookTokenTitle": "Webhook URL", - "webhookTokenDescription": "This is shown once. Save it now, it cannot be retrieved later.", + "created": "Automação criada", + "updated": "Automação economizou", + "deleted": "Automação excluída", + "deleteConfirm": "Excluir esta automação? O histórico de execução dela também será excluído.", + "runNow": "Corra agora", + "testRun": "Teste de execução", + "testRunHint": "Executa cada etapa, mas não toca em nada fora do Termix.", + "runStarted": "A corrida começou.", + "runFinished": "Execução concluída: {{status}}", + "trigger": "Acionar", + "steps": "Passos", + "addStep": "Adicionar etapa", + "removeStep": "Remover etapa", + "moveUp": "Suba", + "moveDown": "Desça", + "noSteps": "Ainda não há etapas. Adicione uma para descrever o que deve acontecer.", + "webhookTokenTitle": "URL do Webhook", + "webhookTokenDescription": "Esta mensagem será exibida apenas uma vez. Salve-a agora, pois não poderá ser recuperada posteriormente.", "copy": "Copiar", "copied": "Copiado", "viewJson": "JSON", - "viewBuilder": "Builder", - "viewGraph": "Graph", - "lastRun": "Last run", - "never": "Never", + "viewBuilder": "Construtor", + "viewGraph": "Gráfico", + "lastRun": "Última corrida", + "never": "Nunca", "duration": "{{seconds}}s", - "stepOutput": "Output", + "stepOutput": "Saída", "stepError": "Erro", - "dryRunBadge": "Test run", + "dryRunBadge": "Teste de execução", "hostSelector": { - "trigger": "Triggering host", - "host": "Specific host", - "fleet": "Fleet", - "all": "All hosts" + "trigger": "Host que desencadeia o ataque", + "host": "hospedeiro específico", + "fleet": "Frota", + "all": "Todos os anfitriões" }, "triggerKinds": { - "metric_threshold": "Metric threshold", - "host_status": "Host goes up or down", - "health_check": "Health check changes", - "schedule": "On a schedule", - "docker_event": "Container event", - "internal_event": "Termix event", - "webhook": "Incoming webhook" + "metric_threshold": "Limiar métrico", + "host_status": "O host sobe ou desce.", + "health_check": "Alterações na verificação de saúde", + "schedule": "De acordo com um cronograma", + "docker_event": "Evento de contêiner", + "internal_event": "Evento Termix", + "webhook": "Webhook de entrada" }, "stepTypes": { - "notify": "Send an alert", - "http": "Call a URL", - "run_snippet": "Run a snippet", - "run_command": "Run a command", - "docker": "Control a container", - "tunnel": "Control a tunnel", - "wol": "Wake a host", - "wait": "Wait", - "set_var": "Set a variable", - "if": "If / otherwise", - "run_automation": "Run another automation", - "stop": "Stop" + "notify": "Enviar um alerta", + "http": "Chamar um URL", + "run_snippet": "Executar um trecho de código", + "run_command": "Executar um comando", + "docker": "Controle um contêiner", + "tunnel": "Controle um túnel", + "wol": "Acorde um anfitrião", + "wait": "Espere", + "set_var": "Defina uma variável", + "if": "Se/caso contrário", + "run_automation": "Execute outra automação", + "stop": "Parar" }, "statuses": { - "running": "Running", - "success": "Success", - "failed": "Failed", - "timeout": "Timed out", - "skipped": "Skipped", - "cancelled": "Cancelled" + "running": "Correndo", + "success": "Sucesso", + "failed": "Fracassado", + "timeout": "Tempo limite excedido", + "skipped": "Ignorado", + "cancelled": "Cancelado" }, "fields": { - "host": "Host", - "metric": "Metric", - "mount": "Mount point", - "operator": "Is", - "value": "Value", - "forSeconds": "Sustained for (seconds)", - "cooldown": "Cooldown (minutes)", - "cron": "Cron expression", - "intervalSeconds": "Every (seconds)", - "timezone": "Time zone", - "timezoneServer": "Server time", - "timezoneHint": "Cron times are read in this zone. Does not apply to interval schedules.", - "container": "Container", - "command": "Command", + "host": "Hospedar", + "metric": "Métrica", + "mount": "Ponto de montagem", + "operator": "É", + "value": "Valor", + "forSeconds": "Sustentado por (segundos)", + "cooldown": "Tempo de resfriamento (minutos)", + "cron": "Expressão de Cron", + "intervalSeconds": "A cada (segundos)", + "timezone": "Fuso horário", + "timezoneServer": "Hora do servidor", + "timezoneHint": "Os horários cron são lidos nesta zona. Não se aplica a agendamentos por intervalo.", + "container": "Recipiente", + "command": "Comando", "url": "URL", - "method": "Method", - "body": "Body", - "channels": "Also send to", - "title": "Title", - "message": "Message", - "snippet": "Snippet", - "seconds": "Seconds", - "conditionLeftPlaceholder": "Value to check", - "conditionRightPlaceholder": "Compare against", - "variableName": "Variable name", - "variableValue": "Value", - "elevated": "Run with sudo", - "onError": "If this fails", - "allowPrivateNetwork": "Allow local network addresses", - "allowPrivateNetworkHint": "Needed for a self-hosted service on your LAN. Off by default to prevent requests to internal addresses." + "method": "Método", + "body": "Corpo", + "channels": "Enviar também para", + "title": "Título", + "message": "Mensagem", + "snippet": "Trecho", + "seconds": "Segundos", + "conditionLeftPlaceholder": "Valor a verificar", + "conditionRightPlaceholder": "Compare com", + "variableName": "Nome da variável", + "variableValue": "Valor", + "elevated": "Executar com sudo", + "onError": "Se isso falhar", + "allowPrivateNetwork": "Permitir endereços de rede local", + "allowPrivateNetworkHint": "Necessário para um serviço autohospedado em sua rede local (LAN). Desativado por padrão para evitar solicitações a endereços internos." }, "onError": { - "stop": "Stop the run", - "continue": "Carry on" + "stop": "Pare a corrida", + "continue": "Continuar" }, - "needsPlugin": "Needs {{plugin}}", - "needsPluginHint": "This automation is skipped until the feature it needs is available again.", - "offBadge": "Off", + "needsPlugin": "Necessita de {{plugin}}", + "needsPluginHint": "Essa automação será ignorada até que o recurso necessário esteja disponível novamente.", + "offBadge": "Desligado", "docsLink": "Documentação", "ago": { - "seconds": "{{count}}s ago", - "minutes": "{{count}}m ago", - "hours": "{{count}}h ago", - "days": "{{count}}d ago" + "seconds": "{{count}}s atrás", + "minutes": "{{count}}m atrás", + "hours": "{{count}}h atrás", + "days": "{{count}}há alguns dias" } } } }, "nav": { - "automations": "Automations" + "automations": "Automações" }, "onboarding": { - "feature_automations": "Automations", - "feature_automations_desc": "Run steps automatically when something happens, and get notified." + "feature_automations": "Automações", + "feature_automations_desc": "Execute etapas automaticamente quando algo acontecer e receba notificações." }, "maintenance": { "title": "Manutenção", - "description": "Pause host status, health, metric, container and tunnel-disconnection automations while work is in progress. Monitoring, manual runs and scheduled automations continue.", - "denied": "You do not have permission to view maintenance.", - "sharedReadOnly": "This host was shared with you. Only its owner can change maintenance.", - "failed": "Maintenance could not be updated.", - "active": "Maintenance active", - "estimated": "Estimated completion", - "noAutoEnd": "The estimate does not end maintenance. End it explicitly when the work is complete.", - "endConfirm": "End maintenance and resume event-triggered automations for this host?", - "confirmEnd": "Confirm end", + "description": "Pause as automações de status do host, integridade, métricas, contêiner e desconexão de túnel enquanto o trabalho estiver em andamento. O monitoramento, as execuções manuais e as automações agendadas continuam.", + "denied": "Você não tem permissão para visualizar a manutenção.", + "sharedReadOnly": "Este host foi compartilhado com você. Somente o proprietário pode alterar as configurações de manutenção.", + "failed": "A atualização de manutenção não pôde ser concluída.", + "active": "Manutenção ativa", + "estimated": "Conclusão prevista", + "noAutoEnd": "O orçamento não encerra a manutenção. Encerre-o explicitamente quando o trabalho estiver concluído.", + "endConfirm": "Encerrar a manutenção e retomar as automações acionadas por eventos para este host?", + "confirmEnd": "Confirme o fim", "cancel": "Cancelar", - "end": "End maintenance", - "action": "Action", - "startNow": "Start now", - "schedule": "Schedule for later", - "reason": "Reason", - "startUtc": "First start (UTC)", - "repeat": "Repeat", - "once": "Once", - "weekly": "Weekly", - "monthly": "Monthly", - "utcHelp": "Schedules use UTC throughout the year. Monthly schedules skip months without the selected day. Planned windows cannot overlap; overrunning maintenance continues across later windows.", - "duration": "Estimated duration (minutes)", - "grace": "Grace period (minutes)", - "notify": "Notify once if still offline after the estimate plus grace period", - "addSchedule": "Add schedule", - "schedules": "Schedules", - "noSchedules": "No maintenance schedules.", - "completed": "Already started", - "minutes_one": "{{count}} minute", - "minutes_other": "{{count}} minutes", - "remove": "Remove schedule", - "loadFailed": "Could not refresh maintenance status. Changes are disabled until it can be loaded.", - "loading": "Loading maintenance status…" + "end": "Manutenção final", + "action": "Ação", + "startNow": "Comece agora", + "schedule": "Agendamento para mais tarde", + "reason": "Razão", + "startUtc": "Primeiro início (UTC)", + "repeat": "Repita", + "once": "Uma vez", + "weekly": "Semanalmente", + "monthly": "Mensal", + "utcHelp": "Os horários utilizam o UTC durante todo o ano. Os horários mensais ignoram os meses que não correspondem ao dia selecionado. Os períodos de planejamento não podem se sobrepor; a manutenção que se estende além do previsto continua nos períodos subsequentes.", + "duration": "Duração estimada (minutos)", + "grace": "Período de tolerância (minutos)", + "notify": "Notificar uma única vez se o usuário ainda estiver offline após o período estimado e de tolerância.", + "addSchedule": "Adicionar horário", + "schedules": "Horários", + "noSchedules": "Sem cronograma de manutenção.", + "completed": "Já começou", + "minutes_one": "{{count}} minuto", + "minutes_other": "{{count}} minutos", + "remove": "Remover agendamento", + "loadFailed": "Não foi possível atualizar o status de manutenção. As alterações estão desativadas até que o status seja carregado.", + "loading": "Carregando status de manutenção…" + }, + "ui": { + "sidebar": { + "automations": { + "options": { + "connect": "connect", + "disconnect": "disconnect", + "offline": "offline", + "online": "online", + "failing": "failing", + "recovered": "recovered" + } + } + } } } diff --git a/plugins/automations/locales/translated/pt_PT.json b/plugins/automations/locales/translated/pt_PT.json index 1ea6b9f12..6d5d7a2ba 100644 --- a/plugins/automations/locales/translated/pt_PT.json +++ b/plugins/automations/locales/translated/pt_PT.json @@ -1,163 +1,163 @@ { "permissions": { "view": { - "title": "View automations", - "description": "See the automations and their history." + "title": "Visualizar automações", + "description": "Veja as automatizações e o seu histórico." }, "create": { - "title": "Create automations", - "description": "Add new automations." + "title": "Criar automações", + "description": "Adicionar novas automatizações." }, "edit": { - "title": "Edit automations", - "description": "Change existing automations." + "title": "Editar automações", + "description": "Alterar as automatizações existentes." }, "delete": { - "title": "Delete automations", - "description": "Remove automations." + "title": "Apagar automações", + "description": "Remover automações." }, "run": { - "title": "Run automations", - "description": "Trigger an automation by hand." + "title": "Executar automações", + "description": "Acione uma automatização manualmente." } }, "newUi": { "sidebar": { "automations": { - "title": "Automations", - "tabAutomations": "Automations", - "tabRuns": "Runs", + "title": "Automações", + "tabAutomations": "Automações", + "tabRuns": "Corridas", "tabChannels": "Canais", - "createAutomation": "New Automation", - "backToAutomations": "Back to Automations", - "createTitle": "New Automation", - "editTitle": "Edit Automation", - "empty": "No automations yet. Create one to react to a metric, a schedule, or an event.", - "emptyRuns": "No runs yet.", - "channelsHint": "Channels are set up in Alerts", - "noChannelsHint": "The alert always goes to your inbox. Add channels in Alerts to also send it somewhere else.", + "createAutomation": "Nova Automação", + "backToAutomations": "Voltar para Automações", + "createTitle": "Nova Automação", + "editTitle": "Editar Automação", + "empty": "Ainda não há automatizações. Crie uma para reagir a uma métrica, a um agendamento ou a um evento.", + "emptyRuns": "Ainda não houve qualquer corrida.", + "channelsHint": "Os canais são configurados em Alertas.", + "noChannelsHint": "O alerta será sempre enviado para a sua caixa de entrada. Adicione canais em Alertas para o enviar também para outros locais.", "nameLabel": "Nome", - "namePlaceholder": "e.g., Clean up /data when it fills", + "namePlaceholder": "Por exemplo, limpe a pasta /data quando esta estiver cheia.", "nameRequired": "O nome é obrigatório", "descriptionLabel": "Descrição", "descriptionPlaceholder": "Descrição opcional", "enabledLabel": "Ativado", - "concurrencyLabel": "If it is already running", - "concurrencyHint": "What to do when this is triggered again before the last run has finished.", + "concurrencyLabel": "Se já estiver em execução", + "concurrencyHint": "O que fazer quando este for novamente acionado antes da última execução terminar?", "concurrency": { - "skip": "Skip the new run", - "queue": "Wait and run after", - "allow": "Run both at once" + "skip": "Salte a nova corrida", + "queue": "Espere e corra atrás.", + "allow": "Execute ambos em simultâneo" }, "save": "Guardar", - "created": "Automation created", - "updated": "Automation saved", - "deleted": "Automation deleted", - "deleteConfirm": "Delete this automation? Its run history is deleted too.", - "runNow": "Run now", - "testRun": "Test run", - "testRunHint": "Runs every step but does not touch anything outside Termix.", - "runStarted": "Run started", - "runFinished": "Run finished: {{status}}", + "created": "Automação criada", + "updated": "A automação economizou", + "deleted": "Automação excluída", + "deleteConfirm": "Apagar esta automação? O histórico de execução da mesma também será eliminado.", + "runNow": "Corra agora", + "testRun": "Teste de execução", + "testRunHint": "Executa cada passo, mas não toca em nada fora do Termix.", + "runStarted": "A corrida começou.", + "runFinished": "Execução concluída: {{status}}", "trigger": "Gatilho", - "steps": "Steps", - "addStep": "Add step", - "removeStep": "Remove step", - "moveUp": "Move up", - "moveDown": "Move down", - "noSteps": "No steps yet. Add one to say what should happen.", - "webhookTokenTitle": "Webhook URL", - "webhookTokenDescription": "This is shown once. Save it now, it cannot be retrieved later.", + "steps": "Passos", + "addStep": "Adicionar etapa", + "removeStep": "Remover etapa", + "moveUp": "Suba", + "moveDown": "Desça", + "noSteps": "Ainda não há etapas. Adicione uma para descrever o que deve acontecer.", + "webhookTokenTitle": "URL do Webhook", + "webhookTokenDescription": "Esta mensagem será apresentada apenas uma vez. Guarde-a agora, pois não poderá ser recuperada posteriormente.", "copy": "Copiar", "copied": "Copiado", "viewJson": "JSON", - "viewBuilder": "Builder", - "viewGraph": "Graph", - "lastRun": "Last run", + "viewBuilder": "Construtor", + "viewGraph": "Gráfico", + "lastRun": "Última corrida", "never": "Nunca", "duration": "{{seconds}}s", "stepOutput": "Saída", "stepError": "Erro", - "dryRunBadge": "Test run", + "dryRunBadge": "Teste de execução", "hostSelector": { - "trigger": "Triggering host", - "host": "Specific host", - "fleet": "Fleet", + "trigger": "Host que desencadeia o ataque", + "host": "hospedeiro específico", + "fleet": "Frota", "all": "Todos os hosts" }, "triggerKinds": { - "metric_threshold": "Metric threshold", - "host_status": "Host goes up or down", - "health_check": "Health check changes", - "schedule": "On a schedule", - "docker_event": "Container event", - "internal_event": "Termix event", - "webhook": "Incoming webhook" + "metric_threshold": "Limiar métrico", + "host_status": "O host sobe ou desce.", + "health_check": "Alterações na verificação de saúde", + "schedule": "De acordo com um cronograma", + "docker_event": "Evento de contentor", + "internal_event": "Evento Termix", + "webhook": "Webhook de entrada" }, "stepTypes": { - "notify": "Send an alert", - "http": "Call a URL", - "run_snippet": "Run a snippet", - "run_command": "Run a command", - "docker": "Control a container", - "tunnel": "Control a tunnel", - "wol": "Wake a host", - "wait": "Wait", - "set_var": "Set a variable", - "if": "If / otherwise", - "run_automation": "Run another automation", + "notify": "Enviar um alerta", + "http": "Chamar um URL", + "run_snippet": "Executar um excerto de código", + "run_command": "Executar um comando", + "docker": "Controle um contentor", + "tunnel": "Controle um túnel", + "wol": "Acorde um anfitrião", + "wait": "Espera", + "set_var": "Defina uma variável", + "if": "Se/caso contrário", + "run_automation": "Execute outra automatização", "stop": "Stop" }, "statuses": { "running": "Em execução", "success": "Sucesso", "failed": "Falhou", - "timeout": "Timed out", - "skipped": "Skipped", - "cancelled": "Cancelled" + "timeout": "Tempo limite excedido", + "skipped": "Ignorado", + "cancelled": "Cancelado" }, "fields": { "host": "Servidor", "metric": "Métrica", - "mount": "Mount point", - "operator": "Is", - "value": "Value", - "forSeconds": "Sustained for (seconds)", + "mount": "Ponto de montagem", + "operator": "É", + "value": "Valor", + "forSeconds": "Sustentado por (segundos)", "cooldown": "Período de arrefecimento (minutos)", - "cron": "Cron expression", - "intervalSeconds": "Every (seconds)", - "timezone": "Time zone", - "timezoneServer": "Server time", - "timezoneHint": "Cron times are read in this zone. Does not apply to interval schedules.", - "container": "Container", + "cron": "Expressão de Cron", + "intervalSeconds": "A cada (segundos)", + "timezone": "Fuso horário", + "timezoneServer": "Hora do servidor", + "timezoneHint": "Os tempos cron são lidos nesta zona. Não se aplica a agendamentos por intervalo.", + "container": "Recipiente", "command": "Comando", "url": "URL", - "method": "Method", - "body": "Body", - "channels": "Also send to", + "method": "Método", + "body": "Corpo", + "channels": "Enviar também para", "title": "Título", - "message": "Message", - "snippet": "Snippet", - "seconds": "Seconds", - "conditionLeftPlaceholder": "Value to check", - "conditionRightPlaceholder": "Compare against", - "variableName": "Variable name", - "variableValue": "Value", - "elevated": "Run with sudo", - "onError": "If this fails", - "allowPrivateNetwork": "Allow local network addresses", - "allowPrivateNetworkHint": "Needed for a self-hosted service on your LAN. Off by default to prevent requests to internal addresses." + "message": "Mensagem", + "snippet": "Trecho", + "seconds": "Segundos", + "conditionLeftPlaceholder": "Valor a verificar", + "conditionRightPlaceholder": "Compare com", + "variableName": "Nome da variável", + "variableValue": "Valor", + "elevated": "Executar com sudo", + "onError": "Se isso falhar", + "allowPrivateNetwork": "Permitir endereços de rede local", + "allowPrivateNetworkHint": "Necessário para um serviço auto-hospedado na sua rede local (LAN). Desativado por defeito para evitar pedidos a endereços internos." }, "onError": { - "stop": "Stop the run", - "continue": "Carry on" + "stop": "Pare a corrida", + "continue": "Continuar" }, - "needsPlugin": "Needs {{plugin}}", - "needsPluginHint": "This automation is skipped until the feature it needs is available again.", + "needsPlugin": "Necessita de {{plugin}}", + "needsPluginHint": "Esta automatização será ignorada até que o recurso necessário esteja novamente disponível.", "offBadge": "Desativado", "docsLink": "Ver docs", "ago": { - "seconds": "{{count}}s ago", + "seconds": "{{count}}s atrás", "minutes": "há {{count}} min", "hours": "há {{count}} h", "days": "há {{count}} d" @@ -166,46 +166,60 @@ } }, "nav": { - "automations": "Automations" + "automations": "Automações" }, "onboarding": { - "feature_automations": "Automations", - "feature_automations_desc": "Run steps automatically when something happens, and get notified." + "feature_automations": "Automações", + "feature_automations_desc": "Execute automaticamente os passos quando algo acontece e receba notificações." }, "maintenance": { "title": "Manutenção", - "description": "Pause host status, health, metric, container and tunnel-disconnection automations while work is in progress. Monitoring, manual runs and scheduled automations continue.", - "denied": "You do not have permission to view maintenance.", - "sharedReadOnly": "This host was shared with you. Only its owner can change maintenance.", - "failed": "Maintenance could not be updated.", - "active": "Maintenance active", - "estimated": "Estimated completion", - "noAutoEnd": "The estimate does not end maintenance. End it explicitly when the work is complete.", - "endConfirm": "End maintenance and resume event-triggered automations for this host?", - "confirmEnd": "Confirm end", + "description": "Faça uma pausa nas automatizações de estado do host, integridade, métricas, contentor e desconexão de túnel enquanto o trabalho estiver em curso. A monitorização, as execuções manuais e as automações agendadas continuam.", + "denied": "Não tem permissão para visualizar a manutenção.", + "sharedReadOnly": "Este host foi partilhado consigo. Apenas o proprietário pode alterar as definições de manutenção.", + "failed": "A atualização de manutenção não pôde ser concluída.", + "active": "Manutenção ativa", + "estimated": "Conclusão prevista", + "noAutoEnd": "O orçamento não encerra a manutenção. Encerre-o explicitamente quando o trabalho estiver concluído.", + "endConfirm": "Terminar a manutenção e retomar as automatizações acionadas por eventos para este host?", + "confirmEnd": "Confirme o fim", "cancel": "Cancelar", - "end": "End maintenance", + "end": "Manutenção final", "action": "Ação", - "startNow": "Start now", - "schedule": "Schedule for later", - "reason": "Reason", - "startUtc": "First start (UTC)", - "repeat": "Repeat", - "once": "Once", - "weekly": "Weekly", - "monthly": "Monthly", - "utcHelp": "Schedules use UTC throughout the year. Monthly schedules skip months without the selected day. Planned windows cannot overlap; overrunning maintenance continues across later windows.", - "duration": "Estimated duration (minutes)", - "grace": "Grace period (minutes)", - "notify": "Notify once if still offline after the estimate plus grace period", - "addSchedule": "Add schedule", - "schedules": "Schedules", - "noSchedules": "No maintenance schedules.", - "completed": "Already started", - "minutes_one": "{{count}} minute", - "minutes_other": "{{count}} minutes", - "remove": "Remove schedule", - "loadFailed": "Could not refresh maintenance status. Changes are disabled until it can be loaded.", - "loading": "Loading maintenance status…" + "startNow": "Comece agora", + "schedule": "Agendamento para mais tarde", + "reason": "Razão", + "startUtc": "Primeiro arranque (UTC)", + "repeat": "Repetir", + "once": "Uma vez", + "weekly": "Semanalmente", + "monthly": "Mensal", + "utcHelp": "Os horários utilizam o UTC durante todo o ano. Os horários mensais ignoram os meses que não correspondem ao dia selecionado. Os períodos de planeamento não se podem sobrepor; a manutenção que se estende para além do previsto continua nos períodos subsequentes.", + "duration": "Duração estimada (minutos)", + "grace": "Período de tolerância (minutos)", + "notify": "Notificar uma única vez se o utilizador ainda estiver offline após o período estimado e de tolerância.", + "addSchedule": "Adicionar horário", + "schedules": "Horários", + "noSchedules": "Sem plano de manutenção.", + "completed": "Já começou", + "minutes_one": "{{count}} minuto", + "minutes_other": "{{count}} minutos", + "remove": "Remover agendamento", + "loadFailed": "Não foi possível atualizar o estado de manutenção. As alterações estão desativadas até que o estado seja carregado.", + "loading": "A carregar o estado de manutenção…" + }, + "ui": { + "sidebar": { + "automations": { + "options": { + "connect": "connect", + "disconnect": "disconnect", + "offline": "offline", + "online": "online", + "failing": "failing", + "recovered": "recovered" + } + } + } } } diff --git a/plugins/automations/locales/translated/ro_RO.json b/plugins/automations/locales/translated/ro_RO.json index ea56208ae..888b5da42 100644 --- a/plugins/automations/locales/translated/ro_RO.json +++ b/plugins/automations/locales/translated/ro_RO.json @@ -207,5 +207,19 @@ "remove": "Eliminați programul", "loadFailed": "Nu s-a putut actualiza starea de întreținere. Modificările sunt dezactivate până când pot fi încărcate.", "loading": "Se încarcă starea de întreținere…" + }, + "ui": { + "sidebar": { + "automations": { + "options": { + "connect": "connect", + "disconnect": "disconnect", + "offline": "offline", + "online": "online", + "failing": "failing", + "recovered": "recovered" + } + } + } } } diff --git a/plugins/automations/locales/translated/ru_RU.json b/plugins/automations/locales/translated/ru_RU.json index 956e266b0..1a23a95ca 100644 --- a/plugins/automations/locales/translated/ru_RU.json +++ b/plugins/automations/locales/translated/ru_RU.json @@ -1,163 +1,163 @@ { "permissions": { "view": { - "title": "View automations", - "description": "See the automations and their history." + "title": "Просмотреть автоматизации", + "description": "Ознакомьтесь с автоматизацией и её историей." }, "create": { - "title": "Create automations", - "description": "Add new automations." + "title": "Создавайте автоматизации", + "description": "Добавить новые автоматизации." }, "edit": { - "title": "Edit automations", - "description": "Change existing automations." + "title": "Редактировать автоматизацию", + "description": "Измените существующие автоматизации." }, "delete": { - "title": "Delete automations", - "description": "Remove automations." + "title": "Удалить автоматизации", + "description": "Удалите автоматизацию." }, "run": { - "title": "Run automations", - "description": "Trigger an automation by hand." + "title": "Запуск автоматизации", + "description": "Запустите автоматизацию вручную." } }, "newUi": { "sidebar": { "automations": { - "title": "Automations", - "tabAutomations": "Automations", - "tabRuns": "Runs", + "title": "Автоматизация", + "tabAutomations": "Автоматизация", + "tabRuns": "Беги", "tabChannels": "Каналы", - "createAutomation": "New Automation", - "backToAutomations": "Back to Automations", - "createTitle": "New Automation", - "editTitle": "Edit Automation", - "empty": "No automations yet. Create one to react to a metric, a schedule, or an event.", - "emptyRuns": "No runs yet.", - "channelsHint": "Channels are set up in Alerts", - "noChannelsHint": "The alert always goes to your inbox. Add channels in Alerts to also send it somewhere else.", + "createAutomation": "Новая автоматизация", + "backToAutomations": "Назад к автоматизации", + "createTitle": "Новая автоматизация", + "editTitle": "Редактировать автоматизацию", + "empty": "Автоматизации пока нет. Создайте автоматизацию, которая будет реагировать на показатель, расписание или событие.", + "emptyRuns": "Пока ни одного заезда.", + "channelsHint": "Каналы настраиваются в разделе «Оповещения».", + "noChannelsHint": "Уведомление всегда приходит в ваш почтовый ящик. Добавьте каналы в разделе «Уведомления», чтобы оно также отправлялось в другие места.", "nameLabel": "Название", - "namePlaceholder": "e.g., Clean up /data when it fills", + "namePlaceholder": "Например, очищать каталог /data, когда он заполняется.", "nameRequired": "Имя обязательно", "descriptionLabel": "Описание", "descriptionPlaceholder": "Необязательное описание", "enabledLabel": "Включено", - "concurrencyLabel": "If it is already running", - "concurrencyHint": "What to do when this is triggered again before the last run has finished.", + "concurrencyLabel": "Если он уже запущен", + "concurrencyHint": "Что делать, если это снова произойдет до завершения последнего запуска?", "concurrency": { - "skip": "Skip the new run", - "queue": "Wait and run after", - "allow": "Run both at once" + "skip": "Пропустите новый запуск", + "queue": "Подожди и беги после", + "allow": "Запустите оба одновременно." }, "save": "Сохранить", - "created": "Automation created", - "updated": "Automation saved", - "deleted": "Automation deleted", - "deleteConfirm": "Delete this automation? Its run history is deleted too.", - "runNow": "Run now", - "testRun": "Test run", - "testRunHint": "Runs every step but does not touch anything outside Termix.", - "runStarted": "Run started", - "runFinished": "Run finished: {{status}}", + "created": "Создана автоматизация", + "updated": "Автоматизация спасла", + "deleted": "Автоматизация удалена", + "deleteConfirm": "Удалить эту автоматизацию? История её выполнения также будет удалена.", + "runNow": "Запустите сейчас", + "testRun": "Тестовый запуск", + "testRunHint": "Программа выполняет каждый этап, но не затрагивает ничего за пределами Termix.", + "runStarted": "Запуск начался", + "runFinished": "Выполнение завершено: {{status}}", "trigger": "Триггер", - "steps": "Steps", - "addStep": "Add step", - "removeStep": "Remove step", - "moveUp": "Move up", - "moveDown": "Move down", - "noSteps": "No steps yet. Add one to say what should happen.", - "webhookTokenTitle": "Webhook URL", - "webhookTokenDescription": "This is shown once. Save it now, it cannot be retrieved later.", + "steps": "Шаги", + "addStep": "Добавить шаг", + "removeStep": "Удалить шаг", + "moveUp": "Поднимитесь выше", + "moveDown": "Спуститесь вниз", + "noSteps": "Шагов пока нет. Добавьте один, чтобы указать, что должно произойти.", + "webhookTokenTitle": "URL веб-перехватчика", + "webhookTokenDescription": "Эта информация отображается только один раз. Сохраните её сейчас, позже восстановить её будет невозможно.", "copy": "Копировать", "copied": "Скопировано", "viewJson": "JSON", - "viewBuilder": "Builder", - "viewGraph": "Graph", - "lastRun": "Last run", + "viewBuilder": "Строитель", + "viewGraph": "График", + "lastRun": "Последний забег", "never": "Никогда", - "duration": "{{seconds}}s", + "duration": "{{seconds}}с", "stepOutput": "Вывод", "stepError": "Ошибка", - "dryRunBadge": "Test run", + "dryRunBadge": "Тестовый запуск", "hostSelector": { - "trigger": "Triggering host", - "host": "Specific host", - "fleet": "Fleet", + "trigger": "Запуск хоста", + "host": "Конкретный хост", + "fleet": "Флот", "all": "Все хосты" }, "triggerKinds": { - "metric_threshold": "Metric threshold", - "host_status": "Host goes up or down", - "health_check": "Health check changes", - "schedule": "On a schedule", - "docker_event": "Container event", - "internal_event": "Termix event", - "webhook": "Incoming webhook" + "metric_threshold": "Пороговое значение метрики", + "host_status": "Хост переходит в режим повышения или понижения.", + "health_check": "Изменения в результатах медицинского осмотра", + "schedule": "По расписанию", + "docker_event": "Событие контейнера", + "internal_event": "Мероприятие Termix", + "webhook": "Входящий веб-хук" }, "stepTypes": { - "notify": "Send an alert", - "http": "Call a URL", - "run_snippet": "Run a snippet", - "run_command": "Run a command", - "docker": "Control a container", - "tunnel": "Control a tunnel", - "wol": "Wake a host", - "wait": "Wait", - "set_var": "Set a variable", - "if": "If / otherwise", - "run_automation": "Run another automation", + "notify": "Отправить оповещение", + "http": "Вызов URL-адреса", + "run_snippet": "Запустить фрагмент кода", + "run_command": "Выполните команду", + "docker": "Управлять контейнером", + "tunnel": "Контролируемый туннель", + "wol": "Разбудить хозяина", + "wait": "Ждать", + "set_var": "Задайте переменную", + "if": "Если / в противном случае", + "run_automation": "Запустите еще одну автоматизацию", "stop": "Остановить" }, "statuses": { "running": "Запущен", "success": "Успех", "failed": "Ошибка", - "timeout": "Timed out", - "skipped": "Skipped", - "cancelled": "Cancelled" + "timeout": "Время истекло", + "skipped": "Пропущено", + "cancelled": "Отменено" }, "fields": { "host": "Хост", "metric": "Метрика", - "mount": "Mount point", - "operator": "Is", - "value": "Value", - "forSeconds": "Sustained for (seconds)", + "mount": "Маунт-Пойнт", + "operator": "Является", + "value": "Ценить", + "forSeconds": "Длительность (секунды)", "cooldown": "Задержка повторения (минут)", - "cron": "Cron expression", - "intervalSeconds": "Every (seconds)", - "timezone": "Time zone", - "timezoneServer": "Server time", - "timezoneHint": "Cron times are read in this zone. Does not apply to interval schedules.", - "container": "Container", + "cron": "Выражение Cron", + "intervalSeconds": "Каждые (секунды)", + "timezone": "Часовой пояс", + "timezoneServer": "Время сервера", + "timezoneHint": "В этой зоне считываются временные параметры Cron. Это не относится к интервальным расписаниям.", + "container": "Контейнер", "command": "Команда", "url": "URL", - "method": "Method", - "body": "Body", - "channels": "Also send to", + "method": "Метод", + "body": "Тело", + "channels": "Также отправить на", "title": "Название", - "message": "Message", - "snippet": "Snippet", - "seconds": "Seconds", - "conditionLeftPlaceholder": "Value to check", - "conditionRightPlaceholder": "Compare against", - "variableName": "Variable name", - "variableValue": "Value", - "elevated": "Run with sudo", - "onError": "If this fails", - "allowPrivateNetwork": "Allow local network addresses", - "allowPrivateNetworkHint": "Needed for a self-hosted service on your LAN. Off by default to prevent requests to internal addresses." + "message": "Сообщение", + "snippet": "Фрагмент", + "seconds": "Секунды", + "conditionLeftPlaceholder": "Значение для проверки", + "conditionRightPlaceholder": "Сравните с", + "variableName": "Имя переменной", + "variableValue": "Ценить", + "elevated": "Запустить с правами суперпользователя (sudo)", + "onError": "Если это не поможет", + "allowPrivateNetwork": "Разрешить использование локальных сетевых адресов", + "allowPrivateNetworkHint": "Необходим для самостоятельного размещения сервиса в вашей локальной сети. По умолчанию отключен, чтобы предотвратить запросы к внутренним адресам." }, "onError": { - "stop": "Stop the run", - "continue": "Carry on" + "stop": "Остановить бег", + "continue": "Продолжать" }, - "needsPlugin": "Needs {{plugin}}", - "needsPluginHint": "This automation is skipped until the feature it needs is available again.", + "needsPlugin": "Потребности {{plugin}}", + "needsPluginHint": "Эта автоматизация пропускается до тех пор, пока необходимая функция снова не станет доступна.", "offBadge": "Отключено", "docsLink": "Документация", "ago": { - "seconds": "{{count}}s ago", + "seconds": "{{count}}s назад", "minutes": "{{count}}м назад", "hours": "{{count}}ч назад", "days": "{{count}}д назад" @@ -166,46 +166,60 @@ } }, "nav": { - "automations": "Automations" + "automations": "Автоматизация" }, "onboarding": { - "feature_automations": "Automations", - "feature_automations_desc": "Run steps automatically when something happens, and get notified." + "feature_automations": "Автоматизация", + "feature_automations_desc": "Запускайте шаги автоматически при возникновении событий и получайте уведомления." }, "maintenance": { "title": "Обслуживание", - "description": "Pause host status, health, metric, container and tunnel-disconnection automations while work is in progress. Monitoring, manual runs and scheduled automations continue.", - "denied": "You do not have permission to view maintenance.", - "sharedReadOnly": "This host was shared with you. Only its owner can change maintenance.", - "failed": "Maintenance could not be updated.", - "active": "Maintenance active", - "estimated": "Estimated completion", - "noAutoEnd": "The estimate does not end maintenance. End it explicitly when the work is complete.", - "endConfirm": "End maintenance and resume event-triggered automations for this host?", - "confirmEnd": "Confirm end", + "description": "Приостановите автоматизацию проверки состояния хоста, работоспособности, метрик, контейнеров и разрыва туннелей на время выполнения работ. Мониторинг, ручные запуски и запланированные автоматизации продолжатся.", + "denied": "У вас нет разрешения на просмотр информации о техническом обслуживании.", + "sharedReadOnly": "Этот хостинг был предоставлен вам. Только его владелец может вносить изменения в настройки технического обслуживания.", + "failed": "Обновление информации о техническом обслуживании не удалось.", + "active": "Техническое обслуживание активно", + "estimated": "Предполагаемая дата завершения", + "noAutoEnd": "Смета не завершает техническое обслуживание. Завершайте его, когда работы будут полностью выполнены.", + "endConfirm": "Завершить автоматизацию технического обслуживания и возобновить работу для этого хоста?", + "confirmEnd": "Подтвердить конец", "cancel": "Отмена", - "end": "End maintenance", + "end": "Завершение технического обслуживания", "action": "Действие", - "startNow": "Start now", - "schedule": "Schedule for later", - "reason": "Reason", - "startUtc": "First start (UTC)", - "repeat": "Repeat", - "once": "Once", - "weekly": "Weekly", - "monthly": "Monthly", - "utcHelp": "Schedules use UTC throughout the year. Monthly schedules skip months without the selected day. Planned windows cannot overlap; overrunning maintenance continues across later windows.", - "duration": "Estimated duration (minutes)", - "grace": "Grace period (minutes)", - "notify": "Notify once if still offline after the estimate plus grace period", - "addSchedule": "Add schedule", - "schedules": "Schedules", - "noSchedules": "No maintenance schedules.", - "completed": "Already started", - "minutes_one": "{{count}} minute", - "minutes_other": "{{count}} minutes", - "remove": "Remove schedule", - "loadFailed": "Could not refresh maintenance status. Changes are disabled until it can be loaded.", - "loading": "Loading maintenance status…" + "startNow": "Начните прямо сейчас", + "schedule": "Запланируйте на более позднее время", + "reason": "Причина", + "startUtc": "Первый запуск (UTC)", + "repeat": "Повторить", + "once": "Один раз", + "weekly": "Еженедельно", + "monthly": "Ежемесячно", + "utcHelp": "В расписаниях используется UTC в течение всего года. В месячных расписаниях пропускаются месяцы, в которых отсутствует выбранный день. Запланированные временные окна не могут перекрываться; работы по техническому обслуживанию, выполняемые в течение более поздних временных окон, продолжаются и в последующие.", + "duration": "Ориентировочная продолжительность (в минутах)", + "grace": "Льготный период (в минутах)", + "notify": "Если после истечения расчетного периода и льготного периода связь по-прежнему отсутствует, сообщите об этом один раз.", + "addSchedule": "Добавить расписание", + "schedules": "Расписания", + "noSchedules": "График технического обслуживания отсутствует.", + "completed": "Уже началось", + "minutes_one": "{{count}} минут", + "minutes_other": "{{count}} минут", + "remove": "Удалить расписание", + "loadFailed": "Не удалось обновить статус технического обслуживания. Изменения отключены до тех пор, пока не будет загружена соответствующая информация.", + "loading": "Статус технического обслуживания загрузки…" + }, + "ui": { + "sidebar": { + "automations": { + "options": { + "connect": "connect", + "disconnect": "disconnect", + "offline": "offline", + "online": "online", + "failing": "failing", + "recovered": "recovered" + } + } + } } } diff --git a/plugins/automations/locales/translated/sr_SP.json b/plugins/automations/locales/translated/sr_SP.json index b459b4ade..37dd8fe24 100644 --- a/plugins/automations/locales/translated/sr_SP.json +++ b/plugins/automations/locales/translated/sr_SP.json @@ -1,211 +1,225 @@ { "permissions": { "view": { - "title": "View automations", - "description": "See the automations and their history." + "title": "Прикажи аутоматизације", + "description": "Погледајте аутоматизације и њихову историју." }, "create": { - "title": "Create automations", - "description": "Add new automations." + "title": "Креирајте аутоматизације", + "description": "Додајте нове аутоматизације." }, "edit": { - "title": "Edit automations", - "description": "Change existing automations." + "title": "Уреди аутоматизације", + "description": "Промените постојеће аутоматизације." }, "delete": { - "title": "Delete automations", - "description": "Remove automations." + "title": "Обриши аутоматизације", + "description": "Уклоните аутоматизације." }, "run": { - "title": "Run automations", - "description": "Trigger an automation by hand." + "title": "Покрени аутоматизације", + "description": "Ручно покрените аутоматизацију." } }, "newUi": { "sidebar": { "automations": { - "title": "Automations", - "tabAutomations": "Automations", - "tabRuns": "Runs", - "tabChannels": "Channels", - "createAutomation": "New Automation", - "backToAutomations": "Back to Automations", - "createTitle": "New Automation", - "editTitle": "Edit Automation", - "empty": "No automations yet. Create one to react to a metric, a schedule, or an event.", - "emptyRuns": "No runs yet.", - "channelsHint": "Channels are set up in Alerts", - "noChannelsHint": "The alert always goes to your inbox. Add channels in Alerts to also send it somewhere else.", - "nameLabel": "Name", - "namePlaceholder": "e.g., Clean up /data when it fills", - "nameRequired": "Name is required", - "descriptionLabel": "Description", - "descriptionPlaceholder": "Optional description", - "enabledLabel": "Enabled", - "concurrencyLabel": "If it is already running", - "concurrencyHint": "What to do when this is triggered again before the last run has finished.", + "title": "Аутоматизације", + "tabAutomations": "Аутоматизације", + "tabRuns": "Трчи", + "tabChannels": "Канали", + "createAutomation": "Нова аутоматизација", + "backToAutomations": "Назад на аутоматизацију", + "createTitle": "Нова аутоматизација", + "editTitle": "Уреди аутоматизацију", + "empty": "Још увек нема аутоматизација. Направите једну да бисте реаговали на метрику, распоред или догађај.", + "emptyRuns": "Још нема трчања.", + "channelsHint": "Канали се подешавају у Обавештењима", + "noChannelsHint": "Обавештење увек иде у ваше пријемно сандуче. Додајте канале у Обавештења да бисте га послали и негде другде.", + "nameLabel": "Име", + "namePlaceholder": "нпр. Очисти /подаци када се попуне", + "nameRequired": "Име је обавезно", + "descriptionLabel": "Опис", + "descriptionPlaceholder": "Опциони опис", + "enabledLabel": "Омогућено", + "concurrencyLabel": "Ако већ ради", + "concurrencyHint": "Шта урадити када се ово поново покрене пре него што се заврши последње покретање.", "concurrency": { - "skip": "Skip the new run", - "queue": "Wait and run after", - "allow": "Run both at once" + "skip": "Прескочи нову вожњу", + "queue": "Чекај и трчи за њим", + "allow": "Покрени оба одједном" }, - "save": "Save", - "created": "Automation created", - "updated": "Automation saved", - "deleted": "Automation deleted", - "deleteConfirm": "Delete this automation? Its run history is deleted too.", - "runNow": "Run now", - "testRun": "Test run", - "testRunHint": "Runs every step but does not touch anything outside Termix.", - "runStarted": "Run started", - "runFinished": "Run finished: {{status}}", - "trigger": "Trigger", - "steps": "Steps", - "addStep": "Add step", - "removeStep": "Remove step", - "moveUp": "Move up", - "moveDown": "Move down", - "noSteps": "No steps yet. Add one to say what should happen.", - "webhookTokenTitle": "Webhook URL", - "webhookTokenDescription": "This is shown once. Save it now, it cannot be retrieved later.", - "copy": "Copy", - "copied": "Copied", + "save": "Сачувај", + "created": "Аутоматизација је креирана", + "updated": "Аутоматизација је сачувана", + "deleted": "Аутоматизација је обрисана", + "deleteConfirm": "Да ли желите да обришете ову аутоматизацију? Њена историја покретања је такође обрисана.", + "runNow": "Трчи сада", + "testRun": "Тестирање", + "testRunHint": "Покреће сваки корак, али не додирује ништа изван Термикса.", + "runStarted": "Трчање је започето", + "runFinished": "Трка завршена: {{status}}", + "trigger": "Окидач", + "steps": "Кораци", + "addStep": "Додај корак", + "removeStep": "Уклони корак", + "moveUp": "Помери горе", + "moveDown": "Помери надоле", + "noSteps": "Још нема корака. Додајте један да бисте рекли шта треба да се деси.", + "webhookTokenTitle": "URL вебхука", + "webhookTokenDescription": "Ово се приказује једном. Сачувајте то сада, не можете то касније преузети.", + "copy": "Копија", + "copied": "Копирано", "viewJson": "JSON", - "viewBuilder": "Builder", - "viewGraph": "Graph", - "lastRun": "Last run", - "never": "Never", - "duration": "{{seconds}}s", - "stepOutput": "Output", - "stepError": "Error", - "dryRunBadge": "Test run", + "viewBuilder": "Градитељ", + "viewGraph": "График", + "lastRun": "Последње трчање", + "never": "Никад", + "duration": "{{seconds}}с", + "stepOutput": "Излаз", + "stepError": "Грешка", + "dryRunBadge": "Тестирање", "hostSelector": { - "trigger": "Triggering host", - "host": "Specific host", - "fleet": "Fleet", - "all": "All hosts" + "trigger": "Покретач хоста", + "host": "Одређени домаћин", + "fleet": "Флота", + "all": "Сви домаћини" }, "triggerKinds": { - "metric_threshold": "Metric threshold", - "host_status": "Host goes up or down", - "health_check": "Health check changes", - "schedule": "On a schedule", - "docker_event": "Container event", - "internal_event": "Termix event", - "webhook": "Incoming webhook" + "metric_threshold": "Праг метрике", + "host_status": "Домаћин иде горе или доле", + "health_check": "Промене у провери исправности", + "schedule": "По распореду", + "docker_event": "Догађај контејнера", + "internal_event": "Термикс догађај", + "webhook": "Долазни вебхук" }, "stepTypes": { - "notify": "Send an alert", - "http": "Call a URL", - "run_snippet": "Run a snippet", - "run_command": "Run a command", - "docker": "Control a container", - "tunnel": "Control a tunnel", - "wol": "Wake a host", - "wait": "Wait", - "set_var": "Set a variable", - "if": "If / otherwise", - "run_automation": "Run another automation", - "stop": "Stop" + "notify": "Пошаљи упозорење", + "http": "Позовите URL", + "run_snippet": "Покрени исечак", + "run_command": "Покрените команду", + "docker": "Контролишите контејнер", + "tunnel": "Контролишите тунел", + "wol": "Пробудите домаћина", + "wait": "Чекај", + "set_var": "Поставите променљиву", + "if": "Ако / иначе", + "run_automation": "Покрените још једну аутоматизацију", + "stop": "Заустави" }, "statuses": { - "running": "Running", - "success": "Success", - "failed": "Failed", - "timeout": "Timed out", - "skipped": "Skipped", - "cancelled": "Cancelled" + "running": "Трчање", + "success": "Успех", + "failed": "Неуспешно", + "timeout": "Временско ограничење је истекло", + "skipped": "Прескочено", + "cancelled": "Отказано" }, "fields": { - "host": "Host", - "metric": "Metric", - "mount": "Mount point", - "operator": "Is", - "value": "Value", - "forSeconds": "Sustained for (seconds)", - "cooldown": "Cooldown (minutes)", - "cron": "Cron expression", - "intervalSeconds": "Every (seconds)", - "timezone": "Time zone", - "timezoneServer": "Server time", - "timezoneHint": "Cron times are read in this zone. Does not apply to interval schedules.", - "container": "Container", - "command": "Command", + "host": "Домаћин", + "metric": "Метрика", + "mount": "Тачка монтирања", + "operator": "Је", + "value": "Вредност", + "forSeconds": "Задржано (секунде)", + "cooldown": "Хлађење (минути)", + "cron": "Cron израз", + "intervalSeconds": "Сваких (секунде)", + "timezone": "Временска зона", + "timezoneServer": "Време сервера", + "timezoneHint": "Cron времена се очитавају у овој зони. Не односи се на интервалне распореде.", + "container": "Контејнер", + "command": "Команда", "url": "URL", - "method": "Method", - "body": "Body", - "channels": "Also send to", - "title": "Title", - "message": "Message", - "snippet": "Snippet", - "seconds": "Seconds", - "conditionLeftPlaceholder": "Value to check", - "conditionRightPlaceholder": "Compare against", - "variableName": "Variable name", - "variableValue": "Value", - "elevated": "Run with sudo", - "onError": "If this fails", - "allowPrivateNetwork": "Allow local network addresses", - "allowPrivateNetworkHint": "Needed for a self-hosted service on your LAN. Off by default to prevent requests to internal addresses." + "method": "Метод", + "body": "Тело", + "channels": "Такође пошаљите на", + "title": "Наслов", + "message": "Порука", + "snippet": "Исечак", + "seconds": "Секунде", + "conditionLeftPlaceholder": "Вредност за проверу", + "conditionRightPlaceholder": "Упореди са", + "variableName": "Назив променљиве", + "variableValue": "Вредност", + "elevated": "Покрени са sudo-ом", + "onError": "Ако ово не успе", + "allowPrivateNetwork": "Дозволи локалне мрежне адресе", + "allowPrivateNetworkHint": "Потребно за самостално хостовану услугу на вашој локалној мрежи. Подразумевано искључено да би се спречили захтеви ка интерним адресама." }, "onError": { - "stop": "Stop the run", - "continue": "Carry on" + "stop": "Заустави трчање", + "continue": "Настави" }, - "needsPlugin": "Needs {{plugin}}", - "needsPluginHint": "This automation is skipped until the feature it needs is available again.", - "offBadge": "Off", - "docsLink": "View docs", + "needsPlugin": "Потребно је {{plugin}}", + "needsPluginHint": "Ова аутоматизација се прескаче док функција која јој је потребна поново не буде доступна.", + "offBadge": "Искључено", + "docsLink": "Прикажи документе", "ago": { - "seconds": "{{count}}s ago", - "minutes": "{{count}}m ago", - "hours": "{{count}}h ago", - "days": "{{count}}d ago" + "seconds": "Пре {{count}}сек", + "minutes": "{{count}}пре мин", + "hours": "{{count}}пре сати", + "days": "{{count}}пре д" } } } }, "nav": { - "automations": "Automations" + "automations": "Аутоматизације" }, "onboarding": { - "feature_automations": "Automations", - "feature_automations_desc": "Run steps automatically when something happens, and get notified." + "feature_automations": "Аутоматизације", + "feature_automations_desc": "Аутоматски покрените кораке када се нешто деси и добијте обавештења." }, "maintenance": { - "title": "Maintenance", - "description": "Pause host status, health, metric, container and tunnel-disconnection automations while work is in progress. Monitoring, manual runs and scheduled automations continue.", - "denied": "You do not have permission to view maintenance.", - "sharedReadOnly": "This host was shared with you. Only its owner can change maintenance.", - "failed": "Maintenance could not be updated.", - "active": "Maintenance active", - "estimated": "Estimated completion", - "noAutoEnd": "The estimate does not end maintenance. End it explicitly when the work is complete.", - "endConfirm": "End maintenance and resume event-triggered automations for this host?", - "confirmEnd": "Confirm end", - "cancel": "Cancel", - "end": "End maintenance", - "action": "Action", - "startNow": "Start now", - "schedule": "Schedule for later", - "reason": "Reason", - "startUtc": "First start (UTC)", - "repeat": "Repeat", - "once": "Once", - "weekly": "Weekly", - "monthly": "Monthly", - "utcHelp": "Schedules use UTC throughout the year. Monthly schedules skip months without the selected day. Planned windows cannot overlap; overrunning maintenance continues across later windows.", - "duration": "Estimated duration (minutes)", - "grace": "Grace period (minutes)", - "notify": "Notify once if still offline after the estimate plus grace period", - "addSchedule": "Add schedule", - "schedules": "Schedules", - "noSchedules": "No maintenance schedules.", - "completed": "Already started", - "minutes_one": "{{count}} minute", - "minutes_other": "{{count}} minutes", - "remove": "Remove schedule", - "loadFailed": "Could not refresh maintenance status. Changes are disabled until it can be loaded.", - "loading": "Loading maintenance status…" + "title": "Одржавање", + "description": "Паузирајте аутоматизације статуса хоста, здравља, метрике, контејнера и тунелског искључивања док је рад у току. Праћење, ручна покретања и заказане аутоматизације се настављају.", + "denied": "Немате дозволу за преглед одржавања.", + "sharedReadOnly": "Овај хост је дељен са вама. Само његов власник може да промени одржавање.", + "failed": "Ажурирање одржавања није успело.", + "active": "Одржавање је активно", + "estimated": "Процењени завршетак", + "noAutoEnd": "Процена не завршава одржавање. Завршите га експлицитно када је посао завршен.", + "endConfirm": "Да ли желите да завршите одржавање и наставите аутоматизације покренуте догађајима за овог хоста?", + "confirmEnd": "Потврди крај", + "cancel": "Откажи", + "end": "Заврши одржавање", + "action": "Акција", + "startNow": "Почни сада", + "schedule": "Закажите за касније", + "reason": "Разлог", + "startUtc": "Први почетак (UTC)", + "repeat": "Понови", + "once": "Једном", + "weekly": "Недељно", + "monthly": "Месечно", + "utcHelp": "Распореди користе UTC време током целе године. Месечни распореди прескачу месеце без изабраног дана. Планирани прозори се не могу преклапати; преоптерећено одржавање се наставља и у каснијим прозорима.", + "duration": "Процењено трајање (минути)", + "grace": "Грејс период (минути)", + "notify": "Обавести ме једном ако је и даље ван мреже након процене плус грејс период", + "addSchedule": "Додај распоред", + "schedules": "Распореди", + "noSchedules": "Нема распореда одржавања.", + "completed": "Већ је почело", + "minutes_one": "{{count}} минут", + "minutes_other": "{{count}} минута", + "remove": "Уклони распоред", + "loadFailed": "Није могуће освежити статус одржавања. Промене су онемогућене док се не учита.", + "loading": "Учитавање статуса одржавања…" + }, + "ui": { + "sidebar": { + "automations": { + "options": { + "connect": "connect", + "disconnect": "disconnect", + "offline": "offline", + "online": "online", + "failing": "failing", + "recovered": "recovered" + } + } + } } } diff --git a/plugins/automations/locales/translated/sv_SE.json b/plugins/automations/locales/translated/sv_SE.json index b459b4ade..4bedfbe04 100644 --- a/plugins/automations/locales/translated/sv_SE.json +++ b/plugins/automations/locales/translated/sv_SE.json @@ -1,211 +1,225 @@ { "permissions": { "view": { - "title": "View automations", - "description": "See the automations and their history." + "title": "Visa automatiseringar", + "description": "Se automatiseringarna och deras historik." }, "create": { - "title": "Create automations", - "description": "Add new automations." + "title": "Skapa automatiseringar", + "description": "Lägg till nya automatiseringar." }, "edit": { - "title": "Edit automations", - "description": "Change existing automations." + "title": "Redigera automatiseringar", + "description": "Ändra befintliga automatiseringar." }, "delete": { - "title": "Delete automations", - "description": "Remove automations." + "title": "Ta bort automatiseringar", + "description": "Ta bort automatiseringar." }, "run": { - "title": "Run automations", - "description": "Trigger an automation by hand." + "title": "Kör automatiseringar", + "description": "Utlös en automatisering manuellt." } }, "newUi": { "sidebar": { "automations": { - "title": "Automations", - "tabAutomations": "Automations", - "tabRuns": "Runs", - "tabChannels": "Channels", - "createAutomation": "New Automation", - "backToAutomations": "Back to Automations", - "createTitle": "New Automation", - "editTitle": "Edit Automation", - "empty": "No automations yet. Create one to react to a metric, a schedule, or an event.", - "emptyRuns": "No runs yet.", - "channelsHint": "Channels are set up in Alerts", - "noChannelsHint": "The alert always goes to your inbox. Add channels in Alerts to also send it somewhere else.", - "nameLabel": "Name", - "namePlaceholder": "e.g., Clean up /data when it fills", - "nameRequired": "Name is required", - "descriptionLabel": "Description", - "descriptionPlaceholder": "Optional description", - "enabledLabel": "Enabled", - "concurrencyLabel": "If it is already running", - "concurrencyHint": "What to do when this is triggered again before the last run has finished.", + "title": "Automatiseringar", + "tabAutomations": "Automatiseringar", + "tabRuns": "Löpningar", + "tabChannels": "Kanaler", + "createAutomation": "Ny automatisering", + "backToAutomations": "Tillbaka till Automatiseringar", + "createTitle": "Ny automatisering", + "editTitle": "Redigera automatisering", + "empty": "Inga automatiseringar ännu. Skapa en för att reagera på ett mätvärde, ett schema eller en händelse.", + "emptyRuns": "Inga löpningar än.", + "channelsHint": "Kanaler konfigureras i aviseringar", + "noChannelsHint": "Aviseringen skickas alltid till din inkorg. Lägg till kanaler i Aviseringar för att även skicka den någon annanstans.", + "nameLabel": "Namn", + "namePlaceholder": "t.ex. Rensa upp /data när den fylls", + "nameRequired": "Namn krävs", + "descriptionLabel": "Beskrivning", + "descriptionPlaceholder": "Valfri beskrivning", + "enabledLabel": "Aktiverad", + "concurrencyLabel": "Om den redan är igång", + "concurrencyHint": "Vad man ska göra när detta utlöses igen innan den sista körningen är klar.", "concurrency": { - "skip": "Skip the new run", - "queue": "Wait and run after", - "allow": "Run both at once" + "skip": "Hoppa över den nya körningen", + "queue": "Vänta och spring efter", + "allow": "Kör båda samtidigt" }, - "save": "Save", - "created": "Automation created", - "updated": "Automation saved", - "deleted": "Automation deleted", - "deleteConfirm": "Delete this automation? Its run history is deleted too.", - "runNow": "Run now", - "testRun": "Test run", - "testRunHint": "Runs every step but does not touch anything outside Termix.", - "runStarted": "Run started", - "runFinished": "Run finished: {{status}}", - "trigger": "Trigger", - "steps": "Steps", - "addStep": "Add step", - "removeStep": "Remove step", - "moveUp": "Move up", - "moveDown": "Move down", - "noSteps": "No steps yet. Add one to say what should happen.", - "webhookTokenTitle": "Webhook URL", - "webhookTokenDescription": "This is shown once. Save it now, it cannot be retrieved later.", - "copy": "Copy", - "copied": "Copied", + "save": "Spara", + "created": "Automatisering skapad", + "updated": "Automatisering sparad", + "deleted": "Automatisering borttagen", + "deleteConfirm": "Vill du ta bort den här automatiseringen? Dess körhistorik raderas också.", + "runNow": "Kör nu", + "testRun": "Testkörning", + "testRunHint": "Kör varje steg men rör ingenting utanför Termix.", + "runStarted": "Löpningen har startat", + "runFinished": "Körning avslutad: {{status}}", + "trigger": "Utlösare", + "steps": "Steg", + "addStep": "Lägg till steg", + "removeStep": "Ta bort steg", + "moveUp": "Flytta upp", + "moveDown": "Flytta nedåt", + "noSteps": "Inga steg ännu. Lägg till ett för att ange vad som ska hända.", + "webhookTokenTitle": "Webhook-URL", + "webhookTokenDescription": "Detta visas en gång. Spara det nu, det kan inte hämtas senare.", + "copy": "Kopiera", + "copied": "Kopierad", "viewJson": "JSON", - "viewBuilder": "Builder", - "viewGraph": "Graph", - "lastRun": "Last run", - "never": "Never", + "viewBuilder": "Byggmästare", + "viewGraph": "Graf", + "lastRun": "Sista körningen", + "never": "Aldrig", "duration": "{{seconds}}s", - "stepOutput": "Output", - "stepError": "Error", - "dryRunBadge": "Test run", + "stepOutput": "Produktion", + "stepError": "Fel", + "dryRunBadge": "Testkörning", "hostSelector": { - "trigger": "Triggering host", - "host": "Specific host", - "fleet": "Fleet", - "all": "All hosts" + "trigger": "Utlösande värd", + "host": "Specifik värd", + "fleet": "Flotta", + "all": "Alla värdar" }, "triggerKinds": { - "metric_threshold": "Metric threshold", - "host_status": "Host goes up or down", - "health_check": "Health check changes", - "schedule": "On a schedule", - "docker_event": "Container event", - "internal_event": "Termix event", - "webhook": "Incoming webhook" + "metric_threshold": "Metrisk tröskelvärde", + "host_status": "Värden går upp eller ner", + "health_check": "Ändringar i hälsokontrollen", + "schedule": "Enligt ett schema", + "docker_event": "Containerhändelse", + "internal_event": "Termix-evenemang", + "webhook": "Inkommande webhook" }, "stepTypes": { - "notify": "Send an alert", - "http": "Call a URL", - "run_snippet": "Run a snippet", - "run_command": "Run a command", - "docker": "Control a container", - "tunnel": "Control a tunnel", - "wol": "Wake a host", - "wait": "Wait", - "set_var": "Set a variable", - "if": "If / otherwise", - "run_automation": "Run another automation", - "stop": "Stop" + "notify": "Skicka en avisering", + "http": "Anropa en URL", + "run_snippet": "Kör ett utdrag", + "run_command": "Kör ett kommando", + "docker": "Styr en container", + "tunnel": "Kontrollera en tunnel", + "wol": "Väck en värd", + "wait": "Vänta", + "set_var": "Ställ in en variabel", + "if": "Om / annars", + "run_automation": "Kör en annan automatisering", + "stop": "Stopp" }, "statuses": { - "running": "Running", - "success": "Success", - "failed": "Failed", - "timeout": "Timed out", - "skipped": "Skipped", - "cancelled": "Cancelled" + "running": "Spring", + "success": "Framgång", + "failed": "Misslyckades", + "timeout": "Timeout", + "skipped": "Hoppade över", + "cancelled": "Avbruten" }, "fields": { - "host": "Host", - "metric": "Metric", - "mount": "Mount point", - "operator": "Is", - "value": "Value", - "forSeconds": "Sustained for (seconds)", - "cooldown": "Cooldown (minutes)", - "cron": "Cron expression", - "intervalSeconds": "Every (seconds)", - "timezone": "Time zone", - "timezoneServer": "Server time", - "timezoneHint": "Cron times are read in this zone. Does not apply to interval schedules.", - "container": "Container", - "command": "Command", + "host": "Värd", + "metric": "Metrisk", + "mount": "Monteringspunkt", + "operator": "Är", + "value": "Värde", + "forSeconds": "Uthållen i (sekunder)", + "cooldown": "Nedkylningstid (minuter)", + "cron": "Cron-uttryck", + "intervalSeconds": "Varje (sekund)", + "timezone": "Tidszon", + "timezoneServer": "Servertid", + "timezoneHint": "Cron-tider läses i denna zon. Gäller inte för intervallscheman.", + "container": "Behållare", + "command": "Kommando", "url": "URL", - "method": "Method", - "body": "Body", - "channels": "Also send to", - "title": "Title", - "message": "Message", - "snippet": "Snippet", - "seconds": "Seconds", - "conditionLeftPlaceholder": "Value to check", - "conditionRightPlaceholder": "Compare against", - "variableName": "Variable name", - "variableValue": "Value", - "elevated": "Run with sudo", - "onError": "If this fails", - "allowPrivateNetwork": "Allow local network addresses", - "allowPrivateNetworkHint": "Needed for a self-hosted service on your LAN. Off by default to prevent requests to internal addresses." + "method": "Metod", + "body": "Kropp", + "channels": "Skicka även till", + "title": "Titel", + "message": "Meddelande", + "snippet": "Utdrag", + "seconds": "Sekunder", + "conditionLeftPlaceholder": "Värde att kontrollera", + "conditionRightPlaceholder": "Jämför mot", + "variableName": "Variabelnamn", + "variableValue": "Värde", + "elevated": "Kör med sudo", + "onError": "Om detta misslyckas", + "allowPrivateNetwork": "Tillåt lokala nätverksadresser", + "allowPrivateNetworkHint": "Behövs för en självhostad tjänst på ditt lokala nätverk. Avstängt som standard för att förhindra förfrågningar till interna adresser." }, "onError": { - "stop": "Stop the run", - "continue": "Carry on" + "stop": "Stoppa löpningen", + "continue": "Fortsätta" }, - "needsPlugin": "Needs {{plugin}}", - "needsPluginHint": "This automation is skipped until the feature it needs is available again.", - "offBadge": "Off", - "docsLink": "View docs", + "needsPlugin": "Behöver {{plugin}}", + "needsPluginHint": "Denna automatisering hoppas över tills den funktion den behöver är tillgänglig igen.", + "offBadge": "Av", + "docsLink": "Visa dokument", "ago": { - "seconds": "{{count}}s ago", - "minutes": "{{count}}m ago", - "hours": "{{count}}h ago", - "days": "{{count}}d ago" + "seconds": "{{count}}sekunder sedan", + "minutes": "för {{count}}minuter sedan", + "hours": "för {{count}}timmar sedan", + "days": "för {{count}}dagar sedan" } } } }, "nav": { - "automations": "Automations" + "automations": "Automatiseringar" }, "onboarding": { - "feature_automations": "Automations", - "feature_automations_desc": "Run steps automatically when something happens, and get notified." + "feature_automations": "Automatiseringar", + "feature_automations_desc": "Kör steg automatiskt när något händer och få aviseringar." }, "maintenance": { - "title": "Maintenance", - "description": "Pause host status, health, metric, container and tunnel-disconnection automations while work is in progress. Monitoring, manual runs and scheduled automations continue.", - "denied": "You do not have permission to view maintenance.", - "sharedReadOnly": "This host was shared with you. Only its owner can change maintenance.", - "failed": "Maintenance could not be updated.", - "active": "Maintenance active", - "estimated": "Estimated completion", - "noAutoEnd": "The estimate does not end maintenance. End it explicitly when the work is complete.", - "endConfirm": "End maintenance and resume event-triggered automations for this host?", - "confirmEnd": "Confirm end", - "cancel": "Cancel", - "end": "End maintenance", - "action": "Action", - "startNow": "Start now", - "schedule": "Schedule for later", - "reason": "Reason", - "startUtc": "First start (UTC)", - "repeat": "Repeat", - "once": "Once", - "weekly": "Weekly", - "monthly": "Monthly", - "utcHelp": "Schedules use UTC throughout the year. Monthly schedules skip months without the selected day. Planned windows cannot overlap; overrunning maintenance continues across later windows.", - "duration": "Estimated duration (minutes)", - "grace": "Grace period (minutes)", - "notify": "Notify once if still offline after the estimate plus grace period", - "addSchedule": "Add schedule", - "schedules": "Schedules", - "noSchedules": "No maintenance schedules.", - "completed": "Already started", - "minutes_one": "{{count}} minute", - "minutes_other": "{{count}} minutes", - "remove": "Remove schedule", - "loadFailed": "Could not refresh maintenance status. Changes are disabled until it can be loaded.", - "loading": "Loading maintenance status…" + "title": "Underhåll", + "description": "Pausa automatiseringar för värdstatus, hälsa, mätvärden, container- och tunnelfrånkoppling medan arbetet pågår. Övervakning, manuella körningar och schemalagda automatiseringar fortsätter.", + "denied": "Du har inte behörighet att visa underhåll.", + "sharedReadOnly": "Denna värden delades med dig. Endast dess ägare kan ändra underhållet.", + "failed": "Underhållet kunde inte uppdateras.", + "active": "Underhåll aktivt", + "estimated": "Beräknad färdigställande", + "noAutoEnd": "Uppskattningen avslutar inte underhållet. Avsluta det uttryckligen när arbetet är slutfört.", + "endConfirm": "Vill du avsluta underhållet och återuppta händelseutlösta automatiseringar för den här värden?", + "confirmEnd": "Bekräfta slutet", + "cancel": "Avboka", + "end": "Avsluta underhåll", + "action": "Handling", + "startNow": "Börja nu", + "schedule": "Schema för senare", + "reason": "Resonera", + "startUtc": "Första start (UTC)", + "repeat": "Upprepa", + "once": "En gång", + "weekly": "Varje vecka", + "monthly": "Månatlig", + "utcHelp": "Scheman använder UTC under hela året. Månadsscheman hoppar över månader utan vald dag. Planerade fönster kan inte överlappa varandra; underhåll som överskrider schemat fortsätter över senare fönster.", + "duration": "Beräknad varaktighet (minuter)", + "grace": "Respitperiod (minuter)", + "notify": "Meddela en gång om du fortfarande är offline efter uppskattningen plus respitperioden", + "addSchedule": "Lägg till schema", + "schedules": "Scheman", + "noSchedules": "Inga underhållsscheman.", + "completed": "Redan påbörjat", + "minutes_one": "{{count}} minut", + "minutes_other": "{{count}} minuter", + "remove": "Ta bort schema", + "loadFailed": "Kunde inte uppdatera underhållsstatusen. Ändringar är inaktiverade tills den kan läsas in.", + "loading": "Laddar underhållsstatus…" + }, + "ui": { + "sidebar": { + "automations": { + "options": { + "connect": "connect", + "disconnect": "disconnect", + "offline": "offline", + "online": "online", + "failing": "failing", + "recovered": "recovered" + } + } + } } } diff --git a/plugins/automations/locales/translated/th_TH.json b/plugins/automations/locales/translated/th_TH.json index b459b4ade..5ae551ef1 100644 --- a/plugins/automations/locales/translated/th_TH.json +++ b/plugins/automations/locales/translated/th_TH.json @@ -1,211 +1,225 @@ { "permissions": { "view": { - "title": "View automations", - "description": "See the automations and their history." + "title": "ดูระบบอัตโนมัติ", + "description": "ดูการทำงานอัตโนมัติและประวัติการทำงาน" }, "create": { - "title": "Create automations", - "description": "Add new automations." + "title": "สร้างระบบอัตโนมัติ", + "description": "เพิ่มระบบอัตโนมัติใหม่" }, "edit": { - "title": "Edit automations", - "description": "Change existing automations." + "title": "แก้ไขระบบอัตโนมัติ", + "description": "ปรับเปลี่ยนระบบอัตโนมัติที่มีอยู่เดิม" }, "delete": { - "title": "Delete automations", - "description": "Remove automations." + "title": "ลบระบบอัตโนมัติ", + "description": "ลบระบบอัตโนมัติออก" }, "run": { - "title": "Run automations", - "description": "Trigger an automation by hand." + "title": "เรียกใช้ระบบอัตโนมัติ", + "description": "สั่งการให้ระบบอัตโนมัติทำงานด้วยตนเอง" } }, "newUi": { "sidebar": { "automations": { - "title": "Automations", - "tabAutomations": "Automations", - "tabRuns": "Runs", - "tabChannels": "Channels", - "createAutomation": "New Automation", - "backToAutomations": "Back to Automations", - "createTitle": "New Automation", - "editTitle": "Edit Automation", - "empty": "No automations yet. Create one to react to a metric, a schedule, or an event.", - "emptyRuns": "No runs yet.", - "channelsHint": "Channels are set up in Alerts", - "noChannelsHint": "The alert always goes to your inbox. Add channels in Alerts to also send it somewhere else.", - "nameLabel": "Name", - "namePlaceholder": "e.g., Clean up /data when it fills", - "nameRequired": "Name is required", - "descriptionLabel": "Description", - "descriptionPlaceholder": "Optional description", - "enabledLabel": "Enabled", - "concurrencyLabel": "If it is already running", - "concurrencyHint": "What to do when this is triggered again before the last run has finished.", + "title": "ระบบอัตโนมัติ", + "tabAutomations": "ระบบอัตโนมัติ", + "tabRuns": "วิ่ง", + "tabChannels": "ช่องต่างๆ", + "createAutomation": "ระบบอัตโนมัติใหม่", + "backToAutomations": "กลับสู่ระบบอัตโนมัติ", + "createTitle": "ระบบอัตโนมัติใหม่", + "editTitle": "แก้ไขอัตโนมัติ", + "empty": "ยังไม่มีระบบอัตโนมัติใดๆ สร้างระบบอัตโนมัติเพื่อตอบสนองต่อตัวชี้วัด กำหนดการ หรือเหตุการณ์ต่างๆ", + "emptyRuns": "ยังไม่มีการทดลองใดๆ เกิดขึ้น", + "channelsHint": "ช่องทางต่างๆ ถูกตั้งค่าไว้ในระบบแจ้งเตือน", + "noChannelsHint": "การแจ้งเตือนจะส่งไปยังกล่องจดหมายเข้าของคุณเสมอ เพิ่มช่องทางการแจ้งเตือนเพื่อส่งไปยังที่อื่นเพิ่มเติมได้", + "nameLabel": "ชื่อ", + "namePlaceholder": "เช่น ล้างข้อมูลใน /data เมื่อเต็ม", + "nameRequired": "ต้องระบุชื่อ", + "descriptionLabel": "คำอธิบาย", + "descriptionPlaceholder": "คำอธิบายเพิ่มเติม (ไม่บังคับ)", + "enabledLabel": "เปิดใช้งาน", + "concurrencyLabel": "หากกำลังทำงานอยู่แล้ว", + "concurrencyHint": "ควรทำอย่างไรเมื่อเหตุการณ์นี้เกิดขึ้นอีกครั้งก่อนที่การทำงานครั้งสุดท้ายจะเสร็จสิ้น", "concurrency": { - "skip": "Skip the new run", - "queue": "Wait and run after", - "allow": "Run both at once" + "skip": "ข้ามการวิ่งรอบใหม่ไป", + "queue": "รอและวิ่งตาม", + "allow": "เรียกใช้ทั้งสองอย่างพร้อมกัน" }, - "save": "Save", - "created": "Automation created", - "updated": "Automation saved", - "deleted": "Automation deleted", - "deleteConfirm": "Delete this automation? Its run history is deleted too.", - "runNow": "Run now", - "testRun": "Test run", - "testRunHint": "Runs every step but does not touch anything outside Termix.", - "runStarted": "Run started", - "runFinished": "Run finished: {{status}}", - "trigger": "Trigger", - "steps": "Steps", - "addStep": "Add step", - "removeStep": "Remove step", - "moveUp": "Move up", - "moveDown": "Move down", - "noSteps": "No steps yet. Add one to say what should happen.", - "webhookTokenTitle": "Webhook URL", - "webhookTokenDescription": "This is shown once. Save it now, it cannot be retrieved later.", - "copy": "Copy", - "copied": "Copied", - "viewJson": "JSON", - "viewBuilder": "Builder", - "viewGraph": "Graph", - "lastRun": "Last run", - "never": "Never", + "save": "บันทึก", + "created": "ระบบอัตโนมัติสร้างขึ้น", + "updated": "ระบบอัตโนมัติได้รับการบันทึกแล้ว", + "deleted": "ระบบอัตโนมัติลบแล้ว", + "deleteConfirm": "ลบระบบอัตโนมัตินี้แล้วใช่ไหม? ประวัติการทำงานของมันก็จะถูกลบไปด้วย", + "runNow": "วิ่งเลยตอนนี้", + "testRun": "การทดสอบการทำงาน", + "testRunHint": "ทำงานทุกขั้นตอน แต่ไม่แตะต้องสิ่งใดนอกเหนือจาก Termix", + "runStarted": "การวิ่งเริ่มต้นขึ้นแล้ว", + "runFinished": "การทำงานเสร็จสิ้น: {{status}}", + "trigger": "สิ่งกระตุ้น", + "steps": "ขั้นตอน", + "addStep": "เพิ่มขั้นตอน", + "removeStep": "ลบขั้นตอน", + "moveUp": "เลื่อนขึ้น", + "moveDown": "เลื่อนลง", + "noSteps": "ยังไม่มีขั้นตอนใดๆ เพิ่มขั้นตอนเพื่ออธิบายว่าควรเกิดอะไรขึ้น", + "webhookTokenTitle": "URL ของเว็บฮุค", + "webhookTokenDescription": "แสดงเพียงครั้งเดียว บันทึกตอนนี้ ไม่สามารถเรียกดูซ้ำได้ในภายหลัง", + "copy": "สำเนา", + "copied": "คัดลอกแล้ว", + "viewJson": "เจซอน", + "viewBuilder": "ผู้สร้าง", + "viewGraph": "กราฟ", + "lastRun": "การวิ่งครั้งสุดท้าย", + "never": "ไม่เคย", "duration": "{{seconds}}s", - "stepOutput": "Output", - "stepError": "Error", - "dryRunBadge": "Test run", + "stepOutput": "เอาต์พุต", + "stepError": "ข้อผิดพลาด", + "dryRunBadge": "การทดสอบการทำงาน", "hostSelector": { - "trigger": "Triggering host", - "host": "Specific host", - "fleet": "Fleet", - "all": "All hosts" + "trigger": "โฮสต์ทริกเกอร์", + "host": "โฮสต์เฉพาะ", + "fleet": "กองเรือ", + "all": "โฮสต์ทั้งหมด" }, "triggerKinds": { - "metric_threshold": "Metric threshold", - "host_status": "Host goes up or down", - "health_check": "Health check changes", - "schedule": "On a schedule", - "docker_event": "Container event", - "internal_event": "Termix event", - "webhook": "Incoming webhook" + "metric_threshold": "เกณฑ์เมตริก", + "host_status": "โฮสต์ขึ้นหรือลง", + "health_check": "การเปลี่ยนแปลงการตรวจสุขภาพ", + "schedule": "ตามกำหนดเวลา", + "docker_event": "เหตุการณ์คอนเทนเนอร์", + "internal_event": "กิจกรรมเทอร์มิกซ์", + "webhook": "เว็บฮุคขาเข้า" }, "stepTypes": { - "notify": "Send an alert", - "http": "Call a URL", - "run_snippet": "Run a snippet", - "run_command": "Run a command", - "docker": "Control a container", - "tunnel": "Control a tunnel", - "wol": "Wake a host", - "wait": "Wait", - "set_var": "Set a variable", - "if": "If / otherwise", - "run_automation": "Run another automation", - "stop": "Stop" + "notify": "ส่งการแจ้งเตือน", + "http": "เรียกใช้ URL", + "run_snippet": "เรียกใช้โค้ดตัวอย่าง", + "run_command": "เรียกใช้คำสั่ง", + "docker": "ควบคุมคอนเทนเนอร์", + "tunnel": "ควบคุมอุโมงค์", + "wol": "ปลุกโฮสต์", + "wait": "รอ", + "set_var": "ตั้งค่าตัวแปร", + "if": "ถ้า / มิฉะนั้น", + "run_automation": "เรียกใช้ระบบอัตโนมัติอีกครั้ง", + "stop": "หยุด" }, "statuses": { - "running": "Running", - "success": "Success", - "failed": "Failed", - "timeout": "Timed out", - "skipped": "Skipped", - "cancelled": "Cancelled" + "running": "วิ่ง", + "success": "ความสำเร็จ", + "failed": "ล้มเหลว", + "timeout": "หมดเวลา", + "skipped": "ข้ามไป", + "cancelled": "ยกเลิก" }, "fields": { - "host": "Host", - "metric": "Metric", - "mount": "Mount point", - "operator": "Is", - "value": "Value", - "forSeconds": "Sustained for (seconds)", - "cooldown": "Cooldown (minutes)", - "cron": "Cron expression", - "intervalSeconds": "Every (seconds)", - "timezone": "Time zone", - "timezoneServer": "Server time", - "timezoneHint": "Cron times are read in this zone. Does not apply to interval schedules.", - "container": "Container", - "command": "Command", + "host": "เจ้าภาพ", + "metric": "เมตริก", + "mount": "จุดยึด", + "operator": "เป็น", + "value": "ค่า", + "forSeconds": "ต่อเนื่องเป็นเวลา (วินาที)", + "cooldown": "ระยะเวลาคูลดาวน์ (นาที)", + "cron": "การแสดงออกของ Cron", + "intervalSeconds": "ทุกๆ (วินาที)", + "timezone": "เขตเวลา", + "timezoneServer": "เวลาเซิร์ฟเวอร์", + "timezoneHint": "เวลาของ Cron จะอ่านได้ในโซนนี้ ไม่สามารถใช้ได้กับตารางเวลาแบบช่วงเวลา", + "container": "คอนเทนเนอร์", + "command": "สั่งการ", "url": "URL", - "method": "Method", - "body": "Body", - "channels": "Also send to", - "title": "Title", - "message": "Message", - "snippet": "Snippet", - "seconds": "Seconds", - "conditionLeftPlaceholder": "Value to check", - "conditionRightPlaceholder": "Compare against", - "variableName": "Variable name", - "variableValue": "Value", - "elevated": "Run with sudo", - "onError": "If this fails", - "allowPrivateNetwork": "Allow local network addresses", - "allowPrivateNetworkHint": "Needed for a self-hosted service on your LAN. Off by default to prevent requests to internal addresses." + "method": "วิธี", + "body": "ร่างกาย", + "channels": "ส่งไปที่ด้วยเช่นกัน", + "title": "ชื่อ", + "message": "ข้อความ", + "snippet": "ส่วนหนึ่ง", + "seconds": "วินาที", + "conditionLeftPlaceholder": "ค่าที่ต้องตรวจสอบ", + "conditionRightPlaceholder": "เปรียบเทียบกับ", + "variableName": "ชื่อตัวแปร", + "variableValue": "ค่า", + "elevated": "เรียกใช้ด้วยคำสั่ง sudo", + "onError": "หากวิธีนี้ล้มเหลว", + "allowPrivateNetwork": "อนุญาตให้ใช้ที่อยู่เครือข่ายท้องถิ่น", + "allowPrivateNetworkHint": "จำเป็นสำหรับบริการที่โฮสต์เองบนเครือข่าย LAN ของคุณ โดยค่าเริ่มต้นจะปิดใช้งานเพื่อป้องกันการร้องขอไปยังที่อยู่ภายใน" }, "onError": { - "stop": "Stop the run", - "continue": "Carry on" + "stop": "หยุดการวิ่ง", + "continue": "ดำเนินการต่อไป" }, - "needsPlugin": "Needs {{plugin}}", - "needsPluginHint": "This automation is skipped until the feature it needs is available again.", - "offBadge": "Off", - "docsLink": "View docs", + "needsPlugin": "ต้องการ {{plugin}}", + "needsPluginHint": "กระบวนการอัตโนมัตินี้จะถูกข้ามไปจนกว่าฟีเจอร์ที่ต้องการจะพร้อมใช้งานอีกครั้ง", + "offBadge": "ปิด", + "docsLink": "ดูเอกสาร", "ago": { - "seconds": "{{count}}s ago", - "minutes": "{{count}}m ago", - "hours": "{{count}}h ago", - "days": "{{count}}d ago" + "seconds": "{{count}}วินาทีที่แล้ว", + "minutes": "{{count}}นาทีที่แล้ว", + "hours": "{{count}}ชั่วโมงที่แล้ว", + "days": "{{count}}วันก่อน" } } } }, "nav": { - "automations": "Automations" + "automations": "ระบบอัตโนมัติ" }, "onboarding": { - "feature_automations": "Automations", - "feature_automations_desc": "Run steps automatically when something happens, and get notified." + "feature_automations": "ระบบอัตโนมัติ", + "feature_automations_desc": "ดำเนินการตามขั้นตอนโดยอัตโนมัติเมื่อเกิดเหตุการณ์ใดๆ และรับการแจ้งเตือน" }, "maintenance": { - "title": "Maintenance", - "description": "Pause host status, health, metric, container and tunnel-disconnection automations while work is in progress. Monitoring, manual runs and scheduled automations continue.", - "denied": "You do not have permission to view maintenance.", - "sharedReadOnly": "This host was shared with you. Only its owner can change maintenance.", - "failed": "Maintenance could not be updated.", - "active": "Maintenance active", - "estimated": "Estimated completion", - "noAutoEnd": "The estimate does not end maintenance. End it explicitly when the work is complete.", - "endConfirm": "End maintenance and resume event-triggered automations for this host?", - "confirmEnd": "Confirm end", - "cancel": "Cancel", - "end": "End maintenance", - "action": "Action", - "startNow": "Start now", - "schedule": "Schedule for later", - "reason": "Reason", - "startUtc": "First start (UTC)", - "repeat": "Repeat", - "once": "Once", - "weekly": "Weekly", - "monthly": "Monthly", - "utcHelp": "Schedules use UTC throughout the year. Monthly schedules skip months without the selected day. Planned windows cannot overlap; overrunning maintenance continues across later windows.", - "duration": "Estimated duration (minutes)", - "grace": "Grace period (minutes)", - "notify": "Notify once if still offline after the estimate plus grace period", - "addSchedule": "Add schedule", - "schedules": "Schedules", - "noSchedules": "No maintenance schedules.", - "completed": "Already started", - "minutes_one": "{{count}} minute", - "minutes_other": "{{count}} minutes", - "remove": "Remove schedule", - "loadFailed": "Could not refresh maintenance status. Changes are disabled until it can be loaded.", - "loading": "Loading maintenance status…" + "title": "การซ่อมบำรุง", + "description": "หยุดการตรวจสอบสถานะโฮสต์ สุขภาพ เมตริก คอนเทนเนอร์ และการตัดการเชื่อมต่ออุโมงค์โดยอัตโนมัติชั่วคราวในระหว่างการดำเนินการ การตรวจสอบ การเรียกใช้งานด้วยตนเอง และการทำงานอัตโนมัติตามกำหนดเวลายังคงดำเนินต่อไป", + "denied": "คุณไม่มีสิทธิ์ในการดูข้อมูลการบำรุงรักษา", + "sharedReadOnly": "โฮสต์นี้ถูกแชร์กับคุณ เจ้าของโฮสต์เท่านั้นที่สามารถเปลี่ยนแปลงการบำรุงรักษาได้", + "failed": "ไม่สามารถอัปเดตการบำรุงรักษาได้", + "active": "กำลังดำเนินการบำรุงรักษา", + "estimated": "คาดว่าจะแล้วเสร็จ", + "noAutoEnd": "การประเมินราคาไม่ได้หมายความว่าการบำรุงรักษาจะสิ้นสุดลง ให้ยุติการบำรุงรักษาอย่างชัดเจนเมื่อการทำงานเสร็จสมบูรณ์แล้ว", + "endConfirm": "สิ้นสุดโหมดบำรุงรักษาและเริ่มการทำงานอัตโนมัติที่ทำงานเมื่อเกิดเหตุการณ์สำหรับโฮสต์นี้อีกครั้งหรือไม่?", + "confirmEnd": "ยืนยันการสิ้นสุด", + "cancel": "ยกเลิก", + "end": "สิ้นสุดการบำรุงรักษา", + "action": "การกระทำ", + "startNow": "เริ่มเลยตอนนี้", + "schedule": "กำหนดเวลาสำหรับภายหลัง", + "reason": "เหตุผล", + "startUtc": "เริ่มครั้งแรก (UTC)", + "repeat": "ทำซ้ำ", + "once": "ครั้งหนึ่ง", + "weekly": "รายสัปดาห์", + "monthly": "รายเดือน", + "utcHelp": "ตารางงานใช้เวลา UTC ตลอดทั้งปี ตารางงานรายเดือนจะข้ามเดือนที่ไม่มีวันที่เลือกไว้ ช่วงเวลาที่วางแผนไว้ไม่สามารถทับซ้อนกันได้ การบำรุงรักษาที่ล่าช้าจะดำเนินการต่อในช่วงเวลาถัดไป", + "duration": "ระยะเวลาโดยประมาณ (นาที)", + "grace": "ระยะเวลาผ่อนผัน (นาที)", + "notify": "แจ้งเตือนครั้งเดียวหากยังคงออฟไลน์หลังจากเวลาที่คาดการณ์และช่วงเวลาผ่อนผันเสร็จสิ้นแล้ว", + "addSchedule": "เพิ่มตารางเวลา", + "schedules": "ตารางเวลา", + "noSchedules": "ไม่มีกำหนดการบำรุงรักษา", + "completed": "เริ่มแล้ว", + "minutes_one": "{{count}} นาที", + "minutes_other": "{{count}} นาที", + "remove": "ลบกำหนดการ", + "loadFailed": "ไม่สามารถรีเฟรชสถานะการบำรุงรักษาได้ การเปลี่ยนแปลงจะถูกปิดใช้งานจนกว่าจะสามารถโหลดได้", + "loading": "กำลังโหลดสถานะการบำรุงรักษา…" + }, + "ui": { + "sidebar": { + "automations": { + "options": { + "connect": "connect", + "disconnect": "disconnect", + "offline": "offline", + "online": "online", + "failing": "failing", + "recovered": "recovered" + } + } + } } } diff --git a/plugins/automations/locales/translated/tr_TR.json b/plugins/automations/locales/translated/tr_TR.json index 219593365..e12e6701c 100644 --- a/plugins/automations/locales/translated/tr_TR.json +++ b/plugins/automations/locales/translated/tr_TR.json @@ -1,163 +1,163 @@ { "permissions": { "view": { - "title": "View automations", - "description": "See the automations and their history." + "title": "Otomasyonları görüntüle", + "description": "Otomasyonları ve tarihçelerini inceleyin." }, "create": { - "title": "Create automations", - "description": "Add new automations." + "title": "Otomasyonlar oluşturun", + "description": "Yeni otomasyonlar ekleyin." }, "edit": { - "title": "Edit automations", - "description": "Change existing automations." + "title": "Düzenleme otomasyonları", + "description": "Mevcut otomasyonları değiştirin." }, "delete": { - "title": "Delete automations", - "description": "Remove automations." + "title": "Otomasyonları sil", + "description": "Otomasyonları kaldırın." }, "run": { - "title": "Run automations", - "description": "Trigger an automation by hand." + "title": "Otomasyonları çalıştır", + "description": "Otomasyonu manuel olarak tetikleyin." } }, "newUi": { "sidebar": { "automations": { - "title": "Automations", - "tabAutomations": "Automations", - "tabRuns": "Runs", + "title": "Otomasyonlar", + "tabAutomations": "Otomasyonlar", + "tabRuns": "Koşular", "tabChannels": "Kanallar", - "createAutomation": "New Automation", - "backToAutomations": "Back to Automations", - "createTitle": "New Automation", - "editTitle": "Edit Automation", - "empty": "No automations yet. Create one to react to a metric, a schedule, or an event.", - "emptyRuns": "No runs yet.", - "channelsHint": "Channels are set up in Alerts", - "noChannelsHint": "The alert always goes to your inbox. Add channels in Alerts to also send it somewhere else.", + "createAutomation": "Yeni Otomasyon", + "backToAutomations": "Otomasyonlara geri dön", + "createTitle": "Yeni Otomasyon", + "editTitle": "Düzenleme Otomasyonu", + "empty": "Henüz otomasyon yok. Bir ölçüme, bir programa veya bir olaya tepki verecek bir otomasyon oluşturun.", + "emptyRuns": "Henüz hiçbir deneme yapılmadı.", + "channelsHint": "Uyarılar bölümünde kanallar oluşturulur.", + "noChannelsHint": "Bildirim her zaman gelen kutunuza gönderilir. Bildirimleri başka bir yere de göndermek için Bildirimler bölümüne kanallar ekleyin.", "nameLabel": "Ad", - "namePlaceholder": "e.g., Clean up /data when it fills", + "namePlaceholder": "Örneğin, /data klasörü dolduğunda temizle.", "nameRequired": "Ad zorunludur", "descriptionLabel": "Açıklama", "descriptionPlaceholder": "İsteğe bağlı açıklama", "enabledLabel": "Etkin", - "concurrencyLabel": "If it is already running", - "concurrencyHint": "What to do when this is triggered again before the last run has finished.", + "concurrencyLabel": "Eğer zaten çalışıyorsa", + "concurrencyHint": "Son çalıştırma tamamlanmadan önce bu durum tekrar tetiklendiğinde ne yapılmalı?", "concurrency": { - "skip": "Skip the new run", - "queue": "Wait and run after", - "allow": "Run both at once" + "skip": "Yeni sürümü atla", + "queue": "Bekle ve sonra koş", + "allow": "İkisini birden çalıştırın" }, "save": "Kaydet", - "created": "Automation created", - "updated": "Automation saved", - "deleted": "Automation deleted", - "deleteConfirm": "Delete this automation? Its run history is deleted too.", - "runNow": "Run now", - "testRun": "Test run", - "testRunHint": "Runs every step but does not touch anything outside Termix.", - "runStarted": "Run started", - "runFinished": "Run finished: {{status}}", + "created": "Otomasyon oluşturuldu", + "updated": "Otomasyon kaydedildi", + "deleted": "Otomasyon silindi", + "deleteConfirm": "Bu otomasyonu silerseniz, çalıştırma geçmişi de silinir.", + "runNow": "Şimdi çalıştır", + "testRun": "Test çalıştırması", + "testRunHint": "Her adımı çalıştırır ancak Termix dışındaki hiçbir şeye dokunmaz.", + "runStarted": "Koşu başladı", + "runFinished": "Çalıştırma tamamlandı: {{status}}", "trigger": "Tetikleyici", - "steps": "Steps", - "addStep": "Add step", - "removeStep": "Remove step", - "moveUp": "Move up", - "moveDown": "Move down", - "noSteps": "No steps yet. Add one to say what should happen.", + "steps": "Adımlar", + "addStep": "Adım ekle", + "removeStep": "Adımı kaldır", + "moveUp": "Yukarı çık", + "moveDown": "Aşağıya doğru hareket edin", + "noSteps": "Henüz hiçbir adım yok. Ne olması gerektiğini belirtmek için bir adım ekleyin.", "webhookTokenTitle": "Webhook URL", - "webhookTokenDescription": "This is shown once. Save it now, it cannot be retrieved later.", + "webhookTokenDescription": "Bu yalnızca bir kez gösterilecektir. Şimdi kaydedin, daha sonra geri alınamaz.", "copy": "Kopyala", "copied": "Kopyalandı", "viewJson": "JSON", - "viewBuilder": "Builder", - "viewGraph": "Graph", - "lastRun": "Last run", + "viewBuilder": "İnşaatçı", + "viewGraph": "Grafik", + "lastRun": "Son koşu", "never": "Hiçbir zaman", "duration": "{{seconds}}s", "stepOutput": "Çıktı", "stepError": "Hata", - "dryRunBadge": "Test run", + "dryRunBadge": "Test çalıştırması", "hostSelector": { - "trigger": "Triggering host", - "host": "Specific host", - "fleet": "Fleet", + "trigger": "Tetikleyici sunucu", + "host": "Belirli ev sahibi", + "fleet": "Filo", "all": "Tüm sunucular" }, "triggerKinds": { - "metric_threshold": "Metric threshold", - "host_status": "Host goes up or down", - "health_check": "Health check changes", - "schedule": "On a schedule", - "docker_event": "Container event", - "internal_event": "Termix event", - "webhook": "Incoming webhook" + "metric_threshold": "Metrik eşik", + "host_status": "Sunucu yukarı veya aşağı hareket eder.", + "health_check": "Sağlık kontrolü değişiklikleri", + "schedule": "Bir program dahilinde", + "docker_event": "Konteyner olayı", + "internal_event": "Termix etkinliği", + "webhook": "Gelen web kancası" }, "stepTypes": { - "notify": "Send an alert", - "http": "Call a URL", - "run_snippet": "Run a snippet", - "run_command": "Run a command", - "docker": "Control a container", - "tunnel": "Control a tunnel", - "wol": "Wake a host", - "wait": "Wait", - "set_var": "Set a variable", - "if": "If / otherwise", - "run_automation": "Run another automation", + "notify": "Uyarı gönder", + "http": "Bir URL'yi çağırın", + "run_snippet": "Bir kod parçası çalıştırın.", + "run_command": "Bir komut çalıştır", + "docker": "Bir konteyneri kontrol edin.", + "tunnel": "Bir tüneli kontrol edin.", + "wol": "Bir ev sahibini uyandırın", + "wait": "Beklemek", + "set_var": "Bir değişken tanımlayın", + "if": "Eğer / aksi takdirde", + "run_automation": "Başka bir otomasyon çalıştırın", "stop": "Durdurma" }, "statuses": { "running": "Çalışıyor", "success": "Başarılı", "failed": "Başarısız", - "timeout": "Timed out", - "skipped": "Skipped", - "cancelled": "Cancelled" + "timeout": "Süre doldu", + "skipped": "Atlandı", + "cancelled": "İptal edildi" }, "fields": { "host": "Ana Bilgisayar", "metric": "Metrik", - "mount": "Mount point", - "operator": "Is", - "value": "Value", - "forSeconds": "Sustained for (seconds)", + "mount": "Montaj noktası", + "operator": "O", + "value": "Değer", + "forSeconds": "(Saniye) süreyle sürdürüldü", "cooldown": "Bekleme süresi (dakika)", - "cron": "Cron expression", - "intervalSeconds": "Every (seconds)", - "timezone": "Time zone", - "timezoneServer": "Server time", - "timezoneHint": "Cron times are read in this zone. Does not apply to interval schedules.", - "container": "Container", + "cron": "Cron ifadesi", + "intervalSeconds": "Her (saniye)", + "timezone": "Saat dilimi", + "timezoneServer": "Sunucu zamanı", + "timezoneHint": "Cron zamanlama ayarları bu bölgede okunur. Aralıklı zamanlamalar için geçerli değildir.", + "container": "Konteyner", "command": "Komut", "url": "URL", - "method": "Method", - "body": "Body", - "channels": "Also send to", + "method": "Yöntem", + "body": "Vücut", + "channels": "Ayrıca şuraya da gönderin:", "title": "Başlık", - "message": "Message", - "snippet": "Snippet", - "seconds": "Seconds", - "conditionLeftPlaceholder": "Value to check", - "conditionRightPlaceholder": "Compare against", - "variableName": "Variable name", - "variableValue": "Value", - "elevated": "Run with sudo", - "onError": "If this fails", - "allowPrivateNetwork": "Allow local network addresses", - "allowPrivateNetworkHint": "Needed for a self-hosted service on your LAN. Off by default to prevent requests to internal addresses." + "message": "Mesaj", + "snippet": "Alıntı", + "seconds": "Saniyeler", + "conditionLeftPlaceholder": "Kontrol edilecek değer", + "conditionRightPlaceholder": "Karşılaştırın", + "variableName": "Değişken adı", + "variableValue": "Değer", + "elevated": "sudo ile çalıştır", + "onError": "Eğer bu başarısız olursa", + "allowPrivateNetwork": "Yerel ağ adreslerine izin verin.", + "allowPrivateNetworkHint": "Yerel ağınızda kendi sunucunuzda barındırdığınız bir hizmet için gereklidir. Dahili adreslere yapılan istekleri engellemek için varsayılan olarak kapalıdır." }, "onError": { - "stop": "Stop the run", - "continue": "Carry on" + "stop": "Koşuyu durdurun", + "continue": "Devam edin" }, - "needsPlugin": "Needs {{plugin}}", - "needsPluginHint": "This automation is skipped until the feature it needs is available again.", + "needsPlugin": "İhtiyaçlar {{plugin}}", + "needsPluginHint": "Bu otomasyon, ihtiyaç duyulan özellik tekrar kullanılabilir hale gelene kadar atlanır.", "offBadge": "Kapalı", "docsLink": "Belgelere bak", "ago": { - "seconds": "{{count}}s ago", + "seconds": "{{count}}saniye önce", "minutes": "{{count}} dakika önce", "hours": "{{count}} saat önce", "days": "{{count}} gün önce" @@ -166,46 +166,60 @@ } }, "nav": { - "automations": "Automations" + "automations": "Otomasyonlar" }, "onboarding": { - "feature_automations": "Automations", - "feature_automations_desc": "Run steps automatically when something happens, and get notified." + "feature_automations": "Otomasyonlar", + "feature_automations_desc": "Bir şey olduğunda adımları otomatik olarak çalıştırın ve bildirim alın." }, "maintenance": { "title": "Bakım", - "description": "Pause host status, health, metric, container and tunnel-disconnection automations while work is in progress. Monitoring, manual runs and scheduled automations continue.", - "denied": "You do not have permission to view maintenance.", - "sharedReadOnly": "This host was shared with you. Only its owner can change maintenance.", - "failed": "Maintenance could not be updated.", - "active": "Maintenance active", - "estimated": "Estimated completion", - "noAutoEnd": "The estimate does not end maintenance. End it explicitly when the work is complete.", - "endConfirm": "End maintenance and resume event-triggered automations for this host?", - "confirmEnd": "Confirm end", + "description": "Çalışma devam ederken sunucu durumu, sağlık, ölçüm, konteyner ve tünel bağlantı kesme otomasyonlarını duraklatın. İzleme, manuel çalıştırmalar ve planlanmış otomasyonlar devam eder.", + "denied": "Bakım çalışmalarını görüntüleme izniniz yok.", + "sharedReadOnly": "Bu sunucu sizinle paylaşıldı. Bakım değişikliklerini yalnızca sahibi yapabilir.", + "failed": "Bakım bilgileri güncellenemedi.", + "active": "Bakım aktif", + "estimated": "Tahmini tamamlanma tarihi", + "noAutoEnd": "Tahmin edilen bakım işlemi, bakımın sonunu getirmez. İş tamamlandığında bakım işlemini açıkça sonlandırın.", + "endConfirm": "Bu sunucu için bakım işlemlerini sonlandırıp olay tetiklemeli otomasyonları yeniden başlatmak mı istiyorsunuz?", + "confirmEnd": "Sonu onaylayın", "cancel": "İptal", - "end": "End maintenance", + "end": "Son bakım", "action": "İşlem", - "startNow": "Start now", - "schedule": "Schedule for later", - "reason": "Reason", - "startUtc": "First start (UTC)", - "repeat": "Repeat", - "once": "Once", - "weekly": "Weekly", - "monthly": "Monthly", - "utcHelp": "Schedules use UTC throughout the year. Monthly schedules skip months without the selected day. Planned windows cannot overlap; overrunning maintenance continues across later windows.", - "duration": "Estimated duration (minutes)", - "grace": "Grace period (minutes)", - "notify": "Notify once if still offline after the estimate plus grace period", - "addSchedule": "Add schedule", - "schedules": "Schedules", - "noSchedules": "No maintenance schedules.", - "completed": "Already started", - "minutes_one": "{{count}} minute", - "minutes_other": "{{count}} minutes", - "remove": "Remove schedule", - "loadFailed": "Could not refresh maintenance status. Changes are disabled until it can be loaded.", - "loading": "Loading maintenance status…" + "startNow": "Şimdi başla", + "schedule": "Daha sonra için planla", + "reason": "Sebep", + "startUtc": "İlk başlangıç (UTC)", + "repeat": "Tekrarlamak", + "once": "Bir kere", + "weekly": "Haftalık", + "monthly": "Aylık", + "utcHelp": "Planlamalar yıl boyunca UTC saat dilimini kullanır. Aylık planlamalar, seçilen günün olmadığı ayları atlar. Planlanan zaman dilimleri üst üste gelemez; uzadıkça bakım çalışmaları daha sonraki zaman dilimlerinde de devam eder.", + "duration": "Tahmini süre (dakika)", + "grace": "Bekleme süresi (dakika)", + "notify": "Tahmini süre ve ek bekleme süresinden sonra hala çevrimdışıysa bir kez bildirim gönderin.", + "addSchedule": "Program ekle", + "schedules": "Programlar", + "noSchedules": "Bakım programı yok.", + "completed": "Zaten başladı", + "minutes_one": "{{count}} dakika", + "minutes_other": "{{count}} dakika", + "remove": "Programı kaldır", + "loadFailed": "Bakım durumu yenilenemedi. Yüklenene kadar değişiklikler devre dışı bırakılmıştır.", + "loading": "Bakım durumu yükleniyor…" + }, + "ui": { + "sidebar": { + "automations": { + "options": { + "connect": "connect", + "disconnect": "disconnect", + "offline": "offline", + "online": "online", + "failing": "failing", + "recovered": "recovered" + } + } + } } } diff --git a/plugins/automations/locales/translated/uk_UA.json b/plugins/automations/locales/translated/uk_UA.json index b459b4ade..374d96bda 100644 --- a/plugins/automations/locales/translated/uk_UA.json +++ b/plugins/automations/locales/translated/uk_UA.json @@ -1,211 +1,225 @@ { "permissions": { "view": { - "title": "View automations", - "description": "See the automations and their history." + "title": "Переглянути автоматизації", + "description": "Перегляньте автоматизації та їхню історію." }, "create": { - "title": "Create automations", - "description": "Add new automations." + "title": "Створення автоматизацій", + "description": "Додайте нові автоматизації." }, "edit": { - "title": "Edit automations", - "description": "Change existing automations." + "title": "Редагувати автоматизації", + "description": "Змінити існуючі автоматизації." }, "delete": { - "title": "Delete automations", - "description": "Remove automations." + "title": "Видалити автоматизації", + "description": "Видаліть автоматизації." }, "run": { - "title": "Run automations", - "description": "Trigger an automation by hand." + "title": "Запуск автоматизації", + "description": "Запустіть автоматизацію вручну." } }, "newUi": { "sidebar": { "automations": { - "title": "Automations", - "tabAutomations": "Automations", - "tabRuns": "Runs", - "tabChannels": "Channels", - "createAutomation": "New Automation", - "backToAutomations": "Back to Automations", - "createTitle": "New Automation", - "editTitle": "Edit Automation", - "empty": "No automations yet. Create one to react to a metric, a schedule, or an event.", - "emptyRuns": "No runs yet.", - "channelsHint": "Channels are set up in Alerts", - "noChannelsHint": "The alert always goes to your inbox. Add channels in Alerts to also send it somewhere else.", - "nameLabel": "Name", - "namePlaceholder": "e.g., Clean up /data when it fills", - "nameRequired": "Name is required", - "descriptionLabel": "Description", - "descriptionPlaceholder": "Optional description", - "enabledLabel": "Enabled", - "concurrencyLabel": "If it is already running", - "concurrencyHint": "What to do when this is triggered again before the last run has finished.", + "title": "Автоматизація", + "tabAutomations": "Автоматизація", + "tabRuns": "Пробіжки", + "tabChannels": "Канали", + "createAutomation": "Нова автоматизація", + "backToAutomations": "Назад до автоматизації", + "createTitle": "Нова автоматизація", + "editTitle": "Редагувати автоматизацію", + "empty": "Автоматизації поки що немає. Створіть її, щоб реагувати на метрику, розклад або подію.", + "emptyRuns": "Поки що жодних пробіжок.", + "channelsHint": "Канали налаштовуються в розділі «Сповіщення»", + "noChannelsHint": "Сповіщення завжди надходить до вашої поштової скриньки. Додайте канали в розділі \"Сповіщення\", щоб також надсилати його кудись ще.", + "nameLabel": "Ім'я", + "namePlaceholder": "наприклад, Очищати /дані, коли вони заповнюються", + "nameRequired": "Ім'я обов'язкове", + "descriptionLabel": "Опис", + "descriptionPlaceholder": "Додатковий опис", + "enabledLabel": "Увімкнено", + "concurrencyLabel": "Якщо воно вже працює", + "concurrencyHint": "Що робити, якщо це спрацьовує знову до завершення останнього запуску.", "concurrency": { - "skip": "Skip the new run", - "queue": "Wait and run after", - "allow": "Run both at once" + "skip": "Пропустити новий пробіг", + "queue": "Чекай і біжіть за ним", + "allow": "Запустіть обидва одночасно" }, - "save": "Save", - "created": "Automation created", - "updated": "Automation saved", - "deleted": "Automation deleted", - "deleteConfirm": "Delete this automation? Its run history is deleted too.", - "runNow": "Run now", - "testRun": "Test run", - "testRunHint": "Runs every step but does not touch anything outside Termix.", - "runStarted": "Run started", - "runFinished": "Run finished: {{status}}", - "trigger": "Trigger", - "steps": "Steps", - "addStep": "Add step", - "removeStep": "Remove step", - "moveUp": "Move up", - "moveDown": "Move down", - "noSteps": "No steps yet. Add one to say what should happen.", - "webhookTokenTitle": "Webhook URL", - "webhookTokenDescription": "This is shown once. Save it now, it cannot be retrieved later.", - "copy": "Copy", - "copied": "Copied", + "save": "Зберегти", + "created": "Автоматизація створена", + "updated": "Автоматизація збережена", + "deleted": "Автоматизацію видалено", + "deleteConfirm": "Видалити цю автоматизацію? Історія її запуску також видаляється.", + "runNow": "Біжи зараз", + "testRun": "Тестовий запуск", + "testRunHint": "Виконує кожен крок, але не торкається нічого поза Termix.", + "runStarted": "Біг розпочато", + "runFinished": "Виконання завершено: {{status}}", + "trigger": "Тригер", + "steps": "Кроки", + "addStep": "Додати крок", + "removeStep": "Видалити крок", + "moveUp": "Перемістити вгору", + "moveDown": "Перемістити вниз", + "noSteps": "Кроків поки що немає. Додайте один, щоб пояснити, що має статися.", + "webhookTokenTitle": "URL-адреса вебхука", + "webhookTokenDescription": "Це відображається один раз. Збережіть це зараз, пізніше це неможливо буде отримати.", + "copy": "Копіювати", + "copied": "Скопійовано", "viewJson": "JSON", - "viewBuilder": "Builder", - "viewGraph": "Graph", - "lastRun": "Last run", - "never": "Never", - "duration": "{{seconds}}s", - "stepOutput": "Output", - "stepError": "Error", - "dryRunBadge": "Test run", + "viewBuilder": "Будівельник", + "viewGraph": "Графік", + "lastRun": "Останній запуск", + "never": "Ніколи", + "duration": "{{seconds}}с", + "stepOutput": "Вихід", + "stepError": "Помилка", + "dryRunBadge": "Тестовий запуск", "hostSelector": { - "trigger": "Triggering host", - "host": "Specific host", - "fleet": "Fleet", - "all": "All hosts" + "trigger": "Хост-тригер", + "host": "Конкретний хост", + "fleet": "Флот", + "all": "Усі хости" }, "triggerKinds": { - "metric_threshold": "Metric threshold", - "host_status": "Host goes up or down", - "health_check": "Health check changes", - "schedule": "On a schedule", - "docker_event": "Container event", - "internal_event": "Termix event", - "webhook": "Incoming webhook" + "metric_threshold": "Поріг показника", + "host_status": "Хост піднімається або опускається", + "health_check": "Зміни в перевірці стану здоров'я", + "schedule": "За розкладом", + "docker_event": "Подія контейнера", + "internal_event": "Подія Termix", + "webhook": "Вхідний вебхук" }, "stepTypes": { - "notify": "Send an alert", - "http": "Call a URL", - "run_snippet": "Run a snippet", - "run_command": "Run a command", - "docker": "Control a container", - "tunnel": "Control a tunnel", - "wol": "Wake a host", - "wait": "Wait", - "set_var": "Set a variable", - "if": "If / otherwise", - "run_automation": "Run another automation", - "stop": "Stop" + "notify": "Надіслати сповіщення", + "http": "Виклик URL-адреси", + "run_snippet": "Виконати фрагмент коду", + "run_command": "Виконайте команду", + "docker": "Керування контейнером", + "tunnel": "Контролюйте тунель", + "wol": "Розбудити господаря", + "wait": "Зачекайте", + "set_var": "Встановити змінну", + "if": "Якщо / інакше", + "run_automation": "Запустіть ще одну автоматизацію", + "stop": "СТІЙ" }, "statuses": { - "running": "Running", - "success": "Success", - "failed": "Failed", - "timeout": "Timed out", - "skipped": "Skipped", - "cancelled": "Cancelled" + "running": "Біг", + "success": "Успіх", + "failed": "Не вдалося", + "timeout": "Час очікування минув", + "skipped": "Пропущено", + "cancelled": "Скасовано" }, "fields": { - "host": "Host", - "metric": "Metric", - "mount": "Mount point", - "operator": "Is", - "value": "Value", - "forSeconds": "Sustained for (seconds)", - "cooldown": "Cooldown (minutes)", - "cron": "Cron expression", - "intervalSeconds": "Every (seconds)", - "timezone": "Time zone", - "timezoneServer": "Server time", - "timezoneHint": "Cron times are read in this zone. Does not apply to interval schedules.", - "container": "Container", - "command": "Command", - "url": "URL", - "method": "Method", - "body": "Body", - "channels": "Also send to", - "title": "Title", - "message": "Message", - "snippet": "Snippet", - "seconds": "Seconds", - "conditionLeftPlaceholder": "Value to check", - "conditionRightPlaceholder": "Compare against", - "variableName": "Variable name", - "variableValue": "Value", - "elevated": "Run with sudo", - "onError": "If this fails", - "allowPrivateNetwork": "Allow local network addresses", - "allowPrivateNetworkHint": "Needed for a self-hosted service on your LAN. Off by default to prevent requests to internal addresses." + "host": "Хост", + "metric": "Метрика", + "mount": "Точка монтування", + "operator": "Є", + "value": "Значення", + "forSeconds": "Триває протягом (секунд)", + "cooldown": "Охолодження (хвилини)", + "cron": "Cron-вираз", + "intervalSeconds": "Кожні (секунди)", + "timezone": "Часовий пояс", + "timezoneServer": "Час сервера", + "timezoneHint": "Час Cron зчитується в цій зоні. Не стосується інтервальних розкладів.", + "container": "Контейнер", + "command": "Команда", + "url": "URL-адреса", + "method": "Метод", + "body": "Тіло", + "channels": "Також надіслати до", + "title": "Назва", + "message": "Повідомлення", + "snippet": "Фрагмент", + "seconds": "Секунди", + "conditionLeftPlaceholder": "Значення для перевірки", + "conditionRightPlaceholder": "Порівняйте з", + "variableName": "Ім'я змінної", + "variableValue": "Значення", + "elevated": "Запустити за допомогою sudo", + "onError": "Якщо це не вдасться", + "allowPrivateNetwork": "Дозволити адреси локальної мережі", + "allowPrivateNetworkHint": "Потрібно для самостійно розміщеної служби у вашій локальній мережі. Вимкнено за замовчуванням, щоб запобігти запитам до внутрішніх адрес." }, "onError": { - "stop": "Stop the run", - "continue": "Carry on" + "stop": "Зупинити біг", + "continue": "Продовжуйте" }, - "needsPlugin": "Needs {{plugin}}", - "needsPluginHint": "This automation is skipped until the feature it needs is available again.", - "offBadge": "Off", - "docsLink": "View docs", + "needsPlugin": "Потребує {{plugin}}", + "needsPluginHint": "Ця автоматизація пропускається, доки потрібна функція знову не стане доступною.", + "offBadge": "Вимкнено", + "docsLink": "Переглянути документи", "ago": { - "seconds": "{{count}}s ago", - "minutes": "{{count}}m ago", - "hours": "{{count}}h ago", - "days": "{{count}}d ago" + "seconds": "{{count}}с тому", + "minutes": "{{count}}хв тому", + "hours": "{{count}}год тому", + "days": "{{count}}днів тому" } } } }, "nav": { - "automations": "Automations" + "automations": "Автоматизація" }, "onboarding": { - "feature_automations": "Automations", - "feature_automations_desc": "Run steps automatically when something happens, and get notified." + "feature_automations": "Автоматизація", + "feature_automations_desc": "Автоматично виконувати кроки, коли щось відбувається, та отримувати сповіщення." }, "maintenance": { - "title": "Maintenance", - "description": "Pause host status, health, metric, container and tunnel-disconnection automations while work is in progress. Monitoring, manual runs and scheduled automations continue.", - "denied": "You do not have permission to view maintenance.", - "sharedReadOnly": "This host was shared with you. Only its owner can change maintenance.", - "failed": "Maintenance could not be updated.", - "active": "Maintenance active", - "estimated": "Estimated completion", - "noAutoEnd": "The estimate does not end maintenance. End it explicitly when the work is complete.", - "endConfirm": "End maintenance and resume event-triggered automations for this host?", - "confirmEnd": "Confirm end", - "cancel": "Cancel", - "end": "End maintenance", - "action": "Action", - "startNow": "Start now", - "schedule": "Schedule for later", - "reason": "Reason", - "startUtc": "First start (UTC)", - "repeat": "Repeat", - "once": "Once", - "weekly": "Weekly", - "monthly": "Monthly", - "utcHelp": "Schedules use UTC throughout the year. Monthly schedules skip months without the selected day. Planned windows cannot overlap; overrunning maintenance continues across later windows.", - "duration": "Estimated duration (minutes)", - "grace": "Grace period (minutes)", - "notify": "Notify once if still offline after the estimate plus grace period", - "addSchedule": "Add schedule", - "schedules": "Schedules", - "noSchedules": "No maintenance schedules.", - "completed": "Already started", - "minutes_one": "{{count}} minute", - "minutes_other": "{{count}} minutes", - "remove": "Remove schedule", - "loadFailed": "Could not refresh maintenance status. Changes are disabled until it can be loaded.", - "loading": "Loading maintenance status…" + "title": "Технічне обслуговування", + "description": "Призупинити автоматизацію стану хоста, справності, метрик, контейнерів та відключення тунелів під час виконання роботи. Моніторинг, ручні запуски та запланована автоматизація продовжуються.", + "denied": "У вас немає дозволу на перегляд технічного обслуговування.", + "sharedReadOnly": "Цей хост надано вам. Тільки його власник може змінити налаштування обслуговування.", + "failed": "Не вдалося оновити технічне обслуговування.", + "active": "Технічне обслуговування активне", + "estimated": "Очікуване завершення", + "noAutoEnd": "Кошторис не завершує технічне обслуговування. Завершіть його чітко після завершення робіт.", + "endConfirm": "Завершити технічне обслуговування та відновити автоматизацію, що спрацьовує за подіями, для цього хоста?", + "confirmEnd": "Підтвердити кінець", + "cancel": "Скасувати", + "end": "Закінчення технічного обслуговування", + "action": "Дія", + "startNow": "Почати зараз", + "schedule": "Запланувати на пізніше", + "reason": "Причина", + "startUtc": "Перший запуск (UTC)", + "repeat": "Повторити", + "once": "Одного разу", + "weekly": "Щотижнево", + "monthly": "Щомісяця", + "utcHelp": "Розклади використовують UTC протягом року. Щомісячні розклади пропускають місяці без вибраного дня. Заплановані вікна не можуть перетинатися; перевищення термінів технічного обслуговування продовжується в наступних вікнах.", + "duration": "Орієнтовна тривалість (хвилини)", + "grace": "Пільговий період (хвилини)", + "notify": "Повідомити один раз, якщо після оцінки плюс пільговий період все ще не в мережі", + "addSchedule": "Додати розклад", + "schedules": "Розклади", + "noSchedules": "Немає графіків технічного обслуговування.", + "completed": "Вже розпочато", + "minutes_one": "{{count}} хвилина", + "minutes_other": "{{count}} хвилин", + "remove": "Видалити розклад", + "loadFailed": "Не вдалося оновити стан обслуговування. Зміни вимкнено, доки його не буде завантажено.", + "loading": "Завантаження статусу технічного обслуговування…" + }, + "ui": { + "sidebar": { + "automations": { + "options": { + "connect": "connect", + "disconnect": "disconnect", + "offline": "offline", + "online": "online", + "failing": "failing", + "recovered": "recovered" + } + } + } } } diff --git a/plugins/automations/locales/translated/vi_VN.json b/plugins/automations/locales/translated/vi_VN.json index 1e53b35f0..123e18bcc 100644 --- a/plugins/automations/locales/translated/vi_VN.json +++ b/plugins/automations/locales/translated/vi_VN.json @@ -1,163 +1,163 @@ { "permissions": { "view": { - "title": "View automations", - "description": "See the automations and their history." + "title": "Xem các quy trình tự động hóa", + "description": "Xem các quy trình tự động hóa và lịch sử của chúng." }, "create": { - "title": "Create automations", - "description": "Add new automations." + "title": "Tạo các quy trình tự động hóa", + "description": "Thêm các quy trình tự động hóa mới." }, "edit": { - "title": "Edit automations", - "description": "Change existing automations." + "title": "Chỉnh sửa tự động hóa", + "description": "Thay đổi các quy trình tự động hóa hiện có." }, "delete": { - "title": "Delete automations", - "description": "Remove automations." + "title": "Xóa các quy trình tự động hóa", + "description": "Loại bỏ các quy trình tự động hóa." }, "run": { - "title": "Run automations", - "description": "Trigger an automation by hand." + "title": "Chạy các quy trình tự động hóa", + "description": "Kích hoạt quy trình tự động bằng tay." } }, "newUi": { "sidebar": { "automations": { - "title": "Automations", - "tabAutomations": "Automations", - "tabRuns": "Runs", + "title": "Tự động hóa", + "tabAutomations": "Tự động hóa", + "tabRuns": "Chạy", "tabChannels": "Kênh", - "createAutomation": "New Automation", - "backToAutomations": "Back to Automations", - "createTitle": "New Automation", - "editTitle": "Edit Automation", - "empty": "No automations yet. Create one to react to a metric, a schedule, or an event.", - "emptyRuns": "No runs yet.", - "channelsHint": "Channels are set up in Alerts", - "noChannelsHint": "The alert always goes to your inbox. Add channels in Alerts to also send it somewhere else.", + "createAutomation": "Tự động hóa mới", + "backToAutomations": "Quay lại phần Tự động hóa", + "createTitle": "Tự động hóa mới", + "editTitle": "Tự động chỉnh sửa", + "empty": "Hiện chưa có tính năng tự động hóa nào. Hãy tạo một tính năng để phản ứng với một chỉ số, lịch trình hoặc sự kiện nào đó.", + "emptyRuns": "Chưa có lượt chạy nào.", + "channelsHint": "Các kênh được thiết lập trong mục Cảnh báo.", + "noChannelsHint": "Thông báo luôn được gửi đến hộp thư đến của bạn. Thêm kênh trong mục Thông báo để gửi thông báo đến các địa điểm khác nữa.", "nameLabel": "Tên", - "namePlaceholder": "e.g., Clean up /data when it fills", + "namePlaceholder": "Ví dụ: Dọn dẹp thư mục /data khi nó đầy.", "nameRequired": "Tên là bắt buộc", "descriptionLabel": "Mô tả", "descriptionPlaceholder": "Mô tả tùy chọn", "enabledLabel": "Đã bật", - "concurrencyLabel": "If it is already running", - "concurrencyHint": "What to do when this is triggered again before the last run has finished.", + "concurrencyLabel": "Nếu nó đang chạy", + "concurrencyHint": "Phải làm gì khi sự cố này xảy ra lần nữa trước khi quá trình chạy cuối cùng hoàn tất?", "concurrency": { - "skip": "Skip the new run", - "queue": "Wait and run after", - "allow": "Run both at once" + "skip": "Bỏ qua lần chạy mới", + "queue": "Chờ đợi và chạy theo", + "allow": "Chạy cả hai cùng một lúc" }, "save": "Lưu", - "created": "Automation created", - "updated": "Automation saved", - "deleted": "Automation deleted", - "deleteConfirm": "Delete this automation? Its run history is deleted too.", - "runNow": "Run now", - "testRun": "Test run", - "testRunHint": "Runs every step but does not touch anything outside Termix.", - "runStarted": "Run started", - "runFinished": "Run finished: {{status}}", + "created": "Tự động hóa được tạo", + "updated": "Tự động hóa đã được lưu", + "deleted": "Tự động hóa đã bị xóa", + "deleteConfirm": "Xóa tự động hóa này? Lịch sử chạy của nó cũng bị xóa.", + "runNow": "Chạy ngay", + "testRun": "Chạy thử nghiệm", + "testRunHint": "Nó thực hiện mọi bước nhưng không chạm vào bất cứ thứ gì bên ngoài Termix.", + "runStarted": "Chạy bắt đầu", + "runFinished": "Quá trình chạy đã hoàn tất: {{status}}", "trigger": "Kích hoạt", - "steps": "Steps", - "addStep": "Add step", - "removeStep": "Remove step", - "moveUp": "Move up", - "moveDown": "Move down", - "noSteps": "No steps yet. Add one to say what should happen.", - "webhookTokenTitle": "Webhook URL", - "webhookTokenDescription": "This is shown once. Save it now, it cannot be retrieved later.", + "steps": "Các bước", + "addStep": "Thêm bước", + "removeStep": "Xóa bước", + "moveUp": "Tiến lên", + "moveDown": "Di chuyển xuống", + "noSteps": "Chưa có bước nào. Hãy thêm một bước để mô tả những gì cần xảy ra.", + "webhookTokenTitle": "URL Webhook", + "webhookTokenDescription": "Thông tin này chỉ hiển thị một lần. Hãy lưu lại ngay, bạn sẽ không thể khôi phục lại sau này.", "copy": "Sao chép", "copied": "Đã sao chép", "viewJson": "JSON", - "viewBuilder": "Builder", - "viewGraph": "Graph", - "lastRun": "Last run", + "viewBuilder": "Nhà xây dựng", + "viewGraph": "Đồ thị", + "lastRun": "Lần chạy cuối", "never": "Chưa bao giờ", "duration": "{{seconds}}s", "stepOutput": "Đầu ra", "stepError": "Lỗi", - "dryRunBadge": "Test run", + "dryRunBadge": "Chạy thử nghiệm", "hostSelector": { - "trigger": "Triggering host", - "host": "Specific host", - "fleet": "Fleet", + "trigger": "Máy chủ kích hoạt", + "host": "Máy chủ cụ thể", + "fleet": "Hạm đội", "all": "Tất cả máy chủ" }, "triggerKinds": { - "metric_threshold": "Metric threshold", - "host_status": "Host goes up or down", - "health_check": "Health check changes", - "schedule": "On a schedule", - "docker_event": "Container event", - "internal_event": "Termix event", - "webhook": "Incoming webhook" + "metric_threshold": "Ngưỡng số liệu", + "host_status": "Máy chủ tăng hoặc giảm", + "health_check": "Thay đổi trong kiểm tra sức khỏe", + "schedule": "Theo lịch trình", + "docker_event": "Sự kiện container", + "internal_event": "Sự kiện Termix", + "webhook": "Webhook đến" }, "stepTypes": { - "notify": "Send an alert", - "http": "Call a URL", - "run_snippet": "Run a snippet", - "run_command": "Run a command", - "docker": "Control a container", - "tunnel": "Control a tunnel", - "wol": "Wake a host", - "wait": "Wait", - "set_var": "Set a variable", - "if": "If / otherwise", - "run_automation": "Run another automation", + "notify": "Gửi thông báo", + "http": "Gọi một URL", + "run_snippet": "Chạy một đoạn mã", + "run_command": "Chạy một lệnh", + "docker": "Kiểm soát một container", + "tunnel": "Kiểm soát đường hầm", + "wol": "Đánh thức một chủ nhà", + "wait": "Chờ đợi", + "set_var": "Đặt một biến", + "if": "Nếu/ngược lại", + "run_automation": "Chạy một quy trình tự động hóa khác", "stop": "Bit dừng" }, "statuses": { "running": "Đang chạy", "success": "Thành công", "failed": "Thất bại", - "timeout": "Timed out", - "skipped": "Skipped", - "cancelled": "Cancelled" + "timeout": "Hết thời gian", + "skipped": "Bỏ qua", + "cancelled": "Đã hủy" }, "fields": { "host": "Máy chủ", "metric": "Chỉ số", - "mount": "Mount point", - "operator": "Is", - "value": "Value", - "forSeconds": "Sustained for (seconds)", + "mount": "Điểm gắn kết", + "operator": "Là", + "value": "Giá trị", + "forSeconds": "Duy trì trong (giây)", "cooldown": "Thời gian chờ (phút)", - "cron": "Cron expression", - "intervalSeconds": "Every (seconds)", - "timezone": "Time zone", - "timezoneServer": "Server time", - "timezoneHint": "Cron times are read in this zone. Does not apply to interval schedules.", - "container": "Container", + "cron": "Biểu thức Cron", + "intervalSeconds": "Mỗi (giây)", + "timezone": "Múi giờ", + "timezoneServer": "Thời gian máy chủ", + "timezoneHint": "Thời gian Cron được đọc trong vùng này. Không áp dụng cho lịch trình theo khoảng thời gian.", + "container": "Thùng chứa", "command": "Lệnh", "url": "URL", - "method": "Method", - "body": "Body", - "channels": "Also send to", + "method": "Phương pháp", + "body": "Thân hình", + "channels": "Cũng gửi đến", "title": "Tiêu đề", - "message": "Message", - "snippet": "Snippet", - "seconds": "Seconds", - "conditionLeftPlaceholder": "Value to check", - "conditionRightPlaceholder": "Compare against", - "variableName": "Variable name", - "variableValue": "Value", - "elevated": "Run with sudo", - "onError": "If this fails", - "allowPrivateNetwork": "Allow local network addresses", - "allowPrivateNetworkHint": "Needed for a self-hosted service on your LAN. Off by default to prevent requests to internal addresses." + "message": "Tin nhắn", + "snippet": "Đoạn trích", + "seconds": "Giây", + "conditionLeftPlaceholder": "Giá trị cần kiểm tra", + "conditionRightPlaceholder": "So sánh với", + "variableName": "Tên biến", + "variableValue": "Giá trị", + "elevated": "Chạy với quyền sudo", + "onError": "Nếu điều này thất bại", + "allowPrivateNetwork": "Cho phép địa chỉ mạng cục bộ", + "allowPrivateNetworkHint": "Cần thiết cho dịch vụ tự lưu trữ trên mạng LAN của bạn. Mặc định là tắt để ngăn chặn các yêu cầu đến các địa chỉ nội bộ." }, "onError": { - "stop": "Stop the run", - "continue": "Carry on" + "stop": "Dừng cuộc chạy", + "continue": "Tiếp tục" }, - "needsPlugin": "Needs {{plugin}}", - "needsPluginHint": "This automation is skipped until the feature it needs is available again.", + "needsPlugin": "Nhu cầu {{plugin}}", + "needsPluginHint": "Quá trình tự động hóa này sẽ bị bỏ qua cho đến khi tính năng cần thiết được khôi phục.", "offBadge": "Tắt", "docsLink": "Xem tài liệu", "ago": { - "seconds": "{{count}}s ago", + "seconds": "{{count}}giây trước", "minutes": "{{count}} phút trước", "hours": "{{count}} giờ trước", "days": "{{count}} ngày trước" @@ -166,46 +166,60 @@ } }, "nav": { - "automations": "Automations" + "automations": "Tự động hóa" }, "onboarding": { - "feature_automations": "Automations", - "feature_automations_desc": "Run steps automatically when something happens, and get notified." + "feature_automations": "Tự động hóa", + "feature_automations_desc": "Thực hiện các bước tự động khi có sự kiện xảy ra và nhận thông báo." }, "maintenance": { "title": "Bảo trì", - "description": "Pause host status, health, metric, container and tunnel-disconnection automations while work is in progress. Monitoring, manual runs and scheduled automations continue.", - "denied": "You do not have permission to view maintenance.", - "sharedReadOnly": "This host was shared with you. Only its owner can change maintenance.", - "failed": "Maintenance could not be updated.", - "active": "Maintenance active", - "estimated": "Estimated completion", - "noAutoEnd": "The estimate does not end maintenance. End it explicitly when the work is complete.", - "endConfirm": "End maintenance and resume event-triggered automations for this host?", - "confirmEnd": "Confirm end", + "description": "Tạm dừng các hoạt động tự động hóa về trạng thái máy chủ, sức khỏe, số liệu, container và ngắt kết nối đường hầm trong khi công việc đang được tiến hành. Việc giám sát, chạy thủ công và các hoạt động tự động hóa theo lịch trình vẫn tiếp tục.", + "denied": "Bạn không có quyền xem thông tin bảo trì.", + "sharedReadOnly": "Máy chủ này được chia sẻ với bạn. Chỉ chủ sở hữu mới có thể thay đổi cài đặt bảo trì.", + "failed": "Không thể cập nhật bảo trì.", + "active": "Đang bảo trì", + "estimated": "Thời gian hoàn thành dự kiến", + "noAutoEnd": "Bản dự toán không kết thúc quá trình bảo trì. Hãy kết thúc quá trình bảo trì một cách rõ ràng khi công việc hoàn tất.", + "endConfirm": "Kết thúc bảo trì và tiếp tục các tự động hóa kích hoạt sự kiện cho máy chủ này?", + "confirmEnd": "Xác nhận kết thúc", "cancel": "Hủy", - "end": "End maintenance", + "end": "Kết thúc bảo trì", "action": "Hành động", - "startNow": "Start now", - "schedule": "Schedule for later", - "reason": "Reason", - "startUtc": "First start (UTC)", - "repeat": "Repeat", - "once": "Once", - "weekly": "Weekly", - "monthly": "Monthly", - "utcHelp": "Schedules use UTC throughout the year. Monthly schedules skip months without the selected day. Planned windows cannot overlap; overrunning maintenance continues across later windows.", - "duration": "Estimated duration (minutes)", - "grace": "Grace period (minutes)", - "notify": "Notify once if still offline after the estimate plus grace period", - "addSchedule": "Add schedule", - "schedules": "Schedules", - "noSchedules": "No maintenance schedules.", - "completed": "Already started", - "minutes_one": "{{count}} minute", - "minutes_other": "{{count}} minutes", - "remove": "Remove schedule", - "loadFailed": "Could not refresh maintenance status. Changes are disabled until it can be loaded.", - "loading": "Loading maintenance status…" + "startNow": "Bắt đầu ngay bây giờ", + "schedule": "Lên lịch cho thời gian sau", + "reason": "Lý do", + "startUtc": "Lần khởi động đầu tiên (UTC)", + "repeat": "Lặp lại", + "once": "Một lần", + "weekly": "Hàng tuần", + "monthly": "Hàng tháng", + "utcHelp": "Lịch trình sử dụng múi giờ UTC suốt cả năm. Lịch trình hàng tháng sẽ bỏ qua các tháng không có ngày đã chọn. Các khung thời gian đã lên kế hoạch không được chồng chéo; việc bảo trì kéo dài sẽ tiếp tục sang các khung thời gian sau đó.", + "duration": "Thời gian ước tính (phút)", + "grace": "Thời gian ân hạn (phút)", + "notify": "Thông báo một lần nếu vẫn ngoại tuyến sau thời gian ước tính cộng thêm thời gian gia hạn.", + "addSchedule": "Thêm lịch trình", + "schedules": "Lịch trình", + "noSchedules": "Không có lịch bảo trì.", + "completed": "Đã bắt đầu", + "minutes_one": "{{count}} phút", + "minutes_other": "{{count}} phút", + "remove": "Xóa lịch trình", + "loadFailed": "Không thể cập nhật trạng thái bảo trì. Các thay đổi bị vô hiệu hóa cho đến khi có thể tải lại.", + "loading": "Đang tải trạng thái bảo trì…" + }, + "ui": { + "sidebar": { + "automations": { + "options": { + "connect": "connect", + "disconnect": "disconnect", + "offline": "offline", + "online": "online", + "failing": "failing", + "recovered": "recovered" + } + } + } } } diff --git a/plugins/automations/locales/translated/zh_CN.json b/plugins/automations/locales/translated/zh_CN.json index 05f31bc25..6d51670f7 100644 --- a/plugins/automations/locales/translated/zh_CN.json +++ b/plugins/automations/locales/translated/zh_CN.json @@ -1,24 +1,24 @@ { "permissions": { "view": { - "title": "查看自动化", - "description": "查看自动化及其执行历史。" + "title": "查看自动化流程", + "description": "查看自动化流程及其发展历程。" }, "create": { - "title": "创建自动化", - "description": "添加新的自动化。" + "title": "创建自动化流程", + "description": "添加新的自动化流程。" }, "edit": { "title": "编辑自动化", - "description": "修改现有自动化。" + "description": "修改现有自动化流程。" }, "delete": { "title": "删除自动化", - "description": "移除自动化。" + "description": "移除自动化流程。" }, "run": { "title": "运行自动化", - "description": "手动触发自动化。" + "description": "手动触发自动化流程。" } }, "newUi": { @@ -28,83 +28,83 @@ "tabAutomations": "自动化", "tabRuns": "运行记录", "tabChannels": "通道", - "createAutomation": "新建自动化", - "backToAutomations": "返回自动化", - "createTitle": "新建自动化", + "createAutomation": "新自动化", + "backToAutomations": "返回自动化页面", + "createTitle": "新自动化", "editTitle": "编辑自动化", - "empty": "暂无自动化。创建自动化以响应指标、计划或事件。", + "empty": "目前还没有自动化流程。您可以创建一个自动化流程,使其能够根据指标、日程安排或事件做出反应。", "emptyRuns": "暂无运行记录。", - "channelsHint": "渠道在“告警”中设置", - "noChannelsHint": "告警始终会发送到收件箱。在“告警”中添加渠道后,也可发送到其他位置。", + "channelsHint": "频道在警报中设置", + "noChannelsHint": "提醒信息始终会发送到您的收件箱。您可以在“提醒”中添加其他渠道,以便将提醒信息也发送到其他位置。", "nameLabel": "名称", - "namePlaceholder": "例如:/data 空间不足时自动清理", + "namePlaceholder": "例如,当 /data 目录填满时进行清理。", "nameRequired": "名称为必填项", "descriptionLabel": "描述", "descriptionPlaceholder": "可选描述", "enabledLabel": "已启用", - "concurrencyLabel": "已有任务运行时", - "concurrencyHint": "上次运行尚未结束时再次触发的处理方式。", + "concurrencyLabel": "如果它已经在运行", + "concurrencyHint": "如果在上次运行结束前再次触发此问题,该怎么办?", "concurrency": { - "skip": "跳过本次运行", + "skip": "跳过新一轮", "queue": "稍等会再运行", - "allow": "同时运行两个任务" + "allow": "同时运行这两个程序" }, "save": "保存", "created": "自动化已创建", "updated": "自动化已保存", "deleted": "自动化已删除", - "deleteConfirm": "删除此自动化?其运行历史也会一并删除。", + "deleteConfirm": "删除此自动化流程?其运行历史记录也会被删除。", "runNow": "立即运行", "testRun": "测试运行", - "testRunHint": "执行每个步骤,但不会修改 Termix 之外的任何内容。", - "runStarted": "已开始运行", - "runFinished": "运行结束:{{status}}", + "testRunHint": "执行所有步骤,但不触及 Termix 之外的任何内容。", + "runStarted": "运行已启动", + "runFinished": "运行结束: {{status}}", "trigger": "触发器", "steps": "步骤", "addStep": "添加步骤", "removeStep": "移除步骤", - "moveUp": "上移", - "moveDown": "下移", - "noSteps": "暂无步骤。添加步骤以定义要执行的操作。", - "webhookTokenTitle": "Webhook 地址", - "webhookTokenDescription": "此内容仅显示一次,请立即保存,之后无法再次获取。", + "moveUp": "向上", + "moveDown": "向下", + "noSteps": "暂无步骤。请添加步骤说明应该发生什么。", + "webhookTokenTitle": "Webhook URL", + "webhookTokenDescription": "此信息仅显示一次。请立即保存,之后将无法调取。", "copy": "复制", "copied": "已复制", "viewJson": "JSON", "viewBuilder": "构建器", - "viewGraph": "流程图", + "viewGraph": "图形", "lastRun": "上次运行", "never": "从未", - "duration": "{{seconds}} 秒", + "duration": "{{seconds}}s", "stepOutput": "输出", "stepError": "错误", "dryRunBadge": "测试运行", "hostSelector": { - "trigger": "触发事件的主机", - "host": "指定主机", - "fleet": "主机组", + "trigger": "触发主机", + "host": "特定主机", + "fleet": "舰队", "all": "所有主机" }, "triggerKinds": { "metric_threshold": "指标阈值", "host_status": "主机上线或离线", - "health_check": "健康检查状态变化", - "schedule": "按计划运行", + "health_check": "健康检查变化", + "schedule": "按计划", "docker_event": "容器事件", "internal_event": "Termix 事件", - "webhook": "接收 Webhook" + "webhook": "传入的 webhook" }, "stepTypes": { - "notify": "发送告警", - "http": "请求 URL", - "run_snippet": "执行代码片段", - "run_command": "执行命令", + "notify": "发送提醒", + "http": "调用 URL", + "run_snippet": "运行一段代码片段", + "run_command": "运行命令", "docker": "控制容器", "tunnel": "控制隧道", "wol": "唤醒主机", "wait": "等待", "set_var": "设置变量", - "if": "如果 / 否则", + "if": "如果/否则", "run_automation": "运行另一个自动化程序", "stop": "停止" }, @@ -112,52 +112,52 @@ "running": "运行中", "success": "成功", "failed": "失败", - "timeout": "已超时", - "skipped": "已跳过", + "timeout": "超时", + "skipped": "跳过", "cancelled": "已取消" }, "fields": { "host": "主机", "metric": "指标", "mount": "挂载点", - "operator": "等于", + "operator": "是", "value": "值", - "forSeconds": "持续时间(秒)", + "forSeconds": "持续(秒)", "cooldown": "冷却时间(分钟)", "cron": "Cron 表达式", - "intervalSeconds": "间隔(秒)", + "intervalSeconds": "每隔(秒)", "timezone": "时区", "timezoneServer": "服务器时间", - "timezoneHint": "Cron 时间按此时区解释,不适用于按间隔运行的计划。", + "timezoneHint": "此区域读取 cron 任务的时间。不适用于间隔任务。", "container": "容器", "command": "命令", "url": "URL", - "method": "请求方法", + "method": "方法", "body": "请求体", - "channels": "同时发送至", + "channels": "也发送到", "title": "标题", "message": "消息", - "snippet": "代码片段", + "snippet": "片段", "seconds": "秒", "conditionLeftPlaceholder": "待检查的值", - "conditionRightPlaceholder": "比较目标值", + "conditionRightPlaceholder": "与……比较", "variableName": "变量名", "variableValue": "值", - "elevated": "使用 sudo 执行", - "onError": "失败时", - "allowPrivateNetwork": "允许局域网地址", - "allowPrivateNetworkHint": "访问局域网内的自托管服务时需要开启。默认关闭,以防止请求内部地址。" + "elevated": "使用 sudo 运行", + "onError": "如果失败", + "allowPrivateNetwork": "允许本地网络地址", + "allowPrivateNetworkHint": "在局域网内运行自托管服务时需要此功能。默认情况下处于关闭状态,以防止向内部地址发送请求。" }, "onError": { "stop": "停止运行", - "continue": "继续执行" + "continue": "继续" }, "needsPlugin": "需要 {{plugin}}", - "needsPluginHint": "在所需功能恢复可用之前,此自动化将被跳过。", + "needsPluginHint": "该自动化流程将被跳过,直到所需的功能再次可用为止。", "offBadge": "关闭", "docsLink": "查看文档", "ago": { - "seconds": "{{count}} 秒前", + "seconds": "{{count}}秒前", "minutes": "{{count}} 分钟前", "hours": "{{count}} 小时前", "days": "{{count}} 天前" @@ -174,50 +174,50 @@ }, "maintenance": { "title": "维护中", - "description": "维护期间暂停由主机状态、健康检查、指标、容器和隧道断开事件触发的自动化。监控、手动执行和定时自动化继续运行。", - "denied": "你没有查看维护信息的权限。", - "sharedReadOnly": "此主机由他人共享给你,只有所有者才能修改维护设置。", - "failed": "无法更新维护设置。", - "active": "维护中", + "description": "工作进行期间,暂停主机状态、健康状况、指标、容器和隧道断开连接的自动化操作。监控、手动运行和计划的自动化操作将继续进行。", + "denied": "您没有权限查看维护信息。", + "sharedReadOnly": "这台主机是与您共享的。只有主机所有者才能更改维护设置。", + "failed": "维护信息无法更新。", + "active": "维护活动", "estimated": "预计完成时间", - "noAutoEnd": "预计时间不会自动结束维护,请在工作完成后手动结束。", - "endConfirm": "结束维护并恢复此主机的事件触发自动化?", + "noAutoEnd": "估价并不意味着维护工作结束。工作完成后,应明确终止维护合同。", + "endConfirm": "结束此主机的维护并恢复事件触发的自动化操作?", "confirmEnd": "确认结束", "cancel": "取消", - "end": "结束维护", + "end": "维护结束", "action": "操作", "startNow": "立即开始", - "schedule": "安排稍后执行", + "schedule": "稍后安排", "reason": "原因", - "startUtc": "首次开始时间(UTC)", + "startUtc": "首次启动(UTC)", "repeat": "重复", - "once": "仅一次", + "once": "一次", "weekly": "每周", - "monthly": "每月", - "utcHelp": "计划全年使用 UTC。每月计划会跳过没有指定日期的月份。计划窗口不能重叠;超时未结束的维护会持续到后续窗口。", - "duration": "预计时长(分钟)", + "monthly": "月度", + "utcHelp": "全年所有计划均采用世界协调时 (UTC)。每月计划会跳过没有所选日期的月份。计划窗口不能重叠;超时维护会在后续窗口继续进行。", + "duration": "预计持续时间(分钟)", "grace": "宽限期(分钟)", - "notify": "预计完成时间加宽限期后仍离线时,发送一次通知", - "addSchedule": "添加计划", - "schedules": "计划", - "noSchedules": "暂无维护计划。", - "completed": "已开始", + "notify": "如果在预估时间和宽限期结束后仍离线,请通知一次。", + "addSchedule": "添加日程", + "schedules": "日程安排", + "noSchedules": "没有维护计划。", + "completed": "已经开始", "minutes_one": "{{count}} 分钟", "minutes_other": "{{count}} 分钟", - "remove": "移除计划", - "loadFailed": "无法刷新维护状态,在成功加载之前无法更改设置。", - "loading": "正在加载维护状态……" + "remove": "移除日程", + "loadFailed": "无法刷新维护状态。更改功能已禁用,待状态加载完毕后方可启用。", + "loading": "正在加载维护状态…" }, "ui": { "sidebar": { "automations": { "options": { - "connect": "连接", - "disconnect": "断开连接", - "offline": "离线", - "online": "在线", - "failing": "故障", - "recovered": "已恢复" + "connect": "connect", + "disconnect": "disconnect", + "offline": "offline", + "online": "online", + "failing": "failing", + "recovered": "recovered" } } } diff --git a/plugins/automations/locales/translated/zh_TW.json b/plugins/automations/locales/translated/zh_TW.json index 3104650f6..30fbe8d0f 100644 --- a/plugins/automations/locales/translated/zh_TW.json +++ b/plugins/automations/locales/translated/zh_TW.json @@ -1,163 +1,163 @@ { "permissions": { "view": { - "title": "View automations", - "description": "See the automations and their history." + "title": "查看自動化流程", + "description": "查看自動化流程及其發展歷程。" }, "create": { - "title": "Create automations", - "description": "Add new automations." + "title": "建立自動化流程", + "description": "新增新的自動化流程。" }, "edit": { - "title": "Edit automations", - "description": "Change existing automations." + "title": "編輯自動化", + "description": "修改現有自動化流程。" }, "delete": { - "title": "Delete automations", - "description": "Remove automations." + "title": "刪除自動化", + "description": "移除自動化流程。" }, "run": { - "title": "Run automations", - "description": "Trigger an automation by hand." + "title": "運作自動化", + "description": "手動觸發自動化流程。" } }, "newUi": { "sidebar": { "automations": { - "title": "Automations", - "tabAutomations": "Automations", - "tabRuns": "Runs", + "title": "自動化", + "tabAutomations": "自動化", + "tabRuns": "跑", "tabChannels": "通道", - "createAutomation": "New Automation", - "backToAutomations": "Back to Automations", - "createTitle": "New Automation", - "editTitle": "Edit Automation", - "empty": "No automations yet. Create one to react to a metric, a schedule, or an event.", - "emptyRuns": "No runs yet.", - "channelsHint": "Channels are set up in Alerts", - "noChannelsHint": "The alert always goes to your inbox. Add channels in Alerts to also send it somewhere else.", + "createAutomation": "新自動化", + "backToAutomations": "返回自動化頁面", + "createTitle": "新自動化", + "editTitle": "編輯自動化", + "empty": "目前還沒有自動化流程。您可以建立一個自動化流程,使其能夠根據指標、日程安排或事件做出反應。", + "emptyRuns": "目前還沒有人運行。", + "channelsHint": "頻道在警報中設置", + "noChannelsHint": "提醒訊息始終會傳送到您的收件匣。您可以在「提醒」中新增其他管道,以便將提醒訊息也傳送到其他位置。", "nameLabel": "名稱", - "namePlaceholder": "e.g., Clean up /data when it fills", + "namePlaceholder": "例如,當 /data 目錄填滿時進行清理。", "nameRequired": "名稱為必填", "descriptionLabel": "說明", "descriptionPlaceholder": "選用說明", "enabledLabel": "已啟用", - "concurrencyLabel": "If it is already running", - "concurrencyHint": "What to do when this is triggered again before the last run has finished.", + "concurrencyLabel": "如果它已經在運行", + "concurrencyHint": "如果在上次運行結束前再次觸發此問題,該怎麼辦?", "concurrency": { - "skip": "Skip the new run", - "queue": "Wait and run after", - "allow": "Run both at once" + "skip": "跳過新一輪", + "queue": "等待並追趕", + "allow": "同時運行這兩個程序" }, "save": "儲存", - "created": "Automation created", - "updated": "Automation saved", - "deleted": "Automation deleted", - "deleteConfirm": "Delete this automation? Its run history is deleted too.", - "runNow": "Run now", - "testRun": "Test run", - "testRunHint": "Runs every step but does not touch anything outside Termix.", - "runStarted": "Run started", - "runFinished": "Run finished: {{status}}", + "created": "自動化創建", + "updated": "自動化保存", + "deleted": "自動化刪除", + "deleteConfirm": "刪除此自動化流程?其運行歷史記錄也會被刪除。", + "runNow": "立即運行", + "testRun": "測試運行", + "testRunHint": "執行所有步驟,但不觸及 Termix 以外的任何內容。", + "runStarted": "運行已啟動", + "runFinished": "運轉結束: {{status}}", "trigger": "觸發條件", - "steps": "Steps", - "addStep": "Add step", - "removeStep": "Remove step", - "moveUp": "Move up", - "moveDown": "Move down", - "noSteps": "No steps yet. Add one to say what should happen.", + "steps": "步驟", + "addStep": "新增步驟", + "removeStep": "移除步驟", + "moveUp": "向上", + "moveDown": "向下", + "noSteps": "暫無步驟。請加入步驟說明應該發生什麼。", "webhookTokenTitle": "Webhook URL", - "webhookTokenDescription": "This is shown once. Save it now, it cannot be retrieved later.", + "webhookTokenDescription": "此資訊僅顯示一次。請立即儲存,之後將無法調取。", "copy": "複製", "copied": "已複製", "viewJson": "JSON", - "viewBuilder": "Builder", - "viewGraph": "Graph", - "lastRun": "Last run", + "viewBuilder": "建造者", + "viewGraph": "圖形", + "lastRun": "最後一次運行", "never": "從未", "duration": "{{seconds}}s", "stepOutput": "輸出", "stepError": "錯誤", - "dryRunBadge": "Test run", + "dryRunBadge": "測試運行", "hostSelector": { - "trigger": "Triggering host", - "host": "Specific host", - "fleet": "Fleet", + "trigger": "觸發主機", + "host": "特定主機", + "fleet": "艦隊", "all": "所有主機" }, "triggerKinds": { - "metric_threshold": "Metric threshold", - "host_status": "Host goes up or down", - "health_check": "Health check changes", - "schedule": "On a schedule", - "docker_event": "Container event", - "internal_event": "Termix event", - "webhook": "Incoming webhook" + "metric_threshold": "指標閾值", + "host_status": "主機升溫或降溫", + "health_check": "健康檢查變化", + "schedule": "按計劃", + "docker_event": "容器事件", + "internal_event": "Termix 活動", + "webhook": "傳入的 webhook" }, "stepTypes": { - "notify": "Send an alert", - "http": "Call a URL", - "run_snippet": "Run a snippet", - "run_command": "Run a command", - "docker": "Control a container", - "tunnel": "Control a tunnel", - "wol": "Wake a host", - "wait": "Wait", - "set_var": "Set a variable", - "if": "If / otherwise", - "run_automation": "Run another automation", + "notify": "發送提醒", + "http": "呼叫 URL", + "run_snippet": "運行一段程式碼片段", + "run_command": "運行命令", + "docker": "控制容器", + "tunnel": "控制隧道", + "wol": "喚醒主機", + "wait": "等待", + "set_var": "設定變數", + "if": "如果/否則", + "run_automation": "執行另一個自動化流程", "stop": "停止位元" }, "statuses": { "running": "執行中", "success": "成功", "failed": "失敗", - "timeout": "Timed out", - "skipped": "Skipped", - "cancelled": "Cancelled" + "timeout": "超時", + "skipped": "跳過", + "cancelled": "取消" }, "fields": { "host": "主機", "metric": "指標", - "mount": "Mount point", - "operator": "Is", - "value": "Value", - "forSeconds": "Sustained for (seconds)", + "mount": "登山點", + "operator": "是", + "value": "價值", + "forSeconds": "持續(秒)", "cooldown": "冷卻時間(分鐘)", - "cron": "Cron expression", - "intervalSeconds": "Every (seconds)", - "timezone": "Time zone", - "timezoneServer": "Server time", - "timezoneHint": "Cron times are read in this zone. Does not apply to interval schedules.", - "container": "Container", + "cron": "複製表達式", + "intervalSeconds": "每隔(秒)", + "timezone": "時區", + "timezoneServer": "伺服器時間", + "timezoneHint": "此區域讀取 cron 任務的時間。不適用於間隔任務。", + "container": "容器", "command": "指令", "url": "URL", - "method": "Method", - "body": "Body", - "channels": "Also send to", + "method": "方法", + "body": "身體", + "channels": "也發送到", "title": "標題", - "message": "Message", - "snippet": "Snippet", - "seconds": "Seconds", - "conditionLeftPlaceholder": "Value to check", - "conditionRightPlaceholder": "Compare against", - "variableName": "Variable name", - "variableValue": "Value", - "elevated": "Run with sudo", - "onError": "If this fails", - "allowPrivateNetwork": "Allow local network addresses", - "allowPrivateNetworkHint": "Needed for a self-hosted service on your LAN. Off by default to prevent requests to internal addresses." + "message": "訊息", + "snippet": "片段", + "seconds": "秒", + "conditionLeftPlaceholder": "待檢查的數值", + "conditionRightPlaceholder": "與…比較", + "variableName": "變數名", + "variableValue": "價值", + "elevated": "使用 sudo 運行", + "onError": "如果失敗", + "allowPrivateNetwork": "允許本地網路位址", + "allowPrivateNetworkHint": "在區域網路內執行自託管服務時需要此功能。預設為關閉狀態,以防止向內部位址發送請求。" }, "onError": { - "stop": "Stop the run", - "continue": "Carry on" + "stop": "停止奔跑", + "continue": "繼續" }, - "needsPlugin": "Needs {{plugin}}", - "needsPluginHint": "This automation is skipped until the feature it needs is available again.", + "needsPlugin": "需要 {{plugin}}", + "needsPluginHint": "這個自動化流程將被跳過,直到所需的功能再次可用為止。", "offBadge": "關閉", "docsLink": "檢視文件", "ago": { - "seconds": "{{count}}s ago", + "seconds": "{{count}}秒前", "minutes": "{{count}} 分鐘前", "hours": "{{count}} 小時前", "days": "{{count}} 天前" @@ -166,46 +166,60 @@ } }, "nav": { - "automations": "Automations" + "automations": "自動化" }, "onboarding": { - "feature_automations": "Automations", - "feature_automations_desc": "Run steps automatically when something happens, and get notified." + "feature_automations": "自動化", + "feature_automations_desc": "當發生某些事情時,自動運行步驟並接收通知。" }, "maintenance": { "title": "維護", - "description": "Pause host status, health, metric, container and tunnel-disconnection automations while work is in progress. Monitoring, manual runs and scheduled automations continue.", - "denied": "You do not have permission to view maintenance.", - "sharedReadOnly": "This host was shared with you. Only its owner can change maintenance.", - "failed": "Maintenance could not be updated.", - "active": "Maintenance active", - "estimated": "Estimated completion", - "noAutoEnd": "The estimate does not end maintenance. End it explicitly when the work is complete.", - "endConfirm": "End maintenance and resume event-triggered automations for this host?", - "confirmEnd": "Confirm end", + "description": "工作進行期間,暫停主機狀態、健康狀況、指標、容器和隧道斷開連線的自動化操作。監控、手動運行和計劃的自動化操作將繼續進行。", + "denied": "您沒有權限查看維護資訊。", + "sharedReadOnly": "這台主機是與您共享的。只有主機所有者才能變更維護設定。", + "failed": "維護資訊無法更新。", + "active": "維護活動", + "estimated": "預計完成時間", + "noAutoEnd": "估價並不意味著維護工作結束。工作完成後,應明確終止維護合約。", + "endConfirm": "結束此主機的維護並恢復事件觸發的自動化操作?", + "confirmEnd": "確認結束", "cancel": "取消", - "end": "End maintenance", + "end": "維護結束", "action": "動作", - "startNow": "Start now", - "schedule": "Schedule for later", - "reason": "Reason", - "startUtc": "First start (UTC)", - "repeat": "Repeat", - "once": "Once", - "weekly": "Weekly", - "monthly": "Monthly", - "utcHelp": "Schedules use UTC throughout the year. Monthly schedules skip months without the selected day. Planned windows cannot overlap; overrunning maintenance continues across later windows.", - "duration": "Estimated duration (minutes)", - "grace": "Grace period (minutes)", - "notify": "Notify once if still offline after the estimate plus grace period", - "addSchedule": "Add schedule", - "schedules": "Schedules", - "noSchedules": "No maintenance schedules.", - "completed": "Already started", - "minutes_one": "{{count}} minute", - "minutes_other": "{{count}} minutes", - "remove": "Remove schedule", - "loadFailed": "Could not refresh maintenance status. Changes are disabled until it can be loaded.", - "loading": "Loading maintenance status…" + "startNow": "立即開始", + "schedule": "稍後安排", + "reason": "原因", + "startUtc": "首次啟動(UTC)", + "repeat": "重複", + "once": "一次", + "weekly": "每週", + "monthly": "每月", + "utcHelp": "全年所有計劃均採用世界協調時 (UTC)。每月計劃會跳過沒有所選日期的月份。計劃視窗不能重疊;逾時維護會在後續視窗繼續進行。", + "duration": "預計持續時間(分鐘)", + "grace": "寬限期(分鐘)", + "notify": "如果在預估時間和寬限期結束後仍離線,請通知一次。", + "addSchedule": "新增日程", + "schedules": "日程安排", + "noSchedules": "沒有維護計劃。", + "completed": "已經開始", + "minutes_one": "{{count}} 分鐘", + "minutes_other": "{{count}} 分鐘", + "remove": "移除行程", + "loadFailed": "無法刷新維護狀態。更改功能已停用,待狀態載入完畢後方可啟用。", + "loading": "正在載入維護狀態…" + }, + "ui": { + "sidebar": { + "automations": { + "options": { + "connect": "connect", + "disconnect": "disconnect", + "offline": "offline", + "online": "online", + "failing": "failing", + "recovered": "recovered" + } + } + } } } diff --git a/plugins/automations/tests/backend/maintenance.test.ts b/plugins/automations/tests/backend/maintenance.test.ts index 3730aa1a2..ddcef56cb 100644 --- a/plugins/automations/tests/backend/maintenance.test.ts +++ b/plugins/automations/tests/backend/maintenance.test.ts @@ -89,7 +89,7 @@ describe("host maintenance", () => { await service.tick(); expect(server.mock.notifications).toHaveLength(0); server.mock.hostStatuses.set(1, { - status: "reachable", + status: "online", lastChecked: "2026-01-01T13:21Z", }); await service.tick(); diff --git a/plugins/docker/locales/translated/bn_BD.json b/plugins/docker/locales/translated/bn_BD.json index 631c3a919..30f924a5b 100644 --- a/plugins/docker/locales/translated/bn_BD.json +++ b/plugins/docker/locales/translated/bn_BD.json @@ -1,147 +1,147 @@ { "docker": { - "notEnabled": "Docker is not enabled for this host", - "validating": "Validating Docker...", - "connecting": "Connecting...", - "error": "Error", + "notEnabled": "এই হোস্টের জন্য ডকার সক্রিয় করা নেই।", + "validating": "ডকার যাচাই করা হচ্ছে...", + "connecting": "সংযোগ স্থাপন...", + "error": "ত্রুটি", "version": "{{runtime}} {{version}}", - "connectionFailed": "Failed to connect to Docker", - "containerStarted": "Container {{name}} started", - "failedToStartContainer": "Failed to start container {{name}}", - "containerStopped": "Container {{name}} stopped", - "failedToStopContainer": "Failed to stop container {{name}}", - "containerRestarted": "Container {{name}} restarted", - "failedToRestartContainer": "Failed to restart container {{name}}", - "containerPaused": "Container {{name}} paused", - "containerUnpaused": "Container {{name}} unpaused", - "failedToTogglePauseContainer": "Failed to toggle pause state for container {{name}}", - "containerRemoved": "Container {{name}} removed", - "failedToRemoveContainer": "Failed to remove container {{name}}", - "image": "Image", - "ports": "Ports", - "noPorts": "No ports", - "start": "Start", - "stop": "Stop", - "status": "Status", - "actions": "Actions", - "cardView": "Card view", - "listView": "List view", - "confirmRemoveContainer": "Are you sure you want to remove the container '{{name}}'? This action cannot be undone.", - "runningContainerWarning": "Warning: This container is currently running. Removing it will stop the container first.", - "loadingContainers": "Loading containers...", - "manager": "Docker Manager", - "autoRefresh": "Auto Refresh", - "timestamps": "Timestamps", - "lines": "Lines", - "filterLogs": "Filter logs...", - "refresh": "Refresh", - "download": "Download", - "clear": "Clear", - "logsDownloaded": "Logs downloaded successfully", - "last50": "Last 50", - "last100": "Last 100", - "last500": "Last 500", - "last1000": "Last 1000", - "allLogs": "All Logs", - "noLogsMatching": "No logs matching \"{{query}}\"", - "noLogsAvailable": "No logs available", - "noContainersFound": "No containers found", - "noContainersFoundHint": "No Docker containers are available on this host", - "searchPlaceholder": "Search containers...", - "allStatuses": "All Statuses", - "stateRunning": "Running", - "statePaused": "Paused", - "stateExited": "Exited", - "stateRestarting": "Restarting", - "noContainersMatchFilters": "No containers match your filters", - "noContainersMatchFiltersHint": "Try adjusting your search or filter criteria", - "failedToFetchStats": "Failed to fetch container statistics", - "containerNotRunning": "Container not running", - "startContainerToViewStats": "Start the container to view statistics", - "loadingStats": "Loading statistics...", - "errorLoadingStats": "Error loading statistics", - "noStatsAvailable": "No statistics available", - "cpuUsage": "CPU Usage", - "current": "Current", - "memoryUsage": "Memory Usage", - "networkIo": "Network I/O", - "input": "Input", - "output": "Output", - "blockIo": "Block I/O", - "read": "Read", - "write": "Write", - "pids": "PIDs", - "containerInformation": "Container Information", - "name": "Name", - "id": "ID", - "state": "State", - "containerMustBeRunning": "Container must be running to access console", - "verificationCodePrompt": "Enter verification code", - "totpVerificationFailed": "TOTP verification failed. Please try again.", - "browserSignInFailed": "Sign-in failed. Please try again.", - "connectedTo": "Connected to {{containerName}}", - "disconnected": "Disconnected", - "consoleError": "Console error", - "errorMessage": "Error: {{message}}", - "failedToConnect": "Failed to connect to container", - "console": "Console", - "selectShell": "Select shell", - "bash": "Bash", - "sh": "sh", - "ash": "ash", - "connect": "Connect", - "disconnect": "Disconnect", - "notConnected": "Not connected", - "clickToConnect": "Click connect to start a shell session", - "connectingTo": "Connecting to {{containerName}}...", - "containerNotFound": "Container not found", - "backToList": "Back to List", - "logs": "Logs", - "stats": "Stats", - "consoleTab": "Console", - "startContainerToAccess": "Start the container to access the console", - "noHostSelected": "No host selected", - "failedToFetchLogs": "Failed to fetch logs: {{error}}", - "failedToDownloadLogs": "Failed to download logs: {{error}}" + "connectionFailed": "ডকারের সাথে সংযোগ করতে ব্যর্থ হয়েছে", + "containerStarted": "কন্টেইনার {{name}} চালু হয়েছে", + "failedToStartContainer": "{{name}} কন্টেইনারটি শুরু করতে ব্যর্থ হয়েছে", + "containerStopped": "কন্টেইনার {{name}} থেমে গেছে", + "failedToStopContainer": "কন্টেইনার বন্ধ করতে ব্যর্থ {{name}}", + "containerRestarted": "কন্টেইনার {{name}} পুনরায় চালু হয়েছে", + "failedToRestartContainer": "কন্টেইনার পুনরায় চালু করতে ব্যর্থ {{name}}", + "containerPaused": "কন্টেইনার {{name}} থামানো হয়েছে", + "containerUnpaused": "কন্টেইনার {{name}} বিরতিহীন", + "failedToTogglePauseContainer": "কন্টেইনার {{name}} এর জন্য বিরতি অবস্থা টগল করতে ব্যর্থ হয়েছে", + "containerRemoved": "কন্টেইনার {{name}} সরানো হয়েছে", + "failedToRemoveContainer": "কন্টেইনার অপসারণ করা সম্ভব হয়নি {{name}}", + "image": "ছবি", + "ports": "বন্দর", + "noPorts": "কোন পোর্ট নেই", + "start": "শুরু করুন", + "stop": "থামুন", + "status": "অবস্থা", + "actions": "কর্ম", + "cardView": "কার্ড ভিউ", + "listView": "তালিকা দৃশ্য", + "confirmRemoveContainer": "আপনি কি '{{name}}' কন্টেইনারটি সরাতে নিশ্চিত? এই কাজটি পূর্বাবস্থায় ফেরানো যাবে না।", + "runningContainerWarning": "সতর্কীকরণ: এই কন্টেইনারটি বর্তমানে চালু আছে। এটি অপসারণ করলে প্রথমে কন্টেইনারটি বন্ধ হবে।", + "loadingContainers": "কন্টেইনার লোড করা হচ্ছে...", + "manager": "ডকার ম্যানেজার", + "autoRefresh": "স্বয়ংক্রিয় রিফ্রেশ", + "timestamps": "টাইমস্ট্যাম্প", + "lines": "লাইন", + "filterLogs": "লগ ফিল্টার করুন...", + "refresh": "রিফ্রেশ", + "download": "ডাউনলোড করুন", + "clear": "পরিষ্কার", + "logsDownloaded": "লগগুলি সফলভাবে ডাউনলোড করা হয়েছে।", + "last50": "শেষ ৫০", + "last100": "শেষ ১০০", + "last500": "শেষ ৫০০", + "last1000": "শেষ ১০০০", + "allLogs": "সমস্ত লগ", + "noLogsMatching": "\"{{query}} \" এর সাথে মেলে এমন কোনও লগ নেই", + "noLogsAvailable": "কোন লগ উপলব্ধ নেই", + "noContainersFound": "কোন কন্টেইনার পাওয়া যায়নি", + "noContainersFoundHint": "এই হোস্টে কোনো ডকার কন্টেইনার উপলব্ধ নেই।", + "searchPlaceholder": "কন্টেইনারগুলি অনুসন্ধান করুন...", + "allStatuses": "সমস্ত স্ট্যাটাস", + "stateRunning": "দৌড়ানো", + "statePaused": "বিরতি দেওয়া হয়েছে", + "stateExited": "উত্তেজিত", + "stateRestarting": "পুনরায় চালু করা", + "noContainersMatchFilters": "আপনার ফিল্টারগুলির সাথে কোনও কন্টেইনার মেলে না", + "noContainersMatchFiltersHint": "আপনার অনুসন্ধান বা ফিল্টারের শর্তাবলী পরিবর্তন করে দেখুন।", + "failedToFetchStats": "কন্টেইনার পরিসংখ্যান আনতে ব্যর্থ হয়েছে", + "containerNotRunning": "কন্টেইনারটি চলছে না", + "startContainerToViewStats": "পরিসংখ্যান দেখতে কন্টেইনারটি চালু করুন।", + "loadingStats": "পরিসংখ্যান লোড হচ্ছে...", + "errorLoadingStats": "পরিসংখ্যান লোড করতে ত্রুটি", + "noStatsAvailable": "কোন পরিসংখ্যান উপলব্ধ নেই", + "cpuUsage": "সিপিইউ ব্যবহার", + "current": "বর্তমান", + "memoryUsage": "মেমরি ব্যবহার", + "networkIo": "নেটওয়ার্ক আই/ও", + "input": "ইনপুট", + "output": "আউটপুট", + "blockIo": "ব্লক আই/ও", + "read": "পড়ুন", + "write": "লিখুন", + "pids": "পিআইডি", + "containerInformation": "কন্টেইনারের তথ্য", + "name": "নাম", + "id": "আইডি", + "state": "রাজ্য", + "containerMustBeRunning": "কনসোল অ্যাক্সেস করতে হলে কন্টেইনারটি অবশ্যই চালু থাকতে হবে।", + "verificationCodePrompt": "যাচাইকরণ কোড প্রবেশ করান", + "totpVerificationFailed": "TOTP যাচাইকরণ ব্যর্থ হয়েছে। অনুগ্রহ করে আবার চেষ্টা করুন।", + "browserSignInFailed": "সাইন-ইন ব্যর্থ হয়েছে। অনুগ্রহ করে আবার চেষ্টা করুন।", + "connectedTo": "{{containerName}} এর সাথে সংযুক্ত", + "disconnected": "বিচ্ছিন্ন", + "consoleError": "কনসোল ত্রুটি", + "errorMessage": "ত্রুটি: {{message}}", + "failedToConnect": "কন্টেইনারের সাথে সংযোগ করতে ব্যর্থ হয়েছে", + "console": "কনসোল", + "selectShell": "শেল নির্বাচন করুন", + "bash": "ব্যাশ", + "sh": "শ", + "ash": "ছাই", + "connect": "সংযোগ করুন", + "disconnect": "সংযোগ বিচ্ছিন্ন করুন", + "notConnected": "সংযুক্ত নয়", + "clickToConnect": "শেল সেশন শুরু করতে কানেক্ট-এ ক্লিক করুন।", + "connectingTo": "{{containerName}} এর সাথে সংযোগ স্থাপন করা হচ্ছে...", + "containerNotFound": "কন্টেইনারটি খুঁজে পাওয়া যায়নি", + "backToList": "তালিকায় ফিরে যান", + "logs": "লগ", + "stats": "পরিসংখ্যান", + "consoleTab": "কনসোল", + "startContainerToAccess": "কনসোল অ্যাক্সেস করতে কন্টেইনারটি চালু করুন।", + "noHostSelected": "কোন হোস্ট নির্বাচন করা হয়নি", + "failedToFetchLogs": "লগ আনতে ব্যর্থ: {{error}}", + "failedToDownloadLogs": "লগ ডাউনলোড করা যায়নি: {{error}}" }, "nav": { - "docker": "Docker" + "docker": "ডকার" }, "onboarding": { - "feature_docker": "Docker", - "feature_docker_desc": "See containers, read logs and watch stats on any host running Docker." + "feature_docker": "ডকার", + "feature_docker_desc": "ডকার চালিত যেকোনো হোস্টে কন্টেইনার দেখুন, লগ পড়ুন এবং পরিসংখ্যান পর্যবেক্ষণ করুন।" }, "terminal": { - "retry": "Retry", - "clipboardReadFailed": "Failed to read from clipboard. Make sure clipboard permissions are granted.", - "clipboardWriteFailed": "Failed to copy to clipboard. Make sure the page is served over HTTPS or localhost." + "retry": "পুনরায় চেষ্টা করুন", + "clipboardReadFailed": "ক্লিপবোর্ড থেকে পড়তে ব্যর্থ হয়েছে। নিশ্চিত করুন যে ক্লিপবোর্ডের অনুমতি দেওয়া আছে।", + "clipboardWriteFailed": "ক্লিপবোর্ডে কপি করা সম্ভব হয়নি। নিশ্চিত করুন যে পৃষ্ঠাটি HTTPS বা লোকালহোস্টের মাধ্যমে পরিবেশিত হচ্ছে।" }, "permissions": { "use": { - "title": "Use Docker", - "description": "Open the Docker manager and container consoles on hosts with Docker enabled." + "title": "ডকার ব্যবহার করুন", + "description": "যেসব হোস্টে ডকার সক্রিয় করা আছে, সেগুলোতে ডকার ম্যানেজার এবং কন্টেইনার কনসোল খুলুন।" } }, "settings": { "host": { "enable": { - "label": "Enable Docker", - "description": "Manage containers on this host." + "label": "ডকার সক্রিয় করুন", + "description": "এই হোস্টে কন্টেইনারগুলি পরিচালনা করুন।" }, "containerRuntime": { - "label": "Container Runtime", - "description": "Choose the CLI used for container management on this host", - "docker": "Docker", - "podman": "Podman" + "label": "কন্টেইনার রানটাইম", + "description": "এই হোস্টে কন্টেইনার ব্যবস্থাপনার জন্য ব্যবহৃত CLI নির্বাচন করুন", + "docker": "ডকার", + "podman": "পডম্যান" } } }, "errors": { - "remoteServerRequired": "Remote server required. Connect a remote server in Settings to use this connection type." + "remoteServerRequired": "রিমোট সার্ভার প্রয়োজন। এই সংযোগের ধরণটি ব্যবহার করতে সেটিংস-এ একটি রিমোট সার্ভার সংযুক্ত করুন।" }, "hosts": { - "docsLink": "View docs", - "hostNotFound": "Host not found", - "loadingHost": "Loading host..." + "docsLink": "নথি দেখুন", + "hostNotFound": "হোস্ট খুঁজে পাওয়া যায়নি", + "loadingHost": "হোস্ট লোড হচ্ছে..." } } diff --git a/plugins/docker/locales/translated/hi_IN.json b/plugins/docker/locales/translated/hi_IN.json index e4b3e602d..c435dd5eb 100644 --- a/plugins/docker/locales/translated/hi_IN.json +++ b/plugins/docker/locales/translated/hi_IN.json @@ -23,9 +23,9 @@ "start": "प्रारंभ करें", "stop": "स्टॉप", "status": "स्थिति", - "actions": "Actions", - "cardView": "Card view", - "listView": "List view", + "actions": "कार्रवाई", + "cardView": "कार्ड दृश्य", + "listView": "लिस्ट व्यू", "confirmRemoveContainer": "क्या आप वाकई कंटेनर '{{name}}' हटाना चाहते हैं? यह क्रिया पूर्ववत नहीं की जा सकती।", "runningContainerWarning": "चेतावनी: यह कंटेनर वर्तमान में चल रहा है। हटाने पर पहले इसे रोका जाएगा।", "loadingContainers": "कंटेनर लोड हो रहे हैं...", @@ -78,7 +78,7 @@ "containerMustBeRunning": "कंसोल तक पहुंचने के लिए कंटेनर चालू होना चाहिए", "verificationCodePrompt": "सत्यापन कोड दर्ज करें", "totpVerificationFailed": "TOTP सत्यापन विफल। कृपया पुनः प्रयास करें।", - "browserSignInFailed": "Sign-in failed. Please try again.", + "browserSignInFailed": "प्रवेश विफल। कृपया दोबारा प्रयास करें।", "connectedTo": "{{containerName}} से जुड़ा", "disconnected": "डिस्कनेक्टेड", "consoleError": "कंसोल त्रुटि", @@ -101,15 +101,15 @@ "consoleTab": "कंसोल", "startContainerToAccess": "कंसोल तक पहुंचने के लिए कंटेनर चालू करें", "noHostSelected": "कोई होस्ट चयनित नहीं है", - "failedToFetchLogs": "Failed to fetch logs: {{error}}", - "failedToDownloadLogs": "Failed to download logs: {{error}}" + "failedToFetchLogs": "लॉग प्राप्त करने में विफल: {{error}}", + "failedToDownloadLogs": "लॉग डाउनलोड करने में विफल: {{error}}" }, "nav": { "docker": "Docker" }, "onboarding": { "feature_docker": "Docker", - "feature_docker_desc": "See containers, read logs and watch stats on any host running Docker." + "feature_docker_desc": "डॉकर चलाने वाले किसी भी होस्ट पर कंटेनर देखें, लॉग पढ़ें और आंकड़े देखें।" }, "terminal": { "retry": "पुनः प्रयास करें", @@ -118,15 +118,15 @@ }, "permissions": { "use": { - "title": "Use Docker", - "description": "Open the Docker manager and container consoles on hosts with Docker enabled." + "title": "डॉकर का उपयोग करें", + "description": "जिन होस्ट पर डॉकर सक्षम है, उन पर डॉकर मैनेजर और कंटेनर कंसोल खोलें।" } }, "settings": { "host": { "enable": { "label": "Docker सक्षम करें", - "description": "Manage containers on this host." + "description": "इस होस्ट पर कंटेनरों का प्रबंधन करें।" }, "containerRuntime": { "label": "कंटेनर रनटाइम", @@ -137,7 +137,7 @@ } }, "errors": { - "remoteServerRequired": "Remote server required. Connect a remote server in Settings to use this connection type." + "remoteServerRequired": "रिमोट सर्वर आवश्यक है। इस कनेक्शन प्रकार का उपयोग करने के लिए सेटिंग्स में जाकर रिमोट सर्वर कनेक्ट करें।" }, "hosts": { "docsLink": "दस्तावेज़ देखें", diff --git a/plugins/docker/locales/translated/id_ID.json b/plugins/docker/locales/translated/id_ID.json index 631c3a919..170d6d860 100644 --- a/plugins/docker/locales/translated/id_ID.json +++ b/plugins/docker/locales/translated/id_ID.json @@ -1,147 +1,147 @@ { "docker": { - "notEnabled": "Docker is not enabled for this host", - "validating": "Validating Docker...", - "connecting": "Connecting...", - "error": "Error", + "notEnabled": "Docker tidak diaktifkan untuk host ini.", + "validating": "Memvalidasi Docker...", + "connecting": "Menghubungkan...", + "error": "Kesalahan", "version": "{{runtime}} {{version}}", - "connectionFailed": "Failed to connect to Docker", - "containerStarted": "Container {{name}} started", - "failedToStartContainer": "Failed to start container {{name}}", - "containerStopped": "Container {{name}} stopped", - "failedToStopContainer": "Failed to stop container {{name}}", - "containerRestarted": "Container {{name}} restarted", - "failedToRestartContainer": "Failed to restart container {{name}}", - "containerPaused": "Container {{name}} paused", - "containerUnpaused": "Container {{name}} unpaused", - "failedToTogglePauseContainer": "Failed to toggle pause state for container {{name}}", - "containerRemoved": "Container {{name}} removed", - "failedToRemoveContainer": "Failed to remove container {{name}}", - "image": "Image", - "ports": "Ports", - "noPorts": "No ports", - "start": "Start", - "stop": "Stop", + "connectionFailed": "Gagal terhubung ke Docker", + "containerStarted": "Kontainer {{name}} dimulai", + "failedToStartContainer": "Gagal memulai kontainer {{name}}", + "containerStopped": "Kontainer {{name}} berhenti", + "failedToStopContainer": "Gagal menghentikan kontainer {{name}}", + "containerRestarted": "Kontainer {{name}} dimulai ulang", + "failedToRestartContainer": "Gagal memulai ulang kontainer {{name}}", + "containerPaused": "Kontainer {{name}} berhenti", + "containerUnpaused": "Kontainer {{name}} tidak dijeda", + "failedToTogglePauseContainer": "Gagal mengubah status jeda untuk kontainer {{name}}", + "containerRemoved": "Kontainer {{name}} dihapus", + "failedToRemoveContainer": "Gagal menghapus kontainer {{name}}", + "image": "Gambar", + "ports": "Pelabuhan", + "noPorts": "Tidak ada port", + "start": "Awal", + "stop": "Berhenti", "status": "Status", - "actions": "Actions", - "cardView": "Card view", - "listView": "List view", - "confirmRemoveContainer": "Are you sure you want to remove the container '{{name}}'? This action cannot be undone.", - "runningContainerWarning": "Warning: This container is currently running. Removing it will stop the container first.", - "loadingContainers": "Loading containers...", - "manager": "Docker Manager", - "autoRefresh": "Auto Refresh", - "timestamps": "Timestamps", - "lines": "Lines", - "filterLogs": "Filter logs...", - "refresh": "Refresh", - "download": "Download", - "clear": "Clear", - "logsDownloaded": "Logs downloaded successfully", - "last50": "Last 50", - "last100": "Last 100", - "last500": "Last 500", - "last1000": "Last 1000", - "allLogs": "All Logs", - "noLogsMatching": "No logs matching \"{{query}}\"", - "noLogsAvailable": "No logs available", - "noContainersFound": "No containers found", - "noContainersFoundHint": "No Docker containers are available on this host", - "searchPlaceholder": "Search containers...", - "allStatuses": "All Statuses", - "stateRunning": "Running", - "statePaused": "Paused", - "stateExited": "Exited", - "stateRestarting": "Restarting", - "noContainersMatchFilters": "No containers match your filters", - "noContainersMatchFiltersHint": "Try adjusting your search or filter criteria", - "failedToFetchStats": "Failed to fetch container statistics", - "containerNotRunning": "Container not running", - "startContainerToViewStats": "Start the container to view statistics", - "loadingStats": "Loading statistics...", - "errorLoadingStats": "Error loading statistics", - "noStatsAvailable": "No statistics available", - "cpuUsage": "CPU Usage", - "current": "Current", - "memoryUsage": "Memory Usage", - "networkIo": "Network I/O", - "input": "Input", - "output": "Output", - "blockIo": "Block I/O", - "read": "Read", - "write": "Write", - "pids": "PIDs", - "containerInformation": "Container Information", - "name": "Name", - "id": "ID", - "state": "State", - "containerMustBeRunning": "Container must be running to access console", - "verificationCodePrompt": "Enter verification code", - "totpVerificationFailed": "TOTP verification failed. Please try again.", - "browserSignInFailed": "Sign-in failed. Please try again.", - "connectedTo": "Connected to {{containerName}}", - "disconnected": "Disconnected", - "consoleError": "Console error", - "errorMessage": "Error: {{message}}", - "failedToConnect": "Failed to connect to container", - "console": "Console", - "selectShell": "Select shell", - "bash": "Bash", + "actions": "Tindakan", + "cardView": "Tampilan kartu", + "listView": "Tampilan daftar", + "confirmRemoveContainer": "Apakah Anda yakin ingin menghapus kontainer '{{name}}'? Tindakan ini tidak dapat dibatalkan.", + "runningContainerWarning": "Peringatan: Kontainer ini sedang berjalan. Menghapusnya akan menghentikan kontainer terlebih dahulu.", + "loadingContainers": "Memuat kontainer...", + "manager": "Manajer Docker", + "autoRefresh": "Penyegaran Otomatis", + "timestamps": "Cap waktu", + "lines": "Garis", + "filterLogs": "Filter log...", + "refresh": "Menyegarkan", + "download": "Unduh", + "clear": "Jernih", + "logsDownloaded": "Log berhasil diunduh.", + "last50": "50 Terakhir", + "last100": "100 terakhir", + "last500": "500 Terakhir", + "last1000": "1000 terakhir", + "allLogs": "Semua Log", + "noLogsMatching": "Tidak ada log yang cocok dengan \"{{query}}\"", + "noLogsAvailable": "Tidak ada log yang tersedia.", + "noContainersFound": "Tidak ditemukan wadah apa pun", + "noContainersFoundHint": "Tidak ada kontainer Docker yang tersedia di host ini.", + "searchPlaceholder": "Cari kontainer...", + "allStatuses": "Semua Status", + "stateRunning": "Berlari", + "statePaused": "Dijeda", + "stateExited": "Keluar", + "stateRestarting": "Memulai ulang", + "noContainersMatchFilters": "Tidak ada wadah yang sesuai dengan filter Anda.", + "noContainersMatchFiltersHint": "Cobalah menyesuaikan kriteria pencarian atau filter Anda.", + "failedToFetchStats": "Gagal mengambil statistik kontainer", + "containerNotRunning": "Kontainer tidak berjalan", + "startContainerToViewStats": "Jalankan kontainer untuk melihat statistik.", + "loadingStats": "Memuat statistik...", + "errorLoadingStats": "Terjadi kesalahan saat memuat statistik.", + "noStatsAvailable": "Tidak ada statistik yang tersedia.", + "cpuUsage": "Penggunaan CPU", + "current": "Saat ini", + "memoryUsage": "Penggunaan Memori", + "networkIo": "Input/Output Jaringan", + "input": "Masukan", + "output": "Keluaran", + "blockIo": "Blok I/O", + "read": "Membaca", + "write": "Menulis", + "pids": "PID", + "containerInformation": "Informasi Kontainer", + "name": "Nama", + "id": "PENGENAL", + "state": "Negara", + "containerMustBeRunning": "Kontainer harus berjalan agar dapat mengakses konsol.", + "verificationCodePrompt": "Masukkan kode verifikasi", + "totpVerificationFailed": "Verifikasi TOTP gagal. Silakan coba lagi.", + "browserSignInFailed": "Login gagal. Silakan coba lagi.", + "connectedTo": "Terhubung ke {{containerName}}", + "disconnected": "Terputus", + "consoleError": "Kesalahan konsol", + "errorMessage": "Kesalahan: {{message}}", + "failedToConnect": "Gagal terhubung ke kontainer", + "console": "Menghibur", + "selectShell": "Pilih cangkang", + "bash": "Pesta", "sh": "sh", - "ash": "ash", - "connect": "Connect", - "disconnect": "Disconnect", - "notConnected": "Not connected", - "clickToConnect": "Click connect to start a shell session", - "connectingTo": "Connecting to {{containerName}}...", - "containerNotFound": "Container not found", - "backToList": "Back to List", - "logs": "Logs", - "stats": "Stats", - "consoleTab": "Console", - "startContainerToAccess": "Start the container to access the console", - "noHostSelected": "No host selected", - "failedToFetchLogs": "Failed to fetch logs: {{error}}", - "failedToDownloadLogs": "Failed to download logs: {{error}}" + "ash": "abu", + "connect": "Menghubungkan", + "disconnect": "Memutuskan", + "notConnected": "Tidak terhubung", + "clickToConnect": "Klik sambungkan untuk memulai sesi shell.", + "connectingTo": "Menghubungkan ke {{containerName}}...", + "containerNotFound": "Kontainer tidak ditemukan", + "backToList": "Kembali ke Daftar", + "logs": "Log", + "stats": "Statistik", + "consoleTab": "Menghibur", + "startContainerToAccess": "Jalankan kontainer untuk mengakses konsol.", + "noHostSelected": "Tidak ada pembawa acara yang dipilih.", + "failedToFetchLogs": "Gagal mengambil log: {{error}}", + "failedToDownloadLogs": "Gagal mengunduh log: {{error}}" }, "nav": { - "docker": "Docker" + "docker": "Buruh pelabuhan" }, "onboarding": { - "feature_docker": "Docker", - "feature_docker_desc": "See containers, read logs and watch stats on any host running Docker." + "feature_docker": "Buruh pelabuhan", + "feature_docker_desc": "Lihat kontainer, baca log, dan pantau statistik pada host mana pun yang menjalankan Docker." }, "terminal": { - "retry": "Retry", - "clipboardReadFailed": "Failed to read from clipboard. Make sure clipboard permissions are granted.", - "clipboardWriteFailed": "Failed to copy to clipboard. Make sure the page is served over HTTPS or localhost." + "retry": "Mencoba kembali", + "clipboardReadFailed": "Gagal membaca dari clipboard. Pastikan izin clipboard telah diberikan.", + "clipboardWriteFailed": "Gagal menyalin ke papan klip. Pastikan halaman disajikan melalui HTTPS atau localhost." }, "permissions": { "use": { - "title": "Use Docker", - "description": "Open the Docker manager and container consoles on hosts with Docker enabled." + "title": "Gunakan Docker", + "description": "Buka pengelola Docker dan konsol kontainer pada host yang telah mengaktifkan Docker." } }, "settings": { "host": { "enable": { - "label": "Enable Docker", - "description": "Manage containers on this host." + "label": "Aktifkan Docker", + "description": "Kelola kontainer di host ini." }, "containerRuntime": { - "label": "Container Runtime", - "description": "Choose the CLI used for container management on this host", - "docker": "Docker", + "label": "Lingkungan Eksekusi Kontainer", + "description": "Pilih CLI yang digunakan untuk manajemen kontainer pada host ini.", + "docker": "Buruh pelabuhan", "podman": "Podman" } } }, "errors": { - "remoteServerRequired": "Remote server required. Connect a remote server in Settings to use this connection type." + "remoteServerRequired": "Diperlukan server jarak jauh. Hubungkan server jarak jauh di Pengaturan untuk menggunakan jenis koneksi ini." }, "hosts": { - "docsLink": "View docs", - "hostNotFound": "Host not found", - "loadingHost": "Loading host..." + "docsLink": "Lihat dokumen", + "hostNotFound": "Host tidak ditemukan", + "loadingHost": "Memuat host..." } } diff --git a/plugins/docker/locales/translated/no_NO.json b/plugins/docker/locales/translated/no_NO.json index f3f5c6eb4..bfb75e1d7 100644 --- a/plugins/docker/locales/translated/no_NO.json +++ b/plugins/docker/locales/translated/no_NO.json @@ -1,147 +1,147 @@ { "docker": { - "notEnabled": "Docker is not enabled for this host", - "validating": "Validating Docker...", + "notEnabled": "Docker er ikke aktivert for denne verten", + "validating": "Validerer Docker...", "connecting": "Kobler til...", "error": "Feil", "version": "{{runtime}} {{version}}", - "connectionFailed": "Failed to connect to Docker", - "containerStarted": "Container {{name}} started", - "failedToStartContainer": "Failed to start container {{name}}", - "containerStopped": "Container {{name}} stopped", - "failedToStopContainer": "Failed to stop container {{name}}", - "containerRestarted": "Container {{name}} restarted", - "failedToRestartContainer": "Failed to restart container {{name}}", - "containerPaused": "Container {{name}} paused", - "containerUnpaused": "Container {{name}} unpaused", - "failedToTogglePauseContainer": "Failed to toggle pause state for container {{name}}", - "containerRemoved": "Container {{name}} removed", - "failedToRemoveContainer": "Failed to remove container {{name}}", - "image": "Image", - "ports": "Ports", - "noPorts": "No ports", + "connectionFailed": "Kunne ikke koble til Docker", + "containerStarted": "Container {{name}} startet", + "failedToStartContainer": "Kunne ikke starte containeren {{name}}", + "containerStopped": "Container {{name}} stoppet", + "failedToStopContainer": "Klarte ikke å stoppe containeren {{name}}", + "containerRestarted": "Beholder {{name}} startet på nytt", + "failedToRestartContainer": "Kunne ikke starte beholderen {{name}} på nytt", + "containerPaused": "Beholder {{name}} satt på pause", + "containerUnpaused": "Beholder {{name}} er ikke satt på pause lenger", + "failedToTogglePauseContainer": "Kunne ikke slå av/på pausetilstand for container {{name}}", + "containerRemoved": "Beholder {{name}} fjernet", + "failedToRemoveContainer": "Kunne ikke fjerne beholderen {{name}}", + "image": "Bilde", + "ports": "Porter", + "noPorts": "Ingen porter", "start": "Start", "stop": "Stopp", "status": "Status", "actions": "Handlinger", - "cardView": "Card view", - "listView": "List view", - "confirmRemoveContainer": "Are you sure you want to remove the container '{{name}}'? This action cannot be undone.", - "runningContainerWarning": "Warning: This container is currently running. Removing it will stop the container first.", - "loadingContainers": "Loading containers...", + "cardView": "Kortvisning", + "listView": "Listevisning", + "confirmRemoveContainer": "Er du sikker på at du vil fjerne beholderen '{{name}}'? Denne handlingen kan ikke angres.", + "runningContainerWarning": "Advarsel: Denne beholderen kjører for øyeblikket. Hvis du fjerner den, stoppes beholderen først.", + "loadingContainers": "Laster containere ...", "manager": "Docker Manager", - "autoRefresh": "Auto Refresh", - "timestamps": "Timestamps", - "lines": "Lines", - "filterLogs": "Filter logs...", + "autoRefresh": "Automatisk oppdatering", + "timestamps": "Tidsstempler", + "lines": "Linjer", + "filterLogs": "Filtrer logger...", "refresh": "Oppdater", "download": "Last ned", "clear": "Tøm", - "logsDownloaded": "Logs downloaded successfully", - "last50": "Last 50", - "last100": "Last 100", - "last500": "Last 500", - "last1000": "Last 1000", - "allLogs": "All Logs", - "noLogsMatching": "No logs matching \"{{query}}\"", - "noLogsAvailable": "No logs available", - "noContainersFound": "No containers found", - "noContainersFoundHint": "No Docker containers are available on this host", - "searchPlaceholder": "Search containers...", - "allStatuses": "All Statuses", + "logsDownloaded": "Loggene er lastet ned", + "last50": "Siste 50", + "last100": "Siste 100", + "last500": "Siste 500", + "last1000": "Siste 1000", + "allLogs": "Alle logger", + "noLogsMatching": "Ingen logger som samsvarer med «{{query}}»", + "noLogsAvailable": "Ingen logger tilgjengelig", + "noContainersFound": "Ingen containere funnet", + "noContainersFoundHint": "Ingen Docker-containere er tilgjengelige på denne verten", + "searchPlaceholder": "Søk i containere...", + "allStatuses": "Alle statuser", "stateRunning": "Kjører", - "statePaused": "Paused", - "stateExited": "Exited", - "stateRestarting": "Restarting", - "noContainersMatchFilters": "No containers match your filters", - "noContainersMatchFiltersHint": "Try adjusting your search or filter criteria", - "failedToFetchStats": "Failed to fetch container statistics", - "containerNotRunning": "Container not running", - "startContainerToViewStats": "Start the container to view statistics", - "loadingStats": "Loading statistics...", - "errorLoadingStats": "Error loading statistics", - "noStatsAvailable": "No statistics available", + "statePaused": "Pauset", + "stateExited": "Avsluttet", + "stateRestarting": "Starter på nytt", + "noContainersMatchFilters": "Ingen beholdere samsvarer med filtrene dine", + "noContainersMatchFiltersHint": "Prøv å justere søke- eller filterkriteriene dine", + "failedToFetchStats": "Kunne ikke hente containerstatistikk", + "containerNotRunning": "Beholderen kjører ikke", + "startContainerToViewStats": "Start beholderen for å se statistikk", + "loadingStats": "Laster inn statistikk ...", + "errorLoadingStats": "Feil ved lasting av statistikk", + "noStatsAvailable": "Ingen statistikk tilgjengelig", "cpuUsage": "CPU-bruk", - "current": "Current", + "current": "Nåværende", "memoryUsage": "Minnebruk", - "networkIo": "Network I/O", - "input": "Input", - "output": "Output", - "blockIo": "Block I/O", + "networkIo": "Nettverk I/O", + "input": "Inndata", + "output": "Produksjon", + "blockIo": "Blokk I/O", "read": "Les", "write": "Skriv", - "pids": "PIDs", - "containerInformation": "Container Information", + "pids": "PID-er", + "containerInformation": "Containerinformasjon", "name": "Navn", "id": "ID", - "state": "State", - "containerMustBeRunning": "Container must be running to access console", + "state": "Tilstand", + "containerMustBeRunning": "Containeren må kjøre for å få tilgang til konsollen", "verificationCodePrompt": "Angi verifikasjonskode", - "totpVerificationFailed": "TOTP verification failed. Please try again.", - "browserSignInFailed": "Sign-in failed. Please try again.", - "connectedTo": "Connected to {{containerName}}", + "totpVerificationFailed": "TOTP-verifisering mislyktes. Prøv på nytt.", + "browserSignInFailed": "Påloggingen mislyktes. Prøv på nytt.", + "connectedTo": "Koblet til {{containerName}}", "disconnected": "Frakoblet", - "consoleError": "Console error", + "consoleError": "Konsollfeil", "errorMessage": "Feil: {{message}}", - "failedToConnect": "Failed to connect to container", - "console": "Console", - "selectShell": "Select shell", + "failedToConnect": "Kunne ikke koble til beholderen", + "console": "Konsoll", + "selectShell": "Velg skall", "bash": "Bash", "sh": "sh", - "ash": "ash", + "ash": "aske", "connect": "Koble til", "disconnect": "Koble fra", - "notConnected": "Not connected", - "clickToConnect": "Click connect to start a shell session", - "connectingTo": "Connecting to {{containerName}}...", - "containerNotFound": "Container not found", - "backToList": "Back to List", - "logs": "Logs", - "stats": "Stats", - "consoleTab": "Console", - "startContainerToAccess": "Start the container to access the console", + "notConnected": "Ikke tilkoblet", + "clickToConnect": "Klikk på koble til for å starte en skalløkt", + "connectingTo": "Kobler til {{containerName}}...", + "containerNotFound": "Beholderen ble ikke funnet", + "backToList": "Tilbake til listen", + "logs": "Logger", + "stats": "Statistikk", + "consoleTab": "Konsoll", + "startContainerToAccess": "Start containeren for å få tilgang til konsollen", "noHostSelected": "Ingen vert valgt", - "failedToFetchLogs": "Failed to fetch logs: {{error}}", - "failedToDownloadLogs": "Failed to download logs: {{error}}" + "failedToFetchLogs": "Kunne ikke hente logger: {{error}}", + "failedToDownloadLogs": "Kunne ikke laste ned logger: {{error}}" }, "nav": { - "docker": "Docker" + "docker": "Dokker" }, "onboarding": { - "feature_docker": "Docker", - "feature_docker_desc": "See containers, read logs and watch stats on any host running Docker." + "feature_docker": "Dokker", + "feature_docker_desc": "Se containere, les logger og se statistikk på alle verter som kjører Docker." }, "terminal": { "retry": "Prøv igjen", - "clipboardReadFailed": "Failed to read from clipboard. Make sure clipboard permissions are granted.", - "clipboardWriteFailed": "Failed to copy to clipboard. Make sure the page is served over HTTPS or localhost." + "clipboardReadFailed": "Kunne ikke lese fra utklippstavlen. Sørg for at utklippstavlen har tillatelser.", + "clipboardWriteFailed": "Kunne ikke kopiere til utklippstavlen. Sørg for at siden serveres via HTTPS eller localhost." }, "permissions": { "use": { - "title": "Use Docker", - "description": "Open the Docker manager and container consoles on hosts with Docker enabled." + "title": "Bruk Docker", + "description": "Åpne Docker-behandleren og containerkonsollene på verter med Docker aktivert." } }, "settings": { "host": { "enable": { - "label": "Enable Docker", - "description": "Manage containers on this host." + "label": "Aktiver Docker", + "description": "Administrer containere på denne verten." }, "containerRuntime": { - "label": "Container Runtime", - "description": "Choose the CLI used for container management on this host", - "docker": "Docker", + "label": "Containerkjøringstid", + "description": "Velg CRI-et som brukes for containeradministrasjon på denne verten", + "docker": "Dokker", "podman": "Podman" } } }, "errors": { - "remoteServerRequired": "Remote server required. Connect a remote server in Settings to use this connection type." + "remoteServerRequired": "Ekstern server kreves. Koble til en ekstern server i Innstillinger for å bruke denne tilkoblingstypen." }, "hosts": { - "docsLink": "View docs", - "hostNotFound": "Host not found", - "loadingHost": "Loading host..." + "docsLink": "Vis dokumenter", + "hostNotFound": "Verten ble ikke funnet", + "loadingHost": "Laster inn vert ..." } } diff --git a/plugins/docker/locales/translated/pl_PL.json b/plugins/docker/locales/translated/pl_PL.json index 2c2474b57..feddd9fe7 100644 --- a/plugins/docker/locales/translated/pl_PL.json +++ b/plugins/docker/locales/translated/pl_PL.json @@ -23,9 +23,9 @@ "start": "Start", "stop": "Stop", "status": "Status", - "actions": "Actions", - "cardView": "Card view", - "listView": "List view", + "actions": "Akcje", + "cardView": "Widok karty", + "listView": "Widok listy", "confirmRemoveContainer": "Czy na pewno chcesz usunąć kontener „{{name}}”? Tej czynności nie można cofnąć.", "runningContainerWarning": "Ostrzeżenie: Ten kontener jest obecnie uruchomiony. Jego usunięcie spowoduje najpierw jego zatrzymanie.", "loadingContainers": "Ładowanie kontenerów...", @@ -78,7 +78,7 @@ "containerMustBeRunning": "Aby uzyskać dostęp do konsoli, kontener musi być uruchomiony", "verificationCodePrompt": "Wprowadź kod weryfikacyjny", "totpVerificationFailed": "Weryfikacja TOTP nie powiodła się. Spróbuj ponownie.", - "browserSignInFailed": "Sign-in failed. Please try again.", + "browserSignInFailed": "Logowanie nie powiodło się. Spróbuj ponownie.", "connectedTo": "Połączono z {{containerName}}", "disconnected": "Rozłączono", "consoleError": "Błąd konsoli", @@ -101,8 +101,8 @@ "consoleTab": "Konsola", "startContainerToAccess": "Uruchom kontener, aby uzyskać dostęp do konsoli", "noHostSelected": "Nie wybrano hosta", - "failedToFetchLogs": "Failed to fetch logs: {{error}}", - "failedToDownloadLogs": "Failed to download logs: {{error}}" + "failedToFetchLogs": "Nie udało się pobrać dzienników: {{error}}", + "failedToDownloadLogs": "Nie udało się pobrać dzienników: {{error}}" }, "nav": { "docker": "Docker" @@ -118,15 +118,15 @@ }, "permissions": { "use": { - "title": "Use Docker", - "description": "Open the Docker manager and container consoles on hosts with Docker enabled." + "title": "Użyj Dockera", + "description": "Otwórz menedżera Docker i konsole kontenerów na hostach z włączonym Dockerem." } }, "settings": { "host": { "enable": { "label": "Włącz Docker", - "description": "Manage containers on this host." + "description": "Zarządzaj kontenerami na tym hoście." }, "containerRuntime": { "label": "Środowisko wykonawcze kontenera", diff --git a/plugins/docker/locales/translated/pt_BR.json b/plugins/docker/locales/translated/pt_BR.json index a9bee900a..099204988 100644 --- a/plugins/docker/locales/translated/pt_BR.json +++ b/plugins/docker/locales/translated/pt_BR.json @@ -1,147 +1,147 @@ { "docker": { - "notEnabled": "Docker is not enabled for this host", - "validating": "Validating Docker...", + "notEnabled": "O Docker não está habilitado para este host.", + "validating": "Validando o Docker...", "connecting": "Conectando...", "error": "Erro", "version": "{{runtime}} {{version}}", - "connectionFailed": "Failed to connect to Docker", - "containerStarted": "Container {{name}} started", - "failedToStartContainer": "Failed to start container {{name}}", - "containerStopped": "Container {{name}} stopped", - "failedToStopContainer": "Failed to stop container {{name}}", - "containerRestarted": "Container {{name}} restarted", - "failedToRestartContainer": "Failed to restart container {{name}}", - "containerPaused": "Container {{name}} paused", - "containerUnpaused": "Container {{name}} unpaused", - "failedToTogglePauseContainer": "Failed to toggle pause state for container {{name}}", - "containerRemoved": "Container {{name}} removed", - "failedToRemoveContainer": "Failed to remove container {{name}}", - "image": "Image", - "ports": "Ports", - "noPorts": "No ports", + "connectionFailed": "Falha ao conectar ao Docker", + "containerStarted": "Contêiner {{name}} iniciado", + "failedToStartContainer": "Falha ao iniciar o contêiner {{name}}", + "containerStopped": "Contêiner {{name}} parado", + "failedToStopContainer": "Falha ao parar o contêiner {{name}}", + "containerRestarted": "Contêiner {{name}} reiniciado", + "failedToRestartContainer": "Falha ao reiniciar o contêiner {{name}}", + "containerPaused": "Contêiner {{name}} pausado", + "containerUnpaused": "Contêiner {{name}} despausado", + "failedToTogglePauseContainer": "Falha ao alternar o estado de pausa para o contêiner {{name}}", + "containerRemoved": "Contêiner {{name}} removido", + "failedToRemoveContainer": "Falha ao remover o contêiner {{name}}", + "image": "Imagem", + "ports": "Portos", + "noPorts": "Sem portas", "start": "Iniciar", - "stop": "Stop", + "stop": "Parar", "status": "Status", - "actions": "Actions", - "cardView": "Card view", - "listView": "List view", - "confirmRemoveContainer": "Are you sure you want to remove the container '{{name}}'? This action cannot be undone.", - "runningContainerWarning": "Warning: This container is currently running. Removing it will stop the container first.", - "loadingContainers": "Loading containers...", - "manager": "Docker Manager", - "autoRefresh": "Auto Refresh", - "timestamps": "Timestamps", - "lines": "Lines", - "filterLogs": "Filter logs...", + "actions": "Ações", + "cardView": "Visualização em cartão", + "listView": "Visualização em lista", + "confirmRemoveContainer": "Tem certeza de que deseja remover o contêiner '{{name}}'? Esta ação não pode ser desfeita.", + "runningContainerWarning": "Aviso: Este contêiner está em execução. Removê-lo interromperá o contêiner primeiro.", + "loadingContainers": "Carregando contêineres...", + "manager": "Gerenciador de Docker", + "autoRefresh": "Atualização automática", + "timestamps": "Carimbos de data/hora", + "lines": "Linhas", + "filterLogs": "Filtrar registros...", "refresh": "Atualizar", "download": "Download", "clear": "Limpar", - "logsDownloaded": "Logs downloaded successfully", - "last50": "Last 50", - "last100": "Last 100", - "last500": "Last 500", - "last1000": "Last 1000", - "allLogs": "All Logs", - "noLogsMatching": "No logs matching \"{{query}}\"", - "noLogsAvailable": "No logs available", - "noContainersFound": "No containers found", - "noContainersFoundHint": "No Docker containers are available on this host", - "searchPlaceholder": "Search containers...", - "allStatuses": "All Statuses", - "stateRunning": "Running", - "statePaused": "Paused", - "stateExited": "Exited", - "stateRestarting": "Restarting", - "noContainersMatchFilters": "No containers match your filters", - "noContainersMatchFiltersHint": "Try adjusting your search or filter criteria", - "failedToFetchStats": "Failed to fetch container statistics", - "containerNotRunning": "Container not running", - "startContainerToViewStats": "Start the container to view statistics", - "loadingStats": "Loading statistics...", - "errorLoadingStats": "Error loading statistics", - "noStatsAvailable": "No statistics available", - "cpuUsage": "CPU Usage", - "current": "Current", - "memoryUsage": "Memory Usage", + "logsDownloaded": "Registros baixados com sucesso", + "last50": "Últimos 50", + "last100": "Últimos 100", + "last500": "Últimos 500", + "last1000": "Últimos 1000", + "allLogs": "Todos os registros", + "noLogsMatching": "Nenhum registro correspondente a \"{{query}}\"", + "noLogsAvailable": "Nenhum registro disponível", + "noContainersFound": "Nenhum contêiner encontrado", + "noContainersFoundHint": "Não há contêineres Docker disponíveis neste host.", + "searchPlaceholder": "Contêineres de pesquisa...", + "allStatuses": "Todos os status", + "stateRunning": "Correndo", + "statePaused": "Em pausa", + "stateExited": "Saiu", + "stateRestarting": "Reiniciando", + "noContainersMatchFilters": "Nenhum recipiente corresponde aos seus filtros.", + "noContainersMatchFiltersHint": "Tente ajustar seus critérios de pesquisa ou filtro.", + "failedToFetchStats": "Falha ao obter as estatísticas do contêiner.", + "containerNotRunning": "Contêiner não está em execução", + "startContainerToViewStats": "Inicie o contêiner para visualizar as estatísticas.", + "loadingStats": "Carregando estatísticas...", + "errorLoadingStats": "Estatísticas de carregamento de erros", + "noStatsAvailable": "Não há estatísticas disponíveis.", + "cpuUsage": "Utilização da CPU", + "current": "Atual", + "memoryUsage": "Uso de memória", "networkIo": "Entrada e Saída de rede", "input": "Entrada", - "output": "Output", + "output": "Saída", "blockIo": "Bloco de E/S", - "read": "Read", - "write": "Write", + "read": "Ler", + "write": "Escrever", "pids": "Identificadores de Processos", - "containerInformation": "Container Information", - "name": "Name", - "id": "ID", - "state": "State", + "containerInformation": "Informações do contêiner", + "name": "Nome", + "id": "EU IA", + "state": "Estado", "containerMustBeRunning": "O contêiner precisa estar em execução para acessar o console", - "verificationCodePrompt": "Enter verification code", - "totpVerificationFailed": "TOTP verification failed. Please try again.", - "browserSignInFailed": "Sign-in failed. Please try again.", - "connectedTo": "Connected to {{containerName}}", - "disconnected": "Disconnected", - "consoleError": "Console error", - "errorMessage": "Error: {{message}}", - "failedToConnect": "Failed to connect to container", + "verificationCodePrompt": "Insira o código de verificação", + "totpVerificationFailed": "A verificação TOTP falhou. Tente novamente.", + "browserSignInFailed": "Falha ao efetuar o login. Tente novamente.", + "connectedTo": "Conectado a {{containerName}}", + "disconnected": "Desconectado", + "consoleError": "Erro no console", + "errorMessage": "Erro: {{message}}", + "failedToConnect": "Falha ao conectar ao contêiner", "console": "Console", - "selectShell": "Select shell", + "selectShell": "Selecione shell", "bash": "Bash", "sh": "sh", - "ash": "ash", + "ash": "cinzas", "connect": "Conectar", "disconnect": "Desconectar", - "notConnected": "Not connected", - "clickToConnect": "Click connect to start a shell session", - "connectingTo": "Connecting to {{containerName}}...", - "containerNotFound": "Container not found", - "backToList": "Back to List", - "logs": "Logs", - "stats": "Stats", + "notConnected": "Não conectado", + "clickToConnect": "Clique em conectar para iniciar uma sessão de shell.", + "connectingTo": "Conectando a {{containerName}}...", + "containerNotFound": "Contêiner não encontrado", + "backToList": "Voltar à lista", + "logs": "Registros", + "stats": "Estatísticas", "consoleTab": "Console", - "startContainerToAccess": "Start the container to access the console", - "noHostSelected": "No host selected", - "failedToFetchLogs": "Failed to fetch logs: {{error}}", - "failedToDownloadLogs": "Failed to download logs: {{error}}" + "startContainerToAccess": "Inicie o contêiner para acessar o console.", + "noHostSelected": "Nenhum host selecionado", + "failedToFetchLogs": "Falha ao obter os registros: {{error}}", + "failedToDownloadLogs": "Falha ao baixar os registros: {{error}}" }, "nav": { "docker": "Docker" }, "onboarding": { "feature_docker": "Docker", - "feature_docker_desc": "See containers, read logs and watch stats on any host running Docker." + "feature_docker_desc": "Visualize contêineres, leia registros e acompanhe as estatísticas em qualquer host que execute o Docker." }, "terminal": { - "retry": "Retry", - "clipboardReadFailed": "Failed to read from clipboard. Make sure clipboard permissions are granted.", - "clipboardWriteFailed": "Failed to copy to clipboard. Make sure the page is served over HTTPS or localhost." + "retry": "Tentar novamente", + "clipboardReadFailed": "Não foi possível ler o conteúdo da área de transferência. Certifique-se de que as permissões de acesso à área de transferência estejam concedidas.", + "clipboardWriteFailed": "Falha ao copiar para a área de transferência. Certifique-se de que a página esteja sendo servida via HTTPS ou localhost." }, "permissions": { "use": { - "title": "Use Docker", - "description": "Open the Docker manager and container consoles on hosts with Docker enabled." + "title": "Use o Docker", + "description": "Abra o gerenciador do Docker e os consoles de contêineres nos hosts com o Docker habilitado." } }, "settings": { "host": { "enable": { "label": "Ativar Docker", - "description": "Manage containers on this host." + "description": "Gerencie os contêineres neste host." }, "containerRuntime": { - "label": "Container Runtime", - "description": "Choose the CLI used for container management on this host", + "label": "Tempo de execução do contêiner", + "description": "Escolha a CLI usada para gerenciamento de contêineres neste host.", "docker": "Docker", "podman": "Podman" } } }, "errors": { - "remoteServerRequired": "Remote server required. Connect a remote server in Settings to use this connection type." + "remoteServerRequired": "É necessário um servidor remoto. Conecte um servidor remoto nas Configurações para usar este tipo de conexão." }, "hosts": { "docsLink": "Documentação", - "hostNotFound": "Host not found", - "loadingHost": "Loading host..." + "hostNotFound": "Host não encontrado", + "loadingHost": "Carregando host..." } } diff --git a/plugins/docker/locales/translated/pt_PT.json b/plugins/docker/locales/translated/pt_PT.json index 5da41c447..1ed015fe5 100644 --- a/plugins/docker/locales/translated/pt_PT.json +++ b/plugins/docker/locales/translated/pt_PT.json @@ -23,9 +23,9 @@ "start": "Iniciar", "stop": "Stop", "status": "Estado", - "actions": "Actions", - "cardView": "Card view", - "listView": "List view", + "actions": "Ações", + "cardView": "Visualização em cartão", + "listView": "Visualização em lista", "confirmRemoveContainer": "Tem a certeza de que pretende remover o contentor '{{name}}'? Esta ação não pode ser desfeita.", "runningContainerWarning": "Aviso: Este contentor está em execução. Removê-lo irá pará-lo primeiro.", "loadingContainers": "A carregar contentores...", @@ -78,7 +78,7 @@ "containerMustBeRunning": "O contentor tem de estar em execução para aceder à consola", "verificationCodePrompt": "Introduza o código de verificação", "totpVerificationFailed": "A verificação TOTP falhou. Por favor, tente novamente.", - "browserSignInFailed": "Sign-in failed. Please try again.", + "browserSignInFailed": "Falha ao efetuar o login. Tente novamente.", "connectedTo": "Ligado a {{containerName}}", "disconnected": "Desligado", "consoleError": "Erro da consola", @@ -101,15 +101,15 @@ "consoleTab": "Consola", "startContainerToAccess": "Inicie o contentor para aceder à consola", "noHostSelected": "Nenhum anfitrião selecionado", - "failedToFetchLogs": "Failed to fetch logs: {{error}}", - "failedToDownloadLogs": "Failed to download logs: {{error}}" + "failedToFetchLogs": "Falha ao obter os registos: {{error}}", + "failedToDownloadLogs": "Falha ao descarregar os registos: {{error}}" }, "nav": { "docker": "Docker" }, "onboarding": { "feature_docker": "Docker", - "feature_docker_desc": "See containers, read logs and watch stats on any host running Docker." + "feature_docker_desc": "Visualize contentores, leia registos e acompanhe as estatísticas em qualquer host que execute o Docker." }, "terminal": { "retry": "Repetir", @@ -118,15 +118,15 @@ }, "permissions": { "use": { - "title": "Use Docker", - "description": "Open the Docker manager and container consoles on hosts with Docker enabled." + "title": "Utilize o Docker", + "description": "Abra o gestor do Docker e as consolas de contentores nos hosts com o Docker ativado." } }, "settings": { "host": { "enable": { "label": "Ativar Docker", - "description": "Manage containers on this host." + "description": "Gerir os contentores neste host." }, "containerRuntime": { "label": "Runtime de Contentores", @@ -137,7 +137,7 @@ } }, "errors": { - "remoteServerRequired": "Remote server required. Connect a remote server in Settings to use this connection type." + "remoteServerRequired": "É necessário um servidor remoto. Ligue um servidor remoto nas Definições para utilizar este tipo de ligação." }, "hosts": { "docsLink": "Ver documentação", diff --git a/plugins/docker/locales/translated/ru_RU.json b/plugins/docker/locales/translated/ru_RU.json index 281841e97..5cdfa206f 100644 --- a/plugins/docker/locales/translated/ru_RU.json +++ b/plugins/docker/locales/translated/ru_RU.json @@ -23,9 +23,9 @@ "start": "Запустить", "stop": "Остановить", "status": "Статус", - "actions": "Actions", - "cardView": "Card view", - "listView": "List view", + "actions": "Действия", + "cardView": "Карточный вид", + "listView": "Список", "confirmRemoveContainer": "Вы уверены, что хотите удалить контейнер «{{name}}»? Это действие нельзя отменить.", "runningContainerWarning": "Предупреждение: этот контейнер в настоящее время работает. При удалении он будет сначала остановлен.", "loadingContainers": "Загрузка контейнеров...", @@ -78,7 +78,7 @@ "containerMustBeRunning": "Для доступа к консоли контейнер должен быть запущен", "verificationCodePrompt": "Введите код подтверждения", "totpVerificationFailed": "Ошибка проверки TOTP. Попробуйте еще раз.", - "browserSignInFailed": "Sign-in failed. Please try again.", + "browserSignInFailed": "Вход в систему не удался. Пожалуйста, попробуйте еще раз.", "connectedTo": "Подключено к {{containerName}}", "disconnected": "Отключено", "consoleError": "Ошибка консоли", @@ -101,15 +101,15 @@ "consoleTab": "Консоль", "startContainerToAccess": "Запустите контейнер, чтобы получить доступ к консоли", "noHostSelected": "Хост не выбран", - "failedToFetchLogs": "Failed to fetch logs: {{error}}", - "failedToDownloadLogs": "Failed to download logs: {{error}}" + "failedToFetchLogs": "Не удалось получить логи: {{error}}", + "failedToDownloadLogs": "Не удалось загрузить логи: {{error}}" }, "nav": { "docker": "Docker" }, "onboarding": { "feature_docker": "Docker", - "feature_docker_desc": "See containers, read logs and watch stats on any host running Docker." + "feature_docker_desc": "Просматривайте контейнеры, читайте журналы и отслеживайте статистику на любом хосте, где запущен Docker." }, "terminal": { "retry": "Повторить", @@ -118,15 +118,15 @@ }, "permissions": { "use": { - "title": "Use Docker", - "description": "Open the Docker manager and container consoles on hosts with Docker enabled." + "title": "Используйте Docker", + "description": "Откройте Docker Manager и консоли контейнеров на хостах с включенным Docker." } }, "settings": { "host": { "enable": { "label": "Включить Docker", - "description": "Manage containers on this host." + "description": "Управляйте контейнерами на этом хосте." }, "containerRuntime": { "label": "Среда выполнения контейнеров", @@ -137,7 +137,7 @@ } }, "errors": { - "remoteServerRequired": "Remote server required. Connect a remote server in Settings to use this connection type." + "remoteServerRequired": "Требуется удаленный сервер. Для использования этого типа подключения подключите удаленный сервер в настройках." }, "hosts": { "docsLink": "Документация", diff --git a/plugins/docker/locales/translated/sr_SP.json b/plugins/docker/locales/translated/sr_SP.json index 631c3a919..6968f7ab3 100644 --- a/plugins/docker/locales/translated/sr_SP.json +++ b/plugins/docker/locales/translated/sr_SP.json @@ -1,147 +1,147 @@ { "docker": { - "notEnabled": "Docker is not enabled for this host", - "validating": "Validating Docker...", - "connecting": "Connecting...", - "error": "Error", + "notEnabled": "Докер није омогућен за овај хост", + "validating": "Валидација Докера...", + "connecting": "Повезивање...", + "error": "Грешка", "version": "{{runtime}} {{version}}", - "connectionFailed": "Failed to connect to Docker", - "containerStarted": "Container {{name}} started", - "failedToStartContainer": "Failed to start container {{name}}", - "containerStopped": "Container {{name}} stopped", - "failedToStopContainer": "Failed to stop container {{name}}", - "containerRestarted": "Container {{name}} restarted", - "failedToRestartContainer": "Failed to restart container {{name}}", - "containerPaused": "Container {{name}} paused", - "containerUnpaused": "Container {{name}} unpaused", - "failedToTogglePauseContainer": "Failed to toggle pause state for container {{name}}", - "containerRemoved": "Container {{name}} removed", - "failedToRemoveContainer": "Failed to remove container {{name}}", - "image": "Image", - "ports": "Ports", - "noPorts": "No ports", - "start": "Start", - "stop": "Stop", - "status": "Status", - "actions": "Actions", - "cardView": "Card view", - "listView": "List view", - "confirmRemoveContainer": "Are you sure you want to remove the container '{{name}}'? This action cannot be undone.", - "runningContainerWarning": "Warning: This container is currently running. Removing it will stop the container first.", - "loadingContainers": "Loading containers...", - "manager": "Docker Manager", - "autoRefresh": "Auto Refresh", - "timestamps": "Timestamps", - "lines": "Lines", - "filterLogs": "Filter logs...", - "refresh": "Refresh", - "download": "Download", - "clear": "Clear", - "logsDownloaded": "Logs downloaded successfully", - "last50": "Last 50", - "last100": "Last 100", - "last500": "Last 500", - "last1000": "Last 1000", - "allLogs": "All Logs", - "noLogsMatching": "No logs matching \"{{query}}\"", - "noLogsAvailable": "No logs available", - "noContainersFound": "No containers found", - "noContainersFoundHint": "No Docker containers are available on this host", - "searchPlaceholder": "Search containers...", - "allStatuses": "All Statuses", - "stateRunning": "Running", - "statePaused": "Paused", - "stateExited": "Exited", - "stateRestarting": "Restarting", - "noContainersMatchFilters": "No containers match your filters", - "noContainersMatchFiltersHint": "Try adjusting your search or filter criteria", - "failedToFetchStats": "Failed to fetch container statistics", - "containerNotRunning": "Container not running", - "startContainerToViewStats": "Start the container to view statistics", - "loadingStats": "Loading statistics...", - "errorLoadingStats": "Error loading statistics", - "noStatsAvailable": "No statistics available", - "cpuUsage": "CPU Usage", - "current": "Current", - "memoryUsage": "Memory Usage", - "networkIo": "Network I/O", - "input": "Input", - "output": "Output", - "blockIo": "Block I/O", - "read": "Read", - "write": "Write", - "pids": "PIDs", - "containerInformation": "Container Information", - "name": "Name", - "id": "ID", - "state": "State", - "containerMustBeRunning": "Container must be running to access console", - "verificationCodePrompt": "Enter verification code", - "totpVerificationFailed": "TOTP verification failed. Please try again.", - "browserSignInFailed": "Sign-in failed. Please try again.", - "connectedTo": "Connected to {{containerName}}", - "disconnected": "Disconnected", - "consoleError": "Console error", - "errorMessage": "Error: {{message}}", - "failedToConnect": "Failed to connect to container", - "console": "Console", - "selectShell": "Select shell", - "bash": "Bash", - "sh": "sh", - "ash": "ash", - "connect": "Connect", - "disconnect": "Disconnect", - "notConnected": "Not connected", - "clickToConnect": "Click connect to start a shell session", - "connectingTo": "Connecting to {{containerName}}...", - "containerNotFound": "Container not found", - "backToList": "Back to List", - "logs": "Logs", - "stats": "Stats", - "consoleTab": "Console", - "startContainerToAccess": "Start the container to access the console", - "noHostSelected": "No host selected", - "failedToFetchLogs": "Failed to fetch logs: {{error}}", - "failedToDownloadLogs": "Failed to download logs: {{error}}" + "connectionFailed": "Повезивање са Докером није успело", + "containerStarted": "Контејнер {{name}} је покренут", + "failedToStartContainer": "Покретање контејнера {{name}} није успело", + "containerStopped": "Контејнер {{name}} је заустављен", + "failedToStopContainer": "Заустављање контејнера {{name}} није успело", + "containerRestarted": "Контејнер {{name}} поново покренут", + "failedToRestartContainer": "Поновно покретање контејнера није успело {{name}}", + "containerPaused": "Контејнер {{name}} је паузиран", + "containerUnpaused": "Паузирање контејнера {{name}} је прекинуто", + "failedToTogglePauseContainer": "Није успело пребацивање стања паузе за контејнер {{name}}", + "containerRemoved": "Контејнер {{name}} је уклоњен", + "failedToRemoveContainer": "Није успело уклањање контејнера {{name}}", + "image": "Слика", + "ports": "Портови", + "noPorts": "Нема портова", + "start": "Почетак", + "stop": "Заустави", + "status": "Статус", + "actions": "Акције", + "cardView": "Приказ картице", + "listView": "Приказ листе", + "confirmRemoveContainer": "Да ли сте сигурни да желите да уклоните контејнер „{{name}}“? Ова радња се не може поништити.", + "runningContainerWarning": "Упозорење: Овај контејнер је тренутно покренут. Његово уклањање ће прво зауставити рад контејнера.", + "loadingContainers": "Учитавање контејнера...", + "manager": "Докер менаџер", + "autoRefresh": "Аутоматско освежавање", + "timestamps": "Временске ознаке", + "lines": "Линије", + "filterLogs": "Филтрирај логове...", + "refresh": "Освежи", + "download": "Преузми", + "clear": "Јасно", + "logsDownloaded": "Дневници су успешно преузети", + "last50": "Последњих 50", + "last100": "Последњих 100", + "last500": "Последњих 500", + "last1000": "Последњих 1000", + "allLogs": "Сви дневници", + "noLogsMatching": "Нема логова који одговарају „{{query}}“", + "noLogsAvailable": "Нема доступних логова", + "noContainersFound": "Нису пронађени контејнери", + "noContainersFoundHint": "На овом хосту нису доступни Docker контејнери", + "searchPlaceholder": "Претражи контејнере...", + "allStatuses": "Сви статуси", + "stateRunning": "Трчање", + "statePaused": "Паузирано", + "stateExited": "Изашао/ла", + "stateRestarting": "Поновно покретање", + "noContainersMatchFilters": "Ниједан контејнер не одговара вашим филтерима", + "noContainersMatchFiltersHint": "Покушајте да прилагодите критеријуме претраге или филтрирања", + "failedToFetchStats": "Није успело преузимање статистике контејнера", + "containerNotRunning": "Контејнер се не покреће", + "startContainerToViewStats": "Покрените контејнер да бисте видели статистику", + "loadingStats": "Учитавање статистике...", + "errorLoadingStats": "Грешка при учитавању статистике", + "noStatsAvailable": "Нема доступних статистика", + "cpuUsage": "Искоришћеност процесора", + "current": "Тренутни", + "memoryUsage": "Коришћење меморије", + "networkIo": "Мрежни улаз/излаз", + "input": "Унос", + "output": "Излаз", + "blockIo": "Блок У/И", + "read": "Читај", + "write": "Пиши", + "pids": "ПИД-ови", + "containerInformation": "Информације о контејнеру", + "name": "Име", + "id": "ИД", + "state": "Држава", + "containerMustBeRunning": "Контејнер мора бити покренут да би се приступило конзоли", + "verificationCodePrompt": "Унесите верификациони код", + "totpVerificationFailed": "Верификација TOTP-а није успела. Молимо покушајте поново.", + "browserSignInFailed": "Пријављивање није успело. Молимо покушајте поново.", + "connectedTo": "Повезано са {{containerName}}", + "disconnected": "Искључено", + "consoleError": "Грешка конзоле", + "errorMessage": "Грешка: {{message}}", + "failedToConnect": "Повезивање са контејнером није успело", + "console": "Конзола", + "selectShell": "Изаберите љуску", + "bash": "Баш", + "sh": "ш", + "ash": "пепео", + "connect": "Повежи се", + "disconnect": "Прекини везу", + "notConnected": "Није повезано", + "clickToConnect": "Кликните на повезивање да бисте покренули сесију шкољке", + "connectingTo": "Повезивање са {{containerName}}...", + "containerNotFound": "Контејнер није пронађен", + "backToList": "Назад на листу", + "logs": "Дневници", + "stats": "Статистика", + "consoleTab": "Конзола", + "startContainerToAccess": "Покрените контејнер да бисте приступили конзоли", + "noHostSelected": "Није изабран домаћин", + "failedToFetchLogs": "Није успело преузимање логова: {{error}}", + "failedToDownloadLogs": "Није успело преузимање логова: {{error}}" }, "nav": { - "docker": "Docker" + "docker": "Докер" }, "onboarding": { - "feature_docker": "Docker", - "feature_docker_desc": "See containers, read logs and watch stats on any host running Docker." + "feature_docker": "Докер", + "feature_docker_desc": "Погледајте контејнере, читајте логове и пратите статистику на било ком хосту који користи Docker." }, "terminal": { - "retry": "Retry", - "clipboardReadFailed": "Failed to read from clipboard. Make sure clipboard permissions are granted.", - "clipboardWriteFailed": "Failed to copy to clipboard. Make sure the page is served over HTTPS or localhost." + "retry": "Покушај поново", + "clipboardReadFailed": "Читање из међуспремника није успело. Уверите се да су дозволе за међуспремник одобрене.", + "clipboardWriteFailed": "Копирање у међуспремник није успело. Уверите се да се страница приказује преко HTTPS-а или localhost-а." }, "permissions": { "use": { - "title": "Use Docker", - "description": "Open the Docker manager and container consoles on hosts with Docker enabled." + "title": "Користите Докер", + "description": "Отворите Docker менаџер и конзоле контејнера на хостовима са омогућеним Docker-ом." } }, "settings": { "host": { "enable": { - "label": "Enable Docker", - "description": "Manage containers on this host." + "label": "Омогући Докер", + "description": "Управљајте контејнерима на овом хосту." }, "containerRuntime": { - "label": "Container Runtime", - "description": "Choose the CLI used for container management on this host", - "docker": "Docker", - "podman": "Podman" + "label": "Време извршавања контејнера", + "description": "Изаберите CLI који се користи за управљање контејнерима на овом хосту", + "docker": "Докер", + "podman": "Подман" } } }, "errors": { - "remoteServerRequired": "Remote server required. Connect a remote server in Settings to use this connection type." + "remoteServerRequired": "Потребан је удаљени сервер. Повежите се са удаљеним сервером у Подешавањима да бисте користили овај тип везе." }, "hosts": { - "docsLink": "View docs", - "hostNotFound": "Host not found", - "loadingHost": "Loading host..." + "docsLink": "Прикажи документе", + "hostNotFound": "Хост није пронађен", + "loadingHost": "Учитавање хоста..." } } diff --git a/plugins/docker/locales/translated/sv_SE.json b/plugins/docker/locales/translated/sv_SE.json index 631c3a919..fdddcca22 100644 --- a/plugins/docker/locales/translated/sv_SE.json +++ b/plugins/docker/locales/translated/sv_SE.json @@ -1,147 +1,147 @@ { "docker": { - "notEnabled": "Docker is not enabled for this host", - "validating": "Validating Docker...", - "connecting": "Connecting...", - "error": "Error", + "notEnabled": "Docker är inte aktiverat för den här värden", + "validating": "Validerar Docker...", + "connecting": "Ansluter...", + "error": "Fel", "version": "{{runtime}} {{version}}", - "connectionFailed": "Failed to connect to Docker", - "containerStarted": "Container {{name}} started", - "failedToStartContainer": "Failed to start container {{name}}", - "containerStopped": "Container {{name}} stopped", - "failedToStopContainer": "Failed to stop container {{name}}", - "containerRestarted": "Container {{name}} restarted", - "failedToRestartContainer": "Failed to restart container {{name}}", - "containerPaused": "Container {{name}} paused", - "containerUnpaused": "Container {{name}} unpaused", - "failedToTogglePauseContainer": "Failed to toggle pause state for container {{name}}", - "containerRemoved": "Container {{name}} removed", - "failedToRemoveContainer": "Failed to remove container {{name}}", - "image": "Image", - "ports": "Ports", - "noPorts": "No ports", + "connectionFailed": "Misslyckades med att ansluta till Docker", + "containerStarted": "Behållaren {{name}} startad", + "failedToStartContainer": "Misslyckades med att starta containern {{name}}", + "containerStopped": "Behållaren {{name}} har stoppats", + "failedToStopContainer": "Misslyckades med att stoppa containern {{name}}", + "containerRestarted": "Behållaren {{name}} har startats om", + "failedToRestartContainer": "Misslyckades med att starta om behållaren {{name}}", + "containerPaused": "Behållaren {{name}} pausad", + "containerUnpaused": "Behållaren {{name}} har återupptagits", + "failedToTogglePauseContainer": "Misslyckades med att växla pausläge för container {{name}}", + "containerRemoved": "Behållaren {{name}} har tagits bort", + "failedToRemoveContainer": "Misslyckades med att ta bort behållaren {{name}}", + "image": "Bild", + "ports": "Hamnar", + "noPorts": "Inga portar", "start": "Start", - "stop": "Stop", + "stop": "Stopp", "status": "Status", - "actions": "Actions", - "cardView": "Card view", - "listView": "List view", - "confirmRemoveContainer": "Are you sure you want to remove the container '{{name}}'? This action cannot be undone.", - "runningContainerWarning": "Warning: This container is currently running. Removing it will stop the container first.", - "loadingContainers": "Loading containers...", + "actions": "Åtgärder", + "cardView": "Kortvy", + "listView": "Listvy", + "confirmRemoveContainer": "Är du säker på att du vill ta bort behållaren '{{name}}'? Den här åtgärden kan inte ångras.", + "runningContainerWarning": "Varning: Den här behållaren körs för närvarande. Om du tar bort den stoppas behållaren först.", + "loadingContainers": "Lastar containrar...", "manager": "Docker Manager", - "autoRefresh": "Auto Refresh", - "timestamps": "Timestamps", - "lines": "Lines", - "filterLogs": "Filter logs...", - "refresh": "Refresh", - "download": "Download", - "clear": "Clear", - "logsDownloaded": "Logs downloaded successfully", - "last50": "Last 50", - "last100": "Last 100", - "last500": "Last 500", - "last1000": "Last 1000", - "allLogs": "All Logs", - "noLogsMatching": "No logs matching \"{{query}}\"", - "noLogsAvailable": "No logs available", - "noContainersFound": "No containers found", - "noContainersFoundHint": "No Docker containers are available on this host", - "searchPlaceholder": "Search containers...", - "allStatuses": "All Statuses", - "stateRunning": "Running", - "statePaused": "Paused", - "stateExited": "Exited", - "stateRestarting": "Restarting", - "noContainersMatchFilters": "No containers match your filters", - "noContainersMatchFiltersHint": "Try adjusting your search or filter criteria", - "failedToFetchStats": "Failed to fetch container statistics", - "containerNotRunning": "Container not running", - "startContainerToViewStats": "Start the container to view statistics", - "loadingStats": "Loading statistics...", - "errorLoadingStats": "Error loading statistics", - "noStatsAvailable": "No statistics available", - "cpuUsage": "CPU Usage", - "current": "Current", - "memoryUsage": "Memory Usage", - "networkIo": "Network I/O", + "autoRefresh": "Automatisk uppdatering", + "timestamps": "Tidsstämplar", + "lines": "Rader", + "filterLogs": "Filtrera loggar...", + "refresh": "Uppdatera", + "download": "Ladda ner", + "clear": "Rensa", + "logsDownloaded": "Loggarna har laddats ner", + "last50": "Senaste 50", + "last100": "Senaste 100", + "last500": "Senaste 500", + "last1000": "Senaste 1000", + "allLogs": "Alla loggar", + "noLogsMatching": "Inga loggar som matchar \"{{query}}\"", + "noLogsAvailable": "Inga loggar tillgängliga", + "noContainersFound": "Inga containrar hittades", + "noContainersFoundHint": "Inga Docker-containrar är tillgängliga på den här värden", + "searchPlaceholder": "Sök behållare...", + "allStatuses": "Alla statusar", + "stateRunning": "Spring", + "statePaused": "Pausad", + "stateExited": "Avslutad", + "stateRestarting": "Omstart", + "noContainersMatchFilters": "Inga behållare matchar dina filter", + "noContainersMatchFiltersHint": "Försök att justera dina sök- eller filterkriterier", + "failedToFetchStats": "Misslyckades med att hämta containerstatistik", + "containerNotRunning": "Behållaren körs inte", + "startContainerToViewStats": "Starta containern för att visa statistik", + "loadingStats": "Laddar statistik...", + "errorLoadingStats": "Fel vid inläsning av statistik", + "noStatsAvailable": "Ingen statistik tillgänglig", + "cpuUsage": "CPU-användning", + "current": "Nuvarande", + "memoryUsage": "Minnesanvändning", + "networkIo": "Nätverks-I/O", "input": "Input", - "output": "Output", - "blockIo": "Block I/O", - "read": "Read", - "write": "Write", - "pids": "PIDs", - "containerInformation": "Container Information", - "name": "Name", + "output": "Produktion", + "blockIo": "Blockera I/O", + "read": "Läsa", + "write": "Skriva", + "pids": "PID:er", + "containerInformation": "Containerinformation", + "name": "Namn", "id": "ID", - "state": "State", - "containerMustBeRunning": "Container must be running to access console", - "verificationCodePrompt": "Enter verification code", - "totpVerificationFailed": "TOTP verification failed. Please try again.", - "browserSignInFailed": "Sign-in failed. Please try again.", - "connectedTo": "Connected to {{containerName}}", - "disconnected": "Disconnected", - "consoleError": "Console error", - "errorMessage": "Error: {{message}}", - "failedToConnect": "Failed to connect to container", - "console": "Console", - "selectShell": "Select shell", - "bash": "Bash", + "state": "Ange", + "containerMustBeRunning": "Behållaren måste köras för att komma åt konsolen", + "verificationCodePrompt": "Ange verifieringskod", + "totpVerificationFailed": "TOTP-verifieringen misslyckades. Försök igen.", + "browserSignInFailed": "Inloggningen misslyckades. Försök igen.", + "connectedTo": "Ansluten till {{containerName}}", + "disconnected": "Osammanhängande", + "consoleError": "Konsolfel", + "errorMessage": "Fel: {{message}}", + "failedToConnect": "Misslyckades med att ansluta till containern", + "console": "Trösta", + "selectShell": "Välj skal", + "bash": "Våldsamt slag", "sh": "sh", - "ash": "ash", - "connect": "Connect", - "disconnect": "Disconnect", - "notConnected": "Not connected", - "clickToConnect": "Click connect to start a shell session", - "connectingTo": "Connecting to {{containerName}}...", - "containerNotFound": "Container not found", - "backToList": "Back to List", - "logs": "Logs", - "stats": "Stats", - "consoleTab": "Console", - "startContainerToAccess": "Start the container to access the console", - "noHostSelected": "No host selected", - "failedToFetchLogs": "Failed to fetch logs: {{error}}", - "failedToDownloadLogs": "Failed to download logs: {{error}}" + "ash": "aska", + "connect": "Ansluta", + "disconnect": "Koppla från", + "notConnected": "Inte ansluten", + "clickToConnect": "Klicka på Anslut för att starta en shell-session", + "connectingTo": "Ansluter till {{containerName}}...", + "containerNotFound": "Behållaren hittades inte", + "backToList": "Tillbaka till listan", + "logs": "Loggar", + "stats": "Statistik", + "consoleTab": "Trösta", + "startContainerToAccess": "Starta containern för att komma åt konsolen", + "noHostSelected": "Ingen värd vald", + "failedToFetchLogs": "Misslyckades med att hämta loggar: {{error}}", + "failedToDownloadLogs": "Misslyckades med att ladda ner loggar: {{error}}" }, "nav": { - "docker": "Docker" + "docker": "Hamnarbetare" }, "onboarding": { - "feature_docker": "Docker", - "feature_docker_desc": "See containers, read logs and watch stats on any host running Docker." + "feature_docker": "Hamnarbetare", + "feature_docker_desc": "Se containrar, läs loggar och titta på statistik för alla värdar som kör Docker." }, "terminal": { - "retry": "Retry", - "clipboardReadFailed": "Failed to read from clipboard. Make sure clipboard permissions are granted.", - "clipboardWriteFailed": "Failed to copy to clipboard. Make sure the page is served over HTTPS or localhost." + "retry": "Försöka igen", + "clipboardReadFailed": "Kunde inte läsa från urklipp. Kontrollera att behörigheter för urklipp är beviljade.", + "clipboardWriteFailed": "Kunde inte kopiera till urklipp. Kontrollera att sidan serveras via HTTPS eller localhost." }, "permissions": { "use": { - "title": "Use Docker", - "description": "Open the Docker manager and container consoles on hosts with Docker enabled." + "title": "Använd Docker", + "description": "Öppna Docker-hanteraren och containerkonsolerna på värdar med Docker aktiverat." } }, "settings": { "host": { "enable": { - "label": "Enable Docker", - "description": "Manage containers on this host." + "label": "Aktivera Docker", + "description": "Hantera containrar på den här värden." }, "containerRuntime": { - "label": "Container Runtime", - "description": "Choose the CLI used for container management on this host", - "docker": "Docker", + "label": "Containerkörningstid", + "description": "Välj det CRI som används för containerhantering på den här värden", + "docker": "Hamnarbetare", "podman": "Podman" } } }, "errors": { - "remoteServerRequired": "Remote server required. Connect a remote server in Settings to use this connection type." + "remoteServerRequired": "Fjärrserver krävs. Anslut en fjärrserver i Inställningar för att använda den här anslutningstypen." }, "hosts": { - "docsLink": "View docs", - "hostNotFound": "Host not found", - "loadingHost": "Loading host..." + "docsLink": "Visa dokument", + "hostNotFound": "Värden hittades inte", + "loadingHost": "Laddar värd..." } } diff --git a/plugins/docker/locales/translated/th_TH.json b/plugins/docker/locales/translated/th_TH.json index 631c3a919..5b3f97851 100644 --- a/plugins/docker/locales/translated/th_TH.json +++ b/plugins/docker/locales/translated/th_TH.json @@ -1,147 +1,147 @@ { "docker": { - "notEnabled": "Docker is not enabled for this host", - "validating": "Validating Docker...", - "connecting": "Connecting...", - "error": "Error", + "notEnabled": "Docker ไม่ได้เปิดใช้งานสำหรับโฮสต์นี้", + "validating": "กำลังตรวจสอบความถูกต้องของ Docker...", + "connecting": "กำลังเชื่อมต่อ...", + "error": "ข้อผิดพลาด", "version": "{{runtime}} {{version}}", - "connectionFailed": "Failed to connect to Docker", - "containerStarted": "Container {{name}} started", - "failedToStartContainer": "Failed to start container {{name}}", - "containerStopped": "Container {{name}} stopped", - "failedToStopContainer": "Failed to stop container {{name}}", - "containerRestarted": "Container {{name}} restarted", - "failedToRestartContainer": "Failed to restart container {{name}}", - "containerPaused": "Container {{name}} paused", - "containerUnpaused": "Container {{name}} unpaused", - "failedToTogglePauseContainer": "Failed to toggle pause state for container {{name}}", - "containerRemoved": "Container {{name}} removed", - "failedToRemoveContainer": "Failed to remove container {{name}}", - "image": "Image", - "ports": "Ports", - "noPorts": "No ports", - "start": "Start", - "stop": "Stop", - "status": "Status", - "actions": "Actions", - "cardView": "Card view", - "listView": "List view", - "confirmRemoveContainer": "Are you sure you want to remove the container '{{name}}'? This action cannot be undone.", - "runningContainerWarning": "Warning: This container is currently running. Removing it will stop the container first.", - "loadingContainers": "Loading containers...", - "manager": "Docker Manager", - "autoRefresh": "Auto Refresh", - "timestamps": "Timestamps", - "lines": "Lines", - "filterLogs": "Filter logs...", - "refresh": "Refresh", - "download": "Download", - "clear": "Clear", - "logsDownloaded": "Logs downloaded successfully", - "last50": "Last 50", - "last100": "Last 100", - "last500": "Last 500", - "last1000": "Last 1000", - "allLogs": "All Logs", - "noLogsMatching": "No logs matching \"{{query}}\"", - "noLogsAvailable": "No logs available", - "noContainersFound": "No containers found", - "noContainersFoundHint": "No Docker containers are available on this host", - "searchPlaceholder": "Search containers...", - "allStatuses": "All Statuses", - "stateRunning": "Running", - "statePaused": "Paused", - "stateExited": "Exited", - "stateRestarting": "Restarting", - "noContainersMatchFilters": "No containers match your filters", - "noContainersMatchFiltersHint": "Try adjusting your search or filter criteria", - "failedToFetchStats": "Failed to fetch container statistics", - "containerNotRunning": "Container not running", - "startContainerToViewStats": "Start the container to view statistics", - "loadingStats": "Loading statistics...", - "errorLoadingStats": "Error loading statistics", - "noStatsAvailable": "No statistics available", - "cpuUsage": "CPU Usage", - "current": "Current", - "memoryUsage": "Memory Usage", - "networkIo": "Network I/O", - "input": "Input", - "output": "Output", - "blockIo": "Block I/O", - "read": "Read", - "write": "Write", + "connectionFailed": "ไม่สามารถเชื่อมต่อกับ Docker ได้", + "containerStarted": "คอนเทนเนอร์ {{name}} เริ่มทำงานแล้ว", + "failedToStartContainer": "ไม่สามารถเริ่มต้นคอนเทนเนอร์ได้ {{name}}", + "containerStopped": "คอนเทนเนอร์ {{name}} หยุดทำงานแล้ว", + "failedToStopContainer": "ไม่สามารถหยุดคอนเทนเนอร์ได้ {{name}}", + "containerRestarted": "คอนเทนเนอร์ {{name}} รีสตาร์ทแล้ว", + "failedToRestartContainer": "ไม่สามารถรีสตาร์ทคอนเทนเนอร์ได้ {{name}}", + "containerPaused": "คอนเทนเนอร์ {{name}} หยุดชั่วคราว", + "containerUnpaused": "คอนเทนเนอร์ {{name}} ยกเลิกการหยุดชั่วคราว", + "failedToTogglePauseContainer": "ไม่สามารถสลับสถานะหยุดชั่วคราวสำหรับคอนเทนเนอร์ {{name}} ได้", + "containerRemoved": "คอนเทนเนอร์ {{name}} ถูกลบออกแล้ว", + "failedToRemoveContainer": "ไม่สามารถลบคอนเทนเนอร์ {{name}} ได้", + "image": "ภาพ", + "ports": "ท่าเรือ", + "noPorts": "ไม่มีพอร์ต", + "start": "เริ่ม", + "stop": "หยุด", + "status": "สถานะ", + "actions": "การกระทำ", + "cardView": "มุมมองการ์ด", + "listView": "มุมมองรายการ", + "confirmRemoveContainer": "คุณแน่ใจหรือไม่ว่าต้องการลบคอนเทนเนอร์ '{{name}}'? การกระทำนี้ไม่สามารถย้อนกลับได้", + "runningContainerWarning": "คำเตือน: ขณะนี้คอนเทนเนอร์นี้กำลังทำงานอยู่ การลบคอนเทนเนอร์นี้จะหยุดการทำงานของคอนเทนเนอร์ก่อน", + "loadingContainers": "กำลังขนถ่ายตู้คอนเทนเนอร์...", + "manager": "ตัวจัดการ Docker", + "autoRefresh": "รีเฟรชอัตโนมัติ", + "timestamps": "ไทม์สแตมป์", + "lines": "เส้น", + "filterLogs": "กรองบันทึก...", + "refresh": "รีเฟรช", + "download": "ดาวน์โหลด", + "clear": "ชัดเจน", + "logsDownloaded": "ดาวน์โหลดบันทึกข้อมูลสำเร็จแล้ว", + "last50": "50 ครั้งสุดท้าย", + "last100": "100 ปีที่แล้ว", + "last500": "500 ครั้งสุดท้าย", + "last1000": "1000 ครั้งสุดท้าย", + "allLogs": "บันทึกทั้งหมด", + "noLogsMatching": "ไม่พบบันทึกใดที่ตรงกับ \"{{query}}\"", + "noLogsAvailable": "ไม่มีบันทึกข้อมูล", + "noContainersFound": "ไม่พบภาชนะบรรจุใดๆ", + "noContainersFoundHint": "ไม่มีคอนเทนเนอร์ Docker ให้บริการบนโฮสต์นี้", + "searchPlaceholder": "ค้นหาตู้คอนเทนเนอร์...", + "allStatuses": "สถานะทั้งหมด", + "stateRunning": "วิ่ง", + "statePaused": "หยุดชั่วคราว", + "stateExited": "ออกแล้ว", + "stateRestarting": "เริ่มใหม่", + "noContainersMatchFilters": "ไม่มีภาชนะใดตรงกับตัวกรองของคุณ", + "noContainersMatchFiltersHint": "ลองปรับเกณฑ์การค้นหาหรือตัวกรองของคุณดู", + "failedToFetchStats": "ไม่สามารถดึงข้อมูลสถิติของคอนเทนเนอร์ได้", + "containerNotRunning": "คอนเทนเนอร์ไม่ทำงาน", + "startContainerToViewStats": "เริ่มคอนเทนเนอร์เพื่อดูสถิติ", + "loadingStats": "กำลังโหลดสถิติ...", + "errorLoadingStats": "ข้อผิดพลาดในการโหลดสถิติ", + "noStatsAvailable": "ไม่มีสถิติให้ดู", + "cpuUsage": "การใช้งาน CPU", + "current": "ปัจจุบัน", + "memoryUsage": "การใช้งานหน่วยความจำ", + "networkIo": "อินพุต/เอาต์พุตเครือข่าย", + "input": "ป้อนข้อมูล", + "output": "เอาต์พุต", + "blockIo": "บล็อก I/O", + "read": "อ่าน", + "write": "เขียน", "pids": "PIDs", - "containerInformation": "Container Information", - "name": "Name", - "id": "ID", - "state": "State", - "containerMustBeRunning": "Container must be running to access console", - "verificationCodePrompt": "Enter verification code", - "totpVerificationFailed": "TOTP verification failed. Please try again.", - "browserSignInFailed": "Sign-in failed. Please try again.", - "connectedTo": "Connected to {{containerName}}", - "disconnected": "Disconnected", - "consoleError": "Console error", - "errorMessage": "Error: {{message}}", - "failedToConnect": "Failed to connect to container", - "console": "Console", - "selectShell": "Select shell", - "bash": "Bash", - "sh": "sh", - "ash": "ash", - "connect": "Connect", - "disconnect": "Disconnect", - "notConnected": "Not connected", - "clickToConnect": "Click connect to start a shell session", - "connectingTo": "Connecting to {{containerName}}...", - "containerNotFound": "Container not found", - "backToList": "Back to List", - "logs": "Logs", - "stats": "Stats", - "consoleTab": "Console", - "startContainerToAccess": "Start the container to access the console", - "noHostSelected": "No host selected", - "failedToFetchLogs": "Failed to fetch logs: {{error}}", - "failedToDownloadLogs": "Failed to download logs: {{error}}" + "containerInformation": "ข้อมูลเกี่ยวกับตู้คอนเทนเนอร์", + "name": "ชื่อ", + "id": "รหัสประจำตัว", + "state": "สถานะ", + "containerMustBeRunning": "ต้องรอให้คอนเทนเนอร์ทำงานอยู่จึงจะสามารถเข้าถึงคอนโซลได้", + "verificationCodePrompt": "ป้อนรหัสยืนยัน", + "totpVerificationFailed": "การตรวจสอบ TOTP ล้มเหลว โปรดลองอีกครั้ง", + "browserSignInFailed": "การเข้าสู่ระบบล้มเหลว โปรดลองใหม่อีกครั้ง", + "connectedTo": "เชื่อมต่อกับ {{containerName}}", + "disconnected": "ตัดการเชื่อมต่อ", + "consoleError": "ข้อผิดพลาดของคอนโซล", + "errorMessage": "ข้อผิดพลาด: {{message}}", + "failedToConnect": "ไม่สามารถเชื่อมต่อกับคอนเทนเนอร์ได้", + "console": "คอนโซล", + "selectShell": "เลือกเปลือกหอย", + "bash": "ทุบตี", + "sh": "ช", + "ash": "เถ้า", + "connect": "เชื่อมต่อ", + "disconnect": "ตัดการเชื่อมต่อ", + "notConnected": "ไม่ได้เชื่อมต่อ", + "clickToConnect": "คลิกเชื่อมต่อเพื่อเริ่มเซสชันเชลล์", + "connectingTo": "กำลังเชื่อมต่อกับ {{containerName}}...", + "containerNotFound": "ไม่พบคอนเทนเนอร์", + "backToList": "กลับสู่รายการ", + "logs": "บันทึก", + "stats": "สถิติ", + "consoleTab": "คอนโซล", + "startContainerToAccess": "เริ่มคอนเทนเนอร์เพื่อเข้าถึงคอนโซล", + "noHostSelected": "ไม่ได้เลือกโฮสต์", + "failedToFetchLogs": "ไม่สามารถดึงข้อมูลบันทึกได้: {{error}}", + "failedToDownloadLogs": "ไม่สามารถดาวน์โหลดบันทึกได้: {{error}}" }, "nav": { - "docker": "Docker" + "docker": "ด็อกเกอร์" }, "onboarding": { - "feature_docker": "Docker", - "feature_docker_desc": "See containers, read logs and watch stats on any host running Docker." + "feature_docker": "ด็อกเกอร์", + "feature_docker_desc": "ดูคอนเทนเนอร์ อ่านบันทึก และตรวจสอบสถิติบนโฮสต์ใดก็ได้ที่ใช้งาน Docker" }, "terminal": { - "retry": "Retry", - "clipboardReadFailed": "Failed to read from clipboard. Make sure clipboard permissions are granted.", - "clipboardWriteFailed": "Failed to copy to clipboard. Make sure the page is served over HTTPS or localhost." + "retry": "ลองใหม่อีกครั้ง", + "clipboardReadFailed": "ไม่สามารถอ่านข้อมูลจากคลิปบอร์ดได้ โปรดตรวจสอบให้แน่ใจว่าได้ให้สิทธิ์การเข้าถึงคลิปบอร์ดแล้ว", + "clipboardWriteFailed": "ไม่สามารถคัดลอกไปยังคลิปบอร์ดได้ โปรดตรวจสอบให้แน่ใจว่าหน้าเว็บนั้นให้บริการผ่าน HTTPS หรือ localhost" }, "permissions": { "use": { - "title": "Use Docker", - "description": "Open the Docker manager and container consoles on hosts with Docker enabled." + "title": "ใช้ Docker", + "description": "เปิดตัวจัดการ Docker และคอนโซลคอนเทนเนอร์บนโฮสต์ที่เปิดใช้งาน Docker ไว้" } }, "settings": { "host": { "enable": { - "label": "Enable Docker", - "description": "Manage containers on this host." + "label": "เปิดใช้งาน Docker", + "description": "จัดการคอนเทนเนอร์บนโฮสต์นี้" }, "containerRuntime": { - "label": "Container Runtime", - "description": "Choose the CLI used for container management on this host", - "docker": "Docker", - "podman": "Podman" + "label": "รันไทม์คอนเทนเนอร์", + "description": "เลือก CLI ที่ใช้สำหรับการจัดการคอนเทนเนอร์บนโฮสต์นี้", + "docker": "ด็อกเกอร์", + "podman": "พอดแมน" } } }, "errors": { - "remoteServerRequired": "Remote server required. Connect a remote server in Settings to use this connection type." + "remoteServerRequired": "จำเป็นต้องใช้เซิร์ฟเวอร์ระยะไกล เชื่อมต่อเซิร์ฟเวอร์ระยะไกลในการตั้งค่าเพื่อใช้ประเภทการเชื่อมต่อนี้" }, "hosts": { - "docsLink": "View docs", - "hostNotFound": "Host not found", - "loadingHost": "Loading host..." + "docsLink": "ดูเอกสาร", + "hostNotFound": "ไม่พบโฮสต์", + "loadingHost": "กำลังโหลดโฮสต์..." } } diff --git a/plugins/docker/locales/translated/tr_TR.json b/plugins/docker/locales/translated/tr_TR.json index 2624361ab..cc88e6f5d 100644 --- a/plugins/docker/locales/translated/tr_TR.json +++ b/plugins/docker/locales/translated/tr_TR.json @@ -23,9 +23,9 @@ "start": "Başlat", "stop": "Durdurma", "status": "Durum", - "actions": "Actions", - "cardView": "Card view", - "listView": "List view", + "actions": "Eylemler", + "cardView": "Kart görünümü", + "listView": "Liste görünümü", "confirmRemoveContainer": "'{{name}}' konteynerini kaldırmak istediğinizden emin misiniz? Bu işlem geri alınamaz.", "runningContainerWarning": "Uyarı: Bu konteyner şu anda çalışıyor. Kaldırma işlemi önce konteyneri durduracak.", "loadingContainers": "Konteynerler yükleniyor...", @@ -78,7 +78,7 @@ "containerMustBeRunning": "Konsola erişmek için konteyner çalışıyor olmalıdır", "verificationCodePrompt": "Doğrulama kodunu girin", "totpVerificationFailed": "TOTP doğrulaması başarısız oldu. Lütfen tekrar deneyin.", - "browserSignInFailed": "Sign-in failed. Please try again.", + "browserSignInFailed": "Giriş başarısız oldu. Lütfen tekrar deneyin.", "connectedTo": "{{containerName}} ile bağlantı kuruldu", "disconnected": "Bağlantı kesildi", "consoleError": "Konsol hatası", @@ -101,15 +101,15 @@ "consoleTab": "Konsol", "startContainerToAccess": "Konsola erişmek için konteyneri başlatın", "noHostSelected": "Sunucu seçilmedi", - "failedToFetchLogs": "Failed to fetch logs: {{error}}", - "failedToDownloadLogs": "Failed to download logs: {{error}}" + "failedToFetchLogs": "Günlükleri alma işlemi başarısız oldu: {{error}}", + "failedToDownloadLogs": "Günlük dosyaları indirilemedi: {{error}}" }, "nav": { "docker": "Docker" }, "onboarding": { "feature_docker": "Docker", - "feature_docker_desc": "See containers, read logs and watch stats on any host running Docker." + "feature_docker_desc": "Docker çalıştıran herhangi bir sunucudaki konteynerleri görüntüleyin, günlükleri okuyun ve istatistikleri izleyin." }, "terminal": { "retry": "Yeniden dene", @@ -118,15 +118,15 @@ }, "permissions": { "use": { - "title": "Use Docker", - "description": "Open the Docker manager and container consoles on hosts with Docker enabled." + "title": "Docker kullanın", + "description": "Docker'ın etkinleştirildiği sunucularda Docker yöneticisini ve kapsayıcı konsollarını açın." } }, "settings": { "host": { "enable": { "label": "Docker'ı Etkinleştir", - "description": "Manage containers on this host." + "description": "Bu sunucudaki konteynerleri yönetin." }, "containerRuntime": { "label": "Kapsayıcı Çalışma Zamanı", @@ -137,7 +137,7 @@ } }, "errors": { - "remoteServerRequired": "Remote server required. Connect a remote server in Settings to use this connection type." + "remoteServerRequired": "Uzak sunucu gereklidir. Bu bağlantı türünü kullanmak için Ayarlar'dan bir uzak sunucu bağlayın." }, "hosts": { "docsLink": "Dokümanları görüntüle", diff --git a/plugins/docker/locales/translated/uk_UA.json b/plugins/docker/locales/translated/uk_UA.json index 631c3a919..b7380a5f8 100644 --- a/plugins/docker/locales/translated/uk_UA.json +++ b/plugins/docker/locales/translated/uk_UA.json @@ -1,147 +1,147 @@ { "docker": { - "notEnabled": "Docker is not enabled for this host", - "validating": "Validating Docker...", - "connecting": "Connecting...", - "error": "Error", + "notEnabled": "Docker не ввімкнено для цього хоста", + "validating": "Перевірка Docker...", + "connecting": "Підключення...", + "error": "Помилка", "version": "{{runtime}} {{version}}", - "connectionFailed": "Failed to connect to Docker", - "containerStarted": "Container {{name}} started", - "failedToStartContainer": "Failed to start container {{name}}", - "containerStopped": "Container {{name}} stopped", - "failedToStopContainer": "Failed to stop container {{name}}", - "containerRestarted": "Container {{name}} restarted", - "failedToRestartContainer": "Failed to restart container {{name}}", - "containerPaused": "Container {{name}} paused", - "containerUnpaused": "Container {{name}} unpaused", - "failedToTogglePauseContainer": "Failed to toggle pause state for container {{name}}", - "containerRemoved": "Container {{name}} removed", - "failedToRemoveContainer": "Failed to remove container {{name}}", - "image": "Image", - "ports": "Ports", - "noPorts": "No ports", - "start": "Start", - "stop": "Stop", - "status": "Status", - "actions": "Actions", - "cardView": "Card view", - "listView": "List view", - "confirmRemoveContainer": "Are you sure you want to remove the container '{{name}}'? This action cannot be undone.", - "runningContainerWarning": "Warning: This container is currently running. Removing it will stop the container first.", - "loadingContainers": "Loading containers...", - "manager": "Docker Manager", - "autoRefresh": "Auto Refresh", - "timestamps": "Timestamps", - "lines": "Lines", - "filterLogs": "Filter logs...", - "refresh": "Refresh", - "download": "Download", - "clear": "Clear", - "logsDownloaded": "Logs downloaded successfully", - "last50": "Last 50", - "last100": "Last 100", - "last500": "Last 500", - "last1000": "Last 1000", - "allLogs": "All Logs", - "noLogsMatching": "No logs matching \"{{query}}\"", - "noLogsAvailable": "No logs available", - "noContainersFound": "No containers found", - "noContainersFoundHint": "No Docker containers are available on this host", - "searchPlaceholder": "Search containers...", - "allStatuses": "All Statuses", - "stateRunning": "Running", - "statePaused": "Paused", - "stateExited": "Exited", - "stateRestarting": "Restarting", - "noContainersMatchFilters": "No containers match your filters", - "noContainersMatchFiltersHint": "Try adjusting your search or filter criteria", - "failedToFetchStats": "Failed to fetch container statistics", - "containerNotRunning": "Container not running", - "startContainerToViewStats": "Start the container to view statistics", - "loadingStats": "Loading statistics...", - "errorLoadingStats": "Error loading statistics", - "noStatsAvailable": "No statistics available", - "cpuUsage": "CPU Usage", - "current": "Current", - "memoryUsage": "Memory Usage", - "networkIo": "Network I/O", - "input": "Input", - "output": "Output", - "blockIo": "Block I/O", - "read": "Read", - "write": "Write", - "pids": "PIDs", - "containerInformation": "Container Information", - "name": "Name", - "id": "ID", - "state": "State", - "containerMustBeRunning": "Container must be running to access console", - "verificationCodePrompt": "Enter verification code", - "totpVerificationFailed": "TOTP verification failed. Please try again.", - "browserSignInFailed": "Sign-in failed. Please try again.", - "connectedTo": "Connected to {{containerName}}", - "disconnected": "Disconnected", - "consoleError": "Console error", - "errorMessage": "Error: {{message}}", - "failedToConnect": "Failed to connect to container", - "console": "Console", - "selectShell": "Select shell", - "bash": "Bash", - "sh": "sh", - "ash": "ash", - "connect": "Connect", - "disconnect": "Disconnect", - "notConnected": "Not connected", - "clickToConnect": "Click connect to start a shell session", - "connectingTo": "Connecting to {{containerName}}...", - "containerNotFound": "Container not found", - "backToList": "Back to List", - "logs": "Logs", - "stats": "Stats", - "consoleTab": "Console", - "startContainerToAccess": "Start the container to access the console", - "noHostSelected": "No host selected", - "failedToFetchLogs": "Failed to fetch logs: {{error}}", - "failedToDownloadLogs": "Failed to download logs: {{error}}" + "connectionFailed": "Не вдалося підключитися до Docker", + "containerStarted": "Контейнер {{name}} запущено", + "failedToStartContainer": "Не вдалося запустити контейнер {{name}}", + "containerStopped": "Контейнер {{name}} зупинено", + "failedToStopContainer": "Не вдалося зупинити контейнер {{name}}", + "containerRestarted": "Контейнер {{name}} перезапущено", + "failedToRestartContainer": "Не вдалося перезапустити контейнер {{name}}", + "containerPaused": "Контейнер {{name}} призупинено", + "containerUnpaused": "Контейнер {{name}} відновлено", + "failedToTogglePauseContainer": "Не вдалося перемкнути стан паузи для контейнера {{name}}", + "containerRemoved": "Контейнер {{name}} видалено", + "failedToRemoveContainer": "Не вдалося видалити контейнер {{name}}", + "image": "Зображення", + "ports": "Порти", + "noPorts": "Без портів", + "start": "Початок", + "stop": "СТІЙ", + "status": "Статус", + "actions": "Дії", + "cardView": "Перегляд картки", + "listView": "Список", + "confirmRemoveContainer": "Ви впевнені, що хочете видалити контейнер '{{name}}'? Цю дію не можна скасувати.", + "runningContainerWarning": "Попередження: Цей контейнер зараз працює. Його видалення спочатку зупинить його роботу.", + "loadingContainers": "Завантаження контейнерів...", + "manager": "Менеджер Докера", + "autoRefresh": "Автоматичне оновлення", + "timestamps": "Позначки часу", + "lines": "Лінії", + "filterLogs": "Фільтрувати журнали...", + "refresh": "Оновити", + "download": "Завантажити", + "clear": "Очистити", + "logsDownloaded": "Журнали успішно завантажено", + "last50": "Останні 50", + "last100": "Останні 100", + "last500": "Останні 500", + "last1000": "Останні 1000", + "allLogs": "Усі журнали", + "noLogsMatching": "Немає журналів, що відповідають \"{{query}}\"", + "noLogsAvailable": "Журнали недоступні", + "noContainersFound": "Контейнерів не знайдено", + "noContainersFoundHint": "На цьому хості немає доступних контейнерів Docker", + "searchPlaceholder": "Пошук контейнерів...", + "allStatuses": "Усі статуси", + "stateRunning": "Біг", + "statePaused": "Призупинено", + "stateExited": "Вихід", + "stateRestarting": "Перезапуск", + "noContainersMatchFilters": "Немає контейнерів, що відповідають вашим фільтрам", + "noContainersMatchFiltersHint": "Спробуйте змінити критерії пошуку або фільтра", + "failedToFetchStats": "Не вдалося отримати статистику контейнера", + "containerNotRunning": "Контейнер не працює", + "startContainerToViewStats": "Запустіть контейнер для перегляду статистики", + "loadingStats": "Завантаження статистики...", + "errorLoadingStats": "Помилка завантаження статистики", + "noStatsAvailable": "Статистика недоступна", + "cpuUsage": "Використання процесора", + "current": "Поточний", + "memoryUsage": "Використання пам'яті", + "networkIo": "Мережевий ввід/вивід", + "input": "Вхід", + "output": "Вихід", + "blockIo": "Блок вводу/виводу", + "read": "Читати", + "write": "Написати", + "pids": "PID-ідентифікатори", + "containerInformation": "Інформація про контейнер", + "name": "Ім'я", + "id": "Ідентифікатор", + "state": "Штат", + "containerMustBeRunning": "Для доступу до консолі контейнер має бути запущений", + "verificationCodePrompt": "Введіть код підтвердження", + "totpVerificationFailed": "Не вдалося перевірити TOTP. Спробуйте ще раз.", + "browserSignInFailed": "Не вдалося ввійти. Спробуйте ще раз.", + "connectedTo": "Підключено до {{containerName}}", + "disconnected": "Відключено", + "consoleError": "Помилка консолі", + "errorMessage": "Помилка: {{message}}", + "failedToConnect": "Не вдалося підключитися до контейнера", + "console": "Консоль", + "selectShell": "Виберіть оболонку", + "bash": "Баш", + "sh": "ш", + "ash": "попіл", + "connect": "Підключитися", + "disconnect": "Відключитися", + "notConnected": "Не підключено", + "clickToConnect": "Натисніть кнопку «Підключитися», щоб розпочати сеанс оболонки", + "connectingTo": "Підключення до {{containerName}}...", + "containerNotFound": "Контейнер не знайдено", + "backToList": "Назад до списку", + "logs": "Журнали", + "stats": "Статистика", + "consoleTab": "Консоль", + "startContainerToAccess": "Запустіть контейнер для доступу до консолі", + "noHostSelected": "Хост не вибрано", + "failedToFetchLogs": "Не вдалося отримати журнали: {{error}}", + "failedToDownloadLogs": "Не вдалося завантажити журнали: {{error}}" }, "nav": { - "docker": "Docker" + "docker": "Докер" }, "onboarding": { - "feature_docker": "Docker", - "feature_docker_desc": "See containers, read logs and watch stats on any host running Docker." + "feature_docker": "Докер", + "feature_docker_desc": "Переглядайте контейнери, читайте журнали та переглядайте статистику на будь-якому хості, на якому працює Docker." }, "terminal": { - "retry": "Retry", - "clipboardReadFailed": "Failed to read from clipboard. Make sure clipboard permissions are granted.", - "clipboardWriteFailed": "Failed to copy to clipboard. Make sure the page is served over HTTPS or localhost." + "retry": "Повторити спробу", + "clipboardReadFailed": "Не вдалося прочитати з буфера обміну. Переконайтеся, що надано дозволи на доступ до буфера обміну.", + "clipboardWriteFailed": "Не вдалося скопіювати в буфер обміну. Переконайтеся, що сторінка обслуговується через HTTPS або localhost." }, "permissions": { "use": { - "title": "Use Docker", - "description": "Open the Docker manager and container consoles on hosts with Docker enabled." + "title": "Використовуйте Docker", + "description": "Відкрийте менеджер Docker та консолі контейнерів на хостах з увімкненим Docker." } }, "settings": { "host": { "enable": { - "label": "Enable Docker", - "description": "Manage containers on this host." + "label": "Увімкнути Докер", + "description": "Керувати контейнерами на цьому хості." }, "containerRuntime": { - "label": "Container Runtime", - "description": "Choose the CLI used for container management on this host", - "docker": "Docker", - "podman": "Podman" + "label": "Середовище виконання контейнера", + "description": "Виберіть інтерфейс командного рядка, який використовується для керування контейнерами на цьому хості", + "docker": "Докер", + "podman": "Подман" } } }, "errors": { - "remoteServerRequired": "Remote server required. Connect a remote server in Settings to use this connection type." + "remoteServerRequired": "Потрібен віддалений сервер. Підключіться до віддаленого сервера в налаштуваннях, щоб використовувати цей тип підключення." }, "hosts": { - "docsLink": "View docs", - "hostNotFound": "Host not found", - "loadingHost": "Loading host..." + "docsLink": "Переглянути документи", + "hostNotFound": "Хост не знайдено", + "loadingHost": "Завантаження хоста..." } } diff --git a/plugins/docker/locales/translated/vi_VN.json b/plugins/docker/locales/translated/vi_VN.json index 793883141..9b4b819e0 100644 --- a/plugins/docker/locales/translated/vi_VN.json +++ b/plugins/docker/locales/translated/vi_VN.json @@ -23,9 +23,9 @@ "start": "Khởi động", "stop": "Bit dừng", "status": "Trạng thái", - "actions": "Actions", - "cardView": "Card view", - "listView": "List view", + "actions": "Hành động", + "cardView": "Chế độ xem thẻ", + "listView": "Chế độ xem danh sách", "confirmRemoveContainer": "Bạn có chắc chắn muốn xóa container '{{name}}' không? Hành động này không thể hoàn tác.", "runningContainerWarning": "Cảnh báo: Container này đang chạy. Xóa nó sẽ dừng container trước.", "loadingContainers": "Đang tải danh sách container...", @@ -78,7 +78,7 @@ "containerMustBeRunning": "Container phải đang chạy để truy cập bảng điều khiển", "verificationCodePrompt": "Nhập mã xác minh", "totpVerificationFailed": "Xác minh TOTP thất bại. Vui lòng thử lại.", - "browserSignInFailed": "Sign-in failed. Please try again.", + "browserSignInFailed": "Đăng nhập không thành công. Vui lòng thử lại.", "connectedTo": "Đã kết nối đến {{containerName}}", "disconnected": "Đã ngắt kết nối", "consoleError": "Lỗi bảng điều khiển", @@ -101,15 +101,15 @@ "consoleTab": "Bảng điều khiển", "startContainerToAccess": "Khởi động container để truy cập bảng điều khiển", "noHostSelected": "Chưa chọn máy chủ", - "failedToFetchLogs": "Failed to fetch logs: {{error}}", - "failedToDownloadLogs": "Failed to download logs: {{error}}" + "failedToFetchLogs": "Không thể tải nhật ký: {{error}}", + "failedToDownloadLogs": "Không thể tải xuống nhật ký: {{error}}" }, "nav": { "docker": "Docker" }, "onboarding": { "feature_docker": "Docker", - "feature_docker_desc": "See containers, read logs and watch stats on any host running Docker." + "feature_docker_desc": "Xem các container, đọc nhật ký và theo dõi số liệu thống kê trên bất kỳ máy chủ nào đang chạy Docker." }, "terminal": { "retry": "Thử lại", @@ -118,15 +118,15 @@ }, "permissions": { "use": { - "title": "Use Docker", - "description": "Open the Docker manager and container consoles on hosts with Docker enabled." + "title": "Sử dụng Docker", + "description": "Mở trình quản lý Docker và bảng điều khiển vùng chứa trên các máy chủ đã bật Docker." } }, "settings": { "host": { "enable": { "label": "Bật Docker", - "description": "Manage containers on this host." + "description": "Quản lý các container trên máy chủ này." }, "containerRuntime": { "label": "Môi trường chạy container", @@ -137,7 +137,7 @@ } }, "errors": { - "remoteServerRequired": "Remote server required. Connect a remote server in Settings to use this connection type." + "remoteServerRequired": "Cần có máy chủ từ xa. Kết nối máy chủ từ xa trong Cài đặt để sử dụng loại kết nối này." }, "hosts": { "docsLink": "Xem tài liệu", diff --git a/plugins/docker/locales/translated/zh_CN.json b/plugins/docker/locales/translated/zh_CN.json index e6a47976d..91c2aec86 100644 --- a/plugins/docker/locales/translated/zh_CN.json +++ b/plugins/docker/locales/translated/zh_CN.json @@ -70,7 +70,7 @@ "blockIo": "块 I/O", "read": "读取", "write": "写入", - "pids": "进程 ID", + "pids": "PIDs", "containerInformation": "容器信息", "name": "名称", "id": "ID", @@ -119,7 +119,7 @@ "permissions": { "use": { "title": "使用 Docker", - "description": "在启用了 Docker 的主机上打开 Docker 管理器和容器控制台。" + "description": "在已启用 Docker 的主机上打开 Docker 管理器和容器控制台。" } }, "settings": { @@ -137,7 +137,7 @@ } }, "errors": { - "remoteServerRequired": "需要远程服务器。请在设置中连接远程服务器以使用此连接类型。" + "remoteServerRequired": "需要远程服务器。请在“设置”中连接远程服务器以使用此连接类型。" }, "hosts": { "docsLink": "查看文档", diff --git a/plugins/docker/locales/translated/zh_TW.json b/plugins/docker/locales/translated/zh_TW.json index df863cecb..86b96839b 100644 --- a/plugins/docker/locales/translated/zh_TW.json +++ b/plugins/docker/locales/translated/zh_TW.json @@ -23,9 +23,9 @@ "start": "啟動", "stop": "停止位元", "status": "狀態", - "actions": "Actions", - "cardView": "Card view", - "listView": "List view", + "actions": "行動", + "cardView": "卡片視圖", + "listView": "清單視圖", "confirmRemoveContainer": "確定要移除容器 '{{name}}' 嗎?此動作無法復原。", "runningContainerWarning": "警告:此容器正在執行中。移除時會先將其停止。", "loadingContainers": "正在載入容器...", @@ -78,7 +78,7 @@ "containerMustBeRunning": "容器必須在執行中才能存取主控台", "verificationCodePrompt": "請輸入驗證碼", "totpVerificationFailed": "TOTP 驗證失敗,請再試一次。", - "browserSignInFailed": "Sign-in failed. Please try again.", + "browserSignInFailed": "登入失敗,請重試。", "connectedTo": "已連線至 {{containerName}}", "disconnected": "已中斷連線", "consoleError": "主控台錯誤", @@ -101,15 +101,15 @@ "consoleTab": "主控台", "startContainerToAccess": "啟動容器以存取主控台", "noHostSelected": "未選擇主機", - "failedToFetchLogs": "Failed to fetch logs: {{error}}", - "failedToDownloadLogs": "Failed to download logs: {{error}}" + "failedToFetchLogs": "取得日誌失敗: {{error}}", + "failedToDownloadLogs": "日誌下載失敗: {{error}}" }, "nav": { "docker": "Docker" }, "onboarding": { "feature_docker": "Docker", - "feature_docker_desc": "See containers, read logs and watch stats on any host running Docker." + "feature_docker_desc": "查看執行 Docker 的任何主機上的容器、讀取日誌和查看統計資料。" }, "terminal": { "retry": "重試", @@ -118,15 +118,15 @@ }, "permissions": { "use": { - "title": "Use Docker", - "description": "Open the Docker manager and container consoles on hosts with Docker enabled." + "title": "使用 Docker", + "description": "在已啟用 Docker 的主機上開啟 Docker 管理員和容器控制台。" } }, "settings": { "host": { "enable": { "label": "啟用 Docker", - "description": "Manage containers on this host." + "description": "管理此主機上的容器。" }, "containerRuntime": { "label": "容器執行環境", @@ -137,7 +137,7 @@ } }, "errors": { - "remoteServerRequired": "Remote server required. Connect a remote server in Settings to use this connection type." + "remoteServerRequired": "需要遠端伺服器。請在「設定」中連接遠端伺服器以使用此連線類型。" }, "hosts": { "docsLink": "檢視文件", diff --git a/plugins/docker/src/backend/connect.ts b/plugins/docker/src/backend/connect.ts index bacbad75c..5501fef3a 100644 --- a/plugins/docker/src/backend/connect.ts +++ b/plugins/docker/src/backend/connect.ts @@ -341,13 +341,7 @@ export async function startConnect( return; } - const { hostKeyChanged, authFailed } = classifyConnectError( - message, - logs, - ); - if (hostKeyChanged || authFailed) { - ctx.hosts.status.reportLogin(hostId, { ok: false, hostKeyChanged }); - } + const { authFailed } = classifyConnectError(message, logs); log.error("Docker SSH connection failed", { hostId, userId, diff --git a/plugins/docker/tests/backend/routes.test.ts b/plugins/docker/tests/backend/routes.test.ts index f317be6f3..21641a10a 100644 --- a/plugins/docker/tests/backend/routes.test.ts +++ b/plugins/docker/tests/backend/routes.test.ts @@ -303,7 +303,7 @@ describe("docker routes", () => { }); }); - it("reports a failed login to core", async () => { + it("never reports a failed login to core", async () => { const client = new FakeClient(); server = await startServer({ client }); server.mock.ctx.ssh.connect = (async () => { @@ -311,10 +311,6 @@ describe("docker routes", () => { }) as never; const response = await connect(server); expect(response.status).toBe(500); - expect(server.mock.statusReports).toContainEqual({ - hostId: 7, - ok: false, - hostKeyChanged: false, - }); + expect(server.mock.statusReports).toEqual([]); }); }); diff --git a/plugins/file-manager/locales/translated/af_ZA.json b/plugins/file-manager/locales/translated/af_ZA.json index 3b38d9405..6deb21566 100644 --- a/plugins/file-manager/locales/translated/af_ZA.json +++ b/plugins/file-manager/locales/translated/af_ZA.json @@ -323,7 +323,7 @@ "sideBySide": "Sy aan Sy", "inline": "Inlyn", "fileComparison": "Lêervergelyking: {{file1}} vs {{file2}}", - "fileTooLarge": "Lêer te groot: {{error}}", + "fileTooLarge": "File is too large (> 10MB) and cannot be opened as text for security reasons.", "sshConnectionFailed": "SSH-verbinding het misluk. Kontroleer asseblief jou verbinding met {{name}} ({{ip}}:{{port}})", "loadFileFailed": "Kon nie lêer laai nie: {{error}}", "connecting": "Verbind...", @@ -365,7 +365,7 @@ "comfortableLayout": "Gebruik gemaklike uitleg", "cannotLoadPdf": "Kan nie PDF laai nie", "pdfLoadError": "Daar was 'n fout tydens die laai van hierdie PDF-lêer.", - "loadingPdf": "Laai PDF...", + "loadingPdf": "Loading PDF viewer...", "loadingPage": "Laai bladsy...", "cancel": "Kanselleer", "copiedItems_one": "Gekopieerde {{count}} item", @@ -383,7 +383,16 @@ "videoUnsupported": "Jou blaaier kan nie hierdie videoformaat speel nie.", "downloadToPlay": "Laai dit af om dit elders te speel", "cannotPreviewType": "Kan nie hierdie lêertipe voorbeskou nie", - "cannotPreviewTypeHint": "Hierdie lêertipe het geen voorskou nie. Laai dit af om dit in 'n ander toepassing oop te maak." + "cannotPreviewTypeHint": "Hierdie lêertipe het geen voorskou nie. Laai dit af om dit in 'n ander toepassing oop te maak.", + "loadingFile": "Loading file...", + "loadingImage": "Loading image...", + "loadingEditor": "Loading editor...", + "loadingPreview": "Loading preview...", + "loadingAudio": "Loading audio player...", + "emptyPreview": "Nothing to preview yet...", + "revert": "Revert", + "openAsText": "Open as Text", + "confirmOpenAsText": "Do you want to continue opening this file as text? This may slow down your browser." }, "sftpTransfer": { "title": "SFTP", @@ -539,5 +548,8 @@ "metricsHopSourceRead": "Bron → bediener: {{throughput}}", "metricsHopDestSftpWrite": "Bediener → bestemming (SFTP): {{throughput}}", "metricsHopDestLocalWrite": "Bediener → bestemming (plaaslik): {{throughput}}" + }, + "plugin": { + "name": "File Manager" } } diff --git a/plugins/file-manager/locales/translated/ar_SA.json b/plugins/file-manager/locales/translated/ar_SA.json index bb659990d..733d1bde7 100644 --- a/plugins/file-manager/locales/translated/ar_SA.json +++ b/plugins/file-manager/locales/translated/ar_SA.json @@ -323,7 +323,7 @@ "sideBySide": "جنباً إلى جنب", "inline": "مضمن", "fileComparison": "مقارنة الملفات: {{file1}} مقابل {{file2}}", - "fileTooLarge": "الملف كبير جداً: {{error}}", + "fileTooLarge": "File is too large (> 10MB) and cannot be opened as text for security reasons.", "sshConnectionFailed": "فشل اتصال SSH. يرجى التحقق من الاتصال بـ {{name}} ({{ip}}:{{port}})", "loadFileFailed": "فشل تحميل الملف: {{error}}", "connecting": "جارٍ الاتصال...", @@ -365,7 +365,7 @@ "comfortableLayout": "استخدم تصميمًا مريحًا", "cannotLoadPdf": "لا يمكن تحميل PDF", "pdfLoadError": "حدث خطأ أثناء تحميل ملف PDF هذا.", - "loadingPdf": "جارٍ تحميل PDF...", + "loadingPdf": "Loading PDF viewer...", "loadingPage": "جارٍ تحميل الصفحة...", "cancel": "إلغاء", "copiedItems_one": "تم نسخ العنصر {{count}}", @@ -383,7 +383,16 @@ "videoUnsupported": "لا يمكن لمتصفحك تشغيل هذا الفيديو.", "downloadToPlay": "قم بتنزيله لتشغيله في مكان آخر", "cannotPreviewType": "لا يمكن معاينة هذا النوع من الملفات", - "cannotPreviewTypeHint": "لا يتوفر معاينة لهذا النوع من الملفات. قم بتنزيله لفتحه في تطبيق آخر." + "cannotPreviewTypeHint": "لا يتوفر معاينة لهذا النوع من الملفات. قم بتنزيله لفتحه في تطبيق آخر.", + "loadingFile": "Loading file...", + "loadingImage": "Loading image...", + "loadingEditor": "Loading editor...", + "loadingPreview": "Loading preview...", + "loadingAudio": "Loading audio player...", + "emptyPreview": "Nothing to preview yet...", + "revert": "Revert", + "openAsText": "Open as Text", + "confirmOpenAsText": "Do you want to continue opening this file as text? This may slow down your browser." }, "sftpTransfer": { "title": "SFTP", @@ -539,5 +548,8 @@ "metricsHopSourceRead": "المصدر → الخادم: {{throughput}}", "metricsHopDestSftpWrite": "الخادم → الوجهة (SFTP): {{throughput}}", "metricsHopDestLocalWrite": "الخادم → الوجهة (محلي): {{throughput}}" + }, + "plugin": { + "name": "File Manager" } } diff --git a/plugins/file-manager/locales/translated/bg_BG.json b/plugins/file-manager/locales/translated/bg_BG.json index 501d9d548..5b8bb99e8 100644 --- a/plugins/file-manager/locales/translated/bg_BG.json +++ b/plugins/file-manager/locales/translated/bg_BG.json @@ -323,7 +323,7 @@ "sideBySide": "Рамо до рамо", "inline": "Вграден", "fileComparison": "Сравнение на файлове: {{file1}} срещу {{file2}}", - "fileTooLarge": "Файлът е твърде голям: {{error}}", + "fileTooLarge": "File is too large (> 10MB) and cannot be opened as text for security reasons.", "sshConnectionFailed": "SSH връзката не бе успешна. Моля, проверете връзката си с {{name}} ({{ip}}:{{port}})", "loadFileFailed": "Неуспешно зареждане на файл: {{error}}", "connecting": "Свързване...", @@ -365,7 +365,7 @@ "comfortableLayout": "Използвайте удобно оформление", "cannotLoadPdf": "Не може да се зареди PDF файл", "pdfLoadError": "Възникна грешка при зареждането на този PDF файл.", - "loadingPdf": "Зареждане на PDF файл...", + "loadingPdf": "Loading PDF viewer...", "loadingPage": "Зареждане на страницата...", "cancel": "Отказ", "copiedItems_one": "Копиран елемент {{count}}", @@ -383,7 +383,16 @@ "videoUnsupported": "Вашият браузър не може да възпроизведе този видео формат.", "downloadToPlay": "Изтеглете, за да го играете другаде", "cannotPreviewType": "Не може да се прегледа този тип файл", - "cannotPreviewTypeHint": "Този тип файл няма предварителен преглед. Изтеглете го, за да го отворите в друго приложение." + "cannotPreviewTypeHint": "Този тип файл няма предварителен преглед. Изтеглете го, за да го отворите в друго приложение.", + "loadingFile": "Loading file...", + "loadingImage": "Loading image...", + "loadingEditor": "Loading editor...", + "loadingPreview": "Loading preview...", + "loadingAudio": "Loading audio player...", + "emptyPreview": "Nothing to preview yet...", + "revert": "Revert", + "openAsText": "Open as Text", + "confirmOpenAsText": "Do you want to continue opening this file as text? This may slow down your browser." }, "sftpTransfer": { "title": "SFTP", @@ -539,5 +548,8 @@ "metricsHopSourceRead": "Източник → сървър: {{throughput}}", "metricsHopDestSftpWrite": "Сървър → дестинация (SFTP): {{throughput}}", "metricsHopDestLocalWrite": "Сървър → дестинация (локална): {{throughput}}" + }, + "plugin": { + "name": "File Manager" } } diff --git a/plugins/file-manager/locales/translated/bn_BD.json b/plugins/file-manager/locales/translated/bn_BD.json index dc86761ce..688f73513 100644 --- a/plugins/file-manager/locales/translated/bn_BD.json +++ b/plugins/file-manager/locales/translated/bn_BD.json @@ -1,543 +1,555 @@ { "nav": { - "files": "Files", - "sftp": "SFTP", - "openFileManager": "Open File Manager" + "files": "ফাইল", + "sftp": "এসএফটিপি", + "openFileManager": "ফাইল ম্যানেজার খুলুন" }, "permissions": { "use": { - "title": "Use file manager", - "description": "Browse, edit and transfer files over SFTP." + "title": "ফাইল ম্যানেজার ব্যবহার করুন", + "description": "SFTP-এর মাধ্যমে ফাইল ব্রাউজ, সম্পাদনা এবং স্থানান্তর করুন।" } }, "settings": { "host": { "enable": { - "label": "Enable File Manager", - "description": "Browse and edit files on this host over SFTP." + "label": "ফাইল ম্যানেজার সক্রিয় করুন", + "description": "SFTP-এর মাধ্যমে এই হোস্টের ফাইলগুলো ব্রাউজ ও সম্পাদনা করুন।" }, "defaultPath": { - "label": "Default Path" + "label": "ডিফল্ট পথ" }, "scpLegacy": { - "label": "SCP Legacy Mode" + "label": "SCP লিগ্যাসি মোড" } }, "user": { "transferConcurrency": { - "label": "Simultaneous File Transfers", - "description": "How many files the side by side local/remote manager uploads or downloads at the same time. Lower this if your server limits SFTP channels." + "label": "একযোগে ফাইল স্থানান্তর", + "description": "সাইড বাই সাইড লোকাল/রিমোট ম্যানেজার একই সময়ে কতগুলো ফাইল আপলোড বা ডাউনলোড করে। আপনার সার্ভার যদি SFTP চ্যানেল সীমিত করে, তবে এই সংখ্যাটি কমিয়ে দিন।" }, "confirmBeforeTrash": { - "label": "Confirm before moving files to trash", - "description": "Ask before moving remote files to trash. Permanent deletion still requires confirmation." + "label": "ট্র্যাশে ফাইল সরানোর আগে নিশ্চিত করুন।", + "description": "রিমোট ফাইল ট্র্যাশে সরানোর আগে জিজ্ঞাসা করুন। স্থায়ীভাবে মুছে ফেলার জন্যও নিশ্চিতকরণের প্রয়োজন হয়।" } } }, "hostCapability": { - "label": "File Manager" + "label": "ফাইল ম্যানেজার" }, "fileManager": { - "noHostSelected": "No host selected", - "initializingEditor": "Initializing editor...", - "file": "File", - "folder": "Folder", - "uploadFile": "Upload File", - "downloadFile": "Download", - "extractArchive": "Extract Archive", - "extractingArchive": "Extracting {{name}}...", - "archiveExtractedSuccessfully": "{{name}} extracted successfully", - "extractFailed": "Extract failed", - "compressFile": "Compress File", - "compressFiles": "Compress Files", - "compressFilesDesc": "Compress {{count}} items into an archive", - "archiveName": "Archive Name", - "enterArchiveName": "Enter archive name...", - "compressionFormat": "Compression Format", - "selectedFiles": "Selected files", - "andMoreFiles": "and {{count}} more...", - "compress": "Compress", - "compressingFiles": "Compressing {{count}} items into {{name}}...", - "filesCompressedSuccessfully": "{{name}} created successfully", - "compressFailed": "Compression failed", - "edit": "Edit", - "preview": "Preview", - "previous": "Previous", - "next": "Next", - "pageXOfY": "Page {{current}} of {{total}}", - "zoomOut": "Zoom Out", - "zoomIn": "Zoom In", - "newFile": "New File", - "newFolder": "New Folder", - "rename": "Rename", - "uploading": "Uploading...", - "uploadingFile": "Uploading {{name}}...", - "uploadingChunk": "Uploading {{name}}: {{percent}}% (part {{chunk}} of {{total}})", - "fileName": "File Name", - "folderName": "Folder Name", - "fileUploadedSuccessfully": "File \"{{name}}\" uploaded successfully", - "failedToUploadFile": "Failed to upload file", - "uploadingFolderFiles": "Uploading {{count}} file(s)...", - "uploadedFolderFiles": "Uploaded {{count}} file(s) successfully", - "uploadedFolderPartial": "Uploaded {{uploaded}} file(s), {{failed}} failed", - "fileDownloadedSuccessfully": "File \"{{name}}\" downloaded successfully", - "failedToDownloadFile": "Failed to download file", - "fileCreatedSuccessfully": "File \"{{name}}\" created successfully", - "folderCreatedSuccessfully": "Folder \"{{name}}\" created successfully", - "failedToCreateItem": "Failed to create item", - "operationFailed": "{{operation}} operation failed for {{name}}: {{error}}", - "failedToResolveSymlink": "Failed to resolve symlink", - "itemsDeletedSuccessfully": "{{count}} items deleted successfully", - "failedToDeleteItems": "Failed to delete items", - "sudoPasswordRequired": "Administrator Password Required", - "enterSudoPassword": "Enter sudo password to continue this operation", - "sudoPassword": "Sudo password", - "sudoOperationFailed": "Sudo operation failed", - "sudoAuthFailed": "Sudo authentication failed", - "dragFilesToUpload": "Drop files here to upload", - "dropToUploadHere": "Drop to upload here", - "dropToDownloadHere": "Drop to download here", - "localFiles": "Local", - "showLocalFiles": "Show local files (split view)", - "hideLocalFiles": "Hide local files", - "localHome": "Home folder", - "localPathPlaceholder": "Local folder path", - "localShowHidden": "Show hidden files", - "localHideHidden": "Hide hidden files", - "localRevealInFileManager": "Reveal in system file manager", - "localCannotOpenFolder": "Cannot open folder", - "localItemCount": "{{count}} items", - "localSelectedCount": "{{count}} selected", - "back": "Back", - "forward": "Forward", - "up": "Up", - "kind": "Kind", - "localUploadingProgress": "Uploading {{current}} of {{total}}", - "localDownloadingProgress": "Downloading {{current}} of {{total}}", - "localTransferInFlight": "{{count}} at once", - "localPreparingDownload": "Preparing download...", - "localTransferCancelled": "Transfer cancelled", - "localNothingToTransfer": "Nothing to transfer", - "localUploadComplete": "Uploaded {{count}} file(s)", - "localUploadFailed": "Upload failed", - "localUploadPartial": "Uploaded {{done}} file(s), {{failed}} failed", - "localDownloadComplete": "Downloaded {{count}} file(s)", - "localDownloadFailed": "Download failed", - "localDownloadPartial": "Downloaded {{done}} file(s), {{failed}} failed", - "localReplaceExistingPrompt": "{{count}} item(s) already exist in this folder. Replace them?", - "localReplace": "Replace", - "localSkipExisting": "Skip", - "localSkippedExisting": "Skipped {{count}} existing item(s)", - "localUnsafeNamesSkipped": "Skipped {{count}} item(s) whose names cannot be used on this computer", - "localOpen": "Open", - "localOpenFolder": "Open folder", - "localUploadToRemote": "Upload to server", - "localUploadToRemoteMany": "Upload {{count}} items to server", - "localMoveToTrash": "Move to Trash", - "localMoveToTrashMany": "Move {{count}} items to Trash", - "localTrashConfirmSingle": "Move \"{{name}}\" to the Trash?", - "localTrashConfirmFolder": "Move the folder \"{{name}}\" and all its contents to the Trash?", - "localTrashConfirmMany": "Move {{count}} items to the Trash?", - "localTrashed": "Moved {{count}} item(s) to the Trash", - "localTrashFailed": "Could not move to the Trash", - "localRenameFailed": "Rename failed", - "localCreateFailed": "Could not create item", - "goToParentFolder": "Go to parent folder", - "resizeSidebar": "Drag to resize the sidebar (double-click to reset)", - "resizeLocalPane": "Drag to resize the local pane (double-click to reset)", - "columns": "Columns", - "columnsHint": "Right-click to choose columns", - "emptyFolder": "This folder is empty", - "searchFiles": "Search files...", - "upload": "Upload", - "selectHostToStart": "Select a host to start file management", - "sshRequiredForFileManager": "File manager requires SSH. This host does not have SSH enabled.", - "failedToConnect": "Failed to connect to SSH", - "failedToLoadDirectory": "Failed to load directory", - "noSSHConnection": "No SSH connection available", - "copy": "Copy", - "cut": "Cut", - "paste": "Paste", - "copyPath": "Copy Path", - "copyPaths": "Copy Paths", - "delete": "Delete", - "properties": "Properties", - "refresh": "Refresh", - "downloadFiles": "Download {{count}} files to Browser", - "copyFiles": "Copy {{count}} items", - "cutFiles": "Cut {{count}} items", - "deleteFiles": "Delete {{count}} items", - "filesCopiedToClipboard": "{{count}} items copied to clipboard", - "filesCutToClipboard": "{{count}} items cut to clipboard", - "pathCopiedToClipboard": "Path copied to clipboard", - "pathsCopiedToClipboard": "{{count}} paths copied to clipboard", - "failedToCopyPath": "Failed to copy path to clipboard", - "copyFolderLink": "Copy Link to Folder", - "copyCurrentFolderLink": "Copy Link to Current Folder", - "folderLinkCopied": "Folder link copied to clipboard", - "failedToCopyFolderLink": "Failed to copy folder link", - "movedItems": "Moved {{count}} items", - "failedToDeleteItem": "Failed to delete item", - "itemRenamedSuccessfully": "{{type}} renamed successfully", - "failedToRenameItem": "Failed to rename item", - "download": "Download", - "openExternalEditor": "Open externally", - "chooseExternalEditor": "Choose external editor", - "externalEditorSelected": "External editor selected", - "externalEditorDesktopOnly": "External editor is only available in the desktop app", - "externalEditorOpened": "Opened in external editor. Saving there will upload changes back to the server.", - "failedToOpenExternalEditor": "Failed to open external editor", - "failedToSelectExternalEditor": "Failed to select external editor", - "permissions": "Permissions", - "size": "Size", - "modified": "Modified", - "path": "Path", - "confirmDelete": "Are you sure you want to delete {{name}}?", - "permissionDenied": "Permission denied", - "serverError": "Server Error", - "fileSavedSuccessfully": "File saved successfully", - "failedToSaveFile": "Failed to save file", - "confirmDeleteSingleItem": "Are you sure you want to permanently delete \"{{name}}\"?", - "confirmDeleteMultipleItems": "Are you sure you want to permanently delete {{count}} items?", - "confirmDeleteMultipleItemsWithFolders": "Are you sure you want to permanently delete {{count}} items? This includes folders and their contents.", - "confirmDeleteFolder": "Are you sure you want to permanently delete the folder \"{{name}}\" and all its contents?", - "permanentDeleteWarning": "This action cannot be undone. The item(s) will be permanently deleted from the server.", - "moveToTrashWarning": "The item(s) will be moved to the Termix Trash and can be restored before the retention period expires.", - "itemsMovedToTrash": "{{count}} item(s) moved to Trash", - "trash": "Trash", - "trashDescription": "Deleted items are retained for {{days}} day(s) on this host.", - "trashLoadFailed": "Failed to load Trash", - "trashEmpty": "Trash is empty", - "trashRestore": "Restore", - "trashRestored": "Restored {{name}}", - "trashRestoreFailed": "Failed to restore item. The original path may already exist.", - "trashDeletePermanently": "Delete permanently", - "trashDeleteConfirm": "Permanently delete {{name}}? This cannot be undone.", - "trashPermanentlyDeleted": "Permanently deleted {{name}}", - "trashDeleteFailed": "Failed to permanently delete item", - "trashEmptyAction": "Empty Trash", - "trashEmptyConfirm": "Permanently delete every item in Trash? This cannot be undone.", - "trashEmptied": "Trash emptied", - "trashRetention": "Automatic cleanup after (days)", - "trashRetentionSaved": "Trash retention updated", - "trashRetentionFailed": "Failed to update Trash retention", - "trashUnavailableConfirm": "This item cannot be moved to Trash, usually because it is on another filesystem or requires elevated permissions. Delete it permanently instead?", - "recent": "Recent", - "pinned": "Pinned", - "folderShortcuts": "Folder Shortcuts", - "failedToReconnectSSH": "Failed to reconnect SSH session", - "openTerminalHere": "Open Terminal Here", - "run": "Run", - "openTerminalInFolder": "Open Terminal in This Folder", - "openTerminalInFileLocation": "Open Terminal at File Location", - "runningFile": "Running - {{file}}", - "onlyRunExecutableFiles": "Can only run executable files", - "directories": "Directories", - "removedFromRecentFiles": "Removed \"{{name}}\" from recent files", - "removeFailed": "Remove failed", - "unpinnedSuccessfully": "Unpinned \"{{name}}\" successfully", - "unpinFailed": "Unpin failed", - "removedShortcut": "Removed shortcut \"{{name}}\"", - "removeShortcutFailed": "Remove shortcut failed", - "clearedAllRecentFiles": "Cleared all recent files", - "clearFailed": "Clear failed", - "removeFromRecentFiles": "Remove from recent files", - "clearAllRecentFiles": "Clear all recent files", - "unpinFile": "Unpin file", - "removeShortcut": "Remove shortcut", - "pinFile": "Pin file", - "addToShortcuts": "Add to shortcuts", - "pasteFailed": "Paste failed", - "noUndoableActions": "No undoable actions", - "undoCopySuccess": "Undid copy operation: Deleted {{count}} copied files", - "undoCopyFailedDelete": "Undo failed: Could not delete any copied files", - "undoCopyFailedNoInfo": "Undo failed: Could not find copied file information", - "undoMoveSuccess": "Undid move operation: Moved {{count}} files back to original location", - "undoMoveFailedMove": "Undo failed: Could not move any files back", - "undoMoveFailedNoInfo": "Undo failed: Could not find moved file information", - "undoDeleteNotSupported": "Delete operation cannot be undone: Files have been permanently deleted from server", - "undoTypeNotSupported": "Unsupported undo operation type", - "undoOperationFailed": "Undo operation failed", - "unknownError": "Unknown error", - "confirm": "Confirm", - "find": "Find...", - "replace": "Replace", - "downloadInstead": "Download Instead", - "keyboardShortcuts": "Keyboard Shortcuts", - "searchAndReplace": "Search & Replace", - "editing": "Editing", - "search": "Search", - "findNext": "Find Next", - "findPrevious": "Find Previous", - "save": "Save", - "selectAll": "Select All", - "undo": "Undo", - "redo": "Redo", - "moveLineUp": "Move Line Up", - "moveLineDown": "Move Line Down", - "toggleComment": "Toggle Comment", - "autoComplete": "Auto Complete", - "imageLoadError": "Failed to load image", - "startTyping": "Start typing...", - "unknownSize": "Unknown size", - "fileIsEmpty": "File is empty", - "largeFileWarning": "Large File Warning", - "largeFileWarningDesc": "This file is {{size}} in size, which may cause performance issues when opened as text.", - "fileNotFoundAndRemoved": "File \"{{name}}\" not found and has been removed from recent/pinned files", - "failedToLoadFile": "Failed to load file: {{error}}", - "serverErrorOccurred": "Server error occurred. Please try again later.", - "autoSaveFailed": "Auto-save failed", - "fileAutoSaved": "File auto-saved", - "moveFileFailed": "Failed to move {{name}}", - "moveOperationFailed": "Move operation failed", - "canOnlyCompareFiles": "Can only compare two files", - "comparingFiles": "Comparing files: {{file1}} and {{file2}}", - "dragFailed": "Drag operation failed", - "filePinnedSuccessfully": "File \"{{name}}\" pinned successfully", - "pinFileFailed": "Failed to pin file", - "fileUnpinnedSuccessfully": "File \"{{name}}\" unpinned successfully", - "unpinFileFailed": "Failed to unpin file", - "shortcutAddedSuccessfully": "Folder shortcut \"{{name}}\" added successfully", - "addShortcutFailed": "Failed to add shortcut", - "operationCompletedSuccessfully": "{{operation}} {{count}} items successfully", - "operationCompleted": "{{operation}} {{count}} items", - "downloadFileSuccess": "File {{name}} downloaded successfully", - "downloadFileFailed": "Download failed", - "downloadingFile": "Downloading {{name}}…", + "noHostSelected": "কোন হোস্ট নির্বাচন করা হয়নি", + "initializingEditor": "এডিটর চালু করা হচ্ছে...", + "file": "ফাইল", + "folder": "ফোল্ডার", + "uploadFile": "ফাইল আপলোড করুন", + "downloadFile": "ডাউনলোড করুন", + "extractArchive": "আর্কাইভ নিষ্কাশন করুন", + "extractingArchive": "{{name}} নিষ্কাশন করা হচ্ছে ...", + "archiveExtractedSuccessfully": "{{name}} সফলভাবে নিষ্কাশন করা হয়েছে", + "extractFailed": "নিষ্কাশন ব্যর্থ হয়েছে", + "compressFile": "ফাইল সংকুচিত করুন", + "compressFiles": "ফাইলগুলি সংকুচিত করুন", + "compressFilesDesc": "{{count}} টি আইটেমকে আর্কাইভে সংকুচিত করুন", + "archiveName": "আর্কাইভের নাম", + "enterArchiveName": "আর্কাইভের নাম লিখুন...", + "compressionFormat": "কম্প্রেশন ফরম্যাট", + "selectedFiles": "নির্বাচিত ফাইল", + "andMoreFiles": "এবং {{count}} আরও...", + "compress": "সংকুচিত করুন", + "compressingFiles": "{{count}} টি আইটেমকে {{name}} টি আইটেমে সংকুচিত করা হচ্ছে...", + "filesCompressedSuccessfully": "{{name}} সফলভাবে তৈরি হয়েছে", + "compressFailed": "সংকোচন ব্যর্থ হয়েছে", + "edit": "সম্পাদনা", + "preview": "প্রিভিউ", + "previous": "পূর্ববর্তী", + "next": "পরবর্তী", + "pageXOfY": "{{current}} এর {{total}} পৃষ্ঠা", + "zoomOut": "জুম আউট", + "zoomIn": "জুম ইন", + "newFile": "নতুন ফাইল", + "newFolder": "নতুন ফোল্ডার", + "rename": "নাম পরিবর্তন", + "uploading": "আপলোড হচ্ছে...", + "uploadingFile": "{{name}} আপলোড হচ্ছে ...", + "uploadingChunk": "{{name}}আপলোড করা হচ্ছে : {{percent}}% ( {{total}} এর {{chunk}} এর অংশ)", + "fileName": "ফাইলের নাম", + "folderName": "ফোল্ডারের নাম", + "fileUploadedSuccessfully": "ফাইল \"{{name}}\" সফলভাবে আপলোড হয়েছে", + "failedToUploadFile": "ফাইল আপলোড করতে ব্যর্থ হয়েছে", + "uploadingFolderFiles": "{{count}} টি ফাইল আপলোড করা হচ্ছে...", + "uploadedFolderFiles": "{{count}} টি ফাইল সফলভাবে আপলোড করা হয়েছে", + "uploadedFolderPartial": "{{uploaded}} টি ফাইল আপলোড করা হয়েছে, {{failed}} টি ফাইল আপলোড ব্যর্থ হয়েছে", + "fileDownloadedSuccessfully": "ফাইল \"{{name}}\" সফলভাবে ডাউনলোড হয়েছে", + "failedToDownloadFile": "ফাইল ডাউনলোড করতে ব্যর্থ হয়েছে", + "fileCreatedSuccessfully": "ফাইল \"{{name}}\" সফলভাবে তৈরি হয়েছে", + "folderCreatedSuccessfully": "\"{{name}}\" ফোল্ডারটি সফলভাবে তৈরি করা হয়েছে", + "failedToCreateItem": "আইটেম তৈরি করতে ব্যর্থ হয়েছে", + "operationFailed": "{{operation}} অপারেশনটি {{name}}এর জন্য ব্যর্থ হয়েছে: {{error}}", + "failedToResolveSymlink": "সিমলিঙ্ক সমাধান করতে ব্যর্থ হয়েছে", + "itemsDeletedSuccessfully": "{{count}} আইটেম সফলভাবে মুছে ফেলা হয়েছে", + "failedToDeleteItems": "আইটেমগুলি মুছে ফেলতে ব্যর্থ হয়েছে", + "sudoPasswordRequired": "প্রশাসক পাসওয়ার্ড আবশ্যক", + "enterSudoPassword": "এই অপারেশনটি চালিয়ে যেতে sudo পাসওয়ার্ড দিন।", + "sudoPassword": "সুডো পাসওয়ার্ড", + "sudoOperationFailed": "Sudo অপারেশন ব্যর্থ হয়েছে", + "sudoAuthFailed": "Sudo প্রমাণীকরণ ব্যর্থ হয়েছে", + "dragFilesToUpload": "আপলোড করার জন্য ফাইলগুলো এখানে রাখুন।", + "dropToUploadHere": "এখানে আপলোড করতে ড্রপ করুন", + "dropToDownloadHere": "ডাউনলোড করতে এখানে ক্লিক করুন", + "localFiles": "স্থানীয়", + "showLocalFiles": "স্থানীয় ফাইলগুলি দেখান (বিভক্ত দৃশ্য)", + "hideLocalFiles": "স্থানীয় ফাইলগুলি লুকান", + "localHome": "হোম ফোল্ডার", + "localPathPlaceholder": "স্থানীয় ফোল্ডার পাথ", + "localShowHidden": "লুকানো ফাইলগুলি দেখান", + "localHideHidden": "লুকানো ফাইলগুলি লুকান", + "localRevealInFileManager": "সিস্টেম ফাইল ম্যানেজারে প্রকাশ করুন", + "localCannotOpenFolder": "ফোল্ডার খোলা যাচ্ছে না", + "localItemCount": "{{count}} আইটেম", + "localSelectedCount": "{{count}} নির্বাচিত", + "back": "ফিরে যান", + "forward": "ফরোয়ার্ড", + "up": "উপরে", + "kind": "ধরনের", + "localUploadingProgress": "{{total}} এর {{current}} আপলোড করা হচ্ছে", + "localDownloadingProgress": "{{total}} এর {{current}} ডাউনলোড হচ্ছে", + "localTransferInFlight": "{{count}} একবারে", + "localPreparingDownload": "ডাউনলোড প্রস্তুত হচ্ছে...", + "localTransferCancelled": "স্থানান্তর বাতিল করা হয়েছে", + "localNothingToTransfer": "স্থানান্তর করার কিছু নেই", + "localUploadComplete": "{{count}} টি ফাইল আপলোড করা হয়েছে", + "localUploadFailed": "আপলোড ব্যর্থ হয়েছে", + "localUploadPartial": "{{done}} টি ফাইল আপলোড করা হয়েছে, {{failed}} টি ফাইল আপলোড ব্যর্থ হয়েছে", + "localDownloadComplete": "{{count}} টি ফাইল ডাউনলোড করা হয়েছে", + "localDownloadFailed": "ডাউনলোড ব্যর্থ হয়েছে", + "localDownloadPartial": "{{done}} টি ফাইল ডাউনলোড করা হয়েছে, {{failed}} টি ফাইল ডাউনলোড ব্যর্থ হয়েছে", + "localReplaceExistingPrompt": "এই ফোল্ডারে {{count}} টি আইটেম ইতিমধ্যেই বিদ্যমান। এগুলো প্রতিস্থাপন করবেন?", + "localReplace": "প্রতিস্থাপন করুন", + "localSkipExisting": "এড়িয়ে যান", + "localSkippedExisting": "{{count}} টি বিদ্যমান আইটেম বাদ দেওয়া হয়েছে", + "localUnsafeNamesSkipped": "{{count}} টি আইটেম বাদ দেওয়া হয়েছে, যেগুলোর নাম এই কম্পিউটারে ব্যবহার করা যাবে না।", + "localOpen": "খোলা", + "localOpenFolder": "ফোল্ডার খুলুন", + "localUploadToRemote": "সার্ভারে আপলোড করুন", + "localUploadToRemoteMany": "সার্ভারে {{count}} টি আইটেম আপলোড করুন", + "localMoveToTrash": "ট্র্যাশে সরান", + "localMoveToTrashMany": "{{count}} টি আইটেম ট্র্যাশে সরান", + "localTrashConfirmSingle": "\"{{name}}\" ট্র্যাশে সরাবেন?", + "localTrashConfirmFolder": "\"{{name}}\" ফোল্ডারটি এবং এর সমস্ত বিষয়বস্তু ট্র্যাশে সরান?", + "localTrashConfirmMany": "{{count}} টি আইটেম ট্র্যাশে সরাবেন?", + "localTrashed": "ট্র্যাশে {{count}} টি আইটেম সরানো হয়েছে", + "localTrashFailed": "ট্র্যাশে সরানো যায়নি", + "localRenameFailed": "নাম পরিবর্তন ব্যর্থ হয়েছে", + "localCreateFailed": "আইটেমটি তৈরি করা যায়নি", + "goToParentFolder": "প্যারেন্ট ফোল্ডারে যান", + "resizeSidebar": "সাইডবারের আকার পরিবর্তন করতে ড্র্যাগ করুন (রিসেট করতে ডাবল-ক্লিক করুন)", + "resizeLocalPane": "স্থানীয় প্যানেলের আকার পরিবর্তন করতে ড্র্যাগ করুন (রিসেট করতে ডাবল-ক্লিক করুন)", + "columns": "কলাম", + "columnsHint": "কলাম বাছাই করতে ডান-ক্লিক করুন", + "emptyFolder": "এই ফোল্ডারটি খালি", + "searchFiles": "ফাইলগুলি অনুসন্ধান করুন...", + "upload": "আপলোড", + "selectHostToStart": "ফাইল ব্যবস্থাপনা শুরু করতে একটি হোস্ট নির্বাচন করুন", + "sshRequiredForFileManager": "ফাইল ম্যানেজারের জন্য SSH প্রয়োজন। এই হোস্টে SSH সক্রিয় করা নেই।", + "failedToConnect": "SSH-এর সাথে সংযোগ করতে ব্যর্থ হয়েছে", + "failedToLoadDirectory": "ডিরেক্টরি লোড করতে ব্যর্থ হয়েছে", + "noSSHConnection": "কোন SSH সংযোগ উপলব্ধ নেই", + "copy": "অনুলিপি", + "cut": "কাটা", + "paste": "পেস্ট", + "copyPath": "কপি পাথ", + "copyPaths": "কপি পাথ", + "delete": "মুছে ফেলুন", + "properties": "বৈশিষ্ট্য", + "refresh": "রিফ্রেশ", + "downloadFiles": "ব্রাউজারে {{count}} ফাইলগুলো ডাউনলোড করুন", + "copyFiles": "{{count}} আইটেম কপি করুন", + "cutFiles": "{{count}} টি আইটেম কাটুন", + "deleteFiles": "{{count}} টি আইটেম মুছুন", + "filesCopiedToClipboard": "{{count}} আইটেম ক্লিপবোর্ডে কপি করা হয়েছে", + "filesCutToClipboard": "{{count}} আইটেমগুলো ক্লিপবোর্ডে কাটা হয়েছে", + "pathCopiedToClipboard": "পাথটি ক্লিপবোর্ডে কপি করা হয়েছে", + "pathsCopiedToClipboard": "{{count}} পাথগুলো ক্লিপবোর্ডে কপি করা হয়েছে", + "failedToCopyPath": "ক্লিপবোর্ডে পাথ কপি করতে ব্যর্থ হয়েছে", + "copyFolderLink": "ফোল্ডারে লিঙ্ক কপি করুন", + "copyCurrentFolderLink": "বর্তমান ফোল্ডারে লিঙ্ক কপি করুন", + "folderLinkCopied": "ফোল্ডারের লিঙ্ক ক্লিপবোর্ডে কপি করা হয়েছে", + "failedToCopyFolderLink": "ফোল্ডার লিঙ্ক কপি করতে ব্যর্থ হয়েছে", + "movedItems": "{{count}} টি আইটেম সরানো হয়েছে", + "failedToDeleteItem": "আইটেমটি মুছে ফেলতে ব্যর্থ হয়েছে", + "itemRenamedSuccessfully": "{{type}} সফলভাবে নাম পরিবর্তন করা হয়েছে", + "failedToRenameItem": "আইটেমের নাম পরিবর্তন করতে ব্যর্থ হয়েছে", + "download": "ডাউনলোড করুন", + "openExternalEditor": "বাইরে খুলুন", + "chooseExternalEditor": "বাহ্যিক সম্পাদক নির্বাচন করুন", + "externalEditorSelected": "বাহ্যিক সম্পাদক নির্বাচিত", + "externalEditorDesktopOnly": "এক্সটার্নাল এডিটর শুধুমাত্র ডেস্কটপ অ্যাপে উপলব্ধ।", + "externalEditorOpened": "বাহ্যিক এডিটরে খোলা হয়েছে। সেখানে সেভ করলে পরিবর্তনগুলো সার্ভারে আপলোড হয়ে যাবে।", + "failedToOpenExternalEditor": "বাহ্যিক সম্পাদক খুলতে ব্যর্থ হয়েছে", + "failedToSelectExternalEditor": "বাহ্যিক সম্পাদক নির্বাচন করতে ব্যর্থ হয়েছে", + "permissions": "অনুমতি", + "size": "আকার", + "modified": "পরিবর্তিত", + "path": "পথ", + "confirmDelete": "আপনি কি {{name}} মুছে ফেলতে নিশ্চিত?", + "permissionDenied": "অনুমতি প্রত্যাখ্যান করা হয়েছে", + "serverError": "সার্ভার ত্রুটি", + "fileSavedSuccessfully": "ফাইল সফলভাবে সংরক্ষিত হয়েছে।", + "failedToSaveFile": "ফাইল সংরক্ষণ করতে ব্যর্থ হয়েছে", + "confirmDeleteSingleItem": "আপনি কি \"{{name}} \" স্থায়ীভাবে মুছে ফেলতে চান?", + "confirmDeleteMultipleItems": "আপনি কি {{count}} টি আইটেম স্থায়ীভাবে মুছে ফেলতে চান?", + "confirmDeleteMultipleItemsWithFolders": "আপনি কি {{count}} টি আইটেম স্থায়ীভাবে মুছে ফেলতে নিশ্চিত? এর মধ্যে ফোল্ডার এবং তার ভেতরের সবকিছু অন্তর্ভুক্ত।", + "confirmDeleteFolder": "আপনি কি \"{{name}}\" ফোল্ডারটি এবং এর ভেতরের সবকিছু স্থায়ীভাবে মুছে ফেলতে চান?", + "permanentDeleteWarning": "এই কাজটি পূর্বাবস্থায় ফেরানো যাবে না। আইটেম(গুলি) সার্ভার থেকে স্থায়ীভাবে মুছে ফেলা হবে।", + "moveToTrashWarning": "আইটেমটি টারমিক্স ট্র্যাশে স্থানান্তরিত হবে এবং সংরক্ষণের সময়সীমা শেষ হওয়ার আগে তা পুনরুদ্ধার করা যাবে।", + "itemsMovedToTrash": "{{count}} আইটেম(গুলি) ট্র্যাশে সরানো হয়েছে", + "trash": "আবর্জনা", + "trashDescription": "এই হোস্টে মুছে ফেলা আইটেমগুলি {{days}} দিন পর্যন্ত সংরক্ষিত থাকে।", + "trashLoadFailed": "ট্র্যাশ লোড করতে ব্যর্থ হয়েছে", + "trashEmpty": "ময়লার ঝুড়ি খালি", + "trashRestore": "পুনরুদ্ধার করুন", + "trashRestored": "পুনরুদ্ধার করা হয়েছে {{name}}", + "trashRestoreFailed": "আইটেমটি পুনরুদ্ধার করা সম্ভব হয়নি। মূল পাথটি হয়তো ইতিমধ্যেই বিদ্যমান আছে।", + "trashDeletePermanently": "স্থায়ীভাবে মুছে ফেলুন", + "trashDeleteConfirm": "{{name}}স্থায়ীভাবে মুছে ফেলবেন? এটি আর পূর্বাবস্থায় ফেরানো যাবে না।", + "trashPermanentlyDeleted": "স্থায়ীভাবে মুছে ফেলা হয়েছে {{name}}", + "trashDeleteFailed": "আইটেমটি স্থায়ীভাবে মুছে ফেলতে ব্যর্থ হয়েছে", + "trashEmptyAction": "ময়লা খালি করুন", + "trashEmptyConfirm": "ট্র্যাশের প্রতিটি আইটেম স্থায়ীভাবে মুছে ফেলবেন? এটি আর পূর্বাবস্থায় ফেরানো যাবে না।", + "trashEmptied": "ময়লা খালি করা হয়েছে", + "trashRetention": "(দিন) পর স্বয়ংক্রিয়ভাবে পরিষ্কার করা হবে", + "trashRetentionSaved": "আবর্জনা সংরক্ষণের সময় আপডেট করা হয়েছে", + "trashRetentionFailed": "ট্র্যাশ রিটেনশন আপডেট করতে ব্যর্থ হয়েছে", + "trashUnavailableConfirm": "এই আইটেমটি ট্র্যাশে সরানো যাচ্ছে না, কারণ এটি সাধারণত অন্য ফাইলসিস্টেমে রয়েছে অথবা এর জন্য বিশেষ অনুমতির প্রয়োজন। এর পরিবর্তে এটি স্থায়ীভাবে মুছে ফেলবেন?", + "recent": "সাম্প্রতিক", + "pinned": "পিন করা", + "folderShortcuts": "ফোল্ডার শর্টকাট", + "failedToReconnectSSH": "SSH সেশন পুনরায় সংযোগ করতে ব্যর্থ হয়েছে", + "openTerminalHere": "এখানে টার্মিনাল খুলুন", + "run": "দৌড়", + "openTerminalInFolder": "এই ফোল্ডারে টার্মিনাল খুলুন", + "openTerminalInFileLocation": "ফাইল লোকেশনে টার্মিনাল খুলুন", + "runningFile": "দৌড়ানো - {{file}}", + "onlyRunExecutableFiles": "শুধুমাত্র এক্সিকিউটেবল ফাইল চালানো যাবে", + "directories": "ডিরেক্টরি", + "removedFromRecentFiles": "সাম্প্রতিক ফাইলগুলি থেকে \"{{name}}\" সরানো হয়েছে", + "removeFailed": "ব্যর্থ অপসারণ", + "unpinnedSuccessfully": "\"{{name}}\" সফলভাবে আনপিন করা হয়েছে", + "unpinFailed": "আনপিন ব্যর্থ হয়েছে", + "removedShortcut": "\"{{name}} \" শর্টকাটটি সরানো হয়েছে", + "removeShortcutFailed": "শর্টকাট অপসারণ ব্যর্থ হয়েছে", + "clearedAllRecentFiles": "সাম্প্রতিক সমস্ত ফাইল মুছে ফেলা হয়েছে", + "clearFailed": "পরিষ্কার করতে ব্যর্থ হয়েছে", + "removeFromRecentFiles": "সাম্প্রতিক ফাইলগুলি থেকে সরান", + "clearAllRecentFiles": "সাম্প্রতিক সমস্ত ফাইল মুছে ফেলুন", + "unpinFile": "ফাইলটি আনপিন করুন", + "removeShortcut": "শর্টকাট সরান", + "pinFile": "পিন ফাইল", + "addToShortcuts": "শর্টকাটে যোগ করুন", + "pasteFailed": "পেস্ট ব্যর্থ হয়েছে", + "noUndoableActions": "কোনো পূর্বাবস্থায় ফেরানো যায় না এমন কাজ নেই।", + "undoCopySuccess": "কপি অপারেশন বাতিল করা হয়েছে: {{count}} টি কপি করা ফাইল মুছে ফেলা হয়েছে", + "undoCopyFailedDelete": "পূর্বাবস্থায় ফেরানো ব্যর্থ হয়েছে: কপি করা কোনো ফাইল মুছে ফেলা সম্ভব হয়নি", + "undoCopyFailedNoInfo": "পূর্বাবস্থায় ফেরানো ব্যর্থ হয়েছে: কপি করা ফাইলের তথ্য খুঁজে পাওয়া যায়নি", + "undoMoveSuccess": "স্থানান্তর প্রক্রিয়া বাতিল করা হয়েছে: {{count}} টি ফাইল মূল অবস্থানে ফিরিয়ে আনা হয়েছে", + "undoMoveFailedMove": "পূর্বাবস্থায় ফেরানো ব্যর্থ হয়েছে: কোনো ফাইল আগের জায়গায় সরানো সম্ভব হয়নি", + "undoMoveFailedNoInfo": "পূর্বাবস্থায় ফেরানো ব্যর্থ হয়েছে: স্থানান্তরিত ফাইলের তথ্য খুঁজে পাওয়া যায়নি", + "undoDeleteNotSupported": "মুছে ফেলার প্রক্রিয়াটি পূর্বাবস্থায় ফেরানো যাবে না: ফাইলগুলো সার্ভার থেকে স্থায়ীভাবে মুছে ফেলা হয়েছে।", + "undoTypeNotSupported": "অসমর্থিত পূর্বাবস্থায় ফেরানোর অপারেশনের ধরণ", + "undoOperationFailed": "পূর্বাবস্থায় ফেরানো ব্যর্থ হয়েছে", + "unknownError": "অজানা ত্রুটি", + "confirm": "নিশ্চিত করুন", + "find": "খুঁজুন...", + "replace": "প্রতিস্থাপন করুন", + "downloadInstead": "পরিবর্তে ডাউনলোড করুন", + "keyboardShortcuts": "কীবোর্ড শর্টকাট", + "searchAndReplace": "অনুসন্ধান ও প্রতিস্থাপন", + "editing": "সম্পাদনা", + "search": "অনুসন্ধান", + "findNext": "পরবর্তী খুঁজুন", + "findPrevious": "পূর্ববর্তী খুঁজুন", + "save": "সংরক্ষণ করুন", + "selectAll": "সব নির্বাচন করুন", + "undo": "পূর্বাবস্থায় ফেরান", + "redo": "পুনরায় করুন", + "moveLineUp": "লাইন আপ সরান", + "moveLineDown": "লাইন নিচে সরান", + "toggleComment": "মন্তব্য টগল করুন", + "autoComplete": "স্বয়ংক্রিয়ভাবে সম্পূর্ণ", + "imageLoadError": "ছবি লোড করতে ব্যর্থ হয়েছে", + "startTyping": "টাইপ করা শুরু করুন...", + "unknownSize": "অজানা আকার", + "fileIsEmpty": "ফাইলটি খালি", + "largeFileWarning": "বড় ফাইলের সতর্কতা", + "largeFileWarningDesc": "এই ফাইলটির আকার {{size}} , যা টেক্সট হিসেবে খুললে পারফরম্যান্সের সমস্যা সৃষ্টি করতে পারে।", + "fileNotFoundAndRemoved": "\"{{name}}\" ফাইলটি খুঁজে পাওয়া যায়নি এবং সাম্প্রতিক/পিন করা ফাইলগুলো থেকে সরিয়ে ফেলা হয়েছে।", + "failedToLoadFile": "ফাইল লোড করতে ব্যর্থ: {{error}}", + "serverErrorOccurred": "সার্ভার ত্রুটি ঘটেছে। অনুগ্রহ করে পরে আবার চেষ্টা করুন।", + "autoSaveFailed": "স্বয়ংক্রিয় সংরক্ষণ ব্যর্থ হয়েছে", + "fileAutoSaved": "ফাইল স্বয়ংক্রিয়ভাবে সংরক্ষিত হয়েছে", + "moveFileFailed": "{{name}} সরাতে ব্যর্থ", + "moveOperationFailed": "স্থানান্তর প্রক্রিয়া ব্যর্থ হয়েছে", + "canOnlyCompareFiles": "শুধুমাত্র দুটি ফাইল তুলনা করা যাবে।", + "comparingFiles": "ফাইলগুলোর তুলনা: {{file1}} এবং {{file2}}", + "dragFailed": "ড্র্যাগ অপারেশন ব্যর্থ হয়েছে", + "filePinnedSuccessfully": "ফাইল \"{{name}}\" সফলভাবে পিন করা হয়েছে", + "pinFileFailed": "ফাইল পিন করতে ব্যর্থ হয়েছে", + "fileUnpinnedSuccessfully": "ফাইল \"{{name}}\" সফলভাবে আনপিন করা হয়েছে", + "unpinFileFailed": "ফাইল আনপিন করতে ব্যর্থ হয়েছে", + "shortcutAddedSuccessfully": "ফোল্ডার শর্টকাট \"{{name}}\" সফলভাবে যোগ করা হয়েছে", + "addShortcutFailed": "শর্টকাট যোগ করতে ব্যর্থ হয়েছে", + "operationCompletedSuccessfully": "{{operation}} {{count}} আইটেম সফলভাবে", + "operationCompleted": "{{operation}} {{count}} আইটেম", + "downloadFileSuccess": "ফাইল {{name}} সফলভাবে ডাউনলোড হয়েছে", + "downloadFileFailed": "ডাউনলোড ব্যর্থ হয়েছে", + "downloadingFile": "ডাউনলোড হচ্ছে {{name}}…", "downloadProgressBytes": "{{transferred}} / {{total}}", - "moveTo": "Move to {{name}}", - "diffCompareWith": "Diff compare with {{name}}", - "dragOutsideToDownload": "Drag outside window to download ({{count}} files)", - "newFolderDefault": "NewFolder", + "moveTo": "{{name}} এ যান", + "diffCompareWith": "{{name}} এর সাথে পার্থক্য তুলনা করুন", + "dragOutsideToDownload": "ডাউনলোড করতে উইন্ডোর বাইরে টেনে আনুন ({{count}} ফাইলগুলো)", + "newFolderDefault": "নতুন ফোল্ডার", "newFileDefault": "NewFile.txt", - "successfullyMovedItems": "Successfully moved {{count}} items to {{target}}", - "move": "Move", - "searchInFile": "Search in file (Ctrl+F)", - "showKeyboardShortcuts": "Show keyboard shortcuts", - "decreaseFontSize": "Decrease font size", - "increaseFontSize": "Increase font size", - "startWritingMarkdown": "Start writing your markdown content...", - "loadingFileComparison": "Loading file comparison...", - "reload": "Reload", - "compare": "Compare", - "sideBySide": "Side by Side", - "inline": "Inline", - "fileComparison": "File Comparison: {{file1}} vs {{file2}}", - "fileTooLarge": "File too large: {{error}}", - "sshConnectionFailed": "SSH connection failed. Please check your connection to {{name}} ({{ip}}:{{port}})", - "loadFileFailed": "Failed to load file: {{error}}", - "connecting": "Connecting...", - "connectedSuccessfully": "Connected successfully", - "totpVerificationFailed": "TOTP verification failed", - "browserSignInFailed": "Sign-in failed. Please try again.", - "authenticationFailed": "Authentication failed", - "incorrectPassphrase": "Incorrect passphrase. Please try again.", - "verificationCodePrompt": "Verification code:", - "changePermissions": "Change Permissions", - "currentPermissions": "Current Permissions", - "owner": "Owner", - "group": "Group", - "others": "Others", - "read": "Read", - "write": "Write", - "execute": "Execute", - "permissionsChangedSuccessfully": "Permissions changed successfully", - "failedToChangePermissions": "Failed to change permissions", - "name": "Name", - "sortByName": "Name", - "sortByDate": "Date Modified", - "sortBySize": "Size", - "ascending": "Ascending", - "descending": "Descending", - "root": "Root", - "new": "New", - "sortBy": "Sort By", - "items": "Items", - "selected": "Selected", - "editor": "Editor", - "octal": "Octal", - "storage": "Storage", - "disk": "Disk", - "used": "Used", - "of": "of", - "toggleSidebar": "Toggle Sidebar", - "compactLayout": "Use compact layout", - "comfortableLayout": "Use comfortable layout", - "cannotLoadPdf": "Cannot load PDF", - "pdfLoadError": "There was an error loading this PDF file.", - "loadingPdf": "Loading PDF...", - "loadingPage": "Loading page...", - "cancel": "Cancel", - "copiedItems_one": "Copied {{count}} item", - "copiedItems_other": "Copied {{count}} items", - "deleteCopiedFileFailed": "Could not delete the copy of {{name}}: {{error}}", - "dragMovedItems_one": "Moved {{count}} item to {{target}}", - "dragMovedItems_other": "Moved {{count}} items to {{target}}", - "moveBackFileFailed": "Could not move {{name}} back: {{error}}", - "terminal": "Terminal: {{host}} ({{path}})", - "dragToDesktop": "Dragging {{name}} to the desktop", - "dragFilesToDesktop": "Dragging {{count}} files to the desktop", - "folderDragUnsupported": "Dragging folders to the desktop is not supported yet", - "saveToDesktopFailed": "Save failed: {{error}}", - "dragFailedDetail": "Drag failed: {{error}}", - "videoUnsupported": "Your browser cannot play this video format.", - "downloadToPlay": "Download to play it elsewhere", - "cannotPreviewType": "Cannot preview this file type", - "cannotPreviewTypeHint": "This file type has no preview. Download it to open it in another app." + "successfullyMovedItems": "{{count}} টি আইটেম সফলভাবে {{target}} টি আইটেমে সরানো হয়েছে", + "move": "স্থানান্তর", + "searchInFile": "ফাইলে অনুসন্ধান করুন (Ctrl+F)", + "showKeyboardShortcuts": "কিবোর্ড শর্টকাট দেখান", + "decreaseFontSize": "ফন্টের আকার কমান", + "increaseFontSize": "ফন্টের আকার বাড়ান", + "startWritingMarkdown": "আপনার মার্কডাউন কন্টেন্ট লেখা শুরু করুন...", + "loadingFileComparison": "ফাইল তুলনা লোড হচ্ছে...", + "reload": "পুনরায় লোড করুন", + "compare": "তুলনা করুন", + "sideBySide": "পাশাপাশি", + "inline": "ইনলাইন", + "fileComparison": "ফাইল তুলনা: {{file1}} বনাম {{file2}}", + "fileTooLarge": "File is too large (> 10MB) and cannot be opened as text for security reasons.", + "sshConnectionFailed": "SSH সংযোগ ব্যর্থ হয়েছে। অনুগ্রহ করে {{name}} ({{ip}}:{{port}} ) -এ আপনার সংযোগ পরীক্ষা করুন।", + "loadFileFailed": "ফাইল লোড করতে ব্যর্থ: {{error}}", + "connecting": "সংযোগ স্থাপন...", + "connectedSuccessfully": "সফলভাবে সংযুক্ত হয়েছে", + "totpVerificationFailed": "TOTP যাচাইকরণ ব্যর্থ হয়েছে", + "browserSignInFailed": "সাইন-ইন ব্যর্থ হয়েছে। অনুগ্রহ করে আবার চেষ্টা করুন।", + "authenticationFailed": "প্রমাণীকরণ ব্যর্থ হয়েছে", + "incorrectPassphrase": "ভুল পাসফ্রেজ। অনুগ্রহ করে আবার চেষ্টা করুন।", + "verificationCodePrompt": "যাচাইকরণ কোড:", + "changePermissions": "অনুমতি পরিবর্তন করুন", + "currentPermissions": "বর্তমান অনুমতি", + "owner": "মালিক", + "group": "গ্রুপ", + "others": "অন্যান্য", + "read": "পড়ুন", + "write": "লিখুন", + "execute": "কার্যকর করুন", + "permissionsChangedSuccessfully": "অনুমতি সফলভাবে পরিবর্তন করা হয়েছে", + "failedToChangePermissions": "অনুমতি পরিবর্তন করতে ব্যর্থ হয়েছে", + "name": "নাম", + "sortByName": "নাম", + "sortByDate": "পরিবর্তিত তারিখ", + "sortBySize": "আকার", + "ascending": "আরোহী", + "descending": "অবতরণ", + "root": "মূল", + "new": "নতুন", + "sortBy": "অনুসারে সাজান", + "items": "আইটেম", + "selected": "নির্বাচিত", + "editor": "সম্পাদক", + "octal": "অক্টাল", + "storage": "স্টোরেজ", + "disk": "ডিস্ক", + "used": "ব্যবহৃত", + "of": "এর", + "toggleSidebar": "সাইডবার টগল করুন", + "compactLayout": "সংক্ষিপ্ত বিন্যাস ব্যবহার করুন", + "comfortableLayout": "আরামদায়ক বিন্যাস ব্যবহার করুন", + "cannotLoadPdf": "পিডিএফ লোড করা যাচ্ছে না", + "pdfLoadError": "এই পিডিএফ ফাইলটি লোড করতে ত্রুটি হয়েছে।", + "loadingPdf": "Loading PDF viewer...", + "loadingPage": "পৃষ্ঠা লোড হচ্ছে...", + "cancel": "বাতিল করুন", + "copiedItems_one": "{{count}} আইটেমটি অনুলিপি করা হয়েছে", + "copiedItems_other": "{{count}} টি আইটেম কপি করা হয়েছে", + "deleteCopiedFileFailed": "{{name}}এর অনুলিপিটি মুছে ফেলা যায়নি: {{error}}", + "dragMovedItems_one": "{{count}} আইটেমটিকে {{target}} এ সরানো হয়েছে", + "dragMovedItems_other": "{{count}} টি আইটেম {{target}} টি আইটেমে সরানো হয়েছে", + "moveBackFileFailed": "{{name}} কে পিছনে সরানো সম্ভব নয়: {{error}}", + "terminal": "টার্মিনাল: {{host}} ({{path}})", + "dragToDesktop": "{{name}} কে ডেস্কটপে টেনে নিয়ে যাওয়া", + "dragFilesToDesktop": "{{count}} ফাইলগুলো ডেস্কটপে টেনে আনা", + "folderDragUnsupported": "ডেস্কটপে ফোল্ডার টেনে নিয়ে যাওয়ার সুবিধাটি এখনও সমর্থিত নয়।", + "saveToDesktopFailed": "সংরক্ষণ ব্যর্থ: {{error}}", + "dragFailedDetail": "টেনে আনা ব্যর্থ: {{error}}", + "videoUnsupported": "আপনার ব্রাউজার এই ভিডিও ফরম্যাটটি চালাতে পারছে না।", + "downloadToPlay": "অন্যত্র চালানোর জন্য ডাউনলোড করুন", + "cannotPreviewType": "এই ফাইল প্রকারের প্রিভিউ দেখা সম্ভব নয়", + "cannotPreviewTypeHint": "এই ফাইল টাইপের কোনো প্রিভিউ নেই। অন্য কোনো অ্যাপে খোলার জন্য এটি ডাউনলোড করুন।", + "loadingFile": "Loading file...", + "loadingImage": "Loading image...", + "loadingEditor": "Loading editor...", + "loadingPreview": "Loading preview...", + "loadingAudio": "Loading audio player...", + "emptyPreview": "Nothing to preview yet...", + "revert": "Revert", + "openAsText": "Open as Text", + "confirmOpenAsText": "Do you want to continue opening this file as text? This may slow down your browser." }, "sftpTransfer": { - "title": "SFTP", - "description": "Transfer files between two SSH hosts.", - "sourceServer": "Source Server", - "destinationServer": "Destination Server", - "selectHost": "Select host", - "noHostSelected": "No host selected", - "move": "Move", - "copy": "Copy", - "upload": "Upload", - "itemsSelected": "{{count}} item selected", - "itemsSelected_other": "{{count}} items selected", - "ready": "Ready", - "loadingHosts": "Loading hosts...", - "name": "Name", - "modified": "Modified", - "size": "Size", - "noFiles": "No files", - "open": "Open", - "up": "Up", - "refresh": "Refresh", - "copyToTarget": "Copy to Target Directory", - "rename": "Rename", - "delete": "Delete", - "editPermissions": "Edit Permissions", - "createNewFolder": "Create New Folder", - "deleteSelectedItems": "Delete Selected Items", - "deleteConfirm": "Delete {{count}} selected item?", - "deleteConfirm_other": "Delete {{count}} selected items?", - "cancel": "Cancel", - "save": "Save", - "folderCreated": "Folder created", - "itemRenamed": "Item renamed", - "actionFailed": "Action failed", - "itemsDeleted": "{{count}} item deleted", - "itemsDeleted_other": "{{count}} items deleted", - "deleteFailed": "Delete failed", - "permissionsUpdated": "Permissions updated", - "noRemoteSessionConnected": "No remote session connected", - "failedToListFiles": "Failed to list files", - "failedToRefresh": "Failed to refresh", - "destinationInsideSource": "Destination cannot be inside the selected source path.", - "sameHostNoOp": "Source and destination are the same folder." + "title": "এসএফটিপি", + "description": "দুটি SSH হোস্টের মধ্যে ফাইল স্থানান্তর করুন।", + "sourceServer": "উৎস সার্ভার", + "destinationServer": "গন্তব্য সার্ভার", + "selectHost": "হোস্ট নির্বাচন করুন", + "noHostSelected": "কোন হোস্ট নির্বাচন করা হয়নি", + "move": "স্থানান্তর", + "copy": "অনুলিপি", + "upload": "আপলোড", + "itemsSelected": "{{count}} আইটেম নির্বাচিত", + "itemsSelected_other": "{{count}} নির্বাচিত আইটেম", + "ready": "প্রস্তুত", + "loadingHosts": "হোস্ট লোড হচ্ছে...", + "name": "নাম", + "modified": "পরিবর্তিত", + "size": "আকার", + "noFiles": "কোন ফাইল নেই", + "open": "খোলা", + "up": "উপরে", + "refresh": "রিফ্রেশ", + "copyToTarget": "লক্ষ্য ডিরেক্টরিতে অনুলিপি করুন", + "rename": "নাম পরিবর্তন", + "delete": "মুছে ফেলুন", + "editPermissions": "সম্পাদনার অনুমতি", + "createNewFolder": "নতুন ফোল্ডার তৈরি করুন", + "deleteSelectedItems": "নির্বাচিত আইটেমগুলি মুছুন", + "deleteConfirm": "{{count}} নির্বাচিত আইটেমটি মুছবেন?", + "deleteConfirm_other": "{{count}} নির্বাচিত আইটেমগুলি মুছবেন?", + "cancel": "বাতিল করুন", + "save": "সংরক্ষণ করুন", + "folderCreated": "ফোল্ডার তৈরি করা হয়েছে", + "itemRenamed": "আইটেমের নাম পরিবর্তন করা হয়েছে", + "actionFailed": "পদক্ষেপ ব্যর্থ হয়েছে", + "itemsDeleted": "{{count}} আইটেমটি মুছে ফেলা হয়েছে", + "itemsDeleted_other": "{{count}} আইটেম মুছে ফেলা হয়েছে", + "deleteFailed": "মুছে ফেলা ব্যর্থ হয়েছে", + "permissionsUpdated": "অনুমতি আপডেট করা হয়েছে", + "noRemoteSessionConnected": "কোন রিমোট সেশন সংযুক্ত নেই", + "failedToListFiles": "ফাইলগুলি তালিকাভুক্ত করতে ব্যর্থ হয়েছে", + "failedToRefresh": "রিফ্রেশ করতে ব্যর্থ হয়েছে", + "destinationInsideSource": "গন্তব্য নির্বাচিত উৎস পথের মধ্যে থাকতে পারবে না।", + "sameHostNoOp": "উৎস এবং গন্তব্য একই ফোল্ডার।" }, "hosts": { - "fileManager": "File Manager", - "fileManagerUrlCopied": "File Manager URL copied", - "copyFileManagerUrlAction": "Copy File Manager URL", - "docsLink": "View docs", - "hostNotFound": "Host not found", - "loadingHost": "Loading host..." + "fileManager": "ফাইল ম্যানেজার", + "fileManagerUrlCopied": "ফাইল ম্যানেজার ইউআরএল কপি করা হয়েছে", + "copyFileManagerUrlAction": "ফাইল ম্যানেজার ইউআরএল কপি করুন", + "docsLink": "নথি দেখুন", + "hostNotFound": "হোস্ট খুঁজে পাওয়া যায়নি", + "loadingHost": "হোস্ট লোড হচ্ছে..." }, "onboarding": { - "feature_files": "File manager", - "feature_files_desc": "Browse, upload, download and edit files over SFTP without leaving the app." + "feature_files": "ফাইল ম্যানেজার", + "feature_files_desc": "অ্যাপ থেকে বের না হয়েই SFTP-এর মাধ্যমে ফাইল ব্রাউজ, আপলোড, ডাউনলোড এবং সম্পাদনা করুন।" }, "terminal": { - "runTitle": "Running {{command}} - {{host}}", - "terminalTitle": "Terminal - {{host}}", - "terminalWithPath": "Terminal - {{host}}:{{path}}" + "runTitle": "দৌড়ানো {{command}} - {{host}}", + "terminalTitle": "টার্মিনাল - {{host}}", + "terminalWithPath": "টার্মিনাল - {{host}}:{{path}}" }, "transfer": { - "browseFolders": "Browse destination folders", - "browsePathError": "Could not open this path on the destination host.", - "browsePathWillBeCreated": "This folder does not exist yet. It will be created when the transfer starts.", - "cancel": "Cancel", - "cleanupDestFiles": "Clean up destination", - "cleanupDestFilesError": "Cleanup failed", - "cleanupDestFilesNothing": "Nothing to clean up on the destination", - "cleanupDestFilesPartial": "Some partial files could not be removed", - "cleanupDestFilesSuccess": "Removed partial files from the destination", - "confirmCopy": "Copy", - "confirmMove": "Move", - "copyFolderToHost": "Copy folder to host…", - "copyItemsToHost": "Copy {{count}} items to host…", - "copyToHost": "Copy to host…", - "destinationPath": "Destination path", - "destMustBeDirectory": "Destination must be a directory for multi-item transfers", - "goUp": "Go up", - "hostAuthRequired": "Authentication required. Open File Manager on this host first", - "hostConnecting": "Connecting…", - "hostConnectionFailed": "Connection failed", - "hostDisconnected": "Not connected", - "hostReady": "Ready", - "itemsSummary": "{{count}} items", - "jumpHostLimitation": "Both hosts must be reachable from the Termix server. Direct host-to-host routing is not supported.", - "methodAuto": "Auto", - "methodAutoHint": "Picks tar or per-file SFTP based on file count, size, and compressibility. Single files always use streaming SFTP.", - "methodItemSftp": "Per-file SFTP", - "methodItemSftpHint": "Transfer each file individually over SFTP. Works on all hosts including Windows.", - "methodItemSftpLimitation": "Each file uses the same SFTP stream as a single-file copy, one after another. Progress is combined across all files, so the bar moves slowly during large files.", - "methodLabel": "Transfer method", - "methodPreviewError": "Could not preview transfer method. The server will still pick a method when you start.", - "methodPreviewLoading": "Calculating transfer method…", - "methodPreviewScanSummary": "{{fileCount}} files, {{totalSize}} total (scanned on source host).", - "methodPreviewWillUseItemSftp": "Will use: Per-file SFTP", - "methodPreviewWillUseTar": "Will use: Tar archive", + "browseFolders": "গন্তব্য ফোল্ডারগুলি ব্রাউজ করুন", + "browsePathError": "গন্তব্য হোস্টে এই পাথটি খোলা সম্ভব হয়নি।", + "browsePathWillBeCreated": "এই ফোল্ডারটি এখনও তৈরি হয়নি। স্থানান্তর শুরু হলে এটি তৈরি হয়ে যাবে।", + "cancel": "বাতিল করুন", + "cleanupDestFiles": "পরিষ্কার করার গন্তব্য", + "cleanupDestFilesError": "পরিষ্কার করা ব্যর্থ হয়েছে", + "cleanupDestFilesNothing": "গন্তব্যে পরিষ্কার করার কিছু নেই।", + "cleanupDestFilesPartial": "কিছু আংশিক ফাইল সরানো যায়নি", + "cleanupDestFilesSuccess": "গন্তব্য থেকে আংশিক ফাইল সরানো হয়েছে", + "confirmCopy": "অনুলিপি", + "confirmMove": "স্থানান্তর", + "copyFolderToHost": "ফোল্ডারটি হোস্টে কপি করুন…", + "copyItemsToHost": "{{count}} টি আইটেম হোস্টে কপি করুন…", + "copyToHost": "হোস্টে কপি করুন…", + "destinationPath": "গন্তব্য পথ", + "destMustBeDirectory": "একাধিক আইটেম স্থানান্তরের জন্য গন্তব্য অবশ্যই একটি ডিরেক্টরি হতে হবে।", + "goUp": "উপরে যান", + "hostAuthRequired": "প্রমাণীকরণ আবশ্যক। প্রথমে এই হোস্টে ফাইল ম্যানেজার খুলুন।", + "hostConnecting": "… সংযোগ করা হচ্ছে", + "hostConnectionFailed": "সংযোগ ব্যর্থ হয়েছে", + "hostDisconnected": "সংযুক্ত নয়", + "hostReady": "প্রস্তুত", + "itemsSummary": "{{count}} আইটেম", + "jumpHostLimitation": "উভয় হোস্টকেই টারমিক্স সার্ভার থেকে পৌঁছানো সম্ভব হতে হবে। সরাসরি হোস্ট-টু-হোস্ট রাউটিং সমর্থিত নয়।", + "methodAuto": "অটো", + "methodAutoHint": "ফাইলের সংখ্যা, আকার এবং সংকোচনযোগ্যতার উপর ভিত্তি করে tar অথবা ফাইল-ভিত্তিক SFTP নির্বাচন করে। একক ফাইলের ক্ষেত্রে সর্বদা স্ট্রিমিং SFTP ব্যবহৃত হয়।", + "methodItemSftp": "প্রতি-ফাইল এসএফটিপি", + "methodItemSftpHint": "SFTP-এর মাধ্যমে প্রতিটি ফাইল আলাদাভাবে স্থানান্তর করুন। উইন্ডোজ সহ সকল হোস্টে কাজ করে।", + "methodItemSftpLimitation": "প্রতিটি ফাইল একই SFTP স্ট্রিম ব্যবহার করে একটির পর একটি একক-ফাইল কপি হিসেবে তৈরি হয়। সমস্ত ফাইলের অগ্রগতি একত্রিত করা হয়, তাই বড় ফাইলের ক্ষেত্রে বারটি ধীরে চলে।", + "methodLabel": "স্থানান্তর পদ্ধতি", + "methodPreviewError": "স্থানান্তর পদ্ধতির প্রিভিউ দেখা সম্ভব হয়নি। আপনি চালু করার সময় সার্ভার নিজেই একটি পদ্ধতি বেছে নেবে।", + "methodPreviewLoading": "স্থানান্তর পদ্ধতি গণনা করা হচ্ছে…", + "methodPreviewScanSummary": "{{fileCount}} টি ফাইল, {{totalSize}} টি মোট (উৎস হোস্টে স্ক্যান করা হয়েছে)।", + "methodPreviewWillUseItemSftp": "ব্যবহার করা হবে: প্রতি-ফাইল এসএফটিপি", + "methodPreviewWillUseTar": "ব্যবহৃত হবে: টার আর্কাইভ", "methodReason": { - "user_item_sftp": "You chose per-file SFTP.", - "user_tar": "You chose tar archive.", - "tar_unavailable": "Tar is not available on one or both hosts, so per-file SFTP will be used instead.", - "windows_host": "A Windows host is involved, so tar is not used.", - "auto_multi_large": "Auto: multiple files including a large file ({{largestSize}}) with compressible data. Tar bundles them into one transfer.", - "auto_single_large_in_archive": "Auto: one large file ({{largestSize}}) in this set, so per-file SFTP.", - "auto_many_incompressible": "Auto: mostly incompressible data, so per-file SFTP.", - "auto_many_files": "Auto: many files ({{fileCount}}), tar cuts the per-file overhead.", - "auto_default": "Auto: per-file SFTP for this set." + "user_item_sftp": "আপনি ফাইল-ভিত্তিক এসএফটিপি বেছে নিয়েছেন।", + "user_tar": "আপনি tar আর্কাইভটি বেছে নিয়েছেন।", + "tar_unavailable": "এক বা উভয় হোস্টে Tar উপলব্ধ না থাকায়, এর পরিবর্তে ফাইল-ভিত্তিক SFTP ব্যবহার করা হবে।", + "windows_host": "যেহেতু একটি উইন্ডোজ হোস্ট জড়িত, তাই tar ব্যবহার করা হয় না।", + "auto_multi_large": "স্বয়ংক্রিয়: সংকোচনযোগ্য ডেটা সহ একটি বড় ফাইল ({{largestSize}}) সহ একাধিক ফাইল। Tar সেগুলোকে একটি একক স্থানান্তরে একত্রিত করে।", + "auto_single_large_in_archive": "স্বয়ংক্রিয়: এই সেটে একটি বড় ফাইল ({{largestSize}}) আছে, তাই ফাইল-ভিত্তিক SFTP।", + "auto_many_incompressible": "অটো: বেশিরভাগ ডেটা অসংকোচনযোগ্য, তাই প্রতি-ফাইল এসএফটিপি।", + "auto_many_files": "স্বয়ংক্রিয়: একাধিক ফাইলের ক্ষেত্রে ({{fileCount}}), tar পদ্ধতি ব্যবহার করলে প্রতি ফাইলের অতিরিক্ত খরচ কমে যায়।", + "auto_default": "স্বয়ংক্রিয়: এই সেটের জন্য প্রতি-ফাইল এসএফটিপি।" }, - "methodTar": "Tar archive", - "methodTarHint": "Compress on source, transfer one archive, extract on destination. Requires tar on both Unix hosts.", - "metricsCompress": "Compress on source: {{duration}}", - "metricsExtract": "Extract on destination: {{duration}}", - "metricsPrepare": "Prepare destination: {{duration}}", - "metricsRouteBenchmark": "Route probe: direct {{direct}}, relay {{relay}}", - "metricsSourceDelete": "Remove from source: {{duration}}", - "metricsTotal": "Total: {{duration}}", - "metricsTransfer": "End-to-end: {{throughput}} ({{duration}})", - "metricsVerify": "SHA-256 verified: {{duration}}", - "moveFolderToHost": "Move folder to host…", - "moveItemsToHost": "Move {{count}} items to host…", - "moveToHost": "Move to host…", - "noHostsConnected": "No other file-manager hosts available.", - "noHostsConnectedHint": "Add another SSH host with File Manager enabled in Host Manager.", - "parallelSegmentsHint": "Large files are split into 256 MB chunks. Multiple lanes use separate connections (like starting several transfers) for higher total throughput.", - "parallelSegmentsLabel": "Parallel transfer lanes", - "parallelSegmentsOption": "{{count}} lanes", - "progressBenchmarking": "Selecting the fastest transfer route…", + "methodTar": "টার আর্কাইভ", + "methodTarHint": "উৎসস্থলে কম্প্রেস করুন, একটি আর্কাইভ স্থানান্তর করুন, এবং গন্তব্যে এক্সট্র্যাক্ট করুন। উভয় ইউনিক্স হোস্টে tar প্রয়োজন।", + "metricsCompress": "উৎস থেকে সংকুচিত করুন: {{duration}}", + "metricsExtract": "গন্তব্যে নিষ্কাশন: {{duration}}", + "metricsPrepare": "গন্তব্য প্রস্তুত করুন: {{duration}}", + "metricsRouteBenchmark": "রুট প্রোব: সরাসরি {{direct}}, রিলে {{relay}}", + "metricsSourceDelete": "উৎস থেকে সরান: {{duration}}", + "metricsTotal": "মোট: {{duration}}", + "metricsTransfer": "প্রান্ত থেকে প্রান্ত: {{throughput}} ({{duration}})", + "metricsVerify": "SHA-256 দ্বারা যাচাইকৃত: {{duration}}", + "moveFolderToHost": "ফোল্ডারটি হোস্টে সরান…", + "moveItemsToHost": "{{count}} টি আইটেম… টি হোস্টে সরান", + "moveToHost": "হোস্টে যান…", + "noHostsConnected": "অন্য কোনো ফাইল-ম্যানেজার হোস্ট উপলব্ধ নেই।", + "noHostsConnectedHint": "হোস্ট ম্যানেজারে ফাইল ম্যানেজার সক্রিয় করা আছে এমন আরেকটি SSH হোস্ট যোগ করুন।", + "parallelSegmentsHint": "বড় ফাইলগুলোকে ২৫৬ মেগাবাইটের খণ্ডে ভাগ করা হয়। মোট থ্রুপুট বাড়ানোর জন্য একাধিক লেন আলাদা সংযোগ ব্যবহার করে (যেমন কয়েকটি ট্রান্সফার শুরু করা)।", + "parallelSegmentsLabel": "সমান্তরাল স্থানান্তর লেন", + "parallelSegmentsOption": "{{count}} লেন", + "progressBenchmarking": "দ্রুততম স্থানান্তর পথ নির্বাচন করা হচ্ছে…", "progressBytes": "{{transferred}} / {{total}}", - "progressCancel": "Cancel", - "progressCancelling": "Cancelling…", - "progressCompressing": "Compressing on source host…", - "progressExtracting": "Extracting on destination…", - "progressItems": "{{current}} / {{total}} files", - "progressReconnecting": "Reconnecting…", - "progressStalled": "Stalled", - "progressTotalSpeed": "{{speed}} total ({{lanes}} lanes)", - "progressTransferring": "Transferring data…", - "progressTransferringItems": "Transferring files ({{current}} of {{total}})…", - "progressVerifying": "Verifying file integrity…", - "recentDestinations": "Recent destinations", - "resumedHint": "Reconnected to an active transfer started in another window.", - "retryTransfer": "Retry", - "retryTransferError": "Retry failed", - "selectDestinationHost": "Select destination host", - "transferCancelled": "Transfer cancelled", - "transferCancelledCopyHint": "Partial files may remain on the destination.", - "transferCancelledMoveHint": "Partial files may remain on the destination. Source files were not removed.", - "transferError": "Transfer failed", - "transferFailedRetryHint": "Partial data was kept on the destination. Retry will resume when the connection is back.", - "transferPartialHint": "Could not transfer: {{paths}}", - "transferSuccess": "Transfer complete", - "metricsHopSourceRead": "Source → server: {{throughput}}", - "metricsHopDestSftpWrite": "Server → dest (SFTP): {{throughput}}", - "metricsHopDestLocalWrite": "Server → dest (local): {{throughput}}" + "progressCancel": "বাতিল করুন", + "progressCancelling": "বাতিল করা হচ্ছে…", + "progressCompressing": "উৎস হোস্টে সংকুচিত করা হচ্ছে…", + "progressExtracting": "গন্তব্য… থেকে নিষ্কাশন করা হচ্ছে", + "progressItems": "{{current}} / {{total}} ফাইল", + "progressReconnecting": "পুনরায় সংযোগ স্থাপন…", + "progressStalled": "স্থবির", + "progressTotalSpeed": "{{speed}} মোট ({{lanes}} লেন)", + "progressTransferring": "ডেটা স্থানান্তর করা হচ্ছে…", + "progressTransferringItems": "ফাইল স্থানান্তর করা হচ্ছে ({{current}} {{total}})…", + "progressVerifying": "ফাইলের অখণ্ডতা যাচাই করা হচ্ছে…", + "recentDestinations": "সাম্প্রতিক গন্তব্যস্থল", + "resumedHint": "অন্য একটি উইন্ডোতে শুরু হওয়া একটি সক্রিয় ট্রান্সফারের সাথে পুনরায় সংযুক্ত হওয়া গেছে।", + "retryTransfer": "পুনরায় চেষ্টা করুন", + "retryTransferError": "পুনরায় চেষ্টা ব্যর্থ হয়েছে", + "selectDestinationHost": "গন্তব্য হোস্ট নির্বাচন করুন", + "transferCancelled": "স্থানান্তর বাতিল করা হয়েছে", + "transferCancelledCopyHint": "গন্তব্যে আংশিক ফাইল থেকে যেতে পারে।", + "transferCancelledMoveHint": "গন্তব্যে আংশিক ফাইল থেকে যেতে পারে। মূল ফাইলগুলো সরানো হয়নি।", + "transferError": "স্থানান্তর ব্যর্থ হয়েছে", + "transferFailedRetryHint": "গন্তব্যে আংশিক ডেটা সংরক্ষিত হয়েছে। সংযোগ ফিরে এলে পুনরায় চেষ্টা শুরু হবে।", + "transferPartialHint": "স্থানান্তর করা যায়নি: {{paths}}", + "transferSuccess": "স্থানান্তর সম্পন্ন হয়েছে", + "metricsHopSourceRead": "উৎস → সার্ভার: {{throughput}}", + "metricsHopDestSftpWrite": "সার্ভার → গন্তব্য (SFTP): {{throughput}}", + "metricsHopDestLocalWrite": "সার্ভার → গন্তব্য (স্থানীয়): {{throughput}}" + }, + "plugin": { + "name": "File Manager" } } diff --git a/plugins/file-manager/locales/translated/ca_ES.json b/plugins/file-manager/locales/translated/ca_ES.json index 0f6c88420..804500c74 100644 --- a/plugins/file-manager/locales/translated/ca_ES.json +++ b/plugins/file-manager/locales/translated/ca_ES.json @@ -323,7 +323,7 @@ "sideBySide": "Costat al costat", "inline": "En línia", "fileComparison": "Comparació de fitxers: {{file1}} vs {{file2}}", - "fileTooLarge": "Fitxer massa gran: {{error}}", + "fileTooLarge": "File is too large (> 10MB) and cannot be opened as text for security reasons.", "sshConnectionFailed": "La connexió SSH ha fallat. Si us plau, comproveu la connexió a {{name}} ({{ip}}:{{port}})", "loadFileFailed": "No s'ha pogut carregar el fitxer: {{error}}", "connecting": "Connectant...", @@ -365,7 +365,7 @@ "comfortableLayout": "Utilitza un disseny còmode", "cannotLoadPdf": "No es pot carregar el PDF", "pdfLoadError": "S'ha produït un error en carregar aquest fitxer PDF.", - "loadingPdf": "S'està carregant el PDF...", + "loadingPdf": "Loading PDF viewer...", "loadingPage": "S'està carregant la pàgina...", "cancel": "Cancel·la", "copiedItems_one": "S'ha copiat l'element {{count}}", @@ -383,7 +383,16 @@ "videoUnsupported": "El vostre navegador no pot reproduir aquest format de vídeo.", "downloadToPlay": "Descarrega-ho per reproduir-ho en un altre lloc", "cannotPreviewType": "No es pot previsualitzar aquest tipus de fitxer", - "cannotPreviewTypeHint": "Aquest tipus de fitxer no té vista prèvia. Baixeu-lo per obrir-lo en una altra aplicació." + "cannotPreviewTypeHint": "Aquest tipus de fitxer no té vista prèvia. Baixeu-lo per obrir-lo en una altra aplicació.", + "loadingFile": "Loading file...", + "loadingImage": "Loading image...", + "loadingEditor": "Loading editor...", + "loadingPreview": "Loading preview...", + "loadingAudio": "Loading audio player...", + "emptyPreview": "Nothing to preview yet...", + "revert": "Revert", + "openAsText": "Open as Text", + "confirmOpenAsText": "Do you want to continue opening this file as text? This may slow down your browser." }, "sftpTransfer": { "title": "SFTP", @@ -539,5 +548,8 @@ "metricsHopSourceRead": "Font → servidor: {{throughput}}", "metricsHopDestSftpWrite": "Servidor → destí (SFTP): {{throughput}}", "metricsHopDestLocalWrite": "Servidor → destí (local): {{throughput}}" + }, + "plugin": { + "name": "File Manager" } } diff --git a/plugins/file-manager/locales/translated/cs_CZ.json b/plugins/file-manager/locales/translated/cs_CZ.json index 4f85a43b4..d50baf218 100644 --- a/plugins/file-manager/locales/translated/cs_CZ.json +++ b/plugins/file-manager/locales/translated/cs_CZ.json @@ -323,7 +323,7 @@ "sideBySide": "Bok po boku", "inline": "Vložený", "fileComparison": "Porovnání souborů: {{file1}} vs. {{file2}}", - "fileTooLarge": "Soubor je příliš velký: {{error}}", + "fileTooLarge": "File is too large (> 10MB) and cannot be opened as text for security reasons.", "sshConnectionFailed": "SSH připojení selhalo. Zkontrolujte prosím připojení k {{name}} ({{ip}}:{{port}})", "loadFileFailed": "Nepodařilo se načíst soubor: {{error}}", "connecting": "Spojovací...", @@ -365,7 +365,7 @@ "comfortableLayout": "Použijte pohodlné rozvržení", "cannotLoadPdf": "Nelze načíst PDF", "pdfLoadError": "Při načítání tohoto PDF souboru došlo k chybě.", - "loadingPdf": "Načítání PDF...", + "loadingPdf": "Loading PDF viewer...", "loadingPage": "Načítání stránky...", "cancel": "Zrušit", "copiedItems_one": "Zkopírována položka {{count}}", @@ -383,7 +383,16 @@ "videoUnsupported": "Váš prohlížeč tento formát videa nepřehrává.", "downloadToPlay": "Stáhněte si pro přehrávání jinde", "cannotPreviewType": "Nelze zobrazit náhled tohoto typu souboru", - "cannotPreviewTypeHint": "Tento typ souboru nemá náhled. Stáhněte si jej a otevřete jej v jiné aplikaci." + "cannotPreviewTypeHint": "Tento typ souboru nemá náhled. Stáhněte si jej a otevřete jej v jiné aplikaci.", + "loadingFile": "Loading file...", + "loadingImage": "Loading image...", + "loadingEditor": "Loading editor...", + "loadingPreview": "Loading preview...", + "loadingAudio": "Loading audio player...", + "emptyPreview": "Nothing to preview yet...", + "revert": "Revert", + "openAsText": "Open as Text", + "confirmOpenAsText": "Do you want to continue opening this file as text? This may slow down your browser." }, "sftpTransfer": { "title": "SFTP", @@ -539,5 +548,8 @@ "metricsHopSourceRead": "Zdroj → server: {{throughput}}", "metricsHopDestSftpWrite": "Server → cíl (SFTP): {{throughput}}", "metricsHopDestLocalWrite": "Server → cíl (lokální): {{throughput}}" + }, + "plugin": { + "name": "File Manager" } } diff --git a/plugins/file-manager/locales/translated/da_DK.json b/plugins/file-manager/locales/translated/da_DK.json index 2f6568c7f..40f7f2f10 100644 --- a/plugins/file-manager/locales/translated/da_DK.json +++ b/plugins/file-manager/locales/translated/da_DK.json @@ -323,7 +323,7 @@ "sideBySide": "Side om side", "inline": "Indlejret", "fileComparison": "Filsammenligning: {{file1}} vs. {{file2}}", - "fileTooLarge": "Filen er for stor: {{error}}", + "fileTooLarge": "File is too large (> 10MB) and cannot be opened as text for security reasons.", "sshConnectionFailed": "SSH-forbindelse mislykkedes. Kontroller venligst din forbindelse til {{name}} ({{ip}}:{{port}})", "loadFileFailed": "Kunne ikke indlæse filen: {{error}}", "connecting": "Forbinder...", @@ -365,7 +365,7 @@ "comfortableLayout": "Brug et komfortabelt layout", "cannotLoadPdf": "Kan ikke indlæse PDF'en", "pdfLoadError": "Der opstod en fejl under indlæsning af denne PDF-fil.", - "loadingPdf": "Indlæser PDF...", + "loadingPdf": "Loading PDF viewer...", "loadingPage": "Indlæser side...", "cancel": "Ophæve", "copiedItems_one": "Kopieret {{count}} element", @@ -383,7 +383,16 @@ "videoUnsupported": "Din browser kan ikke afspille dette videoformat.", "downloadToPlay": "Download for at afspille det et andet sted", "cannotPreviewType": "Kan ikke forhåndsvise denne filtype", - "cannotPreviewTypeHint": "Denne filtype har ingen forhåndsvisning. Download den for at åbne den i en anden app." + "cannotPreviewTypeHint": "Denne filtype har ingen forhåndsvisning. Download den for at åbne den i en anden app.", + "loadingFile": "Loading file...", + "loadingImage": "Loading image...", + "loadingEditor": "Loading editor...", + "loadingPreview": "Loading preview...", + "loadingAudio": "Loading audio player...", + "emptyPreview": "Nothing to preview yet...", + "revert": "Revert", + "openAsText": "Open as Text", + "confirmOpenAsText": "Do you want to continue opening this file as text? This may slow down your browser." }, "sftpTransfer": { "title": "SFTP", @@ -539,5 +548,8 @@ "metricsHopSourceRead": "Kilde → server: {{throughput}}", "metricsHopDestSftpWrite": "Server → destination (SFTP): {{throughput}}", "metricsHopDestLocalWrite": "Server → destination (lokal): {{throughput}}" + }, + "plugin": { + "name": "File Manager" } } diff --git a/plugins/file-manager/locales/translated/de_DE.json b/plugins/file-manager/locales/translated/de_DE.json index 6f60ad6fe..c86bb96c4 100644 --- a/plugins/file-manager/locales/translated/de_DE.json +++ b/plugins/file-manager/locales/translated/de_DE.json @@ -323,7 +323,7 @@ "sideBySide": "Nebeneinander", "inline": "Inline", "fileComparison": "Dateivergleich: {{file1}} vs. {{file2}}", - "fileTooLarge": "Datei zu groß: {{error}}", + "fileTooLarge": "File is too large (> 10MB) and cannot be opened as text for security reasons.", "sshConnectionFailed": "SSH-Verbindung fehlgeschlagen. Bitte überprüfen Sie Ihre Verbindung zu {{name}} ({{ip}}:{{port}})", "loadFileFailed": "Fehler beim Laden der Datei: {{error}}", "connecting": "Verbindung wird hergestellt...", @@ -365,7 +365,7 @@ "comfortableLayout": "Nutzen Sie ein komfortables Layout", "cannotLoadPdf": "PDF kann nicht geladen werden", "pdfLoadError": "Beim Laden dieser PDF-Datei ist ein Fehler aufgetreten.", - "loadingPdf": "PDF wird geladen...", + "loadingPdf": "Loading PDF viewer...", "loadingPage": "Seite wird geladen...", "cancel": "Abbrechen", "copiedItems_one": "Kopierter Eintrag {{count}}", @@ -383,7 +383,16 @@ "videoUnsupported": "Ihr Browser kann dieses Videoformat nicht abspielen.", "downloadToPlay": "Laden Sie es herunter, um es woanders abzuspielen.", "cannotPreviewType": "Vorschau dieses Dateityps nicht möglich", - "cannotPreviewTypeHint": "Dieser Dateityp hat keine Vorschau. Laden Sie ihn herunter, um ihn in einer anderen App zu öffnen." + "cannotPreviewTypeHint": "Dieser Dateityp hat keine Vorschau. Laden Sie ihn herunter, um ihn in einer anderen App zu öffnen.", + "loadingFile": "Loading file...", + "loadingImage": "Loading image...", + "loadingEditor": "Loading editor...", + "loadingPreview": "Loading preview...", + "loadingAudio": "Loading audio player...", + "emptyPreview": "Nothing to preview yet...", + "revert": "Revert", + "openAsText": "Open as Text", + "confirmOpenAsText": "Do you want to continue opening this file as text? This may slow down your browser." }, "sftpTransfer": { "title": "SFTP", @@ -539,5 +548,8 @@ "metricsHopSourceRead": "Quelle → Server: {{throughput}}", "metricsHopDestSftpWrite": "Server → Ziel (SFTP): {{throughput}}", "metricsHopDestLocalWrite": "Server → Ziel (lokal): {{throughput}}" + }, + "plugin": { + "name": "File Manager" } } diff --git a/plugins/file-manager/locales/translated/el_GR.json b/plugins/file-manager/locales/translated/el_GR.json index 4ab2d42d1..9944e97d4 100644 --- a/plugins/file-manager/locales/translated/el_GR.json +++ b/plugins/file-manager/locales/translated/el_GR.json @@ -323,7 +323,7 @@ "sideBySide": "Πλάι πλάι", "inline": "Ενσωματωμένο", "fileComparison": "Σύγκριση αρχείων: {{file1}} έναντι {{file2}}", - "fileTooLarge": "Το αρχείο είναι πολύ μεγάλο: {{error}}", + "fileTooLarge": "File is too large (> 10MB) and cannot be opened as text for security reasons.", "sshConnectionFailed": "Η σύνδεση SSH απέτυχε. Ελέγξτε τη σύνδεσή σας με {{name}} ({{ip}}:{{port}})", "loadFileFailed": "Αποτυχία φόρτωσης αρχείου: {{error}}", "connecting": "Συνδετικός...", @@ -365,7 +365,7 @@ "comfortableLayout": "Χρησιμοποιήστε άνετη διάταξη", "cannotLoadPdf": "Δεν είναι δυνατή η φόρτωση του PDF", "pdfLoadError": "Παρουσιάστηκε σφάλμα κατά τη φόρτωση αυτού του αρχείου PDF.", - "loadingPdf": "Φόρτωση PDF...", + "loadingPdf": "Loading PDF viewer...", "loadingPage": "Φόρτωση σελίδας...", "cancel": "Ματαίωση", "copiedItems_one": "Αντιγράφηκε {{count}} στοιχείο", @@ -383,7 +383,16 @@ "videoUnsupported": "Το πρόγραμμα περιήγησής σας δεν μπορεί να αναπαράγει αυτήν τη μορφή βίντεο.", "downloadToPlay": "Κατεβάστε το για να το παίξετε αλλού", "cannotPreviewType": "Δεν είναι δυνατή η προεπισκόπηση αυτού του τύπου αρχείου", - "cannotPreviewTypeHint": "Αυτός ο τύπος αρχείου δεν έχει προεπισκόπηση. Κατεβάστε το για να το ανοίξετε σε άλλη εφαρμογή." + "cannotPreviewTypeHint": "Αυτός ο τύπος αρχείου δεν έχει προεπισκόπηση. Κατεβάστε το για να το ανοίξετε σε άλλη εφαρμογή.", + "loadingFile": "Loading file...", + "loadingImage": "Loading image...", + "loadingEditor": "Loading editor...", + "loadingPreview": "Loading preview...", + "loadingAudio": "Loading audio player...", + "emptyPreview": "Nothing to preview yet...", + "revert": "Revert", + "openAsText": "Open as Text", + "confirmOpenAsText": "Do you want to continue opening this file as text? This may slow down your browser." }, "sftpTransfer": { "title": "SFTP", @@ -539,5 +548,8 @@ "metricsHopSourceRead": "Πηγή → διακομιστής: {{throughput}}", "metricsHopDestSftpWrite": "Διακομιστής → προορισμός (SFTP): {{throughput}}", "metricsHopDestLocalWrite": "Διακομιστής → προορισμός (τοπικός): {{throughput}}" + }, + "plugin": { + "name": "File Manager" } } diff --git a/plugins/file-manager/locales/translated/es_ES.json b/plugins/file-manager/locales/translated/es_ES.json index d9643f946..dd4036f6d 100644 --- a/plugins/file-manager/locales/translated/es_ES.json +++ b/plugins/file-manager/locales/translated/es_ES.json @@ -323,7 +323,7 @@ "sideBySide": "Lado a lado", "inline": "En línea", "fileComparison": "Comparación de archivos: {{file1}} vs {{file2}}", - "fileTooLarge": "Archivo demasiado grande: {{error}}", + "fileTooLarge": "File is too large (> 10MB) and cannot be opened as text for security reasons.", "sshConnectionFailed": "Error de conexión SSH. Verifique su conexión a {{name}} ({{ip}}:{{port}})", "loadFileFailed": "Error al cargar el archivo: {{error}}", "connecting": "Conectando...", @@ -365,7 +365,7 @@ "comfortableLayout": "Utilice una disposición cómoda", "cannotLoadPdf": "No se puede cargar el PDF", "pdfLoadError": "Se produjo un error al cargar este archivo PDF.", - "loadingPdf": "Cargando PDF...", + "loadingPdf": "Loading PDF viewer...", "loadingPage": "Cargando página...", "cancel": "Cancelar", "copiedItems_one": "Copiado {{count}} elemento", @@ -383,7 +383,16 @@ "videoUnsupported": "Tu navegador no puede reproducir este formato de vídeo.", "downloadToPlay": "Descárgalo para jugarlo en otro lugar.", "cannotPreviewType": "No se puede previsualizar este tipo de archivo.", - "cannotPreviewTypeHint": "Este tipo de archivo no tiene vista previa. Descárguelo para abrirlo en otra aplicación." + "cannotPreviewTypeHint": "Este tipo de archivo no tiene vista previa. Descárguelo para abrirlo en otra aplicación.", + "loadingFile": "Loading file...", + "loadingImage": "Loading image...", + "loadingEditor": "Loading editor...", + "loadingPreview": "Loading preview...", + "loadingAudio": "Loading audio player...", + "emptyPreview": "Nothing to preview yet...", + "revert": "Revert", + "openAsText": "Open as Text", + "confirmOpenAsText": "Do you want to continue opening this file as text? This may slow down your browser." }, "sftpTransfer": { "title": "SFTP", @@ -539,5 +548,8 @@ "metricsHopSourceRead": "Origen → servidor: {{throughput}}", "metricsHopDestSftpWrite": "Servidor → destino (SFTP): {{throughput}}", "metricsHopDestLocalWrite": "Servidor → destino (local): {{throughput}}" + }, + "plugin": { + "name": "File Manager" } } diff --git a/plugins/file-manager/locales/translated/fi_FI.json b/plugins/file-manager/locales/translated/fi_FI.json index 816a9e65a..5a01b1f22 100644 --- a/plugins/file-manager/locales/translated/fi_FI.json +++ b/plugins/file-manager/locales/translated/fi_FI.json @@ -323,7 +323,7 @@ "sideBySide": "Rinnakkain", "inline": "Rivissä", "fileComparison": "Tiedostovertailu: {{file1}} vs. {{file2}}", - "fileTooLarge": "Tiedosto liian suuri: {{error}}", + "fileTooLarge": "File is too large (> 10MB) and cannot be opened as text for security reasons.", "sshConnectionFailed": "SSH-yhteys epäonnistui. Tarkista yhteytesi kohteeseen {{name}} ({{ip}}:{{port}})", "loadFileFailed": "Tiedoston lataus epäonnistui: {{error}}", "connecting": "Yhdistetään...", @@ -365,7 +365,7 @@ "comfortableLayout": "Käytä mukavaa asettelua", "cannotLoadPdf": "PDF-tiedoston lataaminen ei onnistu", "pdfLoadError": "PDF-tiedoston lataamisessa tapahtui virhe.", - "loadingPdf": "Ladataan PDF-tiedostoa...", + "loadingPdf": "Loading PDF viewer...", "loadingPage": "Sivua ladataan...", "cancel": "Peruuttaa", "copiedItems_one": "Kopioitu {{count}} kohde", @@ -383,7 +383,16 @@ "videoUnsupported": "Selaimesi ei voi toistaa tätä videomuotoa.", "downloadToPlay": "Lataa toistaaksesi sen muualla", "cannotPreviewType": "Tätä tiedostotyyppiä ei voi esikatsella", - "cannotPreviewTypeHint": "Tällä tiedostotyypillä ei ole esikatselua. Lataa se avataksesi sen toisessa sovelluksessa." + "cannotPreviewTypeHint": "Tällä tiedostotyypillä ei ole esikatselua. Lataa se avataksesi sen toisessa sovelluksessa.", + "loadingFile": "Loading file...", + "loadingImage": "Loading image...", + "loadingEditor": "Loading editor...", + "loadingPreview": "Loading preview...", + "loadingAudio": "Loading audio player...", + "emptyPreview": "Nothing to preview yet...", + "revert": "Revert", + "openAsText": "Open as Text", + "confirmOpenAsText": "Do you want to continue opening this file as text? This may slow down your browser." }, "sftpTransfer": { "title": "SFTP", @@ -539,5 +548,8 @@ "metricsHopSourceRead": "Lähde → palvelin: {{throughput}}", "metricsHopDestSftpWrite": "Palvelin → kohde (SFTP): {{throughput}}", "metricsHopDestLocalWrite": "Palvelin → kohde (paikallinen): {{throughput}}" + }, + "plugin": { + "name": "File Manager" } } diff --git a/plugins/file-manager/locales/translated/fr_FR.json b/plugins/file-manager/locales/translated/fr_FR.json index 0b626a3ab..1e17d5155 100644 --- a/plugins/file-manager/locales/translated/fr_FR.json +++ b/plugins/file-manager/locales/translated/fr_FR.json @@ -323,7 +323,7 @@ "sideBySide": "Côte à côte", "inline": "En ligne", "fileComparison": "Comparaison de fichiers : {{file1}} vs {{file2}}", - "fileTooLarge": "Fichier trop volumineux : {{error}}", + "fileTooLarge": "File is too large (> 10MB) and cannot be opened as text for security reasons.", "sshConnectionFailed": "La connexion SSH a échoué. Veuillez vérifier votre connexion à {{name}} ({{ip}}:{{port}})", "loadFileFailed": "Impossible de charger le fichier : {{error}}", "connecting": "Connexion en cours...", @@ -365,7 +365,7 @@ "comfortableLayout": "Utilisez une disposition confortable", "cannotLoadPdf": "Impossible de charger le PDF", "pdfLoadError": "Une erreur s'est produite lors du chargement de ce fichier PDF.", - "loadingPdf": "Chargement du PDF...", + "loadingPdf": "Loading PDF viewer...", "loadingPage": "Chargement de la page...", "cancel": "Annuler", "copiedItems_one": "Élément copié {{count}}", @@ -383,7 +383,16 @@ "videoUnsupported": "Votre navigateur ne peut pas lire ce format vidéo.", "downloadToPlay": "Téléchargez-le pour y jouer ailleurs", "cannotPreviewType": "Impossible de prévisualiser ce type de fichier", - "cannotPreviewTypeHint": "Ce type de fichier ne possède pas d'aperçu. Téléchargez-le pour l'ouvrir dans une autre application." + "cannotPreviewTypeHint": "Ce type de fichier ne possède pas d'aperçu. Téléchargez-le pour l'ouvrir dans une autre application.", + "loadingFile": "Loading file...", + "loadingImage": "Loading image...", + "loadingEditor": "Loading editor...", + "loadingPreview": "Loading preview...", + "loadingAudio": "Loading audio player...", + "emptyPreview": "Nothing to preview yet...", + "revert": "Revert", + "openAsText": "Open as Text", + "confirmOpenAsText": "Do you want to continue opening this file as text? This may slow down your browser." }, "sftpTransfer": { "title": "SFTP", @@ -539,5 +548,8 @@ "metricsHopSourceRead": "Source → serveur : {{throughput}}", "metricsHopDestSftpWrite": "Serveur → dest (SFTP) : {{throughput}}", "metricsHopDestLocalWrite": "Serveur → dest (local) : {{throughput}}" + }, + "plugin": { + "name": "File Manager" } } diff --git a/plugins/file-manager/locales/translated/he_IL.json b/plugins/file-manager/locales/translated/he_IL.json index 6a4bfe4db..373815ea4 100644 --- a/plugins/file-manager/locales/translated/he_IL.json +++ b/plugins/file-manager/locales/translated/he_IL.json @@ -323,7 +323,7 @@ "sideBySide": "זֶה בְּצַד זֶה", "inline": "מוטבע", "fileComparison": "השוואת קבצים: {{file1}} לעומת {{file2}}", - "fileTooLarge": "קובץ גדול מדי: {{error}}", + "fileTooLarge": "File is too large (> 10MB) and cannot be opened as text for security reasons.", "sshConnectionFailed": "חיבור SSH נכשל. אנא בדוק את החיבור שלך אל {{name}} ({{ip}}:{{port}})", "loadFileFailed": "טעינת הקובץ נכשלה: {{error}}", "connecting": "מְקַשֵׁר...", @@ -365,7 +365,7 @@ "comfortableLayout": "השתמש בפריסה נוחה", "cannotLoadPdf": "לא ניתן לטעון את ה-PDF", "pdfLoadError": "אירעה שגיאה בטעינת קובץ PDF זה.", - "loadingPdf": "טוען PDF...", + "loadingPdf": "Loading PDF viewer...", "loadingPage": "טוען דף...", "cancel": "לְבַטֵל", "copiedItems_one": "פריט {{count}} הועתק", @@ -383,7 +383,16 @@ "videoUnsupported": "הדפדפן שלך לא יכול להפעיל פורמט וידאו זה.", "downloadToPlay": "הורד כדי להפעיל אותו במקום אחר", "cannotPreviewType": "לא ניתן להציג תצוגה מקדימה של סוג קובץ זה", - "cannotPreviewTypeHint": "לסוג קובץ זה אין תצוגה מקדימה. הורד אותו כדי לפתוח אותו באפליקציה אחרת." + "cannotPreviewTypeHint": "לסוג קובץ זה אין תצוגה מקדימה. הורד אותו כדי לפתוח אותו באפליקציה אחרת.", + "loadingFile": "Loading file...", + "loadingImage": "Loading image...", + "loadingEditor": "Loading editor...", + "loadingPreview": "Loading preview...", + "loadingAudio": "Loading audio player...", + "emptyPreview": "Nothing to preview yet...", + "revert": "Revert", + "openAsText": "Open as Text", + "confirmOpenAsText": "Do you want to continue opening this file as text? This may slow down your browser." }, "sftpTransfer": { "title": "SFTP", @@ -539,5 +548,8 @@ "metricsHopSourceRead": "מקור → שרת: {{throughput}}", "metricsHopDestSftpWrite": "שרת → יעד (SFTP): {{throughput}}", "metricsHopDestLocalWrite": "שרת → יעד (מקומי): {{throughput}}" + }, + "plugin": { + "name": "File Manager" } } diff --git a/plugins/file-manager/locales/translated/hi_IN.json b/plugins/file-manager/locales/translated/hi_IN.json index db82088f3..033ff3d62 100644 --- a/plugins/file-manager/locales/translated/hi_IN.json +++ b/plugins/file-manager/locales/translated/hi_IN.json @@ -1,20 +1,20 @@ { "nav": { "files": "फ़ाइलें", - "sftp": "SFTP", + "sftp": "एसएफटीपी", "openFileManager": "फ़ाइल प्रबंधक खोलें" }, "permissions": { "use": { - "title": "Use file manager", - "description": "Browse, edit and transfer files over SFTP." + "title": "फ़ाइल प्रबंधक का उपयोग करें", + "description": "SFTP के माध्यम से फाइलों को ब्राउज़ करें, संपादित करें और स्थानांतरित करें।" } }, "settings": { "host": { "enable": { "label": "फ़ाइल प्रबंधक सक्षम करें", - "description": "Browse and edit files on this host over SFTP." + "description": "इस होस्ट पर SFTP के माध्यम से फाइलों को ब्राउज़ और संपादित करें।" }, "defaultPath": { "label": "डिफ़ॉल्ट पथ" @@ -25,12 +25,12 @@ }, "user": { "transferConcurrency": { - "label": "Simultaneous File Transfers", - "description": "How many files the side by side local/remote manager uploads or downloads at the same time. Lower this if your server limits SFTP channels." + "label": "एक साथ फ़ाइल स्थानांतरण", + "description": "साइड-बाय-साइड लोकल/रिमोट मैनेजर एक ही समय में कितनी फाइलें अपलोड या डाउनलोड कर सकता है। यदि आपका सर्वर SFTP चैनलों को सीमित करता है तो इसे कम करें।" }, "confirmBeforeTrash": { - "label": "Confirm before moving files to trash", - "description": "Ask before moving remote files to trash. Permanent deletion still requires confirmation." + "label": "फ़ाइलों को ट्रैश में भेजने से पहले पुष्टि कर लें", + "description": "रिमोट फ़ाइलों को ट्रैश में ले जाने से पहले पूछ लें। स्थायी रूप से हटाने के लिए भी पुष्टि आवश्यक है।" } } }, @@ -72,14 +72,14 @@ "rename": "नाम बदलें", "uploading": "अपलोड हो रहा है...", "uploadingFile": "{{name}} अपलोड हो रहा है...", - "uploadingChunk": "Uploading {{name}}: {{percent}}% (part {{chunk}} of {{total}})", + "uploadingChunk": "अपलोड हो रहा है {{name}}: {{percent}}% (भाग {{chunk}} का {{total}})", "fileName": "फ़ाइल का नाम", "folderName": "फ़ोल्डर का नाम", "fileUploadedSuccessfully": "फ़ाइल \"{{name}}\" सफलतापूर्वक अपलोड हो गई", "failedToUploadFile": "फ़ाइल अपलोड करने में विफल", - "uploadingFolderFiles": "Uploading {{count}} file(s)...", - "uploadedFolderFiles": "Uploaded {{count}} file(s) successfully", - "uploadedFolderPartial": "Uploaded {{uploaded}} file(s), {{failed}} failed", + "uploadingFolderFiles": "{{count}} फ़ाइलें अपलोड की जा रही हैं...", + "uploadedFolderFiles": "{{count}} फ़ाइलें सफलतापूर्वक अपलोड हो गईं", + "uploadedFolderPartial": "{{uploaded}} फ़ाइलें अपलोड की गईं, {{failed}} अपलोड विफल रहा।", "fileDownloadedSuccessfully": "फ़ाइल \"{{name}}\" सफलतापूर्वक डाउनलोड हो गई", "failedToDownloadFile": "फ़ाइल डाउनलोड करने में विफल", "fileCreatedSuccessfully": "फ़ाइल \"{{name}}\" सफलतापूर्वक बनाई गई", @@ -95,58 +95,58 @@ "sudoOperationFailed": "sudo संचालन विफल", "sudoAuthFailed": "sudo प्रमाणीकरण विफल", "dragFilesToUpload": "अपलोड करने के लिए फ़ाइलें यहाँ छोड़ें", - "dropToUploadHere": "Drop to upload here", - "dropToDownloadHere": "Drop to download here", + "dropToUploadHere": "अपलोड करने के लिए यहां ड्रॉप करें", + "dropToDownloadHere": "डाउनलोड करने के लिए यहां क्लिक करें", "localFiles": "स्थानीय", - "showLocalFiles": "Show local files (split view)", - "hideLocalFiles": "Hide local files", - "localHome": "Home folder", - "localPathPlaceholder": "Local folder path", - "localShowHidden": "Show hidden files", - "localHideHidden": "Hide hidden files", - "localRevealInFileManager": "Reveal in system file manager", - "localCannotOpenFolder": "Cannot open folder", + "showLocalFiles": "स्थानीय फ़ाइलें दिखाएँ (स्प्लिट व्यू)", + "hideLocalFiles": "स्थानीय फ़ाइलों को छुपाएँ", + "localHome": "होम फ़ोल्डर", + "localPathPlaceholder": "स्थानीय फ़ोल्डर पथ", + "localShowHidden": "छिपी हुई फ़ाइलें दिखाएँ", + "localHideHidden": "छिपी हुई फ़ाइलों को छुपाएँ", + "localRevealInFileManager": "सिस्टम फ़ाइल प्रबंधक में दिखाएँ", + "localCannotOpenFolder": "फ़ोल्डर नहीं खोला जा सकता", "localItemCount": "{{count}} आइटम", "localSelectedCount": "{{count}} चयनित", "back": "वापस", - "forward": "Forward", - "up": "Up", - "kind": "Kind", - "localUploadingProgress": "Uploading {{current}} of {{total}}", - "localDownloadingProgress": "Downloading {{current}} of {{total}}", - "localTransferInFlight": "{{count}} at once", - "localPreparingDownload": "Preparing download...", + "forward": "आगे", + "up": "ऊपर", + "kind": "दयालु", + "localUploadingProgress": "{{total}} में से {{current}} अपलोड किया जा रहा है", + "localDownloadingProgress": "{{total}} में से {{current}} डाउनलोड हो रहा है", + "localTransferInFlight": "{{count}} एक साथ", + "localPreparingDownload": "डाउनलोड की तैयारी हो रही है...", "localTransferCancelled": "स्थानांतरण रद्द किया गया।", - "localNothingToTransfer": "Nothing to transfer", - "localUploadComplete": "Uploaded {{count}} file(s)", - "localUploadFailed": "Upload failed", - "localUploadPartial": "Uploaded {{done}} file(s), {{failed}} failed", - "localDownloadComplete": "Downloaded {{count}} file(s)", + "localNothingToTransfer": "स्थानांतरित करने के लिए कुछ भी नहीं है", + "localUploadComplete": "{{count}} फाइल अपलोड की गई", + "localUploadFailed": "अपलोड विफल", + "localUploadPartial": "{{done}} फ़ाइलें अपलोड की गईं, {{failed}} अपलोड विफल रहा।", + "localDownloadComplete": "डाउनलोड की गई {{count}} फ़ाइलें", "localDownloadFailed": "डाउनलोड विफल", - "localDownloadPartial": "Downloaded {{done}} file(s), {{failed}} failed", - "localReplaceExistingPrompt": "{{count}} item(s) already exist in this folder. Replace them?", + "localDownloadPartial": "{{done}} फ़ाइलें डाउनलोड की गईं, {{failed}} डाउनलोड विफल रहा।", + "localReplaceExistingPrompt": "इस फ़ोल्डर में पहले से ही {{count}} आइटम मौजूद हैं। क्या आप उन्हें बदलना चाहेंगे?", "localReplace": "बदलें", - "localSkipExisting": "Skip", - "localSkippedExisting": "Skipped {{count}} existing item(s)", - "localUnsafeNamesSkipped": "Skipped {{count}} item(s) whose names cannot be used on this computer", + "localSkipExisting": "छोडना", + "localSkippedExisting": "मौजूदा आइटमों में से {{count}} को छोड़ दिया गया", + "localUnsafeNamesSkipped": "इस कंप्यूटर पर जिन आइटमों के नाम इस्तेमाल नहीं किए जा सकते, उन्हें छोड़ दिया गया है {{count}}", "localOpen": "खोलें", - "localOpenFolder": "Open folder", - "localUploadToRemote": "Upload to server", - "localUploadToRemoteMany": "Upload {{count}} items to server", - "localMoveToTrash": "Move to Trash", - "localMoveToTrashMany": "Move {{count}} items to Trash", - "localTrashConfirmSingle": "Move \"{{name}}\" to the Trash?", - "localTrashConfirmFolder": "Move the folder \"{{name}}\" and all its contents to the Trash?", - "localTrashConfirmMany": "Move {{count}} items to the Trash?", - "localTrashed": "Moved {{count}} item(s) to the Trash", - "localTrashFailed": "Could not move to the Trash", - "localRenameFailed": "Rename failed", - "localCreateFailed": "Could not create item", - "goToParentFolder": "Go to parent folder", - "resizeSidebar": "Drag to resize the sidebar (double-click to reset)", - "resizeLocalPane": "Drag to resize the local pane (double-click to reset)", + "localOpenFolder": "फोल्डर खोलें", + "localUploadToRemote": "सर्वर पर अपलोड करें", + "localUploadToRemoteMany": "सर्वर पर {{count}} आइटम अपलोड करें", + "localMoveToTrash": "ट्रैश में ले जाएं", + "localMoveToTrashMany": "{{count}} आइटम ट्रैश में ले जाएं", + "localTrashConfirmSingle": "क्या आप \"{{name}}\" को ट्रैश में ले जाना चाहते हैं?", + "localTrashConfirmFolder": "क्या आप फोल्डर \"{{name}}\" और उसकी सभी सामग्री को ट्रैश में ले जाना चाहते हैं?", + "localTrashConfirmMany": "क्या {{count}} आइटम ट्रैश में ले जाएं?", + "localTrashed": "{{count}} आइटम ट्रैश में भेज दिए गए हैं", + "localTrashFailed": "ट्रैश में नहीं ले जाया जा सका", + "localRenameFailed": "नाम बदलने में विफल रहा", + "localCreateFailed": "आइटम नहीं बनाया जा सका", + "goToParentFolder": "मूल फ़ोल्डर पर जाएँ", + "resizeSidebar": "साइडबार का आकार बदलने के लिए उसे खींचें (रीसेट करने के लिए उस पर डबल-क्लिक करें)", + "resizeLocalPane": "स्थानीय फलक का आकार बदलने के लिए उसे खींचें (आकार बदलने के लिए उस पर दो बार क्लिक करें)", "columns": "कॉलम", - "columnsHint": "Right-click to choose columns", + "columnsHint": "कॉलम चुनने के लिए राइट-क्लिक करें", "emptyFolder": "यह फ़ोल्डर खाली है", "searchFiles": "फ़ाइलें खोजें...", "upload": "अपलोड करें", @@ -202,26 +202,26 @@ "confirmDeleteMultipleItemsWithFolders": "क्या आप वाकई {{count}} आइटम स्थायी रूप से हटाना चाहते हैं? इसमें फ़ोल्डर और उनकी सामग्री शामिल है।", "confirmDeleteFolder": "क्या आप वाकई फ़ोल्डर \"{{name}}\" और उसकी सभी सामग्री को स्थायी रूप से हटाना चाहते हैं?", "permanentDeleteWarning": "यह क्रिया पूर्ववत नहीं की जा सकती। आइटम सर्वर से स्थायी रूप से हटा दिए जाएँगे।", - "moveToTrashWarning": "The item(s) will be moved to the Termix Trash and can be restored before the retention period expires.", - "itemsMovedToTrash": "{{count}} item(s) moved to Trash", - "trash": "Trash", - "trashDescription": "Deleted items are retained for {{days}} day(s) on this host.", - "trashLoadFailed": "Failed to load Trash", - "trashEmpty": "Trash is empty", + "moveToTrashWarning": "आइटम को टर्मिक्स ट्रैश में भेज दिया जाएगा और प्रतिधारण अवधि समाप्त होने से पहले इसे पुनर्स्थापित किया जा सकता है।", + "itemsMovedToTrash": "{{count}} आइटम ट्रैश में चले गए", + "trash": "कचरा", + "trashDescription": "हटाए गए आइटम इस होस्ट पर {{days}} दिनों तक रखे जाते हैं।", + "trashLoadFailed": "ट्रैश लोड करने में विफल", + "trashEmpty": "कचरा पात्र खाली है", "trashRestore": "पुनर्स्थापित करें", - "trashRestored": "Restored {{name}}", - "trashRestoreFailed": "Failed to restore item. The original path may already exist.", - "trashDeletePermanently": "Delete permanently", - "trashDeleteConfirm": "Permanently delete {{name}}? This cannot be undone.", - "trashPermanentlyDeleted": "Permanently deleted {{name}}", - "trashDeleteFailed": "Failed to permanently delete item", - "trashEmptyAction": "Empty Trash", - "trashEmptyConfirm": "Permanently delete every item in Trash? This cannot be undone.", - "trashEmptied": "Trash emptied", - "trashRetention": "Automatic cleanup after (days)", - "trashRetentionSaved": "Trash retention updated", - "trashRetentionFailed": "Failed to update Trash retention", - "trashUnavailableConfirm": "This item cannot be moved to Trash, usually because it is on another filesystem or requires elevated permissions. Delete it permanently instead?", + "trashRestored": "पुनर्स्थापित {{name}}", + "trashRestoreFailed": "आइटम को पुनर्स्थापित करने में विफल। मूल पथ पहले से मौजूद हो सकता है।", + "trashDeletePermanently": "स्थायी रूप से हटाएं", + "trashDeleteConfirm": "{{name}}को स्थायी रूप से हटा दें? इसे पूर्ववत नहीं किया जा सकता।", + "trashPermanentlyDeleted": "स्थायी रूप से हटा दिया गया {{name}}", + "trashDeleteFailed": "आइटम को स्थायी रूप से हटाने में विफल रहा", + "trashEmptyAction": "कचरा खाली करें", + "trashEmptyConfirm": "ट्रैश में मौजूद सभी आइटम को स्थायी रूप से हटाना चाहते हैं? इसे वापस नहीं लिया जा सकता।", + "trashEmptied": "कचरा खाली कर दिया गया", + "trashRetention": "(दिनों) के बाद स्वचालित सफाई", + "trashRetentionSaved": "कचरा संग्रहण प्रणाली को अद्यतन किया गया", + "trashRetentionFailed": "ट्रैश रिटेंशन को अपडेट करने में विफलता", + "trashUnavailableConfirm": "इस आइटम को ट्रैश में नहीं ले जाया जा सकता, आमतौर पर इसलिए क्योंकि यह किसी अन्य फ़ाइल सिस्टम पर है या इसके लिए उच्च अनुमतियों की आवश्यकता होती है। क्या इसे स्थायी रूप से हटा देना बेहतर होगा?", "recent": "हाल ही", "pinned": "पिन किए गए", "folderShortcuts": "फ़ोल्डर शॉर्टकट", @@ -303,7 +303,7 @@ "operationCompleted": "{{operation}} {{count}} आइटम", "downloadFileSuccess": "फ़ाइल {{name}} सफलतापूर्वक डाउनलोड हुई", "downloadFileFailed": "डाउनलोड विफल", - "downloadingFile": "Downloading {{name}}…", + "downloadingFile": "डाउनलोड हो रहा है {{name}}…", "downloadProgressBytes": "{{transferred}} / {{total}}", "moveTo": "{{name}} में ले जाएँ", "diffCompareWith": "{{name}} के साथ डिफ तुलना करें", @@ -323,13 +323,13 @@ "sideBySide": "साथ-साथ", "inline": "इनलाइन", "fileComparison": "फ़ाइल तुलना: {{file1}} बनाम {{file2}}", - "fileTooLarge": "फ़ाइल बहुत बड़ी है: {{error}}", + "fileTooLarge": "File is too large (> 10MB) and cannot be opened as text for security reasons.", "sshConnectionFailed": "SSH कनेक्शन विफल। कृपया {{name}} ({{ip}}:{{port}}) से अपना कनेक्शन जाँचें।", "loadFileFailed": "फ़ाइल लोड करने में विफल: {{error}}", "connecting": "कनेक्ट हो रहा है...", "connectedSuccessfully": "सफलतापूर्वक कनेक्ट हुआ", "totpVerificationFailed": "TOTP सत्यापन विफल", - "browserSignInFailed": "Sign-in failed. Please try again.", + "browserSignInFailed": "प्रवेश विफल। कृपया दोबारा प्रयास करें।", "authenticationFailed": "प्रमाणीकरण विफल", "incorrectPassphrase": "गलत पासफ़्रेज़। कृपया पुनः प्रयास करें।", "verificationCodePrompt": "सत्यापन कोड:", @@ -361,73 +361,82 @@ "used": "प्रयुक्त", "of": "में से", "toggleSidebar": "साइडबार टॉगल करें", - "compactLayout": "Use compact layout", - "comfortableLayout": "Use comfortable layout", + "compactLayout": "कॉम्पैक्ट लेआउट का उपयोग करें", + "comfortableLayout": "सुविधाजनक लेआउट का उपयोग करें", "cannotLoadPdf": "PDF लोड नहीं कर सकता", "pdfLoadError": "इस PDF फ़ाइल को लोड करने में त्रुटि हुई।", - "loadingPdf": "PDF लोड हो रहा है...", + "loadingPdf": "Loading PDF viewer...", "loadingPage": "पृष्ठ लोड हो रहा है...", "cancel": "रद्द करें", - "copiedItems_one": "Copied {{count}} item", - "copiedItems_other": "Copied {{count}} items", - "deleteCopiedFileFailed": "Could not delete the copy of {{name}}: {{error}}", - "dragMovedItems_one": "Moved {{count}} item to {{target}}", - "dragMovedItems_other": "Moved {{count}} items to {{target}}", - "moveBackFileFailed": "Could not move {{name}} back: {{error}}", - "terminal": "Terminal: {{host}} ({{path}})", - "dragToDesktop": "Dragging {{name}} to the desktop", - "dragFilesToDesktop": "Dragging {{count}} files to the desktop", - "folderDragUnsupported": "Dragging folders to the desktop is not supported yet", - "saveToDesktopFailed": "Save failed: {{error}}", - "dragFailedDetail": "Drag failed: {{error}}", - "videoUnsupported": "Your browser cannot play this video format.", - "downloadToPlay": "Download to play it elsewhere", - "cannotPreviewType": "Cannot preview this file type", - "cannotPreviewTypeHint": "This file type has no preview. Download it to open it in another app." + "copiedItems_one": "आइटम कॉपी किया गया {{count}}", + "copiedItems_other": "आइटम कॉपी किए गए {{count}}", + "deleteCopiedFileFailed": "{{name}}की प्रतिलिपि को हटाया नहीं जा सका : {{error}}", + "dragMovedItems_one": "{{count}} आइटम को {{target}} में स्थानांतरित किया गया", + "dragMovedItems_other": "{{count}} आइटम {{target}} में स्थानांतरित किए गए", + "moveBackFileFailed": "{{name}} को वापस नहीं ले जाया जा सका: {{error}}", + "terminal": "टर्मिनल: {{host}} ({{path}})", + "dragToDesktop": "{{name}} को डेस्कटॉप पर खींचना", + "dragFilesToDesktop": "{{count}} फ़ाइलों को डेस्कटॉप पर खींचना", + "folderDragUnsupported": "फ़ोल्डरों को डेस्कटॉप पर ड्रैग करने की सुविधा अभी समर्थित नहीं है।", + "saveToDesktopFailed": "सेव करने में विफल: {{error}}", + "dragFailedDetail": "ड्रैग विफल: {{error}}", + "videoUnsupported": "आपका ब्राउज़र इस वीडियो प्रारूप को नहीं चला सकता।", + "downloadToPlay": "इसे कहीं और खेलने के लिए डाउनलोड करें", + "cannotPreviewType": "इस फ़ाइल प्रकार का पूर्वावलोकन नहीं किया जा सकता है", + "cannotPreviewTypeHint": "इस फ़ाइल प्रकार का कोई पूर्वावलोकन नहीं है। इसे डाउनलोड करके किसी अन्य ऐप में खोलें।", + "loadingFile": "Loading file...", + "loadingImage": "Loading image...", + "loadingEditor": "Loading editor...", + "loadingPreview": "Loading preview...", + "loadingAudio": "Loading audio player...", + "emptyPreview": "Nothing to preview yet...", + "revert": "Revert", + "openAsText": "Open as Text", + "confirmOpenAsText": "Do you want to continue opening this file as text? This may slow down your browser." }, "sftpTransfer": { - "title": "SFTP", - "description": "Transfer files between two SSH hosts.", - "sourceServer": "Source Server", - "destinationServer": "Destination Server", - "selectHost": "Select host", + "title": "एसएफटीपी", + "description": "दो SSH होस्ट के बीच फ़ाइलें स्थानांतरित करें।", + "sourceServer": "स्रोत सर्वर", + "destinationServer": "गंतव्य सर्वर", + "selectHost": "होस्ट का चयन करें", "noHostSelected": "कोई होस्ट चयनित नहीं है", "move": "ले जाएँ", "copy": "कॉपी", "upload": "अपलोड करें", - "itemsSelected": "{{count}} item selected", - "itemsSelected_other": "{{count}} items selected", + "itemsSelected": "{{count}} आइटम चयनित", + "itemsSelected_other": "{{count}} आइटम चयनित", "ready": "तैयार", "loadingHosts": "होस्ट लोड हो रहे हैं...", "name": "नाम", "modified": "संशोधित", "size": "आकार", - "noFiles": "No files", + "noFiles": "कोई फ़ाइल नहीं", "open": "खोलें", - "up": "Up", + "up": "ऊपर", "refresh": "ताज़ा करें", - "copyToTarget": "Copy to Target Directory", + "copyToTarget": "लक्ष्य निर्देशिका में प्रतिलिपि करें", "rename": "नाम बदलें", "delete": "हटाएँ", - "editPermissions": "Edit Permissions", - "createNewFolder": "Create New Folder", - "deleteSelectedItems": "Delete Selected Items", - "deleteConfirm": "Delete {{count}} selected item?", - "deleteConfirm_other": "Delete {{count}} selected items?", + "editPermissions": "संपादन अनुमतियाँ", + "createNewFolder": "नया फ़ोल्डर बनाएं", + "deleteSelectedItems": "चयनित आइटम हटाएं", + "deleteConfirm": "चयनित आइटम हटाएं {{count}}?", + "deleteConfirm_other": "चयनित आइटम हटाएं {{count}}?", "cancel": "रद्द करें", "save": "सहेजें", - "folderCreated": "Folder created", - "itemRenamed": "Item renamed", + "folderCreated": "फ़ोल्डर बनाया गया", + "itemRenamed": "आइटम का नाम बदल दिया गया", "actionFailed": "कार्रवाई विफल", - "itemsDeleted": "{{count}} item deleted", - "itemsDeleted_other": "{{count}} items deleted", - "deleteFailed": "Delete failed", - "permissionsUpdated": "Permissions updated", - "noRemoteSessionConnected": "No remote session connected", - "failedToListFiles": "Failed to list files", - "failedToRefresh": "Failed to refresh", - "destinationInsideSource": "Destination cannot be inside the selected source path.", - "sameHostNoOp": "Source and destination are the same folder." + "itemsDeleted": "{{count}} आइटम हटा दिया गया", + "itemsDeleted_other": "{{count}} आइटम हटा दिए गए", + "deleteFailed": "डिलीट विफल", + "permissionsUpdated": "अनुमतियाँ अपडेट की गईं", + "noRemoteSessionConnected": "कोई रिमोट सेशन कनेक्ट नहीं हुआ", + "failedToListFiles": "फ़ाइलों को सूचीबद्ध करने में विफल", + "failedToRefresh": "रीफ़्रेश करने में विफल", + "destinationInsideSource": "गंतव्य चयनित स्रोत पथ के अंदर नहीं हो सकता।", + "sameHostNoOp": "स्रोत और गंतव्य एक ही फ़ोल्डर हैं।" }, "hosts": { "fileManager": "फ़ाइल प्रबंधक", @@ -438,8 +447,8 @@ "loadingHost": "होस्ट लोड हो रहा है..." }, "onboarding": { - "feature_files": "File manager", - "feature_files_desc": "Browse, upload, download and edit files over SFTP without leaving the app." + "feature_files": "फ़ाइल मैनेजर", + "feature_files_desc": "ऐप छोड़े बिना SFTP के माध्यम से फाइलों को ब्राउज़ करें, अपलोड करें, डाउनलोड करें और संपादित करें।" }, "terminal": { "runTitle": "{{command}} चल रहा है - {{host}}", @@ -464,7 +473,7 @@ "destinationPath": "गंतव्य पथ", "destMustBeDirectory": "कई आइटम स्थानांतरण के लिए गंतव्य एक निर्देशिका होना चाहिए", "goUp": "ऊपर जाएं", - "hostAuthRequired": "Authentication required. Open File Manager on this host first", + "hostAuthRequired": "प्रमाणीकरण आवश्यक है। पहले इस होस्ट पर फ़ाइल मैनेजर खोलें।", "hostConnecting": "कनेक्ट हो रहा है…", "hostConnectionFailed": "कनेक्शन विफल", "hostDisconnected": "कनेक्ट नहीं है", @@ -485,12 +494,12 @@ "methodReason": { "user_item_sftp": "आपने प्रति-फ़ाइल SFTP चुना।", "user_tar": "आपने tar संग्रह चुना।", - "tar_unavailable": "Tar is not available on one or both hosts, so per-file SFTP will be used instead.", - "windows_host": "A Windows host is involved, so tar is not used.", - "auto_multi_large": "Auto: multiple files including a large file ({{largestSize}}) with compressible data. Tar bundles them into one transfer.", - "auto_single_large_in_archive": "Auto: one large file ({{largestSize}}) in this set, so per-file SFTP.", - "auto_many_incompressible": "Auto: mostly incompressible data, so per-file SFTP.", - "auto_many_files": "Auto: many files ({{fileCount}}), tar cuts the per-file overhead.", + "tar_unavailable": "एक या दोनों होस्ट पर टार उपलब्ध नहीं है, इसलिए इसके बजाय प्रति-फाइल एसएफटीपी का उपयोग किया जाएगा।", + "windows_host": "इसमें विंडोज होस्ट शामिल है, इसलिए tar का उपयोग नहीं किया जाता है।", + "auto_multi_large": "ऑटो: कई फाइलें जिनमें संपीड़ित डेटा वाली एक बड़ी फाइल ({{largestSize}}) शामिल है। टार उन्हें एक ही स्थानांतरण में बंडल करता है।", + "auto_single_large_in_archive": "ऑटो: इस सेट में एक बड़ी फ़ाइल ({{largestSize}}), इसलिए प्रति-फ़ाइल SFTP.", + "auto_many_incompressible": "ऑटो: अधिकतर असंपीड़नीय डेटा, इसलिए प्रति-फ़ाइल SFTP।", + "auto_many_files": "ऑटो: कई फाइलें ({{fileCount}}), टार प्रति-फाइल ओवरहेड को कम करता है।", "auto_default": "ऑटो: इस सेट के लिए प्रति-फ़ाइल SFTP।" }, "methodTar": "Tar संग्रह", @@ -498,11 +507,11 @@ "metricsCompress": "स्रोत पर संपीड़न: {{duration}}", "metricsExtract": "गंतव्य पर निष्कर्षण: {{duration}}", "metricsPrepare": "गंतव्य तैयारी: {{duration}}", - "metricsRouteBenchmark": "Route probe: direct {{direct}}, relay {{relay}}", + "metricsRouteBenchmark": "रूट प्रोब: डायरेक्ट {{direct}}, रिले {{relay}}", "metricsSourceDelete": "स्रोत से हटाना: {{duration}}", "metricsTotal": "कुल: {{duration}}", "metricsTransfer": "एंड-टू-एंड: {{throughput}} ({{duration}})", - "metricsVerify": "SHA-256 verified: {{duration}}", + "metricsVerify": "SHA-256 सत्यापित: {{duration}}", "moveFolderToHost": "फ़ोल्डर होस्ट पर स्थानांतरित करें…", "moveItemsToHost": "{{count}} आइटम होस्ट पर स्थानांतरित करें…", "moveToHost": "होस्ट पर ले जाएँ…", @@ -511,7 +520,7 @@ "parallelSegmentsHint": "बड़ी फ़ाइलें 256 MB टुकड़ों में विभाजित होती हैं। एकाधिक लेन उच्च कुल थ्रूपुट के लिए अलग-अलग कनेक्शन का उपयोग करती हैं (जैसे कई स्थानांतरण प्रारंभ करना)।", "parallelSegmentsLabel": "समानांतर स्थानांतरण लेन", "parallelSegmentsOption": "{{count}} लेन", - "progressBenchmarking": "Selecting the fastest transfer route…", + "progressBenchmarking": "सबसे तेज़ स्थानांतरण मार्ग का चयन करना…", "progressBytes": "{{transferred}} / {{total}}", "progressCancel": "रद्द करें", "progressCancelling": "रद्द कर रहा है…", @@ -523,7 +532,7 @@ "progressTotalSpeed": "{{speed}} कुल ({{lanes}} लेन)", "progressTransferring": "डेटा स्थानांतरित कर रहा है…", "progressTransferringItems": "फ़ाइलें स्थानांतरित कर रहा है ({{current}} / {{total}})…", - "progressVerifying": "Verifying file integrity…", + "progressVerifying": "फ़ाइल की अखंडता का सत्यापन…", "recentDestinations": "हाल के गंतव्य", "resumedHint": "किसी अन्य विंडो में शुरू हुए सक्रिय स्थानांतरण से पुनः जुड़ा।", "retryTransfer": "पुनः प्रयास करें", @@ -539,5 +548,8 @@ "metricsHopSourceRead": "स्रोत → सर्वर: {{throughput}}", "metricsHopDestSftpWrite": "सर्वर → गंतव्य (SFTP): {{throughput}}", "metricsHopDestLocalWrite": "सर्वर → गंतव्य (स्थानीय): {{throughput}}" + }, + "plugin": { + "name": "File Manager" } } diff --git a/plugins/file-manager/locales/translated/hu_HU.json b/plugins/file-manager/locales/translated/hu_HU.json index 505a543f0..b456afd5a 100644 --- a/plugins/file-manager/locales/translated/hu_HU.json +++ b/plugins/file-manager/locales/translated/hu_HU.json @@ -323,7 +323,7 @@ "sideBySide": "Egymás mellett", "inline": "Beágyazott", "fileComparison": "Fájl-összehasonlítás: {{file1}} vs {{file2}}", - "fileTooLarge": "A fájl túl nagy: {{error}}", + "fileTooLarge": "File is too large (> 10MB) and cannot be opened as text for security reasons.", "sshConnectionFailed": "SSH kapcsolat sikertelen. Kérjük, ellenőrizze a kapcsolatot a következővel: {{name}} ({{ip}}:{{port}})", "loadFileFailed": "Nem sikerült betölteni a fájlt: {{error}}", "connecting": "Kapcsolódás...", @@ -365,7 +365,7 @@ "comfortableLayout": "Használjon kényelmes elrendezést", "cannotLoadPdf": "Nem tudom betölteni a PDF-et", "pdfLoadError": "Hiba történt a PDF fájl betöltésekor.", - "loadingPdf": "PDF betöltése...", + "loadingPdf": "Loading PDF viewer...", "loadingPage": "Oldal betöltése...", "cancel": "Mégsem", "copiedItems_one": "Másolt {{count}} elem", @@ -383,7 +383,16 @@ "videoUnsupported": "A böngésződ nem tudja lejátszani ezt a videóformátumot.", "downloadToPlay": "Töltsd le, hogy máshol is lejátszhasd", "cannotPreviewType": "Ez a fájltípus nem tekinthető meg előnézetben", - "cannotPreviewTypeHint": "Ennek a fájltípusnak nincs előnézete. Töltse le, hogy egy másik alkalmazásban megnyissa." + "cannotPreviewTypeHint": "Ennek a fájltípusnak nincs előnézete. Töltse le, hogy egy másik alkalmazásban megnyissa.", + "loadingFile": "Loading file...", + "loadingImage": "Loading image...", + "loadingEditor": "Loading editor...", + "loadingPreview": "Loading preview...", + "loadingAudio": "Loading audio player...", + "emptyPreview": "Nothing to preview yet...", + "revert": "Revert", + "openAsText": "Open as Text", + "confirmOpenAsText": "Do you want to continue opening this file as text? This may slow down your browser." }, "sftpTransfer": { "title": "SFTP", @@ -539,5 +548,8 @@ "metricsHopSourceRead": "Forrás → szerver: {{throughput}}", "metricsHopDestSftpWrite": "Szerver → cél (SFTP): {{throughput}}", "metricsHopDestLocalWrite": "Szerver → cél (helyi): {{throughput}}" + }, + "plugin": { + "name": "File Manager" } } diff --git a/plugins/file-manager/locales/translated/id_ID.json b/plugins/file-manager/locales/translated/id_ID.json index 9c4c6d35e..19e3a16f5 100644 --- a/plugins/file-manager/locales/translated/id_ID.json +++ b/plugins/file-manager/locales/translated/id_ID.json @@ -1,543 +1,555 @@ { "nav": { - "files": "Files", + "files": "Berkas", "sftp": "SFTP", - "openFileManager": "Open File Manager" + "openFileManager": "Buka Pengelola File" }, "permissions": { "use": { - "title": "Use file manager", - "description": "Browse, edit and transfer files over SFTP." + "title": "Gunakan pengelola file.", + "description": "Telusuri, edit, dan transfer file melalui SFTP." } }, "settings": { "host": { "enable": { - "label": "Enable File Manager", - "description": "Browse and edit files on this host over SFTP." + "label": "Aktifkan Pengelola File", + "description": "Jelajahi dan edit file di host ini melalui SFTP." }, "defaultPath": { - "label": "Default Path" + "label": "Jalur Default" }, "scpLegacy": { - "label": "SCP Legacy Mode" + "label": "Mode Warisan SCP" } }, "user": { "transferConcurrency": { - "label": "Simultaneous File Transfers", - "description": "How many files the side by side local/remote manager uploads or downloads at the same time. Lower this if your server limits SFTP channels." + "label": "Transfer File Serentak", + "description": "Jumlah file yang diunggah atau diunduh oleh pengelola file lokal/jarak jauh secara bersamaan. Kurangi nilai ini jika server Anda membatasi saluran SFTP." }, "confirmBeforeTrash": { - "label": "Confirm before moving files to trash", - "description": "Ask before moving remote files to trash. Permanent deletion still requires confirmation." + "label": "Konfirmasikan sebelum memindahkan file ke tempat sampah", + "description": "Mintalah izin sebelum memindahkan file jarak jauh ke tempat sampah. Penghapusan permanen tetap memerlukan konfirmasi." } } }, "hostCapability": { - "label": "File Manager" + "label": "Pengelola File" }, "fileManager": { - "noHostSelected": "No host selected", - "initializingEditor": "Initializing editor...", - "file": "File", - "folder": "Folder", - "uploadFile": "Upload File", - "downloadFile": "Download", - "extractArchive": "Extract Archive", - "extractingArchive": "Extracting {{name}}...", - "archiveExtractedSuccessfully": "{{name}} extracted successfully", - "extractFailed": "Extract failed", - "compressFile": "Compress File", - "compressFiles": "Compress Files", - "compressFilesDesc": "Compress {{count}} items into an archive", - "archiveName": "Archive Name", - "enterArchiveName": "Enter archive name...", - "compressionFormat": "Compression Format", - "selectedFiles": "Selected files", - "andMoreFiles": "and {{count}} more...", - "compress": "Compress", - "compressingFiles": "Compressing {{count}} items into {{name}}...", - "filesCompressedSuccessfully": "{{name}} created successfully", - "compressFailed": "Compression failed", + "noHostSelected": "Tidak ada pembawa acara yang dipilih.", + "initializingEditor": "Menginisialisasi editor...", + "file": "Mengajukan", + "folder": "Map", + "uploadFile": "Unggah File", + "downloadFile": "Unduh", + "extractArchive": "Ekstrak Arsip", + "extractingArchive": "Mengekstrak {{name}}...", + "archiveExtractedSuccessfully": "{{name}} berhasil diekstrak", + "extractFailed": "Ekstraksi gagal", + "compressFile": "Kompres File", + "compressFiles": "Kompres File", + "compressFilesDesc": "Kompres {{count}} item ke dalam arsip", + "archiveName": "Nama Arsip", + "enterArchiveName": "Masukkan nama arsip...", + "compressionFormat": "Format Kompresi", + "selectedFiles": "File terpilih", + "andMoreFiles": "dan {{count}} lainnya...", + "compress": "Kompres", + "compressingFiles": "Mengompres {{count}} item menjadi {{name}}...", + "filesCompressedSuccessfully": "{{name}} berhasil dibuat", + "compressFailed": "Kompresi gagal", "edit": "Edit", - "preview": "Preview", - "previous": "Previous", - "next": "Next", - "pageXOfY": "Page {{current}} of {{total}}", - "zoomOut": "Zoom Out", - "zoomIn": "Zoom In", - "newFile": "New File", - "newFolder": "New Folder", - "rename": "Rename", - "uploading": "Uploading...", - "uploadingFile": "Uploading {{name}}...", - "uploadingChunk": "Uploading {{name}}: {{percent}}% (part {{chunk}} of {{total}})", - "fileName": "File Name", - "folderName": "Folder Name", - "fileUploadedSuccessfully": "File \"{{name}}\" uploaded successfully", - "failedToUploadFile": "Failed to upload file", - "uploadingFolderFiles": "Uploading {{count}} file(s)...", - "uploadedFolderFiles": "Uploaded {{count}} file(s) successfully", - "uploadedFolderPartial": "Uploaded {{uploaded}} file(s), {{failed}} failed", - "fileDownloadedSuccessfully": "File \"{{name}}\" downloaded successfully", - "failedToDownloadFile": "Failed to download file", - "fileCreatedSuccessfully": "File \"{{name}}\" created successfully", - "folderCreatedSuccessfully": "Folder \"{{name}}\" created successfully", - "failedToCreateItem": "Failed to create item", - "operationFailed": "{{operation}} operation failed for {{name}}: {{error}}", - "failedToResolveSymlink": "Failed to resolve symlink", - "itemsDeletedSuccessfully": "{{count}} items deleted successfully", - "failedToDeleteItems": "Failed to delete items", - "sudoPasswordRequired": "Administrator Password Required", - "enterSudoPassword": "Enter sudo password to continue this operation", - "sudoPassword": "Sudo password", - "sudoOperationFailed": "Sudo operation failed", - "sudoAuthFailed": "Sudo authentication failed", - "dragFilesToUpload": "Drop files here to upload", - "dropToUploadHere": "Drop to upload here", - "dropToDownloadHere": "Drop to download here", - "localFiles": "Local", - "showLocalFiles": "Show local files (split view)", - "hideLocalFiles": "Hide local files", - "localHome": "Home folder", - "localPathPlaceholder": "Local folder path", - "localShowHidden": "Show hidden files", - "localHideHidden": "Hide hidden files", - "localRevealInFileManager": "Reveal in system file manager", - "localCannotOpenFolder": "Cannot open folder", - "localItemCount": "{{count}} items", - "localSelectedCount": "{{count}} selected", - "back": "Back", - "forward": "Forward", - "up": "Up", - "kind": "Kind", - "localUploadingProgress": "Uploading {{current}} of {{total}}", - "localDownloadingProgress": "Downloading {{current}} of {{total}}", - "localTransferInFlight": "{{count}} at once", - "localPreparingDownload": "Preparing download...", - "localTransferCancelled": "Transfer cancelled", - "localNothingToTransfer": "Nothing to transfer", - "localUploadComplete": "Uploaded {{count}} file(s)", - "localUploadFailed": "Upload failed", - "localUploadPartial": "Uploaded {{done}} file(s), {{failed}} failed", - "localDownloadComplete": "Downloaded {{count}} file(s)", - "localDownloadFailed": "Download failed", - "localDownloadPartial": "Downloaded {{done}} file(s), {{failed}} failed", - "localReplaceExistingPrompt": "{{count}} item(s) already exist in this folder. Replace them?", - "localReplace": "Replace", - "localSkipExisting": "Skip", - "localSkippedExisting": "Skipped {{count}} existing item(s)", - "localUnsafeNamesSkipped": "Skipped {{count}} item(s) whose names cannot be used on this computer", - "localOpen": "Open", - "localOpenFolder": "Open folder", - "localUploadToRemote": "Upload to server", - "localUploadToRemoteMany": "Upload {{count}} items to server", - "localMoveToTrash": "Move to Trash", - "localMoveToTrashMany": "Move {{count}} items to Trash", - "localTrashConfirmSingle": "Move \"{{name}}\" to the Trash?", - "localTrashConfirmFolder": "Move the folder \"{{name}}\" and all its contents to the Trash?", - "localTrashConfirmMany": "Move {{count}} items to the Trash?", - "localTrashed": "Moved {{count}} item(s) to the Trash", - "localTrashFailed": "Could not move to the Trash", - "localRenameFailed": "Rename failed", - "localCreateFailed": "Could not create item", - "goToParentFolder": "Go to parent folder", - "resizeSidebar": "Drag to resize the sidebar (double-click to reset)", - "resizeLocalPane": "Drag to resize the local pane (double-click to reset)", - "columns": "Columns", - "columnsHint": "Right-click to choose columns", - "emptyFolder": "This folder is empty", - "searchFiles": "Search files...", - "upload": "Upload", - "selectHostToStart": "Select a host to start file management", - "sshRequiredForFileManager": "File manager requires SSH. This host does not have SSH enabled.", - "failedToConnect": "Failed to connect to SSH", - "failedToLoadDirectory": "Failed to load directory", - "noSSHConnection": "No SSH connection available", - "copy": "Copy", - "cut": "Cut", - "paste": "Paste", - "copyPath": "Copy Path", - "copyPaths": "Copy Paths", - "delete": "Delete", - "properties": "Properties", - "refresh": "Refresh", - "downloadFiles": "Download {{count}} files to Browser", - "copyFiles": "Copy {{count}} items", - "cutFiles": "Cut {{count}} items", - "deleteFiles": "Delete {{count}} items", - "filesCopiedToClipboard": "{{count}} items copied to clipboard", - "filesCutToClipboard": "{{count}} items cut to clipboard", - "pathCopiedToClipboard": "Path copied to clipboard", - "pathsCopiedToClipboard": "{{count}} paths copied to clipboard", - "failedToCopyPath": "Failed to copy path to clipboard", - "copyFolderLink": "Copy Link to Folder", - "copyCurrentFolderLink": "Copy Link to Current Folder", - "folderLinkCopied": "Folder link copied to clipboard", - "failedToCopyFolderLink": "Failed to copy folder link", - "movedItems": "Moved {{count}} items", - "failedToDeleteItem": "Failed to delete item", - "itemRenamedSuccessfully": "{{type}} renamed successfully", - "failedToRenameItem": "Failed to rename item", - "download": "Download", - "openExternalEditor": "Open externally", - "chooseExternalEditor": "Choose external editor", - "externalEditorSelected": "External editor selected", - "externalEditorDesktopOnly": "External editor is only available in the desktop app", - "externalEditorOpened": "Opened in external editor. Saving there will upload changes back to the server.", - "failedToOpenExternalEditor": "Failed to open external editor", - "failedToSelectExternalEditor": "Failed to select external editor", - "permissions": "Permissions", - "size": "Size", - "modified": "Modified", - "path": "Path", - "confirmDelete": "Are you sure you want to delete {{name}}?", - "permissionDenied": "Permission denied", - "serverError": "Server Error", - "fileSavedSuccessfully": "File saved successfully", - "failedToSaveFile": "Failed to save file", - "confirmDeleteSingleItem": "Are you sure you want to permanently delete \"{{name}}\"?", - "confirmDeleteMultipleItems": "Are you sure you want to permanently delete {{count}} items?", - "confirmDeleteMultipleItemsWithFolders": "Are you sure you want to permanently delete {{count}} items? This includes folders and their contents.", - "confirmDeleteFolder": "Are you sure you want to permanently delete the folder \"{{name}}\" and all its contents?", - "permanentDeleteWarning": "This action cannot be undone. The item(s) will be permanently deleted from the server.", - "moveToTrashWarning": "The item(s) will be moved to the Termix Trash and can be restored before the retention period expires.", - "itemsMovedToTrash": "{{count}} item(s) moved to Trash", - "trash": "Trash", - "trashDescription": "Deleted items are retained for {{days}} day(s) on this host.", - "trashLoadFailed": "Failed to load Trash", - "trashEmpty": "Trash is empty", - "trashRestore": "Restore", - "trashRestored": "Restored {{name}}", - "trashRestoreFailed": "Failed to restore item. The original path may already exist.", - "trashDeletePermanently": "Delete permanently", - "trashDeleteConfirm": "Permanently delete {{name}}? This cannot be undone.", - "trashPermanentlyDeleted": "Permanently deleted {{name}}", - "trashDeleteFailed": "Failed to permanently delete item", - "trashEmptyAction": "Empty Trash", - "trashEmptyConfirm": "Permanently delete every item in Trash? This cannot be undone.", - "trashEmptied": "Trash emptied", - "trashRetention": "Automatic cleanup after (days)", - "trashRetentionSaved": "Trash retention updated", - "trashRetentionFailed": "Failed to update Trash retention", - "trashUnavailableConfirm": "This item cannot be moved to Trash, usually because it is on another filesystem or requires elevated permissions. Delete it permanently instead?", - "recent": "Recent", - "pinned": "Pinned", - "folderShortcuts": "Folder Shortcuts", - "failedToReconnectSSH": "Failed to reconnect SSH session", - "openTerminalHere": "Open Terminal Here", - "run": "Run", - "openTerminalInFolder": "Open Terminal in This Folder", - "openTerminalInFileLocation": "Open Terminal at File Location", - "runningFile": "Running - {{file}}", - "onlyRunExecutableFiles": "Can only run executable files", - "directories": "Directories", - "removedFromRecentFiles": "Removed \"{{name}}\" from recent files", - "removeFailed": "Remove failed", - "unpinnedSuccessfully": "Unpinned \"{{name}}\" successfully", - "unpinFailed": "Unpin failed", - "removedShortcut": "Removed shortcut \"{{name}}\"", - "removeShortcutFailed": "Remove shortcut failed", - "clearedAllRecentFiles": "Cleared all recent files", - "clearFailed": "Clear failed", - "removeFromRecentFiles": "Remove from recent files", - "clearAllRecentFiles": "Clear all recent files", - "unpinFile": "Unpin file", - "removeShortcut": "Remove shortcut", + "preview": "Pratinjau", + "previous": "Sebelumnya", + "next": "Berikutnya", + "pageXOfY": "Halaman {{current}} dari {{total}}", + "zoomOut": "Perkecil tampilan", + "zoomIn": "Perbesar", + "newFile": "Berkas Baru", + "newFolder": "Folder Baru", + "rename": "Ganti nama", + "uploading": "Sedang mengunggah...", + "uploadingFile": "Mengunggah {{name}}...", + "uploadingChunk": "Mengunggah {{name}}: {{percent}}% (bagian {{chunk}} dari {{total}})", + "fileName": "Nama File", + "folderName": "Nama Folder", + "fileUploadedSuccessfully": "Berkas \"{{name}}\" berhasil diunggah", + "failedToUploadFile": "Gagal mengunggah file", + "uploadingFolderFiles": "Mengunggah {{count}} berkas...", + "uploadedFolderFiles": "Berhasil mengunggah {{count}} berkas", + "uploadedFolderPartial": "Pengunggahan {{uploaded}} berkas, {{failed}} gagal", + "fileDownloadedSuccessfully": "File \"{{name}}\" berhasil diunduh", + "failedToDownloadFile": "Gagal mengunduh file", + "fileCreatedSuccessfully": "File \"{{name}}\" berhasil dibuat", + "folderCreatedSuccessfully": "Folder \"{{name}}\" berhasil dibuat", + "failedToCreateItem": "Gagal membuat item", + "operationFailed": "Operasi {{operation}} gagal untuk {{name}}: {{error}}", + "failedToResolveSymlink": "Gagal menyelesaikan symlink", + "itemsDeletedSuccessfully": "{{count}} item berhasil dihapus", + "failedToDeleteItems": "Gagal menghapus item", + "sudoPasswordRequired": "Kata Sandi Administrator Diperlukan", + "enterSudoPassword": "Masukkan kata sandi sudo untuk melanjutkan operasi ini.", + "sudoPassword": "Kata sandi Sudo", + "sudoOperationFailed": "Operasi Sudo gagal", + "sudoAuthFailed": "Autentikasi Sudo gagal", + "dragFilesToUpload": "Seret file ke sini untuk mengunggah", + "dropToUploadHere": "Unggah di sini", + "dropToDownloadHere": "Klik di sini untuk mengunduh.", + "localFiles": "Lokal", + "showLocalFiles": "Tampilkan file lokal (tampilan terpisah)", + "hideLocalFiles": "Sembunyikan file lokal", + "localHome": "Folder beranda", + "localPathPlaceholder": "Jalur folder lokal", + "localShowHidden": "Tampilkan file tersembunyi", + "localHideHidden": "Sembunyikan file tersembunyi", + "localRevealInFileManager": "Ungkapkan di pengelola file sistem", + "localCannotOpenFolder": "Tidak dapat membuka folder", + "localItemCount": "{{count}} item", + "localSelectedCount": "{{count}} terpilih", + "back": "Kembali", + "forward": "Maju", + "up": "Ke atas", + "kind": "Baik", + "localUploadingProgress": "Mengunggah {{current}} dari {{total}}", + "localDownloadingProgress": "Mengunduh {{current}} dari {{total}}", + "localTransferInFlight": "{{count}} sekaligus", + "localPreparingDownload": "Mempersiapkan pengunduhan...", + "localTransferCancelled": "Transfer dibatalkan", + "localNothingToTransfer": "Tidak ada yang perlu ditransfer", + "localUploadComplete": "Berkas {{count}} telah diunggah", + "localUploadFailed": "Unggahan gagal", + "localUploadPartial": "Pengunggahan {{done}} berkas, {{failed}} gagal", + "localDownloadComplete": "Berkas {{count}} telah diunduh", + "localDownloadFailed": "Pengunduhan gagal", + "localDownloadPartial": "Pengunduhan {{done}} berkas, {{failed}} gagal", + "localReplaceExistingPrompt": "{{count}} item sudah ada di folder ini. Ganti item tersebut?", + "localReplace": "Mengganti", + "localSkipExisting": "Melewati", + "localSkippedExisting": "Melewati {{count}} item yang sudah ada", + "localUnsafeNamesSkipped": "Melewati {{count}} item karena namanya tidak dapat digunakan di komputer ini", + "localOpen": "Membuka", + "localOpenFolder": "Buka folder", + "localUploadToRemote": "Unggah ke server", + "localUploadToRemoteMany": "Unggah {{count}} item ke server", + "localMoveToTrash": "Pindahkan ke Tempat Sampah", + "localMoveToTrashMany": "Pindahkan {{count}} item ke Sampah", + "localTrashConfirmSingle": "Pindahkan \"{{name}}\" ke Sampah?", + "localTrashConfirmFolder": "Pindahkan folder \"{{name}}\" beserta seluruh isinya ke Sampah?", + "localTrashConfirmMany": "Pindahkan {{count}} item ke Sampah?", + "localTrashed": "Memindahkan {{count}} item ke Sampah", + "localTrashFailed": "Tidak bisa dipindahkan ke tempat sampah", + "localRenameFailed": "Penggantian nama gagal", + "localCreateFailed": "Tidak dapat membuat item", + "goToParentFolder": "Buka folder induk", + "resizeSidebar": "Seret untuk mengubah ukuran bilah sisi (klik dua kali untuk mengatur ulang)", + "resizeLocalPane": "Seret untuk mengubah ukuran panel lokal (klik dua kali untuk mengatur ulang)", + "columns": "Kolom", + "columnsHint": "Klik kanan untuk memilih kolom", + "emptyFolder": "Folder ini kosong", + "searchFiles": "Cari file...", + "upload": "Mengunggah", + "selectHostToStart": "Pilih host untuk memulai manajemen file.", + "sshRequiredForFileManager": "Pengelola file memerlukan SSH. Host ini tidak mengaktifkan SSH.", + "failedToConnect": "Gagal terhubung ke SSH", + "failedToLoadDirectory": "Gagal memuat direktori", + "noSSHConnection": "Tidak ada koneksi SSH yang tersedia.", + "copy": "Menyalin", + "cut": "Memotong", + "paste": "Pasta", + "copyPath": "Salin Jalur", + "copyPaths": "Salin Jalur", + "delete": "Menghapus", + "properties": "Properti", + "refresh": "Menyegarkan", + "downloadFiles": "Unduh {{count}} file ke Browser", + "copyFiles": "Salin {{count}} item", + "cutFiles": "Potong {{count}} item", + "deleteFiles": "Hapus {{count}} item", + "filesCopiedToClipboard": "{{count}} item disalin ke papan klip", + "filesCutToClipboard": "{{count}} item dipotong ke papan klip", + "pathCopiedToClipboard": "Jalur disalin ke papan klip", + "pathsCopiedToClipboard": "{{count}} jalur disalin ke papan klip", + "failedToCopyPath": "Gagal menyalin jalur ke papan klip.", + "copyFolderLink": "Salin Tautan ke Folder", + "copyCurrentFolderLink": "Salin Tautan ke Folder Saat Ini", + "folderLinkCopied": "Tautan folder disalin ke papan klip", + "failedToCopyFolderLink": "Gagal menyalin tautan folder", + "movedItems": "Memindahkan {{count}} item", + "failedToDeleteItem": "Gagal menghapus item", + "itemRenamedSuccessfully": "{{type}} berhasil diganti namanya", + "failedToRenameItem": "Gagal mengganti nama item", + "download": "Unduh", + "openExternalEditor": "Buka secara eksternal", + "chooseExternalEditor": "Pilih editor eksternal", + "externalEditorSelected": "Editor eksternal terpilih", + "externalEditorDesktopOnly": "Editor eksternal hanya tersedia di aplikasi desktop.", + "externalEditorOpened": "Dibuka di editor eksternal. Menyimpan di sana akan mengunggah perubahan kembali ke server.", + "failedToOpenExternalEditor": "Gagal membuka editor eksternal", + "failedToSelectExternalEditor": "Gagal memilih editor eksternal", + "permissions": "Izin", + "size": "Ukuran", + "modified": "Dimodifikasi", + "path": "Jalur", + "confirmDelete": "Apakah Anda yakin ingin menghapus {{name}}?", + "permissionDenied": "Izin ditolak", + "serverError": "Kesalahan Server", + "fileSavedSuccessfully": "Berkas berhasil disimpan.", + "failedToSaveFile": "Gagal menyimpan file", + "confirmDeleteSingleItem": "Apakah Anda yakin ingin menghapus \"{{name}} \" secara permanen?", + "confirmDeleteMultipleItems": "Apakah Anda yakin ingin menghapus {{count}} item secara permanen?", + "confirmDeleteMultipleItemsWithFolders": "Apakah Anda yakin ingin menghapus {{count}} item secara permanen? Ini termasuk folder dan isinya.", + "confirmDeleteFolder": "Apakah Anda yakin ingin menghapus folder \"{{name}}\" beserta seluruh isinya secara permanen?", + "permanentDeleteWarning": "Tindakan ini tidak dapat dibatalkan. Item tersebut akan dihapus secara permanen dari server.", + "moveToTrashWarning": "Item tersebut akan dipindahkan ke Tempat Sampah Termix dan dapat dipulihkan sebelum masa penyimpanan berakhir.", + "itemsMovedToTrash": "{{count}} item dipindahkan ke Sampah", + "trash": "Sampah", + "trashDescription": "Item yang dihapus akan tetap tersimpan selama {{days}} hari di host ini.", + "trashLoadFailed": "Gagal memuat Sampah", + "trashEmpty": "Tempat sampah sudah kosong", + "trashRestore": "Memulihkan", + "trashRestored": "Dipulihkan {{name}}", + "trashRestoreFailed": "Gagal memulihkan item. Jalur asli mungkin sudah ada.", + "trashDeletePermanently": "Hapus secara permanen", + "trashDeleteConfirm": "Hapus secara permanen {{name}}? Tindakan ini tidak dapat dibatalkan.", + "trashPermanentlyDeleted": "Dihapus secara permanen {{name}}", + "trashDeleteFailed": "Gagal menghapus item secara permanen.", + "trashEmptyAction": "Kosongkan Tempat Sampah", + "trashEmptyConfirm": "Menghapus semua item di Sampah secara permanen? Tindakan ini tidak dapat dibatalkan.", + "trashEmptied": "Sampah sudah dikosongkan", + "trashRetention": "Pembersihan otomatis setelah (hari)", + "trashRetentionSaved": "Pembaruan tentang retensi sampah", + "trashRetentionFailed": "Gagal memperbarui pengaturan penyimpanan sampah.", + "trashUnavailableConfirm": "Item ini tidak dapat dipindahkan ke Sampah, biasanya karena berada di sistem file lain atau memerlukan hak akses administrator. Hapus saja secara permanen?", + "recent": "Terkini", + "pinned": "Disematkan", + "folderShortcuts": "Pintasan Folder", + "failedToReconnectSSH": "Gagal menyambungkan kembali sesi SSH.", + "openTerminalHere": "Buka Terminal di Sini", + "run": "Berlari", + "openTerminalInFolder": "Buka Terminal di Folder Ini", + "openTerminalInFileLocation": "Buka Terminal di Lokasi File", + "runningFile": "Berlari - {{file}}", + "onlyRunExecutableFiles": "Hanya dapat menjalankan file yang dapat dieksekusi.", + "directories": "Direktori", + "removedFromRecentFiles": "Menghapus \"{{name}}\" dari file terbaru", + "removeFailed": "Hapus yang gagal", + "unpinnedSuccessfully": "Pin \"{{name}}\" berhasil dilepas", + "unpinFailed": "Gagal membuka pin", + "removedShortcut": "Pintasan \"{{name}} \" telah dihapus", + "removeShortcutFailed": "Penghapusan pintasan gagal.", + "clearedAllRecentFiles": "Semua file terbaru telah dihapus.", + "clearFailed": "Hapus gagal", + "removeFromRecentFiles": "Hapus dari berkas terbaru", + "clearAllRecentFiles": "Hapus semua file terbaru", + "unpinFile": "Lepaskan pin file", + "removeShortcut": "Hapus pintasan", "pinFile": "Pin file", - "addToShortcuts": "Add to shortcuts", - "pasteFailed": "Paste failed", - "noUndoableActions": "No undoable actions", - "undoCopySuccess": "Undid copy operation: Deleted {{count}} copied files", - "undoCopyFailedDelete": "Undo failed: Could not delete any copied files", - "undoCopyFailedNoInfo": "Undo failed: Could not find copied file information", - "undoMoveSuccess": "Undid move operation: Moved {{count}} files back to original location", - "undoMoveFailedMove": "Undo failed: Could not move any files back", - "undoMoveFailedNoInfo": "Undo failed: Could not find moved file information", - "undoDeleteNotSupported": "Delete operation cannot be undone: Files have been permanently deleted from server", - "undoTypeNotSupported": "Unsupported undo operation type", - "undoOperationFailed": "Undo operation failed", - "unknownError": "Unknown error", - "confirm": "Confirm", - "find": "Find...", - "replace": "Replace", - "downloadInstead": "Download Instead", - "keyboardShortcuts": "Keyboard Shortcuts", - "searchAndReplace": "Search & Replace", - "editing": "Editing", - "search": "Search", - "findNext": "Find Next", - "findPrevious": "Find Previous", - "save": "Save", - "selectAll": "Select All", - "undo": "Undo", - "redo": "Redo", - "moveLineUp": "Move Line Up", - "moveLineDown": "Move Line Down", - "toggleComment": "Toggle Comment", - "autoComplete": "Auto Complete", - "imageLoadError": "Failed to load image", - "startTyping": "Start typing...", - "unknownSize": "Unknown size", - "fileIsEmpty": "File is empty", - "largeFileWarning": "Large File Warning", - "largeFileWarningDesc": "This file is {{size}} in size, which may cause performance issues when opened as text.", - "fileNotFoundAndRemoved": "File \"{{name}}\" not found and has been removed from recent/pinned files", - "failedToLoadFile": "Failed to load file: {{error}}", - "serverErrorOccurred": "Server error occurred. Please try again later.", - "autoSaveFailed": "Auto-save failed", - "fileAutoSaved": "File auto-saved", - "moveFileFailed": "Failed to move {{name}}", - "moveOperationFailed": "Move operation failed", - "canOnlyCompareFiles": "Can only compare two files", - "comparingFiles": "Comparing files: {{file1}} and {{file2}}", - "dragFailed": "Drag operation failed", - "filePinnedSuccessfully": "File \"{{name}}\" pinned successfully", - "pinFileFailed": "Failed to pin file", - "fileUnpinnedSuccessfully": "File \"{{name}}\" unpinned successfully", - "unpinFileFailed": "Failed to unpin file", - "shortcutAddedSuccessfully": "Folder shortcut \"{{name}}\" added successfully", - "addShortcutFailed": "Failed to add shortcut", - "operationCompletedSuccessfully": "{{operation}} {{count}} items successfully", - "operationCompleted": "{{operation}} {{count}} items", - "downloadFileSuccess": "File {{name}} downloaded successfully", - "downloadFileFailed": "Download failed", - "downloadingFile": "Downloading {{name}}…", + "addToShortcuts": "Tambahkan ke pintasan", + "pasteFailed": "Pasta gagal", + "noUndoableActions": "Tidak ada tindakan yang tidak dapat dibatalkan.", + "undoCopySuccess": "Batalkan operasi penyalinan: Menghapus {{count}} file yang disalin", + "undoCopyFailedDelete": "Pembatalan gagal: Tidak dapat menghapus file yang disalin.", + "undoCopyFailedNoInfo": "Pembatalan gagal: Informasi file yang disalin tidak ditemukan.", + "undoMoveSuccess": "Operasi pemindahan dibatalkan: {{count}} berkas dipindahkan kembali ke lokasi semula", + "undoMoveFailedMove": "Pembatalan gagal: Tidak dapat memindahkan file apa pun kembali.", + "undoMoveFailedNoInfo": "Pembatalan gagal: Informasi file yang dipindahkan tidak ditemukan.", + "undoDeleteNotSupported": "Operasi penghapusan tidak dapat dibatalkan: File telah dihapus secara permanen dari server.", + "undoTypeNotSupported": "Jenis operasi undo yang tidak didukung", + "undoOperationFailed": "Operasi pembatalan gagal", + "unknownError": "Kesalahan tidak dikenal", + "confirm": "Mengonfirmasi", + "find": "Menemukan...", + "replace": "Mengganti", + "downloadInstead": "Unduh sebagai gantinya", + "keyboardShortcuts": "Pintasan Keyboard", + "searchAndReplace": "Cari & Ganti", + "editing": "Pengeditan", + "search": "Mencari", + "findNext": "Temukan Selanjutnya", + "findPrevious": "Temukan Sebelumnya", + "save": "Menyimpan", + "selectAll": "Pilih Semua", + "undo": "Membuka", + "redo": "Mengulangi", + "moveLineUp": "Susunan Langkah", + "moveLineDown": "Geser Garis ke Bawah", + "toggleComment": "Alihkan Komentar", + "autoComplete": "Pelengkapan Otomatis", + "imageLoadError": "Gambar gagal dimuat", + "startTyping": "Mulai mengetik...", + "unknownSize": "Ukuran tidak diketahui", + "fileIsEmpty": "Berkas kosong", + "largeFileWarning": "Peringatan Ukuran File Besar", + "largeFileWarningDesc": "File ini berukuran {{size}} , yang dapat menyebabkan masalah kinerja saat dibuka sebagai teks.", + "fileNotFoundAndRemoved": "Berkas \"{{name}}\" tidak ditemukan dan telah dihapus dari berkas terbaru/yang disematkan", + "failedToLoadFile": "Gagal memuat file: {{error}}", + "serverErrorOccurred": "Terjadi kesalahan server. Silakan coba lagi nanti.", + "autoSaveFailed": "Penyimpanan otomatis gagal", + "fileAutoSaved": "Berkas tersimpan otomatis", + "moveFileFailed": "Gagal memindahkan {{name}}", + "moveOperationFailed": "Operasi pemindahan gagal", + "canOnlyCompareFiles": "Hanya dapat membandingkan dua file.", + "comparingFiles": "Membandingkan berkas: {{file1}} dan {{file2}}", + "dragFailed": "Operasi seret gagal", + "filePinnedSuccessfully": "Berkas \"{{name}}\" berhasil disematkan", + "pinFileFailed": "Gagal menyematkan file", + "fileUnpinnedSuccessfully": "Berkas \"{{name}}\" berhasil dilepas dari pin", + "unpinFileFailed": "Gagal melepaskan pin file", + "shortcutAddedSuccessfully": "Pintasan folder \"{{name}}\" berhasil ditambahkan", + "addShortcutFailed": "Gagal menambahkan pintasan", + "operationCompletedSuccessfully": "{{operation}} {{count}} item berhasil", + "operationCompleted": "{{operation}} {{count}} item", + "downloadFileSuccess": "File {{name}} berhasil diunduh", + "downloadFileFailed": "Pengunduhan gagal", + "downloadingFile": "Mengunduh {{name}}…", "downloadProgressBytes": "{{transferred}} / {{total}}", - "moveTo": "Move to {{name}}", - "diffCompareWith": "Diff compare with {{name}}", - "dragOutsideToDownload": "Drag outside window to download ({{count}} files)", - "newFolderDefault": "NewFolder", - "newFileDefault": "NewFile.txt", - "successfullyMovedItems": "Successfully moved {{count}} items to {{target}}", - "move": "Move", - "searchInFile": "Search in file (Ctrl+F)", - "showKeyboardShortcuts": "Show keyboard shortcuts", - "decreaseFontSize": "Decrease font size", - "increaseFontSize": "Increase font size", - "startWritingMarkdown": "Start writing your markdown content...", - "loadingFileComparison": "Loading file comparison...", + "moveTo": "Pindah ke {{name}}", + "diffCompareWith": "Bandingkan perbedaan dengan {{name}}", + "dragOutsideToDownload": "Seret ke luar jendela untuk mengunduh ({{count}} file)", + "newFolderDefault": "Folder Baru", + "newFileDefault": "File Baru.txt", + "successfullyMovedItems": "Berhasil memindahkan {{count}} item ke {{target}}", + "move": "Bergerak", + "searchInFile": "Cari di dalam file (Ctrl+F)", + "showKeyboardShortcuts": "Tampilkan pintasan keyboard", + "decreaseFontSize": "Kurangi ukuran font", + "increaseFontSize": "Perbesar ukuran font", + "startWritingMarkdown": "Mulailah menulis konten markdown Anda...", + "loadingFileComparison": "Sedang memuat perbandingan file...", "reload": "Muat Ulang", - "compare": "Compare", - "sideBySide": "Side by Side", - "inline": "Inline", - "fileComparison": "File Comparison: {{file1}} vs {{file2}}", - "fileTooLarge": "File too large: {{error}}", - "sshConnectionFailed": "SSH connection failed. Please check your connection to {{name}} ({{ip}}:{{port}})", - "loadFileFailed": "Failed to load file: {{error}}", - "connecting": "Connecting...", - "connectedSuccessfully": "Connected successfully", - "totpVerificationFailed": "TOTP verification failed", - "browserSignInFailed": "Sign-in failed. Please try again.", - "authenticationFailed": "Authentication failed", - "incorrectPassphrase": "Incorrect passphrase. Please try again.", - "verificationCodePrompt": "Verification code:", - "changePermissions": "Change Permissions", - "currentPermissions": "Current Permissions", - "owner": "Owner", - "group": "Group", - "others": "Others", - "read": "Read", - "write": "Write", - "execute": "Execute", - "permissionsChangedSuccessfully": "Permissions changed successfully", - "failedToChangePermissions": "Failed to change permissions", - "name": "Name", - "sortByName": "Name", - "sortByDate": "Date Modified", - "sortBySize": "Size", - "ascending": "Ascending", - "descending": "Descending", - "root": "Root", - "new": "New", - "sortBy": "Sort By", - "items": "Items", - "selected": "Selected", + "compare": "Membandingkan", + "sideBySide": "Berdampingan", + "inline": "Sejajar", + "fileComparison": "Perbandingan File: {{file1}} vs {{file2}}", + "fileTooLarge": "File is too large (> 10MB) and cannot be opened as text for security reasons.", + "sshConnectionFailed": "Koneksi SSH gagal. Harap periksa koneksi Anda ke {{name}} ({{ip}}:{{port}})", + "loadFileFailed": "Gagal memuat file: {{error}}", + "connecting": "Menghubungkan...", + "connectedSuccessfully": "Terhubung berhasil", + "totpVerificationFailed": "Verifikasi TOTP gagal", + "browserSignInFailed": "Login gagal. Silakan coba lagi.", + "authenticationFailed": "Autentikasi gagal", + "incorrectPassphrase": "Kata sandi salah. Silakan coba lagi.", + "verificationCodePrompt": "Kode verifikasi:", + "changePermissions": "Ubah Izin", + "currentPermissions": "Izin Saat Ini", + "owner": "Pemilik", + "group": "Kelompok", + "others": "Yang lain", + "read": "Membaca", + "write": "Menulis", + "execute": "Menjalankan", + "permissionsChangedSuccessfully": "Izin berhasil diubah.", + "failedToChangePermissions": "Gagal mengubah izin", + "name": "Nama", + "sortByName": "Nama", + "sortByDate": "Tanggal Diubah", + "sortBySize": "Ukuran", + "ascending": "Naik", + "descending": "Menurun", + "root": "Akar", + "new": "Baru", + "sortBy": "Urutkan Berdasarkan", + "items": "Barang-barang", + "selected": "Terpilih", "editor": "Editor", - "octal": "Octal", - "storage": "Storage", + "octal": "Oktal", + "storage": "Penyimpanan", "disk": "Disk", - "used": "Used", - "of": "of", - "toggleSidebar": "Toggle Sidebar", - "compactLayout": "Use compact layout", - "comfortableLayout": "Use comfortable layout", - "cannotLoadPdf": "Cannot load PDF", - "pdfLoadError": "There was an error loading this PDF file.", - "loadingPdf": "Loading PDF...", - "loadingPage": "Loading page...", - "cancel": "Cancel", - "copiedItems_one": "Copied {{count}} item", - "copiedItems_other": "Copied {{count}} items", - "deleteCopiedFileFailed": "Could not delete the copy of {{name}}: {{error}}", - "dragMovedItems_one": "Moved {{count}} item to {{target}}", - "dragMovedItems_other": "Moved {{count}} items to {{target}}", - "moveBackFileFailed": "Could not move {{name}} back: {{error}}", + "used": "Digunakan", + "of": "dari", + "toggleSidebar": "Alihkan Sidebar", + "compactLayout": "Gunakan tata letak yang ringkas.", + "comfortableLayout": "Gunakan tata letak yang nyaman.", + "cannotLoadPdf": "Tidak dapat memuat PDF", + "pdfLoadError": "Terjadi kesalahan saat memuat file PDF ini.", + "loadingPdf": "Loading PDF viewer...", + "loadingPage": "Sedang memuat halaman...", + "cancel": "Membatalkan", + "copiedItems_one": "Item {{count}} disalin", + "copiedItems_other": "Item {{count}} disalin", + "deleteCopiedFileFailed": "Tidak dapat menghapus salinan {{name}}: {{error}}", + "dragMovedItems_one": "Item {{count}} dipindahkan ke {{target}}", + "dragMovedItems_other": "Memindahkan {{count}} item ke {{target}}", + "moveBackFileFailed": "Tidak dapat memindahkan {{name}} kembali: {{error}}", "terminal": "Terminal: {{host}} ({{path}})", - "dragToDesktop": "Dragging {{name}} to the desktop", - "dragFilesToDesktop": "Dragging {{count}} files to the desktop", - "folderDragUnsupported": "Dragging folders to the desktop is not supported yet", - "saveToDesktopFailed": "Save failed: {{error}}", - "dragFailedDetail": "Drag failed: {{error}}", - "videoUnsupported": "Your browser cannot play this video format.", - "downloadToPlay": "Download to play it elsewhere", - "cannotPreviewType": "Cannot preview this file type", - "cannotPreviewTypeHint": "This file type has no preview. Download it to open it in another app." + "dragToDesktop": "Menyeret {{name}} ke desktop", + "dragFilesToDesktop": "Menyeret {{count}} berkas ke desktop", + "folderDragUnsupported": "Menyeret folder ke desktop belum didukung.", + "saveToDesktopFailed": "Penyimpanan gagal: {{error}}", + "dragFailedDetail": "Seret gagal: {{error}}", + "videoUnsupported": "Browser Anda tidak dapat memutar format video ini.", + "downloadToPlay": "Unduh untuk memainkannya di tempat lain", + "cannotPreviewType": "Tidak dapat melihat pratinjau tipe file ini.", + "cannotPreviewTypeHint": "Jenis file ini tidak memiliki pratinjau. Unduh untuk membukanya di aplikasi lain.", + "loadingFile": "Loading file...", + "loadingImage": "Loading image...", + "loadingEditor": "Loading editor...", + "loadingPreview": "Loading preview...", + "loadingAudio": "Loading audio player...", + "emptyPreview": "Nothing to preview yet...", + "revert": "Revert", + "openAsText": "Open as Text", + "confirmOpenAsText": "Do you want to continue opening this file as text? This may slow down your browser." }, "sftpTransfer": { "title": "SFTP", - "description": "Transfer files between two SSH hosts.", - "sourceServer": "Source Server", - "destinationServer": "Destination Server", - "selectHost": "Select host", - "noHostSelected": "No host selected", - "move": "Move", - "copy": "Copy", - "upload": "Upload", - "itemsSelected": "{{count}} item selected", - "itemsSelected_other": "{{count}} items selected", - "ready": "Ready", - "loadingHosts": "Loading hosts...", - "name": "Name", - "modified": "Modified", - "size": "Size", - "noFiles": "No files", - "open": "Open", - "up": "Up", - "refresh": "Refresh", - "copyToTarget": "Copy to Target Directory", - "rename": "Rename", - "delete": "Delete", - "editPermissions": "Edit Permissions", - "createNewFolder": "Create New Folder", - "deleteSelectedItems": "Delete Selected Items", - "deleteConfirm": "Delete {{count}} selected item?", - "deleteConfirm_other": "Delete {{count}} selected items?", - "cancel": "Cancel", - "save": "Save", - "folderCreated": "Folder created", - "itemRenamed": "Item renamed", - "actionFailed": "Action failed", - "itemsDeleted": "{{count}} item deleted", - "itemsDeleted_other": "{{count}} items deleted", - "deleteFailed": "Delete failed", - "permissionsUpdated": "Permissions updated", - "noRemoteSessionConnected": "No remote session connected", - "failedToListFiles": "Failed to list files", - "failedToRefresh": "Failed to refresh", - "destinationInsideSource": "Destination cannot be inside the selected source path.", - "sameHostNoOp": "Source and destination are the same folder." + "description": "Mentransfer file antara dua host SSH.", + "sourceServer": "Server Sumber", + "destinationServer": "Server Tujuan", + "selectHost": "Pilih tuan rumah", + "noHostSelected": "Tidak ada pembawa acara yang dipilih.", + "move": "Bergerak", + "copy": "Menyalin", + "upload": "Mengunggah", + "itemsSelected": "{{count}} item dipilih", + "itemsSelected_other": "{{count}} item terpilih", + "ready": "Siap", + "loadingHosts": "Memuat host...", + "name": "Nama", + "modified": "Dimodifikasi", + "size": "Ukuran", + "noFiles": "Tidak ada berkas", + "open": "Membuka", + "up": "Ke atas", + "refresh": "Menyegarkan", + "copyToTarget": "Salin ke Direktori Target", + "rename": "Ganti nama", + "delete": "Menghapus", + "editPermissions": "Edit Izin", + "createNewFolder": "Buat Folder Baru", + "deleteSelectedItems": "Hapus Item yang Dipilih", + "deleteConfirm": "Hapus {{count}} item yang dipilih?", + "deleteConfirm_other": "Hapus {{count}} item yang dipilih?", + "cancel": "Membatalkan", + "save": "Menyimpan", + "folderCreated": "Folder telah dibuat.", + "itemRenamed": "Item diganti namanya", + "actionFailed": "Tindakan gagal", + "itemsDeleted": "{{count}} item dihapus", + "itemsDeleted_other": "{{count}} item dihapus", + "deleteFailed": "Penghapusan gagal", + "permissionsUpdated": "Izin telah diperbarui.", + "noRemoteSessionConnected": "Tidak ada sesi jarak jauh yang terhubung.", + "failedToListFiles": "Gagal menampilkan daftar file.", + "failedToRefresh": "Gagal memperbarui", + "destinationInsideSource": "Tujuan tidak boleh berada di dalam jalur sumber yang dipilih.", + "sameHostNoOp": "Sumber dan tujuan berada di folder yang sama." }, "hosts": { - "fileManager": "File Manager", - "fileManagerUrlCopied": "File Manager URL copied", - "copyFileManagerUrlAction": "Copy File Manager URL", - "docsLink": "View docs", - "hostNotFound": "Host not found", - "loadingHost": "Loading host..." + "fileManager": "Pengelola File", + "fileManagerUrlCopied": "URL Pengelola File disalin", + "copyFileManagerUrlAction": "Salin URL Pengelola File", + "docsLink": "Lihat dokumen", + "hostNotFound": "Host tidak ditemukan", + "loadingHost": "Memuat host..." }, "onboarding": { - "feature_files": "File manager", - "feature_files_desc": "Browse, upload, download and edit files over SFTP without leaving the app." + "feature_files": "Pengelola berkas", + "feature_files_desc": "Jelajahi, unggah, unduh, dan edit file melalui SFTP tanpa meninggalkan aplikasi." }, "terminal": { - "runTitle": "Running {{command}} - {{host}}", + "runTitle": "Menjalankan {{command}} - {{host}}", "terminalTitle": "Terminal - {{host}}", "terminalWithPath": "Terminal - {{host}}:{{path}}" }, "transfer": { - "browseFolders": "Browse destination folders", - "browsePathError": "Could not open this path on the destination host.", - "browsePathWillBeCreated": "This folder does not exist yet. It will be created when the transfer starts.", - "cancel": "Cancel", - "cleanupDestFiles": "Clean up destination", - "cleanupDestFilesError": "Cleanup failed", - "cleanupDestFilesNothing": "Nothing to clean up on the destination", - "cleanupDestFilesPartial": "Some partial files could not be removed", - "cleanupDestFilesSuccess": "Removed partial files from the destination", - "confirmCopy": "Copy", - "confirmMove": "Move", - "copyFolderToHost": "Copy folder to host…", - "copyItemsToHost": "Copy {{count}} items to host…", - "copyToHost": "Copy to host…", - "destinationPath": "Destination path", - "destMustBeDirectory": "Destination must be a directory for multi-item transfers", - "goUp": "Go up", - "hostAuthRequired": "Authentication required. Open File Manager on this host first", - "hostConnecting": "Connecting…", - "hostConnectionFailed": "Connection failed", - "hostDisconnected": "Not connected", - "hostReady": "Ready", - "itemsSummary": "{{count}} items", - "jumpHostLimitation": "Both hosts must be reachable from the Termix server. Direct host-to-host routing is not supported.", - "methodAuto": "Auto", - "methodAutoHint": "Picks tar or per-file SFTP based on file count, size, and compressibility. Single files always use streaming SFTP.", - "methodItemSftp": "Per-file SFTP", - "methodItemSftpHint": "Transfer each file individually over SFTP. Works on all hosts including Windows.", - "methodItemSftpLimitation": "Each file uses the same SFTP stream as a single-file copy, one after another. Progress is combined across all files, so the bar moves slowly during large files.", - "methodLabel": "Transfer method", - "methodPreviewError": "Could not preview transfer method. The server will still pick a method when you start.", - "methodPreviewLoading": "Calculating transfer method…", - "methodPreviewScanSummary": "{{fileCount}} files, {{totalSize}} total (scanned on source host).", - "methodPreviewWillUseItemSftp": "Will use: Per-file SFTP", - "methodPreviewWillUseTar": "Will use: Tar archive", + "browseFolders": "Telusuri folder tujuan", + "browsePathError": "Tidak dapat membuka jalur ini pada host tujuan.", + "browsePathWillBeCreated": "Folder ini belum ada. Folder ini akan dibuat saat transfer dimulai.", + "cancel": "Membatalkan", + "cleanupDestFiles": "Tujuan pembersihan", + "cleanupDestFilesError": "Pembersihan gagal", + "cleanupDestFilesNothing": "Tidak ada yang perlu dibersihkan di tempat tujuan.", + "cleanupDestFilesPartial": "Beberapa file parsial tidak dapat dihapus.", + "cleanupDestFilesSuccess": "File parsial telah dihapus dari tujuan.", + "confirmCopy": "Menyalin", + "confirmMove": "Bergerak", + "copyFolderToHost": "Salin folder ke host…", + "copyItemsToHost": "Salin {{count}} item ke host…", + "copyToHost": "Salin ke host…", + "destinationPath": "Jalur tujuan", + "destMustBeDirectory": "Tujuan harus berupa direktori untuk transfer multi-item.", + "goUp": "Naik", + "hostAuthRequired": "Diperlukan autentikasi. Buka File Manager di host ini terlebih dahulu.", + "hostConnecting": "Menghubungkan…", + "hostConnectionFailed": "Koneksi gagal", + "hostDisconnected": "Tidak terhubung", + "hostReady": "Siap", + "itemsSummary": "{{count}} item", + "jumpHostLimitation": "Kedua host harus dapat dijangkau dari server Termix. Perutean langsung antar host tidak didukung.", + "methodAuto": "Mobil", + "methodAutoHint": "Memilih antara tar atau SFTP per-file berdasarkan jumlah file, ukuran, dan kemampuan kompresi. File tunggal selalu menggunakan SFTP streaming.", + "methodItemSftp": "SFTP per file", + "methodItemSftpHint": "Transfer setiap file secara individual melalui SFTP. Berfungsi di semua host termasuk Windows.", + "methodItemSftpLimitation": "Setiap berkas menggunakan aliran SFTP yang sama sebagai salinan berkas tunggal, satu demi satu. Kemajuan digabungkan di semua berkas, sehingga bilah kemajuan bergerak lambat selama pemrosesan berkas berukuran besar.", + "methodLabel": "Metode transfer", + "methodPreviewError": "Metode transfer tidak dapat dipratinjau. Server akan tetap memilih metode saat Anda memulai.", + "methodPreviewLoading": "Metode perhitungan transfer…", + "methodPreviewScanSummary": "{{fileCount}} berkas, {{totalSize}} total (dipindai pada host sumber).", + "methodPreviewWillUseItemSftp": "Akan menggunakan: SFTP per file", + "methodPreviewWillUseTar": "Akan menggunakan: Arsip Tar", "methodReason": { - "user_item_sftp": "You chose per-file SFTP.", - "user_tar": "You chose tar archive.", - "tar_unavailable": "Tar is not available on one or both hosts, so per-file SFTP will be used instead.", - "windows_host": "A Windows host is involved, so tar is not used.", - "auto_multi_large": "Auto: multiple files including a large file ({{largestSize}}) with compressible data. Tar bundles them into one transfer.", - "auto_single_large_in_archive": "Auto: one large file ({{largestSize}}) in this set, so per-file SFTP.", - "auto_many_incompressible": "Auto: mostly incompressible data, so per-file SFTP.", - "auto_many_files": "Auto: many files ({{fileCount}}), tar cuts the per-file overhead.", - "auto_default": "Auto: per-file SFTP for this set." + "user_item_sftp": "Anda memilih SFTP per-file.", + "user_tar": "Anda memilih arsip tar.", + "tar_unavailable": "Tar tidak tersedia di salah satu atau kedua host, jadi SFTP per-file akan digunakan sebagai gantinya.", + "windows_host": "Karena menggunakan sistem operasi Windows, maka tar tidak digunakan.", + "auto_multi_large": "Auto: beberapa file termasuk file besar ({{largestSize}}) dengan data yang dapat dikompresi. Tar menggabungkannya menjadi satu transfer.", + "auto_single_large_in_archive": "Otomatis: satu file besar ({{largestSize}}) dalam set ini, jadi SFTP per file.", + "auto_many_incompressible": "Otomatis: sebagian besar data tidak dapat dikompresi, jadi SFTP per file.", + "auto_many_files": "Auto: banyak file ({{fileCount}}), tar mengurangi overhead per file.", + "auto_default": "Otomatis: SFTP per-file untuk set ini." }, - "methodTar": "Tar archive", - "methodTarHint": "Compress on source, transfer one archive, extract on destination. Requires tar on both Unix hosts.", - "metricsCompress": "Compress on source: {{duration}}", - "metricsExtract": "Extract on destination: {{duration}}", - "metricsPrepare": "Prepare destination: {{duration}}", - "metricsRouteBenchmark": "Route probe: direct {{direct}}, relay {{relay}}", - "metricsSourceDelete": "Remove from source: {{duration}}", + "methodTar": "Arsip Tar", + "methodTarHint": "Kompres di sumber, transfer satu arsip, ekstrak di tujuan. Membutuhkan tar di kedua host Unix.", + "metricsCompress": "Kompres pada sumber: {{duration}}", + "metricsExtract": "Ekstrak pada tujuan: {{duration}}", + "metricsPrepare": "Siapkan tujuan: {{duration}}", + "metricsRouteBenchmark": "Pemeriksaan rute: langsung {{direct}}, relai {{relay}}", + "metricsSourceDelete": "Hapus dari sumber: {{duration}}", "metricsTotal": "Total: {{duration}}", - "metricsTransfer": "End-to-end: {{throughput}} ({{duration}})", - "metricsVerify": "SHA-256 verified: {{duration}}", - "moveFolderToHost": "Move folder to host…", - "moveItemsToHost": "Move {{count}} items to host…", - "moveToHost": "Move to host…", - "noHostsConnected": "No other file-manager hosts available.", - "noHostsConnectedHint": "Add another SSH host with File Manager enabled in Host Manager.", - "parallelSegmentsHint": "Large files are split into 256 MB chunks. Multiple lanes use separate connections (like starting several transfers) for higher total throughput.", - "parallelSegmentsLabel": "Parallel transfer lanes", - "parallelSegmentsOption": "{{count}} lanes", - "progressBenchmarking": "Selecting the fastest transfer route…", + "metricsTransfer": "Ujung ke ujung: {{throughput}} ({{duration}})", + "metricsVerify": "SHA-256 terverifikasi: {{duration}}", + "moveFolderToHost": "Pindahkan folder ke host…", + "moveItemsToHost": "Pindahkan {{count}} item ke host…", + "moveToHost": "Pindah ke host…", + "noHostsConnected": "Tidak ada penyedia pengelola file lain yang tersedia.", + "noHostsConnectedHint": "Tambahkan host SSH lain dengan File Manager diaktifkan di Host Manager.", + "parallelSegmentsHint": "File berukuran besar dibagi menjadi bagian-bagian berukuran 256 MB. Beberapa jalur menggunakan koneksi terpisah (seperti memulai beberapa transfer) untuk throughput total yang lebih tinggi.", + "parallelSegmentsLabel": "Jalur transfer paralel", + "parallelSegmentsOption": "{{count}} jalur", + "progressBenchmarking": "Memilih rute transfer tercepat…", "progressBytes": "{{transferred}} / {{total}}", - "progressCancel": "Cancel", - "progressCancelling": "Cancelling…", - "progressCompressing": "Compressing on source host…", - "progressExtracting": "Extracting on destination…", - "progressItems": "{{current}} / {{total}} files", - "progressReconnecting": "Reconnecting…", - "progressStalled": "Stalled", - "progressTotalSpeed": "{{speed}} total ({{lanes}} lanes)", - "progressTransferring": "Transferring data…", - "progressTransferringItems": "Transferring files ({{current}} of {{total}})…", - "progressVerifying": "Verifying file integrity…", - "recentDestinations": "Recent destinations", - "resumedHint": "Reconnected to an active transfer started in another window.", - "retryTransfer": "Retry", - "retryTransferError": "Retry failed", - "selectDestinationHost": "Select destination host", - "transferCancelled": "Transfer cancelled", - "transferCancelledCopyHint": "Partial files may remain on the destination.", - "transferCancelledMoveHint": "Partial files may remain on the destination. Source files were not removed.", - "transferError": "Transfer failed", - "transferFailedRetryHint": "Partial data was kept on the destination. Retry will resume when the connection is back.", - "transferPartialHint": "Could not transfer: {{paths}}", - "transferSuccess": "Transfer complete", - "metricsHopSourceRead": "Source → server: {{throughput}}", - "metricsHopDestSftpWrite": "Server → dest (SFTP): {{throughput}}", - "metricsHopDestLocalWrite": "Server → dest (local): {{throughput}}" + "progressCancel": "Membatalkan", + "progressCancelling": "Membatalkan…", + "progressCompressing": "Kompresi pada host sumber…", + "progressExtracting": "Mengekstraksi pada tujuan…", + "progressItems": "berkas {{current}} / {{total}}", + "progressReconnecting": "Menghubungkan kembali…", + "progressStalled": "Terhenti", + "progressTotalSpeed": "{{speed}} total ({{lanes}} lajur)", + "progressTransferring": "Mentransfer data…", + "progressTransferringItems": "Mentransfer berkas ({{current}} dari {{total}})…", + "progressVerifying": "Memverifikasi integritas file…", + "recentDestinations": "Destinasi terkini", + "resumedHint": "Terhubung kembali ke transfer aktif yang dimulai di jendela lain.", + "retryTransfer": "Mencoba kembali", + "retryTransferError": "Percobaan ulang gagal.", + "selectDestinationHost": "Pilih host tujuan", + "transferCancelled": "Transfer dibatalkan", + "transferCancelledCopyHint": "File yang tidak lengkap mungkin masih tersisa di tujuan.", + "transferCancelledMoveHint": "Sebagian berkas mungkin masih tersisa di tujuan. Berkas sumber tidak dihapus.", + "transferError": "Transfer gagal", + "transferFailedRetryHint": "Sebagian data tersimpan di tujuan. Upaya pengulangan akan dilanjutkan saat koneksi kembali pulih.", + "transferPartialHint": "Tidak dapat mentransfer: {{paths}}", + "transferSuccess": "Transfer selesai", + "metricsHopSourceRead": "Sumber → server: {{throughput}}", + "metricsHopDestSftpWrite": "Server → tujuan (SFTP): {{throughput}}", + "metricsHopDestLocalWrite": "Server → tujuan (lokal): {{throughput}}" + }, + "plugin": { + "name": "File Manager" } } diff --git a/plugins/file-manager/locales/translated/it_IT.json b/plugins/file-manager/locales/translated/it_IT.json index a30ceedae..08176d0ac 100644 --- a/plugins/file-manager/locales/translated/it_IT.json +++ b/plugins/file-manager/locales/translated/it_IT.json @@ -79,7 +79,7 @@ "failedToUploadFile": "Caricamento file non riuscito", "uploadingFolderFiles": "Caricamento del/dei file {{count}} in corso...", "uploadedFolderFiles": "File caricati con successo {{count}}", - "uploadedFolderPartial": "Uploaded {{uploaded}} file(s), {{failed}} failed", + "uploadedFolderPartial": "Caricamento del/i file {{uploaded}} non riuscito/i {{failed}}", "fileDownloadedSuccessfully": "File \"{{name}}\" scaricato con successo", "failedToDownloadFile": "Scaricamento file non riuscito", "fileCreatedSuccessfully": "File \"{{name}}\" creato con successo", @@ -120,7 +120,7 @@ "localNothingToTransfer": "Nulla da trasferire", "localUploadComplete": "Caricato/i file {{count}}", "localUploadFailed": "Caricamento non riuscito", - "localUploadPartial": "Uploaded {{done}} file(s), {{failed}} failed", + "localUploadPartial": "Caricamento del/i file {{done}} non riuscito/i {{failed}}", "localDownloadComplete": "Scaricato il/i file {{count}}", "localDownloadFailed": "Download non riuscito", "localDownloadPartial": "Scaricamento del/dei file {{done}} , {{failed}} non riuscito", @@ -323,7 +323,7 @@ "sideBySide": "Fianco a fianco", "inline": "In linea", "fileComparison": "Confronto file: {{file1}} vs {{file2}}", - "fileTooLarge": "File troppo grande: {{error}}", + "fileTooLarge": "File is too large (> 10MB) and cannot be opened as text for security reasons.", "sshConnectionFailed": "Connessione SSH non riuscita. Controlla la connessione a {{name}} ({{ip}}:{{port}})", "loadFileFailed": "Caricamento del file non riuscito: {{error}}", "connecting": "Connessione in corso...", @@ -365,7 +365,7 @@ "comfortableLayout": "Utilizzare una disposizione comoda", "cannotLoadPdf": "Impossibile caricare il PDF", "pdfLoadError": "Si è verificato un errore durante il caricamento del file PDF.", - "loadingPdf": "Caricamento PDF in corso...", + "loadingPdf": "Loading PDF viewer...", "loadingPage": "Caricamento pagina in corso...", "cancel": "Annulla", "copiedItems_one": "Elemento copiato {{count}}", @@ -383,7 +383,16 @@ "videoUnsupported": "Il tuo browser non è in grado di riprodurre questo formato video.", "downloadToPlay": "Scaricalo per riprodurlo altrove", "cannotPreviewType": "Impossibile visualizzare l'anteprima di questo tipo di file", - "cannotPreviewTypeHint": "Questo tipo di file non ha un'anteprima. Scaricalo per aprirlo in un'altra applicazione." + "cannotPreviewTypeHint": "Questo tipo di file non ha un'anteprima. Scaricalo per aprirlo in un'altra applicazione.", + "loadingFile": "Loading file...", + "loadingImage": "Loading image...", + "loadingEditor": "Loading editor...", + "loadingPreview": "Loading preview...", + "loadingAudio": "Loading audio player...", + "emptyPreview": "Nothing to preview yet...", + "revert": "Revert", + "openAsText": "Open as Text", + "confirmOpenAsText": "Do you want to continue opening this file as text? This may slow down your browser." }, "sftpTransfer": { "title": "SFTP", @@ -539,5 +548,8 @@ "metricsHopSourceRead": "Sorgente → server: {{throughput}}", "metricsHopDestSftpWrite": "Server → dest (SFTP): {{throughput}}", "metricsHopDestLocalWrite": "Server → dest (locale): {{throughput}}" + }, + "plugin": { + "name": "File Manager" } } diff --git a/plugins/file-manager/locales/translated/ja_JP.json b/plugins/file-manager/locales/translated/ja_JP.json index 866e59a80..c62f2995d 100644 --- a/plugins/file-manager/locales/translated/ja_JP.json +++ b/plugins/file-manager/locales/translated/ja_JP.json @@ -323,7 +323,7 @@ "sideBySide": "横並び表示", "inline": "インライン表示", "fileComparison": "ファイル比較: {{file1}} 対 {{file2}}", - "fileTooLarge": "ファイルが大きすぎます: {{error}}", + "fileTooLarge": "File is too large (> 10MB) and cannot be opened as text for security reasons.", "sshConnectionFailed": "SSH接続に失敗しました。 {{name}} ({{ip}}:{{port}}) への接続を確認してください", "loadFileFailed": "ファイルの読み込みに失敗しました: {{error}}", "connecting": "接続中...", @@ -365,7 +365,7 @@ "comfortableLayout": "快適なレイアウトを使用する", "cannotLoadPdf": "PDFを読み込めません", "pdfLoadError": "このPDFファイルの読み込み中にエラーが発生しました。", - "loadingPdf": "PDFを読み込み中...", + "loadingPdf": "Loading PDF viewer...", "loadingPage": "ページを読み込み中...", "cancel": "キャンセル", "copiedItems_one": "{{count}} アイテムをコピーしました", @@ -383,7 +383,16 @@ "videoUnsupported": "お使いのブラウザはこの動画フォーマットを再生できません。", "downloadToPlay": "他の場所でプレイするにはダウンロードしてください", "cannotPreviewType": "このファイルタイプはプレビューできません", - "cannotPreviewTypeHint": "このファイル形式にはプレビュー機能がありません。ダウンロードして別のアプリで開いてください。" + "cannotPreviewTypeHint": "このファイル形式にはプレビュー機能がありません。ダウンロードして別のアプリで開いてください。", + "loadingFile": "Loading file...", + "loadingImage": "Loading image...", + "loadingEditor": "Loading editor...", + "loadingPreview": "Loading preview...", + "loadingAudio": "Loading audio player...", + "emptyPreview": "Nothing to preview yet...", + "revert": "Revert", + "openAsText": "Open as Text", + "confirmOpenAsText": "Do you want to continue opening this file as text? This may slow down your browser." }, "sftpTransfer": { "title": "SFTP", @@ -539,5 +548,8 @@ "metricsHopSourceRead": "送信元 → サーバー: {{throughput}}", "metricsHopDestSftpWrite": "サーバー → 送信先 (SFTP): {{throughput}}", "metricsHopDestLocalWrite": "サーバー → 送信先 (ローカル): {{throughput}}" + }, + "plugin": { + "name": "File Manager" } } diff --git a/plugins/file-manager/locales/translated/ko_KR.json b/plugins/file-manager/locales/translated/ko_KR.json index c116858b5..f71fce882 100644 --- a/plugins/file-manager/locales/translated/ko_KR.json +++ b/plugins/file-manager/locales/translated/ko_KR.json @@ -323,7 +323,7 @@ "sideBySide": "나란히 보기", "inline": "인라인", "fileComparison": "파일 비교: {{file1}} vs {{file2}}", - "fileTooLarge": "파일이 너무 큽니다: {{error}}", + "fileTooLarge": "File is too large (> 10MB) and cannot be opened as text for security reasons.", "sshConnectionFailed": "SSH 연결 실패. {{name}}({{ip}}:{{port}})에 대한 연결을 확인하세요.", "loadFileFailed": "파일 불러오기 실패: {{error}}", "connecting": "연결 중...", @@ -365,7 +365,7 @@ "comfortableLayout": "편안한 레이아웃을 사용하세요", "cannotLoadPdf": "PDF를 로드할 수 없습니다", "pdfLoadError": "이 PDF 파일을 로드하는 중 오류가 발생했습니다.", - "loadingPdf": "PDF 로드 중...", + "loadingPdf": "Loading PDF viewer...", "loadingPage": "페이지 로드 중...", "cancel": "취소", "copiedItems_one": "복사됨 {{count}} 항목", @@ -383,7 +383,16 @@ "videoUnsupported": "현재 사용 중인 브라우저는 이 비디오 형식을 재생할 수 없습니다.", "downloadToPlay": "다운로드하여 다른 곳에서 재생하세요.", "cannotPreviewType": "이 파일 형식을 미리 볼 수 없습니다.", - "cannotPreviewTypeHint": "이 파일 형식은 미리보기를 지원하지 않습니다. 다운로드하여 다른 앱에서 열어보세요." + "cannotPreviewTypeHint": "이 파일 형식은 미리보기를 지원하지 않습니다. 다운로드하여 다른 앱에서 열어보세요.", + "loadingFile": "Loading file...", + "loadingImage": "Loading image...", + "loadingEditor": "Loading editor...", + "loadingPreview": "Loading preview...", + "loadingAudio": "Loading audio player...", + "emptyPreview": "Nothing to preview yet...", + "revert": "Revert", + "openAsText": "Open as Text", + "confirmOpenAsText": "Do you want to continue opening this file as text? This may slow down your browser." }, "sftpTransfer": { "title": "SFTP", @@ -539,5 +548,8 @@ "metricsHopSourceRead": "소스 → 서버: {{throughput}}", "metricsHopDestSftpWrite": "서버 → 목적지 (SFTP): {{throughput}}", "metricsHopDestLocalWrite": "서버 → 목적지 (로컬): {{throughput}}" + }, + "plugin": { + "name": "File Manager" } } diff --git a/plugins/file-manager/locales/translated/nl_NL.json b/plugins/file-manager/locales/translated/nl_NL.json index ce88a0ed9..7b17fcf67 100644 --- a/plugins/file-manager/locales/translated/nl_NL.json +++ b/plugins/file-manager/locales/translated/nl_NL.json @@ -323,7 +323,7 @@ "sideBySide": "Naast elkaar", "inline": "Inline", "fileComparison": "Bestandsvergelijking: {{file1}} versus {{file2}}", - "fileTooLarge": "Bestand te groot: {{error}}", + "fileTooLarge": "File is too large (> 10MB) and cannot be opened as text for security reasons.", "sshConnectionFailed": "SSH-verbinding mislukt. Controleer uw verbinding met {{name}} ({{ip}}:{{port}})", "loadFileFailed": "Bestand laden mislukt: {{error}}", "connecting": "Verbinden...", @@ -365,7 +365,7 @@ "comfortableLayout": "Gebruik een comfortabele lay-out.", "cannotLoadPdf": "Kan PDF niet laden", "pdfLoadError": "Er is een fout opgetreden bij het laden van dit PDF-bestand.", - "loadingPdf": "PDF laden...", + "loadingPdf": "Loading PDF viewer...", "loadingPage": "Pagina laden...", "cancel": "Annuleren", "copiedItems_one": "Gekopieerd {{count}} item", @@ -383,7 +383,16 @@ "videoUnsupported": "Uw browser kan dit videoformaat niet afspelen.", "downloadToPlay": "Download het om het elders te spelen.", "cannotPreviewType": "Kan dit bestandstype niet bekijken.", - "cannotPreviewTypeHint": "Dit bestandstype heeft geen voorbeeldweergave. Download het om het in een andere app te openen." + "cannotPreviewTypeHint": "Dit bestandstype heeft geen voorbeeldweergave. Download het om het in een andere app te openen.", + "loadingFile": "Loading file...", + "loadingImage": "Loading image...", + "loadingEditor": "Loading editor...", + "loadingPreview": "Loading preview...", + "loadingAudio": "Loading audio player...", + "emptyPreview": "Nothing to preview yet...", + "revert": "Revert", + "openAsText": "Open as Text", + "confirmOpenAsText": "Do you want to continue opening this file as text? This may slow down your browser." }, "sftpTransfer": { "title": "SFTP", @@ -539,5 +548,8 @@ "metricsHopSourceRead": "Bron → server: {{throughput}}", "metricsHopDestSftpWrite": "Server → bestemming (SFTP): {{throughput}}", "metricsHopDestLocalWrite": "Server → bestemming (lokaal): {{throughput}}" + }, + "plugin": { + "name": "File Manager" } } diff --git a/plugins/file-manager/locales/translated/no_NO.json b/plugins/file-manager/locales/translated/no_NO.json index f6d1ca1c3..7644de1c9 100644 --- a/plugins/file-manager/locales/translated/no_NO.json +++ b/plugins/file-manager/locales/translated/no_NO.json @@ -1,36 +1,36 @@ { "nav": { - "files": "Files", + "files": "Filer", "sftp": "SFTP", "openFileManager": "Åpne filutforsker" }, "permissions": { "use": { - "title": "Use file manager", - "description": "Browse, edit and transfer files over SFTP." + "title": "Bruk filbehandleren", + "description": "Bla gjennom, rediger og overfør filer via SFTP." } }, "settings": { "host": { "enable": { "label": "Aktiver filutforsker", - "description": "Browse and edit files on this host over SFTP." + "description": "Bla gjennom og rediger filer på denne verten via SFTP." }, "defaultPath": { "label": "Standardsti" }, "scpLegacy": { - "label": "SCP Legacy Mode" + "label": "SCP Legacy-modus" } }, "user": { "transferConcurrency": { - "label": "Simultaneous File Transfers", - "description": "How many files the side by side local/remote manager uploads or downloads at the same time. Lower this if your server limits SFTP channels." + "label": "Samtidige filoverføringer", + "description": "Hvor mange filer den side om side lokale/fjernstyrte administratoren laster opp eller ned samtidig. Reduser dette hvis serveren din begrenser SFTP-kanaler." }, "confirmBeforeTrash": { - "label": "Confirm before moving files to trash", - "description": "Ask before moving remote files to trash. Permanent deletion still requires confirmation." + "label": "Bekreft før du flytter filer til papirkurven", + "description": "Spør før du flytter eksterne filer til papirkurven. Permanent sletting krever fortsatt bekreftelse." } } }, @@ -39,7 +39,7 @@ }, "fileManager": { "noHostSelected": "Ingen vert valgt", - "initializingEditor": "Initializing editor...", + "initializingEditor": "Initialiserer redigeringsprogrammet...", "file": "Fil", "folder": "Mappe", "uploadFile": "Last opp fil", @@ -72,14 +72,14 @@ "rename": "Gi nytt navn", "uploading": "Laster opp...", "uploadingFile": "Laster opp {{name}}...", - "uploadingChunk": "Uploading {{name}}: {{percent}}% (part {{chunk}} of {{total}})", + "uploadingChunk": "Laster opp {{name}}: {{percent}}% (del {{chunk}} av {{total}})", "fileName": "Filnavn", "folderName": "Mappenavn", "fileUploadedSuccessfully": "Fil \"{{name}}\" ble lastet opp", "failedToUploadFile": "Kunne ikke laste opp fil", - "uploadingFolderFiles": "Uploading {{count}} file(s)...", - "uploadedFolderFiles": "Uploaded {{count}} file(s) successfully", - "uploadedFolderPartial": "Uploaded {{uploaded}} file(s), {{failed}} failed", + "uploadingFolderFiles": "Laster opp {{count}} fil(er)...", + "uploadedFolderFiles": "Lastet opp {{count}} fil(er)", + "uploadedFolderPartial": "Opplasting av {{uploaded}} fil(er), {{failed}} mislyktes", "fileDownloadedSuccessfully": "Filen ble lastet ned", "failedToDownloadFile": "Kunne ikke laste ned fil", "fileCreatedSuccessfully": "Fil \"{{name}}\" ble opprettet", @@ -89,69 +89,69 @@ "failedToResolveSymlink": "Kunne ikke løse symbolske lenker", "itemsDeletedSuccessfully": "{{count}} elementer ble slettet", "failedToDeleteItems": "Kunne ikke slette elementer", - "sudoPasswordRequired": "Administrator Password Required", - "enterSudoPassword": "Enter sudo password to continue this operation", - "sudoPassword": "Sudo password", - "sudoOperationFailed": "Sudo operation failed", - "sudoAuthFailed": "Sudo authentication failed", + "sudoPasswordRequired": "Administratorpassord kreves", + "enterSudoPassword": "Skriv inn sudo-passordet for å fortsette denne operasjonen", + "sudoPassword": "Sudo-passord", + "sudoOperationFailed": "Sudo-operasjonen mislyktes", + "sudoAuthFailed": "Sudo-autentisering mislyktes", "dragFilesToUpload": "Slipp filer her for å laste opp", - "dropToUploadHere": "Drop to upload here", - "dropToDownloadHere": "Drop to download here", + "dropToUploadHere": "Slipp for å laste opp her", + "dropToDownloadHere": "Slipp for å laste ned her", "localFiles": "Lokal", - "showLocalFiles": "Show local files (split view)", - "hideLocalFiles": "Hide local files", - "localHome": "Home folder", - "localPathPlaceholder": "Local folder path", - "localShowHidden": "Show hidden files", - "localHideHidden": "Hide hidden files", - "localRevealInFileManager": "Reveal in system file manager", - "localCannotOpenFolder": "Cannot open folder", + "showLocalFiles": "Vis lokale filer (delt visning)", + "hideLocalFiles": "Skjul lokale filer", + "localHome": "Hjemmappe", + "localPathPlaceholder": "Lokal mappebane", + "localShowHidden": "Vis skjulte filer", + "localHideHidden": "Skjul skjulte filer", + "localRevealInFileManager": "Avslør i systemfilbehandleren", + "localCannotOpenFolder": "Kan ikke åpne mappen", "localItemCount": "{{count}} elementer", "localSelectedCount": "{{count}} valgt", "back": "Tilbake", - "forward": "Forward", - "up": "Up", - "kind": "Kind", - "localUploadingProgress": "Uploading {{current}} of {{total}}", - "localDownloadingProgress": "Downloading {{current}} of {{total}}", - "localTransferInFlight": "{{count}} at once", - "localPreparingDownload": "Preparing download...", - "localTransferCancelled": "Transfer cancelled", - "localNothingToTransfer": "Nothing to transfer", - "localUploadComplete": "Uploaded {{count}} file(s)", - "localUploadFailed": "Upload failed", - "localUploadPartial": "Uploaded {{done}} file(s), {{failed}} failed", - "localDownloadComplete": "Downloaded {{count}} file(s)", + "forward": "Framover", + "up": "Opp", + "kind": "Type", + "localUploadingProgress": "Laster opp {{current}} av {{total}}", + "localDownloadingProgress": "Laster ned {{current}} av {{total}}", + "localTransferInFlight": "{{count}} med en gang", + "localPreparingDownload": "Forbereder nedlasting ...", + "localTransferCancelled": "Overføringen er avbrutt", + "localNothingToTransfer": "Ingenting å overføre", + "localUploadComplete": "Opplastede {{count}} fil(er)", + "localUploadFailed": "Opplastingen mislyktes", + "localUploadPartial": "Opplasting av {{done}} fil(er), {{failed}} mislyktes", + "localDownloadComplete": "Lastet ned {{count}} fil(er)", "localDownloadFailed": "Nedlasting mislyktes", - "localDownloadPartial": "Downloaded {{done}} file(s), {{failed}} failed", - "localReplaceExistingPrompt": "{{count}} item(s) already exist in this folder. Replace them?", + "localDownloadPartial": "Nedlasting av {{done}} fil(er), {{failed}} mislyktes", + "localReplaceExistingPrompt": "{{count}} element(er) finnes allerede i denne mappen. Vil du erstatte dem?", "localReplace": "Erstatt", - "localSkipExisting": "Skip", - "localSkippedExisting": "Skipped {{count}} existing item(s)", - "localUnsafeNamesSkipped": "Skipped {{count}} item(s) whose names cannot be used on this computer", - "localOpen": "Open", - "localOpenFolder": "Open folder", - "localUploadToRemote": "Upload to server", - "localUploadToRemoteMany": "Upload {{count}} items to server", - "localMoveToTrash": "Move to Trash", - "localMoveToTrashMany": "Move {{count}} items to Trash", - "localTrashConfirmSingle": "Move \"{{name}}\" to the Trash?", - "localTrashConfirmFolder": "Move the folder \"{{name}}\" and all its contents to the Trash?", - "localTrashConfirmMany": "Move {{count}} items to the Trash?", - "localTrashed": "Moved {{count}} item(s) to the Trash", - "localTrashFailed": "Could not move to the Trash", - "localRenameFailed": "Rename failed", - "localCreateFailed": "Could not create item", - "goToParentFolder": "Go to parent folder", - "resizeSidebar": "Drag to resize the sidebar (double-click to reset)", - "resizeLocalPane": "Drag to resize the local pane (double-click to reset)", - "columns": "Columns", - "columnsHint": "Right-click to choose columns", + "localSkipExisting": "Hopp over", + "localSkippedExisting": "Hoppet over {{count}} eksisterende element(er)", + "localUnsafeNamesSkipped": "Hoppet over {{count}} elementer hvis navn ikke kan brukes på denne datamaskinen", + "localOpen": "Åpne", + "localOpenFolder": "Åpne mappen", + "localUploadToRemote": "Last opp til server", + "localUploadToRemoteMany": "Last opp {{count}} elementer til serveren", + "localMoveToTrash": "Flytt til papirkurven", + "localMoveToTrashMany": "Flytt {{count}} elementer til papirkurven", + "localTrashConfirmSingle": "Flytte «{{name}}» til papirkurven?", + "localTrashConfirmFolder": "Flytte mappen «{{name}}» og alt innholdet til papirkurven?", + "localTrashConfirmMany": "Flytte {{count}} elementer til papirkurven?", + "localTrashed": "Flyttet {{count}} element(er) til papirkurven", + "localTrashFailed": "Kunne ikke flytte til papirkurven", + "localRenameFailed": "Mislyktes i å gi nytt navn", + "localCreateFailed": "Kunne ikke opprette elementet", + "goToParentFolder": "Gå til overordnet mappe", + "resizeSidebar": "Dra for å endre størrelsen på sidefeltet (dobbeltklikk for å tilbakestille)", + "resizeLocalPane": "Dra for å endre størrelsen på den lokale ruten (dobbeltklikk for å tilbakestille)", + "columns": "Kolonner", + "columnsHint": "Høyreklikk for å velge kolonner", "emptyFolder": "Denne mappen er tom", "searchFiles": "Søk i filer...", "upload": "Last opp", "selectHostToStart": "Velg en vert for å starte filhåndtering", - "sshRequiredForFileManager": "File manager requires SSH. This host does not have SSH enabled.", + "sshRequiredForFileManager": "Filbehandleren krever SSH. Denne verten har ikke SSH aktivert.", "failedToConnect": "Kunne ikke koble til SSH", "failedToLoadDirectory": "Kunne ikke laste katalog", "noSSHConnection": "Ingen SSH-tilkobling tilgjengelig", @@ -172,22 +172,22 @@ "pathCopiedToClipboard": "Sti kopiert til utklippstavlen", "pathsCopiedToClipboard": "{{count}} stier kopiert til utklippstavlen", "failedToCopyPath": "Kunne ikke kopiere sti", - "copyFolderLink": "Copy Link to Folder", - "copyCurrentFolderLink": "Copy Link to Current Folder", - "folderLinkCopied": "Folder link copied to clipboard", - "failedToCopyFolderLink": "Failed to copy folder link", + "copyFolderLink": "Kopier lenke til mappe", + "copyCurrentFolderLink": "Kopier lenke til gjeldende mappe", + "folderLinkCopied": "Mappelenke kopiert til utklippstavlen", + "failedToCopyFolderLink": "Kunne ikke kopiere mappelenken", "movedItems": "Flyttet {{count}} elementer", "failedToDeleteItem": "Kunne ikke slette element", "itemRenamedSuccessfully": "{{type}} fikk nytt navn", "failedToRenameItem": "Kunne ikke gi element nytt navn", "download": "Last ned", - "openExternalEditor": "Open externally", - "chooseExternalEditor": "Choose external editor", - "externalEditorSelected": "External editor selected", - "externalEditorDesktopOnly": "External editor is only available in the desktop app", - "externalEditorOpened": "Opened in external editor. Saving there will upload changes back to the server.", - "failedToOpenExternalEditor": "Failed to open external editor", - "failedToSelectExternalEditor": "Failed to select external editor", + "openExternalEditor": "Åpne eksternt", + "chooseExternalEditor": "Velg ekstern editor", + "externalEditorSelected": "Ekstern redigerer valgt", + "externalEditorDesktopOnly": "Ekstern editor er bare tilgjengelig i skrivebordsappen", + "externalEditorOpened": "Åpnet i ekstern editor. Hvis du lagrer der, lastes endringene opp tilbake til serveren.", + "failedToOpenExternalEditor": "Kunne ikke åpne ekstern editor", + "failedToSelectExternalEditor": "Kunne ikke velge ekstern redigeringsprogram", "permissions": "Tillatelser", "size": "Størrelse", "modified": "Endret", @@ -202,26 +202,26 @@ "confirmDeleteMultipleItemsWithFolders": "Er du sikker på at du vil slette {{count}} elementer permanent? Dette inkluderer mapper og innholdet deres.", "confirmDeleteFolder": "Er du sikker på at du vil slette mappen \"{{name}}\" og alt innholdet permanent?", "permanentDeleteWarning": "Denne handlingen kan ikke angres. Elementene blir slettet permanent fra serveren.", - "moveToTrashWarning": "The item(s) will be moved to the Termix Trash and can be restored before the retention period expires.", - "itemsMovedToTrash": "{{count}} item(s) moved to Trash", - "trash": "Trash", - "trashDescription": "Deleted items are retained for {{days}} day(s) on this host.", - "trashLoadFailed": "Failed to load Trash", - "trashEmpty": "Trash is empty", - "trashRestore": "Restore", - "trashRestored": "Restored {{name}}", - "trashRestoreFailed": "Failed to restore item. The original path may already exist.", - "trashDeletePermanently": "Delete permanently", - "trashDeleteConfirm": "Permanently delete {{name}}? This cannot be undone.", - "trashPermanentlyDeleted": "Permanently deleted {{name}}", - "trashDeleteFailed": "Failed to permanently delete item", - "trashEmptyAction": "Empty Trash", - "trashEmptyConfirm": "Permanently delete every item in Trash? This cannot be undone.", - "trashEmptied": "Trash emptied", - "trashRetention": "Automatic cleanup after (days)", - "trashRetentionSaved": "Trash retention updated", - "trashRetentionFailed": "Failed to update Trash retention", - "trashUnavailableConfirm": "This item cannot be moved to Trash, usually because it is on another filesystem or requires elevated permissions. Delete it permanently instead?", + "moveToTrashWarning": "Elementet/elementene vil bli flyttet til Termix-papirkurven og kan gjenopprettes før oppbevaringsperioden utløper.", + "itemsMovedToTrash": "{{count}} element(er) flyttet til papirkurven", + "trash": "Søppel", + "trashDescription": "Slettede elementer lagres i {{days}} dag(er) på denne verten.", + "trashLoadFailed": "Kunne ikke laste inn papirkurven", + "trashEmpty": "Papirkurven er tom", + "trashRestore": "Restaurere", + "trashRestored": "Gjenopprettet {{name}}", + "trashRestoreFailed": "Kunne ikke gjenopprette elementet. Den opprinnelige banen finnes kanskje allerede.", + "trashDeletePermanently": "Slett permanent", + "trashDeleteConfirm": "Vil du slette {{name}}permanent? Dette kan ikke angres.", + "trashPermanentlyDeleted": "Slettet permanent {{name}}", + "trashDeleteFailed": "Kunne ikke slette elementet permanent", + "trashEmptyAction": "Tøm søppelbøtten", + "trashEmptyConfirm": "Vil du slette alle elementene i papirkurven permanent? Dette kan ikke angres.", + "trashEmptied": "Søppelet tømt", + "trashRetention": "Automatisk opprydding etter (dager)", + "trashRetentionSaved": "Oppbevaring av søppel er oppdatert", + "trashRetentionFailed": "Kunne ikke oppdatere papirkurven", + "trashUnavailableConfirm": "Dette elementet kan ikke flyttes til papirkurven, vanligvis fordi det er på et annet filsystem eller krever utvidede tillatelser. Slette det permanent i stedet?", "recent": "Nylige", "pinned": "Festet", "folderShortcuts": "Mappesnarveier", @@ -303,7 +303,7 @@ "operationCompleted": "{{operation}} {{count}} elementer", "downloadFileSuccess": "Fil {{name}} ble lastet ned", "downloadFileFailed": "Nedlasting mislyktes", - "downloadingFile": "Downloading {{name}}…", + "downloadingFile": "Laster ned {{name}}…", "downloadProgressBytes": "{{transferred}} / {{total}}", "moveTo": "Flytt til {{name}}", "diffCompareWith": "Sammenlign forskjeller med {{name}}", @@ -314,25 +314,25 @@ "move": "Flytt", "searchInFile": "Søk i fil (Ctrl+F)", "showKeyboardShortcuts": "Vis tastatursnarveier", - "decreaseFontSize": "Decrease font size", - "increaseFontSize": "Increase font size", + "decreaseFontSize": "Reduser skriftstørrelsen", + "increaseFontSize": "Øk skriftstørrelsen", "startWritingMarkdown": "Begynn å skrive markdown-innhold...", "loadingFileComparison": "Laster filsammenligning...", "reload": "Last inn på nytt", "compare": "Sammenlign", "sideBySide": "Side om side", - "inline": "Inline", + "inline": "Innebygd", "fileComparison": "Filsammenligning: {{file1}} vs {{file2}}", - "fileTooLarge": "Fil for stor: {{error}}", + "fileTooLarge": "File is too large (> 10MB) and cannot be opened as text for security reasons.", "sshConnectionFailed": "SSH-tilkobling mislyktes. Kontroller tilkoblingen til {{name}} ({{ip}}:{{port}})", "loadFileFailed": "Kunne ikke laste fil: {{error}}", "connecting": "Kobler til...", "connectedSuccessfully": "Tilkoblet", "totpVerificationFailed": "TOTP-verifisering mislyktes", - "browserSignInFailed": "Sign-in failed. Please try again.", - "authenticationFailed": "Authentication failed", - "incorrectPassphrase": "Incorrect passphrase. Please try again.", - "verificationCodePrompt": "Verification code:", + "browserSignInFailed": "Påloggingen mislyktes. Prøv på nytt.", + "authenticationFailed": "Autentisering mislyktes", + "incorrectPassphrase": "Feil passordfrase. Prøv på nytt.", + "verificationCodePrompt": "Verifiseringskode:", "changePermissions": "Endre tillatelser", "currentPermissions": "Gjeldende tillatelser", "owner": "Eier", @@ -345,101 +345,110 @@ "failedToChangePermissions": "Kunne ikke endre tillatelser", "name": "Navn", "sortByName": "Navn", - "sortByDate": "Date Modified", + "sortByDate": "Dato endret", "sortBySize": "Størrelse", - "ascending": "Ascending", - "descending": "Descending", - "root": "Root", - "new": "New", - "sortBy": "Sort By", - "items": "Items", - "selected": "Selected", - "editor": "Editor", - "octal": "Octal", - "storage": "Storage", + "ascending": "Stigende", + "descending": "Synkende", + "root": "Rot", + "new": "Ny", + "sortBy": "Sorter etter", + "items": "Elementer", + "selected": "Valgt", + "editor": "Redaktør", + "octal": "Oktal", + "storage": "Lagring", "disk": "Disk", "used": "Brukt", "of": "av", "toggleSidebar": "Slå av/på sidepanel", - "compactLayout": "Use compact layout", - "comfortableLayout": "Use comfortable layout", - "cannotLoadPdf": "Cannot load PDF", - "pdfLoadError": "There was an error loading this PDF file.", - "loadingPdf": "Loading PDF...", - "loadingPage": "Loading page...", + "compactLayout": "Bruk kompakt oppsett", + "comfortableLayout": "Bruk komfortabel layout", + "cannotLoadPdf": "Kan ikke laste inn PDF-filen", + "pdfLoadError": "Det oppsto en feil under lasting av denne PDF-filen.", + "loadingPdf": "Loading PDF viewer...", + "loadingPage": "Laster inn side...", "cancel": "Avbryt", - "copiedItems_one": "Copied {{count}} item", - "copiedItems_other": "Copied {{count}} items", - "deleteCopiedFileFailed": "Could not delete the copy of {{name}}: {{error}}", - "dragMovedItems_one": "Moved {{count}} item to {{target}}", - "dragMovedItems_other": "Moved {{count}} items to {{target}}", - "moveBackFileFailed": "Could not move {{name}} back: {{error}}", + "copiedItems_one": "Kopierte {{count}} element", + "copiedItems_other": "Kopierte {{count}} elementer", + "deleteCopiedFileFailed": "Kunne ikke slette kopien av {{name}}: {{error}}", + "dragMovedItems_one": "Flyttet {{count}} element til {{target}}", + "dragMovedItems_other": "Flyttet {{count}} elementer til {{target}}", + "moveBackFileFailed": "Kunne ikke flytte {{name}} tilbake: {{error}}", "terminal": "Terminal: {{host}} ({{path}})", - "dragToDesktop": "Dragging {{name}} to the desktop", - "dragFilesToDesktop": "Dragging {{count}} files to the desktop", - "folderDragUnsupported": "Dragging folders to the desktop is not supported yet", - "saveToDesktopFailed": "Save failed: {{error}}", - "dragFailedDetail": "Drag failed: {{error}}", - "videoUnsupported": "Your browser cannot play this video format.", - "downloadToPlay": "Download to play it elsewhere", - "cannotPreviewType": "Cannot preview this file type", - "cannotPreviewTypeHint": "This file type has no preview. Download it to open it in another app." + "dragToDesktop": "Dra {{name}} til skrivebordet", + "dragFilesToDesktop": "Dra {{count}} filer til skrivebordet", + "folderDragUnsupported": "Det støttes ikke ennå å dra mapper til skrivebordet", + "saveToDesktopFailed": "Lagring mislyktes: {{error}}", + "dragFailedDetail": "Drag mislyktes: {{error}}", + "videoUnsupported": "Nettleseren din kan ikke spille av dette videoformatet.", + "downloadToPlay": "Last ned for å spille det et annet sted", + "cannotPreviewType": "Kan ikke forhåndsvise denne filtypen", + "cannotPreviewTypeHint": "Denne filtypen har ingen forhåndsvisning. Last den ned for å åpne den i en annen app.", + "loadingFile": "Loading file...", + "loadingImage": "Loading image...", + "loadingEditor": "Loading editor...", + "loadingPreview": "Loading preview...", + "loadingAudio": "Loading audio player...", + "emptyPreview": "Nothing to preview yet...", + "revert": "Revert", + "openAsText": "Open as Text", + "confirmOpenAsText": "Do you want to continue opening this file as text? This may slow down your browser." }, "sftpTransfer": { "title": "SFTP", - "description": "Transfer files between two SSH hosts.", - "sourceServer": "Source Server", - "destinationServer": "Destination Server", - "selectHost": "Select host", + "description": "Overfør filer mellom to SSH-verter.", + "sourceServer": "Kildeserver", + "destinationServer": "Destinasjonsserver", + "selectHost": "Velg vert", "noHostSelected": "Ingen vert valgt", "move": "Flytt", "copy": "Kopier", "upload": "Last opp", - "itemsSelected": "{{count}} item selected", - "itemsSelected_other": "{{count}} items selected", + "itemsSelected": "{{count}} element valgt", + "itemsSelected_other": "{{count}} elementer valgt", "ready": "Klar", "loadingHosts": "Laster verter...", "name": "Navn", "modified": "Endret", "size": "Størrelse", - "noFiles": "No files", - "open": "Open", - "up": "Up", + "noFiles": "Ingen filer", + "open": "Åpne", + "up": "Opp", "refresh": "Oppdater", - "copyToTarget": "Copy to Target Directory", + "copyToTarget": "Kopier til målkatalogen", "rename": "Gi nytt navn", "delete": "Slett", - "editPermissions": "Edit Permissions", + "editPermissions": "Rediger tillatelser", "createNewFolder": "Opprett ny mappe", - "deleteSelectedItems": "Delete Selected Items", - "deleteConfirm": "Delete {{count}} selected item?", - "deleteConfirm_other": "Delete {{count}} selected items?", + "deleteSelectedItems": "Slett valgte elementer", + "deleteConfirm": "Slette {{count}} valgt element?", + "deleteConfirm_other": "Slette {{count}} valgte elementer?", "cancel": "Avbryt", "save": "Lagre", - "folderCreated": "Folder created", - "itemRenamed": "Item renamed", - "actionFailed": "Action failed", - "itemsDeleted": "{{count}} item deleted", - "itemsDeleted_other": "{{count}} items deleted", - "deleteFailed": "Delete failed", - "permissionsUpdated": "Permissions updated", - "noRemoteSessionConnected": "No remote session connected", + "folderCreated": "Mappe opprettet", + "itemRenamed": "Elementet har fått nytt navn", + "actionFailed": "Handlingen mislyktes", + "itemsDeleted": "{{count}} element slettet", + "itemsDeleted_other": "{{count}} elementer slettet", + "deleteFailed": "Slettingen mislyktes", + "permissionsUpdated": "Tillatelser oppdatert", + "noRemoteSessionConnected": "Ingen ekstern økt tilkoblet", "failedToListFiles": "Kunne ikke liste filer", - "failedToRefresh": "Failed to refresh", - "destinationInsideSource": "Destination cannot be inside the selected source path.", - "sameHostNoOp": "Source and destination are the same folder." + "failedToRefresh": "Kunne ikke laste inn på nytt", + "destinationInsideSource": "Destinasjonen kan ikke være innenfor den valgte kildebanen.", + "sameHostNoOp": "Kilde og destinasjon er i samme mappe." }, "hosts": { "fileManager": "Filbehandler", - "fileManagerUrlCopied": "File Manager URL copied", - "copyFileManagerUrlAction": "Copy File Manager URL", - "docsLink": "View docs", - "hostNotFound": "Host not found", - "loadingHost": "Loading host..." + "fileManagerUrlCopied": "URL-adressen til filbehandleren er kopiert", + "copyFileManagerUrlAction": "Kopier URL-adressen til filbehandleren", + "docsLink": "Vis dokumenter", + "hostNotFound": "Verten ble ikke funnet", + "loadingHost": "Laster inn vert ..." }, "onboarding": { - "feature_files": "File manager", - "feature_files_desc": "Browse, upload, download and edit files over SFTP without leaving the app." + "feature_files": "Filbehandler", + "feature_files_desc": "Bla gjennom, last opp, last ned og rediger filer via SFTP uten å forlate appen." }, "terminal": { "runTitle": "Kjører {{command}} - {{host}}", @@ -447,97 +456,100 @@ "terminalWithPath": "Terminal - {{host}}:{{path}}" }, "transfer": { - "browseFolders": "Browse destination folders", - "browsePathError": "Could not open this path on the destination host.", - "browsePathWillBeCreated": "This folder does not exist yet. It will be created when the transfer starts.", + "browseFolders": "Bla gjennom målmapper", + "browsePathError": "Kunne ikke åpne denne banen på målverten.", + "browsePathWillBeCreated": "Denne mappen finnes ikke ennå. Den vil bli opprettet når overføringen starter.", "cancel": "Avbryt", - "cleanupDestFiles": "Clean up destination", - "cleanupDestFilesError": "Cleanup failed", - "cleanupDestFilesNothing": "Nothing to clean up on the destination", - "cleanupDestFilesPartial": "Some partial files could not be removed", - "cleanupDestFilesSuccess": "Removed partial files from the destination", + "cleanupDestFiles": "Rydd opp destinasjonen", + "cleanupDestFilesError": "Opprydding mislyktes", + "cleanupDestFilesNothing": "Ingenting å rydde opp i på destinasjonen", + "cleanupDestFilesPartial": "Kunne ikke fjerne noen delvise filer", + "cleanupDestFilesSuccess": "Fjernet delvise filer fra destinasjonen", "confirmCopy": "Kopier", "confirmMove": "Flytt", - "copyFolderToHost": "Copy folder to host…", - "copyItemsToHost": "Copy {{count}} items to host…", - "copyToHost": "Copy to host…", - "destinationPath": "Destination path", - "destMustBeDirectory": "Destination must be a directory for multi-item transfers", - "goUp": "Go up", - "hostAuthRequired": "Authentication required. Open File Manager on this host first", - "hostConnecting": "Connecting…", + "copyFolderToHost": "Kopier mappe til vert…", + "copyItemsToHost": "Kopier {{count}} elementer til vert for…", + "copyToHost": "Kopier til vert…", + "destinationPath": "Destinasjonssti", + "destMustBeDirectory": "Destinasjonen må være en katalog for overføringer av flere elementer", + "goUp": "Gå opp", + "hostAuthRequired": "Autentisering kreves. Åpne Filbehandler på denne verten først", + "hostConnecting": "Kobler til…", "hostConnectionFailed": "Tilkobling mislyktes", - "hostDisconnected": "Not connected", + "hostDisconnected": "Ikke tilkoblet", "hostReady": "Klar", "itemsSummary": "{{count}} elementer", - "jumpHostLimitation": "Both hosts must be reachable from the Termix server. Direct host-to-host routing is not supported.", - "methodAuto": "Auto", - "methodAutoHint": "Picks tar or per-file SFTP based on file count, size, and compressibility. Single files always use streaming SFTP.", - "methodItemSftp": "Per-file SFTP", - "methodItemSftpHint": "Transfer each file individually over SFTP. Works on all hosts including Windows.", - "methodItemSftpLimitation": "Each file uses the same SFTP stream as a single-file copy, one after another. Progress is combined across all files, so the bar moves slowly during large files.", - "methodLabel": "Transfer method", - "methodPreviewError": "Could not preview transfer method. The server will still pick a method when you start.", - "methodPreviewLoading": "Calculating transfer method…", - "methodPreviewScanSummary": "{{fileCount}} files, {{totalSize}} total (scanned on source host).", - "methodPreviewWillUseItemSftp": "Will use: Per-file SFTP", - "methodPreviewWillUseTar": "Will use: Tar archive", + "jumpHostLimitation": "Begge vertene må være tilgjengelige fra Termix-serveren. Direkte vert-til-vert-ruting støttes ikke.", + "methodAuto": "Bil", + "methodAutoHint": "Velger tar eller SFTP per fil basert på antall filer, størrelse og komprimerbarhet. Enkeltfiler bruker alltid strømme-SFTP.", + "methodItemSftp": "SFTP per fil", + "methodItemSftpHint": "Overfør hver fil individuelt via SFTP. Fungerer på alle verter, inkludert Windows.", + "methodItemSftpLimitation": "Hver fil bruker den samme SFTP-strømmen som en enkeltfilskopi, én etter én. Fremdriften kombineres på tvers av alle filene, så linjen beveger seg sakte under store filer.", + "methodLabel": "Overføringsmetode", + "methodPreviewError": "Kunne ikke forhåndsvise overføringsmetoden. Serveren vil fortsatt velge en metode når du starter.", + "methodPreviewLoading": "Beregning av overføringsmetode…", + "methodPreviewScanSummary": "{{fileCount}} filer, {{totalSize}} totalt (skannet på kildeverten).", + "methodPreviewWillUseItemSftp": "Vil bruke: SFTP per fil", + "methodPreviewWillUseTar": "Vil bruke: Tar-arkiv", "methodReason": { - "user_item_sftp": "You chose per-file SFTP.", - "user_tar": "You chose tar archive.", - "tar_unavailable": "Tar is not available on one or both hosts, so per-file SFTP will be used instead.", - "windows_host": "A Windows host is involved, so tar is not used.", - "auto_multi_large": "Auto: multiple files including a large file ({{largestSize}}) with compressible data. Tar bundles them into one transfer.", - "auto_single_large_in_archive": "Auto: one large file ({{largestSize}}) in this set, so per-file SFTP.", - "auto_many_incompressible": "Auto: mostly incompressible data, so per-file SFTP.", - "auto_many_files": "Auto: many files ({{fileCount}}), tar cuts the per-file overhead.", - "auto_default": "Auto: per-file SFTP for this set." + "user_item_sftp": "Du valgte SFTP per fil.", + "user_tar": "Du valgte tar-arkiv.", + "tar_unavailable": "Tar er ikke tilgjengelig på én eller begge vertene, så SFTP per fil vil bli brukt i stedet.", + "windows_host": "En Windows-vert er involvert, så tar brukes ikke.", + "auto_multi_large": "Auto: flere filer, inkludert en stor fil ({{largestSize}}) med komprimerbare data. Tar samler dem i én overføring.", + "auto_single_large_in_archive": "Auto: én stor fil ({{largestSize}}) i dette settet, så SFTP per fil.", + "auto_many_incompressible": "Auto: stort sett inkomprimerbare data, så SFTP per fil.", + "auto_many_files": "Auto: mange filer ({{fileCount}}), tar reduserer overhead per fil.", + "auto_default": "Auto: SFTP per fil for dette settet." }, - "methodTar": "Tar archive", - "methodTarHint": "Compress on source, transfer one archive, extract on destination. Requires tar on both Unix hosts.", - "metricsCompress": "Compress on source: {{duration}}", - "metricsExtract": "Extract on destination: {{duration}}", - "metricsPrepare": "Prepare destination: {{duration}}", - "metricsRouteBenchmark": "Route probe: direct {{direct}}, relay {{relay}}", - "metricsSourceDelete": "Remove from source: {{duration}}", - "metricsTotal": "Total: {{duration}}", - "metricsTransfer": "End-to-end: {{throughput}} ({{duration}})", - "metricsVerify": "SHA-256 verified: {{duration}}", - "moveFolderToHost": "Move folder to host…", - "moveItemsToHost": "Move {{count}} items to host…", - "moveToHost": "Move to host…", - "noHostsConnected": "No other file-manager hosts available.", - "noHostsConnectedHint": "Add another SSH host with File Manager enabled in Host Manager.", - "parallelSegmentsHint": "Large files are split into 256 MB chunks. Multiple lanes use separate connections (like starting several transfers) for higher total throughput.", - "parallelSegmentsLabel": "Parallel transfer lanes", - "parallelSegmentsOption": "{{count}} lanes", - "progressBenchmarking": "Selecting the fastest transfer route…", + "methodTar": "Tar-arkiv", + "methodTarHint": "Komprimer på kildekode, overfør ett arkiv, pakk ut på destinasjon. Krever tar på begge Unix-vertene.", + "metricsCompress": "Komprimer på kilde: {{duration}}", + "metricsExtract": "Uttrekk på destinasjon: {{duration}}", + "metricsPrepare": "Forbered destinasjon: {{duration}}", + "metricsRouteBenchmark": "Rutesonde: direkte {{direct}}, relé {{relay}}", + "metricsSourceDelete": "Fjern fra kilden: {{duration}}", + "metricsTotal": "Totalt: {{duration}}", + "metricsTransfer": "Ende-til-ende: {{throughput}} ({{duration}})", + "metricsVerify": "SHA-256 bekreftet: {{duration}}", + "moveFolderToHost": "Flytt mappen til verten…", + "moveItemsToHost": "Flytt {{count}} elementer til vert for…", + "moveToHost": "Flytt til vert…", + "noHostsConnected": "Ingen andre filbehandlerverter tilgjengelig.", + "noHostsConnectedHint": "Legg til en annen SSH-vert med Filbehandling aktivert i Vertsbehandling.", + "parallelSegmentsHint": "Store filer deles inn i deler på 256 MB. Flere baner bruker separate tilkoblinger (som å starte flere overføringer) for høyere total gjennomstrømning.", + "parallelSegmentsLabel": "Parallelle overføringsfelt", + "parallelSegmentsOption": "{{count}} baner", + "progressBenchmarking": "Velge den raskeste overgangsruten…", "progressBytes": "{{transferred}} / {{total}}", "progressCancel": "Avbryt", - "progressCancelling": "Cancelling…", - "progressCompressing": "Compressing on source host…", - "progressExtracting": "Extracting on destination…", - "progressItems": "{{current}} / {{total}} files", - "progressReconnecting": "Reconnecting…", - "progressStalled": "Stalled", - "progressTotalSpeed": "{{speed}} total ({{lanes}} lanes)", - "progressTransferring": "Transferring data…", - "progressTransferringItems": "Transferring files ({{current}} of {{total}})…", - "progressVerifying": "Verifying file integrity…", - "recentDestinations": "Recent destinations", - "resumedHint": "Reconnected to an active transfer started in another window.", + "progressCancelling": "Avbryter…", + "progressCompressing": "Komprimering på kildevert…", + "progressExtracting": "Uttrekker på destinasjon…", + "progressItems": "{{current}} / {{total}} filer", + "progressReconnecting": "Kobler til igjen…", + "progressStalled": "Fastlåst", + "progressTotalSpeed": "{{speed}} totalt ({{lanes}} baner)", + "progressTransferring": "Overføring av data…", + "progressTransferringItems": "Overføring av filer ({{current}} av {{total}})…", + "progressVerifying": "Verifiserer filintegritet…", + "recentDestinations": "Nylige destinasjoner", + "resumedHint": "Koblet til igjen en aktiv overføring som startet i et annet vindu.", "retryTransfer": "Prøv igjen", - "retryTransferError": "Retry failed", - "selectDestinationHost": "Select destination host", - "transferCancelled": "Transfer cancelled", - "transferCancelledCopyHint": "Partial files may remain on the destination.", - "transferCancelledMoveHint": "Partial files may remain on the destination. Source files were not removed.", - "transferError": "Transfer failed", - "transferFailedRetryHint": "Partial data was kept on the destination. Retry will resume when the connection is back.", - "transferPartialHint": "Could not transfer: {{paths}}", - "transferSuccess": "Transfer complete", - "metricsHopSourceRead": "Source → server: {{throughput}}", - "metricsHopDestSftpWrite": "Server → dest (SFTP): {{throughput}}", - "metricsHopDestLocalWrite": "Server → dest (local): {{throughput}}" + "retryTransferError": "Forsøk på nytt mislyktes", + "selectDestinationHost": "Velg destinasjonsvert", + "transferCancelled": "Overføringen er avbrutt", + "transferCancelledCopyHint": "Delvise filer kan bli liggende igjen på destinasjonen.", + "transferCancelledMoveHint": "Delvise filer kan bli liggende igjen på destinasjonen. Kildefilene ble ikke fjernet.", + "transferError": "Overføringen mislyktes", + "transferFailedRetryHint": "Delvise data ble lagret på destinasjonen. Forsøket gjenopptas når forbindelsen er tilbake.", + "transferPartialHint": "Kunne ikke overføre: {{paths}}", + "transferSuccess": "Overføringen er fullført", + "metricsHopSourceRead": "Kilde → server: {{throughput}}", + "metricsHopDestSftpWrite": "Server → destinasjon (SFTP): {{throughput}}", + "metricsHopDestLocalWrite": "Server → dest (lokal): {{throughput}}" + }, + "plugin": { + "name": "File Manager" } } diff --git a/plugins/file-manager/locales/translated/pl_PL.json b/plugins/file-manager/locales/translated/pl_PL.json index 82c0c0c83..e576da60e 100644 --- a/plugins/file-manager/locales/translated/pl_PL.json +++ b/plugins/file-manager/locales/translated/pl_PL.json @@ -6,15 +6,15 @@ }, "permissions": { "use": { - "title": "Use file manager", - "description": "Browse, edit and transfer files over SFTP." + "title": "Użyj menedżera plików", + "description": "Przeglądaj, edytuj i przesyłaj pliki przez SFTP." } }, "settings": { "host": { "enable": { "label": "Włącz menedżer plików", - "description": "Browse and edit files on this host over SFTP." + "description": "Przeglądaj i edytuj pliki na tym hoście przez SFTP." }, "defaultPath": { "label": "Domyślna ścieżka" @@ -25,12 +25,12 @@ }, "user": { "transferConcurrency": { - "label": "Simultaneous File Transfers", - "description": "How many files the side by side local/remote manager uploads or downloads at the same time. Lower this if your server limits SFTP channels." + "label": "Jednoczesne przesyłanie plików", + "description": "Ile plików lokalny/zdalny menedżer obok siebie przesyła lub pobiera jednocześnie? Zmniejsz tę wartość, jeśli Twój serwer ogranicza kanały SFTP." }, "confirmBeforeTrash": { - "label": "Confirm before moving files to trash", - "description": "Ask before moving remote files to trash. Permanent deletion still requires confirmation." + "label": "Potwierdź przed przeniesieniem plików do kosza", + "description": "Zapytaj przed przeniesieniem plików zdalnych do kosza. Trwałe usunięcie nadal wymaga potwierdzenia." } } }, @@ -72,7 +72,7 @@ "rename": "Zmień nazwę", "uploading": "Przesyłanie...", "uploadingFile": "Przesyłanie {{name}}...", - "uploadingChunk": "Uploading {{name}}: {{percent}}% (part {{chunk}} of {{total}})", + "uploadingChunk": "Przesyłanie {{name}}: {{percent}}% (część {{chunk}} z {{total}})", "fileName": "Nazwa pliku", "folderName": "Nazwa folderu", "fileUploadedSuccessfully": "Plik „{{name}}” został pomyślnie przesłany", @@ -95,58 +95,58 @@ "sudoOperationFailed": "Operacja sudo nie powiodła się", "sudoAuthFailed": "Uwierzytelnianie sudo nie powiodło się", "dragFilesToUpload": "Upuść pliki tutaj, aby je przesłać", - "dropToUploadHere": "Drop to upload here", - "dropToDownloadHere": "Drop to download here", + "dropToUploadHere": "Upuść, aby przesłać tutaj", + "dropToDownloadHere": "Upuść, aby pobrać tutaj", "localFiles": "Lokalne", - "showLocalFiles": "Show local files (split view)", - "hideLocalFiles": "Hide local files", - "localHome": "Home folder", - "localPathPlaceholder": "Local folder path", - "localShowHidden": "Show hidden files", - "localHideHidden": "Hide hidden files", - "localRevealInFileManager": "Reveal in system file manager", - "localCannotOpenFolder": "Cannot open folder", + "showLocalFiles": "Pokaż pliki lokalne (widok podzielony)", + "hideLocalFiles": "Ukryj pliki lokalne", + "localHome": "Folder domowy", + "localPathPlaceholder": "Ścieżka do folderu lokalnego", + "localShowHidden": "Pokaż ukryte pliki", + "localHideHidden": "Ukryj ukryte pliki", + "localRevealInFileManager": "Pokaż w menedżerze plików systemowych", + "localCannotOpenFolder": "Nie można otworzyć folderu", "localItemCount": "{{count}} elementów", "localSelectedCount": "Zaznaczono: {{count}}", "back": "Wstecz", - "forward": "Forward", - "up": "Up", - "kind": "Kind", - "localUploadingProgress": "Uploading {{current}} of {{total}}", - "localDownloadingProgress": "Downloading {{current}} of {{total}}", - "localTransferInFlight": "{{count}} at once", - "localPreparingDownload": "Preparing download...", + "forward": "Do przodu", + "up": "W górę", + "kind": "Uprzejmy", + "localUploadingProgress": "Przesyłanie {{current}} z {{total}}", + "localDownloadingProgress": "Pobieranie {{current}} z {{total}}", + "localTransferInFlight": "{{count}} natychmiast", + "localPreparingDownload": "Przygotowywanie do pobrania...", "localTransferCancelled": "Transfer anulowany", - "localNothingToTransfer": "Nothing to transfer", - "localUploadComplete": "Uploaded {{count}} file(s)", - "localUploadFailed": "Upload failed", + "localNothingToTransfer": "Nic do przeniesienia", + "localUploadComplete": "Przesłano {{count}} plików", + "localUploadFailed": "Przesyłanie nie powiodło się", "localUploadPartial": "Przesłano {{done}} plików, {{failed}} nie powiodło się", - "localDownloadComplete": "Downloaded {{count}} file(s)", + "localDownloadComplete": "Pobrano {{count}} plików", "localDownloadFailed": "Pobieranie nie powiodło się", - "localDownloadPartial": "Downloaded {{done}} file(s), {{failed}} failed", - "localReplaceExistingPrompt": "{{count}} item(s) already exist in this folder. Replace them?", + "localDownloadPartial": "Pobrano {{done}} plików, {{failed}} nie powiodło się", + "localReplaceExistingPrompt": "W tym folderze istnieje już {{count}} elementów. Czy je zastąpić?", "localReplace": "Zamień", - "localSkipExisting": "Skip", - "localSkippedExisting": "Skipped {{count}} existing item(s)", - "localUnsafeNamesSkipped": "Skipped {{count}} item(s) whose names cannot be used on this computer", + "localSkipExisting": "Pominąć", + "localSkippedExisting": "Pominięto {{count}} istniejących elementów", + "localUnsafeNamesSkipped": "Pominięto {{count}} elementów, których nazw nie można używać na tym komputerze", "localOpen": "Otwórz", - "localOpenFolder": "Open folder", - "localUploadToRemote": "Upload to server", - "localUploadToRemoteMany": "Upload {{count}} items to server", - "localMoveToTrash": "Move to Trash", - "localMoveToTrashMany": "Move {{count}} items to Trash", - "localTrashConfirmSingle": "Move \"{{name}}\" to the Trash?", - "localTrashConfirmFolder": "Move the folder \"{{name}}\" and all its contents to the Trash?", - "localTrashConfirmMany": "Move {{count}} items to the Trash?", - "localTrashed": "Moved {{count}} item(s) to the Trash", - "localTrashFailed": "Could not move to the Trash", - "localRenameFailed": "Rename failed", - "localCreateFailed": "Could not create item", - "goToParentFolder": "Go to parent folder", - "resizeSidebar": "Drag to resize the sidebar (double-click to reset)", - "resizeLocalPane": "Drag to resize the local pane (double-click to reset)", + "localOpenFolder": "Otwórz folder", + "localUploadToRemote": "Prześlij na serwer", + "localUploadToRemoteMany": "Prześlij {{count}} elementów na serwer", + "localMoveToTrash": "Przenieś do kosza", + "localMoveToTrashMany": "Przenieś {{count}} elementów do Kosza", + "localTrashConfirmSingle": "Przenieść „{{name}}” do Kosza?", + "localTrashConfirmFolder": "Czy przenieść folder „{{name}}” i całą jego zawartość do Kosza?", + "localTrashConfirmMany": "Przenieść {{count}} elementów do Kosza?", + "localTrashed": "Przeniesiono {{count}} elementów do Kosza", + "localTrashFailed": "Nie można przenieść do Kosza", + "localRenameFailed": "Zmiana nazwy nie powiodła się", + "localCreateFailed": "Nie można utworzyć elementu", + "goToParentFolder": "Przejdź do folderu nadrzędnego", + "resizeSidebar": "Przeciągnij, aby zmienić rozmiar paska bocznego (kliknij dwukrotnie, aby zresetować)", + "resizeLocalPane": "Przeciągnij, aby zmienić rozmiar panelu lokalnego (kliknij dwukrotnie, aby zresetować)", "columns": "Kolumny", - "columnsHint": "Right-click to choose columns", + "columnsHint": "Kliknij prawym przyciskiem myszy, aby wybrać kolumny", "emptyFolder": "Ten folder jest pusty", "searchFiles": "Wyszukaj pliki...", "upload": "Prześlij", @@ -323,13 +323,13 @@ "sideBySide": "Obok siebie", "inline": "W linii", "fileComparison": "Porównanie plików: {{file1}} vs {{file2}}", - "fileTooLarge": "Plik jest za duży: {{error}}", + "fileTooLarge": "File is too large (> 10MB) and cannot be opened as text for security reasons.", "sshConnectionFailed": "Połączenie SSH nie powiodło się. Sprawdź połączenie z {{name}} ({{ip}}:{{port}})", "loadFileFailed": "Nie udało się załadować pliku: {{error}}", "connecting": "Łączenie...", "connectedSuccessfully": "Połączono pomyślnie", "totpVerificationFailed": "Weryfikacja TOTP nie powiodła się", - "browserSignInFailed": "Sign-in failed. Please try again.", + "browserSignInFailed": "Logowanie nie powiodło się. Spróbuj ponownie.", "authenticationFailed": "Uwierzytelnianie nie powiodło się", "incorrectPassphrase": "Nieprawidłowe hasło klucza. Spróbuj ponownie.", "verificationCodePrompt": "Kod weryfikacyjny:", @@ -361,73 +361,82 @@ "used": "Użyte", "of": "z", "toggleSidebar": "Przełącz pasek boczny", - "compactLayout": "Use compact layout", - "comfortableLayout": "Use comfortable layout", + "compactLayout": "Użyj kompaktowego układu", + "comfortableLayout": "Użyj wygodnego układu", "cannotLoadPdf": "Nie można załadować pliku PDF", "pdfLoadError": "Wystąpił błąd podczas ładowania pliku PDF.", - "loadingPdf": "Ładowanie pliku PDF...", + "loadingPdf": "Loading PDF viewer...", "loadingPage": "Ładowanie strony...", "cancel": "Anuluj", - "copiedItems_one": "Copied {{count}} item", - "copiedItems_other": "Copied {{count}} items", - "deleteCopiedFileFailed": "Could not delete the copy of {{name}}: {{error}}", - "dragMovedItems_one": "Moved {{count}} item to {{target}}", - "dragMovedItems_other": "Moved {{count}} items to {{target}}", - "moveBackFileFailed": "Could not move {{name}} back: {{error}}", + "copiedItems_one": "Skopiowano element {{count}}", + "copiedItems_other": "Skopiowano {{count}} elementów", + "deleteCopiedFileFailed": "Nie można usunąć kopii {{name}}: {{error}}", + "dragMovedItems_one": "Przeniesiono {{count}} element do {{target}}", + "dragMovedItems_other": "Przeniesiono {{count}} elementów do {{target}}", + "moveBackFileFailed": "Nie można przesunąć {{name}} wstecz: {{error}}", "terminal": "Terminal: {{host}} ({{path}})", - "dragToDesktop": "Dragging {{name}} to the desktop", - "dragFilesToDesktop": "Dragging {{count}} files to the desktop", - "folderDragUnsupported": "Dragging folders to the desktop is not supported yet", - "saveToDesktopFailed": "Save failed: {{error}}", - "dragFailedDetail": "Drag failed: {{error}}", - "videoUnsupported": "Your browser cannot play this video format.", - "downloadToPlay": "Download to play it elsewhere", - "cannotPreviewType": "Cannot preview this file type", - "cannotPreviewTypeHint": "This file type has no preview. Download it to open it in another app." + "dragToDesktop": "Przeciąganie {{name}} na pulpit", + "dragFilesToDesktop": "Przeciąganie plików {{count}} na pulpit", + "folderDragUnsupported": "Przeciąganie folderów na pulpit nie jest jeszcze obsługiwane", + "saveToDesktopFailed": "Nie udało się zapisać: {{error}}", + "dragFailedDetail": "Nie udało się przeciągnąć: {{error}}", + "videoUnsupported": "Twoja przeglądarka nie może odtworzyć tego formatu wideo.", + "downloadToPlay": "Pobierz, aby odtworzyć w innym miejscu", + "cannotPreviewType": "Nie można wyświetlić podglądu tego typu pliku", + "cannotPreviewTypeHint": "Ten typ pliku nie ma podglądu. Pobierz go, aby otworzyć w innej aplikacji.", + "loadingFile": "Loading file...", + "loadingImage": "Loading image...", + "loadingEditor": "Loading editor...", + "loadingPreview": "Loading preview...", + "loadingAudio": "Loading audio player...", + "emptyPreview": "Nothing to preview yet...", + "revert": "Revert", + "openAsText": "Open as Text", + "confirmOpenAsText": "Do you want to continue opening this file as text? This may slow down your browser." }, "sftpTransfer": { "title": "SFTP", - "description": "Transfer files between two SSH hosts.", - "sourceServer": "Source Server", - "destinationServer": "Destination Server", - "selectHost": "Select host", + "description": "Przesyłanie plików pomiędzy dwoma hostami SSH.", + "sourceServer": "Serwer źródłowy", + "destinationServer": "Serwer docelowy", + "selectHost": "Wybierz hosta", "noHostSelected": "Nie wybrano hosta", "move": "Przenieś", "copy": "Kopiuj", "upload": "Prześlij", - "itemsSelected": "{{count}} item selected", - "itemsSelected_other": "{{count}} items selected", + "itemsSelected": "{{count}} wybrano element", + "itemsSelected_other": "Wybrano {{count}} elementów", "ready": "Gotowy", "loadingHosts": "Ładowanie hostów...", "name": "Nazwa", "modified": "Zmodyfikowano", "size": "Rozmiar", - "noFiles": "No files", + "noFiles": "Brak plików", "open": "Otwórz", - "up": "Up", + "up": "W górę", "refresh": "Odśwież", - "copyToTarget": "Copy to Target Directory", + "copyToTarget": "Kopiuj do katalogu docelowego", "rename": "Zmień nazwę", "delete": "Usuń", - "editPermissions": "Edit Permissions", - "createNewFolder": "Create New Folder", - "deleteSelectedItems": "Delete Selected Items", - "deleteConfirm": "Delete {{count}} selected item?", - "deleteConfirm_other": "Delete {{count}} selected items?", + "editPermissions": "Edytuj uprawnienia", + "createNewFolder": "Utwórz nowy folder", + "deleteSelectedItems": "Usuń wybrane elementy", + "deleteConfirm": "Usunąć {{count}} wybrany element?", + "deleteConfirm_other": "Usunąć {{count}} wybranych elementów?", "cancel": "Anuluj", "save": "Zapisz", - "folderCreated": "Folder created", - "itemRenamed": "Item renamed", + "folderCreated": "Utworzono folder", + "itemRenamed": "Zmieniono nazwę elementu", "actionFailed": "Akcja nie powiodła się", - "itemsDeleted": "{{count}} item deleted", - "itemsDeleted_other": "{{count}} items deleted", - "deleteFailed": "Delete failed", - "permissionsUpdated": "Permissions updated", - "noRemoteSessionConnected": "No remote session connected", - "failedToListFiles": "Failed to list files", - "failedToRefresh": "Failed to refresh", - "destinationInsideSource": "Destination cannot be inside the selected source path.", - "sameHostNoOp": "Source and destination are the same folder." + "itemsDeleted": "{{count}} element usunięty", + "itemsDeleted_other": "Usunięto {{count}} elementów", + "deleteFailed": "Usunięcie nie powiodło się", + "permissionsUpdated": "Zaktualizowano uprawnienia", + "noRemoteSessionConnected": "Brak połączonych sesji zdalnych", + "failedToListFiles": "Nie udało się wyświetlić listy plików", + "failedToRefresh": "Nie udało się odświeżyć", + "destinationInsideSource": "Miejsce docelowe nie może znajdować się wewnątrz wybranej ścieżki źródłowej.", + "sameHostNoOp": "Źródło i cel znajdują się w tym samym folderze." }, "hosts": { "fileManager": "Menedżer plików", @@ -464,7 +473,7 @@ "destinationPath": "Ścieżka docelowa", "destMustBeDirectory": "Miejsce docelowe musi być katalogiem przy transferze wielu elementów", "goUp": "W górę", - "hostAuthRequired": "Authentication required. Open File Manager on this host first", + "hostAuthRequired": "Wymagane uwierzytelnienie. Najpierw otwórz Menedżera plików na tym hoście.", "hostConnecting": "Łączenie…", "hostConnectionFailed": "Połączenie nieudane", "hostDisconnected": "Nie połączono", @@ -485,12 +494,12 @@ "methodReason": { "user_item_sftp": "Wybrano SFTP dla poszczególnych plików.", "user_tar": "Wybrano archiwum tar.", - "tar_unavailable": "Tar is not available on one or both hosts, so per-file SFTP will be used instead.", - "windows_host": "A Windows host is involved, so tar is not used.", - "auto_multi_large": "Auto: multiple files including a large file ({{largestSize}}) with compressible data. Tar bundles them into one transfer.", - "auto_single_large_in_archive": "Auto: one large file ({{largestSize}}) in this set, so per-file SFTP.", - "auto_many_incompressible": "Auto: mostly incompressible data, so per-file SFTP.", - "auto_many_files": "Auto: many files ({{fileCount}}), tar cuts the per-file overhead.", + "tar_unavailable": "Tar nie jest dostępny na jednym lub obu hostach, więc zamiast tego używany będzie protokół SFTP dla każdego pliku.", + "windows_host": "Ponieważ wykorzystywany jest host Windows, nie używa się pliku tar.", + "auto_multi_large": "Auto: wiele plików, w tym duży plik ({{largestSize}}) z kompresowalnymi danymi. Tar łączy je w jeden transfer.", + "auto_single_large_in_archive": "Auto: jeden duży plik ({{largestSize}}) w tym zestawie, więc SFTP dla każdego pliku.", + "auto_many_incompressible": "Auto: dane w większości niekompresowalne, więc SFTP dla każdego pliku.", + "auto_many_files": "Auto: wiele plików ({{fileCount}}), tar redukuje narzut na plik.", "auto_default": "Auto: SFTP dla każdego pliku w tym zestawie." }, "methodTar": "Archiwum tar", @@ -498,7 +507,7 @@ "metricsCompress": "Kompresja w źródle: {{duration}}", "metricsExtract": "Rozpakowanie w miejscu docelowym: {{duration}}", "metricsPrepare": "Przygotowanie miejsca docelowego: {{duration}}", - "metricsRouteBenchmark": "Route probe: direct {{direct}}, relay {{relay}}", + "metricsRouteBenchmark": "Sonda trasy: bezpośrednia {{direct}}, przekaźnikowa {{relay}}", "metricsSourceDelete": "Usunięcie ze źródła: {{duration}}", "metricsTotal": "Razem: {{duration}}", "metricsTransfer": "Całościowo: {{throughput}} ({{duration}})", @@ -539,5 +548,8 @@ "metricsHopSourceRead": "Źródło → serwer: {{throughput}}", "metricsHopDestSftpWrite": "Serwer → cel (SFTP): {{throughput}}", "metricsHopDestLocalWrite": "Serwer → cel (lokalny): {{throughput}}" + }, + "plugin": { + "name": "File Manager" } } diff --git a/plugins/file-manager/locales/translated/pt_BR.json b/plugins/file-manager/locales/translated/pt_BR.json index 01845e8af..d639c1b19 100644 --- a/plugins/file-manager/locales/translated/pt_BR.json +++ b/plugins/file-manager/locales/translated/pt_BR.json @@ -6,31 +6,31 @@ }, "permissions": { "use": { - "title": "Use file manager", - "description": "Browse, edit and transfer files over SFTP." + "title": "Use o gerenciador de arquivos", + "description": "Navegue, edite e transfira arquivos via SFTP." } }, "settings": { "host": { "enable": { "label": "Ativar Gerenciador de Arquivos", - "description": "Browse and edit files on this host over SFTP." + "description": "Navegue e edite arquivos neste servidor via SFTP." }, "defaultPath": { "label": "Caminho padrão" }, "scpLegacy": { - "label": "SCP Legacy Mode" + "label": "Modo Legado SCP" } }, "user": { "transferConcurrency": { - "label": "Simultaneous File Transfers", - "description": "How many files the side by side local/remote manager uploads or downloads at the same time. Lower this if your server limits SFTP channels." + "label": "Transferências simultâneas de arquivos", + "description": "Quantos arquivos o gerenciador local/remoto lado a lado carrega ou baixa simultaneamente? Diminua esse valor se o seu servidor limitar os canais SFTP." }, "confirmBeforeTrash": { - "label": "Confirm before moving files to trash", - "description": "Ask before moving remote files to trash. Permanent deletion still requires confirmation." + "label": "Confirme antes de mover os arquivos para a lixeira.", + "description": "Peça permissão antes de mover arquivos remotos para a lixeira. A exclusão permanente ainda requer confirmação." } } }, @@ -38,506 +38,518 @@ "label": "Gerenciador de Arquivos" }, "fileManager": { - "noHostSelected": "No host selected", - "initializingEditor": "Initializing editor...", - "file": "File", + "noHostSelected": "Nenhum host selecionado", + "initializingEditor": "Inicializando o editor...", + "file": "Arquivo", "folder": "Pasta", "uploadFile": "Enviar arquivo", "downloadFile": "Download", - "extractArchive": "Extract Archive", - "extractingArchive": "Extracting {{name}}...", - "archiveExtractedSuccessfully": "{{name}} extracted successfully", - "extractFailed": "Extract failed", - "compressFile": "Compress File", - "compressFiles": "Compress Files", - "compressFilesDesc": "Compress {{count}} items into an archive", - "archiveName": "Archive Name", - "enterArchiveName": "Enter archive name...", - "compressionFormat": "Compression Format", - "selectedFiles": "Selected files", - "andMoreFiles": "and {{count}} more...", - "compress": "Compress", - "compressingFiles": "Compressing {{count}} items into {{name}}...", - "filesCompressedSuccessfully": "{{name}} created successfully", - "compressFailed": "Compression failed", + "extractArchive": "Extrair arquivo", + "extractingArchive": "Extraindo {{name}}...", + "archiveExtractedSuccessfully": "{{name}} extraído com sucesso", + "extractFailed": "A extração falhou", + "compressFile": "Compactar arquivo", + "compressFiles": "Comprimir arquivos", + "compressFilesDesc": "Comprima {{count}} itens em um arquivo", + "archiveName": "Nome do arquivo", + "enterArchiveName": "Digite o nome do arquivo...", + "compressionFormat": "Formato de compressão", + "selectedFiles": "Arquivos selecionados", + "andMoreFiles": "e {{count}} mais...", + "compress": "Compressa", + "compressingFiles": "Comprimindo {{count}} itens em {{name}}...", + "filesCompressedSuccessfully": "{{name}} criado com sucesso", + "compressFailed": "A compressão falhou", "edit": "Editar", - "preview": "Preview", + "preview": "Pré-visualização", "previous": "Voltar", "next": "Próximo", - "pageXOfY": "Page {{current}} of {{total}}", - "zoomOut": "Zoom Out", - "zoomIn": "Zoom In", - "newFile": "New File", - "newFolder": "New Folder", + "pageXOfY": "Página {{current}} de {{total}}", + "zoomOut": "Diminuir o zoom", + "zoomIn": "Ampliar", + "newFile": "Novo arquivo", + "newFolder": "Nova pasta", "rename": "Renomear", - "uploading": "Uploading...", - "uploadingFile": "Uploading {{name}}...", - "uploadingChunk": "Uploading {{name}}: {{percent}}% (part {{chunk}} of {{total}})", - "fileName": "File Name", - "folderName": "Folder Name", - "fileUploadedSuccessfully": "File \"{{name}}\" uploaded successfully", - "failedToUploadFile": "Failed to upload file", - "uploadingFolderFiles": "Uploading {{count}} file(s)...", - "uploadedFolderFiles": "Uploaded {{count}} file(s) successfully", + "uploading": "Carregando...", + "uploadingFile": "Carregando {{name}}...", + "uploadingChunk": "Enviando {{name}}: {{percent}}% (parte {{chunk}} de {{total}})", + "fileName": "Nome do arquivo", + "folderName": "Nome da pasta", + "fileUploadedSuccessfully": "Arquivo \"{{name}}\" enviado com sucesso", + "failedToUploadFile": "Falha ao carregar o arquivo", + "uploadingFolderFiles": "Enviando {{count}} arquivo(s)...", + "uploadedFolderFiles": "Arquivo(s) carregado(s) com sucesso {{count}}", "uploadedFolderPartial": "Uploaded {{uploaded}} file(s), {{failed}} failed", - "fileDownloadedSuccessfully": "File \"{{name}}\" downloaded successfully", - "failedToDownloadFile": "Failed to download file", - "fileCreatedSuccessfully": "File \"{{name}}\" created successfully", - "folderCreatedSuccessfully": "Folder \"{{name}}\" created successfully", - "failedToCreateItem": "Failed to create item", - "operationFailed": "{{operation}} operation failed for {{name}}: {{error}}", - "failedToResolveSymlink": "Failed to resolve symlink", - "itemsDeletedSuccessfully": "{{count}} items deleted successfully", - "failedToDeleteItems": "Failed to delete items", - "sudoPasswordRequired": "Administrator Password Required", - "enterSudoPassword": "Enter sudo password to continue this operation", - "sudoPassword": "Sudo password", - "sudoOperationFailed": "Sudo operation failed", - "sudoAuthFailed": "Sudo authentication failed", - "dragFilesToUpload": "Drop files here to upload", - "dropToUploadHere": "Drop to upload here", - "dropToDownloadHere": "Drop to download here", + "fileDownloadedSuccessfully": "Arquivo \"{{name}}\" baixado com sucesso", + "failedToDownloadFile": "Falha ao baixar o arquivo", + "fileCreatedSuccessfully": "Arquivo \"{{name}}\" criado com sucesso", + "folderCreatedSuccessfully": "Pasta \"{{name}}\" criada com sucesso", + "failedToCreateItem": "Falha ao criar o item", + "operationFailed": "A operação {{operation}} falhou para {{name}}: {{error}}", + "failedToResolveSymlink": "Falha ao resolver o link simbólico", + "itemsDeletedSuccessfully": "{{count}} itens excluídos com sucesso", + "failedToDeleteItems": "Falha ao excluir itens", + "sudoPasswordRequired": "Senha de administrador necessária", + "enterSudoPassword": "Digite a senha de sudo para continuar esta operação.", + "sudoPassword": "Senha de sudo", + "sudoOperationFailed": "A operação sudo falhou", + "sudoAuthFailed": "Falha na autenticação sudo", + "dragFilesToUpload": "Arraste e solte os arquivos aqui para fazer o upload.", + "dropToUploadHere": "Arraste e faça o upload aqui.", + "dropToDownloadHere": "Faça o download aqui.", "localFiles": "Local", - "showLocalFiles": "Show local files (split view)", - "hideLocalFiles": "Hide local files", - "localHome": "Home folder", - "localPathPlaceholder": "Local folder path", - "localShowHidden": "Show hidden files", - "localHideHidden": "Hide hidden files", - "localRevealInFileManager": "Reveal in system file manager", - "localCannotOpenFolder": "Cannot open folder", - "localItemCount": "{{count}} items", - "localSelectedCount": "{{count}} selected", + "showLocalFiles": "Exibir arquivos locais (visualização dividida)", + "hideLocalFiles": "Ocultar arquivos locais", + "localHome": "Pasta inicial", + "localPathPlaceholder": "Caminho da pasta local", + "localShowHidden": "Mostrar arquivos ocultos", + "localHideHidden": "Ocultar arquivos ocultos", + "localRevealInFileManager": "Exibir no gerenciador de arquivos do sistema", + "localCannotOpenFolder": "Não é possível abrir a pasta", + "localItemCount": "{{count}} itens", + "localSelectedCount": "{{count}} selecionado", "back": "Voltar", - "forward": "Forward", - "up": "Up", - "kind": "Kind", - "localUploadingProgress": "Uploading {{current}} of {{total}}", - "localDownloadingProgress": "Downloading {{current}} of {{total}}", - "localTransferInFlight": "{{count}} at once", - "localPreparingDownload": "Preparing download...", - "localTransferCancelled": "Transfer cancelled", - "localNothingToTransfer": "Nothing to transfer", + "forward": "Avançar", + "up": "Acima", + "kind": "Tipo", + "localUploadingProgress": "Enviando {{current}} de {{total}}", + "localDownloadingProgress": "Baixando {{current}} de {{total}}", + "localTransferInFlight": "{{count}} imediatamente", + "localPreparingDownload": "Preparando o download...", + "localTransferCancelled": "Transferência cancelada", + "localNothingToTransfer": "Nada a transferir", "localUploadComplete": "Uploaded {{count}} file(s)", - "localUploadFailed": "Upload failed", + "localUploadFailed": "Falha no upload", "localUploadPartial": "Uploaded {{done}} file(s), {{failed}} failed", - "localDownloadComplete": "Downloaded {{count}} file(s)", - "localDownloadFailed": "Download failed", - "localDownloadPartial": "Downloaded {{done}} file(s), {{failed}} failed", - "localReplaceExistingPrompt": "{{count}} item(s) already exist in this folder. Replace them?", - "localReplace": "Replace", - "localSkipExisting": "Skip", - "localSkippedExisting": "Skipped {{count}} existing item(s)", - "localUnsafeNamesSkipped": "Skipped {{count}} item(s) whose names cannot be used on this computer", - "localOpen": "Open", - "localOpenFolder": "Open folder", - "localUploadToRemote": "Upload to server", - "localUploadToRemoteMany": "Upload {{count}} items to server", - "localMoveToTrash": "Move to Trash", - "localMoveToTrashMany": "Move {{count}} items to Trash", - "localTrashConfirmSingle": "Move \"{{name}}\" to the Trash?", - "localTrashConfirmFolder": "Move the folder \"{{name}}\" and all its contents to the Trash?", - "localTrashConfirmMany": "Move {{count}} items to the Trash?", - "localTrashed": "Moved {{count}} item(s) to the Trash", - "localTrashFailed": "Could not move to the Trash", - "localRenameFailed": "Rename failed", - "localCreateFailed": "Could not create item", - "goToParentFolder": "Go to parent folder", - "resizeSidebar": "Drag to resize the sidebar (double-click to reset)", - "resizeLocalPane": "Drag to resize the local pane (double-click to reset)", - "columns": "Columns", - "columnsHint": "Right-click to choose columns", - "emptyFolder": "This folder is empty", - "searchFiles": "Search files...", + "localDownloadComplete": "Arquivo(s) baixado(s) {{count}}", + "localDownloadFailed": "Falha no download", + "localDownloadPartial": "O download de {{done}} arquivo(s) falhou. {{failed}}", + "localReplaceExistingPrompt": "{{count}} Já existem itens nesta pasta. Deseja substituí-los?", + "localReplace": "Substituir", + "localSkipExisting": "Pular", + "localSkippedExisting": "Ignorou {{count}} item(ns) existente(s)", + "localUnsafeNamesSkipped": "Ignorado {{count}} item(ns) cujos nomes não podem ser usados neste computador", + "localOpen": "Abrir", + "localOpenFolder": "Abra a pasta", + "localUploadToRemote": "Enviar para o servidor", + "localUploadToRemoteMany": "Enviar {{count}} itens para o servidor", + "localMoveToTrash": "Mover para a Lixeira", + "localMoveToTrashMany": "Mova {{count}} itens para a Lixeira", + "localTrashConfirmSingle": "Mover \"{{name}}\" para a Lixeira?", + "localTrashConfirmFolder": "Mover a pasta \"{{name}}\" e todo o seu conteúdo para a Lixeira?", + "localTrashConfirmMany": "Mover {{count}} itens para a Lixeira?", + "localTrashed": "Movidos {{count}} itens para a Lixeira", + "localTrashFailed": "Não foi possível mover para a Lixeira", + "localRenameFailed": "A renomeação falhou", + "localCreateFailed": "Não foi possível criar o item.", + "goToParentFolder": "Acesse a pasta principal", + "resizeSidebar": "Arraste para redimensionar a barra lateral (clique duas vezes para redefinir).", + "resizeLocalPane": "Arraste para redimensionar o painel local (clique duas vezes para redefinir).", + "columns": "Colunas", + "columnsHint": "Clique com o botão direito do mouse para escolher as colunas.", + "emptyFolder": "Esta pasta está vazia", + "searchFiles": "Pesquisar arquivos...", "upload": "Fazer upload", - "selectHostToStart": "Select a host to start file management", - "sshRequiredForFileManager": "File manager requires SSH. This host does not have SSH enabled.", - "failedToConnect": "Failed to connect to SSH", - "failedToLoadDirectory": "Failed to load directory", - "noSSHConnection": "No SSH connection available", + "selectHostToStart": "Selecione um host para iniciar o gerenciamento de arquivos.", + "sshRequiredForFileManager": "O gerenciador de arquivos requer SSH. Este host não tem o SSH habilitado.", + "failedToConnect": "Falha ao conectar-se ao SSH", + "failedToLoadDirectory": "Falha ao carregar o diretório", + "noSSHConnection": "Nenhuma conexão SSH disponível", "copy": "Copiar", - "cut": "Cut", + "cut": "Corte", "paste": "Colar", - "copyPath": "Copy Path", - "copyPaths": "Copy Paths", + "copyPath": "Copiar caminho", + "copyPaths": "Copiar caminhos", "delete": "Apagar", - "properties": "Properties", + "properties": "Propriedades", "refresh": "Atualizar", - "downloadFiles": "Download {{count}} files to Browser", - "copyFiles": "Copy {{count}} items", - "cutFiles": "Cut {{count}} items", - "deleteFiles": "Delete {{count}} items", - "filesCopiedToClipboard": "{{count}} items copied to clipboard", - "filesCutToClipboard": "{{count}} items cut to clipboard", - "pathCopiedToClipboard": "Path copied to clipboard", - "pathsCopiedToClipboard": "{{count}} paths copied to clipboard", - "failedToCopyPath": "Failed to copy path to clipboard", - "copyFolderLink": "Copy Link to Folder", - "copyCurrentFolderLink": "Copy Link to Current Folder", - "folderLinkCopied": "Folder link copied to clipboard", - "failedToCopyFolderLink": "Failed to copy folder link", - "movedItems": "Moved {{count}} items", - "failedToDeleteItem": "Failed to delete item", - "itemRenamedSuccessfully": "{{type}} renamed successfully", - "failedToRenameItem": "Failed to rename item", + "downloadFiles": "Baixar {{count}} arquivos para o navegador", + "copyFiles": "Copiar {{count}} itens", + "cutFiles": "Recortar {{count}} itens", + "deleteFiles": "Excluir {{count}} itens", + "filesCopiedToClipboard": "{{count}} itens copiados para a área de transferência", + "filesCutToClipboard": "{{count}} itens copiados para a área de transferência", + "pathCopiedToClipboard": "Caminho copiado para a área de transferência", + "pathsCopiedToClipboard": "{{count}} caminhos copiados para a área de transferência", + "failedToCopyPath": "Falha ao copiar o caminho para a área de transferência", + "copyFolderLink": "Copiar link para a pasta", + "copyCurrentFolderLink": "Copiar link para a pasta atual", + "folderLinkCopied": "Link da pasta copiado para a área de transferência", + "failedToCopyFolderLink": "Falha ao copiar o link da pasta", + "movedItems": "Itens movidos {{count}}", + "failedToDeleteItem": "Falha ao excluir o item", + "itemRenamedSuccessfully": "{{type}} renomeado com sucesso", + "failedToRenameItem": "Falha ao renomear o item", "download": "Download", - "openExternalEditor": "Open externally", - "chooseExternalEditor": "Choose external editor", - "externalEditorSelected": "External editor selected", - "externalEditorDesktopOnly": "External editor is only available in the desktop app", - "externalEditorOpened": "Opened in external editor. Saving there will upload changes back to the server.", - "failedToOpenExternalEditor": "Failed to open external editor", - "failedToSelectExternalEditor": "Failed to select external editor", - "permissions": "Permissions", - "size": "Size", - "modified": "Modified", - "path": "Path", - "confirmDelete": "Are you sure you want to delete {{name}}?", - "permissionDenied": "Permission denied", - "serverError": "Server Error", - "fileSavedSuccessfully": "File saved successfully", - "failedToSaveFile": "Failed to save file", - "confirmDeleteSingleItem": "Are you sure you want to permanently delete \"{{name}}\"?", - "confirmDeleteMultipleItems": "Are you sure you want to permanently delete {{count}} items?", - "confirmDeleteMultipleItemsWithFolders": "Are you sure you want to permanently delete {{count}} items? This includes folders and their contents.", - "confirmDeleteFolder": "Are you sure you want to permanently delete the folder \"{{name}}\" and all its contents?", - "permanentDeleteWarning": "This action cannot be undone. The item(s) will be permanently deleted from the server.", - "moveToTrashWarning": "The item(s) will be moved to the Termix Trash and can be restored before the retention period expires.", - "itemsMovedToTrash": "{{count}} item(s) moved to Trash", - "trash": "Trash", - "trashDescription": "Deleted items are retained for {{days}} day(s) on this host.", - "trashLoadFailed": "Failed to load Trash", - "trashEmpty": "Trash is empty", + "openExternalEditor": "Abrir externamente", + "chooseExternalEditor": "Escolha um editor externo.", + "externalEditorSelected": "Editor externo selecionado", + "externalEditorDesktopOnly": "O editor externo está disponível apenas no aplicativo para desktop.", + "externalEditorOpened": "Aberto em um editor externo. Salvar aqui enviará as alterações de volta para o servidor.", + "failedToOpenExternalEditor": "Não foi possível abrir o editor externo.", + "failedToSelectExternalEditor": "Não foi possível selecionar o editor externo.", + "permissions": "Permissões", + "size": "Tamanho", + "modified": "Modificado", + "path": "Caminho", + "confirmDelete": "Tem certeza de que deseja excluir {{name}}?", + "permissionDenied": "Permissão negada", + "serverError": "Erro do servidor", + "fileSavedSuccessfully": "Arquivo salvo com sucesso", + "failedToSaveFile": "Falha ao salvar o arquivo", + "confirmDeleteSingleItem": "Tem certeza de que deseja excluir permanentemente \"{{name}}\"?", + "confirmDeleteMultipleItems": "Tem certeza de que deseja excluir permanentemente {{count}} itens?", + "confirmDeleteMultipleItemsWithFolders": "Tem certeza de que deseja excluir permanentemente {{count}} itens? Isso inclui pastas e seus conteúdos.", + "confirmDeleteFolder": "Tem certeza de que deseja excluir permanentemente a pasta \"{{name}}\" e todo o seu conteúdo?", + "permanentDeleteWarning": "Esta ação não pode ser desfeita. O(s) item(ns) será(ão) excluído(s) permanentemente do servidor.", + "moveToTrashWarning": "O(s) item(ns) será(ão) movido(s) para a Lixeira Termix e poderá(ão) ser restaurado(s) antes do término do período de retenção.", + "itemsMovedToTrash": "{{count}} item(ns) movido(s) para a Lixeira", + "trash": "Lixo", + "trashDescription": "Os itens excluídos são retidos por {{days}} dia(s) neste host.", + "trashLoadFailed": "Falha ao carregar a Lixeira", + "trashEmpty": "A lixeira está vazia.", "trashRestore": "Restaurar", - "trashRestored": "Restored {{name}}", - "trashRestoreFailed": "Failed to restore item. The original path may already exist.", - "trashDeletePermanently": "Delete permanently", - "trashDeleteConfirm": "Permanently delete {{name}}? This cannot be undone.", - "trashPermanentlyDeleted": "Permanently deleted {{name}}", - "trashDeleteFailed": "Failed to permanently delete item", - "trashEmptyAction": "Empty Trash", - "trashEmptyConfirm": "Permanently delete every item in Trash? This cannot be undone.", - "trashEmptied": "Trash emptied", - "trashRetention": "Automatic cleanup after (days)", - "trashRetentionSaved": "Trash retention updated", - "trashRetentionFailed": "Failed to update Trash retention", - "trashUnavailableConfirm": "This item cannot be moved to Trash, usually because it is on another filesystem or requires elevated permissions. Delete it permanently instead?", - "recent": "Recent", - "pinned": "Pinned", - "folderShortcuts": "Folder Shortcuts", - "failedToReconnectSSH": "Failed to reconnect SSH session", - "openTerminalHere": "Open Terminal Here", - "run": "Run", - "openTerminalInFolder": "Open Terminal in This Folder", - "openTerminalInFileLocation": "Open Terminal at File Location", - "runningFile": "Running - {{file}}", - "onlyRunExecutableFiles": "Can only run executable files", - "directories": "Directories", - "removedFromRecentFiles": "Removed \"{{name}}\" from recent files", - "removeFailed": "Remove failed", - "unpinnedSuccessfully": "Unpinned \"{{name}}\" successfully", - "unpinFailed": "Unpin failed", - "removedShortcut": "Removed shortcut \"{{name}}\"", - "removeShortcutFailed": "Remove shortcut failed", - "clearedAllRecentFiles": "Cleared all recent files", - "clearFailed": "Clear failed", - "removeFromRecentFiles": "Remove from recent files", - "clearAllRecentFiles": "Clear all recent files", - "unpinFile": "Unpin file", - "removeShortcut": "Remove shortcut", - "pinFile": "Pin file", - "addToShortcuts": "Add to shortcuts", - "pasteFailed": "Paste failed", - "noUndoableActions": "No undoable actions", - "undoCopySuccess": "Undid copy operation: Deleted {{count}} copied files", - "undoCopyFailedDelete": "Undo failed: Could not delete any copied files", - "undoCopyFailedNoInfo": "Undo failed: Could not find copied file information", - "undoMoveSuccess": "Undid move operation: Moved {{count}} files back to original location", - "undoMoveFailedMove": "Undo failed: Could not move any files back", - "undoMoveFailedNoInfo": "Undo failed: Could not find moved file information", - "undoDeleteNotSupported": "Delete operation cannot be undone: Files have been permanently deleted from server", - "undoTypeNotSupported": "Unsupported undo operation type", - "undoOperationFailed": "Undo operation failed", - "unknownError": "Unknown error", + "trashRestored": "Restaurado {{name}}", + "trashRestoreFailed": "Falha ao restaurar o item. O caminho original pode já existir.", + "trashDeletePermanently": "Excluir permanentemente", + "trashDeleteConfirm": "Excluir permanentemente {{name}}? Esta ação não pode ser desfeita.", + "trashPermanentlyDeleted": "Excluído permanentemente {{name}}", + "trashDeleteFailed": "Falha ao excluir o item permanentemente", + "trashEmptyAction": "Esvaziar o lixo", + "trashEmptyConfirm": "Excluir permanentemente todos os itens da Lixeira? Esta ação é irreversível.", + "trashEmptied": "Lixo esvaziado", + "trashRetention": "Limpeza automática após (dias)", + "trashRetentionSaved": "Retenção de lixo atualizada", + "trashRetentionFailed": "Falha na atualização da retenção de lixo", + "trashUnavailableConfirm": "Este item não pode ser movido para a Lixeira, geralmente porque está em outro sistema de arquivos ou requer permissões elevadas. Deseja excluí-lo permanentemente?", + "recent": "Recente", + "pinned": "Fixado", + "folderShortcuts": "Atalhos de pastas", + "failedToReconnectSSH": "Falha ao reconectar a sessão SSH", + "openTerminalHere": "Abra o terminal aqui", + "run": "Correr", + "openTerminalInFolder": "Abra o terminal nesta pasta.", + "openTerminalInFileLocation": "Abra o terminal no local do arquivo.", + "runningFile": "Correndo - {{file}}", + "onlyRunExecutableFiles": "Só é possível executar arquivos executáveis.", + "directories": "Diretórios", + "removedFromRecentFiles": "Removemos \"{{name}}\" dos arquivos recentes", + "removeFailed": "Remover falha", + "unpinnedSuccessfully": "Desfixado \"{{name}}\" com sucesso", + "unpinFailed": "Desafixar falhou", + "removedShortcut": "Atalho removido \"{{name}}\"", + "removeShortcutFailed": "A remoção do atalho falhou", + "clearedAllRecentFiles": "Apaguei todos os arquivos recentes.", + "clearFailed": "Limpar falhou", + "removeFromRecentFiles": "Remover dos arquivos recentes", + "clearAllRecentFiles": "Limpar todos os arquivos recentes", + "unpinFile": "Desafixar arquivo", + "removeShortcut": "Remover atalho", + "pinFile": "Arquivo PIN", + "addToShortcuts": "Adicionar aos atalhos", + "pasteFailed": "A colagem falhou", + "noUndoableActions": "Ações não podem ser desfeitas", + "undoCopySuccess": "Operação de cópia desfeita: Arquivos copiados excluídos {{count}}", + "undoCopyFailedDelete": "Falha ao desfazer: Não foi possível excluir nenhum arquivo copiado.", + "undoCopyFailedNoInfo": "A ação de desfazer falhou: Não foi possível encontrar as informações do arquivo copiado.", + "undoMoveSuccess": "Operação de movimentação desfeita: {{count}} arquivos foram movidos de volta para o local original.", + "undoMoveFailedMove": "Falha ao desfazer: Não foi possível mover nenhum arquivo de volta.", + "undoMoveFailedNoInfo": "A ação de desfazer falhou: Não foi possível encontrar as informações do arquivo movido.", + "undoDeleteNotSupported": "A operação de exclusão não pode ser desfeita: os arquivos foram excluídos permanentemente do servidor.", + "undoTypeNotSupported": "Tipo de operação de desfazer não suportado", + "undoOperationFailed": "A operação de desfazer falhou", + "unknownError": "Erro desconhecido", "confirm": "Confirmar", - "find": "Find...", - "replace": "Replace", - "downloadInstead": "Download Instead", - "keyboardShortcuts": "Keyboard Shortcuts", - "searchAndReplace": "Search & Replace", - "editing": "Editing", - "search": "Search", - "findNext": "Find Next", - "findPrevious": "Find Previous", + "find": "Encontrar...", + "replace": "Substituir", + "downloadInstead": "Baixe em vez de baixar.", + "keyboardShortcuts": "Atalhos de teclado", + "searchAndReplace": "Localizar e substituir", + "editing": "Edição", + "search": "Procurar", + "findNext": "Encontre a seguir", + "findPrevious": "Encontrar Anterior", "save": "Salvar", "selectAll": "Selecionar Tudo", - "undo": "Undo", - "redo": "Redo", - "moveLineUp": "Move Line Up", - "moveLineDown": "Move Line Down", - "toggleComment": "Toggle Comment", - "autoComplete": "Auto Complete", - "imageLoadError": "Failed to load image", - "startTyping": "Start typing...", - "unknownSize": "Unknown size", - "fileIsEmpty": "File is empty", - "largeFileWarning": "Large File Warning", - "largeFileWarningDesc": "This file is {{size}} in size, which may cause performance issues when opened as text.", - "fileNotFoundAndRemoved": "File \"{{name}}\" not found and has been removed from recent/pinned files", - "failedToLoadFile": "Failed to load file: {{error}}", - "serverErrorOccurred": "Server error occurred. Please try again later.", - "autoSaveFailed": "Auto-save failed", - "fileAutoSaved": "File auto-saved", - "moveFileFailed": "Failed to move {{name}}", - "moveOperationFailed": "Move operation failed", - "canOnlyCompareFiles": "Can only compare two files", - "comparingFiles": "Comparing files: {{file1}} and {{file2}}", - "dragFailed": "Drag operation failed", - "filePinnedSuccessfully": "File \"{{name}}\" pinned successfully", - "pinFileFailed": "Failed to pin file", - "fileUnpinnedSuccessfully": "File \"{{name}}\" unpinned successfully", - "unpinFileFailed": "Failed to unpin file", - "shortcutAddedSuccessfully": "Folder shortcut \"{{name}}\" added successfully", - "addShortcutFailed": "Failed to add shortcut", - "operationCompletedSuccessfully": "{{operation}} {{count}} items successfully", - "operationCompleted": "{{operation}} {{count}} items", - "downloadFileSuccess": "File {{name}} downloaded successfully", - "downloadFileFailed": "Download failed", - "downloadingFile": "Downloading {{name}}…", + "undo": "Desfazer", + "redo": "Refazer", + "moveLineUp": "Mova a fila para cima", + "moveLineDown": "Deslizar a linha para baixo", + "toggleComment": "Alternar comentário", + "autoComplete": "Preenchimento automático", + "imageLoadError": "Falha ao carregar a imagem", + "startTyping": "Comece a digitar...", + "unknownSize": "Tamanho desconhecido", + "fileIsEmpty": "O arquivo está vazio", + "largeFileWarning": "Aviso de Arquivo Grande", + "largeFileWarningDesc": "Este arquivo tem {{size}} de tamanho, o que pode causar problemas de desempenho ao ser aberto como texto.", + "fileNotFoundAndRemoved": "O arquivo \"{{name}}\" não foi encontrado e foi removido dos arquivos recentes/fixados", + "failedToLoadFile": "Falha ao carregar o arquivo: {{error}}", + "serverErrorOccurred": "Ocorreu um erro no servidor. Tente novamente mais tarde.", + "autoSaveFailed": "O salvamento automático falhou", + "fileAutoSaved": "Arquivo salvo automaticamente", + "moveFileFailed": "Falha ao mover {{name}}", + "moveOperationFailed": "A operação de movimentação falhou", + "canOnlyCompareFiles": "Só é possível comparar dois arquivos.", + "comparingFiles": "Comparando arquivos: {{file1}} e {{file2}}", + "dragFailed": "A operação de arrastar falhou", + "filePinnedSuccessfully": "Arquivo \"{{name}}\" fixado com sucesso", + "pinFileFailed": "Falha ao fixar o arquivo", + "fileUnpinnedSuccessfully": "Arquivo \"{{name}}\" desafixado com sucesso", + "unpinFileFailed": "Falha ao desafixar o arquivo", + "shortcutAddedSuccessfully": "Atalho de pasta \"{{name}}\" adicionado com sucesso", + "addShortcutFailed": "Falha ao adicionar atalho", + "operationCompletedSuccessfully": "{{operation}} {{count}} itens com sucesso", + "operationCompleted": "{{operation}} {{count}} itens", + "downloadFileSuccess": "Arquivo {{name}} baixado com sucesso", + "downloadFileFailed": "Falha no download", + "downloadingFile": "Baixando {{name}}…", "downloadProgressBytes": "{{transferred}} / {{total}}", - "moveTo": "Move to {{name}}", - "diffCompareWith": "Diff compare with {{name}}", - "dragOutsideToDownload": "Drag outside window to download ({{count}} files)", - "newFolderDefault": "NewFolder", - "newFileDefault": "NewFile.txt", - "successfullyMovedItems": "Successfully moved {{count}} items to {{target}}", - "move": "Move", - "searchInFile": "Search in file (Ctrl+F)", - "showKeyboardShortcuts": "Show keyboard shortcuts", - "decreaseFontSize": "Decrease font size", - "increaseFontSize": "Increase font size", - "startWritingMarkdown": "Start writing your markdown content...", - "loadingFileComparison": "Loading file comparison...", + "moveTo": "Mover para {{name}}", + "diffCompareWith": "Diff compare com {{name}}", + "dragOutsideToDownload": "Arraste para fora da janela para baixar ({{count}} arquivos)", + "newFolderDefault": "Nova pasta", + "newFileDefault": "NovoArquivo.txt", + "successfullyMovedItems": "Movidos com sucesso {{count}} itens para {{target}}", + "move": "Mover", + "searchInFile": "Pesquisar no arquivo (Ctrl+F)", + "showKeyboardShortcuts": "Mostrar atalhos de teclado", + "decreaseFontSize": "Diminuir o tamanho da fonte", + "increaseFontSize": "Aumentar o tamanho da fonte", + "startWritingMarkdown": "Comece a escrever seu conteúdo em Markdown...", + "loadingFileComparison": "Carregando comparação de arquivos...", "reload": "Recarregar", - "compare": "Compare", - "sideBySide": "Side by Side", - "inline": "Inline", - "fileComparison": "File Comparison: {{file1}} vs {{file2}}", - "fileTooLarge": "File too large: {{error}}", - "sshConnectionFailed": "SSH connection failed. Please check your connection to {{name}} ({{ip}}:{{port}})", - "loadFileFailed": "Failed to load file: {{error}}", + "compare": "Comparar", + "sideBySide": "Lado a lado", + "inline": "Em linha", + "fileComparison": "Comparação de arquivos: {{file1}} vs {{file2}}", + "fileTooLarge": "File is too large (> 10MB) and cannot be opened as text for security reasons.", + "sshConnectionFailed": "A conexão SSH falhou. Verifique sua conexão com {{name}} ({{ip}}:{{port}})", + "loadFileFailed": "Falha ao carregar o arquivo: {{error}}", "connecting": "Conectando...", - "connectedSuccessfully": "Connected successfully", - "totpVerificationFailed": "TOTP verification failed", - "browserSignInFailed": "Sign-in failed. Please try again.", - "authenticationFailed": "Authentication failed", - "incorrectPassphrase": "Incorrect passphrase. Please try again.", - "verificationCodePrompt": "Verification code:", - "changePermissions": "Change Permissions", - "currentPermissions": "Current Permissions", - "owner": "Owner", - "group": "Group", - "others": "Others", - "read": "Read", - "write": "Write", - "execute": "Execute", - "permissionsChangedSuccessfully": "Permissions changed successfully", - "failedToChangePermissions": "Failed to change permissions", - "name": "Name", - "sortByName": "Name", - "sortByDate": "Date Modified", - "sortBySize": "Size", - "ascending": "Ascending", - "descending": "Descending", - "root": "Root", - "new": "New", - "sortBy": "Sort By", - "items": "Items", - "selected": "Selected", + "connectedSuccessfully": "Conexão estabelecida com sucesso.", + "totpVerificationFailed": "A verificação TOTP falhou.", + "browserSignInFailed": "Falha ao efetuar o login. Tente novamente.", + "authenticationFailed": "A autenticação falhou.", + "incorrectPassphrase": "Senha incorreta. Tente novamente.", + "verificationCodePrompt": "Código de verificação:", + "changePermissions": "Alterar permissões", + "currentPermissions": "Permissões atuais", + "owner": "Proprietário", + "group": "Grupo", + "others": "Outros", + "read": "Ler", + "write": "Escrever", + "execute": "Executar", + "permissionsChangedSuccessfully": "Permissões alteradas com sucesso", + "failedToChangePermissions": "Falha ao alterar as permissões", + "name": "Nome", + "sortByName": "Nome", + "sortByDate": "Data de modificação", + "sortBySize": "Tamanho", + "ascending": "Ascendente", + "descending": "Descendente", + "root": "Raiz", + "new": "Novo", + "sortBy": "Ordenar por", + "items": "Unid", + "selected": "Selecionado", "editor": "Editor", "octal": "Octal", - "storage": "Storage", - "disk": "Disk", - "used": "Used", + "storage": "Armazenar", + "disk": "Disco", + "used": "Usado", "of": "de", - "toggleSidebar": "Toggle Sidebar", - "compactLayout": "Use compact layout", - "comfortableLayout": "Use comfortable layout", - "cannotLoadPdf": "Cannot load PDF", - "pdfLoadError": "There was an error loading this PDF file.", - "loadingPdf": "Loading PDF...", - "loadingPage": "Loading page...", + "toggleSidebar": "Alternar barra lateral", + "compactLayout": "Utilize um layout compacto.", + "comfortableLayout": "Use um layout confortável", + "cannotLoadPdf": "Não foi possível carregar o PDF.", + "pdfLoadError": "Ocorreu um erro ao carregar este arquivo PDF.", + "loadingPdf": "Loading PDF viewer...", + "loadingPage": "Carregando página...", "cancel": "Cancelar", - "copiedItems_one": "Copied {{count}} item", - "copiedItems_other": "Copied {{count}} items", - "deleteCopiedFileFailed": "Could not delete the copy of {{name}}: {{error}}", + "copiedItems_one": "Item copiado {{count}}", + "copiedItems_other": "Itens copiados {{count}}", + "deleteCopiedFileFailed": "Não foi possível excluir a cópia de {{name}}: {{error}}", "dragMovedItems_one": "Moved {{count}} item to {{target}}", - "dragMovedItems_other": "Moved {{count}} items to {{target}}", - "moveBackFileFailed": "Could not move {{name}} back: {{error}}", + "dragMovedItems_other": "Movidos {{count}} itens para {{target}}", + "moveBackFileFailed": "Não foi possível mover {{name}} para trás: {{error}}", "terminal": "Terminal: {{host}} ({{path}})", - "dragToDesktop": "Dragging {{name}} to the desktop", - "dragFilesToDesktop": "Dragging {{count}} files to the desktop", - "folderDragUnsupported": "Dragging folders to the desktop is not supported yet", - "saveToDesktopFailed": "Save failed: {{error}}", - "dragFailedDetail": "Drag failed: {{error}}", - "videoUnsupported": "Your browser cannot play this video format.", - "downloadToPlay": "Download to play it elsewhere", - "cannotPreviewType": "Cannot preview this file type", - "cannotPreviewTypeHint": "This file type has no preview. Download it to open it in another app." + "dragToDesktop": "Arrastar {{name}} para a área de trabalho", + "dragFilesToDesktop": "Arrastar {{count}} arquivos para a área de trabalho", + "folderDragUnsupported": "Arrastar pastas para a área de trabalho ainda não é suportado.", + "saveToDesktopFailed": "Falha ao salvar: {{error}}", + "dragFailedDetail": "Falha ao arrastar: {{error}}", + "videoUnsupported": "Seu navegador não consegue reproduzir este formato de vídeo.", + "downloadToPlay": "Faça o download para jogar em outro lugar.", + "cannotPreviewType": "Não é possível visualizar este tipo de arquivo.", + "cannotPreviewTypeHint": "Este tipo de arquivo não possui pré-visualização. Faça o download para abri-lo em outro aplicativo.", + "loadingFile": "Loading file...", + "loadingImage": "Loading image...", + "loadingEditor": "Loading editor...", + "loadingPreview": "Loading preview...", + "loadingAudio": "Loading audio player...", + "emptyPreview": "Nothing to preview yet...", + "revert": "Revert", + "openAsText": "Open as Text", + "confirmOpenAsText": "Do you want to continue opening this file as text? This may slow down your browser." }, "sftpTransfer": { "title": "SFTP", - "description": "Transfer files between two SSH hosts.", - "sourceServer": "Source Server", - "destinationServer": "Destination Server", - "selectHost": "Select host", - "noHostSelected": "No host selected", - "move": "Move", + "description": "Transferir arquivos entre dois hosts SSH.", + "sourceServer": "Servidor de origem", + "destinationServer": "Servidor de destino", + "selectHost": "Selecione o host", + "noHostSelected": "Nenhum host selecionado", + "move": "Mover", "copy": "Copiar", "upload": "Enviar", - "itemsSelected": "{{count}} item selected", - "itemsSelected_other": "{{count}} items selected", - "ready": "Ready", - "loadingHosts": "Loading hosts...", - "name": "Name", - "modified": "Modified", - "size": "Size", - "noFiles": "No files", - "open": "Open", - "up": "Up", + "itemsSelected": "{{count}} item selecionado", + "itemsSelected_other": "{{count}} itens selecionados", + "ready": "Preparar", + "loadingHosts": "Carregando hosts...", + "name": "Nome", + "modified": "Modificado", + "size": "Tamanho", + "noFiles": "Nenhum arquivo", + "open": "Abrir", + "up": "Acima", "refresh": "Atualizar", - "copyToTarget": "Copy to Target Directory", + "copyToTarget": "Copiar para o diretório de destino", "rename": "Renomear", "delete": "Apagar", - "editPermissions": "Edit Permissions", - "createNewFolder": "Create New Folder", - "deleteSelectedItems": "Delete Selected Items", + "editPermissions": "Editar permissões", + "createNewFolder": "Criar nova pasta", + "deleteSelectedItems": "Excluir itens selecionados", "deleteConfirm": "Delete {{count}} selected item?", - "deleteConfirm_other": "Delete {{count}} selected items?", + "deleteConfirm_other": "Excluir {{count}} itens selecionados?", "cancel": "Cancelar", "save": "Salvar", - "folderCreated": "Folder created", - "itemRenamed": "Item renamed", - "actionFailed": "Action failed", - "itemsDeleted": "{{count}} item deleted", - "itemsDeleted_other": "{{count}} items deleted", - "deleteFailed": "Delete failed", - "permissionsUpdated": "Permissions updated", - "noRemoteSessionConnected": "No remote session connected", - "failedToListFiles": "Failed to list files", - "failedToRefresh": "Failed to refresh", - "destinationInsideSource": "Destination cannot be inside the selected source path.", - "sameHostNoOp": "Source and destination are the same folder." + "folderCreated": "Pasta criada", + "itemRenamed": "Item renomeado", + "actionFailed": "A ação falhou", + "itemsDeleted": "{{count}} item excluído", + "itemsDeleted_other": "{{count}} itens excluídos", + "deleteFailed": "Falha ao excluir", + "permissionsUpdated": "Permissões atualizadas", + "noRemoteSessionConnected": "Nenhuma sessão remota conectada.", + "failedToListFiles": "Falha ao listar os arquivos", + "failedToRefresh": "Falha ao atualizar", + "destinationInsideSource": "O destino não pode estar dentro do caminho de origem selecionado.", + "sameHostNoOp": "A origem e o destino são a mesma pasta." }, "hosts": { "fileManager": "Gerenciador de Arquivos", - "fileManagerUrlCopied": "File Manager URL copied", + "fileManagerUrlCopied": "URL do Gerenciador de Arquivos copiada", "copyFileManagerUrlAction": "Copiar URL do Gerenciador de Arquivos", "docsLink": "Documentação", - "hostNotFound": "Host not found", - "loadingHost": "Loading host..." + "hostNotFound": "Host não encontrado", + "loadingHost": "Carregando host..." }, "onboarding": { - "feature_files": "File manager", - "feature_files_desc": "Browse, upload, download and edit files over SFTP without leaving the app." + "feature_files": "Gerenciador de arquivos", + "feature_files_desc": "Navegue, carregue, baixe e edite arquivos via SFTP sem sair do aplicativo." }, "terminal": { - "runTitle": "Running {{command}} - {{host}}", + "runTitle": "Executando {{command}} - {{host}}", "terminalTitle": "Terminal - {{host}}", "terminalWithPath": "Terminal - {{host}}:{{path}}" }, "transfer": { - "browseFolders": "Browse destination folders", - "browsePathError": "Could not open this path on the destination host.", - "browsePathWillBeCreated": "This folder does not exist yet. It will be created when the transfer starts.", + "browseFolders": "Procurar pastas de destino", + "browsePathError": "Não foi possível abrir este caminho no host de destino.", + "browsePathWillBeCreated": "Esta pasta ainda não existe. Ela será criada quando a transferência começar.", "cancel": "Cancelar", - "cleanupDestFiles": "Clean up destination", - "cleanupDestFilesError": "Cleanup failed", - "cleanupDestFilesNothing": "Nothing to clean up on the destination", - "cleanupDestFilesPartial": "Some partial files could not be removed", - "cleanupDestFilesSuccess": "Removed partial files from the destination", + "cleanupDestFiles": "destino de limpeza", + "cleanupDestFilesError": "A limpeza falhou", + "cleanupDestFilesNothing": "Nada para limpar no destino.", + "cleanupDestFilesPartial": "Alguns arquivos parciais não puderam ser removidos.", + "cleanupDestFilesSuccess": "Arquivos parciais removidos do destino.", "confirmCopy": "Copiar", - "confirmMove": "Move", - "copyFolderToHost": "Copy folder to host…", - "copyItemsToHost": "Copy {{count}} items to host…", - "copyToHost": "Copy to host…", - "destinationPath": "Destination path", - "destMustBeDirectory": "Destination must be a directory for multi-item transfers", - "goUp": "Go up", - "hostAuthRequired": "Authentication required. Open File Manager on this host first", - "hostConnecting": "Connecting…", - "hostConnectionFailed": "Connection failed", - "hostDisconnected": "Not connected", - "hostReady": "Ready", - "itemsSummary": "{{count}} items", - "jumpHostLimitation": "Both hosts must be reachable from the Termix server. Direct host-to-host routing is not supported.", + "confirmMove": "Mover", + "copyFolderToHost": "Copiar pasta para o host…", + "copyItemsToHost": "Copiar {{count}} itens para o host…", + "copyToHost": "Copiar para o host…", + "destinationPath": "Caminho de destino", + "destMustBeDirectory": "O destino deve ser um diretório para transferências de múltiplos itens.", + "goUp": "Subir", + "hostAuthRequired": "É necessária autenticação. Primeiro, abra o Gerenciador de Arquivos neste host.", + "hostConnecting": "Conectando…", + "hostConnectionFailed": "Falha na conexão", + "hostDisconnected": "Não conectado", + "hostReady": "Preparar", + "itemsSummary": "{{count}} itens", + "jumpHostLimitation": "Ambos os hosts devem ser acessíveis a partir do servidor Termix. O roteamento direto de host para host não é suportado.", "methodAuto": "Auto", - "methodAutoHint": "Picks tar or per-file SFTP based on file count, size, and compressibility. Single files always use streaming SFTP.", - "methodItemSftp": "Per-file SFTP", - "methodItemSftpHint": "Transfer each file individually over SFTP. Works on all hosts including Windows.", - "methodItemSftpLimitation": "Each file uses the same SFTP stream as a single-file copy, one after another. Progress is combined across all files, so the bar moves slowly during large files.", - "methodLabel": "Transfer method", - "methodPreviewError": "Could not preview transfer method. The server will still pick a method when you start.", - "methodPreviewLoading": "Calculating transfer method…", - "methodPreviewScanSummary": "{{fileCount}} files, {{totalSize}} total (scanned on source host).", - "methodPreviewWillUseItemSftp": "Will use: Per-file SFTP", - "methodPreviewWillUseTar": "Will use: Tar archive", + "methodAutoHint": "Seleciona o método de compactação (tar) ou SFTP por arquivo com base na quantidade de arquivos, tamanho e compressibilidade. Arquivos individuais sempre utilizam SFTP de streaming.", + "methodItemSftp": "SFTP por arquivo", + "methodItemSftpHint": "Transfira cada arquivo individualmente via SFTP. Funciona em todos os hosts, incluindo Windows.", + "methodItemSftpLimitation": "Cada arquivo utiliza o mesmo fluxo SFTP como uma cópia de arquivo único, um após o outro. O progresso é combinado em todos os arquivos, portanto a barra se move lentamente durante a transferência de arquivos grandes.", + "methodLabel": "Método de transferência", + "methodPreviewError": "Não foi possível visualizar o método de transferência. O servidor ainda escolherá um método quando você iniciar o servidor.", + "methodPreviewLoading": "Calculando o método de transferência…", + "methodPreviewScanSummary": "{{fileCount}} arquivos, {{totalSize}} total (verificado no host de origem).", + "methodPreviewWillUseItemSftp": "Será utilizado: SFTP por arquivo", + "methodPreviewWillUseTar": "Será utilizado: Arquivo tar", "methodReason": { - "user_item_sftp": "You chose per-file SFTP.", - "user_tar": "You chose tar archive.", - "tar_unavailable": "Tar is not available on one or both hosts, so per-file SFTP will be used instead.", - "windows_host": "A Windows host is involved, so tar is not used.", - "auto_multi_large": "Auto: multiple files including a large file ({{largestSize}}) with compressible data. Tar bundles them into one transfer.", - "auto_single_large_in_archive": "Auto: one large file ({{largestSize}}) in this set, so per-file SFTP.", - "auto_many_incompressible": "Auto: mostly incompressible data, so per-file SFTP.", - "auto_many_files": "Auto: many files ({{fileCount}}), tar cuts the per-file overhead.", - "auto_default": "Auto: per-file SFTP for this set." + "user_item_sftp": "Você escolheu SFTP por arquivo.", + "user_tar": "Você escolheu o arquivo tar.", + "tar_unavailable": "O arquivo tar não está disponível em um ou ambos os servidores, portanto, será utilizado o SFTP por arquivo.", + "windows_host": "Como se trata de um host Windows, o tar não é utilizado.", + "auto_multi_large": "Automático: vários arquivos, incluindo um arquivo grande ({{largestSize}}) com dados compressíveis. O Tar os agrupa em uma única transferência.", + "auto_single_large_in_archive": "Automático: um arquivo grande ({{largestSize}}) neste conjunto, portanto, SFTP por arquivo.", + "auto_many_incompressible": "Automático: dados em sua maioria não compressíveis, portanto, SFTP por arquivo.", + "auto_many_files": "Automático: muitos arquivos ({{fileCount}}), tar reduz a sobrecarga por arquivo.", + "auto_default": "Automático: SFTP por arquivo para este conjunto." }, - "methodTar": "Tar archive", - "methodTarHint": "Compress on source, transfer one archive, extract on destination. Requires tar on both Unix hosts.", - "metricsCompress": "Compress on source: {{duration}}", - "metricsExtract": "Extract on destination: {{duration}}", - "metricsPrepare": "Prepare destination: {{duration}}", - "metricsRouteBenchmark": "Route probe: direct {{direct}}, relay {{relay}}", - "metricsSourceDelete": "Remove from source: {{duration}}", + "methodTar": "Arquivo Tar", + "methodTarHint": "Comprima na origem, transfira um único arquivo compactado e extraia no destino. Requer o uso do tar em ambos os hosts Unix.", + "metricsCompress": "Comprimir na origem: {{duration}}", + "metricsExtract": "Extrair no destino: {{duration}}", + "metricsPrepare": "Preparar destino: {{duration}}", + "metricsRouteBenchmark": "Sondagem de rota: direta {{direct}}, retransmissão {{relay}}", + "metricsSourceDelete": "Remover da fonte: {{duration}}", "metricsTotal": "Total: {{duration}}", - "metricsTransfer": "End-to-end: {{throughput}} ({{duration}})", - "metricsVerify": "SHA-256 verified: {{duration}}", - "moveFolderToHost": "Move folder to host…", - "moveItemsToHost": "Move {{count}} items to host…", - "moveToHost": "Move to host…", - "noHostsConnected": "No other file-manager hosts available.", - "noHostsConnectedHint": "Add another SSH host with File Manager enabled in Host Manager.", - "parallelSegmentsHint": "Large files are split into 256 MB chunks. Multiple lanes use separate connections (like starting several transfers) for higher total throughput.", - "parallelSegmentsLabel": "Parallel transfer lanes", - "parallelSegmentsOption": "{{count}} lanes", - "progressBenchmarking": "Selecting the fastest transfer route…", + "metricsTransfer": "De ponta a ponta: {{throughput}} ({{duration}})", + "metricsVerify": "Verificado por SHA-256: {{duration}}", + "moveFolderToHost": "Mover pasta para o host…", + "moveItemsToHost": "Mova {{count}} itens para o host…", + "moveToHost": "Mover para o host…", + "noHostsConnected": "Não há outros servidores de gerenciamento de arquivos disponíveis.", + "noHostsConnectedHint": "Adicione outro host SSH com o Gerenciador de Arquivos habilitado no Gerenciador de Hosts.", + "parallelSegmentsHint": "Arquivos grandes são divididos em partes de 256 MB. Várias vias utilizam conexões separadas (como iniciar várias transferências) para obter uma taxa de transferência total maior.", + "parallelSegmentsLabel": "Faixas de transferência paralelas", + "parallelSegmentsOption": "{{count}} faixas", + "progressBenchmarking": "Selecionando a rota de transferência mais rápida…", "progressBytes": "{{transferred}} / {{total}}", "progressCancel": "Cancelar", - "progressCancelling": "Cancelling…", - "progressCompressing": "Compressing on source host…", - "progressExtracting": "Extracting on destination…", - "progressItems": "{{current}} / {{total}} files", - "progressReconnecting": "Reconnecting…", - "progressStalled": "Stalled", - "progressTotalSpeed": "{{speed}} total ({{lanes}} lanes)", - "progressTransferring": "Transferring data…", - "progressTransferringItems": "Transferring files ({{current}} of {{total}})…", - "progressVerifying": "Verifying file integrity…", - "recentDestinations": "Recent destinations", - "resumedHint": "Reconnected to an active transfer started in another window.", - "retryTransfer": "Retry", - "retryTransferError": "Retry failed", - "selectDestinationHost": "Select destination host", - "transferCancelled": "Transfer cancelled", - "transferCancelledCopyHint": "Partial files may remain on the destination.", - "transferCancelledMoveHint": "Partial files may remain on the destination. Source files were not removed.", - "transferError": "Transfer failed", - "transferFailedRetryHint": "Partial data was kept on the destination. Retry will resume when the connection is back.", - "transferPartialHint": "Could not transfer: {{paths}}", - "transferSuccess": "Transfer complete", - "metricsHopSourceRead": "Source → server: {{throughput}}", - "metricsHopDestSftpWrite": "Server → dest (SFTP): {{throughput}}", - "metricsHopDestLocalWrite": "Server → dest (local): {{throughput}}" + "progressCancelling": "Cancelando…", + "progressCompressing": "Comprimindo no host de origem…", + "progressExtracting": "Extraindo no destino…", + "progressItems": "{{current}} / {{total}} arquivos", + "progressReconnecting": "Reconectando…", + "progressStalled": "Paralisado", + "progressTotalSpeed": "{{speed}} total ({{lanes}} faixas)", + "progressTransferring": "Transferindo dados…", + "progressTransferringItems": "Transferindo arquivos ({{current}} de {{total}})…", + "progressVerifying": "Verificando a integridade do arquivo…", + "recentDestinations": "Destinos recentes", + "resumedHint": "Reconectado a uma transferência ativa iniciada em outra janela.", + "retryTransfer": "Tentar novamente", + "retryTransferError": "A nova tentativa falhou.", + "selectDestinationHost": "Selecione o host de destino", + "transferCancelled": "Transferência cancelada", + "transferCancelledCopyHint": "Alguns arquivos podem permanecer no destino.", + "transferCancelledMoveHint": "É possível que alguns arquivos permaneçam no destino. Os arquivos de origem não foram removidos.", + "transferError": "A transferência falhou", + "transferFailedRetryHint": "Dados parciais foram mantidos no destino. A tentativa será retomada quando a conexão for restabelecida.", + "transferPartialHint": "Não foi possível transferir: {{paths}}", + "transferSuccess": "Transferência concluída", + "metricsHopSourceRead": "Origem → servidor: {{throughput}}", + "metricsHopDestSftpWrite": "Servidor → destino (SFTP): {{throughput}}", + "metricsHopDestLocalWrite": "Servidor → destino (local): {{throughput}}" + }, + "plugin": { + "name": "File Manager" } } diff --git a/plugins/file-manager/locales/translated/pt_PT.json b/plugins/file-manager/locales/translated/pt_PT.json index e0f1b14b4..a584bb5c9 100644 --- a/plugins/file-manager/locales/translated/pt_PT.json +++ b/plugins/file-manager/locales/translated/pt_PT.json @@ -6,15 +6,15 @@ }, "permissions": { "use": { - "title": "Use file manager", - "description": "Browse, edit and transfer files over SFTP." + "title": "Use o gestor de ficheiros", + "description": "Navegue, edite e transfira ficheiros via SFTP." } }, "settings": { "host": { "enable": { "label": "Ativar Gestor de Ficheiros", - "description": "Browse and edit files on this host over SFTP." + "description": "Navegue e edite ficheiros neste servidor via SFTP." }, "defaultPath": { "label": "Caminho Predefinido" @@ -25,12 +25,12 @@ }, "user": { "transferConcurrency": { - "label": "Simultaneous File Transfers", - "description": "How many files the side by side local/remote manager uploads or downloads at the same time. Lower this if your server limits SFTP channels." + "label": "Transferências simultâneas de ficheiros", + "description": "Quantos ficheiros o gestor local/remoto lado a lado carrega ou descarrega simultaneamente? Diminua este valor se o seu servidor limitar os canais SFTP." }, "confirmBeforeTrash": { - "label": "Confirm before moving files to trash", - "description": "Ask before moving remote files to trash. Permanent deletion still requires confirmation." + "label": "Confirme antes de mover os ficheiros para a reciclagem.", + "description": "Peça permissão antes de mover ficheiros remotos para a reciclagem. A eliminação permanente ainda requer confirmação." } } }, @@ -72,13 +72,13 @@ "rename": "Renomear", "uploading": "A enviar...", "uploadingFile": "A enviar {{name}}...", - "uploadingChunk": "Uploading {{name}}: {{percent}}% (part {{chunk}} of {{total}})", + "uploadingChunk": "A enviar {{name}}: {{percent}}% (parte {{chunk}} de {{total}})", "fileName": "Nome do ficheiro", "folderName": "Nome da pasta", "fileUploadedSuccessfully": "Ficheiro \"{{name}}\" enviado com sucesso", "failedToUploadFile": "Falha ao enviar ficheiro", - "uploadingFolderFiles": "Uploading {{count}} file(s)...", - "uploadedFolderFiles": "Uploaded {{count}} file(s) successfully", + "uploadingFolderFiles": "A enviar {{count}} ficheiro(s)...", + "uploadedFolderFiles": "Ficheiro(s) carregado(s) com sucesso {{count}}", "uploadedFolderPartial": "Uploaded {{uploaded}} file(s), {{failed}} failed", "fileDownloadedSuccessfully": "Ficheiro \"{{name}}\" descarregado com sucesso", "failedToDownloadFile": "Falha ao descarregar ficheiro", @@ -95,58 +95,58 @@ "sudoOperationFailed": "Operação sudo falhou", "sudoAuthFailed": "Autenticação sudo falhou", "dragFilesToUpload": "Arraste ficheiros aqui para carregar", - "dropToUploadHere": "Drop to upload here", - "dropToDownloadHere": "Drop to download here", + "dropToUploadHere": "Arraste e faça o upload aqui.", + "dropToDownloadHere": "Faça o download aqui.", "localFiles": "Local", - "showLocalFiles": "Show local files (split view)", - "hideLocalFiles": "Hide local files", - "localHome": "Home folder", - "localPathPlaceholder": "Local folder path", - "localShowHidden": "Show hidden files", - "localHideHidden": "Hide hidden files", - "localRevealInFileManager": "Reveal in system file manager", - "localCannotOpenFolder": "Cannot open folder", + "showLocalFiles": "Visualizar ficheiros locais (visualização dividida)", + "hideLocalFiles": "Ocultar ficheiros locais", + "localHome": "Pasta inicial", + "localPathPlaceholder": "Caminho da pasta local", + "localShowHidden": "Mostrar ficheiros ocultos", + "localHideHidden": "Ocultar ficheiros ocultos", + "localRevealInFileManager": "Exibir no gestor de ficheiros do sistema", + "localCannotOpenFolder": "Não é possível abrir a pasta", "localItemCount": "{{count}} itens", "localSelectedCount": "{{count}} selecionado(s)", "back": "Voltar", - "forward": "Forward", - "up": "Up", - "kind": "Kind", - "localUploadingProgress": "Uploading {{current}} of {{total}}", - "localDownloadingProgress": "Downloading {{current}} of {{total}}", - "localTransferInFlight": "{{count}} at once", - "localPreparingDownload": "Preparing download...", + "forward": "Encaminhar", + "up": "Para cima", + "kind": "Amabilidade", + "localUploadingProgress": "A enviar {{current}} de {{total}}", + "localDownloadingProgress": "A descarregar {{current}} de {{total}}", + "localTransferInFlight": "{{count}} imediatamente", + "localPreparingDownload": "A preparar o download...", "localTransferCancelled": "Transferência cancelada", - "localNothingToTransfer": "Nothing to transfer", + "localNothingToTransfer": "Nada a transferir", "localUploadComplete": "Uploaded {{count}} file(s)", - "localUploadFailed": "Upload failed", + "localUploadFailed": "Falha no upload", "localUploadPartial": "Uploaded {{done}} file(s), {{failed}} failed", - "localDownloadComplete": "Downloaded {{count}} file(s)", + "localDownloadComplete": "Ficheiro(s) descarregado(s) {{count}}", "localDownloadFailed": "Falha ao descarregar", - "localDownloadPartial": "Downloaded {{done}} file(s), {{failed}} failed", - "localReplaceExistingPrompt": "{{count}} item(s) already exist in this folder. Replace them?", + "localDownloadPartial": "O download de {{done}} ficheiro(s) falhou. {{failed}}", + "localReplaceExistingPrompt": "{{count}} Já existem itens nesta pasta. Deseja substituí-los?", "localReplace": "Substituir", - "localSkipExisting": "Skip", - "localSkippedExisting": "Skipped {{count}} existing item(s)", - "localUnsafeNamesSkipped": "Skipped {{count}} item(s) whose names cannot be used on this computer", + "localSkipExisting": "Ignorar", + "localSkippedExisting": "Ignorou {{count}} item(s) existente(s)", + "localUnsafeNamesSkipped": "Ignorado {{count}} item(s) cujos nomes não podem ser utilizados neste computador", "localOpen": "Abrir", - "localOpenFolder": "Open folder", - "localUploadToRemote": "Upload to server", - "localUploadToRemoteMany": "Upload {{count}} items to server", - "localMoveToTrash": "Move to Trash", - "localMoveToTrashMany": "Move {{count}} items to Trash", - "localTrashConfirmSingle": "Move \"{{name}}\" to the Trash?", - "localTrashConfirmFolder": "Move the folder \"{{name}}\" and all its contents to the Trash?", - "localTrashConfirmMany": "Move {{count}} items to the Trash?", - "localTrashed": "Moved {{count}} item(s) to the Trash", - "localTrashFailed": "Could not move to the Trash", - "localRenameFailed": "Rename failed", - "localCreateFailed": "Could not create item", - "goToParentFolder": "Go to parent folder", - "resizeSidebar": "Drag to resize the sidebar (double-click to reset)", - "resizeLocalPane": "Drag to resize the local pane (double-click to reset)", + "localOpenFolder": "Abra a pasta", + "localUploadToRemote": "Enviar para o servidor", + "localUploadToRemoteMany": "Enviar {{count}} itens para o servidor", + "localMoveToTrash": "Mover para a Reciclagem", + "localMoveToTrashMany": "Mover {{count}} itens para a Reciclagem", + "localTrashConfirmSingle": "Deslocar \"{{name}}\" para a Reciclagem?", + "localTrashConfirmFolder": "Mover a pasta \"{{name}}\" e todo o seu conteúdo para a Reciclagem?", + "localTrashConfirmMany": "Mover {{count}} itens para a Reciclagem?", + "localTrashed": "Movidos {{count}} itens para a Reciclagem", + "localTrashFailed": "Não foi possível mover para a Reciclagem", + "localRenameFailed": "A renomeação falhou", + "localCreateFailed": "Não foi possível criar o item.", + "goToParentFolder": "Aceda à pasta principal", + "resizeSidebar": "Arraste para redimensionar a barra lateral (clique duas vezes para repor).", + "resizeLocalPane": "Arraste para redimensionar o painel local (clique duas vezes para repor).", "columns": "Colunas", - "columnsHint": "Right-click to choose columns", + "columnsHint": "Clique com o botão direito do rato para escolher as colunas.", "emptyFolder": "Esta pasta está vazia", "searchFiles": "Procurar ficheiros...", "upload": "Carregar", @@ -202,26 +202,26 @@ "confirmDeleteMultipleItemsWithFolders": "Tem a certeza de que pretende eliminar permanentemente {{count}} itens? Isto inclui pastas e o seu conteúdo.", "confirmDeleteFolder": "Tem a certeza de que pretende eliminar permanentemente a pasta \"{{name}}\" e todo o seu conteúdo?", "permanentDeleteWarning": "Esta ação não pode ser anulada. Os itens serão permanentemente eliminados do servidor.", - "moveToTrashWarning": "The item(s) will be moved to the Termix Trash and can be restored before the retention period expires.", - "itemsMovedToTrash": "{{count}} item(s) moved to Trash", - "trash": "Trash", - "trashDescription": "Deleted items are retained for {{days}} day(s) on this host.", - "trashLoadFailed": "Failed to load Trash", - "trashEmpty": "Trash is empty", + "moveToTrashWarning": "O(s) artigo(s) será(ão) movido(s) para a Reciclagem Termix e poderá(ão) ser restaurado(s) antes do fim do período de retenção.", + "itemsMovedToTrash": "{{count}} artigo(s) movido(s) para a Reciclagem", + "trash": "Lixo", + "trashDescription": "Os itens eliminados são retidos durante {{days}} dia(s) neste host.", + "trashLoadFailed": "Falha ao carregar a Reciclagem", + "trashEmpty": "A papeleira está vazia.", "trashRestore": "Restaurar", - "trashRestored": "Restored {{name}}", - "trashRestoreFailed": "Failed to restore item. The original path may already exist.", - "trashDeletePermanently": "Delete permanently", - "trashDeleteConfirm": "Permanently delete {{name}}? This cannot be undone.", - "trashPermanentlyDeleted": "Permanently deleted {{name}}", - "trashDeleteFailed": "Failed to permanently delete item", - "trashEmptyAction": "Empty Trash", - "trashEmptyConfirm": "Permanently delete every item in Trash? This cannot be undone.", - "trashEmptied": "Trash emptied", - "trashRetention": "Automatic cleanup after (days)", - "trashRetentionSaved": "Trash retention updated", - "trashRetentionFailed": "Failed to update Trash retention", - "trashUnavailableConfirm": "This item cannot be moved to Trash, usually because it is on another filesystem or requires elevated permissions. Delete it permanently instead?", + "trashRestored": "Restaurado {{name}}", + "trashRestoreFailed": "Falha ao restaurar o item. O caminho original pode já existir.", + "trashDeletePermanently": "Apagar permanentemente", + "trashDeleteConfirm": "Apagar permanentemente {{name}}? Esta ação não pode ser anulada.", + "trashPermanentlyDeleted": "Eliminado permanentemente {{name}}", + "trashDeleteFailed": "Falha ao eliminar o item permanentemente", + "trashEmptyAction": "Esvaziar o lixo", + "trashEmptyConfirm": "Apagar permanentemente todos os itens da Reciclagem? Esta ação é irreversível.", + "trashEmptied": "Lixo esvaziado", + "trashRetention": "Limpeza automática após (dias)", + "trashRetentionSaved": "Retenção de lixo atualizada", + "trashRetentionFailed": "Falha na atualização da retenção de lixo", + "trashUnavailableConfirm": "Este item não pode ser movido para a Reciclagem, geralmente porque está noutro sistema de ficheiros ou requer permissões elevadas. Deseja eliminá-lo permanentemente?", "recent": "Recentes", "pinned": "Fixados", "folderShortcuts": "Atalhos de pastas", @@ -303,7 +303,7 @@ "operationCompleted": "{{operation}} {{count}} itens", "downloadFileSuccess": "Ficheiro {{name}} descarregado com sucesso", "downloadFileFailed": "Falha ao descarregar", - "downloadingFile": "Downloading {{name}}…", + "downloadingFile": "A descarregar {{name}}…", "downloadProgressBytes": "{{transferred}} / {{total}}", "moveTo": "Mover para {{name}}", "diffCompareWith": "Comparar diferenças com {{name}}", @@ -323,13 +323,13 @@ "sideBySide": "Lado a lado", "inline": "Em linha", "fileComparison": "Comparação de ficheiros: {{file1}} vs {{file2}}", - "fileTooLarge": "Ficheiro demasiado grande: {{error}}", + "fileTooLarge": "File is too large (> 10MB) and cannot be opened as text for security reasons.", "sshConnectionFailed": "Falha na ligação SSH. Verifique a sua ligação a {{name}} ({{ip}}:{{port}})", "loadFileFailed": "Falha ao carregar ficheiro: {{error}}", "connecting": "A ligar...", "connectedSuccessfully": "Ligado com sucesso", "totpVerificationFailed": "Falha na verificação TOTP", - "browserSignInFailed": "Sign-in failed. Please try again.", + "browserSignInFailed": "Falha ao efetuar o login. Tente novamente.", "authenticationFailed": "Falha na autenticação", "incorrectPassphrase": "Frase-passe incorreta. Tente novamente.", "verificationCodePrompt": "Código de verificação:", @@ -361,73 +361,82 @@ "used": "Utilizado", "of": "de", "toggleSidebar": "Alternar Barra Lateral", - "compactLayout": "Use compact layout", - "comfortableLayout": "Use comfortable layout", + "compactLayout": "Utilize um layout compacto.", + "comfortableLayout": "Utilize um layout confortável", "cannotLoadPdf": "Não é possível carregar o PDF", "pdfLoadError": "Ocorreu um erro ao carregar este ficheiro PDF.", - "loadingPdf": "A carregar PDF...", + "loadingPdf": "Loading PDF viewer...", "loadingPage": "A carregar página...", "cancel": "Cancelar", - "copiedItems_one": "Copied {{count}} item", - "copiedItems_other": "Copied {{count}} items", - "deleteCopiedFileFailed": "Could not delete the copy of {{name}}: {{error}}", + "copiedItems_one": "Item copiado {{count}}", + "copiedItems_other": "Itens copiados {{count}}", + "deleteCopiedFileFailed": "Não foi possível eliminar a cópia de {{name}}: {{error}}", "dragMovedItems_one": "Moved {{count}} item to {{target}}", - "dragMovedItems_other": "Moved {{count}} items to {{target}}", - "moveBackFileFailed": "Could not move {{name}} back: {{error}}", + "dragMovedItems_other": "Movidos {{count}} itens para {{target}}", + "moveBackFileFailed": "Não foi possível mover {{name}} para trás: {{error}}", "terminal": "Terminal: {{host}} ({{path}})", - "dragToDesktop": "Dragging {{name}} to the desktop", - "dragFilesToDesktop": "Dragging {{count}} files to the desktop", - "folderDragUnsupported": "Dragging folders to the desktop is not supported yet", - "saveToDesktopFailed": "Save failed: {{error}}", - "dragFailedDetail": "Drag failed: {{error}}", - "videoUnsupported": "Your browser cannot play this video format.", - "downloadToPlay": "Download to play it elsewhere", - "cannotPreviewType": "Cannot preview this file type", - "cannotPreviewTypeHint": "This file type has no preview. Download it to open it in another app." + "dragToDesktop": "Arrastar {{name}} para o ambiente de trabalho", + "dragFilesToDesktop": "Arrastar {{count}} ficheiros para o ambiente de trabalho", + "folderDragUnsupported": "Arrastar pastas para o ambiente de trabalho ainda não é suportado.", + "saveToDesktopFailed": "Falha ao guardar: {{error}}", + "dragFailedDetail": "Falha ao arrastar: {{error}}", + "videoUnsupported": "O seu navegador não consegue reproduzir este formato de vídeo.", + "downloadToPlay": "Faça o download para jogar noutro local.", + "cannotPreviewType": "Não é possível visualizar este tipo de ficheiro.", + "cannotPreviewTypeHint": "Este tipo de ficheiro não possui pré-visualização. Faça o download para abri-lo noutra aplicação.", + "loadingFile": "Loading file...", + "loadingImage": "Loading image...", + "loadingEditor": "Loading editor...", + "loadingPreview": "Loading preview...", + "loadingAudio": "Loading audio player...", + "emptyPreview": "Nothing to preview yet...", + "revert": "Revert", + "openAsText": "Open as Text", + "confirmOpenAsText": "Do you want to continue opening this file as text? This may slow down your browser." }, "sftpTransfer": { "title": "SFTP", - "description": "Transfer files between two SSH hosts.", - "sourceServer": "Source Server", - "destinationServer": "Destination Server", - "selectHost": "Select host", + "description": "Transferir ficheiros entre dois hosts SSH.", + "sourceServer": "Servidor de origem", + "destinationServer": "Servidor de destino", + "selectHost": "Selecione o host", "noHostSelected": "Nenhum anfitrião selecionado", "move": "Mover", "copy": "Copiar", "upload": "Carregar", - "itemsSelected": "{{count}} item selected", - "itemsSelected_other": "{{count}} items selected", + "itemsSelected": "{{count}} item selecionado", + "itemsSelected_other": "{{count}} itens selecionados", "ready": "Pronto", "loadingHosts": "A carregar hosts...", "name": "Nome", "modified": "Modificado", "size": "Tamanho", - "noFiles": "No files", + "noFiles": "Nenhum ficheiro", "open": "Abrir", - "up": "Up", + "up": "Para cima", "refresh": "Atualizar", - "copyToTarget": "Copy to Target Directory", + "copyToTarget": "Copiar para o diretório de destino", "rename": "Renomear", "delete": "Eliminar", - "editPermissions": "Edit Permissions", - "createNewFolder": "Create New Folder", - "deleteSelectedItems": "Delete Selected Items", + "editPermissions": "Editar permissões", + "createNewFolder": "Criar nova pasta", + "deleteSelectedItems": "Apagar itens selecionados", "deleteConfirm": "Delete {{count}} selected item?", - "deleteConfirm_other": "Delete {{count}} selected items?", + "deleteConfirm_other": "Apagar {{count}} itens selecionados?", "cancel": "Cancelar", "save": "Guardar", - "folderCreated": "Folder created", - "itemRenamed": "Item renamed", + "folderCreated": "Pasta criada", + "itemRenamed": "Artigo renomeado", "actionFailed": "A ação falhou", - "itemsDeleted": "{{count}} item deleted", - "itemsDeleted_other": "{{count}} items deleted", - "deleteFailed": "Delete failed", - "permissionsUpdated": "Permissions updated", - "noRemoteSessionConnected": "No remote session connected", - "failedToListFiles": "Failed to list files", - "failedToRefresh": "Failed to refresh", - "destinationInsideSource": "Destination cannot be inside the selected source path.", - "sameHostNoOp": "Source and destination are the same folder." + "itemsDeleted": "{{count}} item eliminado", + "itemsDeleted_other": "{{count}} itens eliminados", + "deleteFailed": "Falha ao eliminar", + "permissionsUpdated": "Permissões atualizadas", + "noRemoteSessionConnected": "Nenhuma sessão remota ligada.", + "failedToListFiles": "Falha ao listar os ficheiros", + "failedToRefresh": "Falha ao atualizar", + "destinationInsideSource": "O destino não pode estar dentro do caminho de origem selecionado.", + "sameHostNoOp": "A origem e o destino são a mesma pasta." }, "hosts": { "fileManager": "Gestor de Ficheiros", @@ -438,8 +447,8 @@ "loadingHost": "A carregar o host..." }, "onboarding": { - "feature_files": "File manager", - "feature_files_desc": "Browse, upload, download and edit files over SFTP without leaving the app." + "feature_files": "Gestor de arquivos", + "feature_files_desc": "Navegue, carregue, descarregue e edite ficheiros via SFTP sem sair da aplicação." }, "terminal": { "runTitle": "A executar {{command}} - {{host}}", @@ -464,7 +473,7 @@ "destinationPath": "Caminho de destino", "destMustBeDirectory": "O destino deve ser uma pasta para transferências de vários itens.", "goUp": "Subir", - "hostAuthRequired": "Authentication required. Open File Manager on this host first", + "hostAuthRequired": "É necessária autenticação. Primeiro, abra o Gestor de Ficheiros neste host.", "hostConnecting": "A ligar…", "hostConnectionFailed": "Falha na ligação", "hostDisconnected": "Desligado", @@ -485,12 +494,12 @@ "methodReason": { "user_item_sftp": "Optou por SFTP ficheiro a ficheiro.", "user_tar": "Optou por ficheiro tar.", - "tar_unavailable": "Tar is not available on one or both hosts, so per-file SFTP will be used instead.", - "windows_host": "A Windows host is involved, so tar is not used.", - "auto_multi_large": "Auto: multiple files including a large file ({{largestSize}}) with compressible data. Tar bundles them into one transfer.", - "auto_single_large_in_archive": "Auto: one large file ({{largestSize}}) in this set, so per-file SFTP.", - "auto_many_incompressible": "Auto: mostly incompressible data, so per-file SFTP.", - "auto_many_files": "Auto: many files ({{fileCount}}), tar cuts the per-file overhead.", + "tar_unavailable": "O ficheiro tar não está disponível num ou em ambos os servidores, pelo que será utilizado o SFTP por ficheiro.", + "windows_host": "Como se trata de um host Windows, o tar não é utilizado.", + "auto_multi_large": "Automático: vários ficheiros, incluindo um ficheiro grande ({{largestSize}}) com dados compressíveis. O Tar agrupa-os numa única transferência.", + "auto_single_large_in_archive": "Automático: um ficheiro grande ({{largestSize}}) neste conjunto, portanto, SFTP por ficheiro.", + "auto_many_incompressible": "Automático: dados maioritariamente não compressíveis, portanto, SFTP por ficheiro.", + "auto_many_files": "Automático: muitos ficheiros ({{fileCount}}), o tar reduz a sobrecarga por ficheiro.", "auto_default": "Automático: SFTP ficheiro a ficheiro para este conjunto." }, "methodTar": "Arquivo Tar", @@ -498,11 +507,11 @@ "metricsCompress": "Compressão na origem: {{duration}}", "metricsExtract": "Extração no destino: {{duration}}", "metricsPrepare": "Preparar destino: {{duration}}", - "metricsRouteBenchmark": "Route probe: direct {{direct}}, relay {{relay}}", + "metricsRouteBenchmark": "Sondagem de percurso: direta {{direct}}, retransmissão {{relay}}", "metricsSourceDelete": "Remoção da origem: {{duration}}", "metricsTotal": "Total: {{duration}}", "metricsTransfer": "Ponta a ponta: {{throughput}} ({{duration}})", - "metricsVerify": "SHA-256 verified: {{duration}}", + "metricsVerify": "Verificado por SHA-256: {{duration}}", "moveFolderToHost": "Mover pasta para o host…", "moveItemsToHost": "Mover {{count}} itens para o host…", "moveToHost": "Mover para o host…", @@ -511,7 +520,7 @@ "parallelSegmentsHint": "Os ficheiros grandes são divididos em partes de 256 MB. Múltiplas vias utilizam ligações separadas (como iniciar várias transferências) para um maior débito total.", "parallelSegmentsLabel": "Vias de transferência paralelas", "parallelSegmentsOption": "{{count}} vias", - "progressBenchmarking": "Selecting the fastest transfer route…", + "progressBenchmarking": "Selecionando a rota de transferência mais rápida…", "progressBytes": "{{transferred}} / {{total}}", "progressCancel": "Cancelar", "progressCancelling": "A cancelar…", @@ -523,7 +532,7 @@ "progressTotalSpeed": "{{speed}} total ({{lanes}} vias)", "progressTransferring": "A transferir dados…", "progressTransferringItems": "A transferir ficheiros ({{current}} de {{total}})…", - "progressVerifying": "Verifying file integrity…", + "progressVerifying": "Verificação da integridade do ficheiro…", "recentDestinations": "Destinos recentes", "resumedHint": "Reconectado a uma transferência ativa iniciada noutra janela.", "retryTransfer": "Repetir", @@ -539,5 +548,8 @@ "metricsHopSourceRead": "Origem → servidor: {{throughput}}", "metricsHopDestSftpWrite": "Servidor → destino (SFTP): {{throughput}}", "metricsHopDestLocalWrite": "Servidor → destino (local): {{throughput}}" + }, + "plugin": { + "name": "File Manager" } } diff --git a/plugins/file-manager/locales/translated/ro_RO.json b/plugins/file-manager/locales/translated/ro_RO.json index b6233bd42..4ec35cc92 100644 --- a/plugins/file-manager/locales/translated/ro_RO.json +++ b/plugins/file-manager/locales/translated/ro_RO.json @@ -323,7 +323,7 @@ "sideBySide": "Alăturat", "inline": "În linie", "fileComparison": "Comparație fișiere: {{file1}} vs {{file2}}", - "fileTooLarge": "Fișier prea mare: {{error}}", + "fileTooLarge": "File is too large (> 10MB) and cannot be opened as text for security reasons.", "sshConnectionFailed": "Conexiunea SSH a eșuat. Vă rugăm să verificați conexiunea la {{name}} ({{ip}}:{{port}})", "loadFileFailed": "Nu s-a putut încărca fișierul: {{error}}", "connecting": "Se conectează...", @@ -365,7 +365,7 @@ "comfortableLayout": "Folosește un aspect confortabil", "cannotLoadPdf": "Nu se poate încărca PDF-ul", "pdfLoadError": "A apărut o eroare la încărcarea acestui fișier PDF.", - "loadingPdf": "Se încarcă PDF-ul...", + "loadingPdf": "Loading PDF viewer...", "loadingPage": "Se încarcă pagina...", "cancel": "Anula", "copiedItems_one": "Elementul {{count}} a fost copiat", @@ -383,7 +383,16 @@ "videoUnsupported": "Browserul dvs. nu poate reda acest format video.", "downloadToPlay": "Descarcă pentru a-l reda în altă parte", "cannotPreviewType": "Nu se poate previzualiza acest tip de fișier", - "cannotPreviewTypeHint": "Acest tip de fișier nu are previzualizare. Descărcați-l pentru a-l deschide în altă aplicație." + "cannotPreviewTypeHint": "Acest tip de fișier nu are previzualizare. Descărcați-l pentru a-l deschide în altă aplicație.", + "loadingFile": "Loading file...", + "loadingImage": "Loading image...", + "loadingEditor": "Loading editor...", + "loadingPreview": "Loading preview...", + "loadingAudio": "Loading audio player...", + "emptyPreview": "Nothing to preview yet...", + "revert": "Revert", + "openAsText": "Open as Text", + "confirmOpenAsText": "Do you want to continue opening this file as text? This may slow down your browser." }, "sftpTransfer": { "title": "SFTP", @@ -539,5 +548,8 @@ "metricsHopSourceRead": "Sursă → server: {{throughput}}", "metricsHopDestSftpWrite": "Server → destinație (SFTP): {{throughput}}", "metricsHopDestLocalWrite": "Server → destinație (locală): {{throughput}}" + }, + "plugin": { + "name": "File Manager" } } diff --git a/plugins/file-manager/locales/translated/ru_RU.json b/plugins/file-manager/locales/translated/ru_RU.json index 4be46429a..caab155a8 100644 --- a/plugins/file-manager/locales/translated/ru_RU.json +++ b/plugins/file-manager/locales/translated/ru_RU.json @@ -6,15 +6,15 @@ }, "permissions": { "use": { - "title": "Use file manager", - "description": "Browse, edit and transfer files over SFTP." + "title": "Используйте файловый менеджер", + "description": "Просматривайте, редактируйте и передавайте файлы по протоколу SFTP." } }, "settings": { "host": { "enable": { "label": "Включить файловый менеджер", - "description": "Browse and edit files on this host over SFTP." + "description": "Просматривайте и редактируйте файлы на этом хосте по протоколу SFTP." }, "defaultPath": { "label": "Путь по умолчанию" @@ -25,12 +25,12 @@ }, "user": { "transferConcurrency": { - "label": "Simultaneous File Transfers", - "description": "How many files the side by side local/remote manager uploads or downloads at the same time. Lower this if your server limits SFTP channels." + "label": "Одновременная передача файлов", + "description": "Сколько файлов менеджер, работающий в режиме локального/удалённого доступа, может загружать или скачивать одновременно. Уменьшите это значение, если ваш сервер ограничивает количество SFTP-каналов." }, "confirmBeforeTrash": { - "label": "Confirm before moving files to trash", - "description": "Ask before moving remote files to trash. Permanent deletion still requires confirmation." + "label": "Перед перемещением файлов в корзину подтвердите перемещение.", + "description": "Перед перемещением удалённых файлов в корзину запросите подтверждение. Для окончательного удаления всё равно потребуется подтверждение." } } }, @@ -72,14 +72,14 @@ "rename": "Переименовать", "uploading": "Загрузка...", "uploadingFile": "Загрузка {{name}}...", - "uploadingChunk": "Uploading {{name}}: {{percent}}% (part {{chunk}} of {{total}})", + "uploadingChunk": "Загрузка {{name}}: {{percent}}% (часть {{chunk}} из {{total}})", "fileName": "Имя файла", "folderName": "Имя папки", "fileUploadedSuccessfully": "Файл «{{name}}» успешно загружен", "failedToUploadFile": "Не удалось загрузить файл", - "uploadingFolderFiles": "Uploading {{count}} file(s)...", - "uploadedFolderFiles": "Uploaded {{count}} file(s) successfully", - "uploadedFolderPartial": "Uploaded {{uploaded}} file(s), {{failed}} failed", + "uploadingFolderFiles": "Загрузка {{count}} файла(ов)...", + "uploadedFolderFiles": "Файл(ы) {{count}} успешно загружен(ы).", + "uploadedFolderPartial": "Загрузка {{uploaded}} файла(ов), {{failed}} не удалась.", "fileDownloadedSuccessfully": "Файл «{{name}}» успешно скачан", "failedToDownloadFile": "Не удалось скачать файл", "fileCreatedSuccessfully": "Файл «{{name}}» успешно создан", @@ -95,58 +95,58 @@ "sudoOperationFailed": "Операция sudo не удалась", "sudoAuthFailed": "Аутентификация sudo не удалась", "dragFilesToUpload": "Перетащите файлы сюда для загрузки", - "dropToUploadHere": "Drop to upload here", - "dropToDownloadHere": "Drop to download here", + "dropToUploadHere": "Перетащите файл для загрузки сюда.", + "dropToDownloadHere": "Скачать можно здесь (перетащите ссылку)", "localFiles": "Локальная", - "showLocalFiles": "Show local files (split view)", - "hideLocalFiles": "Hide local files", - "localHome": "Home folder", - "localPathPlaceholder": "Local folder path", - "localShowHidden": "Show hidden files", - "localHideHidden": "Hide hidden files", - "localRevealInFileManager": "Reveal in system file manager", - "localCannotOpenFolder": "Cannot open folder", + "showLocalFiles": "Отображение локальных файлов (в режиме разделенного экрана)", + "hideLocalFiles": "Скрыть локальные файлы", + "localHome": "Домашняя папка", + "localPathPlaceholder": "Путь к локальной папке", + "localShowHidden": "Показать скрытые файлы", + "localHideHidden": "Скрыть скрытые файлы", + "localRevealInFileManager": "Показать в системном файловом менеджере", + "localCannotOpenFolder": "Не удаётся открыть папку", "localItemCount": "{{count}} элементов", "localSelectedCount": "{{count}} выбрано", "back": "Назад", - "forward": "Forward", - "up": "Up", - "kind": "Kind", - "localUploadingProgress": "Uploading {{current}} of {{total}}", - "localDownloadingProgress": "Downloading {{current}} of {{total}}", - "localTransferInFlight": "{{count}} at once", - "localPreparingDownload": "Preparing download...", + "forward": "Вперед", + "up": "Вверх", + "kind": "Добрый", + "localUploadingProgress": "Загрузка {{current}} из {{total}}", + "localDownloadingProgress": "Загрузка {{current}} из {{total}}", + "localTransferInFlight": "{{count}} сразу", + "localPreparingDownload": "Подготовка к загрузке...", "localTransferCancelled": "Передача отменена", - "localNothingToTransfer": "Nothing to transfer", - "localUploadComplete": "Uploaded {{count}} file(s)", - "localUploadFailed": "Upload failed", - "localUploadPartial": "Uploaded {{done}} file(s), {{failed}} failed", - "localDownloadComplete": "Downloaded {{count}} file(s)", + "localNothingToTransfer": "Нет ничего для перевода", + "localUploadComplete": "Загружено {{count}} файлов", + "localUploadFailed": "Загрузка не удалась.", + "localUploadPartial": "Загрузка {{done}} файла(ов), {{failed}} не удалась.", + "localDownloadComplete": "Загружено {{count}} файлов", "localDownloadFailed": "Не удалось загрузить", - "localDownloadPartial": "Downloaded {{done}} file(s), {{failed}} failed", - "localReplaceExistingPrompt": "{{count}} item(s) already exist in this folder. Replace them?", + "localDownloadPartial": "Загрузка {{done}} файла(ов), {{failed}} не удалась.", + "localReplaceExistingPrompt": "{{count}} Элемент(ы) уже существуют в этой папке. Заменить их?", "localReplace": "Заменить", - "localSkipExisting": "Skip", - "localSkippedExisting": "Skipped {{count}} existing item(s)", - "localUnsafeNamesSkipped": "Skipped {{count}} item(s) whose names cannot be used on this computer", + "localSkipExisting": "Пропускать", + "localSkippedExisting": "Пропущено {{count}} существующих элементов", + "localUnsafeNamesSkipped": "Пропущено {{count}} элементов, названия которых нельзя использовать на этом компьютере", "localOpen": "Открыть", - "localOpenFolder": "Open folder", - "localUploadToRemote": "Upload to server", - "localUploadToRemoteMany": "Upload {{count}} items to server", - "localMoveToTrash": "Move to Trash", - "localMoveToTrashMany": "Move {{count}} items to Trash", - "localTrashConfirmSingle": "Move \"{{name}}\" to the Trash?", - "localTrashConfirmFolder": "Move the folder \"{{name}}\" and all its contents to the Trash?", - "localTrashConfirmMany": "Move {{count}} items to the Trash?", - "localTrashed": "Moved {{count}} item(s) to the Trash", - "localTrashFailed": "Could not move to the Trash", - "localRenameFailed": "Rename failed", - "localCreateFailed": "Could not create item", - "goToParentFolder": "Go to parent folder", - "resizeSidebar": "Drag to resize the sidebar (double-click to reset)", - "resizeLocalPane": "Drag to resize the local pane (double-click to reset)", + "localOpenFolder": "Открыть папку", + "localUploadToRemote": "Загрузка на сервер", + "localUploadToRemoteMany": "Загрузите {{count}} предметов на сервер", + "localMoveToTrash": "Переместить в мусорное ведро", + "localMoveToTrashMany": "Переместить {{count}} элементов в корзину", + "localTrashConfirmSingle": "Переместить \"{{name}}\" в корзину?", + "localTrashConfirmFolder": "Переместить папку \"{{name}}\" и всё её содержимое в корзину?", + "localTrashConfirmMany": "Переместить {{count}} элементов в корзину?", + "localTrashed": "Перемещено {{count}} предметов в корзину", + "localTrashFailed": "Не удалось переместить в мусорный бак.", + "localRenameFailed": "Переименование не удалось.", + "localCreateFailed": "Не удалось создать элемент.", + "goToParentFolder": "Перейдите в родительскую папку", + "resizeSidebar": "Перетащите ползунок, чтобы изменить размер боковой панели (двойной щелчок для сброса).", + "resizeLocalPane": "Перетащите курсор, чтобы изменить размер локальной панели (двойной щелчок для сброса).", "columns": "Столбцы", - "columnsHint": "Right-click to choose columns", + "columnsHint": "Щелкните правой кнопкой мыши, чтобы выбрать столбцы.", "emptyFolder": "Эта папка пуста", "searchFiles": "Поиск файлов...", "upload": "Загрузить", @@ -202,26 +202,26 @@ "confirmDeleteMultipleItemsWithFolders": "Вы уверены, что хотите безвозвратно удалить {{count}} элементов? Включая папки и их содержимое.", "confirmDeleteFolder": "Вы уверены, что хотите безвозвратно удалить папку \"{{name}}\" и всё её содержимое?", "permanentDeleteWarning": "Это действие необратимо. Элемент(ы) будут безвозвратно удалены с сервера.", - "moveToTrashWarning": "The item(s) will be moved to the Termix Trash and can be restored before the retention period expires.", - "itemsMovedToTrash": "{{count}} item(s) moved to Trash", - "trash": "Trash", - "trashDescription": "Deleted items are retained for {{days}} day(s) on this host.", - "trashLoadFailed": "Failed to load Trash", - "trashEmpty": "Trash is empty", + "moveToTrashWarning": "Предмет(ы) будут перемещены в корзину Termix и могут быть возвращены на место до истечения срока хранения.", + "itemsMovedToTrash": "{{count}} элемент(ы) перемещены в корзину", + "trash": "Мусор", + "trashDescription": "Удаленные элементы сохраняются на этом хосте в течение {{days}} дней.", + "trashLoadFailed": "Не удалось загрузить мусор.", + "trashEmpty": "Мусорное ведро пусто.", "trashRestore": "Восстановить", - "trashRestored": "Restored {{name}}", - "trashRestoreFailed": "Failed to restore item. The original path may already exist.", - "trashDeletePermanently": "Delete permanently", - "trashDeleteConfirm": "Permanently delete {{name}}? This cannot be undone.", - "trashPermanentlyDeleted": "Permanently deleted {{name}}", - "trashDeleteFailed": "Failed to permanently delete item", - "trashEmptyAction": "Empty Trash", - "trashEmptyConfirm": "Permanently delete every item in Trash? This cannot be undone.", - "trashEmptied": "Trash emptied", - "trashRetention": "Automatic cleanup after (days)", - "trashRetentionSaved": "Trash retention updated", - "trashRetentionFailed": "Failed to update Trash retention", - "trashUnavailableConfirm": "This item cannot be moved to Trash, usually because it is on another filesystem or requires elevated permissions. Delete it permanently instead?", + "trashRestored": "Восстановлено {{name}}", + "trashRestoreFailed": "Не удалось восстановить элемент. Возможно, исходный путь уже существует.", + "trashDeletePermanently": "Удалить навсегда", + "trashDeleteConfirm": "Удалить {{name}}навсегда? Это действие необратимо.", + "trashPermanentlyDeleted": "Удалено навсегда {{name}}", + "trashDeleteFailed": "Не удалось удалить элемент навсегда.", + "trashEmptyAction": "Опустошите мусорный бак", + "trashEmptyConfirm": "Удалить все элементы из корзины навсегда? Это действие необратимо.", + "trashEmptied": "Мусор вывезен", + "trashRetention": "Автоматическая очистка через (дней)", + "trashRetentionSaved": "Обновлена информация о хранении мусора.", + "trashRetentionFailed": "Не удалось обновить срок хранения корзины.", + "trashUnavailableConfirm": "Этот элемент нельзя переместить в корзину, как правило, потому что он находится в другой файловой системе или требует повышенных прав доступа. Может, лучше удалить его навсегда?", "recent": "Недавние", "pinned": "Закреплённые", "folderShortcuts": "Ярлыки папок", @@ -303,7 +303,7 @@ "operationCompleted": "{{operation}} {{count}} элементов", "downloadFileSuccess": "Файл {{name}} успешно загружен", "downloadFileFailed": "Не удалось загрузить", - "downloadingFile": "Downloading {{name}}…", + "downloadingFile": "Загрузка {{name}}…", "downloadProgressBytes": "{{transferred}} / {{total}}", "moveTo": "Переместить в {{name}}", "diffCompareWith": "Сравнить с {{name}}", @@ -323,13 +323,13 @@ "sideBySide": "Бок о бок", "inline": "Встроенный", "fileComparison": "Сравнение файлов: {{file1}} и {{file2}}", - "fileTooLarge": "Файл слишком большой: {{error}}", + "fileTooLarge": "File is too large (> 10MB) and cannot be opened as text for security reasons.", "sshConnectionFailed": "Ошибка SSH-подключения. Проверьте подключение к {{name}} ({{ip}}:{{port}})", "loadFileFailed": "Не удалось загрузить файл: {{error}}", "connecting": "Подключение...", "connectedSuccessfully": "Подключено успешно", "totpVerificationFailed": "Ошибка проверки TOTP", - "browserSignInFailed": "Sign-in failed. Please try again.", + "browserSignInFailed": "Вход в систему не удался. Пожалуйста, попробуйте еще раз.", "authenticationFailed": "Ошибка аутентификации", "incorrectPassphrase": "Неверная парольная фраза. Попробуйте еще раз.", "verificationCodePrompt": "Код подтверждения:", @@ -361,73 +361,82 @@ "used": "Занято", "of": "из", "toggleSidebar": "Переключить боковую панель", - "compactLayout": "Use compact layout", - "comfortableLayout": "Use comfortable layout", + "compactLayout": "Используйте компактную компоновку.", + "comfortableLayout": "Используйте удобную планировку", "cannotLoadPdf": "Не удаётся загрузить PDF", "pdfLoadError": "Ошибка при загрузке этого PDF-файла.", - "loadingPdf": "Загрузка PDF...", + "loadingPdf": "Loading PDF viewer...", "loadingPage": "Загрузка страницы...", "cancel": "Отмена", - "copiedItems_one": "Copied {{count}} item", - "copiedItems_other": "Copied {{count}} items", - "deleteCopiedFileFailed": "Could not delete the copy of {{name}}: {{error}}", - "dragMovedItems_one": "Moved {{count}} item to {{target}}", - "dragMovedItems_other": "Moved {{count}} items to {{target}}", - "moveBackFileFailed": "Could not move {{name}} back: {{error}}", - "terminal": "Terminal: {{host}} ({{path}})", - "dragToDesktop": "Dragging {{name}} to the desktop", - "dragFilesToDesktop": "Dragging {{count}} files to the desktop", - "folderDragUnsupported": "Dragging folders to the desktop is not supported yet", - "saveToDesktopFailed": "Save failed: {{error}}", - "dragFailedDetail": "Drag failed: {{error}}", - "videoUnsupported": "Your browser cannot play this video format.", - "downloadToPlay": "Download to play it elsewhere", - "cannotPreviewType": "Cannot preview this file type", - "cannotPreviewTypeHint": "This file type has no preview. Download it to open it in another app." + "copiedItems_one": "Скопировано {{count}} элемент", + "copiedItems_other": "Скопировано {{count}} элементов", + "deleteCopiedFileFailed": "Не удалось удалить копию {{name}}: {{error}}", + "dragMovedItems_one": "Перемещен элемент {{count}} в {{target}}", + "dragMovedItems_other": "Перемещено {{count}} элементов в {{target}}", + "moveBackFileFailed": "Не удалось переместить {{name}} назад: {{error}}", + "terminal": "Терминал: {{host}} ({{path}})", + "dragToDesktop": "Перетаскивание {{name}} на рабочий стол", + "dragFilesToDesktop": "Перетаскивание {{count}} файлов на рабочий стол", + "folderDragUnsupported": "Перетаскивание папок на рабочий стол пока не поддерживается.", + "saveToDesktopFailed": "Сохранение не удалось: {{error}}", + "dragFailedDetail": "Перетаскивание не удалось: {{error}}", + "videoUnsupported": "Ваш браузер не может воспроизвести этот видеоформат.", + "downloadToPlay": "Скачайте, чтобы играть в другом месте.", + "cannotPreviewType": "Предварительный просмотр файла этого типа невозможен.", + "cannotPreviewTypeHint": "Для этого типа файла предварительный просмотр недоступен. Скачайте его, чтобы открыть в другом приложении.", + "loadingFile": "Loading file...", + "loadingImage": "Loading image...", + "loadingEditor": "Loading editor...", + "loadingPreview": "Loading preview...", + "loadingAudio": "Loading audio player...", + "emptyPreview": "Nothing to preview yet...", + "revert": "Revert", + "openAsText": "Open as Text", + "confirmOpenAsText": "Do you want to continue opening this file as text? This may slow down your browser." }, "sftpTransfer": { "title": "SFTP", - "description": "Transfer files between two SSH hosts.", - "sourceServer": "Source Server", - "destinationServer": "Destination Server", - "selectHost": "Select host", + "description": "Передача файлов между двумя SSH-хостами.", + "sourceServer": "Исходный сервер", + "destinationServer": "Сервер назначения", + "selectHost": "Выберите хост", "noHostSelected": "Хост не выбран", "move": "Переместить", "copy": "Копировать", "upload": "Загрузить", - "itemsSelected": "{{count}} item selected", - "itemsSelected_other": "{{count}} items selected", + "itemsSelected": "{{count}} выбранный элемент", + "itemsSelected_other": "{{count}} выбранные элементы", "ready": "Готов", "loadingHosts": "Загрузка хостов...", "name": "Название", "modified": "Изменён", "size": "По размеру", - "noFiles": "No files", + "noFiles": "Нет файлов", "open": "Открыть", - "up": "Up", + "up": "Вверх", "refresh": "Обновить", - "copyToTarget": "Copy to Target Directory", + "copyToTarget": "Скопировать в целевую директорию", "rename": "Переименовать", "delete": "Удалить", - "editPermissions": "Edit Permissions", - "createNewFolder": "Create New Folder", - "deleteSelectedItems": "Delete Selected Items", - "deleteConfirm": "Delete {{count}} selected item?", - "deleteConfirm_other": "Delete {{count}} selected items?", + "editPermissions": "Изменить права доступа", + "createNewFolder": "Создать новую папку", + "deleteSelectedItems": "Удалить выбранные элементы", + "deleteConfirm": "Удалить {{count}} выбранный элемент?", + "deleteConfirm_other": "Удалить {{count}} выбранные элементы?", "cancel": "Отмена", "save": "Сохранить", - "folderCreated": "Folder created", - "itemRenamed": "Item renamed", + "folderCreated": "Создана папка", + "itemRenamed": "Элемент переименован", "actionFailed": "Действие не удалось", - "itemsDeleted": "{{count}} item deleted", - "itemsDeleted_other": "{{count}} items deleted", - "deleteFailed": "Delete failed", - "permissionsUpdated": "Permissions updated", - "noRemoteSessionConnected": "No remote session connected", - "failedToListFiles": "Failed to list files", - "failedToRefresh": "Failed to refresh", - "destinationInsideSource": "Destination cannot be inside the selected source path.", - "sameHostNoOp": "Source and destination are the same folder." + "itemsDeleted": "{{count}} элемент удален", + "itemsDeleted_other": "{{count}} удаленные элементы", + "deleteFailed": "Удаление не удалось.", + "permissionsUpdated": "Права доступа обновлены.", + "noRemoteSessionConnected": "Удалённая сессия не подключена", + "failedToListFiles": "Не удалось отобразить список файлов.", + "failedToRefresh": "Не удалось обновить", + "destinationInsideSource": "Место назначения не может находиться внутри выбранного пути источника.", + "sameHostNoOp": "Исходная и целевая папки — одна и та же." }, "hosts": { "fileManager": "Файловый менеджер", @@ -438,8 +447,8 @@ "loadingHost": "Загрузка хоста..." }, "onboarding": { - "feature_files": "File manager", - "feature_files_desc": "Browse, upload, download and edit files over SFTP without leaving the app." + "feature_files": "Файловый менеджер", + "feature_files_desc": "Просматривайте, загружайте, скачивайте и редактируйте файлы по протоколу SFTP, не выходя из приложения." }, "terminal": { "runTitle": "Выполнение {{command}} - {{host}}", @@ -464,7 +473,7 @@ "destinationPath": "Путь назначения", "destMustBeDirectory": "Для передачи нескольких элементов путь назначения должен быть папкой", "goUp": "Вверх", - "hostAuthRequired": "Authentication required. Open File Manager on this host first", + "hostAuthRequired": "Требуется аутентификация. Сначала откройте файловый менеджер на этом хосте.", "hostConnecting": "Подключение…", "hostConnectionFailed": "Ошибка подключения", "hostDisconnected": "Не подключен", @@ -485,12 +494,12 @@ "methodReason": { "user_item_sftp": "Вы выбрали пофайловый SFTP.", "user_tar": "Вы выбрали tar-архив.", - "tar_unavailable": "Tar is not available on one or both hosts, so per-file SFTP will be used instead.", - "windows_host": "A Windows host is involved, so tar is not used.", - "auto_multi_large": "Auto: multiple files including a large file ({{largestSize}}) with compressible data. Tar bundles them into one transfer.", - "auto_single_large_in_archive": "Auto: one large file ({{largestSize}}) in this set, so per-file SFTP.", - "auto_many_incompressible": "Auto: mostly incompressible data, so per-file SFTP.", - "auto_many_files": "Auto: many files ({{fileCount}}), tar cuts the per-file overhead.", + "tar_unavailable": "Tar недоступен на одном или обоих хостах, поэтому вместо него будет использоваться SFTP для каждого файла.", + "windows_host": "В процессе используется хост под управлением Windows, поэтому tar не применяется.", + "auto_multi_large": "Авто: несколько файлов, включая большой файл ({{largestSize}}) с данными, которые можно сжать. Tar объединяет их в одну передачу.", + "auto_single_large_in_archive": "Авто: один большой файл ({{largestSize}}) в этом наборе, поэтому SFTP для каждого файла отдельно.", + "auto_many_incompressible": "Авто: в основном несжимаемые данные, поэтому используется SFTP для каждого файла.", + "auto_many_files": "Авто: много файлов ({{fileCount}}), tar сокращает накладные расходы на каждый файл.", "auto_default": "Авто: пофайловый SFTP для этого набора." }, "methodTar": "Архив Tar", @@ -498,11 +507,11 @@ "metricsCompress": "Сжатие на источнике: {{duration}}", "metricsExtract": "Распаковка на назначении: {{duration}}", "metricsPrepare": "Подготовка назначения: {{duration}}", - "metricsRouteBenchmark": "Route probe: direct {{direct}}, relay {{relay}}", + "metricsRouteBenchmark": "Маршрутизация: прямой {{direct}}, ретранслятор {{relay}}", "metricsSourceDelete": "Удаление с источника: {{duration}}", "metricsTotal": "Всего: {{duration}}", "metricsTransfer": "Сквозной: {{throughput}} ({{duration}})", - "metricsVerify": "SHA-256 verified: {{duration}}", + "metricsVerify": "SHA-256 проверен: {{duration}}", "moveFolderToHost": "Переместить папку на хост…", "moveItemsToHost": "Переместить {{count}} элементов на хост…", "moveToHost": "Переместить на хост…", @@ -511,7 +520,7 @@ "parallelSegmentsHint": "Большие файлы разбиваются на фрагменты по 256 МБ. Несколько каналов используют отдельные соединения (как при запуске нескольких передач) для повышения общей пропускной способности.", "parallelSegmentsLabel": "Параллельные каналы передачи", "parallelSegmentsOption": "{{count}} каналов", - "progressBenchmarking": "Selecting the fastest transfer route…", + "progressBenchmarking": "Выбор самого быстрого маршрута пересадки…", "progressBytes": "{{transferred}} / {{total}}", "progressCancel": "Отмена", "progressCancelling": "Отмена…", @@ -523,7 +532,7 @@ "progressTotalSpeed": "{{speed}} всего ({{lanes}} каналов)", "progressTransferring": "Передача данных…", "progressTransferringItems": "Передача файлов ({{current}} из {{total}})…", - "progressVerifying": "Verifying file integrity…", + "progressVerifying": "Проверка целостности файла…", "recentDestinations": "Недавние назначения", "resumedHint": "Переподключено к активной передаче, запущенной в другом окне.", "retryTransfer": "Повторить", @@ -539,5 +548,8 @@ "metricsHopSourceRead": "Источник → сервер: {{throughput}}", "metricsHopDestSftpWrite": "Сервер → назначение (SFTP): {{throughput}}", "metricsHopDestLocalWrite": "Сервер → назначение (локально): {{throughput}}" + }, + "plugin": { + "name": "File Manager" } } diff --git a/plugins/file-manager/locales/translated/sr_SP.json b/plugins/file-manager/locales/translated/sr_SP.json index dc86761ce..272901a5c 100644 --- a/plugins/file-manager/locales/translated/sr_SP.json +++ b/plugins/file-manager/locales/translated/sr_SP.json @@ -1,23 +1,23 @@ { "nav": { - "files": "Files", - "sftp": "SFTP", - "openFileManager": "Open File Manager" + "files": "Датотеке", + "sftp": "СФТП", + "openFileManager": "Отвори менаџер датотека" }, "permissions": { "use": { - "title": "Use file manager", - "description": "Browse, edit and transfer files over SFTP." + "title": "Користите менаџер датотека", + "description": "Прегледајте, уређујте и преносите датотеке преко SFTP-а." } }, "settings": { "host": { "enable": { - "label": "Enable File Manager", - "description": "Browse and edit files on this host over SFTP." + "label": "Омогући менаџер датотека", + "description": "Прегледајте и уређујте датотеке на овом хосту преко SFTP-а." }, "defaultPath": { - "label": "Default Path" + "label": "Подразумевана путања" }, "scpLegacy": { "label": "SCP Legacy Mode" @@ -25,519 +25,531 @@ }, "user": { "transferConcurrency": { - "label": "Simultaneous File Transfers", - "description": "How many files the side by side local/remote manager uploads or downloads at the same time. Lower this if your server limits SFTP channels." + "label": "Истовремени пренос датотека", + "description": "Колико датотека локални/удаљени менаџер истовремено отпрема или преузима. Смањите ово ако ваш сервер ограничава SFTP канале." }, "confirmBeforeTrash": { - "label": "Confirm before moving files to trash", - "description": "Ask before moving remote files to trash. Permanent deletion still requires confirmation." + "label": "Потврди пре премештања датотека у отпад", + "description": "Питај пре премештања удаљених датотека у смеће. Трајно брисање и даље захтева потврду." } } }, "hostCapability": { - "label": "File Manager" + "label": "Менаџер датотека" }, "fileManager": { - "noHostSelected": "No host selected", - "initializingEditor": "Initializing editor...", - "file": "File", - "folder": "Folder", - "uploadFile": "Upload File", - "downloadFile": "Download", - "extractArchive": "Extract Archive", - "extractingArchive": "Extracting {{name}}...", - "archiveExtractedSuccessfully": "{{name}} extracted successfully", - "extractFailed": "Extract failed", - "compressFile": "Compress File", - "compressFiles": "Compress Files", - "compressFilesDesc": "Compress {{count}} items into an archive", - "archiveName": "Archive Name", - "enterArchiveName": "Enter archive name...", - "compressionFormat": "Compression Format", - "selectedFiles": "Selected files", - "andMoreFiles": "and {{count}} more...", - "compress": "Compress", - "compressingFiles": "Compressing {{count}} items into {{name}}...", - "filesCompressedSuccessfully": "{{name}} created successfully", - "compressFailed": "Compression failed", - "edit": "Edit", - "preview": "Preview", - "previous": "Previous", - "next": "Next", - "pageXOfY": "Page {{current}} of {{total}}", - "zoomOut": "Zoom Out", - "zoomIn": "Zoom In", - "newFile": "New File", - "newFolder": "New Folder", - "rename": "Rename", - "uploading": "Uploading...", - "uploadingFile": "Uploading {{name}}...", - "uploadingChunk": "Uploading {{name}}: {{percent}}% (part {{chunk}} of {{total}})", - "fileName": "File Name", - "folderName": "Folder Name", - "fileUploadedSuccessfully": "File \"{{name}}\" uploaded successfully", - "failedToUploadFile": "Failed to upload file", - "uploadingFolderFiles": "Uploading {{count}} file(s)...", - "uploadedFolderFiles": "Uploaded {{count}} file(s) successfully", - "uploadedFolderPartial": "Uploaded {{uploaded}} file(s), {{failed}} failed", - "fileDownloadedSuccessfully": "File \"{{name}}\" downloaded successfully", - "failedToDownloadFile": "Failed to download file", - "fileCreatedSuccessfully": "File \"{{name}}\" created successfully", - "folderCreatedSuccessfully": "Folder \"{{name}}\" created successfully", - "failedToCreateItem": "Failed to create item", - "operationFailed": "{{operation}} operation failed for {{name}}: {{error}}", - "failedToResolveSymlink": "Failed to resolve symlink", - "itemsDeletedSuccessfully": "{{count}} items deleted successfully", - "failedToDeleteItems": "Failed to delete items", - "sudoPasswordRequired": "Administrator Password Required", - "enterSudoPassword": "Enter sudo password to continue this operation", - "sudoPassword": "Sudo password", - "sudoOperationFailed": "Sudo operation failed", - "sudoAuthFailed": "Sudo authentication failed", - "dragFilesToUpload": "Drop files here to upload", - "dropToUploadHere": "Drop to upload here", - "dropToDownloadHere": "Drop to download here", - "localFiles": "Local", - "showLocalFiles": "Show local files (split view)", - "hideLocalFiles": "Hide local files", - "localHome": "Home folder", - "localPathPlaceholder": "Local folder path", - "localShowHidden": "Show hidden files", - "localHideHidden": "Hide hidden files", - "localRevealInFileManager": "Reveal in system file manager", - "localCannotOpenFolder": "Cannot open folder", - "localItemCount": "{{count}} items", - "localSelectedCount": "{{count}} selected", - "back": "Back", - "forward": "Forward", - "up": "Up", - "kind": "Kind", - "localUploadingProgress": "Uploading {{current}} of {{total}}", - "localDownloadingProgress": "Downloading {{current}} of {{total}}", - "localTransferInFlight": "{{count}} at once", - "localPreparingDownload": "Preparing download...", - "localTransferCancelled": "Transfer cancelled", - "localNothingToTransfer": "Nothing to transfer", - "localUploadComplete": "Uploaded {{count}} file(s)", - "localUploadFailed": "Upload failed", - "localUploadPartial": "Uploaded {{done}} file(s), {{failed}} failed", - "localDownloadComplete": "Downloaded {{count}} file(s)", - "localDownloadFailed": "Download failed", - "localDownloadPartial": "Downloaded {{done}} file(s), {{failed}} failed", - "localReplaceExistingPrompt": "{{count}} item(s) already exist in this folder. Replace them?", - "localReplace": "Replace", - "localSkipExisting": "Skip", - "localSkippedExisting": "Skipped {{count}} existing item(s)", - "localUnsafeNamesSkipped": "Skipped {{count}} item(s) whose names cannot be used on this computer", - "localOpen": "Open", - "localOpenFolder": "Open folder", - "localUploadToRemote": "Upload to server", - "localUploadToRemoteMany": "Upload {{count}} items to server", - "localMoveToTrash": "Move to Trash", - "localMoveToTrashMany": "Move {{count}} items to Trash", - "localTrashConfirmSingle": "Move \"{{name}}\" to the Trash?", - "localTrashConfirmFolder": "Move the folder \"{{name}}\" and all its contents to the Trash?", - "localTrashConfirmMany": "Move {{count}} items to the Trash?", - "localTrashed": "Moved {{count}} item(s) to the Trash", - "localTrashFailed": "Could not move to the Trash", - "localRenameFailed": "Rename failed", - "localCreateFailed": "Could not create item", - "goToParentFolder": "Go to parent folder", - "resizeSidebar": "Drag to resize the sidebar (double-click to reset)", - "resizeLocalPane": "Drag to resize the local pane (double-click to reset)", - "columns": "Columns", - "columnsHint": "Right-click to choose columns", - "emptyFolder": "This folder is empty", - "searchFiles": "Search files...", - "upload": "Upload", - "selectHostToStart": "Select a host to start file management", - "sshRequiredForFileManager": "File manager requires SSH. This host does not have SSH enabled.", - "failedToConnect": "Failed to connect to SSH", - "failedToLoadDirectory": "Failed to load directory", - "noSSHConnection": "No SSH connection available", - "copy": "Copy", - "cut": "Cut", - "paste": "Paste", - "copyPath": "Copy Path", - "copyPaths": "Copy Paths", - "delete": "Delete", - "properties": "Properties", - "refresh": "Refresh", - "downloadFiles": "Download {{count}} files to Browser", - "copyFiles": "Copy {{count}} items", - "cutFiles": "Cut {{count}} items", - "deleteFiles": "Delete {{count}} items", - "filesCopiedToClipboard": "{{count}} items copied to clipboard", - "filesCutToClipboard": "{{count}} items cut to clipboard", - "pathCopiedToClipboard": "Path copied to clipboard", - "pathsCopiedToClipboard": "{{count}} paths copied to clipboard", - "failedToCopyPath": "Failed to copy path to clipboard", - "copyFolderLink": "Copy Link to Folder", - "copyCurrentFolderLink": "Copy Link to Current Folder", - "folderLinkCopied": "Folder link copied to clipboard", - "failedToCopyFolderLink": "Failed to copy folder link", - "movedItems": "Moved {{count}} items", - "failedToDeleteItem": "Failed to delete item", - "itemRenamedSuccessfully": "{{type}} renamed successfully", - "failedToRenameItem": "Failed to rename item", - "download": "Download", - "openExternalEditor": "Open externally", - "chooseExternalEditor": "Choose external editor", - "externalEditorSelected": "External editor selected", - "externalEditorDesktopOnly": "External editor is only available in the desktop app", - "externalEditorOpened": "Opened in external editor. Saving there will upload changes back to the server.", - "failedToOpenExternalEditor": "Failed to open external editor", - "failedToSelectExternalEditor": "Failed to select external editor", - "permissions": "Permissions", - "size": "Size", - "modified": "Modified", - "path": "Path", - "confirmDelete": "Are you sure you want to delete {{name}}?", - "permissionDenied": "Permission denied", - "serverError": "Server Error", - "fileSavedSuccessfully": "File saved successfully", - "failedToSaveFile": "Failed to save file", - "confirmDeleteSingleItem": "Are you sure you want to permanently delete \"{{name}}\"?", - "confirmDeleteMultipleItems": "Are you sure you want to permanently delete {{count}} items?", - "confirmDeleteMultipleItemsWithFolders": "Are you sure you want to permanently delete {{count}} items? This includes folders and their contents.", - "confirmDeleteFolder": "Are you sure you want to permanently delete the folder \"{{name}}\" and all its contents?", - "permanentDeleteWarning": "This action cannot be undone. The item(s) will be permanently deleted from the server.", - "moveToTrashWarning": "The item(s) will be moved to the Termix Trash and can be restored before the retention period expires.", - "itemsMovedToTrash": "{{count}} item(s) moved to Trash", - "trash": "Trash", - "trashDescription": "Deleted items are retained for {{days}} day(s) on this host.", - "trashLoadFailed": "Failed to load Trash", - "trashEmpty": "Trash is empty", - "trashRestore": "Restore", - "trashRestored": "Restored {{name}}", - "trashRestoreFailed": "Failed to restore item. The original path may already exist.", - "trashDeletePermanently": "Delete permanently", - "trashDeleteConfirm": "Permanently delete {{name}}? This cannot be undone.", - "trashPermanentlyDeleted": "Permanently deleted {{name}}", - "trashDeleteFailed": "Failed to permanently delete item", - "trashEmptyAction": "Empty Trash", - "trashEmptyConfirm": "Permanently delete every item in Trash? This cannot be undone.", - "trashEmptied": "Trash emptied", - "trashRetention": "Automatic cleanup after (days)", - "trashRetentionSaved": "Trash retention updated", - "trashRetentionFailed": "Failed to update Trash retention", - "trashUnavailableConfirm": "This item cannot be moved to Trash, usually because it is on another filesystem or requires elevated permissions. Delete it permanently instead?", - "recent": "Recent", - "pinned": "Pinned", - "folderShortcuts": "Folder Shortcuts", - "failedToReconnectSSH": "Failed to reconnect SSH session", - "openTerminalHere": "Open Terminal Here", - "run": "Run", - "openTerminalInFolder": "Open Terminal in This Folder", - "openTerminalInFileLocation": "Open Terminal at File Location", - "runningFile": "Running - {{file}}", - "onlyRunExecutableFiles": "Can only run executable files", - "directories": "Directories", - "removedFromRecentFiles": "Removed \"{{name}}\" from recent files", - "removeFailed": "Remove failed", - "unpinnedSuccessfully": "Unpinned \"{{name}}\" successfully", - "unpinFailed": "Unpin failed", - "removedShortcut": "Removed shortcut \"{{name}}\"", - "removeShortcutFailed": "Remove shortcut failed", - "clearedAllRecentFiles": "Cleared all recent files", - "clearFailed": "Clear failed", - "removeFromRecentFiles": "Remove from recent files", - "clearAllRecentFiles": "Clear all recent files", - "unpinFile": "Unpin file", - "removeShortcut": "Remove shortcut", - "pinFile": "Pin file", - "addToShortcuts": "Add to shortcuts", - "pasteFailed": "Paste failed", - "noUndoableActions": "No undoable actions", - "undoCopySuccess": "Undid copy operation: Deleted {{count}} copied files", - "undoCopyFailedDelete": "Undo failed: Could not delete any copied files", - "undoCopyFailedNoInfo": "Undo failed: Could not find copied file information", - "undoMoveSuccess": "Undid move operation: Moved {{count}} files back to original location", - "undoMoveFailedMove": "Undo failed: Could not move any files back", - "undoMoveFailedNoInfo": "Undo failed: Could not find moved file information", - "undoDeleteNotSupported": "Delete operation cannot be undone: Files have been permanently deleted from server", - "undoTypeNotSupported": "Unsupported undo operation type", - "undoOperationFailed": "Undo operation failed", - "unknownError": "Unknown error", - "confirm": "Confirm", - "find": "Find...", - "replace": "Replace", - "downloadInstead": "Download Instead", - "keyboardShortcuts": "Keyboard Shortcuts", - "searchAndReplace": "Search & Replace", - "editing": "Editing", - "search": "Search", - "findNext": "Find Next", - "findPrevious": "Find Previous", - "save": "Save", - "selectAll": "Select All", - "undo": "Undo", - "redo": "Redo", - "moveLineUp": "Move Line Up", - "moveLineDown": "Move Line Down", - "toggleComment": "Toggle Comment", - "autoComplete": "Auto Complete", - "imageLoadError": "Failed to load image", - "startTyping": "Start typing...", - "unknownSize": "Unknown size", - "fileIsEmpty": "File is empty", - "largeFileWarning": "Large File Warning", - "largeFileWarningDesc": "This file is {{size}} in size, which may cause performance issues when opened as text.", - "fileNotFoundAndRemoved": "File \"{{name}}\" not found and has been removed from recent/pinned files", - "failedToLoadFile": "Failed to load file: {{error}}", - "serverErrorOccurred": "Server error occurred. Please try again later.", - "autoSaveFailed": "Auto-save failed", - "fileAutoSaved": "File auto-saved", - "moveFileFailed": "Failed to move {{name}}", - "moveOperationFailed": "Move operation failed", - "canOnlyCompareFiles": "Can only compare two files", - "comparingFiles": "Comparing files: {{file1}} and {{file2}}", - "dragFailed": "Drag operation failed", - "filePinnedSuccessfully": "File \"{{name}}\" pinned successfully", - "pinFileFailed": "Failed to pin file", - "fileUnpinnedSuccessfully": "File \"{{name}}\" unpinned successfully", - "unpinFileFailed": "Failed to unpin file", - "shortcutAddedSuccessfully": "Folder shortcut \"{{name}}\" added successfully", - "addShortcutFailed": "Failed to add shortcut", - "operationCompletedSuccessfully": "{{operation}} {{count}} items successfully", - "operationCompleted": "{{operation}} {{count}} items", - "downloadFileSuccess": "File {{name}} downloaded successfully", - "downloadFileFailed": "Download failed", - "downloadingFile": "Downloading {{name}}…", + "noHostSelected": "Није изабран домаћин", + "initializingEditor": "Иницијализација уређивача...", + "file": "Датотека", + "folder": "Фасцикла", + "uploadFile": "Отпреми датотеку", + "downloadFile": "Преузми", + "extractArchive": "Издвоји архиву", + "extractingArchive": "Издвајање {{name}}...", + "archiveExtractedSuccessfully": "{{name}} је успешно извучено", + "extractFailed": "Издвајање није успело", + "compressFile": "Компресуј датотеку", + "compressFiles": "Компресуј датотеке", + "compressFilesDesc": "Компресуј {{count}} ставки у архиву", + "archiveName": "Назив архиве", + "enterArchiveName": "Унесите име архиве...", + "compressionFormat": "Формат компресије", + "selectedFiles": "Изабране датотеке", + "andMoreFiles": "и још {{count}}...", + "compress": "Компресуј", + "compressingFiles": "Компресија {{count}} ставки у {{name}}...", + "filesCompressedSuccessfully": "{{name}} је успешно креирано", + "compressFailed": "Компресија није успела", + "edit": "Измени", + "preview": "Преглед", + "previous": "Претходно", + "next": "Следеће", + "pageXOfY": "Страница {{current}} од {{total}}", + "zoomOut": "Умањи", + "zoomIn": "Увећај", + "newFile": "Нова датотека", + "newFolder": "Нова фасцикла", + "rename": "Преименуј", + "uploading": "Отпремање...", + "uploadingFile": "Отпремање {{name}}...", + "uploadingChunk": "Отпремање {{name}}: {{percent}}% (део {{chunk}} од {{total}})", + "fileName": "Име датотеке", + "folderName": "Назив фасцикле", + "fileUploadedSuccessfully": "Датотека „{{name}}“ је успешно отпремљена", + "failedToUploadFile": "Отпремање датотеке није успело", + "uploadingFolderFiles": "Отпремање {{count}} датотека...", + "uploadedFolderFiles": "Успешно отпремљено {{count}} датотека", + "uploadedFolderPartial": "Отпремљено {{uploaded}} датотека, {{failed}} није успело", + "fileDownloadedSuccessfully": "Датотека „{{name}}“ је успешно преузета", + "failedToDownloadFile": "Преузимање датотеке није успело", + "fileCreatedSuccessfully": "Датотека „{{name}}“ је успешно креирана", + "folderCreatedSuccessfully": "Фасцикла „{{name}}“ је успешно креирана", + "failedToCreateItem": "Није успело креирање ставке", + "operationFailed": "Операција {{operation}} није успела за {{name}}: {{error}}", + "failedToResolveSymlink": "Није успело решавање симболичке везе", + "itemsDeletedSuccessfully": "{{count}} ставке су успешно обрисане", + "failedToDeleteItems": "Брисање ставки није успело", + "sudoPasswordRequired": "Потребна је администраторска лозинка", + "enterSudoPassword": "Унесите лозинку за судо да бисте наставили ову операцију", + "sudoPassword": "Sudo лозинка", + "sudoOperationFailed": "Sudo операција није успела", + "sudoAuthFailed": "Судо аутентификација није успела", + "dragFilesToUpload": "Отпустите датотеке овде да бисте их отпремили", + "dropToUploadHere": "Отпустите да бисте отпремили овде", + "dropToDownloadHere": "Отпустите да бисте преузели овде", + "localFiles": "Локално", + "showLocalFiles": "Прикажи локалне датотеке (подељени приказ)", + "hideLocalFiles": "Сакриј локалне датотеке", + "localHome": "Почетна фасцикла", + "localPathPlaceholder": "Путања локалне фасцикле", + "localShowHidden": "Прикажи скривене датотеке", + "localHideHidden": "Сакриј скривене датотеке", + "localRevealInFileManager": "Откриј у системском менаџеру датотека", + "localCannotOpenFolder": "Не могу да отворим фасциклу", + "localItemCount": "{{count}} ставке", + "localSelectedCount": "{{count}} изабрано", + "back": "Назад", + "forward": "Напред", + "up": "Горе", + "kind": "Врста", + "localUploadingProgress": "Отпремање {{current}} од {{total}}", + "localDownloadingProgress": "Преузимање {{current}} од {{total}}", + "localTransferInFlight": "{{count}} одједном", + "localPreparingDownload": "Припрема преузимања...", + "localTransferCancelled": "Трансфер отказан", + "localNothingToTransfer": "Ништа за пренос", + "localUploadComplete": "Отпремљено {{count}} датотека", + "localUploadFailed": "Отпремање није успело", + "localUploadPartial": "Отпремљено {{done}} датотека, {{failed}} није успело", + "localDownloadComplete": "Преузето {{count}} датотека", + "localDownloadFailed": "Преузимање није успело", + "localDownloadPartial": "Преузимање {{done}} датотека, {{failed}} није успело", + "localReplaceExistingPrompt": "{{count}} став(е) већ постоје у овој фасцикли. Заменити их?", + "localReplace": "Замени", + "localSkipExisting": "Прескочи", + "localSkippedExisting": "Прескочено {{count}} постојећих ставки", + "localUnsafeNamesSkipped": "Прескочено је {{count}} ставки чија имена се не могу користити на овом рачунару", + "localOpen": "Отворено", + "localOpenFolder": "Отвори фасциклу", + "localUploadToRemote": "Отпреми на сервер", + "localUploadToRemoteMany": "Отпреми {{count}} ставки на сервер", + "localMoveToTrash": "Премести у отпад", + "localMoveToTrashMany": "Премести {{count}} ставки у Отпад", + "localTrashConfirmSingle": "Преместити „{{name}}“ у Отпад?", + "localTrashConfirmFolder": "Преместити фасциклу „{{name}}“ и сав њен садржај у корпу за отпад?", + "localTrashConfirmMany": "Преместити {{count}} ставки у Отпад?", + "localTrashed": "Премештено {{count}} ставки у Отпад", + "localTrashFailed": "Није могуће преместити у Отпад", + "localRenameFailed": "Преименовање није успело", + "localCreateFailed": "Није могуће креирати ставку", + "goToParentFolder": "Иди у надређени фолдер", + "resizeSidebar": "Превуците да бисте променили величину бочне траке (двапут кликните да бисте ресетовали)", + "resizeLocalPane": "Превуците да бисте променили величину локалног окна (двапут кликните да бисте ресетовали)", + "columns": "Колоне", + "columnsHint": "Кликните десним тастером миша да бисте изабрали колоне", + "emptyFolder": "Ова фасцикла је празна", + "searchFiles": "Претражи датотеке...", + "upload": "Отпреми", + "selectHostToStart": "Изаберите хост да бисте започели управљање датотекама", + "sshRequiredForFileManager": "Менаџер датотека захтева SSH. Овај хост нема омогућен SSH.", + "failedToConnect": "Повезивање са SSH-ом није успело", + "failedToLoadDirectory": "Учитавање директоријума није успело", + "noSSHConnection": "SSH веза није доступна", + "copy": "Копија", + "cut": "Исеци", + "paste": "Залепи", + "copyPath": "Копирај путању", + "copyPaths": "Копирај путање", + "delete": "Обриши", + "properties": "Некретнине", + "refresh": "Освежи", + "downloadFiles": "Преузмите {{count}} датотека у прегледач", + "copyFiles": "Копирај {{count}} ставке", + "cutFiles": "Исеци {{count}} ставки", + "deleteFiles": "Обриши {{count}} ставки", + "filesCopiedToClipboard": "{{count}} ставке копиране у међуспремник", + "filesCutToClipboard": "{{count}} ставке исечене у међуспремник", + "pathCopiedToClipboard": "Путања је копирана у међуспремник", + "pathsCopiedToClipboard": "{{count}} путање копиране у међуспремник", + "failedToCopyPath": "Копирање путање у међуспремник није успело", + "copyFolderLink": "Копирај везу у фасциклу", + "copyCurrentFolderLink": "Копирај везу у тренутну фасциклу", + "folderLinkCopied": "Линк фасцикле копиран у међуспремник", + "failedToCopyFolderLink": "Копирање линка фасцикле није успело", + "movedItems": "Премештено {{count}} ставки", + "failedToDeleteItem": "Брисање ставке није успело", + "itemRenamedSuccessfully": "{{type}} је успешно преименован", + "failedToRenameItem": "Преименовање ставке није успело", + "download": "Преузми", + "openExternalEditor": "Отвори споља", + "chooseExternalEditor": "Изаберите спољни уређивач", + "externalEditorSelected": "Изабран је спољни уредник", + "externalEditorDesktopOnly": "Спољни уређивач је доступан само у десктоп апликацији", + "externalEditorOpened": "Отворено у екстерном уређивачу. Чувањем тамо ће се измене отпремити назад на сервер.", + "failedToOpenExternalEditor": "Отварање екстерног уређивача није успело", + "failedToSelectExternalEditor": "Није успело бирање спољног уређивача", + "permissions": "Дозволе", + "size": "Величина", + "modified": "Измењено", + "path": "Путања", + "confirmDelete": "Да ли сте сигурни да желите да обришете {{name}}?", + "permissionDenied": "Дозвола одбијена", + "serverError": "Грешка сервера", + "fileSavedSuccessfully": "Датотека је успешно сачувана", + "failedToSaveFile": "Чување датотеке није успело", + "confirmDeleteSingleItem": "Да ли сте сигурни да желите трајно да избришете „{{name}}“?", + "confirmDeleteMultipleItems": "Да ли сте сигурни да желите трајно да избришете {{count}} ставке?", + "confirmDeleteMultipleItemsWithFolders": "Да ли сте сигурни да желите трајно да избришете {{count}} ставке? Ово укључује фасцикле и њихов садржај.", + "confirmDeleteFolder": "Да ли сте сигурни да желите трајно да избришете фасциклу „{{name}}“ и сав њен садржај?", + "permanentDeleteWarning": "Ова радња се не може поништити. Ставка(е) ће бити трајно избрисане са сервера.", + "moveToTrashWarning": "Ставка(е) ће бити премештена(е) у смеће Термикса и може(ју) се вратити пре истека периода чувања.", + "itemsMovedToTrash": "{{count}} ставке премештено у Отпад", + "trash": "Смеће", + "trashDescription": "Обрисане ставке се чувају {{days}} дана на овом хосту.", + "trashLoadFailed": "Учитавање Отпада није успело", + "trashEmpty": "Отпад је празан", + "trashRestore": "Врати", + "trashRestored": "Враћено {{name}}", + "trashRestoreFailed": "Враћање ставке није успело. Оригинална путања можда већ постоји.", + "trashDeletePermanently": "Трајно избриши", + "trashDeleteConfirm": "Трајно избрисати {{name}}? Ово се не може поништити.", + "trashPermanentlyDeleted": "Трајно обрисано {{name}}", + "trashDeleteFailed": "Трајно брисање ставке није успело", + "trashEmptyAction": "Испразни отпад", + "trashEmptyConfirm": "Трајно избрисати сваку ставку у Отпаду? Ово се не може поништити.", + "trashEmptied": "Отпад је испражњен", + "trashRetention": "Аутоматско чишћење после (дана)", + "trashRetentionSaved": "Задржавање отпада је ажурирано", + "trashRetentionFailed": "Ажурирање задржавања у отпаду није успело", + "trashUnavailableConfirm": "Ова ставка не може бити премештена у Отпад, обично зато што се налази на другом систему датотека или захтева повишена права. Желите ли да је трајно избришете?", + "recent": "Недавно", + "pinned": "Закачено", + "folderShortcuts": "Пречице за фасцикле", + "failedToReconnectSSH": "Поновно повезивање SSH сесије није успело", + "openTerminalHere": "Отвори терминал овде", + "run": "Трчи", + "openTerminalInFolder": "Отвори терминал у овој фасцикли", + "openTerminalInFileLocation": "Отвори терминал на локацији датотеке", + "runningFile": "Трчање - {{file}}", + "onlyRunExecutableFiles": "Може покренути само извршне датотеке", + "directories": "Директоријуми", + "removedFromRecentFiles": "Уклоњено је „{{name}}“ из недавних датотека", + "removeFailed": "Уклањање није успело", + "unpinnedSuccessfully": "Откачено „{{name}}“ успешно", + "unpinFailed": "Откачивање није успело", + "removedShortcut": "Уклоњена пречица „{{name}}“", + "removeShortcutFailed": "Уклањање пречице није успело", + "clearedAllRecentFiles": "Обрисани су сви недавно објављени фајлови", + "clearFailed": "Брисање није успело", + "removeFromRecentFiles": "Уклони из недавних датотека", + "clearAllRecentFiles": "Обриши све недавно објављене датотеке", + "unpinFile": "Откачи датотеку", + "removeShortcut": "Уклони пречицу", + "pinFile": "Закачи датотеку", + "addToShortcuts": "Додај у пречице", + "pasteFailed": "Лепљење није успело", + "noUndoableActions": "Нема радњи које се могу поништити", + "undoCopySuccess": "Поништена операција копирања: Обрисано {{count}} копираних датотека", + "undoCopyFailedDelete": "Поништавање није успело: Није могуће обрисати ниједну копирану датотеку", + "undoCopyFailedNoInfo": "Поништавање није успело: Нису пронађене информације о копираној датотеци", + "undoMoveSuccess": "Поништена операција премештања: Премештено {{count}} датотека назад на оригиналну локацију", + "undoMoveFailedMove": "Поништавање није успело: Није могуће вратити датотеке", + "undoMoveFailedNoInfo": "Поништавање није успело: Нису пронађене информације о премештеној датотеци", + "undoDeleteNotSupported": "Брисање се не може поништити: Датотеке су трајно обрисане са сервера", + "undoTypeNotSupported": "Неподржани тип операције поништавања", + "undoOperationFailed": "Поништавање није успело", + "unknownError": "Непозната грешка", + "confirm": "Потврди", + "find": "Пронађи...", + "replace": "Замени", + "downloadInstead": "Преузми уместо тога", + "keyboardShortcuts": "Пречице на тастатури", + "searchAndReplace": "Претражи и замени", + "editing": "Уређивање", + "search": "Претрага", + "findNext": "Пронађи следеће", + "findPrevious": "Пронађи претходно", + "save": "Сачувај", + "selectAll": "Изабери све", + "undo": "Поништи", + "redo": "Понови", + "moveLineUp": "Помери ред нагоре", + "moveLineDown": "Помери ред надоле", + "toggleComment": "Укључи/искључи коментар", + "autoComplete": "Аутоматско довршавање", + "imageLoadError": "Учитавање слике није успело", + "startTyping": "Почни да куцаш...", + "unknownSize": "Непозната величина", + "fileIsEmpty": "Датотека је празна", + "largeFileWarning": "Упозорење о великој датотеци", + "largeFileWarningDesc": "Величина ове датотеке је {{size}} , што може изазвати проблеме са перформансама када се отвори као текст.", + "fileNotFoundAndRemoved": "Датотека „{{name}}“ није пронађена и уклоњена је из недавно коришћених/закачених датотека", + "failedToLoadFile": "Није успело учитавање датотеке: {{error}}", + "serverErrorOccurred": "Дошло је до грешке сервера. Молимо покушајте поново касније.", + "autoSaveFailed": "Аутоматско чување није успело", + "fileAutoSaved": "Датотека је аутоматски сачувана", + "moveFileFailed": "Премештање није успело {{name}}", + "moveOperationFailed": "Операција премештања није успела", + "canOnlyCompareFiles": "Могуће је упоредити само две датотеке", + "comparingFiles": "Поређење датотека: {{file1}} и {{file2}}", + "dragFailed": "Превлачење није успело", + "filePinnedSuccessfully": "Датотека „{{name}}“ је успешно закачена", + "pinFileFailed": "Качење датотеке није успело", + "fileUnpinnedSuccessfully": "Датотека „{{name}}“ је успешно откачена", + "unpinFileFailed": "Откачивање датотеке није успело", + "shortcutAddedSuccessfully": "Пречица за фасциклу „{{name}}“ је успешно додата", + "addShortcutFailed": "Додавање пречице није успело", + "operationCompletedSuccessfully": "{{operation}} {{count}} ставке успешно", + "operationCompleted": "{{operation}} {{count}} ставке", + "downloadFileSuccess": "Датотека {{name}} је успешно преузета", + "downloadFileFailed": "Преузимање није успело", + "downloadingFile": "Преузимање {{name}}…", "downloadProgressBytes": "{{transferred}} / {{total}}", - "moveTo": "Move to {{name}}", - "diffCompareWith": "Diff compare with {{name}}", - "dragOutsideToDownload": "Drag outside window to download ({{count}} files)", - "newFolderDefault": "NewFolder", - "newFileDefault": "NewFile.txt", - "successfullyMovedItems": "Successfully moved {{count}} items to {{target}}", - "move": "Move", - "searchInFile": "Search in file (Ctrl+F)", - "showKeyboardShortcuts": "Show keyboard shortcuts", - "decreaseFontSize": "Decrease font size", - "increaseFontSize": "Increase font size", - "startWritingMarkdown": "Start writing your markdown content...", - "loadingFileComparison": "Loading file comparison...", - "reload": "Reload", - "compare": "Compare", - "sideBySide": "Side by Side", - "inline": "Inline", - "fileComparison": "File Comparison: {{file1}} vs {{file2}}", - "fileTooLarge": "File too large: {{error}}", - "sshConnectionFailed": "SSH connection failed. Please check your connection to {{name}} ({{ip}}:{{port}})", - "loadFileFailed": "Failed to load file: {{error}}", - "connecting": "Connecting...", - "connectedSuccessfully": "Connected successfully", - "totpVerificationFailed": "TOTP verification failed", - "browserSignInFailed": "Sign-in failed. Please try again.", - "authenticationFailed": "Authentication failed", - "incorrectPassphrase": "Incorrect passphrase. Please try again.", - "verificationCodePrompt": "Verification code:", - "changePermissions": "Change Permissions", - "currentPermissions": "Current Permissions", - "owner": "Owner", - "group": "Group", - "others": "Others", - "read": "Read", - "write": "Write", - "execute": "Execute", - "permissionsChangedSuccessfully": "Permissions changed successfully", - "failedToChangePermissions": "Failed to change permissions", - "name": "Name", - "sortByName": "Name", - "sortByDate": "Date Modified", - "sortBySize": "Size", - "ascending": "Ascending", - "descending": "Descending", - "root": "Root", - "new": "New", - "sortBy": "Sort By", - "items": "Items", - "selected": "Selected", - "editor": "Editor", - "octal": "Octal", - "storage": "Storage", - "disk": "Disk", - "used": "Used", - "of": "of", - "toggleSidebar": "Toggle Sidebar", - "compactLayout": "Use compact layout", - "comfortableLayout": "Use comfortable layout", - "cannotLoadPdf": "Cannot load PDF", - "pdfLoadError": "There was an error loading this PDF file.", - "loadingPdf": "Loading PDF...", - "loadingPage": "Loading page...", - "cancel": "Cancel", - "copiedItems_one": "Copied {{count}} item", - "copiedItems_other": "Copied {{count}} items", - "deleteCopiedFileFailed": "Could not delete the copy of {{name}}: {{error}}", - "dragMovedItems_one": "Moved {{count}} item to {{target}}", - "dragMovedItems_other": "Moved {{count}} items to {{target}}", - "moveBackFileFailed": "Could not move {{name}} back: {{error}}", - "terminal": "Terminal: {{host}} ({{path}})", - "dragToDesktop": "Dragging {{name}} to the desktop", - "dragFilesToDesktop": "Dragging {{count}} files to the desktop", - "folderDragUnsupported": "Dragging folders to the desktop is not supported yet", - "saveToDesktopFailed": "Save failed: {{error}}", - "dragFailedDetail": "Drag failed: {{error}}", - "videoUnsupported": "Your browser cannot play this video format.", - "downloadToPlay": "Download to play it elsewhere", - "cannotPreviewType": "Cannot preview this file type", - "cannotPreviewTypeHint": "This file type has no preview. Download it to open it in another app." + "moveTo": "Премести на {{name}}", + "diffCompareWith": "Разлика у поређењу са {{name}}", + "dragOutsideToDownload": "Превуците спољашњост прозора да бисте преузели ({{count}} датотека)", + "newFolderDefault": "Нови фолдер", + "newFileDefault": "НоваДатотека.txt", + "successfullyMovedItems": "Успешно премештено {{count}} ставки у {{target}}", + "move": "Помери", + "searchInFile": "Претражи у датотеци (Ctrl+F)", + "showKeyboardShortcuts": "Прикажи пречице на тастатури", + "decreaseFontSize": "Смањи величину фонта", + "increaseFontSize": "Повећај величину фонта", + "startWritingMarkdown": "Почните да пишете свој садржај у markdown формату...", + "loadingFileComparison": "Учитавање поређења датотека...", + "reload": "Поново учитај", + "compare": "Упореди", + "sideBySide": "Један поред другог", + "inline": "Уграђено", + "fileComparison": "Поређење датотека: {{file1}} наспрам {{file2}}", + "fileTooLarge": "File is too large (> 10MB) and cannot be opened as text for security reasons.", + "sshConnectionFailed": "SSH веза није успела. Молимо вас да проверите везу са {{name}} ({{ip}}:{{port}})", + "loadFileFailed": "Није успело учитавање датотеке: {{error}}", + "connecting": "Повезивање...", + "connectedSuccessfully": "Успешно повезано", + "totpVerificationFailed": "Верификација TOTP-а није успела", + "browserSignInFailed": "Пријављивање није успело. Молимо покушајте поново.", + "authenticationFailed": "Аутентификација није успела", + "incorrectPassphrase": "Нетачна лозинка. Молимо покушајте поново.", + "verificationCodePrompt": "Верификациони код:", + "changePermissions": "Промени дозволе", + "currentPermissions": "Тренутне дозволе", + "owner": "Власник", + "group": "Група", + "others": "Други", + "read": "Читај", + "write": "Пиши", + "execute": "Изврши", + "permissionsChangedSuccessfully": "Дозволе су успешно промењене", + "failedToChangePermissions": "Промена дозвола није успела", + "name": "Име", + "sortByName": "Име", + "sortByDate": "Датум измене", + "sortBySize": "Величина", + "ascending": "Растуће", + "descending": "Опадајући", + "root": "Корен", + "new": "Ново", + "sortBy": "Сортирај по", + "items": "Ставке", + "selected": "Изабрано", + "editor": "Уредник", + "octal": "Октално", + "storage": "Складиштење", + "disk": "Диск", + "used": "Коришћено", + "of": "од", + "toggleSidebar": "Укључи/искључи бочну траку", + "compactLayout": "Користите компактни распоред", + "comfortableLayout": "Користите удобан распоред", + "cannotLoadPdf": "Није могуће учитати PDF", + "pdfLoadError": "Дошло је до грешке при учитавању ове PDF датотеке.", + "loadingPdf": "Loading PDF viewer...", + "loadingPage": "Учитавање странице...", + "cancel": "Откажи", + "copiedItems_one": "Копирана ставка {{count}}", + "copiedItems_other": "Копирано {{count}} ставки", + "deleteCopiedFileFailed": "Није могуће обрисати копију {{name}}: {{error}}", + "dragMovedItems_one": "Ставка {{count}} је премештена у {{target}}", + "dragMovedItems_other": "Премештено је {{count}} ставки у {{target}}", + "moveBackFileFailed": "Није могуће померити {{name}} назад: {{error}}", + "terminal": "Терминал: {{host}} ({{path}})", + "dragToDesktop": "Превлачење {{name}} на радну површину", + "dragFilesToDesktop": "Превлачење {{count}} датотека на радну површину", + "folderDragUnsupported": "Превлачење фасцикли на радну површину још увек није подржано", + "saveToDesktopFailed": "Чување није успело: {{error}}", + "dragFailedDetail": "Превлачење није успело: {{error}}", + "videoUnsupported": "Ваш прегледач не може да репродукује овај видео формат.", + "downloadToPlay": "Преузмите да бисте је репродуковали негде другде", + "cannotPreviewType": "Не могу да прегледам овај тип датотеке", + "cannotPreviewTypeHint": "Овај тип датотеке нема преглед. Преузмите је да бисте је отворили у другој апликацији.", + "loadingFile": "Loading file...", + "loadingImage": "Loading image...", + "loadingEditor": "Loading editor...", + "loadingPreview": "Loading preview...", + "loadingAudio": "Loading audio player...", + "emptyPreview": "Nothing to preview yet...", + "revert": "Revert", + "openAsText": "Open as Text", + "confirmOpenAsText": "Do you want to continue opening this file as text? This may slow down your browser." }, "sftpTransfer": { - "title": "SFTP", - "description": "Transfer files between two SSH hosts.", - "sourceServer": "Source Server", - "destinationServer": "Destination Server", - "selectHost": "Select host", - "noHostSelected": "No host selected", - "move": "Move", - "copy": "Copy", - "upload": "Upload", - "itemsSelected": "{{count}} item selected", - "itemsSelected_other": "{{count}} items selected", - "ready": "Ready", - "loadingHosts": "Loading hosts...", - "name": "Name", - "modified": "Modified", - "size": "Size", - "noFiles": "No files", - "open": "Open", - "up": "Up", - "refresh": "Refresh", - "copyToTarget": "Copy to Target Directory", - "rename": "Rename", - "delete": "Delete", - "editPermissions": "Edit Permissions", - "createNewFolder": "Create New Folder", - "deleteSelectedItems": "Delete Selected Items", - "deleteConfirm": "Delete {{count}} selected item?", - "deleteConfirm_other": "Delete {{count}} selected items?", - "cancel": "Cancel", - "save": "Save", - "folderCreated": "Folder created", - "itemRenamed": "Item renamed", - "actionFailed": "Action failed", - "itemsDeleted": "{{count}} item deleted", - "itemsDeleted_other": "{{count}} items deleted", - "deleteFailed": "Delete failed", - "permissionsUpdated": "Permissions updated", - "noRemoteSessionConnected": "No remote session connected", - "failedToListFiles": "Failed to list files", - "failedToRefresh": "Failed to refresh", - "destinationInsideSource": "Destination cannot be inside the selected source path.", - "sameHostNoOp": "Source and destination are the same folder." + "title": "СФТП", + "description": "Пренос датотека између два SSH хоста.", + "sourceServer": "Изворни сервер", + "destinationServer": "Одредишни сервер", + "selectHost": "Изаберите хоста", + "noHostSelected": "Није изабран домаћин", + "move": "Помери", + "copy": "Копија", + "upload": "Отпреми", + "itemsSelected": "{{count}} ставка је изабрана", + "itemsSelected_other": "Изабрано је {{count}} ставки", + "ready": "Спреман", + "loadingHosts": "Учитавање хостова...", + "name": "Име", + "modified": "Измењено", + "size": "Величина", + "noFiles": "Нема датотека", + "open": "Отворено", + "up": "Горе", + "refresh": "Освежи", + "copyToTarget": "Копирај у циљни директоријум", + "rename": "Преименуј", + "delete": "Обриши", + "editPermissions": "Измени дозволе", + "createNewFolder": "Направи нову фасциклу", + "deleteSelectedItems": "Обриши изабране ставке", + "deleteConfirm": "Обришите {{count}} изабрану ставку?", + "deleteConfirm_other": "Обришите {{count}} изабраних ставки?", + "cancel": "Откажи", + "save": "Сачувај", + "folderCreated": "Фасцикла је направљена", + "itemRenamed": "Ставка је преименована", + "actionFailed": "Акција није успела", + "itemsDeleted": "{{count}} ставка је обрисана", + "itemsDeleted_other": "{{count}} ставки су обрисане", + "deleteFailed": "Брисање није успело", + "permissionsUpdated": "Дозволе су ажуриране", + "noRemoteSessionConnected": "Није повезана удаљена сесија", + "failedToListFiles": "Навођење датотека није успело", + "failedToRefresh": "Освежавање није успело", + "destinationInsideSource": "Одредиште не може бити унутар изабране изворне путање.", + "sameHostNoOp": "Извор и одредиште су иста фасцикла." }, "hosts": { - "fileManager": "File Manager", - "fileManagerUrlCopied": "File Manager URL copied", - "copyFileManagerUrlAction": "Copy File Manager URL", - "docsLink": "View docs", - "hostNotFound": "Host not found", - "loadingHost": "Loading host..." + "fileManager": "Менаџер датотека", + "fileManagerUrlCopied": "URL менаџера датотека је копиран", + "copyFileManagerUrlAction": "Копирај УРЛ менаџера датотека", + "docsLink": "Прикажи документе", + "hostNotFound": "Хост није пронађен", + "loadingHost": "Учитавање хоста..." }, "onboarding": { - "feature_files": "File manager", - "feature_files_desc": "Browse, upload, download and edit files over SFTP without leaving the app." + "feature_files": "Менаџер датотека", + "feature_files_desc": "Прегледајте, отпремајте, преузимајте и уређујте датотеке преко SFTP-а без напуштања апликације." }, "terminal": { - "runTitle": "Running {{command}} - {{host}}", - "terminalTitle": "Terminal - {{host}}", - "terminalWithPath": "Terminal - {{host}}:{{path}}" + "runTitle": "Покреће се {{command}} - {{host}}", + "terminalTitle": "Терминал - {{host}}", + "terminalWithPath": "Терминал - {{host}}:{{path}}" }, "transfer": { - "browseFolders": "Browse destination folders", - "browsePathError": "Could not open this path on the destination host.", - "browsePathWillBeCreated": "This folder does not exist yet. It will be created when the transfer starts.", - "cancel": "Cancel", - "cleanupDestFiles": "Clean up destination", - "cleanupDestFilesError": "Cleanup failed", - "cleanupDestFilesNothing": "Nothing to clean up on the destination", - "cleanupDestFilesPartial": "Some partial files could not be removed", - "cleanupDestFilesSuccess": "Removed partial files from the destination", - "confirmCopy": "Copy", - "confirmMove": "Move", - "copyFolderToHost": "Copy folder to host…", - "copyItemsToHost": "Copy {{count}} items to host…", - "copyToHost": "Copy to host…", - "destinationPath": "Destination path", - "destMustBeDirectory": "Destination must be a directory for multi-item transfers", - "goUp": "Go up", - "hostAuthRequired": "Authentication required. Open File Manager on this host first", - "hostConnecting": "Connecting…", - "hostConnectionFailed": "Connection failed", - "hostDisconnected": "Not connected", - "hostReady": "Ready", - "itemsSummary": "{{count}} items", - "jumpHostLimitation": "Both hosts must be reachable from the Termix server. Direct host-to-host routing is not supported.", - "methodAuto": "Auto", - "methodAutoHint": "Picks tar or per-file SFTP based on file count, size, and compressibility. Single files always use streaming SFTP.", - "methodItemSftp": "Per-file SFTP", - "methodItemSftpHint": "Transfer each file individually over SFTP. Works on all hosts including Windows.", - "methodItemSftpLimitation": "Each file uses the same SFTP stream as a single-file copy, one after another. Progress is combined across all files, so the bar moves slowly during large files.", - "methodLabel": "Transfer method", - "methodPreviewError": "Could not preview transfer method. The server will still pick a method when you start.", - "methodPreviewLoading": "Calculating transfer method…", - "methodPreviewScanSummary": "{{fileCount}} files, {{totalSize}} total (scanned on source host).", - "methodPreviewWillUseItemSftp": "Will use: Per-file SFTP", - "methodPreviewWillUseTar": "Will use: Tar archive", + "browseFolders": "Прегледајте одредишне фасцикле", + "browsePathError": "Није могуће отворити ову путању на одредишном хосту.", + "browsePathWillBeCreated": "Ова фасцикла још увек не постоји. Биће креирана када пренос почне.", + "cancel": "Откажи", + "cleanupDestFiles": "Очистите одредиште", + "cleanupDestFilesError": "Чишћење није успело", + "cleanupDestFilesNothing": "Нема ништа за чишћење на одредишту", + "cleanupDestFilesPartial": "Неке делимичне датотеке нису могле бити уклоњене", + "cleanupDestFilesSuccess": "Уклоњене су делимичне датотеке са одредишта", + "confirmCopy": "Копија", + "confirmMove": "Помери", + "copyFolderToHost": "Копирај фасциклу на хост…", + "copyItemsToHost": "Копирај {{count}} ставке за хостовање…", + "copyToHost": "Копирај на хост…", + "destinationPath": "Путања одредишта", + "destMustBeDirectory": "Одредиште мора бити директоријум за преносе више ставки", + "goUp": "Иди горе", + "hostAuthRequired": "Потребна је аутентификација. Прво отворите Менаџер датотека на овом хосту.", + "hostConnecting": "Повезивање…", + "hostConnectionFailed": "Повезивање није успело", + "hostDisconnected": "Није повезано", + "hostReady": "Спреман", + "itemsSummary": "{{count}} ставке", + "jumpHostLimitation": "Оба хоста морају бити доступна са Termix сервера. Директно рутирање од хоста до хоста није подржано.", + "methodAuto": "Аутоматски", + "methodAutoHint": "Бира tar или SFTP за сваку датотеку на основу броја датотека, величине и компресибилности. Појединачне датотеке увек користе SFTP за стримовање.", + "methodItemSftp": "SFTP по датотеци", + "methodItemSftpHint": "Пренесите сваку датотеку појединачно преко SFTP-а. Ради на свим хостовима, укључујући Windows.", + "methodItemSftpLimitation": "Свака датотека користи исти SFTP ток као и копија појединачних датотека, једна за другом. Напредак се комбинује за све датотеке, тако да се трака помера споро током великих датотека.", + "methodLabel": "Метод преноса", + "methodPreviewError": "Није могуће прегледати метод преноса. Сервер ће ипак изабрати метод када покренете.", + "methodPreviewLoading": "Израчунавање методе преноса…", + "methodPreviewScanSummary": "{{fileCount}} датотека, {{totalSize}} укупно (скенирано на изворном хосту).", + "methodPreviewWillUseItemSftp": "Користиће се: SFTP за сваку датотеку", + "methodPreviewWillUseTar": "Користиће се: Тар архива", "methodReason": { - "user_item_sftp": "You chose per-file SFTP.", - "user_tar": "You chose tar archive.", - "tar_unavailable": "Tar is not available on one or both hosts, so per-file SFTP will be used instead.", - "windows_host": "A Windows host is involved, so tar is not used.", - "auto_multi_large": "Auto: multiple files including a large file ({{largestSize}}) with compressible data. Tar bundles them into one transfer.", - "auto_single_large_in_archive": "Auto: one large file ({{largestSize}}) in this set, so per-file SFTP.", - "auto_many_incompressible": "Auto: mostly incompressible data, so per-file SFTP.", - "auto_many_files": "Auto: many files ({{fileCount}}), tar cuts the per-file overhead.", - "auto_default": "Auto: per-file SFTP for this set." + "user_item_sftp": "Изабрали сте SFTP за сваку датотеку.", + "user_tar": "Изабрали сте tar архиву.", + "tar_unavailable": "Тар није доступан на једном или оба хоста, па ће се уместо тога користити SFTP протокол за сваку датотеку.", + "windows_host": "Укључен је Windows хост, тако да се tar не користи.", + "auto_multi_large": "Аутоматски: више датотека, укључујући велику датотеку ({{largestSize}}) са компресибилним подацима. Тар их обједињује у један пренос.", + "auto_single_large_in_archive": "Аутоматски: једна велика датотека ({{largestSize}}) у овом скупу, тако да се користи SFTP за сваку датотеку.", + "auto_many_incompressible": "Аутоматски: углавном некомпримљиви подаци, тако да се користи SFTP за сваку датотеку.", + "auto_many_files": "Аутоматски: више датотека ({{fileCount}}), tar смањује оптерећење по датотеци.", + "auto_default": "Аутоматски: SFTP за сваку датотеку за овај скуп." }, - "methodTar": "Tar archive", - "methodTarHint": "Compress on source, transfer one archive, extract on destination. Requires tar on both Unix hosts.", - "metricsCompress": "Compress on source: {{duration}}", - "metricsExtract": "Extract on destination: {{duration}}", - "metricsPrepare": "Prepare destination: {{duration}}", - "metricsRouteBenchmark": "Route probe: direct {{direct}}, relay {{relay}}", - "metricsSourceDelete": "Remove from source: {{duration}}", - "metricsTotal": "Total: {{duration}}", - "metricsTransfer": "End-to-end: {{throughput}} ({{duration}})", - "metricsVerify": "SHA-256 verified: {{duration}}", - "moveFolderToHost": "Move folder to host…", - "moveItemsToHost": "Move {{count}} items to host…", - "moveToHost": "Move to host…", - "noHostsConnected": "No other file-manager hosts available.", - "noHostsConnectedHint": "Add another SSH host with File Manager enabled in Host Manager.", - "parallelSegmentsHint": "Large files are split into 256 MB chunks. Multiple lanes use separate connections (like starting several transfers) for higher total throughput.", - "parallelSegmentsLabel": "Parallel transfer lanes", - "parallelSegmentsOption": "{{count}} lanes", - "progressBenchmarking": "Selecting the fastest transfer route…", + "methodTar": "Тар архива", + "methodTarHint": "Компресуј на изворном коду, пренеси једну архиву, распакуј на одредишту. Потребан је tar на оба Unix хоста.", + "metricsCompress": "Компресуј на изворном коду: {{duration}}", + "metricsExtract": "Издвајање на одредишту: {{duration}}", + "metricsPrepare": "Припреми одредиште: {{duration}}", + "metricsRouteBenchmark": "Сонда руте: директна {{direct}}, релејна {{relay}}", + "metricsSourceDelete": "Уклони из извора: {{duration}}", + "metricsTotal": "Укупно: {{duration}}", + "metricsTransfer": "Од краја до краја: {{throughput}} ({{duration}})", + "metricsVerify": "SHA-256 верификован: {{duration}}", + "moveFolderToHost": "Премести фасциклу на хост…", + "moveItemsToHost": "Премести {{count}} ставке на хост…", + "moveToHost": "Премести на хост…", + "noHostsConnected": "Нема других доступних хостова за управљање датотекама.", + "noHostsConnectedHint": "Додајте још један SSH хост са омогућеним File Manager-ом у Host Manager-у.", + "parallelSegmentsHint": "Велике датотеке су подељене на делове од 256 MB. Вишеструке траке користе одвојене везе (као што је покретање неколико преноса) за већи укупни проток.", + "parallelSegmentsLabel": "Паралелне траке за прелазак", + "parallelSegmentsOption": "{{count}} траке", + "progressBenchmarking": "Избор најбрже руте за трансфер…", "progressBytes": "{{transferred}} / {{total}}", - "progressCancel": "Cancel", - "progressCancelling": "Cancelling…", - "progressCompressing": "Compressing on source host…", - "progressExtracting": "Extracting on destination…", - "progressItems": "{{current}} / {{total}} files", - "progressReconnecting": "Reconnecting…", - "progressStalled": "Stalled", - "progressTotalSpeed": "{{speed}} total ({{lanes}} lanes)", - "progressTransferring": "Transferring data…", - "progressTransferringItems": "Transferring files ({{current}} of {{total}})…", - "progressVerifying": "Verifying file integrity…", - "recentDestinations": "Recent destinations", - "resumedHint": "Reconnected to an active transfer started in another window.", - "retryTransfer": "Retry", - "retryTransferError": "Retry failed", - "selectDestinationHost": "Select destination host", - "transferCancelled": "Transfer cancelled", - "transferCancelledCopyHint": "Partial files may remain on the destination.", - "transferCancelledMoveHint": "Partial files may remain on the destination. Source files were not removed.", - "transferError": "Transfer failed", - "transferFailedRetryHint": "Partial data was kept on the destination. Retry will resume when the connection is back.", - "transferPartialHint": "Could not transfer: {{paths}}", - "transferSuccess": "Transfer complete", - "metricsHopSourceRead": "Source → server: {{throughput}}", - "metricsHopDestSftpWrite": "Server → dest (SFTP): {{throughput}}", - "metricsHopDestLocalWrite": "Server → dest (local): {{throughput}}" + "progressCancel": "Откажи", + "progressCancelling": "Отказивање…", + "progressCompressing": "Компресија на изворном хосту…", + "progressExtracting": "Распакује се на одредишту…", + "progressItems": "{{current}} / {{total}} датотеке", + "progressReconnecting": "Поновно повезивање…", + "progressStalled": "Заустављено", + "progressTotalSpeed": "{{speed}} укупно ({{lanes}} трака)", + "progressTransferring": "Пренос података…", + "progressTransferringItems": "Пренос датотека ({{current}} од {{total}})…", + "progressVerifying": "Провера интегритета датотеке…", + "recentDestinations": "Недавне дестинације", + "resumedHint": "Поново повезано са активним преносом започетим у другом прозору.", + "retryTransfer": "Покушај поново", + "retryTransferError": "Поновни покушај није успео", + "selectDestinationHost": "Изаберите одредишни хост", + "transferCancelled": "Трансфер отказан", + "transferCancelledCopyHint": "Делимични фајлови могу остати на одредишту.", + "transferCancelledMoveHint": "Делимични фајлови могу остати на одредишту. Изворни фајлови нису уклоњени.", + "transferError": "Пренос није успео", + "transferFailedRetryHint": "Делимични подаци су сачувани на одредишту. Покушај ће бити настављен када се веза поново успостави.", + "transferPartialHint": "Није могуће пренети: {{paths}}", + "transferSuccess": "Пренос завршен", + "metricsHopSourceRead": "Извор → сервер: {{throughput}}", + "metricsHopDestSftpWrite": "Сервер → одредиште (SFTP): {{throughput}}", + "metricsHopDestLocalWrite": "Сервер → одредиште (локално): {{throughput}}" + }, + "plugin": { + "name": "File Manager" } } diff --git a/plugins/file-manager/locales/translated/sv_SE.json b/plugins/file-manager/locales/translated/sv_SE.json index dc86761ce..365cb99db 100644 --- a/plugins/file-manager/locales/translated/sv_SE.json +++ b/plugins/file-manager/locales/translated/sv_SE.json @@ -1,543 +1,555 @@ { "nav": { - "files": "Files", + "files": "Filer", "sftp": "SFTP", - "openFileManager": "Open File Manager" + "openFileManager": "Öppna filhanteraren" }, "permissions": { "use": { - "title": "Use file manager", - "description": "Browse, edit and transfer files over SFTP." + "title": "Använd filhanteraren", + "description": "Bläddra, redigera och överför filer via SFTP." } }, "settings": { "host": { "enable": { - "label": "Enable File Manager", - "description": "Browse and edit files on this host over SFTP." + "label": "Aktivera filhanteraren", + "description": "Bläddra och redigera filer på den här värden via SFTP." }, "defaultPath": { - "label": "Default Path" + "label": "Standardsökväg" }, "scpLegacy": { - "label": "SCP Legacy Mode" + "label": "SCP Legacy-läge" } }, "user": { "transferConcurrency": { - "label": "Simultaneous File Transfers", - "description": "How many files the side by side local/remote manager uploads or downloads at the same time. Lower this if your server limits SFTP channels." + "label": "Samtidiga filöverföringar", + "description": "Hur många filer den sida vid sida lokala/fjärrstyrda hanteraren laddar upp eller laddar ner samtidigt. Sänk detta om din server begränsar SFTP-kanaler." }, "confirmBeforeTrash": { - "label": "Confirm before moving files to trash", - "description": "Ask before moving remote files to trash. Permanent deletion still requires confirmation." + "label": "Bekräfta innan du flyttar filer till papperskorgen", + "description": "Fråga innan du flyttar fjärrfiler till papperskorgen. Permanent borttagning kräver fortfarande bekräftelse." } } }, "hostCapability": { - "label": "File Manager" + "label": "Filhanteraren" }, "fileManager": { - "noHostSelected": "No host selected", - "initializingEditor": "Initializing editor...", - "file": "File", - "folder": "Folder", - "uploadFile": "Upload File", - "downloadFile": "Download", - "extractArchive": "Extract Archive", - "extractingArchive": "Extracting {{name}}...", - "archiveExtractedSuccessfully": "{{name}} extracted successfully", - "extractFailed": "Extract failed", - "compressFile": "Compress File", - "compressFiles": "Compress Files", - "compressFilesDesc": "Compress {{count}} items into an archive", - "archiveName": "Archive Name", - "enterArchiveName": "Enter archive name...", - "compressionFormat": "Compression Format", - "selectedFiles": "Selected files", - "andMoreFiles": "and {{count}} more...", - "compress": "Compress", - "compressingFiles": "Compressing {{count}} items into {{name}}...", - "filesCompressedSuccessfully": "{{name}} created successfully", - "compressFailed": "Compression failed", - "edit": "Edit", - "preview": "Preview", - "previous": "Previous", - "next": "Next", - "pageXOfY": "Page {{current}} of {{total}}", - "zoomOut": "Zoom Out", - "zoomIn": "Zoom In", - "newFile": "New File", - "newFolder": "New Folder", - "rename": "Rename", - "uploading": "Uploading...", - "uploadingFile": "Uploading {{name}}...", - "uploadingChunk": "Uploading {{name}}: {{percent}}% (part {{chunk}} of {{total}})", - "fileName": "File Name", - "folderName": "Folder Name", - "fileUploadedSuccessfully": "File \"{{name}}\" uploaded successfully", - "failedToUploadFile": "Failed to upload file", - "uploadingFolderFiles": "Uploading {{count}} file(s)...", - "uploadedFolderFiles": "Uploaded {{count}} file(s) successfully", - "uploadedFolderPartial": "Uploaded {{uploaded}} file(s), {{failed}} failed", - "fileDownloadedSuccessfully": "File \"{{name}}\" downloaded successfully", - "failedToDownloadFile": "Failed to download file", - "fileCreatedSuccessfully": "File \"{{name}}\" created successfully", - "folderCreatedSuccessfully": "Folder \"{{name}}\" created successfully", - "failedToCreateItem": "Failed to create item", - "operationFailed": "{{operation}} operation failed for {{name}}: {{error}}", - "failedToResolveSymlink": "Failed to resolve symlink", - "itemsDeletedSuccessfully": "{{count}} items deleted successfully", - "failedToDeleteItems": "Failed to delete items", - "sudoPasswordRequired": "Administrator Password Required", - "enterSudoPassword": "Enter sudo password to continue this operation", - "sudoPassword": "Sudo password", - "sudoOperationFailed": "Sudo operation failed", - "sudoAuthFailed": "Sudo authentication failed", - "dragFilesToUpload": "Drop files here to upload", - "dropToUploadHere": "Drop to upload here", - "dropToDownloadHere": "Drop to download here", - "localFiles": "Local", - "showLocalFiles": "Show local files (split view)", - "hideLocalFiles": "Hide local files", - "localHome": "Home folder", - "localPathPlaceholder": "Local folder path", - "localShowHidden": "Show hidden files", - "localHideHidden": "Hide hidden files", - "localRevealInFileManager": "Reveal in system file manager", - "localCannotOpenFolder": "Cannot open folder", - "localItemCount": "{{count}} items", - "localSelectedCount": "{{count}} selected", - "back": "Back", - "forward": "Forward", - "up": "Up", - "kind": "Kind", - "localUploadingProgress": "Uploading {{current}} of {{total}}", - "localDownloadingProgress": "Downloading {{current}} of {{total}}", - "localTransferInFlight": "{{count}} at once", - "localPreparingDownload": "Preparing download...", - "localTransferCancelled": "Transfer cancelled", - "localNothingToTransfer": "Nothing to transfer", - "localUploadComplete": "Uploaded {{count}} file(s)", - "localUploadFailed": "Upload failed", - "localUploadPartial": "Uploaded {{done}} file(s), {{failed}} failed", - "localDownloadComplete": "Downloaded {{count}} file(s)", - "localDownloadFailed": "Download failed", - "localDownloadPartial": "Downloaded {{done}} file(s), {{failed}} failed", - "localReplaceExistingPrompt": "{{count}} item(s) already exist in this folder. Replace them?", - "localReplace": "Replace", - "localSkipExisting": "Skip", - "localSkippedExisting": "Skipped {{count}} existing item(s)", - "localUnsafeNamesSkipped": "Skipped {{count}} item(s) whose names cannot be used on this computer", - "localOpen": "Open", - "localOpenFolder": "Open folder", - "localUploadToRemote": "Upload to server", - "localUploadToRemoteMany": "Upload {{count}} items to server", - "localMoveToTrash": "Move to Trash", - "localMoveToTrashMany": "Move {{count}} items to Trash", - "localTrashConfirmSingle": "Move \"{{name}}\" to the Trash?", - "localTrashConfirmFolder": "Move the folder \"{{name}}\" and all its contents to the Trash?", - "localTrashConfirmMany": "Move {{count}} items to the Trash?", - "localTrashed": "Moved {{count}} item(s) to the Trash", - "localTrashFailed": "Could not move to the Trash", - "localRenameFailed": "Rename failed", - "localCreateFailed": "Could not create item", - "goToParentFolder": "Go to parent folder", - "resizeSidebar": "Drag to resize the sidebar (double-click to reset)", - "resizeLocalPane": "Drag to resize the local pane (double-click to reset)", - "columns": "Columns", - "columnsHint": "Right-click to choose columns", - "emptyFolder": "This folder is empty", - "searchFiles": "Search files...", - "upload": "Upload", - "selectHostToStart": "Select a host to start file management", - "sshRequiredForFileManager": "File manager requires SSH. This host does not have SSH enabled.", - "failedToConnect": "Failed to connect to SSH", - "failedToLoadDirectory": "Failed to load directory", - "noSSHConnection": "No SSH connection available", - "copy": "Copy", - "cut": "Cut", - "paste": "Paste", - "copyPath": "Copy Path", - "copyPaths": "Copy Paths", - "delete": "Delete", - "properties": "Properties", - "refresh": "Refresh", - "downloadFiles": "Download {{count}} files to Browser", - "copyFiles": "Copy {{count}} items", - "cutFiles": "Cut {{count}} items", - "deleteFiles": "Delete {{count}} items", - "filesCopiedToClipboard": "{{count}} items copied to clipboard", - "filesCutToClipboard": "{{count}} items cut to clipboard", - "pathCopiedToClipboard": "Path copied to clipboard", - "pathsCopiedToClipboard": "{{count}} paths copied to clipboard", - "failedToCopyPath": "Failed to copy path to clipboard", - "copyFolderLink": "Copy Link to Folder", - "copyCurrentFolderLink": "Copy Link to Current Folder", - "folderLinkCopied": "Folder link copied to clipboard", - "failedToCopyFolderLink": "Failed to copy folder link", - "movedItems": "Moved {{count}} items", - "failedToDeleteItem": "Failed to delete item", - "itemRenamedSuccessfully": "{{type}} renamed successfully", - "failedToRenameItem": "Failed to rename item", - "download": "Download", - "openExternalEditor": "Open externally", - "chooseExternalEditor": "Choose external editor", - "externalEditorSelected": "External editor selected", - "externalEditorDesktopOnly": "External editor is only available in the desktop app", - "externalEditorOpened": "Opened in external editor. Saving there will upload changes back to the server.", - "failedToOpenExternalEditor": "Failed to open external editor", - "failedToSelectExternalEditor": "Failed to select external editor", - "permissions": "Permissions", - "size": "Size", - "modified": "Modified", - "path": "Path", - "confirmDelete": "Are you sure you want to delete {{name}}?", - "permissionDenied": "Permission denied", - "serverError": "Server Error", - "fileSavedSuccessfully": "File saved successfully", - "failedToSaveFile": "Failed to save file", - "confirmDeleteSingleItem": "Are you sure you want to permanently delete \"{{name}}\"?", - "confirmDeleteMultipleItems": "Are you sure you want to permanently delete {{count}} items?", - "confirmDeleteMultipleItemsWithFolders": "Are you sure you want to permanently delete {{count}} items? This includes folders and their contents.", - "confirmDeleteFolder": "Are you sure you want to permanently delete the folder \"{{name}}\" and all its contents?", - "permanentDeleteWarning": "This action cannot be undone. The item(s) will be permanently deleted from the server.", - "moveToTrashWarning": "The item(s) will be moved to the Termix Trash and can be restored before the retention period expires.", - "itemsMovedToTrash": "{{count}} item(s) moved to Trash", - "trash": "Trash", - "trashDescription": "Deleted items are retained for {{days}} day(s) on this host.", - "trashLoadFailed": "Failed to load Trash", - "trashEmpty": "Trash is empty", - "trashRestore": "Restore", - "trashRestored": "Restored {{name}}", - "trashRestoreFailed": "Failed to restore item. The original path may already exist.", - "trashDeletePermanently": "Delete permanently", - "trashDeleteConfirm": "Permanently delete {{name}}? This cannot be undone.", - "trashPermanentlyDeleted": "Permanently deleted {{name}}", - "trashDeleteFailed": "Failed to permanently delete item", - "trashEmptyAction": "Empty Trash", - "trashEmptyConfirm": "Permanently delete every item in Trash? This cannot be undone.", - "trashEmptied": "Trash emptied", - "trashRetention": "Automatic cleanup after (days)", - "trashRetentionSaved": "Trash retention updated", - "trashRetentionFailed": "Failed to update Trash retention", - "trashUnavailableConfirm": "This item cannot be moved to Trash, usually because it is on another filesystem or requires elevated permissions. Delete it permanently instead?", - "recent": "Recent", - "pinned": "Pinned", - "folderShortcuts": "Folder Shortcuts", - "failedToReconnectSSH": "Failed to reconnect SSH session", - "openTerminalHere": "Open Terminal Here", - "run": "Run", - "openTerminalInFolder": "Open Terminal in This Folder", - "openTerminalInFileLocation": "Open Terminal at File Location", - "runningFile": "Running - {{file}}", - "onlyRunExecutableFiles": "Can only run executable files", - "directories": "Directories", - "removedFromRecentFiles": "Removed \"{{name}}\" from recent files", - "removeFailed": "Remove failed", - "unpinnedSuccessfully": "Unpinned \"{{name}}\" successfully", - "unpinFailed": "Unpin failed", - "removedShortcut": "Removed shortcut \"{{name}}\"", - "removeShortcutFailed": "Remove shortcut failed", - "clearedAllRecentFiles": "Cleared all recent files", - "clearFailed": "Clear failed", - "removeFromRecentFiles": "Remove from recent files", - "clearAllRecentFiles": "Clear all recent files", - "unpinFile": "Unpin file", - "removeShortcut": "Remove shortcut", - "pinFile": "Pin file", - "addToShortcuts": "Add to shortcuts", - "pasteFailed": "Paste failed", - "noUndoableActions": "No undoable actions", - "undoCopySuccess": "Undid copy operation: Deleted {{count}} copied files", - "undoCopyFailedDelete": "Undo failed: Could not delete any copied files", - "undoCopyFailedNoInfo": "Undo failed: Could not find copied file information", - "undoMoveSuccess": "Undid move operation: Moved {{count}} files back to original location", - "undoMoveFailedMove": "Undo failed: Could not move any files back", - "undoMoveFailedNoInfo": "Undo failed: Could not find moved file information", - "undoDeleteNotSupported": "Delete operation cannot be undone: Files have been permanently deleted from server", - "undoTypeNotSupported": "Unsupported undo operation type", - "undoOperationFailed": "Undo operation failed", - "unknownError": "Unknown error", - "confirm": "Confirm", - "find": "Find...", - "replace": "Replace", - "downloadInstead": "Download Instead", - "keyboardShortcuts": "Keyboard Shortcuts", - "searchAndReplace": "Search & Replace", - "editing": "Editing", - "search": "Search", - "findNext": "Find Next", - "findPrevious": "Find Previous", - "save": "Save", - "selectAll": "Select All", - "undo": "Undo", - "redo": "Redo", - "moveLineUp": "Move Line Up", - "moveLineDown": "Move Line Down", - "toggleComment": "Toggle Comment", - "autoComplete": "Auto Complete", - "imageLoadError": "Failed to load image", - "startTyping": "Start typing...", - "unknownSize": "Unknown size", - "fileIsEmpty": "File is empty", - "largeFileWarning": "Large File Warning", - "largeFileWarningDesc": "This file is {{size}} in size, which may cause performance issues when opened as text.", - "fileNotFoundAndRemoved": "File \"{{name}}\" not found and has been removed from recent/pinned files", - "failedToLoadFile": "Failed to load file: {{error}}", - "serverErrorOccurred": "Server error occurred. Please try again later.", - "autoSaveFailed": "Auto-save failed", - "fileAutoSaved": "File auto-saved", - "moveFileFailed": "Failed to move {{name}}", - "moveOperationFailed": "Move operation failed", - "canOnlyCompareFiles": "Can only compare two files", - "comparingFiles": "Comparing files: {{file1}} and {{file2}}", - "dragFailed": "Drag operation failed", - "filePinnedSuccessfully": "File \"{{name}}\" pinned successfully", - "pinFileFailed": "Failed to pin file", - "fileUnpinnedSuccessfully": "File \"{{name}}\" unpinned successfully", - "unpinFileFailed": "Failed to unpin file", - "shortcutAddedSuccessfully": "Folder shortcut \"{{name}}\" added successfully", - "addShortcutFailed": "Failed to add shortcut", - "operationCompletedSuccessfully": "{{operation}} {{count}} items successfully", - "operationCompleted": "{{operation}} {{count}} items", - "downloadFileSuccess": "File {{name}} downloaded successfully", - "downloadFileFailed": "Download failed", - "downloadingFile": "Downloading {{name}}…", + "noHostSelected": "Ingen värd vald", + "initializingEditor": "Initierar redigeraren...", + "file": "Fil", + "folder": "Mapp", + "uploadFile": "Ladda upp fil", + "downloadFile": "Ladda ner", + "extractArchive": "Utdragsarkiv", + "extractingArchive": "Extraherar {{name}}...", + "archiveExtractedSuccessfully": "{{name}} extraherades", + "extractFailed": "Extraheringen misslyckades", + "compressFile": "Komprimera fil", + "compressFiles": "Komprimera filer", + "compressFilesDesc": "Komprimera {{count}} objekt till ett arkiv", + "archiveName": "Arkivnamn", + "enterArchiveName": "Ange arkivnamn...", + "compressionFormat": "Komprimeringsformat", + "selectedFiles": "Valda filer", + "andMoreFiles": "och {{count}} mer...", + "compress": "Komprimera", + "compressingFiles": "Komprimerar {{count}} objekt till {{name}}...", + "filesCompressedSuccessfully": "{{name}} skapades", + "compressFailed": "Komprimeringen misslyckades", + "edit": "Redigera", + "preview": "Förhandsvisning", + "previous": "Tidigare", + "next": "Nästa", + "pageXOfY": "Sida {{current}} av {{total}}", + "zoomOut": "Zooma ut", + "zoomIn": "Zooma in", + "newFile": "Ny fil", + "newFolder": "Ny mapp", + "rename": "Döpa om", + "uploading": "Laddar upp...", + "uploadingFile": "Laddar upp {{name}}...", + "uploadingChunk": "Laddar upp {{name}}: {{percent}}% (del {{chunk}} av {{total}})", + "fileName": "Filnamn", + "folderName": "Mappnamn", + "fileUploadedSuccessfully": "Filen \"{{name}}\" har laddats upp", + "failedToUploadFile": "Misslyckades med att ladda upp filen", + "uploadingFolderFiles": "Laddar upp {{count}} fil(er)...", + "uploadedFolderFiles": "Uppladdade {{count}} fil(er) framgångsrikt", + "uploadedFolderPartial": "Uppladdade {{uploaded}} fil(er), {{failed}} misslyckades", + "fileDownloadedSuccessfully": "Filen \"{{name}}\" har laddats ner", + "failedToDownloadFile": "Misslyckades med att ladda ner filen", + "fileCreatedSuccessfully": "Filen \"{{name}}\" skapades", + "folderCreatedSuccessfully": "Mappen \"{{name}}\" skapades", + "failedToCreateItem": "Misslyckades med att skapa objektet", + "operationFailed": "{{operation}} -åtgärden misslyckades för {{name}}: {{error}}", + "failedToResolveSymlink": "Misslyckades med att lösa symbolisk länk", + "itemsDeletedSuccessfully": "{{count}} objekt har raderats", + "failedToDeleteItems": "Misslyckades med att ta bort objekt", + "sudoPasswordRequired": "Administratörslösenord krävs", + "enterSudoPassword": "Ange sudo-lösenordet för att fortsätta den här operationen", + "sudoPassword": "Sudo-lösenord", + "sudoOperationFailed": "Sudo-operationen misslyckades", + "sudoAuthFailed": "Sudo-autentisering misslyckades", + "dragFilesToUpload": "Släpp filer här för att ladda upp", + "dropToUploadHere": "Släpp för att ladda upp här", + "dropToDownloadHere": "Släpp för att ladda ner här", + "localFiles": "Lokal", + "showLocalFiles": "Visa lokala filer (delad vy)", + "hideLocalFiles": "Dölj lokala filer", + "localHome": "Hemmappen", + "localPathPlaceholder": "Sökväg till lokal mapp", + "localShowHidden": "Visa dolda filer", + "localHideHidden": "Dölj dolda filer", + "localRevealInFileManager": "Visa i systemets filhanterare", + "localCannotOpenFolder": "Kan inte öppna mappen", + "localItemCount": "{{count}} objekt", + "localSelectedCount": "{{count}} vald", + "back": "Tillbaka", + "forward": "Fram", + "up": "Upp", + "kind": "Slag", + "localUploadingProgress": "Laddar upp {{current}} av {{total}}", + "localDownloadingProgress": "Laddar ner {{current}} av {{total}}", + "localTransferInFlight": "{{count}} på en gång", + "localPreparingDownload": "Förbereder nedladdning...", + "localTransferCancelled": "Överföringen avbruten", + "localNothingToTransfer": "Inget att överföra", + "localUploadComplete": "Uppladdade {{count}} fil(er)", + "localUploadFailed": "Uppladdningen misslyckades", + "localUploadPartial": "Uppladdade {{done}} fil(er), {{failed}} misslyckades", + "localDownloadComplete": "Nedladdade {{count}} fil(er)", + "localDownloadFailed": "Nedladdningen misslyckades", + "localDownloadPartial": "Nedladdning av {{done}} fil(er), {{failed}} misslyckades", + "localReplaceExistingPrompt": "{{count}} objekt finns redan i den här mappen. Vill du ersätta dem?", + "localReplace": "Ersätta", + "localSkipExisting": "Hoppa", + "localSkippedExisting": "Hoppade över {{count}} befintliga objekt", + "localUnsafeNamesSkipped": "Hoppade över {{count}} objekt vars namn inte kan användas på den här datorn", + "localOpen": "Öppna", + "localOpenFolder": "Öppna mappen", + "localUploadToRemote": "Ladda upp till servern", + "localUploadToRemoteMany": "Ladda upp {{count}} objekt till servern", + "localMoveToTrash": "Flytta till papperskorgen", + "localMoveToTrashMany": "Flytta {{count}} objekt till papperskorgen", + "localTrashConfirmSingle": "Flytta \"{{name}}\" till papperskorgen?", + "localTrashConfirmFolder": "Flytta mappen \"{{name}}\" och allt dess innehåll till papperskorgen?", + "localTrashConfirmMany": "Flytta {{count}} objekt till papperskorgen?", + "localTrashed": "Flyttade {{count}} objekt till papperskorgen", + "localTrashFailed": "Kunde inte flytta till papperskorgen", + "localRenameFailed": "Byte av namn misslyckades", + "localCreateFailed": "Kunde inte skapa objektet", + "goToParentFolder": "Gå till överordnad mapp", + "resizeSidebar": "Dra för att ändra storlek på sidofältet (dubbelklicka för att återställa)", + "resizeLocalPane": "Dra för att ändra storlek på den lokala rutan (dubbelklicka för att återställa)", + "columns": "Kolumner", + "columnsHint": "Högerklicka för att välja kolumner", + "emptyFolder": "Den här mappen är tom", + "searchFiles": "Sök filer...", + "upload": "Ladda upp", + "selectHostToStart": "Välj en värd för att starta filhanteringen", + "sshRequiredForFileManager": "Filhanteraren kräver SSH. Den här värden har inte SSH aktiverat.", + "failedToConnect": "Misslyckades med att ansluta till SSH", + "failedToLoadDirectory": "Misslyckades med att ladda katalogen", + "noSSHConnection": "Ingen SSH-anslutning tillgänglig", + "copy": "Kopiera", + "cut": "Skära", + "paste": "Klistra", + "copyPath": "Kopiera sökväg", + "copyPaths": "Kopiera sökvägar", + "delete": "Radera", + "properties": "Fastigheter", + "refresh": "Uppdatera", + "downloadFiles": "Ladda ner {{count}} filer till webbläsaren", + "copyFiles": "Kopiera {{count}} objekt", + "cutFiles": "Klipp ut {{count}} objekt", + "deleteFiles": "Ta bort {{count}} objekt", + "filesCopiedToClipboard": "{{count}} objekt kopierade till urklipp", + "filesCutToClipboard": "{{count}} objekt klippta till urklipp", + "pathCopiedToClipboard": "Sökväg kopierad till urklipp", + "pathsCopiedToClipboard": "{{count}} sökvägar kopierade till urklipp", + "failedToCopyPath": "Misslyckades med att kopiera sökvägen till urklipp", + "copyFolderLink": "Kopiera länk till mapp", + "copyCurrentFolderLink": "Kopiera länk till aktuell mapp", + "folderLinkCopied": "Mapplänk kopierad till urklipp", + "failedToCopyFolderLink": "Misslyckades med att kopiera mapplänken", + "movedItems": "Flyttade {{count}} objekt", + "failedToDeleteItem": "Misslyckades med att ta bort objektet", + "itemRenamedSuccessfully": "{{type}} har bytt namn", + "failedToRenameItem": "Misslyckades med att byta namn på objektet", + "download": "Ladda ner", + "openExternalEditor": "Öppna externt", + "chooseExternalEditor": "Välj extern redigerare", + "externalEditorSelected": "Extern redigerare vald", + "externalEditorDesktopOnly": "Extern redigerare är endast tillgänglig i skrivbordsappen", + "externalEditorOpened": "Öppnad i extern redigerare. Om du sparar där laddas ändringarna upp tillbaka till servern.", + "failedToOpenExternalEditor": "Misslyckades med att öppna den externa redigeraren", + "failedToSelectExternalEditor": "Misslyckades med att välja extern redigerare", + "permissions": "Behörigheter", + "size": "Storlek", + "modified": "Ändrad", + "path": "Väg", + "confirmDelete": "Är du säker på att du vill ta bort {{name}}?", + "permissionDenied": "Tillstånd nekad", + "serverError": "Serverfel", + "fileSavedSuccessfully": "Filen har sparats", + "failedToSaveFile": "Misslyckades med att spara filen", + "confirmDeleteSingleItem": "Är du säker på att du vill ta bort \"{{name}} \" permanent?", + "confirmDeleteMultipleItems": "Är du säker på att du vill ta bort {{count}} objekt permanent?", + "confirmDeleteMultipleItemsWithFolders": "Är du säker på att du vill ta bort {{count}} objekt permanent? Detta inkluderar mappar och deras innehåll.", + "confirmDeleteFolder": "Är du säker på att du vill permanent ta bort mappen \"{{name}}\" och allt dess innehåll?", + "permanentDeleteWarning": "Den här åtgärden kan inte ångras. Objektet/objekten kommer att raderas permanent från servern.", + "moveToTrashWarning": "Objektet/objekten kommer att flyttas till Termix-papperskorgen och kan återställas innan lagringsperioden löper ut.", + "itemsMovedToTrash": "{{count}} objekt flyttade till papperskorgen", + "trash": "Skräp", + "trashDescription": "Borttagna objekt sparas i {{days}} dag(ar) på den här värden.", + "trashLoadFailed": "Misslyckades med att ladda papperskorgen", + "trashEmpty": "Papperskorgen är tom", + "trashRestore": "Återställa", + "trashRestored": "Återställd {{name}}", + "trashRestoreFailed": "Det gick inte att återställa objektet. Den ursprungliga sökvägen kan redan finnas.", + "trashDeletePermanently": "Ta bort permanent", + "trashDeleteConfirm": "Vill du permanent radera {{name}}? Detta kan inte ångras.", + "trashPermanentlyDeleted": "Permanent borttagen {{name}}", + "trashDeleteFailed": "Misslyckades med att ta bort objektet permanent", + "trashEmptyAction": "Töm papperskorgen", + "trashEmptyConfirm": "Vill du permanent radera alla objekt i papperskorgen? Det här kan inte ångras.", + "trashEmptied": "Papperskorgen tömd", + "trashRetention": "Automatisk rensning efter (dagar)", + "trashRetentionSaved": "Papperskorgen har lagrats uppdaterad", + "trashRetentionFailed": "Misslyckades med att uppdatera papperskorgen", + "trashUnavailableConfirm": "Det här objektet kan inte flyttas till papperskorgen, vanligtvis för att det finns på ett annat filsystem eller kräver utökade behörigheter. Vill du ta bort det permanent istället?", + "recent": "Ny", + "pinned": "Fäst", + "folderShortcuts": "Mappgenvägar", + "failedToReconnectSSH": "Misslyckades med att återansluta SSH-sessionen", + "openTerminalHere": "Öppna terminalen här", + "run": "Sikt", + "openTerminalInFolder": "Öppna terminalen i den här mappen", + "openTerminalInFileLocation": "Öppna terminalen på filplatsen", + "runningFile": "Löpning - {{file}}", + "onlyRunExecutableFiles": "Kan bara köra körbara filer", + "directories": "Kataloger", + "removedFromRecentFiles": "Tog bort \"{{name}}\" från senaste filer", + "removeFailed": "Borttagning misslyckades", + "unpinnedSuccessfully": "\"{{name}}\" har lossats", + "unpinFailed": "Misslyckades med att lossa", + "removedShortcut": "Tog bort genvägen \"{{name}}\"", + "removeShortcutFailed": "Misslyckades med att ta bort genvägen", + "clearedAllRecentFiles": "Rensade alla senaste filer", + "clearFailed": "Rensa misslyckades", + "removeFromRecentFiles": "Ta bort från senaste filer", + "clearAllRecentFiles": "Rensa alla senaste filer", + "unpinFile": "Lossa filen", + "removeShortcut": "Ta bort genväg", + "pinFile": "Fäst fil", + "addToShortcuts": "Lägg till i genvägar", + "pasteFailed": "Klistra in misslyckades", + "noUndoableActions": "Inga ångerbara åtgärder", + "undoCopySuccess": "Ångrad kopiering: Raderade {{count}} kopierade filer", + "undoCopyFailedDelete": "Ångra misslyckades: Kunde inte ta bort några kopierade filer", + "undoCopyFailedNoInfo": "Ångra misslyckades: Kunde inte hitta kopierad filinformation", + "undoMoveSuccess": "Ångrade flyttåtgärd: Flyttade {{count}} filer tillbaka till ursprunglig plats", + "undoMoveFailedMove": "Ångra misslyckades: Kunde inte flytta tillbaka några filer", + "undoMoveFailedNoInfo": "Ångra misslyckades: Kunde inte hitta information om den flyttade filen", + "undoDeleteNotSupported": "Raderingen kan inte ångras: Filerna har raderats permanent från servern", + "undoTypeNotSupported": "Ångra-åtgärdstypen stöds inte", + "undoOperationFailed": "Ångraåtgärden misslyckades", + "unknownError": "Okänt fel", + "confirm": "Bekräfta", + "find": "Hitta...", + "replace": "Ersätta", + "downloadInstead": "Ladda ner istället", + "keyboardShortcuts": "Kortkommandon", + "searchAndReplace": "Sök och ersätt", + "editing": "Redigering", + "search": "Söka", + "findNext": "Hitta nästa", + "findPrevious": "Hitta föregående", + "save": "Spara", + "selectAll": "Markera alla", + "undo": "Ångra", + "redo": "Göra om", + "moveLineUp": "Flytta upp raden", + "moveLineDown": "Flytta raden nedåt", + "toggleComment": "Växla kommentar", + "autoComplete": "Autoslutför", + "imageLoadError": "Misslyckades med att ladda bilden", + "startTyping": "Börja skriva...", + "unknownSize": "Okänd storlek", + "fileIsEmpty": "Filen är tom", + "largeFileWarning": "Varning för stora filer", + "largeFileWarningDesc": "Den här filen är {{size}} stor, vilket kan orsaka prestandaproblem när den öppnas som text.", + "fileNotFoundAndRemoved": "Filen \"{{name}}\" hittades inte och har tagits bort från senaste/fästa filer", + "failedToLoadFile": "Misslyckades med att ladda filen: {{error}}", + "serverErrorOccurred": "Serverfel uppstod. Försök igen senare.", + "autoSaveFailed": "Automatisk sparning misslyckades", + "fileAutoSaved": "Filen sparades automatiskt", + "moveFileFailed": "Misslyckades med att flytta {{name}}", + "moveOperationFailed": "Flyttoperationen misslyckades", + "canOnlyCompareFiles": "Kan bara jämföra två filer", + "comparingFiles": "Jämför filer: {{file1}} och {{file2}}", + "dragFailed": "Dragningsåtgärden misslyckades", + "filePinnedSuccessfully": "Filen \"{{name}}\" har fästs", + "pinFileFailed": "Misslyckades med att fästa filen", + "fileUnpinnedSuccessfully": "Filen \"{{name}}\" har lossats", + "unpinFileFailed": "Misslyckades med att lossa filen", + "shortcutAddedSuccessfully": "Mappgenvägen \"{{name}}\" har lagts till", + "addShortcutFailed": "Misslyckades med att lägga till genväg", + "operationCompletedSuccessfully": "{{operation}} {{count}} objekt lyckades", + "operationCompleted": "{{operation}} {{count}} objekt", + "downloadFileSuccess": "Filen {{name}} har laddats ner", + "downloadFileFailed": "Nedladdningen misslyckades", + "downloadingFile": "Laddar ner {{name}}…", "downloadProgressBytes": "{{transferred}} / {{total}}", - "moveTo": "Move to {{name}}", - "diffCompareWith": "Diff compare with {{name}}", - "dragOutsideToDownload": "Drag outside window to download ({{count}} files)", - "newFolderDefault": "NewFolder", - "newFileDefault": "NewFile.txt", - "successfullyMovedItems": "Successfully moved {{count}} items to {{target}}", - "move": "Move", - "searchInFile": "Search in file (Ctrl+F)", - "showKeyboardShortcuts": "Show keyboard shortcuts", - "decreaseFontSize": "Decrease font size", - "increaseFontSize": "Increase font size", - "startWritingMarkdown": "Start writing your markdown content...", - "loadingFileComparison": "Loading file comparison...", - "reload": "Reload", - "compare": "Compare", - "sideBySide": "Side by Side", + "moveTo": "Flytta till {{name}}", + "diffCompareWith": "Differensjämförelse med {{name}}", + "dragOutsideToDownload": "Dra utanför fönstret för att ladda ner ({{count}} filer)", + "newFolderDefault": "Nymapp", + "newFileDefault": "Nyfil.txt", + "successfullyMovedItems": "Flyttade {{count}} objekt till {{target}}", + "move": "Flytta", + "searchInFile": "Sök i filen (Ctrl+F)", + "showKeyboardShortcuts": "Visa kortkommandon", + "decreaseFontSize": "Minska teckenstorleken", + "increaseFontSize": "Öka teckenstorleken", + "startWritingMarkdown": "Börja skriva ditt nedskrivningsinnehåll...", + "loadingFileComparison": "Laddar filjämförelse...", + "reload": "Ladda om", + "compare": "Jämföra", + "sideBySide": "Sida vid sida", "inline": "Inline", - "fileComparison": "File Comparison: {{file1}} vs {{file2}}", - "fileTooLarge": "File too large: {{error}}", - "sshConnectionFailed": "SSH connection failed. Please check your connection to {{name}} ({{ip}}:{{port}})", - "loadFileFailed": "Failed to load file: {{error}}", - "connecting": "Connecting...", - "connectedSuccessfully": "Connected successfully", - "totpVerificationFailed": "TOTP verification failed", - "browserSignInFailed": "Sign-in failed. Please try again.", - "authenticationFailed": "Authentication failed", - "incorrectPassphrase": "Incorrect passphrase. Please try again.", - "verificationCodePrompt": "Verification code:", - "changePermissions": "Change Permissions", - "currentPermissions": "Current Permissions", - "owner": "Owner", - "group": "Group", - "others": "Others", - "read": "Read", - "write": "Write", - "execute": "Execute", - "permissionsChangedSuccessfully": "Permissions changed successfully", - "failedToChangePermissions": "Failed to change permissions", - "name": "Name", - "sortByName": "Name", - "sortByDate": "Date Modified", - "sortBySize": "Size", - "ascending": "Ascending", - "descending": "Descending", - "root": "Root", - "new": "New", - "sortBy": "Sort By", - "items": "Items", - "selected": "Selected", - "editor": "Editor", - "octal": "Octal", - "storage": "Storage", + "fileComparison": "Filjämförelse: {{file1}} vs {{file2}}", + "fileTooLarge": "File is too large (> 10MB) and cannot be opened as text for security reasons.", + "sshConnectionFailed": "SSH-anslutningen misslyckades. Kontrollera din anslutning till {{name}} ({{ip}}:{{port}})", + "loadFileFailed": "Misslyckades med att ladda filen: {{error}}", + "connecting": "Ansluter...", + "connectedSuccessfully": "Ansluten", + "totpVerificationFailed": "TOTP-verifiering misslyckades", + "browserSignInFailed": "Inloggningen misslyckades. Försök igen.", + "authenticationFailed": "Autentiseringen misslyckades", + "incorrectPassphrase": "Felaktigt lösenord. Försök igen.", + "verificationCodePrompt": "Verifieringskod:", + "changePermissions": "Ändra behörigheter", + "currentPermissions": "Nuvarande behörigheter", + "owner": "Ägare", + "group": "Grupp", + "others": "Andra", + "read": "Läsa", + "write": "Skriva", + "execute": "Utföra", + "permissionsChangedSuccessfully": "Behörigheter har ändrats", + "failedToChangePermissions": "Misslyckades med att ändra behörigheter", + "name": "Namn", + "sortByName": "Namn", + "sortByDate": "Datum ändrat", + "sortBySize": "Storlek", + "ascending": "Stigande", + "descending": "Fallande", + "root": "Rot", + "new": "Ny", + "sortBy": "Sortera efter", + "items": "Föremål", + "selected": "Vald", + "editor": "Redaktör", + "octal": "Oktal", + "storage": "Lagring", "disk": "Disk", - "used": "Used", - "of": "of", - "toggleSidebar": "Toggle Sidebar", - "compactLayout": "Use compact layout", - "comfortableLayout": "Use comfortable layout", - "cannotLoadPdf": "Cannot load PDF", - "pdfLoadError": "There was an error loading this PDF file.", - "loadingPdf": "Loading PDF...", - "loadingPage": "Loading page...", - "cancel": "Cancel", - "copiedItems_one": "Copied {{count}} item", - "copiedItems_other": "Copied {{count}} items", - "deleteCopiedFileFailed": "Could not delete the copy of {{name}}: {{error}}", - "dragMovedItems_one": "Moved {{count}} item to {{target}}", - "dragMovedItems_other": "Moved {{count}} items to {{target}}", - "moveBackFileFailed": "Could not move {{name}} back: {{error}}", + "used": "Begagnad", + "of": "av", + "toggleSidebar": "Växla sidofält", + "compactLayout": "Använd kompakt layout", + "comfortableLayout": "Använd bekväm layout", + "cannotLoadPdf": "Kan inte ladda PDF-filen", + "pdfLoadError": "Det uppstod ett fel när PDF-filen laddades.", + "loadingPdf": "Loading PDF viewer...", + "loadingPage": "Laddar sida...", + "cancel": "Avboka", + "copiedItems_one": "Kopierade {{count}} objekt", + "copiedItems_other": "Kopierade {{count}} objekt", + "deleteCopiedFileFailed": "Kunde inte ta bort kopian av {{name}}: {{error}}", + "dragMovedItems_one": "Flyttade objektet {{count}} till {{target}}", + "dragMovedItems_other": "Flyttade {{count}} objekt till {{target}}", + "moveBackFileFailed": "Kunde inte flytta {{name}} tillbaka: {{error}}", "terminal": "Terminal: {{host}} ({{path}})", - "dragToDesktop": "Dragging {{name}} to the desktop", - "dragFilesToDesktop": "Dragging {{count}} files to the desktop", - "folderDragUnsupported": "Dragging folders to the desktop is not supported yet", - "saveToDesktopFailed": "Save failed: {{error}}", - "dragFailedDetail": "Drag failed: {{error}}", - "videoUnsupported": "Your browser cannot play this video format.", - "downloadToPlay": "Download to play it elsewhere", - "cannotPreviewType": "Cannot preview this file type", - "cannotPreviewTypeHint": "This file type has no preview. Download it to open it in another app." + "dragToDesktop": "Dra {{name}} till skrivbordet", + "dragFilesToDesktop": "Dra {{count}} filer till skrivbordet", + "folderDragUnsupported": "Att dra mappar till skrivbordet stöds ännu inte", + "saveToDesktopFailed": "Spara misslyckades: {{error}}", + "dragFailedDetail": "Drag misslyckades: {{error}}", + "videoUnsupported": "Din webbläsare kan inte spela upp det här videoformatet.", + "downloadToPlay": "Ladda ner för att spela det någon annanstans", + "cannotPreviewType": "Det går inte att förhandsgranska den här filtypen", + "cannotPreviewTypeHint": "Den här filtypen har ingen förhandsgranskning. Ladda ner den för att öppna den i en annan app.", + "loadingFile": "Loading file...", + "loadingImage": "Loading image...", + "loadingEditor": "Loading editor...", + "loadingPreview": "Loading preview...", + "loadingAudio": "Loading audio player...", + "emptyPreview": "Nothing to preview yet...", + "revert": "Revert", + "openAsText": "Open as Text", + "confirmOpenAsText": "Do you want to continue opening this file as text? This may slow down your browser." }, "sftpTransfer": { "title": "SFTP", - "description": "Transfer files between two SSH hosts.", - "sourceServer": "Source Server", - "destinationServer": "Destination Server", - "selectHost": "Select host", - "noHostSelected": "No host selected", - "move": "Move", - "copy": "Copy", - "upload": "Upload", - "itemsSelected": "{{count}} item selected", - "itemsSelected_other": "{{count}} items selected", - "ready": "Ready", - "loadingHosts": "Loading hosts...", - "name": "Name", - "modified": "Modified", - "size": "Size", - "noFiles": "No files", - "open": "Open", - "up": "Up", - "refresh": "Refresh", - "copyToTarget": "Copy to Target Directory", - "rename": "Rename", - "delete": "Delete", - "editPermissions": "Edit Permissions", - "createNewFolder": "Create New Folder", - "deleteSelectedItems": "Delete Selected Items", - "deleteConfirm": "Delete {{count}} selected item?", - "deleteConfirm_other": "Delete {{count}} selected items?", - "cancel": "Cancel", - "save": "Save", - "folderCreated": "Folder created", - "itemRenamed": "Item renamed", - "actionFailed": "Action failed", - "itemsDeleted": "{{count}} item deleted", - "itemsDeleted_other": "{{count}} items deleted", - "deleteFailed": "Delete failed", - "permissionsUpdated": "Permissions updated", - "noRemoteSessionConnected": "No remote session connected", - "failedToListFiles": "Failed to list files", - "failedToRefresh": "Failed to refresh", - "destinationInsideSource": "Destination cannot be inside the selected source path.", - "sameHostNoOp": "Source and destination are the same folder." + "description": "Överför filer mellan två SSH-värdar.", + "sourceServer": "Källserver", + "destinationServer": "Destinationsserver", + "selectHost": "Välj värd", + "noHostSelected": "Ingen värd vald", + "move": "Flytta", + "copy": "Kopiera", + "upload": "Ladda upp", + "itemsSelected": "{{count}} objekt valt", + "itemsSelected_other": "{{count}} objekt valda", + "ready": "Redo", + "loadingHosts": "Laddar värdar...", + "name": "Namn", + "modified": "Ändrad", + "size": "Storlek", + "noFiles": "Inga filer", + "open": "Öppna", + "up": "Upp", + "refresh": "Uppdatera", + "copyToTarget": "Kopiera till målkatalog", + "rename": "Döpa om", + "delete": "Radera", + "editPermissions": "Redigera behörigheter", + "createNewFolder": "Skapa ny mapp", + "deleteSelectedItems": "Ta bort valda objekt", + "deleteConfirm": "Ta bort {{count}} markerat objekt?", + "deleteConfirm_other": "Ta bort {{count}} markerade objekt?", + "cancel": "Avboka", + "save": "Spara", + "folderCreated": "Mapp skapad", + "itemRenamed": "Artikeln har bytt namn", + "actionFailed": "Åtgärden misslyckades", + "itemsDeleted": "{{count}} objekt borttaget", + "itemsDeleted_other": "{{count}} objekt raderade", + "deleteFailed": "Raderingen misslyckades", + "permissionsUpdated": "Behörigheter uppdaterade", + "noRemoteSessionConnected": "Ingen fjärrsession ansluten", + "failedToListFiles": "Misslyckades med att lista filer", + "failedToRefresh": "Misslyckades med att uppdatera", + "destinationInsideSource": "Destinationen får inte vara inom den valda källsökvägen.", + "sameHostNoOp": "Källa och destination är samma mapp." }, "hosts": { - "fileManager": "File Manager", - "fileManagerUrlCopied": "File Manager URL copied", - "copyFileManagerUrlAction": "Copy File Manager URL", - "docsLink": "View docs", - "hostNotFound": "Host not found", - "loadingHost": "Loading host..." + "fileManager": "Filhanteraren", + "fileManagerUrlCopied": "Filhanterarens URL kopierad", + "copyFileManagerUrlAction": "Kopiera filhanterarens URL", + "docsLink": "Visa dokument", + "hostNotFound": "Värden hittades inte", + "loadingHost": "Laddar värd..." }, "onboarding": { - "feature_files": "File manager", - "feature_files_desc": "Browse, upload, download and edit files over SFTP without leaving the app." + "feature_files": "Filhanteraren", + "feature_files_desc": "Bläddra, ladda upp, ladda ner och redigera filer via SFTP utan att lämna appen." }, "terminal": { - "runTitle": "Running {{command}} - {{host}}", + "runTitle": "Kör {{command}} - {{host}}", "terminalTitle": "Terminal - {{host}}", "terminalWithPath": "Terminal - {{host}}:{{path}}" }, "transfer": { - "browseFolders": "Browse destination folders", - "browsePathError": "Could not open this path on the destination host.", - "browsePathWillBeCreated": "This folder does not exist yet. It will be created when the transfer starts.", - "cancel": "Cancel", - "cleanupDestFiles": "Clean up destination", - "cleanupDestFilesError": "Cleanup failed", - "cleanupDestFilesNothing": "Nothing to clean up on the destination", - "cleanupDestFilesPartial": "Some partial files could not be removed", - "cleanupDestFilesSuccess": "Removed partial files from the destination", - "confirmCopy": "Copy", - "confirmMove": "Move", - "copyFolderToHost": "Copy folder to host…", - "copyItemsToHost": "Copy {{count}} items to host…", - "copyToHost": "Copy to host…", - "destinationPath": "Destination path", - "destMustBeDirectory": "Destination must be a directory for multi-item transfers", - "goUp": "Go up", - "hostAuthRequired": "Authentication required. Open File Manager on this host first", - "hostConnecting": "Connecting…", - "hostConnectionFailed": "Connection failed", - "hostDisconnected": "Not connected", - "hostReady": "Ready", - "itemsSummary": "{{count}} items", - "jumpHostLimitation": "Both hosts must be reachable from the Termix server. Direct host-to-host routing is not supported.", - "methodAuto": "Auto", - "methodAutoHint": "Picks tar or per-file SFTP based on file count, size, and compressibility. Single files always use streaming SFTP.", - "methodItemSftp": "Per-file SFTP", - "methodItemSftpHint": "Transfer each file individually over SFTP. Works on all hosts including Windows.", - "methodItemSftpLimitation": "Each file uses the same SFTP stream as a single-file copy, one after another. Progress is combined across all files, so the bar moves slowly during large files.", - "methodLabel": "Transfer method", - "methodPreviewError": "Could not preview transfer method. The server will still pick a method when you start.", - "methodPreviewLoading": "Calculating transfer method…", - "methodPreviewScanSummary": "{{fileCount}} files, {{totalSize}} total (scanned on source host).", - "methodPreviewWillUseItemSftp": "Will use: Per-file SFTP", - "methodPreviewWillUseTar": "Will use: Tar archive", + "browseFolders": "Bläddra bland målmappar", + "browsePathError": "Kunde inte öppna den här sökvägen på målvärden.", + "browsePathWillBeCreated": "Den här mappen finns inte ännu. Den kommer att skapas när överföringen startar.", + "cancel": "Avboka", + "cleanupDestFiles": "Städa upp destinationen", + "cleanupDestFilesError": "Rensningen misslyckades", + "cleanupDestFilesNothing": "Inget att städa upp på destinationen", + "cleanupDestFilesPartial": "Vissa delfiler kunde inte tas bort", + "cleanupDestFilesSuccess": "Tog bort delvisa filer från destinationen", + "confirmCopy": "Kopiera", + "confirmMove": "Flytta", + "copyFolderToHost": "Kopiera mapp till värden…", + "copyItemsToHost": "Kopiera {{count}} objekt till…", + "copyToHost": "Kopiera till värd…", + "destinationPath": "Destinationsväg", + "destMustBeDirectory": "Destinationen måste vara en katalog för överföringar av flera objekt", + "goUp": "Gå upp", + "hostAuthRequired": "Autentisering krävs. Öppna filhanteraren på den här värden först.", + "hostConnecting": "Ansluter…", + "hostConnectionFailed": "Anslutningen misslyckades", + "hostDisconnected": "Inte ansluten", + "hostReady": "Redo", + "itemsSummary": "{{count}} objekt", + "jumpHostLimitation": "Båda värdarna måste vara nåbara från Termix-servern. Direkt routing mellan värdar stöds inte.", + "methodAuto": "Bil", + "methodAutoHint": "Väljer tar eller SFTP per fil baserat på filantal, storlek och komprimerbarhet. Enstaka filer använder alltid strömmande SFTP.", + "methodItemSftp": "SFTP per fil", + "methodItemSftpHint": "Överför varje fil individuellt via SFTP. Fungerar på alla värdar inklusive Windows.", + "methodItemSftpLimitation": "Varje fil använder samma SFTP-ström som en kopia av en enda fil, en efter en. Förloppet kombineras över alla filer, så stapeln rör sig långsamt vid stora filer.", + "methodLabel": "Överföringsmetod", + "methodPreviewError": "Kunde inte förhandsgranska överföringsmetoden. Servern kommer fortfarande att välja en metod när du startar.", + "methodPreviewLoading": "Beräkning av överföringsmetod…", + "methodPreviewScanSummary": "{{fileCount}} filer, {{totalSize}} totalt (skannat på källvärd).", + "methodPreviewWillUseItemSftp": "Kommer att använda: SFTP per fil", + "methodPreviewWillUseTar": "Kommer att använda: Tar-arkiv", "methodReason": { - "user_item_sftp": "You chose per-file SFTP.", - "user_tar": "You chose tar archive.", - "tar_unavailable": "Tar is not available on one or both hosts, so per-file SFTP will be used instead.", - "windows_host": "A Windows host is involved, so tar is not used.", - "auto_multi_large": "Auto: multiple files including a large file ({{largestSize}}) with compressible data. Tar bundles them into one transfer.", - "auto_single_large_in_archive": "Auto: one large file ({{largestSize}}) in this set, so per-file SFTP.", - "auto_many_incompressible": "Auto: mostly incompressible data, so per-file SFTP.", - "auto_many_files": "Auto: many files ({{fileCount}}), tar cuts the per-file overhead.", - "auto_default": "Auto: per-file SFTP for this set." + "user_item_sftp": "Du valde SFTP per fil.", + "user_tar": "Du valde tar-arkivet.", + "tar_unavailable": "Tar är inte tillgängligt på en eller båda värdarna, så SFTP per fil kommer att användas istället.", + "windows_host": "En Windows-värd är inblandad, så tar används inte.", + "auto_multi_large": "Auto: flera filer inklusive en stor fil ({{largestSize}}) med komprimerbar data. Tar buntar dem i en överföring.", + "auto_single_large_in_archive": "Auto: en stor fil ({{largestSize}}) i den här uppsättningen, så SFTP per fil.", + "auto_many_incompressible": "Auto: mestadels inkomprimerbar data, så SFTP per fil.", + "auto_many_files": "Auto: många filer ({{fileCount}}), tar minskar overhead per fil.", + "auto_default": "Auto: SFTP per fil för den här uppsättningen." }, - "methodTar": "Tar archive", - "methodTarHint": "Compress on source, transfer one archive, extract on destination. Requires tar on both Unix hosts.", - "metricsCompress": "Compress on source: {{duration}}", - "metricsExtract": "Extract on destination: {{duration}}", - "metricsPrepare": "Prepare destination: {{duration}}", - "metricsRouteBenchmark": "Route probe: direct {{direct}}, relay {{relay}}", - "metricsSourceDelete": "Remove from source: {{duration}}", - "metricsTotal": "Total: {{duration}}", - "metricsTransfer": "End-to-end: {{throughput}} ({{duration}})", - "metricsVerify": "SHA-256 verified: {{duration}}", - "moveFolderToHost": "Move folder to host…", - "moveItemsToHost": "Move {{count}} items to host…", - "moveToHost": "Move to host…", - "noHostsConnected": "No other file-manager hosts available.", - "noHostsConnectedHint": "Add another SSH host with File Manager enabled in Host Manager.", - "parallelSegmentsHint": "Large files are split into 256 MB chunks. Multiple lanes use separate connections (like starting several transfers) for higher total throughput.", - "parallelSegmentsLabel": "Parallel transfer lanes", - "parallelSegmentsOption": "{{count}} lanes", - "progressBenchmarking": "Selecting the fastest transfer route…", + "methodTar": "Tar-arkiv", + "methodTarHint": "Komprimera vid källan, överför ett arkiv, extrahera vid destinationen. Kräver tar på båda Unix-värdarna.", + "metricsCompress": "Komprimera på källan: {{duration}}", + "metricsExtract": "Extrahera på destination: {{duration}}", + "metricsPrepare": "Förbered destination: {{duration}}", + "metricsRouteBenchmark": "Ruttsond: direkt {{direct}}, relä {{relay}}", + "metricsSourceDelete": "Ta bort från källan: {{duration}}", + "metricsTotal": "Totalt: {{duration}}", + "metricsTransfer": "Från slut till slut: {{throughput}} ({{duration}})", + "metricsVerify": "SHA-256 verifierad: {{duration}}", + "moveFolderToHost": "Flytta mappen till värden…", + "moveItemsToHost": "Flytta {{count}} objekt till…", + "moveToHost": "Flytta till värd…", + "noHostsConnected": "Inga andra filhanterarvärdar tillgängliga.", + "noHostsConnectedHint": "Lägg till en annan SSH-värd med filhanteraren aktiverad i värdhanteraren.", + "parallelSegmentsHint": "Stora filer delas upp i bitar på 256 MB. Flera filer använder separata anslutningar (som att starta flera överföringar) för högre total dataflöde.", + "parallelSegmentsLabel": "Parallella överföringsfält", + "parallelSegmentsOption": "{{count}} körfält", + "progressBenchmarking": "Välja den snabbaste transfervägen…", "progressBytes": "{{transferred}} / {{total}}", - "progressCancel": "Cancel", - "progressCancelling": "Cancelling…", - "progressCompressing": "Compressing on source host…", - "progressExtracting": "Extracting on destination…", - "progressItems": "{{current}} / {{total}} files", - "progressReconnecting": "Reconnecting…", - "progressStalled": "Stalled", - "progressTotalSpeed": "{{speed}} total ({{lanes}} lanes)", - "progressTransferring": "Transferring data…", - "progressTransferringItems": "Transferring files ({{current}} of {{total}})…", - "progressVerifying": "Verifying file integrity…", - "recentDestinations": "Recent destinations", - "resumedHint": "Reconnected to an active transfer started in another window.", - "retryTransfer": "Retry", - "retryTransferError": "Retry failed", - "selectDestinationHost": "Select destination host", - "transferCancelled": "Transfer cancelled", - "transferCancelledCopyHint": "Partial files may remain on the destination.", - "transferCancelledMoveHint": "Partial files may remain on the destination. Source files were not removed.", - "transferError": "Transfer failed", - "transferFailedRetryHint": "Partial data was kept on the destination. Retry will resume when the connection is back.", - "transferPartialHint": "Could not transfer: {{paths}}", - "transferSuccess": "Transfer complete", - "metricsHopSourceRead": "Source → server: {{throughput}}", - "metricsHopDestSftpWrite": "Server → dest (SFTP): {{throughput}}", - "metricsHopDestLocalWrite": "Server → dest (local): {{throughput}}" + "progressCancel": "Avboka", + "progressCancelling": "Avbryter…", + "progressCompressing": "Komprimering på källvärd…", + "progressExtracting": "Extraherar på destination…", + "progressItems": "{{current}} / {{total}} filer", + "progressReconnecting": "Återansluter…", + "progressStalled": "Stannade", + "progressTotalSpeed": "{{speed}} totalt ({{lanes}} körfält)", + "progressTransferring": "Överför data…", + "progressTransferringItems": "Överföra filer ({{current}} av {{total}})…", + "progressVerifying": "Verifierar filintegritet…", + "recentDestinations": "Senaste destinationerna", + "resumedHint": "Återansluten till en aktiv överföring som startade i ett annat fönster.", + "retryTransfer": "Försöka igen", + "retryTransferError": "Återförsök misslyckades", + "selectDestinationHost": "Välj destinationsvärd", + "transferCancelled": "Överföringen avbruten", + "transferCancelledCopyHint": "Delvisa filer kan finnas kvar på destinationen.", + "transferCancelledMoveHint": "Delvisa filer kan finnas kvar på destinationen. Källfilerna togs inte bort.", + "transferError": "Överföringen misslyckades", + "transferFailedRetryHint": "Delvis data sparades på destinationen. Försöket återupptas när anslutningen är tillbaka.", + "transferPartialHint": "Kunde inte överföra: {{paths}}", + "transferSuccess": "Överföringen är klar", + "metricsHopSourceRead": "Källa → server: {{throughput}}", + "metricsHopDestSftpWrite": "Server → destination (SFTP): {{throughput}}", + "metricsHopDestLocalWrite": "Server → destination (lokal): {{throughput}}" + }, + "plugin": { + "name": "File Manager" } } diff --git a/plugins/file-manager/locales/translated/th_TH.json b/plugins/file-manager/locales/translated/th_TH.json index dc86761ce..bb2b2d8a3 100644 --- a/plugins/file-manager/locales/translated/th_TH.json +++ b/plugins/file-manager/locales/translated/th_TH.json @@ -1,543 +1,555 @@ { "nav": { - "files": "Files", - "sftp": "SFTP", - "openFileManager": "Open File Manager" + "files": "ไฟล์", + "sftp": "เอสเอฟทีพี", + "openFileManager": "เปิดตัวจัดการไฟล์" }, "permissions": { "use": { - "title": "Use file manager", - "description": "Browse, edit and transfer files over SFTP." + "title": "ใช้โปรแกรมจัดการไฟล์", + "description": "เรียกดู แก้ไข และถ่ายโอนไฟล์ผ่าน SFTP" } }, "settings": { "host": { "enable": { - "label": "Enable File Manager", - "description": "Browse and edit files on this host over SFTP." + "label": "เปิดใช้งานตัวจัดการไฟล์", + "description": "เรียกดูและแก้ไขไฟล์บนโฮสต์นี้ผ่านทาง SFTP" }, "defaultPath": { - "label": "Default Path" + "label": "เส้นทางเริ่มต้น" }, "scpLegacy": { - "label": "SCP Legacy Mode" + "label": "โหมด SCP ดั้งเดิม" } }, "user": { "transferConcurrency": { - "label": "Simultaneous File Transfers", - "description": "How many files the side by side local/remote manager uploads or downloads at the same time. Lower this if your server limits SFTP channels." + "label": "การโอนไฟล์พร้อมกัน", + "description": "ตัวจัดการไฟล์แบบโลคอล/รีโมตที่ทำงานควบคู่กันไป สามารถอัปโหลดหรือดาวน์โหลดไฟล์ได้พร้อมกันกี่ไฟล์ ลดจำนวนไฟล์นี้ลงหากเซิร์ฟเวอร์ของคุณจำกัดจำนวนช่อง SFTP" }, "confirmBeforeTrash": { - "label": "Confirm before moving files to trash", - "description": "Ask before moving remote files to trash. Permanent deletion still requires confirmation." + "label": "ตรวจสอบให้แน่ใจก่อนย้ายไฟล์ไปยังถังขยะ", + "description": "โปรดสอบถามก่อนย้ายไฟล์ระยะไกลไปยังถังขยะ การลบถาวรยังคงต้องได้รับการยืนยัน" } } }, "hostCapability": { - "label": "File Manager" + "label": "ตัวจัดการไฟล์" }, "fileManager": { - "noHostSelected": "No host selected", - "initializingEditor": "Initializing editor...", - "file": "File", - "folder": "Folder", - "uploadFile": "Upload File", - "downloadFile": "Download", - "extractArchive": "Extract Archive", - "extractingArchive": "Extracting {{name}}...", - "archiveExtractedSuccessfully": "{{name}} extracted successfully", - "extractFailed": "Extract failed", - "compressFile": "Compress File", - "compressFiles": "Compress Files", - "compressFilesDesc": "Compress {{count}} items into an archive", - "archiveName": "Archive Name", - "enterArchiveName": "Enter archive name...", - "compressionFormat": "Compression Format", - "selectedFiles": "Selected files", - "andMoreFiles": "and {{count}} more...", - "compress": "Compress", - "compressingFiles": "Compressing {{count}} items into {{name}}...", - "filesCompressedSuccessfully": "{{name}} created successfully", - "compressFailed": "Compression failed", - "edit": "Edit", - "preview": "Preview", - "previous": "Previous", - "next": "Next", - "pageXOfY": "Page {{current}} of {{total}}", - "zoomOut": "Zoom Out", - "zoomIn": "Zoom In", - "newFile": "New File", - "newFolder": "New Folder", - "rename": "Rename", - "uploading": "Uploading...", - "uploadingFile": "Uploading {{name}}...", - "uploadingChunk": "Uploading {{name}}: {{percent}}% (part {{chunk}} of {{total}})", - "fileName": "File Name", - "folderName": "Folder Name", - "fileUploadedSuccessfully": "File \"{{name}}\" uploaded successfully", - "failedToUploadFile": "Failed to upload file", - "uploadingFolderFiles": "Uploading {{count}} file(s)...", - "uploadedFolderFiles": "Uploaded {{count}} file(s) successfully", - "uploadedFolderPartial": "Uploaded {{uploaded}} file(s), {{failed}} failed", - "fileDownloadedSuccessfully": "File \"{{name}}\" downloaded successfully", - "failedToDownloadFile": "Failed to download file", - "fileCreatedSuccessfully": "File \"{{name}}\" created successfully", - "folderCreatedSuccessfully": "Folder \"{{name}}\" created successfully", - "failedToCreateItem": "Failed to create item", - "operationFailed": "{{operation}} operation failed for {{name}}: {{error}}", - "failedToResolveSymlink": "Failed to resolve symlink", - "itemsDeletedSuccessfully": "{{count}} items deleted successfully", - "failedToDeleteItems": "Failed to delete items", - "sudoPasswordRequired": "Administrator Password Required", - "enterSudoPassword": "Enter sudo password to continue this operation", - "sudoPassword": "Sudo password", - "sudoOperationFailed": "Sudo operation failed", - "sudoAuthFailed": "Sudo authentication failed", - "dragFilesToUpload": "Drop files here to upload", - "dropToUploadHere": "Drop to upload here", - "dropToDownloadHere": "Drop to download here", - "localFiles": "Local", - "showLocalFiles": "Show local files (split view)", - "hideLocalFiles": "Hide local files", - "localHome": "Home folder", - "localPathPlaceholder": "Local folder path", - "localShowHidden": "Show hidden files", - "localHideHidden": "Hide hidden files", - "localRevealInFileManager": "Reveal in system file manager", - "localCannotOpenFolder": "Cannot open folder", - "localItemCount": "{{count}} items", - "localSelectedCount": "{{count}} selected", - "back": "Back", - "forward": "Forward", - "up": "Up", - "kind": "Kind", - "localUploadingProgress": "Uploading {{current}} of {{total}}", - "localDownloadingProgress": "Downloading {{current}} of {{total}}", - "localTransferInFlight": "{{count}} at once", - "localPreparingDownload": "Preparing download...", - "localTransferCancelled": "Transfer cancelled", - "localNothingToTransfer": "Nothing to transfer", - "localUploadComplete": "Uploaded {{count}} file(s)", - "localUploadFailed": "Upload failed", - "localUploadPartial": "Uploaded {{done}} file(s), {{failed}} failed", - "localDownloadComplete": "Downloaded {{count}} file(s)", - "localDownloadFailed": "Download failed", - "localDownloadPartial": "Downloaded {{done}} file(s), {{failed}} failed", - "localReplaceExistingPrompt": "{{count}} item(s) already exist in this folder. Replace them?", - "localReplace": "Replace", - "localSkipExisting": "Skip", - "localSkippedExisting": "Skipped {{count}} existing item(s)", - "localUnsafeNamesSkipped": "Skipped {{count}} item(s) whose names cannot be used on this computer", - "localOpen": "Open", - "localOpenFolder": "Open folder", - "localUploadToRemote": "Upload to server", - "localUploadToRemoteMany": "Upload {{count}} items to server", - "localMoveToTrash": "Move to Trash", - "localMoveToTrashMany": "Move {{count}} items to Trash", - "localTrashConfirmSingle": "Move \"{{name}}\" to the Trash?", - "localTrashConfirmFolder": "Move the folder \"{{name}}\" and all its contents to the Trash?", - "localTrashConfirmMany": "Move {{count}} items to the Trash?", - "localTrashed": "Moved {{count}} item(s) to the Trash", - "localTrashFailed": "Could not move to the Trash", - "localRenameFailed": "Rename failed", - "localCreateFailed": "Could not create item", - "goToParentFolder": "Go to parent folder", - "resizeSidebar": "Drag to resize the sidebar (double-click to reset)", - "resizeLocalPane": "Drag to resize the local pane (double-click to reset)", - "columns": "Columns", - "columnsHint": "Right-click to choose columns", - "emptyFolder": "This folder is empty", - "searchFiles": "Search files...", - "upload": "Upload", - "selectHostToStart": "Select a host to start file management", - "sshRequiredForFileManager": "File manager requires SSH. This host does not have SSH enabled.", - "failedToConnect": "Failed to connect to SSH", - "failedToLoadDirectory": "Failed to load directory", - "noSSHConnection": "No SSH connection available", - "copy": "Copy", - "cut": "Cut", - "paste": "Paste", - "copyPath": "Copy Path", - "copyPaths": "Copy Paths", - "delete": "Delete", - "properties": "Properties", - "refresh": "Refresh", - "downloadFiles": "Download {{count}} files to Browser", - "copyFiles": "Copy {{count}} items", - "cutFiles": "Cut {{count}} items", - "deleteFiles": "Delete {{count}} items", - "filesCopiedToClipboard": "{{count}} items copied to clipboard", - "filesCutToClipboard": "{{count}} items cut to clipboard", - "pathCopiedToClipboard": "Path copied to clipboard", - "pathsCopiedToClipboard": "{{count}} paths copied to clipboard", - "failedToCopyPath": "Failed to copy path to clipboard", - "copyFolderLink": "Copy Link to Folder", - "copyCurrentFolderLink": "Copy Link to Current Folder", - "folderLinkCopied": "Folder link copied to clipboard", - "failedToCopyFolderLink": "Failed to copy folder link", - "movedItems": "Moved {{count}} items", - "failedToDeleteItem": "Failed to delete item", - "itemRenamedSuccessfully": "{{type}} renamed successfully", - "failedToRenameItem": "Failed to rename item", - "download": "Download", - "openExternalEditor": "Open externally", - "chooseExternalEditor": "Choose external editor", - "externalEditorSelected": "External editor selected", - "externalEditorDesktopOnly": "External editor is only available in the desktop app", - "externalEditorOpened": "Opened in external editor. Saving there will upload changes back to the server.", - "failedToOpenExternalEditor": "Failed to open external editor", - "failedToSelectExternalEditor": "Failed to select external editor", - "permissions": "Permissions", - "size": "Size", - "modified": "Modified", - "path": "Path", - "confirmDelete": "Are you sure you want to delete {{name}}?", - "permissionDenied": "Permission denied", - "serverError": "Server Error", - "fileSavedSuccessfully": "File saved successfully", - "failedToSaveFile": "Failed to save file", - "confirmDeleteSingleItem": "Are you sure you want to permanently delete \"{{name}}\"?", - "confirmDeleteMultipleItems": "Are you sure you want to permanently delete {{count}} items?", - "confirmDeleteMultipleItemsWithFolders": "Are you sure you want to permanently delete {{count}} items? This includes folders and their contents.", - "confirmDeleteFolder": "Are you sure you want to permanently delete the folder \"{{name}}\" and all its contents?", - "permanentDeleteWarning": "This action cannot be undone. The item(s) will be permanently deleted from the server.", - "moveToTrashWarning": "The item(s) will be moved to the Termix Trash and can be restored before the retention period expires.", - "itemsMovedToTrash": "{{count}} item(s) moved to Trash", - "trash": "Trash", - "trashDescription": "Deleted items are retained for {{days}} day(s) on this host.", - "trashLoadFailed": "Failed to load Trash", - "trashEmpty": "Trash is empty", - "trashRestore": "Restore", - "trashRestored": "Restored {{name}}", - "trashRestoreFailed": "Failed to restore item. The original path may already exist.", - "trashDeletePermanently": "Delete permanently", - "trashDeleteConfirm": "Permanently delete {{name}}? This cannot be undone.", - "trashPermanentlyDeleted": "Permanently deleted {{name}}", - "trashDeleteFailed": "Failed to permanently delete item", - "trashEmptyAction": "Empty Trash", - "trashEmptyConfirm": "Permanently delete every item in Trash? This cannot be undone.", - "trashEmptied": "Trash emptied", - "trashRetention": "Automatic cleanup after (days)", - "trashRetentionSaved": "Trash retention updated", - "trashRetentionFailed": "Failed to update Trash retention", - "trashUnavailableConfirm": "This item cannot be moved to Trash, usually because it is on another filesystem or requires elevated permissions. Delete it permanently instead?", - "recent": "Recent", - "pinned": "Pinned", - "folderShortcuts": "Folder Shortcuts", - "failedToReconnectSSH": "Failed to reconnect SSH session", - "openTerminalHere": "Open Terminal Here", - "run": "Run", - "openTerminalInFolder": "Open Terminal in This Folder", - "openTerminalInFileLocation": "Open Terminal at File Location", - "runningFile": "Running - {{file}}", - "onlyRunExecutableFiles": "Can only run executable files", - "directories": "Directories", - "removedFromRecentFiles": "Removed \"{{name}}\" from recent files", - "removeFailed": "Remove failed", - "unpinnedSuccessfully": "Unpinned \"{{name}}\" successfully", - "unpinFailed": "Unpin failed", - "removedShortcut": "Removed shortcut \"{{name}}\"", - "removeShortcutFailed": "Remove shortcut failed", - "clearedAllRecentFiles": "Cleared all recent files", - "clearFailed": "Clear failed", - "removeFromRecentFiles": "Remove from recent files", - "clearAllRecentFiles": "Clear all recent files", - "unpinFile": "Unpin file", - "removeShortcut": "Remove shortcut", - "pinFile": "Pin file", - "addToShortcuts": "Add to shortcuts", - "pasteFailed": "Paste failed", - "noUndoableActions": "No undoable actions", - "undoCopySuccess": "Undid copy operation: Deleted {{count}} copied files", - "undoCopyFailedDelete": "Undo failed: Could not delete any copied files", - "undoCopyFailedNoInfo": "Undo failed: Could not find copied file information", - "undoMoveSuccess": "Undid move operation: Moved {{count}} files back to original location", - "undoMoveFailedMove": "Undo failed: Could not move any files back", - "undoMoveFailedNoInfo": "Undo failed: Could not find moved file information", - "undoDeleteNotSupported": "Delete operation cannot be undone: Files have been permanently deleted from server", - "undoTypeNotSupported": "Unsupported undo operation type", - "undoOperationFailed": "Undo operation failed", - "unknownError": "Unknown error", - "confirm": "Confirm", - "find": "Find...", - "replace": "Replace", - "downloadInstead": "Download Instead", - "keyboardShortcuts": "Keyboard Shortcuts", - "searchAndReplace": "Search & Replace", - "editing": "Editing", - "search": "Search", - "findNext": "Find Next", - "findPrevious": "Find Previous", - "save": "Save", - "selectAll": "Select All", - "undo": "Undo", - "redo": "Redo", - "moveLineUp": "Move Line Up", - "moveLineDown": "Move Line Down", - "toggleComment": "Toggle Comment", - "autoComplete": "Auto Complete", - "imageLoadError": "Failed to load image", - "startTyping": "Start typing...", - "unknownSize": "Unknown size", - "fileIsEmpty": "File is empty", - "largeFileWarning": "Large File Warning", - "largeFileWarningDesc": "This file is {{size}} in size, which may cause performance issues when opened as text.", - "fileNotFoundAndRemoved": "File \"{{name}}\" not found and has been removed from recent/pinned files", - "failedToLoadFile": "Failed to load file: {{error}}", - "serverErrorOccurred": "Server error occurred. Please try again later.", - "autoSaveFailed": "Auto-save failed", - "fileAutoSaved": "File auto-saved", - "moveFileFailed": "Failed to move {{name}}", - "moveOperationFailed": "Move operation failed", - "canOnlyCompareFiles": "Can only compare two files", - "comparingFiles": "Comparing files: {{file1}} and {{file2}}", - "dragFailed": "Drag operation failed", - "filePinnedSuccessfully": "File \"{{name}}\" pinned successfully", - "pinFileFailed": "Failed to pin file", - "fileUnpinnedSuccessfully": "File \"{{name}}\" unpinned successfully", - "unpinFileFailed": "Failed to unpin file", - "shortcutAddedSuccessfully": "Folder shortcut \"{{name}}\" added successfully", - "addShortcutFailed": "Failed to add shortcut", - "operationCompletedSuccessfully": "{{operation}} {{count}} items successfully", - "operationCompleted": "{{operation}} {{count}} items", - "downloadFileSuccess": "File {{name}} downloaded successfully", - "downloadFileFailed": "Download failed", - "downloadingFile": "Downloading {{name}}…", + "noHostSelected": "ไม่ได้เลือกโฮสต์", + "initializingEditor": "กำลังเริ่มต้นโปรแกรมแก้ไข...", + "file": "ไฟล์", + "folder": "โฟลเดอร์", + "uploadFile": "อัปโหลดไฟล์", + "downloadFile": "ดาวน์โหลด", + "extractArchive": "แตกไฟล์เก็บถาวร", + "extractingArchive": "กำลังดึงข้อมูล {{name}}...", + "archiveExtractedSuccessfully": "{{name}} ดึงข้อมูลสำเร็จแล้ว", + "extractFailed": "การดึงข้อมูลล้มเหลว", + "compressFile": "บีบอัดไฟล์", + "compressFiles": "บีบอัดไฟล์", + "compressFilesDesc": "บีบอัดรายการ {{count}} รายการลงในไฟล์เก็บถาวร", + "archiveName": "ชื่อไฟล์เก็บถาวร", + "enterArchiveName": "ป้อนชื่อไฟล์เก็บถาวร...", + "compressionFormat": "รูปแบบการบีบอัด", + "selectedFiles": "ไฟล์ที่เลือก", + "andMoreFiles": "และ {{count}} เพิ่มเติม...", + "compress": "บีบอัด", + "compressingFiles": "บีบอัดรายการ {{count}} รายการลงใน {{name}} รายการ ...", + "filesCompressedSuccessfully": "{{name}} สร้างสำเร็จแล้ว", + "compressFailed": "การบีบอัดล้มเหลว", + "edit": "แก้ไข", + "preview": "ตัวอย่าง", + "previous": "ก่อนหน้า", + "next": "ต่อไป", + "pageXOfY": "หน้า {{current}} จาก {{total}}", + "zoomOut": "ซูมออก", + "zoomIn": "ซูมเข้า", + "newFile": "ไฟล์ใหม่", + "newFolder": "โฟลเดอร์ใหม่", + "rename": "เปลี่ยนชื่อ", + "uploading": "กำลังอัปโหลด...", + "uploadingFile": "กำลังอัปโหลด {{name}}...", + "uploadingChunk": "กำลังอัปโหลด {{name}}: {{percent}}% (ส่วน {{chunk}} ของ {{total}})", + "fileName": "ชื่อไฟล์", + "folderName": "ชื่อโฟลเดอร์", + "fileUploadedSuccessfully": "ไฟล์ \"{{name}}\" อัปโหลดสำเร็จแล้ว", + "failedToUploadFile": "ไม่สามารถอัปโหลดไฟล์ได้", + "uploadingFolderFiles": "กำลังอัปโหลดไฟล์ {{count}} ไฟล์...", + "uploadedFolderFiles": "อัปโหลดไฟล์ {{count}} ไฟล์สำเร็จแล้ว", + "uploadedFolderPartial": "อัปโหลดไฟล์ {{uploaded}} ไฟล์, {{failed}} ล้มเหลว", + "fileDownloadedSuccessfully": "ดาวน์โหลดไฟล์ \"{{name}}\" สำเร็จแล้ว", + "failedToDownloadFile": "ไม่สามารถดาวน์โหลดไฟล์ได้", + "fileCreatedSuccessfully": "สร้างไฟล์ \"{{name}}\" สำเร็จแล้ว", + "folderCreatedSuccessfully": "สร้างโฟลเดอร์ \"{{name}}\" สำเร็จแล้ว", + "failedToCreateItem": "ไม่สามารถสร้างรายการได้", + "operationFailed": "การดำเนินการ {{operation}} ล้มเหลวสำหรับ {{name}}: {{error}}", + "failedToResolveSymlink": "ไม่สามารถแก้ไขลิงก์สัญลักษณ์ได้", + "itemsDeletedSuccessfully": "รายการ {{count}} ถูกลบสำเร็จแล้ว", + "failedToDeleteItems": "ไม่สามารถลบรายการได้", + "sudoPasswordRequired": "ต้องใช้รหัสผ่านผู้ดูแลระบบ", + "enterSudoPassword": "ป้อนรหัสผ่าน sudo เพื่อดำเนินการต่อ", + "sudoPassword": "รหัสผ่าน Sudo", + "sudoOperationFailed": "การดำเนินการ Sudo ล้มเหลว", + "sudoAuthFailed": "การตรวจสอบสิทธิ์ Sudo ล้มเหลว", + "dragFilesToUpload": "ลากไฟล์มาวางที่นี่เพื่ออัปโหลด", + "dropToUploadHere": "ลากเส้นเพื่ออัปโหลดที่นี่", + "dropToDownloadHere": "คลิกที่นี่เพื่อดาวน์โหลด", + "localFiles": "ท้องถิ่น", + "showLocalFiles": "แสดงไฟล์ในเครื่อง (มุมมองแบบแบ่งหน้าจอ)", + "hideLocalFiles": "ซ่อนไฟล์ในเครื่อง", + "localHome": "โฟลเดอร์บ้าน", + "localPathPlaceholder": "เส้นทางโฟลเดอร์ในเครื่อง", + "localShowHidden": "แสดงไฟล์ที่ซ่อนอยู่", + "localHideHidden": "ซ่อนไฟล์ที่ซ่อนไว้", + "localRevealInFileManager": "เปิดเผยในตัวจัดการไฟล์ระบบ", + "localCannotOpenFolder": "ไม่สามารถเปิดโฟลเดอร์ได้", + "localItemCount": "{{count}} รายการ", + "localSelectedCount": "{{count}} เลือกแล้ว", + "back": "กลับ", + "forward": "ซึ่งไปข้างหน้า", + "up": "ขึ้น", + "kind": "ใจดี", + "localUploadingProgress": "กำลังอัปโหลด {{current}} จาก {{total}}", + "localDownloadingProgress": "กำลังดาวน์โหลด {{current}} จาก {{total}}", + "localTransferInFlight": "{{count}} ทันที", + "localPreparingDownload": "กำลังเตรียมดาวน์โหลด...", + "localTransferCancelled": "การโอนเงินถูกยกเลิก", + "localNothingToTransfer": "ไม่มีอะไรต้องโอน", + "localUploadComplete": "อัปโหลดไฟล์ {{count}} ไฟล์แล้ว", + "localUploadFailed": "การอัปโหลดล้มเหลว", + "localUploadPartial": "อัปโหลดไฟล์ {{done}} ไฟล์, {{failed}} ล้มเหลว", + "localDownloadComplete": "ดาวน์โหลดไฟล์ {{count}} ไฟล์แล้ว", + "localDownloadFailed": "การดาวน์โหลดล้มเหลว", + "localDownloadPartial": "ดาวน์โหลดไฟล์ {{done}} ไฟล์, {{failed}} ไฟล์ล้มเหลว", + "localReplaceExistingPrompt": "{{count}} รายการมีอยู่แล้วในโฟลเดอร์นี้ ต้องการแทนที่หรือไม่?", + "localReplace": "แทนที่", + "localSkipExisting": "ข้าม", + "localSkippedExisting": "ข้ามรายการที่มีอยู่ {{count}} รายการ", + "localUnsafeNamesSkipped": "ข้ามรายการ {{count}} รายการ เนื่องจากไม่สามารถใช้ชื่อรายการดังกล่าวในคอมพิวเตอร์เครื่องนี้ได้", + "localOpen": "เปิด", + "localOpenFolder": "เปิดโฟลเดอร์", + "localUploadToRemote": "อัปโหลดไปยังเซิร์ฟเวอร์", + "localUploadToRemoteMany": "อัปโหลด {{count}} รายการไปยังเซิร์ฟเวอร์", + "localMoveToTrash": "ย้ายไปที่ถังขยะ", + "localMoveToTrashMany": "ย้ายรายการ {{count}} รายการไปยังถังขยะ", + "localTrashConfirmSingle": "ย้าย \"{{name}}\" ไปที่ถังขยะ?", + "localTrashConfirmFolder": "ย้ายโฟลเดอร์ \"{{name}}\" และเนื้อหาทั้งหมดไปที่ถังขยะ?", + "localTrashConfirmMany": "ย้ายรายการ {{count}} รายการไปยังถังขยะหรือไม่?", + "localTrashed": "ย้ายรายการ {{count}} รายการไปยังถังขยะ", + "localTrashFailed": "ไม่สามารถย้ายไปถังขยะได้", + "localRenameFailed": "การเปลี่ยนชื่อล้มเหลว", + "localCreateFailed": "ไม่สามารถสร้างรายการได้", + "goToParentFolder": "ไปที่โฟลเดอร์หลัก", + "resizeSidebar": "ลากเพื่อปรับขนาดแถบด้านข้าง (ดับเบิ้ลคลิกเพื่อรีเซ็ต)", + "resizeLocalPane": "ลากเพื่อปรับขนาดบานหน้าต่างเฉพาะที่ (ดับเบิ้ลคลิกเพื่อรีเซ็ต)", + "columns": "คอลัมน์", + "columnsHint": "คลิกขวาเพื่อเลือกคอลัมน์", + "emptyFolder": "โฟลเดอร์นี้ว่างเปล่า", + "searchFiles": "ค้นหาไฟล์...", + "upload": "อัปโหลด", + "selectHostToStart": "เลือกโฮสต์เพื่อเริ่มการจัดการไฟล์", + "sshRequiredForFileManager": "โปรแกรมจัดการไฟล์ต้องการการเชื่อมต่อ SSH แต่เครื่องนี้ไม่ได้เปิดใช้งาน SSH", + "failedToConnect": "ไม่สามารถเชื่อมต่อ SSH ได้", + "failedToLoadDirectory": "ไม่สามารถโหลดไดเร็กทอรีได้", + "noSSHConnection": "ไม่มีการเชื่อมต่อ SSH ให้ใช้งาน", + "copy": "สำเนา", + "cut": "ตัด", + "paste": "แปะ", + "copyPath": "คัดลอกเส้นทาง", + "copyPaths": "คัดลอกเส้นทาง", + "delete": "ลบ", + "properties": "คุณสมบัติ", + "refresh": "รีเฟรช", + "downloadFiles": "ดาวน์โหลดไฟล์ {{count}} ไปยังเบราว์เซอร์", + "copyFiles": "คัดลอกรายการ {{count}} รายการ", + "cutFiles": "ตัด {{count}} รายการ", + "deleteFiles": "ลบรายการ {{count}} รายการ", + "filesCopiedToClipboard": "{{count}} รายการที่คัดลอกไปยังคลิปบอร์ด", + "filesCutToClipboard": "{{count}} รายการที่ถูกตัดไปยังคลิปบอร์ด", + "pathCopiedToClipboard": "คัดลอกเส้นทางไปยังคลิปบอร์ดแล้ว", + "pathsCopiedToClipboard": "{{count}} คัดลอกเส้นทางไปยังคลิปบอร์ดแล้ว", + "failedToCopyPath": "ไม่สามารถคัดลอกเส้นทางไปยังคลิปบอร์ดได้", + "copyFolderLink": "คัดลink ไปยังโฟลเดอร์", + "copyCurrentFolderLink": "คัดลink ไปยังโฟลเดอร์ปัจจุบัน", + "folderLinkCopied": "คัดลอกลิงก์โฟลเดอร์ไปยังคลิปบอร์ดแล้ว", + "failedToCopyFolderLink": "ไม่สามารถคัดลอกลิงก์โฟลเดอร์ได้", + "movedItems": "ย้ายรายการ {{count}} รายการ", + "failedToDeleteItem": "ไม่สามารถลบรายการได้", + "itemRenamedSuccessfully": "{{type}} เปลี่ยนชื่อสำเร็จแล้ว", + "failedToRenameItem": "ไม่สามารถเปลี่ยนชื่อรายการได้", + "download": "ดาวน์โหลด", + "openExternalEditor": "เปิดจากภายนอก", + "chooseExternalEditor": "เลือกตัวแก้ไขภายนอก", + "externalEditorSelected": "เลือกบรรณาธิการภายนอก", + "externalEditorDesktopOnly": "โปรแกรมแก้ไขภายนอกใช้งานได้เฉพาะในแอปพลิเคชันบนเดสก์ท็อปเท่านั้น", + "externalEditorOpened": "เปิดในโปรแกรมแก้ไขภายนอก การบันทึกในโปรแกรมแก้ไขนั้นจะอัปโหลดการเปลี่ยนแปลงกลับไปยังเซิร์ฟเวอร์", + "failedToOpenExternalEditor": "ไม่สามารถเปิดโปรแกรมแก้ไขภายนอกได้", + "failedToSelectExternalEditor": "ไม่สามารถเลือกตัวแก้ไขภายนอกได้", + "permissions": "สิทธิ์การเข้าถึง", + "size": "ขนาด", + "modified": "แก้ไขแล้ว", + "path": "เส้นทาง", + "confirmDelete": "คุณแน่ใจหรือไม่ว่าต้องการลบ {{name}}?", + "permissionDenied": "ไม่ได้รับอนุญาต", + "serverError": "ข้อผิดพลาดของเซิร์ฟเวอร์", + "fileSavedSuccessfully": "บันทึกไฟล์สำเร็จแล้ว", + "failedToSaveFile": "ไม่สามารถบันทึกไฟล์ได้", + "confirmDeleteSingleItem": "คุณแน่ใจหรือไม่ว่าต้องการลบ \"{{name}} \" อย่างถาวร?", + "confirmDeleteMultipleItems": "คุณแน่ใจหรือไม่ว่าต้องการลบรายการ {{count}} อย่างถาวร?", + "confirmDeleteMultipleItemsWithFolders": "คุณแน่ใจหรือไม่ว่าต้องการลบรายการ {{count}} รายการอย่างถาวร ซึ่งรวมถึงโฟลเดอร์และเนื้อหาภายในด้วย", + "confirmDeleteFolder": "คุณแน่ใจหรือไม่ว่าต้องการลบโฟลเดอร์ \"{{name}}\" และเนื้อหาทั้งหมดในนั้นอย่างถาวร?", + "permanentDeleteWarning": "การดำเนินการนี้ไม่สามารถยกเลิกได้ รายการดังกล่าวจะถูกลบออกจากเซิร์ฟเวอร์อย่างถาวร", + "moveToTrashWarning": "ไฟล์ดังกล่าวจะถูกย้ายไปยังถังขยะของ Termix และสามารถกู้คืนได้ก่อนที่ระยะเวลาการเก็บรักษาจะหมดลง", + "itemsMovedToTrash": "{{count}} รายการถูกย้ายไปยังถังขยะ", + "trash": "ขยะ", + "trashDescription": "รายการที่ถูกลบจะยังคงอยู่เป็นเวลา {{days}} วันบนโฮสต์นี้", + "trashLoadFailed": "ไม่สามารถโหลดถังขยะได้", + "trashEmpty": "ถังขยะว่างเปล่า", + "trashRestore": "คืนค่า", + "trashRestored": "กู้คืนแล้ว {{name}}", + "trashRestoreFailed": "ไม่สามารถกู้คืนรายการได้ เส้นทางเดิมอาจมีอยู่แล้ว", + "trashDeletePermanently": "ลบอย่างถาวร", + "trashDeleteConfirm": "ลบ {{name}}อย่างถาวรหรือไม่? การดำเนินการนี้ไม่สามารถย้อนกลับได้", + "trashPermanentlyDeleted": "ลบถาวร {{name}}", + "trashDeleteFailed": "ไม่สามารถลบรายการอย่างถาวรได้", + "trashEmptyAction": "ขยะทิ้ง", + "trashEmptyConfirm": "ต้องการลบทุกอย่างในถังขยะอย่างถาวรหรือไม่? การกระทำนี้ไม่สามารถย้อนกลับได้", + "trashEmptied": "ขยะถูกเก็บแล้ว", + "trashRetention": "ล้างข้อมูลอัตโนมัติหลังจาก (วัน)", + "trashRetentionSaved": "การปรับปรุงการเก็บรักษาขยะ", + "trashRetentionFailed": "ไม่สามารถอัปเดตการเก็บรักษาข้อมูลถังขยะได้", + "trashUnavailableConfirm": "ไม่สามารถย้ายรายการนี้ไปยังถังขยะได้ เนื่องจากไฟล์นี้อยู่ในระบบไฟล์อื่น หรือต้องใช้สิทธิ์ระดับสูง ต้องการลบอย่างถาวรแทนหรือไม่?", + "recent": "ล่าสุด", + "pinned": "ปักหมุด", + "folderShortcuts": "ทางลัดโฟลเดอร์", + "failedToReconnectSSH": "ไม่สามารถเชื่อมต่อเซสชัน SSH ใหม่ได้", + "openTerminalHere": "เปิดเทอร์มินัลที่นี่", + "run": "วิ่ง", + "openTerminalInFolder": "เปิดเทอร์มินัลในโฟลเดอร์นี้", + "openTerminalInFileLocation": "เปิดเทอร์มินัลที่ตำแหน่งไฟล์", + "runningFile": "การวิ่ง - {{file}}", + "onlyRunExecutableFiles": "สามารถเรียกใช้งานได้เฉพาะไฟล์ปฏิบัติการเท่านั้น", + "directories": "รายชื่อ", + "removedFromRecentFiles": "ลบ \"{{name}}\" ออกจากไฟล์ล่าสุดแล้ว", + "removeFailed": "ลบสิ่งที่ล้มเหลว", + "unpinnedSuccessfully": "ยกเลิกการตรึง \"{{name}}\" สำเร็จแล้ว", + "unpinFailed": "ยกเลิกการตรึงไม่สำเร็จ", + "removedShortcut": "ลบทางลัด \"{{name}} \" ออกแล้ว", + "removeShortcutFailed": "การลบทางลัดล้มเหลว", + "clearedAllRecentFiles": "ลบไฟล์ล่าสุดทั้งหมดแล้ว", + "clearFailed": "เคลียร์ล้มเหลว", + "removeFromRecentFiles": "ลบออกจากไฟล์ล่าสุด", + "clearAllRecentFiles": "ลบไฟล์ล่าสุดทั้งหมด", + "unpinFile": "ยกเลิกการตรึงไฟล์", + "removeShortcut": "ลบทางลัด", + "pinFile": "ไฟล์พิน", + "addToShortcuts": "เพิ่มไปยังทางลัด", + "pasteFailed": "การวางล้มเหลว", + "noUndoableActions": "ไม่มีการกระทำใดที่ย้อนกลับไม่ได้", + "undoCopySuccess": "ยกเลิกการคัดลอก: ลบไฟล์ที่คัดลอก {{count}} ไฟล์", + "undoCopyFailedDelete": "การยกเลิกการกระทำล้มเหลว: ไม่สามารถลบไฟล์ที่คัดลอกไว้ได้", + "undoCopyFailedNoInfo": "การยกเลิกการกระทำล้มเหลว: ไม่พบข้อมูลไฟล์ที่คัดลอกไว้", + "undoMoveSuccess": "ยกเลิกการย้าย: ย้ายไฟล์ {{count}} ไฟล์กลับไปยังตำแหน่งเดิม", + "undoMoveFailedMove": "การยกเลิกไม่สำเร็จ: ไม่สามารถย้ายไฟล์ใดๆ กลับได้", + "undoMoveFailedNoInfo": "การยกเลิกไม่สำเร็จ: ไม่พบข้อมูลไฟล์ที่ถูกย้าย", + "undoDeleteNotSupported": "ไม่สามารถยกเลิกการลบได้: ไฟล์ถูกลบออกจากเซิร์ฟเวอร์อย่างถาวรแล้ว", + "undoTypeNotSupported": "ประเภทการดำเนินการยกเลิกที่ไม่รองรับ", + "undoOperationFailed": "การยกเลิกการดำเนินการล้มเหลว", + "unknownError": "ข้อผิดพลาดที่ไม่ทราบสาเหตุ", + "confirm": "ยืนยัน", + "find": "หา...", + "replace": "แทนที่", + "downloadInstead": "ดาวน์โหลดแทน", + "keyboardShortcuts": "แป้นพิมพ์ลัด", + "searchAndReplace": "ค้นหาและแทนที่", + "editing": "การแก้ไข", + "search": "ค้นหา", + "findNext": "ค้นหาถัดไป", + "findPrevious": "ค้นหาก่อนหน้า", + "save": "บันทึก", + "selectAll": "เลือกทั้งหมด", + "undo": "เลิกทำ", + "redo": "ทำซ้ำ", + "moveLineUp": "เคลื่อนแถว", + "moveLineDown": "เลื่อนเส้นลง", + "toggleComment": "สลับการแสดงความคิดเห็น", + "autoComplete": "การเติมข้อความอัตโนมัติ", + "imageLoadError": "ไม่สามารถโหลดรูปภาพได้", + "startTyping": "เริ่มพิมพ์...", + "unknownSize": "ขนาดไม่ทราบแน่ชัด", + "fileIsEmpty": "ไฟล์ว่างเปล่า", + "largeFileWarning": "คำเตือนเกี่ยวกับไฟล์ขนาดใหญ่", + "largeFileWarningDesc": "ไฟล์นี้มีขนาด {{size}} ซึ่งอาจทำให้เกิดปัญหาด้านประสิทธิภาพเมื่อเปิดเป็นข้อความ", + "fileNotFoundAndRemoved": "ไม่พบไฟล์ \"{{name}}\" และไฟล์ดังกล่าวถูกลบออกจากไฟล์ล่าสุด/ไฟล์ปักหมุดแล้ว", + "failedToLoadFile": "ไม่สามารถโหลดไฟล์ได้: {{error}}", + "serverErrorOccurred": "เกิดข้อผิดพลาดของเซิร์ฟเวอร์ โปรดลองใหม่อีกครั้งในภายหลัง", + "autoSaveFailed": "การบันทึกอัตโนมัติล้มเหลว", + "fileAutoSaved": "ไฟล์ถูกบันทึกอัตโนมัติ", + "moveFileFailed": "การย้ายล้มเหลว {{name}}", + "moveOperationFailed": "การดำเนินการย้ายล้มเหลว", + "canOnlyCompareFiles": "สามารถเปรียบเทียบไฟล์ได้เพียงสองไฟล์เท่านั้น", + "comparingFiles": "เปรียบเทียบไฟล์: {{file1}} และ {{file2}}", + "dragFailed": "การดำเนินการลากล้มเหลว", + "filePinnedSuccessfully": "ไฟล์ \"{{name}}\" ถูกปักหมุดสำเร็จแล้ว", + "pinFileFailed": "ไม่สามารถตรึงไฟล์ได้", + "fileUnpinnedSuccessfully": "ไฟล์ \"{{name}}\" ถูกยกเลิกการตรึงสำเร็จแล้ว", + "unpinFileFailed": "ไม่สามารถยกเลิกการตรึงไฟล์ได้", + "shortcutAddedSuccessfully": "เพิ่มทางลัดโฟลเดอร์ \"{{name}}\" สำเร็จแล้ว", + "addShortcutFailed": "ไม่สามารถเพิ่มทางลัดได้", + "operationCompletedSuccessfully": "{{operation}} {{count}} รายการสำเร็จ", + "operationCompleted": "{{operation}} {{count}} รายการ", + "downloadFileSuccess": "ดาวน์โหลดไฟล์ {{name}} สำเร็จแล้ว", + "downloadFileFailed": "การดาวน์โหลดล้มเหลว", + "downloadingFile": "กำลังดาวน์โหลด {{name}}…", "downloadProgressBytes": "{{transferred}} / {{total}}", - "moveTo": "Move to {{name}}", - "diffCompareWith": "Diff compare with {{name}}", - "dragOutsideToDownload": "Drag outside window to download ({{count}} files)", - "newFolderDefault": "NewFolder", - "newFileDefault": "NewFile.txt", - "successfullyMovedItems": "Successfully moved {{count}} items to {{target}}", - "move": "Move", - "searchInFile": "Search in file (Ctrl+F)", - "showKeyboardShortcuts": "Show keyboard shortcuts", - "decreaseFontSize": "Decrease font size", - "increaseFontSize": "Increase font size", - "startWritingMarkdown": "Start writing your markdown content...", - "loadingFileComparison": "Loading file comparison...", - "reload": "Reload", - "compare": "Compare", - "sideBySide": "Side by Side", - "inline": "Inline", - "fileComparison": "File Comparison: {{file1}} vs {{file2}}", - "fileTooLarge": "File too large: {{error}}", - "sshConnectionFailed": "SSH connection failed. Please check your connection to {{name}} ({{ip}}:{{port}})", - "loadFileFailed": "Failed to load file: {{error}}", - "connecting": "Connecting...", - "connectedSuccessfully": "Connected successfully", - "totpVerificationFailed": "TOTP verification failed", - "browserSignInFailed": "Sign-in failed. Please try again.", - "authenticationFailed": "Authentication failed", - "incorrectPassphrase": "Incorrect passphrase. Please try again.", - "verificationCodePrompt": "Verification code:", - "changePermissions": "Change Permissions", - "currentPermissions": "Current Permissions", - "owner": "Owner", - "group": "Group", - "others": "Others", - "read": "Read", - "write": "Write", - "execute": "Execute", - "permissionsChangedSuccessfully": "Permissions changed successfully", - "failedToChangePermissions": "Failed to change permissions", - "name": "Name", - "sortByName": "Name", - "sortByDate": "Date Modified", - "sortBySize": "Size", - "ascending": "Ascending", - "descending": "Descending", - "root": "Root", - "new": "New", - "sortBy": "Sort By", - "items": "Items", - "selected": "Selected", - "editor": "Editor", - "octal": "Octal", - "storage": "Storage", - "disk": "Disk", - "used": "Used", - "of": "of", - "toggleSidebar": "Toggle Sidebar", - "compactLayout": "Use compact layout", - "comfortableLayout": "Use comfortable layout", - "cannotLoadPdf": "Cannot load PDF", - "pdfLoadError": "There was an error loading this PDF file.", - "loadingPdf": "Loading PDF...", - "loadingPage": "Loading page...", - "cancel": "Cancel", - "copiedItems_one": "Copied {{count}} item", - "copiedItems_other": "Copied {{count}} items", - "deleteCopiedFileFailed": "Could not delete the copy of {{name}}: {{error}}", - "dragMovedItems_one": "Moved {{count}} item to {{target}}", - "dragMovedItems_other": "Moved {{count}} items to {{target}}", - "moveBackFileFailed": "Could not move {{name}} back: {{error}}", - "terminal": "Terminal: {{host}} ({{path}})", - "dragToDesktop": "Dragging {{name}} to the desktop", - "dragFilesToDesktop": "Dragging {{count}} files to the desktop", - "folderDragUnsupported": "Dragging folders to the desktop is not supported yet", - "saveToDesktopFailed": "Save failed: {{error}}", - "dragFailedDetail": "Drag failed: {{error}}", - "videoUnsupported": "Your browser cannot play this video format.", - "downloadToPlay": "Download to play it elsewhere", - "cannotPreviewType": "Cannot preview this file type", - "cannotPreviewTypeHint": "This file type has no preview. Download it to open it in another app." + "moveTo": "ย้ายไปที่ {{name}}", + "diffCompareWith": "เปรียบเทียบความแตกต่างกับ {{name}}", + "dragOutsideToDownload": "ลากออกนอกหน้าต่างเพื่อดาวน์โหลดไฟล์ ({{count}} ไฟล์)", + "newFolderDefault": "โฟลเดอร์ใหม่", + "newFileDefault": "ไฟล์ใหม่.txt", + "successfullyMovedItems": "ย้ายรายการ {{count}} รายการไปยัง {{target}} สำเร็จแล้ว", + "move": "เคลื่อนไหว", + "searchInFile": "ค้นหาในไฟล์ (Ctrl+F)", + "showKeyboardShortcuts": "แสดงทางลัดแป้นพิมพ์", + "decreaseFontSize": "ลดขนาดตัวอักษร", + "increaseFontSize": "เพิ่มขนาดตัวอักษร", + "startWritingMarkdown": "เริ่มเขียนเนื้อหา Markdown ของคุณได้เลย...", + "loadingFileComparison": "กำลังโหลดการเปรียบเทียบไฟล์...", + "reload": "โหลดซ้ำ", + "compare": "เปรียบเทียบ", + "sideBySide": "เคียงข้างกัน", + "inline": "อินไลน์", + "fileComparison": "การเปรียบเทียบไฟล์: {{file1}} กับ {{file2}}", + "fileTooLarge": "File is too large (> 10MB) and cannot be opened as text for security reasons.", + "sshConnectionFailed": "การเชื่อมต่อ SSH ล้มเหลว โปรดตรวจสอบการเชื่อมต่อของคุณกับ {{name}} ({{ip}}:{{port}})", + "loadFileFailed": "ไม่สามารถโหลดไฟล์ได้: {{error}}", + "connecting": "กำลังเชื่อมต่อ...", + "connectedSuccessfully": "เชื่อมต่อสำเร็จแล้ว", + "totpVerificationFailed": "การตรวจสอบ TOTP ล้มเหลว", + "browserSignInFailed": "การเข้าสู่ระบบล้มเหลว โปรดลองใหม่อีกครั้ง", + "authenticationFailed": "การตรวจสอบสิทธิ์ล้มเหลว", + "incorrectPassphrase": "รหัสผ่านไม่ถูกต้อง โปรดลองอีกครั้ง", + "verificationCodePrompt": "รหัสยืนยัน:", + "changePermissions": "เปลี่ยนสิทธิ์การเข้าถึง", + "currentPermissions": "สิทธิ์การเข้าถึงปัจจุบัน", + "owner": "เจ้าของ", + "group": "กลุ่ม", + "others": "คนอื่น", + "read": "อ่าน", + "write": "เขียน", + "execute": "ดำเนินการ", + "permissionsChangedSuccessfully": "สิทธิ์การเข้าถึงเปลี่ยนแปลงสำเร็จแล้ว", + "failedToChangePermissions": "ไม่สามารถเปลี่ยนสิทธิ์ได้", + "name": "ชื่อ", + "sortByName": "ชื่อ", + "sortByDate": "วันที่แก้ไข", + "sortBySize": "ขนาด", + "ascending": "ขึ้นไป", + "descending": "ลง", + "root": "ราก", + "new": "ใหม่", + "sortBy": "เรียงลำดับตาม", + "items": "รายการ", + "selected": "เลือกแล้ว", + "editor": "บรรณาธิการ", + "octal": "แปด", + "storage": "พื้นที่จัดเก็บ", + "disk": "ดิสก์", + "used": "ใช้แล้ว", + "of": "ของ", + "toggleSidebar": "สลับแถบด้านข้าง", + "compactLayout": "ใช้รูปแบบการจัดวางที่กะทัดรัด", + "comfortableLayout": "ใช้รูปแบบการจัดวางที่สะดวกสบาย", + "cannotLoadPdf": "ไม่สามารถโหลดไฟล์ PDF ได้", + "pdfLoadError": "เกิดข้อผิดพลาดในการโหลดไฟล์ PDF นี้", + "loadingPdf": "Loading PDF viewer...", + "loadingPage": "กำลังโหลดหน้าเว็บ...", + "cancel": "ยกเลิก", + "copiedItems_one": "คัดลอกรายการ {{count}} แล้ว", + "copiedItems_other": "คัดลอกรายการ {{count}} รายการ", + "deleteCopiedFileFailed": "ไม่สามารถลบสำเนาของ {{name}}ได้ : {{error}}", + "dragMovedItems_one": "ย้ายรายการ {{count}} ไปยัง {{target}}", + "dragMovedItems_other": "ย้ายรายการ {{count}} รายการไปยัง {{target}}", + "moveBackFileFailed": "ไม่สามารถย้าย {{name}} กลับไปได้: {{error}}", + "terminal": "เทอร์มินัล: {{host}} ({{path}})", + "dragToDesktop": "ลาก {{name}} ไปยังเดสก์ท็อป", + "dragFilesToDesktop": "ลากไฟล์ {{count}} ไปยังเดสก์ท็อป", + "folderDragUnsupported": "ขณะนี้ยังไม่รองรับการลากโฟลเดอร์ไปยังเดสก์ท็อป", + "saveToDesktopFailed": "การบันทึกล้มเหลว: {{error}}", + "dragFailedDetail": "การลากไม่สำเร็จ: {{error}}", + "videoUnsupported": "เบราว์เซอร์ของคุณไม่สามารถเล่นวิดีโอรูปแบบนี้ได้", + "downloadToPlay": "ดาวน์โหลดเพื่อเล่นที่อื่น", + "cannotPreviewType": "ไม่สามารถแสดงตัวอย่างไฟล์ประเภทนี้ได้", + "cannotPreviewTypeHint": "ไฟล์ประเภทนี้ไม่มีตัวอย่างให้ดู ดาวน์โหลดเพื่อเปิดในแอปพลิเคชันอื่น", + "loadingFile": "Loading file...", + "loadingImage": "Loading image...", + "loadingEditor": "Loading editor...", + "loadingPreview": "Loading preview...", + "loadingAudio": "Loading audio player...", + "emptyPreview": "Nothing to preview yet...", + "revert": "Revert", + "openAsText": "Open as Text", + "confirmOpenAsText": "Do you want to continue opening this file as text? This may slow down your browser." }, "sftpTransfer": { - "title": "SFTP", - "description": "Transfer files between two SSH hosts.", - "sourceServer": "Source Server", - "destinationServer": "Destination Server", - "selectHost": "Select host", - "noHostSelected": "No host selected", - "move": "Move", - "copy": "Copy", - "upload": "Upload", - "itemsSelected": "{{count}} item selected", - "itemsSelected_other": "{{count}} items selected", - "ready": "Ready", - "loadingHosts": "Loading hosts...", - "name": "Name", - "modified": "Modified", - "size": "Size", - "noFiles": "No files", - "open": "Open", - "up": "Up", - "refresh": "Refresh", - "copyToTarget": "Copy to Target Directory", - "rename": "Rename", - "delete": "Delete", - "editPermissions": "Edit Permissions", - "createNewFolder": "Create New Folder", - "deleteSelectedItems": "Delete Selected Items", - "deleteConfirm": "Delete {{count}} selected item?", - "deleteConfirm_other": "Delete {{count}} selected items?", - "cancel": "Cancel", - "save": "Save", - "folderCreated": "Folder created", - "itemRenamed": "Item renamed", - "actionFailed": "Action failed", - "itemsDeleted": "{{count}} item deleted", - "itemsDeleted_other": "{{count}} items deleted", - "deleteFailed": "Delete failed", - "permissionsUpdated": "Permissions updated", - "noRemoteSessionConnected": "No remote session connected", - "failedToListFiles": "Failed to list files", - "failedToRefresh": "Failed to refresh", - "destinationInsideSource": "Destination cannot be inside the selected source path.", - "sameHostNoOp": "Source and destination are the same folder." + "title": "เอสเอฟทีพี", + "description": "โอนไฟล์ระหว่างโฮสต์ SSH สองเครื่อง", + "sourceServer": "เซิร์ฟเวอร์ต้นทาง", + "destinationServer": "เซิร์ฟเวอร์ปลายทาง", + "selectHost": "เลือกโฮสต์", + "noHostSelected": "ไม่ได้เลือกโฮสต์", + "move": "เคลื่อนไหว", + "copy": "สำเนา", + "upload": "อัปโหลด", + "itemsSelected": "{{count}} รายการที่เลือก", + "itemsSelected_other": "รายการที่เลือก {{count}} รายการ", + "ready": "พร้อม", + "loadingHosts": "กำลังโหลดโฮสต์...", + "name": "ชื่อ", + "modified": "แก้ไขแล้ว", + "size": "ขนาด", + "noFiles": "ไม่มีไฟล์", + "open": "เปิด", + "up": "ขึ้น", + "refresh": "รีเฟรช", + "copyToTarget": "คัดลอกไปยังไดเร็กทอรีเป้าหมาย", + "rename": "เปลี่ยนชื่อ", + "delete": "ลบ", + "editPermissions": "แก้ไขสิทธิ์การเข้าถึง", + "createNewFolder": "สร้างโฟลเดอร์ใหม่", + "deleteSelectedItems": "ลบรายการที่เลือก", + "deleteConfirm": "ลบรายการที่เลือก {{count}} รายการหรือไม่?", + "deleteConfirm_other": "ลบรายการที่เลือก {{count}} รายการหรือไม่?", + "cancel": "ยกเลิก", + "save": "บันทึก", + "folderCreated": "สร้างโฟลเดอร์แล้ว", + "itemRenamed": "เปลี่ยนชื่อรายการ", + "actionFailed": "การดำเนินการล้มเหลว", + "itemsDeleted": "{{count}} รายการถูกลบ", + "itemsDeleted_other": "รายการที่ถูกลบ {{count}} รายการ", + "deleteFailed": "การลบล้มเหลว", + "permissionsUpdated": "สิทธิ์การเข้าถึงได้รับการอัปเดตแล้ว", + "noRemoteSessionConnected": "ไม่มีการเชื่อมต่อเซสชันระยะไกล", + "failedToListFiles": "ไม่สามารถแสดงรายการไฟล์ได้", + "failedToRefresh": "ไม่สามารถรีเฟรชได้", + "destinationInsideSource": "ปลายทางต้องไม่อยู่ภายในเส้นทางต้นทางที่เลือกไว้", + "sameHostNoOp": "ต้นทางและปลายทางเป็นโฟลเดอร์เดียวกัน" }, "hosts": { - "fileManager": "File Manager", - "fileManagerUrlCopied": "File Manager URL copied", - "copyFileManagerUrlAction": "Copy File Manager URL", - "docsLink": "View docs", - "hostNotFound": "Host not found", - "loadingHost": "Loading host..." + "fileManager": "ตัวจัดการไฟล์", + "fileManagerUrlCopied": "คัดลอก URL ของตัวจัดการไฟล์แล้ว", + "copyFileManagerUrlAction": "คัดลอก URL ของตัวจัดการไฟล์", + "docsLink": "ดูเอกสาร", + "hostNotFound": "ไม่พบโฮสต์", + "loadingHost": "กำลังโหลดโฮสต์..." }, "onboarding": { - "feature_files": "File manager", - "feature_files_desc": "Browse, upload, download and edit files over SFTP without leaving the app." + "feature_files": "ตัวจัดการไฟล์", + "feature_files_desc": "เรียกดู อัปโหลด ดาวน์โหลด และแก้ไขไฟล์ผ่าน SFTP โดยไม่ต้องออกจากแอปพลิเคชัน" }, "terminal": { - "runTitle": "Running {{command}} - {{host}}", - "terminalTitle": "Terminal - {{host}}", - "terminalWithPath": "Terminal - {{host}}:{{path}}" + "runTitle": "กำลังวิ่ง {{command}} - {{host}}", + "terminalTitle": "เทอร์มินัล - {{host}}", + "terminalWithPath": "เทอร์มินัล - {{host}}:{{path}}" }, "transfer": { - "browseFolders": "Browse destination folders", - "browsePathError": "Could not open this path on the destination host.", - "browsePathWillBeCreated": "This folder does not exist yet. It will be created when the transfer starts.", - "cancel": "Cancel", - "cleanupDestFiles": "Clean up destination", - "cleanupDestFilesError": "Cleanup failed", - "cleanupDestFilesNothing": "Nothing to clean up on the destination", - "cleanupDestFilesPartial": "Some partial files could not be removed", - "cleanupDestFilesSuccess": "Removed partial files from the destination", - "confirmCopy": "Copy", - "confirmMove": "Move", - "copyFolderToHost": "Copy folder to host…", - "copyItemsToHost": "Copy {{count}} items to host…", - "copyToHost": "Copy to host…", - "destinationPath": "Destination path", - "destMustBeDirectory": "Destination must be a directory for multi-item transfers", - "goUp": "Go up", - "hostAuthRequired": "Authentication required. Open File Manager on this host first", - "hostConnecting": "Connecting…", - "hostConnectionFailed": "Connection failed", - "hostDisconnected": "Not connected", - "hostReady": "Ready", - "itemsSummary": "{{count}} items", - "jumpHostLimitation": "Both hosts must be reachable from the Termix server. Direct host-to-host routing is not supported.", - "methodAuto": "Auto", - "methodAutoHint": "Picks tar or per-file SFTP based on file count, size, and compressibility. Single files always use streaming SFTP.", - "methodItemSftp": "Per-file SFTP", - "methodItemSftpHint": "Transfer each file individually over SFTP. Works on all hosts including Windows.", - "methodItemSftpLimitation": "Each file uses the same SFTP stream as a single-file copy, one after another. Progress is combined across all files, so the bar moves slowly during large files.", - "methodLabel": "Transfer method", - "methodPreviewError": "Could not preview transfer method. The server will still pick a method when you start.", - "methodPreviewLoading": "Calculating transfer method…", - "methodPreviewScanSummary": "{{fileCount}} files, {{totalSize}} total (scanned on source host).", - "methodPreviewWillUseItemSftp": "Will use: Per-file SFTP", - "methodPreviewWillUseTar": "Will use: Tar archive", + "browseFolders": "เรียกดูโฟลเดอร์ปลายทาง", + "browsePathError": "ไม่สามารถเปิดเส้นทางนี้บนโฮสต์ปลายทางได้", + "browsePathWillBeCreated": "โฟลเดอร์นี้ยังไม่มีอยู่ จะถูกสร้างขึ้นเมื่อการถ่ายโอนเริ่มต้นขึ้น", + "cancel": "ยกเลิก", + "cleanupDestFiles": "สถานที่ทำความสะอาด", + "cleanupDestFilesError": "การทำความสะอาดล้มเหลว", + "cleanupDestFilesNothing": "ไม่มีอะไรต้องทำความสะอาดที่ปลายทาง", + "cleanupDestFilesPartial": "ไม่สามารถลบไฟล์บางส่วนได้", + "cleanupDestFilesSuccess": "ลบไฟล์บางส่วนออกจากปลายทางแล้ว", + "confirmCopy": "สำเนา", + "confirmMove": "เคลื่อนไหว", + "copyFolderToHost": "คัดลอกโฟลเดอร์ไปยังโฮสต์…", + "copyItemsToHost": "คัดลอกรายการ {{count}} รายการไปยังโฮสต์…", + "copyToHost": "คัดลอกไปยังโฮสต์…", + "destinationPath": "เส้นทางปลายทาง", + "destMustBeDirectory": "สำหรับการโอนย้ายหลายรายการ ปลายทางต้องเป็นไดเร็กทอรี", + "goUp": "ขึ้นไป", + "hostAuthRequired": "ต้องมีการยืนยันตัวตน โปรดเปิดตัวจัดการไฟล์บนโฮสต์นี้ก่อน", + "hostConnecting": "กำลังเชื่อมต่อ…", + "hostConnectionFailed": "การเชื่อมต่อล้มเหลว", + "hostDisconnected": "ไม่ได้เชื่อมต่อ", + "hostReady": "พร้อม", + "itemsSummary": "{{count}} รายการ", + "jumpHostLimitation": "โฮสต์ทั้งสองต้องสามารถเข้าถึงได้จากเซิร์ฟเวอร์ Termix ไม่รองรับการกำหนดเส้นทางโดยตรงระหว่างโฮสต์", + "methodAuto": "อัตโนมัติ", + "methodAutoHint": "เลือกใช้ไฟล์บีบอัดแบบ tar หรือ SFTP แบบต่อไฟล์ โดยพิจารณาจากจำนวนไฟล์ ขนาดไฟล์ และความสามารถในการบีบอัด ไฟล์เดี่ยวจะใช้ SFTP แบบสตรีมมิ่งเสมอ", + "methodItemSftp": "SFTP ต่อไฟล์", + "methodItemSftpHint": "โอนไฟล์แต่ละไฟล์ทีละไฟล์ผ่าน SFTP ใช้งานได้กับทุกระบบปฏิบัติการ รวมถึง Windows", + "methodItemSftpLimitation": "แต่ละไฟล์จะใช้สตรีม SFTP เดียวกันในการคัดลอกไฟล์ทีละไฟล์ ความคืบหน้าจะถูกรวมเข้าด้วยกัน ทำให้แถบแสดงความคืบหน้าเคลื่อนที่ช้าลงเมื่อคัดลอกไฟล์ขนาดใหญ่", + "methodLabel": "วิธีการถ่ายโอน", + "methodPreviewError": "ไม่สามารถดูตัวอย่างวิธีการถ่ายโอนได้ เซิร์ฟเวอร์จะเลือกวิธีการเมื่อคุณเริ่มต้นใช้งาน", + "methodPreviewLoading": "กำลังคำนวณวิธีการโอน…", + "methodPreviewScanSummary": "ไฟล์ {{fileCount}} ไฟล์, รวม {{totalSize}} ไฟล์ (สแกนจากโฮสต์ต้นทาง)", + "methodPreviewWillUseItemSftp": "จะใช้: SFTP แบบแยกไฟล์", + "methodPreviewWillUseTar": "จะใช้: ไฟล์เก็บถาวร Tar", "methodReason": { - "user_item_sftp": "You chose per-file SFTP.", - "user_tar": "You chose tar archive.", - "tar_unavailable": "Tar is not available on one or both hosts, so per-file SFTP will be used instead.", - "windows_host": "A Windows host is involved, so tar is not used.", - "auto_multi_large": "Auto: multiple files including a large file ({{largestSize}}) with compressible data. Tar bundles them into one transfer.", - "auto_single_large_in_archive": "Auto: one large file ({{largestSize}}) in this set, so per-file SFTP.", - "auto_many_incompressible": "Auto: mostly incompressible data, so per-file SFTP.", - "auto_many_files": "Auto: many files ({{fileCount}}), tar cuts the per-file overhead.", - "auto_default": "Auto: per-file SFTP for this set." + "user_item_sftp": "คุณเลือกใช้ SFTP แบบต่อไฟล์", + "user_tar": "คุณเลือกไฟล์เก็บถาวรแบบ tar", + "tar_unavailable": "Tar ไม่สามารถใช้งานได้บนโฮสต์หนึ่งหรือทั้งสองโฮสต์ ดังนั้นจะใช้ SFTP แบบแยกไฟล์แทน", + "windows_host": "เนื่องจากใช้ระบบปฏิบัติการ Windows จึงไม่ได้ใช้โปรแกรม tar", + "auto_multi_large": "อัตโนมัติ: ไฟล์หลายไฟล์ รวมถึงไฟล์ขนาดใหญ่ ({{largestSize}}) ที่มีข้อมูลที่สามารถบีบอัดได้ Tar จะรวมไฟล์เหล่านั้นเข้าไว้ในการถ่ายโอนครั้งเดียว", + "auto_single_large_in_archive": "อัตโนมัติ: ไฟล์ขนาดใหญ่หนึ่งไฟล์ ({{largestSize}}) ในชุดนี้ ดังนั้นจึงใช้ SFTP ต่อไฟล์", + "auto_many_incompressible": "อัตโนมัติ: ข้อมูลส่วนใหญ่ไม่สามารถบีบอัดได้ ดังนั้นจึงใช้ SFTP แบบแยกไฟล์", + "auto_many_files": "อัตโนมัติ: ไฟล์จำนวนมาก ({{fileCount}}) tar ช่วยลดค่าใช้จ่ายต่อไฟล์", + "auto_default": "อัตโนมัติ: ตั้งค่า SFTP สำหรับแต่ละไฟล์ในชุดนี้" }, - "methodTar": "Tar archive", - "methodTarHint": "Compress on source, transfer one archive, extract on destination. Requires tar on both Unix hosts.", - "metricsCompress": "Compress on source: {{duration}}", - "metricsExtract": "Extract on destination: {{duration}}", - "metricsPrepare": "Prepare destination: {{duration}}", - "metricsRouteBenchmark": "Route probe: direct {{direct}}, relay {{relay}}", - "metricsSourceDelete": "Remove from source: {{duration}}", - "metricsTotal": "Total: {{duration}}", - "metricsTransfer": "End-to-end: {{throughput}} ({{duration}})", - "metricsVerify": "SHA-256 verified: {{duration}}", - "moveFolderToHost": "Move folder to host…", - "moveItemsToHost": "Move {{count}} items to host…", - "moveToHost": "Move to host…", - "noHostsConnected": "No other file-manager hosts available.", - "noHostsConnectedHint": "Add another SSH host with File Manager enabled in Host Manager.", - "parallelSegmentsHint": "Large files are split into 256 MB chunks. Multiple lanes use separate connections (like starting several transfers) for higher total throughput.", - "parallelSegmentsLabel": "Parallel transfer lanes", - "parallelSegmentsOption": "{{count}} lanes", - "progressBenchmarking": "Selecting the fastest transfer route…", + "methodTar": "คลังข้อมูลทาร์", + "methodTarHint": "บีบอัดไฟล์ที่ต้นทาง ถ่ายโอนไฟล์เก็บถาวรหนึ่งไฟล์ และแตกไฟล์ที่ปลายทาง ต้องใช้ tar บนเครื่อง Unix ทั้งสองเครื่อง", + "metricsCompress": "บีบอัดจากแหล่งที่มา: {{duration}}", + "metricsExtract": "แตกไฟล์ที่ปลายทาง: {{duration}}", + "metricsPrepare": "เตรียมปลายทาง: {{duration}}", + "metricsRouteBenchmark": "การตรวจสอบเส้นทาง: โดยตรง {{direct}}, รีเลย์ {{relay}}", + "metricsSourceDelete": "ลบออกจากแหล่งที่มา: {{duration}}", + "metricsTotal": "รวม: {{duration}}", + "metricsTransfer": "จากต้นทางถึงปลายทาง: {{throughput}} ({{duration}})", + "metricsVerify": "ตรวจสอบด้วย SHA-256 แล้ว: {{duration}}", + "moveFolderToHost": "ย้ายโฟลเดอร์ไปยังโฮสต์…", + "moveItemsToHost": "ย้ายรายการ {{count}} รายการไปยังโฮสต์…", + "moveToHost": "ย้ายไปยังโฮสต์…", + "noHostsConnected": "ไม่มีโฮสต์ตัวจัดการไฟล์อื่นให้บริการ", + "noHostsConnectedHint": "เพิ่มโฮสต์ SSH อีกตัวโดยเปิดใช้งานตัวจัดการไฟล์ในตัวจัดการโฮสต์", + "parallelSegmentsHint": "ไฟล์ขนาดใหญ่จะถูกแบ่งออกเป็นส่วนย่อยขนาด 256 MB การใช้หลายเลนจะใช้การเชื่อมต่อแยกกัน (เช่น การเริ่มการถ่ายโอนหลายรายการพร้อมกัน) เพื่อให้ได้ปริมาณงานโดยรวมที่สูงขึ้น", + "parallelSegmentsLabel": "ช่องทางเปลี่ยนถ่ายแบบขนาน", + "parallelSegmentsOption": "{{count}} เลน", + "progressBenchmarking": "เลือกเส้นทางการโอนย้ายที่เร็วที่สุด…", "progressBytes": "{{transferred}} / {{total}}", - "progressCancel": "Cancel", - "progressCancelling": "Cancelling…", - "progressCompressing": "Compressing on source host…", - "progressExtracting": "Extracting on destination…", - "progressItems": "{{current}} / {{total}} files", - "progressReconnecting": "Reconnecting…", - "progressStalled": "Stalled", - "progressTotalSpeed": "{{speed}} total ({{lanes}} lanes)", - "progressTransferring": "Transferring data…", - "progressTransferringItems": "Transferring files ({{current}} of {{total}})…", - "progressVerifying": "Verifying file integrity…", - "recentDestinations": "Recent destinations", - "resumedHint": "Reconnected to an active transfer started in another window.", - "retryTransfer": "Retry", - "retryTransferError": "Retry failed", - "selectDestinationHost": "Select destination host", - "transferCancelled": "Transfer cancelled", - "transferCancelledCopyHint": "Partial files may remain on the destination.", - "transferCancelledMoveHint": "Partial files may remain on the destination. Source files were not removed.", - "transferError": "Transfer failed", - "transferFailedRetryHint": "Partial data was kept on the destination. Retry will resume when the connection is back.", - "transferPartialHint": "Could not transfer: {{paths}}", - "transferSuccess": "Transfer complete", - "metricsHopSourceRead": "Source → server: {{throughput}}", - "metricsHopDestSftpWrite": "Server → dest (SFTP): {{throughput}}", - "metricsHopDestLocalWrite": "Server → dest (local): {{throughput}}" + "progressCancel": "ยกเลิก", + "progressCancelling": "การยกเลิก…", + "progressCompressing": "กำลังบีบอัดบนโฮสต์ต้นทาง…", + "progressExtracting": "กำลังแตกไฟล์ที่ปลายทาง…", + "progressItems": "ไฟล์ {{current}} / {{total}}", + "progressReconnecting": "กำลังเชื่อมต่อใหม่…", + "progressStalled": "หยุดชะงัก", + "progressTotalSpeed": "{{speed}} รวม ({{lanes}} เลน)", + "progressTransferring": "กำลังถ่ายโอนข้อมูล…", + "progressTransferringItems": "กำลังถ่ายโอนไฟล์ ({{current}} จาก {{total}})…", + "progressVerifying": "กำลังตรวจสอบความสมบูรณ์ของไฟล์…", + "recentDestinations": "จุดหมายปลายทางล่าสุด", + "resumedHint": "เชื่อมต่อใหม่กับการถ่ายโอนที่เริ่มทำงานในหน้าต่างอื่นแล้ว", + "retryTransfer": "ลองใหม่อีกครั้ง", + "retryTransferError": "การลองใหม่ล้มเหลว", + "selectDestinationHost": "เลือกโฮสต์ปลายทาง", + "transferCancelled": "การโอนเงินถูกยกเลิก", + "transferCancelledCopyHint": "ไฟล์บางส่วนอาจยังคงอยู่ในปลายทาง", + "transferCancelledMoveHint": "ไฟล์บางส่วนอาจยังคงอยู่ในปลายทาง ไฟล์ต้นฉบับไม่ได้ถูกลบออก", + "transferError": "การโอนล้มเหลว", + "transferFailedRetryHint": "ข้อมูลบางส่วนถูกเก็บไว้ในปลายทาง การลองใหม่จะดำเนินการต่อเมื่อการเชื่อมต่อกลับมาใช้งานได้", + "transferPartialHint": "ไม่สามารถโอนเงินได้: {{paths}}", + "transferSuccess": "การโอนเสร็จสมบูรณ์", + "metricsHopSourceRead": "แหล่งที่มา → เซิร์ฟเวอร์: {{throughput}}", + "metricsHopDestSftpWrite": "เซิร์ฟเวอร์ → ปลายทาง (SFTP): {{throughput}}", + "metricsHopDestLocalWrite": "เซิร์ฟเวอร์ → ปลายทาง (ภายในเครื่อง): {{throughput}}" + }, + "plugin": { + "name": "File Manager" } } diff --git a/plugins/file-manager/locales/translated/tr_TR.json b/plugins/file-manager/locales/translated/tr_TR.json index cf6e4829c..242c53113 100644 --- a/plugins/file-manager/locales/translated/tr_TR.json +++ b/plugins/file-manager/locales/translated/tr_TR.json @@ -6,15 +6,15 @@ }, "permissions": { "use": { - "title": "Use file manager", - "description": "Browse, edit and transfer files over SFTP." + "title": "Dosya yöneticisini kullanın.", + "description": "SFTP üzerinden dosyalara göz atın, düzenleyin ve aktarın." } }, "settings": { "host": { "enable": { "label": "Dosya Yöneticisini Etkinleştir", - "description": "Browse and edit files on this host over SFTP." + "description": "Bu sunucudaki dosyaları SFTP üzerinden tarayın ve düzenleyin." }, "defaultPath": { "label": "Varsayılan Yol" @@ -25,12 +25,12 @@ }, "user": { "transferConcurrency": { - "label": "Simultaneous File Transfers", - "description": "How many files the side by side local/remote manager uploads or downloads at the same time. Lower this if your server limits SFTP channels." + "label": "Eşzamanlı Dosya Aktarımları", + "description": "Yan yana yerel/uzaktan yönetici tarafından aynı anda yüklenen veya indirilen dosya sayısı. Sunucunuz SFTP kanallarını sınırlandırıyorsa bu değeri düşürün." }, "confirmBeforeTrash": { - "label": "Confirm before moving files to trash", - "description": "Ask before moving remote files to trash. Permanent deletion still requires confirmation." + "label": "Dosyaları çöp kutusuna taşımadan önce onaylayın.", + "description": "Uzak dosyaları çöp kutusuna taşımadan önce izin isteyin. Kalıcı silme işlemi de onay gerektirir." } } }, @@ -72,14 +72,14 @@ "rename": "Yeniden Adlandır", "uploading": "Yükleniyor...", "uploadingFile": "{{name}} yükleniyor...", - "uploadingChunk": "Uploading {{name}}: {{percent}}% (part {{chunk}} of {{total}})", + "uploadingChunk": "{{name}}yükleniyor : {{percent}}% ( {{total}}'ün {{chunk}} kısmı)", "fileName": "Dosya Adı", "folderName": "Klasör Adı", "fileUploadedSuccessfully": "\"{{name}}\" dosyası başarıyla yüklendi.", "failedToUploadFile": "Dosya yüklenemedi.", - "uploadingFolderFiles": "Uploading {{count}} file(s)...", - "uploadedFolderFiles": "Uploaded {{count}} file(s) successfully", - "uploadedFolderPartial": "Uploaded {{uploaded}} file(s), {{failed}} failed", + "uploadingFolderFiles": "{{count}} dosya yükleniyor...", + "uploadedFolderFiles": "{{count}} dosya başarıyla yüklendi", + "uploadedFolderPartial": "{{uploaded}} dosya yüklendi, {{failed}} başarısız oldu", "fileDownloadedSuccessfully": "\"{{name}}\" dosyası başarıyla indirildi.", "failedToDownloadFile": "Dosya indirilemedi.", "fileCreatedSuccessfully": "\"{{name}}\" dosyası başarıyla oluşturuldu.", @@ -95,58 +95,58 @@ "sudoOperationFailed": "Sudo işlemi başarısız", "sudoAuthFailed": "Sudo kimlik doğrulaması başarısız", "dragFilesToUpload": "Yüklemek için dosyaları buraya bırakın", - "dropToUploadHere": "Drop to upload here", - "dropToDownloadHere": "Drop to download here", + "dropToUploadHere": "Yüklemek için sürükle bırak özelliğini kullanın.", + "dropToDownloadHere": "İndirmek için buraya tıklayın", "localFiles": "Yerel", - "showLocalFiles": "Show local files (split view)", - "hideLocalFiles": "Hide local files", - "localHome": "Home folder", - "localPathPlaceholder": "Local folder path", - "localShowHidden": "Show hidden files", - "localHideHidden": "Hide hidden files", - "localRevealInFileManager": "Reveal in system file manager", - "localCannotOpenFolder": "Cannot open folder", + "showLocalFiles": "Yerel dosyaları göster (bölünmüş görünüm)", + "hideLocalFiles": "Yerel dosyaları gizle", + "localHome": "Ana klasör", + "localPathPlaceholder": "Yerel klasör yolu", + "localShowHidden": "Gizli dosyaları göster", + "localHideHidden": "Gizli dosyaları gizle", + "localRevealInFileManager": "Sistem dosya yöneticisinde göster", + "localCannotOpenFolder": "Klasör açılamıyor.", "localItemCount": "{{count}} öğe", "localSelectedCount": "{{count}} seçili", "back": "Geri", - "forward": "Forward", - "up": "Up", - "kind": "Kind", - "localUploadingProgress": "Uploading {{current}} of {{total}}", - "localDownloadingProgress": "Downloading {{current}} of {{total}}", - "localTransferInFlight": "{{count}} at once", - "localPreparingDownload": "Preparing download...", + "forward": "İleri", + "up": "Yukarı", + "kind": "Tür", + "localUploadingProgress": "{{total}}'ten {{current}} yükleniyor", + "localDownloadingProgress": "{{total}}'ten {{current}} indiriliyor", + "localTransferInFlight": "{{count}} hemen", + "localPreparingDownload": "İndirme işlemi hazırlanıyor...", "localTransferCancelled": "Aktarım iptal edildi", - "localNothingToTransfer": "Nothing to transfer", - "localUploadComplete": "Uploaded {{count}} file(s)", - "localUploadFailed": "Upload failed", - "localUploadPartial": "Uploaded {{done}} file(s), {{failed}} failed", - "localDownloadComplete": "Downloaded {{count}} file(s)", + "localNothingToTransfer": "Aktarılacak bir şey yok.", + "localUploadComplete": "{{count}} dosya yüklendi", + "localUploadFailed": "Yükleme başarısız oldu", + "localUploadPartial": "{{done}} dosya yüklendi, {{failed}} başarısız oldu", + "localDownloadComplete": "{{count}} dosya indirildi", "localDownloadFailed": "İndirme başarısız oldu", - "localDownloadPartial": "Downloaded {{done}} file(s), {{failed}} failed", - "localReplaceExistingPrompt": "{{count}} item(s) already exist in this folder. Replace them?", + "localDownloadPartial": "{{done}} dosya indirildi, {{failed}} başarısız oldu", + "localReplaceExistingPrompt": "Bu klasörde zaten {{count}} öğe mevcut. Bunların yerine yenilerini mi koymak istiyorsunuz?", "localReplace": "Değiştir", - "localSkipExisting": "Skip", - "localSkippedExisting": "Skipped {{count}} existing item(s)", - "localUnsafeNamesSkipped": "Skipped {{count}} item(s) whose names cannot be used on this computer", + "localSkipExisting": "Atlamak", + "localSkippedExisting": "{{count}} mevcut öğe atlandı", + "localUnsafeNamesSkipped": "Bu bilgisayarda adları kullanılamayan {{count}} öğe atlandı.", "localOpen": "Aç", - "localOpenFolder": "Open folder", - "localUploadToRemote": "Upload to server", - "localUploadToRemoteMany": "Upload {{count}} items to server", - "localMoveToTrash": "Move to Trash", - "localMoveToTrashMany": "Move {{count}} items to Trash", - "localTrashConfirmSingle": "Move \"{{name}}\" to the Trash?", - "localTrashConfirmFolder": "Move the folder \"{{name}}\" and all its contents to the Trash?", - "localTrashConfirmMany": "Move {{count}} items to the Trash?", - "localTrashed": "Moved {{count}} item(s) to the Trash", - "localTrashFailed": "Could not move to the Trash", - "localRenameFailed": "Rename failed", - "localCreateFailed": "Could not create item", - "goToParentFolder": "Go to parent folder", - "resizeSidebar": "Drag to resize the sidebar (double-click to reset)", - "resizeLocalPane": "Drag to resize the local pane (double-click to reset)", + "localOpenFolder": "Klasörü aç", + "localUploadToRemote": "Sunucuya yükle", + "localUploadToRemoteMany": "Sunucuya {{count}} öğe yükle", + "localMoveToTrash": "Çöp Kutusuna Taşı", + "localMoveToTrashMany": "{{count}} öğeyi Çöp Kutusuna Taşı", + "localTrashConfirmSingle": "\"{{name}}\" öğesini Çöp Kutusuna taşı?", + "localTrashConfirmFolder": "\"{{name}}\" klasörünü ve tüm içeriğini Çöp Kutusu'na taşı?", + "localTrashConfirmMany": "{{count}} öğeyi Çöp Kutusuna taşı?", + "localTrashed": "{{count}} öğe Çöp Kutusu'na taşındı", + "localTrashFailed": "Çöp kutusuna taşınamadı", + "localRenameFailed": "Yeniden adlandırma başarısız oldu.", + "localCreateFailed": "Öğe oluşturulamadı.", + "goToParentFolder": "Üst klasöre git", + "resizeSidebar": "Kenar çubuğunu yeniden boyutlandırmak için sürükleyin (sıfırlamak için çift tıklayın)", + "resizeLocalPane": "Yerel bölmeyi yeniden boyutlandırmak için sürükleyin (sıfırlamak için çift tıklayın).", "columns": "Sütunlar", - "columnsHint": "Right-click to choose columns", + "columnsHint": "Sütunları seçmek için sağ tıklayın.", "emptyFolder": "Bu klasör boş", "searchFiles": "Dosya ara...", "upload": "Yükle", @@ -202,26 +202,26 @@ "confirmDeleteMultipleItemsWithFolders": "{{count}} öğeyi kalıcı olarak silmek istediğinize emin misiniz? Bu, klasörleri ve içeriklerini de kapsar.", "confirmDeleteFolder": "\"{{name}}\" klasörünü ve tüm içeriğini kalıcı olarak silmek istediğinize emin misiniz?", "permanentDeleteWarning": "Bu işlem geri alınamaz. Öğe(ler) sunucudan kalıcı olarak silinecek.", - "moveToTrashWarning": "The item(s) will be moved to the Termix Trash and can be restored before the retention period expires.", - "itemsMovedToTrash": "{{count}} item(s) moved to Trash", - "trash": "Trash", - "trashDescription": "Deleted items are retained for {{days}} day(s) on this host.", - "trashLoadFailed": "Failed to load Trash", - "trashEmpty": "Trash is empty", + "moveToTrashWarning": "Öğeler Termix Çöp Kutusu'na taşınacak ve saklama süresi dolmadan önce geri yüklenebilecektir.", + "itemsMovedToTrash": "{{count}} öğe Çöp Kutusuna taşındı", + "trash": "Çöp", + "trashDescription": "Silinen öğeler bu sunucuda {{days}} gün boyunca saklanır.", + "trashLoadFailed": "Çöp kutusu yüklenemedi.", + "trashEmpty": "Çöp kutusu boş.", "trashRestore": "Geri Yükle", - "trashRestored": "Restored {{name}}", - "trashRestoreFailed": "Failed to restore item. The original path may already exist.", - "trashDeletePermanently": "Delete permanently", - "trashDeleteConfirm": "Permanently delete {{name}}? This cannot be undone.", - "trashPermanentlyDeleted": "Permanently deleted {{name}}", - "trashDeleteFailed": "Failed to permanently delete item", - "trashEmptyAction": "Empty Trash", - "trashEmptyConfirm": "Permanently delete every item in Trash? This cannot be undone.", - "trashEmptied": "Trash emptied", - "trashRetention": "Automatic cleanup after (days)", - "trashRetentionSaved": "Trash retention updated", - "trashRetentionFailed": "Failed to update Trash retention", - "trashUnavailableConfirm": "This item cannot be moved to Trash, usually because it is on another filesystem or requires elevated permissions. Delete it permanently instead?", + "trashRestored": "Geri Yüklendi {{name}}", + "trashRestoreFailed": "Öğeyi geri yükleme başarısız oldu. Orijinal yol zaten mevcut olabilir.", + "trashDeletePermanently": "Kalıcı olarak sil", + "trashDeleteConfirm": "{{name}}öğesini kalıcı olarak silmek istiyor musunuz? Bu işlem geri alınamaz.", + "trashPermanentlyDeleted": "Kalıcı olarak silindi {{name}}", + "trashDeleteFailed": "Öğeyi kalıcı olarak silme işlemi başarısız oldu.", + "trashEmptyAction": "Çöpü Boşaltın", + "trashEmptyConfirm": "Çöp kutusundaki tüm öğeleri kalıcı olarak silmek mi istiyorsunuz? Bu işlem geri alınamaz.", + "trashEmptied": "Çöp boşaltıldı.", + "trashRetention": "Otomatik temizleme süresi (gün)", + "trashRetentionSaved": "Çöp saklama süresi güncellendi", + "trashRetentionFailed": "Çöp kutusu saklama süresi güncellenemedi.", + "trashUnavailableConfirm": "Bu öğe Çöp Kutusu'na taşınamaz, genellikle başka bir dosya sisteminde olduğu veya yükseltilmiş izinler gerektirdiği içindir. Bunun yerine kalıcı olarak silin.", "recent": "Son Kullanılanlar", "pinned": "Sabitlenmiş", "folderShortcuts": "Klasör Kısayolları", @@ -303,7 +303,7 @@ "operationCompleted": "{{count}} öğe {{operation}}", "downloadFileSuccess": "{{name}} dosyası başarıyla indirildi", "downloadFileFailed": "İndirme başarısız oldu", - "downloadingFile": "Downloading {{name}}…", + "downloadingFile": "{{name}}… indiriliyor", "downloadProgressBytes": "{{transferred}} / {{total}}", "moveTo": "{{name}} konumuna taşı", "diffCompareWith": "{{name}} ile diff karşılaştır", @@ -323,13 +323,13 @@ "sideBySide": "Yan Yana", "inline": "Satır İçi", "fileComparison": "Dosya Karşılaştırması: {{file1}} vs {{file2}}", - "fileTooLarge": "Dosya çok büyük: {{error}}", + "fileTooLarge": "File is too large (> 10MB) and cannot be opened as text for security reasons.", "sshConnectionFailed": "SSH bağlantısı başarısız oldu. Lütfen {{name}} ({{ip}}:{{port}}) ile bağlantınızı kontrol edin", "loadFileFailed": "Dosya yüklenemedi: {{error}}", "connecting": "Bağlanıyor...", "connectedSuccessfully": "Bağlantı başarıyla kuruldu", "totpVerificationFailed": "TOTP doğrulaması başarısız oldu", - "browserSignInFailed": "Sign-in failed. Please try again.", + "browserSignInFailed": "Giriş başarısız oldu. Lütfen tekrar deneyin.", "authenticationFailed": "Kimlik doğrulama başarısız oldu", "incorrectPassphrase": "Yanlış parola. Lütfen tekrar deneyin.", "verificationCodePrompt": "Doğrulama kodu:", @@ -361,73 +361,82 @@ "used": "Kullanılan", "of": " / ", "toggleSidebar": "Kenar Çubuğunu Göster/Gizle", - "compactLayout": "Use compact layout", - "comfortableLayout": "Use comfortable layout", + "compactLayout": "Kompakt düzeni kullanın.", + "comfortableLayout": "Rahat bir düzen kullanın.", "cannotLoadPdf": "PDF yüklenemiyor", "pdfLoadError": "Bu PDF dosyası yüklenirken bir hata oluştu.", - "loadingPdf": "PDF yükleniyor...", + "loadingPdf": "Loading PDF viewer...", "loadingPage": "Sayfa yükleniyor...", "cancel": "İptal", - "copiedItems_one": "Copied {{count}} item", - "copiedItems_other": "Copied {{count}} items", - "deleteCopiedFileFailed": "Could not delete the copy of {{name}}: {{error}}", - "dragMovedItems_one": "Moved {{count}} item to {{target}}", - "dragMovedItems_other": "Moved {{count}} items to {{target}}", - "moveBackFileFailed": "Could not move {{name}} back: {{error}}", + "copiedItems_one": "Kopyalanan {{count}} öğe", + "copiedItems_other": "Kopyalanan {{count}} öğe", + "deleteCopiedFileFailed": "{{name}}kopyası silinemedi : {{error}}", + "dragMovedItems_one": "{{count}} öğesi {{target}} konumuna taşındı.", + "dragMovedItems_other": "{{count}} öğe {{target}} konumuna taşındı.", + "moveBackFileFailed": "{{name}} geri taşınamadı: {{error}}", "terminal": "Terminal: {{host}} ({{path}})", - "dragToDesktop": "Dragging {{name}} to the desktop", - "dragFilesToDesktop": "Dragging {{count}} files to the desktop", - "folderDragUnsupported": "Dragging folders to the desktop is not supported yet", - "saveToDesktopFailed": "Save failed: {{error}}", - "dragFailedDetail": "Drag failed: {{error}}", - "videoUnsupported": "Your browser cannot play this video format.", - "downloadToPlay": "Download to play it elsewhere", - "cannotPreviewType": "Cannot preview this file type", - "cannotPreviewTypeHint": "This file type has no preview. Download it to open it in another app." + "dragToDesktop": "{{name}} dosyasını masaüstüne sürükleme", + "dragFilesToDesktop": "{{count}} dosyaları masaüstüne sürükleme", + "folderDragUnsupported": "Klasörleri masaüstüne sürükleme özelliği henüz desteklenmiyor.", + "saveToDesktopFailed": "Kaydetme başarısız: {{error}}", + "dragFailedDetail": "Sürükleme başarısız oldu: {{error}}", + "videoUnsupported": "Tarayıcınız bu video formatını oynatamıyor.", + "downloadToPlay": "Başka yerde oynamak için indirin", + "cannotPreviewType": "Bu dosya türünün önizlemesi yapılamıyor.", + "cannotPreviewTypeHint": "Bu dosya türünün önizlemesi yok. Başka bir uygulamada açmak için indirin.", + "loadingFile": "Loading file...", + "loadingImage": "Loading image...", + "loadingEditor": "Loading editor...", + "loadingPreview": "Loading preview...", + "loadingAudio": "Loading audio player...", + "emptyPreview": "Nothing to preview yet...", + "revert": "Revert", + "openAsText": "Open as Text", + "confirmOpenAsText": "Do you want to continue opening this file as text? This may slow down your browser." }, "sftpTransfer": { "title": "SFTP", - "description": "Transfer files between two SSH hosts.", - "sourceServer": "Source Server", - "destinationServer": "Destination Server", - "selectHost": "Select host", + "description": "İki SSH sunucusu arasında dosya aktarımı.", + "sourceServer": "Kaynak Sunucusu", + "destinationServer": "Hedef Sunucu", + "selectHost": "Sunucu seçin", "noHostSelected": "Sunucu seçilmedi", "move": "Taşı", "copy": "Kopyala", "upload": "Yükle", - "itemsSelected": "{{count}} item selected", - "itemsSelected_other": "{{count}} items selected", + "itemsSelected": "{{count}} seçilen öğe", + "itemsSelected_other": "{{count}} öğe seçildi", "ready": "Hazır", "loadingHosts": "Hostlar yükleniyor...", "name": "Ad", "modified": "Değiştirilme", "size": "Boyut", - "noFiles": "No files", + "noFiles": "Dosya yok", "open": "Aç", - "up": "Up", + "up": "Yukarı", "refresh": "Yenile", - "copyToTarget": "Copy to Target Directory", + "copyToTarget": "Hedef Dizine Kopyala", "rename": "Yeniden adlandır", "delete": "Sil", - "editPermissions": "Edit Permissions", - "createNewFolder": "Create New Folder", - "deleteSelectedItems": "Delete Selected Items", + "editPermissions": "Düzenleme İzinleri", + "createNewFolder": "Yeni Klasör Oluştur", + "deleteSelectedItems": "Seçili Öğeleri Sil", "deleteConfirm": "Delete {{count}} selected item?", "deleteConfirm_other": "Delete {{count}} selected items?", "cancel": "İptal", "save": "Kaydet", - "folderCreated": "Folder created", - "itemRenamed": "Item renamed", + "folderCreated": "Klasör oluşturuldu", + "itemRenamed": "Öğe yeniden adlandırıldı.", "actionFailed": "Eylem başarısız oldu", - "itemsDeleted": "{{count}} item deleted", - "itemsDeleted_other": "{{count}} items deleted", - "deleteFailed": "Delete failed", - "permissionsUpdated": "Permissions updated", - "noRemoteSessionConnected": "No remote session connected", - "failedToListFiles": "Failed to list files", - "failedToRefresh": "Failed to refresh", - "destinationInsideSource": "Destination cannot be inside the selected source path.", - "sameHostNoOp": "Source and destination are the same folder." + "itemsDeleted": "{{count}} öğe silindi", + "itemsDeleted_other": "{{count}} öğe silindi", + "deleteFailed": "Silme işlemi başarısız oldu.", + "permissionsUpdated": "İzinler güncellendi", + "noRemoteSessionConnected": "Bağlantı kurulmuş uzaktan oturum yok.", + "failedToListFiles": "Dosyaları listeleme başarısız oldu.", + "failedToRefresh": "Yenileme başarısız oldu", + "destinationInsideSource": "Hedef, seçilen kaynak yolunun içinde olamaz.", + "sameHostNoOp": "Kaynak ve hedef aynı klasördedir." }, "hosts": { "fileManager": "Dosya Yöneticisi", @@ -438,8 +447,8 @@ "loadingHost": "Host yükleniyor..." }, "onboarding": { - "feature_files": "File manager", - "feature_files_desc": "Browse, upload, download and edit files over SFTP without leaving the app." + "feature_files": "Dosya yöneticisi", + "feature_files_desc": "Uygulamadan çıkmadan SFTP üzerinden dosyalara göz atın, yükleyin, indirin ve düzenleyin." }, "terminal": { "runTitle": "Çalıştırılıyor: {{command}} - {{host}}", @@ -464,7 +473,7 @@ "destinationPath": "Hedef yol", "destMustBeDirectory": "Çoklu öğe aktarımları için hedef bir dizin olmalıdır", "goUp": "Yukarı", - "hostAuthRequired": "Authentication required. Open File Manager on this host first", + "hostAuthRequired": "Kimlik doğrulaması gereklidir. Öncelikle bu sunucuda Dosya Yöneticisini açın.", "hostConnecting": "Bağlanıyor…", "hostConnectionFailed": "Bağlantı başarısız", "hostDisconnected": "Bağlı değil", @@ -485,12 +494,12 @@ "methodReason": { "user_item_sftp": "Dosya bazında SFTP seçtiniz.", "user_tar": "Tar arşivi seçtiniz.", - "tar_unavailable": "Tar is not available on one or both hosts, so per-file SFTP will be used instead.", - "windows_host": "A Windows host is involved, so tar is not used.", - "auto_multi_large": "Auto: multiple files including a large file ({{largestSize}}) with compressible data. Tar bundles them into one transfer.", - "auto_single_large_in_archive": "Auto: one large file ({{largestSize}}) in this set, so per-file SFTP.", - "auto_many_incompressible": "Auto: mostly incompressible data, so per-file SFTP.", - "auto_many_files": "Auto: many files ({{fileCount}}), tar cuts the per-file overhead.", + "tar_unavailable": "Tar, sunuculardan birinde veya her ikisinde de mevcut olmadığından, bunun yerine dosya bazlı SFTP kullanılacaktır.", + "windows_host": "Windows işletim sistemli bir sunucu söz konusu olduğundan tar kullanılmamıştır.", + "auto_multi_large": "Otomatik: Sıkıştırılabilir veriler içeren büyük bir dosya ({{largestSize}}) dahil olmak üzere birden fazla dosya. Tar bunları tek bir aktarımda birleştirir.", + "auto_single_large_in_archive": "Otomatik: Bu kümede büyük bir dosya ({{largestSize}}) var, bu yüzden dosya başına SFTP.", + "auto_many_incompressible": "Otomatik: Çoğunlukla sıkıştırılamayan veriler, bu nedenle dosya bazında SFTP.", + "auto_many_files": "Otomatik: birden fazla dosya ({{fileCount}}), tar dosya başına ek yükü azaltır.", "auto_default": "Otomatik: bu küme için dosya bazında SFTP." }, "methodTar": "Tar arşivi", @@ -498,11 +507,11 @@ "metricsCompress": "Kaynakta sıkıştırma: {{duration}}", "metricsExtract": "Hedefte çıkarma: {{duration}}", "metricsPrepare": "Hedefi hazırla: {{duration}}", - "metricsRouteBenchmark": "Route probe: direct {{direct}}, relay {{relay}}", + "metricsRouteBenchmark": "Rota sondası: doğrudan {{direct}}, röle {{relay}}", "metricsSourceDelete": "Kaynaktan silme: {{duration}}", "metricsTotal": "Toplam: {{duration}}", "metricsTransfer": "Uçtan uca: {{throughput}} ({{duration}})", - "metricsVerify": "SHA-256 verified: {{duration}}", + "metricsVerify": "SHA-256 ile doğrulandı: {{duration}}", "moveFolderToHost": "Klasörü ana bilgisayara taşı…", "moveItemsToHost": "{{count}} öğeyi ana bilgisayara taşı…", "moveToHost": "Sunucuya taşı…", @@ -511,7 +520,7 @@ "parallelSegmentsHint": "Büyük dosyalar 256 MB'lık parçalara bölünür. Çoklu yollar, daha yüksek toplam aktarım hızı için ayrı bağlantılar kullanır (birden fazla aktarım başlatmak gibi).", "parallelSegmentsLabel": "Paralel aktarım yolları", "parallelSegmentsOption": "{{count}} yol", - "progressBenchmarking": "Selecting the fastest transfer route…", + "progressBenchmarking": "En hızlı aktarma rotasını seçme…", "progressBytes": "{{transferred}} / {{total}}", "progressCancel": "İptal", "progressCancelling": "İptal ediliyor…", @@ -523,7 +532,7 @@ "progressTotalSpeed": "{{speed}} toplam ({{lanes}} yol)", "progressTransferring": "Veri aktarılıyor…", "progressTransferringItems": "Dosyalar aktarılıyor ({{current}} / {{total}})…", - "progressVerifying": "Verifying file integrity…", + "progressVerifying": "Dosya bütünlüğünün doğrulanması…", "recentDestinations": "Son hedefler", "resumedHint": "Başka bir pencerede başlatılan aktif bir aktarıma yeniden bağlanıldı.", "retryTransfer": "Yeniden dene", @@ -539,5 +548,8 @@ "metricsHopSourceRead": "Kaynak → sunucu: {{throughput}}", "metricsHopDestSftpWrite": "Sunucu → hedef (SFTP): {{throughput}}", "metricsHopDestLocalWrite": "Sunucu → hedef (yerel): {{throughput}}" + }, + "plugin": { + "name": "File Manager" } } diff --git a/plugins/file-manager/locales/translated/uk_UA.json b/plugins/file-manager/locales/translated/uk_UA.json index dc86761ce..917e65102 100644 --- a/plugins/file-manager/locales/translated/uk_UA.json +++ b/plugins/file-manager/locales/translated/uk_UA.json @@ -1,543 +1,555 @@ { "nav": { - "files": "Files", + "files": "Файли", "sftp": "SFTP", - "openFileManager": "Open File Manager" + "openFileManager": "Відкрити файловий менеджер" }, "permissions": { "use": { - "title": "Use file manager", - "description": "Browse, edit and transfer files over SFTP." + "title": "Використовуйте файловий менеджер", + "description": "Переглядайте, редагуйте та передайте файли через SFTP." } }, "settings": { "host": { "enable": { - "label": "Enable File Manager", - "description": "Browse and edit files on this host over SFTP." + "label": "Увімкнути файловий менеджер", + "description": "Переглядайте та редагуйте файли на цьому хості через SFTP." }, "defaultPath": { - "label": "Default Path" + "label": "Шлях за замовчуванням" }, "scpLegacy": { - "label": "SCP Legacy Mode" + "label": "Застарілий режим SCP" } }, "user": { "transferConcurrency": { - "label": "Simultaneous File Transfers", - "description": "How many files the side by side local/remote manager uploads or downloads at the same time. Lower this if your server limits SFTP channels." + "label": "Одночасна передача файлів", + "description": "Скільки файлів одночасно завантажує або вивантажує локальний/віддалений менеджер. Зменште це значення, якщо ваш сервер обмежує кількість каналів SFTP." }, "confirmBeforeTrash": { - "label": "Confirm before moving files to trash", - "description": "Ask before moving remote files to trash. Permanent deletion still requires confirmation." + "label": "Підтвердити перед переміщенням файлів у кошик", + "description": "Запитувати перед переміщенням віддалених файлів до кошика. Для остаточного видалення все одно потрібне підтвердження." } } }, "hostCapability": { - "label": "File Manager" + "label": "Файловий менеджер" }, "fileManager": { - "noHostSelected": "No host selected", - "initializingEditor": "Initializing editor...", - "file": "File", - "folder": "Folder", - "uploadFile": "Upload File", - "downloadFile": "Download", - "extractArchive": "Extract Archive", - "extractingArchive": "Extracting {{name}}...", - "archiveExtractedSuccessfully": "{{name}} extracted successfully", - "extractFailed": "Extract failed", - "compressFile": "Compress File", - "compressFiles": "Compress Files", - "compressFilesDesc": "Compress {{count}} items into an archive", - "archiveName": "Archive Name", - "enterArchiveName": "Enter archive name...", - "compressionFormat": "Compression Format", - "selectedFiles": "Selected files", - "andMoreFiles": "and {{count}} more...", - "compress": "Compress", - "compressingFiles": "Compressing {{count}} items into {{name}}...", - "filesCompressedSuccessfully": "{{name}} created successfully", - "compressFailed": "Compression failed", - "edit": "Edit", - "preview": "Preview", - "previous": "Previous", - "next": "Next", - "pageXOfY": "Page {{current}} of {{total}}", - "zoomOut": "Zoom Out", - "zoomIn": "Zoom In", - "newFile": "New File", - "newFolder": "New Folder", - "rename": "Rename", - "uploading": "Uploading...", - "uploadingFile": "Uploading {{name}}...", - "uploadingChunk": "Uploading {{name}}: {{percent}}% (part {{chunk}} of {{total}})", - "fileName": "File Name", - "folderName": "Folder Name", - "fileUploadedSuccessfully": "File \"{{name}}\" uploaded successfully", - "failedToUploadFile": "Failed to upload file", - "uploadingFolderFiles": "Uploading {{count}} file(s)...", - "uploadedFolderFiles": "Uploaded {{count}} file(s) successfully", - "uploadedFolderPartial": "Uploaded {{uploaded}} file(s), {{failed}} failed", - "fileDownloadedSuccessfully": "File \"{{name}}\" downloaded successfully", - "failedToDownloadFile": "Failed to download file", - "fileCreatedSuccessfully": "File \"{{name}}\" created successfully", - "folderCreatedSuccessfully": "Folder \"{{name}}\" created successfully", - "failedToCreateItem": "Failed to create item", - "operationFailed": "{{operation}} operation failed for {{name}}: {{error}}", - "failedToResolveSymlink": "Failed to resolve symlink", - "itemsDeletedSuccessfully": "{{count}} items deleted successfully", - "failedToDeleteItems": "Failed to delete items", - "sudoPasswordRequired": "Administrator Password Required", - "enterSudoPassword": "Enter sudo password to continue this operation", - "sudoPassword": "Sudo password", - "sudoOperationFailed": "Sudo operation failed", - "sudoAuthFailed": "Sudo authentication failed", - "dragFilesToUpload": "Drop files here to upload", - "dropToUploadHere": "Drop to upload here", - "dropToDownloadHere": "Drop to download here", - "localFiles": "Local", - "showLocalFiles": "Show local files (split view)", - "hideLocalFiles": "Hide local files", - "localHome": "Home folder", - "localPathPlaceholder": "Local folder path", - "localShowHidden": "Show hidden files", - "localHideHidden": "Hide hidden files", - "localRevealInFileManager": "Reveal in system file manager", - "localCannotOpenFolder": "Cannot open folder", - "localItemCount": "{{count}} items", - "localSelectedCount": "{{count}} selected", - "back": "Back", - "forward": "Forward", - "up": "Up", - "kind": "Kind", - "localUploadingProgress": "Uploading {{current}} of {{total}}", - "localDownloadingProgress": "Downloading {{current}} of {{total}}", - "localTransferInFlight": "{{count}} at once", - "localPreparingDownload": "Preparing download...", - "localTransferCancelled": "Transfer cancelled", - "localNothingToTransfer": "Nothing to transfer", - "localUploadComplete": "Uploaded {{count}} file(s)", - "localUploadFailed": "Upload failed", - "localUploadPartial": "Uploaded {{done}} file(s), {{failed}} failed", - "localDownloadComplete": "Downloaded {{count}} file(s)", - "localDownloadFailed": "Download failed", - "localDownloadPartial": "Downloaded {{done}} file(s), {{failed}} failed", - "localReplaceExistingPrompt": "{{count}} item(s) already exist in this folder. Replace them?", - "localReplace": "Replace", - "localSkipExisting": "Skip", - "localSkippedExisting": "Skipped {{count}} existing item(s)", - "localUnsafeNamesSkipped": "Skipped {{count}} item(s) whose names cannot be used on this computer", - "localOpen": "Open", - "localOpenFolder": "Open folder", - "localUploadToRemote": "Upload to server", - "localUploadToRemoteMany": "Upload {{count}} items to server", - "localMoveToTrash": "Move to Trash", - "localMoveToTrashMany": "Move {{count}} items to Trash", - "localTrashConfirmSingle": "Move \"{{name}}\" to the Trash?", - "localTrashConfirmFolder": "Move the folder \"{{name}}\" and all its contents to the Trash?", - "localTrashConfirmMany": "Move {{count}} items to the Trash?", - "localTrashed": "Moved {{count}} item(s) to the Trash", - "localTrashFailed": "Could not move to the Trash", - "localRenameFailed": "Rename failed", - "localCreateFailed": "Could not create item", - "goToParentFolder": "Go to parent folder", - "resizeSidebar": "Drag to resize the sidebar (double-click to reset)", - "resizeLocalPane": "Drag to resize the local pane (double-click to reset)", - "columns": "Columns", - "columnsHint": "Right-click to choose columns", - "emptyFolder": "This folder is empty", - "searchFiles": "Search files...", - "upload": "Upload", - "selectHostToStart": "Select a host to start file management", - "sshRequiredForFileManager": "File manager requires SSH. This host does not have SSH enabled.", - "failedToConnect": "Failed to connect to SSH", - "failedToLoadDirectory": "Failed to load directory", - "noSSHConnection": "No SSH connection available", - "copy": "Copy", - "cut": "Cut", - "paste": "Paste", - "copyPath": "Copy Path", - "copyPaths": "Copy Paths", - "delete": "Delete", - "properties": "Properties", - "refresh": "Refresh", - "downloadFiles": "Download {{count}} files to Browser", - "copyFiles": "Copy {{count}} items", - "cutFiles": "Cut {{count}} items", - "deleteFiles": "Delete {{count}} items", - "filesCopiedToClipboard": "{{count}} items copied to clipboard", - "filesCutToClipboard": "{{count}} items cut to clipboard", - "pathCopiedToClipboard": "Path copied to clipboard", - "pathsCopiedToClipboard": "{{count}} paths copied to clipboard", - "failedToCopyPath": "Failed to copy path to clipboard", - "copyFolderLink": "Copy Link to Folder", - "copyCurrentFolderLink": "Copy Link to Current Folder", - "folderLinkCopied": "Folder link copied to clipboard", - "failedToCopyFolderLink": "Failed to copy folder link", - "movedItems": "Moved {{count}} items", - "failedToDeleteItem": "Failed to delete item", - "itemRenamedSuccessfully": "{{type}} renamed successfully", - "failedToRenameItem": "Failed to rename item", - "download": "Download", - "openExternalEditor": "Open externally", - "chooseExternalEditor": "Choose external editor", - "externalEditorSelected": "External editor selected", - "externalEditorDesktopOnly": "External editor is only available in the desktop app", - "externalEditorOpened": "Opened in external editor. Saving there will upload changes back to the server.", - "failedToOpenExternalEditor": "Failed to open external editor", - "failedToSelectExternalEditor": "Failed to select external editor", - "permissions": "Permissions", - "size": "Size", - "modified": "Modified", - "path": "Path", - "confirmDelete": "Are you sure you want to delete {{name}}?", - "permissionDenied": "Permission denied", - "serverError": "Server Error", - "fileSavedSuccessfully": "File saved successfully", - "failedToSaveFile": "Failed to save file", - "confirmDeleteSingleItem": "Are you sure you want to permanently delete \"{{name}}\"?", - "confirmDeleteMultipleItems": "Are you sure you want to permanently delete {{count}} items?", - "confirmDeleteMultipleItemsWithFolders": "Are you sure you want to permanently delete {{count}} items? This includes folders and their contents.", - "confirmDeleteFolder": "Are you sure you want to permanently delete the folder \"{{name}}\" and all its contents?", - "permanentDeleteWarning": "This action cannot be undone. The item(s) will be permanently deleted from the server.", - "moveToTrashWarning": "The item(s) will be moved to the Termix Trash and can be restored before the retention period expires.", - "itemsMovedToTrash": "{{count}} item(s) moved to Trash", - "trash": "Trash", - "trashDescription": "Deleted items are retained for {{days}} day(s) on this host.", - "trashLoadFailed": "Failed to load Trash", - "trashEmpty": "Trash is empty", - "trashRestore": "Restore", - "trashRestored": "Restored {{name}}", - "trashRestoreFailed": "Failed to restore item. The original path may already exist.", - "trashDeletePermanently": "Delete permanently", - "trashDeleteConfirm": "Permanently delete {{name}}? This cannot be undone.", - "trashPermanentlyDeleted": "Permanently deleted {{name}}", - "trashDeleteFailed": "Failed to permanently delete item", - "trashEmptyAction": "Empty Trash", - "trashEmptyConfirm": "Permanently delete every item in Trash? This cannot be undone.", - "trashEmptied": "Trash emptied", - "trashRetention": "Automatic cleanup after (days)", - "trashRetentionSaved": "Trash retention updated", - "trashRetentionFailed": "Failed to update Trash retention", - "trashUnavailableConfirm": "This item cannot be moved to Trash, usually because it is on another filesystem or requires elevated permissions. Delete it permanently instead?", - "recent": "Recent", - "pinned": "Pinned", - "folderShortcuts": "Folder Shortcuts", - "failedToReconnectSSH": "Failed to reconnect SSH session", - "openTerminalHere": "Open Terminal Here", - "run": "Run", - "openTerminalInFolder": "Open Terminal in This Folder", - "openTerminalInFileLocation": "Open Terminal at File Location", - "runningFile": "Running - {{file}}", - "onlyRunExecutableFiles": "Can only run executable files", - "directories": "Directories", - "removedFromRecentFiles": "Removed \"{{name}}\" from recent files", - "removeFailed": "Remove failed", - "unpinnedSuccessfully": "Unpinned \"{{name}}\" successfully", - "unpinFailed": "Unpin failed", - "removedShortcut": "Removed shortcut \"{{name}}\"", - "removeShortcutFailed": "Remove shortcut failed", - "clearedAllRecentFiles": "Cleared all recent files", - "clearFailed": "Clear failed", - "removeFromRecentFiles": "Remove from recent files", - "clearAllRecentFiles": "Clear all recent files", - "unpinFile": "Unpin file", - "removeShortcut": "Remove shortcut", - "pinFile": "Pin file", - "addToShortcuts": "Add to shortcuts", - "pasteFailed": "Paste failed", - "noUndoableActions": "No undoable actions", - "undoCopySuccess": "Undid copy operation: Deleted {{count}} copied files", - "undoCopyFailedDelete": "Undo failed: Could not delete any copied files", - "undoCopyFailedNoInfo": "Undo failed: Could not find copied file information", - "undoMoveSuccess": "Undid move operation: Moved {{count}} files back to original location", - "undoMoveFailedMove": "Undo failed: Could not move any files back", - "undoMoveFailedNoInfo": "Undo failed: Could not find moved file information", - "undoDeleteNotSupported": "Delete operation cannot be undone: Files have been permanently deleted from server", - "undoTypeNotSupported": "Unsupported undo operation type", - "undoOperationFailed": "Undo operation failed", - "unknownError": "Unknown error", - "confirm": "Confirm", - "find": "Find...", - "replace": "Replace", - "downloadInstead": "Download Instead", - "keyboardShortcuts": "Keyboard Shortcuts", - "searchAndReplace": "Search & Replace", - "editing": "Editing", - "search": "Search", - "findNext": "Find Next", - "findPrevious": "Find Previous", - "save": "Save", - "selectAll": "Select All", - "undo": "Undo", - "redo": "Redo", - "moveLineUp": "Move Line Up", - "moveLineDown": "Move Line Down", - "toggleComment": "Toggle Comment", - "autoComplete": "Auto Complete", - "imageLoadError": "Failed to load image", - "startTyping": "Start typing...", - "unknownSize": "Unknown size", - "fileIsEmpty": "File is empty", - "largeFileWarning": "Large File Warning", - "largeFileWarningDesc": "This file is {{size}} in size, which may cause performance issues when opened as text.", - "fileNotFoundAndRemoved": "File \"{{name}}\" not found and has been removed from recent/pinned files", - "failedToLoadFile": "Failed to load file: {{error}}", - "serverErrorOccurred": "Server error occurred. Please try again later.", - "autoSaveFailed": "Auto-save failed", - "fileAutoSaved": "File auto-saved", - "moveFileFailed": "Failed to move {{name}}", - "moveOperationFailed": "Move operation failed", - "canOnlyCompareFiles": "Can only compare two files", - "comparingFiles": "Comparing files: {{file1}} and {{file2}}", - "dragFailed": "Drag operation failed", - "filePinnedSuccessfully": "File \"{{name}}\" pinned successfully", - "pinFileFailed": "Failed to pin file", - "fileUnpinnedSuccessfully": "File \"{{name}}\" unpinned successfully", - "unpinFileFailed": "Failed to unpin file", - "shortcutAddedSuccessfully": "Folder shortcut \"{{name}}\" added successfully", - "addShortcutFailed": "Failed to add shortcut", - "operationCompletedSuccessfully": "{{operation}} {{count}} items successfully", - "operationCompleted": "{{operation}} {{count}} items", - "downloadFileSuccess": "File {{name}} downloaded successfully", - "downloadFileFailed": "Download failed", - "downloadingFile": "Downloading {{name}}…", + "noHostSelected": "Хост не вибрано", + "initializingEditor": "Ініціалізація редактора...", + "file": "Файл", + "folder": "Папка", + "uploadFile": "Завантажити файл", + "downloadFile": "Завантажити", + "extractArchive": "Витягти архів", + "extractingArchive": "Видобування {{name}}...", + "archiveExtractedSuccessfully": "{{name}} успішно видобуто", + "extractFailed": "Не вдалося витягти", + "compressFile": "Стиснути файл", + "compressFiles": "Стиснути файли", + "compressFilesDesc": "Стиснути {{count}} елементів в архів", + "archiveName": "Назва архіву", + "enterArchiveName": "Введіть назву архіву...", + "compressionFormat": "Формат стиснення", + "selectedFiles": "Вибрані файли", + "andMoreFiles": "та {{count}} більше...", + "compress": "Стиснути", + "compressingFiles": "Стискання {{count}} елементів у {{name}}...", + "filesCompressedSuccessfully": "{{name}} успішно створено", + "compressFailed": "Стиснення не вдалося", + "edit": "Редагувати", + "preview": "Попередній перегляд", + "previous": "Попередній", + "next": "Далі", + "pageXOfY": "Сторінка {{current}} з {{total}}", + "zoomOut": "Зменшити масштаб", + "zoomIn": "Збільшити масштаб", + "newFile": "Новий файл", + "newFolder": "Нова папка", + "rename": "Перейменувати", + "uploading": "Завантаження...", + "uploadingFile": "Завантаження {{name}}...", + "uploadingChunk": "Завантаження {{name}}: {{percent}}% (частина {{chunk}} з {{total}})", + "fileName": "Ім'я файлу", + "folderName": "Назва папки", + "fileUploadedSuccessfully": "Файл «{{name}}» успішно завантажено", + "failedToUploadFile": "Не вдалося завантажити файл", + "uploadingFolderFiles": "Завантаження {{count}} файлів...", + "uploadedFolderFiles": "Успішно завантажено {{count}} файл(ів)", + "uploadedFolderPartial": "Завантажено {{uploaded}} файл(ів), {{failed}} не вдалося", + "fileDownloadedSuccessfully": "Файл «{{name}}» успішно завантажено", + "failedToDownloadFile": "Не вдалося завантажити файл", + "fileCreatedSuccessfully": "Файл «{{name}}» успішно створено", + "folderCreatedSuccessfully": "Папка «{{name}}» успішно створена", + "failedToCreateItem": "Не вдалося створити елемент", + "operationFailed": "Операція {{operation}} не вдалася для {{name}}: {{error}}", + "failedToResolveSymlink": "Не вдалося вирішити проблему з символічним посиланням", + "itemsDeletedSuccessfully": "{{count}} елементів успішно видалено", + "failedToDeleteItems": "Не вдалося видалити елементи", + "sudoPasswordRequired": "Потрібен пароль адміністратора", + "enterSudoPassword": "Введіть пароль sudo, щоб продовжити цю операцію", + "sudoPassword": "Пароль Sudo", + "sudoOperationFailed": "Операція Sudo не вдалася", + "sudoAuthFailed": "Не вдалося виконати автентифікацію Sudo", + "dragFilesToUpload": "Перетягніть сюди файли для завантаження", + "dropToUploadHere": "Перетягніть сюди, щоб завантажити", + "dropToDownloadHere": "Перетягніть сюди, щоб завантажити", + "localFiles": "Місцевий", + "showLocalFiles": "Показати локальні файли (розділений вигляд)", + "hideLocalFiles": "Приховати локальні файли", + "localHome": "Домашня папка", + "localPathPlaceholder": "Шлях до локальної папки", + "localShowHidden": "Показати приховані файли", + "localHideHidden": "Приховати приховані файли", + "localRevealInFileManager": "Показати в системному файловому менеджері", + "localCannotOpenFolder": "Не вдається відкрити папку", + "localItemCount": "{{count}} елементів", + "localSelectedCount": "{{count}} вибрано", + "back": "Назад", + "forward": "Вперед", + "up": "Вгору", + "kind": "Вид", + "localUploadingProgress": "Завантаження {{current}} з {{total}}", + "localDownloadingProgress": "Завантаження {{current}} з {{total}}", + "localTransferInFlight": "{{count}} одразу", + "localPreparingDownload": "Підготовка завантаження...", + "localTransferCancelled": "Переказ скасовано", + "localNothingToTransfer": "Нічого для перенесення", + "localUploadComplete": "Завантажено {{count}} файл(ів)", + "localUploadFailed": "Не вдалося завантажити", + "localUploadPartial": "Завантажено {{done}} файл(ів), {{failed}} не вдалося", + "localDownloadComplete": "Завантажено {{count}} файл(ів)", + "localDownloadFailed": "Завантаження не вдалося", + "localDownloadPartial": "Завантажено {{done}} файл(ів), {{failed}} не вдалося", + "localReplaceExistingPrompt": "{{count}} елементів вже є в цій папці. Замінити їх?", + "localReplace": "Замінити", + "localSkipExisting": "Пропустити", + "localSkippedExisting": "Пропущено {{count}} існуючих елементів", + "localUnsafeNamesSkipped": "Пропущено {{count}} елементів, назви яких не можна використовувати на цьому комп’ютері", + "localOpen": "ВІДЧИНЕНО", + "localOpenFolder": "Відкрити папку", + "localUploadToRemote": "Завантажити на сервер", + "localUploadToRemoteMany": "Завантажити {{count}} елементів на сервер", + "localMoveToTrash": "Перемістити в кошик", + "localMoveToTrashMany": "Перемістити {{count}} елементів до кошика", + "localTrashConfirmSingle": "Перемістити \"{{name}}\" до кошика?", + "localTrashConfirmFolder": "Перемістити папку «{{name}}» та весь її вміст до кошика?", + "localTrashConfirmMany": "Перемістити {{count}} елементів до кошика?", + "localTrashed": "Переміщено {{count}} елементів до кошика", + "localTrashFailed": "Не вдалося перемістити в кошик", + "localRenameFailed": "Не вдалося перейменувати", + "localCreateFailed": "Не вдалося створити елемент", + "goToParentFolder": "Перейти до батьківської папки", + "resizeSidebar": "Перетягніть, щоб змінити розмір бічної панелі (двічі клацніть, щоб скинути налаштування)", + "resizeLocalPane": "Перетягніть, щоб змінити розмір локальної панелі (двічі клацніть, щоб скинути налаштування)", + "columns": "Колонки", + "columnsHint": "Клацніть правою кнопкою миші, щоб вибрати стовпці", + "emptyFolder": "Ця папка порожня", + "searchFiles": "Пошук файлів...", + "upload": "Завантажити", + "selectHostToStart": "Виберіть хост, щоб розпочати керування файлами", + "sshRequiredForFileManager": "Файловий менеджер вимагає SSH. На цьому хості SSH не ввімкнено.", + "failedToConnect": "Не вдалося підключитися до SSH", + "failedToLoadDirectory": "Не вдалося завантажити каталог", + "noSSHConnection": "SSH-з'єднання недоступне", + "copy": "Копіювати", + "cut": "Вирізати", + "paste": "Вставити", + "copyPath": "Копіювати шлях", + "copyPaths": "Копіювати шляхи", + "delete": "Видалити", + "properties": "Властивості", + "refresh": "Оновити", + "downloadFiles": "Завантажити {{count}} файлів у браузер", + "copyFiles": "Копіювати {{count}} елементів", + "cutFiles": "Вирізати {{count}} елементів", + "deleteFiles": "Видалити {{count}} елементів", + "filesCopiedToClipboard": "{{count}} елементів, скопійованих у буфер обміну", + "filesCutToClipboard": "{{count}} елементів, вирізаних у буфер обміну", + "pathCopiedToClipboard": "Шлях скопійовано в буфер обміну", + "pathsCopiedToClipboard": "{{count}} шляхів скопійовано в буфер обміну", + "failedToCopyPath": "Не вдалося скопіювати шлях до буфера обміну", + "copyFolderLink": "Копіювати посилання до папки", + "copyCurrentFolderLink": "Копіювати посилання до поточної папки", + "folderLinkCopied": "Посилання на папку скопійовано в буфер обміну", + "failedToCopyFolderLink": "Не вдалося скопіювати посилання на папку", + "movedItems": "Переміщено {{count}} елементів", + "failedToDeleteItem": "Не вдалося видалити елемент", + "itemRenamedSuccessfully": "{{type}} успішно перейменовано", + "failedToRenameItem": "Не вдалося перейменувати елемент", + "download": "Завантажити", + "openExternalEditor": "Відкрити зовні", + "chooseExternalEditor": "Виберіть зовнішній редактор", + "externalEditorSelected": "Вибрано зовнішнього редактора", + "externalEditorDesktopOnly": "Зовнішній редактор доступний лише в настільній програмі", + "externalEditorOpened": "Відкрито в зовнішньому редакторі. Збереження там завантажить зміни назад на сервер.", + "failedToOpenExternalEditor": "Не вдалося відкрити зовнішній редактор", + "failedToSelectExternalEditor": "Не вдалося вибрати зовнішній редактор", + "permissions": "Дозволи", + "size": "Розмір", + "modified": "Змінено", + "path": "Шлях", + "confirmDelete": "Ви впевнені, що хочете видалити {{name}}?", + "permissionDenied": "Дозвіл відхилено", + "serverError": "Помилка сервера", + "fileSavedSuccessfully": "Файл успішно збережено", + "failedToSaveFile": "Не вдалося зберегти файл", + "confirmDeleteSingleItem": "Ви впевнені, що хочете остаточно видалити \"{{name}}\"?", + "confirmDeleteMultipleItems": "Ви впевнені, що хочете остаточно видалити {{count}} елементів?", + "confirmDeleteMultipleItemsWithFolders": "Ви впевнені, що хочете остаточно видалити {{count}} елементів? Це стосується папок та їхнього вмісту.", + "confirmDeleteFolder": "Ви впевнені, що хочете остаточно видалити папку «{{name}}» та весь її вміст?", + "permanentDeleteWarning": "Цю дію неможливо скасувати. Елемент(и) буде назавжди видалено із сервера.", + "moveToTrashWarning": "Елемент(и) буде переміщено до кошика Termix і може бути відновлено до закінчення терміну зберігання.", + "itemsMovedToTrash": "{{count}} елементів переміщено до кошика", + "trash": "Сміття", + "trashDescription": "Видалені елементи зберігаються на цьому хості протягом {{days}} днів.", + "trashLoadFailed": "Не вдалося завантажити кошик", + "trashEmpty": "Кошик порожній", + "trashRestore": "Відновити", + "trashRestored": "Відновлено {{name}}", + "trashRestoreFailed": "Не вдалося відновити елемент. Можливо, початковий шлях уже існує.", + "trashDeletePermanently": "Видалити назавжди", + "trashDeleteConfirm": "Видалити {{name}}назавжди? Цю дію не можна скасувати.", + "trashPermanentlyDeleted": "Видалено назавжди {{name}}", + "trashDeleteFailed": "Не вдалося остаточно видалити елемент", + "trashEmptyAction": "Очистити кошик", + "trashEmptyConfirm": "Видалити всі елементи з кошика назавжди? Цю дію не можна скасувати.", + "trashEmptied": "Кошик очищено", + "trashRetention": "Автоматичне очищення через (дні)", + "trashRetentionSaved": "Збереження кошика оновлено", + "trashRetentionFailed": "Не вдалося оновити налаштування зберігання в кошику", + "trashUnavailableConfirm": "Цей елемент не можна перемістити до кошика, зазвичай тому, що він знаходиться в іншій файловій системі або потребує підвищених прав. Видалити його назавжди?", + "recent": "Нещодавні", + "pinned": "Закріплено", + "folderShortcuts": "Ярлики папок", + "failedToReconnectSSH": "Не вдалося відновити сеанс SSH", + "openTerminalHere": "Відкрити термінал тут", + "run": "Бігти", + "openTerminalInFolder": "Відкрити термінал у цій папці", + "openTerminalInFileLocation": "Відкрити термінал у місці розташування файлу", + "runningFile": "Біг – {{file}}", + "onlyRunExecutableFiles": "Можна запускати лише виконувані файли", + "directories": "Довідники", + "removedFromRecentFiles": "Видалено \"{{name}}\" з останніх файлів", + "removeFailed": "Видалити не вдалося", + "unpinnedSuccessfully": "Відкріплено \"{{name}}\" успішно", + "unpinFailed": "Не вдалося відкріпити", + "removedShortcut": "Видалено ярлик «{{name}}»", + "removeShortcutFailed": "Не вдалося видалити ярлик", + "clearedAllRecentFiles": "Очищено всі нещодавні файли", + "clearFailed": "Очистити не вдалося", + "removeFromRecentFiles": "Видалити з останніх файлів", + "clearAllRecentFiles": "Очистити всі нещодавні файли", + "unpinFile": "Відкріпити файл", + "removeShortcut": "Видалити ярлик", + "pinFile": "Закріпити файл", + "addToShortcuts": "Додати до ярликів", + "pasteFailed": "Вставити не вдалося", + "noUndoableActions": "Немає дій, які можна скасувати", + "undoCopySuccess": "Скасовано копіювання: Видалено {{count}} скопійованих файлів", + "undoCopyFailedDelete": "Не вдалося скасувати: не вдалося видалити жодного скопійованого файлу", + "undoCopyFailedNoInfo": "Не вдалося скасувати: не вдалося знайти інформацію про скопійований файл", + "undoMoveSuccess": "Скасовано операцію переміщення: {{count}} файлів переміщено назад у початкове розташування", + "undoMoveFailedMove": "Не вдалося скасувати: не вдалося перемістити жодного файлу назад", + "undoMoveFailedNoInfo": "Не вдалося скасувати: не вдалося знайти інформацію про переміщений файл", + "undoDeleteNotSupported": "Операцію видалення неможливо скасувати: файли остаточно видалено із сервера", + "undoTypeNotSupported": "Непідтримуваний тип операції скасування", + "undoOperationFailed": "Не вдалося скасувати операцію", + "unknownError": "Невідома помилка", + "confirm": "Підтвердити", + "find": "Знайти...", + "replace": "Замінити", + "downloadInstead": "Завантажити замість цього", + "keyboardShortcuts": "Комбінації клавіш", + "searchAndReplace": "Пошук і заміна", + "editing": "Редагування", + "search": "Пошук", + "findNext": "Знайти далі", + "findPrevious": "Знайти попередній", + "save": "Зберегти", + "selectAll": "Вибрати все", + "undo": "Скасувати", + "redo": "Повторити", + "moveLineUp": "Перемістити лінію вгору", + "moveLineDown": "Перемістити рядок вниз", + "toggleComment": "Перемикач коментарів", + "autoComplete": "Автоматичне завершення", + "imageLoadError": "Не вдалося завантажити зображення", + "startTyping": "Почніть друкувати...", + "unknownSize": "Невідомий розмір", + "fileIsEmpty": "Файл порожній", + "largeFileWarning": "Попередження про великий файл", + "largeFileWarningDesc": "Розмір цього файлу становить {{size}} , що може спричинити проблеми з продуктивністю під час відкриття його як тексту.", + "fileNotFoundAndRemoved": "Файл «{{name}}» не знайдено та видалено з нещодавніх/закріплених файлів", + "failedToLoadFile": "Не вдалося завантажити файл: {{error}}", + "serverErrorOccurred": "Сталася помилка сервера. Будь ласка, спробуйте пізніше.", + "autoSaveFailed": "Не вдалося автоматично зберегти", + "fileAutoSaved": "Файл автоматично збережено", + "moveFileFailed": "Не вдалося перемістити {{name}}", + "moveOperationFailed": "Не вдалося перемістити", + "canOnlyCompareFiles": "Можна порівняти лише два файли", + "comparingFiles": "Порівняння файлів: {{file1}} та {{file2}}", + "dragFailed": "Не вдалося перетягнути", + "filePinnedSuccessfully": "Файл «{{name}}» успішно закріплено", + "pinFileFailed": "Не вдалося закріпити файл", + "fileUnpinnedSuccessfully": "Файл «{{name}}» успішно відкріплено", + "unpinFileFailed": "Не вдалося відкріпити файл", + "shortcutAddedSuccessfully": "Ярлик папки «{{name}}» успішно додано", + "addShortcutFailed": "Не вдалося додати ярлик", + "operationCompletedSuccessfully": "{{operation}} {{count}} елементів успішно", + "operationCompleted": "{{operation}} {{count}} елементів", + "downloadFileSuccess": "Файл {{name}} успішно завантажено", + "downloadFileFailed": "Завантаження не вдалося", + "downloadingFile": "Завантаження {{name}}…", "downloadProgressBytes": "{{transferred}} / {{total}}", - "moveTo": "Move to {{name}}", - "diffCompareWith": "Diff compare with {{name}}", - "dragOutsideToDownload": "Drag outside window to download ({{count}} files)", - "newFolderDefault": "NewFolder", - "newFileDefault": "NewFile.txt", - "successfullyMovedItems": "Successfully moved {{count}} items to {{target}}", - "move": "Move", - "searchInFile": "Search in file (Ctrl+F)", - "showKeyboardShortcuts": "Show keyboard shortcuts", - "decreaseFontSize": "Decrease font size", - "increaseFontSize": "Increase font size", - "startWritingMarkdown": "Start writing your markdown content...", - "loadingFileComparison": "Loading file comparison...", - "reload": "Reload", - "compare": "Compare", - "sideBySide": "Side by Side", - "inline": "Inline", - "fileComparison": "File Comparison: {{file1}} vs {{file2}}", - "fileTooLarge": "File too large: {{error}}", - "sshConnectionFailed": "SSH connection failed. Please check your connection to {{name}} ({{ip}}:{{port}})", - "loadFileFailed": "Failed to load file: {{error}}", - "connecting": "Connecting...", - "connectedSuccessfully": "Connected successfully", - "totpVerificationFailed": "TOTP verification failed", - "browserSignInFailed": "Sign-in failed. Please try again.", - "authenticationFailed": "Authentication failed", - "incorrectPassphrase": "Incorrect passphrase. Please try again.", - "verificationCodePrompt": "Verification code:", - "changePermissions": "Change Permissions", - "currentPermissions": "Current Permissions", - "owner": "Owner", - "group": "Group", - "others": "Others", - "read": "Read", - "write": "Write", - "execute": "Execute", - "permissionsChangedSuccessfully": "Permissions changed successfully", - "failedToChangePermissions": "Failed to change permissions", - "name": "Name", - "sortByName": "Name", - "sortByDate": "Date Modified", - "sortBySize": "Size", - "ascending": "Ascending", - "descending": "Descending", - "root": "Root", - "new": "New", - "sortBy": "Sort By", - "items": "Items", - "selected": "Selected", - "editor": "Editor", - "octal": "Octal", - "storage": "Storage", - "disk": "Disk", - "used": "Used", - "of": "of", - "toggleSidebar": "Toggle Sidebar", - "compactLayout": "Use compact layout", - "comfortableLayout": "Use comfortable layout", - "cannotLoadPdf": "Cannot load PDF", - "pdfLoadError": "There was an error loading this PDF file.", - "loadingPdf": "Loading PDF...", - "loadingPage": "Loading page...", - "cancel": "Cancel", - "copiedItems_one": "Copied {{count}} item", - "copiedItems_other": "Copied {{count}} items", - "deleteCopiedFileFailed": "Could not delete the copy of {{name}}: {{error}}", - "dragMovedItems_one": "Moved {{count}} item to {{target}}", - "dragMovedItems_other": "Moved {{count}} items to {{target}}", - "moveBackFileFailed": "Could not move {{name}} back: {{error}}", - "terminal": "Terminal: {{host}} ({{path}})", - "dragToDesktop": "Dragging {{name}} to the desktop", - "dragFilesToDesktop": "Dragging {{count}} files to the desktop", - "folderDragUnsupported": "Dragging folders to the desktop is not supported yet", - "saveToDesktopFailed": "Save failed: {{error}}", - "dragFailedDetail": "Drag failed: {{error}}", - "videoUnsupported": "Your browser cannot play this video format.", - "downloadToPlay": "Download to play it elsewhere", - "cannotPreviewType": "Cannot preview this file type", - "cannotPreviewTypeHint": "This file type has no preview. Download it to open it in another app." + "moveTo": "Перейти до {{name}}", + "diffCompareWith": "Різниця у порівнянні з {{name}}", + "dragOutsideToDownload": "Перетягніть за межі вікна, щоб завантажити ({{count}} файлів)", + "newFolderDefault": "НоваПапка", + "newFileDefault": "НовийФайл.txt", + "successfullyMovedItems": "Елементів {{count}} успішно переміщено до {{target}}", + "move": "Перемістити", + "searchInFile": "Пошук у файлі (Ctrl+F)", + "showKeyboardShortcuts": "Показати комбінації клавіш", + "decreaseFontSize": "Зменшити розмір шрифту", + "increaseFontSize": "Збільшити розмір шрифту", + "startWritingMarkdown": "Почніть писати свій контент у форматі Markdown...", + "loadingFileComparison": "Завантаження порівняння файлів...", + "reload": "Перезавантажити", + "compare": "Порівняти", + "sideBySide": "Пліч-о-пліч", + "inline": "Вбудований", + "fileComparison": "Порівняння файлів: {{file1}} проти {{file2}}", + "fileTooLarge": "File is too large (> 10MB) and cannot be opened as text for security reasons.", + "sshConnectionFailed": "Помилка SSH-з’єднання. Будь ласка, перевірте ваше з’єднання з {{name}} ({{ip}}:{{port}})", + "loadFileFailed": "Не вдалося завантажити файл: {{error}}", + "connecting": "Підключення...", + "connectedSuccessfully": "Підключено успішно", + "totpVerificationFailed": "Не вдалося перевірити TOTP", + "browserSignInFailed": "Не вдалося ввійти. Спробуйте ще раз.", + "authenticationFailed": "Помилка автентифікації", + "incorrectPassphrase": "Неправильна парольна фраза. Спробуйте ще раз.", + "verificationCodePrompt": "Код підтвердження:", + "changePermissions": "Змінити дозволи", + "currentPermissions": "Поточні дозволи", + "owner": "Власник", + "group": "Група", + "others": "Інші", + "read": "Читати", + "write": "Написати", + "execute": "Виконати", + "permissionsChangedSuccessfully": "Дозволи успішно змінено", + "failedToChangePermissions": "Не вдалося змінити дозволи", + "name": "Ім'я", + "sortByName": "Ім'я", + "sortByDate": "Дата зміни", + "sortBySize": "Розмір", + "ascending": "Зростаючий", + "descending": "Спадання", + "root": "Корінь", + "new": "Новий", + "sortBy": "Сортувати за", + "items": "Елементи", + "selected": "Вибрано", + "editor": "Редактор", + "octal": "Вісімкове", + "storage": "Зберігання", + "disk": "Диск", + "used": "Використано", + "of": "з", + "toggleSidebar": "Перемикання бічної панелі", + "compactLayout": "Використовуйте компактний макет", + "comfortableLayout": "Використовуйте зручний макет", + "cannotLoadPdf": "Не вдається завантажити PDF", + "pdfLoadError": "Під час завантаження цього PDF-файлу сталася помилка.", + "loadingPdf": "Loading PDF viewer...", + "loadingPage": "Завантаження сторінки...", + "cancel": "Скасувати", + "copiedItems_one": "Скопійовано елемент {{count}}", + "copiedItems_other": "Скопійовано {{count}} елементів", + "deleteCopiedFileFailed": "Не вдалося видалити копію {{name}}: {{error}}", + "dragMovedItems_one": "Переміщено елемент {{count}} до {{target}}", + "dragMovedItems_other": "Переміщено {{count}} елементів до {{target}}", + "moveBackFileFailed": "Не вдалося перемістити {{name}} назад: {{error}}", + "terminal": "Термінал: {{host}} ({{path}})", + "dragToDesktop": "Перетягування {{name}} на робочий стіл", + "dragFilesToDesktop": "Перетягування файлів {{count}} на робочий стіл", + "folderDragUnsupported": "Перетягування папок на робочий стіл поки що не підтримується", + "saveToDesktopFailed": "Не вдалося зберегти: {{error}}", + "dragFailedDetail": "Не вдалося перетягнути: {{error}}", + "videoUnsupported": "Ваш браузер не може відтворити цей відеоформат.", + "downloadToPlay": "Завантажте, щоб відтворити деінде", + "cannotPreviewType": "Неможливо переглянути цей тип файлу", + "cannotPreviewTypeHint": "Цей тип файлу не має попереднього перегляду. Завантажте його, щоб відкрити в іншій програмі.", + "loadingFile": "Loading file...", + "loadingImage": "Loading image...", + "loadingEditor": "Loading editor...", + "loadingPreview": "Loading preview...", + "loadingAudio": "Loading audio player...", + "emptyPreview": "Nothing to preview yet...", + "revert": "Revert", + "openAsText": "Open as Text", + "confirmOpenAsText": "Do you want to continue opening this file as text? This may slow down your browser." }, "sftpTransfer": { "title": "SFTP", - "description": "Transfer files between two SSH hosts.", - "sourceServer": "Source Server", - "destinationServer": "Destination Server", - "selectHost": "Select host", - "noHostSelected": "No host selected", - "move": "Move", - "copy": "Copy", - "upload": "Upload", - "itemsSelected": "{{count}} item selected", - "itemsSelected_other": "{{count}} items selected", - "ready": "Ready", - "loadingHosts": "Loading hosts...", - "name": "Name", - "modified": "Modified", - "size": "Size", - "noFiles": "No files", - "open": "Open", - "up": "Up", - "refresh": "Refresh", - "copyToTarget": "Copy to Target Directory", - "rename": "Rename", - "delete": "Delete", - "editPermissions": "Edit Permissions", - "createNewFolder": "Create New Folder", - "deleteSelectedItems": "Delete Selected Items", - "deleteConfirm": "Delete {{count}} selected item?", - "deleteConfirm_other": "Delete {{count}} selected items?", - "cancel": "Cancel", - "save": "Save", - "folderCreated": "Folder created", - "itemRenamed": "Item renamed", - "actionFailed": "Action failed", - "itemsDeleted": "{{count}} item deleted", - "itemsDeleted_other": "{{count}} items deleted", - "deleteFailed": "Delete failed", - "permissionsUpdated": "Permissions updated", - "noRemoteSessionConnected": "No remote session connected", - "failedToListFiles": "Failed to list files", - "failedToRefresh": "Failed to refresh", - "destinationInsideSource": "Destination cannot be inside the selected source path.", - "sameHostNoOp": "Source and destination are the same folder." + "description": "Передача файлів між двома SSH-хостами.", + "sourceServer": "Вихідний сервер", + "destinationServer": "Цільовий сервер", + "selectHost": "Виберіть хоста", + "noHostSelected": "Хост не вибрано", + "move": "Перемістити", + "copy": "Копіювати", + "upload": "Завантажити", + "itemsSelected": "Вибрано елемент {{count}}", + "itemsSelected_other": "Вибрано {{count}} елементів", + "ready": "Готовий", + "loadingHosts": "Завантаження хостів...", + "name": "Ім'я", + "modified": "Змінено", + "size": "Розмір", + "noFiles": "Немає файлів", + "open": "ВІДЧИНЕНО", + "up": "Вгору", + "refresh": "Оновити", + "copyToTarget": "Копіювати до цільового каталогу", + "rename": "Перейменувати", + "delete": "Видалити", + "editPermissions": "Редагувати дозволи", + "createNewFolder": "Створити нову папку", + "deleteSelectedItems": "Видалити вибрані елементи", + "deleteConfirm": "Видалити {{count}} вибраний елемент?", + "deleteConfirm_other": "Видалити {{count}} вибраних елементів?", + "cancel": "Скасувати", + "save": "Зберегти", + "folderCreated": "Папку створено", + "itemRenamed": "Елемент перейменовано", + "actionFailed": "Дія не вдалася", + "itemsDeleted": "{{count}} елемент видалено", + "itemsDeleted_other": "{{count}} елементів видалено", + "deleteFailed": "Видалити не вдалося", + "permissionsUpdated": "Дозволи оновлено", + "noRemoteSessionConnected": "Немає підключеного віддаленого сеансу", + "failedToListFiles": "Не вдалося переглянути файли", + "failedToRefresh": "Не вдалося оновити", + "destinationInsideSource": "Пункт призначення не може бути всередині вибраного вихідного шляху.", + "sameHostNoOp": "Джерело та призначення – це одна й та сама папка." }, "hosts": { - "fileManager": "File Manager", - "fileManagerUrlCopied": "File Manager URL copied", - "copyFileManagerUrlAction": "Copy File Manager URL", - "docsLink": "View docs", - "hostNotFound": "Host not found", - "loadingHost": "Loading host..." + "fileManager": "Файловий менеджер", + "fileManagerUrlCopied": "URL-адресу файлового менеджера скопійовано", + "copyFileManagerUrlAction": "Копіювати URL-адресу файлового менеджера", + "docsLink": "Переглянути документи", + "hostNotFound": "Хост не знайдено", + "loadingHost": "Завантаження хоста..." }, "onboarding": { - "feature_files": "File manager", - "feature_files_desc": "Browse, upload, download and edit files over SFTP without leaving the app." + "feature_files": "Файловий менеджер", + "feature_files_desc": "Переглядайте, завантажуйте, вивантажуйте та редагуйте файли через SFTP, не виходячи з програми." }, "terminal": { - "runTitle": "Running {{command}} - {{host}}", - "terminalTitle": "Terminal - {{host}}", - "terminalWithPath": "Terminal - {{host}}:{{path}}" + "runTitle": "Запуск {{command}} - {{host}}", + "terminalTitle": "Термінал - {{host}}", + "terminalWithPath": "Термінал - {{host}}:{{path}}" }, "transfer": { - "browseFolders": "Browse destination folders", - "browsePathError": "Could not open this path on the destination host.", - "browsePathWillBeCreated": "This folder does not exist yet. It will be created when the transfer starts.", - "cancel": "Cancel", - "cleanupDestFiles": "Clean up destination", - "cleanupDestFilesError": "Cleanup failed", - "cleanupDestFilesNothing": "Nothing to clean up on the destination", - "cleanupDestFilesPartial": "Some partial files could not be removed", - "cleanupDestFilesSuccess": "Removed partial files from the destination", - "confirmCopy": "Copy", - "confirmMove": "Move", - "copyFolderToHost": "Copy folder to host…", - "copyItemsToHost": "Copy {{count}} items to host…", - "copyToHost": "Copy to host…", - "destinationPath": "Destination path", - "destMustBeDirectory": "Destination must be a directory for multi-item transfers", - "goUp": "Go up", - "hostAuthRequired": "Authentication required. Open File Manager on this host first", - "hostConnecting": "Connecting…", - "hostConnectionFailed": "Connection failed", - "hostDisconnected": "Not connected", - "hostReady": "Ready", - "itemsSummary": "{{count}} items", - "jumpHostLimitation": "Both hosts must be reachable from the Termix server. Direct host-to-host routing is not supported.", - "methodAuto": "Auto", - "methodAutoHint": "Picks tar or per-file SFTP based on file count, size, and compressibility. Single files always use streaming SFTP.", - "methodItemSftp": "Per-file SFTP", - "methodItemSftpHint": "Transfer each file individually over SFTP. Works on all hosts including Windows.", - "methodItemSftpLimitation": "Each file uses the same SFTP stream as a single-file copy, one after another. Progress is combined across all files, so the bar moves slowly during large files.", - "methodLabel": "Transfer method", - "methodPreviewError": "Could not preview transfer method. The server will still pick a method when you start.", - "methodPreviewLoading": "Calculating transfer method…", - "methodPreviewScanSummary": "{{fileCount}} files, {{totalSize}} total (scanned on source host).", - "methodPreviewWillUseItemSftp": "Will use: Per-file SFTP", - "methodPreviewWillUseTar": "Will use: Tar archive", + "browseFolders": "Перегляд папок призначення", + "browsePathError": "Не вдалося відкрити цей шлях на хості призначення.", + "browsePathWillBeCreated": "Цієї папки ще не існує. Вона буде створена, коли розпочнеться передача.", + "cancel": "Скасувати", + "cleanupDestFiles": "Прибирання місця призначення", + "cleanupDestFilesError": "Очищення не вдалося", + "cleanupDestFilesNothing": "Нічого прибирати на місці призначення", + "cleanupDestFilesPartial": "Не вдалося видалити деякі часткові файли", + "cleanupDestFilesSuccess": "Видалено часткові файли з місця призначення", + "confirmCopy": "Копіювати", + "confirmMove": "Перемістити", + "copyFolderToHost": "Копіювати папку на хост…", + "copyItemsToHost": "Копіювати елементи {{count}} для розміщення…", + "copyToHost": "Копіювати на хост…", + "destinationPath": "Шлях призначення", + "destMustBeDirectory": "Для перенесення кількох елементів місцем призначення має бути каталог", + "goUp": "Піднімися", + "hostAuthRequired": "Потрібна автентифікація. Спочатку відкрийте файловий менеджер на цьому хості.", + "hostConnecting": "Підключення…", + "hostConnectionFailed": "Помилка підключення", + "hostDisconnected": "Не підключено", + "hostReady": "Готовий", + "itemsSummary": "{{count}} елементів", + "jumpHostLimitation": "Обидва хости мають бути доступні з сервера Termix. Пряма маршрутизація між хостами не підтримується.", + "methodAuto": "Авто", + "methodAutoHint": "Вибирає tar-файл або SFTP для кожного файлу на основі кількості файлів, розміру та стискальності. Окремі файли завжди використовують потоковий SFTP.", + "methodItemSftp": "SFTP для кожного файлу", + "methodItemSftpHint": "Передавайте кожен файл окремо через SFTP. Працює на всіх хостах, включаючи Windows.", + "methodItemSftpLimitation": "Кожен файл використовує той самий потік SFTP, що й копія окремого файлу, послідовно. Прогрес об'єднується для всіх файлів, тому шкала рухається повільно під час роботи з великими файлами.", + "methodLabel": "Спосіб переказу", + "methodPreviewError": "Не вдалося переглянути метод передачі. Сервер все одно вибере метод під час запуску.", + "methodPreviewLoading": "Розрахунок методу переказу…", + "methodPreviewScanSummary": "{{fileCount}} файлів, {{totalSize}} всього (проскановано на вихідному хості).", + "methodPreviewWillUseItemSftp": "Буде використовуватися: SFTP для кожного файлу", + "methodPreviewWillUseTar": "Буде використано: архів Tar", "methodReason": { - "user_item_sftp": "You chose per-file SFTP.", - "user_tar": "You chose tar archive.", - "tar_unavailable": "Tar is not available on one or both hosts, so per-file SFTP will be used instead.", - "windows_host": "A Windows host is involved, so tar is not used.", - "auto_multi_large": "Auto: multiple files including a large file ({{largestSize}}) with compressible data. Tar bundles them into one transfer.", - "auto_single_large_in_archive": "Auto: one large file ({{largestSize}}) in this set, so per-file SFTP.", - "auto_many_incompressible": "Auto: mostly incompressible data, so per-file SFTP.", - "auto_many_files": "Auto: many files ({{fileCount}}), tar cuts the per-file overhead.", - "auto_default": "Auto: per-file SFTP for this set." + "user_item_sftp": "Ви обрали SFTP для кожного файлу.", + "user_tar": "Ви обрали tar-архів.", + "tar_unavailable": "Архів TAR недоступний на одному або обох хостах, тому замість нього буде використовуватися SFTP для кожного файлу.", + "windows_host": "Задіяний хост Windows, тому tar не використовується.", + "auto_multi_large": "Авто: кілька файлів, включаючи великий файл ({{largestSize}}) зі стислими даними. Tar об'єднує їх в одну передачу.", + "auto_single_large_in_archive": "Авто: один великий файл ({{largestSize}}) у цьому наборі, тому SFTP для кожного файлу.", + "auto_many_incompressible": "Авто: переважно нестисливі дані, тому SFTP для кожного файлу.", + "auto_many_files": "Авто: багато файлів ({{fileCount}}), tar зменшує накладні витрати на кожен файл.", + "auto_default": "Авто: SFTP для кожного файлу для цього набору." }, - "methodTar": "Tar archive", - "methodTarHint": "Compress on source, transfer one archive, extract on destination. Requires tar on both Unix hosts.", - "metricsCompress": "Compress on source: {{duration}}", - "metricsExtract": "Extract on destination: {{duration}}", - "metricsPrepare": "Prepare destination: {{duration}}", - "metricsRouteBenchmark": "Route probe: direct {{direct}}, relay {{relay}}", - "metricsSourceDelete": "Remove from source: {{duration}}", - "metricsTotal": "Total: {{duration}}", - "metricsTransfer": "End-to-end: {{throughput}} ({{duration}})", - "metricsVerify": "SHA-256 verified: {{duration}}", - "moveFolderToHost": "Move folder to host…", - "moveItemsToHost": "Move {{count}} items to host…", - "moveToHost": "Move to host…", - "noHostsConnected": "No other file-manager hosts available.", - "noHostsConnectedHint": "Add another SSH host with File Manager enabled in Host Manager.", - "parallelSegmentsHint": "Large files are split into 256 MB chunks. Multiple lanes use separate connections (like starting several transfers) for higher total throughput.", - "parallelSegmentsLabel": "Parallel transfer lanes", - "parallelSegmentsOption": "{{count}} lanes", - "progressBenchmarking": "Selecting the fastest transfer route…", + "methodTar": "Архів Tar", + "methodTarHint": "Стиснення у вихідному коді, перенесення одного архіву, розпакування у кінцевому. Потрібен tar-архів на обох хостах Unix.", + "metricsCompress": "Стиснути у вихідному коді: {{duration}}", + "metricsExtract": "Вилучити в місці призначення: {{duration}}", + "metricsPrepare": "Підготувати пункт призначення: {{duration}}", + "metricsRouteBenchmark": "Зонд маршруту: прямий {{direct}}, ретрансляційний {{relay}}", + "metricsSourceDelete": "Видалити з джерела: {{duration}}", + "metricsTotal": "Всього: {{duration}}", + "metricsTransfer": "Від кінця до кінця: {{throughput}} ({{duration}})", + "metricsVerify": "SHA-256 перевірено: {{duration}}", + "moveFolderToHost": "Перемістити папку на хост…", + "moveItemsToHost": "Перемістити {{count}} елементів на хост…", + "moveToHost": "Перемістити на хост…", + "noHostsConnected": "Інших хостів файлових менеджерів немає.", + "noHostsConnectedHint": "Додайте ще один SSH-хост з увімкненим файловим менеджером у Host Manager.", + "parallelSegmentsHint": "Великі файли розділяються на фрагменти по 256 МБ. Кілька ліній використовують окремі з’єднання (наприклад, запуск кількох передач) для підвищення загальної пропускної здатності.", + "parallelSegmentsLabel": "Паралельні пересадочні смуги", + "parallelSegmentsOption": "{{count}} смуги", + "progressBenchmarking": "Вибір найшвидшого маршруту пересадки…", "progressBytes": "{{transferred}} / {{total}}", - "progressCancel": "Cancel", - "progressCancelling": "Cancelling…", - "progressCompressing": "Compressing on source host…", - "progressExtracting": "Extracting on destination…", - "progressItems": "{{current}} / {{total}} files", - "progressReconnecting": "Reconnecting…", - "progressStalled": "Stalled", - "progressTotalSpeed": "{{speed}} total ({{lanes}} lanes)", - "progressTransferring": "Transferring data…", - "progressTransferringItems": "Transferring files ({{current}} of {{total}})…", - "progressVerifying": "Verifying file integrity…", - "recentDestinations": "Recent destinations", - "resumedHint": "Reconnected to an active transfer started in another window.", - "retryTransfer": "Retry", - "retryTransferError": "Retry failed", - "selectDestinationHost": "Select destination host", - "transferCancelled": "Transfer cancelled", - "transferCancelledCopyHint": "Partial files may remain on the destination.", - "transferCancelledMoveHint": "Partial files may remain on the destination. Source files were not removed.", - "transferError": "Transfer failed", - "transferFailedRetryHint": "Partial data was kept on the destination. Retry will resume when the connection is back.", - "transferPartialHint": "Could not transfer: {{paths}}", - "transferSuccess": "Transfer complete", - "metricsHopSourceRead": "Source → server: {{throughput}}", - "metricsHopDestSftpWrite": "Server → dest (SFTP): {{throughput}}", - "metricsHopDestLocalWrite": "Server → dest (local): {{throughput}}" + "progressCancel": "Скасувати", + "progressCancelling": "Скасування…", + "progressCompressing": "Стиснення на вихідному хості…", + "progressExtracting": "Видобування в місці призначення…", + "progressItems": "{{current}} / {{total}} файли", + "progressReconnecting": "Повторне підключення…", + "progressStalled": "Зупинився", + "progressTotalSpeed": "{{speed}} всього ({{lanes}} смуг)", + "progressTransferring": "Передача даних…", + "progressTransferringItems": "Передача файлів ({{current}} з {{total}})…", + "progressVerifying": "Перевірка цілісності файлу…", + "recentDestinations": "Нещодавні напрямки", + "resumedHint": "Повторне підключення до активної передачі, розпочатої в іншому вікні.", + "retryTransfer": "Повторити спробу", + "retryTransferError": "Повторна спроба не вдалася", + "selectDestinationHost": "Виберіть хост призначення", + "transferCancelled": "Переказ скасовано", + "transferCancelledCopyHint": "Часткові файли можуть залишатися на місці призначення.", + "transferCancelledMoveHint": "Часткові файли можуть залишатися в місці призначення. Вихідні файли не видалено.", + "transferError": "Передача не вдалася", + "transferFailedRetryHint": "На місці призначення збережено частку даних. Повторна спроба відновиться після відновлення з’єднання.", + "transferPartialHint": "Не вдалося перенести: {{paths}}", + "transferSuccess": "Перенесення завершено", + "metricsHopSourceRead": "Джерело → сервер: {{throughput}}", + "metricsHopDestSftpWrite": "Сервер → призначення (SFTP): {{throughput}}", + "metricsHopDestLocalWrite": "Сервер → призначення (локальний): {{throughput}}" + }, + "plugin": { + "name": "File Manager" } } diff --git a/plugins/file-manager/locales/translated/vi_VN.json b/plugins/file-manager/locales/translated/vi_VN.json index 5af3813c6..83912eb68 100644 --- a/plugins/file-manager/locales/translated/vi_VN.json +++ b/plugins/file-manager/locales/translated/vi_VN.json @@ -6,15 +6,15 @@ }, "permissions": { "use": { - "title": "Use file manager", - "description": "Browse, edit and transfer files over SFTP." + "title": "Sử dụng trình quản lý tệp", + "description": "Duyệt, chỉnh sửa và chuyển file qua SFTP." } }, "settings": { "host": { "enable": { "label": "Bật Trình quản lý tập tin", - "description": "Browse and edit files on this host over SFTP." + "description": "Duyệt và chỉnh sửa tệp trên máy chủ này qua SFTP." }, "defaultPath": { "label": "Đường dẫn mặc định" @@ -25,12 +25,12 @@ }, "user": { "transferConcurrency": { - "label": "Simultaneous File Transfers", - "description": "How many files the side by side local/remote manager uploads or downloads at the same time. Lower this if your server limits SFTP channels." + "label": "Truyền tệp đồng thời", + "description": "Số lượng tệp mà trình quản lý cục bộ/từ xa song song tải lên hoặc tải xuống cùng lúc. Giảm giá trị này nếu máy chủ của bạn giới hạn số kênh SFTP." }, "confirmBeforeTrash": { - "label": "Confirm before moving files to trash", - "description": "Ask before moving remote files to trash. Permanent deletion still requires confirmation." + "label": "Xác nhận trước khi chuyển tập tin vào thùng rác.", + "description": "Hãy hỏi ý kiến trước khi chuyển các tệp từ xa vào thùng rác. Việc xóa vĩnh viễn vẫn cần sự xác nhận." } } }, @@ -72,14 +72,14 @@ "rename": "Đổi tên", "uploading": "Đang tải lên...", "uploadingFile": "Đang tải lên {{name}}...", - "uploadingChunk": "Uploading {{name}}: {{percent}}% (part {{chunk}} of {{total}})", + "uploadingChunk": "Đang tải lên {{name}}: {{percent}}% (một phần của {{chunk}} của {{total}})", "fileName": "Tên tập tin", "folderName": "Tên thư mục", "fileUploadedSuccessfully": "Tập tin \"{{name}}\" đã được tải lên thành công", "failedToUploadFile": "Tải tập tin lên thất bại", - "uploadingFolderFiles": "Uploading {{count}} file(s)...", - "uploadedFolderFiles": "Uploaded {{count}} file(s) successfully", - "uploadedFolderPartial": "Uploaded {{uploaded}} file(s), {{failed}} failed", + "uploadingFolderFiles": "Đang tải lên {{count}} tập tin...", + "uploadedFolderFiles": "Đã tải lên {{count}} tập tin thành công", + "uploadedFolderPartial": "Đã tải lên {{uploaded}} tập tin, {{failed}} thất bại", "fileDownloadedSuccessfully": "Tập tin \"{{name}}\" đã được tải xuống thành công", "failedToDownloadFile": "Tải tập tin xuống thất bại", "fileCreatedSuccessfully": "Tập tin \"{{name}}\" đã được tạo thành công", @@ -95,58 +95,58 @@ "sudoOperationFailed": "Thao tác sudo thất bại", "sudoAuthFailed": "Xác thực sudo thất bại", "dragFilesToUpload": "Kéo tệp vào đây để tải lên", - "dropToUploadHere": "Drop to upload here", - "dropToDownloadHere": "Drop to download here", + "dropToUploadHere": "Kéo thả để tải lên tại đây", + "dropToDownloadHere": "Kéo thả để tải xuống tại đây", "localFiles": "Cục bộ", - "showLocalFiles": "Show local files (split view)", - "hideLocalFiles": "Hide local files", - "localHome": "Home folder", - "localPathPlaceholder": "Local folder path", - "localShowHidden": "Show hidden files", - "localHideHidden": "Hide hidden files", - "localRevealInFileManager": "Reveal in system file manager", - "localCannotOpenFolder": "Cannot open folder", + "showLocalFiles": "Hiển thị các tệp cục bộ (chế độ chia đôi màn hình)", + "hideLocalFiles": "Ẩn các tệp cục bộ", + "localHome": "Thư mục trang chủ", + "localPathPlaceholder": "Đường dẫn thư mục cục bộ", + "localShowHidden": "Hiển thị các tệp ẩn", + "localHideHidden": "Ẩn các tệp tin ẩn", + "localRevealInFileManager": "Hiển thị trong trình quản lý tệp hệ thống", + "localCannotOpenFolder": "Không thể mở thư mục", "localItemCount": "{{count}} mục", "localSelectedCount": "{{count}} đã chọn", "back": "Quay lại", - "forward": "Forward", - "up": "Up", - "kind": "Kind", - "localUploadingProgress": "Uploading {{current}} of {{total}}", - "localDownloadingProgress": "Downloading {{current}} of {{total}}", - "localTransferInFlight": "{{count}} at once", - "localPreparingDownload": "Preparing download...", + "forward": "Phía trước", + "up": "Hướng lên", + "kind": "Loại", + "localUploadingProgress": "Đang tải lên {{current}} trong số {{total}}", + "localDownloadingProgress": "Đang tải xuống {{current}} của {{total}}", + "localTransferInFlight": "{{count}} ngay lập tức", + "localPreparingDownload": "Đang chuẩn bị tải xuống...", "localTransferCancelled": "Đã hủy chuyển", - "localNothingToTransfer": "Nothing to transfer", - "localUploadComplete": "Uploaded {{count}} file(s)", - "localUploadFailed": "Upload failed", - "localUploadPartial": "Uploaded {{done}} file(s), {{failed}} failed", - "localDownloadComplete": "Downloaded {{count}} file(s)", + "localNothingToTransfer": "Không có gì để chuyển", + "localUploadComplete": "Đã tải lên {{count}} tập tin", + "localUploadFailed": "Tải lên thất bại", + "localUploadPartial": "Đã tải lên {{done}} tập tin, {{failed}} thất bại", + "localDownloadComplete": "Đã tải xuống {{count}} tập tin", "localDownloadFailed": "Tải xuống thất bại", - "localDownloadPartial": "Downloaded {{done}} file(s), {{failed}} failed", - "localReplaceExistingPrompt": "{{count}} item(s) already exist in this folder. Replace them?", + "localDownloadPartial": "Đã tải xuống {{done}} tập tin, {{failed}} thất bại", + "localReplaceExistingPrompt": "{{count}} mục đã tồn tại trong thư mục này. Bạn có muốn thay thế chúng không?", "localReplace": "Thay thế", - "localSkipExisting": "Skip", - "localSkippedExisting": "Skipped {{count}} existing item(s)", - "localUnsafeNamesSkipped": "Skipped {{count}} item(s) whose names cannot be used on this computer", + "localSkipExisting": "Nhảy", + "localSkippedExisting": "Đã bỏ qua {{count}} mục hiện có", + "localUnsafeNamesSkipped": "Đã bỏ qua {{count}} mục có tên không thể sử dụng trên máy tính này", "localOpen": "Mở", - "localOpenFolder": "Open folder", - "localUploadToRemote": "Upload to server", - "localUploadToRemoteMany": "Upload {{count}} items to server", - "localMoveToTrash": "Move to Trash", - "localMoveToTrashMany": "Move {{count}} items to Trash", - "localTrashConfirmSingle": "Move \"{{name}}\" to the Trash?", - "localTrashConfirmFolder": "Move the folder \"{{name}}\" and all its contents to the Trash?", - "localTrashConfirmMany": "Move {{count}} items to the Trash?", - "localTrashed": "Moved {{count}} item(s) to the Trash", - "localTrashFailed": "Could not move to the Trash", - "localRenameFailed": "Rename failed", - "localCreateFailed": "Could not create item", - "goToParentFolder": "Go to parent folder", - "resizeSidebar": "Drag to resize the sidebar (double-click to reset)", - "resizeLocalPane": "Drag to resize the local pane (double-click to reset)", + "localOpenFolder": "Mở thư mục", + "localUploadToRemote": "Tải lên máy chủ", + "localUploadToRemoteMany": "Tải lên {{count}} mục lên máy chủ", + "localMoveToTrash": "Chuyển vào thùng rác", + "localMoveToTrashMany": "Di chuyển {{count}} mục vào Thùng rác", + "localTrashConfirmSingle": "Di chuyển \"{{name}}\" vào Thùng rác?", + "localTrashConfirmFolder": "Di chuyển thư mục \"{{name}}\" và tất cả nội dung bên trong vào Thùng rác?", + "localTrashConfirmMany": "Di chuyển {{count}} mục vào Thùng rác?", + "localTrashed": "Đã chuyển {{count}} mục vào Thùng rác", + "localTrashFailed": "Không thể chuyển vào Thùng rác", + "localRenameFailed": "Đổi tên không thành công", + "localCreateFailed": "Không thể tạo mục", + "goToParentFolder": "Đi đến thư mục cha", + "resizeSidebar": "Kéo để thay đổi kích thước thanh bên (nhấp đúp để đặt lại về kích thước ban đầu)", + "resizeLocalPane": "Kéo chuột để thay đổi kích thước khung cục bộ (nhấp đúp chuột để đặt lại về kích thước ban đầu)", "columns": "Cột", - "columnsHint": "Right-click to choose columns", + "columnsHint": "Nhấp chuột phải để chọn cột", "emptyFolder": "Thư mục này trống", "searchFiles": "Tìm kiếm tệp...", "upload": "Tải lên", @@ -202,26 +202,26 @@ "confirmDeleteMultipleItemsWithFolders": "Bạn có chắc chắn muốn xóa vĩnh viễn {{count}} mục? Điều này bao gồm các thư mục và nội dung của chúng.", "confirmDeleteFolder": "Bạn có chắc chắn muốn xóa vĩnh viễn thư mục \"{{name}}\" và tất cả nội dung của nó?", "permanentDeleteWarning": "Hành động này không thể hoàn tác. (Các) mục sẽ bị xóa vĩnh viễn khỏi máy chủ.", - "moveToTrashWarning": "The item(s) will be moved to the Termix Trash and can be restored before the retention period expires.", - "itemsMovedToTrash": "{{count}} item(s) moved to Trash", - "trash": "Trash", - "trashDescription": "Deleted items are retained for {{days}} day(s) on this host.", - "trashLoadFailed": "Failed to load Trash", - "trashEmpty": "Trash is empty", + "moveToTrashWarning": "Các mục này sẽ được chuyển vào Thùng rác Termix và có thể được khôi phục trước khi thời hạn lưu giữ hết hạn.", + "itemsMovedToTrash": "{{count}} mục đã được chuyển vào Thùng rác", + "trash": "Rác", + "trashDescription": "Các mục đã xóa sẽ được lưu giữ trong {{days}} ngày trên máy chủ này.", + "trashLoadFailed": "Không thể tải Thùng rác", + "trashEmpty": "Thùng rác trống", "trashRestore": "Khôi phục", - "trashRestored": "Restored {{name}}", - "trashRestoreFailed": "Failed to restore item. The original path may already exist.", - "trashDeletePermanently": "Delete permanently", - "trashDeleteConfirm": "Permanently delete {{name}}? This cannot be undone.", - "trashPermanentlyDeleted": "Permanently deleted {{name}}", - "trashDeleteFailed": "Failed to permanently delete item", - "trashEmptyAction": "Empty Trash", - "trashEmptyConfirm": "Permanently delete every item in Trash? This cannot be undone.", - "trashEmptied": "Trash emptied", - "trashRetention": "Automatic cleanup after (days)", - "trashRetentionSaved": "Trash retention updated", - "trashRetentionFailed": "Failed to update Trash retention", - "trashUnavailableConfirm": "This item cannot be moved to Trash, usually because it is on another filesystem or requires elevated permissions. Delete it permanently instead?", + "trashRestored": "Đã khôi phục {{name}}", + "trashRestoreFailed": "Không thể khôi phục mục. Đường dẫn gốc có thể đã tồn tại.", + "trashDeletePermanently": "Xóa vĩnh viễn", + "trashDeleteConfirm": "Xóa vĩnh viễn {{name}}? Thao tác này không thể hoàn tác.", + "trashPermanentlyDeleted": "Đã xóa vĩnh viễn {{name}}", + "trashDeleteFailed": "Không thể xóa mục vĩnh viễn", + "trashEmptyAction": "Đổ rác", + "trashEmptyConfirm": "Xóa vĩnh viễn mọi mục trong Thùng rác? Thao tác này không thể hoàn tác.", + "trashEmptied": "Thùng rác đã được đổ", + "trashRetention": "Tự động dọn dẹp sau (ngày)", + "trashRetentionSaved": "Cập nhật thời gian lưu trữ rác", + "trashRetentionFailed": "Không thể cập nhật thời gian lưu trữ thùng rác.", + "trashUnavailableConfirm": "Không thể chuyển mục này vào Thùng rác, thường là do nó nằm trên hệ thống tệp khác hoặc yêu cầu quyền quản trị. Thay vào đó, hãy xóa vĩnh viễn mục này?", "recent": "Gần đây", "pinned": "Đã ghim", "folderShortcuts": "Lối tắt thư mục", @@ -303,7 +303,7 @@ "operationCompleted": "Đã {{operation}} {{count}} mục", "downloadFileSuccess": "Đã tải xuống tệp {{name}} thành công", "downloadFileFailed": "Tải xuống thất bại", - "downloadingFile": "Downloading {{name}}…", + "downloadingFile": "Đang tải xuống {{name}}…", "downloadProgressBytes": "{{transferred}} / {{total}}", "moveTo": "Di chuyển tới {{name}}", "diffCompareWith": "So sánh khác biệt với {{name}}", @@ -323,13 +323,13 @@ "sideBySide": "Song song", "inline": "Trong dòng", "fileComparison": "So sánh tệp: {{file1}} vs {{file2}}", - "fileTooLarge": "Tệp quá lớn: {{error}}", + "fileTooLarge": "File is too large (> 10MB) and cannot be opened as text for security reasons.", "sshConnectionFailed": "Kết nối SSH thất bại. Vui lòng kiểm tra kết nối tới {{name}} ({{ip}}:{{port}})", "loadFileFailed": "Không thể tải tệp: {{error}}", "connecting": "Đang kết nối...", "connectedSuccessfully": "Đã kết nối thành công", "totpVerificationFailed": "Xác minh TOTP thất bại", - "browserSignInFailed": "Sign-in failed. Please try again.", + "browserSignInFailed": "Đăng nhập không thành công. Vui lòng thử lại.", "authenticationFailed": "Xác thực thất bại", "incorrectPassphrase": "Cụm mật khẩu không đúng. Vui lòng thử lại.", "verificationCodePrompt": "Mã xác minh:", @@ -361,73 +361,82 @@ "used": "Đã dùng", "of": "của", "toggleSidebar": "Ẩn/Hiện thanh bên", - "compactLayout": "Use compact layout", - "comfortableLayout": "Use comfortable layout", + "compactLayout": "Sử dụng bố cục nhỏ gọn", + "comfortableLayout": "Sử dụng bố cục thoải mái", "cannotLoadPdf": "Không thể tải PDF", "pdfLoadError": "Đã xảy ra lỗi khi tải tệp PDF này.", - "loadingPdf": "Đang tải PDF...", + "loadingPdf": "Loading PDF viewer...", "loadingPage": "Đang tải trang...", "cancel": "Hủy", - "copiedItems_one": "Copied {{count}} item", - "copiedItems_other": "Copied {{count}} items", - "deleteCopiedFileFailed": "Could not delete the copy of {{name}}: {{error}}", - "dragMovedItems_one": "Moved {{count}} item to {{target}}", - "dragMovedItems_other": "Moved {{count}} items to {{target}}", - "moveBackFileFailed": "Could not move {{name}} back: {{error}}", - "terminal": "Terminal: {{host}} ({{path}})", - "dragToDesktop": "Dragging {{name}} to the desktop", - "dragFilesToDesktop": "Dragging {{count}} files to the desktop", - "folderDragUnsupported": "Dragging folders to the desktop is not supported yet", - "saveToDesktopFailed": "Save failed: {{error}}", - "dragFailedDetail": "Drag failed: {{error}}", - "videoUnsupported": "Your browser cannot play this video format.", - "downloadToPlay": "Download to play it elsewhere", - "cannotPreviewType": "Cannot preview this file type", - "cannotPreviewTypeHint": "This file type has no preview. Download it to open it in another app." + "copiedItems_one": "Đã sao chép mục {{count}}", + "copiedItems_other": "Đã sao chép {{count}} mục", + "deleteCopiedFileFailed": "Không thể xóa bản sao của {{name}}: {{error}}", + "dragMovedItems_one": "Đã di chuyển mục {{count}} đến {{target}}", + "dragMovedItems_other": "Đã di chuyển {{count}} mục đến {{target}}", + "moveBackFileFailed": "Không thể di chuyển {{name}} trở lại: {{error}}", + "terminal": "Thiết bị đầu cuối: {{host}} ({{path}})", + "dragToDesktop": "Kéo {{name}} ra màn hình nền", + "dragFilesToDesktop": "Kéo {{count}} tập tin ra màn hình nền", + "folderDragUnsupported": "Hiện tại, tính năng kéo thả thư mục ra màn hình nền chưa được hỗ trợ.", + "saveToDesktopFailed": "Lưu thất bại: {{error}}", + "dragFailedDetail": "Kéo thả thất bại: {{error}}", + "videoUnsupported": "Trình duyệt của bạn không thể phát định dạng video này.", + "downloadToPlay": "Tải xuống để chơi ở nơi khác", + "cannotPreviewType": "Không thể xem trước loại tệp này", + "cannotPreviewTypeHint": "Loại tệp này không có bản xem trước. Hãy tải xuống để mở bằng ứng dụng khác.", + "loadingFile": "Loading file...", + "loadingImage": "Loading image...", + "loadingEditor": "Loading editor...", + "loadingPreview": "Loading preview...", + "loadingAudio": "Loading audio player...", + "emptyPreview": "Nothing to preview yet...", + "revert": "Revert", + "openAsText": "Open as Text", + "confirmOpenAsText": "Do you want to continue opening this file as text? This may slow down your browser." }, "sftpTransfer": { "title": "SFTP", - "description": "Transfer files between two SSH hosts.", - "sourceServer": "Source Server", - "destinationServer": "Destination Server", - "selectHost": "Select host", + "description": "Truyền tệp giữa hai máy chủ SSH.", + "sourceServer": "Máy chủ nguồn", + "destinationServer": "Máy chủ đích", + "selectHost": "Chọn máy chủ", "noHostSelected": "Chưa chọn máy chủ", "move": "Di chuyển", "copy": "Sao chép", "upload": "Tải lên", - "itemsSelected": "{{count}} item selected", - "itemsSelected_other": "{{count}} items selected", + "itemsSelected": "{{count}} mục đã chọn", + "itemsSelected_other": "{{count}} mục đã chọn", "ready": "Sẵn sàng", "loadingHosts": "Đang tải các máy chủ...", "name": "Tên", "modified": "Đã sửa", "size": "Kích thước", - "noFiles": "No files", + "noFiles": "Không có tệp nào", "open": "Mở", - "up": "Up", + "up": "Hướng lên", "refresh": "Làm mới", - "copyToTarget": "Copy to Target Directory", + "copyToTarget": "Sao chép vào thư mục đích", "rename": "Đổi tên", "delete": "Xóa", - "editPermissions": "Edit Permissions", - "createNewFolder": "Create New Folder", - "deleteSelectedItems": "Delete Selected Items", - "deleteConfirm": "Delete {{count}} selected item?", - "deleteConfirm_other": "Delete {{count}} selected items?", + "editPermissions": "Chỉnh sửa quyền", + "createNewFolder": "Tạo thư mục mới", + "deleteSelectedItems": "Xóa các mục đã chọn", + "deleteConfirm": "Xóa mục đã chọn {{count}}?", + "deleteConfirm_other": "Xóa {{count}} mục đã chọn?", "cancel": "Hủy", "save": "Lưu", - "folderCreated": "Folder created", - "itemRenamed": "Item renamed", + "folderCreated": "Thư mục đã được tạo", + "itemRenamed": "Mục đã được đổi tên", "actionFailed": "Hành động thất bại", - "itemsDeleted": "{{count}} item deleted", - "itemsDeleted_other": "{{count}} items deleted", - "deleteFailed": "Delete failed", - "permissionsUpdated": "Permissions updated", - "noRemoteSessionConnected": "No remote session connected", - "failedToListFiles": "Failed to list files", - "failedToRefresh": "Failed to refresh", - "destinationInsideSource": "Destination cannot be inside the selected source path.", - "sameHostNoOp": "Source and destination are the same folder." + "itemsDeleted": "{{count}} mục đã bị xóa", + "itemsDeleted_other": "{{count}} mục đã bị xóa", + "deleteFailed": "Xóa không thành công", + "permissionsUpdated": "Quyền hạn đã được cập nhật", + "noRemoteSessionConnected": "Không có phiên kết nối từ xa nào được thiết lập.", + "failedToListFiles": "Không thể liệt kê các tệp.", + "failedToRefresh": "Không thể làm mới", + "destinationInsideSource": "Đường dẫn đích không được nằm bên trong đường dẫn nguồn đã chọn.", + "sameHostNoOp": "Thư mục nguồn và thư mục đích đều nằm trong cùng một thư mục." }, "hosts": { "fileManager": "Trình quản lý tệp", @@ -438,8 +447,8 @@ "loadingHost": "Đang tải máy chủ..." }, "onboarding": { - "feature_files": "File manager", - "feature_files_desc": "Browse, upload, download and edit files over SFTP without leaving the app." + "feature_files": "Trình quản lý tập tin", + "feature_files_desc": "Duyệt, tải lên, tải xuống và chỉnh sửa tệp qua SFTP mà không cần rời khỏi ứng dụng." }, "terminal": { "runTitle": "Đang chạy {{command}} - {{host}}", @@ -464,7 +473,7 @@ "destinationPath": "Đường dẫn đích", "destMustBeDirectory": "Đích phải là thư mục khi truyền tải nhiều mục", "goUp": "Lên trên", - "hostAuthRequired": "Authentication required. Open File Manager on this host first", + "hostAuthRequired": "Cần xác thực. Trước tiên hãy mở Trình quản lý tập tin trên máy chủ này.", "hostConnecting": "Đang kết nối…", "hostConnectionFailed": "Kết nối thất bại", "hostDisconnected": "Chưa kết nối", @@ -485,12 +494,12 @@ "methodReason": { "user_item_sftp": "Bạn đã chọn SFTP từng tệp.", "user_tar": "Bạn đã chọn dùng tar.", - "tar_unavailable": "Tar is not available on one or both hosts, so per-file SFTP will be used instead.", - "windows_host": "A Windows host is involved, so tar is not used.", - "auto_multi_large": "Auto: multiple files including a large file ({{largestSize}}) with compressible data. Tar bundles them into one transfer.", - "auto_single_large_in_archive": "Auto: one large file ({{largestSize}}) in this set, so per-file SFTP.", - "auto_many_incompressible": "Auto: mostly incompressible data, so per-file SFTP.", - "auto_many_files": "Auto: many files ({{fileCount}}), tar cuts the per-file overhead.", + "tar_unavailable": "Định dạng Tar không khả dụng trên một hoặc cả hai máy chủ, vì vậy thay vào đó sẽ sử dụng SFTP cho từng tệp.", + "windows_host": "Vì đây là máy chủ Windows nên không sử dụng lệnh tar.", + "auto_multi_large": "Tự động: nhiều tệp bao gồm một tệp lớn ({{largestSize}}) với dữ liệu có thể nén. Tar sẽ đóng gói chúng thành một lần truyền.", + "auto_single_large_in_archive": "Tự động: một tập tin lớn ({{largestSize}}) trong bộ này, vì vậy SFTP theo từng tập tin.", + "auto_many_incompressible": "Chế độ tự động: phần lớn dữ liệu không thể nén được, nên cần SFTP cho từng tệp riêng biệt.", + "auto_many_files": "Tự động: nhiều tệp ({{fileCount}}), tar giảm chi phí xử lý trên mỗi tệp.", "auto_default": "Tự động: SFTP từng tệp cho tập này." }, "methodTar": "Lưu trữ tar", @@ -498,11 +507,11 @@ "metricsCompress": "Nén tại nguồn: {{duration}}", "metricsExtract": "Giải nén tại đích: {{duration}}", "metricsPrepare": "Chuẩn bị đích: {{duration}}", - "metricsRouteBenchmark": "Route probe: direct {{direct}}, relay {{relay}}", + "metricsRouteBenchmark": "Đầu dò tuyến đường: trực tiếp {{direct}}, chuyển tiếp {{relay}}", "metricsSourceDelete": "Xóa khỏi nguồn: {{duration}}", "metricsTotal": "Tổng: {{duration}}", "metricsTransfer": "Toàn trình: {{throughput}} ({{duration}})", - "metricsVerify": "SHA-256 verified: {{duration}}", + "metricsVerify": "Đã xác thực SHA-256: {{duration}}", "moveFolderToHost": "Di chuyển thư mục tới máy chủ…", "moveItemsToHost": "Di chuyển {{count}} mục tới máy chủ…", "moveToHost": "Di chuyển đến máy chủ…", @@ -511,7 +520,7 @@ "parallelSegmentsHint": "Các tệp lớn được chia thành các khối 256 MB. Nhiều làn sử dụng các kết nối riêng biệt (như khởi chạy nhiều lần truyền) để tăng tổng thông lượng.", "parallelSegmentsLabel": "Làn truyền song song", "parallelSegmentsOption": "{{count}} làn", - "progressBenchmarking": "Selecting the fastest transfer route…", + "progressBenchmarking": "Chọn tuyến đường chuyển tiếp nhanh nhất…", "progressBytes": "{{transferred}} / {{total}}", "progressCancel": "Hủy", "progressCancelling": "Đang hủy…", @@ -523,7 +532,7 @@ "progressTotalSpeed": "{{speed}} tổng ({{lanes}} làn)", "progressTransferring": "Đang truyền dữ liệu…", "progressTransferringItems": "Đang truyền tệp ({{current}}/{{total}})…", - "progressVerifying": "Verifying file integrity…", + "progressVerifying": "Đang xác minh tính toàn vẹn của tệp…", "recentDestinations": "Đích gần đây", "resumedHint": "Đã kết nối lại với một tác vụ chuyển đang hoạt động được bắt đầu từ cửa sổ khác.", "retryTransfer": "Thử lại", @@ -539,5 +548,8 @@ "metricsHopSourceRead": "Nguồn → máy chủ: {{throughput}}", "metricsHopDestSftpWrite": "Máy chủ → đích (SFTP): {{throughput}}", "metricsHopDestLocalWrite": "Máy chủ → đích (cục bộ): {{throughput}}" + }, + "plugin": { + "name": "File Manager" } } diff --git a/plugins/file-manager/locales/translated/zh_CN.json b/plugins/file-manager/locales/translated/zh_CN.json index aa5d71a0c..e69cd6f2f 100644 --- a/plugins/file-manager/locales/translated/zh_CN.json +++ b/plugins/file-manager/locales/translated/zh_CN.json @@ -25,12 +25,12 @@ }, "user": { "transferConcurrency": { - "label": "同时传输文件数", - "description": "本地与远程分栏文件管理器同时上传或下载的文件数。如果服务器限制 SFTP 通道数,请调低此值。" + "label": "同时文件传输", + "description": "本地/远程并排管理器同时上传或下载的文件数量。如果您的服务器限制 SFTP 通道,请降低此值。" }, "confirmBeforeTrash": { - "label": "移入回收站前确认", - "description": "将远程文件移入回收站前询问。永久删除仍需确认。" + "label": "请确认后再将文件移至回收站", + "description": "将远程文件移至回收站前请先询问。永久删除仍需确认。" } } }, @@ -72,14 +72,14 @@ "rename": "重命名", "uploading": "上传中...", "uploadingFile": "正在上传 {{name}}...", - "uploadingChunk": "正在上传 {{name}}:{{percent}}%(第 {{chunk}} 部分,共 {{total}} 部分)", + "uploadingChunk": "正在上传 {{name}}: {{percent}}% ( {{chunk}} 的一部分,共 {{total}})", "fileName": "文件名", "folderName": "文件夹名称", "fileUploadedSuccessfully": "文件 \"{{name}}\" 上传成功", "failedToUploadFile": "上传文件失败", - "uploadingFolderFiles": "正在上传 {{count}} 个文件……", - "uploadedFolderFiles": "成功上传 {{count}} 个文件", - "uploadedFolderPartial": "已上传 {{uploaded}} 个文件,{{failed}} 个失败", + "uploadingFolderFiles": "正在上传 {{count}} 文件...", + "uploadedFolderFiles": "已成功上传 {{count}} 个文件", + "uploadedFolderPartial": "上传了 {{uploaded}} 个文件, {{failed}} 个文件失败", "fileDownloadedSuccessfully": "文件 \"{{name}}\" 下载成功", "failedToDownloadFile": "下载文件失败", "fileCreatedSuccessfully": "文件 \"{{name}}\" 创建成功", @@ -95,12 +95,12 @@ "sudoOperationFailed": "Sudo 操作失败", "sudoAuthFailed": "Sudo 认证失败", "dragFilesToUpload": "将文件拖放到此处以上传", - "dropToUploadHere": "拖放到此处上传", - "dropToDownloadHere": "拖放到此处下载", + "dropToUploadHere": "在此处上传", + "dropToDownloadHere": "点击此处下载", "localFiles": "本地", - "showLocalFiles": "显示本地文件(分栏视图)", + "showLocalFiles": "显示本地文件(分屏显示)", "hideLocalFiles": "隐藏本地文件", - "localHome": "主目录", + "localHome": "主页", "localPathPlaceholder": "本地文件夹路径", "localShowHidden": "显示隐藏文件", "localHideHidden": "隐藏隐藏文件", @@ -109,44 +109,44 @@ "localItemCount": "{{count}} 个项目", "localSelectedCount": "已选择 {{count}} 项", "back": "返回", - "forward": "前进", - "up": "上一级", - "kind": "类型", - "localUploadingProgress": "正在上传第 {{current}} 个,共 {{total}} 个", - "localDownloadingProgress": "正在下载第 {{current}} 个,共 {{total}} 个", - "localTransferInFlight": "同时 {{count}} 个", + "forward": "向前", + "up": "向上", + "kind": "种类", + "localUploadingProgress": "正在上传 {{current}} 中的 {{total}}", + "localDownloadingProgress": "正在下载 {{current}} 中的 {{total}}", + "localTransferInFlight": "{{count}} 立刻", "localPreparingDownload": "正在准备下载……", "localTransferCancelled": "传输已取消", - "localNothingToTransfer": "没有需要传输的内容", + "localNothingToTransfer": "无需转移", "localUploadComplete": "已上传 {{count}} 个文件", "localUploadFailed": "上传失败", - "localUploadPartial": "已上传 {{done}} 个文件,{{failed}} 个失败", + "localUploadPartial": "上传文件 {{done}} 个失败, {{failed}} 个失败", "localDownloadComplete": "已下载 {{count}} 个文件", "localDownloadFailed": "下载失败", - "localDownloadPartial": "已下载 {{done}} 个文件,{{failed}} 个失败", - "localReplaceExistingPrompt": "此文件夹中已有 {{count}} 个同名项目,是否替换?", + "localDownloadPartial": "下载了 {{done}} 个文件, {{failed}} 个文件失败", + "localReplaceExistingPrompt": "此文件夹中已存在 {{count}} 个项目。是否替换它们?", "localReplace": "替换", "localSkipExisting": "跳过", "localSkippedExisting": "已跳过 {{count}} 个现有项目", - "localUnsafeNamesSkipped": "已跳过 {{count}} 个名称无法在此计算机上使用的项目", + "localUnsafeNamesSkipped": "已跳过 {{count}} 个名称无法在此计算机上使用的项目。", "localOpen": "打开", "localOpenFolder": "打开文件夹", "localUploadToRemote": "上传到服务器", - "localUploadToRemoteMany": "将 {{count}} 个项目上传到服务器", - "localMoveToTrash": "移入回收站", - "localMoveToTrashMany": "将 {{count}} 个项目移入回收站", - "localTrashConfirmSingle": "将“{{name}}”移入回收站?", - "localTrashConfirmFolder": "将文件夹“{{name}}”及其中所有内容移入回收站?", - "localTrashConfirmMany": "将 {{count}} 个项目移入回收站?", - "localTrashed": "已将 {{count}} 个项目移入回收站", - "localTrashFailed": "无法移入回收站", + "localUploadToRemoteMany": "上传 {{count}} 项到服务器", + "localMoveToTrash": "移至垃圾桶", + "localMoveToTrashMany": "将 {{count}} 个物品移至垃圾桶", + "localTrashConfirmSingle": "将“{{name}}”移至回收站?", + "localTrashConfirmFolder": "将文件夹“{{name}}”及其所有内容移至回收站?", + "localTrashConfirmMany": "将 {{count}} 个项目移至回收站?", + "localTrashed": "已将 {{count}} 个项目移至回收站", + "localTrashFailed": "无法移至垃圾桶", "localRenameFailed": "重命名失败", "localCreateFailed": "无法创建项目", - "goToParentFolder": "转到父文件夹", - "resizeSidebar": "拖动调整侧边栏宽度(双击重置)", - "resizeLocalPane": "拖动调整本地窗格大小(双击重置)", + "goToParentFolder": "转到上文件夹", + "resizeSidebar": "拖动即可调整侧边栏大小(双击即可重置)", + "resizeLocalPane": "拖动即可调整本地窗格大小(双击可重置)", "columns": "列", - "columnsHint": "右键点击选择显示的列", + "columnsHint": "右键单击选择列", "emptyFolder": "此文件夹为空", "searchFiles": "搜索文件...", "upload": "上传", @@ -203,25 +203,25 @@ "confirmDeleteFolder": "确定要永久删除文件夹“{{name}}”及其所有内容吗?", "permanentDeleteWarning": "此操作无法撤销。项目将从服务器永久删除。", "moveToTrashWarning": "该项目将被移至 Termix 回收站,可在保留期到期前恢复。", - "itemsMovedToTrash": "已将 {{count}} 个项目移入回收站", + "itemsMovedToTrash": "{{count}} 项已移至回收站", "trash": "回收站", - "trashDescription": "删除的项目将在此主机上保留 {{days}} 天。", + "trashDescription": "已删除的项目将在本主机上保留 {{days}} 天。", "trashLoadFailed": "加载回收站失败", "trashEmpty": "回收站是空的", "trashRestore": "恢复", "trashRestored": "已恢复 {{name}}", - "trashRestoreFailed": "恢复项目失败,原路径可能已存在。", + "trashRestoreFailed": "恢复项目失败。原始路径可能已存在。", "trashDeletePermanently": "永久删除", "trashDeleteConfirm": "永久删除 {{name}}?此操作无法撤销。", - "trashPermanentlyDeleted": "已永久删除 {{name}}", - "trashDeleteFailed": "永久删除项目失败", + "trashPermanentlyDeleted": "永久删除 {{name}}", + "trashDeleteFailed": "无法永久删除项目", "trashEmptyAction": "清空回收站", "trashEmptyConfirm": "永久删除回收站中的所有项目?此操作无法撤销。", "trashEmptied": "回收站已清空", "trashRetention": "自动清理(N 天后)", "trashRetentionSaved": "回收站保留设置已更新", "trashRetentionFailed": "更新回收站保留设置失败", - "trashUnavailableConfirm": "此项目无法移入回收站,通常是因为它位于其他文件系统中或需要更高权限。是否改为永久删除?", + "trashUnavailableConfirm": "此项目无法移至回收站,通常是因为它位于其他文件系统或需要更高的权限。是否将其永久删除?", "recent": "最近", "pinned": "已固定", "folderShortcuts": "文件夹快捷方式", @@ -303,7 +303,7 @@ "operationCompleted": "{{operation}}了{{count}}个项目", "downloadFileSuccess": "文件 {{name}} 下载成功", "downloadFileFailed": "下载失败", - "downloadingFile": "正在下载 {{name}}……", + "downloadingFile": "正在下载 {{name}}…", "downloadProgressBytes": "{{transferred}} / {{total}}", "moveTo": "移动到 {{name}}", "diffCompareWith": "与 {{name}} 对比差异", @@ -323,7 +323,7 @@ "sideBySide": "并排", "inline": "内联", "fileComparison": "文件比较: {{file1}} 对比 {{file2}}", - "fileTooLarge": "文件过大(超过 10 MB),出于安全考虑无法作为文本打开。", + "fileTooLarge": "File is too large (> 10MB) and cannot be opened as text for security reasons.", "sshConnectionFailed": "SSH 连接失败。请检查您到 {{name}} ({{ip}}:{{port}}) 的连接", "loadFileFailed": "加载文件失败: {{error}}", "connecting": "连接中...", @@ -361,42 +361,42 @@ "used": "已用", "of": "/", "toggleSidebar": "切换侧边栏", - "compactLayout": "使用紧凑布局", - "comfortableLayout": "使用宽松布局", + "compactLayout": "采用紧凑型布局", + "comfortableLayout": "采用舒适的布局", "cannotLoadPdf": "无法加载 PDF", "pdfLoadError": "加载此 PDF 文件时出错。", - "loadingPdf": "正在加载 PDF 查看器……", + "loadingPdf": "Loading PDF viewer...", "loadingPage": "正在加载页面...", "cancel": "取消", - "copiedItems_one": "已复制 {{count}} 个项目", - "copiedItems_other": "已复制 {{count}} 个项目", - "deleteCopiedFileFailed": "无法删除 {{name}} 的副本:{{error}}", - "dragMovedItems_one": "已将 {{count}} 个项目移至 {{target}}", - "dragMovedItems_other": "已将 {{count}} 个项目移至 {{target}}", - "moveBackFileFailed": "无法将 {{name}} 移回原处:{{error}}", - "terminal": "终端:{{host}}({{path}})", - "dragToDesktop": "正在将 {{name}} 拖到桌面", - "dragFilesToDesktop": "正在将 {{count}} 个文件拖到桌面", - "folderDragUnsupported": "暂不支持将文件夹拖到桌面", - "saveToDesktopFailed": "保存失败:{{error}}", - "dragFailedDetail": "拖放失败:{{error}}", - "videoUnsupported": "你的浏览器无法播放此视频格式。", - "downloadToPlay": "下载后使用其他程序播放", + "copiedItems_one": "已复制 {{count}} 项目", + "copiedItems_other": "已复制 {{count}} 项", + "deleteCopiedFileFailed": "无法删除 {{name}}的副本: {{error}}", + "dragMovedItems_one": "将 {{count}} 项移动到 {{target}}", + "dragMovedItems_other": "已将 {{count}} 个项目移动到 {{target}}", + "moveBackFileFailed": "无法将 {{name}} 向后移动: {{error}}", + "terminal": "终端: {{host}} ({{path}})", + "dragToDesktop": "将 {{name}} 拖到桌面", + "dragFilesToDesktop": "将 {{count}} 文件拖到桌面", + "folderDragUnsupported": "目前尚不支持将文件夹拖到桌面。", + "saveToDesktopFailed": "保存失败: {{error}}", + "dragFailedDetail": "拖拽失败: {{error}}", + "videoUnsupported": "您的浏览器无法播放此视频格式。", + "downloadToPlay": "下载后即可在其他地方播放", "cannotPreviewType": "无法预览此文件类型", - "cannotPreviewTypeHint": "此文件类型不支持预览,请下载后使用其他应用打开。", - "loadingFile": "正在加载文件……", - "loadingImage": "正在加载图片……", - "loadingEditor": "正在加载编辑器……", - "loadingPreview": "正在加载预览……", - "loadingAudio": "正在加载音频播放器……", - "emptyPreview": "暂无可预览内容……", - "revert": "还原", - "openAsText": "作为文本打开", - "confirmOpenAsText": "是否继续将此文件作为文本打开?这可能导致浏览器运行变慢。" + "cannotPreviewTypeHint": "此文件类型没有预览。请下载后在其他应用程序中打开。", + "loadingFile": "Loading file...", + "loadingImage": "Loading image...", + "loadingEditor": "Loading editor...", + "loadingPreview": "Loading preview...", + "loadingAudio": "Loading audio player...", + "emptyPreview": "Nothing to preview yet...", + "revert": "Revert", + "openAsText": "Open as Text", + "confirmOpenAsText": "Do you want to continue opening this file as text? This may slow down your browser." }, "sftpTransfer": { "title": "SFTP", - "description": "在两台 SSH 主机之间传输文件。", + "description": "在两台SSH主机之间传输文件。", "sourceServer": "源服务器", "destinationServer": "目标服务器", "selectHost": "选择主机", @@ -404,8 +404,8 @@ "move": "移动", "copy": "复制", "upload": "上传", - "itemsSelected": "已选择 {{count}} 个项目", - "itemsSelected_other": "已选择 {{count}} 个项目", + "itemsSelected": "{{count}} 已选择项目", + "itemsSelected_other": "{{count}} 已选择项目", "ready": "就绪", "loadingHosts": "正在加载主机...", "name": "名称", @@ -413,30 +413,30 @@ "size": "大小", "noFiles": "没有文件", "open": "打开", - "up": "上一级", + "up": "向上", "refresh": "刷新", "copyToTarget": "复制到目标目录", "rename": "重命名", "delete": "删除", "editPermissions": "编辑权限", - "createNewFolder": "新建文件夹", - "deleteSelectedItems": "删除所选项目", - "deleteConfirm": "删除选中的 {{count}} 个项目?", - "deleteConfirm_other": "删除选中的 {{count}} 个项目?", + "createNewFolder": "创建新文件夹", + "deleteSelectedItems": "删除选定项目", + "deleteConfirm": "删除 {{count}} 选定项目?", + "deleteConfirm_other": "删除 {{count}} 选定项目?", "cancel": "取消", "save": "保存", - "folderCreated": "文件夹已创建", + "folderCreated": "已创建文件夹", "itemRenamed": "项目已重命名", "actionFailed": "操作失败", - "itemsDeleted": "已删除 {{count}} 个项目", - "itemsDeleted_other": "已删除 {{count}} 个项目", + "itemsDeleted": "{{count}} 项目已删除", + "itemsDeleted_other": "{{count}} 项已删除", "deleteFailed": "删除失败", "permissionsUpdated": "权限已更新", - "noRemoteSessionConnected": "尚未连接远程会话", + "noRemoteSessionConnected": "未连接远程会话", "failedToListFiles": "文件列表失败", "failedToRefresh": "刷新失败", "destinationInsideSource": "目标路径不能位于所选源路径内。", - "sameHostNoOp": "源路径与目标路径为同一文件夹。" + "sameHostNoOp": "源文件夹和目标文件夹是同一个文件夹。" }, "hosts": { "fileManager": "文件管理器", @@ -473,7 +473,7 @@ "destinationPath": "目标路径", "destMustBeDirectory": "对于多项目传输,目标必须是一个目录", "goUp": "向上", - "hostAuthRequired": "需要身份验证,请先在此主机上打开文件管理器", + "hostAuthRequired": "需要进行身份验证。请先在此主机上打开文件管理器。", "hostConnecting": "连接中…", "hostConnectionFailed": "连接失败", "hostDisconnected": "未连接", @@ -494,12 +494,12 @@ "methodReason": { "user_item_sftp": "您选择了逐文件 SFTP。", "user_tar": "您选择了 Tar 归档。", - "tar_unavailable": "一台或两台主机未安装 tar,将改为逐文件使用 SFTP 传输。", - "windows_host": "传输涉及 Windows 主机,因此不使用 tar。", - "auto_multi_large": "自动选择:多个文件中包含可压缩的大文件({{largestSize}}),使用 tar 打包后统一传输。", - "auto_single_large_in_archive": "自动选择:文件集中包含一个大文件({{largestSize}}),采用逐文件 SFTP 传输。", - "auto_many_incompressible": "自动选择:数据大多不可压缩,采用逐文件 SFTP 传输。", - "auto_many_files": "自动选择:文件较多({{fileCount}} 个),使用 tar 减少逐文件传输开销。", + "tar_unavailable": "如果一台或两台主机上没有 Tar 服务,则将改用按文件传输的 SFTP 服务。", + "windows_host": "由于涉及 Windows 主机,因此不使用 tar。", + "auto_multi_large": "自动:支持多个文件,其中包括一个包含可压缩数据的大文件({{largestSize}})。Tar 会将它们打包成一个文件进行传输。", + "auto_single_large_in_archive": "自动:此集合中有一个大文件({{largestSize}}),因此按文件 SFTP。", + "auto_many_incompressible": "自动:数据大多不可压缩,因此按文件进行 SFTP 传输。", + "auto_many_files": "自动:多个文件({{fileCount}}),tar 可以减少每个文件的开销。", "auto_default": "自动:此集合使用逐文件 SFTP。" }, "methodTar": "Tar 归档", @@ -507,11 +507,11 @@ "metricsCompress": "源端压缩:{{duration}}", "metricsExtract": "目标端解压:{{duration}}", "metricsPrepare": "准备目标:{{duration}}", - "metricsRouteBenchmark": "路径探测:直连 {{direct}},中转 {{relay}}", + "metricsRouteBenchmark": "路由探测:直接 {{direct}},中继 {{relay}}", "metricsSourceDelete": "从源端删除:{{duration}}", "metricsTotal": "总计:{{duration}}", "metricsTransfer": "端到端:{{throughput}} ({{duration}})", - "metricsVerify": "SHA-256 校验通过:{{duration}}", + "metricsVerify": "SHA-256 已验证: {{duration}}", "moveFolderToHost": "移动文件夹到主机…", "moveItemsToHost": "移动 {{count}} 个项目到主机…", "moveToHost": "移动到主机…", @@ -520,7 +520,7 @@ "parallelSegmentsHint": "大文件会被拆分为 256 MB 的块。多个通道使用独立连接(如同同时进行多个传输),以获得更高的总吞吐量。", "parallelSegmentsLabel": "并行传输通道", "parallelSegmentsOption": "{{count}} 个通道", - "progressBenchmarking": "正在选择最快的传输路径……", + "progressBenchmarking": "选择最快的传输路线…", "progressBytes": "{{transferred}} / {{total}}", "progressCancel": "取消", "progressCancelling": "正在取消…", @@ -532,7 +532,7 @@ "progressTotalSpeed": "{{speed}} 总计({{lanes}} 通道)", "progressTransferring": "正在传输数据…", "progressTransferringItems": "正在传输文件({{current}}/{{total}})…", - "progressVerifying": "正在校验文件完整性……", + "progressVerifying": "正在验证文件完整性…", "recentDestinations": "最近目标", "resumedHint": "已重新连接到在另一个窗口中启动的进行中的传输。", "retryTransfer": "重试", @@ -550,6 +550,6 @@ "metricsHopDestLocalWrite": "服务器 → 目标 (本地):{{throughput}}" }, "plugin": { - "name": "文件管理器" + "name": "File Manager" } } diff --git a/plugins/file-manager/locales/translated/zh_TW.json b/plugins/file-manager/locales/translated/zh_TW.json index 2e2e8c0ca..c126c8b88 100644 --- a/plugins/file-manager/locales/translated/zh_TW.json +++ b/plugins/file-manager/locales/translated/zh_TW.json @@ -6,15 +6,15 @@ }, "permissions": { "use": { - "title": "Use file manager", - "description": "Browse, edit and transfer files over SFTP." + "title": "使用檔案管理器", + "description": "透過 SFTP 瀏覽、編輯和傳輸檔案。" } }, "settings": { "host": { "enable": { "label": "啟用檔案管理員", - "description": "Browse and edit files on this host over SFTP." + "description": "透過 SFTP 瀏覽和編輯此主機上的檔案。" }, "defaultPath": { "label": "預設路徑" @@ -25,12 +25,12 @@ }, "user": { "transferConcurrency": { - "label": "Simultaneous File Transfers", - "description": "How many files the side by side local/remote manager uploads or downloads at the same time. Lower this if your server limits SFTP channels." + "label": "同時文件傳輸", + "description": "本機/遠端並排管理器同時上傳或下載的檔案數量。如果您的伺服器限制 SFTP 通道,請降低此值。" }, "confirmBeforeTrash": { - "label": "Confirm before moving files to trash", - "description": "Ask before moving remote files to trash. Permanent deletion still requires confirmation." + "label": "請確認後再將文件移至回收站", + "description": "將遠端文件移至回收站前請先詢問。永久刪除仍需確認。" } } }, @@ -72,14 +72,14 @@ "rename": "重新命名", "uploading": "上傳中...", "uploadingFile": "正在上傳 {{name}}...", - "uploadingChunk": "Uploading {{name}}: {{percent}}% (part {{chunk}} of {{total}})", + "uploadingChunk": "正在上傳 {{name}}: {{percent}}% ( {{chunk}} 的一部分,共 {{total}})", "fileName": "檔案名稱", "folderName": "資料夾名稱", "fileUploadedSuccessfully": "檔案「{{name}}」上傳成功", "failedToUploadFile": "上傳檔案失敗", - "uploadingFolderFiles": "Uploading {{count}} file(s)...", - "uploadedFolderFiles": "Uploaded {{count}} file(s) successfully", - "uploadedFolderPartial": "Uploaded {{uploaded}} file(s), {{failed}} failed", + "uploadingFolderFiles": "正在上傳 {{count}} 檔案...", + "uploadedFolderFiles": "已成功上傳 {{count}} 個文件", + "uploadedFolderPartial": "上傳檔案 {{uploaded}} 失敗, {{failed}} 失敗", "fileDownloadedSuccessfully": "檔案「{{name}}」下載成功", "failedToDownloadFile": "下載檔案失敗", "fileCreatedSuccessfully": "檔案「{{name}}」建立成功", @@ -95,58 +95,58 @@ "sudoOperationFailed": "Sudo 操作失敗", "sudoAuthFailed": "Sudo 驗證失敗", "dragFilesToUpload": "拖放檔案至此以上傳", - "dropToUploadHere": "Drop to upload here", - "dropToDownloadHere": "Drop to download here", + "dropToUploadHere": "在此處上傳", + "dropToDownloadHere": "點此下載", "localFiles": "本機", - "showLocalFiles": "Show local files (split view)", - "hideLocalFiles": "Hide local files", - "localHome": "Home folder", - "localPathPlaceholder": "Local folder path", - "localShowHidden": "Show hidden files", - "localHideHidden": "Hide hidden files", - "localRevealInFileManager": "Reveal in system file manager", - "localCannotOpenFolder": "Cannot open folder", + "showLocalFiles": "顯示本地文件(分割畫面顯示)", + "hideLocalFiles": "隱藏本地文件", + "localHome": "首頁", + "localPathPlaceholder": "本機資料夾路徑", + "localShowHidden": "顯示隱藏文件", + "localHideHidden": "隱藏隱藏文件", + "localRevealInFileManager": "在系統檔案管理器中顯示", + "localCannotOpenFolder": "無法開啟資料夾", "localItemCount": "{{count}} 個項目", "localSelectedCount": "已選取 {{count}} 個", "back": "返回", - "forward": "Forward", - "up": "Up", - "kind": "Kind", - "localUploadingProgress": "Uploading {{current}} of {{total}}", - "localDownloadingProgress": "Downloading {{current}} of {{total}}", - "localTransferInFlight": "{{count}} at once", - "localPreparingDownload": "Preparing download...", + "forward": "向前", + "up": "向上", + "kind": "種類", + "localUploadingProgress": "正在上傳 {{current}} 中的 {{total}}", + "localDownloadingProgress": "正在下載 {{current}} 中的 {{total}}", + "localTransferInFlight": "{{count}} 立刻", + "localPreparingDownload": "正在準備下載…", "localTransferCancelled": "傳輸已取消", - "localNothingToTransfer": "Nothing to transfer", - "localUploadComplete": "Uploaded {{count}} file(s)", - "localUploadFailed": "Upload failed", - "localUploadPartial": "Uploaded {{done}} file(s), {{failed}} failed", - "localDownloadComplete": "Downloaded {{count}} file(s)", + "localNothingToTransfer": "無需轉移", + "localUploadComplete": "已上傳 {{count}} 個文件", + "localUploadFailed": "上傳失敗", + "localUploadPartial": "上傳檔案 {{done}} 失敗, {{failed}} 失敗", + "localDownloadComplete": "已下載 {{count}} 個文件", "localDownloadFailed": "下載失敗", - "localDownloadPartial": "Downloaded {{done}} file(s), {{failed}} failed", - "localReplaceExistingPrompt": "{{count}} item(s) already exist in this folder. Replace them?", + "localDownloadPartial": "下載了 {{done}} 個文件, {{failed}} 個文件失敗", + "localReplaceExistingPrompt": "此資料夾中已存在 {{count}} 個項目。是否替換它們?", "localReplace": "取代", - "localSkipExisting": "Skip", - "localSkippedExisting": "Skipped {{count}} existing item(s)", - "localUnsafeNamesSkipped": "Skipped {{count}} item(s) whose names cannot be used on this computer", + "localSkipExisting": "跳過", + "localSkippedExisting": "已跳過 {{count}} 個現有項目", + "localUnsafeNamesSkipped": "已跳過 {{count}} 個名稱無法在此電腦上使用的項目。", "localOpen": "開啟", - "localOpenFolder": "Open folder", - "localUploadToRemote": "Upload to server", - "localUploadToRemoteMany": "Upload {{count}} items to server", - "localMoveToTrash": "Move to Trash", - "localMoveToTrashMany": "Move {{count}} items to Trash", - "localTrashConfirmSingle": "Move \"{{name}}\" to the Trash?", - "localTrashConfirmFolder": "Move the folder \"{{name}}\" and all its contents to the Trash?", - "localTrashConfirmMany": "Move {{count}} items to the Trash?", - "localTrashed": "Moved {{count}} item(s) to the Trash", - "localTrashFailed": "Could not move to the Trash", - "localRenameFailed": "Rename failed", - "localCreateFailed": "Could not create item", - "goToParentFolder": "Go to parent folder", - "resizeSidebar": "Drag to resize the sidebar (double-click to reset)", - "resizeLocalPane": "Drag to resize the local pane (double-click to reset)", + "localOpenFolder": "打開資料夾", + "localUploadToRemote": "上傳到伺服器", + "localUploadToRemoteMany": "上傳 {{count}} 項目到伺服器", + "localMoveToTrash": "移至垃圾桶", + "localMoveToTrashMany": "將 {{count}} 個物品移至垃圾桶", + "localTrashConfirmSingle": "將「{{name}}」移至回收站?", + "localTrashConfirmFolder": "將資料夾「{{name}}」及其所有內容移至回收站?", + "localTrashConfirmMany": "將 {{count}} 個項目移至回收站?", + "localTrashed": "已將 {{count}} 個項目移至回收站", + "localTrashFailed": "無法移至垃圾桶", + "localRenameFailed": "重新命名失敗", + "localCreateFailed": "無法建立專案", + "goToParentFolder": "轉到上資料夾", + "resizeSidebar": "拖曳即可調整側邊欄大小(雙擊即可重設)", + "resizeLocalPane": "拖曳即可調整本機窗格大小(雙擊可重設)", "columns": "欄", - "columnsHint": "Right-click to choose columns", + "columnsHint": "右鍵單擊選擇列", "emptyFolder": "此資料夾為空", "searchFiles": "搜尋檔案...", "upload": "上傳", @@ -202,26 +202,26 @@ "confirmDeleteMultipleItemsWithFolders": "確定要永久刪除 {{count}} 個項目嗎?這包含資料夾及其內容。", "confirmDeleteFolder": "確定要永久刪除資料夾「{{name}}」及其所有內容嗎?", "permanentDeleteWarning": "此動作無法復原。項目將從伺服器永久刪除。", - "moveToTrashWarning": "The item(s) will be moved to the Termix Trash and can be restored before the retention period expires.", - "itemsMovedToTrash": "{{count}} item(s) moved to Trash", - "trash": "Trash", - "trashDescription": "Deleted items are retained for {{days}} day(s) on this host.", - "trashLoadFailed": "Failed to load Trash", - "trashEmpty": "Trash is empty", + "moveToTrashWarning": "該物品將移至 Termix 回收站,可在保留期到期前恢復。", + "itemsMovedToTrash": "{{count}} 項已移至回收站", + "trash": "垃圾", + "trashDescription": "已刪除的項目將保留在本主機上 {{days}} 天。", + "trashLoadFailed": "載入回收站失敗", + "trashEmpty": "垃圾桶是空的。", "trashRestore": "還原", - "trashRestored": "Restored {{name}}", - "trashRestoreFailed": "Failed to restore item. The original path may already exist.", - "trashDeletePermanently": "Delete permanently", - "trashDeleteConfirm": "Permanently delete {{name}}? This cannot be undone.", - "trashPermanentlyDeleted": "Permanently deleted {{name}}", - "trashDeleteFailed": "Failed to permanently delete item", - "trashEmptyAction": "Empty Trash", - "trashEmptyConfirm": "Permanently delete every item in Trash? This cannot be undone.", - "trashEmptied": "Trash emptied", - "trashRetention": "Automatic cleanup after (days)", - "trashRetentionSaved": "Trash retention updated", - "trashRetentionFailed": "Failed to update Trash retention", - "trashUnavailableConfirm": "This item cannot be moved to Trash, usually because it is on another filesystem or requires elevated permissions. Delete it permanently instead?", + "trashRestored": "已恢復 {{name}}", + "trashRestoreFailed": "恢復專案失敗。原始路徑可能已存在。", + "trashDeletePermanently": "永久刪除", + "trashDeleteConfirm": "永久刪除 {{name}}?此操作無法撤銷。", + "trashPermanentlyDeleted": "永久刪除 {{name}}", + "trashDeleteFailed": "無法永久刪除項目", + "trashEmptyAction": "清空垃圾桶", + "trashEmptyConfirm": "永久刪除回收站中的所有項目?此操作無法撤銷。", + "trashEmptied": "垃圾已清空", + "trashRetention": "自動清理(天數)後", + "trashRetentionSaved": "垃圾保留狀況更新", + "trashRetentionFailed": "更新垃圾回收站保留策略失敗", + "trashUnavailableConfirm": "此項目無法移至回收站,通常是因為它位於其他檔案系統或需要更高的權限。是否將其永久刪除?", "recent": "最近", "pinned": "已釘選", "folderShortcuts": "資料夾捷徑", @@ -303,7 +303,7 @@ "operationCompleted": "{{operation}} {{count}} 個項目", "downloadFileSuccess": "檔案 {{name}} 已成功下載", "downloadFileFailed": "下載失敗", - "downloadingFile": "Downloading {{name}}…", + "downloadingFile": "正在下載 {{name}}…", "downloadProgressBytes": "{{transferred}} / {{total}}", "moveTo": "移動至 {{name}}", "diffCompareWith": "與 {{name}} 進行差異比對", @@ -323,13 +323,13 @@ "sideBySide": "並排", "inline": "內嵌", "fileComparison": "檔案比對:{{file1}} vs {{file2}}", - "fileTooLarge": "檔案過大:{{error}}", + "fileTooLarge": "File is too large (> 10MB) and cannot be opened as text for security reasons.", "sshConnectionFailed": "SSH 連線失敗。請檢查與 {{name}} ({{ip}}:{{port}}) 的連線", "loadFileFailed": "載入檔案失敗:{{error}}", "connecting": "連線中...", "connectedSuccessfully": "已成功連線", "totpVerificationFailed": "TOTP 驗證失敗", - "browserSignInFailed": "Sign-in failed. Please try again.", + "browserSignInFailed": "登入失敗,請重試。", "authenticationFailed": "驗證失敗", "incorrectPassphrase": "密碼片語錯誤。請再試一次。", "verificationCodePrompt": "驗證碼:", @@ -361,73 +361,82 @@ "used": "已使用", "of": " / ", "toggleSidebar": "切換側邊欄", - "compactLayout": "Use compact layout", - "comfortableLayout": "Use comfortable layout", + "compactLayout": "採用緊湊型佈局", + "comfortableLayout": "採用舒適的佈局", "cannotLoadPdf": "無法載入 PDF", "pdfLoadError": "載入此 PDF 檔案時發生錯誤。", - "loadingPdf": "正在載入 PDF...", + "loadingPdf": "Loading PDF viewer...", "loadingPage": "正在載入頁面...", "cancel": "取消", - "copiedItems_one": "Copied {{count}} item", - "copiedItems_other": "Copied {{count}} items", - "deleteCopiedFileFailed": "Could not delete the copy of {{name}}: {{error}}", - "dragMovedItems_one": "Moved {{count}} item to {{target}}", - "dragMovedItems_other": "Moved {{count}} items to {{target}}", - "moveBackFileFailed": "Could not move {{name}} back: {{error}}", - "terminal": "Terminal: {{host}} ({{path}})", - "dragToDesktop": "Dragging {{name}} to the desktop", - "dragFilesToDesktop": "Dragging {{count}} files to the desktop", - "folderDragUnsupported": "Dragging folders to the desktop is not supported yet", - "saveToDesktopFailed": "Save failed: {{error}}", - "dragFailedDetail": "Drag failed: {{error}}", - "videoUnsupported": "Your browser cannot play this video format.", - "downloadToPlay": "Download to play it elsewhere", - "cannotPreviewType": "Cannot preview this file type", - "cannotPreviewTypeHint": "This file type has no preview. Download it to open it in another app." + "copiedItems_one": "已複製 {{count}} 項目", + "copiedItems_other": "已複製 {{count}} 項", + "deleteCopiedFileFailed": "無法刪除 {{name}}的副本: {{error}}", + "dragMovedItems_one": "將 {{count}} 項移到 {{target}}", + "dragMovedItems_other": "已將 {{count}} 個項目移至 {{target}}", + "moveBackFileFailed": "無法將 {{name}} 向後移動: {{error}}", + "terminal": "終端: {{host}} ({{path}})", + "dragToDesktop": "將 {{name}} 拖曳到桌面", + "dragFilesToDesktop": "將 {{count}} 檔案拖曳到桌面", + "folderDragUnsupported": "目前尚不支援將資料夾拖曳到桌面。", + "saveToDesktopFailed": "儲存失敗: {{error}}", + "dragFailedDetail": "拖曳失敗: {{error}}", + "videoUnsupported": "您的瀏覽器無法播放此影片格式。", + "downloadToPlay": "下載後即可在其他地方播放", + "cannotPreviewType": "無法預覽此文件類型", + "cannotPreviewTypeHint": "此文件類型沒有預覽。請下載後在其他應用程式中開啟。", + "loadingFile": "Loading file...", + "loadingImage": "Loading image...", + "loadingEditor": "Loading editor...", + "loadingPreview": "Loading preview...", + "loadingAudio": "Loading audio player...", + "emptyPreview": "Nothing to preview yet...", + "revert": "Revert", + "openAsText": "Open as Text", + "confirmOpenAsText": "Do you want to continue opening this file as text? This may slow down your browser." }, "sftpTransfer": { "title": "SFTP", - "description": "Transfer files between two SSH hosts.", - "sourceServer": "Source Server", - "destinationServer": "Destination Server", - "selectHost": "Select host", + "description": "在兩台SSH主機之間傳輸檔案。", + "sourceServer": "來源伺服器", + "destinationServer": "目標伺服器", + "selectHost": "選擇主機", "noHostSelected": "未選擇主機", "move": "移動", "copy": "複製", "upload": "上傳", - "itemsSelected": "{{count}} item selected", - "itemsSelected_other": "{{count}} items selected", + "itemsSelected": "{{count}} 已選擇項目", + "itemsSelected_other": "{{count}} 已選擇項目", "ready": "就緒", "loadingHosts": "正在載入主機...", "name": "名稱", "modified": "修改時間", "size": "大小", - "noFiles": "No files", + "noFiles": "沒有文件", "open": "開啟", - "up": "Up", + "up": "向上", "refresh": "重新整理", - "copyToTarget": "Copy to Target Directory", + "copyToTarget": "複製到目標目錄", "rename": "重新命名", "delete": "刪除", - "editPermissions": "Edit Permissions", - "createNewFolder": "Create New Folder", - "deleteSelectedItems": "Delete Selected Items", - "deleteConfirm": "Delete {{count}} selected item?", - "deleteConfirm_other": "Delete {{count}} selected items?", + "editPermissions": "編輯權限", + "createNewFolder": "建立新資料夾", + "deleteSelectedItems": "刪除選定項目", + "deleteConfirm": "刪除 {{count}} 選取項目?", + "deleteConfirm_other": "刪除 {{count}} 選取項目?", "cancel": "取消", "save": "儲存", - "folderCreated": "Folder created", - "itemRenamed": "Item renamed", + "folderCreated": "已建立資料夾", + "itemRenamed": "項目已重新命名", "actionFailed": "操作失敗", - "itemsDeleted": "{{count}} item deleted", - "itemsDeleted_other": "{{count}} items deleted", - "deleteFailed": "Delete failed", - "permissionsUpdated": "Permissions updated", - "noRemoteSessionConnected": "No remote session connected", + "itemsDeleted": "{{count}} 項目已刪除", + "itemsDeleted_other": "{{count}} 項目已刪除", + "deleteFailed": "刪除失敗", + "permissionsUpdated": "權限已更新", + "noRemoteSessionConnected": "未連接遠端會話", "failedToListFiles": "檔案列表失敗", - "failedToRefresh": "Failed to refresh", - "destinationInsideSource": "Destination cannot be inside the selected source path.", - "sameHostNoOp": "Source and destination are the same folder." + "failedToRefresh": "刷新失敗", + "destinationInsideSource": "目標路徑不能位於所選來源路徑內。", + "sameHostNoOp": "來源資料夾和目標資料夾是同一個資料夾。" }, "hosts": { "fileManager": "檔案管理員", @@ -438,8 +447,8 @@ "loadingHost": "正在載入主機..." }, "onboarding": { - "feature_files": "File manager", - "feature_files_desc": "Browse, upload, download and edit files over SFTP without leaving the app." + "feature_files": "文件管理器", + "feature_files_desc": "無需離開應用程序,即可透過 SFTP 瀏覽、上傳、下載和編輯檔案。" }, "terminal": { "runTitle": "正在執行 {{command}} - {{host}}", @@ -464,7 +473,7 @@ "destinationPath": "目標路徑", "destMustBeDirectory": "多項目傳送時,目標必須是資料夾", "goUp": "向上", - "hostAuthRequired": "Authentication required. Open File Manager on this host first", + "hostAuthRequired": "需要進行身份驗證。請先在此主機上開啟檔案總管。", "hostConnecting": "連線中…", "hostConnectionFailed": "連線失敗", "hostDisconnected": "未連線", @@ -485,12 +494,12 @@ "methodReason": { "user_item_sftp": "您選擇了逐檔 SFTP。", "user_tar": "您選擇了 tar 封存。", - "tar_unavailable": "Tar is not available on one or both hosts, so per-file SFTP will be used instead.", - "windows_host": "A Windows host is involved, so tar is not used.", - "auto_multi_large": "Auto: multiple files including a large file ({{largestSize}}) with compressible data. Tar bundles them into one transfer.", - "auto_single_large_in_archive": "Auto: one large file ({{largestSize}}) in this set, so per-file SFTP.", - "auto_many_incompressible": "Auto: mostly incompressible data, so per-file SFTP.", - "auto_many_files": "Auto: many files ({{fileCount}}), tar cuts the per-file overhead.", + "tar_unavailable": "如果一台或兩台主機上沒有 Tar 服務,則將改用按檔案傳輸的 SFTP 服務。", + "windows_host": "由於涉及 Windows 主機,因此不使用 tar。", + "auto_multi_large": "自動:支援多個文件,其中包括一個包含可壓縮資料的大文件({{largestSize}})。 Tar 會將它們打包成一個檔案來傳輸。", + "auto_single_large_in_archive": "自動:此集合中有一個大檔案({{largestSize}}),因此請按檔案 SFTP。", + "auto_many_incompressible": "自動:資料大多不可壓縮,因此按檔案進行 SFTP 傳輸。", + "auto_many_files": "自動:多個檔案({{fileCount}}),tar 可以減少每個檔案的開銷。", "auto_default": "自動:此集合使用逐檔 SFTP。" }, "methodTar": "Tar 封存", @@ -498,11 +507,11 @@ "metricsCompress": "在來源主機壓縮: {{duration}}", "metricsExtract": "在目標主機解壓縮: {{duration}}", "metricsPrepare": "準備目標:{{duration}}", - "metricsRouteBenchmark": "Route probe: direct {{direct}}, relay {{relay}}", + "metricsRouteBenchmark": "路由探測:直 {{direct}},中繼 {{relay}}", "metricsSourceDelete": "從來源主機刪除: {{duration}}", "metricsTotal": "總計: {{duration}}", "metricsTransfer": "端對端: {{throughput}} ({{duration}})", - "metricsVerify": "SHA-256 verified: {{duration}}", + "metricsVerify": "SHA-256 已驗證: {{duration}}", "moveFolderToHost": "移動資料夾至主機…", "moveItemsToHost": "將 {{count}} 個項目移至主機…", "moveToHost": "移動到主機…", @@ -511,7 +520,7 @@ "parallelSegmentsHint": "大型檔案會分割成 256 MB 區塊。多個通道會使用獨立的連線(如同啟動多個傳輸作業)以獲取更高的總傳輸速率。", "parallelSegmentsLabel": "平行傳輸通道", "parallelSegmentsOption": "{{count}} 個通道", - "progressBenchmarking": "Selecting the fastest transfer route…", + "progressBenchmarking": "選擇最快的傳輸路線…", "progressBytes": "{{transferred}} / {{total}}", "progressCancel": "取消", "progressCancelling": "正在取消…", @@ -523,7 +532,7 @@ "progressTotalSpeed": "總計 {{speed}}({{lanes}} 個通道)", "progressTransferring": "傳輸資料中…", "progressTransferringItems": "傳輸檔案中({{current}} / {{total}})…", - "progressVerifying": "Verifying file integrity…", + "progressVerifying": "正在驗證檔案完整性…", "recentDestinations": "最近使用的目的地", "resumedHint": "已重新連線至在另一個視窗中啟動的進行中傳輸。", "retryTransfer": "重試", @@ -539,5 +548,8 @@ "metricsHopSourceRead": "來源主機 → 伺服器: {{throughput}}", "metricsHopDestSftpWrite": "伺服器 → 目標主機 (SFTP): {{throughput}}", "metricsHopDestLocalWrite": "伺服器 → 目標主機 (本機): {{throughput}}" + }, + "plugin": { + "name": "File Manager" } } diff --git a/plugins/fleets/locales/translated/bn_BD.json b/plugins/fleets/locales/translated/bn_BD.json index 18ffb4fa6..1cc33d3a6 100644 --- a/plugins/fleets/locales/translated/bn_BD.json +++ b/plugins/fleets/locales/translated/bn_BD.json @@ -1,150 +1,150 @@ { "permissions": { "view": { - "title": "View fleets", - "description": "See fleets, their members and inventory." + "title": "ফ্লিটগুলি দেখুন", + "description": "নৌবহর, তাদের সদস্য এবং মজুদ দেখুন।" }, "manage": { - "title": "Manage fleets", - "description": "Create, edit and delete fleets, change membership, and share fleets with other users or roles." + "title": "ফ্লিট পরিচালনা করুন", + "description": "ফ্লিট তৈরি, সম্পাদনা ও মুছে ফেলুন, সদস্যপদ পরিবর্তন করুন এবং অন্যান্য ব্যবহারকারী বা ভূমিকার সাথে ফ্লিট শেয়ার করুন।" }, "execute": { - "title": "Run fleet actions", - "description": "Run commands and package actions across a fleet, and transfer files to and from its member hosts." + "title": "ফ্লিট অ্যাকশন চালান", + "description": "একটি ফ্লিট জুড়ে কমান্ড ও প্যাকেজ অ্যাকশন চালান, এবং এর সদস্য হোস্টগুলোতে ফাইল আদান-প্রদান করুন।" } }, "newUi": { "sidebar": { "fleets": { - "title": "Fleets", - "createFleet": "Create Fleet", - "createFleetTitle": "Create Fleet", - "editFleetTitle": "Edit Fleet", - "createFleetDescription": "A fleet is a named group of hosts you can run actions against as a unit.", - "nameLabel": "Name", - "namePlaceholder": "e.g., Web Servers", - "nameRequired": "Fleet name is required", - "descriptionLabel": "Description", - "descriptionPlaceholder": "Optional description", - "colorLabel": "Color", - "tagRulesLabel": "Tag rules", - "tagRulesPlaceholder": "prod-web, edge", - "tagRulesHint": "Hosts with any of these tags are automatically included, in addition to hosts added manually.", - "fleetCreated": "Fleet created", - "fleetUpdated": "Fleet updated", - "fleetDeleted": "Fleet deleted", - "saveFailed": "Failed to save fleet", - "deleteFailed": "Failed to delete fleet", - "loadFailed": "Failed to load fleets", - "deleteFleetTitle": "Delete Fleet", - "deleteFleetDescription": "Are you sure you want to delete \"{{name}}\"? This does not delete the member hosts themselves.", - "searchFleets": "Search fleets...", - "noFleets": "No fleets yet. Create one to get started.", - "memberCount": "{{count}} host", - "memberCount_other": "{{count}} hosts", - "manageMembers": "Manage Members", - "manageMembersTitle": "Manage Fleet Members", - "manageMembersDescription": "Toggle hosts in or out of this fleet's static membership. Hosts matched by tag rules are always included.", - "searchHosts": "Search hosts...", - "noHostsFound": "No hosts found", - "noMembers": "This fleet has no members yet. Add hosts or set a tag rule.", - "membersLoadFailed": "Failed to load fleet members", - "memberUpdateFailed": "Failed to update fleet membership", - "tabRun": "Run Command", - "tabTransfer": "Transfer Files", - "tabInventory": "Inventory", - "openInventoryTab": "Open in full tab", - "tabPackages": "Packages", - "runOnFleet": "Run on Fleet", - "commandPlaceholder": "uptime && df -h", - "commandRequired": "A command is required", - "commandInputsLabel": "Command inputs", - "commandSucceeded": "Command succeeded on all hosts", - "commandPartialFailure": "{{failed}} of {{total}} hosts failed", - "commandFailed": "Failed to run command", - "resultSuccess": "Success", - "resultFailed": "Failed", - "push": "Push", - "pull": "Pull", - "remotePathLabel": "Remote path", - "remotePathRequired": "A remote path is required", - "fileLabel": "File", - "fileRequired": "A file is required", - "pushHint": "The selected file is written to this exact path on every host in the fleet.", - "pullHint": "The file at this path is read from every host and downloaded as a single zip, one folder per host.", - "transferComplete": "Transfer complete", - "transferFailed": "Transfer failed", - "refreshInventory": "Refresh Inventory", - "inventoryLoadFailed": "Failed to load inventory", - "inventoryRefreshed": "Inventory refreshed", - "inventoryRefreshFailed": "Failed to refresh inventory", - "inventoryNoData": "No inventory data yet - refresh to collect it.", - "inventoryHost": "Host", - "inventoryCollectedCount": "{{count}}/{{total}} collected", - "inventoryOs": "OS", - "inventoryKernel": "Kernel", - "inventoryArch": "Arch", - "inventoryUptime": "Uptime", - "inventoryPackageManager": "Package manager", - "inventoryCollectedAt": "Collected", - "packageActionLabel": "Action", - "packageInstall": "Install", - "packageRemove": "Remove", - "packageUpgradeAll": "Upgrade all packages", - "packageNameLabel": "Package name", - "packageNameRequired": "A package name is required", - "packageHint": "Requires manage-level access per host and elevates using the host's stored sudo password.", - "shareFleet": "Share Fleet", - "shareFleetTitle": "Share \"{{name}}\"", - "shareFleetDescription": "Shares this fleet's current member hosts with the selected users or roles. Hosts added to the fleet later are not shared automatically - share again to include them.", - "shareSelectionRequired": "Select at least one user or role", - "fleetSharedSuccessfully": "Shared {{shared}} of {{total}} host(s) in this fleet", - "failedToShareFleet": "Failed to share fleet", - "noMembersToShare": "This fleet has no member hosts to share yet." + "title": "ফ্লিট", + "createFleet": "ফ্লিট তৈরি করুন", + "createFleetTitle": "ফ্লিট তৈরি করুন", + "editFleetTitle": "ফ্লিট সম্পাদনা করুন", + "createFleetDescription": "ফ্লিট হলো নামযুক্ত হোস্টদের একটি দল, যাদের বিরুদ্ধে আপনি একটি ইউনিট হিসেবে বিভিন্ন অ্যাকশন চালাতে পারেন।", + "nameLabel": "নাম", + "namePlaceholder": "যেমন, ওয়েব সার্ভার", + "nameRequired": "ফ্লিটের নাম প্রয়োজন", + "descriptionLabel": "বর্ণনা", + "descriptionPlaceholder": "ঐচ্ছিক বিবরণ", + "colorLabel": "রঙ", + "tagRulesLabel": "ট্যাগ নিয়ম", + "tagRulesPlaceholder": "প্রোড-ওয়েব, এজ", + "tagRulesHint": "ম্যানুয়ালি যোগ করা হোস্টগুলোর পাশাপাশি, এই ট্যাগগুলোর যেকোনো একটি থাকা হোস্টগুলো স্বয়ংক্রিয়ভাবে অন্তর্ভুক্ত হয়ে যায়।", + "fleetCreated": "ফ্লিট তৈরি করা হয়েছে", + "fleetUpdated": "ফ্লিট আপডেট করা হয়েছে", + "fleetDeleted": "ফ্লিট মুছে ফেলা হয়েছে", + "saveFailed": "বহর সংরক্ষণ করতে ব্যর্থ হয়েছে", + "deleteFailed": "ফ্লিট মুছে ফেলতে ব্যর্থ হয়েছে", + "loadFailed": "ফ্লিট লোড করতে ব্যর্থ হয়েছে", + "deleteFleetTitle": "ফ্লিট মুছুন", + "deleteFleetDescription": "আপনি কি \"{{name}}\" মুছে ফেলতে নিশ্চিত? এটি সদস্য হোস্টদেরকে মুছে ফেলে না।", + "searchFleets": "নৌবহর অনুসন্ধান করুন...", + "noFleets": "এখনো কোনো ফ্লিট নেই। শুরু করার জন্য একটি তৈরি করুন।", + "memberCount": "{{count}} হোস্ট", + "memberCount_other": "{{count}} হোস্ট", + "manageMembers": "সদস্যদের পরিচালনা করুন", + "manageMembersTitle": "ফ্লিট সদস্যদের পরিচালনা করুন", + "manageMembersDescription": "এই ফ্লিটের স্ট্যাটিক সদস্যপদে হোস্টদের অন্তর্ভুক্ত বা বহির্ভূত করুন। ট্যাগ নিয়ম দ্বারা মেলানো হোস্টরা সর্বদা অন্তর্ভুক্ত থাকে।", + "searchHosts": "হোস্ট অনুসন্ধান করুন...", + "noHostsFound": "কোন হোস্ট খুঁজে পাওয়া যায়নি", + "noMembers": "এই ফ্লিটে এখনও কোনো সদস্য নেই। হোস্ট যোগ করুন অথবা একটি ট্যাগ নিয়ম সেট করুন।", + "membersLoadFailed": "ফ্লিট সদস্যদের লোড করতে ব্যর্থ হয়েছে", + "memberUpdateFailed": "ফ্লিট সদস্যপদ আপডেট করতে ব্যর্থ হয়েছে", + "tabRun": "রান কমান্ড", + "tabTransfer": "ফাইল স্থানান্তর করুন", + "tabInventory": "ইনভেন্টরি", + "openInventoryTab": "সম্পূর্ণ ট্যাবে খুলুন", + "tabPackages": "প্যাকেজ", + "runOnFleet": "ফ্লিটে চালান", + "commandPlaceholder": "আপটাইম && df -h", + "commandRequired": "একটি কমান্ড প্রয়োজন", + "commandInputsLabel": "কমান্ড ইনপুট", + "commandSucceeded": "সকল হোস্টে কমান্ড সফল হয়েছে।", + "commandPartialFailure": "{{failed}} এর {{total}} হোস্ট ব্যর্থ হয়েছে", + "commandFailed": "কমান্ড চালাতে ব্যর্থ হয়েছে", + "resultSuccess": "সাফল্য", + "resultFailed": "ব্যর্থ", + "push": "ধাক্কা দিন", + "pull": "টান", + "remotePathLabel": "দূরবর্তী পথ", + "remotePathRequired": "একটি দূরবর্তী পথের প্রয়োজন", + "fileLabel": "ফাইল", + "fileRequired": "একটি ফাইল প্রয়োজন", + "pushHint": "নির্বাচিত ফাইলটি ফ্লিটের প্রতিটি হোস্টের এই নির্দিষ্ট পাথে লেখা হয়।", + "pullHint": "এই পাথের ফাইলটি প্রতিটি হোস্ট থেকে পড়া হয় এবং একটি একক জিপ ফাইল হিসেবে ডাউনলোড করা হয়, যা প্রতি হোস্টে একটি করে ফোল্ডারে বিভক্ত থাকে।", + "transferComplete": "স্থানান্তর সম্পন্ন হয়েছে", + "transferFailed": "স্থানান্তর ব্যর্থ হয়েছে", + "refreshInventory": "ইনভেন্টরি রিফ্রেশ করুন", + "inventoryLoadFailed": "ইনভেন্টরি লোড করতে ব্যর্থ হয়েছে", + "inventoryRefreshed": "ইনভেন্টরি রিফ্রেশ করা হয়েছে", + "inventoryRefreshFailed": "ইনভেন্টরি রিফ্রেশ করতে ব্যর্থ হয়েছে", + "inventoryNoData": "এখনও কোনো ইনভেন্টরি ডেটা নেই - এটি সংগ্রহ করতে রিফ্রেশ করুন।", + "inventoryHost": "হোস্ট", + "inventoryCollectedCount": "{{count}}/{{total}} সংগৃহীত", + "inventoryOs": "ওএস", + "inventoryKernel": "কার্নেল", + "inventoryArch": "খিলান", + "inventoryUptime": "আপটাইম", + "inventoryPackageManager": "প্যাকেজ ম্যানেজার", + "inventoryCollectedAt": "সংগৃহীত", + "packageActionLabel": "পদক্ষেপ", + "packageInstall": "ইনস্টল করুন", + "packageRemove": "অপসারণ করুন", + "packageUpgradeAll": "সমস্ত প্যাকেজ আপগ্রেড করুন", + "packageNameLabel": "প্যাকেজের নাম", + "packageNameRequired": "একটি প্যাকেজের নাম প্রয়োজন", + "packageHint": "প্রতিটি হোস্টের জন্য ম্যানেজ-লেভেল অ্যাক্সেস প্রয়োজন এবং হোস্টের সংরক্ষিত sudo পাসওয়ার্ড ব্যবহার করে অ্যাক্সেস উন্নত করা হয়।", + "shareFleet": "শেয়ার ফ্লিট", + "shareFleetTitle": "শেয়ার করুন \"{{name}}\"", + "shareFleetDescription": "এই ফ্লিটের বর্তমান সদস্য হোস্টগুলোকে নির্বাচিত ব্যবহারকারী বা রোলের সাথে শেয়ার করে। ফ্লিটে পরে যোগ করা হোস্টগুলো স্বয়ংক্রিয়ভাবে শেয়ার হয় না - সেগুলোকে অন্তর্ভুক্ত করতে আবার শেয়ার করুন।", + "shareSelectionRequired": "অন্তত একজন ব্যবহারকারী বা ভূমিকা নির্বাচন করুন", + "fleetSharedSuccessfully": "এই ফ্লিটে {{total}} টি {{shared}} টি শেয়ার করা হোস্ট রয়েছে।", + "failedToShareFleet": "ফ্লিট শেয়ার করতে ব্যর্থ হয়েছে", + "noMembersToShare": "এই ফ্লিটে এখনও শেয়ার করার মতো কোনো সদস্য হোস্ট নেই।" } } }, "nav": { - "fleets": "Fleets" + "fleets": "ফ্লিট" }, "hosts": { - "docsLink": "View docs", + "docsLink": "নথি দেখুন", "sharing": { - "customHoursPlaceholder": "Hours until access expires", + "customHoursPlaceholder": "অ্যাক্সেসের মেয়াদ শেষ হতে বাকি ঘন্টা", "expiry": { - "never": "Never", - "oneHour": "1 hour", - "oneDay": "24 hours", - "sevenDays": "7 days", - "thirtyDays": "30 days", - "custom": "Custom" + "never": "কখনো না", + "oneHour": "১ ঘন্টা", + "oneDay": "২৪ ঘন্টা", + "sevenDays": "৭ দিন", + "thirtyDays": "৩০ দিন", + "custom": "কাস্টম" }, - "expiryLabel": "Access expiry", + "expiryLabel": "অ্যাক্সেসের মেয়াদ শেষ", "levels": { "connect": { - "label": "Connect", - "description": "Open sessions only: terminal, remote desktop, file manager, tunnels and Docker. No access to the host configuration." + "label": "সংযোগ করুন", + "description": "শুধুমাত্র টার্মিনাল, রিমোট ডেস্কটপ, ফাইল ম্যানেজার, টানেল এবং ডকার সেশনগুলো খোলা থাকবে। হোস্ট কনফিগারেশনে কোনো অ্যাক্সেস নেই।" }, "view": { - "label": "View", - "description": "Connect, plus see the host configuration. Secrets are never shown." + "label": "দেখুন", + "description": "সংযোগ করুন, এবং হোস্ট কনফিগারেশন দেখুন। গোপনীয় তথ্য কখনোই দেখানো হয় না।" }, "edit": { - "label": "Edit", - "description": "View, plus modify non-authentication host settings. The owner's SSH authentication stays private and owner-only." + "label": "সম্পাদনা", + "description": "নন-অথেনটিকেশন হোস্ট সেটিংস দেখুন এবং পরিবর্তন করুন। মালিকের SSH অথেনটিকেশন ব্যক্তিগত এবং শুধুমাত্র মালিকের জন্যই সংরক্ষিত থাকে।" }, "manage": { - "label": "Manage", - "description": "Edit, plus share the host with others, change permission levels and revoke access." + "label": "পরিচালনা করুন", + "description": "সম্পাদনা করুন, সেইসাথে অন্যদের সাথে হোস্টটি শেয়ার করুন, অনুমতির স্তর পরিবর্তন করুন এবং অ্যাক্সেস প্রত্যাহার করুন।" } }, - "noMatches": "No matches found", - "permissionLevelLabel": "Permission level", - "rolesTab": "Roles", - "searchPlaceholder": "Search users or roles...", - "shareButton": "Share", - "shareWithCount": "Share ({{count}})", - "usersTab": "Users" + "noMatches": "কোনো মিল খুঁজে পাওয়া যায়নি", + "permissionLevelLabel": "অনুমতি স্তর", + "rolesTab": "ভূমিকা", + "searchPlaceholder": "ব্যবহারকারী বা ভূমিকা অনুসন্ধান করুন...", + "shareButton": "শেয়ার", + "shareWithCount": "শেয়ার করুন ({{count}})", + "usersTab": "ব্যবহারকারীরা" } } } diff --git a/plugins/fleets/locales/translated/hi_IN.json b/plugins/fleets/locales/translated/hi_IN.json index 0c51d8703..b30adc2d9 100644 --- a/plugins/fleets/locales/translated/hi_IN.json +++ b/plugins/fleets/locales/translated/hi_IN.json @@ -1,111 +1,111 @@ { "permissions": { "view": { - "title": "View fleets", - "description": "See fleets, their members and inventory." + "title": "बेड़े देखें", + "description": "बेड़े, उनके सदस्य और माल सूची देखें।" }, "manage": { - "title": "Manage fleets", - "description": "Create, edit and delete fleets, change membership, and share fleets with other users or roles." + "title": "बेड़े का प्रबंधन करें", + "description": "फ्लीट बनाएं, संपादित करें और हटाएं, सदस्यता बदलें और फ्लीट को अन्य उपयोगकर्ताओं या भूमिकाओं के साथ साझा करें।" }, "execute": { - "title": "Run fleet actions", - "description": "Run commands and package actions across a fleet, and transfer files to and from its member hosts." + "title": "फ्लीट कार्रवाइयां चलाएं", + "description": "एक फ्लीट में कमांड चलाएं और पैकेज संबंधी कार्रवाइयां करें, और इसके सदस्य होस्ट से और उनके बीच फाइलें स्थानांतरित करें।" } }, "newUi": { "sidebar": { "fleets": { - "title": "Fleets", - "createFleet": "Create Fleet", - "createFleetTitle": "Create Fleet", - "editFleetTitle": "Edit Fleet", - "createFleetDescription": "A fleet is a named group of hosts you can run actions against as a unit.", + "title": "बेड़े", + "createFleet": "बेड़ा बनाएं", + "createFleetTitle": "बेड़ा बनाएं", + "editFleetTitle": "बेड़े को संपादित करें", + "createFleetDescription": "फ्लीट होस्ट का एक नामित समूह है जिसके विरुद्ध आप एक इकाई के रूप में कार्रवाई कर सकते हैं।", "nameLabel": "नाम", - "namePlaceholder": "e.g., Web Servers", - "nameRequired": "Fleet name is required", + "namePlaceholder": "उदाहरण के लिए, वेब सर्वर", + "nameRequired": "बेड़े का नाम आवश्यक है", "descriptionLabel": "विवरण", "descriptionPlaceholder": "वैकल्पिक विवरण", "colorLabel": "रंग", - "tagRulesLabel": "Tag rules", - "tagRulesPlaceholder": "prod-web, edge", - "tagRulesHint": "Hosts with any of these tags are automatically included, in addition to hosts added manually.", - "fleetCreated": "Fleet created", - "fleetUpdated": "Fleet updated", - "fleetDeleted": "Fleet deleted", - "saveFailed": "Failed to save fleet", - "deleteFailed": "Failed to delete fleet", - "loadFailed": "Failed to load fleets", - "deleteFleetTitle": "Delete Fleet", - "deleteFleetDescription": "Are you sure you want to delete \"{{name}}\"? This does not delete the member hosts themselves.", - "searchFleets": "Search fleets...", - "noFleets": "No fleets yet. Create one to get started.", - "memberCount": "{{count}} host", + "tagRulesLabel": "टैग नियम", + "tagRulesPlaceholder": "प्रोड-वेब, एज", + "tagRulesHint": "मैन्युअल रूप से जोड़े गए होस्ट के अतिरिक्त, इनमें से किसी भी टैग वाले होस्ट स्वचालित रूप से शामिल हो जाते हैं।", + "fleetCreated": "बेड़ा बनाया गया", + "fleetUpdated": "बेड़े को अपडेट किया गया", + "fleetDeleted": "बेड़ा हटा दिया गया", + "saveFailed": "बेड़े को बचाने में विफल", + "deleteFailed": "बेड़ा हटाने में विफल", + "loadFailed": "फ्लीट लोड करने में विफल", + "deleteFleetTitle": "बेड़ा हटाएं", + "deleteFleetDescription": "क्या आप वाकई \"{{name}}\" को हटाना चाहते हैं? इससे सदस्य होस्ट स्वयं नहीं हटेंगे।", + "searchFleets": "खोज बेड़े...", + "noFleets": "अभी तक कोई बेड़ा नहीं है। शुरुआत करने के लिए एक बेड़ा बनाएं।", + "memberCount": "{{count}} होस्ट", "memberCount_other": "{{count}} होस्ट", - "manageMembers": "Manage Members", - "manageMembersTitle": "Manage Fleet Members", - "manageMembersDescription": "Toggle hosts in or out of this fleet's static membership. Hosts matched by tag rules are always included.", + "manageMembers": "सदस्यों का प्रबंधन करें", + "manageMembersTitle": "बेड़े के सदस्यों का प्रबंधन करें", + "manageMembersDescription": "इस फ्लीट की स्थायी सदस्यता में होस्ट को शामिल या बाहर करें। टैग नियमों द्वारा मेल खाने वाले होस्ट हमेशा शामिल होते हैं।", "searchHosts": "होस्ट खोजें...", "noHostsFound": "कोई होस्ट नहीं मिला", - "noMembers": "This fleet has no members yet. Add hosts or set a tag rule.", - "membersLoadFailed": "Failed to load fleet members", - "memberUpdateFailed": "Failed to update fleet membership", - "tabRun": "Run Command", - "tabTransfer": "Transfer Files", - "tabInventory": "Inventory", - "openInventoryTab": "Open in full tab", + "noMembers": "इस फ्लीट में अभी कोई सदस्य नहीं है। होस्ट जोड़ें या टैग नियम सेट करें।", + "membersLoadFailed": "फ्लीट सदस्यों को लोड करने में विफल", + "memberUpdateFailed": "फ्लीट सदस्यता को अपडेट करने में विफल", + "tabRun": "कमांड चलाएँ", + "tabTransfer": "फ़ाइलें स्थानांतरित करें", + "tabInventory": "भंडार", + "openInventoryTab": "पूरे टैब में खोलें", "tabPackages": "पैकेजेस", - "runOnFleet": "Run on Fleet", - "commandPlaceholder": "uptime && df -h", - "commandRequired": "A command is required", - "commandInputsLabel": "Command inputs", - "commandSucceeded": "Command succeeded on all hosts", - "commandPartialFailure": "{{failed}} of {{total}} hosts failed", - "commandFailed": "Failed to run command", + "runOnFleet": "फ्लीट पर चलाएँ", + "commandPlaceholder": "अपटाइम && df -h", + "commandRequired": "एक आदेश आवश्यक है", + "commandInputsLabel": "कमांड इनपुट", + "commandSucceeded": "सभी होस्ट पर कमांड सफलतापूर्वक संचालित हुई।", + "commandPartialFailure": "{{failed}} में से {{total}} होस्ट विफल हो गए", + "commandFailed": "कमांड चलाने में विफल", "resultSuccess": "सफल", "resultFailed": "असफल", - "push": "Push", - "pull": "Pull", - "remotePathLabel": "Remote path", - "remotePathRequired": "A remote path is required", + "push": "धकेलना", + "pull": "खींचो", + "remotePathLabel": "दूरस्थ पथ", + "remotePathRequired": "एक दूरस्थ मार्ग आवश्यक है", "fileLabel": "फ़ाइल", - "fileRequired": "A file is required", - "pushHint": "The selected file is written to this exact path on every host in the fleet.", - "pullHint": "The file at this path is read from every host and downloaded as a single zip, one folder per host.", + "fileRequired": "एक फ़ाइल आवश्यक है", + "pushHint": "चयनित फ़ाइल को फ्लीट में मौजूद प्रत्येक होस्ट पर ठीक इसी पथ पर लिखा जाता है।", + "pullHint": "इस पथ पर स्थित फ़ाइल को प्रत्येक होस्ट से पढ़ा जाता है और एक ही ज़िप फ़ाइल के रूप में डाउनलोड किया जाता है, जिसमें प्रत्येक होस्ट के लिए एक फ़ोल्डर होता है।", "transferComplete": "स्थानांतरण पूर्ण", "transferFailed": "स्थानांतरण विफल", - "refreshInventory": "Refresh Inventory", - "inventoryLoadFailed": "Failed to load inventory", - "inventoryRefreshed": "Inventory refreshed", - "inventoryRefreshFailed": "Failed to refresh inventory", - "inventoryNoData": "No inventory data yet - refresh to collect it.", + "refreshInventory": "इन्वेंट्री रीफ़्रेश करें", + "inventoryLoadFailed": "इन्वेंट्री लोड करने में विफल", + "inventoryRefreshed": "इन्वेंट्री रीफ़्रेश हो गई", + "inventoryRefreshFailed": "इन्वेंट्री को रीफ़्रेश करने में विफल", + "inventoryNoData": "अभी कोई इन्वेंट्री डेटा उपलब्ध नहीं है - इसे प्राप्त करने के लिए पेज को रिफ्रेश करें।", "inventoryHost": "होस्ट", - "inventoryCollectedCount": "{{count}}/{{total}} collected", + "inventoryCollectedCount": "{{count}}/{{total}} एकत्रित", "inventoryOs": "ओएस", "inventoryKernel": "कर्नेल", - "inventoryArch": "Arch", + "inventoryArch": "मेहराब", "inventoryUptime": "अपटाइम", - "inventoryPackageManager": "Package manager", - "inventoryCollectedAt": "Collected", + "inventoryPackageManager": "पैकेज प्रबंधक", + "inventoryCollectedAt": "एकत्र किया हुआ", "packageActionLabel": "क्रिया", - "packageInstall": "Install", + "packageInstall": "स्थापित करना", "packageRemove": "हटाएँ", - "packageUpgradeAll": "Upgrade all packages", - "packageNameLabel": "Package name", - "packageNameRequired": "A package name is required", - "packageHint": "Requires manage-level access per host and elevates using the host's stored sudo password.", - "shareFleet": "Share Fleet", - "shareFleetTitle": "Share \"{{name}}\"", - "shareFleetDescription": "Shares this fleet's current member hosts with the selected users or roles. Hosts added to the fleet later are not shared automatically - share again to include them.", - "shareSelectionRequired": "Select at least one user or role", - "fleetSharedSuccessfully": "Shared {{shared}} of {{total}} host(s) in this fleet", - "failedToShareFleet": "Failed to share fleet", - "noMembersToShare": "This fleet has no member hosts to share yet." + "packageUpgradeAll": "सभी पैकेजों को अपग्रेड करें", + "packageNameLabel": "पैकेज का नाम", + "packageNameRequired": "पैकेज का नाम आवश्यक है", + "packageHint": "प्रत्येक होस्ट के लिए प्रबंधन-स्तर की पहुँच आवश्यक है और होस्ट के संग्रहीत सूडो पासवर्ड का उपयोग करके पहुँच को बढ़ाया जा सकता है।", + "shareFleet": "शेयर फ्लीट", + "shareFleetTitle": "शेयर करें \"{{name}}\"", + "shareFleetDescription": "यह सेवा इस फ्लीट के वर्तमान सदस्य होस्ट्स को चयनित उपयोगकर्ताओं या भूमिकाओं के साथ साझा करती है। फ्लीट में बाद में जोड़े गए होस्ट्स स्वचालित रूप से साझा नहीं होते हैं - उन्हें शामिल करने के लिए पुनः साझा करें।", + "shareSelectionRequired": "कम से कम एक उपयोगकर्ता या भूमिका का चयन करें", + "fleetSharedSuccessfully": "इस बेड़े में {{total}} मेज़बान(ओं) का साझा {{shared}} है", + "failedToShareFleet": "बेड़ा साझा करने में विफल", + "noMembersToShare": "इस फ्लीट में अभी तक कोई सदस्य होस्ट नहीं है जो अपनी सेवाएं साझा कर सके।" } } }, "nav": { - "fleets": "Fleets" + "fleets": "बेड़े" }, "hosts": { "docsLink": "दस्तावेज़ देखें", @@ -131,7 +131,7 @@ }, "edit": { "label": "संपादित करें", - "description": "View, plus modify non-authentication host settings. The owner's SSH authentication stays private and owner-only." + "description": "आप बिना प्रमाणीकरण वाले होस्ट की सेटिंग्स देख सकते हैं और उनमें बदलाव कर सकते हैं। मालिक का SSH प्रमाणीकरण गोपनीय रहता है और केवल मालिक के लिए ही उपलब्ध होता है।" }, "manage": { "label": "प्रबंधित करें", diff --git a/plugins/fleets/locales/translated/id_ID.json b/plugins/fleets/locales/translated/id_ID.json index 18ffb4fa6..4ac96588a 100644 --- a/plugins/fleets/locales/translated/id_ID.json +++ b/plugins/fleets/locales/translated/id_ID.json @@ -1,150 +1,150 @@ { "permissions": { "view": { - "title": "View fleets", - "description": "See fleets, their members and inventory." + "title": "Lihat armada", + "description": "Lihat armada, anggotanya, dan inventarisnya." }, "manage": { - "title": "Manage fleets", - "description": "Create, edit and delete fleets, change membership, and share fleets with other users or roles." + "title": "Mengelola armada", + "description": "Buat, edit, dan hapus armada, ubah keanggotaan, dan bagikan armada dengan pengguna atau peran lain." }, "execute": { - "title": "Run fleet actions", - "description": "Run commands and package actions across a fleet, and transfer files to and from its member hosts." + "title": "Jalankan tindakan armada.", + "description": "Jalankan perintah dan tindakan paket di seluruh armada, dan transfer file ke dan dari host anggotanya." } }, "newUi": { "sidebar": { "fleets": { - "title": "Fleets", - "createFleet": "Create Fleet", - "createFleetTitle": "Create Fleet", - "editFleetTitle": "Edit Fleet", - "createFleetDescription": "A fleet is a named group of hosts you can run actions against as a unit.", - "nameLabel": "Name", - "namePlaceholder": "e.g., Web Servers", - "nameRequired": "Fleet name is required", - "descriptionLabel": "Description", - "descriptionPlaceholder": "Optional description", - "colorLabel": "Color", - "tagRulesLabel": "Tag rules", - "tagRulesPlaceholder": "prod-web, edge", - "tagRulesHint": "Hosts with any of these tags are automatically included, in addition to hosts added manually.", - "fleetCreated": "Fleet created", - "fleetUpdated": "Fleet updated", - "fleetDeleted": "Fleet deleted", - "saveFailed": "Failed to save fleet", - "deleteFailed": "Failed to delete fleet", - "loadFailed": "Failed to load fleets", - "deleteFleetTitle": "Delete Fleet", - "deleteFleetDescription": "Are you sure you want to delete \"{{name}}\"? This does not delete the member hosts themselves.", - "searchFleets": "Search fleets...", - "noFleets": "No fleets yet. Create one to get started.", - "memberCount": "{{count}} host", - "memberCount_other": "{{count}} hosts", - "manageMembers": "Manage Members", - "manageMembersTitle": "Manage Fleet Members", - "manageMembersDescription": "Toggle hosts in or out of this fleet's static membership. Hosts matched by tag rules are always included.", - "searchHosts": "Search hosts...", - "noHostsFound": "No hosts found", - "noMembers": "This fleet has no members yet. Add hosts or set a tag rule.", - "membersLoadFailed": "Failed to load fleet members", - "memberUpdateFailed": "Failed to update fleet membership", - "tabRun": "Run Command", - "tabTransfer": "Transfer Files", - "tabInventory": "Inventory", - "openInventoryTab": "Open in full tab", - "tabPackages": "Packages", - "runOnFleet": "Run on Fleet", - "commandPlaceholder": "uptime && df -h", - "commandRequired": "A command is required", - "commandInputsLabel": "Command inputs", - "commandSucceeded": "Command succeeded on all hosts", - "commandPartialFailure": "{{failed}} of {{total}} hosts failed", - "commandFailed": "Failed to run command", - "resultSuccess": "Success", - "resultFailed": "Failed", - "push": "Push", - "pull": "Pull", - "remotePathLabel": "Remote path", - "remotePathRequired": "A remote path is required", - "fileLabel": "File", - "fileRequired": "A file is required", - "pushHint": "The selected file is written to this exact path on every host in the fleet.", - "pullHint": "The file at this path is read from every host and downloaded as a single zip, one folder per host.", - "transferComplete": "Transfer complete", - "transferFailed": "Transfer failed", - "refreshInventory": "Refresh Inventory", - "inventoryLoadFailed": "Failed to load inventory", - "inventoryRefreshed": "Inventory refreshed", - "inventoryRefreshFailed": "Failed to refresh inventory", - "inventoryNoData": "No inventory data yet - refresh to collect it.", - "inventoryHost": "Host", - "inventoryCollectedCount": "{{count}}/{{total}} collected", - "inventoryOs": "OS", - "inventoryKernel": "Kernel", - "inventoryArch": "Arch", - "inventoryUptime": "Uptime", - "inventoryPackageManager": "Package manager", - "inventoryCollectedAt": "Collected", - "packageActionLabel": "Action", - "packageInstall": "Install", - "packageRemove": "Remove", - "packageUpgradeAll": "Upgrade all packages", - "packageNameLabel": "Package name", - "packageNameRequired": "A package name is required", - "packageHint": "Requires manage-level access per host and elevates using the host's stored sudo password.", - "shareFleet": "Share Fleet", - "shareFleetTitle": "Share \"{{name}}\"", - "shareFleetDescription": "Shares this fleet's current member hosts with the selected users or roles. Hosts added to the fleet later are not shared automatically - share again to include them.", - "shareSelectionRequired": "Select at least one user or role", - "fleetSharedSuccessfully": "Shared {{shared}} of {{total}} host(s) in this fleet", - "failedToShareFleet": "Failed to share fleet", - "noMembersToShare": "This fleet has no member hosts to share yet." + "title": "Armada", + "createFleet": "Buat Armada", + "createFleetTitle": "Buat Armada", + "editFleetTitle": "Edit Armada", + "createFleetDescription": "Armada adalah kelompok host bernama yang dapat Anda serang sebagai satu unit.", + "nameLabel": "Nama", + "namePlaceholder": "misalnya, Server Web", + "nameRequired": "Nama armada wajib diisi.", + "descriptionLabel": "Keterangan", + "descriptionPlaceholder": "Deskripsi opsional", + "colorLabel": "Warna", + "tagRulesLabel": "Aturan tag", + "tagRulesPlaceholder": "prod-web, tepi", + "tagRulesHint": "Host yang memiliki salah satu tag ini akan disertakan secara otomatis, di samping host yang ditambahkan secara manual.", + "fleetCreated": "Armada yang dibuat", + "fleetUpdated": "Armada diperbarui", + "fleetDeleted": "Armada dihapus", + "saveFailed": "Gagal menyelamatkan armada.", + "deleteFailed": "Gagal menghapus armada", + "loadFailed": "Gagal memuat armada", + "deleteFleetTitle": "Hapus Armada", + "deleteFleetDescription": "Apakah Anda yakin ingin menghapus \"{{name}}\"? Ini tidak menghapus host anggota itu sendiri.", + "searchFleets": "Armada pencarian...", + "noFleets": "Belum ada armada. Buat satu untuk memulai.", + "memberCount": "{{count}} tuan rumah", + "memberCount_other": "{{count}} tuan rumah", + "manageMembers": "Kelola Anggota", + "manageMembersTitle": "Mengelola Anggota Armada", + "manageMembersDescription": "Aktifkan atau nonaktifkan keanggotaan statis host dalam armada ini. Host yang cocok dengan aturan tag akan selalu disertakan.", + "searchHosts": "Cari host...", + "noHostsFound": "Tidak ada host yang ditemukan.", + "noMembers": "Armada ini belum memiliki anggota. Tambahkan host atau tetapkan aturan tag.", + "membersLoadFailed": "Gagal memuat anggota armada", + "memberUpdateFailed": "Gagal memperbarui keanggotaan armada.", + "tabRun": "Jalankan Perintah", + "tabTransfer": "Transfer File", + "tabInventory": "Inventaris", + "openInventoryTab": "Buka di tab penuh", + "tabPackages": "Paket", + "runOnFleet": "Lari di Armada", + "commandPlaceholder": "waktu aktif && df -h", + "commandRequired": "Diperlukan sebuah perintah.", + "commandInputsLabel": "Masukan perintah", + "commandSucceeded": "Perintah berhasil dijalankan di semua host.", + "commandPartialFailure": "{{failed}} dari {{total}} host gagal", + "commandFailed": "Perintah gagal dijalankan.", + "resultSuccess": "Kesuksesan", + "resultFailed": "Gagal", + "push": "Dorongan", + "pull": "Menarik", + "remotePathLabel": "Jalur jarak jauh", + "remotePathRequired": "Diperlukan jalur jarak jauh.", + "fileLabel": "Mengajukan", + "fileRequired": "Diperlukan sebuah berkas.", + "pushHint": "File yang dipilih akan ditulis ke jalur persis ini di setiap host dalam armada.", + "pullHint": "Berkas di jalur ini dibaca dari setiap host dan diunduh sebagai satu file zip, satu folder per host.", + "transferComplete": "Transfer selesai", + "transferFailed": "Transfer gagal", + "refreshInventory": "Perbarui Inventaris", + "inventoryLoadFailed": "Gagal memuat inventaris", + "inventoryRefreshed": "Persediaan diperbarui", + "inventoryRefreshFailed": "Gagal memperbarui inventaris", + "inventoryNoData": "Belum ada data inventaris - segarkan halaman untuk mengumpulkannya.", + "inventoryHost": "Tuan rumah", + "inventoryCollectedCount": "{{count}}/{{total}} dikumpulkan", + "inventoryOs": "Sistem Operasi", + "inventoryKernel": "Inti", + "inventoryArch": "Lengkungan", + "inventoryUptime": "Waktu aktif", + "inventoryPackageManager": "Pengelola paket", + "inventoryCollectedAt": "Dikumpulkan", + "packageActionLabel": "Tindakan", + "packageInstall": "Memasang", + "packageRemove": "Menghapus", + "packageUpgradeAll": "Tingkatkan semua paket", + "packageNameLabel": "Nama paket", + "packageNameRequired": "Nama paket wajib diisi.", + "packageHint": "Membutuhkan akses tingkat pengelola per host dan ditingkatkan menggunakan kata sandi sudo yang tersimpan di host tersebut.", + "shareFleet": "Armada Bersama", + "shareFleetTitle": "Bagikan \"{{name}}\"", + "shareFleetDescription": "Membagikan host anggota armada saat ini kepada pengguna atau peran yang dipilih. Host yang ditambahkan ke armada kemudian tidak dibagikan secara otomatis - bagikan lagi untuk menyertakannya.", + "shareSelectionRequired": "Pilih setidaknya satu pengguna atau peran", + "fleetSharedSuccessfully": "Berbagi {{shared}} dari {{total}} host di armada ini", + "failedToShareFleet": "Gagal berbagi armada", + "noMembersToShare": "Armada ini belum memiliki anggota yang dapat dibagikan." } } }, "nav": { - "fleets": "Fleets" + "fleets": "Armada" }, "hosts": { - "docsLink": "View docs", + "docsLink": "Lihat dokumen", "sharing": { - "customHoursPlaceholder": "Hours until access expires", + "customHoursPlaceholder": "Waktu hingga akses berakhir", "expiry": { - "never": "Never", - "oneHour": "1 hour", - "oneDay": "24 hours", - "sevenDays": "7 days", - "thirtyDays": "30 days", - "custom": "Custom" + "never": "Tidak pernah", + "oneHour": "1 jam", + "oneDay": "24 jam", + "sevenDays": "7 hari", + "thirtyDays": "30 hari", + "custom": "Kebiasaan" }, - "expiryLabel": "Access expiry", + "expiryLabel": "Kedaluwarsa akses", "levels": { "connect": { - "label": "Connect", - "description": "Open sessions only: terminal, remote desktop, file manager, tunnels and Docker. No access to the host configuration." + "label": "Menghubungkan", + "description": "Hanya sesi yang diizinkan untuk dibuka: terminal, desktop jarak jauh, pengelola file, terowongan, dan Docker. Tidak ada akses ke konfigurasi host." }, "view": { - "label": "View", - "description": "Connect, plus see the host configuration. Secrets are never shown." + "label": "Melihat", + "description": "Hubungkan, dan lihat konfigurasi host. Rahasia tidak akan pernah ditampilkan." }, "edit": { "label": "Edit", - "description": "View, plus modify non-authentication host settings. The owner's SSH authentication stays private and owner-only." + "description": "Lihat, dan ubah pengaturan host non-autentikasi. Autentikasi SSH pemilik tetap bersifat pribadi dan hanya untuk pemilik." }, "manage": { - "label": "Manage", - "description": "Edit, plus share the host with others, change permission levels and revoke access." + "label": "Mengelola", + "description": "Edit, bagikan host dengan orang lain, ubah tingkat izin, dan cabut akses." } }, - "noMatches": "No matches found", - "permissionLevelLabel": "Permission level", - "rolesTab": "Roles", - "searchPlaceholder": "Search users or roles...", - "shareButton": "Share", - "shareWithCount": "Share ({{count}})", - "usersTab": "Users" + "noMatches": "Tidak ditemukan kecocokan.", + "permissionLevelLabel": "Tingkat izin", + "rolesTab": "Peran", + "searchPlaceholder": "Cari pengguna atau peran...", + "shareButton": "Membagikan", + "shareWithCount": "Bagikan ({{count}})", + "usersTab": "Pengguna" } } } diff --git a/plugins/fleets/locales/translated/no_NO.json b/plugins/fleets/locales/translated/no_NO.json index 7ae1226eb..def3cc808 100644 --- a/plugins/fleets/locales/translated/no_NO.json +++ b/plugins/fleets/locales/translated/no_NO.json @@ -1,149 +1,149 @@ { "permissions": { "view": { - "title": "View fleets", - "description": "See fleets, their members and inventory." + "title": "Se flåter", + "description": "Se flåter, deres medlemmer og inventar." }, "manage": { - "title": "Manage fleets", - "description": "Create, edit and delete fleets, change membership, and share fleets with other users or roles." + "title": "Administrer flåter", + "description": "Opprett, rediger og slett flåter, endre medlemskap og del flåter med andre brukere eller roller." }, "execute": { - "title": "Run fleet actions", - "description": "Run commands and package actions across a fleet, and transfer files to and from its member hosts." + "title": "Kjør flåtehandlinger", + "description": "Kjør kommandoer og pakkehandlinger på tvers av en flåte, og overfør filer til og fra medlemsvertene." } }, "newUi": { "sidebar": { "fleets": { - "title": "Fleets", - "createFleet": "Create Fleet", - "createFleetTitle": "Create Fleet", - "editFleetTitle": "Edit Fleet", - "createFleetDescription": "A fleet is a named group of hosts you can run actions against as a unit.", + "title": "Flåter", + "createFleet": "Opprett flåte", + "createFleetTitle": "Opprett flåte", + "editFleetTitle": "Rediger flåte", + "createFleetDescription": "En flåte er en navngitt gruppe verter du kan kjøre handlinger mot som en enhet.", "nameLabel": "Navn", - "namePlaceholder": "e.g., Web Servers", - "nameRequired": "Fleet name is required", + "namePlaceholder": "f.eks. webservere", + "nameRequired": "Flåtenavn er obligatorisk", "descriptionLabel": "Beskrivelse", "descriptionPlaceholder": "Valgfri beskrivelse", - "colorLabel": "Color", - "tagRulesLabel": "Tag rules", - "tagRulesPlaceholder": "prod-web, edge", - "tagRulesHint": "Hosts with any of these tags are automatically included, in addition to hosts added manually.", - "fleetCreated": "Fleet created", - "fleetUpdated": "Fleet updated", - "fleetDeleted": "Fleet deleted", - "saveFailed": "Failed to save fleet", - "deleteFailed": "Failed to delete fleet", - "loadFailed": "Failed to load fleets", - "deleteFleetTitle": "Delete Fleet", - "deleteFleetDescription": "Are you sure you want to delete \"{{name}}\"? This does not delete the member hosts themselves.", - "searchFleets": "Search fleets...", - "noFleets": "No fleets yet. Create one to get started.", - "memberCount": "{{count}} host", + "colorLabel": "Farge", + "tagRulesLabel": "Taggregler", + "tagRulesPlaceholder": "prod-web, kant", + "tagRulesHint": "Verter med noen av disse taggene inkluderes automatisk, i tillegg til verter som legges til manuelt.", + "fleetCreated": "Flåte opprettet", + "fleetUpdated": "Flåten er oppdatert", + "fleetDeleted": "Flåten er slettet", + "saveFailed": "Kunne ikke lagre flåten", + "deleteFailed": "Kunne ikke slette flåten", + "loadFailed": "Kunne ikke laste inn flåter", + "deleteFleetTitle": "Slett flåte", + "deleteFleetDescription": "Er du sikker på at du vil slette «{{name}}»? Dette sletter ikke selve medlemsvertene.", + "searchFleets": "Søk etter flåter...", + "noFleets": "Ingen flåter ennå. Opprett en for å komme i gang.", + "memberCount": "{{count}} vert", "memberCount_other": "{{count}} verter", - "manageMembers": "Manage Members", - "manageMembersTitle": "Manage Fleet Members", - "manageMembersDescription": "Toggle hosts in or out of this fleet's static membership. Hosts matched by tag rules are always included.", - "searchHosts": "Search hosts...", - "noHostsFound": "No hosts found", - "noMembers": "This fleet has no members yet. Add hosts or set a tag rule.", - "membersLoadFailed": "Failed to load fleet members", - "memberUpdateFailed": "Failed to update fleet membership", - "tabRun": "Run Command", - "tabTransfer": "Transfer Files", - "tabInventory": "Inventory", - "openInventoryTab": "Open in full tab", - "tabPackages": "Packages", - "runOnFleet": "Run on Fleet", - "commandPlaceholder": "uptime && df -h", - "commandRequired": "A command is required", - "commandInputsLabel": "Command inputs", - "commandSucceeded": "Command succeeded on all hosts", - "commandPartialFailure": "{{failed}} of {{total}} hosts failed", - "commandFailed": "Failed to run command", + "manageMembers": "Administrer medlemmer", + "manageMembersTitle": "Administrer flåtemedlemmer", + "manageMembersDescription": "Veksle verter inn eller ut av denne flåtens statiske medlemskap. Verter som samsvarer med tagregler er alltid inkludert.", + "searchHosts": "Søk etter verter...", + "noHostsFound": "Ingen verter funnet", + "noMembers": "Denne flåten har ingen medlemmer ennå. Legg til verter eller angi en tagregel.", + "membersLoadFailed": "Kunne ikke laste inn flåtemedlemmer", + "memberUpdateFailed": "Kunne ikke oppdatere flåtemedlemskapet", + "tabRun": "Kjør kommando", + "tabTransfer": "Overfør filer", + "tabInventory": "Inventar", + "openInventoryTab": "Åpne i full fane", + "tabPackages": "Pakker", + "runOnFleet": "Kjør på flåten", + "commandPlaceholder": "oppetid og df -h", + "commandRequired": "En kommando er nødvendig", + "commandInputsLabel": "Kommandoinnganger", + "commandSucceeded": "Kommandoen lyktes på alle verter", + "commandPartialFailure": "{{failed}} av {{total}} verter mislyktes", + "commandFailed": "Kunne ikke kjøre kommandoen", "resultSuccess": "Suksess", "resultFailed": "Mislyktes", - "push": "Push", - "pull": "Pull", - "remotePathLabel": "Remote path", - "remotePathRequired": "A remote path is required", + "push": "Trykk", + "pull": "Dra", + "remotePathLabel": "Fjernbane", + "remotePathRequired": "En ekstern sti er nødvendig", "fileLabel": "Fil", - "fileRequired": "A file is required", - "pushHint": "The selected file is written to this exact path on every host in the fleet.", - "pullHint": "The file at this path is read from every host and downloaded as a single zip, one folder per host.", - "transferComplete": "Transfer complete", - "transferFailed": "Transfer failed", - "refreshInventory": "Refresh Inventory", - "inventoryLoadFailed": "Failed to load inventory", - "inventoryRefreshed": "Inventory refreshed", - "inventoryRefreshFailed": "Failed to refresh inventory", - "inventoryNoData": "No inventory data yet - refresh to collect it.", - "inventoryHost": "Host", - "inventoryCollectedCount": "{{count}}/{{total}} collected", + "fileRequired": "En fil er nødvendig", + "pushHint": "Den valgte filen skrives til denne nøyaktige banen på alle verter i flåten.", + "pullHint": "Filen på denne banen leses fra hver vert og lastes ned som en enkelt zip-fil, én mappe per vert.", + "transferComplete": "Overføringen er fullført", + "transferFailed": "Overføringen mislyktes", + "refreshInventory": "Oppdater beholdningen", + "inventoryLoadFailed": "Kunne ikke laste inn beholdningen", + "inventoryRefreshed": "Lagerbeholdningen er oppdatert", + "inventoryRefreshFailed": "Kunne ikke oppdatere beholdningen", + "inventoryNoData": "Ingen lagerdata ennå – oppdater for å samle dem inn.", + "inventoryHost": "Vert", + "inventoryCollectedCount": "{{count}}/{{total}} samlet", "inventoryOs": "OS", "inventoryKernel": "Kjerne", - "inventoryArch": "Arch", + "inventoryArch": "Buen", "inventoryUptime": "Oppetid", - "inventoryPackageManager": "Package manager", - "inventoryCollectedAt": "Collected", - "packageActionLabel": "Action", - "packageInstall": "Install", + "inventoryPackageManager": "Pakkebehandler", + "inventoryCollectedAt": "Samlet", + "packageActionLabel": "Handling", + "packageInstall": "Installer", "packageRemove": "Fjern", - "packageUpgradeAll": "Upgrade all packages", - "packageNameLabel": "Package name", - "packageNameRequired": "A package name is required", - "packageHint": "Requires manage-level access per host and elevates using the host's stored sudo password.", - "shareFleet": "Share Fleet", - "shareFleetTitle": "Share \"{{name}}\"", - "shareFleetDescription": "Shares this fleet's current member hosts with the selected users or roles. Hosts added to the fleet later are not shared automatically - share again to include them.", - "shareSelectionRequired": "Select at least one user or role", - "fleetSharedSuccessfully": "Shared {{shared}} of {{total}} host(s) in this fleet", - "failedToShareFleet": "Failed to share fleet", - "noMembersToShare": "This fleet has no member hosts to share yet." + "packageUpgradeAll": "Oppgrader alle pakker", + "packageNameLabel": "Pakkenavn", + "packageNameRequired": "Et pakkenavn er obligatorisk", + "packageHint": "Krever tilgang på administratornivå per vert og heves ved hjelp av vertens lagrede sudo-passord.", + "shareFleet": "Del flåte", + "shareFleetTitle": "Del «{{name}}»", + "shareFleetDescription": "Deler denne flåtens nåværende medlemsverter med de valgte brukerne eller rollene. Verter som legges til flåten senere deles ikke automatisk – del på nytt for å inkludere dem.", + "shareSelectionRequired": "Velg minst én bruker eller rolle", + "fleetSharedSuccessfully": "Delt {{shared}} av {{total}} vert(er) i denne flåten", + "failedToShareFleet": "Kunne ikke dele flåten", + "noMembersToShare": "Denne flåten har ingen medlemsverter å dele ennå." } } }, "nav": { - "fleets": "Fleets" + "fleets": "Flåter" }, "hosts": { - "docsLink": "View docs", + "docsLink": "Vis dokumenter", "sharing": { - "customHoursPlaceholder": "Hours until access expires", + "customHoursPlaceholder": "Timer til tilgangen utløper", "expiry": { - "never": "Never", - "oneHour": "1 hour", - "oneDay": "24 hours", - "sevenDays": "7 days", - "thirtyDays": "30 days", - "custom": "Custom" + "never": "Aldri", + "oneHour": "1 time", + "oneDay": "24 timer", + "sevenDays": "7 dager", + "thirtyDays": "30 dager", + "custom": "Skikk" }, - "expiryLabel": "Access expiry", + "expiryLabel": "Utløpsdato for tilgang", "levels": { "connect": { "label": "Koble til", - "description": "Open sessions only: terminal, remote desktop, file manager, tunnels and Docker. No access to the host configuration." + "description": "Kun åpne økter: terminal, eksternt skrivebord, filbehandler, tunneler og Docker. Ingen tilgang til vertskonfigurasjonen." }, "view": { - "label": "View", - "description": "Connect, plus see the host configuration. Secrets are never shown." + "label": "Utsikt", + "description": "Koble til, pluss se vertskonfigurasjonen. Hemmeligheter vises aldri." }, "edit": { "label": "Rediger", - "description": "View, plus modify non-authentication host settings. The owner's SSH authentication stays private and owner-only." + "description": "Vis og endre innstillinger for verter uten autentisering. Eierens SSH-autentisering forblir privat og kun for eieren." }, "manage": { - "label": "Manage", - "description": "Edit, plus share the host with others, change permission levels and revoke access." + "label": "Administrer", + "description": "Rediger, pluss del verten med andre, endre tillatelsesnivåer og tilbakekall tilgang." } }, - "noMatches": "No matches found", - "permissionLevelLabel": "Permission level", - "rolesTab": "Roles", - "searchPlaceholder": "Search users or roles...", - "shareButton": "Share", - "shareWithCount": "Share ({{count}})", + "noMatches": "Ingen treff funnet", + "permissionLevelLabel": "Tillatelsesnivå", + "rolesTab": "Roller", + "searchPlaceholder": "Søk etter brukere eller roller...", + "shareButton": "Dele", + "shareWithCount": "Del ({{count}})", "usersTab": "Brukere" } } diff --git a/plugins/fleets/locales/translated/pl_PL.json b/plugins/fleets/locales/translated/pl_PL.json index 2eff54dea..41f2d3606 100644 --- a/plugins/fleets/locales/translated/pl_PL.json +++ b/plugins/fleets/locales/translated/pl_PL.json @@ -1,16 +1,16 @@ { "permissions": { "view": { - "title": "View fleets", - "description": "See fleets, their members and inventory." + "title": "Wyświetl floty", + "description": "Zobacz floty, ich członków i zapasy." }, "manage": { - "title": "Manage fleets", - "description": "Create, edit and delete fleets, change membership, and share fleets with other users or roles." + "title": "Zarządzaj flotami", + "description": "Twórz, edytuj i usuwaj floty, zmieniaj członkostwo i udostępniaj floty innym użytkownikom lub rolom." }, "execute": { - "title": "Run fleet actions", - "description": "Run commands and package actions across a fleet, and transfer files to and from its member hosts." + "title": "Wykonaj akcje floty", + "description": "Uruchamiaj polecenia i pakiety działań w obrębie floty oraz przesyłaj pliki do i z jej hostów członkowskich." } }, "newUi": { @@ -94,13 +94,13 @@ "packageNameLabel": "Nazwa pakietu", "packageNameRequired": "Wymagana jest nazwa pakietu", "packageHint": "Wymaga dostępu na poziomie zarządzania na każdym hoście i podnosi uprawnienia zapisanym hasłem sudo hosta.", - "shareFleet": "Share Fleet", - "shareFleetTitle": "Share \"{{name}}\"", - "shareFleetDescription": "Shares this fleet's current member hosts with the selected users or roles. Hosts added to the fleet later are not shared automatically - share again to include them.", - "shareSelectionRequired": "Select at least one user or role", - "fleetSharedSuccessfully": "Shared {{shared}} of {{total}} host(s) in this fleet", - "failedToShareFleet": "Failed to share fleet", - "noMembersToShare": "This fleet has no member hosts to share yet." + "shareFleet": "Udostępnij flotę", + "shareFleetTitle": "Udostępnij „{{name}}”", + "shareFleetDescription": "Udostępnia aktualnych gospodarzy należących do tej floty wybranym użytkownikom lub rolom. Gospodarze dodani do floty później nie są udostępniani automatycznie — udostępnij ponownie, aby ich uwzględnić.", + "shareSelectionRequired": "Wybierz co najmniej jednego użytkownika lub rolę", + "fleetSharedSuccessfully": "Udostępniono {{shared}} z {{total}} hostów w tej flocie", + "failedToShareFleet": "Nie udało się udostępnić floty", + "noMembersToShare": "Ta flota nie ma jeszcze żadnych członków-gospodarzy, którymi można by się podzielić." } } }, diff --git a/plugins/fleets/locales/translated/pt_BR.json b/plugins/fleets/locales/translated/pt_BR.json index b907aaed6..4252696f7 100644 --- a/plugins/fleets/locales/translated/pt_BR.json +++ b/plugins/fleets/locales/translated/pt_BR.json @@ -1,150 +1,150 @@ { "permissions": { "view": { - "title": "View fleets", - "description": "See fleets, their members and inventory." + "title": "Ver frotas", + "description": "Veja as frotas, seus membros e inventário." }, "manage": { - "title": "Manage fleets", - "description": "Create, edit and delete fleets, change membership, and share fleets with other users or roles." + "title": "Gerenciar frotas", + "description": "Crie, edite e exclua frotas, altere a composição da frota e compartilhe frotas com outros usuários ou funções." }, "execute": { - "title": "Run fleet actions", - "description": "Run commands and package actions across a fleet, and transfer files to and from its member hosts." + "title": "Realizar operações de frota", + "description": "Execute comandos e ações de pacotes em toda a frota e transfira arquivos de e para seus hosts membros." } }, "newUi": { "sidebar": { "fleets": { - "title": "Fleets", - "createFleet": "Create Fleet", - "createFleetTitle": "Create Fleet", - "editFleetTitle": "Edit Fleet", - "createFleetDescription": "A fleet is a named group of hosts you can run actions against as a unit.", - "nameLabel": "Name", - "namePlaceholder": "e.g., Web Servers", - "nameRequired": "Fleet name is required", - "descriptionLabel": "Description", - "descriptionPlaceholder": "Optional description", - "colorLabel": "Color", - "tagRulesLabel": "Tag rules", + "title": "Frotas", + "createFleet": "Criar Frota", + "createFleetTitle": "Criar Frota", + "editFleetTitle": "Editar frota", + "createFleetDescription": "Uma frota é um grupo nomeado de hosts contra os quais você pode executar ações como uma unidade.", + "nameLabel": "Nome", + "namePlaceholder": "Por exemplo, servidores web", + "nameRequired": "É necessário nomear a frota.", + "descriptionLabel": "Descrição", + "descriptionPlaceholder": "Descrição opcional", + "colorLabel": "Cor", + "tagRulesLabel": "Regras de etiqueta", "tagRulesPlaceholder": "prod-web, edge", - "tagRulesHint": "Hosts with any of these tags are automatically included, in addition to hosts added manually.", - "fleetCreated": "Fleet created", - "fleetUpdated": "Fleet updated", - "fleetDeleted": "Fleet deleted", - "saveFailed": "Failed to save fleet", - "deleteFailed": "Failed to delete fleet", - "loadFailed": "Failed to load fleets", - "deleteFleetTitle": "Delete Fleet", - "deleteFleetDescription": "Are you sure you want to delete \"{{name}}\"? This does not delete the member hosts themselves.", - "searchFleets": "Search fleets...", - "noFleets": "No fleets yet. Create one to get started.", - "memberCount": "{{count}} host", - "memberCount_other": "{{count}} hosts", - "manageMembers": "Manage Members", - "manageMembersTitle": "Manage Fleet Members", - "manageMembersDescription": "Toggle hosts in or out of this fleet's static membership. Hosts matched by tag rules are always included.", - "searchHosts": "Search hosts...", - "noHostsFound": "No hosts found", - "noMembers": "This fleet has no members yet. Add hosts or set a tag rule.", - "membersLoadFailed": "Failed to load fleet members", - "memberUpdateFailed": "Failed to update fleet membership", - "tabRun": "Run Command", - "tabTransfer": "Transfer Files", - "tabInventory": "Inventory", - "openInventoryTab": "Open in full tab", - "tabPackages": "Packages", - "runOnFleet": "Run on Fleet", - "commandPlaceholder": "uptime && df -h", - "commandRequired": "A command is required", - "commandInputsLabel": "Command inputs", - "commandSucceeded": "Command succeeded on all hosts", - "commandPartialFailure": "{{failed}} of {{total}} hosts failed", - "commandFailed": "Failed to run command", - "resultSuccess": "Success", - "resultFailed": "Failed", - "push": "Push", - "pull": "Pull", - "remotePathLabel": "Remote path", - "remotePathRequired": "A remote path is required", - "fileLabel": "File", - "fileRequired": "A file is required", - "pushHint": "The selected file is written to this exact path on every host in the fleet.", - "pullHint": "The file at this path is read from every host and downloaded as a single zip, one folder per host.", - "transferComplete": "Transfer complete", - "transferFailed": "Transfer failed", - "refreshInventory": "Refresh Inventory", - "inventoryLoadFailed": "Failed to load inventory", - "inventoryRefreshed": "Inventory refreshed", - "inventoryRefreshFailed": "Failed to refresh inventory", - "inventoryNoData": "No inventory data yet - refresh to collect it.", - "inventoryHost": "Host", - "inventoryCollectedCount": "{{count}}/{{total}} collected", - "inventoryOs": "OS", + "tagRulesHint": "Os hosts com qualquer uma dessas tags são incluídos automaticamente, além dos hosts adicionados manualmente.", + "fleetCreated": "Frota criada", + "fleetUpdated": "Frota atualizada", + "fleetDeleted": "Frota excluída", + "saveFailed": "Não conseguiram salvar a frota.", + "deleteFailed": "Falha ao excluir a frota", + "loadFailed": "Falha ao carregar as frotas", + "deleteFleetTitle": "Excluir frota", + "deleteFleetDescription": "Tem certeza de que deseja excluir \"{{name}}\"? Isso não exclui os próprios hosts membros.", + "searchFleets": "Pesquisar frotas...", + "noFleets": "Ainda não há frotas. Crie uma para começar.", + "memberCount": "{{count}} anfitrião", + "memberCount_other": "{{count}} anfitriões", + "manageMembers": "Gerenciar membros", + "manageMembersTitle": "Gerenciar membros da frota", + "manageMembersDescription": "Ative ou desative a inclusão de hosts nesta frota estática. Os hosts que corresponderem às regras de tags serão sempre incluídos.", + "searchHosts": "Pesquisar hosts...", + "noHostsFound": "Nenhum host encontrado", + "noMembers": "Esta frota ainda não tem membros. Adicione anfitriões ou defina uma regra de etiqueta.", + "membersLoadFailed": "Falha ao carregar membros da frota", + "memberUpdateFailed": "Falha na atualização da associação à frota", + "tabRun": "Executar comando", + "tabTransfer": "Transferir arquivos", + "tabInventory": "Inventário", + "openInventoryTab": "Abrir em aba inteira", + "tabPackages": "Pacotes", + "runOnFleet": "Executar na frota", + "commandPlaceholder": "tempo de atividade e df -h", + "commandRequired": "É necessário um comando.", + "commandInputsLabel": "Entradas de comando", + "commandSucceeded": "O comando foi executado com sucesso em todos os hosts.", + "commandPartialFailure": "{{failed}} de {{total}} hosts falharam", + "commandFailed": "Falha ao executar o comando", + "resultSuccess": "Sucesso", + "resultFailed": "Fracassado", + "push": "Empurrar", + "pull": "Puxar", + "remotePathLabel": "Caminho remoto", + "remotePathRequired": "É necessário um caminho remoto.", + "fileLabel": "Arquivo", + "fileRequired": "É necessário um arquivo.", + "pushHint": "O arquivo selecionado é gravado exatamente nesse caminho em todos os hosts da frota.", + "pullHint": "O arquivo neste caminho é lido de cada host e baixado como um único arquivo zip, uma pasta por host.", + "transferComplete": "Transferência concluída", + "transferFailed": "A transferência falhou", + "refreshInventory": "Atualizar inventário", + "inventoryLoadFailed": "Falha ao carregar o inventário", + "inventoryRefreshed": "Inventário atualizado", + "inventoryRefreshFailed": "Falha ao atualizar o inventário", + "inventoryNoData": "Ainda não há dados de estoque - atualize a página para coletá-los.", + "inventoryHost": "Hospedar", + "inventoryCollectedCount": "{{count}}/{{total}} coletado", + "inventoryOs": "SO", "inventoryKernel": "Kernel", - "inventoryArch": "Arch", - "inventoryUptime": "Uptime", - "inventoryPackageManager": "Package manager", - "inventoryCollectedAt": "Collected", - "packageActionLabel": "Action", - "packageInstall": "Install", + "inventoryArch": "Arco", + "inventoryUptime": "Tempo de atividade", + "inventoryPackageManager": "Gerenciador de pacotes", + "inventoryCollectedAt": "Coletado", + "packageActionLabel": "Ação", + "packageInstall": "Instalar", "packageRemove": "Remover", - "packageUpgradeAll": "Upgrade all packages", - "packageNameLabel": "Package name", - "packageNameRequired": "A package name is required", - "packageHint": "Requires manage-level access per host and elevates using the host's stored sudo password.", - "shareFleet": "Share Fleet", - "shareFleetTitle": "Share \"{{name}}\"", - "shareFleetDescription": "Shares this fleet's current member hosts with the selected users or roles. Hosts added to the fleet later are not shared automatically - share again to include them.", - "shareSelectionRequired": "Select at least one user or role", - "fleetSharedSuccessfully": "Shared {{shared}} of {{total}} host(s) in this fleet", - "failedToShareFleet": "Failed to share fleet", - "noMembersToShare": "This fleet has no member hosts to share yet." + "packageUpgradeAll": "Atualize todos os pacotes", + "packageNameLabel": "Nome do pacote", + "packageNameRequired": "É necessário informar o nome do pacote.", + "packageHint": "Requer acesso de nível de gerenciamento por host e eleva os privilégios usando a senha sudo armazenada no host.", + "shareFleet": "Frota compartilhada", + "shareFleetTitle": "Compartilhar \"{{name}}\"", + "shareFleetDescription": "Compartilha os hosts membros atuais desta frota com os usuários ou funções selecionados. Hosts adicionados à frota posteriormente não são compartilhados automaticamente — compartilhe novamente para incluí-los.", + "shareSelectionRequired": "Selecione pelo menos um usuário ou função.", + "fleetSharedSuccessfully": "Compartilhado de {{shared}} de {{total}} hosts nesta frota", + "failedToShareFleet": "Não foi possível compartilhar a frota.", + "noMembersToShare": "Esta frota ainda não possui anfitriões membros para compartilhar." } } }, "nav": { - "fleets": "Fleets" + "fleets": "Frotas" }, "hosts": { "docsLink": "Documentação", "sharing": { - "customHoursPlaceholder": "Hours until access expires", + "customHoursPlaceholder": "Horas restantes até o acesso expirar", "expiry": { - "never": "Never", - "oneHour": "1 hour", - "oneDay": "24 hours", - "sevenDays": "7 days", - "thirtyDays": "30 days", - "custom": "Custom" + "never": "Nunca", + "oneHour": "1 hora", + "oneDay": "24 horas", + "sevenDays": "7 dias", + "thirtyDays": "30 dias", + "custom": "Personalizado" }, - "expiryLabel": "Access expiry", + "expiryLabel": "Expiração do acesso", "levels": { "connect": { "label": "Conectar", - "description": "Open sessions only: terminal, remote desktop, file manager, tunnels and Docker. No access to the host configuration." + "description": "Somente sessões abertas: terminal, área de trabalho remota, gerenciador de arquivos, túneis e Docker. Sem acesso à configuração do host." }, "view": { - "label": "View", - "description": "Connect, plus see the host configuration. Secrets are never shown." + "label": "Visualizar", + "description": "Conecte-se e veja a configuração do host. Os segredos nunca são exibidos." }, "edit": { "label": "Editar", - "description": "View, plus modify non-authentication host settings. The owner's SSH authentication stays private and owner-only." + "description": "Visualize e modifique as configurações do host que não exigem autenticação. A autenticação SSH do proprietário permanece privada e restrita ao proprietário." }, "manage": { - "label": "Manage", - "description": "Edit, plus share the host with others, change permission levels and revoke access." + "label": "Gerenciar", + "description": "Edite, compartilhe o host com outras pessoas, altere os níveis de permissão e revogue o acesso." } }, - "noMatches": "No matches found", - "permissionLevelLabel": "Permission level", - "rolesTab": "Roles", - "searchPlaceholder": "Search users or roles...", - "shareButton": "Share", - "shareWithCount": "Share ({{count}})", - "usersTab": "Users" + "noMatches": "Nenhuma correspondência encontrada", + "permissionLevelLabel": "Nível de permissão", + "rolesTab": "Funções", + "searchPlaceholder": "Pesquisar usuários ou funções...", + "shareButton": "Compartilhar", + "shareWithCount": "Compartilhar ({{count}})", + "usersTab": "Usuários" } } } diff --git a/plugins/fleets/locales/translated/pt_PT.json b/plugins/fleets/locales/translated/pt_PT.json index 394fcf86b..c138323fb 100644 --- a/plugins/fleets/locales/translated/pt_PT.json +++ b/plugins/fleets/locales/translated/pt_PT.json @@ -1,111 +1,111 @@ { "permissions": { "view": { - "title": "View fleets", - "description": "See fleets, their members and inventory." + "title": "Ver frotas", + "description": "Veja as frotas, os seus membros e inventário." }, "manage": { - "title": "Manage fleets", - "description": "Create, edit and delete fleets, change membership, and share fleets with other users or roles." + "title": "Gerir frotas", + "description": "Crie, edite e exclua frotas, altere a composição da frota e partilhe frotas com outros utilizadores ou funções." }, "execute": { - "title": "Run fleet actions", - "description": "Run commands and package actions across a fleet, and transfer files to and from its member hosts." + "title": "Realizar operações de frota", + "description": "Execute comandos e ações de pacotes em toda a frota e transfira ficheiros de e para os seus hosts membros." } }, "newUi": { "sidebar": { "fleets": { - "title": "Fleets", - "createFleet": "Create Fleet", - "createFleetTitle": "Create Fleet", - "editFleetTitle": "Edit Fleet", - "createFleetDescription": "A fleet is a named group of hosts you can run actions against as a unit.", + "title": "Frotas", + "createFleet": "Criar Frota", + "createFleetTitle": "Criar Frota", + "editFleetTitle": "Editar frota", + "createFleetDescription": "Uma frota é um grupo nomeado de hosts contra os quais pode executar ações como uma unidade.", "nameLabel": "Nome", - "namePlaceholder": "e.g., Web Servers", - "nameRequired": "Fleet name is required", + "namePlaceholder": "Por exemplo, os servidores web", + "nameRequired": "É necessário dar um nome à frota.", "descriptionLabel": "Descrição", "descriptionPlaceholder": "Descrição opcional", "colorLabel": "Cor", - "tagRulesLabel": "Tag rules", + "tagRulesLabel": "Regras de etiqueta", "tagRulesPlaceholder": "prod-web, edge", - "tagRulesHint": "Hosts with any of these tags are automatically included, in addition to hosts added manually.", - "fleetCreated": "Fleet created", - "fleetUpdated": "Fleet updated", - "fleetDeleted": "Fleet deleted", - "saveFailed": "Failed to save fleet", - "deleteFailed": "Failed to delete fleet", - "loadFailed": "Failed to load fleets", - "deleteFleetTitle": "Delete Fleet", - "deleteFleetDescription": "Are you sure you want to delete \"{{name}}\"? This does not delete the member hosts themselves.", - "searchFleets": "Search fleets...", - "noFleets": "No fleets yet. Create one to get started.", - "memberCount": "{{count}} host", + "tagRulesHint": "Os hosts com qualquer uma destas etiquetas são incluídos automaticamente, para além dos hosts adicionados manualmente.", + "fleetCreated": "Frota criada", + "fleetUpdated": "Frota atualizada", + "fleetDeleted": "Frota excluída", + "saveFailed": "Não conseguiram salvar a frota.", + "deleteFailed": "Falha ao eliminar a frota", + "loadFailed": "Falha ao carregar as frotas", + "deleteFleetTitle": "Excluir frota", + "deleteFleetDescription": "Tem a certeza que pretende eliminar \"{{name}}\"? Isto não exclui os próprios hosts membros.", + "searchFleets": "Pesquisar frotas...", + "noFleets": "Ainda não há frotas. Crie uma para começar.", + "memberCount": "{{count}} anfitrião", "memberCount_other": "{{count}} máquinas", - "manageMembers": "Manage Members", - "manageMembersTitle": "Manage Fleet Members", - "manageMembersDescription": "Toggle hosts in or out of this fleet's static membership. Hosts matched by tag rules are always included.", + "manageMembers": "Gerir membros", + "manageMembersTitle": "Gerir membros da frota", + "manageMembersDescription": "Ative ou desative a inclusão de hosts nesta frota estática. Os hosts que corresponderem às regras das tags serão sempre incluídos.", "searchHosts": "Pesquisar hosts...", "noHostsFound": "Nenhum host encontrado", - "noMembers": "This fleet has no members yet. Add hosts or set a tag rule.", - "membersLoadFailed": "Failed to load fleet members", - "memberUpdateFailed": "Failed to update fleet membership", - "tabRun": "Run Command", - "tabTransfer": "Transfer Files", - "tabInventory": "Inventory", - "openInventoryTab": "Open in full tab", + "noMembers": "Esta frota ainda não tem membros. Adicione anfitriões ou defina uma regra de etiqueta.", + "membersLoadFailed": "Falha ao carregar membros da frota", + "memberUpdateFailed": "Falha na atualização da adesão à frota", + "tabRun": "Executar comando", + "tabTransfer": "Transferir ficheiros", + "tabInventory": "Inventário", + "openInventoryTab": "Abrir em separador inteiro", "tabPackages": "Pacotes", - "runOnFleet": "Run on Fleet", - "commandPlaceholder": "uptime && df -h", - "commandRequired": "A command is required", - "commandInputsLabel": "Command inputs", - "commandSucceeded": "Command succeeded on all hosts", - "commandPartialFailure": "{{failed}} of {{total}} hosts failed", - "commandFailed": "Failed to run command", + "runOnFleet": "Executar na frota", + "commandPlaceholder": "tempo de atividade e df -h", + "commandRequired": "É necessário um comando.", + "commandInputsLabel": "Entradas de comando", + "commandSucceeded": "O comando foi executado com sucesso em todos os hosts.", + "commandPartialFailure": "{{failed}} de {{total}} os hosts falharam", + "commandFailed": "Falha ao executar o comando", "resultSuccess": "Sucesso", "resultFailed": "Falhou", - "push": "Push", - "pull": "Pull", - "remotePathLabel": "Remote path", - "remotePathRequired": "A remote path is required", + "push": "Pressionar", + "pull": "Puxar", + "remotePathLabel": "Caminho remoto", + "remotePathRequired": "É necessário um caminho remoto.", "fileLabel": "Ficheiro", - "fileRequired": "A file is required", - "pushHint": "The selected file is written to this exact path on every host in the fleet.", - "pullHint": "The file at this path is read from every host and downloaded as a single zip, one folder per host.", + "fileRequired": "É necessário um ficheiro.", + "pushHint": "O ficheiro selecionado é gravado exatamente nesse caminho em todos os hosts da frota.", + "pullHint": "O ficheiro neste caminho é lido de cada host e descarregado como um único ficheiro zip, uma pasta por host.", "transferComplete": "Transferência concluída", "transferFailed": "Transferência falhou", - "refreshInventory": "Refresh Inventory", - "inventoryLoadFailed": "Failed to load inventory", - "inventoryRefreshed": "Inventory refreshed", - "inventoryRefreshFailed": "Failed to refresh inventory", - "inventoryNoData": "No inventory data yet - refresh to collect it.", + "refreshInventory": "Atualizar inventário", + "inventoryLoadFailed": "Falha ao carregar o inventário", + "inventoryRefreshed": "Inventário atualizado", + "inventoryRefreshFailed": "Falha ao atualizar o inventário", + "inventoryNoData": "Ainda não há dados de stock - atualize a página para os recolher.", "inventoryHost": "Host", - "inventoryCollectedCount": "{{count}}/{{total}} collected", + "inventoryCollectedCount": "{{count}}/{{total}} recolhido", "inventoryOs": "SO", "inventoryKernel": "Kernel", - "inventoryArch": "Arch", + "inventoryArch": "Arco", "inventoryUptime": "Tempo de Atividade", - "inventoryPackageManager": "Package manager", - "inventoryCollectedAt": "Collected", + "inventoryPackageManager": "Gestor de pacotes", + "inventoryCollectedAt": "Coletado", "packageActionLabel": "Ação", - "packageInstall": "Install", + "packageInstall": "Instalar", "packageRemove": "Remover", - "packageUpgradeAll": "Upgrade all packages", - "packageNameLabel": "Package name", - "packageNameRequired": "A package name is required", - "packageHint": "Requires manage-level access per host and elevates using the host's stored sudo password.", - "shareFleet": "Share Fleet", - "shareFleetTitle": "Share \"{{name}}\"", - "shareFleetDescription": "Shares this fleet's current member hosts with the selected users or roles. Hosts added to the fleet later are not shared automatically - share again to include them.", - "shareSelectionRequired": "Select at least one user or role", - "fleetSharedSuccessfully": "Shared {{shared}} of {{total}} host(s) in this fleet", - "failedToShareFleet": "Failed to share fleet", - "noMembersToShare": "This fleet has no member hosts to share yet." + "packageUpgradeAll": "Atualize todos os pacotes", + "packageNameLabel": "Nome do pacote", + "packageNameRequired": "É necessário informar o nome do pacote.", + "packageHint": "Requer acesso de nível de gestão por host e eleva os privilégios utilizando a palavra-passe sudo armazenada no host.", + "shareFleet": "Frota partilhada", + "shareFleetTitle": "Partilhar \"{{name}}\"", + "shareFleetDescription": "Partilha os hosts membros atuais desta frota com os utilizadores ou funções selecionadas. Os hosts adicionados à frota posteriormente não são partilhados automaticamente — partilhe novamente para os incluir.", + "shareSelectionRequired": "Selecione pelo menos um utilizador ou função.", + "fleetSharedSuccessfully": "Partilhado a partir de {{shared}} de {{total}} hosts nesta frota", + "failedToShareFleet": "Não foi possível partilhar a frota.", + "noMembersToShare": "Esta frota ainda não tem anfitriões membros para partilhar." } } }, "nav": { - "fleets": "Fleets" + "fleets": "Frotas" }, "hosts": { "docsLink": "Ver documentação", @@ -131,7 +131,7 @@ }, "edit": { "label": "Editar", - "description": "View, plus modify non-authentication host settings. The owner's SSH authentication stays private and owner-only." + "description": "Visualize e modifique as definições do host que não requerem autenticação. A autenticação SSH do proprietário permanece privada e restrita ao proprietário." }, "manage": { "label": "Gerir", diff --git a/plugins/fleets/locales/translated/ru_RU.json b/plugins/fleets/locales/translated/ru_RU.json index e8d15834b..ff50cfb04 100644 --- a/plugins/fleets/locales/translated/ru_RU.json +++ b/plugins/fleets/locales/translated/ru_RU.json @@ -1,111 +1,111 @@ { "permissions": { "view": { - "title": "View fleets", - "description": "See fleets, their members and inventory." + "title": "Просмотреть флоты", + "description": "Ознакомьтесь с флотом, его членами и инвентарем." }, "manage": { - "title": "Manage fleets", - "description": "Create, edit and delete fleets, change membership, and share fleets with other users or roles." + "title": "Управление автопарком", + "description": "Создавайте, редактируйте и удаляйте парки, изменяйте состав участников и предоставляйте доступ к паркам другим пользователям или ролям." }, "execute": { - "title": "Run fleet actions", - "description": "Run commands and package actions across a fleet, and transfer files to and from its member hosts." + "title": "Выполнение действий флота", + "description": "Выполняйте команды и действия с пакетами в рамках всего парка устройств, а также передавайте файлы на входящие в него хосты и обратно." } }, "newUi": { "sidebar": { "fleets": { - "title": "Fleets", - "createFleet": "Create Fleet", - "createFleetTitle": "Create Fleet", - "editFleetTitle": "Edit Fleet", - "createFleetDescription": "A fleet is a named group of hosts you can run actions against as a unit.", + "title": "Флоты", + "createFleet": "Создать флот", + "createFleetTitle": "Создать флот", + "editFleetTitle": "Редактировать флот", + "createFleetDescription": "Флот — это именованная группа хостов, против которых можно выполнять действия как единое целое.", "nameLabel": "Название", - "namePlaceholder": "e.g., Web Servers", - "nameRequired": "Fleet name is required", + "namePlaceholder": "например, веб-серверы", + "nameRequired": "Название флота обязательно.", "descriptionLabel": "Описание", "descriptionPlaceholder": "Необязательное описание", "colorLabel": "Цвет", - "tagRulesLabel": "Tag rules", - "tagRulesPlaceholder": "prod-web, edge", - "tagRulesHint": "Hosts with any of these tags are automatically included, in addition to hosts added manually.", - "fleetCreated": "Fleet created", - "fleetUpdated": "Fleet updated", - "fleetDeleted": "Fleet deleted", - "saveFailed": "Failed to save fleet", - "deleteFailed": "Failed to delete fleet", - "loadFailed": "Failed to load fleets", - "deleteFleetTitle": "Delete Fleet", - "deleteFleetDescription": "Are you sure you want to delete \"{{name}}\"? This does not delete the member hosts themselves.", - "searchFleets": "Search fleets...", - "noFleets": "No fleets yet. Create one to get started.", - "memberCount": "{{count}} host", + "tagRulesLabel": "Правила тегирования", + "tagRulesPlaceholder": "прод-веб, граничный", + "tagRulesHint": "В дополнение к хостам, добавленным вручную, автоматически включаются хосты, имеющие любой из этих тегов.", + "fleetCreated": "Создан флот", + "fleetUpdated": "Обновление флота", + "fleetDeleted": "Флот уничтожен", + "saveFailed": "Не удалось спасти флот", + "deleteFailed": "Не удалось удалить флот", + "loadFailed": "Не удалось загрузить флот.", + "deleteFleetTitle": "Удалить флот", + "deleteFleetDescription": "Вы уверены, что хотите удалить \"{{name}}\"? Это не удалит сами хосты-участники.", + "searchFleets": "Поиск флотов...", + "noFleets": "Пока нет флотов. Создайте свой, чтобы начать.", + "memberCount": "{{count}} хост", "memberCount_other": "{{count}} хостов", - "manageMembers": "Manage Members", - "manageMembersTitle": "Manage Fleet Members", - "manageMembersDescription": "Toggle hosts in or out of this fleet's static membership. Hosts matched by tag rules are always included.", + "manageMembers": "Управление участниками", + "manageMembersTitle": "Управление членами автопарка", + "manageMembersDescription": "Добавляйте или исключайте хосты из статического членства в этом флоте. Хосты, соответствующие правилам тегов, всегда включаются.", "searchHosts": "Поиск хостов...", "noHostsFound": "Хосты не найдены", - "noMembers": "This fleet has no members yet. Add hosts or set a tag rule.", - "membersLoadFailed": "Failed to load fleet members", - "memberUpdateFailed": "Failed to update fleet membership", - "tabRun": "Run Command", - "tabTransfer": "Transfer Files", - "tabInventory": "Inventory", - "openInventoryTab": "Open in full tab", + "noMembers": "В этом флоте пока нет участников. Добавьте хостов или установите правило тегов.", + "membersLoadFailed": "Не удалось загрузить членов флота.", + "memberUpdateFailed": "Не удалось обновить данные о членстве в автопарке.", + "tabRun": "Выполнить команду", + "tabTransfer": "Передача файлов", + "tabInventory": "Инвентаризация", + "openInventoryTab": "Открыть в полноэкранном режиме", "tabPackages": "Пакеты", "runOnFleet": "Run on Fleet", "commandPlaceholder": "uptime && df -h", - "commandRequired": "A command is required", - "commandInputsLabel": "Command inputs", - "commandSucceeded": "Command succeeded on all hosts", - "commandPartialFailure": "{{failed}} of {{total}} hosts failed", - "commandFailed": "Failed to run command", + "commandRequired": "Требуется команда", + "commandInputsLabel": "Ввод команд", + "commandSucceeded": "Команда успешно выполнена на всех хостах.", + "commandPartialFailure": "{{failed}} из {{total}} хостов не удалось", + "commandFailed": "Не удалось выполнить команду.", "resultSuccess": "Успех", "resultFailed": "Ошибка", - "push": "Push", - "pull": "Pull", - "remotePathLabel": "Remote path", - "remotePathRequired": "A remote path is required", + "push": "Толкать", + "pull": "Тянуть", + "remotePathLabel": "Удаленный путь", + "remotePathRequired": "Требуется удаленный путь", "fileLabel": "Файл", - "fileRequired": "A file is required", - "pushHint": "The selected file is written to this exact path on every host in the fleet.", - "pullHint": "The file at this path is read from every host and downloaded as a single zip, one folder per host.", + "fileRequired": "Требуется файл", + "pushHint": "Выбранный файл записывается точно по этому пути на каждом хосте в сети.", + "pullHint": "Файл по этому пути считывается с каждого хоста и загружается в виде единого ZIP-архива, по одной папке на каждый хост.", "transferComplete": "Передача завершена", "transferFailed": "Ошибка передачи", - "refreshInventory": "Refresh Inventory", - "inventoryLoadFailed": "Failed to load inventory", - "inventoryRefreshed": "Inventory refreshed", - "inventoryRefreshFailed": "Failed to refresh inventory", - "inventoryNoData": "No inventory data yet - refresh to collect it.", + "refreshInventory": "Обновить инвентарь", + "inventoryLoadFailed": "Не удалось загрузить товарные запасы.", + "inventoryRefreshed": "Инвентарь обновлен", + "inventoryRefreshFailed": "Не удалось обновить данные об остатках на складе.", + "inventoryNoData": "Данные об остатках товара пока отсутствуют — обновите страницу, чтобы получить их.", "inventoryHost": "Хост", - "inventoryCollectedCount": "{{count}}/{{total}} collected", + "inventoryCollectedCount": "{{count}}/{{total}} собрано", "inventoryOs": "ОС", "inventoryKernel": "Ядро", - "inventoryArch": "Arch", + "inventoryArch": "Арка", "inventoryUptime": "Время работы", - "inventoryPackageManager": "Package manager", - "inventoryCollectedAt": "Collected", + "inventoryPackageManager": "Менеджер пакетов", + "inventoryCollectedAt": "Собрано", "packageActionLabel": "Действие", - "packageInstall": "Install", + "packageInstall": "Установить", "packageRemove": "Удалить", - "packageUpgradeAll": "Upgrade all packages", - "packageNameLabel": "Package name", - "packageNameRequired": "A package name is required", - "packageHint": "Requires manage-level access per host and elevates using the host's stored sudo password.", - "shareFleet": "Share Fleet", - "shareFleetTitle": "Share \"{{name}}\"", - "shareFleetDescription": "Shares this fleet's current member hosts with the selected users or roles. Hosts added to the fleet later are not shared automatically - share again to include them.", - "shareSelectionRequired": "Select at least one user or role", - "fleetSharedSuccessfully": "Shared {{shared}} of {{total}} host(s) in this fleet", - "failedToShareFleet": "Failed to share fleet", - "noMembersToShare": "This fleet has no member hosts to share yet." + "packageUpgradeAll": "Обновить все пакеты", + "packageNameLabel": "Название пакета", + "packageNameRequired": "Требуется указать имя пакета.", + "packageHint": "Для работы требуется доступ уровня администратора для каждого хоста, повышение прав осуществляется с помощью сохраненного пароля sudo для данного хоста.", + "shareFleet": "Совместное использование автопарка", + "shareFleetTitle": "Поделиться \"{{name}}\"", + "shareFleetDescription": "Предоставляет доступ к текущим хостам, входящим в этот парк, выбранным пользователям или ролям. Хосты, добавленные в парк позже, не предоставляются автоматически — предоставьте доступ снова, чтобы включить их.", + "shareSelectionRequired": "Выберите хотя бы одного пользователя или роль.", + "fleetSharedSuccessfully": "Общий {{shared}} хоста(ов) в этом флоте {{total}}", + "failedToShareFleet": "Не удалось поделиться флотом", + "noMembersToShare": "В этом флоте пока нет хостов-участников, которыми можно было бы поделиться." } } }, "nav": { - "fleets": "Fleets" + "fleets": "Флоты" }, "hosts": { "docsLink": "Документация", @@ -131,7 +131,7 @@ }, "edit": { "label": "Редактирование", - "description": "View, plus modify non-authentication host settings. The owner's SSH authentication stays private and owner-only." + "description": "Просмотр и изменение настроек хоста без аутентификации. SSH-аутентификация владельца остается конфиденциальной и доступна только владельцу." }, "manage": { "label": "Управление", diff --git a/plugins/fleets/locales/translated/sr_SP.json b/plugins/fleets/locales/translated/sr_SP.json index 18ffb4fa6..24dc5bc95 100644 --- a/plugins/fleets/locales/translated/sr_SP.json +++ b/plugins/fleets/locales/translated/sr_SP.json @@ -1,150 +1,150 @@ { "permissions": { "view": { - "title": "View fleets", - "description": "See fleets, their members and inventory." + "title": "Погледајте возне паркове", + "description": "Погледајте возне паркове, њихове чланове и инвентар." }, "manage": { - "title": "Manage fleets", - "description": "Create, edit and delete fleets, change membership, and share fleets with other users or roles." + "title": "Управљајте возним парковима", + "description": "Креирајте, уређујте и бришите флоте, мењајте чланство и делите флоте са другим корисницима или улогама." }, "execute": { - "title": "Run fleet actions", - "description": "Run commands and package actions across a fleet, and transfer files to and from its member hosts." + "title": "Покрени акције флоте", + "description": "Покрећите команде и акције пакета широм флоте и преносите датотеке на и са њених чланских хостова." } }, "newUi": { "sidebar": { "fleets": { - "title": "Fleets", - "createFleet": "Create Fleet", - "createFleetTitle": "Create Fleet", - "editFleetTitle": "Edit Fleet", - "createFleetDescription": "A fleet is a named group of hosts you can run actions against as a unit.", - "nameLabel": "Name", - "namePlaceholder": "e.g., Web Servers", - "nameRequired": "Fleet name is required", - "descriptionLabel": "Description", - "descriptionPlaceholder": "Optional description", - "colorLabel": "Color", - "tagRulesLabel": "Tag rules", + "title": "Флоте", + "createFleet": "Креирај флоту", + "createFleetTitle": "Креирај флоту", + "editFleetTitle": "Уреди флоту", + "createFleetDescription": "Флота је именована група хостова против којих можете извршавати акције као јединицу.", + "nameLabel": "Име", + "namePlaceholder": "нпр. веб сервери", + "nameRequired": "Назив флоте је обавезан", + "descriptionLabel": "Опис", + "descriptionPlaceholder": "Опциони опис", + "colorLabel": "Боја", + "tagRulesLabel": "Правила за ознаке", "tagRulesPlaceholder": "prod-web, edge", - "tagRulesHint": "Hosts with any of these tags are automatically included, in addition to hosts added manually.", - "fleetCreated": "Fleet created", - "fleetUpdated": "Fleet updated", - "fleetDeleted": "Fleet deleted", - "saveFailed": "Failed to save fleet", - "deleteFailed": "Failed to delete fleet", - "loadFailed": "Failed to load fleets", - "deleteFleetTitle": "Delete Fleet", - "deleteFleetDescription": "Are you sure you want to delete \"{{name}}\"? This does not delete the member hosts themselves.", - "searchFleets": "Search fleets...", - "noFleets": "No fleets yet. Create one to get started.", - "memberCount": "{{count}} host", - "memberCount_other": "{{count}} hosts", - "manageMembers": "Manage Members", - "manageMembersTitle": "Manage Fleet Members", - "manageMembersDescription": "Toggle hosts in or out of this fleet's static membership. Hosts matched by tag rules are always included.", - "searchHosts": "Search hosts...", - "noHostsFound": "No hosts found", - "noMembers": "This fleet has no members yet. Add hosts or set a tag rule.", - "membersLoadFailed": "Failed to load fleet members", - "memberUpdateFailed": "Failed to update fleet membership", - "tabRun": "Run Command", - "tabTransfer": "Transfer Files", - "tabInventory": "Inventory", - "openInventoryTab": "Open in full tab", - "tabPackages": "Packages", - "runOnFleet": "Run on Fleet", - "commandPlaceholder": "uptime && df -h", - "commandRequired": "A command is required", - "commandInputsLabel": "Command inputs", - "commandSucceeded": "Command succeeded on all hosts", - "commandPartialFailure": "{{failed}} of {{total}} hosts failed", - "commandFailed": "Failed to run command", - "resultSuccess": "Success", - "resultFailed": "Failed", - "push": "Push", - "pull": "Pull", - "remotePathLabel": "Remote path", - "remotePathRequired": "A remote path is required", - "fileLabel": "File", - "fileRequired": "A file is required", - "pushHint": "The selected file is written to this exact path on every host in the fleet.", - "pullHint": "The file at this path is read from every host and downloaded as a single zip, one folder per host.", - "transferComplete": "Transfer complete", - "transferFailed": "Transfer failed", - "refreshInventory": "Refresh Inventory", - "inventoryLoadFailed": "Failed to load inventory", - "inventoryRefreshed": "Inventory refreshed", - "inventoryRefreshFailed": "Failed to refresh inventory", - "inventoryNoData": "No inventory data yet - refresh to collect it.", - "inventoryHost": "Host", - "inventoryCollectedCount": "{{count}}/{{total}} collected", - "inventoryOs": "OS", - "inventoryKernel": "Kernel", - "inventoryArch": "Arch", - "inventoryUptime": "Uptime", - "inventoryPackageManager": "Package manager", - "inventoryCollectedAt": "Collected", - "packageActionLabel": "Action", - "packageInstall": "Install", - "packageRemove": "Remove", - "packageUpgradeAll": "Upgrade all packages", - "packageNameLabel": "Package name", - "packageNameRequired": "A package name is required", - "packageHint": "Requires manage-level access per host and elevates using the host's stored sudo password.", - "shareFleet": "Share Fleet", - "shareFleetTitle": "Share \"{{name}}\"", - "shareFleetDescription": "Shares this fleet's current member hosts with the selected users or roles. Hosts added to the fleet later are not shared automatically - share again to include them.", - "shareSelectionRequired": "Select at least one user or role", - "fleetSharedSuccessfully": "Shared {{shared}} of {{total}} host(s) in this fleet", - "failedToShareFleet": "Failed to share fleet", - "noMembersToShare": "This fleet has no member hosts to share yet." + "tagRulesHint": "Домаћини са било којом од ових ознака се аутоматски укључују, поред домаћина додатих ручно.", + "fleetCreated": "Флота је створена", + "fleetUpdated": "Ажурирана флота", + "fleetDeleted": "Флота је обрисана", + "saveFailed": "Чување флоте није успело", + "deleteFailed": "Брисање флоте није успело", + "loadFailed": "Учитавање возних паркова није успело", + "deleteFleetTitle": "Обриши флоту", + "deleteFleetDescription": "Да ли сте сигурни да желите да обришете „{{name}}“? Овим се не бришу сами чланови хостови.", + "searchFleets": "Претражи флоте...", + "noFleets": "Још нема флота. Направите једну да бисте започели.", + "memberCount": "{{count}} домаћин", + "memberCount_other": "{{count}} домаћини", + "manageMembers": "Управљање члановима", + "manageMembersTitle": "Управљајте члановима флоте", + "manageMembersDescription": "Укључите или искључите хостове из статичког чланства ове флоте. Хостови који се подударају са правилима ознака су увек укључени.", + "searchHosts": "Претражи хостове...", + "noHostsFound": "Нису пронађени хостови", + "noMembers": "Ова флота још нема чланова. Додајте хостове или поставите правило за ознаке.", + "membersLoadFailed": "Учитавање чланова флоте није успело", + "memberUpdateFailed": "Ажурирање чланства у флоти није успело", + "tabRun": "Покрени команду", + "tabTransfer": "Пренос датотека", + "tabInventory": "Инвентар", + "openInventoryTab": "Отвори у целој картици", + "tabPackages": "Пакети", + "runOnFleet": "Трчи на флоти", + "commandPlaceholder": "време непрекидног рада && df -h", + "commandRequired": "Потребна је команда", + "commandInputsLabel": "Уноси команди", + "commandSucceeded": "Команда је успела на свим хостовима", + "commandPartialFailure": "{{failed}} од {{total}} хостова није успело", + "commandFailed": "Није успело покретање команде", + "resultSuccess": "Успех", + "resultFailed": "Неуспешно", + "push": "Гурај", + "pull": "Повуци", + "remotePathLabel": "Удаљена путања", + "remotePathRequired": "Потребна је удаљена путања", + "fileLabel": "Датотека", + "fileRequired": "Потребна је датотека", + "pushHint": "Изабрана датотека се уписује на ову тачну путању на сваком хосту у флоти.", + "pullHint": "Датотека на овој путањи се чита са сваког хоста и преузима као један zip фасцикла, једна фасцикла по хосту.", + "transferComplete": "Пренос завршен", + "transferFailed": "Пренос није успео", + "refreshInventory": "Освежи инвентар", + "inventoryLoadFailed": "Учитавање инвентара није успело", + "inventoryRefreshed": "Инвентар освежен", + "inventoryRefreshFailed": "Освежавање инвентара није успело", + "inventoryNoData": "Још нема података о залихама - освежите да бисте их прикупили.", + "inventoryHost": "Домаћин", + "inventoryCollectedCount": "{{count}}/{{total}} сакупљено", + "inventoryOs": "ОС", + "inventoryKernel": "Језгро", + "inventoryArch": "Лук", + "inventoryUptime": "Време непрекидног рада", + "inventoryPackageManager": "Менаџер пакета", + "inventoryCollectedAt": "Сакупљено", + "packageActionLabel": "Акција", + "packageInstall": "Инсталирај", + "packageRemove": "Уклони", + "packageUpgradeAll": "Надоградите све пакете", + "packageNameLabel": "Назив пакета", + "packageNameRequired": "Потребно је име пакета", + "packageHint": "Захтева приступ на нивоу управљања по хосту и подиже привилегије користећи сачувану sudo лозинку хоста.", + "shareFleet": "Дели флоту", + "shareFleetTitle": "Подели „{{name}}“", + "shareFleetDescription": "Дели тренутне хостове чланове ове флоте са изабраним корисницима или улогама. Хостови који се касније додају флоти се не деле аутоматски - поново делите да бисте их укључили.", + "shareSelectionRequired": "Изаберите барем једног корисника или улогу", + "fleetSharedSuccessfully": "Дељено {{shared}} од {{total}} хост(ова) у овој флоти", + "failedToShareFleet": "Дељење флоте није успело", + "noMembersToShare": "Ова флота још нема домаћине чланове за дељење." } } }, "nav": { - "fleets": "Fleets" + "fleets": "Флоте" }, "hosts": { - "docsLink": "View docs", + "docsLink": "Прикажи документе", "sharing": { - "customHoursPlaceholder": "Hours until access expires", + "customHoursPlaceholder": "Сати до истека приступа", "expiry": { - "never": "Never", - "oneHour": "1 hour", - "oneDay": "24 hours", - "sevenDays": "7 days", - "thirtyDays": "30 days", - "custom": "Custom" + "never": "Никад", + "oneHour": "1 сат", + "oneDay": "24 сата", + "sevenDays": "7 дана", + "thirtyDays": "30 дана", + "custom": "Прилагођено" }, - "expiryLabel": "Access expiry", + "expiryLabel": "Истек приступа", "levels": { "connect": { - "label": "Connect", - "description": "Open sessions only: terminal, remote desktop, file manager, tunnels and Docker. No access to the host configuration." + "label": "Повежи се", + "description": "Само отворене сесије: терминал, удаљена радна површина, менаџер датотека, тунели и Докер. Нема приступа конфигурацији хоста." }, "view": { - "label": "View", - "description": "Connect, plus see the host configuration. Secrets are never shown." + "label": "Поглед", + "description": "Повежите се, плус погледајте конфигурацију хоста. Тајне се никада не приказују." }, "edit": { - "label": "Edit", - "description": "View, plus modify non-authentication host settings. The owner's SSH authentication stays private and owner-only." + "label": "Измени", + "description": "Прегледајте и мењајте подешавања хоста која не захтевају аутентификацију. SSH аутентификација власника остаје приватна и доступна само власнику." }, "manage": { - "label": "Manage", - "description": "Edit, plus share the host with others, change permission levels and revoke access." + "label": "Управљај", + "description": "Уредите, плус делите хост са другима, мењајте нивое дозвола и опозовите приступ." } }, - "noMatches": "No matches found", - "permissionLevelLabel": "Permission level", - "rolesTab": "Roles", - "searchPlaceholder": "Search users or roles...", - "shareButton": "Share", - "shareWithCount": "Share ({{count}})", - "usersTab": "Users" + "noMatches": "Није пронађено ниједно подударање", + "permissionLevelLabel": "Ниво дозволе", + "rolesTab": "Улоге", + "searchPlaceholder": "Претражите кориснике или улоге...", + "shareButton": "Дели", + "shareWithCount": "Подели ({{count}})", + "usersTab": "Корисници" } } } diff --git a/plugins/fleets/locales/translated/sv_SE.json b/plugins/fleets/locales/translated/sv_SE.json index 18ffb4fa6..c6cc46d70 100644 --- a/plugins/fleets/locales/translated/sv_SE.json +++ b/plugins/fleets/locales/translated/sv_SE.json @@ -1,150 +1,150 @@ { "permissions": { "view": { - "title": "View fleets", - "description": "See fleets, their members and inventory." + "title": "Visa flottor", + "description": "Se flottor, deras medlemmar och inventering." }, "manage": { - "title": "Manage fleets", - "description": "Create, edit and delete fleets, change membership, and share fleets with other users or roles." + "title": "Hantera flottor", + "description": "Skapa, redigera och ta bort flottor, ändra medlemskap och dela flottor med andra användare eller roller." }, "execute": { - "title": "Run fleet actions", - "description": "Run commands and package actions across a fleet, and transfer files to and from its member hosts." + "title": "Kör flottans åtgärder", + "description": "Kör kommandon och paketåtgärder över en flotta och överför filer till och från dess medlemsvärdar." } }, "newUi": { "sidebar": { "fleets": { - "title": "Fleets", - "createFleet": "Create Fleet", - "createFleetTitle": "Create Fleet", - "editFleetTitle": "Edit Fleet", - "createFleetDescription": "A fleet is a named group of hosts you can run actions against as a unit.", - "nameLabel": "Name", - "namePlaceholder": "e.g., Web Servers", - "nameRequired": "Fleet name is required", - "descriptionLabel": "Description", - "descriptionPlaceholder": "Optional description", - "colorLabel": "Color", - "tagRulesLabel": "Tag rules", - "tagRulesPlaceholder": "prod-web, edge", - "tagRulesHint": "Hosts with any of these tags are automatically included, in addition to hosts added manually.", - "fleetCreated": "Fleet created", - "fleetUpdated": "Fleet updated", - "fleetDeleted": "Fleet deleted", - "saveFailed": "Failed to save fleet", - "deleteFailed": "Failed to delete fleet", - "loadFailed": "Failed to load fleets", - "deleteFleetTitle": "Delete Fleet", - "deleteFleetDescription": "Are you sure you want to delete \"{{name}}\"? This does not delete the member hosts themselves.", - "searchFleets": "Search fleets...", - "noFleets": "No fleets yet. Create one to get started.", - "memberCount": "{{count}} host", - "memberCount_other": "{{count}} hosts", - "manageMembers": "Manage Members", - "manageMembersTitle": "Manage Fleet Members", - "manageMembersDescription": "Toggle hosts in or out of this fleet's static membership. Hosts matched by tag rules are always included.", - "searchHosts": "Search hosts...", - "noHostsFound": "No hosts found", - "noMembers": "This fleet has no members yet. Add hosts or set a tag rule.", - "membersLoadFailed": "Failed to load fleet members", - "memberUpdateFailed": "Failed to update fleet membership", - "tabRun": "Run Command", - "tabTransfer": "Transfer Files", - "tabInventory": "Inventory", - "openInventoryTab": "Open in full tab", - "tabPackages": "Packages", - "runOnFleet": "Run on Fleet", - "commandPlaceholder": "uptime && df -h", - "commandRequired": "A command is required", - "commandInputsLabel": "Command inputs", - "commandSucceeded": "Command succeeded on all hosts", - "commandPartialFailure": "{{failed}} of {{total}} hosts failed", - "commandFailed": "Failed to run command", - "resultSuccess": "Success", - "resultFailed": "Failed", - "push": "Push", - "pull": "Pull", - "remotePathLabel": "Remote path", - "remotePathRequired": "A remote path is required", - "fileLabel": "File", - "fileRequired": "A file is required", - "pushHint": "The selected file is written to this exact path on every host in the fleet.", - "pullHint": "The file at this path is read from every host and downloaded as a single zip, one folder per host.", - "transferComplete": "Transfer complete", - "transferFailed": "Transfer failed", - "refreshInventory": "Refresh Inventory", - "inventoryLoadFailed": "Failed to load inventory", - "inventoryRefreshed": "Inventory refreshed", - "inventoryRefreshFailed": "Failed to refresh inventory", - "inventoryNoData": "No inventory data yet - refresh to collect it.", - "inventoryHost": "Host", - "inventoryCollectedCount": "{{count}}/{{total}} collected", - "inventoryOs": "OS", - "inventoryKernel": "Kernel", - "inventoryArch": "Arch", - "inventoryUptime": "Uptime", - "inventoryPackageManager": "Package manager", - "inventoryCollectedAt": "Collected", - "packageActionLabel": "Action", - "packageInstall": "Install", - "packageRemove": "Remove", - "packageUpgradeAll": "Upgrade all packages", - "packageNameLabel": "Package name", - "packageNameRequired": "A package name is required", - "packageHint": "Requires manage-level access per host and elevates using the host's stored sudo password.", - "shareFleet": "Share Fleet", - "shareFleetTitle": "Share \"{{name}}\"", - "shareFleetDescription": "Shares this fleet's current member hosts with the selected users or roles. Hosts added to the fleet later are not shared automatically - share again to include them.", - "shareSelectionRequired": "Select at least one user or role", - "fleetSharedSuccessfully": "Shared {{shared}} of {{total}} host(s) in this fleet", - "failedToShareFleet": "Failed to share fleet", - "noMembersToShare": "This fleet has no member hosts to share yet." + "title": "Flottor", + "createFleet": "Skapa flotta", + "createFleetTitle": "Skapa flotta", + "editFleetTitle": "Redigera flotta", + "createFleetDescription": "En flotta är en namngiven grupp av värdar som du kan köra åtgärder mot som en enhet.", + "nameLabel": "Namn", + "namePlaceholder": "t.ex. webbservrar", + "nameRequired": "Flottans namn krävs", + "descriptionLabel": "Beskrivning", + "descriptionPlaceholder": "Valfri beskrivning", + "colorLabel": "Färg", + "tagRulesLabel": "Taggregler", + "tagRulesPlaceholder": "prod-web, kant", + "tagRulesHint": "Värdar med någon av dessa taggar inkluderas automatiskt, utöver värdar som läggs till manuellt.", + "fleetCreated": "Flotta skapad", + "fleetUpdated": "Flottan uppdaterad", + "fleetDeleted": "Flottan raderad", + "saveFailed": "Misslyckades med att spara flottan", + "deleteFailed": "Misslyckades med att ta bort flottan", + "loadFailed": "Misslyckades med att ladda flottor", + "deleteFleetTitle": "Ta bort flotta", + "deleteFleetDescription": "Är du säker på att du vill ta bort \"{{name}}\"? Detta tar inte bort själva medlemsvärdarna.", + "searchFleets": "Sök flottor...", + "noFleets": "Inga flottor ännu. Skapa en för att komma igång.", + "memberCount": "{{count}} värd", + "memberCount_other": "{{count}} värdar", + "manageMembers": "Hantera medlemmar", + "manageMembersTitle": "Hantera flottmedlemmar", + "manageMembersDescription": "Växla mellan att visa eller avaktivera värdar i flottans statiska medlemskap. Värdar som matchas av taggregler inkluderas alltid.", + "searchHosts": "Sök värdar...", + "noHostsFound": "Inga värdar hittades", + "noMembers": "Den här flottan har inga medlemmar ännu. Lägg till värdar eller ange en taggregel.", + "membersLoadFailed": "Misslyckades med att ladda flottmedlemmar", + "memberUpdateFailed": "Misslyckades med att uppdatera flottmedlemskapet", + "tabRun": "Kör kommando", + "tabTransfer": "Överför filer", + "tabInventory": "Lager", + "openInventoryTab": "Öppna i hela fliken", + "tabPackages": "Paket", + "runOnFleet": "Kör på flottan", + "commandPlaceholder": "drifttid && df -h", + "commandRequired": "Ett kommando krävs", + "commandInputsLabel": "Kommandoingångar", + "commandSucceeded": "Kommandot lyckades på alla värdar", + "commandPartialFailure": "{{failed}} av {{total}} värdar misslyckades", + "commandFailed": "Misslyckades med att köra kommandot", + "resultSuccess": "Framgång", + "resultFailed": "Misslyckades", + "push": "Tryck", + "pull": "Dra", + "remotePathLabel": "Fjärrväg", + "remotePathRequired": "En fjärrsökväg krävs", + "fileLabel": "Fil", + "fileRequired": "En fil krävs", + "pushHint": "Den valda filen skrivs till exakt denna sökväg på varje värd i flottan.", + "pullHint": "Filen på den här sökvägen läses från varje värd och laddas ner som en enda zip-fil, en mapp per värd.", + "transferComplete": "Överföringen är klar", + "transferFailed": "Överföringen misslyckades", + "refreshInventory": "Uppdatera lagret", + "inventoryLoadFailed": "Misslyckades med att ladda lagret", + "inventoryRefreshed": "Inventariet uppdaterat", + "inventoryRefreshFailed": "Misslyckades med att uppdatera lagret", + "inventoryNoData": "Ingen lagerdata ännu – uppdatera för att samla in den.", + "inventoryHost": "Värd", + "inventoryCollectedCount": "{{count}}/{{total}} samlade", + "inventoryOs": "operativsystem", + "inventoryKernel": "Kärna", + "inventoryArch": "Båge", + "inventoryUptime": "Drifttid", + "inventoryPackageManager": "Pakethanterare", + "inventoryCollectedAt": "Insamlad", + "packageActionLabel": "Handling", + "packageInstall": "Installera", + "packageRemove": "Ta bort", + "packageUpgradeAll": "Uppgradera alla paket", + "packageNameLabel": "Paketnamn", + "packageNameRequired": "Ett paketnamn krävs", + "packageHint": "Kräver åtkomst på hanteringsnivå per värd och höjs med hjälp av värdens lagrade sudo-lösenord.", + "shareFleet": "Dela flottan", + "shareFleetTitle": "Dela \"{{name}}\"", + "shareFleetDescription": "Delar den här flottans nuvarande medlemsvärdar med de valda användarna eller rollerna. Värdar som läggs till i flottan senare delas inte automatiskt – dela igen för att inkludera dem.", + "shareSelectionRequired": "Välj minst en användare eller roll", + "fleetSharedSuccessfully": "Delad {{shared}} av {{total}} värd(ar) i denna flotta", + "failedToShareFleet": "Misslyckades med att dela flottan", + "noMembersToShare": "Den här flottan har inga medlemsvärdar att dela ännu." } } }, "nav": { - "fleets": "Fleets" + "fleets": "Flottor" }, "hosts": { - "docsLink": "View docs", + "docsLink": "Visa dokument", "sharing": { - "customHoursPlaceholder": "Hours until access expires", + "customHoursPlaceholder": "Timmar tills åtkomsten upphör", "expiry": { - "never": "Never", - "oneHour": "1 hour", - "oneDay": "24 hours", - "sevenDays": "7 days", - "thirtyDays": "30 days", - "custom": "Custom" + "never": "Aldrig", + "oneHour": "1 timme", + "oneDay": "24 timmar", + "sevenDays": "7 dagar", + "thirtyDays": "30 dagar", + "custom": "Beställnings" }, - "expiryLabel": "Access expiry", + "expiryLabel": "Åtkomstutgång", "levels": { "connect": { - "label": "Connect", - "description": "Open sessions only: terminal, remote desktop, file manager, tunnels and Docker. No access to the host configuration." + "label": "Ansluta", + "description": "Endast öppna sessioner: terminal, fjärrskrivbord, filhanterare, tunnlar och Docker. Ingen åtkomst till värdkonfigurationen." }, "view": { - "label": "View", - "description": "Connect, plus see the host configuration. Secrets are never shown." + "label": "Se", + "description": "Anslut, plus se värdkonfigurationen. Hemligheter visas aldrig." }, "edit": { - "label": "Edit", - "description": "View, plus modify non-authentication host settings. The owner's SSH authentication stays private and owner-only." + "label": "Redigera", + "description": "Visa och ändra inställningar för icke-autentiseringsvärdar. Ägarens SSH-autentisering förblir privat och endast för ägaren." }, "manage": { - "label": "Manage", - "description": "Edit, plus share the host with others, change permission levels and revoke access." + "label": "Hantera", + "description": "Redigera, plus dela värden med andra, ändra behörighetsnivåer och återkalla åtkomst." } }, - "noMatches": "No matches found", - "permissionLevelLabel": "Permission level", - "rolesTab": "Roles", - "searchPlaceholder": "Search users or roles...", - "shareButton": "Share", - "shareWithCount": "Share ({{count}})", - "usersTab": "Users" + "noMatches": "Inga träffar hittades", + "permissionLevelLabel": "Behörighetsnivå", + "rolesTab": "Roller", + "searchPlaceholder": "Sök användare eller roller...", + "shareButton": "Dela", + "shareWithCount": "Dela ({{count}})", + "usersTab": "Användare" } } } diff --git a/plugins/fleets/locales/translated/th_TH.json b/plugins/fleets/locales/translated/th_TH.json index 18ffb4fa6..83d6c0a34 100644 --- a/plugins/fleets/locales/translated/th_TH.json +++ b/plugins/fleets/locales/translated/th_TH.json @@ -1,150 +1,150 @@ { "permissions": { "view": { - "title": "View fleets", - "description": "See fleets, their members and inventory." + "title": "ดูฝูงบิน", + "description": "ดูรายละเอียดกองเรือ สมาชิก และสินค้าคงคลัง" }, "manage": { - "title": "Manage fleets", - "description": "Create, edit and delete fleets, change membership, and share fleets with other users or roles." + "title": "บริหารจัดการกองยานพาหนะ", + "description": "สร้าง แก้ไข และลบกลุ่มยานพาหนะ เปลี่ยนแปลงสมาชิก และแชร์กลุ่มยานพาหนะกับผู้ใช้หรือบทบาทอื่นๆ" }, "execute": { - "title": "Run fleet actions", - "description": "Run commands and package actions across a fleet, and transfer files to and from its member hosts." + "title": "ดำเนินการจัดการกองเรือ", + "description": "เรียกใช้คำสั่งและดำเนินการแพ็กเกจต่างๆ บนกลุ่มเครื่องเซิร์ฟเวอร์ และถ่ายโอนไฟล์ระหว่างเครื่องเซิร์ฟเวอร์ที่เป็นสมาชิก" } }, "newUi": { "sidebar": { "fleets": { - "title": "Fleets", - "createFleet": "Create Fleet", - "createFleetTitle": "Create Fleet", - "editFleetTitle": "Edit Fleet", - "createFleetDescription": "A fleet is a named group of hosts you can run actions against as a unit.", - "nameLabel": "Name", - "namePlaceholder": "e.g., Web Servers", - "nameRequired": "Fleet name is required", - "descriptionLabel": "Description", - "descriptionPlaceholder": "Optional description", - "colorLabel": "Color", - "tagRulesLabel": "Tag rules", - "tagRulesPlaceholder": "prod-web, edge", - "tagRulesHint": "Hosts with any of these tags are automatically included, in addition to hosts added manually.", - "fleetCreated": "Fleet created", - "fleetUpdated": "Fleet updated", - "fleetDeleted": "Fleet deleted", - "saveFailed": "Failed to save fleet", - "deleteFailed": "Failed to delete fleet", - "loadFailed": "Failed to load fleets", - "deleteFleetTitle": "Delete Fleet", - "deleteFleetDescription": "Are you sure you want to delete \"{{name}}\"? This does not delete the member hosts themselves.", - "searchFleets": "Search fleets...", - "noFleets": "No fleets yet. Create one to get started.", - "memberCount": "{{count}} host", - "memberCount_other": "{{count}} hosts", - "manageMembers": "Manage Members", - "manageMembersTitle": "Manage Fleet Members", - "manageMembersDescription": "Toggle hosts in or out of this fleet's static membership. Hosts matched by tag rules are always included.", - "searchHosts": "Search hosts...", - "noHostsFound": "No hosts found", - "noMembers": "This fleet has no members yet. Add hosts or set a tag rule.", - "membersLoadFailed": "Failed to load fleet members", - "memberUpdateFailed": "Failed to update fleet membership", - "tabRun": "Run Command", - "tabTransfer": "Transfer Files", - "tabInventory": "Inventory", - "openInventoryTab": "Open in full tab", - "tabPackages": "Packages", - "runOnFleet": "Run on Fleet", + "title": "กองเรือ", + "createFleet": "สร้างกลุ่มยานพาหนะ", + "createFleetTitle": "สร้างกลุ่มยานพาหนะ", + "editFleetTitle": "แก้ไขข้อมูลกองเรือ", + "createFleetDescription": "กลุ่มโฮสต์ (Fleet) คือกลุ่มของโฮสต์ที่มีชื่อ ซึ่งคุณสามารถเรียกใช้คำสั่งต่างๆ กับกลุ่มนั้นได้ในฐานะหน่วยเดียวกัน", + "nameLabel": "ชื่อ", + "namePlaceholder": "เช่น เว็บเซิร์ฟเวอร์", + "nameRequired": "ต้องระบุชื่อกองเรือ", + "descriptionLabel": "คำอธิบาย", + "descriptionPlaceholder": "คำอธิบายเพิ่มเติม (ไม่บังคับ)", + "colorLabel": "สี", + "tagRulesLabel": "กฎการติดแท็ก", + "tagRulesPlaceholder": "โปรด-เว็บ, เอดจ์", + "tagRulesHint": "โฮสต์ที่มีแท็กใดแท็กหนึ่งเหล่านี้จะถูกรวมไว้โดยอัตโนมัติ นอกเหนือจากโฮสต์ที่เพิ่มเข้ามาด้วยตนเอง", + "fleetCreated": "กองเรือสร้าง", + "fleetUpdated": "อัปเดตฝูงบินแล้ว", + "fleetDeleted": "กองเรือถูกลบ", + "saveFailed": "ไม่สามารถช่วยกองเรือได้", + "deleteFailed": "ไม่สามารถลบกลุ่มยานพาหนะได้", + "loadFailed": "ไม่สามารถโหลดข้อมูลยานพาหนะได้", + "deleteFleetTitle": "ลบกลุ่มยานพาหนะ", + "deleteFleetDescription": "คุณแน่ใจหรือไม่ว่าต้องการลบ \"{{name}}\"? การดำเนินการนี้ไม่ได้ลบโฮสต์สมาชิกเอง", + "searchFleets": "ค้นหากองเรือ...", + "noFleets": "ยังไม่มีกลุ่มเรือ สร้างกลุ่มเรือเพื่อเริ่มต้นใช้งานได้เลย", + "memberCount": "{{count}} โฮสต์", + "memberCount_other": "{{count}} โฮสต์", + "manageMembers": "จัดการสมาชิก", + "manageMembersTitle": "จัดการสมาชิกกลุ่มยานพาหนะ", + "manageMembersDescription": "สลับการเพิ่มหรือลบโฮสต์ออกจากการเป็นสมาชิกแบบคงที่ของกลุ่มโฮสต์นี้ โฮสต์ที่ตรงกับกฎแท็กจะถูกรวมอยู่เสมอ", + "searchHosts": "ค้นหาโฮสต์...", + "noHostsFound": "ไม่พบโฮสต์", + "noMembers": "กลุ่มเรือนี้ยังไม่มีสมาชิก เพิ่มโฮสต์หรือตั้งค่ากฎแท็ก", + "membersLoadFailed": "ไม่สามารถโหลดสมาชิกกองเรือได้", + "memberUpdateFailed": "ไม่สามารถอัปเดตข้อมูลสมาชิกกลุ่มยานพาหนะได้", + "tabRun": "เรียกใช้คำสั่ง", + "tabTransfer": "โอนไฟล์", + "tabInventory": "รายการสิ่งของ", + "openInventoryTab": "เปิดในแท็บเต็ม", + "tabPackages": "แพ็คเกจ", + "runOnFleet": "วิ่งบนกองเรือ", "commandPlaceholder": "uptime && df -h", - "commandRequired": "A command is required", - "commandInputsLabel": "Command inputs", - "commandSucceeded": "Command succeeded on all hosts", - "commandPartialFailure": "{{failed}} of {{total}} hosts failed", - "commandFailed": "Failed to run command", - "resultSuccess": "Success", - "resultFailed": "Failed", - "push": "Push", - "pull": "Pull", - "remotePathLabel": "Remote path", - "remotePathRequired": "A remote path is required", - "fileLabel": "File", - "fileRequired": "A file is required", - "pushHint": "The selected file is written to this exact path on every host in the fleet.", - "pullHint": "The file at this path is read from every host and downloaded as a single zip, one folder per host.", - "transferComplete": "Transfer complete", - "transferFailed": "Transfer failed", - "refreshInventory": "Refresh Inventory", - "inventoryLoadFailed": "Failed to load inventory", - "inventoryRefreshed": "Inventory refreshed", - "inventoryRefreshFailed": "Failed to refresh inventory", - "inventoryNoData": "No inventory data yet - refresh to collect it.", - "inventoryHost": "Host", - "inventoryCollectedCount": "{{count}}/{{total}} collected", - "inventoryOs": "OS", - "inventoryKernel": "Kernel", - "inventoryArch": "Arch", - "inventoryUptime": "Uptime", - "inventoryPackageManager": "Package manager", - "inventoryCollectedAt": "Collected", - "packageActionLabel": "Action", - "packageInstall": "Install", - "packageRemove": "Remove", - "packageUpgradeAll": "Upgrade all packages", - "packageNameLabel": "Package name", - "packageNameRequired": "A package name is required", - "packageHint": "Requires manage-level access per host and elevates using the host's stored sudo password.", - "shareFleet": "Share Fleet", - "shareFleetTitle": "Share \"{{name}}\"", - "shareFleetDescription": "Shares this fleet's current member hosts with the selected users or roles. Hosts added to the fleet later are not shared automatically - share again to include them.", - "shareSelectionRequired": "Select at least one user or role", - "fleetSharedSuccessfully": "Shared {{shared}} of {{total}} host(s) in this fleet", - "failedToShareFleet": "Failed to share fleet", - "noMembersToShare": "This fleet has no member hosts to share yet." + "commandRequired": "จำเป็นต้องมีคำสั่ง", + "commandInputsLabel": "อินพุตคำสั่ง", + "commandSucceeded": "คำสั่งทำงานสำเร็จบนโฮสต์ทั้งหมด", + "commandPartialFailure": "โฮสต์ {{failed}} ล้มเหลว {{total}}", + "commandFailed": "ไม่สามารถเรียกใช้คำสั่งได้", + "resultSuccess": "ความสำเร็จ", + "resultFailed": "ล้มเหลว", + "push": "ดัน", + "pull": "ดึง", + "remotePathLabel": "เส้นทางระยะไกล", + "remotePathRequired": "จำเป็นต้องใช้เส้นทางระยะไกล", + "fileLabel": "ไฟล์", + "fileRequired": "จำเป็นต้องมีไฟล์", + "pushHint": "ไฟล์ที่เลือกจะถูกเขียนไปยังพาธที่ระบุไว้นี้บนทุกเครื่องในระบบเครือข่าย", + "pullHint": "ไฟล์ที่อยู่ในพาธนี้จะถูกอ่านจากทุกโฮสต์และดาวน์โหลดเป็นไฟล์ซิปเดียว โดยมีหนึ่งโฟลเดอร์ต่อหนึ่งโฮสต์", + "transferComplete": "การโอนเสร็จสมบูรณ์", + "transferFailed": "การโอนล้มเหลว", + "refreshInventory": "รีเฟรชสินค้าคงคลัง", + "inventoryLoadFailed": "ไม่สามารถโหลดสินค้าคงคลังได้", + "inventoryRefreshed": "อัปเดตสินค้าคงคลังแล้ว", + "inventoryRefreshFailed": "ไม่สามารถรีเฟรชสินค้าคงคลังได้", + "inventoryNoData": "ยังไม่มีข้อมูลสินค้าคงคลัง โปรดรีเฟรชหน้าเว็บเพื่อดูข้อมูล", + "inventoryHost": "เจ้าภาพ", + "inventoryCollectedCount": "{{count}}/{{total}} รวบรวมแล้ว", + "inventoryOs": "โอเอส", + "inventoryKernel": "เคอร์เนล", + "inventoryArch": "โค้ง", + "inventoryUptime": "เวลาใช้งาน", + "inventoryPackageManager": "ตัวจัดการแพ็กเกจ", + "inventoryCollectedAt": "รวบรวม", + "packageActionLabel": "การกระทำ", + "packageInstall": "ติดตั้ง", + "packageRemove": "ลบ", + "packageUpgradeAll": "อัปเกรดแพ็กเกจทั้งหมด", + "packageNameLabel": "ชื่อแพ็คเกจ", + "packageNameRequired": "จำเป็นต้องระบุชื่อแพ็กเกจ", + "packageHint": "ต้องมีสิทธิ์การเข้าถึงระดับจัดการต่อโฮสต์ และยกระดับสิทธิ์โดยใช้รหัสผ่าน sudo ที่บันทึกไว้ของโฮสต์", + "shareFleet": "แบ่งปันกองเรือ", + "shareFleetTitle": "แชร์ \"{{name}}\"", + "shareFleetDescription": "แชร์โฮสต์ที่เป็นสมาชิกปัจจุบันของกลุ่มโฮสต์นี้ให้กับผู้ใช้หรือบทบาทที่เลือกไว้ โฮสต์ที่เพิ่มเข้ามาในกลุ่มโฮสต์ในภายหลังจะไม่ถูกแชร์โดยอัตโนมัติ ต้องแชร์อีกครั้งเพื่อรวมโฮสต์เหล่านั้น", + "shareSelectionRequired": "เลือกผู้ใช้หรือบทบาทอย่างน้อยหนึ่งรายการ", + "fleetSharedSuccessfully": "โฮสต์ {{shared}} ที่ใช้ร่วมกันของ {{total}} ในกลุ่มนี้", + "failedToShareFleet": "ไม่สามารถแบ่งปันกองเรือได้", + "noMembersToShare": "กลุ่มเรือนี้ยังไม่มีสมาชิกผู้ให้บริการโฮสติ้งให้แชร์ข้อมูล" } } }, "nav": { - "fleets": "Fleets" + "fleets": "กองเรือ" }, "hosts": { - "docsLink": "View docs", + "docsLink": "ดูเอกสาร", "sharing": { - "customHoursPlaceholder": "Hours until access expires", + "customHoursPlaceholder": "เหลือเวลาอีกกี่ชั่วโมงก่อนที่สิทธิ์การเข้าถึงจะหมดอายุ", "expiry": { - "never": "Never", - "oneHour": "1 hour", - "oneDay": "24 hours", - "sevenDays": "7 days", - "thirtyDays": "30 days", - "custom": "Custom" + "never": "ไม่เคย", + "oneHour": "1 ชั่วโมง", + "oneDay": "24 ชั่วโมง", + "sevenDays": "7 วัน", + "thirtyDays": "30 วัน", + "custom": "กำหนดเอง" }, - "expiryLabel": "Access expiry", + "expiryLabel": "วันหมดอายุการเข้าถึง", "levels": { "connect": { - "label": "Connect", - "description": "Open sessions only: terminal, remote desktop, file manager, tunnels and Docker. No access to the host configuration." + "label": "เชื่อมต่อ", + "description": "อนุญาตเฉพาะเซสชันที่เปิดใช้งานเท่านั้น: เทอร์มินัล, เดสก์ท็อประยะไกล, ตัวจัดการไฟล์, อุโมงค์ และ Docker ไม่สามารถเข้าถึงการกำหนดค่าโฮสต์ได้" }, "view": { - "label": "View", - "description": "Connect, plus see the host configuration. Secrets are never shown." + "label": "ดู", + "description": "เชื่อมต่อและดูการตั้งค่าโฮสต์ ข้อมูลลับจะไม่ถูกเปิดเผย" }, "edit": { - "label": "Edit", - "description": "View, plus modify non-authentication host settings. The owner's SSH authentication stays private and owner-only." + "label": "แก้ไข", + "description": "ดูและแก้ไขการตั้งค่าโฮสต์ที่ไม่ต้องยืนยันตัวตน การยืนยันตัวตน SSH ของเจ้าของจะยังคงเป็นส่วนตัวและเข้าถึงได้เฉพาะเจ้าของเท่านั้น" }, "manage": { - "label": "Manage", - "description": "Edit, plus share the host with others, change permission levels and revoke access." + "label": "จัดการ", + "description": "แก้ไข รวมถึงแชร์โฮสต์กับผู้อื่น เปลี่ยนระดับสิทธิ์ และเพิกถอนการเข้าถึงได้" } }, - "noMatches": "No matches found", - "permissionLevelLabel": "Permission level", - "rolesTab": "Roles", - "searchPlaceholder": "Search users or roles...", - "shareButton": "Share", - "shareWithCount": "Share ({{count}})", - "usersTab": "Users" + "noMatches": "ไม่พบผลลัพธ์ที่ตรงกัน", + "permissionLevelLabel": "ระดับการอนุญาต", + "rolesTab": "บทบาท", + "searchPlaceholder": "ค้นหาผู้ใช้หรือบทบาท...", + "shareButton": "แบ่งปัน", + "shareWithCount": "แชร์ ({{count}})", + "usersTab": "ผู้ใช้" } } } diff --git a/plugins/fleets/locales/translated/tr_TR.json b/plugins/fleets/locales/translated/tr_TR.json index 0326df9ca..6ae2989a6 100644 --- a/plugins/fleets/locales/translated/tr_TR.json +++ b/plugins/fleets/locales/translated/tr_TR.json @@ -1,111 +1,111 @@ { "permissions": { "view": { - "title": "View fleets", - "description": "See fleets, their members and inventory." + "title": "Filoları görüntüle", + "description": "Filoları, üyelerini ve envanterlerini görüntüleyin." }, "manage": { - "title": "Manage fleets", - "description": "Create, edit and delete fleets, change membership, and share fleets with other users or roles." + "title": "Filoları yönetin", + "description": "Filoları oluşturun, düzenleyin ve silin, üyelikleri değiştirin ve filoları diğer kullanıcılar veya rollerle paylaşın." }, "execute": { - "title": "Run fleet actions", - "description": "Run commands and package actions across a fleet, and transfer files to and from its member hosts." + "title": "Filo işlemlerini yürütün", + "description": "Filo genelinde komutları çalıştırın, işlemleri paketleyin ve üye sunucular arasında dosya aktarımı yapın." } }, "newUi": { "sidebar": { "fleets": { - "title": "Fleets", - "createFleet": "Create Fleet", - "createFleetTitle": "Create Fleet", - "editFleetTitle": "Edit Fleet", - "createFleetDescription": "A fleet is a named group of hosts you can run actions against as a unit.", + "title": "Filolar", + "createFleet": "Filo Oluştur", + "createFleetTitle": "Filo Oluştur", + "editFleetTitle": "Filoyu Düzenle", + "createFleetDescription": "Filo, birim olarak eylemler gerçekleştirebileceğiniz, adlandırılmış bir sunucu grubudur.", "nameLabel": "Ad", - "namePlaceholder": "e.g., Web Servers", - "nameRequired": "Fleet name is required", + "namePlaceholder": "Örneğin, Web Sunucuları", + "nameRequired": "Filo adı zorunludur.", "descriptionLabel": "Açıklama", "descriptionPlaceholder": "İsteğe bağlı açıklama", "colorLabel": "Renk", - "tagRulesLabel": "Tag rules", + "tagRulesLabel": "Etiket kuralları", "tagRulesPlaceholder": "prod-web, edge", - "tagRulesHint": "Hosts with any of these tags are automatically included, in addition to hosts added manually.", - "fleetCreated": "Fleet created", - "fleetUpdated": "Fleet updated", - "fleetDeleted": "Fleet deleted", - "saveFailed": "Failed to save fleet", - "deleteFailed": "Failed to delete fleet", - "loadFailed": "Failed to load fleets", - "deleteFleetTitle": "Delete Fleet", - "deleteFleetDescription": "Are you sure you want to delete \"{{name}}\"? This does not delete the member hosts themselves.", - "searchFleets": "Search fleets...", - "noFleets": "No fleets yet. Create one to get started.", - "memberCount": "{{count}} host", + "tagRulesHint": "Bu etiketlerden herhangi birine sahip sunucular, manuel olarak eklenen sunuculara ek olarak otomatik olarak dahil edilir.", + "fleetCreated": "Filo oluşturuldu", + "fleetUpdated": "Filo güncellendi", + "fleetDeleted": "Filo silindi", + "saveFailed": "Filoyu kurtaramadık", + "deleteFailed": "Filoyu silme işlemi başarısız oldu.", + "loadFailed": "Filoların yüklenmesi başarısız oldu.", + "deleteFleetTitle": "Filoyu Sil", + "deleteFleetDescription": "\"{{name}}\" öğesini silmek istediğinizden emin misiniz? Bu işlem üye sunucuların kendilerini silmez.", + "searchFleets": "Filoları arayın...", + "noFleets": "Henüz filo yok. Başlamak için bir tane oluşturun.", + "memberCount": "{{count}} sunucu", "memberCount_other": "{{count}} ana makine", - "manageMembers": "Manage Members", - "manageMembersTitle": "Manage Fleet Members", - "manageMembersDescription": "Toggle hosts in or out of this fleet's static membership. Hosts matched by tag rules are always included.", + "manageMembers": "Üyeleri Yönet", + "manageMembersTitle": "Filo Üyelerini Yönetin", + "manageMembersDescription": "Sunucuları bu filonun statik üyeliğine dahil edin veya çıkarın. Etiket kurallarına göre eşleşen sunucular her zaman dahil edilir.", "searchHosts": "Host ara...", "noHostsFound": "Hiç sunucu bulunamadı", - "noMembers": "This fleet has no members yet. Add hosts or set a tag rule.", - "membersLoadFailed": "Failed to load fleet members", - "memberUpdateFailed": "Failed to update fleet membership", - "tabRun": "Run Command", - "tabTransfer": "Transfer Files", - "tabInventory": "Inventory", - "openInventoryTab": "Open in full tab", + "noMembers": "Bu filonun henüz üyesi yok. Sunucu ekleyin veya etiket kuralı belirleyin.", + "membersLoadFailed": "Filo üyeleri yüklenemedi.", + "memberUpdateFailed": "Filo üyeliği güncellenemedi.", + "tabRun": "Komutu Çalıştır", + "tabTransfer": "Dosya Aktarımı", + "tabInventory": "Envanter", + "openInventoryTab": "Tam sekmede aç", "tabPackages": "Paketler", - "runOnFleet": "Run on Fleet", - "commandPlaceholder": "uptime && df -h", - "commandRequired": "A command is required", - "commandInputsLabel": "Command inputs", - "commandSucceeded": "Command succeeded on all hosts", - "commandPartialFailure": "{{failed}} of {{total}} hosts failed", - "commandFailed": "Failed to run command", + "runOnFleet": "Filoda Çalıştır", + "commandPlaceholder": "çalışma süresi && df -h", + "commandRequired": "Bir komut gereklidir.", + "commandInputsLabel": "Komut girişleri", + "commandSucceeded": "Komut tüm sunucularda başarıyla tamamlandı.", + "commandPartialFailure": "{{failed}} / {{total}} sunucu başarısız oldu", + "commandFailed": "Komut çalıştırma başarısız oldu.", "resultSuccess": "Başarılı", "resultFailed": "Başarısız", - "push": "Push", - "pull": "Pull", - "remotePathLabel": "Remote path", - "remotePathRequired": "A remote path is required", + "push": "İtmek", + "pull": "Çekmek", + "remotePathLabel": "Uzak yol", + "remotePathRequired": "Uzak bir yol gereklidir.", "fileLabel": "Dosya", - "fileRequired": "A file is required", - "pushHint": "The selected file is written to this exact path on every host in the fleet.", - "pullHint": "The file at this path is read from every host and downloaded as a single zip, one folder per host.", + "fileRequired": "Bir dosya gereklidir.", + "pushHint": "Seçilen dosya, filodaki her sunucuda tam olarak bu yola yazılır.", + "pullHint": "Bu yoldaki dosya her sunucudan okunur ve her sunucu için bir klasör olmak üzere tek bir zip dosyası olarak indirilir.", "transferComplete": "Aktarım tamamlandı", "transferFailed": "Aktarım başarısız", - "refreshInventory": "Refresh Inventory", - "inventoryLoadFailed": "Failed to load inventory", - "inventoryRefreshed": "Inventory refreshed", - "inventoryRefreshFailed": "Failed to refresh inventory", - "inventoryNoData": "No inventory data yet - refresh to collect it.", + "refreshInventory": "Envanteri Yenile", + "inventoryLoadFailed": "Envanter yüklenemedi.", + "inventoryRefreshed": "Stok güncellendi", + "inventoryRefreshFailed": "Envanter yenileme işlemi başarısız oldu.", + "inventoryNoData": "Henüz envanter verisi yok - verileri toplamak için sayfayı yenileyin.", "inventoryHost": "Ana Bilgisayar", - "inventoryCollectedCount": "{{count}}/{{total}} collected", + "inventoryCollectedCount": "{{count}}/{{total}} toplandı", "inventoryOs": "İşletim Sistemi", "inventoryKernel": "Çekirdek", - "inventoryArch": "Arch", + "inventoryArch": "Kemer", "inventoryUptime": "Çalışma Süresi", - "inventoryPackageManager": "Package manager", - "inventoryCollectedAt": "Collected", + "inventoryPackageManager": "Paket yöneticisi", + "inventoryCollectedAt": "Toplandı", "packageActionLabel": "İşlem", - "packageInstall": "Install", + "packageInstall": "Düzenlemek", "packageRemove": "Kaldır", - "packageUpgradeAll": "Upgrade all packages", - "packageNameLabel": "Package name", - "packageNameRequired": "A package name is required", - "packageHint": "Requires manage-level access per host and elevates using the host's stored sudo password.", - "shareFleet": "Share Fleet", - "shareFleetTitle": "Share \"{{name}}\"", - "shareFleetDescription": "Shares this fleet's current member hosts with the selected users or roles. Hosts added to the fleet later are not shared automatically - share again to include them.", - "shareSelectionRequired": "Select at least one user or role", - "fleetSharedSuccessfully": "Shared {{shared}} of {{total}} host(s) in this fleet", - "failedToShareFleet": "Failed to share fleet", - "noMembersToShare": "This fleet has no member hosts to share yet." + "packageUpgradeAll": "Tüm paketleri yükseltin", + "packageNameLabel": "Paket adı", + "packageNameRequired": "Paket adı gereklidir.", + "packageHint": "Her sunucu için yönetim düzeyinde erişim gerektirir ve sunucunun kayıtlı sudo şifresi kullanılarak yetki yükseltilir.", + "shareFleet": "Filo Paylaşımı", + "shareFleetTitle": "Paylaş \"{{name}}\"", + "shareFleetDescription": "Bu filonun mevcut üye sunucularını seçilen kullanıcılar veya rollerle paylaşır. Filoya daha sonra eklenen sunucular otomatik olarak paylaşılmaz; bunları dahil etmek için tekrar paylaşın.", + "shareSelectionRequired": "En az bir kullanıcı veya rol seçin.", + "fleetSharedSuccessfully": "Bu filodaki {{total}} ana bilgisayarın paylaşılan {{shared}} 'ı", + "failedToShareFleet": "Filo paylaşımı başarısız oldu.", + "noMembersToShare": "Bu filonun henüz paylaşabileceği üye sunucusu yok." } } }, "nav": { - "fleets": "Fleets" + "fleets": "Filolar" }, "hosts": { "docsLink": "Dokümanları görüntüle", @@ -131,7 +131,7 @@ }, "edit": { "label": "Düzenle", - "description": "View, plus modify non-authentication host settings. The owner's SSH authentication stays private and owner-only." + "description": "Kimlik doğrulaması gerektirmeyen sunucu ayarlarını görüntüleyin ve değiştirin. Sahibin SSH kimlik doğrulaması gizli kalır ve yalnızca sahibine özeldir." }, "manage": { "label": "Yönet", diff --git a/plugins/fleets/locales/translated/uk_UA.json b/plugins/fleets/locales/translated/uk_UA.json index 18ffb4fa6..29399defa 100644 --- a/plugins/fleets/locales/translated/uk_UA.json +++ b/plugins/fleets/locales/translated/uk_UA.json @@ -1,150 +1,150 @@ { "permissions": { "view": { - "title": "View fleets", - "description": "See fleets, their members and inventory." + "title": "Переглянути автопарки", + "description": "Перегляньте автопарки, їхніх членів та інвентар." }, "manage": { - "title": "Manage fleets", - "description": "Create, edit and delete fleets, change membership, and share fleets with other users or roles." + "title": "Керування автопарками", + "description": "Створюйте, редагуйте та видаляйте автопарки, змінюйте членство та діліться автопарками з іншими користувачами або ролями." }, "execute": { - "title": "Run fleet actions", - "description": "Run commands and package actions across a fleet, and transfer files to and from its member hosts." + "title": "Виконання дій з флотом", + "description": "Виконуйте команди та дії з пакетування в усьому парку пристроїв, а також передайте файли на хости-члени та з них." } }, "newUi": { "sidebar": { "fleets": { - "title": "Fleets", - "createFleet": "Create Fleet", - "createFleetTitle": "Create Fleet", - "editFleetTitle": "Edit Fleet", - "createFleetDescription": "A fleet is a named group of hosts you can run actions against as a unit.", - "nameLabel": "Name", - "namePlaceholder": "e.g., Web Servers", - "nameRequired": "Fleet name is required", - "descriptionLabel": "Description", - "descriptionPlaceholder": "Optional description", - "colorLabel": "Color", - "tagRulesLabel": "Tag rules", - "tagRulesPlaceholder": "prod-web, edge", - "tagRulesHint": "Hosts with any of these tags are automatically included, in addition to hosts added manually.", - "fleetCreated": "Fleet created", - "fleetUpdated": "Fleet updated", - "fleetDeleted": "Fleet deleted", - "saveFailed": "Failed to save fleet", - "deleteFailed": "Failed to delete fleet", - "loadFailed": "Failed to load fleets", - "deleteFleetTitle": "Delete Fleet", - "deleteFleetDescription": "Are you sure you want to delete \"{{name}}\"? This does not delete the member hosts themselves.", - "searchFleets": "Search fleets...", - "noFleets": "No fleets yet. Create one to get started.", - "memberCount": "{{count}} host", - "memberCount_other": "{{count}} hosts", - "manageMembers": "Manage Members", - "manageMembersTitle": "Manage Fleet Members", - "manageMembersDescription": "Toggle hosts in or out of this fleet's static membership. Hosts matched by tag rules are always included.", - "searchHosts": "Search hosts...", - "noHostsFound": "No hosts found", - "noMembers": "This fleet has no members yet. Add hosts or set a tag rule.", - "membersLoadFailed": "Failed to load fleet members", - "memberUpdateFailed": "Failed to update fleet membership", - "tabRun": "Run Command", - "tabTransfer": "Transfer Files", - "tabInventory": "Inventory", - "openInventoryTab": "Open in full tab", - "tabPackages": "Packages", - "runOnFleet": "Run on Fleet", - "commandPlaceholder": "uptime && df -h", - "commandRequired": "A command is required", - "commandInputsLabel": "Command inputs", - "commandSucceeded": "Command succeeded on all hosts", - "commandPartialFailure": "{{failed}} of {{total}} hosts failed", - "commandFailed": "Failed to run command", - "resultSuccess": "Success", - "resultFailed": "Failed", - "push": "Push", - "pull": "Pull", - "remotePathLabel": "Remote path", - "remotePathRequired": "A remote path is required", - "fileLabel": "File", - "fileRequired": "A file is required", - "pushHint": "The selected file is written to this exact path on every host in the fleet.", - "pullHint": "The file at this path is read from every host and downloaded as a single zip, one folder per host.", - "transferComplete": "Transfer complete", - "transferFailed": "Transfer failed", - "refreshInventory": "Refresh Inventory", - "inventoryLoadFailed": "Failed to load inventory", - "inventoryRefreshed": "Inventory refreshed", - "inventoryRefreshFailed": "Failed to refresh inventory", - "inventoryNoData": "No inventory data yet - refresh to collect it.", - "inventoryHost": "Host", - "inventoryCollectedCount": "{{count}}/{{total}} collected", - "inventoryOs": "OS", - "inventoryKernel": "Kernel", - "inventoryArch": "Arch", - "inventoryUptime": "Uptime", - "inventoryPackageManager": "Package manager", - "inventoryCollectedAt": "Collected", - "packageActionLabel": "Action", - "packageInstall": "Install", - "packageRemove": "Remove", - "packageUpgradeAll": "Upgrade all packages", - "packageNameLabel": "Package name", - "packageNameRequired": "A package name is required", - "packageHint": "Requires manage-level access per host and elevates using the host's stored sudo password.", - "shareFleet": "Share Fleet", - "shareFleetTitle": "Share \"{{name}}\"", - "shareFleetDescription": "Shares this fleet's current member hosts with the selected users or roles. Hosts added to the fleet later are not shared automatically - share again to include them.", - "shareSelectionRequired": "Select at least one user or role", - "fleetSharedSuccessfully": "Shared {{shared}} of {{total}} host(s) in this fleet", - "failedToShareFleet": "Failed to share fleet", - "noMembersToShare": "This fleet has no member hosts to share yet." + "title": "Флоти", + "createFleet": "Створити флот", + "createFleetTitle": "Створити флот", + "editFleetTitle": "Редагувати флот", + "createFleetDescription": "Флот — це іменована група хостів, проти яких можна виконувати дії як проти єдиного цілого.", + "nameLabel": "Ім'я", + "namePlaceholder": "наприклад, веб-сервери", + "nameRequired": "Потрібно вказати назву флоту", + "descriptionLabel": "Опис", + "descriptionPlaceholder": "Додатковий опис", + "colorLabel": "Колір", + "tagRulesLabel": "Правила тегів", + "tagRulesPlaceholder": "prod-web, край", + "tagRulesHint": "Хости з будь-яким із цих тегів додаються автоматично, окрім хостів, доданих вручну.", + "fleetCreated": "Створено флот", + "fleetUpdated": "Оновлено автопарк", + "fleetDeleted": "Флот видалено", + "saveFailed": "Не вдалося зберегти флот", + "deleteFailed": "Не вдалося видалити автопарк", + "loadFailed": "Не вдалося завантажити автопарки", + "deleteFleetTitle": "Видалити автопарк", + "deleteFleetDescription": "Ви впевнені, що хочете видалити \"{{name}}\"? Це не видаляє самі хости-учасники.", + "searchFleets": "Пошук автопарків...", + "noFleets": "Поки що немає автопарків. Створіть його, щоб розпочати.", + "memberCount": "{{count}} хост", + "memberCount_other": "{{count}} хости", + "manageMembers": "Керування учасниками", + "manageMembersTitle": "Керування членами автопарку", + "manageMembersDescription": "Вмикати або вимикати хости зі списку статичного членства цього флоту. Хости, що відповідають правилам тегів, завжди враховуються.", + "searchHosts": "Пошук хостів...", + "noHostsFound": "Хости не знайдено", + "noMembers": "Цей флот ще не має учасників. Додайте хостів або встановіть правило тегу.", + "membersLoadFailed": "Не вдалося завантажити учасників автопарку", + "memberUpdateFailed": "Не вдалося оновити членство в автопарку", + "tabRun": "Виконати команду", + "tabTransfer": "Передача файлів", + "tabInventory": "Інвентаризація", + "openInventoryTab": "Відкрити у повній вкладці", + "tabPackages": "Пакети", + "runOnFleet": "Запустити флот", + "commandPlaceholder": "час безперебійної роботи && df -h", + "commandRequired": "Потрібна команда", + "commandInputsLabel": "Вхідні команди", + "commandSucceeded": "Команда успішно виконана на всіх хостах", + "commandPartialFailure": "{{failed}} з {{total}} хостів не вдалося", + "commandFailed": "Не вдалося виконати команду", + "resultSuccess": "Успіх", + "resultFailed": "Не вдалося", + "push": "Натисніть", + "pull": "Тягнути", + "remotePathLabel": "Віддалений шлях", + "remotePathRequired": "Потрібен віддалений шлях", + "fileLabel": "Файл", + "fileRequired": "Потрібен файл", + "pushHint": "Вибраний файл записується саме за цим шляхом на кожному хості парку.", + "pullHint": "Файл за цим шляхом зчитується з кожного хоста та завантажується як один zip-архів, одна папка на хост.", + "transferComplete": "Перенесення завершено", + "transferFailed": "Передача не вдалася", + "refreshInventory": "Оновити інвентар", + "inventoryLoadFailed": "Не вдалося завантажити інвентар", + "inventoryRefreshed": "Інвентар оновлено", + "inventoryRefreshFailed": "Не вдалося оновити інвентар", + "inventoryNoData": "Даних про інвентаризацію ще немає – оновіть сторінку, щоб зібрати їх.", + "inventoryHost": "Хост", + "inventoryCollectedCount": "{{count}}/{{total}} зібрано", + "inventoryOs": "ОС", + "inventoryKernel": "Ядро", + "inventoryArch": "Арка", + "inventoryUptime": "Час безвідмовної роботи", + "inventoryPackageManager": "Менеджер пакетів", + "inventoryCollectedAt": "Зібрано", + "packageActionLabel": "Дія", + "packageInstall": "Встановити", + "packageRemove": "Видалити", + "packageUpgradeAll": "Оновіть усі пакети", + "packageNameLabel": "Назва пакета", + "packageNameRequired": "Потрібна назва пакета", + "packageHint": "Потрібен доступ на рівні керування для кожного хоста та підвищення прав за допомогою збереженого пароля sudo хоста.", + "shareFleet": "Поділитися автопарком", + "shareFleetTitle": "Поділитися «{{name}}»", + "shareFleetDescription": "Надає доступ до хостів-членів цього флоту вибраним користувачам або ролям. Хости, додані до флоту пізніше, не надаються автоматично – надішліть їх ще раз, щоб включити їх.", + "shareSelectionRequired": "Виберіть принаймні одного користувача або роль", + "fleetSharedSuccessfully": "Спільні {{shared}} з {{total}} хост(ів) у цьому флоті", + "failedToShareFleet": "Не вдалося поділитися автопарком", + "noMembersToShare": "Цей флот ще не має хостів-учасників для спільного використання." } } }, "nav": { - "fleets": "Fleets" + "fleets": "Флоти" }, "hosts": { - "docsLink": "View docs", + "docsLink": "Переглянути документи", "sharing": { - "customHoursPlaceholder": "Hours until access expires", + "customHoursPlaceholder": "Години до закінчення терміну дії доступу", "expiry": { - "never": "Never", - "oneHour": "1 hour", - "oneDay": "24 hours", - "sevenDays": "7 days", - "thirtyDays": "30 days", - "custom": "Custom" + "never": "Ніколи", + "oneHour": "1 година", + "oneDay": "24 години", + "sevenDays": "7 днів", + "thirtyDays": "30 днів", + "custom": "Користувацька" }, - "expiryLabel": "Access expiry", + "expiryLabel": "Термін дії доступу", "levels": { "connect": { - "label": "Connect", - "description": "Open sessions only: terminal, remote desktop, file manager, tunnels and Docker. No access to the host configuration." + "label": "Підключитися", + "description": "Тільки відкриті сеанси: термінал, віддалений робочий стіл, файловий менеджер, тунелі та Docker. Без доступу до конфігурації хоста." }, "view": { - "label": "View", - "description": "Connect, plus see the host configuration. Secrets are never shown." + "label": "Переглянути", + "description": "Підключитися, а також переглянути конфігурацію хоста. Секрети ніколи не відображаються." }, "edit": { - "label": "Edit", - "description": "View, plus modify non-authentication host settings. The owner's SSH authentication stays private and owner-only." + "label": "Редагувати", + "description": "Переглядайте та змінюйте налаштування хоста без автентифікації. SSH-автентифікація власника залишається приватною та доступною лише для власника." }, "manage": { - "label": "Manage", - "description": "Edit, plus share the host with others, change permission levels and revoke access." + "label": "Керувати", + "description": "Редагувати, а також ділитися хостом з іншими, змінювати рівні дозволів та скасовувати доступ." } }, - "noMatches": "No matches found", - "permissionLevelLabel": "Permission level", - "rolesTab": "Roles", - "searchPlaceholder": "Search users or roles...", - "shareButton": "Share", - "shareWithCount": "Share ({{count}})", - "usersTab": "Users" + "noMatches": "Збігів не знайдено", + "permissionLevelLabel": "Рівень дозволів", + "rolesTab": "Ролі", + "searchPlaceholder": "Пошук користувачів або ролей...", + "shareButton": "Поділитися", + "shareWithCount": "Поділитися ({{count}})", + "usersTab": "Користувачі" } } } diff --git a/plugins/fleets/locales/translated/vi_VN.json b/plugins/fleets/locales/translated/vi_VN.json index 8445f108e..cb76e3c9d 100644 --- a/plugins/fleets/locales/translated/vi_VN.json +++ b/plugins/fleets/locales/translated/vi_VN.json @@ -1,111 +1,111 @@ { "permissions": { "view": { - "title": "View fleets", - "description": "See fleets, their members and inventory." + "title": "Xem đội xe", + "description": "Xem thông tin về các đội tàu, thành viên và trang thiết bị." }, "manage": { - "title": "Manage fleets", - "description": "Create, edit and delete fleets, change membership, and share fleets with other users or roles." + "title": "Quản lý đội xe", + "description": "Tạo, chỉnh sửa và xóa đội tàu, thay đổi thành viên và chia sẻ đội tàu với người dùng hoặc vai trò khác." }, "execute": { - "title": "Run fleet actions", - "description": "Run commands and package actions across a fleet, and transfer files to and from its member hosts." + "title": "Thực hiện các hoạt động của hạm đội", + "description": "Chạy các lệnh và thực hiện các hành động gói trên toàn bộ hệ thống máy chủ, cũng như truyền tải các tập tin đến và từ các máy chủ thành viên." } }, "newUi": { "sidebar": { "fleets": { - "title": "Fleets", - "createFleet": "Create Fleet", - "createFleetTitle": "Create Fleet", - "editFleetTitle": "Edit Fleet", - "createFleetDescription": "A fleet is a named group of hosts you can run actions against as a unit.", + "title": "Hạm đội", + "createFleet": "Tạo đội tàu", + "createFleetTitle": "Tạo đội tàu", + "editFleetTitle": "Chỉnh sửa đội xe", + "createFleetDescription": "Hạm đội là một nhóm máy chủ được đặt tên mà bạn có thể thực hiện các hành động chống lại chúng như một đơn vị.", "nameLabel": "Tên", - "namePlaceholder": "e.g., Web Servers", - "nameRequired": "Fleet name is required", + "namePlaceholder": "Ví dụ: Máy chủ web", + "nameRequired": "Tên đội xe là bắt buộc", "descriptionLabel": "Mô tả", "descriptionPlaceholder": "Mô tả tùy chọn", "colorLabel": "Màu sắc", - "tagRulesLabel": "Tag rules", - "tagRulesPlaceholder": "prod-web, edge", - "tagRulesHint": "Hosts with any of these tags are automatically included, in addition to hosts added manually.", - "fleetCreated": "Fleet created", - "fleetUpdated": "Fleet updated", - "fleetDeleted": "Fleet deleted", - "saveFailed": "Failed to save fleet", - "deleteFailed": "Failed to delete fleet", - "loadFailed": "Failed to load fleets", - "deleteFleetTitle": "Delete Fleet", - "deleteFleetDescription": "Are you sure you want to delete \"{{name}}\"? This does not delete the member hosts themselves.", - "searchFleets": "Search fleets...", - "noFleets": "No fleets yet. Create one to get started.", - "memberCount": "{{count}} host", + "tagRulesLabel": "Quy tắc gắn thẻ", + "tagRulesPlaceholder": "web sản xuất, cạnh", + "tagRulesHint": "Các máy chủ có bất kỳ thẻ nào trong số này sẽ tự động được thêm vào, bên cạnh các máy chủ được thêm thủ công.", + "fleetCreated": "Hạm đội đã tạo ra", + "fleetUpdated": "Đội tàu được cập nhật", + "fleetDeleted": "Hạm đội đã bị xóa", + "saveFailed": "Không thể cứu hạm đội.", + "deleteFailed": "Không thể xóa đội tàu", + "loadFailed": "Không thể tải đội xe", + "deleteFleetTitle": "Xóa hạm đội", + "deleteFleetDescription": "Bạn có chắc chắn muốn xóa \"{{name}}\" không? Thao tác này không xóa các máy chủ thành viên.", + "searchFleets": "Các hạm đội tìm kiếm...", + "noFleets": "Chưa có hạm đội nào. Hãy tạo một hạm đội để bắt đầu.", + "memberCount": "{{count}} máy chủ", "memberCount_other": "{{count}} máy chủ", - "manageMembers": "Manage Members", - "manageMembersTitle": "Manage Fleet Members", - "manageMembersDescription": "Toggle hosts in or out of this fleet's static membership. Hosts matched by tag rules are always included.", + "manageMembers": "Quản lý thành viên", + "manageMembersTitle": "Quản lý thành viên đội xe", + "manageMembersDescription": "Cho phép thêm hoặc xóa các máy chủ khỏi tư cách thành viên cố định của nhóm này. Các máy chủ phù hợp với quy tắc gắn thẻ luôn được bao gồm.", "searchHosts": "Tìm kiếm máy chủ...", "noHostsFound": "Không tìm thấy máy chủ", - "noMembers": "This fleet has no members yet. Add hosts or set a tag rule.", - "membersLoadFailed": "Failed to load fleet members", - "memberUpdateFailed": "Failed to update fleet membership", - "tabRun": "Run Command", - "tabTransfer": "Transfer Files", - "tabInventory": "Inventory", - "openInventoryTab": "Open in full tab", + "noMembers": "Hạm đội này chưa có thành viên nào. Thêm máy chủ hoặc thiết lập quy tắc gắn thẻ.", + "membersLoadFailed": "Không thể tải thông tin thành viên đội xe", + "memberUpdateFailed": "Không thể cập nhật thông tin thành viên đội tàu", + "tabRun": "Chạy lệnh", + "tabTransfer": "Chuyển tập tin", + "tabInventory": "Hàng tồn kho", + "openInventoryTab": "Mở ở chế độ toàn màn hình", "tabPackages": "Gói", - "runOnFleet": "Run on Fleet", - "commandPlaceholder": "uptime && df -h", - "commandRequired": "A command is required", - "commandInputsLabel": "Command inputs", - "commandSucceeded": "Command succeeded on all hosts", - "commandPartialFailure": "{{failed}} of {{total}} hosts failed", - "commandFailed": "Failed to run command", + "runOnFleet": "Chạy trên Fleet", + "commandPlaceholder": "thời gian hoạt động && df -h", + "commandRequired": "Cần có lệnh", + "commandInputsLabel": "Đầu vào lệnh", + "commandSucceeded": "Lệnh đã được thực thi thành công trên tất cả các máy chủ.", + "commandPartialFailure": "{{failed}} trong số {{total}} máy chủ đã bị lỗi", + "commandFailed": "Không thể chạy lệnh.", "resultSuccess": "Thành công", "resultFailed": "Thất bại", - "push": "Push", - "pull": "Pull", - "remotePathLabel": "Remote path", - "remotePathRequired": "A remote path is required", + "push": "Xô", + "pull": "Sự lôi kéo", + "remotePathLabel": "Đường dẫn từ xa", + "remotePathRequired": "Cần có một đường dẫn từ xa.", "fileLabel": "Tệp", - "fileRequired": "A file is required", - "pushHint": "The selected file is written to this exact path on every host in the fleet.", - "pullHint": "The file at this path is read from every host and downloaded as a single zip, one folder per host.", + "fileRequired": "Cần có một tập tin.", + "pushHint": "Tệp đã chọn sẽ được ghi vào đúng đường dẫn này trên mọi máy chủ trong hệ thống.", + "pullHint": "Tệp tại đường dẫn này được đọc từ mọi máy chủ và tải xuống dưới dạng một tệp zip duy nhất, mỗi máy chủ một thư mục.", "transferComplete": "Truyền tải hoàn tất", "transferFailed": "Truyền tải thất bại", - "refreshInventory": "Refresh Inventory", - "inventoryLoadFailed": "Failed to load inventory", - "inventoryRefreshed": "Inventory refreshed", - "inventoryRefreshFailed": "Failed to refresh inventory", - "inventoryNoData": "No inventory data yet - refresh to collect it.", + "refreshInventory": "Làm mới kho hàng", + "inventoryLoadFailed": "Không thể tải kho hàng", + "inventoryRefreshed": "Hàng tồn kho được cập nhật", + "inventoryRefreshFailed": "Không thể làm mới kho hàng", + "inventoryNoData": "Chưa có dữ liệu tồn kho - hãy làm mới trang để thu thập dữ liệu.", "inventoryHost": "Máy chủ", - "inventoryCollectedCount": "{{count}}/{{total}} collected", + "inventoryCollectedCount": "{{count}}/{{total}} đã thu thập", "inventoryOs": "Hệ điều hành", "inventoryKernel": "Nhân", - "inventoryArch": "Arch", + "inventoryArch": "Vòm", "inventoryUptime": "Thời gian hoạt động", - "inventoryPackageManager": "Package manager", - "inventoryCollectedAt": "Collected", + "inventoryPackageManager": "Trình quản lý gói", + "inventoryCollectedAt": "Đã thu thập", "packageActionLabel": "Hành động", - "packageInstall": "Install", + "packageInstall": "Cài đặt", "packageRemove": "Xóa", - "packageUpgradeAll": "Upgrade all packages", - "packageNameLabel": "Package name", - "packageNameRequired": "A package name is required", - "packageHint": "Requires manage-level access per host and elevates using the host's stored sudo password.", - "shareFleet": "Share Fleet", - "shareFleetTitle": "Share \"{{name}}\"", - "shareFleetDescription": "Shares this fleet's current member hosts with the selected users or roles. Hosts added to the fleet later are not shared automatically - share again to include them.", - "shareSelectionRequired": "Select at least one user or role", - "fleetSharedSuccessfully": "Shared {{shared}} of {{total}} host(s) in this fleet", - "failedToShareFleet": "Failed to share fleet", - "noMembersToShare": "This fleet has no member hosts to share yet." + "packageUpgradeAll": "Nâng cấp tất cả các gói", + "packageNameLabel": "Tên gói", + "packageNameRequired": "Cần phải có tên gói.", + "packageHint": "Yêu cầu quyền truy cập cấp quản trị cho mỗi máy chủ và nâng quyền bằng mật khẩu sudo được lưu trữ trên máy chủ đó.", + "shareFleet": "Chia sẻ đội xe", + "shareFleetTitle": "Chia sẻ \"{{name}}\"", + "shareFleetDescription": "Chia sẻ các máy chủ thành viên hiện tại của nhóm này với những người dùng hoặc vai trò đã chọn. Các máy chủ được thêm vào nhóm sau này sẽ không được chia sẻ tự động - hãy chia sẻ lại để bao gồm chúng.", + "shareSelectionRequired": "Chọn ít nhất một người dùng hoặc vai trò", + "fleetSharedSuccessfully": "Chia sẻ {{shared}} trong số {{total}} máy chủ trong hạm đội này", + "failedToShareFleet": "Không thể chia sẻ đội xe", + "noMembersToShare": "Hạm đội này hiện chưa có máy chủ thành viên nào để chia sẻ." } } }, "nav": { - "fleets": "Fleets" + "fleets": "Hạm đội" }, "hosts": { "docsLink": "Xem tài liệu", @@ -131,7 +131,7 @@ }, "edit": { "label": "Chỉnh sửa", - "description": "View, plus modify non-authentication host settings. The owner's SSH authentication stays private and owner-only." + "description": "Xem và chỉnh sửa cài đặt máy chủ không yêu cầu xác thực. Thông tin xác thực SSH của chủ sở hữu vẫn được giữ kín và chỉ dành riêng cho chủ sở hữu." }, "manage": { "label": "Quản lý", diff --git a/plugins/fleets/locales/translated/zh_CN.json b/plugins/fleets/locales/translated/zh_CN.json index 83f335c69..2ccd3f2d7 100644 --- a/plugins/fleets/locales/translated/zh_CN.json +++ b/plugins/fleets/locales/translated/zh_CN.json @@ -1,77 +1,77 @@ { "permissions": { "view": { - "title": "查看主机组", - "description": "查看主机组、成员及资产信息。" + "title": "查看舰队", + "description": "查看船队、其成员和库存。" }, "manage": { - "title": "管理主机组", - "description": "创建、编辑和删除主机组,调整成员,并与其他用户或角色共享主机组。" + "title": "管理车队", + "description": "创建、编辑和删除舰队,更改成员资格,并与其他用户或角色共享舰队。" }, "execute": { - "title": "执行主机组操作", - "description": "在主机组内批量执行命令、软件包操作,以及与成员主机传输文件。" + "title": "运行舰队行动", + "description": "在整个集群中运行命令和打包操作,并在其成员主机之间传输文件。" } }, "newUi": { "sidebar": { "fleets": { - "title": "主机组", - "createFleet": "创建主机组", - "createFleetTitle": "创建主机组", - "editFleetTitle": "编辑主机组", - "createFleetDescription": "主机组是一组已命名的主机,可作为整体执行操作。", + "title": "舰队", + "createFleet": "创建舰队", + "createFleetTitle": "创建舰队", + "editFleetTitle": "编辑舰队", + "createFleetDescription": "舰队是一个命名的主机组,你可以将其作为一个整体来执行操作。", "nameLabel": "名称", "namePlaceholder": "例如:Web 服务器", - "nameRequired": "需要填写主机组名称。", + "nameRequired": "需要填写舰队名称。", "descriptionLabel": "描述", "descriptionPlaceholder": "可选描述", "colorLabel": "颜色", "tagRulesLabel": "标签规则", "tagRulesPlaceholder": "prod-web, edge", - "tagRulesHint": "除手动添加的主机外,具有任一指定标签的主机也会自动加入。", - "fleetCreated": "主机组已创建", - "fleetUpdated": "主机组已更新", - "fleetDeleted": "主机组已删除", - "saveFailed": "保存主机组失败", - "deleteFailed": "删除主机组失败", - "loadFailed": "加载主机组失败", - "deleteFleetTitle": "删除主机组", - "deleteFleetDescription": "确定删除“{{name}}”?此操作不会删除成员主机本身。", - "searchFleets": "搜索主机组……", - "noFleets": "暂无主机组,请创建一个以开始使用。", + "tagRulesHint": "带有这些标签的主机将自动包含在内,此外还可以手动添加主机。", + "fleetCreated": "舰队已创建", + "fleetUpdated": "舰队已更新", + "fleetDeleted": "舰队已删除", + "saveFailed": "保存舰队失败", + "deleteFailed": "删除舰队失败", + "loadFailed": "舰队加载失败", + "deleteFleetTitle": "删除舰队", + "deleteFleetDescription": "您确定要删除“{{name}}”吗?此操作不会删除成员主机本身。", + "searchFleets": "搜索舰队……", + "noFleets": "暂无舰队。创建舰队即可开始。", "memberCount": "{{count}} 台主机", "memberCount_other": "{{count}} 台主机", "manageMembers": "管理成员", - "manageMembersTitle": "管理主机组成员", - "manageMembersDescription": "将主机加入或移出此主机组的固定成员列表。匹配标签规则的主机始终包含在内。", + "manageMembersTitle": "管理舰队成员", + "manageMembersDescription": "切换主机是否加入此舰队的静态成员列表。符合标签规则的主机始终包含在内。", "searchHosts": "搜索主机...", "noHostsFound": "未找到主机", - "noMembers": "此主机组暂无成员,请添加主机或设置标签规则。", - "membersLoadFailed": "加载主机组成员失败", - "memberUpdateFailed": "更新主机组成员失败", - "tabRun": "执行命令", + "noMembers": "此舰队目前尚无成员。请添加主机或设置标签规则。", + "membersLoadFailed": "加载舰队成员失败", + "memberUpdateFailed": "舰队成员信息更新失败", + "tabRun": "运行命令", "tabTransfer": "传输文件", "tabInventory": "清单", - "openInventoryTab": "在完整标签页中打开", + "openInventoryTab": "在新标签页中打开", "tabPackages": "软件包", - "runOnFleet": "在主机组上运行", + "runOnFleet": "在舰队上运行", "commandPlaceholder": "uptime && df -h", - "commandRequired": "必须填写命令", + "commandRequired": "需要一条命令", "commandInputsLabel": "命令输入", - "commandSucceeded": "命令已在所有主机上执行成功", + "commandSucceeded": "命令在所有主机上均已成功执行。", "commandPartialFailure": "{{total}} 台主机中有 {{failed}} 台失败", - "commandFailed": "执行命令失败", + "commandFailed": "命令运行失败", "resultSuccess": "成功", "resultFailed": "失败", "push": "推送", "pull": "拉取", "remotePathLabel": "远程路径", - "remotePathRequired": "必须填写远程路径", + "remotePathRequired": "需要远程路径", "fileLabel": "文件", "fileRequired": "需要选择文件", - "pushHint": "选定的文件将被写入主机组中每台主机上的指定路径。", - "pullHint": "从每台主机读取此路径下的文件,按主机分文件夹打包为一个 ZIP 文件下载。", + "pushHint": "选定的文件将被写入舰队中每台主机上的指定路径。", + "pullHint": "从每个主机读取此路径下的文件,并将其下载为单个 zip 文件,每个主机一个文件夹。", "transferComplete": "传输完成", "transferFailed": "传输失败", "refreshInventory": "刷新清单", @@ -86,26 +86,26 @@ "inventoryArch": "架构", "inventoryUptime": "运行时间", "inventoryPackageManager": "软件包管理器", - "inventoryCollectedAt": "已收集", + "inventoryCollectedAt": "集", "packageActionLabel": "操作", "packageInstall": "安装", "packageRemove": "移除", "packageUpgradeAll": "升级所有软件包", "packageNameLabel": "软件包名称", - "packageNameRequired": "必须填写软件包名称", - "packageHint": "需要对每台主机具有管理级别权限,并使用主机保存的 sudo 密码提升权限。", - "shareFleet": "共享主机组", - "shareFleetTitle": "共享“{{name}}”", - "shareFleetDescription": "将此主机组当前的成员主机共享给所选用户或角色。后续加入的主机不会自动共享,需要再次执行共享操作。", - "shareSelectionRequired": "请至少选择一个用户或角色", - "fleetSharedSuccessfully": "已共享此主机组中的 {{shared}}/{{total}} 台主机", - "failedToShareFleet": "共享主机组失败", - "noMembersToShare": "此主机组尚无可共享的成员主机。" + "packageNameRequired": "必须提供软件包名称。", + "packageHint": "需要对每台主机具有管理级别的访问权限,并使用主机存储的 sudo 密码提升权限。", + "shareFleet": "共享车队", + "shareFleetTitle": "分享“{{name}}", + "shareFleetDescription": "将此集群的当前成员主机与选定的用户或角色共享。之后添加到集群的主机不会自动共享,请再次共享以将其包含在内。", + "shareSelectionRequired": "至少选择一个用户或角色", + "fleetSharedSuccessfully": "此舰队中共享的 {{shared}} 个主机 {{total}}。", + "failedToShareFleet": "未能共享舰队", + "noMembersToShare": "该船队目前还没有成员主机可供共享。" } } }, "nav": { - "fleets": "主机组" + "fleets": "舰队" }, "hosts": { "docsLink": "查看文档", @@ -131,7 +131,7 @@ }, "edit": { "label": "编辑", - "description": "允许查看和修改与身份验证无关的主机设置。所有者的 SSH 身份验证信息保持私密,仅供所有者使用。" + "description": "查看并修改无需身份验证的主机设置。所有者的 SSH 身份验证信息将保持私密,仅限所有者本人查看。" }, "manage": { "label": "管理", diff --git a/plugins/fleets/locales/translated/zh_TW.json b/plugins/fleets/locales/translated/zh_TW.json index c07f11aa1..34488b37f 100644 --- a/plugins/fleets/locales/translated/zh_TW.json +++ b/plugins/fleets/locales/translated/zh_TW.json @@ -1,111 +1,111 @@ { "permissions": { "view": { - "title": "View fleets", - "description": "See fleets, their members and inventory." + "title": "查看艦隊", + "description": "查看船隊、其成員和庫存。" }, "manage": { - "title": "Manage fleets", - "description": "Create, edit and delete fleets, change membership, and share fleets with other users or roles." + "title": "管理車隊", + "description": "建立、編輯和刪除艦隊,更改成員資格,並與其他使用者或角色共用艦隊。" }, "execute": { - "title": "Run fleet actions", - "description": "Run commands and package actions across a fleet, and transfer files to and from its member hosts." + "title": "運行艦隊行動", + "description": "在整個叢集中運行命令和打包操作,並在其成員主機之間傳輸檔案。" } }, "newUi": { "sidebar": { "fleets": { - "title": "Fleets", - "createFleet": "Create Fleet", - "createFleetTitle": "Create Fleet", - "editFleetTitle": "Edit Fleet", - "createFleetDescription": "A fleet is a named group of hosts you can run actions against as a unit.", + "title": "艦隊", + "createFleet": "創建艦隊", + "createFleetTitle": "創建艦隊", + "editFleetTitle": "編輯艦隊", + "createFleetDescription": "艦隊是指你可以作為一個整體對一組主機執行操作的指定名稱的主機群組。", "nameLabel": "名稱", - "namePlaceholder": "e.g., Web Servers", - "nameRequired": "Fleet name is required", + "namePlaceholder": "例如,Web伺服器", + "nameRequired": "必須填寫艦隊名稱。", "descriptionLabel": "說明", "descriptionPlaceholder": "選用說明", "colorLabel": "顏色", - "tagRulesLabel": "Tag rules", - "tagRulesPlaceholder": "prod-web, edge", - "tagRulesHint": "Hosts with any of these tags are automatically included, in addition to hosts added manually.", - "fleetCreated": "Fleet created", - "fleetUpdated": "Fleet updated", - "fleetDeleted": "Fleet deleted", - "saveFailed": "Failed to save fleet", - "deleteFailed": "Failed to delete fleet", - "loadFailed": "Failed to load fleets", - "deleteFleetTitle": "Delete Fleet", - "deleteFleetDescription": "Are you sure you want to delete \"{{name}}\"? This does not delete the member hosts themselves.", - "searchFleets": "Search fleets...", - "noFleets": "No fleets yet. Create one to get started.", - "memberCount": "{{count}} host", + "tagRulesLabel": "標籤規則", + "tagRulesPlaceholder": "生產網絡,邊緣", + "tagRulesHint": "帶有這些標籤的主機將自動包含在內,此外還可以手動新增主機。", + "fleetCreated": "艦隊創建", + "fleetUpdated": "艦隊更新", + "fleetDeleted": "艦隊已刪除", + "saveFailed": "未能拯救艦隊", + "deleteFailed": "刪除艦隊失敗", + "loadFailed": "艦隊載入失敗", + "deleteFleetTitle": "刪除艦隊", + "deleteFleetDescription": "您確定要刪除「{{name}}」嗎?此操作不會刪除成員主機本身。", + "searchFleets": "搜索艦隊…", + "noFleets": "暫無艦隊。創建艦隊即可開始。", + "memberCount": "{{count}} 主機", "memberCount_other": "{{count}} 台主機", - "manageMembers": "Manage Members", - "manageMembersTitle": "Manage Fleet Members", - "manageMembersDescription": "Toggle hosts in or out of this fleet's static membership. Hosts matched by tag rules are always included.", + "manageMembers": "管理成員", + "manageMembersTitle": "管理車隊成員", + "manageMembersDescription": "切換主機是否加入此艦隊的靜態成員清單。符合標籤規則的主機始終包含在內。", "searchHosts": "搜尋主機...", "noHostsFound": "找不到主機", - "noMembers": "This fleet has no members yet. Add hosts or set a tag rule.", - "membersLoadFailed": "Failed to load fleet members", - "memberUpdateFailed": "Failed to update fleet membership", - "tabRun": "Run Command", - "tabTransfer": "Transfer Files", - "tabInventory": "Inventory", - "openInventoryTab": "Open in full tab", + "noMembers": "此艦隊目前尚無成員。請新增主機或設定標籤規則。", + "membersLoadFailed": "載入艦隊成員失敗", + "memberUpdateFailed": "艦隊成員資訊更新失敗", + "tabRun": "運行命令", + "tabTransfer": "傳輸檔案", + "tabInventory": "存貨", + "openInventoryTab": "在新分頁中開啟", "tabPackages": "套件", - "runOnFleet": "Run on Fleet", + "runOnFleet": "艦隊運行", "commandPlaceholder": "uptime && df -h", - "commandRequired": "A command is required", - "commandInputsLabel": "Command inputs", - "commandSucceeded": "Command succeeded on all hosts", - "commandPartialFailure": "{{failed}} of {{total}} hosts failed", - "commandFailed": "Failed to run command", + "commandRequired": "需要一條命令", + "commandInputsLabel": "命令輸入", + "commandSucceeded": "指令在所有主機上均已成功執行。", + "commandPartialFailure": "{{failed}} 中的 {{total}} 台主機失敗", + "commandFailed": "命令運行失敗", "resultSuccess": "成功", "resultFailed": "失敗", - "push": "Push", - "pull": "Pull", - "remotePathLabel": "Remote path", - "remotePathRequired": "A remote path is required", + "push": "推", + "pull": "拉", + "remotePathLabel": "遠端路徑", + "remotePathRequired": "需要遠端路徑", "fileLabel": "檔案", - "fileRequired": "A file is required", - "pushHint": "The selected file is written to this exact path on every host in the fleet.", - "pullHint": "The file at this path is read from every host and downloaded as a single zip, one folder per host.", + "fileRequired": "需要提交文件", + "pushHint": "選定的檔案將被寫入叢集中每台主機上的指定路徑。", + "pullHint": "從每個主機讀取此路徑下的文件,並將其下載為單一 zip 文件,每個主機一個資料夾。", "transferComplete": "傳送完成", "transferFailed": "傳送失敗", - "refreshInventory": "Refresh Inventory", - "inventoryLoadFailed": "Failed to load inventory", - "inventoryRefreshed": "Inventory refreshed", - "inventoryRefreshFailed": "Failed to refresh inventory", - "inventoryNoData": "No inventory data yet - refresh to collect it.", + "refreshInventory": "刷新庫存", + "inventoryLoadFailed": "載入庫存失敗", + "inventoryRefreshed": "庫存已刷新", + "inventoryRefreshFailed": "刷新庫存失敗", + "inventoryNoData": "暫無庫存資料 - 請重新整理頁面以取得資料。", "inventoryHost": "主機", - "inventoryCollectedCount": "{{count}}/{{total}} collected", + "inventoryCollectedCount": "{{count}}/{{total}} 收集", "inventoryOs": "作業系統", "inventoryKernel": "核心", - "inventoryArch": "Arch", + "inventoryArch": "拱", "inventoryUptime": "運行時間", - "inventoryPackageManager": "Package manager", - "inventoryCollectedAt": "Collected", + "inventoryPackageManager": "軟體套件管理器", + "inventoryCollectedAt": "集", "packageActionLabel": "動作", - "packageInstall": "Install", + "packageInstall": "安裝", "packageRemove": "移除", - "packageUpgradeAll": "Upgrade all packages", - "packageNameLabel": "Package name", - "packageNameRequired": "A package name is required", - "packageHint": "Requires manage-level access per host and elevates using the host's stored sudo password.", - "shareFleet": "Share Fleet", - "shareFleetTitle": "Share \"{{name}}\"", - "shareFleetDescription": "Shares this fleet's current member hosts with the selected users or roles. Hosts added to the fleet later are not shared automatically - share again to include them.", - "shareSelectionRequired": "Select at least one user or role", - "fleetSharedSuccessfully": "Shared {{shared}} of {{total}} host(s) in this fleet", - "failedToShareFleet": "Failed to share fleet", - "noMembersToShare": "This fleet has no member hosts to share yet." + "packageUpgradeAll": "升級所有套餐", + "packageNameLabel": "軟體包名稱", + "packageNameRequired": "必須提供軟體包名稱。", + "packageHint": "需要對每台主機具有管理層級的存取權限,並使用主機儲存的 sudo 密碼提升權限。", + "shareFleet": "共享車隊", + "shareFleetTitle": "分享「{{name}}", + "shareFleetDescription": "將此叢集的目前成員主機與選定的使用者或角色共用。之後新增至叢集的主機不會自動共用,請再次共用以將其包含在內。", + "shareSelectionRequired": "至少選擇一個使用者或角色", + "fleetSharedSuccessfully": "此艦隊中共享的 {{shared}} 個主機 {{total}}。", + "failedToShareFleet": "未能共享艦隊", + "noMembersToShare": "該船隊目前還沒有成員主機可供共享。" } } }, "nav": { - "fleets": "Fleets" + "fleets": "艦隊" }, "hosts": { "docsLink": "檢視文件", @@ -131,7 +131,7 @@ }, "edit": { "label": "編輯", - "description": "View, plus modify non-authentication host settings. The owner's SSH authentication stays private and owner-only." + "description": "查看並修改無需身份驗證的主機設定。所有者的 SSH 身份驗證資訊將保持私密,僅限所有者本人查看。" }, "manage": { "label": "管理", diff --git a/plugins/homepage/locales/translated/af_ZA.json b/plugins/homepage/locales/translated/af_ZA.json index 59a7eaa40..f8da3505b 100644 --- a/plugins/homepage/locales/translated/af_ZA.json +++ b/plugins/homepage/locales/translated/af_ZA.json @@ -169,7 +169,139 @@ "noServices": "Geen dienste opgestel nie", "configureLocation": "Stel 'n ligging in die widget-instellings", "bannerTextPlaceholder": "Banier teks", - "serviceNamePlaceholder": "My diens" + "serviceNamePlaceholder": "My diens", + "emptyNote": "Empty note...", + "weatherLoadFailed": "Could not load weather for \"{{location}}\"", + "feelsLike": "Feels like {{temperature}}", + "timezonePlaceholder": "America/New_York (leave blank for local)", + "notesPlaceholder": "Write your notes here...", + "locationPlaceholder": "New York, London, Tokyo...", + "widgets": { + "bookmark_list": { + "name": "Bookmarks", + "description": "A list of quick links" + }, + "calendar": { + "name": "Calendar", + "description": "A month calendar with today highlighted" + }, + "clock": { + "name": "Clock", + "description": "A live clock with configurable timezone" + }, + "countdown": { + "name": "Countdown", + "description": "Counts down to a target date and time" + }, + "custom_api": { + "name": "Custom API", + "description": "Fetch and display data from any JSON API" + }, + "dashboard_links": { + "name": "Dashboard Links", + "description": "Shows your saved dashboard service links" + }, + "folder": { + "name": "Folder", + "description": "A background card for grouping widgets visually" + }, + "host_grid": { + "name": "Host Grid", + "description": "Live status overview grid for all your SSH hosts" + }, + "host_status": { + "name": "Host Status", + "description": "Shows live status and metrics for an SSH host" + }, + "iframe_embed": { + "name": "iFrame Embed", + "description": "Embed any URL in an iframe" + }, + "image_widget": { + "name": "Image", + "description": "Display any image from a URL" + }, + "link_tree": { + "name": "Link Tree", + "description": "Grouped links organized into labeled sections" + }, + "markdown_notes": { + "name": "Markdown Notes", + "description": "Notes with optional Markdown rendering and inline editing" + }, + "notes": { + "name": "Notes", + "description": "A text notes widget" + }, + "ping_status": { + "name": "Ping Status", + "description": "Check if URLs or services are reachable" + }, + "quick_connect": { + "name": "Quick Connect", + "description": "Launch terminal, files, docker, tunnels, and more for your hosts" + }, + "recent_activity": { + "name": "Recent Activity", + "description": "Shows recent terminal, Docker, file, and tunnel activity" + }, + "rss_feed": { + "name": "RSS Feed", + "description": "Display items from an RSS or Atom feed" + }, + "search_bar": { + "name": "Search Bar", + "description": "Quick search with Google, DuckDuckGo, Bing, or a custom engine" + }, + "search_links": { + "name": "Search Shortcuts", + "description": "Quick buttons to search different engines" + }, + "service_grid": { + "name": "Service Grid", + "description": "A grid of service tiles with icons and links" + }, + "service_link": { + "name": "Service Link", + "description": "A clickable tile linking to a service URL" + }, + "ssh_terminal": { + "name": "SSH Terminal", + "description": "An inline SSH terminal connected to a configured host" + }, + "system_overview": { + "name": "System Overview", + "description": "Termix version, database health, and uptime at a glance" + }, + "termix_uptime": { + "name": "Termix Uptime", + "description": "Shows how long the Termix server has been running" + }, + "text_banner": { + "name": "Text Banner", + "description": "A styled text label for sections and headings" + }, + "weather": { + "name": "Weather", + "description": "Live weather for any location" + }, + "docker_widget": { + "name": "Docker Manager", + "description": "Embedded Docker container manager for a configured host" + }, + "file_manager_widget": { + "name": "File Manager", + "description": "Embedded SFTP file manager for a configured host" + }, + "tunnel_widget": { + "name": "Tunnel Manager", + "description": "Embedded SSH tunnel manager for a configured host" + }, + "metrics_chart": { + "name": "Metrics Chart", + "description": "Historical CPU, memory, disk, or network chart for a host" + } + } }, "permissions": { "use": { @@ -186,5 +318,8 @@ "label": "Privaat sertifikaatowerheid (PEM)", "description": "Opsionele vertroude CA-bundel vir gashere op die toelaatlys. Sertifikaatverifikasie bly geaktiveer. Los leeg om die stelselvertrouensberging te gebruik." } + }, + "plugin": { + "name": "Homepage" } } diff --git a/plugins/homepage/locales/translated/ar_SA.json b/plugins/homepage/locales/translated/ar_SA.json index 60d453c87..43b0bd1f3 100644 --- a/plugins/homepage/locales/translated/ar_SA.json +++ b/plugins/homepage/locales/translated/ar_SA.json @@ -169,7 +169,139 @@ "noServices": "لم يتم إعداد أي خدمات", "configureLocation": "حدد موقعًا في إعدادات الأداة", "bannerTextPlaceholder": "نص الشعار", - "serviceNamePlaceholder": "خدمتي" + "serviceNamePlaceholder": "خدمتي", + "emptyNote": "Empty note...", + "weatherLoadFailed": "Could not load weather for \"{{location}}\"", + "feelsLike": "Feels like {{temperature}}", + "timezonePlaceholder": "America/New_York (leave blank for local)", + "notesPlaceholder": "Write your notes here...", + "locationPlaceholder": "New York, London, Tokyo...", + "widgets": { + "bookmark_list": { + "name": "Bookmarks", + "description": "A list of quick links" + }, + "calendar": { + "name": "Calendar", + "description": "A month calendar with today highlighted" + }, + "clock": { + "name": "Clock", + "description": "A live clock with configurable timezone" + }, + "countdown": { + "name": "Countdown", + "description": "Counts down to a target date and time" + }, + "custom_api": { + "name": "Custom API", + "description": "Fetch and display data from any JSON API" + }, + "dashboard_links": { + "name": "Dashboard Links", + "description": "Shows your saved dashboard service links" + }, + "folder": { + "name": "Folder", + "description": "A background card for grouping widgets visually" + }, + "host_grid": { + "name": "Host Grid", + "description": "Live status overview grid for all your SSH hosts" + }, + "host_status": { + "name": "Host Status", + "description": "Shows live status and metrics for an SSH host" + }, + "iframe_embed": { + "name": "iFrame Embed", + "description": "Embed any URL in an iframe" + }, + "image_widget": { + "name": "Image", + "description": "Display any image from a URL" + }, + "link_tree": { + "name": "Link Tree", + "description": "Grouped links organized into labeled sections" + }, + "markdown_notes": { + "name": "Markdown Notes", + "description": "Notes with optional Markdown rendering and inline editing" + }, + "notes": { + "name": "Notes", + "description": "A text notes widget" + }, + "ping_status": { + "name": "Ping Status", + "description": "Check if URLs or services are reachable" + }, + "quick_connect": { + "name": "Quick Connect", + "description": "Launch terminal, files, docker, tunnels, and more for your hosts" + }, + "recent_activity": { + "name": "Recent Activity", + "description": "Shows recent terminal, Docker, file, and tunnel activity" + }, + "rss_feed": { + "name": "RSS Feed", + "description": "Display items from an RSS or Atom feed" + }, + "search_bar": { + "name": "Search Bar", + "description": "Quick search with Google, DuckDuckGo, Bing, or a custom engine" + }, + "search_links": { + "name": "Search Shortcuts", + "description": "Quick buttons to search different engines" + }, + "service_grid": { + "name": "Service Grid", + "description": "A grid of service tiles with icons and links" + }, + "service_link": { + "name": "Service Link", + "description": "A clickable tile linking to a service URL" + }, + "ssh_terminal": { + "name": "SSH Terminal", + "description": "An inline SSH terminal connected to a configured host" + }, + "system_overview": { + "name": "System Overview", + "description": "Termix version, database health, and uptime at a glance" + }, + "termix_uptime": { + "name": "Termix Uptime", + "description": "Shows how long the Termix server has been running" + }, + "text_banner": { + "name": "Text Banner", + "description": "A styled text label for sections and headings" + }, + "weather": { + "name": "Weather", + "description": "Live weather for any location" + }, + "docker_widget": { + "name": "Docker Manager", + "description": "Embedded Docker container manager for a configured host" + }, + "file_manager_widget": { + "name": "File Manager", + "description": "Embedded SFTP file manager for a configured host" + }, + "tunnel_widget": { + "name": "Tunnel Manager", + "description": "Embedded SSH tunnel manager for a configured host" + }, + "metrics_chart": { + "name": "Metrics Chart", + "description": "Historical CPU, memory, disk, or network chart for a host" + } + } }, "permissions": { "use": { @@ -186,5 +318,8 @@ "label": "هيئة إصدار الشهادات الخاصة (PEM)", "description": "حزمة شهادات المصادقة الموثوقة اختيارية للأجهزة المضيفة المدرجة في القائمة المسموح بها. يبقى التحقق من الشهادات مُفعّلاً. اترك هذا الحقل فارغًا لاستخدام مخزن شهادات النظام الموثوقة." } + }, + "plugin": { + "name": "Homepage" } } diff --git a/plugins/homepage/locales/translated/bg_BG.json b/plugins/homepage/locales/translated/bg_BG.json index db688c497..3ffae6d62 100644 --- a/plugins/homepage/locales/translated/bg_BG.json +++ b/plugins/homepage/locales/translated/bg_BG.json @@ -169,7 +169,139 @@ "noServices": "Няма настроени услуги", "configureLocation": "Задайте местоположение в настройките на джаджата", "bannerTextPlaceholder": "Текст на банера", - "serviceNamePlaceholder": "Моята услуга" + "serviceNamePlaceholder": "Моята услуга", + "emptyNote": "Empty note...", + "weatherLoadFailed": "Could not load weather for \"{{location}}\"", + "feelsLike": "Feels like {{temperature}}", + "timezonePlaceholder": "America/New_York (leave blank for local)", + "notesPlaceholder": "Write your notes here...", + "locationPlaceholder": "New York, London, Tokyo...", + "widgets": { + "bookmark_list": { + "name": "Bookmarks", + "description": "A list of quick links" + }, + "calendar": { + "name": "Calendar", + "description": "A month calendar with today highlighted" + }, + "clock": { + "name": "Clock", + "description": "A live clock with configurable timezone" + }, + "countdown": { + "name": "Countdown", + "description": "Counts down to a target date and time" + }, + "custom_api": { + "name": "Custom API", + "description": "Fetch and display data from any JSON API" + }, + "dashboard_links": { + "name": "Dashboard Links", + "description": "Shows your saved dashboard service links" + }, + "folder": { + "name": "Folder", + "description": "A background card for grouping widgets visually" + }, + "host_grid": { + "name": "Host Grid", + "description": "Live status overview grid for all your SSH hosts" + }, + "host_status": { + "name": "Host Status", + "description": "Shows live status and metrics for an SSH host" + }, + "iframe_embed": { + "name": "iFrame Embed", + "description": "Embed any URL in an iframe" + }, + "image_widget": { + "name": "Image", + "description": "Display any image from a URL" + }, + "link_tree": { + "name": "Link Tree", + "description": "Grouped links organized into labeled sections" + }, + "markdown_notes": { + "name": "Markdown Notes", + "description": "Notes with optional Markdown rendering and inline editing" + }, + "notes": { + "name": "Notes", + "description": "A text notes widget" + }, + "ping_status": { + "name": "Ping Status", + "description": "Check if URLs or services are reachable" + }, + "quick_connect": { + "name": "Quick Connect", + "description": "Launch terminal, files, docker, tunnels, and more for your hosts" + }, + "recent_activity": { + "name": "Recent Activity", + "description": "Shows recent terminal, Docker, file, and tunnel activity" + }, + "rss_feed": { + "name": "RSS Feed", + "description": "Display items from an RSS or Atom feed" + }, + "search_bar": { + "name": "Search Bar", + "description": "Quick search with Google, DuckDuckGo, Bing, or a custom engine" + }, + "search_links": { + "name": "Search Shortcuts", + "description": "Quick buttons to search different engines" + }, + "service_grid": { + "name": "Service Grid", + "description": "A grid of service tiles with icons and links" + }, + "service_link": { + "name": "Service Link", + "description": "A clickable tile linking to a service URL" + }, + "ssh_terminal": { + "name": "SSH Terminal", + "description": "An inline SSH terminal connected to a configured host" + }, + "system_overview": { + "name": "System Overview", + "description": "Termix version, database health, and uptime at a glance" + }, + "termix_uptime": { + "name": "Termix Uptime", + "description": "Shows how long the Termix server has been running" + }, + "text_banner": { + "name": "Text Banner", + "description": "A styled text label for sections and headings" + }, + "weather": { + "name": "Weather", + "description": "Live weather for any location" + }, + "docker_widget": { + "name": "Docker Manager", + "description": "Embedded Docker container manager for a configured host" + }, + "file_manager_widget": { + "name": "File Manager", + "description": "Embedded SFTP file manager for a configured host" + }, + "tunnel_widget": { + "name": "Tunnel Manager", + "description": "Embedded SSH tunnel manager for a configured host" + }, + "metrics_chart": { + "name": "Metrics Chart", + "description": "Historical CPU, memory, disk, or network chart for a host" + } + } }, "permissions": { "use": { @@ -186,5 +318,8 @@ "label": "Частен сертифициращ орган (PEM)", "description": "Незадължителен пакет с доверени CA за хостове от разрешения списък. Проверката на сертификата остава активирана. Оставете празно, за да използвате хранилището за доверени сертификати на системата." } + }, + "plugin": { + "name": "Homepage" } } diff --git a/plugins/homepage/locales/translated/bn_BD.json b/plugins/homepage/locales/translated/bn_BD.json index 760b3a445..e496c5f86 100644 --- a/plugins/homepage/locales/translated/bn_BD.json +++ b/plugins/homepage/locales/translated/bn_BD.json @@ -1,190 +1,325 @@ { "nav": { - "homepage": "Homepage" + "homepage": "হোমপেজ" }, "dashboard": { - "serviceLinks": "Service Links", - "homepagePreview": "Homepage Preview" + "serviceLinks": "পরিষেবা লিঙ্ক", + "homepagePreview": "হোমপেজ প্রিভিউ" }, "dashboardTab": { - "serviceLinksTitle": "Service Links", - "serviceLinksEmpty": "No service links yet", - "serviceLinksAdd": "Add", - "serviceLinksLabelPlaceholder": "My Service", + "serviceLinksTitle": "পরিষেবা লিঙ্ক", + "serviceLinksEmpty": "এখনও কোন পরিষেবা লিঙ্ক নেই", + "serviceLinksAdd": "যোগ করুন", + "serviceLinksLabelPlaceholder": "আমার পরিষেবা", "serviceLinksUrlPlaceholder": "http://192.168.1.10:8080", - "serviceLinksInvalidUrl": "Enter a valid web address", - "serviceLinksAddFailed": "Failed to add service link" + "serviceLinksInvalidUrl": "একটি বৈধ ওয়েব ঠিকানা লিখুন", + "serviceLinksAddFailed": "পরিষেবা লিঙ্ক যোগ করতে ব্যর্থ হয়েছে" }, "homepage": { - "title": "Homepage", - "addWidget": "Add Widget", - "noWidgetsInCategory": "No widgets in this category", - "editWidget": "Edit Widget", - "zoomIn": "Zoom In", - "zoomOut": "Zoom Out", - "resetView": "Reset View", - "lockLayout": "Lock Layout", - "unlockLayout": "Unlock Layout", - "noWidgets": "Right-click or click + to add your first widget", - "openFullView": "Open Full View", - "previewTitle": "Homepage Preview", - "cancel": "Cancel", - "save": "Save", - "title_label": "Title", - "widgetTitlePlaceholder": "Widget title (optional)", - "url": "URL", - "imageUrl": "Custom Image URL", - "imageUrlHint": "Leave blank to use the site favicon automatically", - "showImage": "Show Image", - "description": "Description", - "color": "Color", - "timezone": "Timezone", - "invalidTimezone": "Invalid timezone. Use an IANA name such as America/New_York", - "showSeconds": "Show seconds", - "format12h": "12-hour", - "content": "Content", - "backgroundColor": "Background Color", - "links": "Links", - "addLink": "Add Link", - "linkLabel": "Label", - "categoryLinks": "Links", - "categoryInfo": "Info", - "categorySystem": "System", - "copyLink": "Copy Link", - "linkCopied": "Link copied!", - "location": "Location", - "temperatureUnit": "Temperature Unit", - "showForecast": "Show 3-day forecast", - "scrolling": "Allow Scrolling", - "feedUrl": "Feed URL", - "maxItems": "Max Items", - "showDescription": "Show Description", - "widgetRssName": "RSS Feed", - "rssNoFeedUrl": "Configure a feed URL in widget settings", - "rssLoadError": "Could not load feed", - "rssNoItems": "No items", - "noHostSelected": "No host selected", - "displayedMetrics": "Displayed Metrics", - "metricCpu": "CPU", - "metricMemory": "Memory", - "metricDisk": "Disk", - "metricUptime": "Uptime", - "metricSystem": "System", - "metricNetwork": "Network", - "metricProcesses": "Processes", - "categoryMonitoring": "Monitoring", - "noPingUrls": "No URLs configured", - "pingLabel": "Label", - "addPingUrl": "Add URL", - "showLatency": "Show Latency", - "refreshInterval": "Refresh Interval", - "seconds": "seconds", - "filterActivityTypes": "Filter Types", - "filterTypesHint": "Leave empty to show all", - "showTimestamp": "Show Timestamp", - "uptimeUnavailable": "Uptime unavailable", - "uptimeLabel": "Uptime", - "overviewVersion": "Version", - "overviewUpdateLabel": "Update", - "overviewUpdateAvailable": "Update available", - "overviewDatabase": "Database", - "overviewUptime": "Uptime", - "noHosts": "No hosts configured", - "hostGridHosts": "Hosts", - "hostGridAllHint": "Leave empty to show all hosts", - "columns": "Columns", - "showIp": "Show IP Address", - "layout": "Layout", - "showStatus": "Show Status", - "noActivity": "No activity", - "widgetPingStatusName": "Ping Status", - "widgetRecentActivityName": "Recent Activity", - "sshTerminalNoHost": "No host configured", - "sshTerminalConnect": "Connect", - "sshTerminalAutoConnect": "Auto-connect on load", - "connectionTypes": "Connection Types", - "calMon": "Mo", - "calTue": "Tu", - "calWed": "We", - "calThu": "Th", - "calFri": "Fr", - "calSat": "Sa", - "calSun": "Su", - "startOnMonday": "Start week on Monday", - "countdownNoDate": "No target date set", - "countdownPast": "Event has passed", - "countdownDays": "days", - "countdownHours": "hrs", - "countdownMinutes": "min", - "countdownSeconds": "sec", - "countdownLabel": "Label", - "countdownLabelPlaceholder": "e.g. Launch Day", - "countdownShowDays": "Show Days", - "countdownShowHours": "Show Hours", - "targetDate": "Target Date", - "searchEngine": "Search Engine", - "customSearchUrl": "Custom Search URL", - "searchPlaceholder": "Search...", - "searchGo": "Go", - "searchPlaceholderLabel": "Placeholder Text", - "searchPlaceholderHint": "Text shown inside the search input", - "openInNewTab": "Open in New Tab", - "searchQueryPlaceholder": "Enter query...", - "noSearchShortcuts": "No shortcuts configured", - "addSearchShortcut": "Add Shortcut", - "fontSize": "Font Size", - "textAlign": "Text Align", - "fontWeight": "Font Weight", - "clearColor": "Clear Color", - "imageFit": "Image Fit", - "imageLinkUrl": "Link URL", - "noImage": "No image URL set", - "altText": "Alt Text", - "altTextPlaceholder": "Describe the image", - "renderMarkdown": "Render Markdown", - "displayMode": "Display Mode", - "displayField": "Display Field", - "jsonPath": "JSON Path", - "customApiLabel": "Label", - "customApiLabelPlaceholder": "e.g. Temperature", - "customApiUnit": "Unit", - "customApiNoUrl": "No API URL configured", - "customApiError": "Failed to fetch", - "customApiNotArray": "Response is not an array", - "addService": "Add Service", - "showLabels": "Show Labels", - "iconSize": "Icon Size", - "noDashboardLinks": "No dashboard links configured", - "noLimit": "No limit", - "sectionHeading": "Section Heading", - "addSection": "Add Section", - "compactMode": "Compact Mode", - "selectHosts": "Select Hosts", - "listLayout": "List", - "gridLayout": "Grid", - "configureUrl": "Set a URL in the widget settings", - "embeddedContent": "Embedded content", - "noBookmarks": "No bookmarks", - "noSections": "No sections set up", - "noServices": "No services set up", - "configureLocation": "Set a location in the widget settings", - "bannerTextPlaceholder": "Banner text", - "serviceNamePlaceholder": "My service" + "title": "হোমপেজ", + "addWidget": "উইজেট যোগ করুন", + "noWidgetsInCategory": "এই বিভাগে কোনো উইজেট নেই", + "editWidget": "উইজেট সম্পাদনা করুন", + "zoomIn": "জুম ইন", + "zoomOut": "জুম আউট", + "resetView": "দৃশ্য রিসেট করুন", + "lockLayout": "লক লেআউট", + "unlockLayout": "লেআউট আনলক করুন", + "noWidgets": "আপনার প্রথম উইজেট যোগ করতে ডান-ক্লিক করুন অথবা + এ ক্লিক করুন।", + "openFullView": "সম্পূর্ণ দৃশ্য খুলুন", + "previewTitle": "হোমপেজ প্রিভিউ", + "cancel": "বাতিল করুন", + "save": "সংরক্ষণ করুন", + "title_label": "শিরোনাম", + "widgetTitlePlaceholder": "উইজেটের শিরোনাম (ঐচ্ছিক)", + "url": "ইউআরএল", + "imageUrl": "কাস্টম ইমেজ ইউআরএল", + "imageUrlHint": "সাইটের ফেভিকন স্বয়ংক্রিয়ভাবে ব্যবহার করতে খালি রাখুন।", + "showImage": "ছবি দেখান", + "description": "বর্ণনা", + "color": "রঙ", + "timezone": "সময় অঞ্চল", + "invalidTimezone": "অবৈধ টাইমজোন। America/New_York-এর মতো একটি IANA নাম ব্যবহার করুন।", + "showSeconds": "সেকেন্ড দেখান", + "format12h": "১২ ঘন্টা", + "content": "বিষয়বস্তু", + "backgroundColor": "পটভূমির রঙ", + "links": "লিঙ্ক", + "addLink": "লিঙ্ক যোগ করুন", + "linkLabel": "লেবেল", + "categoryLinks": "লিঙ্ক", + "categoryInfo": "তথ্য", + "categorySystem": "সিস্টেম", + "copyLink": "লিঙ্ক কপি করুন", + "linkCopied": "লিঙ্ক কপি করা হয়েছে!", + "location": "অবস্থান", + "temperatureUnit": "তাপমাত্রা ইউনিট", + "showForecast": "তিন দিনের পূর্বাভাস দেখান", + "scrolling": "স্ক্রোল করার অনুমতি দিন", + "feedUrl": "ফিড ইউআরএল", + "maxItems": "সর্বোচ্চ আইটেম", + "showDescription": "বিবরণ দেখান", + "widgetRssName": "আরএসএস ফিড", + "rssNoFeedUrl": "উইজেট সেটিংসে একটি ফিড ইউআরএল কনফিগার করুন।", + "rssLoadError": "ফিড লোড করা যায়নি", + "rssNoItems": "কোন আইটেম নেই", + "noHostSelected": "কোন হোস্ট নির্বাচন করা হয়নি", + "displayedMetrics": "প্রদর্শিত মেট্রিক্স", + "metricCpu": "সিপিইউ", + "metricMemory": "স্মৃতি", + "metricDisk": "ডিস্ক", + "metricUptime": "আপটাইম", + "metricSystem": "সিস্টেম", + "metricNetwork": "নেটওয়ার্ক", + "metricProcesses": "প্রক্রিয়া", + "categoryMonitoring": "পর্যবেক্ষণ", + "noPingUrls": "কোন URL কনফিগার করা নেই", + "pingLabel": "লেবেল", + "addPingUrl": "URL যোগ করুন", + "showLatency": "লেটেন্সি দেখান", + "refreshInterval": "রিফ্রেশ ব্যবধান", + "seconds": "সেকেন্ড", + "filterActivityTypes": "ফিল্টারের প্রকারভেদ", + "filterTypesHint": "সবগুলো দেখাতে খালি রাখুন", + "showTimestamp": "টাইমস্ট্যাম্প দেখান", + "uptimeUnavailable": "আপটাইম অনুপলব্ধ", + "uptimeLabel": "আপটাইম", + "overviewVersion": "সংস্করণ", + "overviewUpdateLabel": "আপডেট", + "overviewUpdateAvailable": "আপডেট উপলব্ধ", + "overviewDatabase": "ডাটাবেস", + "overviewUptime": "আপটাইম", + "noHosts": "কোন হোস্ট কনফিগার করা নেই", + "hostGridHosts": "হোস্টরা", + "hostGridAllHint": "সমস্ত হোস্ট দেখানোর জন্য খালি রাখুন", + "columns": "কলাম", + "showIp": "আইপি ঠিকানা দেখান", + "layout": "লেআউট", + "showStatus": "অবস্থা দেখান", + "noActivity": "কোন কার্যকলাপ নেই", + "widgetPingStatusName": "পিং স্ট্যাটাস", + "widgetRecentActivityName": "সাম্প্রতিক কার্যকলাপ", + "sshTerminalNoHost": "কোন হোস্ট কনফিগার করা নেই", + "sshTerminalConnect": "সংযোগ করুন", + "sshTerminalAutoConnect": "লোড হলে স্বয়ংক্রিয়ভাবে সংযোগ স্থাপন", + "connectionTypes": "সংযোগের প্রকারভেদ", + "calMon": "মো", + "calTue": "তু", + "calWed": "আমরা", + "calThu": "থ", + "calFri": "ফ্র", + "calSat": "সা", + "calSun": "সু", + "startOnMonday": "সোমবার থেকে সপ্তাহ শুরু করুন", + "countdownNoDate": "কোনো নির্দিষ্ট তারিখ নির্ধারণ করা হয়নি।", + "countdownPast": "অনুষ্ঠানটি শেষ হয়ে গেছে।", + "countdownDays": "দিন", + "countdownHours": "ঘন্টা", + "countdownMinutes": "মিনিট", + "countdownSeconds": "সেকেন্ড", + "countdownLabel": "লেবেল", + "countdownLabelPlaceholder": "যেমন লঞ্চের দিন", + "countdownShowDays": "শো ডেজ", + "countdownShowHours": "শো আওয়ার্স", + "targetDate": "লক্ষ্য তারিখ", + "searchEngine": "সার্চ ইঞ্জিন", + "customSearchUrl": "কাস্টম সার্চ ইউআরএল", + "searchPlaceholder": "অনুসন্ধান করুন...", + "searchGo": "যান", + "searchPlaceholderLabel": "স্থানধারক পাঠ্য", + "searchPlaceholderHint": "সার্চ ইনপুটের ভিতরে দেখানো টেক্সট", + "openInNewTab": "নতুন ট্যাবে খুলুন", + "searchQueryPlaceholder": "প্রশ্ন লিখুন...", + "noSearchShortcuts": "কোন শর্টকাট কনফিগার করা নেই", + "addSearchShortcut": "শর্টকাট যোগ করুন", + "fontSize": "ফন্ট সাইজ", + "textAlign": "টেক্সট অ্যালাইন", + "fontWeight": "ফন্ট ওজন", + "clearColor": "পরিষ্কার রঙ", + "imageFit": "ইমেজ ফিট", + "imageLinkUrl": "লিঙ্ক ইউআরএল", + "noImage": "কোন ছবির ইউআরএল সেট করা হয়নি", + "altText": "বিকল্প পাঠ্য", + "altTextPlaceholder": "ছবিটি বর্ণনা করুন", + "renderMarkdown": "রেন্ডার মার্কডাউন", + "displayMode": "ডিসপ্লে মোড", + "displayField": "ডিসপ্লে ফিল্ড", + "jsonPath": "JSON পাথ", + "customApiLabel": "লেবেল", + "customApiLabelPlaceholder": "যেমন তাপমাত্রা", + "customApiUnit": "ইউনিট", + "customApiNoUrl": "কোন API URL কনফিগার করা নেই", + "customApiError": "আনতে ব্যর্থ হয়েছে", + "customApiNotArray": "প্রতিক্রিয়া একটি অ্যারে নয়", + "addService": "পরিষেবা যোগ করুন", + "showLabels": "লেবেল দেখান", + "iconSize": "আইকনের আকার", + "noDashboardLinks": "কোন ড্যাশবোর্ড লিঙ্ক কনফিগার করা নেই", + "noLimit": "কোনো সীমা নেই", + "sectionHeading": "বিভাগ শিরোনাম", + "addSection": "বিভাগ যোগ করুন", + "compactMode": "কমপ্যাক্ট মোড", + "selectHosts": "হোস্ট নির্বাচন করুন", + "listLayout": "তালিকা", + "gridLayout": "গ্রিড", + "configureUrl": "উইজেট সেটিংসে একটি URL সেট করুন।", + "embeddedContent": "এমবেডেড কন্টেন্ট", + "noBookmarks": "কোন বুকমার্ক নেই", + "noSections": "কোন বিভাগ তৈরি করা হয়নি", + "noServices": "কোন পরিষেবা সেট আপ করা হয়নি", + "configureLocation": "উইজেট সেটিংসে একটি অবস্থান নির্ধারণ করুন।", + "bannerTextPlaceholder": "ব্যানার টেক্সট", + "serviceNamePlaceholder": "আমার পরিষেবা", + "emptyNote": "Empty note...", + "weatherLoadFailed": "Could not load weather for \"{{location}}\"", + "feelsLike": "Feels like {{temperature}}", + "timezonePlaceholder": "America/New_York (leave blank for local)", + "notesPlaceholder": "Write your notes here...", + "locationPlaceholder": "New York, London, Tokyo...", + "widgets": { + "bookmark_list": { + "name": "Bookmarks", + "description": "A list of quick links" + }, + "calendar": { + "name": "Calendar", + "description": "A month calendar with today highlighted" + }, + "clock": { + "name": "Clock", + "description": "A live clock with configurable timezone" + }, + "countdown": { + "name": "Countdown", + "description": "Counts down to a target date and time" + }, + "custom_api": { + "name": "Custom API", + "description": "Fetch and display data from any JSON API" + }, + "dashboard_links": { + "name": "Dashboard Links", + "description": "Shows your saved dashboard service links" + }, + "folder": { + "name": "Folder", + "description": "A background card for grouping widgets visually" + }, + "host_grid": { + "name": "Host Grid", + "description": "Live status overview grid for all your SSH hosts" + }, + "host_status": { + "name": "Host Status", + "description": "Shows live status and metrics for an SSH host" + }, + "iframe_embed": { + "name": "iFrame Embed", + "description": "Embed any URL in an iframe" + }, + "image_widget": { + "name": "Image", + "description": "Display any image from a URL" + }, + "link_tree": { + "name": "Link Tree", + "description": "Grouped links organized into labeled sections" + }, + "markdown_notes": { + "name": "Markdown Notes", + "description": "Notes with optional Markdown rendering and inline editing" + }, + "notes": { + "name": "Notes", + "description": "A text notes widget" + }, + "ping_status": { + "name": "Ping Status", + "description": "Check if URLs or services are reachable" + }, + "quick_connect": { + "name": "Quick Connect", + "description": "Launch terminal, files, docker, tunnels, and more for your hosts" + }, + "recent_activity": { + "name": "Recent Activity", + "description": "Shows recent terminal, Docker, file, and tunnel activity" + }, + "rss_feed": { + "name": "RSS Feed", + "description": "Display items from an RSS or Atom feed" + }, + "search_bar": { + "name": "Search Bar", + "description": "Quick search with Google, DuckDuckGo, Bing, or a custom engine" + }, + "search_links": { + "name": "Search Shortcuts", + "description": "Quick buttons to search different engines" + }, + "service_grid": { + "name": "Service Grid", + "description": "A grid of service tiles with icons and links" + }, + "service_link": { + "name": "Service Link", + "description": "A clickable tile linking to a service URL" + }, + "ssh_terminal": { + "name": "SSH Terminal", + "description": "An inline SSH terminal connected to a configured host" + }, + "system_overview": { + "name": "System Overview", + "description": "Termix version, database health, and uptime at a glance" + }, + "termix_uptime": { + "name": "Termix Uptime", + "description": "Shows how long the Termix server has been running" + }, + "text_banner": { + "name": "Text Banner", + "description": "A styled text label for sections and headings" + }, + "weather": { + "name": "Weather", + "description": "Live weather for any location" + }, + "docker_widget": { + "name": "Docker Manager", + "description": "Embedded Docker container manager for a configured host" + }, + "file_manager_widget": { + "name": "File Manager", + "description": "Embedded SFTP file manager for a configured host" + }, + "tunnel_widget": { + "name": "Tunnel Manager", + "description": "Embedded SSH tunnel manager for a configured host" + }, + "metrics_chart": { + "name": "Metrics Chart", + "description": "Historical CPU, memory, disk, or network chart for a host" + } + } }, "permissions": { "use": { - "title": "Use the homepage", - "description": "View and edit the homepage canvas and dashboard service links." + "title": "হোমপেজ ব্যবহার করুন", + "description": "হোমপেজ ক্যানভাস এবং ড্যাশবোর্ড সার্ভিস লিঙ্কগুলো দেখুন ও সম্পাদনা করুন।" } }, "settings": { "privateEndpoints": { - "label": "Allowed private hosts", - "description": "Exact private or loopback hostnames/IPs for Ping Status and Custom API widgets. Separate entries with commas or newlines; omit schemes, ports and paths. Empty blocks private destinations." + "label": "ব্যক্তিগত হোস্টদের অনুমতি দেওয়া হয়েছে", + "description": "পিং স্ট্যাটাস এবং কাস্টম এপিআই উইজেটগুলির জন্য সঠিক প্রাইভেট বা লুপব্যাক হোস্টনেম/আইপি। এন্ট্রিগুলিকে কমা বা নিউলাইন দিয়ে আলাদা করুন; স্কিম, পোর্ট এবং পাথ বাদ দিন। খালি ব্লকগুলি প্রাইভেট গন্তব্য।" }, "privateCertificateAuthority": { - "label": "Private certificate authority (PEM)", - "description": "Optional trusted CA bundle for allowlisted hosts. Certificate verification remains enabled. Leave empty to use the system trust store." + "label": "বেসরকারি শংসাপত্র কর্তৃপক্ষ (পিইএম)", + "description": "অনুমোদিত হোস্টগুলির জন্য ঐচ্ছিক বিশ্বস্ত CA বান্ডেল। সার্টিফিকেট যাচাইকরণ সক্রিয় থাকবে। সিস্টেম ট্রাস্ট স্টোর ব্যবহার করতে এটি খালি রাখুন।" } + }, + "plugin": { + "name": "Homepage" } } diff --git a/plugins/homepage/locales/translated/ca_ES.json b/plugins/homepage/locales/translated/ca_ES.json index 8016ee023..0394334fe 100644 --- a/plugins/homepage/locales/translated/ca_ES.json +++ b/plugins/homepage/locales/translated/ca_ES.json @@ -169,7 +169,139 @@ "noServices": "No hi ha serveis configurats", "configureLocation": "Defineix una ubicació a la configuració del widget", "bannerTextPlaceholder": "Text del bàner", - "serviceNamePlaceholder": "El meu servei" + "serviceNamePlaceholder": "El meu servei", + "emptyNote": "Empty note...", + "weatherLoadFailed": "Could not load weather for \"{{location}}\"", + "feelsLike": "Feels like {{temperature}}", + "timezonePlaceholder": "America/New_York (leave blank for local)", + "notesPlaceholder": "Write your notes here...", + "locationPlaceholder": "New York, London, Tokyo...", + "widgets": { + "bookmark_list": { + "name": "Bookmarks", + "description": "A list of quick links" + }, + "calendar": { + "name": "Calendar", + "description": "A month calendar with today highlighted" + }, + "clock": { + "name": "Clock", + "description": "A live clock with configurable timezone" + }, + "countdown": { + "name": "Countdown", + "description": "Counts down to a target date and time" + }, + "custom_api": { + "name": "Custom API", + "description": "Fetch and display data from any JSON API" + }, + "dashboard_links": { + "name": "Dashboard Links", + "description": "Shows your saved dashboard service links" + }, + "folder": { + "name": "Folder", + "description": "A background card for grouping widgets visually" + }, + "host_grid": { + "name": "Host Grid", + "description": "Live status overview grid for all your SSH hosts" + }, + "host_status": { + "name": "Host Status", + "description": "Shows live status and metrics for an SSH host" + }, + "iframe_embed": { + "name": "iFrame Embed", + "description": "Embed any URL in an iframe" + }, + "image_widget": { + "name": "Image", + "description": "Display any image from a URL" + }, + "link_tree": { + "name": "Link Tree", + "description": "Grouped links organized into labeled sections" + }, + "markdown_notes": { + "name": "Markdown Notes", + "description": "Notes with optional Markdown rendering and inline editing" + }, + "notes": { + "name": "Notes", + "description": "A text notes widget" + }, + "ping_status": { + "name": "Ping Status", + "description": "Check if URLs or services are reachable" + }, + "quick_connect": { + "name": "Quick Connect", + "description": "Launch terminal, files, docker, tunnels, and more for your hosts" + }, + "recent_activity": { + "name": "Recent Activity", + "description": "Shows recent terminal, Docker, file, and tunnel activity" + }, + "rss_feed": { + "name": "RSS Feed", + "description": "Display items from an RSS or Atom feed" + }, + "search_bar": { + "name": "Search Bar", + "description": "Quick search with Google, DuckDuckGo, Bing, or a custom engine" + }, + "search_links": { + "name": "Search Shortcuts", + "description": "Quick buttons to search different engines" + }, + "service_grid": { + "name": "Service Grid", + "description": "A grid of service tiles with icons and links" + }, + "service_link": { + "name": "Service Link", + "description": "A clickable tile linking to a service URL" + }, + "ssh_terminal": { + "name": "SSH Terminal", + "description": "An inline SSH terminal connected to a configured host" + }, + "system_overview": { + "name": "System Overview", + "description": "Termix version, database health, and uptime at a glance" + }, + "termix_uptime": { + "name": "Termix Uptime", + "description": "Shows how long the Termix server has been running" + }, + "text_banner": { + "name": "Text Banner", + "description": "A styled text label for sections and headings" + }, + "weather": { + "name": "Weather", + "description": "Live weather for any location" + }, + "docker_widget": { + "name": "Docker Manager", + "description": "Embedded Docker container manager for a configured host" + }, + "file_manager_widget": { + "name": "File Manager", + "description": "Embedded SFTP file manager for a configured host" + }, + "tunnel_widget": { + "name": "Tunnel Manager", + "description": "Embedded SSH tunnel manager for a configured host" + }, + "metrics_chart": { + "name": "Metrics Chart", + "description": "Historical CPU, memory, disk, or network chart for a host" + } + } }, "permissions": { "use": { @@ -186,5 +318,8 @@ "label": "Autoritat de certificació privada (PEM)", "description": "Paquet opcional de CA de confiança per a amfitrions de la llista permesa. La verificació del certificat roman habilitada. Deixeu-ho en blanc per utilitzar el magatzem de confiança del sistema." } + }, + "plugin": { + "name": "Homepage" } } diff --git a/plugins/homepage/locales/translated/cs_CZ.json b/plugins/homepage/locales/translated/cs_CZ.json index 2de6e1574..a64156f3f 100644 --- a/plugins/homepage/locales/translated/cs_CZ.json +++ b/plugins/homepage/locales/translated/cs_CZ.json @@ -169,7 +169,139 @@ "noServices": "Žádné služby nejsou nastaveny", "configureLocation": "Nastavte umístění v nastavení widgetu", "bannerTextPlaceholder": "Text banneru", - "serviceNamePlaceholder": "Moje služba" + "serviceNamePlaceholder": "Moje služba", + "emptyNote": "Empty note...", + "weatherLoadFailed": "Could not load weather for \"{{location}}\"", + "feelsLike": "Feels like {{temperature}}", + "timezonePlaceholder": "America/New_York (leave blank for local)", + "notesPlaceholder": "Write your notes here...", + "locationPlaceholder": "New York, London, Tokyo...", + "widgets": { + "bookmark_list": { + "name": "Bookmarks", + "description": "A list of quick links" + }, + "calendar": { + "name": "Calendar", + "description": "A month calendar with today highlighted" + }, + "clock": { + "name": "Clock", + "description": "A live clock with configurable timezone" + }, + "countdown": { + "name": "Countdown", + "description": "Counts down to a target date and time" + }, + "custom_api": { + "name": "Custom API", + "description": "Fetch and display data from any JSON API" + }, + "dashboard_links": { + "name": "Dashboard Links", + "description": "Shows your saved dashboard service links" + }, + "folder": { + "name": "Folder", + "description": "A background card for grouping widgets visually" + }, + "host_grid": { + "name": "Host Grid", + "description": "Live status overview grid for all your SSH hosts" + }, + "host_status": { + "name": "Host Status", + "description": "Shows live status and metrics for an SSH host" + }, + "iframe_embed": { + "name": "iFrame Embed", + "description": "Embed any URL in an iframe" + }, + "image_widget": { + "name": "Image", + "description": "Display any image from a URL" + }, + "link_tree": { + "name": "Link Tree", + "description": "Grouped links organized into labeled sections" + }, + "markdown_notes": { + "name": "Markdown Notes", + "description": "Notes with optional Markdown rendering and inline editing" + }, + "notes": { + "name": "Notes", + "description": "A text notes widget" + }, + "ping_status": { + "name": "Ping Status", + "description": "Check if URLs or services are reachable" + }, + "quick_connect": { + "name": "Quick Connect", + "description": "Launch terminal, files, docker, tunnels, and more for your hosts" + }, + "recent_activity": { + "name": "Recent Activity", + "description": "Shows recent terminal, Docker, file, and tunnel activity" + }, + "rss_feed": { + "name": "RSS Feed", + "description": "Display items from an RSS or Atom feed" + }, + "search_bar": { + "name": "Search Bar", + "description": "Quick search with Google, DuckDuckGo, Bing, or a custom engine" + }, + "search_links": { + "name": "Search Shortcuts", + "description": "Quick buttons to search different engines" + }, + "service_grid": { + "name": "Service Grid", + "description": "A grid of service tiles with icons and links" + }, + "service_link": { + "name": "Service Link", + "description": "A clickable tile linking to a service URL" + }, + "ssh_terminal": { + "name": "SSH Terminal", + "description": "An inline SSH terminal connected to a configured host" + }, + "system_overview": { + "name": "System Overview", + "description": "Termix version, database health, and uptime at a glance" + }, + "termix_uptime": { + "name": "Termix Uptime", + "description": "Shows how long the Termix server has been running" + }, + "text_banner": { + "name": "Text Banner", + "description": "A styled text label for sections and headings" + }, + "weather": { + "name": "Weather", + "description": "Live weather for any location" + }, + "docker_widget": { + "name": "Docker Manager", + "description": "Embedded Docker container manager for a configured host" + }, + "file_manager_widget": { + "name": "File Manager", + "description": "Embedded SFTP file manager for a configured host" + }, + "tunnel_widget": { + "name": "Tunnel Manager", + "description": "Embedded SSH tunnel manager for a configured host" + }, + "metrics_chart": { + "name": "Metrics Chart", + "description": "Historical CPU, memory, disk, or network chart for a host" + } + } }, "permissions": { "use": { @@ -186,5 +318,8 @@ "label": "Soukromá certifikační autorita (PEM)", "description": "Volitelný balíček důvěryhodných certifikačních autorit pro hostitele na seznamu povolených. Ověřování certifikátů zůstává povoleno. Pro použití systémového úložiště důvěryhodných certifikátů ponechte pole prázdné." } + }, + "plugin": { + "name": "Homepage" } } diff --git a/plugins/homepage/locales/translated/da_DK.json b/plugins/homepage/locales/translated/da_DK.json index 4d698ed92..1fc6269da 100644 --- a/plugins/homepage/locales/translated/da_DK.json +++ b/plugins/homepage/locales/translated/da_DK.json @@ -169,7 +169,139 @@ "noServices": "Ingen tjenester konfigureret", "configureLocation": "Angiv en placering i widgetindstillingerne", "bannerTextPlaceholder": "Bannertekst", - "serviceNamePlaceholder": "Min tjeneste" + "serviceNamePlaceholder": "Min tjeneste", + "emptyNote": "Empty note...", + "weatherLoadFailed": "Could not load weather for \"{{location}}\"", + "feelsLike": "Feels like {{temperature}}", + "timezonePlaceholder": "America/New_York (leave blank for local)", + "notesPlaceholder": "Write your notes here...", + "locationPlaceholder": "New York, London, Tokyo...", + "widgets": { + "bookmark_list": { + "name": "Bookmarks", + "description": "A list of quick links" + }, + "calendar": { + "name": "Calendar", + "description": "A month calendar with today highlighted" + }, + "clock": { + "name": "Clock", + "description": "A live clock with configurable timezone" + }, + "countdown": { + "name": "Countdown", + "description": "Counts down to a target date and time" + }, + "custom_api": { + "name": "Custom API", + "description": "Fetch and display data from any JSON API" + }, + "dashboard_links": { + "name": "Dashboard Links", + "description": "Shows your saved dashboard service links" + }, + "folder": { + "name": "Folder", + "description": "A background card for grouping widgets visually" + }, + "host_grid": { + "name": "Host Grid", + "description": "Live status overview grid for all your SSH hosts" + }, + "host_status": { + "name": "Host Status", + "description": "Shows live status and metrics for an SSH host" + }, + "iframe_embed": { + "name": "iFrame Embed", + "description": "Embed any URL in an iframe" + }, + "image_widget": { + "name": "Image", + "description": "Display any image from a URL" + }, + "link_tree": { + "name": "Link Tree", + "description": "Grouped links organized into labeled sections" + }, + "markdown_notes": { + "name": "Markdown Notes", + "description": "Notes with optional Markdown rendering and inline editing" + }, + "notes": { + "name": "Notes", + "description": "A text notes widget" + }, + "ping_status": { + "name": "Ping Status", + "description": "Check if URLs or services are reachable" + }, + "quick_connect": { + "name": "Quick Connect", + "description": "Launch terminal, files, docker, tunnels, and more for your hosts" + }, + "recent_activity": { + "name": "Recent Activity", + "description": "Shows recent terminal, Docker, file, and tunnel activity" + }, + "rss_feed": { + "name": "RSS Feed", + "description": "Display items from an RSS or Atom feed" + }, + "search_bar": { + "name": "Search Bar", + "description": "Quick search with Google, DuckDuckGo, Bing, or a custom engine" + }, + "search_links": { + "name": "Search Shortcuts", + "description": "Quick buttons to search different engines" + }, + "service_grid": { + "name": "Service Grid", + "description": "A grid of service tiles with icons and links" + }, + "service_link": { + "name": "Service Link", + "description": "A clickable tile linking to a service URL" + }, + "ssh_terminal": { + "name": "SSH Terminal", + "description": "An inline SSH terminal connected to a configured host" + }, + "system_overview": { + "name": "System Overview", + "description": "Termix version, database health, and uptime at a glance" + }, + "termix_uptime": { + "name": "Termix Uptime", + "description": "Shows how long the Termix server has been running" + }, + "text_banner": { + "name": "Text Banner", + "description": "A styled text label for sections and headings" + }, + "weather": { + "name": "Weather", + "description": "Live weather for any location" + }, + "docker_widget": { + "name": "Docker Manager", + "description": "Embedded Docker container manager for a configured host" + }, + "file_manager_widget": { + "name": "File Manager", + "description": "Embedded SFTP file manager for a configured host" + }, + "tunnel_widget": { + "name": "Tunnel Manager", + "description": "Embedded SSH tunnel manager for a configured host" + }, + "metrics_chart": { + "name": "Metrics Chart", + "description": "Historical CPU, memory, disk, or network chart for a host" + } + } }, "permissions": { "use": { @@ -186,5 +318,8 @@ "label": "Privat certifikatmyndighed (PEM)", "description": "Valgfri pakke med betroede CA'er til værter på tilladelseslisten. Certifikatbekræftelse forbliver aktiveret. Lad være tomt for at bruge systemets tillidslager." } + }, + "plugin": { + "name": "Homepage" } } diff --git a/plugins/homepage/locales/translated/de_DE.json b/plugins/homepage/locales/translated/de_DE.json index 3efc033a1..ba98b1aa6 100644 --- a/plugins/homepage/locales/translated/de_DE.json +++ b/plugins/homepage/locales/translated/de_DE.json @@ -169,7 +169,139 @@ "noServices": "Keine Dienste eingerichtet", "configureLocation": "Legen Sie in den Widget-Einstellungen einen Standort fest.", "bannerTextPlaceholder": "Bannertext", - "serviceNamePlaceholder": "Mein Service" + "serviceNamePlaceholder": "Mein Service", + "emptyNote": "Empty note...", + "weatherLoadFailed": "Could not load weather for \"{{location}}\"", + "feelsLike": "Feels like {{temperature}}", + "timezonePlaceholder": "America/New_York (leave blank for local)", + "notesPlaceholder": "Write your notes here...", + "locationPlaceholder": "New York, London, Tokyo...", + "widgets": { + "bookmark_list": { + "name": "Bookmarks", + "description": "A list of quick links" + }, + "calendar": { + "name": "Calendar", + "description": "A month calendar with today highlighted" + }, + "clock": { + "name": "Clock", + "description": "A live clock with configurable timezone" + }, + "countdown": { + "name": "Countdown", + "description": "Counts down to a target date and time" + }, + "custom_api": { + "name": "Custom API", + "description": "Fetch and display data from any JSON API" + }, + "dashboard_links": { + "name": "Dashboard Links", + "description": "Shows your saved dashboard service links" + }, + "folder": { + "name": "Folder", + "description": "A background card for grouping widgets visually" + }, + "host_grid": { + "name": "Host Grid", + "description": "Live status overview grid for all your SSH hosts" + }, + "host_status": { + "name": "Host Status", + "description": "Shows live status and metrics for an SSH host" + }, + "iframe_embed": { + "name": "iFrame Embed", + "description": "Embed any URL in an iframe" + }, + "image_widget": { + "name": "Image", + "description": "Display any image from a URL" + }, + "link_tree": { + "name": "Link Tree", + "description": "Grouped links organized into labeled sections" + }, + "markdown_notes": { + "name": "Markdown Notes", + "description": "Notes with optional Markdown rendering and inline editing" + }, + "notes": { + "name": "Notes", + "description": "A text notes widget" + }, + "ping_status": { + "name": "Ping Status", + "description": "Check if URLs or services are reachable" + }, + "quick_connect": { + "name": "Quick Connect", + "description": "Launch terminal, files, docker, tunnels, and more for your hosts" + }, + "recent_activity": { + "name": "Recent Activity", + "description": "Shows recent terminal, Docker, file, and tunnel activity" + }, + "rss_feed": { + "name": "RSS Feed", + "description": "Display items from an RSS or Atom feed" + }, + "search_bar": { + "name": "Search Bar", + "description": "Quick search with Google, DuckDuckGo, Bing, or a custom engine" + }, + "search_links": { + "name": "Search Shortcuts", + "description": "Quick buttons to search different engines" + }, + "service_grid": { + "name": "Service Grid", + "description": "A grid of service tiles with icons and links" + }, + "service_link": { + "name": "Service Link", + "description": "A clickable tile linking to a service URL" + }, + "ssh_terminal": { + "name": "SSH Terminal", + "description": "An inline SSH terminal connected to a configured host" + }, + "system_overview": { + "name": "System Overview", + "description": "Termix version, database health, and uptime at a glance" + }, + "termix_uptime": { + "name": "Termix Uptime", + "description": "Shows how long the Termix server has been running" + }, + "text_banner": { + "name": "Text Banner", + "description": "A styled text label for sections and headings" + }, + "weather": { + "name": "Weather", + "description": "Live weather for any location" + }, + "docker_widget": { + "name": "Docker Manager", + "description": "Embedded Docker container manager for a configured host" + }, + "file_manager_widget": { + "name": "File Manager", + "description": "Embedded SFTP file manager for a configured host" + }, + "tunnel_widget": { + "name": "Tunnel Manager", + "description": "Embedded SSH tunnel manager for a configured host" + }, + "metrics_chart": { + "name": "Metrics Chart", + "description": "Historical CPU, memory, disk, or network chart for a host" + } + } }, "permissions": { "use": { @@ -186,5 +318,8 @@ "label": "Private Zertifizierungsstelle (PEM)", "description": "Optionales Paket vertrauenswürdiger Zertifizierungsstellen für zugelassene Hosts. Die Zertifikatsprüfung bleibt aktiviert. Lassen Sie dieses Feld leer, um den System-Truststore zu verwenden." } + }, + "plugin": { + "name": "Homepage" } } diff --git a/plugins/homepage/locales/translated/el_GR.json b/plugins/homepage/locales/translated/el_GR.json index 0f15655dc..5c2a1ef15 100644 --- a/plugins/homepage/locales/translated/el_GR.json +++ b/plugins/homepage/locales/translated/el_GR.json @@ -169,7 +169,139 @@ "noServices": "Δεν έχουν ρυθμιστεί υπηρεσίες", "configureLocation": "Ορίστε μια τοποθεσία στις ρυθμίσεις του γραφικού στοιχείου", "bannerTextPlaceholder": "Κείμενο banner", - "serviceNamePlaceholder": "Η υπηρεσία μου" + "serviceNamePlaceholder": "Η υπηρεσία μου", + "emptyNote": "Empty note...", + "weatherLoadFailed": "Could not load weather for \"{{location}}\"", + "feelsLike": "Feels like {{temperature}}", + "timezonePlaceholder": "America/New_York (leave blank for local)", + "notesPlaceholder": "Write your notes here...", + "locationPlaceholder": "New York, London, Tokyo...", + "widgets": { + "bookmark_list": { + "name": "Bookmarks", + "description": "A list of quick links" + }, + "calendar": { + "name": "Calendar", + "description": "A month calendar with today highlighted" + }, + "clock": { + "name": "Clock", + "description": "A live clock with configurable timezone" + }, + "countdown": { + "name": "Countdown", + "description": "Counts down to a target date and time" + }, + "custom_api": { + "name": "Custom API", + "description": "Fetch and display data from any JSON API" + }, + "dashboard_links": { + "name": "Dashboard Links", + "description": "Shows your saved dashboard service links" + }, + "folder": { + "name": "Folder", + "description": "A background card for grouping widgets visually" + }, + "host_grid": { + "name": "Host Grid", + "description": "Live status overview grid for all your SSH hosts" + }, + "host_status": { + "name": "Host Status", + "description": "Shows live status and metrics for an SSH host" + }, + "iframe_embed": { + "name": "iFrame Embed", + "description": "Embed any URL in an iframe" + }, + "image_widget": { + "name": "Image", + "description": "Display any image from a URL" + }, + "link_tree": { + "name": "Link Tree", + "description": "Grouped links organized into labeled sections" + }, + "markdown_notes": { + "name": "Markdown Notes", + "description": "Notes with optional Markdown rendering and inline editing" + }, + "notes": { + "name": "Notes", + "description": "A text notes widget" + }, + "ping_status": { + "name": "Ping Status", + "description": "Check if URLs or services are reachable" + }, + "quick_connect": { + "name": "Quick Connect", + "description": "Launch terminal, files, docker, tunnels, and more for your hosts" + }, + "recent_activity": { + "name": "Recent Activity", + "description": "Shows recent terminal, Docker, file, and tunnel activity" + }, + "rss_feed": { + "name": "RSS Feed", + "description": "Display items from an RSS or Atom feed" + }, + "search_bar": { + "name": "Search Bar", + "description": "Quick search with Google, DuckDuckGo, Bing, or a custom engine" + }, + "search_links": { + "name": "Search Shortcuts", + "description": "Quick buttons to search different engines" + }, + "service_grid": { + "name": "Service Grid", + "description": "A grid of service tiles with icons and links" + }, + "service_link": { + "name": "Service Link", + "description": "A clickable tile linking to a service URL" + }, + "ssh_terminal": { + "name": "SSH Terminal", + "description": "An inline SSH terminal connected to a configured host" + }, + "system_overview": { + "name": "System Overview", + "description": "Termix version, database health, and uptime at a glance" + }, + "termix_uptime": { + "name": "Termix Uptime", + "description": "Shows how long the Termix server has been running" + }, + "text_banner": { + "name": "Text Banner", + "description": "A styled text label for sections and headings" + }, + "weather": { + "name": "Weather", + "description": "Live weather for any location" + }, + "docker_widget": { + "name": "Docker Manager", + "description": "Embedded Docker container manager for a configured host" + }, + "file_manager_widget": { + "name": "File Manager", + "description": "Embedded SFTP file manager for a configured host" + }, + "tunnel_widget": { + "name": "Tunnel Manager", + "description": "Embedded SSH tunnel manager for a configured host" + }, + "metrics_chart": { + "name": "Metrics Chart", + "description": "Historical CPU, memory, disk, or network chart for a host" + } + } }, "permissions": { "use": { @@ -186,5 +318,8 @@ "label": "Ιδιωτική αρχή έκδοσης πιστοποιητικών (PEM)", "description": "Προαιρετικό πακέτο αξιόπιστης έκδοσης πιστοποιητικών (CA) για κεντρικούς υπολογιστές που έχουν καταχωρηθεί στη λίστα επιτρεπόμενων. Η επαλήθευση πιστοποιητικών παραμένει ενεργοποιημένη. Αφήστε το κενό για να χρησιμοποιήσετε το χώρο αποθήκευσης αξιοπιστίας του συστήματος." } + }, + "plugin": { + "name": "Homepage" } } diff --git a/plugins/homepage/locales/translated/es_ES.json b/plugins/homepage/locales/translated/es_ES.json index 27d769120..5af511f00 100644 --- a/plugins/homepage/locales/translated/es_ES.json +++ b/plugins/homepage/locales/translated/es_ES.json @@ -169,7 +169,139 @@ "noServices": "No hay servicios configurados", "configureLocation": "Establezca una ubicación en la configuración del widget.", "bannerTextPlaceholder": "Texto del banner", - "serviceNamePlaceholder": "Mi servicio" + "serviceNamePlaceholder": "Mi servicio", + "emptyNote": "Empty note...", + "weatherLoadFailed": "Could not load weather for \"{{location}}\"", + "feelsLike": "Feels like {{temperature}}", + "timezonePlaceholder": "America/New_York (leave blank for local)", + "notesPlaceholder": "Write your notes here...", + "locationPlaceholder": "New York, London, Tokyo...", + "widgets": { + "bookmark_list": { + "name": "Bookmarks", + "description": "A list of quick links" + }, + "calendar": { + "name": "Calendar", + "description": "A month calendar with today highlighted" + }, + "clock": { + "name": "Clock", + "description": "A live clock with configurable timezone" + }, + "countdown": { + "name": "Countdown", + "description": "Counts down to a target date and time" + }, + "custom_api": { + "name": "Custom API", + "description": "Fetch and display data from any JSON API" + }, + "dashboard_links": { + "name": "Dashboard Links", + "description": "Shows your saved dashboard service links" + }, + "folder": { + "name": "Folder", + "description": "A background card for grouping widgets visually" + }, + "host_grid": { + "name": "Host Grid", + "description": "Live status overview grid for all your SSH hosts" + }, + "host_status": { + "name": "Host Status", + "description": "Shows live status and metrics for an SSH host" + }, + "iframe_embed": { + "name": "iFrame Embed", + "description": "Embed any URL in an iframe" + }, + "image_widget": { + "name": "Image", + "description": "Display any image from a URL" + }, + "link_tree": { + "name": "Link Tree", + "description": "Grouped links organized into labeled sections" + }, + "markdown_notes": { + "name": "Markdown Notes", + "description": "Notes with optional Markdown rendering and inline editing" + }, + "notes": { + "name": "Notes", + "description": "A text notes widget" + }, + "ping_status": { + "name": "Ping Status", + "description": "Check if URLs or services are reachable" + }, + "quick_connect": { + "name": "Quick Connect", + "description": "Launch terminal, files, docker, tunnels, and more for your hosts" + }, + "recent_activity": { + "name": "Recent Activity", + "description": "Shows recent terminal, Docker, file, and tunnel activity" + }, + "rss_feed": { + "name": "RSS Feed", + "description": "Display items from an RSS or Atom feed" + }, + "search_bar": { + "name": "Search Bar", + "description": "Quick search with Google, DuckDuckGo, Bing, or a custom engine" + }, + "search_links": { + "name": "Search Shortcuts", + "description": "Quick buttons to search different engines" + }, + "service_grid": { + "name": "Service Grid", + "description": "A grid of service tiles with icons and links" + }, + "service_link": { + "name": "Service Link", + "description": "A clickable tile linking to a service URL" + }, + "ssh_terminal": { + "name": "SSH Terminal", + "description": "An inline SSH terminal connected to a configured host" + }, + "system_overview": { + "name": "System Overview", + "description": "Termix version, database health, and uptime at a glance" + }, + "termix_uptime": { + "name": "Termix Uptime", + "description": "Shows how long the Termix server has been running" + }, + "text_banner": { + "name": "Text Banner", + "description": "A styled text label for sections and headings" + }, + "weather": { + "name": "Weather", + "description": "Live weather for any location" + }, + "docker_widget": { + "name": "Docker Manager", + "description": "Embedded Docker container manager for a configured host" + }, + "file_manager_widget": { + "name": "File Manager", + "description": "Embedded SFTP file manager for a configured host" + }, + "tunnel_widget": { + "name": "Tunnel Manager", + "description": "Embedded SSH tunnel manager for a configured host" + }, + "metrics_chart": { + "name": "Metrics Chart", + "description": "Historical CPU, memory, disk, or network chart for a host" + } + } }, "permissions": { "use": { @@ -186,5 +318,8 @@ "label": "Autoridad de certificación privada (PEM)", "description": "Paquete de certificados CA de confianza opcional para los hosts permitidos. La verificación de certificados permanece habilitada. Déjelo en blanco para usar el almacén de certificados de confianza del sistema." } + }, + "plugin": { + "name": "Homepage" } } diff --git a/plugins/homepage/locales/translated/fi_FI.json b/plugins/homepage/locales/translated/fi_FI.json index 625693f8e..3b8d747ab 100644 --- a/plugins/homepage/locales/translated/fi_FI.json +++ b/plugins/homepage/locales/translated/fi_FI.json @@ -169,7 +169,139 @@ "noServices": "Ei palveluita määritettynä", "configureLocation": "Aseta sijainti widgetin asetuksissa", "bannerTextPlaceholder": "Banneriteksti", - "serviceNamePlaceholder": "Palveluni" + "serviceNamePlaceholder": "Palveluni", + "emptyNote": "Empty note...", + "weatherLoadFailed": "Could not load weather for \"{{location}}\"", + "feelsLike": "Feels like {{temperature}}", + "timezonePlaceholder": "America/New_York (leave blank for local)", + "notesPlaceholder": "Write your notes here...", + "locationPlaceholder": "New York, London, Tokyo...", + "widgets": { + "bookmark_list": { + "name": "Bookmarks", + "description": "A list of quick links" + }, + "calendar": { + "name": "Calendar", + "description": "A month calendar with today highlighted" + }, + "clock": { + "name": "Clock", + "description": "A live clock with configurable timezone" + }, + "countdown": { + "name": "Countdown", + "description": "Counts down to a target date and time" + }, + "custom_api": { + "name": "Custom API", + "description": "Fetch and display data from any JSON API" + }, + "dashboard_links": { + "name": "Dashboard Links", + "description": "Shows your saved dashboard service links" + }, + "folder": { + "name": "Folder", + "description": "A background card for grouping widgets visually" + }, + "host_grid": { + "name": "Host Grid", + "description": "Live status overview grid for all your SSH hosts" + }, + "host_status": { + "name": "Host Status", + "description": "Shows live status and metrics for an SSH host" + }, + "iframe_embed": { + "name": "iFrame Embed", + "description": "Embed any URL in an iframe" + }, + "image_widget": { + "name": "Image", + "description": "Display any image from a URL" + }, + "link_tree": { + "name": "Link Tree", + "description": "Grouped links organized into labeled sections" + }, + "markdown_notes": { + "name": "Markdown Notes", + "description": "Notes with optional Markdown rendering and inline editing" + }, + "notes": { + "name": "Notes", + "description": "A text notes widget" + }, + "ping_status": { + "name": "Ping Status", + "description": "Check if URLs or services are reachable" + }, + "quick_connect": { + "name": "Quick Connect", + "description": "Launch terminal, files, docker, tunnels, and more for your hosts" + }, + "recent_activity": { + "name": "Recent Activity", + "description": "Shows recent terminal, Docker, file, and tunnel activity" + }, + "rss_feed": { + "name": "RSS Feed", + "description": "Display items from an RSS or Atom feed" + }, + "search_bar": { + "name": "Search Bar", + "description": "Quick search with Google, DuckDuckGo, Bing, or a custom engine" + }, + "search_links": { + "name": "Search Shortcuts", + "description": "Quick buttons to search different engines" + }, + "service_grid": { + "name": "Service Grid", + "description": "A grid of service tiles with icons and links" + }, + "service_link": { + "name": "Service Link", + "description": "A clickable tile linking to a service URL" + }, + "ssh_terminal": { + "name": "SSH Terminal", + "description": "An inline SSH terminal connected to a configured host" + }, + "system_overview": { + "name": "System Overview", + "description": "Termix version, database health, and uptime at a glance" + }, + "termix_uptime": { + "name": "Termix Uptime", + "description": "Shows how long the Termix server has been running" + }, + "text_banner": { + "name": "Text Banner", + "description": "A styled text label for sections and headings" + }, + "weather": { + "name": "Weather", + "description": "Live weather for any location" + }, + "docker_widget": { + "name": "Docker Manager", + "description": "Embedded Docker container manager for a configured host" + }, + "file_manager_widget": { + "name": "File Manager", + "description": "Embedded SFTP file manager for a configured host" + }, + "tunnel_widget": { + "name": "Tunnel Manager", + "description": "Embedded SSH tunnel manager for a configured host" + }, + "metrics_chart": { + "name": "Metrics Chart", + "description": "Historical CPU, memory, disk, or network chart for a host" + } + } }, "permissions": { "use": { @@ -186,5 +318,8 @@ "label": "Yksityinen varmentaja (PEM)", "description": "Valinnainen luotettujen varmenteiden paketti sallittujen isäntien luettelosta. Varmenteiden vahvistus pysyy käytössä. Jätä tyhjäksi käyttääksesi järjestelmän luotettujen varmenteiden säilöä." } + }, + "plugin": { + "name": "Homepage" } } diff --git a/plugins/homepage/locales/translated/fr_FR.json b/plugins/homepage/locales/translated/fr_FR.json index 91fa269c6..0c3844ec0 100644 --- a/plugins/homepage/locales/translated/fr_FR.json +++ b/plugins/homepage/locales/translated/fr_FR.json @@ -169,7 +169,139 @@ "noServices": "Aucun service configuré", "configureLocation": "Définissez un emplacement dans les paramètres du widget", "bannerTextPlaceholder": "Texte de la bannière", - "serviceNamePlaceholder": "Mon service" + "serviceNamePlaceholder": "Mon service", + "emptyNote": "Empty note...", + "weatherLoadFailed": "Could not load weather for \"{{location}}\"", + "feelsLike": "Feels like {{temperature}}", + "timezonePlaceholder": "America/New_York (leave blank for local)", + "notesPlaceholder": "Write your notes here...", + "locationPlaceholder": "New York, London, Tokyo...", + "widgets": { + "bookmark_list": { + "name": "Bookmarks", + "description": "A list of quick links" + }, + "calendar": { + "name": "Calendar", + "description": "A month calendar with today highlighted" + }, + "clock": { + "name": "Clock", + "description": "A live clock with configurable timezone" + }, + "countdown": { + "name": "Countdown", + "description": "Counts down to a target date and time" + }, + "custom_api": { + "name": "Custom API", + "description": "Fetch and display data from any JSON API" + }, + "dashboard_links": { + "name": "Dashboard Links", + "description": "Shows your saved dashboard service links" + }, + "folder": { + "name": "Folder", + "description": "A background card for grouping widgets visually" + }, + "host_grid": { + "name": "Host Grid", + "description": "Live status overview grid for all your SSH hosts" + }, + "host_status": { + "name": "Host Status", + "description": "Shows live status and metrics for an SSH host" + }, + "iframe_embed": { + "name": "iFrame Embed", + "description": "Embed any URL in an iframe" + }, + "image_widget": { + "name": "Image", + "description": "Display any image from a URL" + }, + "link_tree": { + "name": "Link Tree", + "description": "Grouped links organized into labeled sections" + }, + "markdown_notes": { + "name": "Markdown Notes", + "description": "Notes with optional Markdown rendering and inline editing" + }, + "notes": { + "name": "Notes", + "description": "A text notes widget" + }, + "ping_status": { + "name": "Ping Status", + "description": "Check if URLs or services are reachable" + }, + "quick_connect": { + "name": "Quick Connect", + "description": "Launch terminal, files, docker, tunnels, and more for your hosts" + }, + "recent_activity": { + "name": "Recent Activity", + "description": "Shows recent terminal, Docker, file, and tunnel activity" + }, + "rss_feed": { + "name": "RSS Feed", + "description": "Display items from an RSS or Atom feed" + }, + "search_bar": { + "name": "Search Bar", + "description": "Quick search with Google, DuckDuckGo, Bing, or a custom engine" + }, + "search_links": { + "name": "Search Shortcuts", + "description": "Quick buttons to search different engines" + }, + "service_grid": { + "name": "Service Grid", + "description": "A grid of service tiles with icons and links" + }, + "service_link": { + "name": "Service Link", + "description": "A clickable tile linking to a service URL" + }, + "ssh_terminal": { + "name": "SSH Terminal", + "description": "An inline SSH terminal connected to a configured host" + }, + "system_overview": { + "name": "System Overview", + "description": "Termix version, database health, and uptime at a glance" + }, + "termix_uptime": { + "name": "Termix Uptime", + "description": "Shows how long the Termix server has been running" + }, + "text_banner": { + "name": "Text Banner", + "description": "A styled text label for sections and headings" + }, + "weather": { + "name": "Weather", + "description": "Live weather for any location" + }, + "docker_widget": { + "name": "Docker Manager", + "description": "Embedded Docker container manager for a configured host" + }, + "file_manager_widget": { + "name": "File Manager", + "description": "Embedded SFTP file manager for a configured host" + }, + "tunnel_widget": { + "name": "Tunnel Manager", + "description": "Embedded SSH tunnel manager for a configured host" + }, + "metrics_chart": { + "name": "Metrics Chart", + "description": "Historical CPU, memory, disk, or network chart for a host" + } + } }, "permissions": { "use": { @@ -186,5 +318,8 @@ "label": "Autorité de certification privée (PEM)", "description": "Ensemble d'autorités de certification de confiance optionnel pour les hôtes autorisés. La vérification des certificats reste activée. Laissez ce champ vide pour utiliser le magasin de certificats système." } + }, + "plugin": { + "name": "Homepage" } } diff --git a/plugins/homepage/locales/translated/he_IL.json b/plugins/homepage/locales/translated/he_IL.json index c93eaff70..dcfd9d5c7 100644 --- a/plugins/homepage/locales/translated/he_IL.json +++ b/plugins/homepage/locales/translated/he_IL.json @@ -169,7 +169,139 @@ "noServices": "לא הוגדרו שירותים", "configureLocation": "הגדרת מיקום בהגדרות הווידג'ט", "bannerTextPlaceholder": "טקסט באנר", - "serviceNamePlaceholder": "השירות שלי" + "serviceNamePlaceholder": "השירות שלי", + "emptyNote": "Empty note...", + "weatherLoadFailed": "Could not load weather for \"{{location}}\"", + "feelsLike": "Feels like {{temperature}}", + "timezonePlaceholder": "America/New_York (leave blank for local)", + "notesPlaceholder": "Write your notes here...", + "locationPlaceholder": "New York, London, Tokyo...", + "widgets": { + "bookmark_list": { + "name": "Bookmarks", + "description": "A list of quick links" + }, + "calendar": { + "name": "Calendar", + "description": "A month calendar with today highlighted" + }, + "clock": { + "name": "Clock", + "description": "A live clock with configurable timezone" + }, + "countdown": { + "name": "Countdown", + "description": "Counts down to a target date and time" + }, + "custom_api": { + "name": "Custom API", + "description": "Fetch and display data from any JSON API" + }, + "dashboard_links": { + "name": "Dashboard Links", + "description": "Shows your saved dashboard service links" + }, + "folder": { + "name": "Folder", + "description": "A background card for grouping widgets visually" + }, + "host_grid": { + "name": "Host Grid", + "description": "Live status overview grid for all your SSH hosts" + }, + "host_status": { + "name": "Host Status", + "description": "Shows live status and metrics for an SSH host" + }, + "iframe_embed": { + "name": "iFrame Embed", + "description": "Embed any URL in an iframe" + }, + "image_widget": { + "name": "Image", + "description": "Display any image from a URL" + }, + "link_tree": { + "name": "Link Tree", + "description": "Grouped links organized into labeled sections" + }, + "markdown_notes": { + "name": "Markdown Notes", + "description": "Notes with optional Markdown rendering and inline editing" + }, + "notes": { + "name": "Notes", + "description": "A text notes widget" + }, + "ping_status": { + "name": "Ping Status", + "description": "Check if URLs or services are reachable" + }, + "quick_connect": { + "name": "Quick Connect", + "description": "Launch terminal, files, docker, tunnels, and more for your hosts" + }, + "recent_activity": { + "name": "Recent Activity", + "description": "Shows recent terminal, Docker, file, and tunnel activity" + }, + "rss_feed": { + "name": "RSS Feed", + "description": "Display items from an RSS or Atom feed" + }, + "search_bar": { + "name": "Search Bar", + "description": "Quick search with Google, DuckDuckGo, Bing, or a custom engine" + }, + "search_links": { + "name": "Search Shortcuts", + "description": "Quick buttons to search different engines" + }, + "service_grid": { + "name": "Service Grid", + "description": "A grid of service tiles with icons and links" + }, + "service_link": { + "name": "Service Link", + "description": "A clickable tile linking to a service URL" + }, + "ssh_terminal": { + "name": "SSH Terminal", + "description": "An inline SSH terminal connected to a configured host" + }, + "system_overview": { + "name": "System Overview", + "description": "Termix version, database health, and uptime at a glance" + }, + "termix_uptime": { + "name": "Termix Uptime", + "description": "Shows how long the Termix server has been running" + }, + "text_banner": { + "name": "Text Banner", + "description": "A styled text label for sections and headings" + }, + "weather": { + "name": "Weather", + "description": "Live weather for any location" + }, + "docker_widget": { + "name": "Docker Manager", + "description": "Embedded Docker container manager for a configured host" + }, + "file_manager_widget": { + "name": "File Manager", + "description": "Embedded SFTP file manager for a configured host" + }, + "tunnel_widget": { + "name": "Tunnel Manager", + "description": "Embedded SSH tunnel manager for a configured host" + }, + "metrics_chart": { + "name": "Metrics Chart", + "description": "Historical CPU, memory, disk, or network chart for a host" + } + } }, "permissions": { "use": { @@ -186,5 +318,8 @@ "label": "רשות אישורים פרטית (PEM)", "description": "חבילת CA מהימנה אופציונלית עבור מארחים ברשימת היתרים. אימות אישורים נשאר מופעל. השאר ריק כדי להשתמש במאגר האמון של המערכת." } + }, + "plugin": { + "name": "Homepage" } } diff --git a/plugins/homepage/locales/translated/hi_IN.json b/plugins/homepage/locales/translated/hi_IN.json index 8e1e88ce8..7bc39e9a1 100644 --- a/plugins/homepage/locales/translated/hi_IN.json +++ b/plugins/homepage/locales/translated/hi_IN.json @@ -18,7 +18,7 @@ "homepage": { "title": "होमपेज", "addWidget": "विजेट जोड़ें", - "noWidgetsInCategory": "No widgets in this category", + "noWidgetsInCategory": "इस श्रेणी में कोई विजेट नहीं हैं", "editWidget": "विजेट संपादित करें", "zoomIn": "ज़ूम इन", "zoomOut": "ज़ूम आउट", @@ -39,7 +39,7 @@ "description": "विवरण", "color": "रंग", "timezone": "समय क्षेत्र", - "invalidTimezone": "Invalid timezone. Use an IANA name such as America/New_York", + "invalidTimezone": "समय क्षेत्र अमान्य है। कृपया IANA नाम का उपयोग करें, जैसे कि America/New_York", "showSeconds": "सेकंड दिखाएँ", "format12h": "12-घंटे", "content": "सामग्री", @@ -60,9 +60,9 @@ "maxItems": "अधिकतम आइटम", "showDescription": "विवरण दिखाएं", "widgetRssName": "RSS फ़ीड", - "rssNoFeedUrl": "Configure a feed URL in widget settings", - "rssLoadError": "Could not load feed", - "rssNoItems": "No items", + "rssNoFeedUrl": "विजेट सेटिंग में फ़ीड URL कॉन्फ़िगर करें", + "rssLoadError": "फ़ीड लोड नहीं हो सका", + "rssNoItems": "कोई आइटम नहीं", "noHostSelected": "कोई होस्ट चयनित नहीं", "displayedMetrics": "प्रदर्शित मेट्रिक्स", "metricCpu": "CPU", @@ -162,29 +162,164 @@ "selectHosts": "होस्ट चुनें", "listLayout": "सूची", "gridLayout": "ग्रिड", - "configureUrl": "Set a URL in the widget settings", - "embeddedContent": "Embedded content", - "noBookmarks": "No bookmarks", - "noSections": "No sections set up", - "noServices": "No services set up", - "configureLocation": "Set a location in the widget settings", - "bannerTextPlaceholder": "Banner text", - "serviceNamePlaceholder": "My service" + "configureUrl": "विजेट सेटिंग में एक URL सेट करें", + "embeddedContent": "अंतर्निहित सामग्री", + "noBookmarks": "कोई बुकमार्क नहीं", + "noSections": "कोई अनुभाग स्थापित नहीं किया गया है", + "noServices": "कोई सेवा स्थापित नहीं की गई", + "configureLocation": "विजेट सेटिंग में स्थान निर्धारित करें", + "bannerTextPlaceholder": "बैनर पाठ", + "serviceNamePlaceholder": "मेरी सेवा", + "emptyNote": "Empty note...", + "weatherLoadFailed": "Could not load weather for \"{{location}}\"", + "feelsLike": "Feels like {{temperature}}", + "timezonePlaceholder": "America/New_York (leave blank for local)", + "notesPlaceholder": "Write your notes here...", + "locationPlaceholder": "New York, London, Tokyo...", + "widgets": { + "bookmark_list": { + "name": "Bookmarks", + "description": "A list of quick links" + }, + "calendar": { + "name": "Calendar", + "description": "A month calendar with today highlighted" + }, + "clock": { + "name": "Clock", + "description": "A live clock with configurable timezone" + }, + "countdown": { + "name": "Countdown", + "description": "Counts down to a target date and time" + }, + "custom_api": { + "name": "Custom API", + "description": "Fetch and display data from any JSON API" + }, + "dashboard_links": { + "name": "Dashboard Links", + "description": "Shows your saved dashboard service links" + }, + "folder": { + "name": "Folder", + "description": "A background card for grouping widgets visually" + }, + "host_grid": { + "name": "Host Grid", + "description": "Live status overview grid for all your SSH hosts" + }, + "host_status": { + "name": "Host Status", + "description": "Shows live status and metrics for an SSH host" + }, + "iframe_embed": { + "name": "iFrame Embed", + "description": "Embed any URL in an iframe" + }, + "image_widget": { + "name": "Image", + "description": "Display any image from a URL" + }, + "link_tree": { + "name": "Link Tree", + "description": "Grouped links organized into labeled sections" + }, + "markdown_notes": { + "name": "Markdown Notes", + "description": "Notes with optional Markdown rendering and inline editing" + }, + "notes": { + "name": "Notes", + "description": "A text notes widget" + }, + "ping_status": { + "name": "Ping Status", + "description": "Check if URLs or services are reachable" + }, + "quick_connect": { + "name": "Quick Connect", + "description": "Launch terminal, files, docker, tunnels, and more for your hosts" + }, + "recent_activity": { + "name": "Recent Activity", + "description": "Shows recent terminal, Docker, file, and tunnel activity" + }, + "rss_feed": { + "name": "RSS Feed", + "description": "Display items from an RSS or Atom feed" + }, + "search_bar": { + "name": "Search Bar", + "description": "Quick search with Google, DuckDuckGo, Bing, or a custom engine" + }, + "search_links": { + "name": "Search Shortcuts", + "description": "Quick buttons to search different engines" + }, + "service_grid": { + "name": "Service Grid", + "description": "A grid of service tiles with icons and links" + }, + "service_link": { + "name": "Service Link", + "description": "A clickable tile linking to a service URL" + }, + "ssh_terminal": { + "name": "SSH Terminal", + "description": "An inline SSH terminal connected to a configured host" + }, + "system_overview": { + "name": "System Overview", + "description": "Termix version, database health, and uptime at a glance" + }, + "termix_uptime": { + "name": "Termix Uptime", + "description": "Shows how long the Termix server has been running" + }, + "text_banner": { + "name": "Text Banner", + "description": "A styled text label for sections and headings" + }, + "weather": { + "name": "Weather", + "description": "Live weather for any location" + }, + "docker_widget": { + "name": "Docker Manager", + "description": "Embedded Docker container manager for a configured host" + }, + "file_manager_widget": { + "name": "File Manager", + "description": "Embedded SFTP file manager for a configured host" + }, + "tunnel_widget": { + "name": "Tunnel Manager", + "description": "Embedded SSH tunnel manager for a configured host" + }, + "metrics_chart": { + "name": "Metrics Chart", + "description": "Historical CPU, memory, disk, or network chart for a host" + } + } }, "permissions": { "use": { - "title": "Use the homepage", - "description": "View and edit the homepage canvas and dashboard service links." + "title": "होमपेज का उपयोग करें", + "description": "होमपेज कैनवास और डैशबोर्ड सेवा लिंक देखें और संपादित करें।" } }, "settings": { "privateEndpoints": { - "label": "Allowed private hosts", - "description": "Exact private or loopback hostnames/IPs for Ping Status and Custom API widgets. Separate entries with commas or newlines; omit schemes, ports and paths. Empty blocks private destinations." + "label": "निजी होस्ट की अनुमति है", + "description": "पिंग स्टेटस और कस्टम API विजेट के लिए सटीक निजी या लूपबैक होस्टनाम/IP पते। प्रविष्टियों को अल्पविराम या नई लाइन से अलग करें; स्कीम, पोर्ट और पथ को छोड़ दें। खाली ब्लॉक निजी गंतव्यों के लिए हैं।" }, "privateCertificateAuthority": { - "label": "Private certificate authority (PEM)", - "description": "Optional trusted CA bundle for allowlisted hosts. Certificate verification remains enabled. Leave empty to use the system trust store." + "label": "निजी प्रमाणपत्र प्राधिकरण (पीईएम)", + "description": "अनुमत होस्टों के लिए वैकल्पिक विश्वसनीय CA बंडल। प्रमाणपत्र सत्यापन सक्षम रहता है। सिस्टम ट्रस्ट स्टोर का उपयोग करने के लिए इसे खाली छोड़ दें।" } + }, + "plugin": { + "name": "Homepage" } } diff --git a/plugins/homepage/locales/translated/hu_HU.json b/plugins/homepage/locales/translated/hu_HU.json index 3b4d397eb..50644cfec 100644 --- a/plugins/homepage/locales/translated/hu_HU.json +++ b/plugins/homepage/locales/translated/hu_HU.json @@ -169,7 +169,139 @@ "noServices": "Nincsenek szolgáltatások beállítva", "configureLocation": "Helyszín beállítása a widget beállításaiban", "bannerTextPlaceholder": "Banner szöveg", - "serviceNamePlaceholder": "A szolgáltatásom" + "serviceNamePlaceholder": "A szolgáltatásom", + "emptyNote": "Empty note...", + "weatherLoadFailed": "Could not load weather for \"{{location}}\"", + "feelsLike": "Feels like {{temperature}}", + "timezonePlaceholder": "America/New_York (leave blank for local)", + "notesPlaceholder": "Write your notes here...", + "locationPlaceholder": "New York, London, Tokyo...", + "widgets": { + "bookmark_list": { + "name": "Bookmarks", + "description": "A list of quick links" + }, + "calendar": { + "name": "Calendar", + "description": "A month calendar with today highlighted" + }, + "clock": { + "name": "Clock", + "description": "A live clock with configurable timezone" + }, + "countdown": { + "name": "Countdown", + "description": "Counts down to a target date and time" + }, + "custom_api": { + "name": "Custom API", + "description": "Fetch and display data from any JSON API" + }, + "dashboard_links": { + "name": "Dashboard Links", + "description": "Shows your saved dashboard service links" + }, + "folder": { + "name": "Folder", + "description": "A background card for grouping widgets visually" + }, + "host_grid": { + "name": "Host Grid", + "description": "Live status overview grid for all your SSH hosts" + }, + "host_status": { + "name": "Host Status", + "description": "Shows live status and metrics for an SSH host" + }, + "iframe_embed": { + "name": "iFrame Embed", + "description": "Embed any URL in an iframe" + }, + "image_widget": { + "name": "Image", + "description": "Display any image from a URL" + }, + "link_tree": { + "name": "Link Tree", + "description": "Grouped links organized into labeled sections" + }, + "markdown_notes": { + "name": "Markdown Notes", + "description": "Notes with optional Markdown rendering and inline editing" + }, + "notes": { + "name": "Notes", + "description": "A text notes widget" + }, + "ping_status": { + "name": "Ping Status", + "description": "Check if URLs or services are reachable" + }, + "quick_connect": { + "name": "Quick Connect", + "description": "Launch terminal, files, docker, tunnels, and more for your hosts" + }, + "recent_activity": { + "name": "Recent Activity", + "description": "Shows recent terminal, Docker, file, and tunnel activity" + }, + "rss_feed": { + "name": "RSS Feed", + "description": "Display items from an RSS or Atom feed" + }, + "search_bar": { + "name": "Search Bar", + "description": "Quick search with Google, DuckDuckGo, Bing, or a custom engine" + }, + "search_links": { + "name": "Search Shortcuts", + "description": "Quick buttons to search different engines" + }, + "service_grid": { + "name": "Service Grid", + "description": "A grid of service tiles with icons and links" + }, + "service_link": { + "name": "Service Link", + "description": "A clickable tile linking to a service URL" + }, + "ssh_terminal": { + "name": "SSH Terminal", + "description": "An inline SSH terminal connected to a configured host" + }, + "system_overview": { + "name": "System Overview", + "description": "Termix version, database health, and uptime at a glance" + }, + "termix_uptime": { + "name": "Termix Uptime", + "description": "Shows how long the Termix server has been running" + }, + "text_banner": { + "name": "Text Banner", + "description": "A styled text label for sections and headings" + }, + "weather": { + "name": "Weather", + "description": "Live weather for any location" + }, + "docker_widget": { + "name": "Docker Manager", + "description": "Embedded Docker container manager for a configured host" + }, + "file_manager_widget": { + "name": "File Manager", + "description": "Embedded SFTP file manager for a configured host" + }, + "tunnel_widget": { + "name": "Tunnel Manager", + "description": "Embedded SSH tunnel manager for a configured host" + }, + "metrics_chart": { + "name": "Metrics Chart", + "description": "Historical CPU, memory, disk, or network chart for a host" + } + } }, "permissions": { "use": { @@ -186,5 +318,8 @@ "label": "Magán hitelesítésszolgáltató (PEM)", "description": "Opcionális megbízható CA csomag az engedélyezőlistán szereplő gazdagépekhez. A tanúsítvány-ellenőrzés továbbra is engedélyezve marad. Hagyja üresen a rendszer megbízható tárolójának használatához." } + }, + "plugin": { + "name": "Homepage" } } diff --git a/plugins/homepage/locales/translated/id_ID.json b/plugins/homepage/locales/translated/id_ID.json index 760b3a445..21c2788f1 100644 --- a/plugins/homepage/locales/translated/id_ID.json +++ b/plugins/homepage/locales/translated/id_ID.json @@ -1,190 +1,325 @@ { "nav": { - "homepage": "Homepage" + "homepage": "Beranda" }, "dashboard": { - "serviceLinks": "Service Links", - "homepagePreview": "Homepage Preview" + "serviceLinks": "Tautan Layanan", + "homepagePreview": "Pratinjau Halaman Utama" }, "dashboardTab": { - "serviceLinksTitle": "Service Links", - "serviceLinksEmpty": "No service links yet", - "serviceLinksAdd": "Add", - "serviceLinksLabelPlaceholder": "My Service", + "serviceLinksTitle": "Tautan Layanan", + "serviceLinksEmpty": "Belum ada tautan layanan.", + "serviceLinksAdd": "Menambahkan", + "serviceLinksLabelPlaceholder": "Layanan Saya", "serviceLinksUrlPlaceholder": "http://192.168.1.10:8080", - "serviceLinksInvalidUrl": "Enter a valid web address", - "serviceLinksAddFailed": "Failed to add service link" + "serviceLinksInvalidUrl": "Masukkan alamat web yang valid", + "serviceLinksAddFailed": "Gagal menambahkan tautan layanan" }, "homepage": { - "title": "Homepage", - "addWidget": "Add Widget", - "noWidgetsInCategory": "No widgets in this category", + "title": "Beranda", + "addWidget": "Tambahkan Widget", + "noWidgetsInCategory": "Tidak ada widget dalam kategori ini", "editWidget": "Edit Widget", - "zoomIn": "Zoom In", - "zoomOut": "Zoom Out", - "resetView": "Reset View", - "lockLayout": "Lock Layout", - "unlockLayout": "Unlock Layout", - "noWidgets": "Right-click or click + to add your first widget", - "openFullView": "Open Full View", - "previewTitle": "Homepage Preview", - "cancel": "Cancel", - "save": "Save", - "title_label": "Title", - "widgetTitlePlaceholder": "Widget title (optional)", + "zoomIn": "Perbesar", + "zoomOut": "Perkecil tampilan", + "resetView": "Atur Ulang Tampilan", + "lockLayout": "Tata Letak Kunci", + "unlockLayout": "Buka Tata Letak", + "noWidgets": "Klik kanan atau klik + untuk menambahkan widget pertama Anda.", + "openFullView": "Buka Tampilan Penuh", + "previewTitle": "Pratinjau Halaman Utama", + "cancel": "Membatalkan", + "save": "Menyimpan", + "title_label": "Judul", + "widgetTitlePlaceholder": "Judul widget (opsional)", "url": "URL", - "imageUrl": "Custom Image URL", - "imageUrlHint": "Leave blank to use the site favicon automatically", - "showImage": "Show Image", - "description": "Description", - "color": "Color", - "timezone": "Timezone", - "invalidTimezone": "Invalid timezone. Use an IANA name such as America/New_York", - "showSeconds": "Show seconds", - "format12h": "12-hour", - "content": "Content", - "backgroundColor": "Background Color", - "links": "Links", - "addLink": "Add Link", + "imageUrl": "URL Gambar Kustom", + "imageUrlHint": "Biarkan kosong untuk menggunakan favicon situs secara otomatis.", + "showImage": "Tampilkan Gambar", + "description": "Keterangan", + "color": "Warna", + "timezone": "Zona waktu", + "invalidTimezone": "Zona waktu tidak valid. Gunakan nama IANA seperti America/New_York.", + "showSeconds": "Tampilkan detik", + "format12h": "12 jam", + "content": "Isi", + "backgroundColor": "Warna Latar Belakang", + "links": "Tautan", + "addLink": "Tambahkan Tautan", "linkLabel": "Label", - "categoryLinks": "Links", - "categoryInfo": "Info", - "categorySystem": "System", - "copyLink": "Copy Link", - "linkCopied": "Link copied!", - "location": "Location", - "temperatureUnit": "Temperature Unit", - "showForecast": "Show 3-day forecast", - "scrolling": "Allow Scrolling", - "feedUrl": "Feed URL", - "maxItems": "Max Items", - "showDescription": "Show Description", - "widgetRssName": "RSS Feed", - "rssNoFeedUrl": "Configure a feed URL in widget settings", - "rssLoadError": "Could not load feed", - "rssNoItems": "No items", - "noHostSelected": "No host selected", - "displayedMetrics": "Displayed Metrics", + "categoryLinks": "Tautan", + "categoryInfo": "Informasi", + "categorySystem": "Sistem", + "copyLink": "Salin Tautan", + "linkCopied": "Tautan berhasil disalin!", + "location": "Lokasi", + "temperatureUnit": "Satuan Suhu", + "showForecast": "Tampilkan ramalan cuaca 3 hari ke depan", + "scrolling": "Izinkan Pengguliran", + "feedUrl": "URL Umpan", + "maxItems": "Jumlah Item Maksimum", + "showDescription": "Tampilkan Deskripsi", + "widgetRssName": "Umpan RSS", + "rssNoFeedUrl": "Konfigurasikan URL feed di pengaturan widget.", + "rssLoadError": "Tidak dapat memuat umpan", + "rssNoItems": "Tidak ada barang", + "noHostSelected": "Tidak ada pembawa acara yang dipilih.", + "displayedMetrics": "Metrik yang Ditampilkan", "metricCpu": "CPU", - "metricMemory": "Memory", + "metricMemory": "Ingatan", "metricDisk": "Disk", - "metricUptime": "Uptime", - "metricSystem": "System", - "metricNetwork": "Network", - "metricProcesses": "Processes", - "categoryMonitoring": "Monitoring", - "noPingUrls": "No URLs configured", + "metricUptime": "Waktu aktif", + "metricSystem": "Sistem", + "metricNetwork": "Jaringan", + "metricProcesses": "Proses", + "categoryMonitoring": "Pemantauan", + "noPingUrls": "Tidak ada URL yang dikonfigurasi", "pingLabel": "Label", - "addPingUrl": "Add URL", - "showLatency": "Show Latency", - "refreshInterval": "Refresh Interval", - "seconds": "seconds", - "filterActivityTypes": "Filter Types", - "filterTypesHint": "Leave empty to show all", - "showTimestamp": "Show Timestamp", - "uptimeUnavailable": "Uptime unavailable", - "uptimeLabel": "Uptime", - "overviewVersion": "Version", - "overviewUpdateLabel": "Update", - "overviewUpdateAvailable": "Update available", - "overviewDatabase": "Database", - "overviewUptime": "Uptime", - "noHosts": "No hosts configured", - "hostGridHosts": "Hosts", - "hostGridAllHint": "Leave empty to show all hosts", - "columns": "Columns", - "showIp": "Show IP Address", - "layout": "Layout", - "showStatus": "Show Status", - "noActivity": "No activity", - "widgetPingStatusName": "Ping Status", - "widgetRecentActivityName": "Recent Activity", - "sshTerminalNoHost": "No host configured", - "sshTerminalConnect": "Connect", - "sshTerminalAutoConnect": "Auto-connect on load", - "connectionTypes": "Connection Types", + "addPingUrl": "Tambahkan URL", + "showLatency": "Tampilkan Latensi", + "refreshInterval": "Interval Penyegaran", + "seconds": "detik", + "filterActivityTypes": "Jenis Filter", + "filterTypesHint": "Biarkan kosong untuk menampilkan semua", + "showTimestamp": "Tampilkan Cap Waktu", + "uptimeUnavailable": "Waktu aktif tidak tersedia", + "uptimeLabel": "Waktu aktif", + "overviewVersion": "Versi", + "overviewUpdateLabel": "Memperbarui", + "overviewUpdateAvailable": "Pembaruan tersedia", + "overviewDatabase": "Basis data", + "overviewUptime": "Waktu aktif", + "noHosts": "Tidak ada host yang dikonfigurasi.", + "hostGridHosts": "Tuan rumah", + "hostGridAllHint": "Biarkan kosong untuk menampilkan semua host", + "columns": "Kolom", + "showIp": "Tampilkan Alamat IP", + "layout": "Tata Letak", + "showStatus": "Tampilkan Status", + "noActivity": "Tidak ada kegiatan", + "widgetPingStatusName": "Status Ping", + "widgetRecentActivityName": "Aktivitas Terkini", + "sshTerminalNoHost": "Tidak ada host yang dikonfigurasi.", + "sshTerminalConnect": "Menghubungkan", + "sshTerminalAutoConnect": "Terhubung otomatis saat dimuat", + "connectionTypes": "Jenis Koneksi", "calMon": "Mo", "calTue": "Tu", - "calWed": "We", + "calWed": "Kami", "calThu": "Th", "calFri": "Fr", "calSat": "Sa", "calSun": "Su", - "startOnMonday": "Start week on Monday", - "countdownNoDate": "No target date set", - "countdownPast": "Event has passed", - "countdownDays": "days", - "countdownHours": "hrs", - "countdownMinutes": "min", - "countdownSeconds": "sec", + "startOnMonday": "Minggu dimulai pada hari Senin.", + "countdownNoDate": "Tidak ada tanggal target yang ditetapkan.", + "countdownPast": "Acara telah berlalu", + "countdownDays": "hari", + "countdownHours": "jam", + "countdownMinutes": "menit", + "countdownSeconds": "detik", "countdownLabel": "Label", - "countdownLabelPlaceholder": "e.g. Launch Day", - "countdownShowDays": "Show Days", - "countdownShowHours": "Show Hours", - "targetDate": "Target Date", - "searchEngine": "Search Engine", - "customSearchUrl": "Custom Search URL", - "searchPlaceholder": "Search...", - "searchGo": "Go", - "searchPlaceholderLabel": "Placeholder Text", - "searchPlaceholderHint": "Text shown inside the search input", - "openInNewTab": "Open in New Tab", - "searchQueryPlaceholder": "Enter query...", - "noSearchShortcuts": "No shortcuts configured", - "addSearchShortcut": "Add Shortcut", - "fontSize": "Font Size", - "textAlign": "Text Align", - "fontWeight": "Font Weight", - "clearColor": "Clear Color", - "imageFit": "Image Fit", - "imageLinkUrl": "Link URL", - "noImage": "No image URL set", - "altText": "Alt Text", - "altTextPlaceholder": "Describe the image", + "countdownLabelPlaceholder": "misalnya Hari Peluncuran", + "countdownShowDays": "Hari Pertunjukan", + "countdownShowHours": "Jam Pertunjukan", + "targetDate": "Tanggal Target", + "searchEngine": "Mesin Pencari", + "customSearchUrl": "URL Pencarian Kustom", + "searchPlaceholder": "Mencari...", + "searchGo": "Pergi", + "searchPlaceholderLabel": "Teks Placeholder", + "searchPlaceholderHint": "Teks yang ditampilkan di dalam kolom pencarian", + "openInNewTab": "Buka di Tab Baru", + "searchQueryPlaceholder": "Masukkan pertanyaan...", + "noSearchShortcuts": "Tidak ada pintasan yang dikonfigurasi.", + "addSearchShortcut": "Tambahkan Pintasan", + "fontSize": "Ukuran Huruf", + "textAlign": "Perataan Teks", + "fontWeight": "Ketebalan Huruf", + "clearColor": "Warna Bening", + "imageFit": "Pencocokan Gambar", + "imageLinkUrl": "Tautan URL", + "noImage": "Tidak ada URL gambar yang ditetapkan.", + "altText": "Teks Alternatif", + "altTextPlaceholder": "Jelaskan gambar tersebut", "renderMarkdown": "Render Markdown", - "displayMode": "Display Mode", - "displayField": "Display Field", - "jsonPath": "JSON Path", + "displayMode": "Mode Tampilan", + "displayField": "Bidang Tampilan", + "jsonPath": "Jalur JSON", "customApiLabel": "Label", - "customApiLabelPlaceholder": "e.g. Temperature", - "customApiUnit": "Unit", - "customApiNoUrl": "No API URL configured", - "customApiError": "Failed to fetch", - "customApiNotArray": "Response is not an array", - "addService": "Add Service", - "showLabels": "Show Labels", - "iconSize": "Icon Size", - "noDashboardLinks": "No dashboard links configured", - "noLimit": "No limit", - "sectionHeading": "Section Heading", - "addSection": "Add Section", - "compactMode": "Compact Mode", - "selectHosts": "Select Hosts", - "listLayout": "List", - "gridLayout": "Grid", - "configureUrl": "Set a URL in the widget settings", - "embeddedContent": "Embedded content", - "noBookmarks": "No bookmarks", - "noSections": "No sections set up", - "noServices": "No services set up", - "configureLocation": "Set a location in the widget settings", - "bannerTextPlaceholder": "Banner text", - "serviceNamePlaceholder": "My service" + "customApiLabelPlaceholder": "misalnya Suhu", + "customApiUnit": "Satuan", + "customApiNoUrl": "Tidak ada URL API yang dikonfigurasi.", + "customApiError": "Gagal mengambil", + "customApiNotArray": "Respons bukanlah sebuah array.", + "addService": "Tambahkan Layanan", + "showLabels": "Tampilkan Label", + "iconSize": "Ukuran Ikon", + "noDashboardLinks": "Tidak ada tautan dasbor yang dikonfigurasi.", + "noLimit": "Tidak ada batasan", + "sectionHeading": "Judul Bagian", + "addSection": "Tambahkan Bagian", + "compactMode": "Mode Ringkas", + "selectHosts": "Pilih Host", + "listLayout": "Daftar", + "gridLayout": "Jaringan", + "configureUrl": "Tetapkan URL di pengaturan widget.", + "embeddedContent": "Konten tersemat", + "noBookmarks": "Tidak ada bookmark", + "noSections": "Tidak ada bagian yang disiapkan", + "noServices": "Tidak ada layanan yang disiapkan.", + "configureLocation": "Tetapkan lokasi di pengaturan widget.", + "bannerTextPlaceholder": "Teks spanduk", + "serviceNamePlaceholder": "Layanan saya", + "emptyNote": "Empty note...", + "weatherLoadFailed": "Could not load weather for \"{{location}}\"", + "feelsLike": "Feels like {{temperature}}", + "timezonePlaceholder": "America/New_York (leave blank for local)", + "notesPlaceholder": "Write your notes here...", + "locationPlaceholder": "New York, London, Tokyo...", + "widgets": { + "bookmark_list": { + "name": "Bookmarks", + "description": "A list of quick links" + }, + "calendar": { + "name": "Calendar", + "description": "A month calendar with today highlighted" + }, + "clock": { + "name": "Clock", + "description": "A live clock with configurable timezone" + }, + "countdown": { + "name": "Countdown", + "description": "Counts down to a target date and time" + }, + "custom_api": { + "name": "Custom API", + "description": "Fetch and display data from any JSON API" + }, + "dashboard_links": { + "name": "Dashboard Links", + "description": "Shows your saved dashboard service links" + }, + "folder": { + "name": "Folder", + "description": "A background card for grouping widgets visually" + }, + "host_grid": { + "name": "Host Grid", + "description": "Live status overview grid for all your SSH hosts" + }, + "host_status": { + "name": "Host Status", + "description": "Shows live status and metrics for an SSH host" + }, + "iframe_embed": { + "name": "iFrame Embed", + "description": "Embed any URL in an iframe" + }, + "image_widget": { + "name": "Image", + "description": "Display any image from a URL" + }, + "link_tree": { + "name": "Link Tree", + "description": "Grouped links organized into labeled sections" + }, + "markdown_notes": { + "name": "Markdown Notes", + "description": "Notes with optional Markdown rendering and inline editing" + }, + "notes": { + "name": "Notes", + "description": "A text notes widget" + }, + "ping_status": { + "name": "Ping Status", + "description": "Check if URLs or services are reachable" + }, + "quick_connect": { + "name": "Quick Connect", + "description": "Launch terminal, files, docker, tunnels, and more for your hosts" + }, + "recent_activity": { + "name": "Recent Activity", + "description": "Shows recent terminal, Docker, file, and tunnel activity" + }, + "rss_feed": { + "name": "RSS Feed", + "description": "Display items from an RSS or Atom feed" + }, + "search_bar": { + "name": "Search Bar", + "description": "Quick search with Google, DuckDuckGo, Bing, or a custom engine" + }, + "search_links": { + "name": "Search Shortcuts", + "description": "Quick buttons to search different engines" + }, + "service_grid": { + "name": "Service Grid", + "description": "A grid of service tiles with icons and links" + }, + "service_link": { + "name": "Service Link", + "description": "A clickable tile linking to a service URL" + }, + "ssh_terminal": { + "name": "SSH Terminal", + "description": "An inline SSH terminal connected to a configured host" + }, + "system_overview": { + "name": "System Overview", + "description": "Termix version, database health, and uptime at a glance" + }, + "termix_uptime": { + "name": "Termix Uptime", + "description": "Shows how long the Termix server has been running" + }, + "text_banner": { + "name": "Text Banner", + "description": "A styled text label for sections and headings" + }, + "weather": { + "name": "Weather", + "description": "Live weather for any location" + }, + "docker_widget": { + "name": "Docker Manager", + "description": "Embedded Docker container manager for a configured host" + }, + "file_manager_widget": { + "name": "File Manager", + "description": "Embedded SFTP file manager for a configured host" + }, + "tunnel_widget": { + "name": "Tunnel Manager", + "description": "Embedded SSH tunnel manager for a configured host" + }, + "metrics_chart": { + "name": "Metrics Chart", + "description": "Historical CPU, memory, disk, or network chart for a host" + } + } }, "permissions": { "use": { - "title": "Use the homepage", - "description": "View and edit the homepage canvas and dashboard service links." + "title": "Gunakan halaman beranda", + "description": "Lihat dan edit kanvas halaman beranda dan tautan layanan dasbor." } }, "settings": { "privateEndpoints": { - "label": "Allowed private hosts", - "description": "Exact private or loopback hostnames/IPs for Ping Status and Custom API widgets. Separate entries with commas or newlines; omit schemes, ports and paths. Empty blocks private destinations." + "label": "Host pribadi yang diizinkan", + "description": "Nama host/IP privat atau loopback yang tepat untuk widget Status Ping dan API Kustom. Pisahkan entri dengan koma atau baris baru; hilangkan skema, port, dan jalur. Blok kosong untuk tujuan privat." }, "privateCertificateAuthority": { - "label": "Private certificate authority (PEM)", - "description": "Optional trusted CA bundle for allowlisted hosts. Certificate verification remains enabled. Leave empty to use the system trust store." + "label": "Lembaga sertifikasi swasta (PEM)", + "description": "Bundel CA tepercaya opsional untuk host yang diizinkan. Verifikasi sertifikat tetap diaktifkan. Biarkan kosong untuk menggunakan penyimpanan tepercaya sistem." } + }, + "plugin": { + "name": "Homepage" } } diff --git a/plugins/homepage/locales/translated/it_IT.json b/plugins/homepage/locales/translated/it_IT.json index de1a95336..2214302b9 100644 --- a/plugins/homepage/locales/translated/it_IT.json +++ b/plugins/homepage/locales/translated/it_IT.json @@ -169,7 +169,139 @@ "noServices": "Nessun servizio configurato", "configureLocation": "Imposta una posizione nelle impostazioni del widget", "bannerTextPlaceholder": "Testo del banner", - "serviceNamePlaceholder": "Il mio servizio" + "serviceNamePlaceholder": "Il mio servizio", + "emptyNote": "Empty note...", + "weatherLoadFailed": "Could not load weather for \"{{location}}\"", + "feelsLike": "Feels like {{temperature}}", + "timezonePlaceholder": "America/New_York (leave blank for local)", + "notesPlaceholder": "Write your notes here...", + "locationPlaceholder": "New York, London, Tokyo...", + "widgets": { + "bookmark_list": { + "name": "Bookmarks", + "description": "A list of quick links" + }, + "calendar": { + "name": "Calendar", + "description": "A month calendar with today highlighted" + }, + "clock": { + "name": "Clock", + "description": "A live clock with configurable timezone" + }, + "countdown": { + "name": "Countdown", + "description": "Counts down to a target date and time" + }, + "custom_api": { + "name": "Custom API", + "description": "Fetch and display data from any JSON API" + }, + "dashboard_links": { + "name": "Dashboard Links", + "description": "Shows your saved dashboard service links" + }, + "folder": { + "name": "Folder", + "description": "A background card for grouping widgets visually" + }, + "host_grid": { + "name": "Host Grid", + "description": "Live status overview grid for all your SSH hosts" + }, + "host_status": { + "name": "Host Status", + "description": "Shows live status and metrics for an SSH host" + }, + "iframe_embed": { + "name": "iFrame Embed", + "description": "Embed any URL in an iframe" + }, + "image_widget": { + "name": "Image", + "description": "Display any image from a URL" + }, + "link_tree": { + "name": "Link Tree", + "description": "Grouped links organized into labeled sections" + }, + "markdown_notes": { + "name": "Markdown Notes", + "description": "Notes with optional Markdown rendering and inline editing" + }, + "notes": { + "name": "Notes", + "description": "A text notes widget" + }, + "ping_status": { + "name": "Ping Status", + "description": "Check if URLs or services are reachable" + }, + "quick_connect": { + "name": "Quick Connect", + "description": "Launch terminal, files, docker, tunnels, and more for your hosts" + }, + "recent_activity": { + "name": "Recent Activity", + "description": "Shows recent terminal, Docker, file, and tunnel activity" + }, + "rss_feed": { + "name": "RSS Feed", + "description": "Display items from an RSS or Atom feed" + }, + "search_bar": { + "name": "Search Bar", + "description": "Quick search with Google, DuckDuckGo, Bing, or a custom engine" + }, + "search_links": { + "name": "Search Shortcuts", + "description": "Quick buttons to search different engines" + }, + "service_grid": { + "name": "Service Grid", + "description": "A grid of service tiles with icons and links" + }, + "service_link": { + "name": "Service Link", + "description": "A clickable tile linking to a service URL" + }, + "ssh_terminal": { + "name": "SSH Terminal", + "description": "An inline SSH terminal connected to a configured host" + }, + "system_overview": { + "name": "System Overview", + "description": "Termix version, database health, and uptime at a glance" + }, + "termix_uptime": { + "name": "Termix Uptime", + "description": "Shows how long the Termix server has been running" + }, + "text_banner": { + "name": "Text Banner", + "description": "A styled text label for sections and headings" + }, + "weather": { + "name": "Weather", + "description": "Live weather for any location" + }, + "docker_widget": { + "name": "Docker Manager", + "description": "Embedded Docker container manager for a configured host" + }, + "file_manager_widget": { + "name": "File Manager", + "description": "Embedded SFTP file manager for a configured host" + }, + "tunnel_widget": { + "name": "Tunnel Manager", + "description": "Embedded SSH tunnel manager for a configured host" + }, + "metrics_chart": { + "name": "Metrics Chart", + "description": "Historical CPU, memory, disk, or network chart for a host" + } + } }, "permissions": { "use": { @@ -186,5 +318,8 @@ "label": "Autorità di certificazione privata (PEM)", "description": "Pacchetto CA attendibile opzionale per gli host consentiti. La verifica del certificato rimane abilitata. Lasciare vuoto per utilizzare l'archivio di certificati attendibili del sistema." } + }, + "plugin": { + "name": "Homepage" } } diff --git a/plugins/homepage/locales/translated/ja_JP.json b/plugins/homepage/locales/translated/ja_JP.json index a6fc864f3..26945c450 100644 --- a/plugins/homepage/locales/translated/ja_JP.json +++ b/plugins/homepage/locales/translated/ja_JP.json @@ -169,7 +169,139 @@ "noServices": "サービスが設定されていません", "configureLocation": "ウィジェットの設定で場所を設定してください", "bannerTextPlaceholder": "バナーテキスト", - "serviceNamePlaceholder": "私のサービス" + "serviceNamePlaceholder": "私のサービス", + "emptyNote": "Empty note...", + "weatherLoadFailed": "Could not load weather for \"{{location}}\"", + "feelsLike": "Feels like {{temperature}}", + "timezonePlaceholder": "America/New_York (leave blank for local)", + "notesPlaceholder": "Write your notes here...", + "locationPlaceholder": "New York, London, Tokyo...", + "widgets": { + "bookmark_list": { + "name": "Bookmarks", + "description": "A list of quick links" + }, + "calendar": { + "name": "Calendar", + "description": "A month calendar with today highlighted" + }, + "clock": { + "name": "Clock", + "description": "A live clock with configurable timezone" + }, + "countdown": { + "name": "Countdown", + "description": "Counts down to a target date and time" + }, + "custom_api": { + "name": "Custom API", + "description": "Fetch and display data from any JSON API" + }, + "dashboard_links": { + "name": "Dashboard Links", + "description": "Shows your saved dashboard service links" + }, + "folder": { + "name": "Folder", + "description": "A background card for grouping widgets visually" + }, + "host_grid": { + "name": "Host Grid", + "description": "Live status overview grid for all your SSH hosts" + }, + "host_status": { + "name": "Host Status", + "description": "Shows live status and metrics for an SSH host" + }, + "iframe_embed": { + "name": "iFrame Embed", + "description": "Embed any URL in an iframe" + }, + "image_widget": { + "name": "Image", + "description": "Display any image from a URL" + }, + "link_tree": { + "name": "Link Tree", + "description": "Grouped links organized into labeled sections" + }, + "markdown_notes": { + "name": "Markdown Notes", + "description": "Notes with optional Markdown rendering and inline editing" + }, + "notes": { + "name": "Notes", + "description": "A text notes widget" + }, + "ping_status": { + "name": "Ping Status", + "description": "Check if URLs or services are reachable" + }, + "quick_connect": { + "name": "Quick Connect", + "description": "Launch terminal, files, docker, tunnels, and more for your hosts" + }, + "recent_activity": { + "name": "Recent Activity", + "description": "Shows recent terminal, Docker, file, and tunnel activity" + }, + "rss_feed": { + "name": "RSS Feed", + "description": "Display items from an RSS or Atom feed" + }, + "search_bar": { + "name": "Search Bar", + "description": "Quick search with Google, DuckDuckGo, Bing, or a custom engine" + }, + "search_links": { + "name": "Search Shortcuts", + "description": "Quick buttons to search different engines" + }, + "service_grid": { + "name": "Service Grid", + "description": "A grid of service tiles with icons and links" + }, + "service_link": { + "name": "Service Link", + "description": "A clickable tile linking to a service URL" + }, + "ssh_terminal": { + "name": "SSH Terminal", + "description": "An inline SSH terminal connected to a configured host" + }, + "system_overview": { + "name": "System Overview", + "description": "Termix version, database health, and uptime at a glance" + }, + "termix_uptime": { + "name": "Termix Uptime", + "description": "Shows how long the Termix server has been running" + }, + "text_banner": { + "name": "Text Banner", + "description": "A styled text label for sections and headings" + }, + "weather": { + "name": "Weather", + "description": "Live weather for any location" + }, + "docker_widget": { + "name": "Docker Manager", + "description": "Embedded Docker container manager for a configured host" + }, + "file_manager_widget": { + "name": "File Manager", + "description": "Embedded SFTP file manager for a configured host" + }, + "tunnel_widget": { + "name": "Tunnel Manager", + "description": "Embedded SSH tunnel manager for a configured host" + }, + "metrics_chart": { + "name": "Metrics Chart", + "description": "Historical CPU, memory, disk, or network chart for a host" + } + } }, "permissions": { "use": { @@ -186,5 +318,8 @@ "label": "民間認証局(PEM)", "description": "許可リストに登録されたホスト用のオプションの信頼できる認証局(CA)バンドル。証明書の検証は引き続き有効です。システムトラストストアを使用する場合は、空欄のままにしてください。" } + }, + "plugin": { + "name": "Homepage" } } diff --git a/plugins/homepage/locales/translated/ko_KR.json b/plugins/homepage/locales/translated/ko_KR.json index 7652c9b25..02a841627 100644 --- a/plugins/homepage/locales/translated/ko_KR.json +++ b/plugins/homepage/locales/translated/ko_KR.json @@ -169,7 +169,139 @@ "noServices": "설정된 서비스가 없습니다", "configureLocation": "위젯 설정에서 위치를 지정하세요", "bannerTextPlaceholder": "배너 텍스트", - "serviceNamePlaceholder": "내 서비스" + "serviceNamePlaceholder": "내 서비스", + "emptyNote": "Empty note...", + "weatherLoadFailed": "Could not load weather for \"{{location}}\"", + "feelsLike": "Feels like {{temperature}}", + "timezonePlaceholder": "America/New_York (leave blank for local)", + "notesPlaceholder": "Write your notes here...", + "locationPlaceholder": "New York, London, Tokyo...", + "widgets": { + "bookmark_list": { + "name": "Bookmarks", + "description": "A list of quick links" + }, + "calendar": { + "name": "Calendar", + "description": "A month calendar with today highlighted" + }, + "clock": { + "name": "Clock", + "description": "A live clock with configurable timezone" + }, + "countdown": { + "name": "Countdown", + "description": "Counts down to a target date and time" + }, + "custom_api": { + "name": "Custom API", + "description": "Fetch and display data from any JSON API" + }, + "dashboard_links": { + "name": "Dashboard Links", + "description": "Shows your saved dashboard service links" + }, + "folder": { + "name": "Folder", + "description": "A background card for grouping widgets visually" + }, + "host_grid": { + "name": "Host Grid", + "description": "Live status overview grid for all your SSH hosts" + }, + "host_status": { + "name": "Host Status", + "description": "Shows live status and metrics for an SSH host" + }, + "iframe_embed": { + "name": "iFrame Embed", + "description": "Embed any URL in an iframe" + }, + "image_widget": { + "name": "Image", + "description": "Display any image from a URL" + }, + "link_tree": { + "name": "Link Tree", + "description": "Grouped links organized into labeled sections" + }, + "markdown_notes": { + "name": "Markdown Notes", + "description": "Notes with optional Markdown rendering and inline editing" + }, + "notes": { + "name": "Notes", + "description": "A text notes widget" + }, + "ping_status": { + "name": "Ping Status", + "description": "Check if URLs or services are reachable" + }, + "quick_connect": { + "name": "Quick Connect", + "description": "Launch terminal, files, docker, tunnels, and more for your hosts" + }, + "recent_activity": { + "name": "Recent Activity", + "description": "Shows recent terminal, Docker, file, and tunnel activity" + }, + "rss_feed": { + "name": "RSS Feed", + "description": "Display items from an RSS or Atom feed" + }, + "search_bar": { + "name": "Search Bar", + "description": "Quick search with Google, DuckDuckGo, Bing, or a custom engine" + }, + "search_links": { + "name": "Search Shortcuts", + "description": "Quick buttons to search different engines" + }, + "service_grid": { + "name": "Service Grid", + "description": "A grid of service tiles with icons and links" + }, + "service_link": { + "name": "Service Link", + "description": "A clickable tile linking to a service URL" + }, + "ssh_terminal": { + "name": "SSH Terminal", + "description": "An inline SSH terminal connected to a configured host" + }, + "system_overview": { + "name": "System Overview", + "description": "Termix version, database health, and uptime at a glance" + }, + "termix_uptime": { + "name": "Termix Uptime", + "description": "Shows how long the Termix server has been running" + }, + "text_banner": { + "name": "Text Banner", + "description": "A styled text label for sections and headings" + }, + "weather": { + "name": "Weather", + "description": "Live weather for any location" + }, + "docker_widget": { + "name": "Docker Manager", + "description": "Embedded Docker container manager for a configured host" + }, + "file_manager_widget": { + "name": "File Manager", + "description": "Embedded SFTP file manager for a configured host" + }, + "tunnel_widget": { + "name": "Tunnel Manager", + "description": "Embedded SSH tunnel manager for a configured host" + }, + "metrics_chart": { + "name": "Metrics Chart", + "description": "Historical CPU, memory, disk, or network chart for a host" + } + } }, "permissions": { "use": { @@ -186,5 +318,8 @@ "label": "민간 인증 기관(PEM)", "description": "허용 목록에 있는 호스트에 대한 선택적 신뢰 CA 번들입니다. 인증서 검증은 계속 활성화됩니다. 시스템 신뢰 저장소를 사용하려면 비워 두십시오." } + }, + "plugin": { + "name": "Homepage" } } diff --git a/plugins/homepage/locales/translated/nl_NL.json b/plugins/homepage/locales/translated/nl_NL.json index aabf00f45..2d077eb9a 100644 --- a/plugins/homepage/locales/translated/nl_NL.json +++ b/plugins/homepage/locales/translated/nl_NL.json @@ -169,7 +169,139 @@ "noServices": "Geen services ingesteld", "configureLocation": "Stel een locatie in in de widgetinstellingen.", "bannerTextPlaceholder": "Bannertekst", - "serviceNamePlaceholder": "Mijn service" + "serviceNamePlaceholder": "Mijn service", + "emptyNote": "Empty note...", + "weatherLoadFailed": "Could not load weather for \"{{location}}\"", + "feelsLike": "Feels like {{temperature}}", + "timezonePlaceholder": "America/New_York (leave blank for local)", + "notesPlaceholder": "Write your notes here...", + "locationPlaceholder": "New York, London, Tokyo...", + "widgets": { + "bookmark_list": { + "name": "Bookmarks", + "description": "A list of quick links" + }, + "calendar": { + "name": "Calendar", + "description": "A month calendar with today highlighted" + }, + "clock": { + "name": "Clock", + "description": "A live clock with configurable timezone" + }, + "countdown": { + "name": "Countdown", + "description": "Counts down to a target date and time" + }, + "custom_api": { + "name": "Custom API", + "description": "Fetch and display data from any JSON API" + }, + "dashboard_links": { + "name": "Dashboard Links", + "description": "Shows your saved dashboard service links" + }, + "folder": { + "name": "Folder", + "description": "A background card for grouping widgets visually" + }, + "host_grid": { + "name": "Host Grid", + "description": "Live status overview grid for all your SSH hosts" + }, + "host_status": { + "name": "Host Status", + "description": "Shows live status and metrics for an SSH host" + }, + "iframe_embed": { + "name": "iFrame Embed", + "description": "Embed any URL in an iframe" + }, + "image_widget": { + "name": "Image", + "description": "Display any image from a URL" + }, + "link_tree": { + "name": "Link Tree", + "description": "Grouped links organized into labeled sections" + }, + "markdown_notes": { + "name": "Markdown Notes", + "description": "Notes with optional Markdown rendering and inline editing" + }, + "notes": { + "name": "Notes", + "description": "A text notes widget" + }, + "ping_status": { + "name": "Ping Status", + "description": "Check if URLs or services are reachable" + }, + "quick_connect": { + "name": "Quick Connect", + "description": "Launch terminal, files, docker, tunnels, and more for your hosts" + }, + "recent_activity": { + "name": "Recent Activity", + "description": "Shows recent terminal, Docker, file, and tunnel activity" + }, + "rss_feed": { + "name": "RSS Feed", + "description": "Display items from an RSS or Atom feed" + }, + "search_bar": { + "name": "Search Bar", + "description": "Quick search with Google, DuckDuckGo, Bing, or a custom engine" + }, + "search_links": { + "name": "Search Shortcuts", + "description": "Quick buttons to search different engines" + }, + "service_grid": { + "name": "Service Grid", + "description": "A grid of service tiles with icons and links" + }, + "service_link": { + "name": "Service Link", + "description": "A clickable tile linking to a service URL" + }, + "ssh_terminal": { + "name": "SSH Terminal", + "description": "An inline SSH terminal connected to a configured host" + }, + "system_overview": { + "name": "System Overview", + "description": "Termix version, database health, and uptime at a glance" + }, + "termix_uptime": { + "name": "Termix Uptime", + "description": "Shows how long the Termix server has been running" + }, + "text_banner": { + "name": "Text Banner", + "description": "A styled text label for sections and headings" + }, + "weather": { + "name": "Weather", + "description": "Live weather for any location" + }, + "docker_widget": { + "name": "Docker Manager", + "description": "Embedded Docker container manager for a configured host" + }, + "file_manager_widget": { + "name": "File Manager", + "description": "Embedded SFTP file manager for a configured host" + }, + "tunnel_widget": { + "name": "Tunnel Manager", + "description": "Embedded SSH tunnel manager for a configured host" + }, + "metrics_chart": { + "name": "Metrics Chart", + "description": "Historical CPU, memory, disk, or network chart for a host" + } + } }, "permissions": { "use": { @@ -186,5 +318,8 @@ "label": "Particuliere certificeringsinstantie (PEM)", "description": "Optioneel pakket met vertrouwde CA's voor hosts op de whitelist. Certificaatverificatie blijft ingeschakeld. Laat dit veld leeg om de systeemvertrouwensarchief te gebruiken." } + }, + "plugin": { + "name": "Homepage" } } diff --git a/plugins/homepage/locales/translated/no_NO.json b/plugins/homepage/locales/translated/no_NO.json index f6883a6e7..ad9a1fa6c 100644 --- a/plugins/homepage/locales/translated/no_NO.json +++ b/plugins/homepage/locales/translated/no_NO.json @@ -1,70 +1,70 @@ { "nav": { - "homepage": "Homepage" + "homepage": "Hjemmeside" }, "dashboard": { - "serviceLinks": "Service Links", - "homepagePreview": "Homepage Preview" + "serviceLinks": "Tjenestelenker", + "homepagePreview": "Forhåndsvisning av hjemmeside" }, "dashboardTab": { - "serviceLinksTitle": "Service Links", - "serviceLinksEmpty": "No service links yet", + "serviceLinksTitle": "Tjenestelenker", + "serviceLinksEmpty": "Ingen tjenestelenker ennå", "serviceLinksAdd": "Legg til", - "serviceLinksLabelPlaceholder": "My Service", + "serviceLinksLabelPlaceholder": "Min tjeneste", "serviceLinksUrlPlaceholder": "http://192.168.1.10:8080", - "serviceLinksInvalidUrl": "Enter a valid web address", - "serviceLinksAddFailed": "Failed to add service link" + "serviceLinksInvalidUrl": "Skriv inn en gyldig nettadresse", + "serviceLinksAddFailed": "Kunne ikke legge til tjenestelenke" }, "homepage": { - "title": "Homepage", + "title": "Hjemmeside", "addWidget": "Legg til widget", - "noWidgetsInCategory": "No widgets in this category", - "editWidget": "Edit Widget", + "noWidgetsInCategory": "Ingen widgeter i denne kategorien", + "editWidget": "Rediger widget", "zoomIn": "Zoom inn", "zoomOut": "Zoom ut", - "resetView": "Reset View", - "lockLayout": "Lock Layout", - "unlockLayout": "Unlock Layout", - "noWidgets": "Right-click or click + to add your first widget", - "openFullView": "Open Full View", - "previewTitle": "Homepage Preview", + "resetView": "Tilbakestill visning", + "lockLayout": "Låseoppsett", + "unlockLayout": "Lås opp oppsett", + "noWidgets": "Høyreklikk eller klikk på + for å legge til din første widget", + "openFullView": "Åpne full visning", + "previewTitle": "Forhåndsvisning av hjemmeside", "cancel": "Avbryt", "save": "Lagre", - "title_label": "Title", - "widgetTitlePlaceholder": "Widget title (optional)", - "url": "URL", - "imageUrl": "Custom Image URL", - "imageUrlHint": "Leave blank to use the site favicon automatically", - "showImage": "Show Image", + "title_label": "Tittel", + "widgetTitlePlaceholder": "Widgettittel (valgfritt)", + "url": "URL-adresse", + "imageUrl": "Tilpasset bilde-URL", + "imageUrlHint": "La feltet stå tomt for å bruke nettstedets favicon automatisk", + "showImage": "Vis bilde", "description": "Beskrivelse", - "color": "Color", - "timezone": "Timezone", - "invalidTimezone": "Invalid timezone. Use an IANA name such as America/New_York", - "showSeconds": "Show seconds", - "format12h": "12-hour", - "content": "Content", - "backgroundColor": "Background Color", + "color": "Farge", + "timezone": "Tidssone", + "invalidTimezone": "Ugyldig tidssone. Bruk et IANA-navn, for eksempel America/New_York.", + "showSeconds": "Vis sekunder", + "format12h": "12-timers", + "content": "Innhold", + "backgroundColor": "Bakgrunnsfarge", "links": "Lenker", - "addLink": "Add Link", - "linkLabel": "Label", + "addLink": "Legg til lenke", + "linkLabel": "Merkelapp", "categoryLinks": "Lenker", "categoryInfo": "Info", "categorySystem": "System", - "copyLink": "Copy Link", - "linkCopied": "Link copied!", - "location": "Location", - "temperatureUnit": "Temperature Unit", - "showForecast": "Show 3-day forecast", - "scrolling": "Allow Scrolling", - "feedUrl": "Feed URL", - "maxItems": "Max Items", - "showDescription": "Show Description", - "widgetRssName": "RSS Feed", - "rssNoFeedUrl": "Configure a feed URL in widget settings", - "rssLoadError": "Could not load feed", - "rssNoItems": "No items", + "copyLink": "Kopier lenke", + "linkCopied": "Lenken er kopiert!", + "location": "Sted", + "temperatureUnit": "Temperaturenhet", + "showForecast": "Vis 3-dagers værmelding", + "scrolling": "Tillat rulling", + "feedUrl": "Nettadresse for feeden", + "maxItems": "Maksimalt antall varer", + "showDescription": "Vis beskrivelse", + "widgetRssName": "RSS-feed", + "rssNoFeedUrl": "Konfigurer en feed-URL i widget-innstillingene", + "rssLoadError": "Kunne ikke laste inn feeden", + "rssNoItems": "Ingen varer", "noHostSelected": "Ingen vert valgt", - "displayedMetrics": "Displayed Metrics", + "displayedMetrics": "Viste målinger", "metricCpu": "CPU", "metricMemory": "Minne", "metricDisk": "Disk", @@ -72,119 +72,254 @@ "metricSystem": "System", "metricNetwork": "Nettverk", "metricProcesses": "Prosesser", - "categoryMonitoring": "Monitoring", - "noPingUrls": "No URLs configured", - "pingLabel": "Label", - "addPingUrl": "Add URL", - "showLatency": "Show Latency", - "refreshInterval": "Refresh Interval", + "categoryMonitoring": "Overvåking", + "noPingUrls": "Ingen nettadresser konfigurert", + "pingLabel": "Merkelapp", + "addPingUrl": "Legg til nettadresse", + "showLatency": "Vis latens", + "refreshInterval": "Oppdateringsintervall", "seconds": "sekunder", - "filterActivityTypes": "Filter Types", - "filterTypesHint": "Leave empty to show all", - "showTimestamp": "Show Timestamp", - "uptimeUnavailable": "Uptime unavailable", + "filterActivityTypes": "Filtertyper", + "filterTypesHint": "La stå tomt for å vise alle", + "showTimestamp": "Vis tidsstempel", + "uptimeUnavailable": "Oppetid utilgjengelig", "uptimeLabel": "Oppetid", "overviewVersion": "Versjon", - "overviewUpdateLabel": "Update", - "overviewUpdateAvailable": "Update available", + "overviewUpdateLabel": "Oppdatering", + "overviewUpdateAvailable": "Oppdatering tilgjengelig", "overviewDatabase": "Database", "overviewUptime": "Oppetid", - "noHosts": "No hosts configured", + "noHosts": "Ingen verter konfigurert", "hostGridHosts": "Verter", - "hostGridAllHint": "Leave empty to show all hosts", - "columns": "Columns", - "showIp": "Show IP Address", - "layout": "Layout", - "showStatus": "Show Status", - "noActivity": "No activity", - "widgetPingStatusName": "Ping Status", + "hostGridAllHint": "La stå tomt for å vise alle verter", + "columns": "Kolonner", + "showIp": "Vis IP-adresse", + "layout": "Oppsett", + "showStatus": "Vis status", + "noActivity": "Ingen aktivitet", + "widgetPingStatusName": "Ping-status", "widgetRecentActivityName": "Nylig aktivitet", - "sshTerminalNoHost": "No host configured", + "sshTerminalNoHost": "Ingen vert konfigurert", "sshTerminalConnect": "Koble til", - "sshTerminalAutoConnect": "Auto-connect on load", - "connectionTypes": "Connection Types", + "sshTerminalAutoConnect": "Automatisk tilkobling ved lasting", + "connectionTypes": "Tilkoblingstyper", "calMon": "Mo", - "calTue": "Tu", - "calWed": "We", - "calThu": "Th", + "calTue": "Ti", + "calWed": "Vi", + "calThu": "To", "calFri": "Fr", - "calSat": "Sa", - "calSun": "Su", - "startOnMonday": "Start week on Monday", - "countdownNoDate": "No target date set", - "countdownPast": "Event has passed", - "countdownDays": "days", - "countdownHours": "hrs", + "calSat": "Lø", + "calSun": "Søn", + "startOnMonday": "Start uken på mandag", + "countdownNoDate": "Ingen måldato angitt", + "countdownPast": "Arrangementet har gått", + "countdownDays": "dager", + "countdownHours": "timer", "countdownMinutes": "min", - "countdownSeconds": "sec", - "countdownLabel": "Label", - "countdownLabelPlaceholder": "e.g. Launch Day", - "countdownShowDays": "Show Days", - "countdownShowHours": "Show Hours", - "targetDate": "Target Date", - "searchEngine": "Search Engine", - "customSearchUrl": "Custom Search URL", - "searchPlaceholder": "Search...", - "searchGo": "Go", - "searchPlaceholderLabel": "Placeholder Text", - "searchPlaceholderHint": "Text shown inside the search input", - "openInNewTab": "Open in New Tab", - "searchQueryPlaceholder": "Enter query...", - "noSearchShortcuts": "No shortcuts configured", - "addSearchShortcut": "Add Shortcut", + "countdownSeconds": "sek", + "countdownLabel": "Merkelapp", + "countdownLabelPlaceholder": "f.eks. lanseringsdag", + "countdownShowDays": "Vis dager", + "countdownShowHours": "Åpningstider", + "targetDate": "Måldato", + "searchEngine": "Søkemotor", + "customSearchUrl": "Tilpasset søke-URL", + "searchPlaceholder": "Søk...", + "searchGo": "Gå", + "searchPlaceholderLabel": "Plassholdertekst", + "searchPlaceholderHint": "Tekst vist i søkefeltet", + "openInNewTab": "Åpne i ny fane", + "searchQueryPlaceholder": "Skriv inn spørring...", + "noSearchShortcuts": "Ingen snarveier konfigurert", + "addSearchShortcut": "Legg til snarvei", "fontSize": "Skriftstørrelse", - "textAlign": "Text Align", - "fontWeight": "Font Weight", - "clearColor": "Clear Color", - "imageFit": "Image Fit", - "imageLinkUrl": "Link URL", - "noImage": "No image URL set", - "altText": "Alt Text", - "altTextPlaceholder": "Describe the image", - "renderMarkdown": "Render Markdown", - "displayMode": "Display Mode", - "displayField": "Display Field", - "jsonPath": "JSON Path", - "customApiLabel": "Label", - "customApiLabelPlaceholder": "e.g. Temperature", - "customApiUnit": "Unit", - "customApiNoUrl": "No API URL configured", - "customApiError": "Failed to fetch", - "customApiNotArray": "Response is not an array", - "addService": "Add Service", - "showLabels": "Show Labels", - "iconSize": "Icon Size", - "noDashboardLinks": "No dashboard links configured", - "noLimit": "No limit", - "sectionHeading": "Section Heading", - "addSection": "Add Section", - "compactMode": "Compact Mode", - "selectHosts": "Select Hosts", + "textAlign": "Tekstjustering", + "fontWeight": "Skriftvekt", + "clearColor": "Klar farge", + "imageFit": "Bildetilpasning", + "imageLinkUrl": "Lenke-URL", + "noImage": "Ingen bilde-URL angitt", + "altText": "Alternativ tekst", + "altTextPlaceholder": "Beskriv bildet", + "renderMarkdown": "Gjengivelsesmarkering", + "displayMode": "Visningsmodus", + "displayField": "Visningsfelt", + "jsonPath": "JSON-sti", + "customApiLabel": "Merkelapp", + "customApiLabelPlaceholder": "f.eks. Temperatur", + "customApiUnit": "Enhet", + "customApiNoUrl": "Ingen API-URL konfigurert", + "customApiError": "Kunne ikke hente", + "customApiNotArray": "Responsen er ikke en matrise", + "addService": "Legg til tjeneste", + "showLabels": "Vis etiketter", + "iconSize": "Ikonstørrelse", + "noDashboardLinks": "Ingen dashbordlenker konfigurert", + "noLimit": "Ingen grense", + "sectionHeading": "Seksjonsoverskrift", + "addSection": "Legg til seksjon", + "compactMode": "Kompakt modus", + "selectHosts": "Velg verter", "listLayout": "Liste", - "gridLayout": "Grid", - "configureUrl": "Set a URL in the widget settings", - "embeddedContent": "Embedded content", - "noBookmarks": "No bookmarks", - "noSections": "No sections set up", - "noServices": "No services set up", - "configureLocation": "Set a location in the widget settings", - "bannerTextPlaceholder": "Banner text", - "serviceNamePlaceholder": "My service" + "gridLayout": "Rutenett", + "configureUrl": "Angi en URL i widgetinnstillingene", + "embeddedContent": "Innebygd innhold", + "noBookmarks": "Ingen bokmerker", + "noSections": "Ingen seksjoner er satt opp", + "noServices": "Ingen tjenester konfigurert", + "configureLocation": "Angi en plassering i widgetinnstillingene", + "bannerTextPlaceholder": "Bannertekst", + "serviceNamePlaceholder": "Min tjeneste", + "emptyNote": "Empty note...", + "weatherLoadFailed": "Could not load weather for \"{{location}}\"", + "feelsLike": "Feels like {{temperature}}", + "timezonePlaceholder": "America/New_York (leave blank for local)", + "notesPlaceholder": "Write your notes here...", + "locationPlaceholder": "New York, London, Tokyo...", + "widgets": { + "bookmark_list": { + "name": "Bookmarks", + "description": "A list of quick links" + }, + "calendar": { + "name": "Calendar", + "description": "A month calendar with today highlighted" + }, + "clock": { + "name": "Clock", + "description": "A live clock with configurable timezone" + }, + "countdown": { + "name": "Countdown", + "description": "Counts down to a target date and time" + }, + "custom_api": { + "name": "Custom API", + "description": "Fetch and display data from any JSON API" + }, + "dashboard_links": { + "name": "Dashboard Links", + "description": "Shows your saved dashboard service links" + }, + "folder": { + "name": "Folder", + "description": "A background card for grouping widgets visually" + }, + "host_grid": { + "name": "Host Grid", + "description": "Live status overview grid for all your SSH hosts" + }, + "host_status": { + "name": "Host Status", + "description": "Shows live status and metrics for an SSH host" + }, + "iframe_embed": { + "name": "iFrame Embed", + "description": "Embed any URL in an iframe" + }, + "image_widget": { + "name": "Image", + "description": "Display any image from a URL" + }, + "link_tree": { + "name": "Link Tree", + "description": "Grouped links organized into labeled sections" + }, + "markdown_notes": { + "name": "Markdown Notes", + "description": "Notes with optional Markdown rendering and inline editing" + }, + "notes": { + "name": "Notes", + "description": "A text notes widget" + }, + "ping_status": { + "name": "Ping Status", + "description": "Check if URLs or services are reachable" + }, + "quick_connect": { + "name": "Quick Connect", + "description": "Launch terminal, files, docker, tunnels, and more for your hosts" + }, + "recent_activity": { + "name": "Recent Activity", + "description": "Shows recent terminal, Docker, file, and tunnel activity" + }, + "rss_feed": { + "name": "RSS Feed", + "description": "Display items from an RSS or Atom feed" + }, + "search_bar": { + "name": "Search Bar", + "description": "Quick search with Google, DuckDuckGo, Bing, or a custom engine" + }, + "search_links": { + "name": "Search Shortcuts", + "description": "Quick buttons to search different engines" + }, + "service_grid": { + "name": "Service Grid", + "description": "A grid of service tiles with icons and links" + }, + "service_link": { + "name": "Service Link", + "description": "A clickable tile linking to a service URL" + }, + "ssh_terminal": { + "name": "SSH Terminal", + "description": "An inline SSH terminal connected to a configured host" + }, + "system_overview": { + "name": "System Overview", + "description": "Termix version, database health, and uptime at a glance" + }, + "termix_uptime": { + "name": "Termix Uptime", + "description": "Shows how long the Termix server has been running" + }, + "text_banner": { + "name": "Text Banner", + "description": "A styled text label for sections and headings" + }, + "weather": { + "name": "Weather", + "description": "Live weather for any location" + }, + "docker_widget": { + "name": "Docker Manager", + "description": "Embedded Docker container manager for a configured host" + }, + "file_manager_widget": { + "name": "File Manager", + "description": "Embedded SFTP file manager for a configured host" + }, + "tunnel_widget": { + "name": "Tunnel Manager", + "description": "Embedded SSH tunnel manager for a configured host" + }, + "metrics_chart": { + "name": "Metrics Chart", + "description": "Historical CPU, memory, disk, or network chart for a host" + } + } }, "permissions": { "use": { - "title": "Use the homepage", - "description": "View and edit the homepage canvas and dashboard service links." + "title": "Bruk hjemmesiden", + "description": "Vis og rediger lenkene til startsidens lerret og dashbordtjenesten." } }, "settings": { "privateEndpoints": { - "label": "Allowed private hosts", - "description": "Exact private or loopback hostnames/IPs for Ping Status and Custom API widgets. Separate entries with commas or newlines; omit schemes, ports and paths. Empty blocks private destinations." + "label": "Tillatte private verter", + "description": "Nøyaktige private eller loopback-vertsnavn/IP-adresser for Ping-status og tilpassede API-widgeter. Skill oppføringer med komma eller linjeskift; utelat skjemaer, porter og stier. Tøm blokkering av private destinasjoner." }, "privateCertificateAuthority": { - "label": "Private certificate authority (PEM)", - "description": "Optional trusted CA bundle for allowlisted hosts. Certificate verification remains enabled. Leave empty to use the system trust store." + "label": "Privat sertifikatmyndighet (PEM)", + "description": "Valgfri pakke med klarert CA for verter på tillatelseslisten. Sertifikatverifisering forblir aktivert. La stå tomt for å bruke systemets klareringslager." } + }, + "plugin": { + "name": "Homepage" } } diff --git a/plugins/homepage/locales/translated/pl_PL.json b/plugins/homepage/locales/translated/pl_PL.json index df69b4d43..347038b59 100644 --- a/plugins/homepage/locales/translated/pl_PL.json +++ b/plugins/homepage/locales/translated/pl_PL.json @@ -18,7 +18,7 @@ "homepage": { "title": "Strona główna", "addWidget": "Dodaj widżet", - "noWidgetsInCategory": "No widgets in this category", + "noWidgetsInCategory": "Brak widgetów w tej kategorii", "editWidget": "Edytuj widżet", "zoomIn": "Powiększ", "zoomOut": "Oddal", @@ -39,7 +39,7 @@ "description": "Opis", "color": "Kolor", "timezone": "Strefa czasowa", - "invalidTimezone": "Invalid timezone. Use an IANA name such as America/New_York", + "invalidTimezone": "Nieprawidłowa strefa czasowa. Użyj nazwy IANA, takiej jak America/New_York", "showSeconds": "Pokaż sekundy", "format12h": "12-godzinny", "content": "Treść", @@ -60,9 +60,9 @@ "maxItems": "Maksymalna liczba elementów", "showDescription": "Pokaż opis", "widgetRssName": "Kanał RSS", - "rssNoFeedUrl": "Configure a feed URL in widget settings", - "rssLoadError": "Could not load feed", - "rssNoItems": "No items", + "rssNoFeedUrl": "Skonfiguruj adres URL kanału w ustawieniach widżetu", + "rssLoadError": "Nie można załadować kanału", + "rssNoItems": "Brak pozycji", "noHostSelected": "Nie wybrano hosta", "displayedMetrics": "Wyświetlane metryki", "metricCpu": "Procesor", @@ -162,29 +162,164 @@ "selectHosts": "Wybierz hosty", "listLayout": "Lista", "gridLayout": "Siatka", - "configureUrl": "Set a URL in the widget settings", - "embeddedContent": "Embedded content", - "noBookmarks": "No bookmarks", - "noSections": "No sections set up", - "noServices": "No services set up", - "configureLocation": "Set a location in the widget settings", - "bannerTextPlaceholder": "Banner text", - "serviceNamePlaceholder": "My service" + "configureUrl": "Ustaw adres URL w ustawieniach widżetu", + "embeddedContent": "Osadzona treść", + "noBookmarks": "Brak zakładek", + "noSections": "Nie utworzono żadnych sekcji", + "noServices": "Brak skonfigurowanych usług", + "configureLocation": "Ustaw lokalizację w ustawieniach widżetu", + "bannerTextPlaceholder": "Tekst banera", + "serviceNamePlaceholder": "Moja usługa", + "emptyNote": "Empty note...", + "weatherLoadFailed": "Could not load weather for \"{{location}}\"", + "feelsLike": "Feels like {{temperature}}", + "timezonePlaceholder": "America/New_York (leave blank for local)", + "notesPlaceholder": "Write your notes here...", + "locationPlaceholder": "New York, London, Tokyo...", + "widgets": { + "bookmark_list": { + "name": "Bookmarks", + "description": "A list of quick links" + }, + "calendar": { + "name": "Calendar", + "description": "A month calendar with today highlighted" + }, + "clock": { + "name": "Clock", + "description": "A live clock with configurable timezone" + }, + "countdown": { + "name": "Countdown", + "description": "Counts down to a target date and time" + }, + "custom_api": { + "name": "Custom API", + "description": "Fetch and display data from any JSON API" + }, + "dashboard_links": { + "name": "Dashboard Links", + "description": "Shows your saved dashboard service links" + }, + "folder": { + "name": "Folder", + "description": "A background card for grouping widgets visually" + }, + "host_grid": { + "name": "Host Grid", + "description": "Live status overview grid for all your SSH hosts" + }, + "host_status": { + "name": "Host Status", + "description": "Shows live status and metrics for an SSH host" + }, + "iframe_embed": { + "name": "iFrame Embed", + "description": "Embed any URL in an iframe" + }, + "image_widget": { + "name": "Image", + "description": "Display any image from a URL" + }, + "link_tree": { + "name": "Link Tree", + "description": "Grouped links organized into labeled sections" + }, + "markdown_notes": { + "name": "Markdown Notes", + "description": "Notes with optional Markdown rendering and inline editing" + }, + "notes": { + "name": "Notes", + "description": "A text notes widget" + }, + "ping_status": { + "name": "Ping Status", + "description": "Check if URLs or services are reachable" + }, + "quick_connect": { + "name": "Quick Connect", + "description": "Launch terminal, files, docker, tunnels, and more for your hosts" + }, + "recent_activity": { + "name": "Recent Activity", + "description": "Shows recent terminal, Docker, file, and tunnel activity" + }, + "rss_feed": { + "name": "RSS Feed", + "description": "Display items from an RSS or Atom feed" + }, + "search_bar": { + "name": "Search Bar", + "description": "Quick search with Google, DuckDuckGo, Bing, or a custom engine" + }, + "search_links": { + "name": "Search Shortcuts", + "description": "Quick buttons to search different engines" + }, + "service_grid": { + "name": "Service Grid", + "description": "A grid of service tiles with icons and links" + }, + "service_link": { + "name": "Service Link", + "description": "A clickable tile linking to a service URL" + }, + "ssh_terminal": { + "name": "SSH Terminal", + "description": "An inline SSH terminal connected to a configured host" + }, + "system_overview": { + "name": "System Overview", + "description": "Termix version, database health, and uptime at a glance" + }, + "termix_uptime": { + "name": "Termix Uptime", + "description": "Shows how long the Termix server has been running" + }, + "text_banner": { + "name": "Text Banner", + "description": "A styled text label for sections and headings" + }, + "weather": { + "name": "Weather", + "description": "Live weather for any location" + }, + "docker_widget": { + "name": "Docker Manager", + "description": "Embedded Docker container manager for a configured host" + }, + "file_manager_widget": { + "name": "File Manager", + "description": "Embedded SFTP file manager for a configured host" + }, + "tunnel_widget": { + "name": "Tunnel Manager", + "description": "Embedded SSH tunnel manager for a configured host" + }, + "metrics_chart": { + "name": "Metrics Chart", + "description": "Historical CPU, memory, disk, or network chart for a host" + } + } }, "permissions": { "use": { - "title": "Use the homepage", - "description": "View and edit the homepage canvas and dashboard service links." + "title": "Użyj strony głównej", + "description": "Przeglądaj i edytuj płótno strony głównej oraz łącza do usług pulpitu nawigacyjnego." } }, "settings": { "privateEndpoints": { - "label": "Allowed private hosts", - "description": "Exact private or loopback hostnames/IPs for Ping Status and Custom API widgets. Separate entries with commas or newlines; omit schemes, ports and paths. Empty blocks private destinations." + "label": "Dozwolone prywatne hosty", + "description": "Dokładne prywatne lub pętli zwrotnej nazwy hostów/adresy IP dla statusu pingowania i widżetów niestandardowego API. Oddziel wpisy przecinkami lub znakami nowej linii; pomiń schematy, porty i ścieżki. Puste bloki prywatnych miejsc docelowych." }, "privateCertificateAuthority": { - "label": "Private certificate authority (PEM)", - "description": "Optional trusted CA bundle for allowlisted hosts. Certificate verification remains enabled. Leave empty to use the system trust store." + "label": "Prywatny urząd certyfikacji (PEM)", + "description": "Opcjonalny pakiet zaufanego urzędu certyfikacji dla hostów z listy dozwolonych. Weryfikacja certyfikatu pozostaje włączona. Pozostaw puste, aby korzystać z systemowego magazynu zaufanych certyfikatów." } + }, + "plugin": { + "name": "Homepage" } } diff --git a/plugins/homepage/locales/translated/pt_BR.json b/plugins/homepage/locales/translated/pt_BR.json index 5ec42844c..68933a7d6 100644 --- a/plugins/homepage/locales/translated/pt_BR.json +++ b/plugins/homepage/locales/translated/pt_BR.json @@ -1,190 +1,325 @@ { "nav": { - "homepage": "Homepage" + "homepage": "Página inicial" }, "dashboard": { - "serviceLinks": "Service Links", - "homepagePreview": "Homepage Preview" + "serviceLinks": "Links de serviço", + "homepagePreview": "Pré-visualização da página inicial" }, "dashboardTab": { - "serviceLinksTitle": "Service Links", - "serviceLinksEmpty": "No service links yet", + "serviceLinksTitle": "Links de serviço", + "serviceLinksEmpty": "Ainda não há links de serviço.", "serviceLinksAdd": "Adicionar", - "serviceLinksLabelPlaceholder": "My Service", + "serviceLinksLabelPlaceholder": "Meu Serviço", "serviceLinksUrlPlaceholder": "http://192.168.1.10:8080", - "serviceLinksInvalidUrl": "Enter a valid web address", - "serviceLinksAddFailed": "Failed to add service link" + "serviceLinksInvalidUrl": "Insira um endereço web válido.", + "serviceLinksAddFailed": "Falha ao adicionar o link de serviço" }, "homepage": { - "title": "Homepage", - "addWidget": "Add Widget", - "noWidgetsInCategory": "No widgets in this category", - "editWidget": "Edit Widget", - "zoomIn": "Zoom In", - "zoomOut": "Zoom Out", - "resetView": "Reset View", - "lockLayout": "Lock Layout", - "unlockLayout": "Unlock Layout", - "noWidgets": "Right-click or click + to add your first widget", - "openFullView": "Open Full View", - "previewTitle": "Homepage Preview", + "title": "Página inicial", + "addWidget": "Adicionar widget", + "noWidgetsInCategory": "Não há widgets nesta categoria.", + "editWidget": "Widget de edição", + "zoomIn": "Ampliar", + "zoomOut": "Diminuir o zoom", + "resetView": "Redefinir visualização", + "lockLayout": "Configuração de fechadura", + "unlockLayout": "Desbloquear layout", + "noWidgets": "Clique com o botão direito do mouse ou clique em + para adicionar seu primeiro widget.", + "openFullView": "Abrir visualização completa", + "previewTitle": "Pré-visualização da página inicial", "cancel": "Cancelar", "save": "Salvar", - "title_label": "Title", - "widgetTitlePlaceholder": "Widget title (optional)", + "title_label": "Título", + "widgetTitlePlaceholder": "Título do widget (opcional)", "url": "URL", - "imageUrl": "Custom Image URL", - "imageUrlHint": "Leave blank to use the site favicon automatically", - "showImage": "Show Image", - "description": "Description", - "color": "Color", - "timezone": "Timezone", - "invalidTimezone": "Invalid timezone. Use an IANA name such as America/New_York", - "showSeconds": "Show seconds", - "format12h": "12-hour", - "content": "Content", - "backgroundColor": "Background Color", + "imageUrl": "URL da imagem personalizada", + "imageUrlHint": "Deixe em branco para usar o favicon do site automaticamente.", + "showImage": "Mostrar imagem", + "description": "Descrição", + "color": "Cor", + "timezone": "Fuso horário", + "invalidTimezone": "Fuso horário inválido. Use um nome IANA, como America/New_York.", + "showSeconds": "Mostrar segundos", + "format12h": "12 horas", + "content": "Contente", + "backgroundColor": "Cor de fundo", "links": "Links", - "addLink": "Add Link", - "linkLabel": "Label", + "addLink": "Adicionar link", + "linkLabel": "Rótulo", "categoryLinks": "Links", - "categoryInfo": "Info", - "categorySystem": "System", - "copyLink": "Copy Link", - "linkCopied": "Link copied!", - "location": "Location", - "temperatureUnit": "Temperature Unit", - "showForecast": "Show 3-day forecast", - "scrolling": "Allow Scrolling", - "feedUrl": "Feed URL", - "maxItems": "Max Items", - "showDescription": "Show Description", - "widgetRssName": "RSS Feed", - "rssNoFeedUrl": "Configure a feed URL in widget settings", - "rssLoadError": "Could not load feed", - "rssNoItems": "No items", - "noHostSelected": "No host selected", - "displayedMetrics": "Displayed Metrics", + "categoryInfo": "Informações", + "categorySystem": "Sistema", + "copyLink": "Copiar link", + "linkCopied": "Link copiado!", + "location": "Localização", + "temperatureUnit": "Unidade de temperatura", + "showForecast": "Mostrar previsão para 3 dias", + "scrolling": "Permitir rolagem", + "feedUrl": "URL do feed", + "maxItems": "Número máximo de itens", + "showDescription": "Descrição do programa", + "widgetRssName": "Feed RSS", + "rssNoFeedUrl": "Configure um URL de feed nas configurações do widget.", + "rssLoadError": "Não foi possível carregar o feed.", + "rssNoItems": "Nenhum item", + "noHostSelected": "Nenhum host selecionado", + "displayedMetrics": "Métricas exibidas", "metricCpu": "CPU", - "metricMemory": "Memory", - "metricDisk": "Disk", - "metricUptime": "Uptime", - "metricSystem": "System", - "metricNetwork": "Network", - "metricProcesses": "Processes", - "categoryMonitoring": "Monitoring", - "noPingUrls": "No URLs configured", - "pingLabel": "Label", - "addPingUrl": "Add URL", - "showLatency": "Show Latency", - "refreshInterval": "Refresh Interval", - "seconds": "seconds", - "filterActivityTypes": "Filter Types", - "filterTypesHint": "Leave empty to show all", - "showTimestamp": "Show Timestamp", - "uptimeUnavailable": "Uptime unavailable", - "uptimeLabel": "Uptime", - "overviewVersion": "Version", + "metricMemory": "Memória", + "metricDisk": "Disco", + "metricUptime": "Tempo de atividade", + "metricSystem": "Sistema", + "metricNetwork": "Rede", + "metricProcesses": "Processos", + "categoryMonitoring": "Monitoramento", + "noPingUrls": "Nenhuma URL configurada", + "pingLabel": "Rótulo", + "addPingUrl": "Adicionar URL", + "showLatency": "Mostrar latência", + "refreshInterval": "Intervalo de atualização", + "seconds": "segundos", + "filterActivityTypes": "Tipos de filtro", + "filterTypesHint": "Deixe em branco para mostrar tudo", + "showTimestamp": "Mostrar carimbo de data/hora", + "uptimeUnavailable": "Tempo de atividade indisponível", + "uptimeLabel": "Tempo de atividade", + "overviewVersion": "Versão", "overviewUpdateLabel": "Atualizar", - "overviewUpdateAvailable": "Update available", - "overviewDatabase": "Database", - "overviewUptime": "Uptime", - "noHosts": "No hosts configured", + "overviewUpdateAvailable": "Atualização disponível", + "overviewDatabase": "Banco de dados", + "overviewUptime": "Tempo de atividade", + "noHosts": "Nenhum host configurado", "hostGridHosts": "Hosts", - "hostGridAllHint": "Leave empty to show all hosts", - "columns": "Columns", - "showIp": "Show IP Address", + "hostGridAllHint": "Deixe em branco para mostrar todos os hosts.", + "columns": "Colunas", + "showIp": "Mostrar endereço IP", "layout": "Layout", - "showStatus": "Show Status", - "noActivity": "No activity", - "widgetPingStatusName": "Ping Status", - "widgetRecentActivityName": "Recent Activity", - "sshTerminalNoHost": "No host configured", + "showStatus": "Mostrar status", + "noActivity": "Nenhuma atividade", + "widgetPingStatusName": "Status do ping", + "widgetRecentActivityName": "Atividade recente", + "sshTerminalNoHost": "Nenhum host configurado", "sshTerminalConnect": "Conectar", - "sshTerminalAutoConnect": "Auto-connect on load", - "connectionTypes": "Connection Types", + "sshTerminalAutoConnect": "Conexão automática sob carga", + "connectionTypes": "Tipos de conexão", "calMon": "Mo", "calTue": "Tu", - "calWed": "We", - "calThu": "Th", - "calFri": "Fr", + "calWed": "Nós", + "calThu": "O", + "calFri": "Padre", "calSat": "Sa", "calSun": "Su", - "startOnMonday": "Start week on Monday", - "countdownNoDate": "No target date set", - "countdownPast": "Event has passed", - "countdownDays": "days", - "countdownHours": "hrs", + "startOnMonday": "Comece a semana na segunda-feira", + "countdownNoDate": "Nenhuma data-alvo definida.", + "countdownPast": "O evento já aconteceu.", + "countdownDays": "dias", + "countdownHours": "horas", "countdownMinutes": "min", - "countdownSeconds": "sec", - "countdownLabel": "Label", - "countdownLabelPlaceholder": "e.g. Launch Day", - "countdownShowDays": "Show Days", - "countdownShowHours": "Show Hours", - "targetDate": "Target Date", - "searchEngine": "Search Engine", - "customSearchUrl": "Custom Search URL", - "searchPlaceholder": "Search...", - "searchGo": "Go", - "searchPlaceholderLabel": "Placeholder Text", - "searchPlaceholderHint": "Text shown inside the search input", + "countdownSeconds": "seg", + "countdownLabel": "Rótulo", + "countdownLabelPlaceholder": "Exemplo: Dia do Lançamento", + "countdownShowDays": "Dias de exibição", + "countdownShowHours": "Horário de funcionamento", + "targetDate": "Data alvo", + "searchEngine": "Mecanismo de busca", + "customSearchUrl": "URL de pesquisa personalizada", + "searchPlaceholder": "Procurar...", + "searchGo": "Ir", + "searchPlaceholderLabel": "Texto de espaço reservado", + "searchPlaceholderHint": "Texto exibido dentro do campo de pesquisa", "openInNewTab": "Abrir em Nova Aba", - "searchQueryPlaceholder": "Enter query...", - "noSearchShortcuts": "No shortcuts configured", - "addSearchShortcut": "Add Shortcut", + "searchQueryPlaceholder": "Digite a consulta...", + "noSearchShortcuts": "Nenhum atalho configurado", + "addSearchShortcut": "Adicionar atalho", "fontSize": "Tamanho da Fonte", - "textAlign": "Text Align", - "fontWeight": "Font Weight", - "clearColor": "Clear Color", - "imageFit": "Image Fit", - "imageLinkUrl": "Link URL", - "noImage": "No image URL set", - "altText": "Alt Text", - "altTextPlaceholder": "Describe the image", - "renderMarkdown": "Render Markdown", - "displayMode": "Display Mode", - "displayField": "Display Field", - "jsonPath": "JSON Path", - "customApiLabel": "Label", - "customApiLabelPlaceholder": "e.g. Temperature", - "customApiUnit": "Unit", - "customApiNoUrl": "No API URL configured", - "customApiError": "Failed to fetch", - "customApiNotArray": "Response is not an array", - "addService": "Add Service", - "showLabels": "Show Labels", - "iconSize": "Icon Size", - "noDashboardLinks": "No dashboard links configured", - "noLimit": "No limit", - "sectionHeading": "Section Heading", - "addSection": "Add Section", - "compactMode": "Compact Mode", - "selectHosts": "Select Hosts", - "listLayout": "List", - "gridLayout": "Grid", - "configureUrl": "Set a URL in the widget settings", - "embeddedContent": "Embedded content", - "noBookmarks": "No bookmarks", - "noSections": "No sections set up", - "noServices": "No services set up", - "configureLocation": "Set a location in the widget settings", - "bannerTextPlaceholder": "Banner text", - "serviceNamePlaceholder": "My service" + "textAlign": "Alinhamento de texto", + "fontWeight": "Peso da fonte", + "clearColor": "Cor transparente", + "imageFit": "Ajuste de imagem", + "imageLinkUrl": "URL do link", + "noImage": "Nenhuma URL de imagem definida.", + "altText": "Texto alternativo", + "altTextPlaceholder": "Descreva a imagem", + "renderMarkdown": "Renderizar Markdown", + "displayMode": "Modo de exibição", + "displayField": "Campo de exibição", + "jsonPath": "Caminho JSON", + "customApiLabel": "Rótulo", + "customApiLabelPlaceholder": "Exemplo: Temperatura", + "customApiUnit": "Unidade", + "customApiNoUrl": "Nenhuma URL de API configurada", + "customApiError": "Falha ao buscar", + "customApiNotArray": "A resposta não é uma matriz.", + "addService": "Adicionar serviço", + "showLabels": "Mostrar rótulos", + "iconSize": "Tamanho do ícone", + "noDashboardLinks": "Nenhum link para o painel de controle configurado", + "noLimit": "Sem limite", + "sectionHeading": "Título da seção", + "addSection": "Adicionar seção", + "compactMode": "Modo compacto", + "selectHosts": "Selecionar anfitriões", + "listLayout": "Lista", + "gridLayout": "Grade", + "configureUrl": "Defina um URL nas configurações do widget.", + "embeddedContent": "Conteúdo incorporado", + "noBookmarks": "Sem favoritos", + "noSections": "Nenhuma seção configurada", + "noServices": "Nenhum serviço configurado", + "configureLocation": "Defina uma localização nas configurações do widget.", + "bannerTextPlaceholder": "Texto do banner", + "serviceNamePlaceholder": "Meu serviço", + "emptyNote": "Empty note...", + "weatherLoadFailed": "Could not load weather for \"{{location}}\"", + "feelsLike": "Feels like {{temperature}}", + "timezonePlaceholder": "America/New_York (leave blank for local)", + "notesPlaceholder": "Write your notes here...", + "locationPlaceholder": "New York, London, Tokyo...", + "widgets": { + "bookmark_list": { + "name": "Bookmarks", + "description": "A list of quick links" + }, + "calendar": { + "name": "Calendar", + "description": "A month calendar with today highlighted" + }, + "clock": { + "name": "Clock", + "description": "A live clock with configurable timezone" + }, + "countdown": { + "name": "Countdown", + "description": "Counts down to a target date and time" + }, + "custom_api": { + "name": "Custom API", + "description": "Fetch and display data from any JSON API" + }, + "dashboard_links": { + "name": "Dashboard Links", + "description": "Shows your saved dashboard service links" + }, + "folder": { + "name": "Folder", + "description": "A background card for grouping widgets visually" + }, + "host_grid": { + "name": "Host Grid", + "description": "Live status overview grid for all your SSH hosts" + }, + "host_status": { + "name": "Host Status", + "description": "Shows live status and metrics for an SSH host" + }, + "iframe_embed": { + "name": "iFrame Embed", + "description": "Embed any URL in an iframe" + }, + "image_widget": { + "name": "Image", + "description": "Display any image from a URL" + }, + "link_tree": { + "name": "Link Tree", + "description": "Grouped links organized into labeled sections" + }, + "markdown_notes": { + "name": "Markdown Notes", + "description": "Notes with optional Markdown rendering and inline editing" + }, + "notes": { + "name": "Notes", + "description": "A text notes widget" + }, + "ping_status": { + "name": "Ping Status", + "description": "Check if URLs or services are reachable" + }, + "quick_connect": { + "name": "Quick Connect", + "description": "Launch terminal, files, docker, tunnels, and more for your hosts" + }, + "recent_activity": { + "name": "Recent Activity", + "description": "Shows recent terminal, Docker, file, and tunnel activity" + }, + "rss_feed": { + "name": "RSS Feed", + "description": "Display items from an RSS or Atom feed" + }, + "search_bar": { + "name": "Search Bar", + "description": "Quick search with Google, DuckDuckGo, Bing, or a custom engine" + }, + "search_links": { + "name": "Search Shortcuts", + "description": "Quick buttons to search different engines" + }, + "service_grid": { + "name": "Service Grid", + "description": "A grid of service tiles with icons and links" + }, + "service_link": { + "name": "Service Link", + "description": "A clickable tile linking to a service URL" + }, + "ssh_terminal": { + "name": "SSH Terminal", + "description": "An inline SSH terminal connected to a configured host" + }, + "system_overview": { + "name": "System Overview", + "description": "Termix version, database health, and uptime at a glance" + }, + "termix_uptime": { + "name": "Termix Uptime", + "description": "Shows how long the Termix server has been running" + }, + "text_banner": { + "name": "Text Banner", + "description": "A styled text label for sections and headings" + }, + "weather": { + "name": "Weather", + "description": "Live weather for any location" + }, + "docker_widget": { + "name": "Docker Manager", + "description": "Embedded Docker container manager for a configured host" + }, + "file_manager_widget": { + "name": "File Manager", + "description": "Embedded SFTP file manager for a configured host" + }, + "tunnel_widget": { + "name": "Tunnel Manager", + "description": "Embedded SSH tunnel manager for a configured host" + }, + "metrics_chart": { + "name": "Metrics Chart", + "description": "Historical CPU, memory, disk, or network chart for a host" + } + } }, "permissions": { "use": { - "title": "Use the homepage", - "description": "View and edit the homepage canvas and dashboard service links." + "title": "Use a página inicial", + "description": "Visualize e edite os links de serviço da página inicial e do painel de controle." } }, "settings": { "privateEndpoints": { - "label": "Allowed private hosts", - "description": "Exact private or loopback hostnames/IPs for Ping Status and Custom API widgets. Separate entries with commas or newlines; omit schemes, ports and paths. Empty blocks private destinations." + "label": "Hosts privados permitidos", + "description": "Insira os nomes de host/IPs exatos, privados ou de loopback, para os widgets de Status de Ping e API Personalizada. Separe as entradas com vírgulas ou novas linhas; omita esquemas, portas e caminhos. Deixe os blocos vazios para destinos privados." }, "privateCertificateAuthority": { - "label": "Private certificate authority (PEM)", - "description": "Optional trusted CA bundle for allowlisted hosts. Certificate verification remains enabled. Leave empty to use the system trust store." + "label": "Autoridade de certificação privada (PEM)", + "description": "Pacote opcional de CAs confiáveis para hosts na lista de permissões. A verificação de certificados permanece ativada. Deixe em branco para usar o repositório de certificados confiáveis do sistema." } + }, + "plugin": { + "name": "Homepage" } } diff --git a/plugins/homepage/locales/translated/pt_PT.json b/plugins/homepage/locales/translated/pt_PT.json index effbb6df2..ff2493f90 100644 --- a/plugins/homepage/locales/translated/pt_PT.json +++ b/plugins/homepage/locales/translated/pt_PT.json @@ -18,7 +18,7 @@ "homepage": { "title": "Página Inicial", "addWidget": "Adicionar widget", - "noWidgetsInCategory": "No widgets in this category", + "noWidgetsInCategory": "Não existem widgets nesta categoria.", "editWidget": "Editar widget", "zoomIn": "Ampliar", "zoomOut": "Reduzir", @@ -39,7 +39,7 @@ "description": "Descrição", "color": "Cor", "timezone": "Fuso Horário", - "invalidTimezone": "Invalid timezone. Use an IANA name such as America/New_York", + "invalidTimezone": "Fuso horário inválido. Utilize um nome IANA, como America/New_York.", "showSeconds": "Mostrar segundos", "format12h": "12 horas", "content": "Conteúdo", @@ -60,9 +60,9 @@ "maxItems": "Itens máx.", "showDescription": "Mostrar descrição", "widgetRssName": "Feed RSS", - "rssNoFeedUrl": "Configure a feed URL in widget settings", - "rssLoadError": "Could not load feed", - "rssNoItems": "No items", + "rssNoFeedUrl": "Configure um URL de feed nas definições do widget.", + "rssLoadError": "Não foi possível carregar o feed.", + "rssNoItems": "Nenhum item", "noHostSelected": "Nenhum anfitrião selecionado", "displayedMetrics": "Métricas Exibidas", "metricCpu": "CPU", @@ -162,29 +162,164 @@ "selectHosts": "Selecionar Hosts", "listLayout": "Lista", "gridLayout": "Grelha", - "configureUrl": "Set a URL in the widget settings", - "embeddedContent": "Embedded content", - "noBookmarks": "No bookmarks", - "noSections": "No sections set up", - "noServices": "No services set up", - "configureLocation": "Set a location in the widget settings", - "bannerTextPlaceholder": "Banner text", - "serviceNamePlaceholder": "My service" + "configureUrl": "Defina um URL nas definições do widget.", + "embeddedContent": "Conteúdo incorporado", + "noBookmarks": "Sem favoritos", + "noSections": "Nenhuma secção configurada", + "noServices": "Nenhum serviço configurado", + "configureLocation": "Defina uma localização nas definições do widget.", + "bannerTextPlaceholder": "Texto do banner", + "serviceNamePlaceholder": "O meu serviço", + "emptyNote": "Empty note...", + "weatherLoadFailed": "Could not load weather for \"{{location}}\"", + "feelsLike": "Feels like {{temperature}}", + "timezonePlaceholder": "America/New_York (leave blank for local)", + "notesPlaceholder": "Write your notes here...", + "locationPlaceholder": "New York, London, Tokyo...", + "widgets": { + "bookmark_list": { + "name": "Bookmarks", + "description": "A list of quick links" + }, + "calendar": { + "name": "Calendar", + "description": "A month calendar with today highlighted" + }, + "clock": { + "name": "Clock", + "description": "A live clock with configurable timezone" + }, + "countdown": { + "name": "Countdown", + "description": "Counts down to a target date and time" + }, + "custom_api": { + "name": "Custom API", + "description": "Fetch and display data from any JSON API" + }, + "dashboard_links": { + "name": "Dashboard Links", + "description": "Shows your saved dashboard service links" + }, + "folder": { + "name": "Folder", + "description": "A background card for grouping widgets visually" + }, + "host_grid": { + "name": "Host Grid", + "description": "Live status overview grid for all your SSH hosts" + }, + "host_status": { + "name": "Host Status", + "description": "Shows live status and metrics for an SSH host" + }, + "iframe_embed": { + "name": "iFrame Embed", + "description": "Embed any URL in an iframe" + }, + "image_widget": { + "name": "Image", + "description": "Display any image from a URL" + }, + "link_tree": { + "name": "Link Tree", + "description": "Grouped links organized into labeled sections" + }, + "markdown_notes": { + "name": "Markdown Notes", + "description": "Notes with optional Markdown rendering and inline editing" + }, + "notes": { + "name": "Notes", + "description": "A text notes widget" + }, + "ping_status": { + "name": "Ping Status", + "description": "Check if URLs or services are reachable" + }, + "quick_connect": { + "name": "Quick Connect", + "description": "Launch terminal, files, docker, tunnels, and more for your hosts" + }, + "recent_activity": { + "name": "Recent Activity", + "description": "Shows recent terminal, Docker, file, and tunnel activity" + }, + "rss_feed": { + "name": "RSS Feed", + "description": "Display items from an RSS or Atom feed" + }, + "search_bar": { + "name": "Search Bar", + "description": "Quick search with Google, DuckDuckGo, Bing, or a custom engine" + }, + "search_links": { + "name": "Search Shortcuts", + "description": "Quick buttons to search different engines" + }, + "service_grid": { + "name": "Service Grid", + "description": "A grid of service tiles with icons and links" + }, + "service_link": { + "name": "Service Link", + "description": "A clickable tile linking to a service URL" + }, + "ssh_terminal": { + "name": "SSH Terminal", + "description": "An inline SSH terminal connected to a configured host" + }, + "system_overview": { + "name": "System Overview", + "description": "Termix version, database health, and uptime at a glance" + }, + "termix_uptime": { + "name": "Termix Uptime", + "description": "Shows how long the Termix server has been running" + }, + "text_banner": { + "name": "Text Banner", + "description": "A styled text label for sections and headings" + }, + "weather": { + "name": "Weather", + "description": "Live weather for any location" + }, + "docker_widget": { + "name": "Docker Manager", + "description": "Embedded Docker container manager for a configured host" + }, + "file_manager_widget": { + "name": "File Manager", + "description": "Embedded SFTP file manager for a configured host" + }, + "tunnel_widget": { + "name": "Tunnel Manager", + "description": "Embedded SSH tunnel manager for a configured host" + }, + "metrics_chart": { + "name": "Metrics Chart", + "description": "Historical CPU, memory, disk, or network chart for a host" + } + } }, "permissions": { "use": { - "title": "Use the homepage", - "description": "View and edit the homepage canvas and dashboard service links." + "title": "Utilize a página inicial", + "description": "Visualize e edite os links de serviço da página inicial e do painel de controlo." } }, "settings": { "privateEndpoints": { - "label": "Allowed private hosts", - "description": "Exact private or loopback hostnames/IPs for Ping Status and Custom API widgets. Separate entries with commas or newlines; omit schemes, ports and paths. Empty blocks private destinations." + "label": "Hosts privados permitidos", + "description": "Introduza os nomes de host/IPs exatos, privados ou de loopback, para os widgets Ping Status e Custom API. Separe as entradas com vírgulas ou novas linhas; omita esquemas, portas e caminhos. Deixe os blocos vazios para destinos privados." }, "privateCertificateAuthority": { - "label": "Private certificate authority (PEM)", - "description": "Optional trusted CA bundle for allowlisted hosts. Certificate verification remains enabled. Leave empty to use the system trust store." + "label": "Autoridade de certificação privada (PEM)", + "description": "Pacote opcional de CAs fidedignas para hosts na lista de permissões. A verificação de certificados permanece ativada. Deixe em branco para utilizar o repositório de certificados fidedignos do sistema." } + }, + "plugin": { + "name": "Homepage" } } diff --git a/plugins/homepage/locales/translated/ro_RO.json b/plugins/homepage/locales/translated/ro_RO.json index 8270c7bb9..101523611 100644 --- a/plugins/homepage/locales/translated/ro_RO.json +++ b/plugins/homepage/locales/translated/ro_RO.json @@ -169,7 +169,139 @@ "noServices": "Niciun serviciu configurat", "configureLocation": "Setați o locație în setările widgetului", "bannerTextPlaceholder": "Textul bannerului", - "serviceNamePlaceholder": "Serviciul meu" + "serviceNamePlaceholder": "Serviciul meu", + "emptyNote": "Empty note...", + "weatherLoadFailed": "Could not load weather for \"{{location}}\"", + "feelsLike": "Feels like {{temperature}}", + "timezonePlaceholder": "America/New_York (leave blank for local)", + "notesPlaceholder": "Write your notes here...", + "locationPlaceholder": "New York, London, Tokyo...", + "widgets": { + "bookmark_list": { + "name": "Bookmarks", + "description": "A list of quick links" + }, + "calendar": { + "name": "Calendar", + "description": "A month calendar with today highlighted" + }, + "clock": { + "name": "Clock", + "description": "A live clock with configurable timezone" + }, + "countdown": { + "name": "Countdown", + "description": "Counts down to a target date and time" + }, + "custom_api": { + "name": "Custom API", + "description": "Fetch and display data from any JSON API" + }, + "dashboard_links": { + "name": "Dashboard Links", + "description": "Shows your saved dashboard service links" + }, + "folder": { + "name": "Folder", + "description": "A background card for grouping widgets visually" + }, + "host_grid": { + "name": "Host Grid", + "description": "Live status overview grid for all your SSH hosts" + }, + "host_status": { + "name": "Host Status", + "description": "Shows live status and metrics for an SSH host" + }, + "iframe_embed": { + "name": "iFrame Embed", + "description": "Embed any URL in an iframe" + }, + "image_widget": { + "name": "Image", + "description": "Display any image from a URL" + }, + "link_tree": { + "name": "Link Tree", + "description": "Grouped links organized into labeled sections" + }, + "markdown_notes": { + "name": "Markdown Notes", + "description": "Notes with optional Markdown rendering and inline editing" + }, + "notes": { + "name": "Notes", + "description": "A text notes widget" + }, + "ping_status": { + "name": "Ping Status", + "description": "Check if URLs or services are reachable" + }, + "quick_connect": { + "name": "Quick Connect", + "description": "Launch terminal, files, docker, tunnels, and more for your hosts" + }, + "recent_activity": { + "name": "Recent Activity", + "description": "Shows recent terminal, Docker, file, and tunnel activity" + }, + "rss_feed": { + "name": "RSS Feed", + "description": "Display items from an RSS or Atom feed" + }, + "search_bar": { + "name": "Search Bar", + "description": "Quick search with Google, DuckDuckGo, Bing, or a custom engine" + }, + "search_links": { + "name": "Search Shortcuts", + "description": "Quick buttons to search different engines" + }, + "service_grid": { + "name": "Service Grid", + "description": "A grid of service tiles with icons and links" + }, + "service_link": { + "name": "Service Link", + "description": "A clickable tile linking to a service URL" + }, + "ssh_terminal": { + "name": "SSH Terminal", + "description": "An inline SSH terminal connected to a configured host" + }, + "system_overview": { + "name": "System Overview", + "description": "Termix version, database health, and uptime at a glance" + }, + "termix_uptime": { + "name": "Termix Uptime", + "description": "Shows how long the Termix server has been running" + }, + "text_banner": { + "name": "Text Banner", + "description": "A styled text label for sections and headings" + }, + "weather": { + "name": "Weather", + "description": "Live weather for any location" + }, + "docker_widget": { + "name": "Docker Manager", + "description": "Embedded Docker container manager for a configured host" + }, + "file_manager_widget": { + "name": "File Manager", + "description": "Embedded SFTP file manager for a configured host" + }, + "tunnel_widget": { + "name": "Tunnel Manager", + "description": "Embedded SSH tunnel manager for a configured host" + }, + "metrics_chart": { + "name": "Metrics Chart", + "description": "Historical CPU, memory, disk, or network chart for a host" + } + } }, "permissions": { "use": { @@ -186,5 +318,8 @@ "label": "Autoritate de certificare privată (PEM)", "description": "Pachet CA opțional de încredere pentru gazdele din lista permisă. Verificarea certificatelor rămâne activată. Lăsați câmpul gol pentru a utiliza depozitul de încredere al sistemului." } + }, + "plugin": { + "name": "Homepage" } } diff --git a/plugins/homepage/locales/translated/ru_RU.json b/plugins/homepage/locales/translated/ru_RU.json index b1f1c03b8..f587d1676 100644 --- a/plugins/homepage/locales/translated/ru_RU.json +++ b/plugins/homepage/locales/translated/ru_RU.json @@ -18,7 +18,7 @@ "homepage": { "title": "Главная страница", "addWidget": "Добавить виджет", - "noWidgetsInCategory": "No widgets in this category", + "noWidgetsInCategory": "В этой категории нет виджетов.", "editWidget": "Изменить виджет", "zoomIn": "Приблизить", "zoomOut": "Отдалить", @@ -39,7 +39,7 @@ "description": "Описание", "color": "Цвет", "timezone": "Часовой пояс", - "invalidTimezone": "Invalid timezone. Use an IANA name such as America/New_York", + "invalidTimezone": "Неверный часовой пояс. Используйте название IANA, например, America/New_York.", "showSeconds": "Показывать секунды", "format12h": "12-часовой", "content": "Содержимое", @@ -60,9 +60,9 @@ "maxItems": "Макс. элементов", "showDescription": "Показывать описание", "widgetRssName": "RSS-лента", - "rssNoFeedUrl": "Configure a feed URL in widget settings", - "rssLoadError": "Could not load feed", - "rssNoItems": "No items", + "rssNoFeedUrl": "Настройте URL-адрес ленты в параметрах виджета.", + "rssLoadError": "Не удалось загрузить подачу.", + "rssNoItems": "Нет товаров", "noHostSelected": "Хост не выбран", "displayedMetrics": "Отображаемые метрики", "metricCpu": "ЦП", @@ -162,29 +162,164 @@ "selectHosts": "Выбрать хосты", "listLayout": "Список", "gridLayout": "Сетка", - "configureUrl": "Set a URL in the widget settings", - "embeddedContent": "Embedded content", - "noBookmarks": "No bookmarks", - "noSections": "No sections set up", - "noServices": "No services set up", - "configureLocation": "Set a location in the widget settings", - "bannerTextPlaceholder": "Banner text", - "serviceNamePlaceholder": "My service" + "configureUrl": "Укажите URL-адрес в настройках виджета.", + "embeddedContent": "Встроенный контент", + "noBookmarks": "Закладок нет", + "noSections": "Разделы не настроены", + "noServices": "Сервисы не настроены", + "configureLocation": "Укажите местоположение в настройках виджета.", + "bannerTextPlaceholder": "Текст баннера", + "serviceNamePlaceholder": "Моя услуга", + "emptyNote": "Empty note...", + "weatherLoadFailed": "Could not load weather for \"{{location}}\"", + "feelsLike": "Feels like {{temperature}}", + "timezonePlaceholder": "America/New_York (leave blank for local)", + "notesPlaceholder": "Write your notes here...", + "locationPlaceholder": "New York, London, Tokyo...", + "widgets": { + "bookmark_list": { + "name": "Bookmarks", + "description": "A list of quick links" + }, + "calendar": { + "name": "Calendar", + "description": "A month calendar with today highlighted" + }, + "clock": { + "name": "Clock", + "description": "A live clock with configurable timezone" + }, + "countdown": { + "name": "Countdown", + "description": "Counts down to a target date and time" + }, + "custom_api": { + "name": "Custom API", + "description": "Fetch and display data from any JSON API" + }, + "dashboard_links": { + "name": "Dashboard Links", + "description": "Shows your saved dashboard service links" + }, + "folder": { + "name": "Folder", + "description": "A background card for grouping widgets visually" + }, + "host_grid": { + "name": "Host Grid", + "description": "Live status overview grid for all your SSH hosts" + }, + "host_status": { + "name": "Host Status", + "description": "Shows live status and metrics for an SSH host" + }, + "iframe_embed": { + "name": "iFrame Embed", + "description": "Embed any URL in an iframe" + }, + "image_widget": { + "name": "Image", + "description": "Display any image from a URL" + }, + "link_tree": { + "name": "Link Tree", + "description": "Grouped links organized into labeled sections" + }, + "markdown_notes": { + "name": "Markdown Notes", + "description": "Notes with optional Markdown rendering and inline editing" + }, + "notes": { + "name": "Notes", + "description": "A text notes widget" + }, + "ping_status": { + "name": "Ping Status", + "description": "Check if URLs or services are reachable" + }, + "quick_connect": { + "name": "Quick Connect", + "description": "Launch terminal, files, docker, tunnels, and more for your hosts" + }, + "recent_activity": { + "name": "Recent Activity", + "description": "Shows recent terminal, Docker, file, and tunnel activity" + }, + "rss_feed": { + "name": "RSS Feed", + "description": "Display items from an RSS or Atom feed" + }, + "search_bar": { + "name": "Search Bar", + "description": "Quick search with Google, DuckDuckGo, Bing, or a custom engine" + }, + "search_links": { + "name": "Search Shortcuts", + "description": "Quick buttons to search different engines" + }, + "service_grid": { + "name": "Service Grid", + "description": "A grid of service tiles with icons and links" + }, + "service_link": { + "name": "Service Link", + "description": "A clickable tile linking to a service URL" + }, + "ssh_terminal": { + "name": "SSH Terminal", + "description": "An inline SSH terminal connected to a configured host" + }, + "system_overview": { + "name": "System Overview", + "description": "Termix version, database health, and uptime at a glance" + }, + "termix_uptime": { + "name": "Termix Uptime", + "description": "Shows how long the Termix server has been running" + }, + "text_banner": { + "name": "Text Banner", + "description": "A styled text label for sections and headings" + }, + "weather": { + "name": "Weather", + "description": "Live weather for any location" + }, + "docker_widget": { + "name": "Docker Manager", + "description": "Embedded Docker container manager for a configured host" + }, + "file_manager_widget": { + "name": "File Manager", + "description": "Embedded SFTP file manager for a configured host" + }, + "tunnel_widget": { + "name": "Tunnel Manager", + "description": "Embedded SSH tunnel manager for a configured host" + }, + "metrics_chart": { + "name": "Metrics Chart", + "description": "Historical CPU, memory, disk, or network chart for a host" + } + } }, "permissions": { "use": { - "title": "Use the homepage", - "description": "View and edit the homepage canvas and dashboard service links." + "title": "Воспользуйтесь главной страницей", + "description": "Просматривайте и редактируйте ссылки на холст главной страницы и панель управления." } }, "settings": { "privateEndpoints": { - "label": "Allowed private hosts", - "description": "Exact private or loopback hostnames/IPs for Ping Status and Custom API widgets. Separate entries with commas or newlines; omit schemes, ports and paths. Empty blocks private destinations." + "label": "Разрешены частные хосты", + "description": "Точные частные или зацикленные имена хостов/IP-адреса для виджетов Ping Status и Custom API. Разделяйте записи запятыми или символами новой строки; схемы, порты и пути опускайте. Пустые блоки указывают частные адреса назначения." }, "privateCertificateAuthority": { - "label": "Private certificate authority (PEM)", - "description": "Optional trusted CA bundle for allowlisted hosts. Certificate verification remains enabled. Leave empty to use the system trust store." + "label": "Частный центр сертификации (PEM)", + "description": "Дополнительный пакет доверенных центров сертификации для хостов из списка разрешенных. Проверка сертификатов остается включенной. Оставьте поле пустым, чтобы использовать системное хранилище доверенных сертификатов." } + }, + "plugin": { + "name": "Homepage" } } diff --git a/plugins/homepage/locales/translated/sr_SP.json b/plugins/homepage/locales/translated/sr_SP.json index 760b3a445..d79a2afb8 100644 --- a/plugins/homepage/locales/translated/sr_SP.json +++ b/plugins/homepage/locales/translated/sr_SP.json @@ -1,190 +1,325 @@ { "nav": { - "homepage": "Homepage" + "homepage": "Почетна страница" }, "dashboard": { - "serviceLinks": "Service Links", - "homepagePreview": "Homepage Preview" + "serviceLinks": "Линкови услуга", + "homepagePreview": "Преглед почетне странице" }, "dashboardTab": { - "serviceLinksTitle": "Service Links", - "serviceLinksEmpty": "No service links yet", - "serviceLinksAdd": "Add", - "serviceLinksLabelPlaceholder": "My Service", - "serviceLinksUrlPlaceholder": "http://192.168.1.10:8080", - "serviceLinksInvalidUrl": "Enter a valid web address", - "serviceLinksAddFailed": "Failed to add service link" + "serviceLinksTitle": "Линкови услуга", + "serviceLinksEmpty": "Још нема линкова за услуге", + "serviceLinksAdd": "Додај", + "serviceLinksLabelPlaceholder": "Моја услуга", + "serviceLinksUrlPlaceholder": "хттп://192.168.1.10:8080", + "serviceLinksInvalidUrl": "Унесите важећу веб адресу", + "serviceLinksAddFailed": "Додавање линка услуге није успело" }, "homepage": { - "title": "Homepage", - "addWidget": "Add Widget", - "noWidgetsInCategory": "No widgets in this category", - "editWidget": "Edit Widget", - "zoomIn": "Zoom In", - "zoomOut": "Zoom Out", - "resetView": "Reset View", - "lockLayout": "Lock Layout", - "unlockLayout": "Unlock Layout", - "noWidgets": "Right-click or click + to add your first widget", - "openFullView": "Open Full View", - "previewTitle": "Homepage Preview", - "cancel": "Cancel", - "save": "Save", - "title_label": "Title", - "widgetTitlePlaceholder": "Widget title (optional)", + "title": "Почетна страница", + "addWidget": "Додај виџет", + "noWidgetsInCategory": "Нема виџета у овој категорији", + "editWidget": "Измени виџет", + "zoomIn": "Увећај", + "zoomOut": "Умањи", + "resetView": "Ресетуј приказ", + "lockLayout": "Закључај распоред", + "unlockLayout": "Откључај распоред", + "noWidgets": "Кликните десним тастером миша или кликните на + да бисте додали свој први виџет", + "openFullView": "Отвори цео приказ", + "previewTitle": "Преглед почетне странице", + "cancel": "Откажи", + "save": "Сачувај", + "title_label": "Наслов", + "widgetTitlePlaceholder": "Наслов виџета (опционо)", "url": "URL", - "imageUrl": "Custom Image URL", - "imageUrlHint": "Leave blank to use the site favicon automatically", - "showImage": "Show Image", - "description": "Description", - "color": "Color", - "timezone": "Timezone", - "invalidTimezone": "Invalid timezone. Use an IANA name such as America/New_York", - "showSeconds": "Show seconds", - "format12h": "12-hour", - "content": "Content", - "backgroundColor": "Background Color", - "links": "Links", - "addLink": "Add Link", - "linkLabel": "Label", - "categoryLinks": "Links", - "categoryInfo": "Info", - "categorySystem": "System", - "copyLink": "Copy Link", - "linkCopied": "Link copied!", - "location": "Location", - "temperatureUnit": "Temperature Unit", - "showForecast": "Show 3-day forecast", - "scrolling": "Allow Scrolling", - "feedUrl": "Feed URL", - "maxItems": "Max Items", - "showDescription": "Show Description", - "widgetRssName": "RSS Feed", - "rssNoFeedUrl": "Configure a feed URL in widget settings", - "rssLoadError": "Could not load feed", - "rssNoItems": "No items", - "noHostSelected": "No host selected", - "displayedMetrics": "Displayed Metrics", - "metricCpu": "CPU", - "metricMemory": "Memory", - "metricDisk": "Disk", - "metricUptime": "Uptime", - "metricSystem": "System", - "metricNetwork": "Network", - "metricProcesses": "Processes", - "categoryMonitoring": "Monitoring", - "noPingUrls": "No URLs configured", - "pingLabel": "Label", - "addPingUrl": "Add URL", - "showLatency": "Show Latency", - "refreshInterval": "Refresh Interval", - "seconds": "seconds", - "filterActivityTypes": "Filter Types", - "filterTypesHint": "Leave empty to show all", - "showTimestamp": "Show Timestamp", - "uptimeUnavailable": "Uptime unavailable", - "uptimeLabel": "Uptime", - "overviewVersion": "Version", - "overviewUpdateLabel": "Update", - "overviewUpdateAvailable": "Update available", - "overviewDatabase": "Database", - "overviewUptime": "Uptime", - "noHosts": "No hosts configured", - "hostGridHosts": "Hosts", - "hostGridAllHint": "Leave empty to show all hosts", - "columns": "Columns", - "showIp": "Show IP Address", - "layout": "Layout", - "showStatus": "Show Status", - "noActivity": "No activity", - "widgetPingStatusName": "Ping Status", - "widgetRecentActivityName": "Recent Activity", - "sshTerminalNoHost": "No host configured", - "sshTerminalConnect": "Connect", - "sshTerminalAutoConnect": "Auto-connect on load", - "connectionTypes": "Connection Types", - "calMon": "Mo", - "calTue": "Tu", - "calWed": "We", - "calThu": "Th", - "calFri": "Fr", - "calSat": "Sa", - "calSun": "Su", - "startOnMonday": "Start week on Monday", - "countdownNoDate": "No target date set", - "countdownPast": "Event has passed", - "countdownDays": "days", - "countdownHours": "hrs", - "countdownMinutes": "min", - "countdownSeconds": "sec", - "countdownLabel": "Label", - "countdownLabelPlaceholder": "e.g. Launch Day", - "countdownShowDays": "Show Days", - "countdownShowHours": "Show Hours", - "targetDate": "Target Date", - "searchEngine": "Search Engine", - "customSearchUrl": "Custom Search URL", - "searchPlaceholder": "Search...", - "searchGo": "Go", - "searchPlaceholderLabel": "Placeholder Text", - "searchPlaceholderHint": "Text shown inside the search input", - "openInNewTab": "Open in New Tab", - "searchQueryPlaceholder": "Enter query...", - "noSearchShortcuts": "No shortcuts configured", - "addSearchShortcut": "Add Shortcut", - "fontSize": "Font Size", - "textAlign": "Text Align", - "fontWeight": "Font Weight", - "clearColor": "Clear Color", - "imageFit": "Image Fit", - "imageLinkUrl": "Link URL", - "noImage": "No image URL set", - "altText": "Alt Text", - "altTextPlaceholder": "Describe the image", - "renderMarkdown": "Render Markdown", - "displayMode": "Display Mode", - "displayField": "Display Field", - "jsonPath": "JSON Path", - "customApiLabel": "Label", - "customApiLabelPlaceholder": "e.g. Temperature", - "customApiUnit": "Unit", - "customApiNoUrl": "No API URL configured", - "customApiError": "Failed to fetch", - "customApiNotArray": "Response is not an array", - "addService": "Add Service", - "showLabels": "Show Labels", - "iconSize": "Icon Size", - "noDashboardLinks": "No dashboard links configured", - "noLimit": "No limit", - "sectionHeading": "Section Heading", - "addSection": "Add Section", - "compactMode": "Compact Mode", - "selectHosts": "Select Hosts", - "listLayout": "List", - "gridLayout": "Grid", - "configureUrl": "Set a URL in the widget settings", - "embeddedContent": "Embedded content", - "noBookmarks": "No bookmarks", - "noSections": "No sections set up", - "noServices": "No services set up", - "configureLocation": "Set a location in the widget settings", - "bannerTextPlaceholder": "Banner text", - "serviceNamePlaceholder": "My service" + "imageUrl": "Прилагођени URL слике", + "imageUrlHint": "Оставите празно да бисте аутоматски користили фавикон сајта", + "showImage": "Прикажи слику", + "description": "Опис", + "color": "Боја", + "timezone": "Временска зона", + "invalidTimezone": "Неважећа временска зона. Користите IANA назив као што је Америка/Њујорк", + "showSeconds": "Прикажи секунде", + "format12h": "12 сати", + "content": "Садржај", + "backgroundColor": "Боја позадине", + "links": "Линкови", + "addLink": "Додај линк", + "linkLabel": "Ознака", + "categoryLinks": "Линкови", + "categoryInfo": "Информације", + "categorySystem": "Систем", + "copyLink": "Копирај линк", + "linkCopied": "Линк копиран!", + "location": "Локација", + "temperatureUnit": "Јединица за температуру", + "showForecast": "Прикажи тродневну прогнозу", + "scrolling": "Дозволи скроловање", + "feedUrl": "URL фида", + "maxItems": "Максималан број ставки", + "showDescription": "Прикажи опис", + "widgetRssName": "RSS фид", + "rssNoFeedUrl": "Конфигуришите URL фида у подешавањима виџета", + "rssLoadError": "Није могуће учитати фид", + "rssNoItems": "Нема артикала", + "noHostSelected": "Није изабран домаћин", + "displayedMetrics": "Приказане метрике", + "metricCpu": "Процесор", + "metricMemory": "Памћење", + "metricDisk": "Диск", + "metricUptime": "Време непрекидног рада", + "metricSystem": "Систем", + "metricNetwork": "Мрежа", + "metricProcesses": "Процеси", + "categoryMonitoring": "Праћење", + "noPingUrls": "Није конфигурисан ниједан URL", + "pingLabel": "Ознака", + "addPingUrl": "Додај URL", + "showLatency": "Прикажи латенцију", + "refreshInterval": "Интервал освежавања", + "seconds": "секунде", + "filterActivityTypes": "Типови филтера", + "filterTypesHint": "Оставите празно да бисте видели све", + "showTimestamp": "Прикажи временску ознаку", + "uptimeUnavailable": "Време непрекидног рада није доступно", + "uptimeLabel": "Време непрекидног рада", + "overviewVersion": "Верзија", + "overviewUpdateLabel": "Ажурирање", + "overviewUpdateAvailable": "Ажурирање је доступно", + "overviewDatabase": "База података", + "overviewUptime": "Време непрекидног рада", + "noHosts": "Ниједан хост није конфигурисан", + "hostGridHosts": "Домаћини", + "hostGridAllHint": "Оставите празно да бисте приказали све хостове", + "columns": "Колоне", + "showIp": "Прикажи ИП адресу", + "layout": "Распоред", + "showStatus": "Прикажи статус", + "noActivity": "Нема активности", + "widgetPingStatusName": "Статус пинга", + "widgetRecentActivityName": "Недавне активности", + "sshTerminalNoHost": "Није конфигурисан хост", + "sshTerminalConnect": "Повежи се", + "sshTerminalAutoConnect": "Аутоматско повезивање при учитавању", + "connectionTypes": "Типови повезивања", + "calMon": "Мо", + "calTue": "Уто", + "calWed": "Ми", + "calThu": "Чет", + "calFri": "Пет", + "calSat": "Са", + "calSun": "Су", + "startOnMonday": "Почетак недеље у понедељак", + "countdownNoDate": "Није одређен циљни датум", + "countdownPast": "Догађај је прошао", + "countdownDays": "дана", + "countdownHours": "сати", + "countdownMinutes": "мин", + "countdownSeconds": "сек", + "countdownLabel": "Ознака", + "countdownLabelPlaceholder": "нпр. Дан лансирања", + "countdownShowDays": "Дани емисије", + "countdownShowHours": "Радно време емисије", + "targetDate": "Циљни датум", + "searchEngine": "Претраживач", + "customSearchUrl": "URL прилагођене претраге", + "searchPlaceholder": "Претрага...", + "searchGo": "Иди", + "searchPlaceholderLabel": "Текст резервисаног места", + "searchPlaceholderHint": "Текст приказан унутар поља за претрагу", + "openInNewTab": "Отвори у новој картици", + "searchQueryPlaceholder": "Унесите упит...", + "noSearchShortcuts": "Ниједна пречица није конфигурисана", + "addSearchShortcut": "Додај пречицу", + "fontSize": "Величина фонта", + "textAlign": "Поравнање текста", + "fontWeight": "Дебљина фонта", + "clearColor": "Чиста боја", + "imageFit": "Уклапање слике", + "imageLinkUrl": "URL линка", + "noImage": "Није подешен URL слике", + "altText": "Алтернативни текст", + "altTextPlaceholder": "Опишите слику", + "renderMarkdown": "Рендеровање маркдауна", + "displayMode": "Режим приказа", + "displayField": "Поље за приказ", + "jsonPath": "JSON путања", + "customApiLabel": "Ознака", + "customApiLabelPlaceholder": "нпр. Температура", + "customApiUnit": "Јединица", + "customApiNoUrl": "Није конфигурисан API URL", + "customApiError": "Преузимање није успело", + "customApiNotArray": "Одговор није низ", + "addService": "Додај услугу", + "showLabels": "Прикажи ознаке", + "iconSize": "Величина иконе", + "noDashboardLinks": "Није конфигурисан ниједан линк до контролне табле", + "noLimit": "Без ограничења", + "sectionHeading": "Наслов одељка", + "addSection": "Додај одељак", + "compactMode": "Компактни режим", + "selectHosts": "Изаберите хостове", + "listLayout": "Листа", + "gridLayout": "Мрежа", + "configureUrl": "Подесите URL у подешавањима виџета", + "embeddedContent": "Уграђени садржај", + "noBookmarks": "Нема обележивача", + "noSections": "Није подешен ниједан одељак", + "noServices": "Није подешена ниједна услуга", + "configureLocation": "Подесите локацију у подешавањима виџета", + "bannerTextPlaceholder": "Текст банера", + "serviceNamePlaceholder": "Моја услуга", + "emptyNote": "Empty note...", + "weatherLoadFailed": "Could not load weather for \"{{location}}\"", + "feelsLike": "Feels like {{temperature}}", + "timezonePlaceholder": "America/New_York (leave blank for local)", + "notesPlaceholder": "Write your notes here...", + "locationPlaceholder": "New York, London, Tokyo...", + "widgets": { + "bookmark_list": { + "name": "Bookmarks", + "description": "A list of quick links" + }, + "calendar": { + "name": "Calendar", + "description": "A month calendar with today highlighted" + }, + "clock": { + "name": "Clock", + "description": "A live clock with configurable timezone" + }, + "countdown": { + "name": "Countdown", + "description": "Counts down to a target date and time" + }, + "custom_api": { + "name": "Custom API", + "description": "Fetch and display data from any JSON API" + }, + "dashboard_links": { + "name": "Dashboard Links", + "description": "Shows your saved dashboard service links" + }, + "folder": { + "name": "Folder", + "description": "A background card for grouping widgets visually" + }, + "host_grid": { + "name": "Host Grid", + "description": "Live status overview grid for all your SSH hosts" + }, + "host_status": { + "name": "Host Status", + "description": "Shows live status and metrics for an SSH host" + }, + "iframe_embed": { + "name": "iFrame Embed", + "description": "Embed any URL in an iframe" + }, + "image_widget": { + "name": "Image", + "description": "Display any image from a URL" + }, + "link_tree": { + "name": "Link Tree", + "description": "Grouped links organized into labeled sections" + }, + "markdown_notes": { + "name": "Markdown Notes", + "description": "Notes with optional Markdown rendering and inline editing" + }, + "notes": { + "name": "Notes", + "description": "A text notes widget" + }, + "ping_status": { + "name": "Ping Status", + "description": "Check if URLs or services are reachable" + }, + "quick_connect": { + "name": "Quick Connect", + "description": "Launch terminal, files, docker, tunnels, and more for your hosts" + }, + "recent_activity": { + "name": "Recent Activity", + "description": "Shows recent terminal, Docker, file, and tunnel activity" + }, + "rss_feed": { + "name": "RSS Feed", + "description": "Display items from an RSS or Atom feed" + }, + "search_bar": { + "name": "Search Bar", + "description": "Quick search with Google, DuckDuckGo, Bing, or a custom engine" + }, + "search_links": { + "name": "Search Shortcuts", + "description": "Quick buttons to search different engines" + }, + "service_grid": { + "name": "Service Grid", + "description": "A grid of service tiles with icons and links" + }, + "service_link": { + "name": "Service Link", + "description": "A clickable tile linking to a service URL" + }, + "ssh_terminal": { + "name": "SSH Terminal", + "description": "An inline SSH terminal connected to a configured host" + }, + "system_overview": { + "name": "System Overview", + "description": "Termix version, database health, and uptime at a glance" + }, + "termix_uptime": { + "name": "Termix Uptime", + "description": "Shows how long the Termix server has been running" + }, + "text_banner": { + "name": "Text Banner", + "description": "A styled text label for sections and headings" + }, + "weather": { + "name": "Weather", + "description": "Live weather for any location" + }, + "docker_widget": { + "name": "Docker Manager", + "description": "Embedded Docker container manager for a configured host" + }, + "file_manager_widget": { + "name": "File Manager", + "description": "Embedded SFTP file manager for a configured host" + }, + "tunnel_widget": { + "name": "Tunnel Manager", + "description": "Embedded SSH tunnel manager for a configured host" + }, + "metrics_chart": { + "name": "Metrics Chart", + "description": "Historical CPU, memory, disk, or network chart for a host" + } + } }, "permissions": { "use": { - "title": "Use the homepage", - "description": "View and edit the homepage canvas and dashboard service links." + "title": "Користите почетну страницу", + "description": "Прегледајте и уредите линкове за услуге на почетној страници и контролној табли." } }, "settings": { "privateEndpoints": { - "label": "Allowed private hosts", - "description": "Exact private or loopback hostnames/IPs for Ping Status and Custom API widgets. Separate entries with commas or newlines; omit schemes, ports and paths. Empty blocks private destinations." + "label": "Дозвољени приватни хостови", + "description": "Тачна приватна или повратна имена/ИП адресе хостова за Ping Status и Custom API виџете. Одвојите уносе зарезима или новим редовима; изоставите шеме, портове и путање. Празно блокира приватне дестинације." }, "privateCertificateAuthority": { - "label": "Private certificate authority (PEM)", - "description": "Optional trusted CA bundle for allowlisted hosts. Certificate verification remains enabled. Leave empty to use the system trust store." + "label": "Приватни ауторитет за сертификате (PEM)", + "description": "Опциони пакет поузданих CA сертификата за хостове са дозвољене листе. Верификација сертификата остаје омогућена. Оставите празно да бисте користили складиште поузданих сертификата система." } + }, + "plugin": { + "name": "Homepage" } } diff --git a/plugins/homepage/locales/translated/sv_SE.json b/plugins/homepage/locales/translated/sv_SE.json index 760b3a445..669c512a6 100644 --- a/plugins/homepage/locales/translated/sv_SE.json +++ b/plugins/homepage/locales/translated/sv_SE.json @@ -1,190 +1,325 @@ { "nav": { - "homepage": "Homepage" + "homepage": "Hemsida" }, "dashboard": { - "serviceLinks": "Service Links", - "homepagePreview": "Homepage Preview" + "serviceLinks": "Servicelänkar", + "homepagePreview": "Förhandsvisning av startsidan" }, "dashboardTab": { - "serviceLinksTitle": "Service Links", - "serviceLinksEmpty": "No service links yet", - "serviceLinksAdd": "Add", - "serviceLinksLabelPlaceholder": "My Service", + "serviceLinksTitle": "Servicelänkar", + "serviceLinksEmpty": "Inga tjänstelänkar ännu", + "serviceLinksAdd": "Tillägga", + "serviceLinksLabelPlaceholder": "Min tjänst", "serviceLinksUrlPlaceholder": "http://192.168.1.10:8080", - "serviceLinksInvalidUrl": "Enter a valid web address", - "serviceLinksAddFailed": "Failed to add service link" + "serviceLinksInvalidUrl": "Ange en giltig webbadress", + "serviceLinksAddFailed": "Misslyckades med att lägga till tjänstelänk" }, "homepage": { - "title": "Homepage", - "addWidget": "Add Widget", - "noWidgetsInCategory": "No widgets in this category", - "editWidget": "Edit Widget", - "zoomIn": "Zoom In", - "zoomOut": "Zoom Out", - "resetView": "Reset View", - "lockLayout": "Lock Layout", - "unlockLayout": "Unlock Layout", - "noWidgets": "Right-click or click + to add your first widget", - "openFullView": "Open Full View", - "previewTitle": "Homepage Preview", - "cancel": "Cancel", - "save": "Save", - "title_label": "Title", - "widgetTitlePlaceholder": "Widget title (optional)", + "title": "Hemsida", + "addWidget": "Lägg till widget", + "noWidgetsInCategory": "Inga widgetar i den här kategorin", + "editWidget": "Redigera widget", + "zoomIn": "Zooma in", + "zoomOut": "Zooma ut", + "resetView": "Återställ vy", + "lockLayout": "Låslayout", + "unlockLayout": "Lås upp layouten", + "noWidgets": "Högerklicka eller klicka på + för att lägga till din första widget", + "openFullView": "Öppna helvy", + "previewTitle": "Förhandsvisning av startsidan", + "cancel": "Avboka", + "save": "Spara", + "title_label": "Titel", + "widgetTitlePlaceholder": "Widgettitel (valfritt)", "url": "URL", - "imageUrl": "Custom Image URL", - "imageUrlHint": "Leave blank to use the site favicon automatically", - "showImage": "Show Image", - "description": "Description", - "color": "Color", - "timezone": "Timezone", - "invalidTimezone": "Invalid timezone. Use an IANA name such as America/New_York", - "showSeconds": "Show seconds", - "format12h": "12-hour", - "content": "Content", - "backgroundColor": "Background Color", - "links": "Links", - "addLink": "Add Link", - "linkLabel": "Label", - "categoryLinks": "Links", + "imageUrl": "Anpassad bild-URL", + "imageUrlHint": "Lämna tomt för att använda webbplatsens favicon automatiskt", + "showImage": "Visa bild", + "description": "Beskrivning", + "color": "Färg", + "timezone": "Tidszon", + "invalidTimezone": "Ogiltig tidszon. Använd ett IANA-namn som America/New_York", + "showSeconds": "Visa sekunder", + "format12h": "12-timmars", + "content": "Innehåll", + "backgroundColor": "Bakgrundsfärg", + "links": "Länkar", + "addLink": "Lägg till länk", + "linkLabel": "Märka", + "categoryLinks": "Länkar", "categoryInfo": "Info", "categorySystem": "System", - "copyLink": "Copy Link", - "linkCopied": "Link copied!", - "location": "Location", - "temperatureUnit": "Temperature Unit", - "showForecast": "Show 3-day forecast", - "scrolling": "Allow Scrolling", - "feedUrl": "Feed URL", - "maxItems": "Max Items", - "showDescription": "Show Description", - "widgetRssName": "RSS Feed", - "rssNoFeedUrl": "Configure a feed URL in widget settings", - "rssLoadError": "Could not load feed", - "rssNoItems": "No items", - "noHostSelected": "No host selected", - "displayedMetrics": "Displayed Metrics", + "copyLink": "Kopiera länk", + "linkCopied": "Länk kopierad!", + "location": "Plats", + "temperatureUnit": "Temperaturenhet", + "showForecast": "Visa 3-dagarsprognos", + "scrolling": "Tillåt rullning", + "feedUrl": "Flödes-URL", + "maxItems": "Max antal artiklar", + "showDescription": "Visa beskrivning", + "widgetRssName": "RSS-flöde", + "rssNoFeedUrl": "Konfigurera en flödes-URL i widgetinställningarna", + "rssLoadError": "Kunde inte läsa in flödet", + "rssNoItems": "Inga artiklar", + "noHostSelected": "Ingen värd vald", + "displayedMetrics": "Visade mätvärden", "metricCpu": "CPU", - "metricMemory": "Memory", + "metricMemory": "Minne", "metricDisk": "Disk", - "metricUptime": "Uptime", + "metricUptime": "Drifttid", "metricSystem": "System", - "metricNetwork": "Network", - "metricProcesses": "Processes", - "categoryMonitoring": "Monitoring", - "noPingUrls": "No URLs configured", - "pingLabel": "Label", - "addPingUrl": "Add URL", - "showLatency": "Show Latency", - "refreshInterval": "Refresh Interval", - "seconds": "seconds", - "filterActivityTypes": "Filter Types", - "filterTypesHint": "Leave empty to show all", - "showTimestamp": "Show Timestamp", - "uptimeUnavailable": "Uptime unavailable", - "uptimeLabel": "Uptime", + "metricNetwork": "Nätverk", + "metricProcesses": "Processer", + "categoryMonitoring": "Övervakning", + "noPingUrls": "Inga webbadresser konfigurerade", + "pingLabel": "Märka", + "addPingUrl": "Lägg till URL", + "showLatency": "Visa latens", + "refreshInterval": "Uppdateringsintervall", + "seconds": "sekunder", + "filterActivityTypes": "Filtertyper", + "filterTypesHint": "Lämna tomt för att visa alla", + "showTimestamp": "Visa tidsstämpel", + "uptimeUnavailable": "Drifttid otillgänglig", + "uptimeLabel": "Drifttid", "overviewVersion": "Version", - "overviewUpdateLabel": "Update", - "overviewUpdateAvailable": "Update available", - "overviewDatabase": "Database", - "overviewUptime": "Uptime", - "noHosts": "No hosts configured", - "hostGridHosts": "Hosts", - "hostGridAllHint": "Leave empty to show all hosts", - "columns": "Columns", - "showIp": "Show IP Address", + "overviewUpdateLabel": "Uppdatera", + "overviewUpdateAvailable": "Uppdatering tillgänglig", + "overviewDatabase": "Databas", + "overviewUptime": "Drifttid", + "noHosts": "Inga värdar konfigurerade", + "hostGridHosts": "Värdar", + "hostGridAllHint": "Lämna tomt för att visa alla värdar", + "columns": "Kolumner", + "showIp": "Visa IP-adress", "layout": "Layout", - "showStatus": "Show Status", - "noActivity": "No activity", - "widgetPingStatusName": "Ping Status", - "widgetRecentActivityName": "Recent Activity", - "sshTerminalNoHost": "No host configured", - "sshTerminalConnect": "Connect", - "sshTerminalAutoConnect": "Auto-connect on load", - "connectionTypes": "Connection Types", - "calMon": "Mo", - "calTue": "Tu", - "calWed": "We", - "calThu": "Th", + "showStatus": "Visa status", + "noActivity": "Ingen aktivitet", + "widgetPingStatusName": "Pingstatus", + "widgetRecentActivityName": "Senaste aktivitet", + "sshTerminalNoHost": "Ingen värd konfigurerad", + "sshTerminalConnect": "Ansluta", + "sshTerminalAutoConnect": "Automatisk anslutning vid laddning", + "connectionTypes": "Anslutningstyper", + "calMon": "Må", + "calTue": "Tis", + "calWed": "Vi", + "calThu": "To", "calFri": "Fr", - "calSat": "Sa", - "calSun": "Su", - "startOnMonday": "Start week on Monday", - "countdownNoDate": "No target date set", - "countdownPast": "Event has passed", - "countdownDays": "days", - "countdownHours": "hrs", + "calSat": "Lör", + "calSun": "Sö", + "startOnMonday": "Börja veckan på måndag", + "countdownNoDate": "Inget måldatum angivet", + "countdownPast": "Händelsen har passerat", + "countdownDays": "dagar", + "countdownHours": "timmar", "countdownMinutes": "min", - "countdownSeconds": "sec", - "countdownLabel": "Label", - "countdownLabelPlaceholder": "e.g. Launch Day", - "countdownShowDays": "Show Days", - "countdownShowHours": "Show Hours", - "targetDate": "Target Date", - "searchEngine": "Search Engine", - "customSearchUrl": "Custom Search URL", - "searchPlaceholder": "Search...", - "searchGo": "Go", - "searchPlaceholderLabel": "Placeholder Text", - "searchPlaceholderHint": "Text shown inside the search input", - "openInNewTab": "Open in New Tab", - "searchQueryPlaceholder": "Enter query...", - "noSearchShortcuts": "No shortcuts configured", - "addSearchShortcut": "Add Shortcut", - "fontSize": "Font Size", - "textAlign": "Text Align", - "fontWeight": "Font Weight", - "clearColor": "Clear Color", - "imageFit": "Image Fit", - "imageLinkUrl": "Link URL", - "noImage": "No image URL set", - "altText": "Alt Text", - "altTextPlaceholder": "Describe the image", - "renderMarkdown": "Render Markdown", - "displayMode": "Display Mode", - "displayField": "Display Field", - "jsonPath": "JSON Path", - "customApiLabel": "Label", - "customApiLabelPlaceholder": "e.g. Temperature", - "customApiUnit": "Unit", - "customApiNoUrl": "No API URL configured", - "customApiError": "Failed to fetch", - "customApiNotArray": "Response is not an array", - "addService": "Add Service", - "showLabels": "Show Labels", - "iconSize": "Icon Size", - "noDashboardLinks": "No dashboard links configured", - "noLimit": "No limit", - "sectionHeading": "Section Heading", - "addSection": "Add Section", - "compactMode": "Compact Mode", - "selectHosts": "Select Hosts", - "listLayout": "List", - "gridLayout": "Grid", - "configureUrl": "Set a URL in the widget settings", - "embeddedContent": "Embedded content", - "noBookmarks": "No bookmarks", - "noSections": "No sections set up", - "noServices": "No services set up", - "configureLocation": "Set a location in the widget settings", - "bannerTextPlaceholder": "Banner text", - "serviceNamePlaceholder": "My service" + "countdownSeconds": "sek", + "countdownLabel": "Märka", + "countdownLabelPlaceholder": "t.ex. lanseringsdagen", + "countdownShowDays": "Visa dagar", + "countdownShowHours": "Visa öppettider", + "targetDate": "Måldatum", + "searchEngine": "Sökmotor", + "customSearchUrl": "Anpassad sök-URL", + "searchPlaceholder": "Söka...", + "searchGo": "Gå", + "searchPlaceholderLabel": "Platshållartext", + "searchPlaceholderHint": "Text som visas inuti sökinmatningen", + "openInNewTab": "Öppna i ny flik", + "searchQueryPlaceholder": "Ange fråga...", + "noSearchShortcuts": "Inga genvägar konfigurerade", + "addSearchShortcut": "Lägg till genväg", + "fontSize": "Fontstorlek", + "textAlign": "Textjustering", + "fontWeight": "Teckensnittsvikt", + "clearColor": "Klar färg", + "imageFit": "Bildanpassning", + "imageLinkUrl": "Länk-URL", + "noImage": "Ingen bild-URL angiven", + "altText": "Alternativtext", + "altTextPlaceholder": "Beskriv bilden", + "renderMarkdown": "Rendera Markdown", + "displayMode": "Visningsläge", + "displayField": "Visningsfält", + "jsonPath": "JSON-sökväg", + "customApiLabel": "Märka", + "customApiLabelPlaceholder": "t.ex. temperatur", + "customApiUnit": "Enhet", + "customApiNoUrl": "Ingen API-URL konfigurerad", + "customApiError": "Misslyckades med att hämta", + "customApiNotArray": "Svaret är inte en array", + "addService": "Lägg till tjänst", + "showLabels": "Visa etiketter", + "iconSize": "Ikonstorlek", + "noDashboardLinks": "Inga länkar till instrumentpanelen konfigurerade", + "noLimit": "Ingen gräns", + "sectionHeading": "Avsnittsrubrik", + "addSection": "Lägg till avsnitt", + "compactMode": "Kompaktläge", + "selectHosts": "Välj värdar", + "listLayout": "Lista", + "gridLayout": "Rutnät", + "configureUrl": "Ange en URL i widgetinställningarna", + "embeddedContent": "Inbäddat innehåll", + "noBookmarks": "Inga bokmärken", + "noSections": "Inga sektioner har konfigurerats", + "noServices": "Inga tjänster konfigurerade", + "configureLocation": "Ange en plats i widgetinställningarna", + "bannerTextPlaceholder": "Bannertext", + "serviceNamePlaceholder": "Min tjänst", + "emptyNote": "Empty note...", + "weatherLoadFailed": "Could not load weather for \"{{location}}\"", + "feelsLike": "Feels like {{temperature}}", + "timezonePlaceholder": "America/New_York (leave blank for local)", + "notesPlaceholder": "Write your notes here...", + "locationPlaceholder": "New York, London, Tokyo...", + "widgets": { + "bookmark_list": { + "name": "Bookmarks", + "description": "A list of quick links" + }, + "calendar": { + "name": "Calendar", + "description": "A month calendar with today highlighted" + }, + "clock": { + "name": "Clock", + "description": "A live clock with configurable timezone" + }, + "countdown": { + "name": "Countdown", + "description": "Counts down to a target date and time" + }, + "custom_api": { + "name": "Custom API", + "description": "Fetch and display data from any JSON API" + }, + "dashboard_links": { + "name": "Dashboard Links", + "description": "Shows your saved dashboard service links" + }, + "folder": { + "name": "Folder", + "description": "A background card for grouping widgets visually" + }, + "host_grid": { + "name": "Host Grid", + "description": "Live status overview grid for all your SSH hosts" + }, + "host_status": { + "name": "Host Status", + "description": "Shows live status and metrics for an SSH host" + }, + "iframe_embed": { + "name": "iFrame Embed", + "description": "Embed any URL in an iframe" + }, + "image_widget": { + "name": "Image", + "description": "Display any image from a URL" + }, + "link_tree": { + "name": "Link Tree", + "description": "Grouped links organized into labeled sections" + }, + "markdown_notes": { + "name": "Markdown Notes", + "description": "Notes with optional Markdown rendering and inline editing" + }, + "notes": { + "name": "Notes", + "description": "A text notes widget" + }, + "ping_status": { + "name": "Ping Status", + "description": "Check if URLs or services are reachable" + }, + "quick_connect": { + "name": "Quick Connect", + "description": "Launch terminal, files, docker, tunnels, and more for your hosts" + }, + "recent_activity": { + "name": "Recent Activity", + "description": "Shows recent terminal, Docker, file, and tunnel activity" + }, + "rss_feed": { + "name": "RSS Feed", + "description": "Display items from an RSS or Atom feed" + }, + "search_bar": { + "name": "Search Bar", + "description": "Quick search with Google, DuckDuckGo, Bing, or a custom engine" + }, + "search_links": { + "name": "Search Shortcuts", + "description": "Quick buttons to search different engines" + }, + "service_grid": { + "name": "Service Grid", + "description": "A grid of service tiles with icons and links" + }, + "service_link": { + "name": "Service Link", + "description": "A clickable tile linking to a service URL" + }, + "ssh_terminal": { + "name": "SSH Terminal", + "description": "An inline SSH terminal connected to a configured host" + }, + "system_overview": { + "name": "System Overview", + "description": "Termix version, database health, and uptime at a glance" + }, + "termix_uptime": { + "name": "Termix Uptime", + "description": "Shows how long the Termix server has been running" + }, + "text_banner": { + "name": "Text Banner", + "description": "A styled text label for sections and headings" + }, + "weather": { + "name": "Weather", + "description": "Live weather for any location" + }, + "docker_widget": { + "name": "Docker Manager", + "description": "Embedded Docker container manager for a configured host" + }, + "file_manager_widget": { + "name": "File Manager", + "description": "Embedded SFTP file manager for a configured host" + }, + "tunnel_widget": { + "name": "Tunnel Manager", + "description": "Embedded SSH tunnel manager for a configured host" + }, + "metrics_chart": { + "name": "Metrics Chart", + "description": "Historical CPU, memory, disk, or network chart for a host" + } + } }, "permissions": { "use": { - "title": "Use the homepage", - "description": "View and edit the homepage canvas and dashboard service links." + "title": "Använd startsidan", + "description": "Visa och redigera länkarna till startsidans arbetsyta och instrumentpanelstjänsten." } }, "settings": { "privateEndpoints": { - "label": "Allowed private hosts", - "description": "Exact private or loopback hostnames/IPs for Ping Status and Custom API widgets. Separate entries with commas or newlines; omit schemes, ports and paths. Empty blocks private destinations." + "label": "Tillåtna privata värdar", + "description": "Exakta privata eller loopback-värdnamn/IP-adresser för Pingstatus och anpassade API-widgetar. Separera poster med kommatecken eller radbrytning; uteslut scheman, portar och sökvägar. Tomma block för privata destinationer." }, "privateCertificateAuthority": { - "label": "Private certificate authority (PEM)", - "description": "Optional trusted CA bundle for allowlisted hosts. Certificate verification remains enabled. Leave empty to use the system trust store." + "label": "Privat certifikatutfärdare (PEM)", + "description": "Valfritt paket med betrodda certifikatutfärdare för godkända värdar. Certifikatverifiering förblir aktiverad. Lämna tomt för att använda systemets förtroendearkiv." } + }, + "plugin": { + "name": "Homepage" } } diff --git a/plugins/homepage/locales/translated/th_TH.json b/plugins/homepage/locales/translated/th_TH.json index 760b3a445..4b3718d48 100644 --- a/plugins/homepage/locales/translated/th_TH.json +++ b/plugins/homepage/locales/translated/th_TH.json @@ -1,190 +1,325 @@ { "nav": { - "homepage": "Homepage" + "homepage": "หน้าแรก" }, "dashboard": { - "serviceLinks": "Service Links", - "homepagePreview": "Homepage Preview" + "serviceLinks": "ลิงก์บริการ", + "homepagePreview": "ตัวอย่างหน้าแรก" }, "dashboardTab": { - "serviceLinksTitle": "Service Links", - "serviceLinksEmpty": "No service links yet", - "serviceLinksAdd": "Add", - "serviceLinksLabelPlaceholder": "My Service", + "serviceLinksTitle": "ลิงก์บริการ", + "serviceLinksEmpty": "ยังไม่มีลิงก์บริการ", + "serviceLinksAdd": "เพิ่ม", + "serviceLinksLabelPlaceholder": "บริการของฉัน", "serviceLinksUrlPlaceholder": "http://192.168.1.10:8080", - "serviceLinksInvalidUrl": "Enter a valid web address", - "serviceLinksAddFailed": "Failed to add service link" + "serviceLinksInvalidUrl": "ป้อนที่อยู่เว็บที่ถูกต้อง", + "serviceLinksAddFailed": "ไม่สามารถเพิ่มลิงก์บริการได้" }, "homepage": { - "title": "Homepage", - "addWidget": "Add Widget", - "noWidgetsInCategory": "No widgets in this category", - "editWidget": "Edit Widget", - "zoomIn": "Zoom In", - "zoomOut": "Zoom Out", - "resetView": "Reset View", - "lockLayout": "Lock Layout", - "unlockLayout": "Unlock Layout", - "noWidgets": "Right-click or click + to add your first widget", - "openFullView": "Open Full View", - "previewTitle": "Homepage Preview", - "cancel": "Cancel", - "save": "Save", - "title_label": "Title", - "widgetTitlePlaceholder": "Widget title (optional)", + "title": "หน้าแรก", + "addWidget": "เพิ่มวิดเจ็ต", + "noWidgetsInCategory": "ไม่มีวิดเจ็ตในหมวดหมู่นี้", + "editWidget": "แก้ไขวิดเจ็ต", + "zoomIn": "ซูมเข้า", + "zoomOut": "ซูมออก", + "resetView": "รีเซ็ตมุมมอง", + "lockLayout": "การจัดวางล็อค", + "unlockLayout": "ปลดล็อกเค้าโครง", + "noWidgets": "คลิกขวาหรือคลิก + เพื่อเพิ่มวิดเจ็ตแรกของคุณ", + "openFullView": "เปิดดูแบบเต็มหน้าจอ", + "previewTitle": "ตัวอย่างหน้าแรก", + "cancel": "ยกเลิก", + "save": "บันทึก", + "title_label": "ชื่อ", + "widgetTitlePlaceholder": "ชื่อวิดเจ็ต (ไม่บังคับ)", "url": "URL", - "imageUrl": "Custom Image URL", - "imageUrlHint": "Leave blank to use the site favicon automatically", - "showImage": "Show Image", - "description": "Description", - "color": "Color", - "timezone": "Timezone", - "invalidTimezone": "Invalid timezone. Use an IANA name such as America/New_York", - "showSeconds": "Show seconds", - "format12h": "12-hour", - "content": "Content", - "backgroundColor": "Background Color", - "links": "Links", - "addLink": "Add Link", - "linkLabel": "Label", - "categoryLinks": "Links", - "categoryInfo": "Info", - "categorySystem": "System", - "copyLink": "Copy Link", - "linkCopied": "Link copied!", - "location": "Location", - "temperatureUnit": "Temperature Unit", - "showForecast": "Show 3-day forecast", - "scrolling": "Allow Scrolling", - "feedUrl": "Feed URL", - "maxItems": "Max Items", - "showDescription": "Show Description", - "widgetRssName": "RSS Feed", - "rssNoFeedUrl": "Configure a feed URL in widget settings", - "rssLoadError": "Could not load feed", - "rssNoItems": "No items", - "noHostSelected": "No host selected", - "displayedMetrics": "Displayed Metrics", - "metricCpu": "CPU", - "metricMemory": "Memory", - "metricDisk": "Disk", - "metricUptime": "Uptime", - "metricSystem": "System", - "metricNetwork": "Network", - "metricProcesses": "Processes", - "categoryMonitoring": "Monitoring", - "noPingUrls": "No URLs configured", - "pingLabel": "Label", - "addPingUrl": "Add URL", - "showLatency": "Show Latency", - "refreshInterval": "Refresh Interval", - "seconds": "seconds", - "filterActivityTypes": "Filter Types", - "filterTypesHint": "Leave empty to show all", - "showTimestamp": "Show Timestamp", - "uptimeUnavailable": "Uptime unavailable", - "uptimeLabel": "Uptime", - "overviewVersion": "Version", - "overviewUpdateLabel": "Update", - "overviewUpdateAvailable": "Update available", - "overviewDatabase": "Database", - "overviewUptime": "Uptime", - "noHosts": "No hosts configured", - "hostGridHosts": "Hosts", - "hostGridAllHint": "Leave empty to show all hosts", - "columns": "Columns", - "showIp": "Show IP Address", - "layout": "Layout", - "showStatus": "Show Status", - "noActivity": "No activity", - "widgetPingStatusName": "Ping Status", - "widgetRecentActivityName": "Recent Activity", - "sshTerminalNoHost": "No host configured", - "sshTerminalConnect": "Connect", - "sshTerminalAutoConnect": "Auto-connect on load", - "connectionTypes": "Connection Types", - "calMon": "Mo", - "calTue": "Tu", - "calWed": "We", - "calThu": "Th", - "calFri": "Fr", - "calSat": "Sa", - "calSun": "Su", - "startOnMonday": "Start week on Monday", - "countdownNoDate": "No target date set", - "countdownPast": "Event has passed", - "countdownDays": "days", - "countdownHours": "hrs", - "countdownMinutes": "min", - "countdownSeconds": "sec", - "countdownLabel": "Label", - "countdownLabelPlaceholder": "e.g. Launch Day", - "countdownShowDays": "Show Days", - "countdownShowHours": "Show Hours", - "targetDate": "Target Date", - "searchEngine": "Search Engine", - "customSearchUrl": "Custom Search URL", - "searchPlaceholder": "Search...", - "searchGo": "Go", - "searchPlaceholderLabel": "Placeholder Text", - "searchPlaceholderHint": "Text shown inside the search input", - "openInNewTab": "Open in New Tab", - "searchQueryPlaceholder": "Enter query...", - "noSearchShortcuts": "No shortcuts configured", - "addSearchShortcut": "Add Shortcut", - "fontSize": "Font Size", - "textAlign": "Text Align", - "fontWeight": "Font Weight", - "clearColor": "Clear Color", - "imageFit": "Image Fit", - "imageLinkUrl": "Link URL", - "noImage": "No image URL set", - "altText": "Alt Text", - "altTextPlaceholder": "Describe the image", - "renderMarkdown": "Render Markdown", - "displayMode": "Display Mode", - "displayField": "Display Field", - "jsonPath": "JSON Path", - "customApiLabel": "Label", - "customApiLabelPlaceholder": "e.g. Temperature", - "customApiUnit": "Unit", - "customApiNoUrl": "No API URL configured", - "customApiError": "Failed to fetch", - "customApiNotArray": "Response is not an array", - "addService": "Add Service", - "showLabels": "Show Labels", - "iconSize": "Icon Size", - "noDashboardLinks": "No dashboard links configured", - "noLimit": "No limit", - "sectionHeading": "Section Heading", - "addSection": "Add Section", - "compactMode": "Compact Mode", - "selectHosts": "Select Hosts", - "listLayout": "List", - "gridLayout": "Grid", - "configureUrl": "Set a URL in the widget settings", - "embeddedContent": "Embedded content", - "noBookmarks": "No bookmarks", - "noSections": "No sections set up", - "noServices": "No services set up", - "configureLocation": "Set a location in the widget settings", - "bannerTextPlaceholder": "Banner text", - "serviceNamePlaceholder": "My service" + "imageUrl": "URL รูปภาพแบบกำหนดเอง", + "imageUrlHint": "เว้นว่างไว้เพื่อใช้ไอคอนเว็บไซต์โดยอัตโนมัติ", + "showImage": "แสดงภาพ", + "description": "คำอธิบาย", + "color": "สี", + "timezone": "เขตเวลา", + "invalidTimezone": "เขตเวลาไม่ถูกต้อง กรุณาใช้ชื่อ IANA เช่น America/New_York", + "showSeconds": "แสดงวินาที", + "format12h": "12 ชั่วโมง", + "content": "เนื้อหา", + "backgroundColor": "สีพื้นหลัง", + "links": "ลิงก์", + "addLink": "เพิ่มลิงก์", + "linkLabel": "ฉลาก", + "categoryLinks": "ลิงก์", + "categoryInfo": "ข้อมูล", + "categorySystem": "ระบบ", + "copyLink": "คัดลอกลิงก์", + "linkCopied": "คัดลอกลิงก์เรียบร้อยแล้ว!", + "location": "ที่ตั้ง", + "temperatureUnit": "หน่วยอุณหภูมิ", + "showForecast": "แสดงพยากรณ์อากาศ 3 วัน", + "scrolling": "อนุญาตให้เลื่อน", + "feedUrl": "URL ฟีด", + "maxItems": "ไอเทมสูงสุด", + "showDescription": "แสดงคำอธิบาย", + "widgetRssName": "ฟีด RSS", + "rssNoFeedUrl": "กำหนดค่า URL ของฟีดในการตั้งค่าวิดเจ็ต", + "rssLoadError": "ไม่สามารถโหลดฟีดได้", + "rssNoItems": "ไม่มีรายการ", + "noHostSelected": "ไม่ได้เลือกโฮสต์", + "displayedMetrics": "ตัวชี้วัดที่แสดงผล", + "metricCpu": "ซีพียู", + "metricMemory": "หน่วยความจำ", + "metricDisk": "ดิสก์", + "metricUptime": "เวลาใช้งาน", + "metricSystem": "ระบบ", + "metricNetwork": "เครือข่าย", + "metricProcesses": "กระบวนการ", + "categoryMonitoring": "การตรวจสอบ", + "noPingUrls": "ไม่มีการกำหนดค่า URL", + "pingLabel": "ฉลาก", + "addPingUrl": "เพิ่ม URL", + "showLatency": "แสดงค่าความหน่วง", + "refreshInterval": "ช่วงเวลาการรีเฟรช", + "seconds": "วินาที", + "filterActivityTypes": "ประเภทตัวกรอง", + "filterTypesHint": "เว้นว่างไว้เพื่อแสดงทั้งหมด", + "showTimestamp": "แสดงเวลา", + "uptimeUnavailable": "ไม่สามารถระบุเวลาใช้งานได้", + "uptimeLabel": "เวลาใช้งาน", + "overviewVersion": "เวอร์ชั่น", + "overviewUpdateLabel": "อัปเดต", + "overviewUpdateAvailable": "มีการอัปเดตแล้ว", + "overviewDatabase": "ฐานข้อมูล", + "overviewUptime": "เวลาใช้งาน", + "noHosts": "ไม่มีการกำหนดค่าโฮสต์", + "hostGridHosts": "โฮสต์", + "hostGridAllHint": "เว้นว่างไว้เพื่อแสดงโฮสต์ทั้งหมด", + "columns": "คอลัมน์", + "showIp": "แสดงที่อยู่ IP", + "layout": "เค้าโครง", + "showStatus": "แสดงสถานะ", + "noActivity": "ไม่มีกิจกรรม", + "widgetPingStatusName": "สถานะการปิง", + "widgetRecentActivityName": "กิจกรรมล่าสุด", + "sshTerminalNoHost": "ไม่มีการกำหนดค่าโฮสต์", + "sshTerminalConnect": "เชื่อมต่อ", + "sshTerminalAutoConnect": "เชื่อมต่ออัตโนมัติเมื่อโหลดเสร็จ", + "connectionTypes": "ประเภทการเชื่อมต่อ", + "calMon": "โม", + "calTue": "ตู", + "calWed": "เรา", + "calThu": "ไทย", + "calFri": "ฟร", + "calSat": "ซา", + "calSun": "ซู", + "startOnMonday": "เริ่มต้นสัปดาห์ในวันจันทร์", + "countdownNoDate": "ยังไม่ได้กำหนดวันเป้าหมาย", + "countdownPast": "กิจกรรมได้จบลงแล้ว", + "countdownDays": "วัน", + "countdownHours": "ชั่วโมง", + "countdownMinutes": "นาที", + "countdownSeconds": "วินาที", + "countdownLabel": "ฉลาก", + "countdownLabelPlaceholder": "เช่น วันเปิดตัว", + "countdownShowDays": "วันแสดง", + "countdownShowHours": "เวลาทำการ", + "targetDate": "วันที่เป้าหมาย", + "searchEngine": "เครื่องมือค้นหา", + "customSearchUrl": "URL ค้นหาแบบกำหนดเอง", + "searchPlaceholder": "ค้นหา...", + "searchGo": "ไป", + "searchPlaceholderLabel": "ข้อความตัวอย่าง", + "searchPlaceholderHint": "ข้อความที่แสดงอยู่ภายในช่องค้นหา", + "openInNewTab": "เปิดในแท็บใหม่", + "searchQueryPlaceholder": "ป้อนคำค้นหา...", + "noSearchShortcuts": "ไม่ได้ตั้งค่าทางลัดใดๆ", + "addSearchShortcut": "เพิ่มทางลัด", + "fontSize": "ขนาดตัวอักษร", + "textAlign": "จัดแนวข้อความ", + "fontWeight": "น้ำหนักตัวอักษร", + "clearColor": "สีใส", + "imageFit": "เหมาะสมกับรูปภาพ", + "imageLinkUrl": "ลิงก์ URL", + "noImage": "ไม่ได้ตั้งค่า URL รูปภาพ", + "altText": "ข้อความแสดงแทน (Alt Text)", + "altTextPlaceholder": "อธิบายภาพ", + "renderMarkdown": "แสดงผลมาร์คดาวน์", + "displayMode": "โหมดการแสดงผล", + "displayField": "ช่องแสดงผล", + "jsonPath": "เส้นทาง JSON", + "customApiLabel": "ฉลาก", + "customApiLabelPlaceholder": "เช่น อุณหภูมิ", + "customApiUnit": "หน่วย", + "customApiNoUrl": "ไม่ได้กำหนดค่า URL API ไว้", + "customApiError": "ไม่สามารถดึงข้อมูลได้", + "customApiNotArray": "คำตอบไม่ใช่อาร์เรย์", + "addService": "เพิ่มบริการ", + "showLabels": "แสดงป้ายกำกับ", + "iconSize": "ขนาดไอคอน", + "noDashboardLinks": "ไม่มีการกำหนดค่าลิงก์แดชบอร์ด", + "noLimit": "ไม่มีขีดจำกัด", + "sectionHeading": "หัวข้อส่วน", + "addSection": "เพิ่มส่วน", + "compactMode": "โหมดกะทัดรัด", + "selectHosts": "เลือกโฮสต์", + "listLayout": "รายการ", + "gridLayout": "ตาราง", + "configureUrl": "ตั้งค่า URL ในการตั้งค่าวิดเจ็ต", + "embeddedContent": "เนื้อหาที่ฝังอยู่", + "noBookmarks": "ไม่มีบุ๊กมาร์ก", + "noSections": "ไม่มีการตั้งค่าส่วนใด ๆ", + "noServices": "ไม่มีการตั้งค่าบริการใดๆ", + "configureLocation": "ตั้งค่าตำแหน่งที่ตั้งในการตั้งค่าวิดเจ็ต", + "bannerTextPlaceholder": "ข้อความแบนเนอร์", + "serviceNamePlaceholder": "บริการของฉัน", + "emptyNote": "Empty note...", + "weatherLoadFailed": "Could not load weather for \"{{location}}\"", + "feelsLike": "Feels like {{temperature}}", + "timezonePlaceholder": "America/New_York (leave blank for local)", + "notesPlaceholder": "Write your notes here...", + "locationPlaceholder": "New York, London, Tokyo...", + "widgets": { + "bookmark_list": { + "name": "Bookmarks", + "description": "A list of quick links" + }, + "calendar": { + "name": "Calendar", + "description": "A month calendar with today highlighted" + }, + "clock": { + "name": "Clock", + "description": "A live clock with configurable timezone" + }, + "countdown": { + "name": "Countdown", + "description": "Counts down to a target date and time" + }, + "custom_api": { + "name": "Custom API", + "description": "Fetch and display data from any JSON API" + }, + "dashboard_links": { + "name": "Dashboard Links", + "description": "Shows your saved dashboard service links" + }, + "folder": { + "name": "Folder", + "description": "A background card for grouping widgets visually" + }, + "host_grid": { + "name": "Host Grid", + "description": "Live status overview grid for all your SSH hosts" + }, + "host_status": { + "name": "Host Status", + "description": "Shows live status and metrics for an SSH host" + }, + "iframe_embed": { + "name": "iFrame Embed", + "description": "Embed any URL in an iframe" + }, + "image_widget": { + "name": "Image", + "description": "Display any image from a URL" + }, + "link_tree": { + "name": "Link Tree", + "description": "Grouped links organized into labeled sections" + }, + "markdown_notes": { + "name": "Markdown Notes", + "description": "Notes with optional Markdown rendering and inline editing" + }, + "notes": { + "name": "Notes", + "description": "A text notes widget" + }, + "ping_status": { + "name": "Ping Status", + "description": "Check if URLs or services are reachable" + }, + "quick_connect": { + "name": "Quick Connect", + "description": "Launch terminal, files, docker, tunnels, and more for your hosts" + }, + "recent_activity": { + "name": "Recent Activity", + "description": "Shows recent terminal, Docker, file, and tunnel activity" + }, + "rss_feed": { + "name": "RSS Feed", + "description": "Display items from an RSS or Atom feed" + }, + "search_bar": { + "name": "Search Bar", + "description": "Quick search with Google, DuckDuckGo, Bing, or a custom engine" + }, + "search_links": { + "name": "Search Shortcuts", + "description": "Quick buttons to search different engines" + }, + "service_grid": { + "name": "Service Grid", + "description": "A grid of service tiles with icons and links" + }, + "service_link": { + "name": "Service Link", + "description": "A clickable tile linking to a service URL" + }, + "ssh_terminal": { + "name": "SSH Terminal", + "description": "An inline SSH terminal connected to a configured host" + }, + "system_overview": { + "name": "System Overview", + "description": "Termix version, database health, and uptime at a glance" + }, + "termix_uptime": { + "name": "Termix Uptime", + "description": "Shows how long the Termix server has been running" + }, + "text_banner": { + "name": "Text Banner", + "description": "A styled text label for sections and headings" + }, + "weather": { + "name": "Weather", + "description": "Live weather for any location" + }, + "docker_widget": { + "name": "Docker Manager", + "description": "Embedded Docker container manager for a configured host" + }, + "file_manager_widget": { + "name": "File Manager", + "description": "Embedded SFTP file manager for a configured host" + }, + "tunnel_widget": { + "name": "Tunnel Manager", + "description": "Embedded SSH tunnel manager for a configured host" + }, + "metrics_chart": { + "name": "Metrics Chart", + "description": "Historical CPU, memory, disk, or network chart for a host" + } + } }, "permissions": { "use": { - "title": "Use the homepage", - "description": "View and edit the homepage canvas and dashboard service links." + "title": "ใช้หน้าแรก", + "description": "ดูและแก้ไขลิงก์บริการบนหน้าแรกและแดชบอร์ด" } }, "settings": { "privateEndpoints": { - "label": "Allowed private hosts", - "description": "Exact private or loopback hostnames/IPs for Ping Status and Custom API widgets. Separate entries with commas or newlines; omit schemes, ports and paths. Empty blocks private destinations." + "label": "อนุญาตให้โฮสต์ส่วนตัวใช้งานได้", + "description": "ระบุชื่อโฮสต์/IP ส่วนตัวหรือแบบ loopback ที่แน่นอนสำหรับวิดเจ็ต Ping Status และ Custom API คั่นรายการด้วยเครื่องหมายจุลภาคหรือขึ้นบรรทัดใหม่ ไม่ต้องระบุ schemes, ports และ paths เว้นช่องว่างสำหรับปลายทางส่วนตัว" }, "privateCertificateAuthority": { - "label": "Private certificate authority (PEM)", - "description": "Optional trusted CA bundle for allowlisted hosts. Certificate verification remains enabled. Leave empty to use the system trust store." + "label": "หน่วยงานออกใบรับรองเอกชน (PEM)", + "description": "ชุดใบรับรอง CA ที่เชื่อถือได้สำหรับโฮสต์ที่อนุญาต (ไม่บังคับ) การตรวจสอบใบรับรองยังคงเปิดใช้งานอยู่ เว้นว่างไว้เพื่อใช้ที่เก็บใบรับรองที่เชื่อถือได้ของระบบ" } + }, + "plugin": { + "name": "Homepage" } } diff --git a/plugins/homepage/locales/translated/tr_TR.json b/plugins/homepage/locales/translated/tr_TR.json index f58ea49d8..1994898c6 100644 --- a/plugins/homepage/locales/translated/tr_TR.json +++ b/plugins/homepage/locales/translated/tr_TR.json @@ -18,7 +18,7 @@ "homepage": { "title": "Ana Sayfa", "addWidget": "Bileşen Ekle", - "noWidgetsInCategory": "No widgets in this category", + "noWidgetsInCategory": "Bu kategoride hiçbir widget yok.", "editWidget": "Bileşeni Düzenle", "zoomIn": "Yakınlaştır", "zoomOut": "Uzaklaştır", @@ -39,7 +39,7 @@ "description": "Açıklama", "color": "Renk", "timezone": "Zaman Dilimi", - "invalidTimezone": "Invalid timezone. Use an IANA name such as America/New_York", + "invalidTimezone": "Geçersiz saat dilimi. Lütfen America/New_York gibi bir IANA adı kullanın.", "showSeconds": "Saniyeleri göster", "format12h": "12 saatlik", "content": "İçerik", @@ -60,9 +60,9 @@ "maxItems": "Maksimum Öğe Sayısı", "showDescription": "Açıklamayı Göster", "widgetRssName": "RSS Akışı", - "rssNoFeedUrl": "Configure a feed URL in widget settings", - "rssLoadError": "Could not load feed", - "rssNoItems": "No items", + "rssNoFeedUrl": "Widget ayarlarında bir besleme URL'si yapılandırın.", + "rssLoadError": "Besleme yüklenemedi.", + "rssNoItems": "Hiçbir ürün yok", "noHostSelected": "Sunucu seçilmedi", "displayedMetrics": "Gösterilen Metrikler", "metricCpu": "CPU", @@ -162,29 +162,164 @@ "selectHosts": "Sunucuları Seç", "listLayout": "Liste", "gridLayout": "Izgara", - "configureUrl": "Set a URL in the widget settings", - "embeddedContent": "Embedded content", - "noBookmarks": "No bookmarks", - "noSections": "No sections set up", - "noServices": "No services set up", - "configureLocation": "Set a location in the widget settings", - "bannerTextPlaceholder": "Banner text", - "serviceNamePlaceholder": "My service" + "configureUrl": "Widget ayarlarında bir URL belirleyin.", + "embeddedContent": "Gömülü içerik", + "noBookmarks": "Yer imi yok", + "noSections": "Hiçbir bölüm oluşturulmadı.", + "noServices": "Hiçbir hizmet kurulmadı.", + "configureLocation": "Widget ayarlarında bir konum belirleyin.", + "bannerTextPlaceholder": "Afiş metni", + "serviceNamePlaceholder": "Hizmetim", + "emptyNote": "Empty note...", + "weatherLoadFailed": "Could not load weather for \"{{location}}\"", + "feelsLike": "Feels like {{temperature}}", + "timezonePlaceholder": "America/New_York (leave blank for local)", + "notesPlaceholder": "Write your notes here...", + "locationPlaceholder": "New York, London, Tokyo...", + "widgets": { + "bookmark_list": { + "name": "Bookmarks", + "description": "A list of quick links" + }, + "calendar": { + "name": "Calendar", + "description": "A month calendar with today highlighted" + }, + "clock": { + "name": "Clock", + "description": "A live clock with configurable timezone" + }, + "countdown": { + "name": "Countdown", + "description": "Counts down to a target date and time" + }, + "custom_api": { + "name": "Custom API", + "description": "Fetch and display data from any JSON API" + }, + "dashboard_links": { + "name": "Dashboard Links", + "description": "Shows your saved dashboard service links" + }, + "folder": { + "name": "Folder", + "description": "A background card for grouping widgets visually" + }, + "host_grid": { + "name": "Host Grid", + "description": "Live status overview grid for all your SSH hosts" + }, + "host_status": { + "name": "Host Status", + "description": "Shows live status and metrics for an SSH host" + }, + "iframe_embed": { + "name": "iFrame Embed", + "description": "Embed any URL in an iframe" + }, + "image_widget": { + "name": "Image", + "description": "Display any image from a URL" + }, + "link_tree": { + "name": "Link Tree", + "description": "Grouped links organized into labeled sections" + }, + "markdown_notes": { + "name": "Markdown Notes", + "description": "Notes with optional Markdown rendering and inline editing" + }, + "notes": { + "name": "Notes", + "description": "A text notes widget" + }, + "ping_status": { + "name": "Ping Status", + "description": "Check if URLs or services are reachable" + }, + "quick_connect": { + "name": "Quick Connect", + "description": "Launch terminal, files, docker, tunnels, and more for your hosts" + }, + "recent_activity": { + "name": "Recent Activity", + "description": "Shows recent terminal, Docker, file, and tunnel activity" + }, + "rss_feed": { + "name": "RSS Feed", + "description": "Display items from an RSS or Atom feed" + }, + "search_bar": { + "name": "Search Bar", + "description": "Quick search with Google, DuckDuckGo, Bing, or a custom engine" + }, + "search_links": { + "name": "Search Shortcuts", + "description": "Quick buttons to search different engines" + }, + "service_grid": { + "name": "Service Grid", + "description": "A grid of service tiles with icons and links" + }, + "service_link": { + "name": "Service Link", + "description": "A clickable tile linking to a service URL" + }, + "ssh_terminal": { + "name": "SSH Terminal", + "description": "An inline SSH terminal connected to a configured host" + }, + "system_overview": { + "name": "System Overview", + "description": "Termix version, database health, and uptime at a glance" + }, + "termix_uptime": { + "name": "Termix Uptime", + "description": "Shows how long the Termix server has been running" + }, + "text_banner": { + "name": "Text Banner", + "description": "A styled text label for sections and headings" + }, + "weather": { + "name": "Weather", + "description": "Live weather for any location" + }, + "docker_widget": { + "name": "Docker Manager", + "description": "Embedded Docker container manager for a configured host" + }, + "file_manager_widget": { + "name": "File Manager", + "description": "Embedded SFTP file manager for a configured host" + }, + "tunnel_widget": { + "name": "Tunnel Manager", + "description": "Embedded SSH tunnel manager for a configured host" + }, + "metrics_chart": { + "name": "Metrics Chart", + "description": "Historical CPU, memory, disk, or network chart for a host" + } + } }, "permissions": { "use": { - "title": "Use the homepage", - "description": "View and edit the homepage canvas and dashboard service links." + "title": "Ana sayfayı kullanın", + "description": "Ana sayfa tuvalini ve kontrol paneli hizmet bağlantılarını görüntüleyin ve düzenleyin." } }, "settings": { "privateEndpoints": { - "label": "Allowed private hosts", - "description": "Exact private or loopback hostnames/IPs for Ping Status and Custom API widgets. Separate entries with commas or newlines; omit schemes, ports and paths. Empty blocks private destinations." + "label": "Özel ev sahiplerine izin verilir.", + "description": "Ping Durumu ve Özel API widget'ları için tam özel veya geri döngü ana bilgisayar adları/IP adresleri. Girişleri virgül veya yeni satırlarla ayırın; şemaları, bağlantı noktalarını ve yolları atlayın. Boş bloklar özel hedefleri belirtir." }, "privateCertificateAuthority": { - "label": "Private certificate authority (PEM)", - "description": "Optional trusted CA bundle for allowlisted hosts. Certificate verification remains enabled. Leave empty to use the system trust store." + "label": "Özel sertifika yetkilisi (PEM)", + "description": "İzin verilen sunucular için isteğe bağlı güvenilir CA paketi. Sertifika doğrulaması etkin kalır. Sistem güven deposunu kullanmak için boş bırakın." } + }, + "plugin": { + "name": "Homepage" } } diff --git a/plugins/homepage/locales/translated/uk_UA.json b/plugins/homepage/locales/translated/uk_UA.json index 760b3a445..671ea5985 100644 --- a/plugins/homepage/locales/translated/uk_UA.json +++ b/plugins/homepage/locales/translated/uk_UA.json @@ -1,190 +1,325 @@ { "nav": { - "homepage": "Homepage" + "homepage": "Домашня сторінка" }, "dashboard": { - "serviceLinks": "Service Links", - "homepagePreview": "Homepage Preview" + "serviceLinks": "Посилання на сервіси", + "homepagePreview": "Попередній перегляд головної сторінки" }, "dashboardTab": { - "serviceLinksTitle": "Service Links", - "serviceLinksEmpty": "No service links yet", - "serviceLinksAdd": "Add", - "serviceLinksLabelPlaceholder": "My Service", + "serviceLinksTitle": "Посилання на сервіси", + "serviceLinksEmpty": "Поки що немає посилань на сервіси", + "serviceLinksAdd": "Додати", + "serviceLinksLabelPlaceholder": "Моя послуга", "serviceLinksUrlPlaceholder": "http://192.168.1.10:8080", - "serviceLinksInvalidUrl": "Enter a valid web address", - "serviceLinksAddFailed": "Failed to add service link" + "serviceLinksInvalidUrl": "Введіть дійсну веб-адресу", + "serviceLinksAddFailed": "Не вдалося додати посилання на послугу" }, "homepage": { - "title": "Homepage", - "addWidget": "Add Widget", - "noWidgetsInCategory": "No widgets in this category", - "editWidget": "Edit Widget", - "zoomIn": "Zoom In", - "zoomOut": "Zoom Out", - "resetView": "Reset View", - "lockLayout": "Lock Layout", - "unlockLayout": "Unlock Layout", - "noWidgets": "Right-click or click + to add your first widget", - "openFullView": "Open Full View", - "previewTitle": "Homepage Preview", - "cancel": "Cancel", - "save": "Save", - "title_label": "Title", - "widgetTitlePlaceholder": "Widget title (optional)", - "url": "URL", - "imageUrl": "Custom Image URL", - "imageUrlHint": "Leave blank to use the site favicon automatically", - "showImage": "Show Image", - "description": "Description", - "color": "Color", - "timezone": "Timezone", - "invalidTimezone": "Invalid timezone. Use an IANA name such as America/New_York", - "showSeconds": "Show seconds", - "format12h": "12-hour", - "content": "Content", - "backgroundColor": "Background Color", - "links": "Links", - "addLink": "Add Link", - "linkLabel": "Label", - "categoryLinks": "Links", - "categoryInfo": "Info", - "categorySystem": "System", - "copyLink": "Copy Link", - "linkCopied": "Link copied!", - "location": "Location", - "temperatureUnit": "Temperature Unit", - "showForecast": "Show 3-day forecast", - "scrolling": "Allow Scrolling", - "feedUrl": "Feed URL", - "maxItems": "Max Items", - "showDescription": "Show Description", - "widgetRssName": "RSS Feed", - "rssNoFeedUrl": "Configure a feed URL in widget settings", - "rssLoadError": "Could not load feed", - "rssNoItems": "No items", - "noHostSelected": "No host selected", - "displayedMetrics": "Displayed Metrics", - "metricCpu": "CPU", - "metricMemory": "Memory", - "metricDisk": "Disk", - "metricUptime": "Uptime", - "metricSystem": "System", - "metricNetwork": "Network", - "metricProcesses": "Processes", - "categoryMonitoring": "Monitoring", - "noPingUrls": "No URLs configured", - "pingLabel": "Label", - "addPingUrl": "Add URL", - "showLatency": "Show Latency", - "refreshInterval": "Refresh Interval", - "seconds": "seconds", - "filterActivityTypes": "Filter Types", - "filterTypesHint": "Leave empty to show all", - "showTimestamp": "Show Timestamp", - "uptimeUnavailable": "Uptime unavailable", - "uptimeLabel": "Uptime", - "overviewVersion": "Version", - "overviewUpdateLabel": "Update", - "overviewUpdateAvailable": "Update available", - "overviewDatabase": "Database", - "overviewUptime": "Uptime", - "noHosts": "No hosts configured", - "hostGridHosts": "Hosts", - "hostGridAllHint": "Leave empty to show all hosts", - "columns": "Columns", - "showIp": "Show IP Address", - "layout": "Layout", - "showStatus": "Show Status", - "noActivity": "No activity", - "widgetPingStatusName": "Ping Status", - "widgetRecentActivityName": "Recent Activity", - "sshTerminalNoHost": "No host configured", - "sshTerminalConnect": "Connect", - "sshTerminalAutoConnect": "Auto-connect on load", - "connectionTypes": "Connection Types", - "calMon": "Mo", - "calTue": "Tu", - "calWed": "We", - "calThu": "Th", - "calFri": "Fr", - "calSat": "Sa", - "calSun": "Su", - "startOnMonday": "Start week on Monday", - "countdownNoDate": "No target date set", - "countdownPast": "Event has passed", - "countdownDays": "days", - "countdownHours": "hrs", - "countdownMinutes": "min", - "countdownSeconds": "sec", - "countdownLabel": "Label", - "countdownLabelPlaceholder": "e.g. Launch Day", - "countdownShowDays": "Show Days", - "countdownShowHours": "Show Hours", - "targetDate": "Target Date", - "searchEngine": "Search Engine", - "customSearchUrl": "Custom Search URL", - "searchPlaceholder": "Search...", - "searchGo": "Go", - "searchPlaceholderLabel": "Placeholder Text", - "searchPlaceholderHint": "Text shown inside the search input", - "openInNewTab": "Open in New Tab", - "searchQueryPlaceholder": "Enter query...", - "noSearchShortcuts": "No shortcuts configured", - "addSearchShortcut": "Add Shortcut", - "fontSize": "Font Size", - "textAlign": "Text Align", - "fontWeight": "Font Weight", - "clearColor": "Clear Color", - "imageFit": "Image Fit", - "imageLinkUrl": "Link URL", - "noImage": "No image URL set", - "altText": "Alt Text", - "altTextPlaceholder": "Describe the image", - "renderMarkdown": "Render Markdown", - "displayMode": "Display Mode", - "displayField": "Display Field", - "jsonPath": "JSON Path", - "customApiLabel": "Label", - "customApiLabelPlaceholder": "e.g. Temperature", - "customApiUnit": "Unit", - "customApiNoUrl": "No API URL configured", - "customApiError": "Failed to fetch", - "customApiNotArray": "Response is not an array", - "addService": "Add Service", - "showLabels": "Show Labels", - "iconSize": "Icon Size", - "noDashboardLinks": "No dashboard links configured", - "noLimit": "No limit", - "sectionHeading": "Section Heading", - "addSection": "Add Section", - "compactMode": "Compact Mode", - "selectHosts": "Select Hosts", - "listLayout": "List", - "gridLayout": "Grid", - "configureUrl": "Set a URL in the widget settings", - "embeddedContent": "Embedded content", - "noBookmarks": "No bookmarks", - "noSections": "No sections set up", - "noServices": "No services set up", - "configureLocation": "Set a location in the widget settings", - "bannerTextPlaceholder": "Banner text", - "serviceNamePlaceholder": "My service" + "title": "Домашня сторінка", + "addWidget": "Додати віджет", + "noWidgetsInCategory": "У цій категорії немає віджетів", + "editWidget": "Редагувати віджет", + "zoomIn": "Збільшити масштаб", + "zoomOut": "Зменшити масштаб", + "resetView": "Скинути вигляд", + "lockLayout": "Макет замка", + "unlockLayout": "Розблокувати макет", + "noWidgets": "Клацніть правою кнопкою миші або натисніть кнопку +, щоб додати свій перший віджет", + "openFullView": "Відкрити повний перегляд", + "previewTitle": "Попередній перегляд головної сторінки", + "cancel": "Скасувати", + "save": "Зберегти", + "title_label": "Назва", + "widgetTitlePlaceholder": "Назва віджета (необов'язково)", + "url": "URL-адреса", + "imageUrl": "URL-адреса користувацького зображення", + "imageUrlHint": "Залиште поле порожнім, щоб автоматично використовувати фавіконку сайту", + "showImage": "Показати зображення", + "description": "Опис", + "color": "Колір", + "timezone": "Часовий пояс", + "invalidTimezone": "Недійсний часовий пояс. Використайте назву IANA, наприклад, America/New_York.", + "showSeconds": "Показати секунди", + "format12h": "12-годинний", + "content": "Зміст", + "backgroundColor": "Колір фону", + "links": "Посилання", + "addLink": "Додати посилання", + "linkLabel": "Мітка", + "categoryLinks": "Посилання", + "categoryInfo": "Інформація", + "categorySystem": "Система", + "copyLink": "Копіювати посилання", + "linkCopied": "Посилання скопійовано!", + "location": "Розташування", + "temperatureUnit": "Одиниця вимірювання температури", + "showForecast": "Показати 3-денний прогноз", + "scrolling": "Дозволити прокручування", + "feedUrl": "URL-адреса стрічки", + "maxItems": "Макс. кількість елементів", + "showDescription": "Показати опис", + "widgetRssName": "RSS-канал", + "rssNoFeedUrl": "Налаштуйте URL-адресу стрічки в налаштуваннях віджета", + "rssLoadError": "Не вдалося завантажити стрічку", + "rssNoItems": "Немає товарів", + "noHostSelected": "Хост не вибрано", + "displayedMetrics": "Відображені показники", + "metricCpu": "Процесор", + "metricMemory": "Пам'ять", + "metricDisk": "Диск", + "metricUptime": "Час безвідмовної роботи", + "metricSystem": "Система", + "metricNetwork": "Мережа", + "metricProcesses": "Процеси", + "categoryMonitoring": "Моніторинг", + "noPingUrls": "URL-адреси не налаштовано", + "pingLabel": "Мітка", + "addPingUrl": "Додати URL-адресу", + "showLatency": "Показати затримку", + "refreshInterval": "Інтервал оновлення", + "seconds": "секунди", + "filterActivityTypes": "Типи фільтрів", + "filterTypesHint": "Залиште порожнім, щоб показати всі", + "showTimestamp": "Показати позначку часу", + "uptimeUnavailable": "Час безперебійної роботи недоступний", + "uptimeLabel": "Час безвідмовної роботи", + "overviewVersion": "Версія", + "overviewUpdateLabel": "Оновлення", + "overviewUpdateAvailable": "Доступне оновлення", + "overviewDatabase": "База даних", + "overviewUptime": "Час безвідмовної роботи", + "noHosts": "Немає налаштованих хостів", + "hostGridHosts": "Хости", + "hostGridAllHint": "Залиште порожнім, щоб показати всіх хостів", + "columns": "Колонки", + "showIp": "Показати IP-адресу", + "layout": "Макет", + "showStatus": "Показати статус", + "noActivity": "Немає активності", + "widgetPingStatusName": "Стан пінгу", + "widgetRecentActivityName": "Нещодавня активність", + "sshTerminalNoHost": "Хост не налаштовано", + "sshTerminalConnect": "Підключитися", + "sshTerminalAutoConnect": "Автоматичне підключення під час завантаження", + "connectionTypes": "Типи з'єднань", + "calMon": "Мо", + "calTue": "Вт", + "calWed": "Ми", + "calThu": "Чт", + "calFri": "Пт", + "calSat": "Сб", + "calSun": "Су", + "startOnMonday": "Початок тижня в понеділок", + "countdownNoDate": "Цільова дата не встановлена", + "countdownPast": "Подія пройшла", + "countdownDays": "дні", + "countdownHours": "год.", + "countdownMinutes": "хв", + "countdownSeconds": "сек", + "countdownLabel": "Мітка", + "countdownLabelPlaceholder": "наприклад, день запуску", + "countdownShowDays": "Дні показу", + "countdownShowHours": "Години роботи шоу", + "targetDate": "Цільова дата", + "searchEngine": "Пошукова система", + "customSearchUrl": "URL-адреса користувацького пошуку", + "searchPlaceholder": "Пошук...", + "searchGo": "Іти", + "searchPlaceholderLabel": "Текст-заповнювач", + "searchPlaceholderHint": "Текст, що відображається всередині пошукового поля", + "openInNewTab": "Відкрити в новій вкладці", + "searchQueryPlaceholder": "Введіть запит...", + "noSearchShortcuts": "Немає налаштованих комбінацій клавіш", + "addSearchShortcut": "Додати ярлик", + "fontSize": "Розмір шрифту", + "textAlign": "Вирівнювання тексту", + "fontWeight": "Вага шрифту", + "clearColor": "Чіткий колір", + "imageFit": "Розмір зображення", + "imageLinkUrl": "URL-адреса посилання", + "noImage": "URL-адреса зображення не встановлена", + "altText": "Альтернативний текст", + "altTextPlaceholder": "Опишіть зображення", + "renderMarkdown": "Рендеринг Markdown", + "displayMode": "Режим відображення", + "displayField": "Поле відображення", + "jsonPath": "Шлях JSON", + "customApiLabel": "Мітка", + "customApiLabelPlaceholder": "наприклад, температура", + "customApiUnit": "Одиниця", + "customApiNoUrl": "URL-адреса API не налаштована", + "customApiError": "Не вдалося отримати", + "customApiNotArray": "Відповідь не є масивом", + "addService": "Додати послугу", + "showLabels": "Показати мітки", + "iconSize": "Розмір значка", + "noDashboardLinks": "Посилання на інформаційну панель не налаштовано", + "noLimit": "Без обмежень", + "sectionHeading": "Заголовок розділу", + "addSection": "Додати розділ", + "compactMode": "Компактний режим", + "selectHosts": "Виберіть хости", + "listLayout": "Список", + "gridLayout": "Сітка", + "configureUrl": "Встановіть URL-адресу в налаштуваннях віджета", + "embeddedContent": "Вбудований контент", + "noBookmarks": "Без закладок", + "noSections": "Розділи не налаштовано", + "noServices": "Жодних послуг не налаштовано", + "configureLocation": "Встановіть місцезнаходження в налаштуваннях віджета", + "bannerTextPlaceholder": "Текст банера", + "serviceNamePlaceholder": "Моя послуга", + "emptyNote": "Empty note...", + "weatherLoadFailed": "Could not load weather for \"{{location}}\"", + "feelsLike": "Feels like {{temperature}}", + "timezonePlaceholder": "America/New_York (leave blank for local)", + "notesPlaceholder": "Write your notes here...", + "locationPlaceholder": "New York, London, Tokyo...", + "widgets": { + "bookmark_list": { + "name": "Bookmarks", + "description": "A list of quick links" + }, + "calendar": { + "name": "Calendar", + "description": "A month calendar with today highlighted" + }, + "clock": { + "name": "Clock", + "description": "A live clock with configurable timezone" + }, + "countdown": { + "name": "Countdown", + "description": "Counts down to a target date and time" + }, + "custom_api": { + "name": "Custom API", + "description": "Fetch and display data from any JSON API" + }, + "dashboard_links": { + "name": "Dashboard Links", + "description": "Shows your saved dashboard service links" + }, + "folder": { + "name": "Folder", + "description": "A background card for grouping widgets visually" + }, + "host_grid": { + "name": "Host Grid", + "description": "Live status overview grid for all your SSH hosts" + }, + "host_status": { + "name": "Host Status", + "description": "Shows live status and metrics for an SSH host" + }, + "iframe_embed": { + "name": "iFrame Embed", + "description": "Embed any URL in an iframe" + }, + "image_widget": { + "name": "Image", + "description": "Display any image from a URL" + }, + "link_tree": { + "name": "Link Tree", + "description": "Grouped links organized into labeled sections" + }, + "markdown_notes": { + "name": "Markdown Notes", + "description": "Notes with optional Markdown rendering and inline editing" + }, + "notes": { + "name": "Notes", + "description": "A text notes widget" + }, + "ping_status": { + "name": "Ping Status", + "description": "Check if URLs or services are reachable" + }, + "quick_connect": { + "name": "Quick Connect", + "description": "Launch terminal, files, docker, tunnels, and more for your hosts" + }, + "recent_activity": { + "name": "Recent Activity", + "description": "Shows recent terminal, Docker, file, and tunnel activity" + }, + "rss_feed": { + "name": "RSS Feed", + "description": "Display items from an RSS or Atom feed" + }, + "search_bar": { + "name": "Search Bar", + "description": "Quick search with Google, DuckDuckGo, Bing, or a custom engine" + }, + "search_links": { + "name": "Search Shortcuts", + "description": "Quick buttons to search different engines" + }, + "service_grid": { + "name": "Service Grid", + "description": "A grid of service tiles with icons and links" + }, + "service_link": { + "name": "Service Link", + "description": "A clickable tile linking to a service URL" + }, + "ssh_terminal": { + "name": "SSH Terminal", + "description": "An inline SSH terminal connected to a configured host" + }, + "system_overview": { + "name": "System Overview", + "description": "Termix version, database health, and uptime at a glance" + }, + "termix_uptime": { + "name": "Termix Uptime", + "description": "Shows how long the Termix server has been running" + }, + "text_banner": { + "name": "Text Banner", + "description": "A styled text label for sections and headings" + }, + "weather": { + "name": "Weather", + "description": "Live weather for any location" + }, + "docker_widget": { + "name": "Docker Manager", + "description": "Embedded Docker container manager for a configured host" + }, + "file_manager_widget": { + "name": "File Manager", + "description": "Embedded SFTP file manager for a configured host" + }, + "tunnel_widget": { + "name": "Tunnel Manager", + "description": "Embedded SSH tunnel manager for a configured host" + }, + "metrics_chart": { + "name": "Metrics Chart", + "description": "Historical CPU, memory, disk, or network chart for a host" + } + } }, "permissions": { "use": { - "title": "Use the homepage", - "description": "View and edit the homepage canvas and dashboard service links." + "title": "Використовуйте головну сторінку", + "description": "Переглядайте та редагуйте посилання на сервіси на головній сторінці та панелі інструментів." } }, "settings": { "privateEndpoints": { - "label": "Allowed private hosts", - "description": "Exact private or loopback hostnames/IPs for Ping Status and Custom API widgets. Separate entries with commas or newlines; omit schemes, ports and paths. Empty blocks private destinations." + "label": "Дозволені приватні хости", + "description": "Точні приватні або зворотні імена хостів/IP-адреси для віджетів Ping Status та Custom API. Розділяйте записи комами або символами нового рядка; пропускайте схеми, порти та шляхи. Порожні блоки блокують приватні пункти призначення." }, "privateCertificateAuthority": { - "label": "Private certificate authority (PEM)", - "description": "Optional trusted CA bundle for allowlisted hosts. Certificate verification remains enabled. Leave empty to use the system trust store." + "label": "Приватний центр сертифікації (PEM)", + "description": "Додатковий пакет довірених ЦС для хостів із білого списку. Перевірка сертифікатів залишається ввімкненою. Залиште поле порожнім, щоб використовувати системне сховище довірених сертифікатів." } + }, + "plugin": { + "name": "Homepage" } } diff --git a/plugins/homepage/locales/translated/vi_VN.json b/plugins/homepage/locales/translated/vi_VN.json index c4fa125f1..f5c2a210a 100644 --- a/plugins/homepage/locales/translated/vi_VN.json +++ b/plugins/homepage/locales/translated/vi_VN.json @@ -18,7 +18,7 @@ "homepage": { "title": "Trang chủ", "addWidget": "Thêm widget", - "noWidgetsInCategory": "No widgets in this category", + "noWidgetsInCategory": "Không có tiện ích nào trong danh mục này.", "editWidget": "Sửa widget", "zoomIn": "Phóng to", "zoomOut": "Thu nhỏ", @@ -39,7 +39,7 @@ "description": "Mô tả", "color": "Màu sắc", "timezone": "Múi giờ", - "invalidTimezone": "Invalid timezone. Use an IANA name such as America/New_York", + "invalidTimezone": "Múi giờ không hợp lệ. Hãy sử dụng tên IANA như America/New_York.", "showSeconds": "Hiển thị giây", "format12h": "12 giờ", "content": "Nội dung", @@ -60,9 +60,9 @@ "maxItems": "Số mục tối đa", "showDescription": "Hiển thị mô tả", "widgetRssName": "Nguồn RSS", - "rssNoFeedUrl": "Configure a feed URL in widget settings", - "rssLoadError": "Could not load feed", - "rssNoItems": "No items", + "rssNoFeedUrl": "Cấu hình URL nguồn cấp dữ liệu trong cài đặt tiện ích.", + "rssLoadError": "Không thể tải nguồn cấp dữ liệu", + "rssNoItems": "Không có mặt hàng nào", "noHostSelected": "Chưa chọn máy chủ", "displayedMetrics": "Chỉ số hiển thị", "metricCpu": "CPU", @@ -162,29 +162,164 @@ "selectHosts": "Chọn máy chủ", "listLayout": "Danh sách", "gridLayout": "Lưới", - "configureUrl": "Set a URL in the widget settings", - "embeddedContent": "Embedded content", - "noBookmarks": "No bookmarks", - "noSections": "No sections set up", - "noServices": "No services set up", - "configureLocation": "Set a location in the widget settings", - "bannerTextPlaceholder": "Banner text", - "serviceNamePlaceholder": "My service" + "configureUrl": "Đặt URL trong cài đặt tiện ích.", + "embeddedContent": "Nội dung nhúng", + "noBookmarks": "Không có dấu trang", + "noSections": "Chưa có phần nào được thiết lập.", + "noServices": "Chưa có dịch vụ nào được thiết lập.", + "configureLocation": "Chọn vị trí trong cài đặt tiện ích.", + "bannerTextPlaceholder": "Văn bản biểu ngữ", + "serviceNamePlaceholder": "Dịch vụ của tôi", + "emptyNote": "Empty note...", + "weatherLoadFailed": "Could not load weather for \"{{location}}\"", + "feelsLike": "Feels like {{temperature}}", + "timezonePlaceholder": "America/New_York (leave blank for local)", + "notesPlaceholder": "Write your notes here...", + "locationPlaceholder": "New York, London, Tokyo...", + "widgets": { + "bookmark_list": { + "name": "Bookmarks", + "description": "A list of quick links" + }, + "calendar": { + "name": "Calendar", + "description": "A month calendar with today highlighted" + }, + "clock": { + "name": "Clock", + "description": "A live clock with configurable timezone" + }, + "countdown": { + "name": "Countdown", + "description": "Counts down to a target date and time" + }, + "custom_api": { + "name": "Custom API", + "description": "Fetch and display data from any JSON API" + }, + "dashboard_links": { + "name": "Dashboard Links", + "description": "Shows your saved dashboard service links" + }, + "folder": { + "name": "Folder", + "description": "A background card for grouping widgets visually" + }, + "host_grid": { + "name": "Host Grid", + "description": "Live status overview grid for all your SSH hosts" + }, + "host_status": { + "name": "Host Status", + "description": "Shows live status and metrics for an SSH host" + }, + "iframe_embed": { + "name": "iFrame Embed", + "description": "Embed any URL in an iframe" + }, + "image_widget": { + "name": "Image", + "description": "Display any image from a URL" + }, + "link_tree": { + "name": "Link Tree", + "description": "Grouped links organized into labeled sections" + }, + "markdown_notes": { + "name": "Markdown Notes", + "description": "Notes with optional Markdown rendering and inline editing" + }, + "notes": { + "name": "Notes", + "description": "A text notes widget" + }, + "ping_status": { + "name": "Ping Status", + "description": "Check if URLs or services are reachable" + }, + "quick_connect": { + "name": "Quick Connect", + "description": "Launch terminal, files, docker, tunnels, and more for your hosts" + }, + "recent_activity": { + "name": "Recent Activity", + "description": "Shows recent terminal, Docker, file, and tunnel activity" + }, + "rss_feed": { + "name": "RSS Feed", + "description": "Display items from an RSS or Atom feed" + }, + "search_bar": { + "name": "Search Bar", + "description": "Quick search with Google, DuckDuckGo, Bing, or a custom engine" + }, + "search_links": { + "name": "Search Shortcuts", + "description": "Quick buttons to search different engines" + }, + "service_grid": { + "name": "Service Grid", + "description": "A grid of service tiles with icons and links" + }, + "service_link": { + "name": "Service Link", + "description": "A clickable tile linking to a service URL" + }, + "ssh_terminal": { + "name": "SSH Terminal", + "description": "An inline SSH terminal connected to a configured host" + }, + "system_overview": { + "name": "System Overview", + "description": "Termix version, database health, and uptime at a glance" + }, + "termix_uptime": { + "name": "Termix Uptime", + "description": "Shows how long the Termix server has been running" + }, + "text_banner": { + "name": "Text Banner", + "description": "A styled text label for sections and headings" + }, + "weather": { + "name": "Weather", + "description": "Live weather for any location" + }, + "docker_widget": { + "name": "Docker Manager", + "description": "Embedded Docker container manager for a configured host" + }, + "file_manager_widget": { + "name": "File Manager", + "description": "Embedded SFTP file manager for a configured host" + }, + "tunnel_widget": { + "name": "Tunnel Manager", + "description": "Embedded SSH tunnel manager for a configured host" + }, + "metrics_chart": { + "name": "Metrics Chart", + "description": "Historical CPU, memory, disk, or network chart for a host" + } + } }, "permissions": { "use": { - "title": "Use the homepage", - "description": "View and edit the homepage canvas and dashboard service links." + "title": "Sử dụng trang chủ", + "description": "Xem và chỉnh sửa giao diện trang chủ và các liên kết dịch vụ trên bảng điều khiển." } }, "settings": { "privateEndpoints": { - "label": "Allowed private hosts", - "description": "Exact private or loopback hostnames/IPs for Ping Status and Custom API widgets. Separate entries with commas or newlines; omit schemes, ports and paths. Empty blocks private destinations." + "label": "Cho phép chủ nhà riêng", + "description": "Nhập chính xác tên máy chủ/địa chỉ IP riêng hoặc loopback cho tiện ích Ping Status và Custom API. Phân tách các mục bằng dấu phẩy hoặc xuống dòng; bỏ qua lược đồ, cổng và đường dẫn. Để trống các mục đích riêng tư." }, "privateCertificateAuthority": { - "label": "Private certificate authority (PEM)", - "description": "Optional trusted CA bundle for allowlisted hosts. Certificate verification remains enabled. Leave empty to use the system trust store." + "label": "Cơ quan cấp chứng chỉ tư nhân (PEM)", + "description": "Gói CA đáng tin cậy tùy chọn cho các máy chủ được phép. Quá trình xác minh chứng chỉ vẫn được bật. Để trống để sử dụng kho lưu trữ chứng chỉ tin cậy của hệ thống." } + }, + "plugin": { + "name": "Homepage" } } diff --git a/plugins/homepage/locales/translated/zh_CN.json b/plugins/homepage/locales/translated/zh_CN.json index 509e59a17..ee9b2ae7b 100644 --- a/plugins/homepage/locales/translated/zh_CN.json +++ b/plugins/homepage/locales/translated/zh_CN.json @@ -18,7 +18,7 @@ "homepage": { "title": "主页", "addWidget": "添加小部件", - "noWidgetsInCategory": "此分类没有组件", + "noWidgetsInCategory": "此类别中没有小部件", "editWidget": "编辑小部件", "zoomIn": "放大", "zoomOut": "缩小", @@ -39,7 +39,7 @@ "description": "描述", "color": "颜色", "timezone": "时区", - "invalidTimezone": "时区无效,请使用 America/New_York 等 IANA 时区名称", + "invalidTimezone": "时区无效。请使用 IANA 名称,例如 America/New_York。", "showSeconds": "显示秒", "format12h": "12 小时制", "content": "内容", @@ -60,9 +60,9 @@ "maxItems": "最大条目数", "showDescription": "显示描述", "widgetRssName": "RSS 订阅源", - "rssNoFeedUrl": "请在组件设置中配置订阅源 URL", - "rssLoadError": "无法加载订阅源", - "rssNoItems": "暂无项目", + "rssNoFeedUrl": "在小部件设置中配置信息源 URL", + "rssLoadError": "无法加载饲料", + "rssNoItems": "无商品", "noHostSelected": "未选择主机", "displayedMetrics": "显示指标", "metricCpu": "CPU", @@ -162,164 +162,164 @@ "selectHosts": "选择主机", "listLayout": "列表", "gridLayout": "网格", - "configureUrl": "请在组件设置中填写 URL", - "embeddedContent": "嵌入内容", - "noBookmarks": "暂无书签", - "noSections": "尚未设置分区", - "noServices": "尚未设置服务", - "configureLocation": "请在组件设置中选择位置", + "configureUrl": "在小部件设置中设置 URL", + "embeddedContent": "嵌入式内容", + "noBookmarks": "没有书签", + "noSections": "未设置任何部分。", + "noServices": "未设置任何服务。", + "configureLocation": "在小部件设置中设置位置", "bannerTextPlaceholder": "横幅文字", "serviceNamePlaceholder": "我的服务", - "emptyNote": "暂无笔记内容……", - "weatherLoadFailed": "无法加载“{{location}}”的天气", - "feelsLike": "体感温度 {{temperature}}", - "timezonePlaceholder": "Asia/Shanghai(留空使用本地时区)", - "notesPlaceholder": "在此填写笔记……", - "locationPlaceholder": "北京、上海、东京……", + "emptyNote": "Empty note...", + "weatherLoadFailed": "Could not load weather for \"{{location}}\"", + "feelsLike": "Feels like {{temperature}}", + "timezonePlaceholder": "America/New_York (leave blank for local)", + "notesPlaceholder": "Write your notes here...", + "locationPlaceholder": "New York, London, Tokyo...", "widgets": { "bookmark_list": { - "name": "书签", - "description": "显示快捷链接列表" + "name": "Bookmarks", + "description": "A list of quick links" }, "calendar": { - "name": "日历", - "description": "显示月历并突出显示今天" + "name": "Calendar", + "description": "A month calendar with today highlighted" }, "clock": { - "name": "时钟", - "description": "显示实时时钟,可配置时区" + "name": "Clock", + "description": "A live clock with configurable timezone" }, "countdown": { - "name": "倒计时", - "description": "距离目标日期和时间的倒计时" + "name": "Countdown", + "description": "Counts down to a target date and time" }, "custom_api": { - "name": "自定义 API", - "description": "获取并展示 JSON API 数据" + "name": "Custom API", + "description": "Fetch and display data from any JSON API" }, "dashboard_links": { - "name": "仪表盘链接", - "description": "显示已保存的仪表盘服务链接" + "name": "Dashboard Links", + "description": "Shows your saved dashboard service links" }, "folder": { - "name": "文件夹", - "description": "用于对组件进行视觉分组的背景卡片" + "name": "Folder", + "description": "A background card for grouping widgets visually" }, "host_grid": { - "name": "主机网格", - "description": "以网格展示所有 SSH 主机的实时状态" + "name": "Host Grid", + "description": "Live status overview grid for all your SSH hosts" }, "host_status": { - "name": "主机状态", - "description": "显示 SSH 主机的实时状态和指标" + "name": "Host Status", + "description": "Shows live status and metrics for an SSH host" }, "iframe_embed": { - "name": "嵌入网页", - "description": "通过 iframe 嵌入指定 URL" + "name": "iFrame Embed", + "description": "Embed any URL in an iframe" }, "image_widget": { - "name": "图片", - "description": "显示指定 URL 的图片" + "name": "Image", + "description": "Display any image from a URL" }, "link_tree": { - "name": "链接树", - "description": "按分组展示链接与服务入口" + "name": "Link Tree", + "description": "Grouped links organized into labeled sections" }, "markdown_notes": { - "name": "Markdown 笔记", - "description": "支持 Markdown 渲染和行内编辑的笔记" + "name": "Markdown Notes", + "description": "Notes with optional Markdown rendering and inline editing" }, "notes": { - "name": "笔记", - "description": "显示文本笔记" + "name": "Notes", + "description": "A text notes widget" }, "ping_status": { - "name": "连通性状态", - "description": "检查 URL 或服务是否可访问" + "name": "Ping Status", + "description": "Check if URLs or services are reachable" }, "quick_connect": { - "name": "快速连接", - "description": "为主机打开终端、文件、Docker、隧道等功能" + "name": "Quick Connect", + "description": "Launch terminal, files, docker, tunnels, and more for your hosts" }, "recent_activity": { - "name": "最近活动", - "description": "显示最近的终端、Docker、文件和隧道活动" + "name": "Recent Activity", + "description": "Shows recent terminal, Docker, file, and tunnel activity" }, "rss_feed": { - "name": "RSS 订阅源", - "description": "显示 RSS 或 Atom 订阅源的内容" + "name": "RSS Feed", + "description": "Display items from an RSS or Atom feed" }, "search_bar": { - "name": "搜索栏", - "description": "快速使用 Google、DuckDuckGo、Bing 或自定义搜索引擎" + "name": "Search Bar", + "description": "Quick search with Google, DuckDuckGo, Bing, or a custom engine" }, "search_links": { - "name": "搜索快捷方式", - "description": "快速使用不同搜索引擎" + "name": "Search Shortcuts", + "description": "Quick buttons to search different engines" }, "service_grid": { - "name": "服务网格", - "description": "以包含图标和链接的网格展示服务" + "name": "Service Grid", + "description": "A grid of service tiles with icons and links" }, "service_link": { - "name": "服务链接", - "description": "点击卡片即可打开服务 URL" + "name": "Service Link", + "description": "A clickable tile linking to a service URL" }, "ssh_terminal": { - "name": "SSH 终端", - "description": "连接到指定主机的内嵌 SSH 终端" + "name": "SSH Terminal", + "description": "An inline SSH terminal connected to a configured host" }, "system_overview": { - "name": "系统概览", - "description": "显示 Termix 系统状态概览" + "name": "System Overview", + "description": "Termix version, database health, and uptime at a glance" }, "termix_uptime": { - "name": "Termix 运行时间", - "description": "显示 Termix 服务器已运行的时长" + "name": "Termix Uptime", + "description": "Shows how long the Termix server has been running" }, "text_banner": { - "name": "文字横幅", - "description": "用于分区和标题的样式化文字标签" + "name": "Text Banner", + "description": "A styled text label for sections and headings" }, "weather": { - "name": "天气", - "description": "显示指定地点的实时天气" + "name": "Weather", + "description": "Live weather for any location" }, "docker_widget": { - "name": "Docker 管理器", - "description": "用于管理指定主机 Docker 容器的内嵌管理器" + "name": "Docker Manager", + "description": "Embedded Docker container manager for a configured host" }, "file_manager_widget": { - "name": "文件管理器", - "description": "用于管理指定主机文件的内嵌 SFTP 管理器" + "name": "File Manager", + "description": "Embedded SFTP file manager for a configured host" }, "tunnel_widget": { - "name": "隧道管理器", - "description": "用于管理指定主机 SSH 隧道的内嵌管理器" + "name": "Tunnel Manager", + "description": "Embedded SSH tunnel manager for a configured host" }, "metrics_chart": { - "name": "指标图表", - "description": "显示主机 CPU、内存、磁盘或网络的历史指标图表" + "name": "Metrics Chart", + "description": "Historical CPU, memory, disk, or network chart for a host" } } }, "permissions": { "use": { - "title": "使用首页", - "description": "查看和编辑首页画布及仪表盘服务链接。" + "title": "使用主页", + "description": "查看和编辑首页画布和仪表盘服务链接。" } }, "settings": { "privateEndpoints": { - "label": "允许访问的内网主机", - "description": "供连通性状态和自定义 API 组件使用的精确内网或回环主机名/IP。用逗号或换行分隔,不包含协议、端口和路径。留空会阻止访问内网目标。" + "label": "允许私人主机", + "description": "用于 Ping 状态和自定义 API 小部件的精确私有或环回主机名/IP 地址。条目之间用逗号或换行符分隔;省略协议、端口和路径。空值会阻止私有目标地址。" }, "privateCertificateAuthority": { "label": "私有证书颁发机构(PEM)", - "description": "可选的受信任 CA 证书包,用于允许列表中的主机。证书验证保持开启,留空则使用系统信任库。" + "description": "可选的受信任 CA 证书包,适用于已列入允许列表的主机。证书验证功能仍然启用。留空则使用系统信任存储。" } }, "plugin": { - "name": "首页" + "name": "Homepage" } } diff --git a/plugins/homepage/locales/translated/zh_TW.json b/plugins/homepage/locales/translated/zh_TW.json index 127fd17a5..286654afe 100644 --- a/plugins/homepage/locales/translated/zh_TW.json +++ b/plugins/homepage/locales/translated/zh_TW.json @@ -18,7 +18,7 @@ "homepage": { "title": "首頁", "addWidget": "新增小工具", - "noWidgetsInCategory": "No widgets in this category", + "noWidgetsInCategory": "此類別中沒有小工具", "editWidget": "編輯小工具", "zoomIn": "放大", "zoomOut": "縮小", @@ -39,7 +39,7 @@ "description": "描述", "color": "顏色", "timezone": "時區", - "invalidTimezone": "Invalid timezone. Use an IANA name such as America/New_York", + "invalidTimezone": "時區無效。請使用 IANA 名稱,例如 America/New_York。", "showSeconds": "顯示秒數", "format12h": "12 小時制", "content": "內容", @@ -60,9 +60,9 @@ "maxItems": "最大項目數", "showDescription": "顯示描述", "widgetRssName": "RSS 摘要", - "rssNoFeedUrl": "Configure a feed URL in widget settings", - "rssLoadError": "Could not load feed", - "rssNoItems": "No items", + "rssNoFeedUrl": "在小工具設定中設定資訊來源 URL", + "rssLoadError": "無法載飼料", + "rssNoItems": "無商品", "noHostSelected": "未選取主機", "displayedMetrics": "顯示的指標", "metricCpu": "CPU", @@ -162,29 +162,164 @@ "selectHosts": "選取主機", "listLayout": "清單", "gridLayout": "格線", - "configureUrl": "Set a URL in the widget settings", - "embeddedContent": "Embedded content", - "noBookmarks": "No bookmarks", - "noSections": "No sections set up", - "noServices": "No services set up", - "configureLocation": "Set a location in the widget settings", - "bannerTextPlaceholder": "Banner text", - "serviceNamePlaceholder": "My service" + "configureUrl": "在小工具設定中設定 URL", + "embeddedContent": "嵌入式內容", + "noBookmarks": "沒有書籤", + "noSections": "未設定任何部分。", + "noServices": "未設定任何服務。", + "configureLocation": "在小部件設定中設定位置", + "bannerTextPlaceholder": "橫幅文字", + "serviceNamePlaceholder": "我的服務", + "emptyNote": "Empty note...", + "weatherLoadFailed": "Could not load weather for \"{{location}}\"", + "feelsLike": "Feels like {{temperature}}", + "timezonePlaceholder": "America/New_York (leave blank for local)", + "notesPlaceholder": "Write your notes here...", + "locationPlaceholder": "New York, London, Tokyo...", + "widgets": { + "bookmark_list": { + "name": "Bookmarks", + "description": "A list of quick links" + }, + "calendar": { + "name": "Calendar", + "description": "A month calendar with today highlighted" + }, + "clock": { + "name": "Clock", + "description": "A live clock with configurable timezone" + }, + "countdown": { + "name": "Countdown", + "description": "Counts down to a target date and time" + }, + "custom_api": { + "name": "Custom API", + "description": "Fetch and display data from any JSON API" + }, + "dashboard_links": { + "name": "Dashboard Links", + "description": "Shows your saved dashboard service links" + }, + "folder": { + "name": "Folder", + "description": "A background card for grouping widgets visually" + }, + "host_grid": { + "name": "Host Grid", + "description": "Live status overview grid for all your SSH hosts" + }, + "host_status": { + "name": "Host Status", + "description": "Shows live status and metrics for an SSH host" + }, + "iframe_embed": { + "name": "iFrame Embed", + "description": "Embed any URL in an iframe" + }, + "image_widget": { + "name": "Image", + "description": "Display any image from a URL" + }, + "link_tree": { + "name": "Link Tree", + "description": "Grouped links organized into labeled sections" + }, + "markdown_notes": { + "name": "Markdown Notes", + "description": "Notes with optional Markdown rendering and inline editing" + }, + "notes": { + "name": "Notes", + "description": "A text notes widget" + }, + "ping_status": { + "name": "Ping Status", + "description": "Check if URLs or services are reachable" + }, + "quick_connect": { + "name": "Quick Connect", + "description": "Launch terminal, files, docker, tunnels, and more for your hosts" + }, + "recent_activity": { + "name": "Recent Activity", + "description": "Shows recent terminal, Docker, file, and tunnel activity" + }, + "rss_feed": { + "name": "RSS Feed", + "description": "Display items from an RSS or Atom feed" + }, + "search_bar": { + "name": "Search Bar", + "description": "Quick search with Google, DuckDuckGo, Bing, or a custom engine" + }, + "search_links": { + "name": "Search Shortcuts", + "description": "Quick buttons to search different engines" + }, + "service_grid": { + "name": "Service Grid", + "description": "A grid of service tiles with icons and links" + }, + "service_link": { + "name": "Service Link", + "description": "A clickable tile linking to a service URL" + }, + "ssh_terminal": { + "name": "SSH Terminal", + "description": "An inline SSH terminal connected to a configured host" + }, + "system_overview": { + "name": "System Overview", + "description": "Termix version, database health, and uptime at a glance" + }, + "termix_uptime": { + "name": "Termix Uptime", + "description": "Shows how long the Termix server has been running" + }, + "text_banner": { + "name": "Text Banner", + "description": "A styled text label for sections and headings" + }, + "weather": { + "name": "Weather", + "description": "Live weather for any location" + }, + "docker_widget": { + "name": "Docker Manager", + "description": "Embedded Docker container manager for a configured host" + }, + "file_manager_widget": { + "name": "File Manager", + "description": "Embedded SFTP file manager for a configured host" + }, + "tunnel_widget": { + "name": "Tunnel Manager", + "description": "Embedded SSH tunnel manager for a configured host" + }, + "metrics_chart": { + "name": "Metrics Chart", + "description": "Historical CPU, memory, disk, or network chart for a host" + } + } }, "permissions": { "use": { - "title": "Use the homepage", - "description": "View and edit the homepage canvas and dashboard service links." + "title": "使用主頁", + "description": "查看和編輯首頁畫布和儀錶板服務連結。" } }, "settings": { "privateEndpoints": { - "label": "Allowed private hosts", - "description": "Exact private or loopback hostnames/IPs for Ping Status and Custom API widgets. Separate entries with commas or newlines; omit schemes, ports and paths. Empty blocks private destinations." + "label": "允許的私人主機", + "description": "用於 Ping 狀態和自訂 API 小工具的精確私有或環回主機名稱/IP 位址。條目之間以逗號或換行符號分隔;省略協定、連接埠和路徑。空值會封鎖私有目標位址。" }, "privateCertificateAuthority": { - "label": "Private certificate authority (PEM)", - "description": "Optional trusted CA bundle for allowlisted hosts. Certificate verification remains enabled. Leave empty to use the system trust store." + "label": "私有憑證授權單位(PEM)", + "description": "可選的受信任 CA 憑證包,適用於已列入允許清單的主機。憑證驗證功能仍然啟用。留空則使用系統信任儲存。" } + }, + "plugin": { + "name": "Homepage" } } diff --git a/plugins/homepage/src/frontend/widgets/HostGridWidget.tsx b/plugins/homepage/src/frontend/widgets/HostGridWidget.tsx index 0a5e71372..4fb82b65b 100644 --- a/plugins/homepage/src/frontend/widgets/HostGridWidget.tsx +++ b/plugins/homepage/src/frontend/widgets/HostGridWidget.tsx @@ -23,11 +23,9 @@ function StatusDot({ status }: { status: string }) { const color = status === "online" ? getAccentColor() - : status === "reachable" - ? "#fbbf24" - : status === "offline" - ? "#ef4444" - : "#6b7280"; + : status === "offline" + ? "#ef4444" + : "#6b7280"; return ( diff --git a/plugins/host-metrics/locales/translated/af_ZA.json b/plugins/host-metrics/locales/translated/af_ZA.json index 27d31565c..35438b8f1 100644 --- a/plugins/host-metrics/locales/translated/af_ZA.json +++ b/plugins/host-metrics/locales/translated/af_ZA.json @@ -308,5 +308,8 @@ "label": "Gemonitorde paaie" } } + }, + "plugin": { + "name": "Host Metrics" } } diff --git a/plugins/host-metrics/locales/translated/ar_SA.json b/plugins/host-metrics/locales/translated/ar_SA.json index b80130175..2e4fc1aea 100644 --- a/plugins/host-metrics/locales/translated/ar_SA.json +++ b/plugins/host-metrics/locales/translated/ar_SA.json @@ -308,5 +308,8 @@ "label": "المسارات المراقبة" } } + }, + "plugin": { + "name": "Host Metrics" } } diff --git a/plugins/host-metrics/locales/translated/bg_BG.json b/plugins/host-metrics/locales/translated/bg_BG.json index 90e0846a5..f17e73306 100644 --- a/plugins/host-metrics/locales/translated/bg_BG.json +++ b/plugins/host-metrics/locales/translated/bg_BG.json @@ -308,5 +308,8 @@ "label": "Мониторирани пътища" } } + }, + "plugin": { + "name": "Host Metrics" } } diff --git a/plugins/host-metrics/locales/translated/bn_BD.json b/plugins/host-metrics/locales/translated/bn_BD.json index fc32b9c85..1c44748b8 100644 --- a/plugins/host-metrics/locales/translated/bn_BD.json +++ b/plugins/host-metrics/locales/translated/bn_BD.json @@ -1,312 +1,315 @@ { "nav": { - "hostMetrics": "Host Metrics" + "hostMetrics": "হোস্ট মেট্রিক্স" }, "hostMetrics": { - "cpu": "CPU", - "memory": "Memory", - "disk": "Disk", - "network": "Network", - "uptime": "Uptime", - "processes": "Processes", - "available": "Available", - "free": "Free", - "connecting": "Connecting...", - "connectionFailed": "Failed to connect to server", - "naCpus": "N/A CPU(s)", - "cpuCores_one": "{{count}} Core", - "cpuCores_other": "{{count}} Cores", - "cpuUsage": "CPU Usage", - "memoryUsage": "Memory Usage", - "diskUsage": "Disk Usage", - "selectFilesystem": "Select filesystem", - "temperature": "Temperature", - "highestTemperature": "Highest temperature", - "primaryTemperatureSensor": "Primary sensor", + "cpu": "সিপিইউ", + "memory": "স্মৃতি", + "disk": "ডিস্ক", + "network": "নেটওয়ার্ক", + "uptime": "আপটাইম", + "processes": "প্রক্রিয়া", + "available": "উপলব্ধ", + "free": "বিনামূল্যে", + "connecting": "সংযোগ স্থাপন...", + "connectionFailed": "সার্ভারের সাথে সংযোগ করতে ব্যর্থ হয়েছে", + "naCpus": "প্রযোজ্য নয় সিপিইউ(গুলি)", + "cpuCores_one": "{{count}} কোর", + "cpuCores_other": "{{count}} কোর", + "cpuUsage": "সিপিইউ ব্যবহার", + "memoryUsage": "মেমরি ব্যবহার", + "diskUsage": "ডিস্ক ব্যবহার", + "selectFilesystem": "ফাইলসিস্টেম নির্বাচন করুন", + "temperature": "তাপমাত্রা", + "highestTemperature": "সর্বোচ্চ তাপমাত্রা", + "primaryTemperatureSensor": "প্রাথমিক সেন্সর", "gpu": { - "title": "GPU", - "noDevice": "No NVIDIA GPU detected. Install the NVIDIA driver (it provides nvidia-smi) to see GPU metrics.", - "driver": "Driver {{version}}", - "utilization": "Utilization", + "title": "জিপিইউ", + "noDevice": "কোন NVIDIA GPU সনাক্ত করা যায়নি। GPU মেট্রিক্স দেখতে NVIDIA ড্রাইভারটি (যা nvidia-smi প্রদান করে) ইনস্টল করুন।", + "driver": "চালক {{version}}", + "utilization": "ব্যবহার", "memory": "VRAM", - "temperature": "Temp", - "power": "Power", - "fan": "Fan", - "processes": "GPU processes", - "noProcesses": "No processes are using the GPU" + "temperature": "তাপমাত্রা", + "power": "শক্তি", + "fan": "ভক্ত", + "processes": "জিপিইউ প্রক্রিয়া", + "noProcesses": "কোনো প্রসেসই GPU ব্যবহার করছে না।" }, - "failedToFetchHostConfig": "Failed to fetch host configuration", - "serverOffline": "Server Offline", - "cannotFetchMetrics": "Cannot fetch metrics from offline server", - "totpFailed": "TOTP verification failed", - "noneAuthNotSupported": "Host Metrics does not support 'none' authentication type.", - "noHostSelected": "No host selected", - "load": "Load", - "systemInfo": "System Information", - "hostname": "Hostname", - "operatingSystem": "Operating System", - "kernel": "Kernel", - "seconds": "seconds", - "networkInterfaces": "Network Interfaces", - "noInterfacesFound": "No network interfaces found", - "noProcessesFound": "No processes found", - "processesTotal": "total", - "processesRunning": "running", - "loginStats": "SSH Login Statistics", - "noRecentLoginData": "No recent login data", + "failedToFetchHostConfig": "হোস্ট কনফিগারেশন আনতে ব্যর্থ হয়েছে", + "serverOffline": "সার্ভার অফলাইন", + "cannotFetchMetrics": "অফলাইন সার্ভার থেকে মেট্রিক্স সংগ্রহ করা যাচ্ছে না", + "totpFailed": "TOTP যাচাইকরণ ব্যর্থ হয়েছে", + "noneAuthNotSupported": "হোস্ট মেট্রিক্স 'none' অথেনটিকেশন টাইপ সমর্থন করে না।", + "noHostSelected": "কোন হোস্ট নির্বাচন করা হয়নি", + "load": "লোড", + "systemInfo": "সিস্টেমের তথ্য", + "hostname": "হোস্টনাম", + "operatingSystem": "অপারেটিং সিস্টেম", + "kernel": "কার্নেল", + "seconds": "সেকেন্ড", + "networkInterfaces": "নেটওয়ার্ক ইন্টারফেস", + "noInterfacesFound": "কোন নেটওয়ার্ক ইন্টারফেস খুঁজে পাওয়া যায়নি", + "noProcessesFound": "কোন প্রক্রিয়া খুঁজে পাওয়া যায়নি", + "processesTotal": "মোট", + "processesRunning": "দৌড়ানো", + "loginStats": "SSH লগইন পরিসংখ্যান", + "noRecentLoginData": "সাম্প্রতিক কোনো লগইন ডেটা নেই", "ports": { - "title": "Listening Ports", - "protocol": "Protocol", - "port": "Port", - "address": "Address", - "process": "Process", - "search": "Search ports...", - "allProtocols": "All", - "noData": "No listening ports data" + "title": "লিসেনিং পোর্ট", + "protocol": "প্রোটোকল", + "port": "বন্দর", + "address": "ঠিকানা", + "process": "প্রক্রিয়া", + "search": "পোর্ট অনুসন্ধান করুন...", + "allProtocols": "সব", + "noData": "কোন লিসেনিং পোর্ট ডেটা নেই" }, "firewall": { - "title": "Firewall", - "inactive": "Inactive", - "policy": "Policy", - "rules": "rules", - "noRules": "No rules in this chain", - "noData": "No firewall data available", - "action": "Action", - "protocol": "Proto", - "port": "Port", - "source": "Source", - "anywhere": "Anywhere", - "chains": "chains" + "title": "ফায়ারওয়াল", + "inactive": "নিষ্ক্রিয়", + "policy": "নীতি", + "rules": "নিয়ম", + "noRules": "এই শৃঙ্খলে কোনো নিয়ম নেই", + "noData": "কোন ফায়ারওয়াল ডেটা উপলব্ধ নেই", + "action": "পদক্ষেপ", + "protocol": "প্রোটো", + "port": "বন্দর", + "source": "উৎস", + "anywhere": "যেকোনো জায়গায়", + "chains": "শৃঙ্খল" }, - "loadAvg": "Load Avg", - "swap": "Swap", - "architecture": "Architecture", - "refresh": "Refresh", - "retry": "Retry", - "customize": "Customize layout", - "reset": "Reset", - "tabLive": "Live", - "editModeInstructions": "Drag cards to rearrange, drag the bottom edge to resize, and use the width button to change a card's span. Add or remove cards below.", + "loadAvg": "গড় লোড", + "swap": "অদলবদল", + "architecture": "স্থাপত্য", + "refresh": "রিফ্রেশ", + "retry": "পুনরায় চেষ্টা করুন", + "customize": "লেআউট কাস্টমাইজ করুন", + "reset": "রিসেট", + "tabLive": "সরাসরি", + "editModeInstructions": "কার্ডগুলো পুনর্বিন্যাস করতে টেনে আনুন, আকার পরিবর্তন করতে নিচের কিনারা টেনে আনুন এবং কার্ডের বিস্তার বদলাতে প্রস্থ বোতামটি ব্যবহার করুন। নিচে কার্ড যোগ বা অপসারণ করুন।", "managers": { - "services": "Services", - "processInspector": "Process Inspector", - "logViewer": "Log Viewer", - "cron": "Cron Jobs", - "packages": "Packages", - "ssl": "SSL Certificates", - "firewall": "Firewall", - "users": "Users & Permissions", - "healthCheck": "Health Checks", - "diskBreakdown": "Disk Breakdown", - "systemdTimers": "Timers", - "topMemory": "Top by Memory", - "noData": "No data", - "sudoHint": "Set a sudo password for this host in the host editor to enable privileged actions.", - "filter": "Filter...", - "start": "Start", - "stop": "Stop", - "restart": "Restart", - "actionDone": "{{name}} updated", - "actionFailed": "Action failed", - "signalSent": "Signal sent to PID {{pid}}", - "killHint": "Click: terminate (SIGTERM). Right-click: force kill (SIGKILL).", - "working": "Working...", - "update": "Update", - "upgradeAll": "Upgrade all", - "allUpToDate": "Everything is up to date", - "save": "Save", - "command": "Command", - "enabled": "Enabled", - "cronSaved": "Crontab updated", - "clients": "Clients", - "dryRun": "Dry run", - "renew": "Renew", - "noAcmeClient": "No ACME client (certbot or acme.sh) found on this host.", - "addInputRule": "Add INPUT rule", - "firewallWarning": "Changes are runtime-only until persisted. Be careful not to lock yourself out.", - "ruleApplied": "Rule applied", - "invalidPort": "Enter a valid port (1-65535)", - "newUsername": "New username", - "addUser": "Add", - "deleteUser": "Delete user", - "noHealthChecks": "No health checks configured yet.", - "follow": "Follow", - "noLogData": "No log output.", - "tree": "Tree", - "enableDisable": "Enable / disable at boot", + "services": "পরিষেবা", + "processInspector": "প্রক্রিয়া পরিদর্শক", + "logViewer": "লগ ভিউয়ার", + "cron": "ক্রন জবস", + "packages": "প্যাকেজ", + "ssl": "SSL সার্টিফিকেট", + "firewall": "ফায়ারওয়াল", + "users": "ব্যবহারকারী ও অনুমতি", + "healthCheck": "স্বাস্থ্য পরীক্ষা", + "diskBreakdown": "ডিস্ক ব্রেকডাউন", + "systemdTimers": "টাইমার", + "topMemory": "স্মৃতি দ্বারা শীর্ষে", + "noData": "কোন ডেটা নেই", + "sudoHint": "বিশেষাধিকারপ্রাপ্ত কাজগুলো সক্ষম করতে হোস্ট এডিটরে এই হোস্টের জন্য একটি sudo পাসওয়ার্ড সেট করুন।", + "filter": "ফিল্টার...", + "start": "শুরু করুন", + "stop": "থামুন", + "restart": "পুনরায় চালু করুন", + "actionDone": "{{name}} আপডেট করা হয়েছে", + "actionFailed": "পদক্ষেপ ব্যর্থ হয়েছে", + "signalSent": "PID {{pid}}-তে সংকেত পাঠানো হয়েছে", + "killHint": "ক্লিক: বন্ধ করুন (SIGTERM)। ডান-ক্লিক: জোরপূর্বক বন্ধ করুন (SIGKILL)।", + "working": "কাজ চলছে...", + "update": "আপডেট", + "upgradeAll": "সব আপগ্রেড করুন", + "allUpToDate": "সবকিছু হালনাগাদ আছে", + "save": "সংরক্ষণ করুন", + "command": "আদেশ", + "enabled": "সক্ষম করা হয়েছে", + "cronSaved": "ক্রনট্যাব আপডেট করা হয়েছে", + "clients": "ক্লায়েন্টরা", + "dryRun": "ড্রাই রান", + "renew": "পুনর্নবীকরণ করুন", + "noAcmeClient": "এই হোস্টে কোনো ACME ক্লায়েন্ট (certbot বা acme.sh) খুঁজে পাওয়া যায়নি।", + "addInputRule": "ইনপুট নিয়ম যোগ করুন", + "firewallWarning": "স্থায়ী না হওয়া পর্যন্ত পরিবর্তনগুলো শুধুমাত্র রানটাইমে কার্যকর থাকে। সতর্ক থাকুন, যাতে আপনি নিজে লক আউট না হয়ে যান।", + "ruleApplied": "নিয়ম প্রয়োগ করা হয়েছে", + "invalidPort": "একটি বৈধ পোর্ট প্রবেশ করান (1-65535)", + "newUsername": "নতুন ব্যবহারকারীর নাম", + "addUser": "যোগ করুন", + "deleteUser": "ব্যবহারকারীকে মুছে ফেলুন", + "noHealthChecks": "এখনো কোনো স্বাস্থ্য পরীক্ষা কনফিগার করা হয়নি।", + "follow": "অনুসরণ করুন", + "noLogData": "কোনো লগ আউটপুট নেই।", + "tree": "গাছ", + "enableDisable": "বুট করার সময় সক্ষম / অক্ষম করুন", "grantSudo": "Grant sudo", - "revokeSudo": "Revoke sudo", - "sslIssueCert": "Issue certificate", - "sslExpired": "Expired", - "sslInDays": "in {{days}}d", - "sslNeedDomain": "Enter at least one domain", - "sslIssued": "Certificate issued", + "revokeSudo": "sudo প্রত্যাহার করুন", + "sslIssueCert": "সার্টিফিকেট প্রদান করুন", + "sslExpired": "মেয়াদোত্তীর্ণ", + "sslInDays": "{{days}}d-তে", + "sslNeedDomain": "অন্তত একটি ডোমেইন প্রবেশ করান", + "sslIssued": "সার্টিফিকেট ইস্যু করা হয়েছে", "sslDomainsPlaceholder": "example.com, www.example.com", - "sslHttpStandalone": "HTTP (standalone)", - "sslHttpWebroot": "HTTP (webroot)", - "sslDns": "DNS", - "sslDnsProvider": "DNS provider (e.g. cloudflare)", - "sslIssueHint": "DNS provider credentials must already be configured on the host.", - "sslRevoke": "Revoke certificate", - "sslRevoked": "Certificate revoked", - "sslRevokeConfirm": "Revoke and remove the certificate \"{{name}}\"? This cannot be undone.", - "healthRun": "Run", - "healthName": "Name", - "healthTarget": "Host / address", - "healthAddCheck": "Add check", - "healthSaved": "Health checks saved", - "healthMissingFields": "Each check needs a name and target", - "logFile": "File", - "logUnit": "Unit", - "logCustomPath": "Custom path under /var/log (optional)", - "logGrep": "Filter lines...", - "firewallPersist": "Persist rules", - "firewallPersisted": "Firewall rules persisted", - "wireguard": "WireGuard", - "wgNotInstalled": "WireGuard is not installed on this host", - "wgNoInterfaces": "No WireGuard interfaces configured", - "wgInterfaceUp": "Bring up", - "wgInterfaceDown": "Bring down", - "wgBringingUp": "Bringing {{name}} up...", - "wgBringingDown": "Bringing {{name}} down...", - "wgInterfaceUpDone": "{{name}} is up", - "wgInterfaceDownDone": "{{name}} is down", - "wgListenPort": "Port", - "wgPublicKey": "Public key", - "wgEndpoint": "Endpoint", - "wgAllowedIPs": "Allowed IPs", - "wgLastHandshake": "Last handshake", - "wgHandshakeNever": "Never", - "wgTransfer": "Transfer", - "wgNoPeers": "No peers" + "sslHttpStandalone": "HTTP (স্বতন্ত্র)", + "sslHttpWebroot": "HTTP (ওয়েবরুট)", + "sslDns": "ডিএনএস", + "sslDnsProvider": "ডিএনএস প্রদানকারী (যেমন ক্লাউডফ্লেয়ার)", + "sslIssueHint": "হোস্টে ডিএনএস প্রদানকারীর ক্রেডেনশিয়াল অবশ্যই আগে থেকে কনফিগার করা থাকতে হবে।", + "sslRevoke": "সার্টিফিকেট বাতিল করুন", + "sslRevoked": "সার্টিফিকেট বাতিল করা হয়েছে", + "sslRevokeConfirm": "সার্টিফিকেট \"{{name}}\" বাতিল এবং অপসারণ করবেন? এটি পূর্বাবস্থায় ফেরানো যাবে না।", + "healthRun": "দৌড়", + "healthName": "নাম", + "healthTarget": "হোস্ট / ঠিকানা", + "healthAddCheck": "চেক যোগ করুন", + "healthSaved": "স্বাস্থ্য পরীক্ষা সংরক্ষিত", + "healthMissingFields": "প্রতিটি চেকের একটি নাম এবং লক্ষ্য থাকা প্রয়োজন।", + "logFile": "ফাইল", + "logUnit": "ইউনিট", + "logCustomPath": "/var/log-এর অধীনে নিজস্ব পথ (ঐচ্ছিক)", + "logGrep": "ফিল্টার লাইন...", + "firewallPersist": "অধ্যবসায় নিয়ম", + "firewallPersisted": "ফায়ারওয়াল নিয়মগুলি অব্যাহত ছিল", + "wireguard": "ওয়্যারগার্ড", + "wgNotInstalled": "এই হোস্টে WireGuard ইনস্টল করা নেই", + "wgNoInterfaces": "কোন WireGuard ইন্টারফেস কনফিগার করা নেই", + "wgInterfaceUp": "উত্থাপন করুন", + "wgInterfaceDown": "নামিয়ে আনুন", + "wgBringingUp": "{{name}} উপরে তুলে আনা...", + "wgBringingDown": "{{name}} কে নিচে নামিয়ে আনা হচ্ছে...", + "wgInterfaceUpDone": "{{name}} উপরে আছে", + "wgInterfaceDownDone": "{{name}} নিচে আছে", + "wgListenPort": "বন্দর", + "wgPublicKey": "পাবলিক কী", + "wgEndpoint": "এন্ডপয়েন্ট", + "wgAllowedIPs": "অনুমোদিত আইপি", + "wgLastHandshake": "শেষ করমর্দন", + "wgHandshakeNever": "কখনো না", + "wgTransfer": "স্থানান্তর", + "wgNoPeers": "কোনো সমকক্ষ নেই" } }, "metricsHistory": { - "title": "Metrics History", - "historySuffix": "History", - "cpuMemoryDisk": "CPU / Memory / Disk", - "network": "Network", - "download": "RX", - "upload": "TX", - "noData": "No history data available for this time range.", - "custom": "Custom", - "to": "to", - "apply": "Apply", - "viewHistory": "View History" + "title": "মেট্রিক্সের ইতিহাস", + "historySuffix": "ইতিহাস", + "cpuMemoryDisk": "সিপিইউ / মেমরি / ডিস্ক", + "network": "নেটওয়ার্ক", + "download": "আরএক্স", + "upload": "টেক্সাস", + "noData": "এই সময়সীমার জন্য কোনো ঐতিহাসিক তথ্য উপলব্ধ নেই।", + "custom": "কাস্টম", + "to": "থেকে", + "apply": "আবেদন করুন", + "viewHistory": "ইতিহাস দেখুন" }, "hosts": { - "tabHostMetrics": "Host Metrics", - "metricsCollectionLabel": "Metrics Collection", - "enableMetricsLabel": "Enable Metrics", - "enableMetricsDesc": "Collect CPU, RAM, disk, and other metrics from this host", - "useGlobalMetrics": "Use Global Interval", - "useGlobalMetricsDesc": "Override with the server-wide metrics interval", - "metricsIntervalS": "Metrics Interval (s)", - "metricsIntervalDesc2": "Seconds between metric snapshots", - "excludedMountsLabel": "Excluded Mounts", - "monitoredMountsLabel": "Custom monitored paths", - "monitoredMountsDesc": "Add paths that are not exposed as separate mounts, including bind-mounted Home Assistant paths such as /config.", - "monitoredMountPathPlaceholder": "Path (/config, /mnt/data)", - "monitoredMountLabelPlaceholder": "Label (optional)", - "addMonitoredMount": "Add path", - "excludedMountsDesc": "Hide specific mount points or filesystem types (e.g. nfs, cifs) from disk usage and alerts for this host.", - "excludedMountsPlaceholder": "Mount path (/mnt/nas) or filesystem type (nfs, cifs)", - "excludedMountsEmpty": "No mounts excluded. All detected filesystems are shown.", - "addExcludedMount": "Add", - "visibleWidgets": "Visible Widgets", - "widgetsMovedToHostMetrics": "Cards are now added, arranged, and resized directly in the Host Metrics tab. Open Host Metrics for this host and use Customize to choose which cards are shown.", - "hostNotFound": "Host not found", - "loadingHost": "Loading host..." + "tabHostMetrics": "হোস্ট মেট্রিক্স", + "metricsCollectionLabel": "মেট্রিক্স সংগ্রহ", + "enableMetricsLabel": "মেট্রিক্স সক্ষম করুন", + "enableMetricsDesc": "এই হোস্ট থেকে সিপিইউ, র‍্যাম, ডিস্ক এবং অন্যান্য মেট্রিক সংগ্রহ করুন।", + "useGlobalMetrics": "গ্লোবাল ইন্টারভাল ব্যবহার করুন", + "useGlobalMetricsDesc": "সার্ভার-ব্যাপী মেট্রিক্স ব্যবধান দিয়ে ওভাররাইড করুন", + "metricsIntervalS": "মেট্রিক্স ব্যবধান (সেকেন্ড)", + "metricsIntervalDesc2": "মেট্রিক স্ন্যাপশটগুলির মধ্যে সেকেন্ডের ব্যবধান", + "excludedMountsLabel": "বাদ দেওয়া মাউন্টগুলি", + "monitoredMountsLabel": "কাস্টম পর্যবেক্ষণ করা পথ", + "monitoredMountsDesc": "এমন পাথ যোগ করুন যা আলাদা মাউন্ট হিসাবে উন্মুক্ত নয়, যার মধ্যে /config-এর মতো বাইন্ড-মাউন্টেড Home Assistant পাথও অন্তর্ভুক্ত।", + "monitoredMountPathPlaceholder": "পাথ (/config, /mnt/data)", + "monitoredMountLabelPlaceholder": "লেবেল (ঐচ্ছিক)", + "addMonitoredMount": "পথ যোগ করুন", + "excludedMountsDesc": "এই হোস্টের জন্য ডিস্ক ব্যবহার এবং সতর্কতা থেকে নির্দিষ্ট মাউন্ট পয়েন্ট বা ফাইলসিস্টেমের ধরণ (যেমন nfs, cifs) লুকান।", + "excludedMountsPlaceholder": "মাউন্ট পাথ (/mnt/nas) অথবা ফাইলসিস্টেমের ধরণ (nfs, cifs)", + "excludedMountsEmpty": "কোনো মাউন্ট বাদ দেওয়া হয়নি। শনাক্তকৃত সকল ফাইলসিস্টেম দেখানো হয়েছে।", + "addExcludedMount": "যোগ করুন", + "visibleWidgets": "দৃশ্যমান উইজেট", + "widgetsMovedToHostMetrics": "এখন কার্ডগুলি সরাসরি হোস্ট মেট্রিক্স ট্যাবে যোগ, সাজানো এবং আকার পরিবর্তন করা যায়। এই হোস্টের জন্য হোস্ট মেট্রিক্স খুলুন এবং কোন কার্ডগুলি দেখানো হবে তা বেছে নিতে কাস্টমাইজ ব্যবহার করুন।", + "hostNotFound": "হোস্ট খুঁজে পাওয়া যায়নি", + "loadingHost": "হোস্ট লোড হচ্ছে..." }, "onboarding": { - "feature_metrics": "Metrics and alerts", - "feature_metrics_desc": "Track CPU, memory and disk over time, and get alerted when they go bad." + "feature_metrics": "মেট্রিক্স এবং সতর্কতা", + "feature_metrics_desc": "সময়ের সাথে সাথে সিপিইউ, মেমরি এবং ডিস্কের অবস্থা পর্যবেক্ষণ করুন এবং সেগুলি বিকল হয়ে গেলে সতর্কবার্তা পান।" }, "admin": { - "metricsHistoryRetention": "Metrics History Retention", - "metricsHistoryRetentionRange": "1 to 90 days", - "days": "days" + "metricsHistoryRetention": "মেট্রিক্সের ইতিহাস সংরক্ষণ", + "metricsHistoryRetentionRange": "১ থেকে ৯০ দিন", + "days": "দিন" }, "homepage": { - "noData": "No data available", - "showCurrentValue": "Show Current Value", - "chartMetric": "Metric", - "metricRange": "Range", - "host": "Host", - "loading": "Loading...", - "metricCpu": "CPU", - "metricDisk": "Disk", - "metricHostname": "Hostname", - "metricKernel": "Kernel", - "metricMemory": "Memory", - "metricNetwork": "Network", - "metricOs": "OS", - "metricProcesses": "Processes", - "metricProcessesRunning": "running", - "metricProcessesTotal": "total", - "metricUptime": "Uptime", - "metricsNotAvailable": "Metrics not available", - "noHostSelected": "No host selected", - "selectHost": "Select a host..." + "noData": "কোন ডেটা উপলব্ধ নেই", + "showCurrentValue": "বর্তমান মান দেখান", + "chartMetric": "মেট্রিক", + "metricRange": "পরিসর", + "host": "হোস্ট", + "loading": "লোড হচ্ছে...", + "metricCpu": "সিপিইউ", + "metricDisk": "ডিস্ক", + "metricHostname": "হোস্টনাম", + "metricKernel": "কার্নেল", + "metricMemory": "স্মৃতি", + "metricNetwork": "নেটওয়ার্ক", + "metricOs": "ওএস", + "metricProcesses": "প্রক্রিয়া", + "metricProcessesRunning": "দৌড়ানো", + "metricProcessesTotal": "মোট", + "metricUptime": "আপটাইম", + "metricsNotAvailable": "মেট্রিক্স উপলব্ধ নেই", + "noHostSelected": "কোন হোস্ট নির্বাচন করা হয়নি", + "selectHost": "একজন হোস্ট নির্বাচন করুন..." }, "terminalStatus": { - "unavailable": "Live stats unavailable" + "unavailable": "সরাসরি পরিসংখ্যান অনুপলব্ধ" }, "dashboard": { - "cpu": "CPU", - "ram": "RAM" + "cpu": "সিপিইউ", + "ram": "রাম" }, "dashboardTab": { - "disk": "Disk" + "disk": "ডিস্ক" }, "terminal": { - "connected": "Connected" + "connected": "সংযুক্ত" }, "permissions": { "use": { - "title": "Use Host Metrics", - "description": "View host metrics and use the host managers (services, packages, firewall and more) on hosts you can reach." + "title": "হোস্ট মেট্রিক্স ব্যবহার করুন", + "description": "আপনার নাগালের মধ্যে থাকা হোস্টগুলোর মেট্রিক্স দেখুন এবং হোস্ট ম্যানেজার (সার্ভিস, প্যাকেজ, ফায়ারওয়াল এবং আরও অনেক কিছু) ব্যবহার করুন।" } }, "settings": { "admin": { "metricsInterval": { - "label": "Metrics interval (seconds)", - "description": "How often a host being viewed is sampled, unless the host sets its own interval." + "label": "মেট্রিক্স ব্যবধান (সেকেন্ড)", + "description": "যদি না হোস্ট তার নিজস্ব ব্যবধান নির্ধারণ করে, তবে দেখা হচ্ছে এমন হোস্টকে কত ঘন ঘন নমুনা হিসেবে নেওয়া হবে।" }, "historyRetentionDays": { - "label": "History retention (days)", - "description": "How long metrics samples are kept for the history charts." + "label": "ইতিহাস সংরক্ষণ (দিন)", + "description": "হিস্ট্রি চার্টের জন্য মেট্রিক্স স্যাম্পলগুলো কত সময় ধরে রাখা হয়।" }, "enabledForNewHosts": { - "label": "Metrics on for new hosts", - "description": "Whether new hosts start with metrics collection turned on." + "label": "নতুন হোস্টদের জন্য মেট্রিক্স চালু আছে", + "description": "নতুন হোস্টগুলো মেট্রিক্স সংগ্রহ চালু থাকা অবস্থায় শুরু হয় কিনা।" } }, "user": { "temperatureUnit": { - "label": "Temperature unit", - "description": "How temperatures are shown in Host Metrics.", - "celsius": "Celsius", - "fahrenheit": "Fahrenheit" + "label": "তাপমাত্রা ইউনিট", + "description": "হোস্ট মেট্রিক্সে তাপমাত্রা কীভাবে দেখানো হয়", + "celsius": "সেলসিয়াস", + "fahrenheit": "ফারেনহাইট" } }, "host": { "metricsEnabled": { - "label": "Collect metrics" + "label": "মেট্রিক সংগ্রহ করুন" }, "metricsInterval": { - "label": "Metrics interval (seconds)" + "label": "মেট্রিক্স ব্যবধান (সেকেন্ড)" }, "enabledWidgets": { - "label": "Enabled widgets" + "label": "সক্রিয় উইজেট" }, "excludedMounts": { - "label": "Excluded mounts" + "label": "বাদ দেওয়া মাউন্টগুলি" }, "monitoredMounts": { - "label": "Monitored paths" + "label": "পর্যবেক্ষণ করা পথ" } } + }, + "plugin": { + "name": "Host Metrics" } } diff --git a/plugins/host-metrics/locales/translated/ca_ES.json b/plugins/host-metrics/locales/translated/ca_ES.json index 3f1be92f6..1785dfc8c 100644 --- a/plugins/host-metrics/locales/translated/ca_ES.json +++ b/plugins/host-metrics/locales/translated/ca_ES.json @@ -308,5 +308,8 @@ "label": "Camins monitoritzats" } } + }, + "plugin": { + "name": "Host Metrics" } } diff --git a/plugins/host-metrics/locales/translated/cs_CZ.json b/plugins/host-metrics/locales/translated/cs_CZ.json index e532d1bc8..2a7ede4c7 100644 --- a/plugins/host-metrics/locales/translated/cs_CZ.json +++ b/plugins/host-metrics/locales/translated/cs_CZ.json @@ -308,5 +308,8 @@ "label": "Sledované cesty" } } + }, + "plugin": { + "name": "Host Metrics" } } diff --git a/plugins/host-metrics/locales/translated/da_DK.json b/plugins/host-metrics/locales/translated/da_DK.json index 6beab1b58..ebe338f58 100644 --- a/plugins/host-metrics/locales/translated/da_DK.json +++ b/plugins/host-metrics/locales/translated/da_DK.json @@ -308,5 +308,8 @@ "label": "Overvågede stier" } } + }, + "plugin": { + "name": "Host Metrics" } } diff --git a/plugins/host-metrics/locales/translated/de_DE.json b/plugins/host-metrics/locales/translated/de_DE.json index 43eeb47f5..5ececf07d 100644 --- a/plugins/host-metrics/locales/translated/de_DE.json +++ b/plugins/host-metrics/locales/translated/de_DE.json @@ -308,5 +308,8 @@ "label": "Überwachte Pfade" } } + }, + "plugin": { + "name": "Host Metrics" } } diff --git a/plugins/host-metrics/locales/translated/el_GR.json b/plugins/host-metrics/locales/translated/el_GR.json index 1ba88fb0d..9ce036473 100644 --- a/plugins/host-metrics/locales/translated/el_GR.json +++ b/plugins/host-metrics/locales/translated/el_GR.json @@ -308,5 +308,8 @@ "label": "Παρακολουθούμενες διαδρομές" } } + }, + "plugin": { + "name": "Host Metrics" } } diff --git a/plugins/host-metrics/locales/translated/es_ES.json b/plugins/host-metrics/locales/translated/es_ES.json index bb821ddbe..0ce0e6a75 100644 --- a/plugins/host-metrics/locales/translated/es_ES.json +++ b/plugins/host-metrics/locales/translated/es_ES.json @@ -308,5 +308,8 @@ "label": "Senderos vigilados" } } + }, + "plugin": { + "name": "Host Metrics" } } diff --git a/plugins/host-metrics/locales/translated/fi_FI.json b/plugins/host-metrics/locales/translated/fi_FI.json index e41f37519..b32aa1a54 100644 --- a/plugins/host-metrics/locales/translated/fi_FI.json +++ b/plugins/host-metrics/locales/translated/fi_FI.json @@ -308,5 +308,8 @@ "label": "Valvotut polut" } } + }, + "plugin": { + "name": "Host Metrics" } } diff --git a/plugins/host-metrics/locales/translated/fr_FR.json b/plugins/host-metrics/locales/translated/fr_FR.json index 88d772c76..468135678 100644 --- a/plugins/host-metrics/locales/translated/fr_FR.json +++ b/plugins/host-metrics/locales/translated/fr_FR.json @@ -308,5 +308,8 @@ "label": "Chemins surveillés" } } + }, + "plugin": { + "name": "Host Metrics" } } diff --git a/plugins/host-metrics/locales/translated/he_IL.json b/plugins/host-metrics/locales/translated/he_IL.json index a6367ba70..d3003a87b 100644 --- a/plugins/host-metrics/locales/translated/he_IL.json +++ b/plugins/host-metrics/locales/translated/he_IL.json @@ -308,5 +308,8 @@ "label": "נתיבים מנוטרים" } } + }, + "plugin": { + "name": "Host Metrics" } } diff --git a/plugins/host-metrics/locales/translated/hi_IN.json b/plugins/host-metrics/locales/translated/hi_IN.json index 7980896d5..61b2ddee5 100644 --- a/plugins/host-metrics/locales/translated/hi_IN.json +++ b/plugins/host-metrics/locales/translated/hi_IN.json @@ -19,21 +19,21 @@ "cpuUsage": "CPU उपयोग", "memoryUsage": "मेमोरी उपयोग", "diskUsage": "डिस्क उपयोग", - "selectFilesystem": "Select filesystem", + "selectFilesystem": "फ़ाइल सिस्टम का चयन करें", "temperature": "तापमान", "highestTemperature": "उच्चतम तापमान", - "primaryTemperatureSensor": "Primary sensor", + "primaryTemperatureSensor": "प्राथमिक सेंसर", "gpu": { - "title": "GPU", - "noDevice": "No NVIDIA GPU detected. Install the NVIDIA driver (it provides nvidia-smi) to see GPU metrics.", - "driver": "Driver {{version}}", - "utilization": "Utilization", - "memory": "VRAM", - "temperature": "Temp", - "power": "Power", - "fan": "Fan", - "processes": "GPU processes", - "noProcesses": "No processes are using the GPU" + "title": "जीपीयू", + "noDevice": "कोई NVIDIA GPU नहीं मिला। GPU मेट्रिक्स देखने के लिए NVIDIA ड्राइवर (जो nvidia-smi प्रदान करता है) इंस्टॉल करें।", + "driver": "ड्राइवर {{version}}", + "utilization": "उपयोग", + "memory": "वीआरएएम", + "temperature": "अस्थायी", + "power": "शक्ति", + "fan": "पंखा", + "processes": "जीपीयू प्रक्रियाएँ", + "noProcesses": "कोई भी प्रक्रिया जीपीयू का उपयोग नहीं कर रही है।" }, "failedToFetchHostConfig": "होस्ट कॉन्फ़िगरेशन प्राप्त करने में विफल", "serverOffline": "सर्वर ऑफ़लाइन", @@ -178,7 +178,7 @@ "wgLastHandshake": "अंतिम हैंडशेक", "wgHandshakeNever": "कभी नहीं", "wgTransfer": "ट्रांसफर", - "wgNoPeers": "No peers" + "wgNoPeers": "कोई समकक्ष नहीं" } }, "metricsHistory": { @@ -203,15 +203,15 @@ "useGlobalMetricsDesc": "सर्वर-व्यापी मेट्रिक्स अंतराल से ओवरराइड करें", "metricsIntervalS": "मेट्रिक्स अंतराल (सेकंड)", "metricsIntervalDesc2": "मेट्रिक स्नैपशॉट के बीच सेकंड", - "excludedMountsLabel": "Excluded Mounts", - "monitoredMountsLabel": "Custom monitored paths", - "monitoredMountsDesc": "Add paths that are not exposed as separate mounts, including bind-mounted Home Assistant paths such as /config.", - "monitoredMountPathPlaceholder": "Path (/config, /mnt/data)", + "excludedMountsLabel": "बहिष्कृत पर्वत", + "monitoredMountsLabel": "कस्टम मॉनिटर किए गए पथ", + "monitoredMountsDesc": "उन पथों को जोड़ें जो अलग-अलग माउंट के रूप में उजागर नहीं होते हैं, जिनमें बाइंड-माउंटेड होम असिस्टेंट पथ जैसे कि /config शामिल हैं।", + "monitoredMountPathPlaceholder": "पथ (/config, /mnt/data)", "monitoredMountLabelPlaceholder": "लेबल (वैकल्पिक)", - "addMonitoredMount": "Add path", - "excludedMountsDesc": "Hide specific mount points or filesystem types (e.g. nfs, cifs) from disk usage and alerts for this host.", - "excludedMountsPlaceholder": "Mount path (/mnt/nas) or filesystem type (nfs, cifs)", - "excludedMountsEmpty": "No mounts excluded. All detected filesystems are shown.", + "addMonitoredMount": "पथ जोड़ें", + "excludedMountsDesc": "इस होस्ट के लिए डिस्क उपयोग और अलर्ट से विशिष्ट माउंट पॉइंट या फ़ाइल सिस्टम प्रकार (जैसे nfs, cifs) को छिपाएँ।", + "excludedMountsPlaceholder": "माउंट पथ (/mnt/nas) या फ़ाइल सिस्टम प्रकार (nfs, cifs)", + "excludedMountsEmpty": "कोई भी माउंट बाहर नहीं रखा गया है। सभी पहचाने गए फ़ाइल सिस्टम दिखाए गए हैं।", "addExcludedMount": "जोड़ें", "visibleWidgets": "दृश्यमान विजेट्स", "widgetsMovedToHostMetrics": "कार्ड अब सीधे होस्ट मेट्रिक्स टैब में जोड़े, व्यवस्थित और आकार बदले जा सकते हैं। इस होस्ट के लिए होस्ट मेट्रिक्स खोलें और यह चुनने के लिए कस्टमाइज़ का उपयोग करें कि कौन से कार्ड दिखाए जाएँ।", @@ -219,8 +219,8 @@ "loadingHost": "होस्ट लोड हो रहा है..." }, "onboarding": { - "feature_metrics": "Metrics and alerts", - "feature_metrics_desc": "Track CPU, memory and disk over time, and get alerted when they go bad." + "feature_metrics": "मैट्रिक्स और अलर्ट", + "feature_metrics_desc": "समय के साथ सीपीयू, मेमोरी और डिस्क की स्थिति पर नज़र रखें और उनके खराब होने पर अलर्ट प्राप्त करें।" }, "admin": { "metricsHistoryRetention": "मेट्रिक्स इतिहास प्रतिधारण", @@ -250,7 +250,7 @@ "selectHost": "होस्ट चुनें..." }, "terminalStatus": { - "unavailable": "Live stats unavailable" + "unavailable": "लाइव आंकड़े उपलब्ध नहीं हैं" }, "dashboard": { "cpu": "CPU", @@ -264,49 +264,52 @@ }, "permissions": { "use": { - "title": "Use Host Metrics", - "description": "View host metrics and use the host managers (services, packages, firewall and more) on hosts you can reach." + "title": "होस्ट मेट्रिक्स का उपयोग करें", + "description": "आप जिन होस्ट तक पहुंच सकते हैं, उन पर होस्ट मेट्रिक्स देखें और होस्ट मैनेजर (सेवाएं, पैकेज, फ़ायरवॉल आदि) का उपयोग करें।" } }, "settings": { "admin": { "metricsInterval": { - "label": "Metrics interval (seconds)", - "description": "How often a host being viewed is sampled, unless the host sets its own interval." + "label": "मैट्रिक्स अंतराल (सेकंड)", + "description": "किसी होस्ट को कितनी बार देखा जा रहा है, इसकी गणना की जाती है, जब तक कि होस्ट स्वयं अपना अंतराल निर्धारित न कर ले।" }, "historyRetentionDays": { - "label": "History retention (days)", - "description": "How long metrics samples are kept for the history charts." + "label": "इतिहास प्रतिधारण (दिनों में)", + "description": "हिस्ट्री चार्ट के लिए मैट्रिक्स सैंपल कितने समय तक रखे जाते हैं?" }, "enabledForNewHosts": { - "label": "Metrics on for new hosts", - "description": "Whether new hosts start with metrics collection turned on." + "label": "नए होस्ट के लिए मेट्रिक्स चालू हैं", + "description": "क्या नए होस्ट मेट्रिक्स संग्रह चालू होने के साथ शुरू होते हैं?" } }, "user": { "temperatureUnit": { - "label": "Temperature unit", - "description": "How temperatures are shown in Host Metrics.", - "celsius": "Celsius", - "fahrenheit": "Fahrenheit" + "label": "तापमान इकाई", + "description": "होस्ट मेट्रिक्स में तापमान कैसे प्रदर्शित किया जाता है।", + "celsius": "सेल्सीयस", + "fahrenheit": "फ़ारेनहाइट" } }, "host": { "metricsEnabled": { - "label": "Collect metrics" + "label": "मैट्रिक्स एकत्र करें" }, "metricsInterval": { - "label": "Metrics interval (seconds)" + "label": "मैट्रिक्स अंतराल (सेकंड)" }, "enabledWidgets": { - "label": "Enabled widgets" + "label": "सक्षम विजेट" }, "excludedMounts": { - "label": "Excluded mounts" + "label": "वर्जित माउंट" }, "monitoredMounts": { - "label": "Monitored paths" + "label": "निगरानी किए गए पथ" } } + }, + "plugin": { + "name": "Host Metrics" } } diff --git a/plugins/host-metrics/locales/translated/hu_HU.json b/plugins/host-metrics/locales/translated/hu_HU.json index af047c2de..866a07dcf 100644 --- a/plugins/host-metrics/locales/translated/hu_HU.json +++ b/plugins/host-metrics/locales/translated/hu_HU.json @@ -308,5 +308,8 @@ "label": "Megfigyelt útvonalak" } } + }, + "plugin": { + "name": "Host Metrics" } } diff --git a/plugins/host-metrics/locales/translated/id_ID.json b/plugins/host-metrics/locales/translated/id_ID.json index fc32b9c85..3d32a0952 100644 --- a/plugins/host-metrics/locales/translated/id_ID.json +++ b/plugins/host-metrics/locales/translated/id_ID.json @@ -1,256 +1,256 @@ { "nav": { - "hostMetrics": "Host Metrics" + "hostMetrics": "Metrik Host" }, "hostMetrics": { "cpu": "CPU", - "memory": "Memory", + "memory": "Ingatan", "disk": "Disk", - "network": "Network", - "uptime": "Uptime", - "processes": "Processes", - "available": "Available", - "free": "Free", - "connecting": "Connecting...", - "connectionFailed": "Failed to connect to server", - "naCpus": "N/A CPU(s)", - "cpuCores_one": "{{count}} Core", - "cpuCores_other": "{{count}} Cores", - "cpuUsage": "CPU Usage", - "memoryUsage": "Memory Usage", - "diskUsage": "Disk Usage", - "selectFilesystem": "Select filesystem", - "temperature": "Temperature", - "highestTemperature": "Highest temperature", - "primaryTemperatureSensor": "Primary sensor", + "network": "Jaringan", + "uptime": "Waktu aktif", + "processes": "Proses", + "available": "Tersedia", + "free": "Bebas", + "connecting": "Menghubungkan...", + "connectionFailed": "Gagal terhubung ke server", + "naCpus": "CPU tidak tersedia", + "cpuCores_one": "{{count}} Inti", + "cpuCores_other": "{{count}} Inti", + "cpuUsage": "Penggunaan CPU", + "memoryUsage": "Penggunaan Memori", + "diskUsage": "Penggunaan Disk", + "selectFilesystem": "Pilih sistem file", + "temperature": "Suhu", + "highestTemperature": "Suhu tertinggi", + "primaryTemperatureSensor": "Sensor utama", "gpu": { "title": "GPU", - "noDevice": "No NVIDIA GPU detected. Install the NVIDIA driver (it provides nvidia-smi) to see GPU metrics.", - "driver": "Driver {{version}}", - "utilization": "Utilization", + "noDevice": "GPU NVIDIA tidak terdeteksi. Instal driver NVIDIA (yang menyediakan nvidia-smi) untuk melihat metrik GPU.", + "driver": "Pengemudi {{version}}", + "utilization": "Pemanfaatan", "memory": "VRAM", - "temperature": "Temp", - "power": "Power", - "fan": "Fan", - "processes": "GPU processes", - "noProcesses": "No processes are using the GPU" + "temperature": "Suhu", + "power": "Kekuatan", + "fan": "Penggemar", + "processes": "Proses GPU", + "noProcesses": "Tidak ada proses yang menggunakan GPU." }, - "failedToFetchHostConfig": "Failed to fetch host configuration", + "failedToFetchHostConfig": "Gagal mengambil konfigurasi host", "serverOffline": "Server Offline", - "cannotFetchMetrics": "Cannot fetch metrics from offline server", - "totpFailed": "TOTP verification failed", - "noneAuthNotSupported": "Host Metrics does not support 'none' authentication type.", - "noHostSelected": "No host selected", - "load": "Load", - "systemInfo": "System Information", - "hostname": "Hostname", - "operatingSystem": "Operating System", - "kernel": "Kernel", - "seconds": "seconds", - "networkInterfaces": "Network Interfaces", - "noInterfacesFound": "No network interfaces found", - "noProcessesFound": "No processes found", + "cannotFetchMetrics": "Tidak dapat mengambil metrik dari server offline.", + "totpFailed": "Verifikasi TOTP gagal", + "noneAuthNotSupported": "Host Metrics tidak mendukung tipe otentikasi 'none'.", + "noHostSelected": "Tidak ada pembawa acara yang dipilih.", + "load": "Memuat", + "systemInfo": "Informasi Sistem", + "hostname": "Nama host", + "operatingSystem": "Sistem Operasi", + "kernel": "Inti", + "seconds": "detik", + "networkInterfaces": "Antarmuka Jaringan", + "noInterfacesFound": "Tidak ditemukan antarmuka jaringan.", + "noProcessesFound": "Tidak ada proses yang ditemukan.", "processesTotal": "total", - "processesRunning": "running", - "loginStats": "SSH Login Statistics", - "noRecentLoginData": "No recent login data", + "processesRunning": "berlari", + "loginStats": "Statistik Login SSH", + "noRecentLoginData": "Tidak ada data login terbaru.", "ports": { - "title": "Listening Ports", - "protocol": "Protocol", - "port": "Port", - "address": "Address", - "process": "Process", - "search": "Search ports...", - "allProtocols": "All", - "noData": "No listening ports data" + "title": "Port Pendengaran", + "protocol": "Protokol", + "port": "Pelabuhan", + "address": "Alamat", + "process": "Proses", + "search": "Cari pelabuhan...", + "allProtocols": "Semua", + "noData": "Tidak ada data port yang mendengarkan." }, "firewall": { "title": "Firewall", - "inactive": "Inactive", - "policy": "Policy", - "rules": "rules", - "noRules": "No rules in this chain", - "noData": "No firewall data available", - "action": "Action", + "inactive": "Tidak aktif", + "policy": "Kebijakan", + "rules": "aturan", + "noRules": "Tidak ada aturan dalam rantai ini", + "noData": "Tidak ada data firewall yang tersedia.", + "action": "Tindakan", "protocol": "Proto", - "port": "Port", - "source": "Source", - "anywhere": "Anywhere", - "chains": "chains" + "port": "Pelabuhan", + "source": "Sumber", + "anywhere": "Di mana saja", + "chains": "rantai" }, - "loadAvg": "Load Avg", - "swap": "Swap", - "architecture": "Architecture", - "refresh": "Refresh", - "retry": "Retry", - "customize": "Customize layout", - "reset": "Reset", - "tabLive": "Live", - "editModeInstructions": "Drag cards to rearrange, drag the bottom edge to resize, and use the width button to change a card's span. Add or remove cards below.", + "loadAvg": "Beban Rata-rata", + "swap": "Menukar", + "architecture": "Arsitektur", + "refresh": "Menyegarkan", + "retry": "Mencoba kembali", + "customize": "Sesuaikan tata letak", + "reset": "Mengatur ulang", + "tabLive": "Hidup", + "editModeInstructions": "Seret kartu untuk mengatur ulang, seret tepi bawah untuk mengubah ukurannya, dan gunakan tombol lebar untuk mengubah rentang kartu. Tambahkan atau hapus kartu di bawah ini.", "managers": { - "services": "Services", - "processInspector": "Process Inspector", - "logViewer": "Log Viewer", - "cron": "Cron Jobs", - "packages": "Packages", - "ssl": "SSL Certificates", + "services": "Layanan", + "processInspector": "Inspektur Proses", + "logViewer": "Penampil Log", + "cron": "Tugas Cron", + "packages": "Paket", + "ssl": "Sertifikat SSL", "firewall": "Firewall", - "users": "Users & Permissions", - "healthCheck": "Health Checks", - "diskBreakdown": "Disk Breakdown", - "systemdTimers": "Timers", - "topMemory": "Top by Memory", - "noData": "No data", - "sudoHint": "Set a sudo password for this host in the host editor to enable privileged actions.", - "filter": "Filter...", - "start": "Start", - "stop": "Stop", - "restart": "Restart", - "actionDone": "{{name}} updated", - "actionFailed": "Action failed", - "signalSent": "Signal sent to PID {{pid}}", - "killHint": "Click: terminate (SIGTERM). Right-click: force kill (SIGKILL).", - "working": "Working...", - "update": "Update", - "upgradeAll": "Upgrade all", - "allUpToDate": "Everything is up to date", - "save": "Save", - "command": "Command", - "enabled": "Enabled", - "cronSaved": "Crontab updated", - "clients": "Clients", - "dryRun": "Dry run", - "renew": "Renew", - "noAcmeClient": "No ACME client (certbot or acme.sh) found on this host.", - "addInputRule": "Add INPUT rule", - "firewallWarning": "Changes are runtime-only until persisted. Be careful not to lock yourself out.", - "ruleApplied": "Rule applied", - "invalidPort": "Enter a valid port (1-65535)", - "newUsername": "New username", - "addUser": "Add", - "deleteUser": "Delete user", - "noHealthChecks": "No health checks configured yet.", - "follow": "Follow", - "noLogData": "No log output.", - "tree": "Tree", - "enableDisable": "Enable / disable at boot", - "grantSudo": "Grant sudo", - "revokeSudo": "Revoke sudo", - "sslIssueCert": "Issue certificate", - "sslExpired": "Expired", - "sslInDays": "in {{days}}d", - "sslNeedDomain": "Enter at least one domain", - "sslIssued": "Certificate issued", + "users": "Pengguna & Izin", + "healthCheck": "Pemeriksaan Kesehatan", + "diskBreakdown": "Kerusakan Disk", + "systemdTimers": "Pengatur waktu", + "topMemory": "Atas oleh Memory", + "noData": "Tidak ada data", + "sudoHint": "Tetapkan kata sandi sudo untuk host ini di editor host untuk mengaktifkan tindakan istimewa.", + "filter": "Menyaring...", + "start": "Awal", + "stop": "Berhenti", + "restart": "Mulai ulang", + "actionDone": "{{name}} diperbarui", + "actionFailed": "Tindakan gagal", + "signalSent": "Sinyal dikirim ke PID {{pid}}", + "killHint": "Klik: akhiri (SIGTERM). Klik kanan: paksa matikan (SIGKILL).", + "working": "Bekerja...", + "update": "Memperbarui", + "upgradeAll": "Tingkatkan semuanya", + "allUpToDate": "Semuanya sudah diperbarui", + "save": "Menyimpan", + "command": "Memerintah", + "enabled": "Diaktifkan", + "cronSaved": "Crontab diperbarui", + "clients": "Klien", + "dryRun": "Simulasi", + "renew": "Memperbarui", + "noAcmeClient": "Tidak ditemukan klien ACME (certbot atau acme.sh) pada host ini.", + "addInputRule": "Tambahkan aturan INPUT", + "firewallWarning": "Perubahan hanya berlaku saat runtime hingga disimpan. Berhati-hatilah agar tidak mengunci akses Anda sendiri.", + "ruleApplied": "Aturan diterapkan", + "invalidPort": "Masukkan port yang valid (1-65535)", + "newUsername": "Nama pengguna baru", + "addUser": "Menambahkan", + "deleteUser": "Hapus pengguna", + "noHealthChecks": "Belum ada pemeriksaan kesehatan yang dikonfigurasi.", + "follow": "Mengikuti", + "noLogData": "Tidak ada output log.", + "tree": "Pohon", + "enableDisable": "Aktifkan/nonaktifkan saat booting", + "grantSudo": "Berikan sudo", + "revokeSudo": "Cabut sudo", + "sslIssueCert": "Menerbitkan sertifikat", + "sslExpired": "Kedaluwarsa", + "sslInDays": "di {{days}}d", + "sslNeedDomain": "Masukkan setidaknya satu domain", + "sslIssued": "Sertifikat diterbitkan", "sslDomainsPlaceholder": "example.com, www.example.com", - "sslHttpStandalone": "HTTP (standalone)", + "sslHttpStandalone": "HTTP (mandiri)", "sslHttpWebroot": "HTTP (webroot)", "sslDns": "DNS", - "sslDnsProvider": "DNS provider (e.g. cloudflare)", - "sslIssueHint": "DNS provider credentials must already be configured on the host.", - "sslRevoke": "Revoke certificate", - "sslRevoked": "Certificate revoked", - "sslRevokeConfirm": "Revoke and remove the certificate \"{{name}}\"? This cannot be undone.", - "healthRun": "Run", - "healthName": "Name", - "healthTarget": "Host / address", - "healthAddCheck": "Add check", - "healthSaved": "Health checks saved", - "healthMissingFields": "Each check needs a name and target", - "logFile": "File", - "logUnit": "Unit", - "logCustomPath": "Custom path under /var/log (optional)", - "logGrep": "Filter lines...", - "firewallPersist": "Persist rules", - "firewallPersisted": "Firewall rules persisted", - "wireguard": "WireGuard", - "wgNotInstalled": "WireGuard is not installed on this host", - "wgNoInterfaces": "No WireGuard interfaces configured", - "wgInterfaceUp": "Bring up", - "wgInterfaceDown": "Bring down", - "wgBringingUp": "Bringing {{name}} up...", - "wgBringingDown": "Bringing {{name}} down...", - "wgInterfaceUpDone": "{{name}} is up", - "wgInterfaceDownDone": "{{name}} is down", - "wgListenPort": "Port", - "wgPublicKey": "Public key", - "wgEndpoint": "Endpoint", - "wgAllowedIPs": "Allowed IPs", - "wgLastHandshake": "Last handshake", - "wgHandshakeNever": "Never", + "sslDnsProvider": "Penyedia DNS (misalnya Cloudflare)", + "sslIssueHint": "Kredensial penyedia DNS harus sudah dikonfigurasi pada host.", + "sslRevoke": "Cabut sertifikat", + "sslRevoked": "Sertifikat dicabut", + "sslRevokeConfirm": "Cabut dan hapus sertifikat \"{{name}}\"? Ini tidak dapat dibatalkan.", + "healthRun": "Berlari", + "healthName": "Nama", + "healthTarget": "Host / alamat", + "healthAddCheck": "Tambahkan pemeriksaan", + "healthSaved": "Pemeriksaan kesehatan tersimpan", + "healthMissingFields": "Setiap cek memerlukan nama dan target.", + "logFile": "Mengajukan", + "logUnit": "Satuan", + "logCustomPath": "Jalur khusus di bawah /var/log (opsional)", + "logGrep": "Garis filter...", + "firewallPersist": "Pertahankan aturan", + "firewallPersisted": "Aturan firewall tetap berlaku.", + "wireguard": "Pelindung Kawat", + "wgNotInstalled": "WireGuard tidak terpasang pada host ini.", + "wgNoInterfaces": "Tidak ada antarmuka WireGuard yang dikonfigurasi.", + "wgInterfaceUp": "Membesarkan", + "wgInterfaceDown": "Menurunkan", + "wgBringingUp": "Membawa {{name}} ke atas...", + "wgBringingDown": "Menurunkan {{name}}...", + "wgInterfaceUpDone": "{{name}} sudah aktif", + "wgInterfaceDownDone": "{{name}} sedang down", + "wgListenPort": "Pelabuhan", + "wgPublicKey": "Kunci publik", + "wgEndpoint": "Titik akhir", + "wgAllowedIPs": "IP yang Diizinkan", + "wgLastHandshake": "Jabat tangan terakhir", + "wgHandshakeNever": "Tidak pernah", "wgTransfer": "Transfer", - "wgNoPeers": "No peers" + "wgNoPeers": "Tidak ada tandingan" } }, "metricsHistory": { - "title": "Metrics History", - "historySuffix": "History", - "cpuMemoryDisk": "CPU / Memory / Disk", - "network": "Network", + "title": "Riwayat Metrik", + "historySuffix": "Sejarah", + "cpuMemoryDisk": "CPU / Memori / Disk", + "network": "Jaringan", "download": "RX", "upload": "TX", - "noData": "No history data available for this time range.", - "custom": "Custom", - "to": "to", - "apply": "Apply", - "viewHistory": "View History" + "noData": "Tidak ada data riwayat yang tersedia untuk rentang waktu ini.", + "custom": "Kebiasaan", + "to": "ke", + "apply": "Menerapkan", + "viewHistory": "Lihat Riwayat" }, "hosts": { - "tabHostMetrics": "Host Metrics", - "metricsCollectionLabel": "Metrics Collection", - "enableMetricsLabel": "Enable Metrics", - "enableMetricsDesc": "Collect CPU, RAM, disk, and other metrics from this host", - "useGlobalMetrics": "Use Global Interval", - "useGlobalMetricsDesc": "Override with the server-wide metrics interval", - "metricsIntervalS": "Metrics Interval (s)", - "metricsIntervalDesc2": "Seconds between metric snapshots", - "excludedMountsLabel": "Excluded Mounts", - "monitoredMountsLabel": "Custom monitored paths", - "monitoredMountsDesc": "Add paths that are not exposed as separate mounts, including bind-mounted Home Assistant paths such as /config.", - "monitoredMountPathPlaceholder": "Path (/config, /mnt/data)", - "monitoredMountLabelPlaceholder": "Label (optional)", - "addMonitoredMount": "Add path", - "excludedMountsDesc": "Hide specific mount points or filesystem types (e.g. nfs, cifs) from disk usage and alerts for this host.", - "excludedMountsPlaceholder": "Mount path (/mnt/nas) or filesystem type (nfs, cifs)", - "excludedMountsEmpty": "No mounts excluded. All detected filesystems are shown.", - "addExcludedMount": "Add", - "visibleWidgets": "Visible Widgets", - "widgetsMovedToHostMetrics": "Cards are now added, arranged, and resized directly in the Host Metrics tab. Open Host Metrics for this host and use Customize to choose which cards are shown.", - "hostNotFound": "Host not found", - "loadingHost": "Loading host..." + "tabHostMetrics": "Metrik Host", + "metricsCollectionLabel": "Pengumpulan Metrik", + "enableMetricsLabel": "Aktifkan Metrik", + "enableMetricsDesc": "Kumpulkan data CPU, RAM, disk, dan metrik lainnya dari host ini.", + "useGlobalMetrics": "Gunakan Interval Global", + "useGlobalMetricsDesc": "Ganti dengan interval metrik di seluruh server.", + "metricsIntervalS": "Interval Metrik (detik)", + "metricsIntervalDesc2": "Detik antara pengambilan snapshot metrik", + "excludedMountsLabel": "Dudukan yang Dikecualikan", + "monitoredMountsLabel": "Jalur yang dipantau secara khusus", + "monitoredMountsDesc": "Tambahkan jalur yang tidak terekspos sebagai mount terpisah, termasuk jalur Home Assistant yang dipasang secara bind-mount seperti /config.", + "monitoredMountPathPlaceholder": "Jalur (/config, /mnt/data)", + "monitoredMountLabelPlaceholder": "Label (opsional)", + "addMonitoredMount": "Tambahkan jalur", + "excludedMountsDesc": "Sembunyikan titik pemasangan atau jenis sistem file tertentu (misalnya nfs, cifs) dari penggunaan disk dan peringatan untuk host ini.", + "excludedMountsPlaceholder": "Jalur pemasangan (/mnt/nas) atau tipe sistem file (nfs, cifs)", + "excludedMountsEmpty": "Tidak ada mount yang dikecualikan. Semua sistem file yang terdeteksi ditampilkan.", + "addExcludedMount": "Menambahkan", + "visibleWidgets": "Widget yang Terlihat", + "widgetsMovedToHostMetrics": "Kartu sekarang ditambahkan, diatur, dan diubah ukurannya langsung di tab Metrik Host. Buka Metrik Host untuk host ini dan gunakan Sesuaikan untuk memilih kartu mana yang akan ditampilkan.", + "hostNotFound": "Host tidak ditemukan", + "loadingHost": "Memuat host..." }, "onboarding": { - "feature_metrics": "Metrics and alerts", - "feature_metrics_desc": "Track CPU, memory and disk over time, and get alerted when they go bad." + "feature_metrics": "Metrik dan peringatan", + "feature_metrics_desc": "Pantau CPU, memori, dan disk dari waktu ke waktu, dan dapatkan peringatan saat terjadi kerusakan." }, "admin": { - "metricsHistoryRetention": "Metrics History Retention", - "metricsHistoryRetentionRange": "1 to 90 days", - "days": "days" + "metricsHistoryRetention": "Retensi Riwayat Metrik", + "metricsHistoryRetentionRange": "1 hingga 90 hari", + "days": "hari" }, "homepage": { - "noData": "No data available", - "showCurrentValue": "Show Current Value", - "chartMetric": "Metric", - "metricRange": "Range", - "host": "Host", - "loading": "Loading...", + "noData": "Tidak ada data yang tersedia", + "showCurrentValue": "Tampilkan Nilai Saat Ini", + "chartMetric": "Metrik", + "metricRange": "Jangkauan", + "host": "Tuan rumah", + "loading": "Memuat...", "metricCpu": "CPU", "metricDisk": "Disk", - "metricHostname": "Hostname", - "metricKernel": "Kernel", - "metricMemory": "Memory", - "metricNetwork": "Network", - "metricOs": "OS", - "metricProcesses": "Processes", - "metricProcessesRunning": "running", + "metricHostname": "Nama host", + "metricKernel": "Inti", + "metricMemory": "Ingatan", + "metricNetwork": "Jaringan", + "metricOs": "Sistem Operasi", + "metricProcesses": "Proses", + "metricProcessesRunning": "berlari", "metricProcessesTotal": "total", - "metricUptime": "Uptime", - "metricsNotAvailable": "Metrics not available", - "noHostSelected": "No host selected", - "selectHost": "Select a host..." + "metricUptime": "Waktu aktif", + "metricsNotAvailable": "Metrik tidak tersedia", + "noHostSelected": "Tidak ada pembawa acara yang dipilih.", + "selectHost": "Pilih tuan rumah..." }, "terminalStatus": { - "unavailable": "Live stats unavailable" + "unavailable": "Statistik langsung tidak tersedia" }, "dashboard": { "cpu": "CPU", @@ -260,53 +260,56 @@ "disk": "Disk" }, "terminal": { - "connected": "Connected" + "connected": "Terhubung" }, "permissions": { "use": { - "title": "Use Host Metrics", - "description": "View host metrics and use the host managers (services, packages, firewall and more) on hosts you can reach." + "title": "Gunakan Metrik Host", + "description": "Lihat metrik host dan gunakan pengelola host (layanan, paket, firewall, dan lainnya) pada host yang dapat Anda jangkau." } }, "settings": { "admin": { "metricsInterval": { - "label": "Metrics interval (seconds)", - "description": "How often a host being viewed is sampled, unless the host sets its own interval." + "label": "Interval metrik (detik)", + "description": "Seberapa sering sebuah host yang sedang dilihat diambil sampelnya, kecuali jika host tersebut menetapkan intervalnya sendiri." }, "historyRetentionDays": { - "label": "History retention (days)", - "description": "How long metrics samples are kept for the history charts." + "label": "Retensi riwayat (hari)", + "description": "Berapa lama sampel metrik disimpan untuk grafik riwayat." }, "enabledForNewHosts": { - "label": "Metrics on for new hosts", - "description": "Whether new hosts start with metrics collection turned on." + "label": "Metrik diaktifkan untuk host baru.", + "description": "Apakah host baru memulai dengan pengumpulan metrik yang diaktifkan." } }, "user": { "temperatureUnit": { - "label": "Temperature unit", - "description": "How temperatures are shown in Host Metrics.", + "label": "Satuan suhu", + "description": "Bagaimana suhu ditampilkan di Host Metrics.", "celsius": "Celsius", "fahrenheit": "Fahrenheit" } }, "host": { "metricsEnabled": { - "label": "Collect metrics" + "label": "Kumpulkan metrik" }, "metricsInterval": { - "label": "Metrics interval (seconds)" + "label": "Interval metrik (detik)" }, "enabledWidgets": { - "label": "Enabled widgets" + "label": "Widget yang diaktifkan" }, "excludedMounts": { - "label": "Excluded mounts" + "label": "Dudukan yang dikecualikan" }, "monitoredMounts": { - "label": "Monitored paths" + "label": "Jalur yang dipantau" } } + }, + "plugin": { + "name": "Host Metrics" } } diff --git a/plugins/host-metrics/locales/translated/it_IT.json b/plugins/host-metrics/locales/translated/it_IT.json index 5e3a08146..443b2eeee 100644 --- a/plugins/host-metrics/locales/translated/it_IT.json +++ b/plugins/host-metrics/locales/translated/it_IT.json @@ -308,5 +308,8 @@ "label": "Percorsi monitorati" } } + }, + "plugin": { + "name": "Host Metrics" } } diff --git a/plugins/host-metrics/locales/translated/ja_JP.json b/plugins/host-metrics/locales/translated/ja_JP.json index ce0885ddf..c904b1041 100644 --- a/plugins/host-metrics/locales/translated/ja_JP.json +++ b/plugins/host-metrics/locales/translated/ja_JP.json @@ -308,5 +308,8 @@ "label": "監視対象経路" } } + }, + "plugin": { + "name": "Host Metrics" } } diff --git a/plugins/host-metrics/locales/translated/ko_KR.json b/plugins/host-metrics/locales/translated/ko_KR.json index e5c6dd6a1..53efdf8d6 100644 --- a/plugins/host-metrics/locales/translated/ko_KR.json +++ b/plugins/host-metrics/locales/translated/ko_KR.json @@ -308,5 +308,8 @@ "label": "모니터링되는 경로" } } + }, + "plugin": { + "name": "Host Metrics" } } diff --git a/plugins/host-metrics/locales/translated/nl_NL.json b/plugins/host-metrics/locales/translated/nl_NL.json index 6ae507b61..14d042f4a 100644 --- a/plugins/host-metrics/locales/translated/nl_NL.json +++ b/plugins/host-metrics/locales/translated/nl_NL.json @@ -308,5 +308,8 @@ "label": "Bewaakte paden" } } + }, + "plugin": { + "name": "Host Metrics" } } diff --git a/plugins/host-metrics/locales/translated/no_NO.json b/plugins/host-metrics/locales/translated/no_NO.json index fcc04dca3..d5fa9a386 100644 --- a/plugins/host-metrics/locales/translated/no_NO.json +++ b/plugins/host-metrics/locales/translated/no_NO.json @@ -1,6 +1,6 @@ { "nav": { - "hostMetrics": "Host Metrics" + "hostMetrics": "Vertsmålinger" }, "hostMetrics": { "cpu": "CPU", @@ -12,34 +12,34 @@ "available": "Tilgjengelig", "free": "Ledig", "connecting": "Kobler til...", - "connectionFailed": "Failed to connect to server", + "connectionFailed": "Kunne ikke koble til serveren", "naCpus": "N/A CPU(er)", - "cpuCores_one": "{{count}} Core", - "cpuCores_other": "{{count}} Cores", + "cpuCores_one": "{{count}} Kjerne", + "cpuCores_other": "{{count}} Kjerner", "cpuUsage": "CPU-bruk", "memoryUsage": "Minnebruk", "diskUsage": "Diskbruk", - "selectFilesystem": "Select filesystem", - "temperature": "Temperature", - "highestTemperature": "Highest temperature", - "primaryTemperatureSensor": "Primary sensor", + "selectFilesystem": "Velg filsystem", + "temperature": "Temperatur", + "highestTemperature": "Høyeste temperatur", + "primaryTemperatureSensor": "Primærsensor", "gpu": { "title": "GPU", - "noDevice": "No NVIDIA GPU detected. Install the NVIDIA driver (it provides nvidia-smi) to see GPU metrics.", - "driver": "Driver {{version}}", - "utilization": "Utilization", + "noDevice": "Ingen NVIDIA GPU funnet. Installer NVIDIA-driveren (den inneholder nvidia-smi) for å se GPU-målinger.", + "driver": "Sjåfør {{version}}", + "utilization": "Utnyttelse", "memory": "VRAM", - "temperature": "Temp", - "power": "Power", + "temperature": "Temp.", + "power": "Makt", "fan": "Fan", - "processes": "GPU processes", - "noProcesses": "No processes are using the GPU" + "processes": "GPU-prosesser", + "noProcesses": "Ingen prosesser bruker GPU-en" }, "failedToFetchHostConfig": "Kunne ikke hente vertskonfigurasjon", "serverOffline": "Server frakoblet", "cannotFetchMetrics": "Kan ikke hente målinger fra frakoblet server", "totpFailed": "TOTP-verifisering mislyktes", - "noneAuthNotSupported": "Host Metrics does not support 'none' authentication type.", + "noneAuthNotSupported": "Host Metrics støtter ikke autentiseringstypen «ingen».", "noHostSelected": "Ingen vert valgt", "load": "Last", "systemInfo": "Systeminformasjon", @@ -55,184 +55,184 @@ "loginStats": "SSH-påloggingsstatistikk", "noRecentLoginData": "Ingen nylige påloggingsdata", "ports": { - "title": "Listening Ports", - "protocol": "Protocol", - "port": "Port", - "address": "Address", - "process": "Process", - "search": "Search ports...", - "allProtocols": "All", - "noData": "No listening ports data" + "title": "Lytteporter", + "protocol": "Protokoll", + "port": "Havn", + "address": "Adresse", + "process": "Behandle", + "search": "Søk etter porter...", + "allProtocols": "Alle", + "noData": "Ingen data om lytteporter" }, "firewall": { - "title": "Firewall", + "title": "Brannmur", "inactive": "Inaktiv", - "policy": "Policy", - "rules": "rules", - "noRules": "No rules in this chain", - "noData": "No firewall data available", - "action": "Action", + "policy": "Politikk", + "rules": "regler", + "noRules": "Ingen regler i denne kjeden", + "noData": "Ingen brannmurdata tilgjengelig", + "action": "Handling", "protocol": "Proto", - "port": "Port", - "source": "Source", - "anywhere": "Anywhere", - "chains": "chains" + "port": "Havn", + "source": "Kilde", + "anywhere": "Hvor som helst", + "chains": "kjeder" }, - "loadAvg": "Load Avg", - "swap": "Swap", - "architecture": "Architecture", + "loadAvg": "Last inn gjennomsnitt", + "swap": "Bytte", + "architecture": "Arkitektur", "refresh": "Oppdater", "retry": "Prøv igjen", - "customize": "Customize layout", + "customize": "Tilpass oppsettet", "reset": "Tilbakestill", - "tabLive": "Live", - "editModeInstructions": "Drag cards to rearrange, drag the bottom edge to resize, and use the width button to change a card's span. Add or remove cards below.", + "tabLive": "Bo", + "editModeInstructions": "Dra kort for å omorganisere, dra i den nederste kanten for å endre størrelsen, og bruk breddeknappen for å endre kortets rekkevidde. Legg til eller fjern kort nedenfor.", "managers": { - "services": "Services", - "processInspector": "Process Inspector", - "logViewer": "Log Viewer", - "cron": "Cron Jobs", - "packages": "Packages", - "ssl": "SSL Certificates", - "firewall": "Firewall", - "users": "Users & Permissions", - "healthCheck": "Health Checks", - "diskBreakdown": "Disk Breakdown", - "systemdTimers": "Timers", - "topMemory": "Top by Memory", - "noData": "No data", - "sudoHint": "Set a sudo password for this host in the host editor to enable privileged actions.", + "services": "Tjenester", + "processInspector": "Prosessinspektør", + "logViewer": "Loggviser", + "cron": "Cron-jobber", + "packages": "Pakker", + "ssl": "SSL-sertifikater", + "firewall": "Brannmur", + "users": "Brukere og tillatelser", + "healthCheck": "Helsesjekker", + "diskBreakdown": "Disknedbrytning", + "systemdTimers": "Tidtakere", + "topMemory": "Topp etter minne", + "noData": "Ingen data", + "sudoHint": "Angi et sudo-passord for denne verten i vertredigeringsprogrammet for å aktivere privilegerte handlinger.", "filter": "Filter...", "start": "Start", "stop": "Stopp", "restart": "Start på nytt", - "actionDone": "{{name}} updated", - "actionFailed": "Action failed", - "signalSent": "Signal sent to PID {{pid}}", - "killHint": "Click: terminate (SIGTERM). Right-click: force kill (SIGKILL).", - "working": "Working...", - "update": "Update", - "upgradeAll": "Upgrade all", - "allUpToDate": "Everything is up to date", + "actionDone": "{{name}} oppdatert", + "actionFailed": "Handlingen mislyktes", + "signalSent": "Signal sendt til PID {{pid}}", + "killHint": "Klikk: avslutt (SIGTERM). Høyreklikk: tvungen avslutning (SIGKILL).", + "working": "Arbeider...", + "update": "Oppdatering", + "upgradeAll": "Oppgrader alle", + "allUpToDate": "Alt er oppdatert", "save": "Lagre", "command": "Kommando", "enabled": "Aktivert", - "cronSaved": "Crontab updated", - "clients": "Clients", - "dryRun": "Dry run", - "renew": "Renew", - "noAcmeClient": "No ACME client (certbot or acme.sh) found on this host.", - "addInputRule": "Add INPUT rule", - "firewallWarning": "Changes are runtime-only until persisted. Be careful not to lock yourself out.", - "ruleApplied": "Rule applied", - "invalidPort": "Enter a valid port (1-65535)", - "newUsername": "New username", + "cronSaved": "Crontab oppdatert", + "clients": "Klienter", + "dryRun": "Tørrløp", + "renew": "Fornye", + "noAcmeClient": "Ingen ACME-klient (certbot eller acme.sh) funnet på denne verten.", + "addInputRule": "Legg til INPUT-regel", + "firewallWarning": "Endringene gjelder kun for kjøring inntil de lagres. Vær forsiktig så du ikke låser deg ute.", + "ruleApplied": "Regel brukt", + "invalidPort": "Skriv inn en gyldig port (1-65535)", + "newUsername": "Nytt brukernavn", "addUser": "Legg til", - "deleteUser": "Delete user", - "noHealthChecks": "No health checks configured yet.", - "follow": "Follow", - "noLogData": "No log output.", - "tree": "Tree", - "enableDisable": "Enable / disable at boot", - "grantSudo": "Grant sudo", - "revokeSudo": "Revoke sudo", - "sslIssueCert": "Issue certificate", + "deleteUser": "Slett bruker", + "noHealthChecks": "Ingen helsesjekker er konfigurert ennå.", + "follow": "Følge", + "noLogData": "Ingen loggutgang.", + "tree": "Tre", + "enableDisable": "Aktiver/deaktiver ved oppstart", + "grantSudo": "Gi sudo", + "revokeSudo": "Tilbakekalle sudo", + "sslIssueCert": "Utsted sertifikat", "sslExpired": "Utløpt", - "sslInDays": "in {{days}}d", - "sslNeedDomain": "Enter at least one domain", - "sslIssued": "Certificate issued", - "sslDomainsPlaceholder": "example.com, www.example.com", - "sslHttpStandalone": "HTTP (standalone)", - "sslHttpWebroot": "HTTP (webroot)", + "sslInDays": "i {{days}}d", + "sslNeedDomain": "Angi minst ett domene", + "sslIssued": "Sertifikat utstedt", + "sslDomainsPlaceholder": "eksempel.com, www.eksempel.com", + "sslHttpStandalone": "HTTP (frittstående)", + "sslHttpWebroot": "HTTP (nettrot)", "sslDns": "DNS", - "sslDnsProvider": "DNS provider (e.g. cloudflare)", - "sslIssueHint": "DNS provider credentials must already be configured on the host.", - "sslRevoke": "Revoke certificate", - "sslRevoked": "Certificate revoked", - "sslRevokeConfirm": "Revoke and remove the certificate \"{{name}}\"? This cannot be undone.", + "sslDnsProvider": "DNS-leverandør (f.eks. Cloudflare)", + "sslIssueHint": "DNS-leverandørens påloggingsinformasjon må allerede være konfigurert på verten.", + "sslRevoke": "Tilbakekalle sertifikat", + "sslRevoked": "Sertifikatet er tilbakekalt", + "sslRevokeConfirm": "Tilbakekalle og fjerne sertifikatet «{{name}}»? Dette kan ikke angres.", "healthRun": "Kjør", "healthName": "Navn", - "healthTarget": "Host / address", - "healthAddCheck": "Add check", - "healthSaved": "Health checks saved", - "healthMissingFields": "Each check needs a name and target", + "healthTarget": "Vert / adresse", + "healthAddCheck": "Legg til sjekk", + "healthSaved": "Helsesjekker lagret", + "healthMissingFields": "Hver sjekk trenger et navn og et mål", "logFile": "Fil", - "logUnit": "Unit", - "logCustomPath": "Custom path under /var/log (optional)", - "logGrep": "Filter lines...", - "firewallPersist": "Persist rules", - "firewallPersisted": "Firewall rules persisted", + "logUnit": "Enhet", + "logCustomPath": "Tilpasset sti under /var/log (valgfritt)", + "logGrep": "Filtrer linjer...", + "firewallPersist": "Vedvarende regler", + "firewallPersisted": "Brannmurregler beholdt", "wireguard": "WireGuard", - "wgNotInstalled": "WireGuard is not installed on this host", - "wgNoInterfaces": "No WireGuard interfaces configured", - "wgInterfaceUp": "Bring up", - "wgInterfaceDown": "Bring down", - "wgBringingUp": "Bringing {{name}} up...", - "wgBringingDown": "Bringing {{name}} down...", - "wgInterfaceUpDone": "{{name}} is up", - "wgInterfaceDownDone": "{{name}} is down", - "wgListenPort": "Port", - "wgPublicKey": "Public key", - "wgEndpoint": "Endpoint", - "wgAllowedIPs": "Allowed IPs", - "wgLastHandshake": "Last handshake", - "wgHandshakeNever": "Never", - "wgTransfer": "Transfer", - "wgNoPeers": "No peers" + "wgNotInstalled": "WireGuard er ikke installert på denne verten", + "wgNoInterfaces": "Ingen WireGuard-grensesnitt konfigurert", + "wgInterfaceUp": "Ta opp", + "wgInterfaceDown": "Ta ned", + "wgBringingUp": "Tar opp {{name}}...", + "wgBringingDown": "Å bringe {{name}} ned...", + "wgInterfaceUpDone": "{{name}} er oppe", + "wgInterfaceDownDone": "{{name}} er nede", + "wgListenPort": "Havn", + "wgPublicKey": "Offentlig nøkkel", + "wgEndpoint": "Endepunkt", + "wgAllowedIPs": "Tillatte IP-adresser", + "wgLastHandshake": "Siste håndtrykk", + "wgHandshakeNever": "Aldri", + "wgTransfer": "Overføre", + "wgNoPeers": "Ingen jevnaldrende" } }, "metricsHistory": { - "title": "Metrics History", + "title": "Metrikkhistorikk", "historySuffix": "Historikk", - "cpuMemoryDisk": "CPU / Memory / Disk", + "cpuMemoryDisk": "CPU / Minne / Disk", "network": "Nettverk", "download": "RX", "upload": "TX", - "noData": "No history data available for this time range.", - "custom": "Custom", - "to": "to", - "apply": "Apply", - "viewHistory": "View History" + "noData": "Ingen historikkdata tilgjengelig for denne tidsperioden.", + "custom": "Skikk", + "to": "til", + "apply": "Søke", + "viewHistory": "Vis historikk" }, "hosts": { - "tabHostMetrics": "Host Metrics", - "metricsCollectionLabel": "Metrics Collection", - "enableMetricsLabel": "Enable Metrics", - "enableMetricsDesc": "Collect CPU, RAM, disk, and other metrics from this host", - "useGlobalMetrics": "Use Global Interval", - "useGlobalMetricsDesc": "Override with the server-wide metrics interval", - "metricsIntervalS": "Metrics Interval (s)", - "metricsIntervalDesc2": "Seconds between metric snapshots", - "excludedMountsLabel": "Excluded Mounts", - "monitoredMountsLabel": "Custom monitored paths", - "monitoredMountsDesc": "Add paths that are not exposed as separate mounts, including bind-mounted Home Assistant paths such as /config.", - "monitoredMountPathPlaceholder": "Path (/config, /mnt/data)", - "monitoredMountLabelPlaceholder": "Label (optional)", - "addMonitoredMount": "Add path", - "excludedMountsDesc": "Hide specific mount points or filesystem types (e.g. nfs, cifs) from disk usage and alerts for this host.", - "excludedMountsPlaceholder": "Mount path (/mnt/nas) or filesystem type (nfs, cifs)", - "excludedMountsEmpty": "No mounts excluded. All detected filesystems are shown.", + "tabHostMetrics": "Vertsmålinger", + "metricsCollectionLabel": "Metrikksamling", + "enableMetricsLabel": "Aktiver målinger", + "enableMetricsDesc": "Samle inn CPU-, RAM-, disk- og andre målinger fra denne verten", + "useGlobalMetrics": "Bruk globalt intervall", + "useGlobalMetricsDesc": "Overstyr med det serveromfattende måleintervallet", + "metricsIntervalS": "Måleintervall (s)", + "metricsIntervalDesc2": "Sekunder mellom målebilder", + "excludedMountsLabel": "Ekskluderte fester", + "monitoredMountsLabel": "Tilpassede overvåkede stier", + "monitoredMountsDesc": "Legg til stier som ikke er eksponert som separate monteringer, inkludert bindingsmonterte Home Assistant-stier som /config.", + "monitoredMountPathPlaceholder": "Sti (/config, /mnt/data)", + "monitoredMountLabelPlaceholder": "Etikett (valgfritt)", + "addMonitoredMount": "Legg til sti", + "excludedMountsDesc": "Skjul spesifikke monteringspunkter eller filsystemtyper (f.eks. nfs, cifs) fra diskbruk og varsler for denne verten.", + "excludedMountsPlaceholder": "Monteringssti (/mnt/nas) eller filsystemtype (nfs, cifs)", + "excludedMountsEmpty": "Ingen monteringer er utelukket. Alle oppdagede filsystemer vises.", "addExcludedMount": "Legg til", - "visibleWidgets": "Visible Widgets", - "widgetsMovedToHostMetrics": "Cards are now added, arranged, and resized directly in the Host Metrics tab. Open Host Metrics for this host and use Customize to choose which cards are shown.", - "hostNotFound": "Host not found", - "loadingHost": "Loading host..." + "visibleWidgets": "Synlige widgeter", + "widgetsMovedToHostMetrics": "Kort legges nå til, arrangeres og endres i størrelse direkte i fanen Vertsmålinger. Åpne Vertsmålinger for denne verten og bruk Tilpass for å velge hvilke kort som vises.", + "hostNotFound": "Verten ble ikke funnet", + "loadingHost": "Laster inn vert ..." }, "onboarding": { - "feature_metrics": "Metrics and alerts", - "feature_metrics_desc": "Track CPU, memory and disk over time, and get alerted when they go bad." + "feature_metrics": "Målinger og varsler", + "feature_metrics_desc": "Spor CPU, minne og disk over tid, og bli varslet når de blir dårlige." }, "admin": { - "metricsHistoryRetention": "Metrics History Retention", - "metricsHistoryRetentionRange": "1 to 90 days", - "days": "days" + "metricsHistoryRetention": "Oppbevaring av metrikkhistorikk", + "metricsHistoryRetentionRange": "1 til 90 dager", + "days": "dager" }, "homepage": { - "noData": "No data available", - "showCurrentValue": "Show Current Value", - "chartMetric": "Metric", - "metricRange": "Range", - "host": "Host", + "noData": "Ingen data tilgjengelig", + "showCurrentValue": "Vis gjeldende verdi", + "chartMetric": "Metrisk", + "metricRange": "Spekter", + "host": "Vert", "loading": "Laster...", "metricCpu": "CPU", "metricDisk": "Disk", @@ -245,16 +245,16 @@ "metricProcessesRunning": "kjører", "metricProcessesTotal": "totalt", "metricUptime": "Oppetid", - "metricsNotAvailable": "Metrics not available", + "metricsNotAvailable": "Målinger er ikke tilgjengelige", "noHostSelected": "Ingen vert valgt", - "selectHost": "Select a host..." + "selectHost": "Velg en vert..." }, "terminalStatus": { - "unavailable": "Live stats unavailable" + "unavailable": "Livestatistikk er ikke tilgjengelig" }, "dashboard": { "cpu": "CPU", - "ram": "RAM" + "ram": "VÆR" }, "dashboardTab": { "disk": "Disk" @@ -264,49 +264,52 @@ }, "permissions": { "use": { - "title": "Use Host Metrics", - "description": "View host metrics and use the host managers (services, packages, firewall and more) on hosts you can reach." + "title": "Bruk vertsmålinger", + "description": "Se vertsmålinger og bruk vertsadministratorene (tjenester, pakker, brannmur og mer) på verter du kan nå." } }, "settings": { "admin": { "metricsInterval": { - "label": "Metrics interval (seconds)", - "description": "How often a host being viewed is sampled, unless the host sets its own interval." + "label": "Måleintervall (sekunder)", + "description": "Hvor ofte en vert som vises samples, med mindre verten angir sitt eget intervall." }, "historyRetentionDays": { - "label": "History retention (days)", - "description": "How long metrics samples are kept for the history charts." + "label": "Historikklagring (dager)", + "description": "Hvor lenge metrikkprøver oppbevares for historikkdiagrammene." }, "enabledForNewHosts": { - "label": "Metrics on for new hosts", - "description": "Whether new hosts start with metrics collection turned on." + "label": "Målinger på for nye verter", + "description": "Om nye verter starter med innsamling av metrikk aktivert." } }, "user": { "temperatureUnit": { - "label": "Temperature unit", - "description": "How temperatures are shown in Host Metrics.", + "label": "Temperaturenhet", + "description": "Hvordan temperaturer vises i Host Metrics.", "celsius": "Celsius", "fahrenheit": "Fahrenheit" } }, "host": { "metricsEnabled": { - "label": "Collect metrics" + "label": "Samle inn målinger" }, "metricsInterval": { - "label": "Metrics interval (seconds)" + "label": "Måleintervall (sekunder)" }, "enabledWidgets": { - "label": "Enabled widgets" + "label": "Aktiverte widgeter" }, "excludedMounts": { - "label": "Excluded mounts" + "label": "Ekskluderte fester" }, "monitoredMounts": { - "label": "Monitored paths" + "label": "Overvåkede stier" } } + }, + "plugin": { + "name": "Host Metrics" } } diff --git a/plugins/host-metrics/locales/translated/pl_PL.json b/plugins/host-metrics/locales/translated/pl_PL.json index 425d54ff3..ca51a2351 100644 --- a/plugins/host-metrics/locales/translated/pl_PL.json +++ b/plugins/host-metrics/locales/translated/pl_PL.json @@ -22,18 +22,18 @@ "selectFilesystem": "Wybierz system plików", "temperature": "Temperatura", "highestTemperature": "Najwyższa temperatura", - "primaryTemperatureSensor": "Primary sensor", + "primaryTemperatureSensor": "Główny czujnik", "gpu": { - "title": "GPU", - "noDevice": "No NVIDIA GPU detected. Install the NVIDIA driver (it provides nvidia-smi) to see GPU metrics.", - "driver": "Driver {{version}}", - "utilization": "Utilization", - "memory": "VRAM", + "title": "Procesor graficzny", + "noDevice": "Nie wykryto procesora graficznego NVIDIA. Zainstaluj sterownik NVIDIA (zawiera on nvidia-smi), aby wyświetlić dane dotyczące procesora graficznego.", + "driver": "Kierowca {{version}}", + "utilization": "Wykorzystanie", + "memory": "Pamięć VRAM", "temperature": "Temp", - "power": "Power", - "fan": "Fan", - "processes": "GPU processes", - "noProcesses": "No processes are using the GPU" + "power": "Moc", + "fan": "Wentylator", + "processes": "Procesy GPU", + "noProcesses": "Żaden proces nie wykorzystuje procesora GPU" }, "failedToFetchHostConfig": "Nie udało się pobrać konfiguracji hosta", "serverOffline": "Serwer offline", @@ -178,7 +178,7 @@ "wgLastHandshake": "Ostatni handshake", "wgHandshakeNever": "Nigdy", "wgTransfer": "Transfer", - "wgNoPeers": "No peers" + "wgNoPeers": "Brak rówieśników" } }, "metricsHistory": { @@ -264,49 +264,52 @@ }, "permissions": { "use": { - "title": "Use Host Metrics", - "description": "View host metrics and use the host managers (services, packages, firewall and more) on hosts you can reach." + "title": "Użyj metryk hosta", + "description": "Przeglądaj metryki hosta i korzystaj z menedżerów hosta (usług, pakietów, zapory sieciowej i innych) na hostach, do których masz dostęp." } }, "settings": { "admin": { "metricsInterval": { - "label": "Metrics interval (seconds)", - "description": "How often a host being viewed is sampled, unless the host sets its own interval." + "label": "Interwał metryk (sekundy)", + "description": "Częstotliwość próbkowania oglądanego hosta, chyba że host ustawi własny interwał." }, "historyRetentionDays": { - "label": "History retention (days)", - "description": "How long metrics samples are kept for the history charts." + "label": "Retencja historii (dni)", + "description": "Jak długo przechowywane są próbki metryk na potrzeby wykresów historycznych." }, "enabledForNewHosts": { - "label": "Metrics on for new hosts", - "description": "Whether new hosts start with metrics collection turned on." + "label": "Metryki dla nowych hostów", + "description": "Czy nowi gospodarze rozpoczynają pracę z włączonym zbieraniem danych metrycznych." } }, "user": { "temperatureUnit": { - "label": "Temperature unit", - "description": "How temperatures are shown in Host Metrics.", - "celsius": "Celsius", - "fahrenheit": "Fahrenheit" + "label": "Jednostka temperatury", + "description": "W jaki sposób temperatury są wyświetlane w Host Metrics.", + "celsius": "Celsjusz", + "fahrenheit": "Fahrenheita" } }, "host": { "metricsEnabled": { - "label": "Collect metrics" + "label": "Zbieraj dane metryczne" }, "metricsInterval": { - "label": "Metrics interval (seconds)" + "label": "Interwał metryk (sekundy)" }, "enabledWidgets": { - "label": "Enabled widgets" + "label": "Włączone widżety" }, "excludedMounts": { - "label": "Excluded mounts" + "label": "Wykluczone wierzchowce" }, "monitoredMounts": { - "label": "Monitored paths" + "label": "Monitorowane ścieżki" } } + }, + "plugin": { + "name": "Host Metrics" } } diff --git a/plugins/host-metrics/locales/translated/pt_BR.json b/plugins/host-metrics/locales/translated/pt_BR.json index c39c11378..c21189182 100644 --- a/plugins/host-metrics/locales/translated/pt_BR.json +++ b/plugins/host-metrics/locales/translated/pt_BR.json @@ -4,309 +4,312 @@ }, "hostMetrics": { "cpu": "CPU", - "memory": "Memory", - "disk": "Disk", - "network": "Network", - "uptime": "Uptime", - "processes": "Processes", - "available": "Available", - "free": "Free", + "memory": "Memória", + "disk": "Disco", + "network": "Rede", + "uptime": "Tempo de atividade", + "processes": "Processos", + "available": "Disponível", + "free": "Livre", "connecting": "Conectando...", - "connectionFailed": "Failed to connect to server", + "connectionFailed": "Falha ao conectar-se ao servidor", "naCpus": "N/A CPU(s)", - "cpuCores_one": "{{count}} Core", - "cpuCores_other": "{{count}} Cores", - "cpuUsage": "CPU Usage", - "memoryUsage": "Memory Usage", - "diskUsage": "Disk Usage", - "selectFilesystem": "Select filesystem", - "temperature": "Temperature", - "highestTemperature": "Highest temperature", - "primaryTemperatureSensor": "Primary sensor", + "cpuCores_one": "{{count}} Núcleo", + "cpuCores_other": "{{count}} Núcleos", + "cpuUsage": "Utilização da CPU", + "memoryUsage": "Uso de memória", + "diskUsage": "Utilização do disco", + "selectFilesystem": "Selecione o sistema de arquivos", + "temperature": "Temperatura", + "highestTemperature": "Temperatura mais alta", + "primaryTemperatureSensor": "Sensor primário", "gpu": { "title": "GPU", - "noDevice": "No NVIDIA GPU detected. Install the NVIDIA driver (it provides nvidia-smi) to see GPU metrics.", - "driver": "Driver {{version}}", - "utilization": "Utilization", + "noDevice": "Nenhuma GPU NVIDIA detectada. Instale o driver da NVIDIA (que fornece o nvidia-smi) para visualizar as métricas da GPU.", + "driver": "Motorista {{version}}", + "utilization": "Utilização", "memory": "VRAM", "temperature": "Temp", - "power": "Power", - "fan": "Fan", - "processes": "GPU processes", - "noProcesses": "No processes are using the GPU" + "power": "Poder", + "fan": "Fã", + "processes": "processos da GPU", + "noProcesses": "Nenhum processo está utilizando a GPU." }, - "failedToFetchHostConfig": "Failed to fetch host configuration", - "serverOffline": "Server Offline", - "cannotFetchMetrics": "Cannot fetch metrics from offline server", - "totpFailed": "TOTP verification failed", - "noneAuthNotSupported": "Host Metrics does not support 'none' authentication type.", - "noHostSelected": "No host selected", - "load": "Load", - "systemInfo": "System Information", - "hostname": "Hostname", - "operatingSystem": "Operating System", + "failedToFetchHostConfig": "Falha ao obter a configuração do host", + "serverOffline": "Servidor offline", + "cannotFetchMetrics": "Não foi possível obter métricas do servidor offline.", + "totpFailed": "A verificação TOTP falhou.", + "noneAuthNotSupported": "O Host Metrics não suporta o tipo de autenticação 'nenhum'.", + "noHostSelected": "Nenhum host selecionado", + "load": "Carregar", + "systemInfo": "Informações do sistema", + "hostname": "Nome do host", + "operatingSystem": "Sistema operacional", "kernel": "Kernel", - "seconds": "seconds", - "networkInterfaces": "Network Interfaces", - "noInterfacesFound": "No network interfaces found", - "noProcessesFound": "No processes found", + "seconds": "segundos", + "networkInterfaces": "Interfaces de rede", + "noInterfacesFound": "Nenhuma interface de rede encontrada", + "noProcessesFound": "Nenhum processo encontrado", "processesTotal": "total", - "processesRunning": "running", - "loginStats": "SSH Login Statistics", - "noRecentLoginData": "No recent login data", + "processesRunning": "correndo", + "loginStats": "Estatísticas de login SSH", + "noRecentLoginData": "Nenhum dado de login recente", "ports": { - "title": "Listening Ports", - "protocol": "Protocol", + "title": "Portas de escuta", + "protocol": "Protocolo", "port": "Porta", - "address": "Address", - "process": "Process", - "search": "Search ports...", - "allProtocols": "All", - "noData": "No listening ports data" + "address": "Endereço", + "process": "Processo", + "search": "Portas de pesquisa...", + "allProtocols": "Todos", + "noData": "Sem dados de portas de escuta" }, "firewall": { "title": "Firewall", - "inactive": "Inactive", - "policy": "Policy", - "rules": "rules", - "noRules": "No rules in this chain", - "noData": "No firewall data available", - "action": "Action", + "inactive": "Inativo", + "policy": "Política", + "rules": "regras", + "noRules": "Não há regras nesta corrente.", + "noData": "Não há dados de firewall disponíveis.", + "action": "Ação", "protocol": "Proto", "port": "Porta", - "source": "Source", - "anywhere": "Anywhere", - "chains": "chains" + "source": "Fonte", + "anywhere": "Em qualquer lugar", + "chains": "correntes" }, - "loadAvg": "Load Avg", - "swap": "Swap", - "architecture": "Architecture", + "loadAvg": "Carga média", + "swap": "Trocar", + "architecture": "Arquitetura", "refresh": "Atualizar", - "retry": "Retry", - "customize": "Customize layout", - "reset": "Reset", - "tabLive": "Live", - "editModeInstructions": "Drag cards to rearrange, drag the bottom edge to resize, and use the width button to change a card's span. Add or remove cards below.", + "retry": "Tentar novamente", + "customize": "Personalizar layout", + "reset": "Reiniciar", + "tabLive": "Ao vivo", + "editModeInstructions": "Arraste os cartões para reorganizá-los, arraste a borda inferior para redimensioná-los e use o botão de largura para alterar a extensão de um cartão. Adicione ou remova cartões abaixo.", "managers": { - "services": "Services", - "processInspector": "Process Inspector", - "logViewer": "Log Viewer", - "cron": "Cron Jobs", - "packages": "Packages", - "ssl": "SSL Certificates", + "services": "Serviços", + "processInspector": "Inspetor de Processos", + "logViewer": "Visualizador de Logs", + "cron": "Tarefas agendadas", + "packages": "Pacotes", + "ssl": "Certificados SSL", "firewall": "Firewall", - "users": "Users & Permissions", - "healthCheck": "Health Checks", - "diskBreakdown": "Disk Breakdown", - "systemdTimers": "Timers", - "topMemory": "Top by Memory", - "noData": "No data", - "sudoHint": "Set a sudo password for this host in the host editor to enable privileged actions.", - "filter": "Filter...", + "users": "Usuários e permissões", + "healthCheck": "Exames de saúde", + "diskBreakdown": "Avaria do disco", + "systemdTimers": "Temporizadores", + "topMemory": "Melhor por memória", + "noData": "Sem dados", + "sudoHint": "Defina uma senha sudo para este host no editor de hosts para habilitar ações privilegiadas.", + "filter": "Filtro...", "start": "Iniciar", - "stop": "Stop", - "restart": "Restart", - "actionDone": "{{name}} updated", - "actionFailed": "Action failed", - "signalSent": "Signal sent to PID {{pid}}", - "killHint": "Click: terminate (SIGTERM). Right-click: force kill (SIGKILL).", - "working": "Working...", + "stop": "Parar", + "restart": "Reiniciar", + "actionDone": "{{name}} atualizado", + "actionFailed": "A ação falhou", + "signalSent": "Sinal enviado para PID {{pid}}", + "killHint": "Clique: encerrar (SIGTERM). Clique com o botão direito: forçar o encerramento (SIGKILL).", + "working": "Trabalhando...", "update": "Atualizar", - "upgradeAll": "Upgrade all", - "allUpToDate": "Everything is up to date", + "upgradeAll": "Atualizar tudo", + "allUpToDate": "Tudo está atualizado.", "save": "Salvar", - "command": "Command", - "enabled": "Enabled", - "cronSaved": "Crontab updated", - "clients": "Clients", - "dryRun": "Dry run", - "renew": "Renew", - "noAcmeClient": "No ACME client (certbot or acme.sh) found on this host.", - "addInputRule": "Add INPUT rule", - "firewallWarning": "Changes are runtime-only until persisted. Be careful not to lock yourself out.", - "ruleApplied": "Rule applied", - "invalidPort": "Enter a valid port (1-65535)", - "newUsername": "New username", + "command": "Comando", + "enabled": "Habilitado", + "cronSaved": "Crontab atualizado", + "clients": "Clientes", + "dryRun": "Ensaio geral", + "renew": "Renovar", + "noAcmeClient": "Nenhum cliente ACME (certbot ou acme.sh) foi encontrado neste host.", + "addInputRule": "Adicionar regra de ENTRADA", + "firewallWarning": "As alterações são válidas apenas em tempo de execução até serem persistidas. Tenha cuidado para não bloquear o seu próprio acesso.", + "ruleApplied": "Regra aplicada", + "invalidPort": "Digite uma porta válida (1-65535)", + "newUsername": "Novo nome de usuário", "addUser": "Adicionar", - "deleteUser": "Delete user", - "noHealthChecks": "No health checks configured yet.", - "follow": "Follow", - "noLogData": "No log output.", - "tree": "Tree", - "enableDisable": "Enable / disable at boot", - "grantSudo": "Grant sudo", - "revokeSudo": "Revoke sudo", - "sslIssueCert": "Issue certificate", - "sslExpired": "Expired", - "sslInDays": "in {{days}}d", - "sslNeedDomain": "Enter at least one domain", - "sslIssued": "Certificate issued", - "sslDomainsPlaceholder": "example.com, www.example.com", - "sslHttpStandalone": "HTTP (standalone)", - "sslHttpWebroot": "HTTP (webroot)", + "deleteUser": "Excluir usuário", + "noHealthChecks": "Nenhuma verificação de integridade configurada ainda.", + "follow": "Seguir", + "noLogData": "Nenhuma saída de log.", + "tree": "Árvore", + "enableDisable": "Ativar/desativar na inicialização", + "grantSudo": "Conceder sudo", + "revokeSudo": "Revogar sudo", + "sslIssueCert": "Emitir certificado", + "sslExpired": "Expirado", + "sslInDays": "em {{days}}d", + "sslNeedDomain": "Insira pelo menos um domínio.", + "sslIssued": "Certificado emitido", + "sslDomainsPlaceholder": "exemplo.com, www.exemplo.com", + "sslHttpStandalone": "HTTP (autônomo)", + "sslHttpWebroot": "HTTP (raiz da web)", "sslDns": "DNS", - "sslDnsProvider": "DNS provider (e.g. cloudflare)", - "sslIssueHint": "DNS provider credentials must already be configured on the host.", - "sslRevoke": "Revoke certificate", - "sslRevoked": "Certificate revoked", - "sslRevokeConfirm": "Revoke and remove the certificate \"{{name}}\"? This cannot be undone.", - "healthRun": "Run", - "healthName": "Name", - "healthTarget": "Host / address", - "healthAddCheck": "Add check", - "healthSaved": "Health checks saved", - "healthMissingFields": "Each check needs a name and target", - "logFile": "File", - "logUnit": "Unit", - "logCustomPath": "Custom path under /var/log (optional)", - "logGrep": "Filter lines...", - "firewallPersist": "Persist rules", - "firewallPersisted": "Firewall rules persisted", + "sslDnsProvider": "provedor de DNS (ex: Cloudflare)", + "sslIssueHint": "As credenciais do provedor de DNS já devem estar configuradas no host.", + "sslRevoke": "Revogar certificado", + "sslRevoked": "Certificado revogado", + "sslRevokeConfirm": "Revogar e remover o certificado \"{{name}}\"? Isso não pode ser desfeito.", + "healthRun": "Correr", + "healthName": "Nome", + "healthTarget": "Endereço do host", + "healthAddCheck": "Adicionar verificação", + "healthSaved": "Exames de saúde salvos", + "healthMissingFields": "Cada verificação precisa de um nome e um alvo.", + "logFile": "Arquivo", + "logUnit": "Unidade", + "logCustomPath": "Caminho personalizado em /var/log (opcional)", + "logGrep": "Linhas de filtro...", + "firewallPersist": "Regras persistentes", + "firewallPersisted": "As regras do firewall persistiram.", "wireguard": "WireGuard", - "wgNotInstalled": "WireGuard is not installed on this host", - "wgNoInterfaces": "No WireGuard interfaces configured", - "wgInterfaceUp": "Bring up", - "wgInterfaceDown": "Bring down", - "wgBringingUp": "Bringing {{name}} up...", - "wgBringingDown": "Bringing {{name}} down...", - "wgInterfaceUpDone": "{{name}} is up", - "wgInterfaceDownDone": "{{name}} is down", + "wgNotInstalled": "O WireGuard não está instalado neste host.", + "wgNoInterfaces": "Nenhuma interface WireGuard configurada", + "wgInterfaceUp": "Levantar a questão", + "wgInterfaceDown": "Derrubem", + "wgBringingUp": "Trazendo {{name}} para cima...", + "wgBringingDown": "Derrubando {{name}}...", + "wgInterfaceUpDone": "{{name}} está ativo", + "wgInterfaceDownDone": "{{name}} está inativo", "wgListenPort": "Porta", - "wgPublicKey": "Public key", - "wgEndpoint": "Endpoint", - "wgAllowedIPs": "Allowed IPs", - "wgLastHandshake": "Last handshake", - "wgHandshakeNever": "Never", - "wgTransfer": "Transfer", - "wgNoPeers": "No peers" + "wgPublicKey": "Chave pública", + "wgEndpoint": "Ponto final", + "wgAllowedIPs": "IPs permitidos", + "wgLastHandshake": "Último aperto de mãos", + "wgHandshakeNever": "Nunca", + "wgTransfer": "Transferir", + "wgNoPeers": "Sem pares" } }, "metricsHistory": { - "title": "Metrics History", + "title": "Histórico de métricas", "historySuffix": "Histórico", - "cpuMemoryDisk": "CPU / Memory / Disk", - "network": "Network", + "cpuMemoryDisk": "CPU / Memória / Disco", + "network": "Rede", "download": "RX", "upload": "TX", - "noData": "No history data available for this time range.", - "custom": "Custom", - "to": "to", - "apply": "Apply", - "viewHistory": "View History" + "noData": "Não há dados históricos disponíveis para este período.", + "custom": "Personalizado", + "to": "para", + "apply": "Aplicar", + "viewHistory": "Ver histórico" }, "hosts": { "tabHostMetrics": "Métricas do Host", "metricsCollectionLabel": "Coleção de Métricas", "enableMetricsLabel": "Habilitar Métricas", - "enableMetricsDesc": "Collect CPU, RAM, disk, and other metrics from this host", - "useGlobalMetrics": "Use Global Interval", - "useGlobalMetricsDesc": "Override with the server-wide metrics interval", - "metricsIntervalS": "Metrics Interval (s)", - "metricsIntervalDesc2": "Seconds between metric snapshots", - "excludedMountsLabel": "Excluded Mounts", - "monitoredMountsLabel": "Custom monitored paths", - "monitoredMountsDesc": "Add paths that are not exposed as separate mounts, including bind-mounted Home Assistant paths such as /config.", - "monitoredMountPathPlaceholder": "Path (/config, /mnt/data)", - "monitoredMountLabelPlaceholder": "Label (optional)", - "addMonitoredMount": "Add path", - "excludedMountsDesc": "Hide specific mount points or filesystem types (e.g. nfs, cifs) from disk usage and alerts for this host.", - "excludedMountsPlaceholder": "Mount path (/mnt/nas) or filesystem type (nfs, cifs)", - "excludedMountsEmpty": "No mounts excluded. All detected filesystems are shown.", + "enableMetricsDesc": "Coletar métricas de CPU, RAM, disco e outras deste host.", + "useGlobalMetrics": "Usar intervalo global", + "useGlobalMetricsDesc": "Substituir pelo intervalo de métricas de todo o servidor", + "metricsIntervalS": "Intervalo de métricas (s)", + "metricsIntervalDesc2": "Segundos entre instantâneos de métricas", + "excludedMountsLabel": "Suportes excluídos", + "monitoredMountsLabel": "Caminhos monitorados personalizados", + "monitoredMountsDesc": "Adicione caminhos que não estejam expostos como montagens separadas, incluindo caminhos do Home Assistant montados via bind, como /config.", + "monitoredMountPathPlaceholder": "Caminho (/config, /mnt/data)", + "monitoredMountLabelPlaceholder": "Rótulo (opcional)", + "addMonitoredMount": "Adicionar caminho", + "excludedMountsDesc": "Oculte pontos de montagem ou tipos de sistema de arquivos específicos (por exemplo, NFS, CIFS) do uso de disco e dos alertas para este host.", + "excludedMountsPlaceholder": "Caminho de montagem (/mnt/nas) ou tipo de sistema de arquivos (nfs, cifs)", + "excludedMountsEmpty": "Nenhuma montagem excluída. Todos os sistemas de arquivos detectados são exibidos.", "addExcludedMount": "Adicionar", - "visibleWidgets": "Visible Widgets", - "widgetsMovedToHostMetrics": "Cards are now added, arranged, and resized directly in the Host Metrics tab. Open Host Metrics for this host and use Customize to choose which cards are shown.", - "hostNotFound": "Host not found", - "loadingHost": "Loading host..." + "visibleWidgets": "Widgets visíveis", + "widgetsMovedToHostMetrics": "Agora, os cartões podem ser adicionados, organizados e redimensionados diretamente na guia Métricas do Host. Abra as Métricas do Host para este host e use a opção Personalizar para escolher quais cartões serão exibidos.", + "hostNotFound": "Host não encontrado", + "loadingHost": "Carregando host..." }, "onboarding": { - "feature_metrics": "Metrics and alerts", - "feature_metrics_desc": "Track CPU, memory and disk over time, and get alerted when they go bad." + "feature_metrics": "Métricas e alertas", + "feature_metrics_desc": "Monitore o uso de CPU, memória e disco ao longo do tempo e receba alertas quando apresentarem problemas." }, "admin": { - "metricsHistoryRetention": "Metrics History Retention", - "metricsHistoryRetentionRange": "1 to 90 days", - "days": "days" + "metricsHistoryRetention": "Retenção do histórico de métricas", + "metricsHistoryRetentionRange": "1 a 90 dias", + "days": "dias" }, "homepage": { - "noData": "No data available", - "showCurrentValue": "Show Current Value", - "chartMetric": "Metric", - "metricRange": "Range", - "host": "Host", + "noData": "Não há dados disponíveis.", + "showCurrentValue": "Mostrar valor atual", + "chartMetric": "Métrica", + "metricRange": "Faixa", + "host": "Hospedar", "loading": "Carregando...", "metricCpu": "CPU", - "metricDisk": "Disk", - "metricHostname": "Hostname", + "metricDisk": "Disco", + "metricHostname": "Nome do host", "metricKernel": "Kernel", - "metricMemory": "Memory", - "metricNetwork": "Network", - "metricOs": "OS", - "metricProcesses": "Processes", - "metricProcessesRunning": "running", + "metricMemory": "Memória", + "metricNetwork": "Rede", + "metricOs": "SO", + "metricProcesses": "Processos", + "metricProcessesRunning": "correndo", "metricProcessesTotal": "total", - "metricUptime": "Uptime", - "metricsNotAvailable": "Metrics not available", - "noHostSelected": "No host selected", - "selectHost": "Select a host..." + "metricUptime": "Tempo de atividade", + "metricsNotAvailable": "Métricas não disponíveis", + "noHostSelected": "Nenhum host selecionado", + "selectHost": "Selecione um host..." }, "terminalStatus": { - "unavailable": "Live stats unavailable" + "unavailable": "Estatísticas ao vivo indisponíveis" }, "dashboard": { "cpu": "CPU", - "ram": "RAM" + "ram": "BATER" }, "dashboardTab": { - "disk": "Disk" + "disk": "Disco" }, "terminal": { - "connected": "Connected" + "connected": "Conectado" }, "permissions": { "use": { - "title": "Use Host Metrics", - "description": "View host metrics and use the host managers (services, packages, firewall and more) on hosts you can reach." + "title": "Usar métricas de host", + "description": "Visualize as métricas do host e utilize os gerenciadores de host (serviços, pacotes, firewall e muito mais) nos hosts aos quais você tem acesso." } }, "settings": { "admin": { "metricsInterval": { - "label": "Metrics interval (seconds)", - "description": "How often a host being viewed is sampled, unless the host sets its own interval." + "label": "Intervalo de métricas (segundos)", + "description": "Com que frequência um host que está sendo visualizado é amostrado, a menos que o host defina seu próprio intervalo." }, "historyRetentionDays": { - "label": "History retention (days)", - "description": "How long metrics samples are kept for the history charts." + "label": "Retenção do histórico (dias)", + "description": "Por quanto tempo as amostras de métricas são mantidas nos gráficos de histórico?" }, "enabledForNewHosts": { - "label": "Metrics on for new hosts", - "description": "Whether new hosts start with metrics collection turned on." + "label": "Métricas ativadas para novos hosts", + "description": "Se os novos hosts forem iniciados com a coleta de métricas ativada." } }, "user": { "temperatureUnit": { - "label": "Temperature unit", - "description": "How temperatures are shown in Host Metrics.", + "label": "Unidade de temperatura", + "description": "Como as temperaturas são exibidas nas Métricas do Host.", "celsius": "Celsius", "fahrenheit": "Fahrenheit" } }, "host": { "metricsEnabled": { - "label": "Collect metrics" + "label": "Coletar métricas" }, "metricsInterval": { - "label": "Metrics interval (seconds)" + "label": "Intervalo de métricas (segundos)" }, "enabledWidgets": { - "label": "Enabled widgets" + "label": "Widgets ativados" }, "excludedMounts": { - "label": "Excluded mounts" + "label": "Suportes excluídos" }, "monitoredMounts": { - "label": "Monitored paths" + "label": "Caminhos monitorados" } } + }, + "plugin": { + "name": "Host Metrics" } } diff --git a/plugins/host-metrics/locales/translated/pt_PT.json b/plugins/host-metrics/locales/translated/pt_PT.json index 23b13f7b1..582e6fb1e 100644 --- a/plugins/host-metrics/locales/translated/pt_PT.json +++ b/plugins/host-metrics/locales/translated/pt_PT.json @@ -19,21 +19,21 @@ "cpuUsage": "Utilização da CPU", "memoryUsage": "Utilização da memória", "diskUsage": "Utilização do disco", - "selectFilesystem": "Select filesystem", + "selectFilesystem": "Selecione o sistema de ficheiros", "temperature": "Temperatura", "highestTemperature": "Temperatura máxima", - "primaryTemperatureSensor": "Primary sensor", + "primaryTemperatureSensor": "Sensor primário", "gpu": { "title": "GPU", - "noDevice": "No NVIDIA GPU detected. Install the NVIDIA driver (it provides nvidia-smi) to see GPU metrics.", - "driver": "Driver {{version}}", - "utilization": "Utilization", + "noDevice": "Nenhuma GPU NVIDIA detetada. Instale o controlador da NVIDIA (que fornece o nvidia-smi) para visualizar as métricas da GPU.", + "driver": "Motorista {{version}}", + "utilization": "Utilização", "memory": "VRAM", "temperature": "Temp", - "power": "Power", - "fan": "Fan", - "processes": "GPU processes", - "noProcesses": "No processes are using the GPU" + "power": "Poder", + "fan": "Fã", + "processes": "processos da GPU", + "noProcesses": "Nenhum processo está a utilizar a GPU." }, "failedToFetchHostConfig": "Falha ao obter a configuração do servidor", "serverOffline": "Servidor offline", @@ -178,7 +178,7 @@ "wgLastHandshake": "Último handshake", "wgHandshakeNever": "Nunca", "wgTransfer": "Transferência", - "wgNoPeers": "No peers" + "wgNoPeers": "Sem pares" } }, "metricsHistory": { @@ -203,15 +203,15 @@ "useGlobalMetricsDesc": "Substituir pelo intervalo de métricas global do servidor", "metricsIntervalS": "Intervalo de Métricas (s)", "metricsIntervalDesc2": "Segundos entre cada registo de métricas", - "excludedMountsLabel": "Excluded Mounts", - "monitoredMountsLabel": "Custom monitored paths", - "monitoredMountsDesc": "Add paths that are not exposed as separate mounts, including bind-mounted Home Assistant paths such as /config.", - "monitoredMountPathPlaceholder": "Path (/config, /mnt/data)", + "excludedMountsLabel": "Suportes excluídos", + "monitoredMountsLabel": "Caminhos monitorizados personalizados", + "monitoredMountsDesc": "Adicione caminhos que não estejam expostos como montagens separadas, incluindo caminhos do Home Assistant montados através de bind, como /config.", + "monitoredMountPathPlaceholder": "Caminho (/config, /mnt/data)", "monitoredMountLabelPlaceholder": "Etiqueta (opcional)", - "addMonitoredMount": "Add path", - "excludedMountsDesc": "Hide specific mount points or filesystem types (e.g. nfs, cifs) from disk usage and alerts for this host.", - "excludedMountsPlaceholder": "Mount path (/mnt/nas) or filesystem type (nfs, cifs)", - "excludedMountsEmpty": "No mounts excluded. All detected filesystems are shown.", + "addMonitoredMount": "Adicionar caminho", + "excludedMountsDesc": "Ocultar pontos de montagem ou tipos de sistema de ficheiros específicos (por exemplo, NFS, CIFS) da utilização do disco e dos alertas para este host.", + "excludedMountsPlaceholder": "Caminho de montagem (/mnt/nas) ou tipo de sistema de ficheiros (nfs, cifs)", + "excludedMountsEmpty": "Nenhuma montagem excluída. Todos os sistemas de ficheiros detetados são apresentados.", "addExcludedMount": "Adicionar", "visibleWidgets": "Widgets Visíveis", "widgetsMovedToHostMetrics": "Os cartões são agora adicionados, organizados e redimensionados diretamente no separador Métricas do Host. Abra as Métricas do Host para este host e use Personalizar para escolher quais os cartões a mostrar.", @@ -219,8 +219,8 @@ "loadingHost": "A carregar o host..." }, "onboarding": { - "feature_metrics": "Metrics and alerts", - "feature_metrics_desc": "Track CPU, memory and disk over time, and get alerted when they go bad." + "feature_metrics": "Métricas e alertas", + "feature_metrics_desc": "Monitorize a utilização de CPU, memória e disco ao longo do tempo e receba alertas quando apresentam problemas." }, "admin": { "metricsHistoryRetention": "Retenção do histórico de métricas", @@ -250,7 +250,7 @@ "selectHost": "Selecionar um host..." }, "terminalStatus": { - "unavailable": "Live stats unavailable" + "unavailable": "Estatísticas ao vivo indisponíveis" }, "dashboard": { "cpu": "CPU", @@ -264,49 +264,52 @@ }, "permissions": { "use": { - "title": "Use Host Metrics", - "description": "View host metrics and use the host managers (services, packages, firewall and more) on hosts you can reach." + "title": "Usar métricas de host", + "description": "Visualize as métricas do host e utilize os gestores de host (serviços, pacotes, firewall e muito mais) nos hosts aos quais tem acesso." } }, "settings": { "admin": { "metricsInterval": { - "label": "Metrics interval (seconds)", - "description": "How often a host being viewed is sampled, unless the host sets its own interval." + "label": "Intervalo de métricas (segundos)", + "description": "Com que frequência um host que está a ser visualizado é amostrado, a menos que o host defina o seu próprio intervalo." }, "historyRetentionDays": { - "label": "History retention (days)", - "description": "How long metrics samples are kept for the history charts." + "label": "Retenção do histórico (dias)", + "description": "Durante quanto tempo são mantidas as amostras de métricas nos gráficos de histórico?" }, "enabledForNewHosts": { - "label": "Metrics on for new hosts", - "description": "Whether new hosts start with metrics collection turned on." + "label": "Métricas ativadas para novos hosts", + "description": "Se os novos hosts forem iniciados com a recolha de métricas ativada." } }, "user": { "temperatureUnit": { - "label": "Temperature unit", - "description": "How temperatures are shown in Host Metrics.", + "label": "Unidade de temperatura", + "description": "Como as temperaturas são apresentadas nas Métricas do Host.", "celsius": "Celsius", "fahrenheit": "Fahrenheit" } }, "host": { "metricsEnabled": { - "label": "Collect metrics" + "label": "Recolher métricas" }, "metricsInterval": { - "label": "Metrics interval (seconds)" + "label": "Intervalo de métricas (segundos)" }, "enabledWidgets": { - "label": "Enabled widgets" + "label": "Widgets ativados" }, "excludedMounts": { - "label": "Excluded mounts" + "label": "Suportes excluídos" }, "monitoredMounts": { - "label": "Monitored paths" + "label": "Caminhos monitorizados" } } + }, + "plugin": { + "name": "Host Metrics" } } diff --git a/plugins/host-metrics/locales/translated/ro_RO.json b/plugins/host-metrics/locales/translated/ro_RO.json index d740702ae..805892ed5 100644 --- a/plugins/host-metrics/locales/translated/ro_RO.json +++ b/plugins/host-metrics/locales/translated/ro_RO.json @@ -308,5 +308,8 @@ "label": "Căi monitorizate" } } + }, + "plugin": { + "name": "Host Metrics" } } diff --git a/plugins/host-metrics/locales/translated/ru_RU.json b/plugins/host-metrics/locales/translated/ru_RU.json index aa3066298..1a9733bae 100644 --- a/plugins/host-metrics/locales/translated/ru_RU.json +++ b/plugins/host-metrics/locales/translated/ru_RU.json @@ -19,21 +19,21 @@ "cpuUsage": "Использование ЦП", "memoryUsage": "Использование памяти", "diskUsage": "Использование диска", - "selectFilesystem": "Select filesystem", + "selectFilesystem": "Выберите файловую систему", "temperature": "Температура", "highestTemperature": "Максимальная температура", - "primaryTemperatureSensor": "Primary sensor", + "primaryTemperatureSensor": "Основной датчик", "gpu": { "title": "GPU", - "noDevice": "No NVIDIA GPU detected. Install the NVIDIA driver (it provides nvidia-smi) to see GPU metrics.", - "driver": "Driver {{version}}", - "utilization": "Utilization", - "memory": "VRAM", - "temperature": "Temp", - "power": "Power", - "fan": "Fan", - "processes": "GPU processes", - "noProcesses": "No processes are using the GPU" + "noDevice": "Графический процессор NVIDIA не обнаружен. Установите драйвер NVIDIA (он включает nvidia-smi), чтобы увидеть показатели графического процессора.", + "driver": "Водитель {{version}}", + "utilization": "Использование", + "memory": "ВПМ", + "temperature": "Температура", + "power": "Власть", + "fan": "Вентилятор", + "processes": "процессы графического процессора", + "noProcesses": "Никакие процессы не используют графический процессор." }, "failedToFetchHostConfig": "Не удалось получить конфигурацию хоста", "serverOffline": "Сервер недоступен", @@ -178,7 +178,7 @@ "wgLastHandshake": "Последнее рукопожатие", "wgHandshakeNever": "Никогда", "wgTransfer": "Передано", - "wgNoPeers": "No peers" + "wgNoPeers": "Нет равных" } }, "metricsHistory": { @@ -203,15 +203,15 @@ "useGlobalMetricsDesc": "Переопределить глобальным интервалом сбора метрик сервера", "metricsIntervalS": "Интервал сбора метрик (с)", "metricsIntervalDesc2": "Секунд между снимками метрик", - "excludedMountsLabel": "Excluded Mounts", - "monitoredMountsLabel": "Custom monitored paths", - "monitoredMountsDesc": "Add paths that are not exposed as separate mounts, including bind-mounted Home Assistant paths such as /config.", - "monitoredMountPathPlaceholder": "Path (/config, /mnt/data)", + "excludedMountsLabel": "Исключенные крепления", + "monitoredMountsLabel": "Пользовательские контролируемые пути", + "monitoredMountsDesc": "Добавьте пути, которые не отображаются как отдельные точки монтирования, включая пути Home Assistant, смонтированные с помощью bind-mount, например, /config.", + "monitoredMountPathPlaceholder": "Путь (/config, /mnt/data)", "monitoredMountLabelPlaceholder": "Метка (необязательно)", - "addMonitoredMount": "Add path", - "excludedMountsDesc": "Hide specific mount points or filesystem types (e.g. nfs, cifs) from disk usage and alerts for this host.", - "excludedMountsPlaceholder": "Mount path (/mnt/nas) or filesystem type (nfs, cifs)", - "excludedMountsEmpty": "No mounts excluded. All detected filesystems are shown.", + "addMonitoredMount": "Добавить путь", + "excludedMountsDesc": "Скрыть определенные точки монтирования или типы файловых систем (например, nfs, cifs) от информации об использовании диска и оповещений для этого хоста.", + "excludedMountsPlaceholder": "Путь монтирования (/mnt/nas) или тип файловой системы (nfs, cifs)", + "excludedMountsEmpty": "Исключены все точки монтирования. Отображаются все обнаруженные файловые системы.", "addExcludedMount": "Добавить", "visibleWidgets": "Видимые виджеты", "widgetsMovedToHostMetrics": "Карточки теперь добавляются, упорядочиваются и изменяются в размере непосредственно на вкладке «Метрики хоста». Откройте метрики для этого хоста и используйте «Настроить», чтобы выбрать отображаемые карточки.", @@ -219,8 +219,8 @@ "loadingHost": "Загрузка хоста..." }, "onboarding": { - "feature_metrics": "Metrics and alerts", - "feature_metrics_desc": "Track CPU, memory and disk over time, and get alerted when they go bad." + "feature_metrics": "Метрики и оповещения", + "feature_metrics_desc": "Отслеживайте состояние процессора, памяти и диска с течением времени и получайте оповещения при возникновении неполадок." }, "admin": { "metricsHistoryRetention": "Срок хранения метрик", @@ -250,7 +250,7 @@ "selectHost": "Выберите хост..." }, "terminalStatus": { - "unavailable": "Live stats unavailable" + "unavailable": "Статистика в режиме реального времени недоступна" }, "dashboard": { "cpu": "CPU", @@ -264,49 +264,52 @@ }, "permissions": { "use": { - "title": "Use Host Metrics", - "description": "View host metrics and use the host managers (services, packages, firewall and more) on hosts you can reach." + "title": "Используйте метрики хоста", + "description": "Просматривайте метрики хоста и используйте менеджеры хостов (службы, пакеты, брандмауэр и многое другое) на доступных вам хостах." } }, "settings": { "admin": { "metricsInterval": { - "label": "Metrics interval (seconds)", - "description": "How often a host being viewed is sampled, unless the host sets its own interval." + "label": "Интервал метрик (секунды)", + "description": "Как часто производится выборка данных с просматриваемого хоста, если только хост не устанавливает собственный интервал." }, "historyRetentionDays": { - "label": "History retention (days)", - "description": "How long metrics samples are kept for the history charts." + "label": "Срок хранения истории болезни (дни)", + "description": "Как долго хранятся выборки метрик для построения исторических графиков?" }, "enabledForNewHosts": { - "label": "Metrics on for new hosts", - "description": "Whether new hosts start with metrics collection turned on." + "label": "Для новых хостов включена функция отслеживания метрик.", + "description": "Будет ли сбор метрик включен при запуске новых хостов." } }, "user": { "temperatureUnit": { - "label": "Temperature unit", - "description": "How temperatures are shown in Host Metrics.", - "celsius": "Celsius", - "fahrenheit": "Fahrenheit" + "label": "Единица измерения температуры", + "description": "Как отображается температура в метриках хоста.", + "celsius": "Цельсия", + "fahrenheit": "Фаренгейт" } }, "host": { "metricsEnabled": { - "label": "Collect metrics" + "label": "Собирайте метрики" }, "metricsInterval": { - "label": "Metrics interval (seconds)" + "label": "Интервал метрик (секунды)" }, "enabledWidgets": { - "label": "Enabled widgets" + "label": "Включенные виджеты" }, "excludedMounts": { - "label": "Excluded mounts" + "label": "Крепления не включены" }, "monitoredMounts": { - "label": "Monitored paths" + "label": "Контролируемые пути" } } + }, + "plugin": { + "name": "Host Metrics" } } diff --git a/plugins/host-metrics/locales/translated/sr_SP.json b/plugins/host-metrics/locales/translated/sr_SP.json index fc32b9c85..e425863fd 100644 --- a/plugins/host-metrics/locales/translated/sr_SP.json +++ b/plugins/host-metrics/locales/translated/sr_SP.json @@ -1,312 +1,315 @@ { "nav": { - "hostMetrics": "Host Metrics" + "hostMetrics": "Метрике хоста" }, "hostMetrics": { - "cpu": "CPU", - "memory": "Memory", - "disk": "Disk", - "network": "Network", - "uptime": "Uptime", - "processes": "Processes", - "available": "Available", - "free": "Free", - "connecting": "Connecting...", - "connectionFailed": "Failed to connect to server", - "naCpus": "N/A CPU(s)", - "cpuCores_one": "{{count}} Core", - "cpuCores_other": "{{count}} Cores", - "cpuUsage": "CPU Usage", - "memoryUsage": "Memory Usage", - "diskUsage": "Disk Usage", - "selectFilesystem": "Select filesystem", - "temperature": "Temperature", - "highestTemperature": "Highest temperature", - "primaryTemperatureSensor": "Primary sensor", + "cpu": "Процесор", + "memory": "Памћење", + "disk": "Диск", + "network": "Мрежа", + "uptime": "Време непрекидног рада", + "processes": "Процеси", + "available": "Доступно", + "free": "Бесплатно", + "connecting": "Повезивање...", + "connectionFailed": "Повезивање са сервером није успело", + "naCpus": "Н/Д процесор(и)", + "cpuCores_one": "{{count}} Језгро", + "cpuCores_other": "{{count}} Језгра", + "cpuUsage": "Искоришћеност процесора", + "memoryUsage": "Коришћење меморије", + "diskUsage": "Искоришћеност диска", + "selectFilesystem": "Изаберите фајл систем", + "temperature": "Температура", + "highestTemperature": "Највиша температура", + "primaryTemperatureSensor": "Примарни сензор", "gpu": { - "title": "GPU", - "noDevice": "No NVIDIA GPU detected. Install the NVIDIA driver (it provides nvidia-smi) to see GPU metrics.", - "driver": "Driver {{version}}", - "utilization": "Utilization", - "memory": "VRAM", - "temperature": "Temp", - "power": "Power", - "fan": "Fan", - "processes": "GPU processes", - "noProcesses": "No processes are using the GPU" + "title": "ГПУ", + "noDevice": "Није детектована NVIDIA GPU. Инсталирајте NVIDIA драјвер (пружа nvidia-smi) да бисте видели метрике GPU-а.", + "driver": "Возач {{version}}", + "utilization": "Коришћење", + "memory": "Видео меморија", + "temperature": "Температура", + "power": "Моћ", + "fan": "Вентилатор", + "processes": "Процеси графичког процесора (GPU)", + "noProcesses": "Ниједан процес не користи ГПУ" }, - "failedToFetchHostConfig": "Failed to fetch host configuration", - "serverOffline": "Server Offline", - "cannotFetchMetrics": "Cannot fetch metrics from offline server", - "totpFailed": "TOTP verification failed", - "noneAuthNotSupported": "Host Metrics does not support 'none' authentication type.", - "noHostSelected": "No host selected", - "load": "Load", - "systemInfo": "System Information", - "hostname": "Hostname", - "operatingSystem": "Operating System", - "kernel": "Kernel", - "seconds": "seconds", - "networkInterfaces": "Network Interfaces", - "noInterfacesFound": "No network interfaces found", - "noProcessesFound": "No processes found", - "processesTotal": "total", - "processesRunning": "running", - "loginStats": "SSH Login Statistics", - "noRecentLoginData": "No recent login data", + "failedToFetchHostConfig": "Није успело преузимање конфигурације хоста", + "serverOffline": "Сервер ван мреже", + "cannotFetchMetrics": "Није могуће преузети метрике са офлајн сервера", + "totpFailed": "Верификација TOTP-а није успела", + "noneAuthNotSupported": "Метрике хоста не подржавају тип аутентификације „ниједан“.", + "noHostSelected": "Није изабран домаћин", + "load": "Учитај", + "systemInfo": "Системске информације", + "hostname": "Име хоста", + "operatingSystem": "Оперативни систем", + "kernel": "Језгро", + "seconds": "секунде", + "networkInterfaces": "Мрежни интерфејси", + "noInterfacesFound": "Није пронађен ниједан мрежни интерфејс", + "noProcessesFound": "Није пронађен ниједан процес", + "processesTotal": "укупно", + "processesRunning": "трчање", + "loginStats": "Статистика SSH пријава", + "noRecentLoginData": "Нема скорашњих података за пријављивање", "ports": { - "title": "Listening Ports", - "protocol": "Protocol", - "port": "Port", - "address": "Address", - "process": "Process", - "search": "Search ports...", - "allProtocols": "All", - "noData": "No listening ports data" + "title": "Портови за слушање", + "protocol": "Протокол", + "port": "Лука", + "address": "Адреса", + "process": "Процес", + "search": "Претражи портове...", + "allProtocols": "Сви", + "noData": "Нема података о портовима за слушање" }, "firewall": { - "title": "Firewall", - "inactive": "Inactive", - "policy": "Policy", - "rules": "rules", - "noRules": "No rules in this chain", - "noData": "No firewall data available", - "action": "Action", - "protocol": "Proto", - "port": "Port", - "source": "Source", - "anywhere": "Anywhere", - "chains": "chains" + "title": "Заштитни зид (фајервол)", + "inactive": "Неактивно", + "policy": "Политика", + "rules": "правила", + "noRules": "Нема правила у овом ланцу", + "noData": "Нема доступних података о заштитном зиду", + "action": "Акција", + "protocol": "Прото", + "port": "Лука", + "source": "Извор", + "anywhere": "Било где", + "chains": "ланци" }, - "loadAvg": "Load Avg", - "swap": "Swap", - "architecture": "Architecture", - "refresh": "Refresh", - "retry": "Retry", - "customize": "Customize layout", - "reset": "Reset", - "tabLive": "Live", - "editModeInstructions": "Drag cards to rearrange, drag the bottom edge to resize, and use the width button to change a card's span. Add or remove cards below.", + "loadAvg": "Учитај просек", + "swap": "Замена", + "architecture": "Архитектура", + "refresh": "Освежи", + "retry": "Покушај поново", + "customize": "Прилагоди распоред", + "reset": "Ресетуј", + "tabLive": "Уживо", + "editModeInstructions": "Превуците картице да бисте преуредили, превуците доњу ивицу да бисте променили величину и користите дугме за ширину да бисте променили распон картице. Додајте или уклоните картице испод.", "managers": { - "services": "Services", - "processInspector": "Process Inspector", - "logViewer": "Log Viewer", - "cron": "Cron Jobs", - "packages": "Packages", - "ssl": "SSL Certificates", - "firewall": "Firewall", - "users": "Users & Permissions", - "healthCheck": "Health Checks", - "diskBreakdown": "Disk Breakdown", - "systemdTimers": "Timers", - "topMemory": "Top by Memory", - "noData": "No data", - "sudoHint": "Set a sudo password for this host in the host editor to enable privileged actions.", - "filter": "Filter...", - "start": "Start", - "stop": "Stop", - "restart": "Restart", - "actionDone": "{{name}} updated", - "actionFailed": "Action failed", - "signalSent": "Signal sent to PID {{pid}}", - "killHint": "Click: terminate (SIGTERM). Right-click: force kill (SIGKILL).", - "working": "Working...", - "update": "Update", - "upgradeAll": "Upgrade all", - "allUpToDate": "Everything is up to date", - "save": "Save", - "command": "Command", - "enabled": "Enabled", - "cronSaved": "Crontab updated", - "clients": "Clients", - "dryRun": "Dry run", - "renew": "Renew", - "noAcmeClient": "No ACME client (certbot or acme.sh) found on this host.", - "addInputRule": "Add INPUT rule", - "firewallWarning": "Changes are runtime-only until persisted. Be careful not to lock yourself out.", - "ruleApplied": "Rule applied", - "invalidPort": "Enter a valid port (1-65535)", - "newUsername": "New username", - "addUser": "Add", - "deleteUser": "Delete user", - "noHealthChecks": "No health checks configured yet.", - "follow": "Follow", - "noLogData": "No log output.", - "tree": "Tree", - "enableDisable": "Enable / disable at boot", - "grantSudo": "Grant sudo", - "revokeSudo": "Revoke sudo", - "sslIssueCert": "Issue certificate", - "sslExpired": "Expired", - "sslInDays": "in {{days}}d", - "sslNeedDomain": "Enter at least one domain", - "sslIssued": "Certificate issued", + "services": "Услуге", + "processInspector": "Инспектор процеса", + "logViewer": "Прегледач дневника", + "cron": "Cron послови", + "packages": "Пакети", + "ssl": "SSL сертификати", + "firewall": "Заштитни зид (фајервол)", + "users": "Корисници и дозволе", + "healthCheck": "Здравствени прегледи", + "diskBreakdown": "Распад диска", + "systemdTimers": "Тајмери", + "topMemory": "Најбоље по сећању", + "noData": "Нема података", + "sudoHint": "Поставите sudo лозинку за овај хост у уређивачу хостова да бисте омогућили привилеговане акције.", + "filter": "Филтер...", + "start": "Почетак", + "stop": "Заустави", + "restart": "Поново покрени", + "actionDone": "{{name}} ажурирано", + "actionFailed": "Акција није успела", + "signalSent": "Сигнал послат на ПИД {{pid}}", + "killHint": "Кликните: прекините (SIGTERM). Кликните десним тастером миша: присилно зауставите (SIGKILL).", + "working": "Ради се...", + "update": "Ажурирање", + "upgradeAll": "Надогради све", + "allUpToDate": "Све је ажурирано", + "save": "Сачувај", + "command": "Команда", + "enabled": "Омогућено", + "cronSaved": "Кронтаб је ажуриран", + "clients": "Клијенти", + "dryRun": "Пробни рад", + "renew": "Обнови", + "noAcmeClient": "Није пронађен ACME клијент (certbot или acme.sh) на овом хосту.", + "addInputRule": "Додај INPUT правило", + "firewallWarning": "Промене су само за време извршавања док се не сачувају. Пазите да се не закључате.", + "ruleApplied": "Правило је примењено", + "invalidPort": "Унесите важећи порт (1-65535)", + "newUsername": "Ново корисничко име", + "addUser": "Додај", + "deleteUser": "Обриши корисника", + "noHealthChecks": "Још увек нису конфигурисане провере исправности.", + "follow": "Прати", + "noLogData": "Нема излаза лог-а.", + "tree": "Дрво", + "enableDisable": "Омогући/онемогући при покретању", + "grantSudo": "Додели судо", + "revokeSudo": "Поништи sudo", + "sslIssueCert": "Издај сертификат", + "sslExpired": "Истекло", + "sslInDays": "у {{days}}д", + "sslNeedDomain": "Унесите барем један домен", + "sslIssued": "Издат сертификат", "sslDomainsPlaceholder": "example.com, www.example.com", - "sslHttpStandalone": "HTTP (standalone)", - "sslHttpWebroot": "HTTP (webroot)", - "sslDns": "DNS", - "sslDnsProvider": "DNS provider (e.g. cloudflare)", - "sslIssueHint": "DNS provider credentials must already be configured on the host.", - "sslRevoke": "Revoke certificate", - "sslRevoked": "Certificate revoked", - "sslRevokeConfirm": "Revoke and remove the certificate \"{{name}}\"? This cannot be undone.", - "healthRun": "Run", - "healthName": "Name", - "healthTarget": "Host / address", - "healthAddCheck": "Add check", - "healthSaved": "Health checks saved", - "healthMissingFields": "Each check needs a name and target", - "logFile": "File", - "logUnit": "Unit", - "logCustomPath": "Custom path under /var/log (optional)", - "logGrep": "Filter lines...", - "firewallPersist": "Persist rules", - "firewallPersisted": "Firewall rules persisted", - "wireguard": "WireGuard", - "wgNotInstalled": "WireGuard is not installed on this host", - "wgNoInterfaces": "No WireGuard interfaces configured", - "wgInterfaceUp": "Bring up", - "wgInterfaceDown": "Bring down", - "wgBringingUp": "Bringing {{name}} up...", - "wgBringingDown": "Bringing {{name}} down...", - "wgInterfaceUpDone": "{{name}} is up", - "wgInterfaceDownDone": "{{name}} is down", - "wgListenPort": "Port", - "wgPublicKey": "Public key", - "wgEndpoint": "Endpoint", - "wgAllowedIPs": "Allowed IPs", - "wgLastHandshake": "Last handshake", - "wgHandshakeNever": "Never", - "wgTransfer": "Transfer", - "wgNoPeers": "No peers" + "sslHttpStandalone": "HTTP (самостални)", + "sslHttpWebroot": "HTTP (вебрут)", + "sslDns": "ДНС", + "sslDnsProvider": "DNS провајдер (нпр. cloudflare)", + "sslIssueHint": "Акредитиви DNS провајдера морају већ бити конфигурисани на хосту.", + "sslRevoke": "Поништи сертификат", + "sslRevoked": "Сертификат опозван", + "sslRevokeConfirm": "Поништити и уклонити сертификат „{{name}}“? Ово се не може поништити.", + "healthRun": "Трчи", + "healthName": "Име", + "healthTarget": "Домаћин / адреса", + "healthAddCheck": "Додај чек", + "healthSaved": "Провере здравственог стања сачуване", + "healthMissingFields": "Свака провера захтева име и циљ", + "logFile": "Датотека", + "logUnit": "Јединица", + "logCustomPath": "Прилагођена путања у /var/log (опционо)", + "logGrep": "Филтерске линије...", + "firewallPersist": "Правила трајања", + "firewallPersisted": "Правила заштитног зида су опстала", + "wireguard": "ВајерГард", + "wgNotInstalled": "WireGuard није инсталиран на овом хосту", + "wgNoInterfaces": "Није конфигурисан ниједан WireGuard интерфејс", + "wgInterfaceUp": "Поведи", + "wgInterfaceDown": "Срушити", + "wgBringingUp": "Доводи се {{name}} горе...", + "wgBringingDown": "Спуштање {{name}}...", + "wgInterfaceUpDone": "{{name}} је горе", + "wgInterfaceDownDone": "{{name}} је неактиван", + "wgListenPort": "Лука", + "wgPublicKey": "Јавни кључ", + "wgEndpoint": "Крајња тачка", + "wgAllowedIPs": "Дозвољене IP адресе", + "wgLastHandshake": "Последње руковање", + "wgHandshakeNever": "Никад", + "wgTransfer": "Пренос", + "wgNoPeers": "Нема вршњака" } }, "metricsHistory": { - "title": "Metrics History", - "historySuffix": "History", - "cpuMemoryDisk": "CPU / Memory / Disk", - "network": "Network", - "download": "RX", - "upload": "TX", - "noData": "No history data available for this time range.", - "custom": "Custom", - "to": "to", - "apply": "Apply", - "viewHistory": "View History" + "title": "Историја метрика", + "historySuffix": "Историја", + "cpuMemoryDisk": "Процесор / Меморија / Диск", + "network": "Мрежа", + "download": "Рецепт", + "upload": "Тексас", + "noData": "Нема доступних историјских података за овај временски опсег.", + "custom": "Прилагођено", + "to": "до", + "apply": "Примени", + "viewHistory": "Прикажи историју" }, "hosts": { - "tabHostMetrics": "Host Metrics", - "metricsCollectionLabel": "Metrics Collection", - "enableMetricsLabel": "Enable Metrics", - "enableMetricsDesc": "Collect CPU, RAM, disk, and other metrics from this host", - "useGlobalMetrics": "Use Global Interval", - "useGlobalMetricsDesc": "Override with the server-wide metrics interval", - "metricsIntervalS": "Metrics Interval (s)", - "metricsIntervalDesc2": "Seconds between metric snapshots", - "excludedMountsLabel": "Excluded Mounts", - "monitoredMountsLabel": "Custom monitored paths", - "monitoredMountsDesc": "Add paths that are not exposed as separate mounts, including bind-mounted Home Assistant paths such as /config.", - "monitoredMountPathPlaceholder": "Path (/config, /mnt/data)", - "monitoredMountLabelPlaceholder": "Label (optional)", - "addMonitoredMount": "Add path", - "excludedMountsDesc": "Hide specific mount points or filesystem types (e.g. nfs, cifs) from disk usage and alerts for this host.", - "excludedMountsPlaceholder": "Mount path (/mnt/nas) or filesystem type (nfs, cifs)", - "excludedMountsEmpty": "No mounts excluded. All detected filesystems are shown.", - "addExcludedMount": "Add", - "visibleWidgets": "Visible Widgets", - "widgetsMovedToHostMetrics": "Cards are now added, arranged, and resized directly in the Host Metrics tab. Open Host Metrics for this host and use Customize to choose which cards are shown.", - "hostNotFound": "Host not found", - "loadingHost": "Loading host..." + "tabHostMetrics": "Метрике хоста", + "metricsCollectionLabel": "Колекција метрика", + "enableMetricsLabel": "Омогући метрике", + "enableMetricsDesc": "Прикупљајте метрику процесора, RAM-а, диска и друге показатеље са овог хоста", + "useGlobalMetrics": "Користи глобални интервал", + "useGlobalMetricsDesc": "Замени интервалом метрика на нивоу сервера", + "metricsIntervalS": "Интервал(и) метрика", + "metricsIntervalDesc2": "Секунде између снимака метрика", + "excludedMountsLabel": "Искључени носачи", + "monitoredMountsLabel": "Прилагођене праћене путање", + "monitoredMountsDesc": "Додајте путање које нису изложене као засебне монтиране верзије, укључујући путање за Home Assistant монтиране помоћу повезивања, као што је /config.", + "monitoredMountPathPlaceholder": "Путања (/config, /mnt/data)", + "monitoredMountLabelPlaceholder": "Ознака (опционо)", + "addMonitoredMount": "Додај путању", + "excludedMountsDesc": "Сакријте одређене тачке монтирања или типове фајл система (нпр. nfs, cifs) од коришћења диска и упозорења за овај хост.", + "excludedMountsPlaceholder": "Путања монтирања (/mnt/nas) или тип фајл система (nfs, cifs)", + "excludedMountsEmpty": "Није искључено ниједно монтирање. Приказани су сви откривени фајл системи.", + "addExcludedMount": "Додај", + "visibleWidgets": "Видљиви виџети", + "widgetsMovedToHostMetrics": "Картице се сада додају, распоређују и мењају им се величина директно на картици „Host Metrics“. Отворите „Host Metrics“ за овог хоста и користите „Customize“ да бисте изабрали које ће картице бити приказане.", + "hostNotFound": "Хост није пронађен", + "loadingHost": "Учитавање хоста..." }, "onboarding": { - "feature_metrics": "Metrics and alerts", - "feature_metrics_desc": "Track CPU, memory and disk over time, and get alerted when they go bad." + "feature_metrics": "Метрике и упозорења", + "feature_metrics_desc": "Пратите процесор, меморију и диск током времена и добијајте обавештења када дође до квара." }, "admin": { - "metricsHistoryRetention": "Metrics History Retention", - "metricsHistoryRetentionRange": "1 to 90 days", - "days": "days" + "metricsHistoryRetention": "Чување историје метрика", + "metricsHistoryRetentionRange": "Од 1 до 90 дана", + "days": "дана" }, "homepage": { - "noData": "No data available", - "showCurrentValue": "Show Current Value", - "chartMetric": "Metric", - "metricRange": "Range", - "host": "Host", - "loading": "Loading...", - "metricCpu": "CPU", - "metricDisk": "Disk", - "metricHostname": "Hostname", - "metricKernel": "Kernel", - "metricMemory": "Memory", - "metricNetwork": "Network", - "metricOs": "OS", - "metricProcesses": "Processes", - "metricProcessesRunning": "running", - "metricProcessesTotal": "total", - "metricUptime": "Uptime", - "metricsNotAvailable": "Metrics not available", - "noHostSelected": "No host selected", - "selectHost": "Select a host..." + "noData": "Нема доступних података", + "showCurrentValue": "Прикажи тренутну вредност", + "chartMetric": "Метрика", + "metricRange": "Домет", + "host": "Домаћин", + "loading": "Учитавање...", + "metricCpu": "Процесор", + "metricDisk": "Диск", + "metricHostname": "Име хоста", + "metricKernel": "Језгро", + "metricMemory": "Памћење", + "metricNetwork": "Мрежа", + "metricOs": "ОС", + "metricProcesses": "Процеси", + "metricProcessesRunning": "трчање", + "metricProcessesTotal": "укупно", + "metricUptime": "Време непрекидног рада", + "metricsNotAvailable": "Метрике нису доступне", + "noHostSelected": "Није изабран домаћин", + "selectHost": "Изаберите хост..." }, "terminalStatus": { - "unavailable": "Live stats unavailable" + "unavailable": "Статистика уживо није доступна" }, "dashboard": { - "cpu": "CPU", - "ram": "RAM" + "cpu": "Процесор", + "ram": "РАМ меморија" }, "dashboardTab": { - "disk": "Disk" + "disk": "Диск" }, "terminal": { - "connected": "Connected" + "connected": "Повезано" }, "permissions": { "use": { - "title": "Use Host Metrics", - "description": "View host metrics and use the host managers (services, packages, firewall and more) on hosts you can reach." + "title": "Користите метрике хоста", + "description": "Погледајте метрике хоста и користите менаџере хоста (сервисе, пакете, заштитни зид и још много тога) на хостовима којима можете приступити." } }, "settings": { "admin": { "metricsInterval": { - "label": "Metrics interval (seconds)", - "description": "How often a host being viewed is sampled, unless the host sets its own interval." + "label": "Интервал метрика (секунде)", + "description": "Колико често се узоркује прегледани хост, осим ако хост не подеси сопствени интервал." }, "historyRetentionDays": { - "label": "History retention (days)", - "description": "How long metrics samples are kept for the history charts." + "label": "Чување историје (дани)", + "description": "Колико дуго се чувају узорци метрика за графиконе историје." }, "enabledForNewHosts": { - "label": "Metrics on for new hosts", - "description": "Whether new hosts start with metrics collection turned on." + "label": "Метрике су укључене за нове хостове", + "description": "Да ли нови хостови почињу са укљученим прикупљањем метрика." } }, "user": { "temperatureUnit": { - "label": "Temperature unit", - "description": "How temperatures are shown in Host Metrics.", - "celsius": "Celsius", - "fahrenheit": "Fahrenheit" + "label": "Јединица температуре", + "description": "Како се температуре приказују у метрикама хоста.", + "celsius": "Целзијус", + "fahrenheit": "Фаренхајт" } }, "host": { "metricsEnabled": { - "label": "Collect metrics" + "label": "Прикупљајте метрике" }, "metricsInterval": { - "label": "Metrics interval (seconds)" + "label": "Интервал метрика (секунде)" }, "enabledWidgets": { - "label": "Enabled widgets" + "label": "Омогућени виџети" }, "excludedMounts": { - "label": "Excluded mounts" + "label": "Искључени носачи" }, "monitoredMounts": { - "label": "Monitored paths" + "label": "Праћене путање" } } + }, + "plugin": { + "name": "Host Metrics" } } diff --git a/plugins/host-metrics/locales/translated/sv_SE.json b/plugins/host-metrics/locales/translated/sv_SE.json index fc32b9c85..0adb531b5 100644 --- a/plugins/host-metrics/locales/translated/sv_SE.json +++ b/plugins/host-metrics/locales/translated/sv_SE.json @@ -1,312 +1,315 @@ { "nav": { - "hostMetrics": "Host Metrics" + "hostMetrics": "Värdstatistik" }, "hostMetrics": { "cpu": "CPU", - "memory": "Memory", + "memory": "Minne", "disk": "Disk", - "network": "Network", - "uptime": "Uptime", - "processes": "Processes", - "available": "Available", - "free": "Free", - "connecting": "Connecting...", - "connectionFailed": "Failed to connect to server", - "naCpus": "N/A CPU(s)", - "cpuCores_one": "{{count}} Core", - "cpuCores_other": "{{count}} Cores", - "cpuUsage": "CPU Usage", - "memoryUsage": "Memory Usage", - "diskUsage": "Disk Usage", - "selectFilesystem": "Select filesystem", - "temperature": "Temperature", - "highestTemperature": "Highest temperature", - "primaryTemperatureSensor": "Primary sensor", + "network": "Nätverk", + "uptime": "Drifttid", + "processes": "Processer", + "available": "Tillgänglig", + "free": "Gratis", + "connecting": "Ansluter...", + "connectionFailed": "Misslyckades med att ansluta till servern", + "naCpus": "Ej tillämpligt CPU(er)", + "cpuCores_one": "{{count}} Kärna", + "cpuCores_other": "{{count}} Kärnor", + "cpuUsage": "CPU-användning", + "memoryUsage": "Minnesanvändning", + "diskUsage": "Diskanvändning", + "selectFilesystem": "Välj filsystem", + "temperature": "Temperatur", + "highestTemperature": "Högsta temperatur", + "primaryTemperatureSensor": "Primär sensor", "gpu": { "title": "GPU", - "noDevice": "No NVIDIA GPU detected. Install the NVIDIA driver (it provides nvidia-smi) to see GPU metrics.", - "driver": "Driver {{version}}", - "utilization": "Utilization", + "noDevice": "Ingen NVIDIA GPU hittades. Installera NVIDIA-drivrutinen (den tillhandahåller nvidia-smi) för att se GPU-statistik.", + "driver": "Förare {{version}}", + "utilization": "Utnyttjande", "memory": "VRAM", "temperature": "Temp", - "power": "Power", - "fan": "Fan", - "processes": "GPU processes", - "noProcesses": "No processes are using the GPU" + "power": "Driva", + "fan": "Fläkt", + "processes": "GPU-processer", + "noProcesses": "Inga processer använder GPU:n" }, - "failedToFetchHostConfig": "Failed to fetch host configuration", - "serverOffline": "Server Offline", - "cannotFetchMetrics": "Cannot fetch metrics from offline server", - "totpFailed": "TOTP verification failed", - "noneAuthNotSupported": "Host Metrics does not support 'none' authentication type.", - "noHostSelected": "No host selected", - "load": "Load", - "systemInfo": "System Information", - "hostname": "Hostname", - "operatingSystem": "Operating System", - "kernel": "Kernel", - "seconds": "seconds", - "networkInterfaces": "Network Interfaces", - "noInterfacesFound": "No network interfaces found", - "noProcessesFound": "No processes found", + "failedToFetchHostConfig": "Misslyckades med att hämta värdkonfigurationen", + "serverOffline": "Servern är offline", + "cannotFetchMetrics": "Kan inte hämta mätvärden från offlineservern", + "totpFailed": "TOTP-verifiering misslyckades", + "noneAuthNotSupported": "Host Metrics stöder inte autentiseringstypen 'ingen'.", + "noHostSelected": "Ingen värd vald", + "load": "Ladda", + "systemInfo": "Systeminformation", + "hostname": "Värdnamn", + "operatingSystem": "Operativsystem", + "kernel": "Kärna", + "seconds": "sekunder", + "networkInterfaces": "Nätverksgränssnitt", + "noInterfacesFound": "Inga nätverksgränssnitt hittades", + "noProcessesFound": "Inga processer hittades", "processesTotal": "total", - "processesRunning": "running", - "loginStats": "SSH Login Statistics", - "noRecentLoginData": "No recent login data", + "processesRunning": "spring", + "loginStats": "SSH-inloggningsstatistik", + "noRecentLoginData": "Inga aktuella inloggningsuppgifter", "ports": { - "title": "Listening Ports", - "protocol": "Protocol", - "port": "Port", - "address": "Address", - "process": "Process", - "search": "Search ports...", - "allProtocols": "All", - "noData": "No listening ports data" + "title": "Lyssningsportar", + "protocol": "Protokoll", + "port": "Hamn", + "address": "Adress", + "process": "Behandla", + "search": "Sök portar...", + "allProtocols": "Alla", + "noData": "Inga lyssningsportdata" }, "firewall": { - "title": "Firewall", - "inactive": "Inactive", - "policy": "Policy", - "rules": "rules", - "noRules": "No rules in this chain", - "noData": "No firewall data available", - "action": "Action", + "title": "Brandvägg", + "inactive": "Inaktiv", + "policy": "Politik", + "rules": "regler", + "noRules": "Inga regler i den här kedjan", + "noData": "Ingen brandväggsdata tillgänglig", + "action": "Handling", "protocol": "Proto", - "port": "Port", - "source": "Source", - "anywhere": "Anywhere", - "chains": "chains" + "port": "Hamn", + "source": "Källa", + "anywhere": "Någonstans", + "chains": "kedjor" }, - "loadAvg": "Load Avg", - "swap": "Swap", - "architecture": "Architecture", - "refresh": "Refresh", - "retry": "Retry", - "customize": "Customize layout", - "reset": "Reset", - "tabLive": "Live", - "editModeInstructions": "Drag cards to rearrange, drag the bottom edge to resize, and use the width button to change a card's span. Add or remove cards below.", + "loadAvg": "Ladda genomsnitt", + "swap": "Byta", + "architecture": "Arkitektur", + "refresh": "Uppdatera", + "retry": "Försöka igen", + "customize": "Anpassa layouten", + "reset": "Återställa", + "tabLive": "Bo", + "editModeInstructions": "Dra kort för att ordna om, dra i den nedre kanten för att ändra storlek och använd breddknappen för att ändra ett korts längd. Lägg till eller ta bort kort nedan.", "managers": { - "services": "Services", - "processInspector": "Process Inspector", - "logViewer": "Log Viewer", - "cron": "Cron Jobs", - "packages": "Packages", - "ssl": "SSL Certificates", - "firewall": "Firewall", - "users": "Users & Permissions", - "healthCheck": "Health Checks", - "diskBreakdown": "Disk Breakdown", + "services": "Tjänster", + "processInspector": "Processinspektör", + "logViewer": "Loggvisare", + "cron": "Cron-jobb", + "packages": "Paket", + "ssl": "SSL-certifikat", + "firewall": "Brandvägg", + "users": "Användare och behörigheter", + "healthCheck": "Hälsokontroller", + "diskBreakdown": "Diskuppdelning", "systemdTimers": "Timers", - "topMemory": "Top by Memory", - "noData": "No data", - "sudoHint": "Set a sudo password for this host in the host editor to enable privileged actions.", - "filter": "Filter...", + "topMemory": "Topp av Memory", + "noData": "Inga uppgifter", + "sudoHint": "Ange ett sudo-lösenord för den här värden i värdredigeraren för att aktivera privilegierade åtgärder.", + "filter": "Filtrera...", "start": "Start", - "stop": "Stop", - "restart": "Restart", - "actionDone": "{{name}} updated", - "actionFailed": "Action failed", - "signalSent": "Signal sent to PID {{pid}}", - "killHint": "Click: terminate (SIGTERM). Right-click: force kill (SIGKILL).", - "working": "Working...", - "update": "Update", - "upgradeAll": "Upgrade all", - "allUpToDate": "Everything is up to date", - "save": "Save", - "command": "Command", - "enabled": "Enabled", - "cronSaved": "Crontab updated", - "clients": "Clients", - "dryRun": "Dry run", - "renew": "Renew", - "noAcmeClient": "No ACME client (certbot or acme.sh) found on this host.", - "addInputRule": "Add INPUT rule", - "firewallWarning": "Changes are runtime-only until persisted. Be careful not to lock yourself out.", - "ruleApplied": "Rule applied", - "invalidPort": "Enter a valid port (1-65535)", - "newUsername": "New username", - "addUser": "Add", - "deleteUser": "Delete user", - "noHealthChecks": "No health checks configured yet.", - "follow": "Follow", - "noLogData": "No log output.", - "tree": "Tree", - "enableDisable": "Enable / disable at boot", - "grantSudo": "Grant sudo", - "revokeSudo": "Revoke sudo", - "sslIssueCert": "Issue certificate", - "sslExpired": "Expired", - "sslInDays": "in {{days}}d", - "sslNeedDomain": "Enter at least one domain", - "sslIssued": "Certificate issued", - "sslDomainsPlaceholder": "example.com, www.example.com", - "sslHttpStandalone": "HTTP (standalone)", - "sslHttpWebroot": "HTTP (webroot)", + "stop": "Stopp", + "restart": "Starta om", + "actionDone": "{{name}} uppdaterad", + "actionFailed": "Åtgärden misslyckades", + "signalSent": "Signal skickad till PID {{pid}}", + "killHint": "Klicka: avsluta (SIGTERM). Högerklicka: tvinga bort (SIGKILL).", + "working": "Arbetssätt...", + "update": "Uppdatera", + "upgradeAll": "Uppgradera alla", + "allUpToDate": "Allt är uppdaterat", + "save": "Spara", + "command": "Kommando", + "enabled": "Aktiverad", + "cronSaved": "Crontab uppdaterad", + "clients": "klienter", + "dryRun": "Torrkörning", + "renew": "Förnya", + "noAcmeClient": "Ingen ACME-klient (certbot eller acme.sh) hittades på den här värden.", + "addInputRule": "Lägg till INPUT-regel", + "firewallWarning": "Ändringarna gäller endast under körning tills de sparas. Var försiktig så att du inte låser dig ute.", + "ruleApplied": "Regel tillämpad", + "invalidPort": "Ange en giltig port (1-65535)", + "newUsername": "Nytt användarnamn", + "addUser": "Tillägga", + "deleteUser": "Ta bort användare", + "noHealthChecks": "Inga hälsokontroller har konfigurerats ännu.", + "follow": "Följa", + "noLogData": "Ingen loggutgång.", + "tree": "Träd", + "enableDisable": "Aktivera/avaktivera vid start", + "grantSudo": "Bevilja sudo", + "revokeSudo": "Återkalla sudo", + "sslIssueCert": "Utfärdande av certifikat", + "sslExpired": "Utgången", + "sslInDays": "i {{days}}d", + "sslNeedDomain": "Ange minst en domän", + "sslIssued": "Certifikat utfärdat", + "sslDomainsPlaceholder": "exempel.com, www.example.com", + "sslHttpStandalone": "HTTP (fristående)", + "sslHttpWebroot": "HTTP (webbrot)", "sslDns": "DNS", - "sslDnsProvider": "DNS provider (e.g. cloudflare)", - "sslIssueHint": "DNS provider credentials must already be configured on the host.", - "sslRevoke": "Revoke certificate", - "sslRevoked": "Certificate revoked", - "sslRevokeConfirm": "Revoke and remove the certificate \"{{name}}\"? This cannot be undone.", - "healthRun": "Run", - "healthName": "Name", - "healthTarget": "Host / address", - "healthAddCheck": "Add check", - "healthSaved": "Health checks saved", - "healthMissingFields": "Each check needs a name and target", - "logFile": "File", - "logUnit": "Unit", - "logCustomPath": "Custom path under /var/log (optional)", - "logGrep": "Filter lines...", - "firewallPersist": "Persist rules", - "firewallPersisted": "Firewall rules persisted", + "sslDnsProvider": "DNS-leverantör (t.ex. Cloudflare)", + "sslIssueHint": "DNS-leverantörens inloggningsuppgifter måste redan vara konfigurerade på värden.", + "sslRevoke": "Återkalla certifikat", + "sslRevoked": "Certifikat återkallat", + "sslRevokeConfirm": "Återkalla och ta bort certifikatet \"{{name}}\"? Detta kan inte ångras.", + "healthRun": "Sikt", + "healthName": "Namn", + "healthTarget": "Värd / adress", + "healthAddCheck": "Lägg till check", + "healthSaved": "Hälsokontroller sparade", + "healthMissingFields": "Varje kontroll behöver ett namn och ett mål", + "logFile": "Fil", + "logUnit": "Enhet", + "logCustomPath": "Anpassad sökväg under /var/log (valfritt)", + "logGrep": "Filtrera rader...", + "firewallPersist": "Bevara regler", + "firewallPersisted": "Brandväggsreglerna bibehölls", "wireguard": "WireGuard", - "wgNotInstalled": "WireGuard is not installed on this host", - "wgNoInterfaces": "No WireGuard interfaces configured", - "wgInterfaceUp": "Bring up", - "wgInterfaceDown": "Bring down", - "wgBringingUp": "Bringing {{name}} up...", - "wgBringingDown": "Bringing {{name}} down...", - "wgInterfaceUpDone": "{{name}} is up", - "wgInterfaceDownDone": "{{name}} is down", - "wgListenPort": "Port", - "wgPublicKey": "Public key", - "wgEndpoint": "Endpoint", - "wgAllowedIPs": "Allowed IPs", - "wgLastHandshake": "Last handshake", - "wgHandshakeNever": "Never", - "wgTransfer": "Transfer", - "wgNoPeers": "No peers" + "wgNotInstalled": "WireGuard är inte installerat på den här värddatorn", + "wgNoInterfaces": "Inga WireGuard-gränssnitt konfigurerade", + "wgInterfaceUp": "Få upp", + "wgInterfaceDown": "Sänka", + "wgBringingUp": "Tar upp {{name}}...", + "wgBringingDown": "Att fälla {{name}}...", + "wgInterfaceUpDone": "{{name}} är uppe", + "wgInterfaceDownDone": "{{name}} är nere", + "wgListenPort": "Hamn", + "wgPublicKey": "Offentlig nyckel", + "wgEndpoint": "Slutpunkt", + "wgAllowedIPs": "Tillåtna IP-adresser", + "wgLastHandshake": "Sista handskakningen", + "wgHandshakeNever": "Aldrig", + "wgTransfer": "Överföra", + "wgNoPeers": "Inga jämnåriga" } }, "metricsHistory": { - "title": "Metrics History", - "historySuffix": "History", - "cpuMemoryDisk": "CPU / Memory / Disk", - "network": "Network", + "title": "Statistikhistorik", + "historySuffix": "Historia", + "cpuMemoryDisk": "CPU / Minne / Disk", + "network": "Nätverk", "download": "RX", "upload": "TX", - "noData": "No history data available for this time range.", - "custom": "Custom", - "to": "to", - "apply": "Apply", - "viewHistory": "View History" + "noData": "Ingen historikdata tillgänglig för detta tidsintervall.", + "custom": "Beställnings", + "to": "till", + "apply": "Tillämpas", + "viewHistory": "Visa historik" }, "hosts": { - "tabHostMetrics": "Host Metrics", - "metricsCollectionLabel": "Metrics Collection", - "enableMetricsLabel": "Enable Metrics", - "enableMetricsDesc": "Collect CPU, RAM, disk, and other metrics from this host", - "useGlobalMetrics": "Use Global Interval", - "useGlobalMetricsDesc": "Override with the server-wide metrics interval", - "metricsIntervalS": "Metrics Interval (s)", - "metricsIntervalDesc2": "Seconds between metric snapshots", - "excludedMountsLabel": "Excluded Mounts", - "monitoredMountsLabel": "Custom monitored paths", - "monitoredMountsDesc": "Add paths that are not exposed as separate mounts, including bind-mounted Home Assistant paths such as /config.", - "monitoredMountPathPlaceholder": "Path (/config, /mnt/data)", - "monitoredMountLabelPlaceholder": "Label (optional)", - "addMonitoredMount": "Add path", - "excludedMountsDesc": "Hide specific mount points or filesystem types (e.g. nfs, cifs) from disk usage and alerts for this host.", - "excludedMountsPlaceholder": "Mount path (/mnt/nas) or filesystem type (nfs, cifs)", - "excludedMountsEmpty": "No mounts excluded. All detected filesystems are shown.", - "addExcludedMount": "Add", - "visibleWidgets": "Visible Widgets", - "widgetsMovedToHostMetrics": "Cards are now added, arranged, and resized directly in the Host Metrics tab. Open Host Metrics for this host and use Customize to choose which cards are shown.", - "hostNotFound": "Host not found", - "loadingHost": "Loading host..." + "tabHostMetrics": "Värdstatistik", + "metricsCollectionLabel": "Metriksamling", + "enableMetricsLabel": "Aktivera mätvärden", + "enableMetricsDesc": "Samla in CPU, RAM, disk och andra mätvärden från den här värden", + "useGlobalMetrics": "Använd globalt intervall", + "useGlobalMetricsDesc": "Åsidosätt med det serveromfattande mätintervallet", + "metricsIntervalS": "Mätintervall (s)", + "metricsIntervalDesc2": "Sekunder mellan mätvärdesbilder", + "excludedMountsLabel": "Undantagna fästen", + "monitoredMountsLabel": "Anpassade övervakade sökvägar", + "monitoredMountsDesc": "Lägg till sökvägar som inte exponeras som separata monteringar, inklusive bindningsmonterade Home Assistant-sökvägar som /config.", + "monitoredMountPathPlaceholder": "Sökväg (/config, /mnt/data)", + "monitoredMountLabelPlaceholder": "Etikett (valfritt)", + "addMonitoredMount": "Lägg till sökväg", + "excludedMountsDesc": "Dölj specifika monteringspunkter eller filsystemtyper (t.ex. nfs, cifs) från diskanvändning och aviseringar för den här värden.", + "excludedMountsPlaceholder": "Monteringssökväg (/mnt/nas) eller filsystemtyp (nfs, cifs)", + "excludedMountsEmpty": "Inga monteringar är undantagna. Alla upptäckta filsystem visas.", + "addExcludedMount": "Tillägga", + "visibleWidgets": "Synliga widgetar", + "widgetsMovedToHostMetrics": "Kort läggs nu till, ordnas och ändras i storlek direkt på fliken Värdstatistik. Öppna Värdstatistik för den här värden och använd Anpassa för att välja vilka kort som visas.", + "hostNotFound": "Värden hittades inte", + "loadingHost": "Laddar värd..." }, "onboarding": { - "feature_metrics": "Metrics and alerts", - "feature_metrics_desc": "Track CPU, memory and disk over time, and get alerted when they go bad." + "feature_metrics": "Mätvärden och varningar", + "feature_metrics_desc": "Spåra CPU, minne och disk över tid och få en avisering när de blir dåliga." }, "admin": { - "metricsHistoryRetention": "Metrics History Retention", - "metricsHistoryRetentionRange": "1 to 90 days", - "days": "days" + "metricsHistoryRetention": "Bevarande av mätvärdenas historik", + "metricsHistoryRetentionRange": "1 till 90 dagar", + "days": "dagar" }, "homepage": { - "noData": "No data available", - "showCurrentValue": "Show Current Value", - "chartMetric": "Metric", - "metricRange": "Range", - "host": "Host", - "loading": "Loading...", + "noData": "Inga data tillgängliga", + "showCurrentValue": "Visa aktuellt värde", + "chartMetric": "Metrisk", + "metricRange": "Räckvidd", + "host": "Värd", + "loading": "Belastning...", "metricCpu": "CPU", "metricDisk": "Disk", - "metricHostname": "Hostname", - "metricKernel": "Kernel", - "metricMemory": "Memory", - "metricNetwork": "Network", - "metricOs": "OS", - "metricProcesses": "Processes", - "metricProcessesRunning": "running", + "metricHostname": "Värdnamn", + "metricKernel": "Kärna", + "metricMemory": "Minne", + "metricNetwork": "Nätverk", + "metricOs": "operativsystem", + "metricProcesses": "Processer", + "metricProcessesRunning": "spring", "metricProcessesTotal": "total", - "metricUptime": "Uptime", - "metricsNotAvailable": "Metrics not available", - "noHostSelected": "No host selected", - "selectHost": "Select a host..." + "metricUptime": "Drifttid", + "metricsNotAvailable": "Mätvärden är inte tillgängliga", + "noHostSelected": "Ingen värd vald", + "selectHost": "Välj en värd..." }, "terminalStatus": { - "unavailable": "Live stats unavailable" + "unavailable": "Livestatistik är inte tillgänglig" }, "dashboard": { "cpu": "CPU", - "ram": "RAM" + "ram": "RAM-minne" }, "dashboardTab": { "disk": "Disk" }, "terminal": { - "connected": "Connected" + "connected": "Ansluten" }, "permissions": { "use": { - "title": "Use Host Metrics", - "description": "View host metrics and use the host managers (services, packages, firewall and more) on hosts you can reach." + "title": "Använd värdmätvärden", + "description": "Visa värdstatistik och använd värdhanterare (tjänster, paket, brandvägg med mera) på värdar du kan nå." } }, "settings": { "admin": { "metricsInterval": { - "label": "Metrics interval (seconds)", - "description": "How often a host being viewed is sampled, unless the host sets its own interval." + "label": "Mätintervall (sekunder)", + "description": "Hur ofta en värd som visas samplas, såvida inte värden anger sitt eget intervall." }, "historyRetentionDays": { - "label": "History retention (days)", - "description": "How long metrics samples are kept for the history charts." + "label": "Historiklagring (dagar)", + "description": "Hur länge mätvärden sparas för historikdiagrammen." }, "enabledForNewHosts": { - "label": "Metrics on for new hosts", - "description": "Whether new hosts start with metrics collection turned on." + "label": "Mätvärden aktiverade för nya värdar", + "description": "Om nya värdar börjar med att mätvärdesinsamling är aktiverad." } }, "user": { "temperatureUnit": { - "label": "Temperature unit", - "description": "How temperatures are shown in Host Metrics.", + "label": "Temperaturenhet", + "description": "Hur temperaturer visas i Host Metrics.", "celsius": "Celsius", "fahrenheit": "Fahrenheit" } }, "host": { "metricsEnabled": { - "label": "Collect metrics" + "label": "Samla in mätvärden" }, "metricsInterval": { - "label": "Metrics interval (seconds)" + "label": "Mätintervall (sekunder)" }, "enabledWidgets": { - "label": "Enabled widgets" + "label": "Aktiverade widgetar" }, "excludedMounts": { - "label": "Excluded mounts" + "label": "Undantagna fästen" }, "monitoredMounts": { - "label": "Monitored paths" + "label": "Övervakade vägar" } } + }, + "plugin": { + "name": "Host Metrics" } } diff --git a/plugins/host-metrics/locales/translated/th_TH.json b/plugins/host-metrics/locales/translated/th_TH.json index fc32b9c85..9be2f0f78 100644 --- a/plugins/host-metrics/locales/translated/th_TH.json +++ b/plugins/host-metrics/locales/translated/th_TH.json @@ -1,312 +1,315 @@ { "nav": { - "hostMetrics": "Host Metrics" + "hostMetrics": "เมตริกโฮสต์" }, "hostMetrics": { - "cpu": "CPU", - "memory": "Memory", - "disk": "Disk", - "network": "Network", - "uptime": "Uptime", - "processes": "Processes", - "available": "Available", - "free": "Free", - "connecting": "Connecting...", - "connectionFailed": "Failed to connect to server", - "naCpus": "N/A CPU(s)", - "cpuCores_one": "{{count}} Core", - "cpuCores_other": "{{count}} Cores", - "cpuUsage": "CPU Usage", - "memoryUsage": "Memory Usage", - "diskUsage": "Disk Usage", - "selectFilesystem": "Select filesystem", - "temperature": "Temperature", - "highestTemperature": "Highest temperature", - "primaryTemperatureSensor": "Primary sensor", + "cpu": "ซีพียู", + "memory": "หน่วยความจำ", + "disk": "ดิสก์", + "network": "เครือข่าย", + "uptime": "เวลาใช้งาน", + "processes": "กระบวนการ", + "available": "มีอยู่", + "free": "ฟรี", + "connecting": "กำลังเชื่อมต่อ...", + "connectionFailed": "ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ได้", + "naCpus": "ไม่มีข้อมูล CPU", + "cpuCores_one": "{{count}} แกนหลัก", + "cpuCores_other": "{{count}} คอร์", + "cpuUsage": "การใช้งาน CPU", + "memoryUsage": "การใช้งานหน่วยความจำ", + "diskUsage": "การใช้งานดิสก์", + "selectFilesystem": "เลือกไฟล์ระบบ", + "temperature": "อุณหภูมิ", + "highestTemperature": "อุณหภูมิสูงสุด", + "primaryTemperatureSensor": "เซ็นเซอร์หลัก", "gpu": { - "title": "GPU", - "noDevice": "No NVIDIA GPU detected. Install the NVIDIA driver (it provides nvidia-smi) to see GPU metrics.", - "driver": "Driver {{version}}", - "utilization": "Utilization", - "memory": "VRAM", - "temperature": "Temp", - "power": "Power", - "fan": "Fan", - "processes": "GPU processes", - "noProcesses": "No processes are using the GPU" + "title": "จีพี", + "noDevice": "ไม่พบการ์ดจอ NVIDIA โปรดติดตั้งไดรเวอร์ NVIDIA (ซึ่งมีโปรแกรม nvidia-smi ให้ใช้งาน) เพื่อดูข้อมูลการทำงานของ GPU", + "driver": "คนขับ {{version}}", + "utilization": "การใช้ประโยชน์", + "memory": "วีแรม", + "temperature": "อุณหภูมิ", + "power": "พลัง", + "fan": "พัดลม", + "processes": "การประมวลผล GPU", + "noProcesses": "ไม่มีกระบวนการใดกำลังใช้งาน GPU อยู่" }, - "failedToFetchHostConfig": "Failed to fetch host configuration", - "serverOffline": "Server Offline", - "cannotFetchMetrics": "Cannot fetch metrics from offline server", - "totpFailed": "TOTP verification failed", - "noneAuthNotSupported": "Host Metrics does not support 'none' authentication type.", - "noHostSelected": "No host selected", - "load": "Load", - "systemInfo": "System Information", - "hostname": "Hostname", - "operatingSystem": "Operating System", - "kernel": "Kernel", - "seconds": "seconds", - "networkInterfaces": "Network Interfaces", - "noInterfacesFound": "No network interfaces found", - "noProcessesFound": "No processes found", - "processesTotal": "total", - "processesRunning": "running", - "loginStats": "SSH Login Statistics", - "noRecentLoginData": "No recent login data", + "failedToFetchHostConfig": "ไม่สามารถดึงข้อมูลการกำหนดค่าโฮสต์ได้", + "serverOffline": "เซิร์ฟเวอร์ออฟไลน์", + "cannotFetchMetrics": "ไม่สามารถดึงข้อมูลเมตริกจากเซิร์ฟเวอร์ออฟไลน์ได้", + "totpFailed": "การตรวจสอบ TOTP ล้มเหลว", + "noneAuthNotSupported": "Host Metrics ไม่รองรับประเภทการตรวจสอบสิทธิ์แบบ 'none'", + "noHostSelected": "ไม่ได้เลือกโฮสต์", + "load": "โหลด", + "systemInfo": "ข้อมูลระบบ", + "hostname": "ชื่อโฮสต์", + "operatingSystem": "ระบบปฏิบัติการ", + "kernel": "เคอร์เนล", + "seconds": "วินาที", + "networkInterfaces": "อินเทอร์เฟซเครือข่าย", + "noInterfacesFound": "ไม่พบอินเทอร์เฟซเครือข่าย", + "noProcessesFound": "ไม่พบกระบวนการใดๆ", + "processesTotal": "ทั้งหมด", + "processesRunning": "วิ่ง", + "loginStats": "สถิติการเข้าสู่ระบบ SSH", + "noRecentLoginData": "ไม่มีข้อมูลการเข้าสู่ระบบล่าสุด", "ports": { - "title": "Listening Ports", - "protocol": "Protocol", - "port": "Port", - "address": "Address", - "process": "Process", - "search": "Search ports...", - "allProtocols": "All", - "noData": "No listening ports data" + "title": "พอร์ตรับฟัง", + "protocol": "โปรโตคอล", + "port": "ท่าเรือ", + "address": "ที่อยู่", + "process": "กระบวนการ", + "search": "ค้นหาพอร์ต...", + "allProtocols": "ทั้งหมด", + "noData": "ไม่มีข้อมูลพอร์ตการฟัง" }, "firewall": { - "title": "Firewall", - "inactive": "Inactive", - "policy": "Policy", - "rules": "rules", - "noRules": "No rules in this chain", - "noData": "No firewall data available", - "action": "Action", - "protocol": "Proto", - "port": "Port", - "source": "Source", - "anywhere": "Anywhere", - "chains": "chains" + "title": "ไฟร์วอลล์", + "inactive": "ไม่ใช้งาน", + "policy": "นโยบาย", + "rules": "กฎ", + "noRules": "ไม่มีกฎเกณฑ์ใดๆ ในห่วงโซ่นี้", + "noData": "ไม่มีข้อมูลไฟร์วอลล์ให้ใช้งาน", + "action": "การกระทำ", + "protocol": "โปรโต", + "port": "ท่าเรือ", + "source": "แหล่งที่มา", + "anywhere": "ทุกที่", + "chains": "โซ่" }, - "loadAvg": "Load Avg", - "swap": "Swap", - "architecture": "Architecture", - "refresh": "Refresh", - "retry": "Retry", - "customize": "Customize layout", - "reset": "Reset", - "tabLive": "Live", - "editModeInstructions": "Drag cards to rearrange, drag the bottom edge to resize, and use the width button to change a card's span. Add or remove cards below.", + "loadAvg": "โหลดเฉลี่ย", + "swap": "แลกเปลี่ยน", + "architecture": "สถาปัตยกรรม", + "refresh": "รีเฟรช", + "retry": "ลองใหม่อีกครั้ง", + "customize": "ปรับแต่งเค้าโครง", + "reset": "รีเซ็ต", + "tabLive": "สด", + "editModeInstructions": "ลากการ์ดเพื่อจัดเรียงใหม่ ลากขอบด้านล่างเพื่อปรับขนาด และใช้ปุ่มความกว้างเพื่อเปลี่ยนความกว้างของการ์ด เพิ่มหรือลบการ์ดด้านล่าง", "managers": { - "services": "Services", - "processInspector": "Process Inspector", - "logViewer": "Log Viewer", - "cron": "Cron Jobs", - "packages": "Packages", - "ssl": "SSL Certificates", - "firewall": "Firewall", - "users": "Users & Permissions", - "healthCheck": "Health Checks", - "diskBreakdown": "Disk Breakdown", - "systemdTimers": "Timers", - "topMemory": "Top by Memory", - "noData": "No data", - "sudoHint": "Set a sudo password for this host in the host editor to enable privileged actions.", - "filter": "Filter...", - "start": "Start", - "stop": "Stop", - "restart": "Restart", - "actionDone": "{{name}} updated", - "actionFailed": "Action failed", - "signalSent": "Signal sent to PID {{pid}}", - "killHint": "Click: terminate (SIGTERM). Right-click: force kill (SIGKILL).", - "working": "Working...", - "update": "Update", - "upgradeAll": "Upgrade all", - "allUpToDate": "Everything is up to date", - "save": "Save", - "command": "Command", - "enabled": "Enabled", - "cronSaved": "Crontab updated", - "clients": "Clients", - "dryRun": "Dry run", - "renew": "Renew", - "noAcmeClient": "No ACME client (certbot or acme.sh) found on this host.", - "addInputRule": "Add INPUT rule", - "firewallWarning": "Changes are runtime-only until persisted. Be careful not to lock yourself out.", - "ruleApplied": "Rule applied", - "invalidPort": "Enter a valid port (1-65535)", - "newUsername": "New username", - "addUser": "Add", - "deleteUser": "Delete user", - "noHealthChecks": "No health checks configured yet.", - "follow": "Follow", - "noLogData": "No log output.", - "tree": "Tree", - "enableDisable": "Enable / disable at boot", - "grantSudo": "Grant sudo", - "revokeSudo": "Revoke sudo", - "sslIssueCert": "Issue certificate", - "sslExpired": "Expired", - "sslInDays": "in {{days}}d", - "sslNeedDomain": "Enter at least one domain", - "sslIssued": "Certificate issued", + "services": "บริการ", + "processInspector": "ผู้ตรวจสอบกระบวนการ", + "logViewer": "โปรแกรมดูบันทึก", + "cron": "งานครอน", + "packages": "แพ็คเกจ", + "ssl": "ใบรับรอง SSL", + "firewall": "ไฟร์วอลล์", + "users": "ผู้ใช้และสิทธิ์การเข้าถึง", + "healthCheck": "การตรวจสุขภาพ", + "diskBreakdown": "การแยกดิสก์", + "systemdTimers": "ตัวจับเวลา", + "topMemory": "อันดับแรกโดย Memory", + "noData": "ไม่มีข้อมูล", + "sudoHint": "ตั้งรหัสผ่าน sudo สำหรับโฮสต์นี้ในโปรแกรมแก้ไขโฮสต์เพื่อเปิดใช้งานการดำเนินการที่มีสิทธิ์พิเศษ", + "filter": "กรอง...", + "start": "เริ่ม", + "stop": "หยุด", + "restart": "เริ่มใหม่", + "actionDone": "{{name}} อัปเดตแล้ว", + "actionFailed": "การดำเนินการล้มเหลว", + "signalSent": "ส่งสัญญาณไปยัง PID {{pid}}", + "killHint": "คลิก: ยุติการทำงาน (SIGTERM) คลิกขวา: บังคับปิดการทำงาน (SIGKILL)", + "working": "การทำงาน...", + "update": "อัปเดต", + "upgradeAll": "อัปเกรดทั้งหมด", + "allUpToDate": "ทุกอย่างอัปเดตแล้ว", + "save": "บันทึก", + "command": "สั่งการ", + "enabled": "เปิดใช้งาน", + "cronSaved": "อัปเดต Crontab แล้ว", + "clients": "ลูกค้า", + "dryRun": "การทดลองซ้อม", + "renew": "ต่ออายุ", + "noAcmeClient": "ไม่พบไคลเอ็นต์ ACME (certbot หรือ acme.sh) บนโฮสต์นี้", + "addInputRule": "เพิ่มกฎ INPUT", + "firewallWarning": "การเปลี่ยนแปลงจะมีผลเฉพาะขณะรันไทม์จนกว่าจะบันทึกเสร็จสมบูรณ์ โปรดระวังอย่าล็อกตัวเองออกจากระบบ", + "ruleApplied": "กฎที่ใช้", + "invalidPort": "ป้อนหมายเลขพอร์ตที่ถูกต้อง (1-65535)", + "newUsername": "ชื่อผู้ใช้ใหม่", + "addUser": "เพิ่ม", + "deleteUser": "ลบผู้ใช้", + "noHealthChecks": "ยังไม่ได้ตั้งค่าการตรวจสอบสุขภาพใดๆ", + "follow": "ติดตาม", + "noLogData": "ไม่มีการแสดงผลบันทึกใดๆ", + "tree": "ต้นไม้", + "enableDisable": "เปิดใช้งาน/ปิดใช้งานเมื่อบูตเครื่อง", + "grantSudo": "ให้สิทธิ์ sudo", + "revokeSudo": "ยกเลิกสิทธิ์ sudo", + "sslIssueCert": "ออกใบรับรอง", + "sslExpired": "หมดอายุ", + "sslInDays": "ใน {{days}}d", + "sslNeedDomain": "ป้อนโดเมนอย่างน้อยหนึ่งโดเมน", + "sslIssued": "ออกใบรับรองแล้ว", "sslDomainsPlaceholder": "example.com, www.example.com", - "sslHttpStandalone": "HTTP (standalone)", + "sslHttpStandalone": "HTTP (แบบสแตนด์อโลน)", "sslHttpWebroot": "HTTP (webroot)", - "sslDns": "DNS", - "sslDnsProvider": "DNS provider (e.g. cloudflare)", - "sslIssueHint": "DNS provider credentials must already be configured on the host.", - "sslRevoke": "Revoke certificate", - "sslRevoked": "Certificate revoked", - "sslRevokeConfirm": "Revoke and remove the certificate \"{{name}}\"? This cannot be undone.", - "healthRun": "Run", - "healthName": "Name", - "healthTarget": "Host / address", - "healthAddCheck": "Add check", - "healthSaved": "Health checks saved", - "healthMissingFields": "Each check needs a name and target", - "logFile": "File", - "logUnit": "Unit", - "logCustomPath": "Custom path under /var/log (optional)", - "logGrep": "Filter lines...", - "firewallPersist": "Persist rules", - "firewallPersisted": "Firewall rules persisted", - "wireguard": "WireGuard", - "wgNotInstalled": "WireGuard is not installed on this host", - "wgNoInterfaces": "No WireGuard interfaces configured", - "wgInterfaceUp": "Bring up", - "wgInterfaceDown": "Bring down", - "wgBringingUp": "Bringing {{name}} up...", - "wgBringingDown": "Bringing {{name}} down...", - "wgInterfaceUpDone": "{{name}} is up", - "wgInterfaceDownDone": "{{name}} is down", - "wgListenPort": "Port", - "wgPublicKey": "Public key", - "wgEndpoint": "Endpoint", - "wgAllowedIPs": "Allowed IPs", - "wgLastHandshake": "Last handshake", - "wgHandshakeNever": "Never", - "wgTransfer": "Transfer", - "wgNoPeers": "No peers" + "sslDns": "เอ็นเอสดี", + "sslDnsProvider": "ผู้ให้บริการ DNS (เช่น Cloudflare)", + "sslIssueHint": "ต้องตั้งค่าข้อมูลประจำตัวของผู้ให้บริการ DNS บนโฮสต์ไว้แล้ว", + "sslRevoke": "เพิกถอนใบรับรอง", + "sslRevoked": "ใบรับรองถูกเพิกถอน", + "sslRevokeConfirm": "เพิกถอนและลบใบรับรอง \"{{name}}\"? การดำเนินการนี้ไม่สามารถย้อนกลับได้", + "healthRun": "วิ่ง", + "healthName": "ชื่อ", + "healthTarget": "โฮสต์ / ที่อยู่", + "healthAddCheck": "เพิ่มเช็ค", + "healthSaved": "บันทึกการตรวจสุขภาพ", + "healthMissingFields": "เช็คแต่ละใบต้องมีชื่อและเป้าหมาย", + "logFile": "ไฟล์", + "logUnit": "หน่วย", + "logCustomPath": "เส้นทางที่กำหนดเองภายใต้ /var/log (ไม่บังคับ)", + "logGrep": "กรองบรรทัด...", + "firewallPersist": "กฎการคงอยู่", + "firewallPersisted": "กฎไฟร์วอลล์ยังคงอยู่", + "wireguard": "ไวร์การ์ด", + "wgNotInstalled": "WireGuard ไม่ได้ติดตั้งอยู่ในเครื่องนี้", + "wgNoInterfaces": "ไม่มีการกำหนดค่าอินเทอร์เฟซ WireGuard", + "wgInterfaceUp": "นำมา", + "wgInterfaceDown": "นำมาลง", + "wgBringingUp": "กำลังนำ {{name}} ขึ้นมา...", + "wgBringingDown": "ล้มล้าง {{name}}...", + "wgInterfaceUpDone": "{{name}} พร้อมใช้งานแล้ว", + "wgInterfaceDownDone": "{{name}} ใช้งานไม่ได้แล้ว", + "wgListenPort": "ท่าเรือ", + "wgPublicKey": "กุญแจสาธารณะ", + "wgEndpoint": "จุดสิ้นสุด", + "wgAllowedIPs": "ที่อยู่ IP ที่อนุญาต", + "wgLastHandshake": "การจับมือครั้งสุดท้าย", + "wgHandshakeNever": "ไม่เคย", + "wgTransfer": "โอนย้าย", + "wgNoPeers": "ไม่มีเพื่อนร่วมงาน" } }, "metricsHistory": { - "title": "Metrics History", - "historySuffix": "History", - "cpuMemoryDisk": "CPU / Memory / Disk", - "network": "Network", - "download": "RX", - "upload": "TX", - "noData": "No history data available for this time range.", - "custom": "Custom", - "to": "to", - "apply": "Apply", - "viewHistory": "View History" + "title": "ประวัติการวัดผล", + "historySuffix": "ประวัติศาสตร์", + "cpuMemoryDisk": "ซีพียู / หน่วยความจำ / ดิสก์", + "network": "เครือข่าย", + "download": "อาร์ซี", + "upload": "เท็กซัส", + "noData": "ไม่มีข้อมูลประวัติสำหรับช่วงเวลานี้", + "custom": "กำหนดเอง", + "to": "ถึง", + "apply": "นำมาใช้", + "viewHistory": "ประวัติการดู" }, "hosts": { - "tabHostMetrics": "Host Metrics", - "metricsCollectionLabel": "Metrics Collection", - "enableMetricsLabel": "Enable Metrics", - "enableMetricsDesc": "Collect CPU, RAM, disk, and other metrics from this host", - "useGlobalMetrics": "Use Global Interval", - "useGlobalMetricsDesc": "Override with the server-wide metrics interval", - "metricsIntervalS": "Metrics Interval (s)", - "metricsIntervalDesc2": "Seconds between metric snapshots", - "excludedMountsLabel": "Excluded Mounts", - "monitoredMountsLabel": "Custom monitored paths", - "monitoredMountsDesc": "Add paths that are not exposed as separate mounts, including bind-mounted Home Assistant paths such as /config.", - "monitoredMountPathPlaceholder": "Path (/config, /mnt/data)", - "monitoredMountLabelPlaceholder": "Label (optional)", - "addMonitoredMount": "Add path", - "excludedMountsDesc": "Hide specific mount points or filesystem types (e.g. nfs, cifs) from disk usage and alerts for this host.", - "excludedMountsPlaceholder": "Mount path (/mnt/nas) or filesystem type (nfs, cifs)", - "excludedMountsEmpty": "No mounts excluded. All detected filesystems are shown.", - "addExcludedMount": "Add", - "visibleWidgets": "Visible Widgets", - "widgetsMovedToHostMetrics": "Cards are now added, arranged, and resized directly in the Host Metrics tab. Open Host Metrics for this host and use Customize to choose which cards are shown.", - "hostNotFound": "Host not found", - "loadingHost": "Loading host..." + "tabHostMetrics": "เมตริกโฮสต์", + "metricsCollectionLabel": "การรวบรวมเมตริก", + "enableMetricsLabel": "เปิดใช้งานเมตริก", + "enableMetricsDesc": "รวบรวมข้อมูลการใช้งาน CPU, RAM, ดิสก์ และข้อมูลอื่นๆ จากโฮสต์นี้", + "useGlobalMetrics": "ใช้ช่วงเวลาทั่วโลก", + "useGlobalMetricsDesc": "แทนที่ด้วยช่วงเวลาการวัดเมตริกทั่วทั้งเซิร์ฟเวอร์", + "metricsIntervalS": "ช่วงเวลาการวัด (วินาที)", + "metricsIntervalDesc2": "จำนวนวินาทีระหว่างการบันทึกภาพเมตริก", + "excludedMountsLabel": "การติดตั้งที่ไม่รวมอยู่ในเงื่อนไข", + "monitoredMountsLabel": "เส้นทางการตรวจสอบแบบกำหนดเอง", + "monitoredMountsDesc": "เพิ่มพาธที่ไม่ถูกเปิดเผยเป็นเมานต์แยกต่างหาก รวมถึงพาธ Home Assistant ที่เชื่อมต่อแบบ bind-mount เช่น /config", + "monitoredMountPathPlaceholder": "เส้นทาง (/config, /mnt/data)", + "monitoredMountLabelPlaceholder": "ป้ายกำกับ (ไม่บังคับ)", + "addMonitoredMount": "เพิ่มเส้นทาง", + "excludedMountsDesc": "ซ่อนจุดเชื่อมต่อหรือประเภทระบบไฟล์เฉพาะ (เช่น nfs, cifs) จากการใช้งานดิสก์และการแจ้งเตือนสำหรับโฮสต์นี้", + "excludedMountsPlaceholder": "เส้นทางการเชื่อมต่อ (/mnt/nas) หรือประเภทระบบไฟล์ (nfs, cifs)", + "excludedMountsEmpty": "ไม่มีการยกเว้นการเมานต์ใดๆ ระบบไฟล์ที่ตรวจพบทั้งหมดจะแสดงขึ้น", + "addExcludedMount": "เพิ่ม", + "visibleWidgets": "วิดเจ็ตที่มองเห็นได้", + "widgetsMovedToHostMetrics": "ขณะนี้สามารถเพิ่ม จัดเรียง และปรับขนาดการ์ดได้โดยตรงในแท็บเมตริกโฮสต์ เปิดเมตริกโฮสต์สำหรับโฮสต์นี้แล้วใช้ ปรับแต่ง เพื่อเลือกการ์ดที่จะแสดง", + "hostNotFound": "ไม่พบโฮสต์", + "loadingHost": "กำลังโหลดโฮสต์..." }, "onboarding": { - "feature_metrics": "Metrics and alerts", - "feature_metrics_desc": "Track CPU, memory and disk over time, and get alerted when they go bad." + "feature_metrics": "ตัวชี้วัดและการแจ้งเตือน", + "feature_metrics_desc": "ติดตามการทำงานของ CPU หน่วยความจำ และดิสก์อย่างต่อเนื่อง และรับการแจ้งเตือนเมื่ออุปกรณ์เหล่านั้นเริ่มมีปัญหา" }, "admin": { - "metricsHistoryRetention": "Metrics History Retention", - "metricsHistoryRetentionRange": "1 to 90 days", - "days": "days" + "metricsHistoryRetention": "การเก็บรักษาประวัติเมตริก", + "metricsHistoryRetentionRange": "1 ถึง 90 วัน", + "days": "วัน" }, "homepage": { - "noData": "No data available", - "showCurrentValue": "Show Current Value", - "chartMetric": "Metric", - "metricRange": "Range", - "host": "Host", - "loading": "Loading...", - "metricCpu": "CPU", - "metricDisk": "Disk", - "metricHostname": "Hostname", - "metricKernel": "Kernel", - "metricMemory": "Memory", - "metricNetwork": "Network", - "metricOs": "OS", - "metricProcesses": "Processes", - "metricProcessesRunning": "running", - "metricProcessesTotal": "total", - "metricUptime": "Uptime", - "metricsNotAvailable": "Metrics not available", - "noHostSelected": "No host selected", - "selectHost": "Select a host..." + "noData": "ไม่มีข้อมูล", + "showCurrentValue": "แสดงมูลค่าปัจจุบัน", + "chartMetric": "เมตริก", + "metricRange": "พิสัย", + "host": "เจ้าภาพ", + "loading": "กำลังโหลด...", + "metricCpu": "ซีพียู", + "metricDisk": "ดิสก์", + "metricHostname": "ชื่อโฮสต์", + "metricKernel": "เคอร์เนล", + "metricMemory": "หน่วยความจำ", + "metricNetwork": "เครือข่าย", + "metricOs": "โอเอส", + "metricProcesses": "กระบวนการ", + "metricProcessesRunning": "วิ่ง", + "metricProcessesTotal": "ทั้งหมด", + "metricUptime": "เวลาใช้งาน", + "metricsNotAvailable": "ข้อมูลตัวชี้วัดไม่พร้อมใช้งาน", + "noHostSelected": "ไม่ได้เลือกโฮสต์", + "selectHost": "เลือกโฮสต์..." }, "terminalStatus": { - "unavailable": "Live stats unavailable" + "unavailable": "ไม่สามารถดูสถิติแบบเรียลไทม์ได้" }, "dashboard": { - "cpu": "CPU", - "ram": "RAM" + "cpu": "ซีพียู", + "ram": "แรม" }, "dashboardTab": { - "disk": "Disk" + "disk": "ดิสก์" }, "terminal": { - "connected": "Connected" + "connected": "เชื่อมต่อแล้ว" }, "permissions": { "use": { - "title": "Use Host Metrics", - "description": "View host metrics and use the host managers (services, packages, firewall and more) on hosts you can reach." + "title": "ใช้เมตริกโฮสต์", + "description": "ดูข้อมูลเมตริกของโฮสต์และใช้ตัวจัดการโฮสต์ (บริการ แพ็กเกจ ไฟร์วอลล์ และอื่นๆ) บนโฮสต์ที่คุณสามารถเข้าถึงได้" } }, "settings": { "admin": { "metricsInterval": { - "label": "Metrics interval (seconds)", - "description": "How often a host being viewed is sampled, unless the host sets its own interval." + "label": "ช่วงเวลาการวัด (วินาที)", + "description": "ความถี่ในการสุ่มตัวอย่างโฮสต์ที่กำลังถูกดู เว้นแต่ว่าโฮสต์จะกำหนดช่วงเวลาเอง" }, "historyRetentionDays": { - "label": "History retention (days)", - "description": "How long metrics samples are kept for the history charts." + "label": "ระยะเวลาการเก็บรักษาประวัติ (วัน)", + "description": "ข้อมูลตัวอย่างจะถูกเก็บไว้นานแค่ไหนสำหรับแผนภูมิประวัติ" }, "enabledForNewHosts": { - "label": "Metrics on for new hosts", - "description": "Whether new hosts start with metrics collection turned on." + "label": "เปิดใช้งานเมตริกสำหรับโฮสต์ใหม่", + "description": "ไม่ว่าโฮสต์ใหม่จะเริ่มต้นด้วยการเปิดใช้งานการรวบรวมข้อมูลเมตริกหรือไม่" } }, "user": { "temperatureUnit": { - "label": "Temperature unit", - "description": "How temperatures are shown in Host Metrics.", - "celsius": "Celsius", - "fahrenheit": "Fahrenheit" + "label": "หน่วยอุณหภูมิ", + "description": "วิธีการแสดงอุณหภูมิใน Host Metrics", + "celsius": "เซลเซียส", + "fahrenheit": "ฟาเรนไฮต์" } }, "host": { "metricsEnabled": { - "label": "Collect metrics" + "label": "รวบรวมข้อมูลตัวชี้วัด" }, "metricsInterval": { - "label": "Metrics interval (seconds)" + "label": "ช่วงเวลาการวัด (วินาที)" }, "enabledWidgets": { - "label": "Enabled widgets" + "label": "วิดเจ็ตที่เปิดใช้งาน" }, "excludedMounts": { - "label": "Excluded mounts" + "label": "การติดตั้งที่ไม่รวมอยู่ด้วย" }, "monitoredMounts": { - "label": "Monitored paths" + "label": "เส้นทางที่ได้รับการตรวจสอบ" } } + }, + "plugin": { + "name": "Host Metrics" } } diff --git a/plugins/host-metrics/locales/translated/tr_TR.json b/plugins/host-metrics/locales/translated/tr_TR.json index 94f79dc54..53edfaec8 100644 --- a/plugins/host-metrics/locales/translated/tr_TR.json +++ b/plugins/host-metrics/locales/translated/tr_TR.json @@ -19,21 +19,21 @@ "cpuUsage": "CPU Kullanımı", "memoryUsage": "Bellek Kullanımı", "diskUsage": "Disk Kullanımı", - "selectFilesystem": "Select filesystem", + "selectFilesystem": "Dosya sistemini seçin", "temperature": "Sıcaklık", "highestTemperature": "En yüksek sıcaklık", - "primaryTemperatureSensor": "Primary sensor", + "primaryTemperatureSensor": "Birincil sensör", "gpu": { "title": "GPU", - "noDevice": "No NVIDIA GPU detected. Install the NVIDIA driver (it provides nvidia-smi) to see GPU metrics.", - "driver": "Driver {{version}}", - "utilization": "Utilization", + "noDevice": "NVIDIA GPU algılanmadı. GPU ölçümlerini görmek için NVIDIA sürücüsünü (nvidia-smi içerir) yükleyin.", + "driver": "Sürücü {{version}}", + "utilization": "Kullanım", "memory": "VRAM", - "temperature": "Temp", - "power": "Power", + "temperature": "Geçici", + "power": "Güç", "fan": "Fan", - "processes": "GPU processes", - "noProcesses": "No processes are using the GPU" + "processes": "GPU işlemleri", + "noProcesses": "GPU'yu kullanan hiçbir işlem yok." }, "failedToFetchHostConfig": "Host yapılandırması alınamadı", "serverOffline": "Sunucu Çevrimdışı", @@ -178,7 +178,7 @@ "wgLastHandshake": "Son el sıkışma", "wgHandshakeNever": "Hiçbir zaman", "wgTransfer": "Transfer", - "wgNoPeers": "No peers" + "wgNoPeers": "Eşi benzeri yok" } }, "metricsHistory": { @@ -203,15 +203,15 @@ "useGlobalMetricsDesc": "Sunucu geneli metrik aralığını geçersiz kıl", "metricsIntervalS": "Metrik Aralığı (sn)", "metricsIntervalDesc2": "Metrik anlık görüntüleri arasındaki saniye", - "excludedMountsLabel": "Excluded Mounts", - "monitoredMountsLabel": "Custom monitored paths", - "monitoredMountsDesc": "Add paths that are not exposed as separate mounts, including bind-mounted Home Assistant paths such as /config.", - "monitoredMountPathPlaceholder": "Path (/config, /mnt/data)", + "excludedMountsLabel": "Hariç Tutulan Montajlar", + "monitoredMountsLabel": "Özel olarak izlenen yollar", + "monitoredMountsDesc": "/config gibi Home Assistant'a bağlanan yollar da dahil olmak üzere, ayrı bağlama noktaları olarak gösterilmeyen yolları ekleyin.", + "monitoredMountPathPlaceholder": "Yol (/config, /mnt/data)", "monitoredMountLabelPlaceholder": "Etiket (isteğe bağlı)", - "addMonitoredMount": "Add path", - "excludedMountsDesc": "Hide specific mount points or filesystem types (e.g. nfs, cifs) from disk usage and alerts for this host.", - "excludedMountsPlaceholder": "Mount path (/mnt/nas) or filesystem type (nfs, cifs)", - "excludedMountsEmpty": "No mounts excluded. All detected filesystems are shown.", + "addMonitoredMount": "Yol ekle", + "excludedMountsDesc": "Bu sunucu için disk kullanımı ve uyarılarından belirli bağlama noktalarını veya dosya sistemi türlerini (örneğin nfs, cifs) gizleyin.", + "excludedMountsPlaceholder": "Bağlama yolu (/mnt/nas) veya dosya sistemi türü (nfs, cifs)", + "excludedMountsEmpty": "Hiçbir bağlama noktası hariç tutulmadı. Tespit edilen tüm dosya sistemleri gösteriliyor.", "addExcludedMount": "Ekle", "visibleWidgets": "Görünür Widget'lar", "widgetsMovedToHostMetrics": "Kartlar artık doğrudan Sunucu Metrikleri sekmesinde eklenir, düzenlenir ve yeniden boyutlandırılır. Bu sunucu için Sunucu Metrikleri'ni açın ve hangi kartların gösterileceğini seçmek için Özelleştir'i kullanın.", @@ -219,8 +219,8 @@ "loadingHost": "Host yükleniyor..." }, "onboarding": { - "feature_metrics": "Metrics and alerts", - "feature_metrics_desc": "Track CPU, memory and disk over time, and get alerted when they go bad." + "feature_metrics": "Ölçümler ve uyarılar", + "feature_metrics_desc": "İşlemci, bellek ve disk performansını zaman içinde takip edin ve arızalandıklarında uyarı alın." }, "admin": { "metricsHistoryRetention": "Metrik Geçmişi Saklama", @@ -250,7 +250,7 @@ "selectHost": "Bir sunucu seçin..." }, "terminalStatus": { - "unavailable": "Live stats unavailable" + "unavailable": "Canlı istatistikler mevcut değil." }, "dashboard": { "cpu": "CPU", @@ -264,49 +264,52 @@ }, "permissions": { "use": { - "title": "Use Host Metrics", - "description": "View host metrics and use the host managers (services, packages, firewall and more) on hosts you can reach." + "title": "Ana Bilgisayar Metriklerini Kullanın", + "description": "Erişebildiğiniz sunuculardaki sunucu ölçümlerini görüntüleyin ve sunucu yöneticilerini (hizmetler, paketler, güvenlik duvarı ve daha fazlası) kullanın." } }, "settings": { "admin": { "metricsInterval": { - "label": "Metrics interval (seconds)", - "description": "How often a host being viewed is sampled, unless the host sets its own interval." + "label": "Ölçüm aralığı (saniye)", + "description": "Bir sunucunun ne sıklıkla görüntülendiği, sunucu kendi aralığını belirlemediği sürece bu şekilde gösterilir." }, "historyRetentionDays": { - "label": "History retention (days)", - "description": "How long metrics samples are kept for the history charts." + "label": "Geçmiş verilerin saklanma süresi (gün)", + "description": "Geçmiş grafikler için metrik örneklerinin ne kadar süreyle saklandığı." }, "enabledForNewHosts": { - "label": "Metrics on for new hosts", - "description": "Whether new hosts start with metrics collection turned on." + "label": "Yeni sunucular için ölçümler açık.", + "description": "Yeni sunucuların ölçüm toplama özelliği açık olarak başlatılıp başlatılmadığı." } }, "user": { "temperatureUnit": { - "label": "Temperature unit", - "description": "How temperatures are shown in Host Metrics.", - "celsius": "Celsius", + "label": "Sıcaklık birimi", + "description": "Host Metrics'te sıcaklıklar nasıl gösterilir?", + "celsius": "Santigrat", "fahrenheit": "Fahrenheit" } }, "host": { "metricsEnabled": { - "label": "Collect metrics" + "label": "Ölçümleri toplayın" }, "metricsInterval": { - "label": "Metrics interval (seconds)" + "label": "Ölçüm aralığı (saniye)" }, "enabledWidgets": { - "label": "Enabled widgets" + "label": "Etkinleştirilmiş widget'lar" }, "excludedMounts": { - "label": "Excluded mounts" + "label": "Hariç tutulan montajlar" }, "monitoredMounts": { - "label": "Monitored paths" + "label": "İzlenen yollar" } } + }, + "plugin": { + "name": "Host Metrics" } } diff --git a/plugins/host-metrics/locales/translated/uk_UA.json b/plugins/host-metrics/locales/translated/uk_UA.json index fc32b9c85..340170991 100644 --- a/plugins/host-metrics/locales/translated/uk_UA.json +++ b/plugins/host-metrics/locales/translated/uk_UA.json @@ -1,312 +1,315 @@ { "nav": { - "hostMetrics": "Host Metrics" + "hostMetrics": "Метрики хоста" }, "hostMetrics": { - "cpu": "CPU", - "memory": "Memory", - "disk": "Disk", - "network": "Network", - "uptime": "Uptime", - "processes": "Processes", - "available": "Available", - "free": "Free", - "connecting": "Connecting...", - "connectionFailed": "Failed to connect to server", - "naCpus": "N/A CPU(s)", - "cpuCores_one": "{{count}} Core", - "cpuCores_other": "{{count}} Cores", - "cpuUsage": "CPU Usage", - "memoryUsage": "Memory Usage", - "diskUsage": "Disk Usage", - "selectFilesystem": "Select filesystem", - "temperature": "Temperature", - "highestTemperature": "Highest temperature", - "primaryTemperatureSensor": "Primary sensor", + "cpu": "Процесор", + "memory": "Пам'ять", + "disk": "Диск", + "network": "Мережа", + "uptime": "Час безвідмовної роботи", + "processes": "Процеси", + "available": "Доступно", + "free": "Безкоштовно", + "connecting": "Підключення...", + "connectionFailed": "Не вдалося підключитися до сервера", + "naCpus": "Процесор(и) Немає даних", + "cpuCores_one": "{{count}} Ядро", + "cpuCores_other": "{{count}} Ядра", + "cpuUsage": "Використання процесора", + "memoryUsage": "Використання пам'яті", + "diskUsage": "Використання диска", + "selectFilesystem": "Виберіть файлову систему", + "temperature": "Температура", + "highestTemperature": "Найвища температура", + "primaryTemperatureSensor": "Первинний датчик", "gpu": { - "title": "GPU", - "noDevice": "No NVIDIA GPU detected. Install the NVIDIA driver (it provides nvidia-smi) to see GPU metrics.", - "driver": "Driver {{version}}", - "utilization": "Utilization", - "memory": "VRAM", - "temperature": "Temp", - "power": "Power", - "fan": "Fan", - "processes": "GPU processes", - "noProcesses": "No processes are using the GPU" + "title": "Графічний процесор", + "noDevice": "Графічний процесор NVIDIA не виявлено. Встановіть драйвер NVIDIA (він надає nvidia-smi), щоб переглянути показники графічного процесора.", + "driver": "Водій {{version}}", + "utilization": "Використання", + "memory": "відеопам'ять", + "temperature": "Темп", + "power": "Потужність", + "fan": "Вентилятор", + "processes": "Процеси графічного процесора", + "noProcesses": "Жоден процес не використовує графічний процесор" }, - "failedToFetchHostConfig": "Failed to fetch host configuration", - "serverOffline": "Server Offline", - "cannotFetchMetrics": "Cannot fetch metrics from offline server", - "totpFailed": "TOTP verification failed", - "noneAuthNotSupported": "Host Metrics does not support 'none' authentication type.", - "noHostSelected": "No host selected", - "load": "Load", - "systemInfo": "System Information", - "hostname": "Hostname", - "operatingSystem": "Operating System", - "kernel": "Kernel", - "seconds": "seconds", - "networkInterfaces": "Network Interfaces", - "noInterfacesFound": "No network interfaces found", - "noProcessesFound": "No processes found", - "processesTotal": "total", - "processesRunning": "running", - "loginStats": "SSH Login Statistics", - "noRecentLoginData": "No recent login data", + "failedToFetchHostConfig": "Не вдалося отримати конфігурацію хоста", + "serverOffline": "Сервер офлайн", + "cannotFetchMetrics": "Не вдається отримати показники з офлайн-сервера", + "totpFailed": "Не вдалося перевірити TOTP", + "noneAuthNotSupported": "Метрики хоста не підтримують тип автентифікації «немає».", + "noHostSelected": "Хост не вибрано", + "load": "Навантаження", + "systemInfo": "Інформація про систему", + "hostname": "Ім'я хоста", + "operatingSystem": "Операційна система", + "kernel": "Ядро", + "seconds": "секунди", + "networkInterfaces": "Мережеві інтерфейси", + "noInterfacesFound": "Мережевих інтерфейсів не знайдено", + "noProcessesFound": "Процесів не знайдено", + "processesTotal": "загальна сума", + "processesRunning": "біг", + "loginStats": "Статистика входу SSH", + "noRecentLoginData": "Немає останніх даних для входу", "ports": { - "title": "Listening Ports", - "protocol": "Protocol", - "port": "Port", - "address": "Address", - "process": "Process", - "search": "Search ports...", - "allProtocols": "All", - "noData": "No listening ports data" + "title": "Порти прослуховування", + "protocol": "Протокол", + "port": "Порт", + "address": "Адреса", + "process": "Процес", + "search": "Пошук портів...", + "allProtocols": "Усі", + "noData": "Немає даних про порти прослуховування" }, "firewall": { - "title": "Firewall", - "inactive": "Inactive", - "policy": "Policy", - "rules": "rules", - "noRules": "No rules in this chain", - "noData": "No firewall data available", - "action": "Action", - "protocol": "Proto", - "port": "Port", - "source": "Source", - "anywhere": "Anywhere", - "chains": "chains" + "title": "Брандмауер", + "inactive": "Неактивний", + "policy": "Політика", + "rules": "правила", + "noRules": "У цьому ланцюжку немає правил", + "noData": "Дані брандмауера недоступні", + "action": "Дія", + "protocol": "Прото", + "port": "Порт", + "source": "Джерело", + "anywhere": "Будь-де", + "chains": "ланцюги" }, - "loadAvg": "Load Avg", - "swap": "Swap", - "architecture": "Architecture", - "refresh": "Refresh", - "retry": "Retry", - "customize": "Customize layout", - "reset": "Reset", - "tabLive": "Live", - "editModeInstructions": "Drag cards to rearrange, drag the bottom edge to resize, and use the width button to change a card's span. Add or remove cards below.", + "loadAvg": "Середнє навантаження", + "swap": "Обмін", + "architecture": "Архітектура", + "refresh": "Оновити", + "retry": "Повторити спробу", + "customize": "Налаштувати макет", + "reset": "Скинути", + "tabLive": "Живий", + "editModeInstructions": "Перетягуйте картки, щоб змінити порядок, перетягуйте нижній край, щоб змінити розмір, і скористайтеся кнопкою ширини, щоб змінити ширину картки. Додавайте або видаляйте картки нижче.", "managers": { - "services": "Services", - "processInspector": "Process Inspector", - "logViewer": "Log Viewer", - "cron": "Cron Jobs", - "packages": "Packages", - "ssl": "SSL Certificates", - "firewall": "Firewall", - "users": "Users & Permissions", - "healthCheck": "Health Checks", - "diskBreakdown": "Disk Breakdown", - "systemdTimers": "Timers", - "topMemory": "Top by Memory", - "noData": "No data", - "sudoHint": "Set a sudo password for this host in the host editor to enable privileged actions.", - "filter": "Filter...", - "start": "Start", - "stop": "Stop", - "restart": "Restart", - "actionDone": "{{name}} updated", - "actionFailed": "Action failed", - "signalSent": "Signal sent to PID {{pid}}", - "killHint": "Click: terminate (SIGTERM). Right-click: force kill (SIGKILL).", - "working": "Working...", - "update": "Update", - "upgradeAll": "Upgrade all", - "allUpToDate": "Everything is up to date", - "save": "Save", - "command": "Command", - "enabled": "Enabled", - "cronSaved": "Crontab updated", - "clients": "Clients", - "dryRun": "Dry run", - "renew": "Renew", - "noAcmeClient": "No ACME client (certbot or acme.sh) found on this host.", - "addInputRule": "Add INPUT rule", - "firewallWarning": "Changes are runtime-only until persisted. Be careful not to lock yourself out.", - "ruleApplied": "Rule applied", - "invalidPort": "Enter a valid port (1-65535)", - "newUsername": "New username", - "addUser": "Add", - "deleteUser": "Delete user", - "noHealthChecks": "No health checks configured yet.", - "follow": "Follow", - "noLogData": "No log output.", - "tree": "Tree", - "enableDisable": "Enable / disable at boot", - "grantSudo": "Grant sudo", - "revokeSudo": "Revoke sudo", - "sslIssueCert": "Issue certificate", - "sslExpired": "Expired", - "sslInDays": "in {{days}}d", - "sslNeedDomain": "Enter at least one domain", - "sslIssued": "Certificate issued", + "services": "Послуги", + "processInspector": "Інспектор процесів", + "logViewer": "Переглядач журналів", + "cron": "Cron-завдання", + "packages": "Пакети", + "ssl": "SSL-сертифікати", + "firewall": "Брандмауер", + "users": "Користувачі та дозволи", + "healthCheck": "Перевірки здоров'я", + "diskBreakdown": "Поломка диска", + "systemdTimers": "Таймери", + "topMemory": "Найкраще за пам'яттю", + "noData": "Немає даних", + "sudoHint": "Встановіть пароль sudo для цього хоста в редакторі хостів, щоб увімкнути привілейовані дії.", + "filter": "Фільтр...", + "start": "Початок", + "stop": "СТІЙ", + "restart": "Перезавантажити", + "actionDone": "{{name}} оновлено", + "actionFailed": "Дія не вдалася", + "signalSent": "Сигнал, що надсилається до ПІД-регулятора {{pid}}", + "killHint": "Клацніть: завершити (SIGTERM). Клацніть правою кнопкою миші: примусово завершити (SIGKILL).", + "working": "Працюємо...", + "update": "Оновлення", + "upgradeAll": "Оновити все", + "allUpToDate": "Все актуально", + "save": "Зберегти", + "command": "Команда", + "enabled": "Увімкнено", + "cronSaved": "Кронтаб оновлено", + "clients": "Клієнти", + "dryRun": "Сухий пробіг", + "renew": "Поновити", + "noAcmeClient": "На цьому хості не знайдено клієнта ACME (certbot або acme.sh).", + "addInputRule": "Додати правило INPUT", + "firewallWarning": "Зміни дійсні лише під час виконання, доки не будуть збережені. Будьте обережні, щоб не заблокувати себе.", + "ruleApplied": "Правило застосовано", + "invalidPort": "Введіть дійсний порт (1-65535)", + "newUsername": "Нове ім'я користувача", + "addUser": "Додати", + "deleteUser": "Видалити користувача", + "noHealthChecks": "Перевірки справності ще не налаштовано.", + "follow": "Стежити", + "noLogData": "Немає виводу журналу.", + "tree": "Дерево", + "enableDisable": "Увімкнути/вимкнути під час завантаження", + "grantSudo": "Грант sudo", + "revokeSudo": "Скасувати sudo", + "sslIssueCert": "Випуск сертифіката", + "sslExpired": "Термін дії минув", + "sslInDays": "у {{days}}днях", + "sslNeedDomain": "Введіть принаймні один домен", + "sslIssued": "Сертифікат видано", "sslDomainsPlaceholder": "example.com, www.example.com", - "sslHttpStandalone": "HTTP (standalone)", - "sslHttpWebroot": "HTTP (webroot)", - "sslDns": "DNS", - "sslDnsProvider": "DNS provider (e.g. cloudflare)", - "sslIssueHint": "DNS provider credentials must already be configured on the host.", - "sslRevoke": "Revoke certificate", - "sslRevoked": "Certificate revoked", - "sslRevokeConfirm": "Revoke and remove the certificate \"{{name}}\"? This cannot be undone.", - "healthRun": "Run", - "healthName": "Name", - "healthTarget": "Host / address", - "healthAddCheck": "Add check", - "healthSaved": "Health checks saved", - "healthMissingFields": "Each check needs a name and target", - "logFile": "File", - "logUnit": "Unit", - "logCustomPath": "Custom path under /var/log (optional)", - "logGrep": "Filter lines...", - "firewallPersist": "Persist rules", - "firewallPersisted": "Firewall rules persisted", + "sslHttpStandalone": "HTTP (автономний)", + "sslHttpWebroot": "HTTP (корінь веб-сайту)", + "sslDns": "ДНС", + "sslDnsProvider": "DNS-провайдер (наприклад, cloudflare)", + "sslIssueHint": "Облікові дані постачальника DNS вже мають бути налаштовані на хості.", + "sslRevoke": "Скасувати сертифікат", + "sslRevoked": "Сертифікат анульовано", + "sslRevokeConfirm": "Скасувати та видалити сертифікат \"{{name}}\"? Цю дію неможливо скасувати.", + "healthRun": "Бігти", + "healthName": "Ім'я", + "healthTarget": "Хост / адреса", + "healthAddCheck": "Додати чек", + "healthSaved": "Перевірки стану збережено", + "healthMissingFields": "Кожній перевірці потрібні ім'я та ціль", + "logFile": "Файл", + "logUnit": "Одиниця", + "logCustomPath": "Власний шлях до /var/log (необов'язково)", + "logGrep": "Фільтрувальні лінії...", + "firewallPersist": "Зберегти правила", + "firewallPersisted": "Правила брандмауера збереглися", "wireguard": "WireGuard", - "wgNotInstalled": "WireGuard is not installed on this host", - "wgNoInterfaces": "No WireGuard interfaces configured", - "wgInterfaceUp": "Bring up", - "wgInterfaceDown": "Bring down", - "wgBringingUp": "Bringing {{name}} up...", - "wgBringingDown": "Bringing {{name}} down...", - "wgInterfaceUpDone": "{{name}} is up", - "wgInterfaceDownDone": "{{name}} is down", - "wgListenPort": "Port", - "wgPublicKey": "Public key", - "wgEndpoint": "Endpoint", - "wgAllowedIPs": "Allowed IPs", - "wgLastHandshake": "Last handshake", - "wgHandshakeNever": "Never", - "wgTransfer": "Transfer", - "wgNoPeers": "No peers" + "wgNotInstalled": "WireGuard не встановлено на цьому хості", + "wgNoInterfaces": "Немає налаштованих інтерфейсів WireGuard", + "wgInterfaceUp": "Підніміть", + "wgInterfaceDown": "Збити", + "wgBringingUp": "Викликаємо {{name}}...", + "wgBringingDown": "Зниження {{name}}...", + "wgInterfaceUpDone": "{{name}} активовано", + "wgInterfaceDownDone": "{{name}} не працює", + "wgListenPort": "Порт", + "wgPublicKey": "Відкритий ключ", + "wgEndpoint": "Кінцева точка", + "wgAllowedIPs": "Дозволені IP-адреси", + "wgLastHandshake": "Останнє рукостискання", + "wgHandshakeNever": "Ніколи", + "wgTransfer": "Передача", + "wgNoPeers": "Немає однолітків" } }, "metricsHistory": { - "title": "Metrics History", - "historySuffix": "History", - "cpuMemoryDisk": "CPU / Memory / Disk", - "network": "Network", - "download": "RX", - "upload": "TX", - "noData": "No history data available for this time range.", - "custom": "Custom", - "to": "to", - "apply": "Apply", - "viewHistory": "View History" + "title": "Історія показників", + "historySuffix": "Історія", + "cpuMemoryDisk": "Процесор / Пам'ять / Диск", + "network": "Мережа", + "download": "Рецепт", + "upload": "Техас", + "noData": "Для цього періоду часу немає історичних даних.", + "custom": "Користувацька", + "to": "до", + "apply": "Застосувати", + "viewHistory": "Переглянути історію" }, "hosts": { - "tabHostMetrics": "Host Metrics", - "metricsCollectionLabel": "Metrics Collection", - "enableMetricsLabel": "Enable Metrics", - "enableMetricsDesc": "Collect CPU, RAM, disk, and other metrics from this host", - "useGlobalMetrics": "Use Global Interval", - "useGlobalMetricsDesc": "Override with the server-wide metrics interval", - "metricsIntervalS": "Metrics Interval (s)", - "metricsIntervalDesc2": "Seconds between metric snapshots", - "excludedMountsLabel": "Excluded Mounts", - "monitoredMountsLabel": "Custom monitored paths", - "monitoredMountsDesc": "Add paths that are not exposed as separate mounts, including bind-mounted Home Assistant paths such as /config.", - "monitoredMountPathPlaceholder": "Path (/config, /mnt/data)", - "monitoredMountLabelPlaceholder": "Label (optional)", - "addMonitoredMount": "Add path", - "excludedMountsDesc": "Hide specific mount points or filesystem types (e.g. nfs, cifs) from disk usage and alerts for this host.", - "excludedMountsPlaceholder": "Mount path (/mnt/nas) or filesystem type (nfs, cifs)", - "excludedMountsEmpty": "No mounts excluded. All detected filesystems are shown.", - "addExcludedMount": "Add", - "visibleWidgets": "Visible Widgets", - "widgetsMovedToHostMetrics": "Cards are now added, arranged, and resized directly in the Host Metrics tab. Open Host Metrics for this host and use Customize to choose which cards are shown.", - "hostNotFound": "Host not found", - "loadingHost": "Loading host..." + "tabHostMetrics": "Метрики хоста", + "metricsCollectionLabel": "Колекція показників", + "enableMetricsLabel": "Увімкнути метрики", + "enableMetricsDesc": "Збирати показники процесора, оперативної пам'яті, дискового простору та інші показники з цього хоста", + "useGlobalMetrics": "Використовувати глобальний інтервал", + "useGlobalMetricsDesc": "Перевизначити інтервалом показників на рівні сервера", + "metricsIntervalS": "Інтервал показників (и)", + "metricsIntervalDesc2": "Секунди між знімками показників", + "excludedMountsLabel": "Виключені маунти", + "monitoredMountsLabel": "Користувацькі контрольовані шляхи", + "monitoredMountsDesc": "Додайте шляхи, які не відображаються як окремі монтування, включаючи шляхи Home Assistant, змонтовані за допомогою прив’язки, такі як /config.", + "monitoredMountPathPlaceholder": "Шлях (/config, /mnt/data)", + "monitoredMountLabelPlaceholder": "Мітка (необов'язково)", + "addMonitoredMount": "Додати шлях", + "excludedMountsDesc": "Приховати певні точки монтування або типи файлових систем (наприклад, nfs, cifs) від використання диска та сповіщень для цього хоста.", + "excludedMountsPlaceholder": "Шлях монтування (/mnt/nas) або тип файлової системи (nfs, cifs)", + "excludedMountsEmpty": "Монтування не виключено. Відображаються всі виявлені файлові системи.", + "addExcludedMount": "Додати", + "visibleWidgets": "Видимі віджети", + "widgetsMovedToHostMetrics": "Тепер картки додаються, упорядковуються та змінюються за розміром безпосередньо на вкладці «Метрики хоста». Відкрийте «Метрики хоста» для цього хоста та скористайтеся функцією «Налаштувати», щоб вибрати, які картки відображатимуться.", + "hostNotFound": "Хост не знайдено", + "loadingHost": "Завантаження хоста..." }, "onboarding": { - "feature_metrics": "Metrics and alerts", - "feature_metrics_desc": "Track CPU, memory and disk over time, and get alerted when they go bad." + "feature_metrics": "Метрики та сповіщення", + "feature_metrics_desc": "Відстежуйте роботу процесора, пам'яті та диска з плином часу та отримуйте сповіщення, коли вони виходять з ладу." }, "admin": { - "metricsHistoryRetention": "Metrics History Retention", - "metricsHistoryRetentionRange": "1 to 90 days", - "days": "days" + "metricsHistoryRetention": "Збереження історії показників", + "metricsHistoryRetentionRange": "Від 1 до 90 днів", + "days": "дні" }, "homepage": { - "noData": "No data available", - "showCurrentValue": "Show Current Value", - "chartMetric": "Metric", - "metricRange": "Range", - "host": "Host", - "loading": "Loading...", - "metricCpu": "CPU", - "metricDisk": "Disk", - "metricHostname": "Hostname", - "metricKernel": "Kernel", - "metricMemory": "Memory", - "metricNetwork": "Network", - "metricOs": "OS", - "metricProcesses": "Processes", - "metricProcessesRunning": "running", - "metricProcessesTotal": "total", - "metricUptime": "Uptime", - "metricsNotAvailable": "Metrics not available", - "noHostSelected": "No host selected", - "selectHost": "Select a host..." + "noData": "Дані недоступні", + "showCurrentValue": "Показати поточне значення", + "chartMetric": "Метрика", + "metricRange": "Діапазон", + "host": "Хост", + "loading": "Завантаження...", + "metricCpu": "Процесор", + "metricDisk": "Диск", + "metricHostname": "Ім'я хоста", + "metricKernel": "Ядро", + "metricMemory": "Пам'ять", + "metricNetwork": "Мережа", + "metricOs": "ОС", + "metricProcesses": "Процеси", + "metricProcessesRunning": "біг", + "metricProcessesTotal": "загальна сума", + "metricUptime": "Час безвідмовної роботи", + "metricsNotAvailable": "Метрики недоступні", + "noHostSelected": "Хост не вибрано", + "selectHost": "Виберіть хоста..." }, "terminalStatus": { - "unavailable": "Live stats unavailable" + "unavailable": "Статистика в реальному часі недоступна" }, "dashboard": { - "cpu": "CPU", - "ram": "RAM" + "cpu": "Процесор", + "ram": "Оперативна пам'ять" }, "dashboardTab": { - "disk": "Disk" + "disk": "Диск" }, "terminal": { - "connected": "Connected" + "connected": "Підключено" }, "permissions": { "use": { - "title": "Use Host Metrics", - "description": "View host metrics and use the host managers (services, packages, firewall and more) on hosts you can reach." + "title": "Використовуйте метрики хоста", + "description": "Переглядайте показники хоста та використовуйте менеджери хоста (служби, пакети, брандмауер тощо) на хостах, до яких ви маєте доступ." } }, "settings": { "admin": { "metricsInterval": { - "label": "Metrics interval (seconds)", - "description": "How often a host being viewed is sampled, unless the host sets its own interval." + "label": "Інтервал показників (секунди)", + "description": "Як часто переглядається вибірка хоста, якщо хост не встановлює власний інтервал." }, "historyRetentionDays": { - "label": "History retention (days)", - "description": "How long metrics samples are kept for the history charts." + "label": "Збереження історії (дні)", + "description": "Як довго зберігаються зразки показників для історичних діаграм." }, "enabledForNewHosts": { - "label": "Metrics on for new hosts", - "description": "Whether new hosts start with metrics collection turned on." + "label": "Метрики для нових хостів", + "description": "Чи нові хости починають роботу з увімкненим збором метрик." } }, "user": { "temperatureUnit": { - "label": "Temperature unit", - "description": "How temperatures are shown in Host Metrics.", - "celsius": "Celsius", - "fahrenheit": "Fahrenheit" + "label": "Одиниця вимірювання температури", + "description": "Як відображаються температури в Host Metrics.", + "celsius": "Цельсій", + "fahrenheit": "Фаренгейт" } }, "host": { "metricsEnabled": { - "label": "Collect metrics" + "label": "Збирати показники" }, "metricsInterval": { - "label": "Metrics interval (seconds)" + "label": "Інтервал показників (секунди)" }, "enabledWidgets": { - "label": "Enabled widgets" + "label": "Увімкнені віджети" }, "excludedMounts": { - "label": "Excluded mounts" + "label": "Виключені кріплення" }, "monitoredMounts": { - "label": "Monitored paths" + "label": "Контрольовані шляхи" } } + }, + "plugin": { + "name": "Host Metrics" } } diff --git a/plugins/host-metrics/locales/translated/vi_VN.json b/plugins/host-metrics/locales/translated/vi_VN.json index e1d0c918a..222616162 100644 --- a/plugins/host-metrics/locales/translated/vi_VN.json +++ b/plugins/host-metrics/locales/translated/vi_VN.json @@ -19,21 +19,21 @@ "cpuUsage": "Mức sử dụng CPU", "memoryUsage": "Mức sử dụng bộ nhớ", "diskUsage": "Mức sử dụng ổ đĩa", - "selectFilesystem": "Select filesystem", + "selectFilesystem": "Chọn hệ thống tệp", "temperature": "Nhiệt độ", "highestTemperature": "Nhiệt độ cao nhất", - "primaryTemperatureSensor": "Primary sensor", + "primaryTemperatureSensor": "Cảm biến chính", "gpu": { "title": "GPU", - "noDevice": "No NVIDIA GPU detected. Install the NVIDIA driver (it provides nvidia-smi) to see GPU metrics.", - "driver": "Driver {{version}}", - "utilization": "Utilization", + "noDevice": "Không phát hiện thấy GPU NVIDIA. Hãy cài đặt trình điều khiển NVIDIA (nó cung cấp lệnh nvidia-smi) để xem các thông số GPU.", + "driver": "Tài xế {{version}}", + "utilization": "Sử dụng", "memory": "VRAM", - "temperature": "Temp", - "power": "Power", - "fan": "Fan", - "processes": "GPU processes", - "noProcesses": "No processes are using the GPU" + "temperature": "Nhiệt độ", + "power": "Quyền lực", + "fan": "Cái quạt", + "processes": "Các quy trình GPU", + "noProcesses": "Hiện không có tiến trình nào đang sử dụng GPU." }, "failedToFetchHostConfig": "Không tải được cấu hình máy chủ", "serverOffline": "Máy chủ ngoại tuyến", @@ -178,7 +178,7 @@ "wgLastHandshake": "Lần bắt tay cuối", "wgHandshakeNever": "Chưa bao giờ", "wgTransfer": "Truyền tải", - "wgNoPeers": "No peers" + "wgNoPeers": "Không có đồng nghiệp" } }, "metricsHistory": { @@ -203,15 +203,15 @@ "useGlobalMetricsDesc": "Ghi đè bằng khoảng thời gian thu thập số liệu toàn máy chủ", "metricsIntervalS": "Khoảng thu thập số liệu (giây)", "metricsIntervalDesc2": "Số giây giữa các lần chụp số liệu", - "excludedMountsLabel": "Excluded Mounts", - "monitoredMountsLabel": "Custom monitored paths", - "monitoredMountsDesc": "Add paths that are not exposed as separate mounts, including bind-mounted Home Assistant paths such as /config.", - "monitoredMountPathPlaceholder": "Path (/config, /mnt/data)", + "excludedMountsLabel": "Giá đỡ bị loại trừ", + "monitoredMountsLabel": "Đường dẫn được giám sát tùy chỉnh", + "monitoredMountsDesc": "Thêm các đường dẫn không được hiển thị dưới dạng các điểm gắn kết riêng biệt, bao gồm cả các đường dẫn Home Assistant được gắn kết bằng bind, chẳng hạn như /config.", + "monitoredMountPathPlaceholder": "Đường dẫn (/config, /mnt/data)", "monitoredMountLabelPlaceholder": "Nhãn (tùy chọn)", - "addMonitoredMount": "Add path", - "excludedMountsDesc": "Hide specific mount points or filesystem types (e.g. nfs, cifs) from disk usage and alerts for this host.", - "excludedMountsPlaceholder": "Mount path (/mnt/nas) or filesystem type (nfs, cifs)", - "excludedMountsEmpty": "No mounts excluded. All detected filesystems are shown.", + "addMonitoredMount": "Thêm đường dẫn", + "excludedMountsDesc": "Ẩn các điểm gắn kết hoặc loại hệ thống tập tin cụ thể (ví dụ: nfs, cifs) khỏi thông tin sử dụng ổ đĩa và cảnh báo cho máy chủ này.", + "excludedMountsPlaceholder": "Đường dẫn gắn kết (/mnt/nas) hoặc loại hệ thống tệp (nfs, cifs)", + "excludedMountsEmpty": "Không có điểm gắn kết nào bị loại trừ. Tất cả các hệ thống tập tin được phát hiện đều được hiển thị.", "addExcludedMount": "Thêm", "visibleWidgets": "Widget hiển thị", "widgetsMovedToHostMetrics": "Các thẻ hiện được thêm, sắp xếp và thay đổi kích thước trực tiếp trong tab Số liệu máy. Mở Số liệu máy cho máy này và dùng Tùy chỉnh để chọn thẻ hiển thị.", @@ -219,8 +219,8 @@ "loadingHost": "Đang tải máy chủ..." }, "onboarding": { - "feature_metrics": "Metrics and alerts", - "feature_metrics_desc": "Track CPU, memory and disk over time, and get alerted when they go bad." + "feature_metrics": "Số liệu và cảnh báo", + "feature_metrics_desc": "Theo dõi hiệu năng CPU, bộ nhớ và ổ đĩa theo thời gian, và nhận cảnh báo khi chúng gặp sự cố." }, "admin": { "metricsHistoryRetention": "Thời gian lưu trữ lịch sử số liệu", @@ -250,7 +250,7 @@ "selectHost": "Chọn máy chủ..." }, "terminalStatus": { - "unavailable": "Live stats unavailable" + "unavailable": "Số liệu thống kê trực tiếp không khả dụng" }, "dashboard": { "cpu": "CPU", @@ -264,49 +264,52 @@ }, "permissions": { "use": { - "title": "Use Host Metrics", - "description": "View host metrics and use the host managers (services, packages, firewall and more) on hosts you can reach." + "title": "Sử dụng số liệu máy chủ", + "description": "Xem số liệu thống kê của máy chủ và sử dụng trình quản lý máy chủ (dịch vụ, gói phần mềm, tường lửa, v.v.) trên các máy chủ mà bạn có thể truy cập." } }, "settings": { "admin": { "metricsInterval": { - "label": "Metrics interval (seconds)", - "description": "How often a host being viewed is sampled, unless the host sets its own interval." + "label": "Khoảng thời gian đo (giây)", + "description": "Tần suất lấy mẫu của một máy chủ đang được xem, trừ khi máy chủ đó tự thiết lập khoảng thời gian lấy mẫu riêng." }, "historyRetentionDays": { - "label": "History retention (days)", - "description": "How long metrics samples are kept for the history charts." + "label": "Thời gian lưu trữ lịch sử (ngày)", + "description": "Thời gian lưu giữ mẫu số liệu cho biểu đồ lịch sử là bao lâu?" }, "enabledForNewHosts": { - "label": "Metrics on for new hosts", - "description": "Whether new hosts start with metrics collection turned on." + "label": "Số liệu thống kê dành cho máy chủ mới", + "description": "Liệu các máy chủ mới có bắt đầu với tính năng thu thập số liệu được bật hay không." } }, "user": { "temperatureUnit": { - "label": "Temperature unit", - "description": "How temperatures are shown in Host Metrics.", - "celsius": "Celsius", - "fahrenheit": "Fahrenheit" + "label": "Đơn vị nhiệt độ", + "description": "Cách hiển thị nhiệt độ trong Host Metrics.", + "celsius": "Độ C", + "fahrenheit": "Độ Fahrenheit" } }, "host": { "metricsEnabled": { - "label": "Collect metrics" + "label": "Thu thập số liệu" }, "metricsInterval": { - "label": "Metrics interval (seconds)" + "label": "Khoảng thời gian đo (giây)" }, "enabledWidgets": { - "label": "Enabled widgets" + "label": "Các tiện ích đã được bật" }, "excludedMounts": { - "label": "Excluded mounts" + "label": "Các giá đỡ bị loại trừ" }, "monitoredMounts": { - "label": "Monitored paths" + "label": "Các tuyến đường được giám sát" } } + }, + "plugin": { + "name": "Host Metrics" } } diff --git a/plugins/host-metrics/locales/translated/zh_CN.json b/plugins/host-metrics/locales/translated/zh_CN.json index 629867734..ff2225769 100644 --- a/plugins/host-metrics/locales/translated/zh_CN.json +++ b/plugins/host-metrics/locales/translated/zh_CN.json @@ -13,7 +13,7 @@ "free": "空闲", "connecting": "连接中...", "connectionFailed": "连接服务器失败", - "naCpus": "CPU 数据不可用", + "naCpus": "N/A CPU", "cpuCores_one": "{{count}} 核心", "cpuCores_other": "{{count}} 核心", "cpuUsage": "CPU 使用率", @@ -25,13 +25,13 @@ "primaryTemperatureSensor": "主传感器", "gpu": { "title": "GPU", - "noDevice": "未检测到 NVIDIA GPU。请安装 NVIDIA 驱动(包含 nvidia-smi)以查看 GPU 指标。", - "driver": "驱动版本 {{version}}", - "utilization": "使用率", + "noDevice": "未检测到NVIDIA GPU。请安装NVIDIA驱动程序(它提供nvidia-smi)以查看GPU指标。", + "driver": "司机 {{version}}", + "utilization": "利用率", "memory": "显存", "temperature": "温度", - "power": "功率", - "fan": "风扇", + "power": "力量", + "fan": "扇子", "processes": "GPU 进程", "noProcesses": "没有进程正在使用 GPU" }, @@ -143,7 +143,7 @@ "sslIssued": "证书已签发", "sslDomainsPlaceholder": "example.com, www.example.com", "sslHttpStandalone": "HTTP (独立模式)", - "sslHttpWebroot": "HTTP(网站根目录)", + "sslHttpWebroot": "HTTP (webroot)", "sslDns": "DNS", "sslDnsProvider": "DNS 提供商 (如 cloudflare)", "sslIssueHint": "DNS 提供商凭据必须已在主机上配置。", @@ -178,7 +178,7 @@ "wgLastHandshake": "上次握手", "wgHandshakeNever": "从未", "wgTransfer": "传输", - "wgNoPeers": "没有对等节点" + "wgNoPeers": "没有对手" } }, "metricsHistory": { @@ -186,8 +186,8 @@ "historySuffix": "历史", "cpuMemoryDisk": "CPU / 内存 / 磁盘", "network": "网络", - "download": "接收", - "upload": "发送", + "download": "RX", + "upload": "TX", "noData": "此时间范围内没有可用的历史数据。", "custom": "自定义", "to": "至", @@ -205,13 +205,13 @@ "metricsIntervalDesc2": "指标快照之间的秒数", "excludedMountsLabel": "排除的挂载点", "monitoredMountsLabel": "自定义监控路径", - "monitoredMountsDesc": "添加未作为独立挂载点显示的路径,包括 /config 等通过绑定挂载的 Home Assistant 路径。", - "monitoredMountPathPlaceholder": "路径(/config、/mnt/data)", + "monitoredMountsDesc": "添加未作为单独挂载点公开的路径,包括绑定挂载的 Home Assistant 路径,例如 /config。", + "monitoredMountPathPlaceholder": "路径(/config,/mnt/data)", "monitoredMountLabelPlaceholder": "标签(可选)", "addMonitoredMount": "添加路径", - "excludedMountsDesc": "在此主机的磁盘使用情况和告警中隐藏指定挂载点或文件系统类型(如 nfs、cifs)。", + "excludedMountsDesc": "隐藏此主机磁盘使用情况和警报中的特定挂载点或文件系统类型(例如 nfs、cifs)。", "excludedMountsPlaceholder": "挂载路径(/mnt/nas)或文件系统类型(nfs、cifs)", - "excludedMountsEmpty": "未排除任何挂载点,将显示所有检测到的文件系统。", + "excludedMountsEmpty": "未排除任何挂载点。显示所有检测到的文件系统。", "addExcludedMount": "添加", "visibleWidgets": "可见小部件", "widgetsMovedToHostMetrics": "卡片现在可在“主机指标”选项卡中直接添加、排列和调整大小。打开此主机的“主机指标”,使用“自定义”选择要显示的卡片。", @@ -250,7 +250,7 @@ "selectHost": "选择主机..." }, "terminalStatus": { - "unavailable": "实时统计不可用" + "unavailable": "实时统计数据不可用" }, "dashboard": { "cpu": "CPU", @@ -265,44 +265,44 @@ "permissions": { "use": { "title": "使用主机指标", - "description": "查看主机指标,并在你有权访问的主机上使用服务、软件包、防火墙等管理工具。" + "description": "查看主机指标并使用您可以访问的主机上的主机管理器(服务、软件包、防火墙等)。" } }, "settings": { "admin": { "metricsInterval": { - "label": "指标采样间隔(秒)", - "description": "正在查看的主机的采样频率,除非该主机另行设置了间隔。" + "label": "指标间隔(秒)", + "description": "除非主机自行设置间隔,否则将对正在查看的主机进行采样的频率。" }, "historyRetentionDays": { - "label": "历史保留天数", - "description": "用于历史图表的指标采样数据保留时长。" + "label": "历史数据保留时间(天)", + "description": "历史图表中的指标样本保留多长时间?" }, "enabledForNewHosts": { - "label": "新主机默认启用指标", - "description": "是否为新主机默认启用指标采集。" + "label": "新主机指标", + "description": "新主机是否默认开启指标收集功能。" } }, "user": { "temperatureUnit": { "label": "温度单位", - "description": "主机指标中的温度显示方式。", + "description": "主机指标中如何显示温度。", "celsius": "摄氏度", "fahrenheit": "华氏度" } }, "host": { "metricsEnabled": { - "label": "采集指标" + "label": "收集指标" }, "metricsInterval": { - "label": "指标采样间隔(秒)" + "label": "指标间隔(秒)" }, "enabledWidgets": { - "label": "启用的组件" + "label": "已启用的小部件" }, "excludedMounts": { - "label": "排除的挂载点" + "label": "排除的安装点" }, "monitoredMounts": { "label": "监控路径" @@ -310,6 +310,6 @@ } }, "plugin": { - "name": "主机指标" + "name": "Host Metrics" } } diff --git a/plugins/host-metrics/locales/translated/zh_TW.json b/plugins/host-metrics/locales/translated/zh_TW.json index 13f292bf0..89da4532e 100644 --- a/plugins/host-metrics/locales/translated/zh_TW.json +++ b/plugins/host-metrics/locales/translated/zh_TW.json @@ -19,21 +19,21 @@ "cpuUsage": "CPU 使用率", "memoryUsage": "記憶體使用率", "diskUsage": "磁碟使用率", - "selectFilesystem": "Select filesystem", + "selectFilesystem": "選擇檔案系統", "temperature": "溫度", "highestTemperature": "最高溫度", - "primaryTemperatureSensor": "Primary sensor", + "primaryTemperatureSensor": "主感應器", "gpu": { "title": "GPU", - "noDevice": "No NVIDIA GPU detected. Install the NVIDIA driver (it provides nvidia-smi) to see GPU metrics.", - "driver": "Driver {{version}}", - "utilization": "Utilization", - "memory": "VRAM", - "temperature": "Temp", - "power": "Power", - "fan": "Fan", - "processes": "GPU processes", - "noProcesses": "No processes are using the GPU" + "noDevice": "未偵測到NVIDIA GPU。請安裝NVIDIA驅動程式(它提供nvidia-smi)以查看GPU指標。", + "driver": "司機 {{version}}", + "utilization": "使用率", + "memory": "顯存", + "temperature": "溫度", + "power": "力量", + "fan": "扇子", + "processes": "GPU 行程", + "noProcesses": "沒有進程正在使用 GPU" }, "failedToFetchHostConfig": "無法取得主機設定", "serverOffline": "伺服器離線", @@ -178,7 +178,7 @@ "wgLastHandshake": "上次交握", "wgHandshakeNever": "從未", "wgTransfer": "傳輸", - "wgNoPeers": "No peers" + "wgNoPeers": "沒有對手" } }, "metricsHistory": { @@ -203,15 +203,15 @@ "useGlobalMetricsDesc": "以伺服器範圍的指標間隔覆寫", "metricsIntervalS": "指標間隔(秒)", "metricsIntervalDesc2": "每次指標快照之間的秒數", - "excludedMountsLabel": "Excluded Mounts", - "monitoredMountsLabel": "Custom monitored paths", - "monitoredMountsDesc": "Add paths that are not exposed as separate mounts, including bind-mounted Home Assistant paths such as /config.", - "monitoredMountPathPlaceholder": "Path (/config, /mnt/data)", + "excludedMountsLabel": "排除的安裝", + "monitoredMountsLabel": "自訂監控路徑", + "monitoredMountsDesc": "新增未以單獨掛載點公開的路徑,包括綁定掛載的 Home Assistant 路徑,例如 /config。", + "monitoredMountPathPlaceholder": "路徑(/config,/mnt/data)", "monitoredMountLabelPlaceholder": "標籤(選填)", - "addMonitoredMount": "Add path", - "excludedMountsDesc": "Hide specific mount points or filesystem types (e.g. nfs, cifs) from disk usage and alerts for this host.", - "excludedMountsPlaceholder": "Mount path (/mnt/nas) or filesystem type (nfs, cifs)", - "excludedMountsEmpty": "No mounts excluded. All detected filesystems are shown.", + "addMonitoredMount": "新增路徑", + "excludedMountsDesc": "隱藏此主機磁碟使用情況和警報中的特定掛載點或檔案系統類型(例如 nfs、cifs)。", + "excludedMountsPlaceholder": "掛載路徑(/mnt/nas)或檔案系統類型(nfs、cifs)", + "excludedMountsEmpty": "未排除任何掛載點。顯示所有偵測到的檔案系統。", "addExcludedMount": "新增", "visibleWidgets": "可見的小工具", "widgetsMovedToHostMetrics": "現在卡片可直接在主機指標分頁中新增、排列和調整大小。開啟此主機的主機指標,然後使用自訂功能選擇要顯示的卡片。", @@ -219,8 +219,8 @@ "loadingHost": "正在載入主機..." }, "onboarding": { - "feature_metrics": "Metrics and alerts", - "feature_metrics_desc": "Track CPU, memory and disk over time, and get alerted when they go bad." + "feature_metrics": "指標和警報", + "feature_metrics_desc": "追蹤 CPU、記憶體和磁碟的運作情況,並在它們出現故障時發出警報。" }, "admin": { "metricsHistoryRetention": "指標歷史保留", @@ -250,7 +250,7 @@ "selectHost": "選擇主機..." }, "terminalStatus": { - "unavailable": "Live stats unavailable" + "unavailable": "即時統計數據不可用" }, "dashboard": { "cpu": "CPU", @@ -264,49 +264,52 @@ }, "permissions": { "use": { - "title": "Use Host Metrics", - "description": "View host metrics and use the host managers (services, packages, firewall and more) on hosts you can reach." + "title": "使用主機指標", + "description": "查看主機指標並使用您可以存取的主機上的主機管理器(服務、軟體包、防火牆等)。" } }, "settings": { "admin": { "metricsInterval": { - "label": "Metrics interval (seconds)", - "description": "How often a host being viewed is sampled, unless the host sets its own interval." + "label": "指標間隔(秒)", + "description": "除非主機自行設定間隔,否則將對正在查看的主機進行取樣的頻率。" }, "historyRetentionDays": { - "label": "History retention (days)", - "description": "How long metrics samples are kept for the history charts." + "label": "歷史資料保留時間(天)", + "description": "歷史圖表中的指標樣本保留多久?" }, "enabledForNewHosts": { - "label": "Metrics on for new hosts", - "description": "Whether new hosts start with metrics collection turned on." + "label": "新主機指標", + "description": "新主機是否預設開啟指標收集功能。" } }, "user": { "temperatureUnit": { - "label": "Temperature unit", - "description": "How temperatures are shown in Host Metrics.", - "celsius": "Celsius", - "fahrenheit": "Fahrenheit" + "label": "溫度單位", + "description": "主機指標中如何顯示溫度。", + "celsius": "攝氏度", + "fahrenheit": "華氏度" } }, "host": { "metricsEnabled": { - "label": "Collect metrics" + "label": "收集指標" }, "metricsInterval": { - "label": "Metrics interval (seconds)" + "label": "指標間隔(秒)" }, "enabledWidgets": { - "label": "Enabled widgets" + "label": "已啟用的小工具" }, "excludedMounts": { - "label": "Excluded mounts" + "label": "排除的安裝點" }, "monitoredMounts": { - "label": "Monitored paths" + "label": "監控路徑" } } + }, + "plugin": { + "name": "Host Metrics" } } diff --git a/plugins/host-metrics/src/backend/poller.ts b/plugins/host-metrics/src/backend/poller.ts index 5a78653c2..0abdbf56b 100644 --- a/plugins/host-metrics/src/backend/poller.ts +++ b/plugins/host-metrics/src/backend/poller.ts @@ -347,11 +347,8 @@ export class MetricsPoller { const settings = await this.settingsFor(host.id); if (!settings.metricsEnabled) return; - let authenticated = false; try { - const metrics = await collectMetrics(this.deps, host, settings, () => { - authenticated = true; - }); + const metrics = await collectMetrics(this.deps, host, settings); this.metrics.set(host.id, { data: metrics, timestamp: Date.now() }); this.ctx.hosts.status.reportLogin(host.id, { ok: true }); this.setCollectionState(host, "collecting"); @@ -367,14 +364,6 @@ export class MetricsPoller { const hostKeyChanged = isHostKeyVerificationError(error); const message = error instanceof Error ? error.message : ""; const isAuthError = /authentication|permission denied/i.test(message); - - // A timeout or a dropped connection says nothing about the login. - if (!authenticated && (isAuthError || hostKeyChanged)) { - this.ctx.hosts.status.reportLogin(host.id, { - ok: false, - hostKeyChanged, - }); - } this.setCollectionState( host, hostKeyChanged diff --git a/plugins/host-metrics/src/backend/state.ts b/plugins/host-metrics/src/backend/state.ts index 1816a778b..9e6d6a144 100644 --- a/plugins/host-metrics/src/backend/state.ts +++ b/plugins/host-metrics/src/backend/state.ts @@ -1,8 +1,7 @@ +import type { PluginHostStatus } from "@termix/plugin-sdk/backend"; import type { CpuSamples } from "./widgets/cpu-collector.js"; import { createNetworkSamples } from "./widgets/network-collector.js"; -export type HostStatus = "online" | "reachable" | "offline"; - export class RequestQueue { private queues = new Map Promise>>(); private processing = new Set(); @@ -418,7 +417,7 @@ export class HostPollCache { * host answers. A host core does not check (status checks off) is tried. */ export function canStartInitialMetrics( - status: HostStatus | null | undefined, + status: PluginHostStatus | null | undefined, hasViewers: boolean, ): boolean { return hasViewers && status !== "offline"; diff --git a/plugins/host-metrics/tests/backend/poller.test.ts b/plugins/host-metrics/tests/backend/poller.test.ts index 8814545f6..a0de9543d 100644 --- a/plugins/host-metrics/tests/backend/poller.test.ts +++ b/plugins/host-metrics/tests/backend/poller.test.ts @@ -40,7 +40,7 @@ function setup(hostIds = [7]) { hostStatuses: Object.fromEntries( hostIds.map((id) => [ id, - { status: "reachable" as const, lastChecked: "now" }, + { status: "online" as const, lastChecked: "now" }, ]), ), }); @@ -131,13 +131,13 @@ describe("MetricsPoller", () => { expect(collectMetrics).not.toHaveBeenCalled(); // Core's check comes back: the first sample runs. - fake.hostStatuses.set(7, { status: "reachable", lastChecked: "now" }); - poller.hostStatusChanged(7, "reachable"); + fake.hostStatuses.set(7, { status: "online", lastChecked: "now" }); + poller.hostStatusChanged(7, "online"); await flush(); expect(collectMetrics).toHaveBeenCalledOnce(); }); - it("reports a failed login and why collection stopped", async () => { + it("says why collection stopped without touching the status", async () => { collectMetrics.mockRejectedValue( new Error("All configured authentication methods failed"), ); @@ -146,9 +146,7 @@ describe("MetricsPoller", () => { poller.registerViewer(7, "viewer-a", "user-1"); await flush(); - expect(fake.statusReports).toEqual([ - { hostId: 7, ok: false, hostKeyChanged: false }, - ]); + expect(fake.statusReports).toEqual([]); expect(fake.emitted.at(-1)?.payload).toMatchObject({ state: "auth_failed", }); @@ -174,9 +172,7 @@ describe("MetricsPoller", () => { poller.registerViewer(7, "viewer-a", "user-1"); await flush(); - expect(fake.statusReports).toEqual([ - { hostId: 7, ok: false, hostKeyChanged: true }, - ]); + expect(fake.statusReports).toEqual([]); expect(state.authFailures.shouldSkip(7)).toBe(true); poller.hostKeyAccepted(7); expect(state.authFailures.shouldSkip(7)).toBe(false); diff --git a/plugins/host-metrics/tests/backend/state.test.ts b/plugins/host-metrics/tests/backend/state.test.ts index e5c157f30..246f778e8 100644 --- a/plugins/host-metrics/tests/backend/state.test.ts +++ b/plugins/host-metrics/tests/backend/state.test.ts @@ -27,7 +27,6 @@ describe("auth failure tracking", () => { describe("initial metrics admission", () => { it("needs a viewer and a host core does not see as offline", () => { expect(canStartInitialMetrics("online", true)).toBe(true); - expect(canStartInitialMetrics("reachable", true)).toBe(true); expect(canStartInitialMetrics("offline", true)).toBe(false); expect(canStartInitialMetrics("online", false)).toBe(false); // Status checks off: core has no status, so the sample is tried. diff --git a/plugins/ldap/locales/en.json b/plugins/ldap/locales/en.json index 8f7be9a66..8dc7329e0 100644 --- a/plugins/ldap/locales/en.json +++ b/plugins/ldap/locales/en.json @@ -23,6 +23,12 @@ "namePlaceholder": "Company directory", "nameRequired": "A display name is required", "enabled": "Enabled", + "enabledDesc": "Let users sign in with this directory.", + "dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.", + "sectionGeneral": "General", + "sectionConnection": "Connection", + "sectionUsers": "User Lookup", + "sectionAccess": "Access", "save": "Save Directory", "saving": "Saving...", "saved": "Saved", @@ -36,6 +42,7 @@ "host": "LDAP Host", "port": "Port", "useTls": "Use TLS (LDAPS)", + "useTlsDesc": "Connect over an encrypted LDAPS connection.", "bindDn": "Bind DN", "bindPassword": "Bind Password", "secretKeep": "A password is saved. Leave this empty to keep it.", diff --git a/plugins/ldap/locales/translated/af_ZA.json b/plugins/ldap/locales/translated/af_ZA.json index faacff00a..79b42d226 100644 --- a/plugins/ldap/locales/translated/af_ZA.json +++ b/plugins/ldap/locales/translated/af_ZA.json @@ -23,6 +23,12 @@ "namePlaceholder": "Maatskappygids", "nameRequired": "'n Vertoonnaam word vereis", "enabled": "Geaktiveer", + "enabledDesc": "Let users sign in with this directory.", + "dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.", + "sectionGeneral": "General", + "sectionConnection": "Connection", + "sectionUsers": "User Lookup", + "sectionAccess": "Access", "save": "Stoor gids", "saving": "Stoor...", "saved": "Gestoor", @@ -36,6 +42,7 @@ "host": "LDAP-gasheer", "port": "Hawe", "useTls": "Gebruik TLS (LDAPS)", + "useTlsDesc": "Connect over an encrypted LDAPS connection.", "bindDn": "Bind DN", "bindPassword": "Bind Wagwoord", "secretKeep": "'n Wagwoord is gestoor. Los dit leeg om dit te behou.", @@ -46,5 +53,8 @@ "groupSearchBase": "Groepsoekbasis", "adminGroup": "Admingroep", "allowedUsers": "Toegelate Gebruikers" + }, + "plugin": { + "name": "LDAP" } } diff --git a/plugins/ldap/locales/translated/ar_SA.json b/plugins/ldap/locales/translated/ar_SA.json index 7814b8f68..e2c1e06c2 100644 --- a/plugins/ldap/locales/translated/ar_SA.json +++ b/plugins/ldap/locales/translated/ar_SA.json @@ -23,6 +23,12 @@ "namePlaceholder": "دليل الشركات", "nameRequired": "اسم العرض مطلوب", "enabled": "مُمكّن", + "enabledDesc": "Let users sign in with this directory.", + "dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.", + "sectionGeneral": "General", + "sectionConnection": "Connection", + "sectionUsers": "User Lookup", + "sectionAccess": "Access", "save": "حفظ الدليل", "saving": "جارٍ الحفظ...", "saved": "محفوظ", @@ -36,6 +42,7 @@ "host": "مضيف LDAP", "port": "منفذ", "useTls": "استخدام TLS (LDAPS)", + "useTlsDesc": "Connect over an encrypted LDAPS connection.", "bindDn": "اسم مميز للربط", "bindPassword": "كلمة مرور الارتباط", "secretKeep": "تم حفظ كلمة المرور. اترك هذا الحقل فارغًا للاحتفاظ بها.", @@ -46,5 +53,8 @@ "groupSearchBase": "قاعدة بحث المجموعات", "adminGroup": "مجموعة المسؤولين", "allowedUsers": "المستخدمون المسموح لهم" + }, + "plugin": { + "name": "LDAP" } } diff --git a/plugins/ldap/locales/translated/bg_BG.json b/plugins/ldap/locales/translated/bg_BG.json index 4f01eef58..c8f0949ae 100644 --- a/plugins/ldap/locales/translated/bg_BG.json +++ b/plugins/ldap/locales/translated/bg_BG.json @@ -23,6 +23,12 @@ "namePlaceholder": "Фирмен указател", "nameRequired": "Изисква се показвано име", "enabled": "Активирано", + "enabledDesc": "Let users sign in with this directory.", + "dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.", + "sectionGeneral": "General", + "sectionConnection": "Connection", + "sectionUsers": "User Lookup", + "sectionAccess": "Access", "save": "Запазване на директорията", "saving": "Запазване...", "saved": "Запазено", @@ -36,6 +42,7 @@ "host": "LDAP хост", "port": "Порт", "useTls": "Използвайте TLS (LDAPS)", + "useTlsDesc": "Connect over an encrypted LDAPS connection.", "bindDn": "Обвързване DN", "bindPassword": "Свързване на парола", "secretKeep": "Паролата е запазена. Оставете това празно, за да я запазите.", @@ -46,5 +53,8 @@ "groupSearchBase": "База за групово търсене", "adminGroup": "Административна група", "allowedUsers": "Разрешени потребители" + }, + "plugin": { + "name": "LDAP" } } diff --git a/plugins/ldap/locales/translated/bn_BD.json b/plugins/ldap/locales/translated/bn_BD.json index cf754c641..9d3252870 100644 --- a/plugins/ldap/locales/translated/bn_BD.json +++ b/plugins/ldap/locales/translated/bn_BD.json @@ -1,50 +1,60 @@ { - "loginWithLdap": "Sign in with LDAP", - "loginWithProvider": "Login with {{name}}", - "loading": "Loading...", - "requiredField": "This field is required", - "username": "LDAP Username", - "password": "LDAP Password", - "signIn": "Sign In", + "loginWithLdap": "LDAP দিয়ে সাইন ইন করুন", + "loginWithProvider": "{{name}} দিয়ে লগইন করুন", + "loading": "লোড হচ্ছে...", + "requiredField": "এই ক্ষেত্রটি আবশ্যক", + "username": "LDAP ব্যবহারকারীর নাম", + "password": "এলডিএপি পাসওয়ার্ড", + "signIn": "সাইন ইন করুন", "permissions": { "manage": { - "title": "Manage LDAP directories", - "description": "Add, change and remove the LDAP directories people can sign in with." + "title": "LDAP ডিরেক্টরিগুলি পরিচালনা করুন", + "description": "ব্যবহারকারীরা যে LDAP ডিরেক্টরিগুলো দিয়ে সাইন ইন করতে পারবেন, সেগুলো যোগ করুন, পরিবর্তন করুন এবং মুছে ফেলুন।" } }, "providers": { - "docsLink": "View docs", - "none": "No LDAP directories configured.", - "add": "Add Directory", - "edit": "Edit Directory", - "delete": "Delete Directory", - "deleteConfirm": "Delete this directory? Users who sign in with it will not be able to log in.", - "name": "Display Name", - "namePlaceholder": "Company directory", - "nameRequired": "A display name is required", - "enabled": "Enabled", - "save": "Save Directory", - "saving": "Saving...", - "saved": "Saved", - "saveFailed": "Failed to save", - "deleted": "Deleted", - "deleteFailed": "Failed to delete", - "loadFailed": "Failed to load LDAP directories", - "cancel": "Cancel" + "docsLink": "নথি দেখুন", + "none": "কোনো LDAP ডিরেক্টরি কনফিগার করা নেই।", + "add": "ডিরেক্টরি যোগ করুন", + "edit": "ডিরেক্টরি সম্পাদনা করুন", + "delete": "ডিরেক্টরি মুছুন", + "deleteConfirm": "এই ডিরেক্টরিটি মুছে ফেললে, যারা এটি দিয়ে সাইন ইন করবেন তারা আর লগ ইন করতে পারবেন না।", + "name": "প্রদর্শনের নাম", + "namePlaceholder": "কোম্পানির ডিরেক্টরি", + "nameRequired": "একটি প্রদর্শনের নাম প্রয়োজন", + "enabled": "সক্ষম করা হয়েছে", + "enabledDesc": "Let users sign in with this directory.", + "dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.", + "sectionGeneral": "General", + "sectionConnection": "Connection", + "sectionUsers": "User Lookup", + "sectionAccess": "Access", + "save": "ডিরেক্টরি সংরক্ষণ করুন", + "saving": "সঞ্চয়...", + "saved": "সংরক্ষিত", + "saveFailed": "সংরক্ষণ করতে ব্যর্থ হয়েছে", + "deleted": "মুছে ফেলা হয়েছে", + "deleteFailed": "মুছে ফেলতে ব্যর্থ হয়েছে", + "loadFailed": "LDAP ডিরেক্টরি লোড করতে ব্যর্থ হয়েছে", + "cancel": "বাতিল করুন" }, "fields": { - "host": "LDAP Host", - "port": "Port", - "useTls": "Use TLS (LDAPS)", - "bindDn": "Bind DN", - "bindPassword": "Bind Password", - "secretKeep": "A password is saved. Leave this empty to keep it.", - "userSearchBase": "User Search Base", - "userSearchFilter": "User Search Filter", - "usernameAttr": "Username Attribute", - "displayNameAttr": "Display Name Attribute", - "groupSearchBase": "Group Search Base", - "adminGroup": "Admin Group", - "allowedUsers": "Allowed Users" + "host": "এলডিএপি হোস্ট", + "port": "বন্দর", + "useTls": "TLS (LDAPS) ব্যবহার করুন", + "useTlsDesc": "Connect over an encrypted LDAPS connection.", + "bindDn": "ডিএনকে আবদ্ধ করুন", + "bindPassword": "পাসওয়ার্ড সংযুক্ত করুন", + "secretKeep": "একটি পাসওয়ার্ড সংরক্ষিত হয়েছে। এটি রাখতে চাইলে এই স্থানটি খালি রাখুন।", + "userSearchBase": "ব্যবহারকারী অনুসন্ধান ভিত্তি", + "userSearchFilter": "ব্যবহারকারী অনুসন্ধান ফিল্টার", + "usernameAttr": "ব্যবহারকারীর নাম অ্যাট্রিবিউট", + "displayNameAttr": "ডিসপ্লে নেম অ্যাট্রিবিউট", + "groupSearchBase": "গ্রুপ অনুসন্ধান ভিত্তি", + "adminGroup": "অ্যাডমিন গ্রুপ", + "allowedUsers": "অনুমোদিত ব্যবহারকারী" + }, + "plugin": { + "name": "LDAP" } } diff --git a/plugins/ldap/locales/translated/ca_ES.json b/plugins/ldap/locales/translated/ca_ES.json index 83fc507e0..82a7bd6e8 100644 --- a/plugins/ldap/locales/translated/ca_ES.json +++ b/plugins/ldap/locales/translated/ca_ES.json @@ -23,6 +23,12 @@ "namePlaceholder": "Directori d'empreses", "nameRequired": "Cal un nom de visualització", "enabled": "Activat", + "enabledDesc": "Let users sign in with this directory.", + "dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.", + "sectionGeneral": "General", + "sectionConnection": "Connection", + "sectionUsers": "User Lookup", + "sectionAccess": "Access", "save": "Desa el directori", "saving": "Desant...", "saved": "Desat", @@ -36,6 +42,7 @@ "host": "Amfitrió LDAP", "port": "Port", "useTls": "Utilitza TLS (LDAPS)", + "useTlsDesc": "Connect over an encrypted LDAPS connection.", "bindDn": "Vinculació de nom de domini", "bindPassword": "Contrasenya de vinculació", "secretKeep": "S'ha desat una contrasenya. Deixeu-ho en blanc per conservar-la.", @@ -46,5 +53,8 @@ "groupSearchBase": "Base de cerca de grups", "adminGroup": "Grup d'administradors", "allowedUsers": "Usuaris permesos" + }, + "plugin": { + "name": "LDAP" } } diff --git a/plugins/ldap/locales/translated/cs_CZ.json b/plugins/ldap/locales/translated/cs_CZ.json index 0648082d0..d07083b68 100644 --- a/plugins/ldap/locales/translated/cs_CZ.json +++ b/plugins/ldap/locales/translated/cs_CZ.json @@ -23,6 +23,12 @@ "namePlaceholder": "Adresář firem", "nameRequired": "Je vyžadováno zobrazované jméno", "enabled": "Povoleno", + "enabledDesc": "Let users sign in with this directory.", + "dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.", + "sectionGeneral": "General", + "sectionConnection": "Connection", + "sectionUsers": "User Lookup", + "sectionAccess": "Access", "save": "Uložit adresář", "saving": "Ukládání…", "saved": "Uloženo", @@ -36,6 +42,7 @@ "host": "Hostitel LDAP", "port": "Port", "useTls": "Používejte TLS (LDAPS)", + "useTlsDesc": "Connect over an encrypted LDAPS connection.", "bindDn": "Vázat DN", "bindPassword": "Vázat heslo", "secretKeep": "Heslo je uloženo. Pro jeho zachování nechte toto pole prázdné.", @@ -46,5 +53,8 @@ "groupSearchBase": "Základna pro vyhledávání skupin", "adminGroup": "Skupina administrátorů", "allowedUsers": "Povolení uživatelé" + }, + "plugin": { + "name": "LDAP" } } diff --git a/plugins/ldap/locales/translated/da_DK.json b/plugins/ldap/locales/translated/da_DK.json index 73b002d72..5cc11f37d 100644 --- a/plugins/ldap/locales/translated/da_DK.json +++ b/plugins/ldap/locales/translated/da_DK.json @@ -23,6 +23,12 @@ "namePlaceholder": "Firmaregister", "nameRequired": "Et visningsnavn er påkrævet", "enabled": "Aktiveret", + "enabledDesc": "Let users sign in with this directory.", + "dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.", + "sectionGeneral": "General", + "sectionConnection": "Connection", + "sectionUsers": "User Lookup", + "sectionAccess": "Access", "save": "Gem mappe", "saving": "Gemmer...", "saved": "Gemt", @@ -36,6 +42,7 @@ "host": "LDAP-vært", "port": "Havn", "useTls": "Brug TLS (LDAPS)", + "useTlsDesc": "Connect over an encrypted LDAPS connection.", "bindDn": "Bind DN", "bindPassword": "Bind adgangskode", "secretKeep": "En adgangskode er gemt. Lad dette felt være tomt for at beholde den.", @@ -46,5 +53,8 @@ "groupSearchBase": "Gruppesøgningsbase", "adminGroup": "Admingruppe", "allowedUsers": "Tilladte brugere" + }, + "plugin": { + "name": "LDAP" } } diff --git a/plugins/ldap/locales/translated/de_DE.json b/plugins/ldap/locales/translated/de_DE.json index eee37c4fd..4dfcc8fbd 100644 --- a/plugins/ldap/locales/translated/de_DE.json +++ b/plugins/ldap/locales/translated/de_DE.json @@ -23,6 +23,12 @@ "namePlaceholder": "Firmenverzeichnis", "nameRequired": "Ein Anzeigename ist erforderlich.", "enabled": "Aktiviert", + "enabledDesc": "Let users sign in with this directory.", + "dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.", + "sectionGeneral": "General", + "sectionConnection": "Connection", + "sectionUsers": "User Lookup", + "sectionAccess": "Access", "save": "Speicherverzeichnis", "saving": "Wird gespeichert …", "saved": "Gespeichert", @@ -36,6 +42,7 @@ "host": "LDAP-Host", "port": "Port", "useTls": "TLS verwenden (LDAPS)", + "useTlsDesc": "Connect over an encrypted LDAPS connection.", "bindDn": "Bind-DN", "bindPassword": "Bind-Passwort", "secretKeep": "Ein Passwort wurde gespeichert. Lassen Sie dieses Feld leer, um es zu behalten.", @@ -46,5 +53,8 @@ "groupSearchBase": "Gruppen-Suchbasis", "adminGroup": "Admin-Gruppe", "allowedUsers": "Zugelassene Benutzer" + }, + "plugin": { + "name": "LDAP" } } diff --git a/plugins/ldap/locales/translated/el_GR.json b/plugins/ldap/locales/translated/el_GR.json index 92cfb3725..3d7ed3b59 100644 --- a/plugins/ldap/locales/translated/el_GR.json +++ b/plugins/ldap/locales/translated/el_GR.json @@ -23,6 +23,12 @@ "namePlaceholder": "Κατάλογος εταιρείας", "nameRequired": "Απαιτείται εμφανιζόμενο όνομα", "enabled": "Ενεργοποιημένο", + "enabledDesc": "Let users sign in with this directory.", + "dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.", + "sectionGeneral": "General", + "sectionConnection": "Connection", + "sectionUsers": "User Lookup", + "sectionAccess": "Access", "save": "Αποθήκευση καταλόγου", "saving": "Οικονομία...", "saved": "Αποθηκεύτηκε", @@ -36,6 +42,7 @@ "host": "Κεντρικός υπολογιστής LDAP", "port": "Λιμάνι", "useTls": "Χρήση TLS (LDAPS)", + "useTlsDesc": "Connect over an encrypted LDAPS connection.", "bindDn": "Σύνδεση DN", "bindPassword": "Σύνδεση κωδικού πρόσβασης", "secretKeep": "Ένας κωδικός πρόσβασης αποθηκεύτηκε. Αφήστε το κενό για να τον διατηρήσετε.", @@ -46,5 +53,8 @@ "groupSearchBase": "Βάση αναζήτησης ομάδας", "adminGroup": "Ομάδα Διαχειριστών", "allowedUsers": "Επιτρεπόμενοι χρήστες" + }, + "plugin": { + "name": "LDAP" } } diff --git a/plugins/ldap/locales/translated/es_ES.json b/plugins/ldap/locales/translated/es_ES.json index 9728f1f8c..35a6f9303 100644 --- a/plugins/ldap/locales/translated/es_ES.json +++ b/plugins/ldap/locales/translated/es_ES.json @@ -23,6 +23,12 @@ "namePlaceholder": "Directorio de empresas", "nameRequired": "Se requiere un nombre para mostrar.", "enabled": "Activado", + "enabledDesc": "Let users sign in with this directory.", + "dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.", + "sectionGeneral": "General", + "sectionConnection": "Connection", + "sectionUsers": "User Lookup", + "sectionAccess": "Access", "save": "Guardar directorio", "saving": "Guardando...", "saved": "Guardado", @@ -36,6 +42,7 @@ "host": "Host LDAP", "port": "Puerto", "useTls": "Usar TLS (LDAPS)", + "useTlsDesc": "Connect over an encrypted LDAPS connection.", "bindDn": "DN de enlace", "bindPassword": "Contraseña de enlace", "secretKeep": "Se ha guardado una contraseña. Déjelo en blanco para conservarla.", @@ -46,5 +53,8 @@ "groupSearchBase": "Base de búsqueda de grupos", "adminGroup": "Grupo de administradores", "allowedUsers": "Usuarios permitidos" + }, + "plugin": { + "name": "LDAP" } } diff --git a/plugins/ldap/locales/translated/fi_FI.json b/plugins/ldap/locales/translated/fi_FI.json index c8a89f140..ab3cd6dad 100644 --- a/plugins/ldap/locales/translated/fi_FI.json +++ b/plugins/ldap/locales/translated/fi_FI.json @@ -23,6 +23,12 @@ "namePlaceholder": "Yrityshakemisto", "nameRequired": "Näyttönimi on pakollinen", "enabled": "Käytössä", + "enabledDesc": "Let users sign in with this directory.", + "dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.", + "sectionGeneral": "General", + "sectionConnection": "Connection", + "sectionUsers": "User Lookup", + "sectionAccess": "Access", "save": "Tallenna hakemisto", "saving": "Tallennetaan...", "saved": "Tallennettu", @@ -36,6 +42,7 @@ "host": "LDAP-isäntä", "port": "Portti", "useTls": "Käytä TLS:ää (LDAPS)", + "useTlsDesc": "Connect over an encrypted LDAPS connection.", "bindDn": "Sido DN", "bindPassword": "Sido salasana", "secretKeep": "Salasana on tallennettu. Jätä tämä tyhjäksi, jos haluat säilyttää sen.", @@ -46,5 +53,8 @@ "groupSearchBase": "Ryhmän hakukanta", "adminGroup": "Hallintaryhmä", "allowedUsers": "Sallitut käyttäjät" + }, + "plugin": { + "name": "LDAP" } } diff --git a/plugins/ldap/locales/translated/fr_FR.json b/plugins/ldap/locales/translated/fr_FR.json index 80267be81..a135f39f1 100644 --- a/plugins/ldap/locales/translated/fr_FR.json +++ b/plugins/ldap/locales/translated/fr_FR.json @@ -23,6 +23,12 @@ "namePlaceholder": "Annuaire des entreprises", "nameRequired": "Un nom d'affichage est requis.", "enabled": "Activé", + "enabledDesc": "Let users sign in with this directory.", + "dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.", + "sectionGeneral": "General", + "sectionConnection": "Connection", + "sectionUsers": "User Lookup", + "sectionAccess": "Access", "save": "Répertoire de sauvegarde", "saving": "Enregistrement…", "saved": "Enregistré", @@ -36,6 +42,7 @@ "host": "Hôte LDAP", "port": "Port", "useTls": "Utiliser TLS (LDAPS)", + "useTlsDesc": "Connect over an encrypted LDAPS connection.", "bindDn": "DN de liaison", "bindPassword": "Mot de passe de liaison", "secretKeep": "Un mot de passe est enregistré. Laissez ce champ vide pour le conserver.", @@ -46,5 +53,8 @@ "groupSearchBase": "Base de recherche de groupe", "adminGroup": "Groupe administrateur", "allowedUsers": "Utilisateurs autorisés" + }, + "plugin": { + "name": "LDAP" } } diff --git a/plugins/ldap/locales/translated/he_IL.json b/plugins/ldap/locales/translated/he_IL.json index b238b29bd..61157ad42 100644 --- a/plugins/ldap/locales/translated/he_IL.json +++ b/plugins/ldap/locales/translated/he_IL.json @@ -23,6 +23,12 @@ "namePlaceholder": "מדריך חברות", "nameRequired": "נדרש שם תצוגה", "enabled": "מופעל", + "enabledDesc": "Let users sign in with this directory.", + "dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.", + "sectionGeneral": "General", + "sectionConnection": "Connection", + "sectionUsers": "User Lookup", + "sectionAccess": "Access", "save": "שמור ספרייה", "saving": "חִסָכוֹן...", "saved": "נשמר", @@ -36,6 +42,7 @@ "host": "מארח LDAP", "port": "נָמָל", "useTls": "השתמש ב-TLS (LDAPS)", + "useTlsDesc": "Connect over an encrypted LDAPS connection.", "bindDn": "קשר DN", "bindPassword": "קשירת סיסמה", "secretKeep": "סיסמה נשמרה. השאר שדה זה ריק כדי לשמור אותה.", @@ -46,5 +53,8 @@ "groupSearchBase": "בסיס חיפוש קבוצתי", "adminGroup": "קבוצת ניהול", "allowedUsers": "משתמשים מורשים" + }, + "plugin": { + "name": "LDAP" } } diff --git a/plugins/ldap/locales/translated/hi_IN.json b/plugins/ldap/locales/translated/hi_IN.json index 2b88319e6..6dafd3feb 100644 --- a/plugins/ldap/locales/translated/hi_IN.json +++ b/plugins/ldap/locales/translated/hi_IN.json @@ -1,5 +1,5 @@ { - "loginWithLdap": "Sign in with LDAP", + "loginWithLdap": "LDAP के साथ साइन इन करें", "loginWithProvider": "{{name}} से लॉगिन करें", "loading": "लोड हो रहा है...", "requiredField": "यह फ़ील्ड आवश्यक है", @@ -8,37 +8,44 @@ "signIn": "साइन इन करें", "permissions": { "manage": { - "title": "Manage LDAP directories", - "description": "Add, change and remove the LDAP directories people can sign in with." + "title": "LDAP निर्देशिकाओं का प्रबंधन करें", + "description": "उन LDAP डायरेक्टरी को जोड़ें, बदलें और हटाएं जिनका उपयोग लोग साइन इन करने के लिए कर सकते हैं।" } }, "providers": { "docsLink": "दस्तावेज़ देखें", - "none": "No LDAP directories configured.", - "add": "Add Directory", - "edit": "Edit Directory", - "delete": "Delete Directory", - "deleteConfirm": "Delete this directory? Users who sign in with it will not be able to log in.", + "none": "कोई LDAP डायरेक्टरी कॉन्फ़िगर नहीं की गई है।", + "add": "निर्देशिका जोड़ें", + "edit": "निर्देशिका संपादित करें", + "delete": "निर्देशिका हटाएं", + "deleteConfirm": "क्या इस डायरेक्टरी को हटा दें? इसके माध्यम से साइन इन करने वाले उपयोगकर्ता लॉग इन नहीं कर पाएंगे।", "name": "प्रदर्शन नाम", - "namePlaceholder": "Company directory", - "nameRequired": "A display name is required", + "namePlaceholder": "कंपनी निर्देशिका", + "nameRequired": "एक डिस्प्ले नाम आवश्यक है", "enabled": "सक्षम", - "save": "Save Directory", + "enabledDesc": "Let users sign in with this directory.", + "dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.", + "sectionGeneral": "General", + "sectionConnection": "Connection", + "sectionUsers": "User Lookup", + "sectionAccess": "Access", + "save": "निर्देशिका सहेजें", "saving": "सहेजा जा रहा है...", "saved": "सहेजा गया", "saveFailed": "सहेजने में विफल", "deleted": "हटाया गया", "deleteFailed": "हटाने में विफल", - "loadFailed": "Failed to load LDAP directories", + "loadFailed": "LDAP निर्देशिकाओं को लोड करने में विफल", "cancel": "रद्द करें" }, "fields": { "host": "LDAP होस्ट", "port": "पोर्ट", "useTls": "TLS (LDAPS) का उपयोग करें", + "useTlsDesc": "Connect over an encrypted LDAPS connection.", "bindDn": "Bind DN", "bindPassword": "Bind पासवर्ड", - "secretKeep": "A password is saved. Leave this empty to keep it.", + "secretKeep": "पासवर्ड सेव हो गया है। इसे सेव रखने के लिए इसे खाली छोड़ दें।", "userSearchBase": "उपयोगकर्ता खोज आधार", "userSearchFilter": "उपयोगकर्ता खोज फ़िल्टर", "usernameAttr": "उपयोगकर्ता नाम विशेषता", @@ -46,5 +53,8 @@ "groupSearchBase": "समूह खोज आधार", "adminGroup": "व्यवस्थापक समूह", "allowedUsers": "अनुमत उपयोगकर्ता" + }, + "plugin": { + "name": "LDAP" } } diff --git a/plugins/ldap/locales/translated/hu_HU.json b/plugins/ldap/locales/translated/hu_HU.json index e9df723c2..447991999 100644 --- a/plugins/ldap/locales/translated/hu_HU.json +++ b/plugins/ldap/locales/translated/hu_HU.json @@ -23,6 +23,12 @@ "namePlaceholder": "Cégjegyzék", "nameRequired": "Megjelenített név megadása kötelező", "enabled": "Engedélyezve", + "enabledDesc": "Let users sign in with this directory.", + "dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.", + "sectionGeneral": "General", + "sectionConnection": "Connection", + "sectionUsers": "User Lookup", + "sectionAccess": "Access", "save": "Könyvtár mentése", "saving": "Megtakarítás...", "saved": "Mentett", @@ -36,6 +42,7 @@ "host": "LDAP-gazdagép", "port": "Kikötő", "useTls": "TLS (LDAPS) használata", + "useTlsDesc": "Connect over an encrypted LDAPS connection.", "bindDn": "Kötési DN", "bindPassword": "Jelszó kötése", "secretKeep": "A jelszó mentésre került. Hagyja ezt üresen a megőrzéshez.", @@ -46,5 +53,8 @@ "groupSearchBase": "Csoportkeresési bázis", "adminGroup": "Adminisztrátori csoport", "allowedUsers": "Engedélyezett felhasználók" + }, + "plugin": { + "name": "LDAP" } } diff --git a/plugins/ldap/locales/translated/id_ID.json b/plugins/ldap/locales/translated/id_ID.json index cf754c641..d8a629570 100644 --- a/plugins/ldap/locales/translated/id_ID.json +++ b/plugins/ldap/locales/translated/id_ID.json @@ -1,50 +1,60 @@ { - "loginWithLdap": "Sign in with LDAP", - "loginWithProvider": "Login with {{name}}", - "loading": "Loading...", - "requiredField": "This field is required", - "username": "LDAP Username", - "password": "LDAP Password", - "signIn": "Sign In", + "loginWithLdap": "Masuk menggunakan LDAP", + "loginWithProvider": "Masuk dengan {{name}}", + "loading": "Memuat...", + "requiredField": "Kolom ini wajib diisi.", + "username": "Nama Pengguna LDAP", + "password": "Kata Sandi LDAP", + "signIn": "Masuk", "permissions": { "manage": { - "title": "Manage LDAP directories", - "description": "Add, change and remove the LDAP directories people can sign in with." + "title": "Kelola direktori LDAP", + "description": "Menambah, mengubah, dan menghapus direktori LDAP yang dapat digunakan orang untuk masuk." } }, "providers": { - "docsLink": "View docs", - "none": "No LDAP directories configured.", - "add": "Add Directory", - "edit": "Edit Directory", - "delete": "Delete Directory", - "deleteConfirm": "Delete this directory? Users who sign in with it will not be able to log in.", - "name": "Display Name", - "namePlaceholder": "Company directory", - "nameRequired": "A display name is required", - "enabled": "Enabled", - "save": "Save Directory", - "saving": "Saving...", - "saved": "Saved", - "saveFailed": "Failed to save", - "deleted": "Deleted", - "deleteFailed": "Failed to delete", - "loadFailed": "Failed to load LDAP directories", - "cancel": "Cancel" + "docsLink": "Lihat dokumen", + "none": "Tidak ada direktori LDAP yang dikonfigurasi.", + "add": "Tambahkan Direktori", + "edit": "Edit Direktori", + "delete": "Hapus Direktori", + "deleteConfirm": "Hapus direktori ini? Pengguna yang masuk melalui direktori ini tidak akan dapat masuk.", + "name": "Nama Tampilan", + "namePlaceholder": "Direktori perusahaan", + "nameRequired": "Nama tampilan wajib diisi.", + "enabled": "Diaktifkan", + "enabledDesc": "Let users sign in with this directory.", + "dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.", + "sectionGeneral": "General", + "sectionConnection": "Connection", + "sectionUsers": "User Lookup", + "sectionAccess": "Access", + "save": "Simpan Direktori", + "saving": "Penghematan...", + "saved": "Tersimpan", + "saveFailed": "Gagal menyimpan", + "deleted": "Dihapus", + "deleteFailed": "Gagal menghapus", + "loadFailed": "Gagal memuat direktori LDAP", + "cancel": "Membatalkan" }, "fields": { - "host": "LDAP Host", - "port": "Port", - "useTls": "Use TLS (LDAPS)", - "bindDn": "Bind DN", - "bindPassword": "Bind Password", - "secretKeep": "A password is saved. Leave this empty to keep it.", - "userSearchBase": "User Search Base", - "userSearchFilter": "User Search Filter", - "usernameAttr": "Username Attribute", - "displayNameAttr": "Display Name Attribute", - "groupSearchBase": "Group Search Base", - "adminGroup": "Admin Group", - "allowedUsers": "Allowed Users" + "host": "Host LDAP", + "port": "Pelabuhan", + "useTls": "Gunakan TLS (LDAPS)", + "useTlsDesc": "Connect over an encrypted LDAPS connection.", + "bindDn": "Ikat DN", + "bindPassword": "Kata Sandi Terikat", + "secretKeep": "Kata sandi telah tersimpan. Biarkan kosong untuk menyimpannya.", + "userSearchBase": "Basis Pencarian Pengguna", + "userSearchFilter": "Filter Pencarian Pengguna", + "usernameAttr": "Atribut Nama Pengguna", + "displayNameAttr": "Atribut Nama Tampilan", + "groupSearchBase": "Basis Pencarian Grup", + "adminGroup": "Grup Admin", + "allowedUsers": "Pengguna yang Diizinkan" + }, + "plugin": { + "name": "LDAP" } } diff --git a/plugins/ldap/locales/translated/it_IT.json b/plugins/ldap/locales/translated/it_IT.json index aac500f92..3efcb8fd9 100644 --- a/plugins/ldap/locales/translated/it_IT.json +++ b/plugins/ldap/locales/translated/it_IT.json @@ -23,6 +23,12 @@ "namePlaceholder": "Elenco delle aziende", "nameRequired": "È richiesto un nome visualizzato", "enabled": "Abilitato", + "enabledDesc": "Let users sign in with this directory.", + "dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.", + "sectionGeneral": "General", + "sectionConnection": "Connection", + "sectionUsers": "User Lookup", + "sectionAccess": "Access", "save": "Salva directory", "saving": "Salvando...", "saved": "Salvato", @@ -36,6 +42,7 @@ "host": "Host LDAP", "port": "Porta", "useTls": "Usa TLS (LDAPS)", + "useTlsDesc": "Connect over an encrypted LDAPS connection.", "bindDn": "Bind DN", "bindPassword": "Password di bind", "secretKeep": "È stata salvata una password. Lascia questo campo vuoto per mantenerla.", @@ -46,5 +53,8 @@ "groupSearchBase": "Base di ricerca gruppi", "adminGroup": "Gruppo amministratori", "allowedUsers": "Utenti consentiti" + }, + "plugin": { + "name": "LDAP" } } diff --git a/plugins/ldap/locales/translated/ja_JP.json b/plugins/ldap/locales/translated/ja_JP.json index b21e840ae..d44a973c3 100644 --- a/plugins/ldap/locales/translated/ja_JP.json +++ b/plugins/ldap/locales/translated/ja_JP.json @@ -23,6 +23,12 @@ "namePlaceholder": "企業名簿", "nameRequired": "表示名は必須です", "enabled": "有効", + "enabledDesc": "Let users sign in with this directory.", + "dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.", + "sectionGeneral": "General", + "sectionConnection": "Connection", + "sectionUsers": "User Lookup", + "sectionAccess": "Access", "save": "保存先ディレクトリ", "saving": "保存中...", "saved": "保存しました", @@ -36,6 +42,7 @@ "host": "LDAPホスト", "port": "ポート", "useTls": "TLS (LDAPS) を使用", + "useTlsDesc": "Connect over an encrypted LDAPS connection.", "bindDn": "バインドDN", "bindPassword": "バインドパスワード", "secretKeep": "パスワードが保存されます。パスワードを保持するには、この欄を空欄のままにしてください。", @@ -46,5 +53,8 @@ "groupSearchBase": "グループ検索ベース", "adminGroup": "管理者グループ", "allowedUsers": "許可ユーザー" + }, + "plugin": { + "name": "LDAP" } } diff --git a/plugins/ldap/locales/translated/ko_KR.json b/plugins/ldap/locales/translated/ko_KR.json index 65b9ef4c0..a94bbc5e9 100644 --- a/plugins/ldap/locales/translated/ko_KR.json +++ b/plugins/ldap/locales/translated/ko_KR.json @@ -23,6 +23,12 @@ "namePlaceholder": "회사 디렉토리", "nameRequired": "표시 이름은 필수입니다.", "enabled": "사용", + "enabledDesc": "Let users sign in with this directory.", + "dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.", + "sectionGeneral": "General", + "sectionConnection": "Connection", + "sectionUsers": "User Lookup", + "sectionAccess": "Access", "save": "디렉토리 저장", "saving": "저장 중...", "saved": "저장됨", @@ -36,6 +42,7 @@ "host": "LDAP 호스트", "port": "포트", "useTls": "TLS 사용 (LDAPS)", + "useTlsDesc": "Connect over an encrypted LDAPS connection.", "bindDn": "바인딩 DN", "bindPassword": "바인딩 암호", "secretKeep": "비밀번호가 저장됩니다. 비밀번호를 유지하려면 이 필드를 비워 두세요.", @@ -46,5 +53,8 @@ "groupSearchBase": "그룹 검색 기준", "adminGroup": "관리자 그룹", "allowedUsers": "허용 사용자" + }, + "plugin": { + "name": "LDAP" } } diff --git a/plugins/ldap/locales/translated/nl_NL.json b/plugins/ldap/locales/translated/nl_NL.json index 2a3d5ce43..e824f0a84 100644 --- a/plugins/ldap/locales/translated/nl_NL.json +++ b/plugins/ldap/locales/translated/nl_NL.json @@ -23,6 +23,12 @@ "namePlaceholder": "Bedrijfsdirectory", "nameRequired": "Een weergavenaam is verplicht.", "enabled": "Ingeschakeld", + "enabledDesc": "Let users sign in with this directory.", + "dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.", + "sectionGeneral": "General", + "sectionConnection": "Connection", + "sectionUsers": "User Lookup", + "sectionAccess": "Access", "save": "Map opslaan", "saving": "Besparing...", "saved": "Opgeslagen", @@ -36,6 +42,7 @@ "host": "LDAP-host", "port": "Haven", "useTls": "Gebruik TLS (LDAPS)", + "useTlsDesc": "Connect over an encrypted LDAPS connection.", "bindDn": "Bind DN", "bindPassword": "Bind wachtwoord", "secretKeep": "Er wordt een wachtwoord opgeslagen. Laat dit veld leeg om het wachtwoord te behouden.", @@ -46,5 +53,8 @@ "groupSearchBase": "Groepszoekbasis", "adminGroup": "Beheerdersgroep", "allowedUsers": "Toegestane gebruikers" + }, + "plugin": { + "name": "LDAP" } } diff --git a/plugins/ldap/locales/translated/no_NO.json b/plugins/ldap/locales/translated/no_NO.json index 5106f94b4..e30542910 100644 --- a/plugins/ldap/locales/translated/no_NO.json +++ b/plugins/ldap/locales/translated/no_NO.json @@ -1,50 +1,60 @@ { - "loginWithLdap": "Sign in with LDAP", - "loginWithProvider": "Login with {{name}}", + "loginWithLdap": "Logg inn med LDAP", + "loginWithProvider": "Logg inn med {{name}}", "loading": "Laster...", "requiredField": "Dette feltet er obligatorisk", - "username": "LDAP Username", - "password": "LDAP Password", - "signIn": "Sign In", + "username": "LDAP-brukernavn", + "password": "LDAP-passord", + "signIn": "Logg inn", "permissions": { "manage": { - "title": "Manage LDAP directories", - "description": "Add, change and remove the LDAP directories people can sign in with." + "title": "Administrer LDAP-kataloger", + "description": "Legg til, endre og fjern LDAP-katalogene som folk kan logge på med." } }, "providers": { - "docsLink": "View docs", - "none": "No LDAP directories configured.", - "add": "Add Directory", - "edit": "Edit Directory", - "delete": "Delete Directory", - "deleteConfirm": "Delete this directory? Users who sign in with it will not be able to log in.", - "name": "Display Name", - "namePlaceholder": "Company directory", - "nameRequired": "A display name is required", + "docsLink": "Vis dokumenter", + "none": "Ingen LDAP-kataloger er konfigurert.", + "add": "Legg til katalog", + "edit": "Rediger katalog", + "delete": "Slett katalog", + "deleteConfirm": "Vil du slette denne katalogen? Brukere som logger på med den, vil ikke kunne logge på.", + "name": "Visningsnavn", + "namePlaceholder": "Firmakatalog", + "nameRequired": "Et visningsnavn er obligatorisk", "enabled": "Aktivert", - "save": "Save Directory", + "enabledDesc": "Let users sign in with this directory.", + "dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.", + "sectionGeneral": "General", + "sectionConnection": "Connection", + "sectionUsers": "User Lookup", + "sectionAccess": "Access", + "save": "Lagre katalog", "saving": "Lagrer...", - "saved": "Saved", + "saved": "Lagret", "saveFailed": "Kunne ikke lagre", - "deleted": "Deleted", + "deleted": "Slettet", "deleteFailed": "Kunne ikke slette", - "loadFailed": "Failed to load LDAP directories", + "loadFailed": "Kunne ikke laste inn LDAP-kataloger", "cancel": "Avbryt" }, "fields": { - "host": "LDAP Host", - "port": "Port", - "useTls": "Use TLS (LDAPS)", + "host": "LDAP-vert", + "port": "Havn", + "useTls": "Bruk TLS (LDAPS)", + "useTlsDesc": "Connect over an encrypted LDAPS connection.", "bindDn": "Bind DN", - "bindPassword": "Bind Password", - "secretKeep": "A password is saved. Leave this empty to keep it.", - "userSearchBase": "User Search Base", - "userSearchFilter": "User Search Filter", - "usernameAttr": "Username Attribute", - "displayNameAttr": "Display Name Attribute", - "groupSearchBase": "Group Search Base", - "adminGroup": "Admin Group", - "allowedUsers": "Allowed Users" + "bindPassword": "Bind passord", + "secretKeep": "Et passord er lagret. La dette feltet stå tomt for å beholde det.", + "userSearchBase": "Brukersøkbase", + "userSearchFilter": "Brukersøkfilter", + "usernameAttr": "Brukernavnattributt", + "displayNameAttr": "Visningsnavnattributt", + "groupSearchBase": "Gruppesøkbase", + "adminGroup": "Admingruppe", + "allowedUsers": "Tillatte brukere" + }, + "plugin": { + "name": "LDAP" } } diff --git a/plugins/ldap/locales/translated/pl_PL.json b/plugins/ldap/locales/translated/pl_PL.json index 7f3dbb736..10a8a44d4 100644 --- a/plugins/ldap/locales/translated/pl_PL.json +++ b/plugins/ldap/locales/translated/pl_PL.json @@ -1,5 +1,5 @@ { - "loginWithLdap": "Sign in with LDAP", + "loginWithLdap": "Zaloguj się za pomocą LDAP", "loginWithProvider": "Zaloguj się za pomocą {{name}}", "loading": "Ładowanie...", "requiredField": "To pole jest wymagane", @@ -8,37 +8,44 @@ "signIn": "Zaloguj się", "permissions": { "manage": { - "title": "Manage LDAP directories", - "description": "Add, change and remove the LDAP directories people can sign in with." + "title": "Zarządzaj katalogami LDAP", + "description": "Dodawaj, zmieniaj i usuwaj katalogi LDAP, do których użytkownicy mogą się logować." } }, "providers": { "docsLink": "Zobacz dokumentację", - "none": "No LDAP directories configured.", - "add": "Add Directory", - "edit": "Edit Directory", - "delete": "Delete Directory", - "deleteConfirm": "Delete this directory? Users who sign in with it will not be able to log in.", + "none": "Nie skonfigurowano żadnych katalogów LDAP.", + "add": "Dodaj katalog", + "edit": "Edytuj katalog", + "delete": "Usuń katalog", + "deleteConfirm": "Usunąć ten katalog? Użytkownicy, którzy się do niego zalogują, nie będą mogli się zalogować.", "name": "Nazwa wyświetlana", - "namePlaceholder": "Company directory", - "nameRequired": "A display name is required", + "namePlaceholder": "Katalog firm", + "nameRequired": "Wymagana jest nazwa wyświetlana", "enabled": "Włączona", - "save": "Save Directory", + "enabledDesc": "Let users sign in with this directory.", + "dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.", + "sectionGeneral": "General", + "sectionConnection": "Connection", + "sectionUsers": "User Lookup", + "sectionAccess": "Access", + "save": "Zapisz katalog", "saving": "Zapisywanie...", "saved": "Zapisano", "saveFailed": "Nie udało się zapisać", "deleted": "Usunięto", "deleteFailed": "Nie udało się usunąć", - "loadFailed": "Failed to load LDAP directories", + "loadFailed": "Nie udało się załadować katalogów LDAP", "cancel": "Anuluj" }, "fields": { "host": "Host LDAP", "port": "Port", "useTls": "Użyj TLS (LDAPS)", + "useTlsDesc": "Connect over an encrypted LDAPS connection.", "bindDn": "Bind DN", "bindPassword": "Hasło Bind", - "secretKeep": "A password is saved. Leave this empty to keep it.", + "secretKeep": "Hasło zostało zapisane. Pozostaw to pole puste, aby je zachować.", "userSearchBase": "Baza wyszukiwania użytkowników", "userSearchFilter": "Filtr wyszukiwania użytkownika", "usernameAttr": "Atrybut nazwy użytkownika", @@ -46,5 +53,8 @@ "groupSearchBase": "Baza wyszukiwania grup", "adminGroup": "Grupa administratorów", "allowedUsers": "Dozwoleni użytkownicy" + }, + "plugin": { + "name": "LDAP" } } diff --git a/plugins/ldap/locales/translated/pt_BR.json b/plugins/ldap/locales/translated/pt_BR.json index 6f15f231d..602ffd318 100644 --- a/plugins/ldap/locales/translated/pt_BR.json +++ b/plugins/ldap/locales/translated/pt_BR.json @@ -1,50 +1,60 @@ { - "loginWithLdap": "Sign in with LDAP", - "loginWithProvider": "Login with {{name}}", + "loginWithLdap": "Entrar com LDAP", + "loginWithProvider": "Faça login com {{name}}", "loading": "Carregando...", - "requiredField": "This field is required", - "username": "LDAP Username", - "password": "LDAP Password", - "signIn": "Sign In", + "requiredField": "Este campo é obrigatório", + "username": "Nome de usuário LDAP", + "password": "Senha LDAP", + "signIn": "Entrar", "permissions": { "manage": { - "title": "Manage LDAP directories", - "description": "Add, change and remove the LDAP directories people can sign in with." + "title": "Gerenciar diretórios LDAP", + "description": "Adicione, altere e remova os diretórios LDAP com os quais as pessoas podem fazer login." } }, "providers": { "docsLink": "Documentação", - "none": "No LDAP directories configured.", - "add": "Add Directory", - "edit": "Edit Directory", - "delete": "Delete Directory", - "deleteConfirm": "Delete this directory? Users who sign in with it will not be able to log in.", - "name": "Display Name", - "namePlaceholder": "Company directory", - "nameRequired": "A display name is required", - "enabled": "Enabled", - "save": "Save Directory", + "none": "Nenhum diretório LDAP configurado.", + "add": "Adicionar diretório", + "edit": "Editar diretório", + "delete": "Excluir diretório", + "deleteConfirm": "Excluir este diretório? Os usuários que fizerem login com ele não poderão mais acessar sua conta.", + "name": "Nome de exibição", + "namePlaceholder": "Diretório de empresas", + "nameRequired": "É necessário um nome de exibição.", + "enabled": "Habilitado", + "enabledDesc": "Let users sign in with this directory.", + "dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.", + "sectionGeneral": "General", + "sectionConnection": "Connection", + "sectionUsers": "User Lookup", + "sectionAccess": "Access", + "save": "Salvar diretório", "saving": "Salvando...", "saved": "Salvo", "saveFailed": "Falha ao salvar", "deleted": "Apagado", "deleteFailed": "Falha ao apagar", - "loadFailed": "Failed to load LDAP directories", + "loadFailed": "Falha ao carregar os diretórios LDAP.", "cancel": "Cancelar" }, "fields": { - "host": "LDAP Host", + "host": "Host LDAP", "port": "Porta", - "useTls": "Use TLS (LDAPS)", - "bindDn": "Bind DN", - "bindPassword": "Bind Password", - "secretKeep": "A password is saved. Leave this empty to keep it.", - "userSearchBase": "User Search Base", - "userSearchFilter": "User Search Filter", - "usernameAttr": "Username Attribute", - "displayNameAttr": "Display Name Attribute", - "groupSearchBase": "Group Search Base", - "adminGroup": "Admin Group", - "allowedUsers": "Allowed Users" + "useTls": "Usar TLS (LDAPS)", + "useTlsDesc": "Connect over an encrypted LDAPS connection.", + "bindDn": "Vincular DN", + "bindPassword": "Senha de vinculação", + "secretKeep": "Uma senha foi salva. Deixe este campo em branco para mantê-la.", + "userSearchBase": "Base de pesquisa de usuários", + "userSearchFilter": "Filtro de pesquisa do usuário", + "usernameAttr": "Atributo de nome de usuário", + "displayNameAttr": "Atributo de nome de exibição", + "groupSearchBase": "Base de pesquisa de grupo", + "adminGroup": "Grupo de Administração", + "allowedUsers": "Usuários autorizados" + }, + "plugin": { + "name": "LDAP" } } diff --git a/plugins/ldap/locales/translated/pt_PT.json b/plugins/ldap/locales/translated/pt_PT.json index 95374c91d..d864baed4 100644 --- a/plugins/ldap/locales/translated/pt_PT.json +++ b/plugins/ldap/locales/translated/pt_PT.json @@ -1,5 +1,5 @@ { - "loginWithLdap": "Sign in with LDAP", + "loginWithLdap": "Entrar com LDAP", "loginWithProvider": "Iniciar sessão com {{name}}", "loading": "A carregar...", "requiredField": "Este campo é obrigatório", @@ -8,37 +8,44 @@ "signIn": "Iniciar sessão", "permissions": { "manage": { - "title": "Manage LDAP directories", - "description": "Add, change and remove the LDAP directories people can sign in with." + "title": "Gerir diretórios LDAP", + "description": "Adicione, altere e remova os diretórios LDAP com os quais as pessoas podem iniciar sessão." } }, "providers": { "docsLink": "Ver docs", - "none": "No LDAP directories configured.", - "add": "Add Directory", - "edit": "Edit Directory", - "delete": "Delete Directory", - "deleteConfirm": "Delete this directory? Users who sign in with it will not be able to log in.", + "none": "Nenhum diretório LDAP configurado.", + "add": "Adicionar diretório", + "edit": "Editar diretório", + "delete": "Apagar diretório", + "deleteConfirm": "Apagar este diretório? Os utilizadores que fizerem login com ele já não poderão aceder à sua conta.", "name": "Nome de exibição", - "namePlaceholder": "Company directory", - "nameRequired": "A display name is required", + "namePlaceholder": "Diretório de empresas", + "nameRequired": "É necessário um nome de utilizador.", "enabled": "Ativado", - "save": "Save Directory", + "enabledDesc": "Let users sign in with this directory.", + "dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.", + "sectionGeneral": "General", + "sectionConnection": "Connection", + "sectionUsers": "User Lookup", + "sectionAccess": "Access", + "save": "Guardar diretório", "saving": "A guardar...", "saved": "Guardado", "saveFailed": "Falha ao guardar", "deleted": "Eliminado", "deleteFailed": "Falha ao eliminar", - "loadFailed": "Failed to load LDAP directories", + "loadFailed": "Falha ao carregar os diretórios LDAP.", "cancel": "Cancelar" }, "fields": { "host": "Servidor LDAP", "port": "Porta", "useTls": "Usar TLS (LDAPS)", + "useTlsDesc": "Connect over an encrypted LDAPS connection.", "bindDn": "Bind DN", "bindPassword": "Palavra-passe de Bind", - "secretKeep": "A password is saved. Leave this empty to keep it.", + "secretKeep": "Uma palavra-passe foi guardada. Deixe este campo em branco para a manter.", "userSearchBase": "Base de pesquisa de utilizadores", "userSearchFilter": "Filtro de pesquisa de utilizadores", "usernameAttr": "Atributo de nome de utilizador", @@ -46,5 +53,8 @@ "groupSearchBase": "Base de pesquisa de grupos", "adminGroup": "Grupo de administração", "allowedUsers": "Utilizadores permitidos" + }, + "plugin": { + "name": "LDAP" } } diff --git a/plugins/ldap/locales/translated/ro_RO.json b/plugins/ldap/locales/translated/ro_RO.json index 49d5dedcc..ae5def5ec 100644 --- a/plugins/ldap/locales/translated/ro_RO.json +++ b/plugins/ldap/locales/translated/ro_RO.json @@ -23,6 +23,12 @@ "namePlaceholder": "Directorul companiilor", "nameRequired": "Este obligatoriu un nume afișat", "enabled": "Activat", + "enabledDesc": "Let users sign in with this directory.", + "dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.", + "sectionGeneral": "General", + "sectionConnection": "Connection", + "sectionUsers": "User Lookup", + "sectionAccess": "Access", "save": "Salvați directorul", "saving": "Economisire...", "saved": "Salvat", @@ -36,6 +42,7 @@ "host": "Gazdă LDAP", "port": "Port", "useTls": "Utilizați TLS (LDAPS)", + "useTlsDesc": "Connect over an encrypted LDAPS connection.", "bindDn": "Legați DN-ul", "bindPassword": "Parolă de legare", "secretKeep": "O parolă este salvată. Lăsați acest câmp gol pentru a o păstra.", @@ -46,5 +53,8 @@ "groupSearchBase": "Baza de căutare a grupului", "adminGroup": "Grup de administratori", "allowedUsers": "Utilizatori permiși" + }, + "plugin": { + "name": "LDAP" } } diff --git a/plugins/ldap/locales/translated/ru_RU.json b/plugins/ldap/locales/translated/ru_RU.json index 757ba6537..d3c77482b 100644 --- a/plugins/ldap/locales/translated/ru_RU.json +++ b/plugins/ldap/locales/translated/ru_RU.json @@ -1,5 +1,5 @@ { - "loginWithLdap": "Sign in with LDAP", + "loginWithLdap": "Вход через LDAP", "loginWithProvider": "Войти через {{name}}", "loading": "Загрузка...", "requiredField": "Обязательное поле", @@ -8,37 +8,44 @@ "signIn": "Войти", "permissions": { "manage": { - "title": "Manage LDAP directories", - "description": "Add, change and remove the LDAP directories people can sign in with." + "title": "Управление каталогами LDAP", + "description": "Добавляйте, изменяйте и удаляйте каталоги LDAP, через которые пользователи могут входить в систему." } }, "providers": { "docsLink": "Документация", - "none": "No LDAP directories configured.", - "add": "Add Directory", - "edit": "Edit Directory", - "delete": "Delete Directory", - "deleteConfirm": "Delete this directory? Users who sign in with it will not be able to log in.", + "none": "Каталоги LDAP не настроены.", + "add": "Добавить каталог", + "edit": "Редактировать каталог", + "delete": "Удалить каталог", + "deleteConfirm": "Удалить этот каталог? Пользователи, которые войдут в систему с его помощью, не смогут авторизоваться.", "name": "Отображаемое имя", - "namePlaceholder": "Company directory", - "nameRequired": "A display name is required", + "namePlaceholder": "Справочник компаний", + "nameRequired": "Необходимо указать отображаемое имя.", "enabled": "Включено", - "save": "Save Directory", + "enabledDesc": "Let users sign in with this directory.", + "dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.", + "sectionGeneral": "General", + "sectionConnection": "Connection", + "sectionUsers": "User Lookup", + "sectionAccess": "Access", + "save": "Сохранить каталог", "saving": "Сохранение…", "saved": "Сохранено", "saveFailed": "Не удалось сохранить", "deleted": "Удалено", "deleteFailed": "Не удалось удалить", - "loadFailed": "Failed to load LDAP directories", + "loadFailed": "Не удалось загрузить каталоги LDAP.", "cancel": "Отмена" }, "fields": { "host": "LDAP-сервер", "port": "Порт", "useTls": "Использовать TLS (LDAPS)", + "useTlsDesc": "Connect over an encrypted LDAPS connection.", "bindDn": "Bind DN", "bindPassword": "Пароль привязки", - "secretKeep": "A password is saved. Leave this empty to keep it.", + "secretKeep": "Пароль сохранен. Оставьте это поле пустым, чтобы сохранить его.", "userSearchBase": "База поиска пользователей", "userSearchFilter": "Фильтр поиска пользователей", "usernameAttr": "Атрибут имени пользователя", @@ -46,5 +53,8 @@ "groupSearchBase": "База поиска групп", "adminGroup": "Группа администраторов", "allowedUsers": "Разрешенные пользователи" + }, + "plugin": { + "name": "LDAP" } } diff --git a/plugins/ldap/locales/translated/sr_SP.json b/plugins/ldap/locales/translated/sr_SP.json index cf754c641..ef58435b6 100644 --- a/plugins/ldap/locales/translated/sr_SP.json +++ b/plugins/ldap/locales/translated/sr_SP.json @@ -1,50 +1,60 @@ { - "loginWithLdap": "Sign in with LDAP", - "loginWithProvider": "Login with {{name}}", - "loading": "Loading...", - "requiredField": "This field is required", - "username": "LDAP Username", - "password": "LDAP Password", - "signIn": "Sign In", + "loginWithLdap": "Пријавите се помоћу LDAP-а", + "loginWithProvider": "Пријавите се са {{name}}", + "loading": "Учитавање...", + "requiredField": "Ово поље је обавезно", + "username": "LDAP корисничко име", + "password": "LDAP лозинка", + "signIn": "Пријавите се", "permissions": { "manage": { - "title": "Manage LDAP directories", - "description": "Add, change and remove the LDAP directories people can sign in with." + "title": "Управљање LDAP директоријумима", + "description": "Додајте, промените и уклоните LDAP директоријуме помоћу којих се људи могу пријавити." } }, "providers": { - "docsLink": "View docs", - "none": "No LDAP directories configured.", - "add": "Add Directory", - "edit": "Edit Directory", - "delete": "Delete Directory", - "deleteConfirm": "Delete this directory? Users who sign in with it will not be able to log in.", - "name": "Display Name", - "namePlaceholder": "Company directory", - "nameRequired": "A display name is required", - "enabled": "Enabled", - "save": "Save Directory", - "saving": "Saving...", - "saved": "Saved", - "saveFailed": "Failed to save", - "deleted": "Deleted", - "deleteFailed": "Failed to delete", - "loadFailed": "Failed to load LDAP directories", - "cancel": "Cancel" + "docsLink": "Прикажи документе", + "none": "Није конфигурисан ниједан LDAP директоријум.", + "add": "Додај директоријум", + "edit": "Уреди директоријум", + "delete": "Обриши директоријум", + "deleteConfirm": "Да ли желите да обришете овај директоријум? Корисници који се пријаве помоћу њега неће моћи да се пријаве.", + "name": "Приказано име", + "namePlaceholder": "Именик компанија", + "nameRequired": "Потребно је приказано име", + "enabled": "Омогућено", + "enabledDesc": "Let users sign in with this directory.", + "dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.", + "sectionGeneral": "General", + "sectionConnection": "Connection", + "sectionUsers": "User Lookup", + "sectionAccess": "Access", + "save": "Сачувај директоријум", + "saving": "Чување...", + "saved": "Сачувано", + "saveFailed": "Чување није успело", + "deleted": "Избрисано", + "deleteFailed": "Брисање није успело", + "loadFailed": "Учитавање LDAP директоријума није успело", + "cancel": "Откажи" }, "fields": { - "host": "LDAP Host", - "port": "Port", - "useTls": "Use TLS (LDAPS)", - "bindDn": "Bind DN", - "bindPassword": "Bind Password", - "secretKeep": "A password is saved. Leave this empty to keep it.", - "userSearchBase": "User Search Base", - "userSearchFilter": "User Search Filter", - "usernameAttr": "Username Attribute", - "displayNameAttr": "Display Name Attribute", - "groupSearchBase": "Group Search Base", - "adminGroup": "Admin Group", - "allowedUsers": "Allowed Users" + "host": "LDAP хост", + "port": "Лука", + "useTls": "Користите TLS (LDAPS)", + "useTlsDesc": "Connect over an encrypted LDAPS connection.", + "bindDn": "Повезивање DN-а", + "bindPassword": "Повезивање лозинке", + "secretKeep": "Лозинка је сачувана. Оставите ово празно да бисте је задржали.", + "userSearchBase": "База претраге корисника", + "userSearchFilter": "Филтер за претрагу корисника", + "usernameAttr": "Атрибут корисничког имена", + "displayNameAttr": "Атрибут приказаног имена", + "groupSearchBase": "База групне претраге", + "adminGroup": "Администраторска група", + "allowedUsers": "Дозвољени корисници" + }, + "plugin": { + "name": "LDAP" } } diff --git a/plugins/ldap/locales/translated/sv_SE.json b/plugins/ldap/locales/translated/sv_SE.json index cf754c641..226257203 100644 --- a/plugins/ldap/locales/translated/sv_SE.json +++ b/plugins/ldap/locales/translated/sv_SE.json @@ -1,50 +1,60 @@ { - "loginWithLdap": "Sign in with LDAP", - "loginWithProvider": "Login with {{name}}", - "loading": "Loading...", - "requiredField": "This field is required", - "username": "LDAP Username", - "password": "LDAP Password", - "signIn": "Sign In", + "loginWithLdap": "Logga in med LDAP", + "loginWithProvider": "Logga in med {{name}}", + "loading": "Belastning...", + "requiredField": "Detta fält är obligatoriskt", + "username": "LDAP-användarnamn", + "password": "LDAP-lösenord", + "signIn": "Logga in", "permissions": { "manage": { - "title": "Manage LDAP directories", - "description": "Add, change and remove the LDAP directories people can sign in with." + "title": "Hantera LDAP-kataloger", + "description": "Lägg till, ändra och ta bort LDAP-kataloger som personer kan logga in med." } }, "providers": { - "docsLink": "View docs", - "none": "No LDAP directories configured.", - "add": "Add Directory", - "edit": "Edit Directory", - "delete": "Delete Directory", - "deleteConfirm": "Delete this directory? Users who sign in with it will not be able to log in.", - "name": "Display Name", - "namePlaceholder": "Company directory", - "nameRequired": "A display name is required", - "enabled": "Enabled", - "save": "Save Directory", - "saving": "Saving...", - "saved": "Saved", - "saveFailed": "Failed to save", - "deleted": "Deleted", - "deleteFailed": "Failed to delete", - "loadFailed": "Failed to load LDAP directories", - "cancel": "Cancel" + "docsLink": "Visa dokument", + "none": "Inga LDAP-kataloger har konfigurerats.", + "add": "Lägg till katalog", + "edit": "Redigera katalog", + "delete": "Ta bort katalog", + "deleteConfirm": "Vill du ta bort den här katalogen? Användare som loggar in med den kommer inte att kunna logga in.", + "name": "Visningsnamn", + "namePlaceholder": "Företagskatalog", + "nameRequired": "Ett visningsnamn krävs", + "enabled": "Aktiverad", + "enabledDesc": "Let users sign in with this directory.", + "dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.", + "sectionGeneral": "General", + "sectionConnection": "Connection", + "sectionUsers": "User Lookup", + "sectionAccess": "Access", + "save": "Spara katalog", + "saving": "Sparande...", + "saved": "Sparad", + "saveFailed": "Misslyckades med att spara", + "deleted": "Borttagen", + "deleteFailed": "Misslyckades med att radera", + "loadFailed": "Misslyckades med att läsa in LDAP-kataloger", + "cancel": "Avboka" }, "fields": { - "host": "LDAP Host", - "port": "Port", - "useTls": "Use TLS (LDAPS)", + "host": "LDAP-värd", + "port": "Hamn", + "useTls": "Använd TLS (LDAPS)", + "useTlsDesc": "Connect over an encrypted LDAPS connection.", "bindDn": "Bind DN", - "bindPassword": "Bind Password", - "secretKeep": "A password is saved. Leave this empty to keep it.", - "userSearchBase": "User Search Base", - "userSearchFilter": "User Search Filter", - "usernameAttr": "Username Attribute", - "displayNameAttr": "Display Name Attribute", - "groupSearchBase": "Group Search Base", - "adminGroup": "Admin Group", - "allowedUsers": "Allowed Users" + "bindPassword": "Bind lösenord", + "secretKeep": "Ett lösenord har sparats. Lämna detta tomt för att behålla det.", + "userSearchBase": "Användarsökningsbas", + "userSearchFilter": "Användarsökningsfilter", + "usernameAttr": "Användarnamnsattribut", + "displayNameAttr": "Attribut för visningsnamn", + "groupSearchBase": "Gruppsökningsbas", + "adminGroup": "Administratörsgrupp", + "allowedUsers": "Tillåtna användare" + }, + "plugin": { + "name": "LDAP" } } diff --git a/plugins/ldap/locales/translated/th_TH.json b/plugins/ldap/locales/translated/th_TH.json index cf754c641..d4d521215 100644 --- a/plugins/ldap/locales/translated/th_TH.json +++ b/plugins/ldap/locales/translated/th_TH.json @@ -1,50 +1,60 @@ { - "loginWithLdap": "Sign in with LDAP", - "loginWithProvider": "Login with {{name}}", - "loading": "Loading...", - "requiredField": "This field is required", - "username": "LDAP Username", - "password": "LDAP Password", - "signIn": "Sign In", + "loginWithLdap": "ลงชื่อเข้าใช้ด้วย LDAP", + "loginWithProvider": "เข้าสู่ระบบด้วย {{name}}", + "loading": "กำลังโหลด...", + "requiredField": "ช่องนี้จำเป็นต้องกรอก", + "username": "ชื่อผู้ใช้ LDAP", + "password": "รหัสผ่าน LDAP", + "signIn": "เข้าสู่ระบบ", "permissions": { "manage": { - "title": "Manage LDAP directories", - "description": "Add, change and remove the LDAP directories people can sign in with." + "title": "จัดการไดเร็กทอรี LDAP", + "description": "เพิ่ม เปลี่ยนแปลง และลบไดเร็กทอรี LDAP ที่ผู้ใช้สามารถลงชื่อเข้าใช้ได้" } }, "providers": { - "docsLink": "View docs", - "none": "No LDAP directories configured.", - "add": "Add Directory", - "edit": "Edit Directory", - "delete": "Delete Directory", - "deleteConfirm": "Delete this directory? Users who sign in with it will not be able to log in.", - "name": "Display Name", - "namePlaceholder": "Company directory", - "nameRequired": "A display name is required", - "enabled": "Enabled", - "save": "Save Directory", - "saving": "Saving...", - "saved": "Saved", - "saveFailed": "Failed to save", - "deleted": "Deleted", - "deleteFailed": "Failed to delete", - "loadFailed": "Failed to load LDAP directories", - "cancel": "Cancel" + "docsLink": "ดูเอกสาร", + "none": "ไม่มีการกำหนดค่าไดเร็กทอรี LDAP ไว้", + "add": "เพิ่มไดเร็กทอรี", + "edit": "แก้ไขไดเร็กทอรี", + "delete": "ลบไดเร็กทอรี", + "deleteConfirm": "ลบไดเร็กทอรีนี้หรือไม่? ผู้ใช้ที่ลงชื่อเข้าใช้ด้วยไดเร็กทอรีนี้จะไม่สามารถเข้าสู่ระบบได้", + "name": "ชื่อที่แสดง", + "namePlaceholder": "รายชื่อบริษัท", + "nameRequired": "จำเป็นต้องระบุชื่อที่แสดง", + "enabled": "เปิดใช้งาน", + "enabledDesc": "Let users sign in with this directory.", + "dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.", + "sectionGeneral": "General", + "sectionConnection": "Connection", + "sectionUsers": "User Lookup", + "sectionAccess": "Access", + "save": "บันทึกไดเร็กทอรี", + "saving": "ประหยัด...", + "saved": "บันทึกแล้ว", + "saveFailed": "บันทึกไม่สำเร็จ", + "deleted": "ลบแล้ว", + "deleteFailed": "ลบไม่สำเร็จ", + "loadFailed": "ไม่สามารถโหลดไดเร็กทอรี LDAP ได้", + "cancel": "ยกเลิก" }, "fields": { - "host": "LDAP Host", - "port": "Port", - "useTls": "Use TLS (LDAPS)", - "bindDn": "Bind DN", - "bindPassword": "Bind Password", - "secretKeep": "A password is saved. Leave this empty to keep it.", - "userSearchBase": "User Search Base", - "userSearchFilter": "User Search Filter", - "usernameAttr": "Username Attribute", - "displayNameAttr": "Display Name Attribute", - "groupSearchBase": "Group Search Base", - "adminGroup": "Admin Group", - "allowedUsers": "Allowed Users" + "host": "โฮสต์ LDAP", + "port": "ท่าเรือ", + "useTls": "ใช้ TLS (LDAPS)", + "useTlsDesc": "Connect over an encrypted LDAPS connection.", + "bindDn": "ผูก DN", + "bindPassword": "รหัสผ่านผูกมัด", + "secretKeep": "รหัสผ่านถูกบันทึกไว้แล้ว หากต้องการบันทึกรหัสผ่าน ให้เว้นช่องนี้ว่างไว้", + "userSearchBase": "ฐานการค้นหาผู้ใช้", + "userSearchFilter": "ตัวกรองการค้นหาผู้ใช้", + "usernameAttr": "คุณลักษณะชื่อผู้ใช้", + "displayNameAttr": "คุณลักษณะชื่อที่แสดง", + "groupSearchBase": "ฐานการค้นหากลุ่ม", + "adminGroup": "กลุ่มผู้ดูแลระบบ", + "allowedUsers": "ผู้ใช้ที่ได้รับอนุญาต" + }, + "plugin": { + "name": "LDAP" } } diff --git a/plugins/ldap/locales/translated/tr_TR.json b/plugins/ldap/locales/translated/tr_TR.json index 2b321e105..73b3de4e1 100644 --- a/plugins/ldap/locales/translated/tr_TR.json +++ b/plugins/ldap/locales/translated/tr_TR.json @@ -1,5 +1,5 @@ { - "loginWithLdap": "Sign in with LDAP", + "loginWithLdap": "LDAP ile giriş yap", "loginWithProvider": "{{name}} ile giriş yap", "loading": "Yükleniyor...", "requiredField": "Bu alan zorunludur", @@ -8,37 +8,44 @@ "signIn": "Oturum Aç", "permissions": { "manage": { - "title": "Manage LDAP directories", - "description": "Add, change and remove the LDAP directories people can sign in with." + "title": "LDAP dizinlerini yönetin", + "description": "Kullanıcıların oturum açabileceği LDAP dizinlerini ekleyin, değiştirin ve kaldırın." } }, "providers": { "docsLink": "Belgelere bak", - "none": "No LDAP directories configured.", - "add": "Add Directory", - "edit": "Edit Directory", - "delete": "Delete Directory", - "deleteConfirm": "Delete this directory? Users who sign in with it will not be able to log in.", + "none": "Hiçbir LDAP dizini yapılandırılmamış.", + "add": "Dizin Ekle", + "edit": "Dizin Düzenle", + "delete": "Dizini Sil", + "deleteConfirm": "Bu dizini silmek ister misiniz? Bu dizinle giriş yapan kullanıcılar artık giriş yapamayacaklar.", "name": "Görünen Ad", - "namePlaceholder": "Company directory", - "nameRequired": "A display name is required", + "namePlaceholder": "Şirket dizini", + "nameRequired": "Görünen ad gereklidir.", "enabled": "Etkin", - "save": "Save Directory", + "enabledDesc": "Let users sign in with this directory.", + "dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.", + "sectionGeneral": "General", + "sectionConnection": "Connection", + "sectionUsers": "User Lookup", + "sectionAccess": "Access", + "save": "Kaydet", "saving": "Kaydediliyor...", "saved": "Kaydedildi", "saveFailed": "Kaydedilemedi", "deleted": "Silindi", "deleteFailed": "Silinemedi", - "loadFailed": "Failed to load LDAP directories", + "loadFailed": "LDAP dizinleri yüklenemedi.", "cancel": "İptal" }, "fields": { "host": "LDAP Sunucusu", "port": "Port", "useTls": "TLS Kullan (LDAPS)", + "useTlsDesc": "Connect over an encrypted LDAPS connection.", "bindDn": "Bind DN", "bindPassword": "Bind Parolası", - "secretKeep": "A password is saved. Leave this empty to keep it.", + "secretKeep": "Parola kaydedildi. Parolayı saklamak için bu alanı boş bırakın.", "userSearchBase": "Kullanıcı Arama Tabanı", "userSearchFilter": "Kullanıcı Arama Süzgeci", "usernameAttr": "Kullanıcı Adı Özniteliği", @@ -46,5 +53,8 @@ "groupSearchBase": "Grup Arama Tabanı", "adminGroup": "Yönetici Grubu", "allowedUsers": "İzin Verilen Kullanıcılar" + }, + "plugin": { + "name": "LDAP" } } diff --git a/plugins/ldap/locales/translated/uk_UA.json b/plugins/ldap/locales/translated/uk_UA.json index cf754c641..68c608697 100644 --- a/plugins/ldap/locales/translated/uk_UA.json +++ b/plugins/ldap/locales/translated/uk_UA.json @@ -1,50 +1,60 @@ { - "loginWithLdap": "Sign in with LDAP", - "loginWithProvider": "Login with {{name}}", - "loading": "Loading...", - "requiredField": "This field is required", - "username": "LDAP Username", - "password": "LDAP Password", - "signIn": "Sign In", + "loginWithLdap": "Увійти за допомогою LDAP", + "loginWithProvider": "Увійти за допомогою {{name}}", + "loading": "Завантаження...", + "requiredField": "Це поле обов'язкове", + "username": "Ім'я користувача LDAP", + "password": "Пароль LDAP", + "signIn": "Увійти", "permissions": { "manage": { - "title": "Manage LDAP directories", - "description": "Add, change and remove the LDAP directories people can sign in with." + "title": "Керування каталогами LDAP", + "description": "Додавайте, змінюйте та видаляйте каталоги LDAP, за допомогою яких користувачі можуть входити в систему." } }, "providers": { - "docsLink": "View docs", - "none": "No LDAP directories configured.", - "add": "Add Directory", - "edit": "Edit Directory", - "delete": "Delete Directory", - "deleteConfirm": "Delete this directory? Users who sign in with it will not be able to log in.", - "name": "Display Name", - "namePlaceholder": "Company directory", - "nameRequired": "A display name is required", - "enabled": "Enabled", - "save": "Save Directory", - "saving": "Saving...", - "saved": "Saved", - "saveFailed": "Failed to save", - "deleted": "Deleted", - "deleteFailed": "Failed to delete", - "loadFailed": "Failed to load LDAP directories", - "cancel": "Cancel" + "docsLink": "Переглянути документи", + "none": "Не налаштовано жодних каталогів LDAP.", + "add": "Додати каталог", + "edit": "Редагувати каталог", + "delete": "Видалити каталог", + "deleteConfirm": "Видалити цей каталог? Користувачі, які ввійдуть за його допомогою, не зможуть увійти.", + "name": "Відображуване ім'я", + "namePlaceholder": "Довідник компаній", + "nameRequired": "Потрібне відображуване ім'я", + "enabled": "Увімкнено", + "enabledDesc": "Let users sign in with this directory.", + "dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.", + "sectionGeneral": "General", + "sectionConnection": "Connection", + "sectionUsers": "User Lookup", + "sectionAccess": "Access", + "save": "Зберегти каталог", + "saving": "Збереження...", + "saved": "Збережено", + "saveFailed": "Не вдалося зберегти", + "deleted": "Видалено", + "deleteFailed": "Не вдалося видалити", + "loadFailed": "Не вдалося завантажити каталоги LDAP", + "cancel": "Скасувати" }, "fields": { - "host": "LDAP Host", - "port": "Port", - "useTls": "Use TLS (LDAPS)", - "bindDn": "Bind DN", - "bindPassword": "Bind Password", - "secretKeep": "A password is saved. Leave this empty to keep it.", - "userSearchBase": "User Search Base", - "userSearchFilter": "User Search Filter", - "usernameAttr": "Username Attribute", - "displayNameAttr": "Display Name Attribute", - "groupSearchBase": "Group Search Base", - "adminGroup": "Admin Group", - "allowedUsers": "Allowed Users" + "host": "Хост LDAP", + "port": "Порт", + "useTls": "Використовувати TLS (LDAPS)", + "useTlsDesc": "Connect over an encrypted LDAPS connection.", + "bindDn": "Прив'язане DN", + "bindPassword": "Прив’язати пароль", + "secretKeep": "Пароль збережено. Залиште це поле порожнім, щоб зберегти його.", + "userSearchBase": "База пошуку користувачів", + "userSearchFilter": "Фільтр пошуку користувачів", + "usernameAttr": "Атрибут імені користувача", + "displayNameAttr": "Атрибут відображуваного імені", + "groupSearchBase": "База групового пошуку", + "adminGroup": "Група адміністраторів", + "allowedUsers": "Дозволені користувачі" + }, + "plugin": { + "name": "LDAP" } } diff --git a/plugins/ldap/locales/translated/vi_VN.json b/plugins/ldap/locales/translated/vi_VN.json index 5476e1d9a..3ece7c74e 100644 --- a/plugins/ldap/locales/translated/vi_VN.json +++ b/plugins/ldap/locales/translated/vi_VN.json @@ -1,5 +1,5 @@ { - "loginWithLdap": "Sign in with LDAP", + "loginWithLdap": "Đăng nhập bằng LDAP", "loginWithProvider": "Đăng nhập bằng {{name}}", "loading": "Đang tải...", "requiredField": "Trường này là bắt buộc", @@ -8,37 +8,44 @@ "signIn": "Đăng nhập", "permissions": { "manage": { - "title": "Manage LDAP directories", - "description": "Add, change and remove the LDAP directories people can sign in with." + "title": "Quản lý thư mục LDAP", + "description": "Thêm, thay đổi và xóa các thư mục LDAP mà người dùng có thể sử dụng để đăng nhập." } }, "providers": { "docsLink": "Xem tài liệu", - "none": "No LDAP directories configured.", - "add": "Add Directory", - "edit": "Edit Directory", - "delete": "Delete Directory", - "deleteConfirm": "Delete this directory? Users who sign in with it will not be able to log in.", + "none": "Chưa có thư mục LDAP nào được cấu hình.", + "add": "Thêm thư mục", + "edit": "Chỉnh sửa thư mục", + "delete": "Xóa thư mục", + "deleteConfirm": "Xóa thư mục này? Người dùng đăng nhập bằng thư mục này sẽ không thể đăng nhập được nữa.", "name": "Tên hiển thị", - "namePlaceholder": "Company directory", - "nameRequired": "A display name is required", + "namePlaceholder": "Danh bạ công ty", + "nameRequired": "Tên hiển thị là bắt buộc", "enabled": "Đã bật", - "save": "Save Directory", + "enabledDesc": "Let users sign in with this directory.", + "dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.", + "sectionGeneral": "General", + "sectionConnection": "Connection", + "sectionUsers": "User Lookup", + "sectionAccess": "Access", + "save": "Lưu thư mục", "saving": "Đang lưu...", "saved": "Đã lưu", "saveFailed": "Không thể lưu", "deleted": "Đã xóa", "deleteFailed": "Không thể xóa", - "loadFailed": "Failed to load LDAP directories", + "loadFailed": "Không thể tải thư mục LDAP.", "cancel": "Hủy" }, "fields": { "host": "Máy chủ LDAP", "port": "Cổng", "useTls": "Dùng TLS (LDAPS)", + "useTlsDesc": "Connect over an encrypted LDAPS connection.", "bindDn": "Bind DN", "bindPassword": "Mật khẩu Bind", - "secretKeep": "A password is saved. Leave this empty to keep it.", + "secretKeep": "Mật khẩu đã được lưu. Hãy để trống phần này để giữ nguyên.", "userSearchBase": "Cơ sở tìm kiếm người dùng", "userSearchFilter": "Bộ lọc tìm kiếm người dùng", "usernameAttr": "Thuộc tính tên người dùng", @@ -46,5 +53,8 @@ "groupSearchBase": "Cơ sở tìm kiếm nhóm", "adminGroup": "Nhóm Admin", "allowedUsers": "Người dùng được phép" + }, + "plugin": { + "name": "LDAP" } } diff --git a/plugins/ldap/locales/translated/zh_CN.json b/plugins/ldap/locales/translated/zh_CN.json index b08bace81..96919b69d 100644 --- a/plugins/ldap/locales/translated/zh_CN.json +++ b/plugins/ldap/locales/translated/zh_CN.json @@ -9,36 +9,43 @@ "permissions": { "manage": { "title": "管理 LDAP 目录", - "description": "添加、修改和移除可供用户登录的 LDAP 目录。" + "description": "添加、更改和删除用户可用于登录的 LDAP 目录。" } }, "providers": { "docsLink": "查看文档", - "none": "尚未配置 LDAP 目录。", + "none": "未配置 LDAP 目录。", "add": "添加目录", "edit": "编辑目录", "delete": "删除目录", - "deleteConfirm": "删除此目录?依赖该目录登录的用户将无法登录。", + "deleteConfirm": "删除此目录?使用此目录登录的用户将无法登录。", "name": "显示名称", - "namePlaceholder": "公司目录", - "nameRequired": "必须填写显示名称", + "namePlaceholder": "公司名录", + "nameRequired": "必须填写显示名称。", "enabled": "已启用", + "enabledDesc": "Let users sign in with this directory.", + "dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.", + "sectionGeneral": "General", + "sectionConnection": "Connection", + "sectionUsers": "User Lookup", + "sectionAccess": "Access", "save": "保存目录", "saving": "保存中...", "saved": "已保存", "saveFailed": "保存失败", "deleted": "已删除", "deleteFailed": "删除失败", - "loadFailed": "加载 LDAP 目录失败", + "loadFailed": "LDAP 目录加载失败", "cancel": "取消" }, "fields": { "host": "LDAP 主机", "port": "端口", "useTls": "使用 TLS (LDAPS)", + "useTlsDesc": "Connect over an encrypted LDAPS connection.", "bindDn": "绑定 DN", "bindPassword": "绑定密码", - "secretKeep": "已保存密码,留空可保留现有密码。", + "secretKeep": "密码已保存。留空则不保存。", "userSearchBase": "用户搜索基准", "userSearchFilter": "用户搜索过滤器", "usernameAttr": "用户名属性", diff --git a/plugins/ldap/locales/translated/zh_TW.json b/plugins/ldap/locales/translated/zh_TW.json index 15564c31b..597a0ea1b 100644 --- a/plugins/ldap/locales/translated/zh_TW.json +++ b/plugins/ldap/locales/translated/zh_TW.json @@ -1,5 +1,5 @@ { - "loginWithLdap": "Sign in with LDAP", + "loginWithLdap": "使用 LDAP 登入", "loginWithProvider": "使用 {{name}} 登入", "loading": "載入中...", "requiredField": "此欄位為必填", @@ -8,37 +8,44 @@ "signIn": "登入", "permissions": { "manage": { - "title": "Manage LDAP directories", - "description": "Add, change and remove the LDAP directories people can sign in with." + "title": "管理 LDAP 目錄", + "description": "新增、變更和刪除使用者可用於登入的 LDAP 目錄。" } }, "providers": { "docsLink": "檢視文件", - "none": "No LDAP directories configured.", - "add": "Add Directory", - "edit": "Edit Directory", - "delete": "Delete Directory", - "deleteConfirm": "Delete this directory? Users who sign in with it will not be able to log in.", + "none": "未配置 LDAP 目錄。", + "add": "新增目錄", + "edit": "編輯目錄", + "delete": "刪除目錄", + "deleteConfirm": "刪除此目錄?使用此目錄登入的使用者將無法登入。", "name": "顯示名稱", - "namePlaceholder": "Company directory", - "nameRequired": "A display name is required", + "namePlaceholder": "公司名錄", + "nameRequired": "必須填寫顯示名稱。", "enabled": "已啟用", - "save": "Save Directory", + "enabledDesc": "Let users sign in with this directory.", + "dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.", + "sectionGeneral": "General", + "sectionConnection": "Connection", + "sectionUsers": "User Lookup", + "sectionAccess": "Access", + "save": "儲存目錄", "saving": "儲存中…", "saved": "已儲存", "saveFailed": "儲存失敗", "deleted": "已刪除", "deleteFailed": "刪除失敗", - "loadFailed": "Failed to load LDAP directories", + "loadFailed": "LDAP 目錄載入失敗", "cancel": "取消" }, "fields": { "host": "LDAP 主機", "port": "連接埠", "useTls": "使用 TLS (LDAPS)", + "useTlsDesc": "Connect over an encrypted LDAPS connection.", "bindDn": "綁定 DN", "bindPassword": "綁定密碼", - "secretKeep": "A password is saved. Leave this empty to keep it.", + "secretKeep": "密碼已儲存。留空則不保存。", "userSearchBase": "使用者搜尋基底", "userSearchFilter": "使用者搜尋篩選器", "usernameAttr": "使用者名稱屬性", @@ -46,5 +53,8 @@ "groupSearchBase": "群組搜尋基底", "adminGroup": "管理員群組", "allowedUsers": "允許的使用者" + }, + "plugin": { + "name": "LDAP" } } diff --git a/plugins/ldap/src/frontend/ProvidersSetting.tsx b/plugins/ldap/src/frontend/ProvidersSetting.tsx index 61192d7fe..5889eb004 100644 --- a/plugins/ldap/src/frontend/ProvidersSetting.tsx +++ b/plugins/ldap/src/frontend/ProvidersSetting.tsx @@ -5,10 +5,13 @@ import { Button, Dialog, DialogContent, + DialogDescription, DialogHeader, DialogTitle, + FakeSwitch, Input, - Switch, + PasswordInput, + SettingRow, } from "@termix/plugin-sdk/ui"; import { usePluginApi, useTranslation } from "@termix/plugin-sdk/frontend"; import { createLdapApi, type LdapProvider } from "./ldap-api"; @@ -51,9 +54,6 @@ function errorMessage(error: unknown, fallback: string): string { return err.response?.data?.error || err.message || fallback; } -const labelClass = - "text-[10px] font-semibold text-muted-foreground uppercase tracking-widest"; - function Field({ label, required, @@ -66,14 +66,25 @@ function Field({ children: ReactNode; }) { return ( -
-