Merge branch 'dev-2.9.1' into dev-26.10.0

# Conflicts:
#	package-lock.json
#	package.json
#	plugins/ai/locales/translated/af_ZA.json
#	plugins/ai/locales/translated/ar_SA.json
#	plugins/ai/locales/translated/bg_BG.json
#	plugins/ai/locales/translated/bn_BD.json
#	plugins/ai/locales/translated/ca_ES.json
#	plugins/ai/locales/translated/cs_CZ.json
#	plugins/ai/locales/translated/da_DK.json
#	plugins/ai/locales/translated/de_DE.json
#	plugins/ai/locales/translated/el_GR.json
#	plugins/ai/locales/translated/es_ES.json
#	plugins/ai/locales/translated/fi_FI.json
#	plugins/ai/locales/translated/fr_FR.json
#	plugins/ai/locales/translated/he_IL.json
#	plugins/ai/locales/translated/hi_IN.json
#	plugins/ai/locales/translated/hu_HU.json
#	plugins/ai/locales/translated/id_ID.json
#	plugins/ai/locales/translated/it_IT.json
#	plugins/ai/locales/translated/ja_JP.json
#	plugins/ai/locales/translated/ko_KR.json
#	plugins/ai/locales/translated/nl_NL.json
#	plugins/ai/locales/translated/no_NO.json
#	plugins/ai/locales/translated/pl_PL.json
#	plugins/ai/locales/translated/pt_BR.json
#	plugins/ai/locales/translated/pt_PT.json
#	plugins/ai/locales/translated/ro_RO.json
#	plugins/ai/locales/translated/ru_RU.json
#	plugins/ai/locales/translated/sr_SP.json
#	plugins/ai/locales/translated/sv_SE.json
#	plugins/ai/locales/translated/th_TH.json
#	plugins/ai/locales/translated/tr_TR.json
#	plugins/ai/locales/translated/uk_UA.json
#	plugins/ai/locales/translated/vi_VN.json
#	plugins/ai/locales/translated/zh_TW.json
This commit is contained in:
LukeGus committed 2026-10-04 17:34:09 -05:00
commit 6b91c3a460
996 files changed
+56245 -47648

No files matched your search

+11 -1
View File
@@ -17,6 +17,8 @@ https://youtu.be/lngaePO96tM
- Added a reload button when a sign-in verification method fails to load - 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 - 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 - 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 - Completed the Simplified Chinese translation
- Documented cookie and API key sign-in in the API docs - 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 - Too many database writes from session activity
- Host editor tabs being hidden when they did not fit - 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 - 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
<!-- /BUG_FIXES --> <!-- /BUG_FIXES -->
+3 -5
View File
@@ -8,7 +8,9 @@ COPY plugins ./plugins
RUN find plugins -mindepth 2 -maxdepth 2 ! -name package.json ! -name manifest.json -exec rm -rf {} + RUN find plugins -mindepth 2 -maxdepth 2 ! -name package.json ! -name manifest.json -exec rm -rf {} +
# Stage 1: Install dependencies # 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 WORKDIR /app
RUN apt-get update && apt-get install -y python3 make g++ && rm -rf /var/lib/apt/lists/* RUN apt-get update && apt-get install -y python3 make g++ && rm -rf /var/lib/apt/lists/*
@@ -42,10 +44,6 @@ WORKDIR /app
COPY . . 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 RUN npm run build:backend
# Stage 4: Download OPKSSH binary for the target platform so the image works offline # Stage 4: Download OPKSSH binary for the target platform so the image works offline
+12 -4
View File
@@ -840,19 +840,24 @@ export interface PluginHosts {
status: PluginHostStatusApi; 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 type PluginHostStatus = "online" | "reachable" | "offline";
export interface PluginHostStatusEntry { export interface PluginHostStatusEntry {
status: PluginHostStatus; status: PluginHostStatus;
lastChecked: string; lastChecked: string;
/** @deprecated No longer sent. */
reason?: "host_key_changed"; reason?: "host_key_changed";
} }
/** /**
* Core checks every host with status checks on by opening a TCP connection to * 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 * it. A plugin that logs in to hosts can report a working login, which marks
* turns "reachable" into "online". * the host online right away.
*/ */
export interface PluginHostStatusApi { export interface PluginHostStatusApi {
/** /**
@@ -862,7 +867,10 @@ export interface PluginHostStatusApi {
get: (hostId: number) => Promise<PluginHostStatusEntry | null>; get: (hostId: number) => Promise<PluginHostStatusEntry | null>;
/** Checks the host now unless core checked it recently. */ /** Checks the host now unless core checked it recently. */
check: (hostId: number) => Promise<PluginHostStatusEntry | null>; check: (hostId: number) => Promise<PluginHostStatusEntry | null>;
/** 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: ( reportLogin: (
hostId: number, hostId: number,
outcome: { ok: boolean; hostKeyChanged?: boolean }, outcome: { ok: boolean; hostKeyChanged?: boolean },
+5 -3
View File
@@ -76,7 +76,7 @@ export interface PluginHostRecord {
quickConnectSavable?: boolean; quickConnectSavable?: boolean;
/** Assigned when a host is opened in a tab; tells duplicate tabs apart. */ /** Assigned when a host is opened in a tab; tells duplicate tabs apart. */
instanceId?: string; instanceId?: string;
/** Core's status: "online" once a login worked. */ /** Core's status: "online" when the host answers. */
status?: "online" | "reachable" | "offline" | "unknown"; status?: "online" | "reachable" | "offline" | "unknown";
online?: boolean; online?: boolean;
/** Someone else owns this host and shared it with the user. */ /** 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 * Core's status for a host, the one behind the host list's dot. online: the
* login worked. reachable: the port answers. unknown: not checked yet. * 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 { export interface HostStatusInfo {
status: "online" | "reachable" | "offline" | "unknown"; status: "online" | "reachable" | "offline" | "unknown";
/** @deprecated No longer sent. */
reason?: "host_key_changed"; reason?: "host_key_changed";
} }
@@ -54,5 +54,8 @@
"request": "Versoek nou 'n sertifikaat", "request": "Versoek nou 'n sertifikaat",
"requesting": "Versoek sertifikaat...", "requesting": "Versoek sertifikaat...",
"issued": "Sertifikaat uitgereik en geïnstalleer" "issued": "Sertifikaat uitgereik en geïnstalleer"
},
"plugin": {
"name": "ACME Certificates"
} }
} }
@@ -54,5 +54,8 @@
"request": "اطلب الشهادة الآن", "request": "اطلب الشهادة الآن",
"requesting": "جارٍ طلب الشهادة...", "requesting": "جارٍ طلب الشهادة...",
"issued": "تم إصدار الشهادة وتركيبها" "issued": "تم إصدار الشهادة وتركيبها"
},
"plugin": {
"name": "ACME Certificates"
} }
} }
@@ -54,5 +54,8 @@
"request": "Заявете сертификат сега", "request": "Заявете сертификат сега",
"requesting": "Заявка за сертификат...", "requesting": "Заявка за сертификат...",
"issued": "Сертификат издаден и инсталиран" "issued": "Сертификат издаден и инсталиран"
},
"plugin": {
"name": "ACME Certificates"
} }
} }
+35 -32
View File
@@ -1,58 +1,61 @@
{ {
"permissions": { "permissions": {
"manage": { "manage": {
"title": "Manage ACME certificates", "title": "ACME সার্টিফিকেটগুলি পরিচালনা করুন",
"description": "See the certificate status and request a new certificate now." "description": "সার্টিফিকেটের অবস্থা দেখুন এবং এখনই একটি নতুন সার্টিফিকেটের জন্য অনুরোধ করুন।"
} }
}, },
"settings": { "settings": {
"autoRenew": { "autoRenew": {
"label": "Renew automatically", "label": "স্বয়ংক্রিয়ভাবে নবায়ন করুন",
"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." "description": "দিনে দুইবার পরীক্ষা করুন এবং যখন কোনো সার্টিফিকেট থাকবে না, সেটি ডোমেইনকে কভার করবে না, অথবা ৩০ দিনের মধ্যে এর মেয়াদ শেষ হয়ে যাবে, তখন একটি নতুন সার্টিফিকেট সংগ্রহ করুন।"
}, },
"domain": { "domain": {
"label": "Domain", "label": "ডোমেইন",
"description": "The public domain name for the certificate.", "description": "সার্টিফিকেটটির পাবলিক ডোমেইন নাম।",
"placeholder": "termix.example.com" "placeholder": "termix.example.com"
}, },
"email": { "email": {
"label": "Email", "label": "ইমেল",
"description": "Contact email for the ACME account and expiry notices.", "description": "ACME অ্যাকাউন্ট এবং মেয়াদ শেষ হওয়ার বিজ্ঞপ্তির জন্য যোগাযোগের ইমেল।",
"placeholder": "admin@example.com" "placeholder": "admin@example.com"
}, },
"provider": { "provider": {
"label": "Certificate authority", "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", "letsencrypt": "আসুন এনক্রিপ্ট করি",
"letsencryptStaging": "Let's Encrypt (staging)", "letsencryptStaging": "লেটস এনক্রিপ্ট (স্টেজিং)",
"custom": "Custom ACME directory" "custom": "কাস্টম ACME ডিরেক্টরি"
}, },
"directoryUrl": { "directoryUrl": {
"label": "ACME directory URL", "label": "ACME ডিরেক্টরি URL",
"description": "Only for a custom certificate authority. Must be an https URL." "description": "শুধুমাত্র কাস্টম সার্টিফিকেট অথরিটির জন্য। অবশ্যই একটি https URL হতে হবে।"
}, },
"challengeType": { "challengeType": {
"label": "Challenge type", "label": "চ্যালেঞ্জের ধরণ",
"description": "How to prove you own the domain.", "description": "ডোমেইনটির মালিকানা কীভাবে প্রমাণ করবেন।",
"http": "HTTP - needs port 80 reachable from the internet", "http": "HTTP - এর জন্য ইন্টারনেট থেকে পোর্ট ৮০ অ্যাক্সেসযোগ্য হতে হবে।",
"cloudflare": "DNS (Cloudflare) - needs a Cloudflare API token" "cloudflare": "ডিএনএস (ক্লাউডফ্লেয়ার) - একটি ক্লাউডফ্লেয়ার এপিআই টোকেন প্রয়োজন"
}, },
"cloudflareToken": { "cloudflareToken": {
"label": "Cloudflare API token", "label": "ক্লাউডফ্লেয়ার এপিআই টোকেন",
"description": "Scoped token with Zone:DNS:Edit permission for your domain." "description": "আপনার ডোমেনের জন্য Zone:DNS:Edit অনুমতিসহ স্কোপড টোকেন।"
} }
}, },
"status": { "status": {
"title": "Certificate status", "title": "সার্টিফিকেটের অবস্থা",
"none": "No certificate", "none": "কোন সার্টিফিকেট নেই",
"names": "Covers {{names}}", "names": "{{names}} কভার করে",
"issuer": "Issued by {{issuer}}", "issuer": "{{issuer}} দ্বারা জারি করা হয়েছে",
"expires": "Expires {{date}}", "expires": "মেয়াদ শেষ হবে {{date}}",
"lastIssued": "Last issued {{date}}", "lastIssued": "সর্বশেষ প্রকাশিত {{date}}",
"lastError": "Last attempt failed: {{error}}", "lastError": "শেষ চেষ্টা ব্যর্থ: {{error}}",
"missing": "Set the domain, email and the fields your challenge type needs, then save, before requesting a certificate.", "missing": "সার্টিফিকেটের জন্য অনুরোধ করার আগে, ডোমেইন, ইমেল এবং আপনার চ্যালেঞ্জ টাইপের জন্য প্রয়োজনীয় ফিল্ডগুলো সেট করুন, তারপর সেভ করুন।",
"request": "Request certificate now", "request": "এখনই সার্টিফিকেটের জন্য অনুরোধ করুন",
"requesting": "Requesting certificate...", "requesting": "সার্টিফিকেটের জন্য অনুরোধ...",
"issued": "Certificate issued and installed" "issued": "সার্টিফিকেট ইস্যু এবং ইনস্টল করা হয়েছে"
},
"plugin": {
"name": "ACME Certificates"
} }
} }
@@ -54,5 +54,8 @@
"request": "Sol·licita el certificat ara", "request": "Sol·licita el certificat ara",
"requesting": "Sol·licitant certificat...", "requesting": "Sol·licitant certificat...",
"issued": "Certificat emès i instal·lat" "issued": "Certificat emès i instal·lat"
},
"plugin": {
"name": "ACME Certificates"
} }
} }
@@ -54,5 +54,8 @@
"request": "Vyžádejte si certifikát nyní", "request": "Vyžádejte si certifikát nyní",
"requesting": "Žádost o certifikát...", "requesting": "Žádost o certifikát...",
"issued": "Certifikát vydán a nainstalován" "issued": "Certifikát vydán a nainstalován"
},
"plugin": {
"name": "ACME Certificates"
} }
} }
@@ -54,5 +54,8 @@
"request": "Anmod om certifikat nu", "request": "Anmod om certifikat nu",
"requesting": "Anmoder om certifikat...", "requesting": "Anmoder om certifikat...",
"issued": "Certifikat udstedt og installeret" "issued": "Certifikat udstedt og installeret"
},
"plugin": {
"name": "ACME Certificates"
} }
} }
@@ -54,5 +54,8 @@
"request": "Zertifikat jetzt anfordern", "request": "Zertifikat jetzt anfordern",
"requesting": "Zertifikat wird angefordert...", "requesting": "Zertifikat wird angefordert...",
"issued": "Zertifikat ausgestellt und installiert" "issued": "Zertifikat ausgestellt und installiert"
},
"plugin": {
"name": "ACME Certificates"
} }
} }
@@ -54,5 +54,8 @@
"request": "Ζητήστε πιστοποιητικό τώρα", "request": "Ζητήστε πιστοποιητικό τώρα",
"requesting": "Αίτημα πιστοποιητικού...", "requesting": "Αίτημα πιστοποιητικού...",
"issued": "Έκδοση και εγκατάσταση πιστοποιητικού" "issued": "Έκδοση και εγκατάσταση πιστοποιητικού"
},
"plugin": {
"name": "ACME Certificates"
} }
} }
@@ -54,5 +54,8 @@
"request": "Solicita tu certificado ahora", "request": "Solicita tu certificado ahora",
"requesting": "Solicitando certificado...", "requesting": "Solicitando certificado...",
"issued": "Certificado emitido e instalado" "issued": "Certificado emitido e instalado"
},
"plugin": {
"name": "ACME Certificates"
} }
} }
@@ -54,5 +54,8 @@
"request": "Pyydä todistus nyt", "request": "Pyydä todistus nyt",
"requesting": "Pyydetään varmennetta...", "requesting": "Pyydetään varmennetta...",
"issued": "Sertifikaatti myönnetty ja asennettu" "issued": "Sertifikaatti myönnetty ja asennettu"
},
"plugin": {
"name": "ACME Certificates"
} }
} }
@@ -54,5 +54,8 @@
"request": "Demandez votre certificat dès maintenant", "request": "Demandez votre certificat dès maintenant",
"requesting": "Demande de certificat en cours...", "requesting": "Demande de certificat en cours...",
"issued": "Certificat délivré et installé" "issued": "Certificat délivré et installé"
},
"plugin": {
"name": "ACME Certificates"
} }
} }
@@ -54,5 +54,8 @@
"request": "בקשת תעודה עכשיו", "request": "בקשת תעודה עכשיו",
"requesting": "מבקש תעודה...", "requesting": "מבקש תעודה...",
"issued": "תעודה הונפקה והותקנה" "issued": "תעודה הונפקה והותקנה"
},
"plugin": {
"name": "ACME Certificates"
} }
} }
+26 -23
View File
@@ -1,14 +1,14 @@
{ {
"permissions": { "permissions": {
"manage": { "manage": {
"title": "Manage ACME certificates", "title": "ACME प्रमाणपत्रों का प्रबंधन करें",
"description": "See the certificate status and request a new certificate now." "description": "प्रमाणपत्र की स्थिति देखें और अभी नए प्रमाणपत्र के लिए अनुरोध करें।"
} }
}, },
"settings": { "settings": {
"autoRenew": { "autoRenew": {
"label": "Renew automatically", "label": "स्वचालित रूप से नवीनीकरण करें",
"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." "description": "दिन में दो बार जांच करें और यदि कोई प्रमाणपत्र मौजूद नहीं है, या वह डोमेन को कवर नहीं करता है, या 30 दिनों के भीतर समाप्त हो रहा है, तो नया प्रमाणपत्र प्राप्त करें।"
}, },
"domain": { "domain": {
"label": "डोमेन", "label": "डोमेन",
@@ -17,42 +17,45 @@
}, },
"email": { "email": {
"label": "ईमेल", "label": "ईमेल",
"description": "Contact email for the ACME account and expiry notices.", "description": "ACME खाते और समाप्ति सूचनाओं के लिए संपर्क ईमेल पता।",
"placeholder": "admin@example.com" "placeholder": "admin@example.com"
}, },
"provider": { "provider": {
"label": "प्रमाणपत्र प्राधिकरण", "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", "letsencrypt": "आइए एन्क्रिप्ट करें",
"letsencryptStaging": "Let's Encrypt (staging)", "letsencryptStaging": "लेट्स एनक्रिप्ट (चरणबद्ध)",
"custom": "Custom ACME directory" "custom": "कस्टम एसीएमई निर्देशिका"
}, },
"directoryUrl": { "directoryUrl": {
"label": "ACME directory URL", "label": "ACME निर्देशिका URL",
"description": "Only for a custom certificate authority. Must be an https URL." "description": "केवल कस्टम सर्टिफिकेट अथॉरिटी के लिए। यूआरएल HTTPS होना चाहिए।"
}, },
"challengeType": { "challengeType": {
"label": "Challenge type", "label": "चुनौती का प्रकार",
"description": "How to prove you own the domain.", "description": "आप डोमेन के मालिक होने का प्रमाण कैसे दे सकते हैं?",
"http": "HTTP - needs port 80 reachable from the internet", "http": "HTTP - इसके लिए इंटरनेट से पोर्ट 80 तक पहुंच आवश्यक है।",
"cloudflare": "DNS (Cloudflare) - needs a Cloudflare API token" "cloudflare": "DNS (Cloudflare) - इसके लिए Cloudflare API टोकन की आवश्यकता होती है।"
}, },
"cloudflareToken": { "cloudflareToken": {
"label": "Cloudflare API token", "label": "क्लाउडफ्लेयर एपीआई टोकन",
"description": "आपके डोमेन के लिए Zone:DNS:Edit अनुमति वाला स्कोप्ड टोकन।" "description": "आपके डोमेन के लिए Zone:DNS:Edit अनुमति वाला स्कोप्ड टोकन।"
} }
}, },
"status": { "status": {
"title": "Certificate status", "title": "प्रमाणपत्र की स्थिति",
"none": "कोई प्रमाणपत्र नहीं", "none": "कोई प्रमाणपत्र नहीं",
"names": "Covers {{names}}", "names": "कवर {{names}}",
"issuer": "Issued by {{issuer}}", "issuer": "{{issuer}} द्वारा जारी किया गया",
"expires": "{{date}} को समाप्त होगा", "expires": "{{date}} को समाप्त होगा",
"lastIssued": "अंतिम जारी: {{date}}", "lastIssued": "अंतिम जारी: {{date}}",
"lastError": "Last attempt failed: {{error}}", "lastError": "अंतिम प्रयास विफल रहा: {{error}}",
"missing": "Set the domain, email and the fields your challenge type needs, then save, before requesting a certificate.", "missing": "डोमेन, ईमेल और आपके चैलेंज टाइप के लिए आवश्यक फ़ील्ड सेट करें, फिर प्रमाणपत्र का अनुरोध करने से पहले सेव करें।",
"request": "Request certificate now", "request": "अभी प्रमाणपत्र का अनुरोध करें",
"requesting": "प्रमाणपत्र अनुरोध किया जा रहा है...", "requesting": "प्रमाणपत्र अनुरोध किया जा रहा है...",
"issued": "Certificate issued and installed" "issued": "प्रमाणपत्र जारी और स्थापित किया गया"
},
"plugin": {
"name": "ACME Certificates"
} }
} }
@@ -54,5 +54,8 @@
"request": "Igényeljen tanúsítványt most", "request": "Igényeljen tanúsítványt most",
"requesting": "Tanúsítvány kérése...", "requesting": "Tanúsítvány kérése...",
"issued": "Tanúsítvány kiállítva és telepítve" "issued": "Tanúsítvány kiállítva és telepítve"
},
"plugin": {
"name": "ACME Certificates"
} }
} }
+34 -31
View File
@@ -1,58 +1,61 @@
{ {
"permissions": { "permissions": {
"manage": { "manage": {
"title": "Manage ACME certificates", "title": "Kelola sertifikat ACME",
"description": "See the certificate status and request a new certificate now." "description": "Lihat status sertifikat dan ajukan permohonan sertifikat baru sekarang."
} }
}, },
"settings": { "settings": {
"autoRenew": { "autoRenew": {
"label": "Renew automatically", "label": "Perpanjang secara otomatis",
"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." "description": "Periksa dua kali sehari dan dapatkan sertifikat baru jika tidak ada, tidak mencakup domain, atau akan kedaluwarsa dalam 30 hari."
}, },
"domain": { "domain": {
"label": "Domain", "label": "Domain",
"description": "The public domain name for the certificate.", "description": "Nama domain publik untuk sertifikat tersebut.",
"placeholder": "termix.example.com" "placeholder": "termix.example.com"
}, },
"email": { "email": {
"label": "Email", "label": "E-mail",
"description": "Contact email for the ACME account and expiry notices.", "description": "Alamat email kontak untuk akun ACME dan pemberitahuan masa berlaku.",
"placeholder": "admin@example.com" "placeholder": "admin@example.com"
}, },
"provider": { "provider": {
"label": "Certificate authority", "label": "Lembaga sertifikasi",
"description": "Where to get the certificate. Use staging to test without hitting Let's Encrypt rate limits.", "description": "Di mana mendapatkan sertifikat? Gunakan staging untuk pengujian tanpa melampaui batas kuota Let's Encrypt.",
"letsencrypt": "Let's Encrypt", "letsencrypt": "Mari Enkripsi",
"letsencryptStaging": "Let's Encrypt (staging)", "letsencryptStaging": "Let's Encrypt (pementasan)",
"custom": "Custom ACME directory" "custom": "Direktori ACME khusus"
}, },
"directoryUrl": { "directoryUrl": {
"label": "ACME directory URL", "label": "URL direktori ACME",
"description": "Only for a custom certificate authority. Must be an https URL." "description": "Hanya untuk otoritas sertifikat khusus. Harus berupa URL https."
}, },
"challengeType": { "challengeType": {
"label": "Challenge type", "label": "Jenis tantangan",
"description": "How to prove you own the domain.", "description": "Bagaimana cara membuktikan bahwa Anda pemilik domain tersebut.",
"http": "HTTP - needs port 80 reachable from the internet", "http": "HTTP - memerlukan port 80 yang dapat diakses dari internet.",
"cloudflare": "DNS (Cloudflare) - needs a Cloudflare API token" "cloudflare": "DNS (Cloudflare) - memerlukan token API Cloudflare"
}, },
"cloudflareToken": { "cloudflareToken": {
"label": "Cloudflare API token", "label": "Token API Cloudflare",
"description": "Scoped token with Zone:DNS:Edit permission for your domain." "description": "Token terlingkup dengan izin Zone:DNS:Edit untuk domain Anda."
} }
}, },
"status": { "status": {
"title": "Certificate status", "title": "Status sertifikat",
"none": "No certificate", "none": "Tidak ada sertifikat",
"names": "Covers {{names}}", "names": "Sampul {{names}}",
"issuer": "Issued by {{issuer}}", "issuer": "Dikeluarkan oleh {{issuer}}",
"expires": "Expires {{date}}", "expires": "Berakhir {{date}}",
"lastIssued": "Last issued {{date}}", "lastIssued": "Terakhir diterbitkan {{date}}",
"lastError": "Last attempt failed: {{error}}", "lastError": "Upaya terakhir gagal: {{error}}",
"missing": "Set the domain, email and the fields your challenge type needs, then save, before requesting a certificate.", "missing": "Atur domain, email, dan kolom yang dibutuhkan oleh tipe tantangan Anda, lalu simpan, sebelum meminta sertifikat.",
"request": "Request certificate now", "request": "Ajukan sertifikat sekarang",
"requesting": "Requesting certificate...", "requesting": "Meminta sertifikat...",
"issued": "Certificate issued and installed" "issued": "Sertifikat telah diterbitkan dan dipasang."
},
"plugin": {
"name": "ACME Certificates"
} }
} }
@@ -54,5 +54,8 @@
"request": "Richiedi subito il certificato", "request": "Richiedi subito il certificato",
"requesting": "Richiesta certificato in corso...", "requesting": "Richiesta certificato in corso...",
"issued": "Certificato rilasciato e installato" "issued": "Certificato rilasciato e installato"
},
"plugin": {
"name": "ACME Certificates"
} }
} }
@@ -54,5 +54,8 @@
"request": "今すぐ証明書を申請する", "request": "今すぐ証明書を申請する",
"requesting": "証明書をリクエスト中...", "requesting": "証明書をリクエスト中...",
"issued": "証明書が発行され、インストールされました。" "issued": "証明書が発行され、インストールされました。"
},
"plugin": {
"name": "ACME Certificates"
} }
} }
@@ -54,5 +54,8 @@
"request": "지금 인증서를 요청하세요", "request": "지금 인증서를 요청하세요",
"requesting": "인증서 요청 중...", "requesting": "인증서 요청 중...",
"issued": "인증서가 발급 및 설치되었습니다." "issued": "인증서가 발급 및 설치되었습니다."
},
"plugin": {
"name": "ACME Certificates"
} }
} }
@@ -54,5 +54,8 @@
"request": "Vraag nu uw certificaat aan", "request": "Vraag nu uw certificaat aan",
"requesting": "Certificaat aanvragen...", "requesting": "Certificaat aanvragen...",
"issued": "Certificaat afgegeven en geïnstalleerd" "issued": "Certificaat afgegeven en geïnstalleerd"
},
"plugin": {
"name": "ACME Certificates"
} }
} }
+34 -31
View File
@@ -1,58 +1,61 @@
{ {
"permissions": { "permissions": {
"manage": { "manage": {
"title": "Manage ACME certificates", "title": "Administrer ACME-sertifikater",
"description": "See the certificate status and request a new certificate now." "description": "Se sertifikatstatusen og be om et nytt sertifikat nå."
} }
}, },
"settings": { "settings": {
"autoRenew": { "autoRenew": {
"label": "Renew automatically", "label": "Forny automatisk",
"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." "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": { "domain": {
"label": "Domain", "label": "Domene",
"description": "The public domain name for the certificate.", "description": "Det offentlige domenenavnet for sertifikatet.",
"placeholder": "termix.example.com" "placeholder": "termix.example.com"
}, },
"email": { "email": {
"label": "E-post", "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" "placeholder": "admin@example.com"
}, },
"provider": { "provider": {
"label": "Certificate authority", "label": "Sertifikatmyndighet",
"description": "Where to get the certificate. Use staging to test without hitting Let's Encrypt rate limits.", "description": "Hvor får man tak i sertifikatet? Bruk staging for å teste uten å nå hastighetsgrensene til Let's Encrypt.",
"letsencrypt": "Let's Encrypt", "letsencrypt": "La oss kryptere",
"letsencryptStaging": "Let's Encrypt (staging)", "letsencryptStaging": "La oss kryptere (staging)",
"custom": "Custom ACME directory" "custom": "Tilpasset ACME-katalog"
}, },
"directoryUrl": { "directoryUrl": {
"label": "ACME directory URL", "label": "URL-adressen til ACME-katalogen",
"description": "Only for a custom certificate authority. Must be an https URL." "description": "Kun for en tilpasset sertifiseringsinstans. Må være en https-URL."
}, },
"challengeType": { "challengeType": {
"label": "Challenge type", "label": "Utfordringstype",
"description": "How to prove you own the domain.", "description": "Hvordan bevise at du eier domenet.",
"http": "HTTP - needs port 80 reachable from the internet", "http": "HTTP - trenger port 80 som kan nås fra internett",
"cloudflare": "DNS (Cloudflare) - needs a Cloudflare API token" "cloudflare": "DNS (Cloudflare) – trenger et Cloudflare API-token"
}, },
"cloudflareToken": { "cloudflareToken": {
"label": "Cloudflare API token", "label": "Cloudflare API-token",
"description": "Scoped token with Zone:DNS:Edit permission for your domain." "description": "Scope-token med Zone:DNS:Rediger-tillatelse for domenet ditt."
} }
}, },
"status": { "status": {
"title": "Certificate status", "title": "Sertifikatstatus",
"none": "No certificate", "none": "Ingen sertifikat",
"names": "Covers {{names}}", "names": "Omslag {{names}}",
"issuer": "Issued by {{issuer}}", "issuer": "Utstedt av {{issuer}}",
"expires": "Expires {{date}}", "expires": "Utløper {{date}}",
"lastIssued": "Last issued {{date}}", "lastIssued": "Sist utstedt {{date}}",
"lastError": "Last attempt failed: {{error}}", "lastError": "Siste forsøk mislyktes: {{error}}",
"missing": "Set the domain, email and the fields your challenge type needs, then save, before requesting a certificate.", "missing": "Angi domenet, e-postadressen og feltene utfordringstypen din trenger, og lagre deretter før du ber om et sertifikat.",
"request": "Request certificate now", "request": "Be om sertifikat nå",
"requesting": "Requesting certificate...", "requesting": "Ber om sertifikat...",
"issued": "Certificate issued and installed" "issued": "Sertifikat utstedt og installert"
},
"plugin": {
"name": "ACME Certificates"
} }
} }
+26 -23
View File
@@ -1,14 +1,14 @@
{ {
"permissions": { "permissions": {
"manage": { "manage": {
"title": "Manage ACME certificates", "title": "Zarządzaj certyfikatami ACME",
"description": "See the certificate status and request a new certificate now." "description": "Sprawdź status certyfikatu i poproś o nowy certyfikat już teraz."
} }
}, },
"settings": { "settings": {
"autoRenew": { "autoRenew": {
"label": "Renew automatically", "label": "Odnów automatycznie",
"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." "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": { "domain": {
"label": "Domena", "label": "Domena",
@@ -17,42 +17,45 @@
}, },
"email": { "email": {
"label": "E-mail", "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" "placeholder": "admin@example.com"
}, },
"provider": { "provider": {
"label": "Urząd certyfikacji (CA)", "label": "Urząd certyfikacji (CA)",
"description": "Where to get the certificate. Use staging to test without hitting Let's Encrypt rate limits.", "description": "Gdzie uzyskać certyfikat? Użyj środowiska testowego do testowania bez przekraczania limitów przepustowości Let's Encrypt.",
"letsencrypt": "Let's Encrypt", "letsencrypt": "Szyfrujmy",
"letsencryptStaging": "Let's Encrypt (staging)", "letsencryptStaging": "Let's Encrypt (etap przygotowawczy)",
"custom": "Custom ACME directory" "custom": "Niestandardowy katalog ACME"
}, },
"directoryUrl": { "directoryUrl": {
"label": "ACME directory URL", "label": "Adres URL katalogu ACME",
"description": "Only for a custom certificate authority. Must be an https URL." "description": "Tylko dla niestandardowego urzędu certyfikacji. Adres URL musi być w formacie https."
}, },
"challengeType": { "challengeType": {
"label": "Challenge type", "label": "Typ wyzwania",
"description": "How to prove you own the domain.", "description": "Jak udowodnić, że jesteś właścicielem domeny.",
"http": "HTTP - needs port 80 reachable from the internet", "http": "HTTP - wymaga dostępu do portu 80 z Internetu",
"cloudflare": "DNS (Cloudflare) - needs a Cloudflare API token" "cloudflare": "DNS (Cloudflare) – wymaga tokenu API Cloudflare"
}, },
"cloudflareToken": { "cloudflareToken": {
"label": "Cloudflare API token", "label": "Token API Cloudflare",
"description": "Token zakresowy z uprawnieniem Zone:DNS:Edit dla Twojej domeny." "description": "Token zakresowy z uprawnieniem Zone:DNS:Edit dla Twojej domeny."
} }
}, },
"status": { "status": {
"title": "Certificate status", "title": "Status certyfikatu",
"none": "Brak certyfikatu", "none": "Brak certyfikatu",
"names": "Covers {{names}}", "names": "Obejmuje {{names}}",
"issuer": "Issued by {{issuer}}", "issuer": "Wydane przez {{issuer}}",
"expires": "Wygasa {{date}}", "expires": "Wygasa {{date}}",
"lastIssued": "Ostatnio wystawiono {{date}}", "lastIssued": "Ostatnio wystawiono {{date}}",
"lastError": "Last attempt failed: {{error}}", "lastError": "Ostatnia próba nieudana: {{error}}",
"missing": "Set the domain, email and the fields your challenge type needs, then save, before requesting a certificate.", "missing": "Ustaw domenę, adres e-mail i pola, których wymaga Twój typ wyzwania, a następnie zapisz, zanim poprosisz o certyfikat.",
"request": "Request certificate now", "request": "Złóż wniosek o certyfikat już teraz",
"requesting": "Żądanie certyfikatu...", "requesting": "Żądanie certyfikatu...",
"issued": "Certificate issued and installed" "issued": "Certyfikat wydany i zainstalowany"
},
"plugin": {
"name": "ACME Certificates"
} }
} }
+35 -32
View File
@@ -1,58 +1,61 @@
{ {
"permissions": { "permissions": {
"manage": { "manage": {
"title": "Manage ACME certificates", "title": "Gerenciar certificados ACME",
"description": "See the certificate status and request a new certificate now." "description": "Veja o status do certificado e solicite um novo agora mesmo."
} }
}, },
"settings": { "settings": {
"autoRenew": { "autoRenew": {
"label": "Renew automatically", "label": "Renovar automaticamente",
"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." "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": { "domain": {
"label": "Domain", "label": "Domínio",
"description": "The public domain name for the certificate.", "description": "O nome de domínio público do certificado.",
"placeholder": "termix.example.com" "placeholder": "termix.example.com"
}, },
"email": { "email": {
"label": "Email", "label": "E-mail",
"description": "Contact email for the ACME account and expiry notices.", "description": "E-mail de contato para a conta ACME e avisos de vencimento.",
"placeholder": "admin@example.com" "placeholder": "admin@example.com"
}, },
"provider": { "provider": {
"label": "Certificate authority", "label": "Autoridade certificadora",
"description": "Where to get the certificate. Use staging to test without hitting Let's Encrypt rate limits.", "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": "Let's Encrypt", "letsencrypt": "Vamos criptografar",
"letsencryptStaging": "Let's Encrypt (staging)", "letsencryptStaging": "Let's Encrypt (em fase de testes)",
"custom": "Custom ACME directory" "custom": "Diretório ACME personalizado"
}, },
"directoryUrl": { "directoryUrl": {
"label": "ACME directory URL", "label": "URL do diretório ACME",
"description": "Only for a custom certificate authority. Must be an https URL." "description": "Somente para uma autoridade de certificação personalizada. Deve ser um URL https."
}, },
"challengeType": { "challengeType": {
"label": "Challenge type", "label": "Tipo de desafio",
"description": "How to prove you own the domain.", "description": "Como comprovar que você é o proprietário do domínio.",
"http": "HTTP - needs port 80 reachable from the internet", "http": "HTTP - requer que a porta 80 esteja acessível pela internet.",
"cloudflare": "DNS (Cloudflare) - needs a Cloudflare API token" "cloudflare": "DNS (Cloudflare) - requer um token de API do Cloudflare"
}, },
"cloudflareToken": { "cloudflareToken": {
"label": "Cloudflare API token", "label": "Token da API Cloudflare",
"description": "Scoped token with Zone:DNS:Edit permission for your domain." "description": "Token com escopo definido e permissão Zone:DNS:Edit para o seu domínio."
} }
}, },
"status": { "status": {
"title": "Certificate status", "title": "Status do certificado",
"none": "No certificate", "none": "Sem certificado",
"names": "Covers {{names}}", "names": "Capas {{names}}",
"issuer": "Issued by {{issuer}}", "issuer": "Emitido por {{issuer}}",
"expires": "Expires {{date}}", "expires": "Expira em {{date}}",
"lastIssued": "Last issued {{date}}", "lastIssued": "Última edição {{date}}",
"lastError": "Last attempt failed: {{error}}", "lastError": "Última tentativa falhou: {{error}}",
"missing": "Set the domain, email and the fields your challenge type needs, then save, before requesting a certificate.", "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": "Request certificate now", "request": "Solicite o certificado agora",
"requesting": "Requesting certificate...", "requesting": "Solicitar certificado...",
"issued": "Certificate issued and installed" "issued": "Certificado emitido e instalado."
},
"plugin": {
"name": "ACME Certificates"
} }
} }
+26 -23
View File
@@ -1,14 +1,14 @@
{ {
"permissions": { "permissions": {
"manage": { "manage": {
"title": "Manage ACME certificates", "title": "Gerir certificados ACME",
"description": "See the certificate status and request a new certificate now." "description": "Veja o estado do certificado e solicite um novo agora mesmo."
} }
}, },
"settings": { "settings": {
"autoRenew": { "autoRenew": {
"label": "Renew automatically", "label": "Renovar automaticamente",
"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." "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": { "domain": {
"label": "Domínio", "label": "Domínio",
@@ -17,42 +17,45 @@
}, },
"email": { "email": {
"label": "E-mail", "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" "placeholder": "admin@example.com"
}, },
"provider": { "provider": {
"label": "Autoridade de certificação", "label": "Autoridade de certificação",
"description": "Where to get the certificate. Use staging to test without hitting Let's Encrypt rate limits.", "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": "Let's Encrypt", "letsencrypt": "Vamos encriptar",
"letsencryptStaging": "Let's Encrypt (staging)", "letsencryptStaging": "Let's Encrypt (em fase de testes)",
"custom": "Custom ACME directory" "custom": "Diretório ACME personalizado"
}, },
"directoryUrl": { "directoryUrl": {
"label": "ACME directory URL", "label": "URL do diretório ACME",
"description": "Only for a custom certificate authority. Must be an https URL." "description": "Apenas para uma autoridade de certificação personalizada. Deve ser um URL https."
}, },
"challengeType": { "challengeType": {
"label": "Challenge type", "label": "Tipo de desafio",
"description": "How to prove you own the domain.", "description": "Como comprovar que é o proprietário do domínio.",
"http": "HTTP - needs port 80 reachable from the internet", "http": "HTTP - requer que a porta 80 esteja acessível através da internet.",
"cloudflare": "DNS (Cloudflare) - needs a Cloudflare API token" "cloudflare": "DNS (Cloudflare) - requer um token API do Cloudflare"
}, },
"cloudflareToken": { "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." "description": "Token com âmbito e permissão Zone:DNS:Edit para o seu domínio."
} }
}, },
"status": { "status": {
"title": "Certificate status", "title": "Estado do certificado",
"none": "Sem certificado", "none": "Sem certificado",
"names": "Covers {{names}}", "names": "Capas {{names}}",
"issuer": "Issued by {{issuer}}", "issuer": "Emitido por {{issuer}}",
"expires": "Expira a {{date}}", "expires": "Expira a {{date}}",
"lastIssued": "Última emissão a {{date}}", "lastIssued": "Última emissão a {{date}}",
"lastError": "Last attempt failed: {{error}}", "lastError": "Última tentativa falhada: {{error}}",
"missing": "Set the domain, email and the fields your challenge type needs, then save, before requesting a certificate.", "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": "Request certificate now", "request": "Solicite já o certificado",
"requesting": "A solicitar certificado...", "requesting": "A solicitar certificado...",
"issued": "Certificate issued and installed" "issued": "Certificado emitido e instalado."
},
"plugin": {
"name": "ACME Certificates"
} }
} }
@@ -54,5 +54,8 @@
"request": "Solicitați certificatul acum", "request": "Solicitați certificatul acum",
"requesting": "Se solicită certificatul...", "requesting": "Se solicită certificatul...",
"issued": "Certificat emis și instalat" "issued": "Certificat emis și instalat"
},
"plugin": {
"name": "ACME Certificates"
} }
} }
+25 -22
View File
@@ -1,14 +1,14 @@
{ {
"permissions": { "permissions": {
"manage": { "manage": {
"title": "Manage ACME certificates", "title": "Управление сертификатами ACME",
"description": "See the certificate status and request a new certificate now." "description": "Проверьте статус сертификата и запросите новый сертификат прямо сейчас."
} }
}, },
"settings": { "settings": {
"autoRenew": { "autoRenew": {
"label": "Renew automatically", "label": "Автоматическое продление",
"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." "description": "Проверяйте дважды в день и получайте новый сертификат, если его нет, если он не покрывает домен или если срок действия старого истекает в течение 30 дней."
}, },
"domain": { "domain": {
"label": "Домен", "label": "Домен",
@@ -17,42 +17,45 @@
}, },
"email": { "email": {
"label": "Email", "label": "Email",
"description": "Contact email for the ACME account and expiry notices.", "description": "Адрес электронной почты, указанный в учетной записи ACME, для получения уведомлений об истечении срока действия.",
"placeholder": "admin@example.com" "placeholder": "admin@example.com"
}, },
"provider": { "provider": {
"label": "Центр сертификации", "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", "letsencrypt": "Let's Encrypt",
"letsencryptStaging": "Let's Encrypt (staging)", "letsencryptStaging": "Let's Encrypt (тестовая версия)",
"custom": "Custom ACME directory" "custom": "Пользовательский каталог ACME"
}, },
"directoryUrl": { "directoryUrl": {
"label": "ACME directory URL", "label": "URL-адрес каталога ACME",
"description": "Only for a custom certificate authority. Must be an https URL." "description": "Только для пользовательского центра сертификации. URL-адрес должен быть HTTPS."
}, },
"challengeType": { "challengeType": {
"label": "Challenge type", "label": "Тип задачи",
"description": "How to prove you own the domain.", "description": "Как доказать, что вы являетесь владельцем домена.",
"http": "HTTP - needs port 80 reachable from the internet", "http": "HTTP — требуется доступ к порту 80 из интернета.",
"cloudflare": "DNS (Cloudflare) - needs a Cloudflare API token" "cloudflare": "DNS (Cloudflare) — требуется токен API Cloudflare."
}, },
"cloudflareToken": { "cloudflareToken": {
"label": "Cloudflare API token", "label": "API-токен Cloudflare",
"description": "Токен с ограниченной областью действия и разрешением Zone:DNS:Edit для вашего домена." "description": "Токен с ограниченной областью действия и разрешением Zone:DNS:Edit для вашего домена."
} }
}, },
"status": { "status": {
"title": "Certificate status", "title": "Статус сертификата",
"none": "Сертификат отсутствует", "none": "Сертификат отсутствует",
"names": "Covers {{names}}", "names": "Обложки {{names}}",
"issuer": "Issued by {{issuer}}", "issuer": "Выпущено {{issuer}}",
"expires": "Истекает {{date}}", "expires": "Истекает {{date}}",
"lastIssued": "Последний выпуск {{date}}", "lastIssued": "Последний выпуск {{date}}",
"lastError": "Last attempt failed: {{error}}", "lastError": "Последняя попытка не удалась: {{error}}",
"missing": "Set the domain, email and the fields your challenge type needs, then save, before requesting a certificate.", "missing": "Укажите домен, адрес электронной почты и поля, необходимые для типа проверки подлинности, затем сохраните изменения, прежде чем запрашивать сертификат.",
"request": "Request certificate now", "request": "Запросить сертификат сейчас",
"requesting": "Запрос сертификата...", "requesting": "Запрос сертификата...",
"issued": "Certificate issued and installed" "issued": "Сертификат выдан и установлен."
},
"plugin": {
"name": "ACME Certificates"
} }
} }
+35 -32
View File
@@ -1,58 +1,61 @@
{ {
"permissions": { "permissions": {
"manage": { "manage": {
"title": "Manage ACME certificates", "title": "Управљање ACME сертификатима",
"description": "See the certificate status and request a new certificate now." "description": "Погледајте статус сертификата и одмах затражите нови сертификат."
} }
}, },
"settings": { "settings": {
"autoRenew": { "autoRenew": {
"label": "Renew automatically", "label": "Аутоматски обнови",
"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." "description": "Проверавајте два пута дневно и набавите нови сертификат када га нема, када не покрива домен или када истиче у року од 30 дана."
}, },
"domain": { "domain": {
"label": "Domain", "label": "Домен",
"description": "The public domain name for the certificate.", "description": "Јавно име домена за сертификат.",
"placeholder": "termix.example.com" "placeholder": "termix.example.com"
}, },
"email": { "email": {
"label": "Email", "label": "Е-пошта",
"description": "Contact email for the ACME account and expiry notices.", "description": "Контакт имејл за ACME налог и обавештења о истеку.",
"placeholder": "admin@example.com" "placeholder": "admin@example.com"
}, },
"provider": { "provider": {
"label": "Certificate authority", "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", "letsencrypt": "Хајде да шифрујемо",
"letsencryptStaging": "Let's Encrypt (staging)", "letsencryptStaging": "Хајде да шифрујемо (припрема)",
"custom": "Custom ACME directory" "custom": "Прилагођени ACME директоријум"
}, },
"directoryUrl": { "directoryUrl": {
"label": "ACME directory URL", "label": "URL ACME директоријума",
"description": "Only for a custom certificate authority. Must be an https URL." "description": "Само за прилагођени ауторитет за сертификате. Мора бити https URL."
}, },
"challengeType": { "challengeType": {
"label": "Challenge type", "label": "Тип изазова",
"description": "How to prove you own the domain.", "description": "Како доказати да сте власник домена.",
"http": "HTTP - needs port 80 reachable from the internet", "http": "HTTP - потребан је порт 80 доступан са интернета",
"cloudflare": "DNS (Cloudflare) - needs a Cloudflare API token" "cloudflare": "DNS (Cloudflare) - потребан је Cloudflare API токен"
}, },
"cloudflareToken": { "cloudflareToken": {
"label": "Cloudflare API token", "label": "Клаудфлејр АПИ токен",
"description": "Scoped token with Zone:DNS:Edit permission for your domain." "description": "Ограничени токен са дозволом Zone:DNS:Edit за ваш домен."
} }
}, },
"status": { "status": {
"title": "Certificate status", "title": "Статус сертификата",
"none": "No certificate", "none": "Без сертификата",
"names": "Covers {{names}}", "names": "Навлаке {{names}}",
"issuer": "Issued by {{issuer}}", "issuer": "Издао/ла {{issuer}}",
"expires": "Expires {{date}}", "expires": "Истиче {{date}}",
"lastIssued": "Last issued {{date}}", "lastIssued": "Последње издање {{date}}",
"lastError": "Last attempt failed: {{error}}", "lastError": "Последњи покушај није успео: {{error}}",
"missing": "Set the domain, email and the fields your challenge type needs, then save, before requesting a certificate.", "missing": "Подесите домен, имејл адресу и поља која су потребна вашем типу изазова, а затим сачувајте подешавања пре него што затражите сертификат.",
"request": "Request certificate now", "request": "Затражите сертификат сада",
"requesting": "Requesting certificate...", "requesting": "Захтева се сертификат...",
"issued": "Certificate issued and installed" "issued": "Сертификат издат и инсталиран"
},
"plugin": {
"name": "ACME Certificates"
} }
} }
+35 -32
View File
@@ -1,58 +1,61 @@
{ {
"permissions": { "permissions": {
"manage": { "manage": {
"title": "Manage ACME certificates", "title": "Hantera ACME-certifikat",
"description": "See the certificate status and request a new certificate now." "description": "Se certifikatets status och begär ett nytt certifikat nu."
} }
}, },
"settings": { "settings": {
"autoRenew": { "autoRenew": {
"label": "Renew automatically", "label": "Förnya automatiskt",
"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." "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": { "domain": {
"label": "Domain", "label": "Domän",
"description": "The public domain name for the certificate.", "description": "Det offentliga domännamnet för certifikatet.",
"placeholder": "termix.example.com" "placeholder": "termix.example.com"
}, },
"email": { "email": {
"label": "Email", "label": "E-post",
"description": "Contact email for the ACME account and expiry notices.", "description": "Kontakta e-postadressen för ACME-kontot och meddelanden om utgångsdatum.",
"placeholder": "admin@example.com" "placeholder": "admin@example.com"
}, },
"provider": { "provider": {
"label": "Certificate authority", "label": "Certifikatutfärdare",
"description": "Where to get the certificate. Use staging to test without hitting Let's Encrypt rate limits.", "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": "Let's Encrypt", "letsencrypt": "Låt oss kryptera",
"letsencryptStaging": "Let's Encrypt (staging)", "letsencryptStaging": "Låt oss kryptera (staging)",
"custom": "Custom ACME directory" "custom": "Anpassad ACME-katalog"
}, },
"directoryUrl": { "directoryUrl": {
"label": "ACME directory URL", "label": "ACME-katalogens URL",
"description": "Only for a custom certificate authority. Must be an https URL." "description": "Endast för en anpassad certifikatutfärdare. Måste vara en https-URL."
}, },
"challengeType": { "challengeType": {
"label": "Challenge type", "label": "Utmaningstyp",
"description": "How to prove you own the domain.", "description": "Hur man bevisar att man äger domänen.",
"http": "HTTP - needs port 80 reachable from the internet", "http": "HTTP - behöver port 80 som kan nås från internet",
"cloudflare": "DNS (Cloudflare) - needs a Cloudflare API token" "cloudflare": "DNS (Cloudflare) - behöver en Cloudflare API-token"
}, },
"cloudflareToken": { "cloudflareToken": {
"label": "Cloudflare API token", "label": "Cloudflare API-token",
"description": "Scoped token with Zone:DNS:Edit permission for your domain." "description": "Scoped-token med Zone:DNS:Edit-behörighet för din domän."
} }
}, },
"status": { "status": {
"title": "Certificate status", "title": "Certifikatstatus",
"none": "No certificate", "none": "Inget certifikat",
"names": "Covers {{names}}", "names": "Omslag {{names}}",
"issuer": "Issued by {{issuer}}", "issuer": "Utfärdad av {{issuer}}",
"expires": "Expires {{date}}", "expires": "Utgångsdatum {{date}}",
"lastIssued": "Last issued {{date}}", "lastIssued": "Senast utfärdad {{date}}",
"lastError": "Last attempt failed: {{error}}", "lastError": "Senaste försöket misslyckades: {{error}}",
"missing": "Set the domain, email and the fields your challenge type needs, then save, before requesting a certificate.", "missing": "Ange domän, e-postadress och de fält som din utmaningstyp behöver, spara sedan innan du begär ett certifikat.",
"request": "Request certificate now", "request": "Begär certifikat nu",
"requesting": "Requesting certificate...", "requesting": "Begär certifikat...",
"issued": "Certificate issued and installed" "issued": "Certifikat utfärdat och installerat"
},
"plugin": {
"name": "ACME Certificates"
} }
} }
+36 -33
View File
@@ -1,58 +1,61 @@
{ {
"permissions": { "permissions": {
"manage": { "manage": {
"title": "Manage ACME certificates", "title": "จัดการใบรับรอง ACME",
"description": "See the certificate status and request a new certificate now." "description": "ตรวจสอบสถานะใบรับรองและขอใบรับรองใหม่ได้เลยตอนนี้"
} }
}, },
"settings": { "settings": {
"autoRenew": { "autoRenew": {
"label": "Renew automatically", "label": "ต่ออายุอัตโนมัติ",
"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." "description": "ตรวจสอบวันละสองครั้ง และขอใบรับรองใหม่เมื่อไม่มีใบรับรอง หากใบรับรองไม่ครอบคลุมโดเมน หรือหากใบรับรองหมดอายุภายใน 30 วัน"
}, },
"domain": { "domain": {
"label": "Domain", "label": "โดเมน",
"description": "The public domain name for the certificate.", "description": "ชื่อโดเมนสาธารณะสำหรับใบรับรอง",
"placeholder": "termix.example.com" "placeholder": "เทอร์มิกซ์.ตัวอย่าง.com"
}, },
"email": { "email": {
"label": "Email", "label": "อีเมล",
"description": "Contact email for the ACME account and expiry notices.", "description": "อีเมลสำหรับติดต่อเพื่อรับข้อมูลเกี่ยวกับบัญชี ACME และประกาศแจ้งเตือนวันหมดอายุ",
"placeholder": "admin@example.com" "placeholder": "admin@example.com"
}, },
"provider": { "provider": {
"label": "Certificate authority", "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", "letsencrypt": "เลทส์ เอนคริปท์",
"letsencryptStaging": "Let's Encrypt (staging)", "letsencryptStaging": "Let's Encrypt (รุ่นทดสอบ)",
"custom": "Custom ACME directory" "custom": "ไดเร็กทอรี ACME แบบกำหนดเอง"
}, },
"directoryUrl": { "directoryUrl": {
"label": "ACME directory URL", "label": "URL ของไดเร็กทอรี ACME",
"description": "Only for a custom certificate authority. Must be an https URL." "description": "ใช้ได้เฉพาะกับหน่วยงานออกใบรับรองที่กำหนดเองเท่านั้น ต้องเป็น URL ที่ใช้ HTTPS"
}, },
"challengeType": { "challengeType": {
"label": "Challenge type", "label": "ประเภทความท้าทาย",
"description": "How to prove you own the domain.", "description": "วิธีพิสูจน์ว่าคุณเป็นเจ้าของโดเมน",
"http": "HTTP - needs port 80 reachable from the internet", "http": "HTTP - ต้องมีพอร์ต 80 ที่สามารถเข้าถึงได้จากอินเทอร์เน็ต",
"cloudflare": "DNS (Cloudflare) - needs a Cloudflare API token" "cloudflare": "DNS (Cloudflare) - ต้องใช้โทเค็น API ของ Cloudflare"
}, },
"cloudflareToken": { "cloudflareToken": {
"label": "Cloudflare API token", "label": "โทเค็น API ของ Cloudflare",
"description": "Scoped token with Zone:DNS:Edit permission for your domain." "description": "โทเค็นแบบจำกัดขอบเขตพร้อมสิทธิ์ Zone:DNS:Edit สำหรับโดเมนของคุณ"
} }
}, },
"status": { "status": {
"title": "Certificate status", "title": "สถานะใบรับรอง",
"none": "No certificate", "none": "ไม่มีใบรับรอง",
"names": "Covers {{names}}", "names": "ปก {{names}}",
"issuer": "Issued by {{issuer}}", "issuer": "ออกโดย {{issuer}}",
"expires": "Expires {{date}}", "expires": "หมดอายุ {{date}}",
"lastIssued": "Last issued {{date}}", "lastIssued": "ออกครั้งล่าสุด {{date}}",
"lastError": "Last attempt failed: {{error}}", "lastError": "ความพยายามครั้งล่าสุดล้มเหลว: {{error}}",
"missing": "Set the domain, email and the fields your challenge type needs, then save, before requesting a certificate.", "missing": "ตั้งค่าโดเมน อีเมล และข้อมูลที่จำเป็นสำหรับประเภทการตรวจสอบสิทธิ์ของคุณ จากนั้นบันทึกก่อนที่จะขอใบรับรอง",
"request": "Request certificate now", "request": "ขอใบรับรองตอนนี้",
"requesting": "Requesting certificate...", "requesting": "ขอใบรับรอง...",
"issued": "Certificate issued and installed" "issued": "ออกและติดตั้งใบรับรองแล้ว"
},
"plugin": {
"name": "ACME Certificates"
} }
} }
+25 -22
View File
@@ -1,14 +1,14 @@
{ {
"permissions": { "permissions": {
"manage": { "manage": {
"title": "Manage ACME certificates", "title": "ACME sertifikalarını yönetin",
"description": "See the certificate status and request a new certificate now." "description": "Sertifika durumunu kontrol edin ve şimdi yeni bir sertifika talep edin."
} }
}, },
"settings": { "settings": {
"autoRenew": { "autoRenew": {
"label": "Renew automatically", "label": "Otomatik olarak yenile",
"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." "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": { "domain": {
"label": "Alan Adı", "label": "Alan Adı",
@@ -17,42 +17,45 @@
}, },
"email": { "email": {
"label": "E-posta", "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" "placeholder": "admin@example.com"
}, },
"provider": { "provider": {
"label": "Sertifika yetkilisi", "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", "letsencrypt": "Let's Encrypt",
"letsencryptStaging": "Let's Encrypt (staging)", "letsencryptStaging": "Let's Encrypt (test aşaması)",
"custom": "Custom ACME directory" "custom": "Özel ACME dizini"
}, },
"directoryUrl": { "directoryUrl": {
"label": "ACME directory URL", "label": "ACME dizin URL'si",
"description": "Only for a custom certificate authority. Must be an https URL." "description": "Yalnızca özel sertifika yetkilisi için geçerlidir. HTTPS URL'si olmalıdır."
}, },
"challengeType": { "challengeType": {
"label": "Challenge type", "label": "Meydan okuma türü",
"description": "How to prove you own the domain.", "description": "Alan adının size ait olduğunu nasıl kanıtlayabilirsiniz?",
"http": "HTTP - needs port 80 reachable from the internet", "http": "HTTP - internetten erişilebilir 80 numaralı porta ihtiyaç duyar.",
"cloudflare": "DNS (Cloudflare) - needs a Cloudflare API token" "cloudflare": "DNS (Cloudflare) - Cloudflare API belirteci gerektirir."
}, },
"cloudflareToken": { "cloudflareToken": {
"label": "Cloudflare API token", "label": "Cloudflare API belirteci",
"description": "Alan adınız için Zone:DNS:Edit iznine sahip kapsamlı belirteç." "description": "Alan adınız için Zone:DNS:Edit iznine sahip kapsamlı belirteç."
} }
}, },
"status": { "status": {
"title": "Certificate status", "title": "Sertifika durumu",
"none": "Sertifika yok", "none": "Sertifika yok",
"names": "Covers {{names}}", "names": "Kapaklar {{names}}",
"issuer": "Issued by {{issuer}}", "issuer": "{{issuer}} tarafından yayınlandı",
"expires": "Son kullanma: {{date}}", "expires": "Son kullanma: {{date}}",
"lastIssued": "Son veriliş: {{date}}", "lastIssued": "Son veriliş: {{date}}",
"lastError": "Last attempt failed: {{error}}", "lastError": "Son deneme başarısız oldu: {{error}}",
"missing": "Set the domain, email and the fields your challenge type needs, then save, before requesting a certificate.", "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": "Request certificate now", "request": "Şimdi sertifika talep edin",
"requesting": "Sertifika isteniyor...", "requesting": "Sertifika isteniyor...",
"issued": "Certificate issued and installed" "issued": "Sertifika düzenlendi ve kuruldu."
},
"plugin": {
"name": "ACME Certificates"
} }
} }
+35 -32
View File
@@ -1,58 +1,61 @@
{ {
"permissions": { "permissions": {
"manage": { "manage": {
"title": "Manage ACME certificates", "title": "Керування сертифікатами ACME",
"description": "See the certificate status and request a new certificate now." "description": "Перегляньте статус сертифіката та запросіть новий сертифікат зараз."
} }
}, },
"settings": { "settings": {
"autoRenew": { "autoRenew": {
"label": "Renew automatically", "label": "Автоматичне поновлення",
"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." "description": "Перевіряйте двічі на день та отримуйте новий сертифікат, коли його немає, він не поширюється на домен або термін його дії закінчується протягом 30 днів."
}, },
"domain": { "domain": {
"label": "Domain", "label": "Домен",
"description": "The public domain name for the certificate.", "description": "Ім'я публічного домену для сертифіката.",
"placeholder": "termix.example.com" "placeholder": "termix.example.com"
}, },
"email": { "email": {
"label": "Email", "label": "Електронна пошта",
"description": "Contact email for the ACME account and expiry notices.", "description": "Контактна електронна адреса для облікового запису ACME та повідомлень про закінчення терміну дії.",
"placeholder": "admin@example.com" "placeholder": "admin@example.com"
}, },
"provider": { "provider": {
"label": "Certificate authority", "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", "letsencrypt": "Давайте зашифруємо",
"letsencryptStaging": "Let's Encrypt (staging)", "letsencryptStaging": "Давайте зашифруємо (підготовка)",
"custom": "Custom ACME directory" "custom": "Користувацький каталог ACME"
}, },
"directoryUrl": { "directoryUrl": {
"label": "ACME directory URL", "label": "URL-адреса каталогу ACME",
"description": "Only for a custom certificate authority. Must be an https URL." "description": "Тільки для власного центру сертифікації. Має бути URL-адреса https."
}, },
"challengeType": { "challengeType": {
"label": "Challenge type", "label": "Тип виклику",
"description": "How to prove you own the domain.", "description": "Як довести, що ви є власником домену.",
"http": "HTTP - needs port 80 reachable from the internet", "http": "HTTP – потрібен порт 80, доступний з Інтернету",
"cloudflare": "DNS (Cloudflare) - needs a Cloudflare API token" "cloudflare": "DNS (Cloudflare) – потрібен токен API Cloudflare"
}, },
"cloudflareToken": { "cloudflareToken": {
"label": "Cloudflare API token", "label": "Токен API Cloudflare",
"description": "Scoped token with Zone:DNS:Edit permission for your domain." "description": "Токен з обмеженою областю дії та дозволом Zone:DNS:Edit для вашого домену."
} }
}, },
"status": { "status": {
"title": "Certificate status", "title": "Статус сертифіката",
"none": "No certificate", "none": "Без сертифіката",
"names": "Covers {{names}}", "names": "Обкладинки {{names}}",
"issuer": "Issued by {{issuer}}", "issuer": "Видано {{issuer}}",
"expires": "Expires {{date}}", "expires": "Термін дії закінчується {{date}}",
"lastIssued": "Last issued {{date}}", "lastIssued": "Останній виданий {{date}}",
"lastError": "Last attempt failed: {{error}}", "lastError": "Остання спроба не вдалася: {{error}}",
"missing": "Set the domain, email and the fields your challenge type needs, then save, before requesting a certificate.", "missing": "Вкажіть домен, електронну пошту та поля, необхідні для вашого типу завдання, а потім збережіть зміни, перш ніж запитувати сертифікат.",
"request": "Request certificate now", "request": "Замовити сертифікат зараз",
"requesting": "Requesting certificate...", "requesting": "Запит сертифіката...",
"issued": "Certificate issued and installed" "issued": "Сертифікат видано та встановлено"
},
"plugin": {
"name": "ACME Certificates"
} }
} }
+26 -23
View File
@@ -1,14 +1,14 @@
{ {
"permissions": { "permissions": {
"manage": { "manage": {
"title": "Manage ACME certificates", "title": "Quản lý chứng chỉ ACME",
"description": "See the certificate status and request a new certificate now." "description": "Xem trạng thái chứng chỉ và yêu cầu chứng chỉ mới ngay bây giờ."
} }
}, },
"settings": { "settings": {
"autoRenew": { "autoRenew": {
"label": "Renew automatically", "label": "Tự động gia hạn",
"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." "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": { "domain": {
"label": "Tên miền", "label": "Tên miền",
@@ -17,42 +17,45 @@
}, },
"email": { "email": {
"label": "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" "placeholder": "admin@example.com"
}, },
"provider": { "provider": {
"label": "Cơ quan chứng thực", "label": "Cơ quan chứng thực",
"description": "Where to get the certificate. Use staging to test without hitting Let's Encrypt rate limits.", "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": "Let's Encrypt", "letsencrypt": "Hãy mã hóa",
"letsencryptStaging": "Let's Encrypt (staging)", "letsencryptStaging": "Let's Encrypt (phiên bản thử nghiệm)",
"custom": "Custom ACME directory" "custom": "Danh mục ACME tùy chỉnh"
}, },
"directoryUrl": { "directoryUrl": {
"label": "ACME directory URL", "label": "URL thư mục ACME",
"description": "Only for a custom certificate authority. Must be an https URL." "description": "Chỉ dành cho cơ quan cấp chứng chỉ tùy chỉnh. Phải là URL HTTPS."
}, },
"challengeType": { "challengeType": {
"label": "Challenge type", "label": "Loại thử thách",
"description": "How to prove you own the domain.", "description": "Cách chứng minh bạn sở hữu tên miền.",
"http": "HTTP - needs port 80 reachable from the internet", "http": "HTTP - cần cổng 80 có thể truy cập được từ internet",
"cloudflare": "DNS (Cloudflare) - needs a Cloudflare API token" "cloudflare": "DNS (Cloudflare) - cần mã thông báo API của Cloudflare."
}, },
"cloudflareToken": { "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." "description": "Token có phạm vi với quyền Zone:DNS:Edit cho tên miền của bạn."
} }
}, },
"status": { "status": {
"title": "Certificate status", "title": "Trạng thái chứng chỉ",
"none": "Không có chứng chỉ", "none": "Không có chứng chỉ",
"names": "Covers {{names}}", "names": "Ảnh bìa {{names}}",
"issuer": "Issued by {{issuer}}", "issuer": "Được phát hành bởi {{issuer}}",
"expires": "Hết hạn {{date}}", "expires": "Hết hạn {{date}}",
"lastIssued": "Cấp lần cuối {{date}}", "lastIssued": "Cấp lần cuối {{date}}",
"lastError": "Last attempt failed: {{error}}", "lastError": "Lần thử cuối cùng thất bại: {{error}}",
"missing": "Set the domain, email and the fields your challenge type needs, then save, before requesting a certificate.", "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": "Request certificate now", "request": "Yêu cầu chứng chỉ ngay bây giờ",
"requesting": "Đang yêu cầu chứng chỉ...", "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"
} }
} }
+17 -17
View File
@@ -7,8 +7,8 @@
}, },
"settings": { "settings": {
"autoRenew": { "autoRenew": {
"label": "自动续期", "label": "自动续订",
"description": "每天检查两次。在没有证书、证书未覆盖域名或将在 30 天内过期时申请新证书。" "description": "每天检查两次,如果没有证书、证书不涵盖该域名或证书将在 30 天内过期,则获取新证书。"
}, },
"domain": { "domain": {
"label": "域名", "label": "域名",
@@ -17,25 +17,25 @@
}, },
"email": { "email": {
"label": "邮箱", "label": "邮箱",
"description": "用于 ACME 账户和到期通知的联系邮箱。", "description": "ACME账户及到期通知的联系邮箱。",
"placeholder": "admin@example.com" "placeholder": "admin@example.com"
}, },
"provider": { "provider": {
"label": "证书颁发机构", "label": "证书颁发机构",
"description": "证书申请来源。测试时使用测试环境,以免触发 Let's Encrypt 频率限制。", "description": "证书获取途径。使用测试环境进行测试,避免超出 Let's Encrypt 的速率限制。",
"letsencrypt": "Let's Encrypt", "letsencrypt": "Let's Encrypt",
"letsencryptStaging": "Let's Encrypt(测试环境)", "letsencryptStaging": "Let's Encrypt(测试版)",
"custom": "自定义 ACME 目录" "custom": "自定义 ACME 目录"
}, },
"directoryUrl": { "directoryUrl": {
"label": "ACME 目录 URL", "label": "ACME目录URL",
"description": "仅用于自定义证书颁发机构,必须为 HTTPS URL。" "description": "仅适用于自定义证书颁发机构。必须是 https URL。"
}, },
"challengeType": { "challengeType": {
"label": "验证类型", "label": "挑战类型",
"description": "用于证明域名所有权的方式。", "description": "如何证明您拥有该域名。",
"http": "HTTP:需要互联网能够访问端口 80", "http": "HTTP协议需要可通过互联网访问的80端口。",
"cloudflare": "DNS(Cloudflare):需要 Cloudflare API 令牌" "cloudflare": "DNS(Cloudflare)——需要 Cloudflare API 令牌"
}, },
"cloudflareToken": { "cloudflareToken": {
"label": "Cloudflare API 令牌", "label": "Cloudflare API 令牌",
@@ -45,17 +45,17 @@
"status": { "status": {
"title": "证书状态", "title": "证书状态",
"none": "无证书", "none": "无证书",
"names": "覆盖域名:{{names}}", "names": "封面 {{names}}",
"issuer": "签发者:{{issuer}}", "issuer": "由 {{issuer}} 发行",
"expires": "过期于 {{date}}", "expires": "过期于 {{date}}",
"lastIssued": "上次签发于 {{date}}", "lastIssued": "上次签发于 {{date}}",
"lastError": "上次尝试失败:{{error}}", "lastError": "最后一次尝试失败: {{error}}",
"missing": "请先设置域名、邮箱及所选验证方式需要的字段,保存后再申请证书。", "missing": "设置域名、电子邮件和您的质询类型所需的字段,然后保存,再申请证书。",
"request": "立即申请证书", "request": "立即申请证书",
"requesting": "正在请求证书...", "requesting": "正在请求证书...",
"issued": "证书已签发并安装" "issued": "证书已颁发并安装"
}, },
"plugin": { "plugin": {
"name": "ACME 证书" "name": "ACME Certificates"
} }
} }
+25 -22
View File
@@ -1,14 +1,14 @@
{ {
"permissions": { "permissions": {
"manage": { "manage": {
"title": "Manage ACME certificates", "title": "管理 ACME 證書",
"description": "See the certificate status and request a new certificate now." "description": "查看證書狀態並立即申請新證書。"
} }
}, },
"settings": { "settings": {
"autoRenew": { "autoRenew": {
"label": "Renew automatically", "label": "自動續訂",
"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." "description": "每天檢查兩次,如果沒有證書、證書不涵蓋該網域或證書將在 30 天內過期,則取得新證書。"
}, },
"domain": { "domain": {
"label": "網域", "label": "網域",
@@ -17,42 +17,45 @@
}, },
"email": { "email": {
"label": "電子郵件", "label": "電子郵件",
"description": "Contact email for the ACME account and expiry notices.", "description": "ACME帳戶及到期通知的聯絡信箱。",
"placeholder": "admin@example.com" "placeholder": "admin@example.com"
}, },
"provider": { "provider": {
"label": "憑證授權中心", "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", "letsencrypt": "Let's Encrypt",
"letsencryptStaging": "Let's Encrypt (staging)", "letsencryptStaging": "Let's Encrypt(測試版)",
"custom": "Custom ACME directory" "custom": "自訂 ACME 目錄"
}, },
"directoryUrl": { "directoryUrl": {
"label": "ACME directory URL", "label": "ACME目錄URL",
"description": "Only for a custom certificate authority. Must be an https URL." "description": "僅適用於自訂憑證授權單位。必須是 https URL。"
}, },
"challengeType": { "challengeType": {
"label": "Challenge type", "label": "挑戰類型",
"description": "How to prove you own the domain.", "description": "如何證明您擁有該網域。",
"http": "HTTP - needs port 80 reachable from the internet", "http": "HTTP協定需要80個可透過網際網路存取的連接埠。",
"cloudflare": "DNS (Cloudflare) - needs a Cloudflare API token" "cloudflare": "DNS(Cloudflare)-需要 Cloudflare API 令牌"
}, },
"cloudflareToken": { "cloudflareToken": {
"label": "Cloudflare API token", "label": "Cloudflare API 令牌",
"description": "具有您網域 Zone:DNS:Edit 權限的限定範圍權杖。" "description": "具有您網域 Zone:DNS:Edit 權限的限定範圍權杖。"
} }
}, },
"status": { "status": {
"title": "Certificate status", "title": "證書狀態",
"none": "無憑證", "none": "無憑證",
"names": "Covers {{names}}", "names": "封面 {{names}}",
"issuer": "Issued by {{issuer}}", "issuer": "由 {{issuer}} 發行",
"expires": "到期日 {{date}}", "expires": "到期日 {{date}}",
"lastIssued": "上次簽發日期 {{date}}", "lastIssued": "上次簽發日期 {{date}}",
"lastError": "Last attempt failed: {{error}}", "lastError": "最後嘗試失敗: {{error}}",
"missing": "Set the domain, email and the fields your challenge type needs, then save, before requesting a certificate.", "missing": "設定網域名稱、電子郵件和您的質詢類型所需的字段,然後儲存,再申請憑證。",
"request": "Request certificate now", "request": "立即申請證書",
"requesting": "請求憑證中...", "requesting": "請求憑證中...",
"issued": "Certificate issued and installed" "issued": "證書已頒發並安裝"
},
"plugin": {
"name": "ACME Certificates"
} }
} }
+3
View File
@@ -191,5 +191,8 @@
"reconnecting": "Reconnecting and restoring messages…", "reconnecting": "Reconnecting and restoring messages…",
"unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "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" "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue"
},
"plugin": {
"name": "AI Assistant"
} }
} }
+3
View File
@@ -191,5 +191,8 @@
"reconnecting": "Reconnecting and restoring messages…", "reconnecting": "Reconnecting and restoring messages…",
"unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "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" "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue"
},
"plugin": {
"name": "AI Assistant"
} }
} }
+3
View File
@@ -191,5 +191,8 @@
"reconnecting": "Reconnecting and restoring messages…", "reconnecting": "Reconnecting and restoring messages…",
"unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "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" "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue"
},
"plugin": {
"name": "AI Assistant"
} }
} }
+86 -83
View File
@@ -1,120 +1,120 @@
{ {
"permissions": { "permissions": {
"use": { "use": {
"title": "Use the assistant", "title": "সহকারী ব্যবহার করুন",
"description": "Open the assistant and ask it things." "description": "অ্যাসিস্ট্যান্টটি খুলুন এবং এটিকে বিভিন্ন জিনিস জিজ্ঞাসা করুন।"
}, },
"manage_providers": { "manage_providers": {
"title": "Manage providers", "title": "সরবরাহকারীদের পরিচালনা করুন",
"description": "Add, edit and remove the AI providers and their API keys." "description": "এআই প্রোভাইডার এবং তাদের এপিআই কীগুলো যোগ, সম্পাদনা ও অপসারণ করুন।"
}, },
"apply_proposals": { "apply_proposals": {
"title": "Apply proposals", "title": "প্রস্তাবগুলি প্রয়োগ করুন",
"description": "Let the assistant carry out the changes it suggests." "description": "সহকারীকে তার প্রস্তাবিত পরিবর্তনগুলো কার্যকর করতে দিন।"
}, },
"services.use": { "services.use": {
"title": "Use AI from other features", "title": "অন্যান্য বৈশিষ্ট্য থেকে এআই ব্যবহার করুন",
"description": "Other features may call the assistant on your behalf." "description": "অন্যান্য বৈশিষ্ট্য আপনার পক্ষ থেকে সহকারীকে ডাকতে পারে।"
}, },
"secrets.share": { "secrets.share": {
"title": "Share the API key", "title": "এপিআই কী শেয়ার করুন",
"description": "Other features may use the stored AI API key without seeing it." "description": "অন্যান্য ফিচারগুলো সংরক্ষিত এআই এপিআই কী-টি না দেখেই ব্যবহার করতে পারে।"
} }
}, },
"settings": { "settings": {
"assistantUnavailable": "The AI assistant is turned off on this server.", "assistantUnavailable": "এই সার্ভারে এআই অ্যাসিস্ট্যান্ট বন্ধ করা আছে।",
"providersNeedOptIn": "Turn on the AI assistant above to add providers.", "providersNeedOptIn": "প্রোভাইডার যোগ করতে উপরের এআই অ্যাসিস্ট্যান্টটি চালু করুন।",
"admin": { "admin": {
"globallyEnabled": { "globallyEnabled": {
"label": "AI assistant", "label": "এআই সহকারী",
"description": "Let users turn on the AI assistant. While this is off, the assistant is hidden and blocked for everyone." "description": "ব্যবহারকারীদের এআই অ্যাসিস্ট্যান্ট চালু করার সুযোগ দিন। এটি বন্ধ থাকা অবস্থায়, অ্যাসিস্ট্যান্টটি সকলের জন্য লুকানো এবং ব্লক করা থাকবে।"
}, },
"privateEndpoints": { "privateEndpoints": {
"label": "Allowed private AI hosts", "label": "ব্যক্তিগত এআই হোস্ট অনুমোদিত",
"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": "আপনার প্রাইভেট নেটওয়ার্কে এমন হোস্ট রাখুন, যেগুলোকে ব্যবহারকারীরা কোনো প্রোভাইডারের দিকে নির্দেশ করতে পারে, যেমন একটি সেলফ-হোস্টেড ওলামা। প্রতিটি লাইনে একটি করে হোস্ট রাখুন।"
} }
}, },
"host": { "host": {
"enableAiAssistant": { "enableAiAssistant": {
"label": "Enable AI Assistant", "label": "এআই অ্যাসিস্ট্যান্ট সক্রিয় করুন",
"description": "Allow the AI assistant to help in this host's terminal. Off by default, and still needs AI enabled for your account." "description": "এই হোস্টের টার্মিনালে সাহায্য করার জন্য এআই অ্যাসিস্ট্যান্টকে অনুমতি দিন। এটি ডিফল্টরূপে বন্ধ থাকে এবং আপনার অ্যাকাউন্টের জন্য এআই চালু করা প্রয়োজন।"
} }
} }
}, },
"ai": { "ai": {
"title": "Assistant", "title": "সহকারী",
"send": "Send", "send": "পাঠান",
"stop": "Stop", "stop": "থামুন",
"save": "Save", "save": "সংরক্ষণ করুন",
"cancel": "Cancel", "cancel": "বাতিল করুন",
"running": "running", "running": "দৌড়ানো",
"approve": "Approve", "approve": "অনুমোদন করুন",
"reject": "Reject", "reject": "প্রত্যাখ্যান করুন",
"inputPlaceholder": "Ask about your servers, or describe a change to propose", "inputPlaceholder": "আপনার সার্ভারগুলো সম্পর্কে জিজ্ঞাসা করুন, অথবা কোনো পরিবর্তনের প্রস্তাব বর্ণনা করুন।",
"selectProvider": "Select a provider", "selectProvider": "একজন সরবরাহকারী নির্বাচন করুন",
"providerSettings": "Provider settings", "providerSettings": "প্রদানকারীর সেটিংস",
"addProvider": "Add provider", "addProvider": "প্রদানকারী যোগ করুন",
"editProvider": "Edit provider", "editProvider": "সম্পাদনা প্রদানকারী",
"removeProvider": "Remove provider", "removeProvider": "প্রদানকারীকে অপসারণ করুন",
"providerType": "Provider", "providerType": "সরবরাহকারী",
"providerLabel": "Name", "providerLabel": "নাম",
"providerLabelPlaceholder": "For example: Local Ollama", "providerLabelPlaceholder": "উদাহরণস্বরূপ: স্থানীয় ওলামা",
"baseUrl": "Server address", "baseUrl": "সার্ভারের ঠিকানা",
"apiKey": "API key", "apiKey": "এপিআই কী",
"defaultModel": "Default model", "defaultModel": "ডিফল্ট মডেল",
"defaultModelPlaceholder": "For example: llama3.1 or claude-opus-5", "defaultModelPlaceholder": "উদাহরণস্বরূপ: llama3.1 অথবা claude-opus-5",
"labelRequired": "Give this provider a name", "labelRequired": "এই সরবরাহকারীকে একটি নাম দিন",
"providerSaveFailed": "Could not save the provider", "providerSaveFailed": "প্রদানকারীকে সংরক্ষণ করা যায়নি",
"providerUpdated": "Provider updated", "providerUpdated": "প্রদানকারী আপডেট করেছেন",
"providerDeleteFailed": "Could not remove the provider", "providerDeleteFailed": "প্রদানকারীকে সরানো যায়নি",
"privateEndpointHint": "Addresses on your private network need an administrator to allow the host first.", "privateEndpointHint": "আপনার ব্যক্তিগত নেটওয়ার্কের অ্যাড্রেসগুলো ব্যবহার করার জন্য প্রথমে একজন অ্যাডমিনিস্ট্রেটরের কাছ থেকে হোস্টটিকে অনুমতি নিতে হয়।",
"providerOllama": "Ollama", "providerOllama": "ওল্লামা",
"providerAnthropic": "Anthropic", "providerAnthropic": "অ্যানথ্রোপিক",
"providerOpenai": "OpenAI", "providerOpenai": "ওপেনএআই",
"providerGemini": "Google Gemini", "providerGemini": "গুগল জেমিনি",
"providerOpenaiCompatible": "OpenAI compatible", "providerOpenaiCompatible": "ওপেনএআই সামঞ্জস্যপূর্ণ",
"toolArguments": "Input", "toolArguments": "ইনপুট",
"toolResult": "Result", "toolResult": "ফলাফল",
"statusApplied": "Applied", "statusApplied": "প্রয়োগ করা হয়েছে",
"statusRejected": "Rejected", "statusRejected": "প্রত্যাখ্যাত",
"proposalApplied": "Change applied", "proposalApplied": "পরিবর্তন প্রয়োগ করা হয়েছে",
"proposalApplyFailed": "Could not apply the change", "proposalApplyFailed": "পরিবর্তনটি প্রয়োগ করা যায়নি।",
"proposalRejectFailed": "Could not reject the change", "proposalRejectFailed": "পরিবর্তনটি প্রত্যাখ্যান করা যায়নি",
"enableTitle": "Enable the AI assistant", "enableTitle": "এআই অ্যাসিস্ট্যান্ট সক্রিয় করুন",
"enableDescription": "Let the assistant read your setup and suggest changes for you to approve.", "enableDescription": "সহকারীকে আপনার সেটআপটি পড়তে দিন এবং আপনার অনুমোদনের জন্য পরিবর্তনের পরামর্শ দিতে দিন।",
"readOnlyCommands": "Allow read-only diagnostic commands", "readOnlyCommands": "শুধুমাত্র পঠনযোগ্য ডায়াগনস্টিক কমান্ডের অনুমতি দিন",
"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.", "readOnlyCommandsDescription": "সহকারী প্রতিবার অনুমতি না নিয়েই df এবং uptime-এর মতো কয়েকটি নিরাপদ কমান্ড চালাতে পারে। সার্ভার পরিবর্তন করে এমন যেকোনো কিছু সর্বদা প্রথমে প্রস্তাব করা হয়।",
"modelDetectFailed": "Could not reach the provider, so this is a general list. You can type any model name.", "modelDetectFailed": "সরবরাহকারীর সাথে যোগাযোগ করা সম্ভব হয়নি, তাই এটি একটি সাধারণ তালিকা। আপনি যেকোনো মডেলের নাম টাইপ করতে পারেন।",
"modelCustom": "Enter a model name", "modelCustom": "একটি মডেলের নাম লিখুন",
"modelRefresh": "Refresh list", "modelRefresh": "তালিকা রিফ্রেশ করুন",
"modelPlaceholder": "Choose or type a model", "modelPlaceholder": "একটি মডেল বেছে নিন বা টাইপ করুন",
"attachHint": "Type @ to reference a host, snippet or automation. Changes are proposed for you to approve.", "attachHint": "কোনো হোস্ট, স্নিপেট বা অটোমেশন উল্লেখ করতে @ টাইপ করুন। আপনার অনুমোদনের জন্য পরিবর্তনগুলো প্রস্তাব করা হবে।",
"runCommandTitle": "Run command", "runCommandTitle": "রান কমান্ড",
"assistant": "AI Assistant", "assistant": "এআই সহকারী",
"terminalPanelEmpty": "Ask the assistant about this host. Anything that changes state needs your approval first.", "terminalPanelEmpty": "এই হোস্ট সম্পর্কে অ্যাসিস্ট্যান্টকে জিজ্ঞাসা করুন। অবস্থা পরিবর্তনের জন্য প্রথমে আপনার অনুমোদন প্রয়োজন।",
"terminalPanelPlaceholder": "Ask about this host...", "terminalPanelPlaceholder": "এই হোস্ট সম্পর্কে জিজ্ঞাসা করুন...",
"noProvidersConfigured": "No AI provider is configured yet. Add one in the AI assistant tab.", "noProvidersConfigured": "এখনো কোনো এআই প্রোভাইডার কনফিগার করা হয়নি। এআই অ্যাসিস্ট্যান্ট ট্যাবে একটি যোগ করুন।",
"runsInOpenTerminal": "Runs in your open terminal session.", "runsInOpenTerminal": "আপনার খোলা টার্মিনাল সেশনে চলে।",
"runInTerminal": "Run", "runInTerminal": "দৌড়",
"terminalContextPrefill": "Here is my terminal output:\n\n{{output}}\n\n", "terminalContextPrefill": "আমার টার্মিনাল আউটপুট নিচে দেওয়া হলো:\n\n{{output}}\n\n",
"secrets": { "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": { "nav": {
"ai": "AI" "ai": "এআই"
}, },
"onboarding": { "onboarding": {
"aiTitle": "AI assistant", "aiTitle": "এআই সহকারী",
"aiIntro": "Termix can include an optional AI assistant. You can change this later in your settings.", "aiIntro": "টারমিক্সে একটি ঐচ্ছিক এআই অ্যাসিস্ট্যান্ট অন্তর্ভুক্ত থাকতে পারে। আপনি পরবর্তীতে আপনার সেটিংসে এটি পরিবর্তন করতে পারবেন।",
"aiSkipTitle": "Leave it off", "aiSkipTitle": "এটা ছেড়ে দাও",
"aiSkipDesc": "Termix works as it does now. The assistant stays hidden.", "aiSkipDesc": "টারমিক্স এখন যেমন কাজ করে, তেমনই কাজ করে। অ্যাসিস্ট্যান্টটি লুকানো থাকে।",
"aiEnableTitle": "Turn it on", "aiEnableTitle": "এটা চালু করুন",
"aiEnableDesc": "Adds an assistant that reads your setup and suggests changes you approve. Needs a provider you supply, such as a local Ollama.", "aiEnableDesc": "একজন সহকারী যোগ করে যে আপনার সেটআপ পড়ে এবং আপনার অনুমোদিত পরিবর্তনের পরামর্শ দেয়। এর জন্য আপনার সরবরাহ করা একজন প্রদানকারীর প্রয়োজন, যেমন একজন স্থানীয় ওলামা।",
"aiNote": "Nothing is sent anywhere until you add a provider and send a message." "aiNote": "আপনি একজন প্রোভাইডার যোগ করে মেসেজ না পাঠানো পর্যন্ত কোথাও কিছু পাঠানো হয় না।"
}, },
"hosts": { "hosts": {
"docsLink": "View docs" "docsLink": "নথি দেখুন"
}, },
"agents": { "agents": {
"title": "AI Agent", "title": "AI Agent",
@@ -191,5 +191,8 @@
"reconnecting": "Reconnecting and restoring messages…", "reconnecting": "Reconnecting and restoring messages…",
"unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "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" "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue"
},
"plugin": {
"name": "AI Assistant"
} }
} }
+3
View File
@@ -191,5 +191,8 @@
"reconnecting": "Reconnecting and restoring messages…", "reconnecting": "Reconnecting and restoring messages…",
"unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "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" "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue"
},
"plugin": {
"name": "AI Assistant"
} }
} }
+3
View File
@@ -191,5 +191,8 @@
"reconnecting": "Reconnecting and restoring messages…", "reconnecting": "Reconnecting and restoring messages…",
"unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "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" "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue"
},
"plugin": {
"name": "AI Assistant"
} }
} }
+3
View File
@@ -191,5 +191,8 @@
"reconnecting": "Reconnecting and restoring messages…", "reconnecting": "Reconnecting and restoring messages…",
"unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "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" "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue"
},
"plugin": {
"name": "AI Assistant"
} }
} }
+3
View File
@@ -191,5 +191,8 @@
"reconnecting": "Reconnecting and restoring messages…", "reconnecting": "Reconnecting and restoring messages…",
"unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "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" "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue"
},
"plugin": {
"name": "AI Assistant"
} }
} }
+3
View File
@@ -191,5 +191,8 @@
"reconnecting": "Reconnecting and restoring messages…", "reconnecting": "Reconnecting and restoring messages…",
"unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "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" "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue"
},
"plugin": {
"name": "AI Assistant"
} }
} }
+3
View File
@@ -191,5 +191,8 @@
"reconnecting": "Reconnecting and restoring messages…", "reconnecting": "Reconnecting and restoring messages…",
"unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "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" "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue"
},
"plugin": {
"name": "AI Assistant"
} }
} }
+3
View File
@@ -191,5 +191,8 @@
"reconnecting": "Reconnecting and restoring messages…", "reconnecting": "Reconnecting and restoring messages…",
"unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "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" "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue"
},
"plugin": {
"name": "AI Assistant"
} }
} }
+3
View File
@@ -191,5 +191,8 @@
"reconnecting": "Reconnecting and restoring messages…", "reconnecting": "Reconnecting and restoring messages…",
"unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "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" "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue"
},
"plugin": {
"name": "AI Assistant"
} }
} }
+3
View File
@@ -191,5 +191,8 @@
"reconnecting": "Reconnecting and restoring messages…", "reconnecting": "Reconnecting and restoring messages…",
"unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "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" "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue"
},
"plugin": {
"name": "AI Assistant"
} }
} }
+78 -75
View File
@@ -1,117 +1,117 @@
{ {
"permissions": { "permissions": {
"use": { "use": {
"title": "Use the assistant", "title": "सहायक का उपयोग करें",
"description": "Open the assistant and ask it things." "description": "असिस्टेंट खोलें और उससे सवाल पूछें।"
}, },
"manage_providers": { "manage_providers": {
"title": "Manage providers", "title": "प्रदाताओं का प्रबंधन करें",
"description": "Add, edit and remove the AI providers and their API keys." "description": "एआई प्रदाताओं और उनकी एपीआई कुंजियों को जोड़ें, संपादित करें और हटाएं।"
}, },
"apply_proposals": { "apply_proposals": {
"title": "Apply proposals", "title": "प्रस्ताव लागू करें",
"description": "Let the assistant carry out the changes it suggests." "description": "सहायक को उसके द्वारा सुझाए गए बदलावों को लागू करने दें।"
}, },
"services.use": { "services.use": {
"title": "Use AI from other features", "title": "अन्य सुविधाओं से एआई का उपयोग करें",
"description": "Other features may call the assistant on your behalf." "description": "अन्य सुविधाएं आपकी ओर से असिस्टेंट को कॉल कर सकती हैं।"
}, },
"secrets.share": { "secrets.share": {
"title": "Share the API key", "title": "एपीआई कुंजी साझा करें",
"description": "Other features may use the stored AI API key without seeing it." "description": "अन्य सुविधाएं संग्रहीत एआई एपीआई कुंजी का उपयोग उसे देखे बिना भी कर सकती हैं।"
} }
}, },
"settings": { "settings": {
"assistantUnavailable": "The AI assistant is turned off on this server.", "assistantUnavailable": "इस सर्वर पर एआई असिस्टेंट बंद है।",
"providersNeedOptIn": "Turn on the AI assistant above to add providers.", "providersNeedOptIn": "प्रदाताओं को जोड़ने के लिए ऊपर दिए गए एआई सहायक को चालू करें।",
"admin": { "admin": {
"globallyEnabled": { "globallyEnabled": {
"label": "AI assistant", "label": "एआई सहायक",
"description": "Let users turn on the AI assistant. While this is off, the assistant is hidden and blocked for everyone." "description": "उपयोगकर्ताओं को एआई सहायक चालू करने की अनुमति दें। जब यह बंद होगा, तो सहायक सभी के लिए छिपा हुआ और अवरुद्ध रहेगा।"
}, },
"privateEndpoints": { "privateEndpoints": {
"label": "Allowed private AI hosts", "label": "निजी एआई होस्ट की अनुमति दी गई",
"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": "आपके निजी नेटवर्क पर मौजूद होस्ट, जिन्हें उपयोगकर्ता किसी प्रदाता से जोड़ सकते हैं, जैसे कि स्व-होस्टेड ओलामा। प्रत्येक पंक्ति में एक होस्ट रखें।"
} }
}, },
"host": { "host": {
"enableAiAssistant": { "enableAiAssistant": {
"label": "Enable AI Assistant", "label": "एआई असिस्टेंट को सक्षम करें",
"description": "Allow the AI assistant to help in this host's terminal. Off by default, and still needs AI enabled for your account." "description": "इस होस्ट के टर्मिनल में एआई सहायक को मदद करने की अनुमति दें। यह डिफ़ॉल्ट रूप से बंद है, लेकिन आपके खाते के लिए एआई को सक्षम करना आवश्यक है।"
} }
} }
}, },
"ai": { "ai": {
"title": "Assistant", "title": "सहायक",
"send": "Send", "send": "भेजना",
"stop": "स्टॉप", "stop": "स्टॉप",
"save": "सहेजें", "save": "सहेजें",
"cancel": "रद्द करें", "cancel": "रद्द करें",
"running": "चल रहे", "running": "चल रहे",
"approve": "Approve", "approve": "मंज़ूरी देना",
"reject": "Reject", "reject": "अस्वीकार करना",
"inputPlaceholder": "Ask about your servers, or describe a change to propose", "inputPlaceholder": "अपने सर्वरों के बारे में पूछें, या प्रस्तावित परिवर्तन का वर्णन करें।",
"selectProvider": "Select a provider", "selectProvider": "एक प्रदाता का चयन करें",
"providerSettings": "Provider settings", "providerSettings": "प्रदाता सेटिंग्स",
"addProvider": "Add provider", "addProvider": "प्रदाता जोड़ें",
"editProvider": "Edit provider", "editProvider": "प्रदाता संपादित करें",
"removeProvider": "Remove provider", "removeProvider": "प्रदाता को हटाएँ",
"providerType": "Provider", "providerType": "प्रदाता",
"providerLabel": "नाम", "providerLabel": "नाम",
"providerLabelPlaceholder": "For example: Local Ollama", "providerLabelPlaceholder": "उदाहरण के लिए: स्थानीय ओलामा",
"baseUrl": "Server address", "baseUrl": "सर्वर पता",
"apiKey": "API key", "apiKey": "एपीआई कुंजी",
"defaultModel": "Default model", "defaultModel": "डिफ़ॉल्ट मॉडल",
"defaultModelPlaceholder": "For example: llama3.1 or claude-opus-5", "defaultModelPlaceholder": "उदाहरण के लिए: llama3.1 या claude-opus-5",
"labelRequired": "Give this provider a name", "labelRequired": "इस प्रदाता को एक नाम दें",
"providerSaveFailed": "Could not save the provider", "providerSaveFailed": "प्रदाता को बचाया नहीं जा सका",
"providerUpdated": "Provider updated", "providerUpdated": "प्रदाता ने अपडेट किया",
"providerDeleteFailed": "Could not remove the provider", "providerDeleteFailed": "प्रदाता को हटाया नहीं जा सका",
"privateEndpointHint": "Addresses on your private network need an administrator to allow the host first.", "privateEndpointHint": "आपके निजी नेटवर्क पर मौजूद पतों के लिए पहले एक प्रशासक द्वारा होस्ट को अनुमति देना आवश्यक है।",
"providerOllama": "Ollama", "providerOllama": "ओलामा",
"providerAnthropic": "Anthropic", "providerAnthropic": "anthropic",
"providerOpenai": "OpenAI", "providerOpenai": "ओपनएआई",
"providerGemini": "Google Gemini", "providerGemini": "गूगल जेमिनी",
"providerOpenaiCompatible": "OpenAI compatible", "providerOpenaiCompatible": "OpenAI संगत",
"toolArguments": "इनपुट", "toolArguments": "इनपुट",
"toolResult": "Result", "toolResult": "परिणाम",
"statusApplied": "Applied", "statusApplied": "लागू किया गया",
"statusRejected": "Rejected", "statusRejected": "अस्वीकार कर दिया",
"proposalApplied": "Change applied", "proposalApplied": "परिवर्तन लागू हो गया",
"proposalApplyFailed": "Could not apply the change", "proposalApplyFailed": "परिवर्तन लागू नहीं हो सका",
"proposalRejectFailed": "Could not reject the change", "proposalRejectFailed": "परिवर्तन को अस्वीकार नहीं किया जा सका",
"enableTitle": "Enable the AI assistant", "enableTitle": "एआई सहायक को सक्रिय करें",
"enableDescription": "Let the assistant read your setup and suggest changes for you to approve.", "enableDescription": "सहायक को आपकी सेटअप प्रक्रिया पढ़ने दें और वह आपके अनुमोदन के लिए परिवर्तन सुझाएगा।",
"readOnlyCommands": "Allow read-only diagnostic commands", "readOnlyCommands": "केवल पढ़ने योग्य डायग्नोस्टिक कमांड की अनुमति दें",
"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.", "readOnlyCommandsDescription": "सहायक बिना पूछे ही df और uptime जैसे कुछ सुरक्षित कमांड चला सकता है। सर्वर में कोई भी बदलाव करने का प्रस्ताव हमेशा पहले दिया जाता है।",
"modelDetectFailed": "Could not reach the provider, so this is a general list. You can type any model name.", "modelDetectFailed": "प्रदाता से संपर्क नहीं हो सका, इसलिए यह एक सामान्य सूची है। आप किसी भी मॉडल का नाम टाइप कर सकते हैं।",
"modelCustom": "Enter a model name", "modelCustom": "मॉडल का नाम दर्ज करें",
"modelRefresh": "Refresh list", "modelRefresh": "सूची रीफ़्रेश करें",
"modelPlaceholder": "Choose or type a model", "modelPlaceholder": "कोई मॉडल चुनें या टाइप करें",
"attachHint": "Type @ to reference a host, snippet or automation. Changes are proposed for you to approve.", "attachHint": "किसी होस्ट, स्निपेट या ऑटोमेशन को संदर्भित करने के लिए @ टाइप करें। आपके अनुमोदन के लिए परिवर्तन प्रस्तावित किए जा रहे हैं।",
"runCommandTitle": "Run command", "runCommandTitle": "कमांड चलाएँ",
"assistant": "AI Assistant", "assistant": "एआई सहायक",
"terminalPanelEmpty": "Ask the assistant about this host. Anything that changes state needs your approval first.", "terminalPanelEmpty": "इस होस्ट के बारे में असिस्टेंट से पूछें। किसी भी स्थिति में बदलाव के लिए पहले आपकी स्वीकृति आवश्यक है।",
"terminalPanelPlaceholder": "Ask about this host...", "terminalPanelPlaceholder": "इस होस्ट के बारे में पूछें...",
"noProvidersConfigured": "No AI provider is configured yet. Add one in the AI assistant tab.", "noProvidersConfigured": "अभी तक कोई एआई प्रदाता कॉन्फ़िगर नहीं किया गया है। एआई सहायक टैब में एक जोड़ें।",
"runsInOpenTerminal": "Runs in your open terminal session.", "runsInOpenTerminal": "यह आपके खुले टर्मिनल सत्र में चलता है।",
"runInTerminal": "चलाएं", "runInTerminal": "चलाएं",
"terminalContextPrefill": "Here is my terminal output:\n\n{{output}}\n\n", "terminalContextPrefill": "यह मेरे टर्मिनल का आउटपुट है:\n\n{{output}}\n\n",
"secrets": { "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": { "nav": {
"ai": "AI" "ai": "ऐ"
}, },
"onboarding": { "onboarding": {
"aiTitle": "AI assistant", "aiTitle": "एआई सहायक",
"aiIntro": "Termix can include an optional AI assistant. You can change this later in your settings.", "aiIntro": "टर्मिक्स में एक वैकल्पिक एआई सहायक शामिल हो सकता है। आप इसे बाद में अपनी सेटिंग्स में बदल सकते हैं।",
"aiSkipTitle": "Leave it off", "aiSkipTitle": "इसे बंद कर दो",
"aiSkipDesc": "Termix works as it does now. The assistant stays hidden.", "aiSkipDesc": "टर्मिक्स अभी की तरह ही काम करता है। असिस्टेंट छिपा रहता है।",
"aiEnableTitle": "Turn it on", "aiEnableTitle": "इसे चालू करें",
"aiEnableDesc": "Adds an assistant that reads your setup and suggests changes you approve. Needs a provider you supply, such as a local Ollama.", "aiEnableDesc": "यह एक सहायक सुविधा जोड़ता है जो आपके सेटअप को पढ़ता है और आपके द्वारा स्वीकृत किए जाने वाले परिवर्तनों का सुझाव देता है। इसके लिए आपको एक प्रदाता उपलब्ध कराना होगा, जैसे कि स्थानीय ओलामा।",
"aiNote": "Nothing is sent anywhere until you add a provider and send a message." "aiNote": "जब तक आप कोई प्रदाता नहीं जोड़ते और संदेश नहीं भेजते, तब तक कुछ भी कहीं नहीं भेजा जाता।"
}, },
"hosts": { "hosts": {
"docsLink": "दस्तावेज़ देखें" "docsLink": "दस्तावेज़ देखें"
@@ -191,5 +191,8 @@
"reconnecting": "Reconnecting and restoring messages…", "reconnecting": "Reconnecting and restoring messages…",
"unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "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" "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue"
},
"plugin": {
"name": "AI Assistant"
} }
} }
+3
View File
@@ -191,5 +191,8 @@
"reconnecting": "Reconnecting and restoring messages…", "reconnecting": "Reconnecting and restoring messages…",
"unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "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" "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue"
},
"plugin": {
"name": "AI Assistant"
} }
} }
+82 -79
View File
@@ -1,120 +1,120 @@
{ {
"permissions": { "permissions": {
"use": { "use": {
"title": "Use the assistant", "title": "Gunakan asisten",
"description": "Open the assistant and ask it things." "description": "Buka asisten dan ajukan pertanyaan kepadanya."
}, },
"manage_providers": { "manage_providers": {
"title": "Manage providers", "title": "Mengelola penyedia",
"description": "Add, edit and remove the AI providers and their API keys." "description": "Tambahkan, edit, dan hapus penyedia AI dan kunci API mereka."
}, },
"apply_proposals": { "apply_proposals": {
"title": "Apply proposals", "title": "Ajukan proposal",
"description": "Let the assistant carry out the changes it suggests." "description": "Biarkan asisten tersebut menjalankan perubahan yang disarankannya."
}, },
"services.use": { "services.use": {
"title": "Use AI from other features", "title": "Gunakan AI dari fitur lain.",
"description": "Other features may call the assistant on your behalf." "description": "Fitur lainnya mungkin akan memanggil asisten atas nama Anda."
}, },
"secrets.share": { "secrets.share": {
"title": "Share the API key", "title": "Bagikan kunci API",
"description": "Other features may use the stored AI API key without seeing it." "description": "Fitur lain mungkin menggunakan kunci API AI yang tersimpan tanpa mengetahuinya."
} }
}, },
"settings": { "settings": {
"assistantUnavailable": "The AI assistant is turned off on this server.", "assistantUnavailable": "Asisten AI dinonaktifkan di server ini.",
"providersNeedOptIn": "Turn on the AI assistant above to add providers.", "providersNeedOptIn": "Aktifkan asisten AI di atas untuk menambahkan penyedia.",
"admin": { "admin": {
"globallyEnabled": { "globallyEnabled": {
"label": "AI assistant", "label": "Asisten AI",
"description": "Let users turn on the AI assistant. While this is off, the assistant is hidden and blocked for everyone." "description": "Izinkan pengguna untuk mengaktifkan asisten AI. Saat dinonaktifkan, asisten akan disembunyikan dan diblokir untuk semua orang."
}, },
"privateEndpoints": { "privateEndpoints": {
"label": "Allowed private AI hosts", "label": "Host AI pribadi yang diizinkan",
"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": "Host di jaringan pribadi Anda yang dapat diarahkan pengguna ke penyedia layanan, seperti Ollama yang dihosting sendiri. Letakkan satu host di setiap baris."
} }
}, },
"host": { "host": {
"enableAiAssistant": { "enableAiAssistant": {
"label": "Enable AI Assistant", "label": "Aktifkan Asisten AI",
"description": "Allow the AI assistant to help in this host's terminal. Off by default, and still needs AI enabled for your account." "description": "Izinkan asisten AI untuk membantu di terminal host ini. Secara default dinonaktifkan, dan AI tetap perlu diaktifkan untuk akun Anda."
} }
} }
}, },
"ai": { "ai": {
"title": "Assistant", "title": "Asisten",
"send": "Send", "send": "Mengirim",
"stop": "Stop", "stop": "Berhenti",
"save": "Save", "save": "Menyimpan",
"cancel": "Cancel", "cancel": "Membatalkan",
"running": "running", "running": "berlari",
"approve": "Approve", "approve": "Menyetujui",
"reject": "Reject", "reject": "Menolak",
"inputPlaceholder": "Ask about your servers, or describe a change to propose", "inputPlaceholder": "Tanyakan tentang server Anda, atau jelaskan perubahan yang ingin Anda usulkan.",
"selectProvider": "Select a provider", "selectProvider": "Pilih penyedia",
"providerSettings": "Provider settings", "providerSettings": "Pengaturan penyedia",
"addProvider": "Add provider", "addProvider": "Tambahkan penyedia",
"editProvider": "Edit provider", "editProvider": "Penyedia pengeditan",
"removeProvider": "Remove provider", "removeProvider": "Hapus penyedia",
"providerType": "Provider", "providerType": "Penyedia",
"providerLabel": "Name", "providerLabel": "Nama",
"providerLabelPlaceholder": "For example: Local Ollama", "providerLabelPlaceholder": "Contohnya: Ollama setempat",
"baseUrl": "Server address", "baseUrl": "Alamat server",
"apiKey": "API key", "apiKey": "Kunci API",
"defaultModel": "Default model", "defaultModel": "Model default",
"defaultModelPlaceholder": "For example: llama3.1 or claude-opus-5", "defaultModelPlaceholder": "Misalnya: llama3.1 atau claude-opus-5",
"labelRequired": "Give this provider a name", "labelRequired": "Beri nama penyedia ini",
"providerSaveFailed": "Could not save the provider", "providerSaveFailed": "Penyedia layanan tidak dapat disimpan.",
"providerUpdated": "Provider updated", "providerUpdated": "Penyedia diperbarui",
"providerDeleteFailed": "Could not remove the provider", "providerDeleteFailed": "Penyedia layanan tidak dapat dihapus.",
"privateEndpointHint": "Addresses on your private network need an administrator to allow the host first.", "privateEndpointHint": "Alamat-alamat di jaringan pribadi Anda memerlukan izin administrator terlebih dahulu untuk host tersebut.",
"providerOllama": "Ollama", "providerOllama": "Ollama",
"providerAnthropic": "Anthropic", "providerAnthropic": "Antropis",
"providerOpenai": "OpenAI", "providerOpenai": "OpenAI",
"providerGemini": "Google Gemini", "providerGemini": "Google Gemini",
"providerOpenaiCompatible": "OpenAI compatible", "providerOpenaiCompatible": "Kompatibel dengan OpenAI",
"toolArguments": "Input", "toolArguments": "Masukan",
"toolResult": "Result", "toolResult": "Hasil",
"statusApplied": "Applied", "statusApplied": "Terapan",
"statusRejected": "Rejected", "statusRejected": "Ditolak",
"proposalApplied": "Change applied", "proposalApplied": "Perubahan diterapkan",
"proposalApplyFailed": "Could not apply the change", "proposalApplyFailed": "Perubahan tidak dapat diterapkan.",
"proposalRejectFailed": "Could not reject the change", "proposalRejectFailed": "Tidak bisa menolak perubahan tersebut",
"enableTitle": "Enable the AI assistant", "enableTitle": "Aktifkan asisten AI",
"enableDescription": "Let the assistant read your setup and suggest changes for you to approve.", "enableDescription": "Biarkan asisten membaca pengaturan Anda dan menyarankan perubahan yang perlu Anda setujui.",
"readOnlyCommands": "Allow read-only diagnostic commands", "readOnlyCommands": "Izinkan perintah diagnostik hanya baca.",
"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.", "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": "Could not reach the provider, so this is a general list. You can type any model name.", "modelDetectFailed": "Tidak dapat menghubungi penyedia, jadi ini adalah daftar umum. Anda dapat mengetikkan nama model apa pun.",
"modelCustom": "Enter a model name", "modelCustom": "Masukkan nama model",
"modelRefresh": "Refresh list", "modelRefresh": "Perbarui daftar",
"modelPlaceholder": "Choose or type a model", "modelPlaceholder": "Pilih atau ketik model",
"attachHint": "Type @ to reference a host, snippet or automation. Changes are proposed for you to approve.", "attachHint": "Ketik @ untuk merujuk ke host, cuplikan kode, atau otomatisasi. Perubahan diajukan untuk Anda setujui.",
"runCommandTitle": "Run command", "runCommandTitle": "Jalankan perintah",
"assistant": "AI Assistant", "assistant": "Asisten AI",
"terminalPanelEmpty": "Ask the assistant about this host. Anything that changes state needs your approval first.", "terminalPanelEmpty": "Tanyakan kepada asisten tentang tuan rumah ini. Segala sesuatu yang berubah status memerlukan persetujuan Anda terlebih dahulu.",
"terminalPanelPlaceholder": "Ask about this host...", "terminalPanelPlaceholder": "Tanyakan tentang tuan rumah ini...",
"noProvidersConfigured": "No AI provider is configured yet. Add one in the AI assistant tab.", "noProvidersConfigured": "Belum ada penyedia AI yang dikonfigurasi. Tambahkan satu di tab asisten AI.",
"runsInOpenTerminal": "Runs in your open terminal session.", "runsInOpenTerminal": "Berjalan di sesi terminal Anda yang sedang terbuka.",
"runInTerminal": "Run", "runInTerminal": "Berlari",
"terminalContextPrefill": "Here is my terminal output:\n\n{{output}}\n\n", "terminalContextPrefill": "Berikut adalah output terminal saya:\n\n{{output}}\n\n",
"secrets": { "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": { "nav": {
"ai": "AI" "ai": "AI"
}, },
"onboarding": { "onboarding": {
"aiTitle": "AI assistant", "aiTitle": "Asisten AI",
"aiIntro": "Termix can include an optional AI assistant. You can change this later in your settings.", "aiIntro": "Termix dapat menyertakan asisten AI opsional. Anda dapat mengubahnya nanti di pengaturan Anda.",
"aiSkipTitle": "Leave it off", "aiSkipTitle": "Biarkan saja",
"aiSkipDesc": "Termix works as it does now. The assistant stays hidden.", "aiSkipDesc": "Termix berfungsi seperti sekarang. Asisten tetap tersembunyi.",
"aiEnableTitle": "Turn it on", "aiEnableTitle": "Nyalakan",
"aiEnableDesc": "Adds an assistant that reads your setup and suggests changes you approve. Needs a provider you supply, such as a local Ollama.", "aiEnableDesc": "Menambahkan asisten yang membaca pengaturan Anda dan menyarankan perubahan yang Anda setujui. Membutuhkan penyedia yang Anda berikan, seperti Ollama lokal.",
"aiNote": "Nothing is sent anywhere until you add a provider and send a message." "aiNote": "Tidak ada data yang dikirim ke mana pun sampai Anda menambahkan penyedia dan mengirim pesan."
}, },
"hosts": { "hosts": {
"docsLink": "View docs" "docsLink": "Lihat dokumen"
}, },
"agents": { "agents": {
"title": "AI Agent", "title": "AI Agent",
@@ -191,5 +191,8 @@
"reconnecting": "Reconnecting and restoring messages…", "reconnecting": "Reconnecting and restoring messages…",
"unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "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" "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue"
},
"plugin": {
"name": "AI Assistant"
} }
} }
+3
View File
@@ -191,5 +191,8 @@
"reconnecting": "Reconnecting and restoring messages…", "reconnecting": "Reconnecting and restoring messages…",
"unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "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" "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue"
},
"plugin": {
"name": "AI Assistant"
} }
} }
+3
View File
@@ -191,5 +191,8 @@
"reconnecting": "Reconnecting and restoring messages…", "reconnecting": "Reconnecting and restoring messages…",
"unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "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" "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue"
},
"plugin": {
"name": "AI Assistant"
} }
} }
+3
View File
@@ -191,5 +191,8 @@
"reconnecting": "Reconnecting and restoring messages…", "reconnecting": "Reconnecting and restoring messages…",
"unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "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" "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue"
},
"plugin": {
"name": "AI Assistant"
} }
} }
+3
View File
@@ -191,5 +191,8 @@
"reconnecting": "Reconnecting and restoring messages…", "reconnecting": "Reconnecting and restoring messages…",
"unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "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" "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue"
},
"plugin": {
"name": "AI Assistant"
} }
} }
+77 -74
View File
@@ -1,120 +1,120 @@
{ {
"permissions": { "permissions": {
"use": { "use": {
"title": "Use the assistant", "title": "Bruk assistenten",
"description": "Open the assistant and ask it things." "description": "Åpne assistenten og spør den om ting."
}, },
"manage_providers": { "manage_providers": {
"title": "Manage providers", "title": "Administrer leverandører",
"description": "Add, edit and remove the AI providers and their API keys." "description": "Legg til, rediger og fjern AI-leverandørene og API-nøklene deres."
}, },
"apply_proposals": { "apply_proposals": {
"title": "Apply proposals", "title": "Bruk forslag",
"description": "Let the assistant carry out the changes it suggests." "description": "La assistenten utføre endringene den foreslår."
}, },
"services.use": { "services.use": {
"title": "Use AI from other features", "title": "Bruk AI fra andre funksjoner",
"description": "Other features may call the assistant on your behalf." "description": "Andre funksjoner kan ringe assistenten på dine vegne."
}, },
"secrets.share": { "secrets.share": {
"title": "Share the API key", "title": "Del API-nøkkelen",
"description": "Other features may use the stored AI API key without seeing it." "description": "Andre funksjoner kan bruke den lagrede AI API-nøkkelen uten å se den."
} }
}, },
"settings": { "settings": {
"assistantUnavailable": "The AI assistant is turned off on this server.", "assistantUnavailable": "AI-assistenten er slått av på denne serveren.",
"providersNeedOptIn": "Turn on the AI assistant above to add providers.", "providersNeedOptIn": "Slå på AI-assistenten ovenfor for å legge til leverandører.",
"admin": { "admin": {
"globallyEnabled": { "globallyEnabled": {
"label": "AI assistant", "label": "AI-assistent",
"description": "Let users turn on the AI assistant. While this is off, the assistant is hidden and blocked for everyone." "description": "La brukere slå på AI-assistenten. Mens dette er av, er assistenten skjult og blokkert for alle."
}, },
"privateEndpoints": { "privateEndpoints": {
"label": "Allowed private AI hosts", "label": "Tillatte private AI-verter",
"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": "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": { "host": {
"enableAiAssistant": { "enableAiAssistant": {
"label": "Enable AI Assistant", "label": "Aktiver AI-assistent",
"description": "Allow the AI assistant to help in this host's terminal. Off by default, and still needs AI enabled for your account." "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": { "ai": {
"title": "Assistant", "title": "Assistent",
"send": "Send", "send": "Sende",
"stop": "Stopp", "stop": "Stopp",
"save": "Lagre", "save": "Lagre",
"cancel": "Avbryt", "cancel": "Avbryt",
"running": "kjører", "running": "kjører",
"approve": "Approve", "approve": "Vedta",
"reject": "Reject", "reject": "Avvis",
"inputPlaceholder": "Ask about your servers, or describe a change to propose", "inputPlaceholder": "Spør om servitørene dine, eller beskriv en endring du vil foreslå",
"selectProvider": "Select a provider", "selectProvider": "Velg en leverandør",
"providerSettings": "Provider settings", "providerSettings": "Leverandørinnstillinger",
"addProvider": "Add provider", "addProvider": "Legg til leverandør",
"editProvider": "Edit provider", "editProvider": "Rediger leverandør",
"removeProvider": "Remove provider", "removeProvider": "Fjern leverandør",
"providerType": "Provider", "providerType": "Leverandør",
"providerLabel": "Navn", "providerLabel": "Navn",
"providerLabelPlaceholder": "For example: Local Ollama", "providerLabelPlaceholder": "For eksempel: Lokal Ollama",
"baseUrl": "Server address", "baseUrl": "Serveradresse",
"apiKey": "API key", "apiKey": "API-nøkkel",
"defaultModel": "Default model", "defaultModel": "Standardmodell",
"defaultModelPlaceholder": "For example: llama3.1 or claude-opus-5", "defaultModelPlaceholder": "For eksempel: llama3.1 eller claude-opus-5",
"labelRequired": "Give this provider a name", "labelRequired": "Gi denne leverandøren et navn",
"providerSaveFailed": "Could not save the provider", "providerSaveFailed": "Kunne ikke lagre leverandøren",
"providerUpdated": "Provider updated", "providerUpdated": "Leverandøren er oppdatert",
"providerDeleteFailed": "Could not remove the provider", "providerDeleteFailed": "Kunne ikke fjerne leverandøren",
"privateEndpointHint": "Addresses on your private network need an administrator to allow the host first.", "privateEndpointHint": "Adresser på ditt private nettverk krever at en administrator tillater verten først.",
"providerOllama": "Ollama", "providerOllama": "Ollama",
"providerAnthropic": "Anthropic", "providerAnthropic": "Antropisk",
"providerOpenai": "OpenAI", "providerOpenai": "Åpen kunstig intelligens",
"providerGemini": "Google Gemini", "providerGemini": "Google Gemini",
"providerOpenaiCompatible": "OpenAI compatible", "providerOpenaiCompatible": "OpenAI-kompatibel",
"toolArguments": "Input", "toolArguments": "Inndata",
"toolResult": "Result", "toolResult": "Resultat",
"statusApplied": "Applied", "statusApplied": "Anvendt",
"statusRejected": "Rejected", "statusRejected": "Avvist",
"proposalApplied": "Change applied", "proposalApplied": "Endringen er brukt",
"proposalApplyFailed": "Could not apply the change", "proposalApplyFailed": "Kunne ikke bruke endringen",
"proposalRejectFailed": "Could not reject the change", "proposalRejectFailed": "Kunne ikke avvise endringen",
"enableTitle": "Enable the AI assistant", "enableTitle": "Aktiver AI-assistenten",
"enableDescription": "Let the assistant read your setup and suggest changes for you to approve.", "enableDescription": "La assistenten lese oppsettet ditt og foreslå endringer du kan godkjenne.",
"readOnlyCommands": "Allow read-only diagnostic commands", "readOnlyCommands": "Tillat skrivebeskyttede diagnostiske kommandoer",
"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.", "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": "Could not reach the provider, so this is a general list. You can type any model name.", "modelDetectFailed": "Kunne ikke nå leverandøren, så dette er en generell liste. Du kan skrive inn et hvilket som helst modellnavn.",
"modelCustom": "Enter a model name", "modelCustom": "Skriv inn et modellnavn",
"modelRefresh": "Refresh list", "modelRefresh": "Oppdater listen",
"modelPlaceholder": "Choose or type a model", "modelPlaceholder": "Velg eller skriv inn en modell",
"attachHint": "Type @ to reference a host, snippet or automation. Changes are proposed for you to approve.", "attachHint": "Skriv inn @ for å referere til en vert, et kodeutdrag eller en automatisering. Endringer foreslås som du kan godkjenne.",
"runCommandTitle": "Run command", "runCommandTitle": "Kjør kommandoen",
"assistant": "AI Assistant", "assistant": "AI-assistent",
"terminalPanelEmpty": "Ask the assistant about this host. Anything that changes state needs your approval first.", "terminalPanelEmpty": "Spør assistenten om denne verten. Alt som endrer status trenger din godkjenning først.",
"terminalPanelPlaceholder": "Ask about this host...", "terminalPanelPlaceholder": "Spør om denne verten...",
"noProvidersConfigured": "No AI provider is configured yet. Add one in the AI assistant tab.", "noProvidersConfigured": "Ingen AI-leverandør er konfigurert ennå. Legg til en i AI-assistent-fanen.",
"runsInOpenTerminal": "Runs in your open terminal session.", "runsInOpenTerminal": "Kjører i din åpne terminaløkt.",
"runInTerminal": "Kjør", "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": { "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": { "nav": {
"ai": "AI" "ai": "AI"
}, },
"onboarding": { "onboarding": {
"aiTitle": "AI assistant", "aiTitle": "AI-assistent",
"aiIntro": "Termix can include an optional AI assistant. You can change this later in your settings.", "aiIntro": "Termix kan inkludere en valgfri AI-assistent. Du kan endre dette senere i innstillingene dine.",
"aiSkipTitle": "Leave it off", "aiSkipTitle": "La det være av",
"aiSkipDesc": "Termix works as it does now. The assistant stays hidden.", "aiSkipDesc": "Termix fungerer som den gjør nå. Assistenten forblir skjult.",
"aiEnableTitle": "Turn it on", "aiEnableTitle": "Slå den på",
"aiEnableDesc": "Adds an assistant that reads your setup and suggests changes you approve. Needs a provider you supply, such as a local Ollama.", "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": "Nothing is sent anywhere until you add a provider and send a message." "aiNote": "Ingenting sendes noe sted før du legger til en leverandør og sender en melding."
}, },
"hosts": { "hosts": {
"docsLink": "View docs" "docsLink": "Vis dokumenter"
}, },
"agents": { "agents": {
"title": "AI Agent", "title": "AI Agent",
@@ -191,5 +191,8 @@
"reconnecting": "Reconnecting and restoring messages…", "reconnecting": "Reconnecting and restoring messages…",
"unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "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" "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue"
},
"plugin": {
"name": "AI Assistant"
} }
} }
+25 -22
View File
@@ -1,29 +1,29 @@
{ {
"permissions": { "permissions": {
"use": { "use": {
"title": "Use the assistant", "title": "Użyj asystenta",
"description": "Open the assistant and ask it things." "description": "Otwórz asystenta i zadaj mu pytania."
}, },
"manage_providers": { "manage_providers": {
"title": "Manage providers", "title": "Zarządzaj dostawcami",
"description": "Add, edit and remove the AI providers and their API keys." "description": "Dodawaj, edytuj i usuwaj dostawców sztucznej inteligencji oraz ich klucze API."
}, },
"apply_proposals": { "apply_proposals": {
"title": "Apply proposals", "title": "Zastosuj propozycje",
"description": "Let the assistant carry out the changes it suggests." "description": "Pozwól asystentowi wprowadzić sugerowane zmiany."
}, },
"services.use": { "services.use": {
"title": "Use AI from other features", "title": "Użyj sztucznej inteligencji z innych funkcji",
"description": "Other features may call the assistant on your behalf." "description": "Inne funkcje mogą umożliwiać wywoływanie asystenta w Twoim imieniu."
}, },
"secrets.share": { "secrets.share": {
"title": "Share the API key", "title": "Udostępnij klucz API",
"description": "Other features may use the stored AI API key without seeing it." "description": "Inne funkcje mogą wykorzystywać zapisany klucz API AI, nawet go nie widząc."
} }
}, },
"settings": { "settings": {
"assistantUnavailable": "The AI assistant is turned off on this server.", "assistantUnavailable": "Asystent AI jest wyłączony na tym serwerze.",
"providersNeedOptIn": "Turn on the AI assistant above to add providers.", "providersNeedOptIn": "Włącz asystenta AI powyżej, aby dodać dostawców.",
"admin": { "admin": {
"globallyEnabled": { "globallyEnabled": {
"label": "Asystent AI", "label": "Asystent AI",
@@ -31,13 +31,13 @@
}, },
"privateEndpoints": { "privateEndpoints": {
"label": "Dozwolone prywatne hosty AI", "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": { "host": {
"enableAiAssistant": { "enableAiAssistant": {
"label": "Enable AI Assistant", "label": "Włącz asystenta AI",
"description": "Allow the AI assistant to help in this host's terminal. Off by default, and still needs AI enabled for your account." "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", "modelPlaceholder": "Wybierz lub wpisz model",
"attachHint": "Wpisz @, aby odwołać się do hosta, snippetu lub automatyzacji. Zmiany są proponowane do Twojego zatwierdzenia.", "attachHint": "Wpisz @, aby odwołać się do hosta, snippetu lub automatyzacji. Zmiany są proponowane do Twojego zatwierdzenia.",
"runCommandTitle": "Uruchom polecenie", "runCommandTitle": "Uruchom polecenie",
"assistant": "AI Assistant", "assistant": "Asystent AI",
"terminalPanelEmpty": "Ask the assistant about this host. Anything that changes state needs your approval first.", "terminalPanelEmpty": "Zapytaj asystenta o tego hosta. Każda zmiana stanu wymaga Twojej zgody.",
"terminalPanelPlaceholder": "Ask about this host...", "terminalPanelPlaceholder": "Zapytaj o tego gospodarza...",
"noProvidersConfigured": "No AI provider is configured yet. Add one in the AI assistant tab.", "noProvidersConfigured": "Nie skonfigurowano jeszcze żadnego dostawcy AI. Dodaj go w zakładce Asystent AI.",
"runsInOpenTerminal": "Runs in your open terminal session.", "runsInOpenTerminal": "Działa w otwartej sesji terminalowej.",
"runInTerminal": "Uruchom", "runInTerminal": "Uruchom",
"terminalContextPrefill": "Here is my terminal output:\n\n{{output}}\n\n", "terminalContextPrefill": "Oto wynik mojego terminala:\n\n{{output}}\n\n",
"secrets": { "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": { "nav": {
@@ -191,5 +191,8 @@
"reconnecting": "Reconnecting and restoring messages…", "reconnecting": "Reconnecting and restoring messages…",
"unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "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" "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue"
},
"plugin": {
"name": "AI Assistant"
} }
} }
+79 -76
View File
@@ -1,117 +1,117 @@
{ {
"permissions": { "permissions": {
"use": { "use": {
"title": "Use the assistant", "title": "Use o assistente",
"description": "Open the assistant and ask it things." "description": "Abra o assistente e faça perguntas."
}, },
"manage_providers": { "manage_providers": {
"title": "Manage providers", "title": "Gerenciar fornecedores",
"description": "Add, edit and remove the AI providers and their API keys." "description": "Adicione, edite e remova os fornecedores de IA e suas chaves de API."
}, },
"apply_proposals": { "apply_proposals": {
"title": "Apply proposals", "title": "Apresentar propostas",
"description": "Let the assistant carry out the changes it suggests." "description": "Deixe que o assistente execute as alterações que sugerir."
}, },
"services.use": { "services.use": {
"title": "Use AI from other features", "title": "Utilizar IA de outras funcionalidades",
"description": "Other features may call the assistant on your behalf." "description": "Outras funcionalidades podem chamar o assistente em seu nome."
}, },
"secrets.share": { "secrets.share": {
"title": "Share the API key", "title": "Compartilhe a chave da API",
"description": "Other features may use the stored AI API key without seeing it." "description": "Outras funcionalidades podem usar a chave da API de IA armazenada sem visualizá-la."
} }
}, },
"settings": { "settings": {
"assistantUnavailable": "The AI assistant is turned off on this server.", "assistantUnavailable": "O assistente de IA está desativado neste servidor.",
"providersNeedOptIn": "Turn on the AI assistant above to add providers.", "providersNeedOptIn": "Ative o assistente de IA acima para adicionar fornecedores.",
"admin": { "admin": {
"globallyEnabled": { "globallyEnabled": {
"label": "AI assistant", "label": "assistente de IA",
"description": "Let users turn on the AI assistant. While this is off, the assistant is hidden and blocked for everyone." "description": "Permita que os usuários ativem o assistente de IA. Quando estiver desativado, o assistente ficará oculto e bloqueado para todos."
}, },
"privateEndpoints": { "privateEndpoints": {
"label": "Allowed private AI hosts", "label": "Hosts de IA privados permitidos",
"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": "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": { "host": {
"enableAiAssistant": { "enableAiAssistant": {
"label": "Enable AI Assistant", "label": "Ativar o assistente de IA",
"description": "Allow the AI assistant to help in this host's terminal. Off by default, and still needs AI enabled for your account." "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": { "ai": {
"title": "Assistant", "title": "Assistente",
"send": "Send", "send": "Enviar",
"stop": "Stop", "stop": "Parar",
"save": "Salvar", "save": "Salvar",
"cancel": "Cancelar", "cancel": "Cancelar",
"running": "running", "running": "correndo",
"approve": "Approve", "approve": "Aprovar",
"reject": "Reject", "reject": "Rejeitar",
"inputPlaceholder": "Ask about your servers, or describe a change to propose", "inputPlaceholder": "Pergunte sobre seus servidores ou descreva uma alteração que você gostaria de propor.",
"selectProvider": "Select a provider", "selectProvider": "Selecione um fornecedor",
"providerSettings": "Provider settings", "providerSettings": "Configurações do provedor",
"addProvider": "Add provider", "addProvider": "Adicionar provedor",
"editProvider": "Edit provider", "editProvider": "Editar provedor",
"removeProvider": "Remove provider", "removeProvider": "Remover provedor",
"providerType": "Provider", "providerType": "Fornecedor",
"providerLabel": "Name", "providerLabel": "Nome",
"providerLabelPlaceholder": "For example: Local Ollama", "providerLabelPlaceholder": "Por exemplo: Ollama local",
"baseUrl": "Server address", "baseUrl": "Endereço do servidor",
"apiKey": "API key", "apiKey": "Chave de API",
"defaultModel": "Default model", "defaultModel": "Modelo padrão",
"defaultModelPlaceholder": "For example: llama3.1 or claude-opus-5", "defaultModelPlaceholder": "Por exemplo: llama3.1 ou claude-opus-5",
"labelRequired": "Give this provider a name", "labelRequired": "Dê um nome a este fornecedor.",
"providerSaveFailed": "Could not save the provider", "providerSaveFailed": "Não foi possível salvar o provedor.",
"providerUpdated": "Provider updated", "providerUpdated": "Fornecedor atualizado",
"providerDeleteFailed": "Could not remove the provider", "providerDeleteFailed": "Não foi possível remover o provedor.",
"privateEndpointHint": "Addresses on your private network need an administrator to allow the host first.", "privateEndpointHint": "Os endereços na sua rede privada precisam que um administrador autorize o host primeiro.",
"providerOllama": "Ollama", "providerOllama": "Ollama",
"providerAnthropic": "Anthropic", "providerAnthropic": "Antrópico",
"providerOpenai": "OpenAI", "providerOpenai": "OpenAI",
"providerGemini": "Google Gemini", "providerGemini": "Google Gemini",
"providerOpenaiCompatible": "OpenAI compatible", "providerOpenaiCompatible": "Compatível com OpenAI",
"toolArguments": "Entrada", "toolArguments": "Entrada",
"toolResult": "Result", "toolResult": "Resultado",
"statusApplied": "Applied", "statusApplied": "Aplicado",
"statusRejected": "Rejected", "statusRejected": "Rejeitado",
"proposalApplied": "Change applied", "proposalApplied": "Alteração aplicada",
"proposalApplyFailed": "Could not apply the change", "proposalApplyFailed": "Não foi possível aplicar a alteração.",
"proposalRejectFailed": "Could not reject the change", "proposalRejectFailed": "Não foi possível rejeitar a alteração.",
"enableTitle": "Enable the AI assistant", "enableTitle": "Ative o assistente de IA",
"enableDescription": "Let the assistant read your setup and suggest changes for you to approve.", "enableDescription": "Deixe o assistente ler sua configuração e sugerir alterações para você aprovar.",
"readOnlyCommands": "Allow read-only diagnostic commands", "readOnlyCommands": "Permitir comandos de diagnóstico somente leitura",
"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.", "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": "Could not reach the provider, so this is a general list. You can type any model name.", "modelDetectFailed": "Não foi possível contatar o fornecedor, portanto esta é uma lista genérica. Você pode digitar o nome de qualquer modelo.",
"modelCustom": "Enter a model name", "modelCustom": "Insira o nome do modelo",
"modelRefresh": "Refresh list", "modelRefresh": "Atualizar lista",
"modelPlaceholder": "Choose or type a model", "modelPlaceholder": "Selecione ou digite um modelo",
"attachHint": "Type @ to reference a host, snippet or automation. Changes are proposed for you to approve.", "attachHint": "Digite @ para fazer referência a um host, snippet ou automação. As alterações são propostas para sua aprovação.",
"runCommandTitle": "Run command", "runCommandTitle": "Executar comando",
"assistant": "AI Assistant", "assistant": "Assistente de IA",
"terminalPanelEmpty": "Ask the assistant about this host. Anything that changes state needs your approval first.", "terminalPanelEmpty": "Pergunte ao assistente sobre este anfitrião. Qualquer alteração de estado precisa da sua aprovação prévia.",
"terminalPanelPlaceholder": "Ask about this host...", "terminalPanelPlaceholder": "Pergunte sobre este anfitrião...",
"noProvidersConfigured": "No AI provider is configured yet. Add one in the AI assistant tab.", "noProvidersConfigured": "Nenhum provedor de IA está configurado ainda. Adicione um na aba do assistente de IA.",
"runsInOpenTerminal": "Runs in your open terminal session.", "runsInOpenTerminal": "Executa na sua sessão de terminal aberta.",
"runInTerminal": "Run", "runInTerminal": "Correr",
"terminalContextPrefill": "Here is my terminal output:\n\n{{output}}\n\n", "terminalContextPrefill": "Aqui está a saída do meu terminal:\n\n{{output}}\n\n",
"secrets": { "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": { "nav": {
"ai": "AI" "ai": "IA"
}, },
"onboarding": { "onboarding": {
"aiTitle": "AI assistant", "aiTitle": "assistente de IA",
"aiIntro": "Termix can include an optional AI assistant. You can change this later in your settings.", "aiIntro": "O Termix pode incluir um assistente de IA opcional. Você pode alterar isso posteriormente nas suas configurações.",
"aiSkipTitle": "Leave it off", "aiSkipTitle": "Deixe desligado",
"aiSkipDesc": "Termix works as it does now. The assistant stays hidden.", "aiSkipDesc": "O Termix funciona como está agora. O assistente permanece oculto.",
"aiEnableTitle": "Turn it on", "aiEnableTitle": "Ligue-o",
"aiEnableDesc": "Adds an assistant that reads your setup and suggests changes you approve. Needs a provider you supply, such as a local Ollama.", "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": "Nothing is sent anywhere until you add a provider and send a message." "aiNote": "Nada será enviado até que você adicione um provedor e envie uma mensagem."
}, },
"hosts": { "hosts": {
"docsLink": "Documentação" "docsLink": "Documentação"
@@ -191,5 +191,8 @@
"reconnecting": "Reconnecting and restoring messages…", "reconnecting": "Reconnecting and restoring messages…",
"unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "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" "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue"
},
"plugin": {
"name": "AI Assistant"
} }
} }
+75 -72
View File
@@ -1,117 +1,117 @@
{ {
"permissions": { "permissions": {
"use": { "use": {
"title": "Use the assistant", "title": "Utilize o assistente",
"description": "Open the assistant and ask it things." "description": "Abra o assistente e coloque questões."
}, },
"manage_providers": { "manage_providers": {
"title": "Manage providers", "title": "Gerir fornecedores",
"description": "Add, edit and remove the AI providers and their API keys." "description": "Adicione, edite e remova os fornecedores de IA e as suas chaves API."
}, },
"apply_proposals": { "apply_proposals": {
"title": "Apply proposals", "title": "Apresentar propostas",
"description": "Let the assistant carry out the changes it suggests." "description": "Deixe que o assistente execute as alterações que sugerir."
}, },
"services.use": { "services.use": {
"title": "Use AI from other features", "title": "Utilizar IA de outras funcionalidades",
"description": "Other features may call the assistant on your behalf." "description": "Outras funcionalidades podem chamar o assistente em seu nome."
}, },
"secrets.share": { "secrets.share": {
"title": "Share the API key", "title": "Partilhar a chave da API",
"description": "Other features may use the stored AI API key without seeing it." "description": "Outras funcionalidades podem utilizar a chave da API de IA armazenada sem a visualizar."
} }
}, },
"settings": { "settings": {
"assistantUnavailable": "The AI assistant is turned off on this server.", "assistantUnavailable": "O assistente de IA está desativado neste servidor.",
"providersNeedOptIn": "Turn on the AI assistant above to add providers.", "providersNeedOptIn": "Ative o assistente de IA acima para adicionar fornecedores.",
"admin": { "admin": {
"globallyEnabled": { "globallyEnabled": {
"label": "AI assistant", "label": "assistente de IA",
"description": "Let users turn on the AI assistant. While this is off, the assistant is hidden and blocked for everyone." "description": "Permita que os utilizadores ativem o assistente de IA. Quando estiver desativado, o assistente ficará oculto e bloqueado para todos."
}, },
"privateEndpoints": { "privateEndpoints": {
"label": "Allowed private AI hosts", "label": "Hosts de IA privados permitidos",
"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": "Servidores na sua rede privada que os utilizadores podem utilizar como fornecedores, como um Ollama auto-hospedado. Coloque um servidor em cada linha."
} }
}, },
"host": { "host": {
"enableAiAssistant": { "enableAiAssistant": {
"label": "Enable AI Assistant", "label": "Ativar o assistente de IA",
"description": "Allow the AI assistant to help in this host's terminal. Off by default, and still needs AI enabled for your account." "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": { "ai": {
"title": "Assistant", "title": "Assistente",
"send": "Send", "send": "Enviar",
"stop": "Stop", "stop": "Stop",
"save": "Guardar", "save": "Guardar",
"cancel": "Cancelar", "cancel": "Cancelar",
"running": "em execução", "running": "em execução",
"approve": "Approve", "approve": "Aprovar",
"reject": "Reject", "reject": "Rejeitar",
"inputPlaceholder": "Ask about your servers, or describe a change to propose", "inputPlaceholder": "Pergunte pelos seus servidores ou descreva uma alteração que gostaria de propor.",
"selectProvider": "Select a provider", "selectProvider": "Selecione um fornecedor",
"providerSettings": "Provider settings", "providerSettings": "Configurações do fornecedor",
"addProvider": "Add provider", "addProvider": "Adicionar provedor",
"editProvider": "Edit provider", "editProvider": "Editar provedor",
"removeProvider": "Remove provider", "removeProvider": "Remover fornecedor",
"providerType": "Provider", "providerType": "Fornecedor",
"providerLabel": "Nome", "providerLabel": "Nome",
"providerLabelPlaceholder": "For example: Local Ollama", "providerLabelPlaceholder": "Por exemplo: Ollama local",
"baseUrl": "Server address", "baseUrl": "Endereço do servidor",
"apiKey": "API key", "apiKey": "Chave API",
"defaultModel": "Default model", "defaultModel": "Modelo padrão",
"defaultModelPlaceholder": "For example: llama3.1 or claude-opus-5", "defaultModelPlaceholder": "Por exemplo: llama3.1 ou claude-opus-5",
"labelRequired": "Give this provider a name", "labelRequired": "Dê um nome a este fornecedor.",
"providerSaveFailed": "Could not save the provider", "providerSaveFailed": "Não foi possível guardar o fornecedor.",
"providerUpdated": "Provider updated", "providerUpdated": "Fornecedor atualizado",
"providerDeleteFailed": "Could not remove the provider", "providerDeleteFailed": "Não foi possível remover o fornecedor.",
"privateEndpointHint": "Addresses on your private network need an administrator to allow the host first.", "privateEndpointHint": "Os endereços na sua rede privada necessitam que um administrador autorize primeiro o host.",
"providerOllama": "Ollama", "providerOllama": "Ollama",
"providerAnthropic": "Anthropic", "providerAnthropic": "Antrópico",
"providerOpenai": "OpenAI", "providerOpenai": "OpenAI",
"providerGemini": "Google Gemini", "providerGemini": "Google Gemini",
"providerOpenaiCompatible": "OpenAI compatible", "providerOpenaiCompatible": "Compatível com OpenAI",
"toolArguments": "Entrada", "toolArguments": "Entrada",
"toolResult": "Result", "toolResult": "Resultado",
"statusApplied": "Applied", "statusApplied": "Aplicado",
"statusRejected": "Rejected", "statusRejected": "Rejeitado",
"proposalApplied": "Change applied", "proposalApplied": "Alteração aplicada",
"proposalApplyFailed": "Could not apply the change", "proposalApplyFailed": "Não foi possível aplicar a alteração.",
"proposalRejectFailed": "Could not reject the change", "proposalRejectFailed": "Não foi possível rejeitar a alteração.",
"enableTitle": "Enable the AI assistant", "enableTitle": "Ative o assistente de IA",
"enableDescription": "Let the assistant read your setup and suggest changes for you to approve.", "enableDescription": "Deixe o assistente ler a sua configuração e sugerir alterações para que a aprove.",
"readOnlyCommands": "Allow read-only diagnostic commands", "readOnlyCommands": "Permitir comandos de diagnóstico de leitura apenas",
"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.", "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": "Could not reach the provider, so this is a general list. You can type any model name.", "modelDetectFailed": "Não foi possível contactar o fornecedor, pelo que esta é uma lista genérica. Pode digitar o nome de qualquer modelo.",
"modelCustom": "Enter a model name", "modelCustom": "Introduza o nome do modelo",
"modelRefresh": "Refresh list", "modelRefresh": "Atualizar lista",
"modelPlaceholder": "Choose or type a model", "modelPlaceholder": "Selecione ou introduza um modelo",
"attachHint": "Type @ to reference a host, snippet or automation. Changes are proposed for you to approve.", "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": "Run command", "runCommandTitle": "Executar comando",
"assistant": "AI Assistant", "assistant": "Assistente de IA",
"terminalPanelEmpty": "Ask the assistant about this host. Anything that changes state needs your approval first.", "terminalPanelEmpty": "Pergunte ao assistente sobre este anfitrião. Qualquer alteração de estado necessita da sua aprovação prévia.",
"terminalPanelPlaceholder": "Ask about this host...", "terminalPanelPlaceholder": "Pergunte sobre este anfitrião...",
"noProvidersConfigured": "No AI provider is configured yet. Add one in the AI assistant tab.", "noProvidersConfigured": "Nenhum fornecedor de IA está configurado ainda. Adicione um no separador do assistente de IA.",
"runsInOpenTerminal": "Runs in your open terminal session.", "runsInOpenTerminal": "Executa na sua sessão de terminal aberta.",
"runInTerminal": "Executar", "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": { "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": { "nav": {
"ai": "AI" "ai": "IA"
}, },
"onboarding": { "onboarding": {
"aiTitle": "AI assistant", "aiTitle": "assistente de IA",
"aiIntro": "Termix can include an optional AI assistant. You can change this later in your settings.", "aiIntro": "O Termix pode incluir um assistente de IA opcional. Pode alterar isso posteriormente nas suas definições.",
"aiSkipTitle": "Leave it off", "aiSkipTitle": "Deixe desligado",
"aiSkipDesc": "Termix works as it does now. The assistant stays hidden.", "aiSkipDesc": "O Termix funciona como está agora. O assistente permanece oculto.",
"aiEnableTitle": "Turn it on", "aiEnableTitle": "Ligue-o",
"aiEnableDesc": "Adds an assistant that reads your setup and suggests changes you approve. Needs a provider you supply, such as a local Ollama.", "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": "Nothing is sent anywhere until you add a provider and send a message." "aiNote": "Nada será enviado até que adicione um fornecedor e envie uma mensagem."
}, },
"hosts": { "hosts": {
"docsLink": "Ver documentação" "docsLink": "Ver documentação"
@@ -191,5 +191,8 @@
"reconnecting": "Reconnecting and restoring messages…", "reconnecting": "Reconnecting and restoring messages…",
"unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "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" "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue"
},
"plugin": {
"name": "AI Assistant"
} }
} }
+3
View File
@@ -191,5 +191,8 @@
"reconnecting": "Reconnecting and restoring messages…", "reconnecting": "Reconnecting and restoring messages…",
"unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "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" "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue"
},
"plugin": {
"name": "AI Assistant"
} }
} }
+76 -73
View File
@@ -1,117 +1,117 @@
{ {
"permissions": { "permissions": {
"use": { "use": {
"title": "Use the assistant", "title": "Воспользуйтесь помощником",
"description": "Open the assistant and ask it things." "description": "Откройте ассистента и задайте ему вопросы."
}, },
"manage_providers": { "manage_providers": {
"title": "Manage providers", "title": "Управление поставщиками",
"description": "Add, edit and remove the AI providers and their API keys." "description": "Добавляйте, редактируйте и удаляйте поставщиков ИИ и их API-ключи."
}, },
"apply_proposals": { "apply_proposals": {
"title": "Apply proposals", "title": "Подайте заявки на участие в тендере.",
"description": "Let the assistant carry out the changes it suggests." "description": "Пусть ассистент внесет предложенные им изменения."
}, },
"services.use": { "services.use": {
"title": "Use AI from other features", "title": "Используйте ИИ из других функций.",
"description": "Other features may call the assistant on your behalf." "description": "Другие функции могут вызывать голосового помощника от вашего имени."
}, },
"secrets.share": { "secrets.share": {
"title": "Share the API key", "title": "Поделитесь ключом API",
"description": "Other features may use the stored AI API key without seeing it." "description": "Другие функции могут использовать сохраненный ключ API ИИ, даже не видя его."
} }
}, },
"settings": { "settings": {
"assistantUnavailable": "The AI assistant is turned off on this server.", "assistantUnavailable": "На этом сервере ИИ-помощник отключен.",
"providersNeedOptIn": "Turn on the AI assistant above to add providers.", "providersNeedOptIn": "Включите ИИ-помощника выше, чтобы добавить поставщиков услуг.",
"admin": { "admin": {
"globallyEnabled": { "globallyEnabled": {
"label": "AI assistant", "label": "ИИ-помощник",
"description": "Let users turn on the AI assistant. While this is off, the assistant is hidden and blocked for everyone." "description": "Разрешите пользователям включить голосового помощника. Если он выключен, помощник скрыт и заблокирован для всех."
}, },
"privateEndpoints": { "privateEndpoints": {
"label": "Allowed private AI hosts", "label": "Разрешены частные хосты ИИ",
"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": "Разместите на каждой линии по одному хосту в вашей частной сети, на которые пользователи могут направлять запросы провайдера, например, самостоятельно размещенный Ollama."
} }
}, },
"host": { "host": {
"enableAiAssistant": { "enableAiAssistant": {
"label": "Enable AI Assistant", "label": "Включить ИИ-помощника",
"description": "Allow the AI assistant to help in this host's terminal. Off by default, and still needs AI enabled for your account." "description": "Разрешите помощнику с искусственным интеллектом помогать на терминале этого хоста. По умолчанию отключено, но для вашей учетной записи ИИ все равно должен быть включен."
} }
} }
}, },
"ai": { "ai": {
"title": "Assistant", "title": "Помощник",
"send": "Send", "send": "Отправлять",
"stop": "Остановить", "stop": "Остановить",
"save": "Сохранить", "save": "Сохранить",
"cancel": "Отмена", "cancel": "Отмена",
"running": "выполняется", "running": "выполняется",
"approve": "Approve", "approve": "Утвердить",
"reject": "Reject", "reject": "Отклонять",
"inputPlaceholder": "Ask about your servers, or describe a change to propose", "inputPlaceholder": "Поинтересуйтесь состоянием ваших серверов или предложите внести изменения.",
"selectProvider": "Select a provider", "selectProvider": "Выберите поставщика",
"providerSettings": "Provider settings", "providerSettings": "Настройки поставщика",
"addProvider": "Add provider", "addProvider": "Добавить поставщика",
"editProvider": "Edit provider", "editProvider": "Поставщик редактирования",
"removeProvider": "Remove provider", "removeProvider": "Удалить поставщика",
"providerType": "Provider", "providerType": "Поставщик",
"providerLabel": "Название", "providerLabel": "Название",
"providerLabelPlaceholder": "For example: Local Ollama", "providerLabelPlaceholder": "Например: Местная лама",
"baseUrl": "Server address", "baseUrl": "Адрес сервера",
"apiKey": "API key", "apiKey": "ключ API",
"defaultModel": "Default model", "defaultModel": "Модель по умолчанию",
"defaultModelPlaceholder": "For example: llama3.1 or claude-opus-5", "defaultModelPlaceholder": "Например: llama3.1 или claude-opus-5",
"labelRequired": "Give this provider a name", "labelRequired": "Укажите имя этого поставщика услуг.",
"providerSaveFailed": "Could not save the provider", "providerSaveFailed": "Не удалось сохранить поставщика услуг.",
"providerUpdated": "Provider updated", "providerUpdated": "Поставщик обновлен",
"providerDeleteFailed": "Could not remove the provider", "providerDeleteFailed": "Не удалось удалить поставщика услуг.",
"privateEndpointHint": "Addresses on your private network need an administrator to allow the host first.", "privateEndpointHint": "Для доступа к адресам в вашей частной сети необходимо предварительное разрешение администратора.",
"providerOllama": "Ollama", "providerOllama": "оллама",
"providerAnthropic": "Anthropic", "providerAnthropic": "Антропический",
"providerOpenai": "OpenAI", "providerOpenai": "OpenAI",
"providerGemini": "Google Gemini", "providerGemini": "Google Gemini",
"providerOpenaiCompatible": "OpenAI compatible", "providerOpenaiCompatible": "Совместимость с OpenAI",
"toolArguments": "Ввод", "toolArguments": "Ввод",
"toolResult": "Result", "toolResult": "Результат",
"statusApplied": "Applied", "statusApplied": "Применяемый",
"statusRejected": "Rejected", "statusRejected": "Отклоненный",
"proposalApplied": "Change applied", "proposalApplied": "Внесены изменения.",
"proposalApplyFailed": "Could not apply the change", "proposalApplyFailed": "Не удалось применить изменения.",
"proposalRejectFailed": "Could not reject the change", "proposalRejectFailed": "Не мог отклонить изменение.",
"enableTitle": "Enable the AI assistant", "enableTitle": "Включите ИИ-помощника",
"enableDescription": "Let the assistant read your setup and suggest changes for you to approve.", "enableDescription": "Позвольте ассистенту ознакомиться с вашими настройками и предложить изменения для утверждения.",
"readOnlyCommands": "Allow read-only diagnostic commands", "readOnlyCommands": "Разрешить диагностические команды только для чтения",
"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.", "readOnlyCommandsDescription": "Ассистент может выполнить короткий список безопасных команд, таких как df и uptime, не запрашивая подтверждения каждый раз. Любая команда, изменяющая состояние сервера, всегда предлагается в первую очередь.",
"modelDetectFailed": "Could not reach the provider, so this is a general list. You can type any model name.", "modelDetectFailed": "Не удалось связаться с поставщиком, поэтому это общий список. Вы можете ввести любое название модели.",
"modelCustom": "Enter a model name", "modelCustom": "Введите название модели",
"modelRefresh": "Refresh list", "modelRefresh": "Обновить список",
"modelPlaceholder": "Choose or type a model", "modelPlaceholder": "Выберите или введите модель",
"attachHint": "Type @ to reference a host, snippet or automation. Changes are proposed for you to approve.", "attachHint": "Введите @ для ссылки на хост, фрагмент кода или автоматизацию. Предлагаются изменения для вашего утверждения.",
"runCommandTitle": "Run command", "runCommandTitle": "Выполните команду",
"assistant": "AI Assistant", "assistant": "ИИ-помощник",
"terminalPanelEmpty": "Ask the assistant about this host. Anything that changes state needs your approval first.", "terminalPanelEmpty": "Спросите помощника об этом хосте. Любое изменение состояния требует вашего предварительного одобрения.",
"terminalPanelPlaceholder": "Ask about this host...", "terminalPanelPlaceholder": "Спросите об этом хостинге...",
"noProvidersConfigured": "No AI provider is configured yet. Add one in the AI assistant tab.", "noProvidersConfigured": "Поставщик ИИ пока не настроен. Добавьте его на вкладке «Помощник ИИ».",
"runsInOpenTerminal": "Runs in your open terminal session.", "runsInOpenTerminal": "Запускается в открытой терминальной сессии.",
"runInTerminal": "Запустить", "runInTerminal": "Запустить",
"terminalContextPrefill": "Here is my terminal output:\n\n{{output}}\n\n", "terminalContextPrefill": "Вот вывод моего терминала:\n\n{{output}}\n\n",
"secrets": { "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": { "nav": {
"ai": "AI" "ai": "ИИ"
}, },
"onboarding": { "onboarding": {
"aiTitle": "AI assistant", "aiTitle": "ИИ-помощник",
"aiIntro": "Termix can include an optional AI assistant. You can change this later in your settings.", "aiIntro": "В Termix можно добавить опционального ИИ-помощника. Это можно изменить позже в настройках.",
"aiSkipTitle": "Leave it off", "aiSkipTitle": "Оставьте это выключенным.",
"aiSkipDesc": "Termix works as it does now. The assistant stays hidden.", "aiSkipDesc": "Termix работает так, как сейчас. Ассистент остается скрытым.",
"aiEnableTitle": "Turn it on", "aiEnableTitle": "Включите его",
"aiEnableDesc": "Adds an assistant that reads your setup and suggests changes you approve. Needs a provider you supply, such as a local Ollama.", "aiEnableDesc": "Добавляет помощника, который анализирует ваши настройки и предлагает изменения, которые вы одобряете. Требуется поставщик, которого вы предоставляете, например, местный Ollama.",
"aiNote": "Nothing is sent anywhere until you add a provider and send a message." "aiNote": "Ничего никуда не отправляется, пока вы не добавите поставщика услуг и не отправите сообщение."
}, },
"hosts": { "hosts": {
"docsLink": "Документация" "docsLink": "Документация"
@@ -191,5 +191,8 @@
"reconnecting": "Reconnecting and restoring messages…", "reconnecting": "Reconnecting and restoring messages…",
"unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "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" "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue"
},
"plugin": {
"name": "AI Assistant"
} }
} }
+85 -82
View File
@@ -1,120 +1,120 @@
{ {
"permissions": { "permissions": {
"use": { "use": {
"title": "Use the assistant", "title": "Користите помоћника",
"description": "Open the assistant and ask it things." "description": "Отворите асистента и питајте га."
}, },
"manage_providers": { "manage_providers": {
"title": "Manage providers", "title": "Управљајте добављачима",
"description": "Add, edit and remove the AI providers and their API keys." "description": "Додајте, уредите и уклоните добављаче вештачке интелигенције и њихове АПИ кључеве."
}, },
"apply_proposals": { "apply_proposals": {
"title": "Apply proposals", "title": "Примени предлоге",
"description": "Let the assistant carry out the changes it suggests." "description": "Нека асистент изврши измене које предложи."
}, },
"services.use": { "services.use": {
"title": "Use AI from other features", "title": "Користите вештачку интелигенцију из других функција",
"description": "Other features may call the assistant on your behalf." "description": "Друге функције могу позвати асистента у ваше име."
}, },
"secrets.share": { "secrets.share": {
"title": "Share the API key", "title": "Поделите API кључ",
"description": "Other features may use the stored AI API key without seeing it." "description": "Друге функције могу користити сачувани AI API кључ, а да га не виде."
} }
}, },
"settings": { "settings": {
"assistantUnavailable": "The AI assistant is turned off on this server.", "assistantUnavailable": "АИ асистент је искључен на овом серверу.",
"providersNeedOptIn": "Turn on the AI assistant above to add providers.", "providersNeedOptIn": "Укључите AI асистента изнад да бисте додали добављаче.",
"admin": { "admin": {
"globallyEnabled": { "globallyEnabled": {
"label": "AI assistant", "label": "Асистент за вештачку интелигенцију",
"description": "Let users turn on the AI assistant. While this is off, the assistant is hidden and blocked for everyone." "description": "Дозволите корисницима да укључе вештачку интелигенцију асистента. Док је ово искључено, асистент је скривен и блокиран за све."
}, },
"privateEndpoints": { "privateEndpoints": {
"label": "Allowed private AI hosts", "label": "Дозвољени приватни 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": "Домаћини на вашој приватној мрежи на које корисници могу усмерити провајдера, као што је самостално хостовани Ollama. Ставите по један хост у сваки ред."
} }
}, },
"host": { "host": {
"enableAiAssistant": { "enableAiAssistant": {
"label": "Enable AI Assistant", "label": "Омогући AI асистент",
"description": "Allow the AI assistant to help in this host's terminal. Off by default, and still needs AI enabled for your account." "description": "Дозволите вештачкој интелигенцији да помогне у терминалу овог хоста. Искључено је подразумевано, а и даље је потребно да вештачка интелигенција буде омогућена за ваш налог."
} }
} }
}, },
"ai": { "ai": {
"title": "Assistant", "title": "Асистент",
"send": "Send", "send": "Пошаљи",
"stop": "Stop", "stop": "Заустави",
"save": "Save", "save": "Сачувај",
"cancel": "Cancel", "cancel": "Откажи",
"running": "running", "running": "трчање",
"approve": "Approve", "approve": "Одобри",
"reject": "Reject", "reject": "Одбиј",
"inputPlaceholder": "Ask about your servers, or describe a change to propose", "inputPlaceholder": "Питајте о својим серверима или опишите промену коју желите да предложите",
"selectProvider": "Select a provider", "selectProvider": "Изаберите добављача",
"providerSettings": "Provider settings", "providerSettings": "Подешавања добављача",
"addProvider": "Add provider", "addProvider": "Додај добављача",
"editProvider": "Edit provider", "editProvider": "Измени добављача",
"removeProvider": "Remove provider", "removeProvider": "Уклони добављача",
"providerType": "Provider", "providerType": "Провајдер",
"providerLabel": "Name", "providerLabel": "Име",
"providerLabelPlaceholder": "For example: Local Ollama", "providerLabelPlaceholder": "На пример: Локална Олама",
"baseUrl": "Server address", "baseUrl": "Адреса сервера",
"apiKey": "API key", "apiKey": "API кључ",
"defaultModel": "Default model", "defaultModel": "Подразумевани модел",
"defaultModelPlaceholder": "For example: llama3.1 or claude-opus-5", "defaultModelPlaceholder": "На пример: llama3.1 или claude-opus-5",
"labelRequired": "Give this provider a name", "labelRequired": "Дајте име овом добављачу",
"providerSaveFailed": "Could not save the provider", "providerSaveFailed": "Није могуће сачувати добављача",
"providerUpdated": "Provider updated", "providerUpdated": "Провајдер је ажуриран",
"providerDeleteFailed": "Could not remove the provider", "providerDeleteFailed": "Није могуће уклонити добављача",
"privateEndpointHint": "Addresses on your private network need an administrator to allow the host first.", "privateEndpointHint": "Адресе на вашој приватној мрежи прво треба да дозволе администратору хоста.",
"providerOllama": "Ollama", "providerOllama": "Олама",
"providerAnthropic": "Anthropic", "providerAnthropic": "Антропски",
"providerOpenai": "OpenAI", "providerOpenai": "OpenAI",
"providerGemini": "Google Gemini", "providerGemini": "Гугл Џемини",
"providerOpenaiCompatible": "OpenAI compatible", "providerOpenaiCompatible": "Компатибилно са OpenAI-ом",
"toolArguments": "Input", "toolArguments": "Унос",
"toolResult": "Result", "toolResult": "Резултат",
"statusApplied": "Applied", "statusApplied": "Примењено",
"statusRejected": "Rejected", "statusRejected": "Одбијено",
"proposalApplied": "Change applied", "proposalApplied": "Промена је примењена",
"proposalApplyFailed": "Could not apply the change", "proposalApplyFailed": "Није могуће применити промену",
"proposalRejectFailed": "Could not reject the change", "proposalRejectFailed": "Није могуће одбити промену",
"enableTitle": "Enable the AI assistant", "enableTitle": "Омогућите вештачку интелигенцију (AI) асистента",
"enableDescription": "Let the assistant read your setup and suggest changes for you to approve.", "enableDescription": "Нека асистент прочита ваша подешавања и предложи измене које ћете одобрити.",
"readOnlyCommands": "Allow read-only diagnostic commands", "readOnlyCommands": "Дозволи дијагностичке команде само за читање",
"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.", "readOnlyCommandsDescription": "Асистент може да покрене кратку листу безбедних команди као што су df и uptime без сваког питања. Све што мења сервер се увек прво предлаже.",
"modelDetectFailed": "Could not reach the provider, so this is a general list. You can type any model name.", "modelDetectFailed": "Нисмо могли да контактирамо добављача, тако да је ово општа листа. Можете да унесете било који назив модела.",
"modelCustom": "Enter a model name", "modelCustom": "Унесите назив модела",
"modelRefresh": "Refresh list", "modelRefresh": "Освежи листу",
"modelPlaceholder": "Choose or type a model", "modelPlaceholder": "Изаберите или унесите модел",
"attachHint": "Type @ to reference a host, snippet or automation. Changes are proposed for you to approve.", "attachHint": "Унесите @ да бисте референцирали хост, исечак кода или аутоматизацију. Промене се предлажу да бисте их одобрили.",
"runCommandTitle": "Run command", "runCommandTitle": "Покрени команду",
"assistant": "AI Assistant", "assistant": "АИ асистент",
"terminalPanelEmpty": "Ask the assistant about this host. Anything that changes state needs your approval first.", "terminalPanelEmpty": "Питајте асистента о овом домаћину. Све што мења стање прво захтева ваше одобрење.",
"terminalPanelPlaceholder": "Ask about this host...", "terminalPanelPlaceholder": "Питајте о овом домаћину...",
"noProvidersConfigured": "No AI provider is configured yet. Add one in the AI assistant tab.", "noProvidersConfigured": "Још увек није конфигурисан ниједан добављач вештачке интелигенције. Додајте га на картици помоћника за вештачку интелигенцију.",
"runsInOpenTerminal": "Runs in your open terminal session.", "runsInOpenTerminal": "Покреће се у вашој отвореној терминалној сесији.",
"runInTerminal": "Run", "runInTerminal": "Трчи",
"terminalContextPrefill": "Here is my terminal output:\n\n{{output}}\n\n", "terminalContextPrefill": "Ево мог терминалног излаза:\n\n{{output}}\n\n",
"secrets": { "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": { "nav": {
"ai": "AI" "ai": "Вештачка интелигенција"
}, },
"onboarding": { "onboarding": {
"aiTitle": "AI assistant", "aiTitle": "Асистент за вештачку интелигенцију",
"aiIntro": "Termix can include an optional AI assistant. You can change this later in your settings.", "aiIntro": "Termix може да укључи опционог AI асистента. Ово можете касније променити у подешавањима.",
"aiSkipTitle": "Leave it off", "aiSkipTitle": "Остави то искључено",
"aiSkipDesc": "Termix works as it does now. The assistant stays hidden.", "aiSkipDesc": "Термикс ради као и сада. Асистент остаје скривен.",
"aiEnableTitle": "Turn it on", "aiEnableTitle": "Укључи га",
"aiEnableDesc": "Adds an assistant that reads your setup and suggests changes you approve. Needs a provider you supply, such as a local Ollama.", "aiEnableDesc": "Додаје асистента који чита ваша подешавања и предлаже измене које одобравате. Потребан је добављач кога ви обезбедите, као што је локални Олама.",
"aiNote": "Nothing is sent anywhere until you add a provider and send a message." "aiNote": "Ништа се не шаље нигде док не додате провајдера и не пошаљете поруку."
}, },
"hosts": { "hosts": {
"docsLink": "View docs" "docsLink": "Прикажи документе"
}, },
"agents": { "agents": {
"title": "AI Agent", "title": "AI Agent",
@@ -191,5 +191,8 @@
"reconnecting": "Reconnecting and restoring messages…", "reconnecting": "Reconnecting and restoring messages…",
"unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "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" "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue"
},
"plugin": {
"name": "AI Assistant"
} }
} }
+82 -79
View File
@@ -1,120 +1,120 @@
{ {
"permissions": { "permissions": {
"use": { "use": {
"title": "Use the assistant", "title": "Använd assistenten",
"description": "Open the assistant and ask it things." "description": "Öppna assistenten och fråga den saker."
}, },
"manage_providers": { "manage_providers": {
"title": "Manage providers", "title": "Hantera leverantörer",
"description": "Add, edit and remove the AI providers and their API keys." "description": "Lägg till, redigera och ta bort AI-leverantörerna och deras API-nycklar."
}, },
"apply_proposals": { "apply_proposals": {
"title": "Apply proposals", "title": "Tillämpa förslag",
"description": "Let the assistant carry out the changes it suggests." "description": "Låt assistenten utföra de ändringar den föreslår."
}, },
"services.use": { "services.use": {
"title": "Use AI from other features", "title": "Använd AI från andra funktioner",
"description": "Other features may call the assistant on your behalf." "description": "Andra funktioner kan ringa assistenten åt dig."
}, },
"secrets.share": { "secrets.share": {
"title": "Share the API key", "title": "Dela API-nyckeln",
"description": "Other features may use the stored AI API key without seeing it." "description": "Andra funktioner kan använda den lagrade AI API-nyckeln utan att se den."
} }
}, },
"settings": { "settings": {
"assistantUnavailable": "The AI assistant is turned off on this server.", "assistantUnavailable": "AI-assistenten är avstängd på den här servern.",
"providersNeedOptIn": "Turn on the AI assistant above to add providers.", "providersNeedOptIn": "Aktivera AI-assistenten ovan för att lägga till leverantörer.",
"admin": { "admin": {
"globallyEnabled": { "globallyEnabled": {
"label": "AI assistant", "label": "AI-assistent",
"description": "Let users turn on the AI assistant. While this is off, the assistant is hidden and blocked for everyone." "description": "Låt användare aktivera AI-assistenten. Medan detta är avstängt är assistenten dold och blockerad för alla."
}, },
"privateEndpoints": { "privateEndpoints": {
"label": "Allowed private AI hosts", "label": "Tillåtna privata AI-värdar",
"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": "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": { "host": {
"enableAiAssistant": { "enableAiAssistant": {
"label": "Enable AI Assistant", "label": "Aktivera AI-assistenten",
"description": "Allow the AI assistant to help in this host's terminal. Off by default, and still needs AI enabled for your account." "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": { "ai": {
"title": "Assistant", "title": "Assistent",
"send": "Send", "send": "Skicka",
"stop": "Stop", "stop": "Stopp",
"save": "Save", "save": "Spara",
"cancel": "Cancel", "cancel": "Avboka",
"running": "running", "running": "spring",
"approve": "Approve", "approve": "Godkänna",
"reject": "Reject", "reject": "Avvisa",
"inputPlaceholder": "Ask about your servers, or describe a change to propose", "inputPlaceholder": "Fråga om era servrar, eller beskriv en förändring att föreslå",
"selectProvider": "Select a provider", "selectProvider": "Välj en leverantör",
"providerSettings": "Provider settings", "providerSettings": "Leverantörsinställningar",
"addProvider": "Add provider", "addProvider": "Lägg till leverantör",
"editProvider": "Edit provider", "editProvider": "Redigera leverantör",
"removeProvider": "Remove provider", "removeProvider": "Ta bort leverantör",
"providerType": "Provider", "providerType": "Leverantör",
"providerLabel": "Name", "providerLabel": "Namn",
"providerLabelPlaceholder": "For example: Local Ollama", "providerLabelPlaceholder": "Till exempel: Lokal Ollama",
"baseUrl": "Server address", "baseUrl": "Serveradress",
"apiKey": "API key", "apiKey": "API-nyckel",
"defaultModel": "Default model", "defaultModel": "Standardmodell",
"defaultModelPlaceholder": "For example: llama3.1 or claude-opus-5", "defaultModelPlaceholder": "Till exempel: llama3.1 eller claude-opus-5",
"labelRequired": "Give this provider a name", "labelRequired": "Ge den här leverantören ett namn",
"providerSaveFailed": "Could not save the provider", "providerSaveFailed": "Kunde inte spara leverantören",
"providerUpdated": "Provider updated", "providerUpdated": "Leverantören uppdaterad",
"providerDeleteFailed": "Could not remove the provider", "providerDeleteFailed": "Kunde inte ta bort leverantören",
"privateEndpointHint": "Addresses on your private network need an administrator to allow the host first.", "privateEndpointHint": "Adresser i ditt privata nätverk behöver en administratör som först tillåter värden.",
"providerOllama": "Ollama", "providerOllama": "Ollama",
"providerAnthropic": "Anthropic", "providerAnthropic": "Antropisk",
"providerOpenai": "OpenAI", "providerOpenai": "Öppen AI",
"providerGemini": "Google Gemini", "providerGemini": "Google Gemini",
"providerOpenaiCompatible": "OpenAI compatible", "providerOpenaiCompatible": "OpenAI-kompatibel",
"toolArguments": "Input", "toolArguments": "Input",
"toolResult": "Result", "toolResult": "Resultat",
"statusApplied": "Applied", "statusApplied": "Tillämpad",
"statusRejected": "Rejected", "statusRejected": "Avvisad",
"proposalApplied": "Change applied", "proposalApplied": "Ändring tillämpad",
"proposalApplyFailed": "Could not apply the change", "proposalApplyFailed": "Kunde inte tillämpa ändringen",
"proposalRejectFailed": "Could not reject the change", "proposalRejectFailed": "Kunde inte avvisa ändringen",
"enableTitle": "Enable the AI assistant", "enableTitle": "Aktivera AI-assistenten",
"enableDescription": "Let the assistant read your setup and suggest changes for you to approve.", "enableDescription": "Låt assistenten läsa dina inställningar och föreslå ändringar som du kan godkänna.",
"readOnlyCommands": "Allow read-only diagnostic commands", "readOnlyCommands": "Tillåt skrivskyddade diagnostikkommandon",
"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.", "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": "Could not reach the provider, so this is a general list. You can type any model name.", "modelDetectFailed": "Kunde inte nå leverantören, så detta är en allmän lista. Du kan skriva in vilket modellnamn som helst.",
"modelCustom": "Enter a model name", "modelCustom": "Ange ett modellnamn",
"modelRefresh": "Refresh list", "modelRefresh": "Uppdatera listan",
"modelPlaceholder": "Choose or type a model", "modelPlaceholder": "Välj eller skriv en modell",
"attachHint": "Type @ to reference a host, snippet or automation. Changes are proposed for you to approve.", "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": "Run command", "runCommandTitle": "Kör kommando",
"assistant": "AI Assistant", "assistant": "AI-assistent",
"terminalPanelEmpty": "Ask the assistant about this host. Anything that changes state needs your approval first.", "terminalPanelEmpty": "Fråga assistenten om den här värden. Allt som ändras kräver ditt godkännande först.",
"terminalPanelPlaceholder": "Ask about this host...", "terminalPanelPlaceholder": "Fråga om den här värden...",
"noProvidersConfigured": "No AI provider is configured yet. Add one in the AI assistant tab.", "noProvidersConfigured": "Ingen AI-leverantör är konfigurerad ännu. Lägg till en på fliken AI-assistent.",
"runsInOpenTerminal": "Runs in your open terminal session.", "runsInOpenTerminal": "Körs i din öppna terminalsession.",
"runInTerminal": "Run", "runInTerminal": "Sikt",
"terminalContextPrefill": "Here is my terminal output:\n\n{{output}}\n\n", "terminalContextPrefill": "Här är min terminalutgång:\n\n{{output}}\n\n",
"secrets": { "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": { "nav": {
"ai": "AI" "ai": "AI"
}, },
"onboarding": { "onboarding": {
"aiTitle": "AI assistant", "aiTitle": "AI-assistent",
"aiIntro": "Termix can include an optional AI assistant. You can change this later in your settings.", "aiIntro": "Termix kan inkludera en valfri AI-assistent. Du kan ändra detta senare i dina inställningar.",
"aiSkipTitle": "Leave it off", "aiSkipTitle": "Lämna den av",
"aiSkipDesc": "Termix works as it does now. The assistant stays hidden.", "aiSkipDesc": "Termix fungerar som den gör nu. Assistenten förblir dold.",
"aiEnableTitle": "Turn it on", "aiEnableTitle": "Slå på den",
"aiEnableDesc": "Adds an assistant that reads your setup and suggests changes you approve. Needs a provider you supply, such as a local Ollama.", "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": "Nothing is sent anywhere until you add a provider and send a message." "aiNote": "Ingenting skickas någonstans förrän du lägger till en leverantör och skickar ett meddelande."
}, },
"hosts": { "hosts": {
"docsLink": "View docs" "docsLink": "Visa dokument"
}, },
"agents": { "agents": {
"title": "AI Agent", "title": "AI Agent",
@@ -191,5 +191,8 @@
"reconnecting": "Reconnecting and restoring messages…", "reconnecting": "Reconnecting and restoring messages…",
"unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "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" "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue"
},
"plugin": {
"name": "AI Assistant"
} }
} }
+85 -82
View File
@@ -1,120 +1,120 @@
{ {
"permissions": { "permissions": {
"use": { "use": {
"title": "Use the assistant", "title": "ใช้ตัวช่วย",
"description": "Open the assistant and ask it things." "description": "เปิดผู้ช่วยเสมือนจริงแล้วถามคำถามได้เลย"
}, },
"manage_providers": { "manage_providers": {
"title": "Manage providers", "title": "จัดการผู้ให้บริการ",
"description": "Add, edit and remove the AI providers and their API keys." "description": "เพิ่ม แก้ไข และลบผู้ให้บริการ AI และคีย์ API ของพวกเขา"
}, },
"apply_proposals": { "apply_proposals": {
"title": "Apply proposals", "title": "ยื่นข้อเสนอ",
"description": "Let the assistant carry out the changes it suggests." "description": "ให้ผู้ช่วยดำเนินการเปลี่ยนแปลงตามที่ระบบแนะนำ"
}, },
"services.use": { "services.use": {
"title": "Use AI from other features", "title": "ใช้ AI จากฟีเจอร์อื่นๆ",
"description": "Other features may call the assistant on your behalf." "description": "ฟังก์ชันอื่นๆ อาจโทรติดต่อผู้ช่วยในนามของคุณ"
}, },
"secrets.share": { "secrets.share": {
"title": "Share the API key", "title": "แชร์คีย์ API",
"description": "Other features may use the stored AI API key without seeing it." "description": "ฟังก์ชันอื่นๆ อาจใช้คีย์ API ของ AI ที่บันทึกไว้โดยไม่เห็นคีย์นั้น"
} }
}, },
"settings": { "settings": {
"assistantUnavailable": "The AI assistant is turned off on this server.", "assistantUnavailable": "ระบบผู้ช่วย AI ถูกปิดใช้งานบนเซิร์ฟเวอร์นี้",
"providersNeedOptIn": "Turn on the AI assistant above to add providers.", "providersNeedOptIn": "เปิดใช้งานผู้ช่วย AI ด้านบนเพื่อเพิ่มผู้ให้บริการ",
"admin": { "admin": {
"globallyEnabled": { "globallyEnabled": {
"label": "AI assistant", "label": "ผู้ช่วย AI",
"description": "Let users turn on the AI assistant. While this is off, the assistant is hidden and blocked for everyone." "description": "อนุญาตให้ผู้ใช้เปิดใช้งานผู้ช่วย AI ได้ เมื่อปิดใช้งานอยู่ ผู้ช่วยจะถูกซ่อนและบล็อกไม่ให้ใครเห็น"
}, },
"privateEndpoints": { "privateEndpoints": {
"label": "Allowed private AI hosts", "label": "อนุญาตให้โฮสต์ 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": "โฮสต์บนเครือข่ายส่วนตัวของคุณที่ผู้ใช้สามารถชี้ไปยังผู้ให้บริการได้ เช่น Ollama ที่ติดตั้งเอง ให้ใส่โฮสต์หนึ่งตัวต่อหนึ่งบรรทัด"
} }
}, },
"host": { "host": {
"enableAiAssistant": { "enableAiAssistant": {
"label": "Enable AI Assistant", "label": "เปิดใช้งานผู้ช่วย AI",
"description": "Allow the AI assistant to help in this host's terminal. Off by default, and still needs AI enabled for your account." "description": "อนุญาตให้ผู้ช่วย AI ช่วยเหลือในเทอร์มินัลของโฮสต์นี้ โดยค่าเริ่มต้นจะปิดอยู่ และยังคงต้องเปิดใช้งาน AI สำหรับบัญชีของคุณก่อน"
} }
} }
}, },
"ai": { "ai": {
"title": "Assistant", "title": "ผู้ช่วย",
"send": "Send", "send": "ส่ง",
"stop": "Stop", "stop": "หยุด",
"save": "Save", "save": "บันทึก",
"cancel": "Cancel", "cancel": "ยกเลิก",
"running": "running", "running": "วิ่ง",
"approve": "Approve", "approve": "อนุมัติ",
"reject": "Reject", "reject": "ปฏิเสธ",
"inputPlaceholder": "Ask about your servers, or describe a change to propose", "inputPlaceholder": "สอบถามเกี่ยวกับเซิร์ฟเวอร์ของคุณ หรืออธิบายการเปลี่ยนแปลงที่คุณต้องการเสนอแนะ",
"selectProvider": "Select a provider", "selectProvider": "เลือกผู้ให้บริการ",
"providerSettings": "Provider settings", "providerSettings": "การตั้งค่าผู้ให้บริการ",
"addProvider": "Add provider", "addProvider": "เพิ่มผู้ให้บริการ",
"editProvider": "Edit provider", "editProvider": "แก้ไขผู้ให้บริการ",
"removeProvider": "Remove provider", "removeProvider": "ลบผู้ให้บริการ",
"providerType": "Provider", "providerType": "ผู้ให้บริการ",
"providerLabel": "Name", "providerLabel": "ชื่อ",
"providerLabelPlaceholder": "For example: Local Ollama", "providerLabelPlaceholder": "ตัวอย่างเช่น: Ollama ท้องถิ่น",
"baseUrl": "Server address", "baseUrl": "ที่อยู่เซิร์ฟเวอร์",
"apiKey": "API key", "apiKey": "คีย์ API",
"defaultModel": "Default model", "defaultModel": "โมเดลเริ่มต้น",
"defaultModelPlaceholder": "For example: llama3.1 or claude-opus-5", "defaultModelPlaceholder": "ตัวอย่างเช่น: llama3.1 หรือ claude-opus-5",
"labelRequired": "Give this provider a name", "labelRequired": "ตั้งชื่อให้ผู้ให้บริการรายนี้",
"providerSaveFailed": "Could not save the provider", "providerSaveFailed": "ไม่สามารถบันทึกผู้ให้บริการได้",
"providerUpdated": "Provider updated", "providerUpdated": "ผู้ให้บริการได้รับการอัปเดตแล้ว",
"providerDeleteFailed": "Could not remove the provider", "providerDeleteFailed": "ไม่สามารถลบผู้ให้บริการได้",
"privateEndpointHint": "Addresses on your private network need an administrator to allow the host first.", "privateEndpointHint": "การเข้าถึงที่อยู่บนเครือข่ายส่วนตัวของคุณนั้น จำเป็นต้องให้ผู้ดูแลระบบอนุญาตก่อน",
"providerOllama": "Ollama", "providerOllama": "โอลาม่า",
"providerAnthropic": "Anthropic", "providerAnthropic": "แอนโทรปิก",
"providerOpenai": "OpenAI", "providerOpenai": "โอเพ่นไอ",
"providerGemini": "Google Gemini", "providerGemini": "กูเกิล เจมินี",
"providerOpenaiCompatible": "OpenAI compatible", "providerOpenaiCompatible": "เข้ากันได้กับ OpenAI",
"toolArguments": "Input", "toolArguments": "ป้อนข้อมูล",
"toolResult": "Result", "toolResult": "ผลลัพธ์",
"statusApplied": "Applied", "statusApplied": "สมัครแล้ว",
"statusRejected": "Rejected", "statusRejected": "ถูกปฏิเสธ",
"proposalApplied": "Change applied", "proposalApplied": "มีการเปลี่ยนแปลงเกิดขึ้น",
"proposalApplyFailed": "Could not apply the change", "proposalApplyFailed": "ไม่สามารถทำการเปลี่ยนแปลงได้",
"proposalRejectFailed": "Could not reject the change", "proposalRejectFailed": "ไม่สามารถปฏิเสธการเปลี่ยนแปลงได้",
"enableTitle": "Enable the AI assistant", "enableTitle": "เปิดใช้งานผู้ช่วย AI",
"enableDescription": "Let the assistant read your setup and suggest changes for you to approve.", "enableDescription": "ให้ผู้ช่วยอ่านการตั้งค่าของคุณและแนะนำการเปลี่ยนแปลงเพื่อให้คุณอนุมัติ",
"readOnlyCommands": "Allow read-only diagnostic commands", "readOnlyCommands": "อนุญาตคำสั่งวินิจฉัยแบบอ่านอย่างเดียว",
"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.", "readOnlyCommandsDescription": "ผู้ช่วยอาจเรียกใช้คำสั่งที่ปลอดภัยเพียงไม่กี่คำสั่ง เช่น df และ uptime โดยไม่ต้องถามทุกครั้ง คำสั่งใดๆ ที่เปลี่ยนแปลงสถานะของเซิร์ฟเวอร์จะถูกเสนอให้ดำเนินการก่อนเสมอ",
"modelDetectFailed": "Could not reach the provider, so this is a general list. You can type any model name.", "modelDetectFailed": "ไม่สามารถติดต่อผู้ให้บริการได้ ดังนั้นนี่จึงเป็นรายการทั่วไป คุณสามารถพิมพ์ชื่อรุ่นใดก็ได้",
"modelCustom": "Enter a model name", "modelCustom": "ป้อนชื่อรุ่น",
"modelRefresh": "Refresh list", "modelRefresh": "รีเฟรชรายการ",
"modelPlaceholder": "Choose or type a model", "modelPlaceholder": "เลือกหรือพิมพ์แบบจำลอง",
"attachHint": "Type @ to reference a host, snippet or automation. Changes are proposed for you to approve.", "attachHint": "พิมพ์ @ เพื่ออ้างอิงถึงโฮสต์ สนิปเป็ต หรือระบบอัตโนมัติ การเปลี่ยนแปลงที่เสนอจะถูกนำมาให้คุณอนุมัติ",
"runCommandTitle": "Run command", "runCommandTitle": "เรียกใช้คำสั่ง",
"assistant": "AI Assistant", "assistant": "ผู้ช่วย AI",
"terminalPanelEmpty": "Ask the assistant about this host. Anything that changes state needs your approval first.", "terminalPanelEmpty": "สอบถามผู้ช่วยเกี่ยวกับโฮสต์นี้ การเปลี่ยนแปลงสถานะใดๆ ต้องได้รับการอนุมัติจากคุณก่อน",
"terminalPanelPlaceholder": "Ask about this host...", "terminalPanelPlaceholder": "สอบถามเกี่ยวกับโฮสต์รายนี้...",
"noProvidersConfigured": "No AI provider is configured yet. Add one in the AI assistant tab.", "noProvidersConfigured": "ยังไม่ได้ตั้งค่าผู้ให้บริการ AI เพิ่มผู้ให้บริการในแท็บผู้ช่วย AI",
"runsInOpenTerminal": "Runs in your open terminal session.", "runsInOpenTerminal": "ทำงานในเซสชันเทอร์มินัลที่เปิดอยู่ของคุณ",
"runInTerminal": "Run", "runInTerminal": "วิ่ง",
"terminalContextPrefill": "Here is my terminal output:\n\n{{output}}\n\n", "terminalContextPrefill": "นี่คือผลลัพธ์จากเทอร์มินัลของฉัน:\n\n{{output}}\n\n",
"secrets": { "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": { "nav": {
"ai": "AI" "ai": "AI"
}, },
"onboarding": { "onboarding": {
"aiTitle": "AI assistant", "aiTitle": "ผู้ช่วย AI",
"aiIntro": "Termix can include an optional AI assistant. You can change this later in your settings.", "aiIntro": "Termix อาจมีผู้ช่วย AI เสริม คุณสามารถเปลี่ยนการตั้งค่าได้ในภายหลัง",
"aiSkipTitle": "Leave it off", "aiSkipTitle": "ปิดมันไว้",
"aiSkipDesc": "Termix works as it does now. The assistant stays hidden.", "aiSkipDesc": "Termix ทำงานเหมือนเดิมทุกประการ ตัวช่วยยังคงซ่อนอยู่",
"aiEnableTitle": "Turn it on", "aiEnableTitle": "เปิดใช้งาน",
"aiEnableDesc": "Adds an assistant that reads your setup and suggests changes you approve. Needs a provider you supply, such as a local Ollama.", "aiEnableDesc": "เพิ่มผู้ช่วยที่จะอ่านการตั้งค่าของคุณและแนะนำการเปลี่ยนแปลงที่คุณต้องอนุมัติ จำเป็นต้องมีผู้ให้บริการที่คุณจัดหาให้ เช่น Ollama ในพื้นที่ของคุณ",
"aiNote": "Nothing is sent anywhere until you add a provider and send a message." "aiNote": "จะไม่มีการส่งข้อมูลใดๆ จนกว่าคุณจะเพิ่มผู้ให้บริการและส่งข้อความ"
}, },
"hosts": { "hosts": {
"docsLink": "View docs" "docsLink": "ดูเอกสาร"
}, },
"agents": { "agents": {
"title": "AI Agent", "title": "AI Agent",
@@ -191,5 +191,8 @@
"reconnecting": "Reconnecting and restoring messages…", "reconnecting": "Reconnecting and restoring messages…",
"unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "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" "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue"
},
"plugin": {
"name": "AI Assistant"
} }
} }
+75 -72
View File
@@ -1,117 +1,117 @@
{ {
"permissions": { "permissions": {
"use": { "use": {
"title": "Use the assistant", "title": "Yardımcıyı kullanın",
"description": "Open the assistant and ask it things." "description": "Asistanı açın ve ona sorular sorun."
}, },
"manage_providers": { "manage_providers": {
"title": "Manage providers", "title": "Sağlayıcıları yönetin",
"description": "Add, edit and remove the AI providers and their API keys." "description": "Yapay zeka sağlayıcılarını ve API anahtarlarını ekleyin, düzenleyin ve kaldırın."
}, },
"apply_proposals": { "apply_proposals": {
"title": "Apply proposals", "title": "Tekliflerinizi sunun.",
"description": "Let the assistant carry out the changes it suggests." "description": "Yardımcının önerdiği değişiklikleri uygulamasına izin verin."
}, },
"services.use": { "services.use": {
"title": "Use AI from other features", "title": "Diğer özelliklerden yapay zeka kullanın.",
"description": "Other features may call the assistant on your behalf." "description": "Diğer özellikler sizin adınıza asistanı arayabilir."
}, },
"secrets.share": { "secrets.share": {
"title": "Share the API key", "title": "API anahtarını paylaşın",
"description": "Other features may use the stored AI API key without seeing it." "description": "Diğer özellikler, kaydedilmiş yapay zeka API anahtarını görmeden kullanabilir."
} }
}, },
"settings": { "settings": {
"assistantUnavailable": "The AI assistant is turned off on this server.", "assistantUnavailable": "Bu sunucuda yapay zeka asistanı devre dışı bırakılmıştır.",
"providersNeedOptIn": "Turn on the AI assistant above to add providers.", "providersNeedOptIn": "Sağlayıcı eklemek için yukarıdaki yapay zeka asistanını açın.",
"admin": { "admin": {
"globallyEnabled": { "globallyEnabled": {
"label": "AI assistant", "label": "Yapay zeka asistanı",
"description": "Let users turn on the AI assistant. While this is off, the assistant is hidden and blocked for everyone." "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": { "privateEndpoints": {
"label": "Allowed private AI hosts", "label": "Özel yapay zeka sunucularına izin verildi.",
"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": "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": { "host": {
"enableAiAssistant": { "enableAiAssistant": {
"label": "Enable AI Assistant", "label": "Yapay Zeka Asistanını Etkinleştir",
"description": "Allow the AI assistant to help in this host's terminal. Off by default, and still needs AI enabled for your account." "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": { "ai": {
"title": "Assistant", "title": "Asistan",
"send": "Send", "send": "Göndermek",
"stop": "Durdurma", "stop": "Durdurma",
"save": "Kaydet", "save": "Kaydet",
"cancel": "İptal", "cancel": "İptal",
"running": "çalışan", "running": "çalışan",
"approve": "Approve", "approve": "Onaylamak",
"reject": "Reject", "reject": "Reddetmek",
"inputPlaceholder": "Ask about your servers, or describe a change to propose", "inputPlaceholder": "Sunucularınız hakkında bilgi isteyin veya önereceğiniz bir değişikliği açıklayın.",
"selectProvider": "Select a provider", "selectProvider": "Bir sağlayıcı seçin",
"providerSettings": "Provider settings", "providerSettings": "Sağlayıcı ayarları",
"addProvider": "Add provider", "addProvider": "Sağlayıcı ekle",
"editProvider": "Edit provider", "editProvider": "Sağlayıcıyı düzenle",
"removeProvider": "Remove provider", "removeProvider": "Sağlayıcıyı kaldır",
"providerType": "Provider", "providerType": "Sağlayıcı",
"providerLabel": "Ad", "providerLabel": "Ad",
"providerLabelPlaceholder": "For example: Local Ollama", "providerLabelPlaceholder": "Örneğin: Yerel Ollama",
"baseUrl": "Server address", "baseUrl": "Sunucu adresi",
"apiKey": "API key", "apiKey": "API anahtarı",
"defaultModel": "Default model", "defaultModel": "Varsayılan model",
"defaultModelPlaceholder": "For example: llama3.1 or claude-opus-5", "defaultModelPlaceholder": "Örneğin: llama3.1 veya claude-opus-5",
"labelRequired": "Give this provider a name", "labelRequired": "Bu sağlayıcıya bir isim verin.",
"providerSaveFailed": "Could not save the provider", "providerSaveFailed": "Sağlayıcı kaydedilemedi.",
"providerUpdated": "Provider updated", "providerUpdated": "Sağlayıcı güncellendi.",
"providerDeleteFailed": "Could not remove the provider", "providerDeleteFailed": "Sağlayıcı kaldırılamadı.",
"privateEndpointHint": "Addresses on your private network need an administrator to allow the host first.", "privateEndpointHint": "Özel ağınızdaki adreslerin kullanılabilmesi için öncelikle yöneticinin sunucuya izin vermesi gerekmektedir.",
"providerOllama": "Ollama", "providerOllama": "Ollama",
"providerAnthropic": "Anthropic", "providerAnthropic": "Antropik",
"providerOpenai": "OpenAI", "providerOpenai": "OpenAI",
"providerGemini": "Google Gemini", "providerGemini": "Google Gemini",
"providerOpenaiCompatible": "OpenAI compatible", "providerOpenaiCompatible": "OpenAI uyumlu",
"toolArguments": "Giriş", "toolArguments": "Giriş",
"toolResult": "Result", "toolResult": "Sonuç",
"statusApplied": "Applied", "statusApplied": "Uygulandı",
"statusRejected": "Rejected", "statusRejected": "Reddedilmiş",
"proposalApplied": "Change applied", "proposalApplied": "Değişiklik uygulandı.",
"proposalApplyFailed": "Could not apply the change", "proposalApplyFailed": "Değişiklik uygulanamadı.",
"proposalRejectFailed": "Could not reject the change", "proposalRejectFailed": "Değişikliği reddedemedim.",
"enableTitle": "Enable the AI assistant", "enableTitle": "Yapay zekâ asistanını etkinleştirin",
"enableDescription": "Let the assistant read your setup and suggest changes for you to approve.", "enableDescription": "Asistanın ayarlarınızı okumasını ve onaylamanız için değişiklik önerileri sunmasını sağlayın.",
"readOnlyCommands": "Allow read-only diagnostic commands", "readOnlyCommands": "Yalnızca okuma amaçlı tanı komutlarına izin ver",
"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.", "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": "Could not reach the provider, so this is a general list. You can type any model name.", "modelDetectFailed": "Sağlayıcıya ulaşılamadı, bu nedenle bu genel bir listedir. İstediğiniz model adını yazabilirsiniz.",
"modelCustom": "Enter a model name", "modelCustom": "Bir model adı girin",
"modelRefresh": "Refresh list", "modelRefresh": "Listeyi yenile",
"modelPlaceholder": "Choose or type a model", "modelPlaceholder": "Bir model seçin veya yazın.",
"attachHint": "Type @ to reference a host, snippet or automation. Changes are proposed for you to approve.", "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": "Run command", "runCommandTitle": "Çalıştır komutu",
"assistant": "AI Assistant", "assistant": "Yapay Zeka Asistanı",
"terminalPanelEmpty": "Ask the assistant about this host. Anything that changes state needs your approval first.", "terminalPanelEmpty": "Bu ev sahibi hakkında asistana danışın. Durum değişikliği gerektiren her şey önce sizin onayınızı gerektirir.",
"terminalPanelPlaceholder": "Ask about this host...", "terminalPanelPlaceholder": "Bu ev sahibi hakkında bilgi isteyin...",
"noProvidersConfigured": "No AI provider is configured yet. Add one in the AI assistant tab.", "noProvidersConfigured": "Henüz hiçbir yapay zeka sağlayıcısı yapılandırılmadı. Yapay zeka asistanı sekmesinden bir tane ekleyin.",
"runsInOpenTerminal": "Runs in your open terminal session.", "runsInOpenTerminal": "Açık terminal oturumunuzda çalışır.",
"runInTerminal": "Çalıştı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": { "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": { "nav": {
"ai": "AI" "ai": "Yapay zeka"
}, },
"onboarding": { "onboarding": {
"aiTitle": "AI assistant", "aiTitle": "Yapay zeka asistanı",
"aiIntro": "Termix can include an optional AI assistant. You can change this later in your settings.", "aiIntro": "Termix isteğe bağlı bir yapay zeka asistanı içerebilir. Bunu daha sonra ayarlarınızdan değiştirebilirsiniz.",
"aiSkipTitle": "Leave it off", "aiSkipTitle": "Kapalı bırakın",
"aiSkipDesc": "Termix works as it does now. The assistant stays hidden.", "aiSkipDesc": "Termix şu anki haliyle çalışıyor. Asistan gizli kalıyor.",
"aiEnableTitle": "Turn it on", "aiEnableTitle": "Açın",
"aiEnableDesc": "Adds an assistant that reads your setup and suggests changes you approve. Needs a provider you supply, such as a local Ollama.", "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": "Nothing is sent anywhere until you add a provider and send a message." "aiNote": "Bir sağlayıcı ekleyip mesaj gönderene kadar hiçbir şey hiçbir yere gönderilmez."
}, },
"hosts": { "hosts": {
"docsLink": "Dokümanları görüntüle" "docsLink": "Dokümanları görüntüle"
@@ -191,5 +191,8 @@
"reconnecting": "Reconnecting and restoring messages…", "reconnecting": "Reconnecting and restoring messages…",
"unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "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" "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue"
},
"plugin": {
"name": "AI Assistant"
} }
} }
+85 -82
View File
@@ -1,120 +1,120 @@
{ {
"permissions": { "permissions": {
"use": { "use": {
"title": "Use the assistant", "title": "Використовуйте помічника",
"description": "Open the assistant and ask it things." "description": "Відкрийте помічника та запитайте його."
}, },
"manage_providers": { "manage_providers": {
"title": "Manage providers", "title": "Керування постачальниками",
"description": "Add, edit and remove the AI providers and their API keys." "description": "Додавайте, редагуйте та видаляйте постачальників штучного інтелекту та їхні ключі API."
}, },
"apply_proposals": { "apply_proposals": {
"title": "Apply proposals", "title": "Застосувати пропозиції",
"description": "Let the assistant carry out the changes it suggests." "description": "Нехай помічник внесе запропоновані ним зміни."
}, },
"services.use": { "services.use": {
"title": "Use AI from other features", "title": "Використання ШІ з інших функцій",
"description": "Other features may call the assistant on your behalf." "description": "Інші функції можуть викликати помічника від вашого імені."
}, },
"secrets.share": { "secrets.share": {
"title": "Share the API key", "title": "Поділитися ключем API",
"description": "Other features may use the stored AI API key without seeing it." "description": "Інші функції можуть використовувати збережений ключ API штучного інтелекту, не бачачи його."
} }
}, },
"settings": { "settings": {
"assistantUnavailable": "The AI assistant is turned off on this server.", "assistantUnavailable": "Помічник зі штучним інтелектом вимкнено на цьому сервері.",
"providersNeedOptIn": "Turn on the AI assistant above to add providers.", "providersNeedOptIn": "Увімкніть помічника зі штучним інтелектом вище, щоб додати постачальників.",
"admin": { "admin": {
"globallyEnabled": { "globallyEnabled": {
"label": "AI assistant", "label": "Асистент зі штучним інтелектом",
"description": "Let users turn on the AI assistant. While this is off, the assistant is hidden and blocked for everyone." "description": "Дозвольте користувачам увімкнути помічника зі штучним інтелектом. Коли це вимкнено, помічник прихований і заблокований для всіх."
}, },
"privateEndpoints": { "privateEndpoints": {
"label": "Allowed private AI hosts", "label": "Дозволені приватні хости ШІ",
"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": "Хости у вашій приватній мережі, на які користувачі можуть вказувати провайдера, наприклад, Ollama з власним хостингом. Розмістіть по одному хосту в кожному рядку."
} }
}, },
"host": { "host": {
"enableAiAssistant": { "enableAiAssistant": {
"label": "Enable AI Assistant", "label": "Увімкнути помічника зі штучним інтелектом",
"description": "Allow the AI assistant to help in this host's terminal. Off by default, and still needs AI enabled for your account." "description": "Дозволити помічнику зі штучним інтелектом допомагати в терміналі цього хоста. Вимкнено за замовчуванням, але все одно потребує ввімкнення штучного інтелекту для вашого облікового запису."
} }
} }
}, },
"ai": { "ai": {
"title": "Assistant", "title": "Помічник",
"send": "Send", "send": "Надіслати",
"stop": "Stop", "stop": "СТІЙ",
"save": "Save", "save": "Зберегти",
"cancel": "Cancel", "cancel": "Скасувати",
"running": "running", "running": "біг",
"approve": "Approve", "approve": "Схвалити",
"reject": "Reject", "reject": "Відхилити",
"inputPlaceholder": "Ask about your servers, or describe a change to propose", "inputPlaceholder": "Запитайте про ваші сервери або опишіть зміну, яку ви хочете запропонувати",
"selectProvider": "Select a provider", "selectProvider": "Виберіть постачальника",
"providerSettings": "Provider settings", "providerSettings": "Налаштування постачальника",
"addProvider": "Add provider", "addProvider": "Додати постачальника",
"editProvider": "Edit provider", "editProvider": "Редагувати постачальника",
"removeProvider": "Remove provider", "removeProvider": "Видалити постачальника",
"providerType": "Provider", "providerType": "Постачальник",
"providerLabel": "Name", "providerLabel": "Ім'я",
"providerLabelPlaceholder": "For example: Local Ollama", "providerLabelPlaceholder": "Наприклад: Місцевий Оллама",
"baseUrl": "Server address", "baseUrl": "Адреса сервера",
"apiKey": "API key", "apiKey": "Ключ API",
"defaultModel": "Default model", "defaultModel": "Модель за замовчуванням",
"defaultModelPlaceholder": "For example: llama3.1 or claude-opus-5", "defaultModelPlaceholder": "Наприклад: llama3.1 або claude-opus-5",
"labelRequired": "Give this provider a name", "labelRequired": "Дайте назву цьому постачальнику",
"providerSaveFailed": "Could not save the provider", "providerSaveFailed": "Не вдалося зберегти постачальника",
"providerUpdated": "Provider updated", "providerUpdated": "Постачальника оновлено",
"providerDeleteFailed": "Could not remove the provider", "providerDeleteFailed": "Не вдалося видалити постачальника",
"privateEndpointHint": "Addresses on your private network need an administrator to allow the host first.", "privateEndpointHint": "Адреси у вашій приватній мережі спочатку потребують дозволу адміністратора хоста.",
"providerOllama": "Ollama", "providerOllama": "Оллама",
"providerAnthropic": "Anthropic", "providerAnthropic": "Антропний",
"providerOpenai": "OpenAI", "providerOpenai": "OpenAI",
"providerGemini": "Google Gemini", "providerGemini": "Google Близнюки",
"providerOpenaiCompatible": "OpenAI compatible", "providerOpenaiCompatible": "Сумісний з OpenAI",
"toolArguments": "Input", "toolArguments": "Вхід",
"toolResult": "Result", "toolResult": "Результат",
"statusApplied": "Applied", "statusApplied": "Застосовано",
"statusRejected": "Rejected", "statusRejected": "Відхилено",
"proposalApplied": "Change applied", "proposalApplied": "Зміну застосовано",
"proposalApplyFailed": "Could not apply the change", "proposalApplyFailed": "Не вдалося застосувати зміну",
"proposalRejectFailed": "Could not reject the change", "proposalRejectFailed": "Не вдалося відхилити зміну",
"enableTitle": "Enable the AI assistant", "enableTitle": "Увімкнути помічника зі штучним інтелектом",
"enableDescription": "Let the assistant read your setup and suggest changes for you to approve.", "enableDescription": "Дозвольте асистенту прочитати ваші налаштування та запропонувати зміни для вашого схвалення.",
"readOnlyCommands": "Allow read-only diagnostic commands", "readOnlyCommands": "Дозволити діагностичні команди лише для читання",
"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.", "readOnlyCommandsDescription": "Помічник може виконувати короткий список безпечних команд, таких як df та uptime, не запитуючи щоразу. Будь-які зміни на сервері завжди пропонуються першими.",
"modelDetectFailed": "Could not reach the provider, so this is a general list. You can type any model name.", "modelDetectFailed": "Не вдалося зв’язатися з постачальником, тому це загальний список. Ви можете ввести будь-яку назву моделі.",
"modelCustom": "Enter a model name", "modelCustom": "Введіть назву моделі",
"modelRefresh": "Refresh list", "modelRefresh": "Оновити список",
"modelPlaceholder": "Choose or type a model", "modelPlaceholder": "Виберіть або введіть модель",
"attachHint": "Type @ to reference a host, snippet or automation. Changes are proposed for you to approve.", "attachHint": "Введіть @, щоб посилатися на хост, фрагмент або автоматизацію. Зміни пропонуються для вашого схвалення.",
"runCommandTitle": "Run command", "runCommandTitle": "Виконати команду",
"assistant": "AI Assistant", "assistant": "Помічник зі штучним інтелектом",
"terminalPanelEmpty": "Ask the assistant about this host. Anything that changes state needs your approval first.", "terminalPanelEmpty": "Запитайте асистента про цього хоста. Будь-яка зміна стану потребує вашого попереднього схвалення.",
"terminalPanelPlaceholder": "Ask about this host...", "terminalPanelPlaceholder": "Запитайте про цього хоста...",
"noProvidersConfigured": "No AI provider is configured yet. Add one in the AI assistant tab.", "noProvidersConfigured": "Постачальника штучного інтелекту ще не налаштовано. Додайте його на вкладці помічника штучного інтелекту.",
"runsInOpenTerminal": "Runs in your open terminal session.", "runsInOpenTerminal": "Працює у вашому відкритому термінальному сеансі.",
"runInTerminal": "Run", "runInTerminal": "Бігти",
"terminalContextPrefill": "Here is my terminal output:\n\n{{output}}\n\n", "terminalContextPrefill": "Ось мій вивід з терміналу:\n\n{{output}}\n\n",
"secrets": { "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": { "nav": {
"ai": "AI" "ai": "Штучний інтелект"
}, },
"onboarding": { "onboarding": {
"aiTitle": "AI assistant", "aiTitle": "Асистент зі штучним інтелектом",
"aiIntro": "Termix can include an optional AI assistant. You can change this later in your settings.", "aiIntro": "Termix може включати додатковий помічник зі штучним інтелектом. Ви можете змінити це пізніше в налаштуваннях.",
"aiSkipTitle": "Leave it off", "aiSkipTitle": "Залиште це вимкненим",
"aiSkipDesc": "Termix works as it does now. The assistant stays hidden.", "aiSkipDesc": "Termix працює як і зараз. Помічник залишається прихованим.",
"aiEnableTitle": "Turn it on", "aiEnableTitle": "Увімкніть це",
"aiEnableDesc": "Adds an assistant that reads your setup and suggests changes you approve. Needs a provider you supply, such as a local Ollama.", "aiEnableDesc": "Додає помічника, який читає ваші налаштування та пропонує зміни, які ви схвалюєте. Потрібен постачальник, якого ви надаєте, наприклад, місцевий Ollama.",
"aiNote": "Nothing is sent anywhere until you add a provider and send a message." "aiNote": "Нічого нікуди не надсилається, доки ви не додасте постачальника та не надішлете повідомлення."
}, },
"hosts": { "hosts": {
"docsLink": "View docs" "docsLink": "Переглянути документи"
}, },
"agents": { "agents": {
"title": "AI Agent", "title": "AI Agent",
@@ -191,5 +191,8 @@
"reconnecting": "Reconnecting and restoring messages…", "reconnecting": "Reconnecting and restoring messages…",
"unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "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" "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue"
},
"plugin": {
"name": "AI Assistant"
} }
} }
+75 -72
View File
@@ -1,117 +1,117 @@
{ {
"permissions": { "permissions": {
"use": { "use": {
"title": "Use the assistant", "title": "Sử dụng trợ lý",
"description": "Open the assistant and ask it things." "description": "Mở trợ lý ảo và hỏi nó những câu hỏi."
}, },
"manage_providers": { "manage_providers": {
"title": "Manage providers", "title": "Quản lý nhà cung cấp",
"description": "Add, edit and remove the AI providers and their API keys." "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": { "apply_proposals": {
"title": "Apply proposals", "title": "Áp dụng các đề xuất",
"description": "Let the assistant carry out the changes it suggests." "description": "Hãy để trợ lý thực hiện những thay đổi mà nó đề xuất."
}, },
"services.use": { "services.use": {
"title": "Use AI from other features", "title": "Sử dụng trí tuệ nhân tạo từ các tính năng khác",
"description": "Other features may call the assistant on your behalf." "description": "Các tính năng khác có thể gọi trợ lý ảo thay mặt bạn."
}, },
"secrets.share": { "secrets.share": {
"title": "Share the API key", "title": "Chia sẻ khóa API",
"description": "Other features may use the stored AI API key without seeing it." "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": { "settings": {
"assistantUnavailable": "The AI assistant is turned off on this server.", "assistantUnavailable": "Trợ lý AI đã bị tắt trên máy chủ này.",
"providersNeedOptIn": "Turn on the AI assistant above to add providers.", "providersNeedOptIn": "Hãy bật trợ lý AI ở trên để thêm nhà cung cấp.",
"admin": { "admin": {
"globallyEnabled": { "globallyEnabled": {
"label": "AI assistant", "label": "Trợ lý AI",
"description": "Let users turn on the AI assistant. While this is off, the assistant is hidden and blocked for everyone." "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": { "privateEndpoints": {
"label": "Allowed private AI hosts", "label": "Cho phép máy chủ AI riêng",
"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": "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": { "host": {
"enableAiAssistant": { "enableAiAssistant": {
"label": "Enable AI Assistant", "label": "Kích hoạt Trợ lý AI",
"description": "Allow the AI assistant to help in this host's terminal. Off by default, and still needs AI enabled for your account." "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": { "ai": {
"title": "Assistant", "title": "Trợ lý",
"send": "Send", "send": "Gửi",
"stop": "Bit dừng", "stop": "Bit dừng",
"save": "Lưu", "save": "Lưu",
"cancel": "Hủy", "cancel": "Hủy",
"running": "đang chạy", "running": "đang chạy",
"approve": "Approve", "approve": "Chấp thuận",
"reject": "Reject", "reject": "Từ chối",
"inputPlaceholder": "Ask about your servers, or describe a change to propose", "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": "Select a provider", "selectProvider": "Chọn nhà cung cấp",
"providerSettings": "Provider settings", "providerSettings": "Cài đặt nhà cung cấp",
"addProvider": "Add provider", "addProvider": "Thêm nhà cung cấp",
"editProvider": "Edit provider", "editProvider": "Chỉnh sửa nhà cung cấp",
"removeProvider": "Remove provider", "removeProvider": "Xóa nhà cung cấp",
"providerType": "Provider", "providerType": "Nhà cung cấp",
"providerLabel": "Tên", "providerLabel": "Tên",
"providerLabelPlaceholder": "For example: Local Ollama", "providerLabelPlaceholder": "Ví dụ: Ollama địa phương",
"baseUrl": "Server address", "baseUrl": "Địa chỉ máy chủ",
"apiKey": "API key", "apiKey": "Khóa API",
"defaultModel": "Default model", "defaultModel": "Mô hình mặc định",
"defaultModelPlaceholder": "For example: llama3.1 or claude-opus-5", "defaultModelPlaceholder": "Ví dụ: llama3.1 hoặc claude-opus-5",
"labelRequired": "Give this provider a name", "labelRequired": "Đặt tên cho nhà cung cấp này",
"providerSaveFailed": "Could not save the provider", "providerSaveFailed": "Không thể lưu nhà cung cấp",
"providerUpdated": "Provider updated", "providerUpdated": "Nhà cung cấp đã cập nhật",
"providerDeleteFailed": "Could not remove the provider", "providerDeleteFailed": "Không thể xóa nhà cung cấp",
"privateEndpointHint": "Addresses on your private network need an administrator to allow the host first.", "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", "providerOllama": "Ollama",
"providerAnthropic": "Anthropic", "providerAnthropic": "Nhân loại",
"providerOpenai": "OpenAI", "providerOpenai": "OpenAI",
"providerGemini": "Google Gemini", "providerGemini": "Google Gemini",
"providerOpenaiCompatible": "OpenAI compatible", "providerOpenaiCompatible": "Tương thích với OpenAI",
"toolArguments": "Nhập", "toolArguments": "Nhập",
"toolResult": "Result", "toolResult": "Kết quả",
"statusApplied": "Applied", "statusApplied": "Đã áp dụng",
"statusRejected": "Rejected", "statusRejected": "Vật bị loại bỏ",
"proposalApplied": "Change applied", "proposalApplied": "Thay đổi đã được áp dụng",
"proposalApplyFailed": "Could not apply the change", "proposalApplyFailed": "Không thể áp dụng thay đổi",
"proposalRejectFailed": "Could not reject the change", "proposalRejectFailed": "Không thể từ chối thay đổi",
"enableTitle": "Enable the AI assistant", "enableTitle": "Kích hoạt trợ lý AI",
"enableDescription": "Let the assistant read your setup and suggest changes for you to approve.", "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": "Allow read-only diagnostic commands", "readOnlyCommands": "Cho phép các lệnh chẩn đoán chỉ đọc",
"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.", "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": "Could not reach the provider, so this is a general list. You can type any model name.", "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": "Enter a model name", "modelCustom": "Nhập tên mẫu",
"modelRefresh": "Refresh list", "modelRefresh": "Làm mới danh sách",
"modelPlaceholder": "Choose or type a model", "modelPlaceholder": "Chọn hoặc nhập mô hình",
"attachHint": "Type @ to reference a host, snippet or automation. Changes are proposed for you to approve.", "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": "Run command", "runCommandTitle": "Chạy lệnh",
"assistant": "AI Assistant", "assistant": "Trợ lý AI",
"terminalPanelEmpty": "Ask the assistant about this host. Anything that changes state needs your approval first.", "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": "Ask about this host...", "terminalPanelPlaceholder": "Hãy hỏi về chủ nhà này...",
"noProvidersConfigured": "No AI provider is configured yet. Add one in the AI assistant tab.", "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": "Runs in your open terminal session.", "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", "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": { "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": { "nav": {
"ai": "AI" "ai": "Trí tuệ nhân tạo"
}, },
"onboarding": { "onboarding": {
"aiTitle": "AI assistant", "aiTitle": "Trợ lý AI",
"aiIntro": "Termix can include an optional AI assistant. You can change this later in your settings.", "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": "Leave it off", "aiSkipTitle": "Đừng làm vậy",
"aiSkipDesc": "Termix works as it does now. The assistant stays hidden.", "aiSkipDesc": "Termix vẫn hoạt động như hiện tại. Trợ lý ảo vẫn ẩn mình.",
"aiEnableTitle": "Turn it on", "aiEnableTitle": "Bật nó lên",
"aiEnableDesc": "Adds an assistant that reads your setup and suggests changes you approve. Needs a provider you supply, such as a local Ollama.", "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": "Nothing is sent anywhere until you add a provider and send a message." "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": { "hosts": {
"docsLink": "Xem tài liệu" "docsLink": "Xem tài liệu"
@@ -191,5 +191,8 @@
"reconnecting": "Reconnecting and restoring messages…", "reconnecting": "Reconnecting and restoring messages…",
"unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "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" "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue"
},
"plugin": {
"name": "AI Assistant"
} }
} }
+36 -36
View File
@@ -2,28 +2,28 @@
"permissions": { "permissions": {
"use": { "use": {
"title": "使用助手", "title": "使用助手",
"description": "打开助手并向其提问。" "description": "打开助手并向它提问。"
}, },
"manage_providers": { "manage_providers": {
"title": "管理服务提供商", "title": "管理供应商",
"description": "添加、编辑和移除 AI 服务提供商及其 API 密钥。" "description": "添加、编辑和删除人工智能提供商及其 API 密钥。"
}, },
"apply_proposals": { "apply_proposals": {
"title": "应用建议", "title": "提交提案",
"description": "允许助手执行其建议的更改。" "description": "让助手执行它建议的更改。"
}, },
"services.use": { "services.use": {
"title": "在其他功能中使用 AI", "title": "利用其他功能中的人工智能",
"description": "其他功能可以代表你调用助手。" "description": "其他功能可能会代表您呼叫语音助手。"
}, },
"secrets.share": { "secrets.share": {
"title": "共享 API 密钥", "title": "分享 API 密钥",
"description": "其他功能可以使用已保存的 AI API 密钥,但无法查看其内容。" "description": "其他功能可能在看不到密钥的情况下使用已存储的 AI API 密钥。"
} }
}, },
"settings": { "settings": {
"assistantUnavailable": "此服务器已关闭 AI 助手。", "assistantUnavailable": "此服务器上的AI助手已关闭。",
"providersNeedOptIn": "请先在上方启用 AI 助手,再添加服务提供商。", "providersNeedOptIn": "开启上方的AI助手,即可添加服务提供商。",
"admin": { "admin": {
"globallyEnabled": { "globallyEnabled": {
"label": "AI 助手", "label": "AI 助手",
@@ -31,13 +31,13 @@
}, },
"privateEndpoints": { "privateEndpoints": {
"label": "允许的私有 AI 主机", "label": "允许的私有 AI 主机",
"description": "允许用户将服务提供商指向的内网主机,例如自托管的 Ollama。每行填写一台主机。" "description": "用户可向服务提供商指向的私有网络上的主机,例如自托管的 Ollama。每行填写一个主机。"
} }
}, },
"host": { "host": {
"enableAiAssistant": { "enableAiAssistant": {
"label": "启用 AI 助手", "label": "启用人工智能助手",
"description": "允许 AI 助手在此主机的终端中提供帮助。默认关闭,且你的账户也必须启用 AI。" "description": "允许 AI 助手在此主机的终端上提供帮助。默认情况下处于关闭状态,但仍需在您的帐户中启用 AI 功能。"
} }
} }
}, },
@@ -50,24 +50,24 @@
"running": "运行中", "running": "运行中",
"approve": "批准", "approve": "批准",
"reject": "拒绝", "reject": "拒绝",
"inputPlaceholder": "询问服务器相关问题,或描述你想进行的更改", "inputPlaceholder": "询问服务器相关情况,或描述要提出的变更建议",
"selectProvider": "选择服务提供商", "selectProvider": "选择服务提供商",
"providerSettings": "服务提供商设置", "providerSettings": "提供商设置",
"addProvider": "添加服务提供商", "addProvider": "添加提供商",
"editProvider": "编辑提供商", "editProvider": "编辑提供商",
"removeProvider": "移除服务提供商", "removeProvider": "移除提供者",
"providerType": "提供商", "providerType": "提供商",
"providerLabel": "名称", "providerLabel": "名称",
"providerLabelPlaceholder": "例如:本地 Ollama", "providerLabelPlaceholder": "例如:本地 Ollama",
"baseUrl": "服务器地址", "baseUrl": "服务器地址",
"apiKey": "API 密钥", "apiKey": "API 密钥",
"defaultModel": "默认模型", "defaultModel": "默认模型",
"defaultModelPlaceholder": "例如 llama3.1 或 claude-opus-5", "defaultModelPlaceholder": "例如:llama3.1 或 claude-opus-5",
"labelRequired": "给此提供商起个名字", "labelRequired": "给此提供商起个名字",
"providerSaveFailed": "无法保存服务提供商", "providerSaveFailed": "无法保存提供商",
"providerUpdated": "服务提供商已更新", "providerUpdated": "提供商已更新",
"providerDeleteFailed": "无法移除服务提供商", "providerDeleteFailed": "无法移除提供商",
"privateEndpointHint": "使用内网地址前,需要管理员先允许该主机。", "privateEndpointHint": "您私有网络上的地址需要管理员先允许主机访问。",
"providerOllama": "Ollama", "providerOllama": "Ollama",
"providerAnthropic": "Anthropic", "providerAnthropic": "Anthropic",
"providerOpenai": "OpenAI", "providerOpenai": "OpenAI",
@@ -77,28 +77,28 @@
"toolResult": "结果", "toolResult": "结果",
"statusApplied": "已应用", "statusApplied": "已应用",
"statusRejected": "已拒绝", "statusRejected": "已拒绝",
"proposalApplied": "更改已应用", "proposalApplied": "变更已生效",
"proposalApplyFailed": "无法应用更改", "proposalApplyFailed": "无法应用更改",
"proposalRejectFailed": "无法拒绝更改", "proposalRejectFailed": "无法拒绝更改",
"enableTitle": "启用 AI 助手", "enableTitle": "启用 AI 助手",
"enableDescription": "允许助手读取你的配置并提出更改建议,由你批准后执行。", "enableDescription": "让助手读取您的设置并提出更改建议,供您批准。",
"readOnlyCommands": "允许只读诊断命令", "readOnlyCommands": "允许只读诊断命令",
"readOnlyCommandsDescription": "助手可以执行 df、uptime 等少量安全命令,无需每次询问。任何会修改服务器的操作都会先提交建议。", "readOnlyCommandsDescription": "助手可能会在不每次都询问的情况下运行一些安全命令,例如 `df` 和 `uptime`。任何会更改服务器的操作都会优先被提出。",
"modelDetectFailed": "无法联系到提供商,所以这里提供的是通用列表。您可以输入任何模型名称。", "modelDetectFailed": "无法联系到提供商,所以这里提供的是通用列表。您可以输入任何模型名称。",
"modelCustom": "请输入模型名称", "modelCustom": "请输入模型名称",
"modelRefresh": "刷新列表", "modelRefresh": "刷新列表",
"modelPlaceholder": "选择或输入模型", "modelPlaceholder": "选择或输入模型",
"attachHint": "输入 @ 引用主机、代码片段或自动化。更改会先提交给你批准。", "attachHint": "输入 @ 符号可引用主机、代码片段或自动化流程。系统会提出更改建议,供您批准。",
"runCommandTitle": "执行命令", "runCommandTitle": "运行命令",
"assistant": "AI 助手", "assistant": "人工智能助手",
"terminalPanelEmpty": "向助手询问此主机的相关问题。任何会改变状态的操作都需要先获得你的批准。", "terminalPanelEmpty": "向助理询问有关此房东的信息。任何状态变更都需要您先批准。",
"terminalPanelPlaceholder": "询问此主机的相关问题……", "terminalPanelPlaceholder": "询问一下这位房东的情况……",
"noProvidersConfigured": "尚未配置 AI 服务提供商,请在 AI 助手标签页中添加。", "noProvidersConfigured": "尚未配置任何 AI 提供商。请在 AI 助手选项卡中添加。",
"runsInOpenTerminal": "在你已打开的终端会话中执行。", "runsInOpenTerminal": "在打开的终端会话中运行。",
"runInTerminal": "运行", "runInTerminal": "运行",
"terminalContextPrefill": "以下是我的终端输出:\n\n{{output}}\n\n", "terminalContextPrefill": "以下是我的终端输出:\n\n{{output}}\n\n",
"secrets": { "secrets": {
"shareApiKey": "允许其他功能使用你的 AI 服务提供商 API 密钥发起请求。密钥不会被复制,你可以随时撤销授权。" "shareApiKey": "允许其他功能使用您的 AI 提供商 API 密钥发出各自的请求。该密钥绝不会被复制,您可以随时撤销此授权。"
} }
}, },
"nav": { "nav": {
@@ -106,7 +106,7 @@
}, },
"onboarding": { "onboarding": {
"aiTitle": "AI 助手", "aiTitle": "AI 助手",
"aiIntro": "Termix 提供可选的 AI 助手,你可以稍后在设置中更改。", "aiIntro": "Termix 可以包含一个可选的 AI 助手。您可以稍后在设置中更改此选项。",
"aiSkipTitle": "禁用", "aiSkipTitle": "禁用",
"aiSkipDesc": "Termix 正常工作,AI 助手将保持隐藏状态。", "aiSkipDesc": "Termix 正常工作,AI 助手将保持隐藏状态。",
"aiEnableTitle": "启用", "aiEnableTitle": "启用",
@@ -193,6 +193,6 @@
"shortcuts": "Enter 发送或排队 · Shift+Enter 换行 · Esc 中断并暂停队列" "shortcuts": "Enter 发送或排队 · Shift+Enter 换行 · Esc 中断并暂停队列"
}, },
"plugin": { "plugin": {
"name": "AI 助手" "name": "AI Assistant"
} }
} }
+76 -73
View File
@@ -1,117 +1,117 @@
{ {
"permissions": { "permissions": {
"use": { "use": {
"title": "Use the assistant", "title": "使用助手",
"description": "Open the assistant and ask it things." "description": "打開助手並向它提問。"
}, },
"manage_providers": { "manage_providers": {
"title": "Manage providers", "title": "管理供應商",
"description": "Add, edit and remove the AI providers and their API keys." "description": "新增、編輯和刪除人工智慧提供者及其 API 金鑰。"
}, },
"apply_proposals": { "apply_proposals": {
"title": "Apply proposals", "title": "提交提案",
"description": "Let the assistant carry out the changes it suggests." "description": "讓助手執行它建議的更改。"
}, },
"services.use": { "services.use": {
"title": "Use AI from other features", "title": "利用其他功能中的人工智慧",
"description": "Other features may call the assistant on your behalf." "description": "其他功能可能會代表您呼叫語音助理。"
}, },
"secrets.share": { "secrets.share": {
"title": "Share the API key", "title": "分享 API 金鑰",
"description": "Other features may use the stored AI API key without seeing it." "description": "其他功能可能會在不查看金鑰的情況下使用已儲存的 AI API 金鑰。"
} }
}, },
"settings": { "settings": {
"assistantUnavailable": "The AI assistant is turned off on this server.", "assistantUnavailable": "此伺服器上的AI助理已關閉。",
"providersNeedOptIn": "Turn on the AI assistant above to add providers.", "providersNeedOptIn": "開啟上方的AI助手,即可新增服務提供者。",
"admin": { "admin": {
"globallyEnabled": { "globallyEnabled": {
"label": "AI assistant", "label": "人工智慧助手",
"description": "Let users turn on the AI assistant. While this is off, the assistant is hidden and blocked for everyone." "description": "允許用戶開啟AI助理。關閉此功能後,助手將被隱藏,所有用戶均無法存取。"
}, },
"privateEndpoints": { "privateEndpoints": {
"label": "Allowed private AI hosts", "label": "允許的私有人工智慧主機",
"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": "使用者可將服務提供者指向的私有網路上的主機,例如自架的 Ollama。每行填寫一個主機。"
} }
}, },
"host": { "host": {
"enableAiAssistant": { "enableAiAssistant": {
"label": "Enable AI Assistant", "label": "啟用人工智慧助手",
"description": "Allow the AI assistant to help in this host's terminal. Off by default, and still needs AI enabled for your account." "description": "允許 AI 助理在此主機的終端機上提供協助。預設為關閉狀態,但仍需在您的帳戶中啟用 AI 功能。"
} }
} }
}, },
"ai": { "ai": {
"title": "Assistant", "title": "助理",
"send": "Send", "send": "傳送",
"stop": "停止位元", "stop": "停止位元",
"save": "儲存", "save": "儲存",
"cancel": "取消", "cancel": "取消",
"running": "執行中", "running": "執行中",
"approve": "Approve", "approve": "核准",
"reject": "Reject", "reject": "拒絕",
"inputPlaceholder": "Ask about your servers, or describe a change to propose", "inputPlaceholder": "詢問伺服器相關情況,或描述要提出的變更建議",
"selectProvider": "Select a provider", "selectProvider": "選擇服務提供者",
"providerSettings": "Provider settings", "providerSettings": "提供者設定",
"addProvider": "Add provider", "addProvider": "新增提供者",
"editProvider": "Edit provider", "editProvider": "編輯提供者",
"removeProvider": "Remove provider", "removeProvider": "移除提供者",
"providerType": "Provider", "providerType": "提供者",
"providerLabel": "名稱", "providerLabel": "名稱",
"providerLabelPlaceholder": "For example: Local Ollama", "providerLabelPlaceholder": "例如:本地奧拉馬",
"baseUrl": "Server address", "baseUrl": "伺服器位址",
"apiKey": "API key", "apiKey": "API金鑰",
"defaultModel": "Default model", "defaultModel": "預設模型",
"defaultModelPlaceholder": "For example: llama3.1 or claude-opus-5", "defaultModelPlaceholder": "例如:llama3.1 或 claude-opus-5",
"labelRequired": "Give this provider a name", "labelRequired": "給這家服務提供者取個名字",
"providerSaveFailed": "Could not save the provider", "providerSaveFailed": "無法儲存提供者",
"providerUpdated": "Provider updated", "providerUpdated": "提供者已更新",
"providerDeleteFailed": "Could not remove the provider", "providerDeleteFailed": "無法移除提供者",
"privateEndpointHint": "Addresses on your private network need an administrator to allow the host first.", "privateEndpointHint": "您私有網路上的位址需要管理員先允許主機存取。",
"providerOllama": "Ollama", "providerOllama": "奧拉瑪",
"providerAnthropic": "Anthropic", "providerAnthropic": "人類學",
"providerOpenai": "OpenAI", "providerOpenai": "OpenAI",
"providerGemini": "Google Gemini", "providerGemini": "Google Gemini",
"providerOpenaiCompatible": "OpenAI compatible", "providerOpenaiCompatible": "相容 OpenAI",
"toolArguments": "輸入", "toolArguments": "輸入",
"toolResult": "Result", "toolResult": "結果",
"statusApplied": "Applied", "statusApplied": "應用",
"statusRejected": "Rejected", "statusRejected": "已拒絕",
"proposalApplied": "Change applied", "proposalApplied": "變更已生效",
"proposalApplyFailed": "Could not apply the change", "proposalApplyFailed": "無法套用變更",
"proposalRejectFailed": "Could not reject the change", "proposalRejectFailed": "無法拒絕更改",
"enableTitle": "Enable the AI assistant", "enableTitle": "啟用人工智慧助手",
"enableDescription": "Let the assistant read your setup and suggest changes for you to approve.", "enableDescription": "請助手讀取您的設定並提出更改建議,供您批准。",
"readOnlyCommands": "Allow read-only diagnostic commands", "readOnlyCommands": "允許只讀診斷命令",
"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.", "readOnlyCommandsDescription": "助手可能會在不每次都詢問的情況下執行一些安全的命令,例如 `df` 和 `uptime`。任何會更改伺服器的操作都會優先被提出。",
"modelDetectFailed": "Could not reach the provider, so this is a general list. You can type any model name.", "modelDetectFailed": "無法聯繫到供應商,所以這裡提供的是通用清單。您可以輸入任何型號名稱。",
"modelCustom": "Enter a model name", "modelCustom": "請輸入型號名稱",
"modelRefresh": "Refresh list", "modelRefresh": "重新整理清單",
"modelPlaceholder": "Choose or type a model", "modelPlaceholder": "選擇或輸入型號",
"attachHint": "Type @ to reference a host, snippet or automation. Changes are proposed for you to approve.", "attachHint": "輸入 @ 符號可引用主機、程式碼片段或自動化流程。系統會提出更改建議,供您批准。",
"runCommandTitle": "Run command", "runCommandTitle": "運行命令",
"assistant": "AI Assistant", "assistant": "人工智慧助手",
"terminalPanelEmpty": "Ask the assistant about this host. Anything that changes state needs your approval first.", "terminalPanelEmpty": "向助理詢問有關此房東的資訊。任何狀態變更都需要您先批准。",
"terminalPanelPlaceholder": "Ask about this host...", "terminalPanelPlaceholder": "詢問一下這位房東的狀況…",
"noProvidersConfigured": "No AI provider is configured yet. Add one in the AI assistant tab.", "noProvidersConfigured": "尚未配置任何 AI 提供者。請在 AI 助理標籤中新增。",
"runsInOpenTerminal": "Runs in your open terminal session.", "runsInOpenTerminal": "在開啟的終端機會話中運行。",
"runInTerminal": "執行", "runInTerminal": "執行",
"terminalContextPrefill": "Here is my terminal output:\n\n{{output}}\n\n", "terminalContextPrefill": "以下是我的終端輸出:\n\n{{output}}\n\n",
"secrets": { "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": { "nav": {
"ai": "AI" "ai": "人工智慧"
}, },
"onboarding": { "onboarding": {
"aiTitle": "AI assistant", "aiTitle": "人工智慧助手",
"aiIntro": "Termix can include an optional AI assistant. You can change this later in your settings.", "aiIntro": "Termix 可以包含一個可選的 AI 助手。您可以稍後在設定中變更此選項。",
"aiSkipTitle": "Leave it off", "aiSkipTitle": "丟開",
"aiSkipDesc": "Termix works as it does now. The assistant stays hidden.", "aiSkipDesc": "Termix 的運作方式與現在相同。助手保持隱藏狀態。",
"aiEnableTitle": "Turn it on", "aiEnableTitle": "打開它",
"aiEnableDesc": "Adds an assistant that reads your setup and suggests changes you approve. Needs a provider you supply, such as a local Ollama.", "aiEnableDesc": "添加一個助手,它可以讀取您的設定並提出您批准的更改建議。需要您提供服務提供者,例如當地的 Ollama 服務提供者。",
"aiNote": "Nothing is sent anywhere until you add a provider and send a message." "aiNote": "在您新增服務提供者並發送訊息之前,任何內容都不會發送到任何地方。"
}, },
"hosts": { "hosts": {
"docsLink": "檢視文件" "docsLink": "檢視文件"
@@ -191,5 +191,8 @@
"reconnecting": "Reconnecting and restoring messages…", "reconnecting": "Reconnecting and restoring messages…",
"unavailable": "Session is no longer accessible. Check your permissions or sign in again.", "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" "shortcuts": "Enter sends or queues · Shift+Enter adds a line · Esc interrupts and pauses the queue"
},
"plugin": {
"name": "AI Assistant"
} }
} }
@@ -168,5 +168,8 @@
"showRead": "Wys leeswaarskuwings", "showRead": "Wys leeswaarskuwings",
"allClear": "Alles duidelik", "allClear": "Alles duidelik",
"loading": "Laai tans..." "loading": "Laai tans..."
},
"plugin": {
"name": "Alerts"
} }
} }
@@ -168,5 +168,8 @@
"showRead": "عرض تنبيهات القراءة", "showRead": "عرض تنبيهات القراءة",
"allClear": "كل شيء طبيعي", "allClear": "كل شيء طبيعي",
"loading": "جارٍ التحميل..." "loading": "جارٍ التحميل..."
},
"plugin": {
"name": "Alerts"
} }
} }
@@ -168,5 +168,8 @@
"showRead": "Показване на известия за четене", "showRead": "Показване на известия за четене",
"allClear": "Всичко е чисто", "allClear": "Всичко е чисто",
"loading": "Зареждане..." "loading": "Зареждане..."
},
"plugin": {
"name": "Alerts"
} }
} }
+122 -119
View File
@@ -1,172 +1,175 @@
{ {
"nav": { "nav": {
"alerts": "Alerts" "alerts": "সতর্কতা"
}, },
"permissions": { "permissions": {
"use": { "use": {
"title": "Use alerts", "title": "সতর্কতা ব্যবহার করুন",
"description": "Get alerts in the inbox and send them to your own channels." "description": "ইনবক্সে অ্যালার্ট পান এবং সেগুলো আপনার নিজের চ্যানেলগুলোতে পাঠান।"
} }
}, },
"onboarding": { "onboarding": {
"feature": "Alerts", "feature": "সতর্কতা",
"featureDesc": "Every alert in one inbox, sent on to Discord, ntfy, email or a webhook if you want." "featureDesc": "সব অ্যালার্ট একটি ইনবক্সেই থাকবে, যা আপনি চাইলে ডিসকর্ড, এনটিএফওয়াই, ইমেল বা ওয়েবহুকে পাঠাতে পারবেন।"
}, },
"settings": { "settings": {
"group": { "group": {
"general": "General", "general": "সাধারণ",
"email": "Email" "email": "ইমেল"
}, },
"admin": { "admin": {
"announcements": { "announcements": {
"label": "Termix announcements", "label": "টারমিক্স ঘোষণা",
"description": "Show news from the Termix team, like security notices and releases, in everyone's inbox." "description": "টারমিক্স টিমের পক্ষ থেকে নিরাপত্তা বিজ্ঞপ্তি এবং নতুন রিলিজের মতো খবরগুলো সবার ইনবক্সে দেখান।"
}, },
"retentionDays": { "retentionDays": {
"label": "Keep alerts for (days)", "label": "(দিন) পর্যন্ত সতর্কতা চালু রাখুন",
"description": "Older alerts are removed from every inbox." "description": "প্রতিটি ইনবক্স থেকে পুরোনো অ্যালার্টগুলো মুছে ফেলা হয়।"
}, },
"smtpHost": { "smtpHost": {
"label": "SMTP server", "label": "SMTP সার্ভার",
"description": "Needed for email channels. Leave empty to turn email off.", "description": "ইমেল চ্যানেলের জন্য প্রয়োজন। ইমেল বন্ধ করতে খালি রাখুন।",
"placeholder": "smtp.example.com" "placeholder": "smtp.example.com"
}, },
"smtpPort": { "smtpPort": {
"label": "SMTP port", "label": "SMTP পোর্ট",
"description": "Usually 587 with STARTTLS or 465 with TLS." "description": "সাধারণত STARTTLS সহ 587 অথবা TLS সহ 465।"
}, },
"smtpSecure": { "smtpSecure": {
"label": "Use TLS from the start", "label": "শুরু থেকেই TLS ব্যবহার করুন",
"description": "Turn on for port 465. Leave off for 587, which upgrades to TLS on its own." "description": "পোর্ট ৪৬৫-এর জন্য চালু করুন। ৫৮৭-এর জন্য বন্ধ রাখুন, যেটি নিজে থেকেই TLS-এ আপগ্রেড হয়ে যায়।"
}, },
"smtpUser": { "smtpUser": {
"label": "SMTP username", "label": "SMTP ব্যবহারকারীর নাম",
"description": "Leave empty if the server does not need a login." "description": "সার্ভারে লগইন করার প্রয়োজন না হলে এই স্থানটি খালি রাখুন।"
}, },
"smtpPassword": { "smtpPassword": {
"label": "SMTP password", "label": "SMTP পাসওয়ার্ড",
"description": "Stored encrypted." "description": "এনক্রিপ্ট করে সংরক্ষণ করা হয়েছে।"
}, },
"smtpFrom": { "smtpFrom": {
"label": "From address", "label": "ঠিকানা থেকে",
"description": "The sender alerts come from.", "description": "প্রেরকের কাছ থেকে সতর্কতাগুলো আসে।",
"placeholder": "Termix <alerts@example.com>" "placeholder": "টারমিক্স <alerts@example.com>"
} }
}, },
"user": { "user": {
"popups": { "popups": {
"label": "Alert popups", "label": "সতর্কতা পপআপ",
"description": "Which new alerts pop up while you use Termix. They always land in the inbox.", "description": "আপনি Termix ব্যবহার করার সময় কোন নতুন অ্যালার্টগুলো আসে? সেগুলো সবসময় ইনবক্সে আসে।",
"all": "All alerts", "all": "সমস্ত সতর্কতা",
"warning": "Warnings and critical", "warning": "সতর্কতা এবং সমালোচনামূলক",
"critical": "Critical only", "critical": "শুধুমাত্র সমালোচনামূলক",
"off": "None" "off": "কোনোটিই না"
} }
} }
}, },
"sections": { "sections": {
"inbox": "Inbox", "inbox": "ইনবক্স",
"channels": "Channels", "channels": "চ্যানেল",
"rules": "Delivery rules" "rules": "ডেলিভারি নিয়মাবলী"
}, },
"severity": { "severity": {
"info": "Info", "info": "তথ্য",
"success": "Success", "success": "সাফল্য",
"warning": "Warning", "warning": "সতর্কতা",
"critical": "Critical" "critical": "সমালোচনামূলক"
}, },
"inbox": { "inbox": {
"sourceTermix": "Termix", "sourceTermix": "টার্মিক্স",
"openLink": "Open", "openLink": "খোলা",
"view": "View", "view": "দেখুন",
"unread": "Unread", "unread": "অপঠিত",
"deliveryFailed_one": "{{count}} channel failed", "deliveryFailed_one": "{{count}} চ্যানেল ব্যর্থ হয়েছে",
"deliveryFailed_other": "{{count}} channels failed", "deliveryFailed_other": "{{count}} চ্যানেল ব্যর্থ হয়েছে",
"markRead": "Mark as read", "markRead": "পঠিত হিসেবে চিহ্নিত করুন",
"markUnread": "Mark as unread", "markUnread": "অপঠিত হিসাবে চিহ্নিত করুন",
"markAllRead": "Mark all as read", "markAllRead": "সবগুলো পঠিত হিসেবে চিহ্নিত করুন।",
"delete": "Delete", "delete": "মুছে ফেলুন",
"clearRead": "Delete read alerts", "clearRead": "পঠিত সতর্কতাগুলি মুছুন",
"cleared_one": "Deleted {{count}} alert", "cleared_one": "{{count}} সতর্কতা মুছে ফেলা হয়েছে",
"cleared_other": "Deleted {{count}} alerts", "cleared_other": "মুছে ফেলা {{count}} সতর্কতা",
"filterAll": "All", "filterAll": "সব",
"filterUnread": "Unread", "filterUnread": "অপঠিত",
"anySeverity": "Any severity", "anySeverity": "যেকোনো তীব্রতা",
"anySource": "Any source", "anySource": "যেকোনো উৎস",
"openAll": "Open in a tab", "openAll": "একটি ট্যাবে খুলুন",
"empty": "No alerts yet.", "empty": "এখনো কোনো সতর্কতা আসেনি।",
"emptyUnread": "You are all caught up.", "emptyUnread": "আপনি সবকিছু জেনে গেছেন।",
"loadMore": "Load more" "loadMore": "আরও লোড করুন"
}, },
"channels": { "channels": {
"intro": "Channels are where alerts can go outside Termix. Delivery rules pick which alerts use them.", "intro": "চ্যানেল হলো এমন জায়গা যেখানে অ্যালার্টগুলো টারমিক্সের বাইরে যেতে পারে। ডেলিভারি রুলগুলো নির্ধারণ করে কোন অ্যালার্টগুলো সেখানে ব্যবহৃত হবে।",
"add": "Add channel", "add": "চ্যানেল যোগ করুন",
"edit": "Edit channel", "edit": "চ্যানেল সম্পাদনা করুন",
"test": "Send a test", "test": "একটি পরীক্ষা পাঠান",
"testSent": "Test alert sent", "testSent": "পরীক্ষার সতর্কতা পাঠানো হয়েছে",
"testFailed": "Test failed: {{error}}", "testFailed": "পরীক্ষা ব্যর্থ হয়েছে: {{error}}",
"deleteConfirm": "Delete the channel \"{{name}}\"?", "deleteConfirm": "\"{{name}} \" চ্যানেলটি মুছে ফেলবেন?",
"deleted": "Channel deleted", "deleted": "চ্যানেল মুছে ফেলা হয়েছে",
"empty": "No channels yet.", "empty": "এখনো কোনো চ্যানেল নেই।",
"enabled": "Enabled", "enabled": "সক্ষম করা হয়েছে",
"needsSave": "This channel needs to be opened and saved again before it can send.", "needsSave": "পাঠানোর আগে এই চ্যানেলটি আবার খুলতে ও সংরক্ষণ করতে হবে।",
"name": "Name", "name": "নাম",
"nameRequired": "Name is required", "nameRequired": "নাম আবশ্যক",
"type": "Type", "type": "প্রকার",
"types": { "types": {
"webhook": "Webhook", "webhook": "ওয়েবহুক",
"ntfy": "ntfy", "ntfy": "এনটিএফওয়াই",
"discord": "Discord", "discord": "ডিসকর্ড",
"email": "Email" "email": "ইমেল"
}, },
"emailUnavailable": "Email needs an SMTP server, which an admin sets up in the Alerts settings.", "emailUnavailable": "ইমেইলের জন্য একটি SMTP সার্ভার প্রয়োজন, যা অ্যাডমিন অ্যালার্ট সেটিংসে সেট আপ করেন।",
"webhookUrl": "URL", "webhookUrl": "ইউআরএল",
"webhookHint": "Gets a JSON body for every alert.", "webhookHint": "প্রতিটি অ্যালার্টের জন্য একটি JSON বডি পাওয়া যায়।",
"method": "Method", "method": "পদ্ধতি",
"headers": "Headers", "headers": "হেডার",
"headersHint": "One per line, like Name: value.", "headersHint": "প্রতি লাইনে একটি করে, যেমন নাম: মান।",
"ntfyServer": "Server URL", "ntfyServer": "সার্ভার ইউআরএল",
"ntfyTopic": "Topic", "ntfyTopic": "বিষয়",
"ntfyToken": "Access token (optional)", "ntfyToken": "প্রবেশ টোকেন (ঐচ্ছিক)",
"discordUrl": "Discord webhook URL", "discordUrl": "ডিসকর্ড ওয়েবহুক ইউআরএল",
"discordHint": "From the channel's settings in Discord, under Integrations.", "discordHint": "ডিসকর্ডে চ্যানেলের সেটিংস থেকে, ইন্টিগ্রেশনস-এর অধীনে।",
"discordUsername": "Display name (optional)", "discordUsername": "প্রদর্শনের নাম (ঐচ্ছিক)",
"discordAvatar": "Avatar URL (optional)", "discordAvatar": "অবতার ইউআরএল (ঐচ্ছিক)",
"emailTo": "Send to", "emailTo": "পাঠান",
"emailHint": "Separate more than one address with commas.", "emailHint": "একাধিক ঠিকানা কমা দিয়ে আলাদা করুন।",
"privateNetwork": "Allow a private network address", "privateNetwork": "একটি ব্যক্তিগত নেটওয়ার্ক ঠিকানা অনুমোদন করুন",
"privateNetworkHint": "Only works for hosts an admin allows in the private endpoint list." "privateNetworkHint": "এটি শুধুমাত্র সেইসব হোস্টের ক্ষেত্রেই কাজ করে, যেগুলোকে অ্যাডমিন তার প্রাইভেট এন্ডপয়েন্ট তালিকায় অনুমোদন দেয়।"
}, },
"rules": { "rules": {
"intro": "A delivery rule sends matching alerts to your channels. Alerts always stay in the inbox too.", "intro": "একটি ডেলিভারি রুল আপনার চ্যানেলগুলিতে প্রাসঙ্গিক অ্যালার্ট পাঠায়। অ্যালার্টগুলো সবসময় ইনবক্সেও থেকে যায়।",
"add": "Add rule", "add": "নিয়ম যোগ করুন",
"edit": "Edit rule", "edit": "নিয়ম সম্পাদনা করুন",
"empty": "No rules yet, so alerts only show up in the inbox.", "empty": "এখনো কোনো নিয়ম তৈরি হয়নি, তাই অ্যালার্টগুলো শুধু ইনবক্সেই দেখা যায়।",
"needChannel": "Add a channel first.", "needChannel": "প্রথমে একটি চ্যানেল যোগ করুন।",
"enabled": "Enabled", "enabled": "সক্ষম করা হয়েছে",
"name": "Name", "name": "নাম",
"nameRequired": "Name is required", "nameRequired": "নাম আবশ্যক",
"match": "Alerts to send", "match": "পাঠানোর জন্য সতর্কতা",
"matchHint": "* for everything, automations.* for everything from automations, or one exact kind.", "matchHint": "সবকিছুর জন্য, অটোমেশন। অটোমেশন থেকে প্রাপ্ত সবকিছুর জন্য, অথবা ঠিক এক ধরনের।",
"minSeverity": "At least", "minSeverity": "অন্তত",
"channels": "Send to", "channels": "পাঠান",
"channelRequired": "Pick at least one channel", "channelRequired": "অন্তত একটি চ্যানেল বেছে নিন",
"deleteConfirm": "Delete the rule \"{{name}}\"?", "deleteConfirm": "\"{{name}} \" নিয়মটি মুছে ফেলুন?",
"everything": "Everything", "everything": "সবকিছু",
"summary": "{{match}}, {{severity}} or higher, to {{channels}}" "summary": "{{match}}, {{severity}} বা তার বেশি, থেকে {{channels}} পর্যন্ত"
}, },
"actions": { "actions": {
"cancel": "Cancel", "cancel": "বাতিল করুন",
"save": "Save", "save": "সংরক্ষণ করুন",
"saving": "Saving...", "saving": "সঞ্চয়...",
"delete": "Delete" "delete": "মুছে ফেলুন"
}, },
"widget": { "widget": {
"name": "Alert Feed", "name": "সতর্কতা ফিড",
"description": "Your latest alerts, with a quick way to mark them read", "description": "আপনার সর্বশেষ অ্যালার্টগুলো, এবং সেগুলোকে পঠিত হিসেবে চিহ্নিত করার একটি দ্রুত উপায়।",
"maxItems": "Max items", "maxItems": "সর্বোচ্চ আইটেম",
"showRead": "Show read alerts", "showRead": "পঠিত সতর্কতা দেখান",
"allClear": "All clear", "allClear": "সব পরিষ্কার",
"loading": "Loading..." "loading": "লোড হচ্ছে..."
},
"plugin": {
"name": "Alerts"
} }
} }
@@ -168,5 +168,8 @@
"showRead": "Mostra les alertes de lectura", "showRead": "Mostra les alertes de lectura",
"allClear": "Tot clar", "allClear": "Tot clar",
"loading": "S'està carregant..." "loading": "S'està carregant..."
},
"plugin": {
"name": "Alerts"
} }
} }
@@ -168,5 +168,8 @@
"showRead": "Zobrazit upozornění na přečtení", "showRead": "Zobrazit upozornění na přečtení",
"allClear": "Všechno čisté", "allClear": "Všechno čisté",
"loading": "Načítání..." "loading": "Načítání..."
},
"plugin": {
"name": "Alerts"
} }
} }
@@ -168,5 +168,8 @@
"showRead": "Vis læseadvarsler", "showRead": "Vis læseadvarsler",
"allClear": "Alt klart", "allClear": "Alt klart",
"loading": "Indlæser..." "loading": "Indlæser..."
},
"plugin": {
"name": "Alerts"
} }
} }
@@ -168,5 +168,8 @@
"showRead": "Lesebenachrichtigungen anzeigen", "showRead": "Lesebenachrichtigungen anzeigen",
"allClear": "Alles in Ordnung", "allClear": "Alles in Ordnung",
"loading": "Laden..." "loading": "Laden..."
},
"plugin": {
"name": "Alerts"
} }
} }
@@ -168,5 +168,8 @@
"showRead": "Εμφάνιση ειδοποιήσεων ανάγνωσης", "showRead": "Εμφάνιση ειδοποιήσεων ανάγνωσης",
"allClear": "Ορίζοντας είναι σαφής", "allClear": "Ορίζοντας είναι σαφής",
"loading": "Φόρτωση..." "loading": "Φόρτωση..."
},
"plugin": {
"name": "Alerts"
} }
} }
@@ -168,5 +168,8 @@
"showRead": "Mostrar alertas de lectura", "showRead": "Mostrar alertas de lectura",
"allClear": "Todo correcto", "allClear": "Todo correcto",
"loading": "Cargando..." "loading": "Cargando..."
},
"plugin": {
"name": "Alerts"
} }
} }
@@ -168,5 +168,8 @@
"showRead": "Näytä lukuilmoitukset", "showRead": "Näytä lukuilmoitukset",
"allClear": "Kaikki selvää", "allClear": "Kaikki selvää",
"loading": "Ladataan..." "loading": "Ladataan..."
},
"plugin": {
"name": "Alerts"
} }
} }
@@ -168,5 +168,8 @@
"showRead": "Afficher les alertes de lecture", "showRead": "Afficher les alertes de lecture",
"allClear": "Aucune alerte", "allClear": "Aucune alerte",
"loading": "Chargement..." "loading": "Chargement..."
},
"plugin": {
"name": "Alerts"
} }
} }
@@ -168,5 +168,8 @@
"showRead": "הצג התראות קריאה", "showRead": "הצג התראות קריאה",
"allClear": "הכל ברור", "allClear": "הכל ברור",
"loading": "טְעִינָה..." "loading": "טְעִינָה..."
},
"plugin": {
"name": "Alerts"
} }
} }
+88 -85
View File
@@ -4,13 +4,13 @@
}, },
"permissions": { "permissions": {
"use": { "use": {
"title": "Use alerts", "title": "अलर्ट का उपयोग करें",
"description": "Get alerts in the inbox and send them to your own channels." "description": "इनबॉक्स में अलर्ट प्राप्त करें और उन्हें अपने चैनलों पर भेजें।"
} }
}, },
"onboarding": { "onboarding": {
"feature": "अलर्ट", "feature": "अलर्ट",
"featureDesc": "Every alert in one inbox, sent on to Discord, ntfy, email or a webhook if you want." "featureDesc": "सभी अलर्ट एक ही इनबॉक्स में, और यदि आप चाहें तो उन्हें डिस्कोर्ड, एनटीएफआई, ईमेल या वेबहुक पर भेजा जा सकता है।"
}, },
"settings": { "settings": {
"group": { "group": {
@@ -19,141 +19,141 @@
}, },
"admin": { "admin": {
"announcements": { "announcements": {
"label": "Termix announcements", "label": "टर्मिक्स की घोषणाएँ",
"description": "Show news from the Termix team, like security notices and releases, in everyone's inbox." "description": "टर्मिक्स टीम से संबंधित समाचार, जैसे कि सुरक्षा संबंधी सूचनाएं और विज्ञप्तियां, सभी के इनबॉक्स में दिखाएं।"
}, },
"retentionDays": { "retentionDays": {
"label": "Keep alerts for (days)", "label": "(दिनों) के लिए अलर्ट चालू रखें",
"description": "Older alerts are removed from every inbox." "description": "सभी इनबॉक्स से पुराने अलर्ट हटा दिए जाते हैं।"
}, },
"smtpHost": { "smtpHost": {
"label": "SMTP server", "label": "एसएमटीपी सर्वर",
"description": "Needed for email channels. Leave empty to turn email off.", "description": "ईमेल चैनलों के लिए आवश्यक। ईमेल बंद करने के लिए इसे खाली छोड़ दें।",
"placeholder": "smtp.example.com" "placeholder": "smtp.example.com"
}, },
"smtpPort": { "smtpPort": {
"label": "SMTP port", "label": "एसएमटीपी पोर्ट",
"description": "Usually 587 with STARTTLS or 465 with TLS." "description": "आमतौर पर STARTTLS के साथ 587 या TLS के साथ 465 का उपयोग किया जाता है।"
}, },
"smtpSecure": { "smtpSecure": {
"label": "Use TLS from the start", "label": "शुरुआत से ही TLS का उपयोग करें",
"description": "Turn on for port 465. Leave off for 587, which upgrades to TLS on its own." "description": "पोर्ट 465 के लिए इसे चालू करें। पोर्ट 587 के लिए इसे बंद रखें, क्योंकि यह अपने आप TLS में अपग्रेड हो जाता है।"
}, },
"smtpUser": { "smtpUser": {
"label": "SMTP username", "label": "एसएमटीपी उपयोगकर्ता नाम",
"description": "Leave empty if the server does not need a login." "description": "यदि सर्वर को लॉगिन की आवश्यकता नहीं है तो इसे खाली छोड़ दें।"
}, },
"smtpPassword": { "smtpPassword": {
"label": "SMTP password", "label": "एसएमटीपी पासवर्ड",
"description": "Stored encrypted." "description": "एन्क्रिप्टेड रूप में संग्रहीत।"
}, },
"smtpFrom": { "smtpFrom": {
"label": "From address", "label": "इस पते से",
"description": "The sender alerts come from.", "description": "प्रेषक अलर्ट कहाँ से आते हैं?",
"placeholder": "Termix <alerts@example.com>" "placeholder": "टर्मिक्स <alerts@example.com>"
} }
}, },
"user": { "user": {
"popups": { "popups": {
"label": "Alert popups", "label": "अलर्ट पॉपअप",
"description": "Which new alerts pop up while you use Termix. They always land in the inbox.", "description": "टर्मिक्स का उपयोग करते समय कौन-कौन से नए अलर्ट आते हैं? वे हमेशा आपके इनबॉक्स में आते हैं।",
"all": "All alerts", "all": "सभी अलर्ट",
"warning": "Warnings and critical", "warning": "चेतावनी और महत्वपूर्ण",
"critical": "Critical only", "critical": "केवल महत्वपूर्ण",
"off": "कोई नहीं" "off": "कोई नहीं"
} }
} }
}, },
"sections": { "sections": {
"inbox": "Inbox", "inbox": "इनबॉक्स",
"channels": "चैनल", "channels": "चैनल",
"rules": "Delivery rules" "rules": "डिलीवरी नियम"
}, },
"severity": { "severity": {
"info": "जानकारी", "info": "जानकारी",
"success": "सफल", "success": "सफल",
"warning": "चेतावनी", "warning": "चेतावनी",
"critical": "Critical" "critical": "गंभीर"
}, },
"inbox": { "inbox": {
"sourceTermix": "Termix", "sourceTermix": "Termix",
"openLink": "खोलें", "openLink": "खोलें",
"view": "देखें", "view": "देखें",
"unread": "Unread", "unread": "अपठित ग",
"deliveryFailed_one": "{{count}} channel failed", "deliveryFailed_one": "{{count}} चैनल विफल हो गया",
"deliveryFailed_other": "{{count}} channels failed", "deliveryFailed_other": "{{count}} चैनल विफल हो गए",
"markRead": "Mark as read", "markRead": "पढ़े हुए का चिह्न",
"markUnread": "Mark as unread", "markUnread": "अपठित के रूप में चिह्नित करें",
"markAllRead": "Mark all as read", "markAllRead": "सभी को पढ़ा हुआ मार्क करें",
"delete": "हटाएँ", "delete": "हटाएँ",
"clearRead": "Delete read alerts", "clearRead": "पढ़े गए अलर्ट हटाएं",
"cleared_one": "Deleted {{count}} alert", "cleared_one": "अलर्ट हटा दिया गया {{count}}",
"cleared_other": "Deleted {{count}} alerts", "cleared_other": "हटाए गए {{count}} अलर्ट",
"filterAll": "सभी", "filterAll": "सभी",
"filterUnread": "Unread", "filterUnread": "अपठित ग",
"anySeverity": "Any severity", "anySeverity": "किसी भी गंभीरता",
"anySource": "Any source", "anySource": "कोई भी स्रोत",
"openAll": "Open in a tab", "openAll": "एक टैब में खोलें",
"empty": "No alerts yet.", "empty": "अभी तक कोई अलर्ट नहीं है।",
"emptyUnread": "You are all caught up.", "emptyUnread": "आप सभी अपडेट्स से अवगत हैं।",
"loadMore": "Load more" "loadMore": "और लोड करें"
}, },
"channels": { "channels": {
"intro": "Channels are where alerts can go outside Termix. Delivery rules pick which alerts use them.", "intro": "चैनल वो जगह हैं जहां अलर्ट टर्मिक्स से बाहर जा सकते हैं। डिलीवरी नियम तय करते हैं कि कौन से अलर्ट इनका उपयोग करेंगे।",
"add": "Add channel", "add": "चैनल जोड़ें",
"edit": "Edit channel", "edit": "चैनल संपादित करें",
"test": "Send a test", "test": "टेस्ट भेजें",
"testSent": "Test alert sent", "testSent": "परीक्षण अलर्ट भेजा गया",
"testFailed": "Test failed: {{error}}", "testFailed": "परीक्षण विफल: {{error}}",
"deleteConfirm": "Delete the channel \"{{name}}\"?", "deleteConfirm": "चैनल \"{{name}} \" को हटा दें?",
"deleted": "Channel deleted", "deleted": "चैनल हटा दिया गया",
"empty": "No channels yet.", "empty": "अभी तक कोई चैनल उपलब्ध नहीं हैं।",
"enabled": "सक्षम", "enabled": "सक्षम",
"needsSave": "This channel needs to be opened and saved again before it can send.", "needsSave": "भेजने से पहले इस चैनल को दोबारा खोलकर सेव करना होगा।",
"name": "नाम", "name": "नाम",
"nameRequired": "नाम आवश्यक है", "nameRequired": "नाम आवश्यक है",
"type": "प्रकार", "type": "प्रकार",
"types": { "types": {
"webhook": "Webhook", "webhook": "WEbhook",
"ntfy": "ntfy", "ntfy": "ntfy",
"discord": "Discord", "discord": "Discord",
"email": "ईमेल" "email": "ईमेल"
}, },
"emailUnavailable": "Email needs an SMTP server, which an admin sets up in the Alerts settings.", "emailUnavailable": "ईमेल के लिए एक SMTP सर्वर की आवश्यकता होती है, जिसे एडमिन अलर्ट सेटिंग्स में सेट करता है।",
"webhookUrl": "URL", "webhookUrl": "URL",
"webhookHint": "Gets a JSON body for every alert.", "webhookHint": "प्रत्येक अलर्ट के लिए एक JSON बॉडी प्राप्त करता है।",
"method": "Method", "method": "तरीका",
"headers": "Headers", "headers": "हेडर",
"headersHint": "One per line, like Name: value.", "headersHint": "एक पंक्ति में एक, जैसे नाम: मान।",
"ntfyServer": "सर्वर URL", "ntfyServer": "सर्वर URL",
"ntfyTopic": "विषय", "ntfyTopic": "विषय",
"ntfyToken": "Access token (optional)", "ntfyToken": "एक्सेस टोकन (वैकल्पिक)",
"discordUrl": "Discord webhook URL", "discordUrl": "डिस्कॉर्ड वेबहुक यूआरएल",
"discordHint": "From the channel's settings in Discord, under Integrations.", "discordHint": "डिस्कोर्ड में चैनल की सेटिंग में, इंटीग्रेशन के अंतर्गत।",
"discordUsername": "Display name (optional)", "discordUsername": "प्रदर्शन नाम (वैकल्पिक)",
"discordAvatar": "Avatar URL (optional)", "discordAvatar": "अवतार यूआरएल (वैकल्पिक)",
"emailTo": "Send to", "emailTo": "भेजना",
"emailHint": "Separate more than one address with commas.", "emailHint": "एक से अधिक पतों को अल्पविराम से अलग करें।",
"privateNetwork": "Allow a private network address", "privateNetwork": "एक निजी नेटवर्क पते की अनुमति दें",
"privateNetworkHint": "Only works for hosts an admin allows in the private endpoint list." "privateNetworkHint": "यह सुविधा केवल उन होस्ट्स के लिए काम करती है जिन्हें एडमिन निजी एंडपॉइंट सूची में शामिल करने की अनुमति देता है।"
}, },
"rules": { "rules": {
"intro": "A delivery rule sends matching alerts to your channels. Alerts always stay in the inbox too.", "intro": "एक डिलीवरी नियम आपके चैनलों पर मिलान करने वाले अलर्ट भेजता है। अलर्ट हमेशा आपके इनबॉक्स में भी रहते हैं।",
"add": "Add rule", "add": "नियम जोड़ें",
"edit": "Edit rule", "edit": "नियम संपादित करें",
"empty": "No rules yet, so alerts only show up in the inbox.", "empty": "अभी तक कोई नियम नहीं बने हैं, इसलिए अलर्ट केवल इनबॉक्स में ही दिखाई देंगे।",
"needChannel": "Add a channel first.", "needChannel": "पहले एक चैनल जोड़ें।",
"enabled": "सक्षम", "enabled": "सक्षम",
"name": "नाम", "name": "नाम",
"nameRequired": "नाम आवश्यक है", "nameRequired": "नाम आवश्यक है",
"match": "Alerts to send", "match": "भेजे जाने वाले अलर्ट",
"matchHint": "* for everything, automations.* for everything from automations, or one exact kind.", "matchHint": "* हर चीज के लिए, स्वचालन। * स्वचालन से लेकर हर चीज के लिए, या एक सटीक प्रकार के लिए।",
"minSeverity": "At least", "minSeverity": "कम से कम",
"channels": "Send to", "channels": "भेजना",
"channelRequired": "Pick at least one channel", "channelRequired": "कम से कम एक चैनल चुनें",
"deleteConfirm": "Delete the rule \"{{name}}\"?", "deleteConfirm": "क्या नियम \"{{name}} \" को हटा दें?",
"everything": "Everything", "everything": "सब कुछ",
"summary": "{{match}}, {{severity}} or higher, to {{channels}}" "summary": "{{match}}, {{severity}} या इससे अधिक, से {{channels}} तक"
}, },
"actions": { "actions": {
"cancel": "रद्द करें", "cancel": "रद्द करें",
@@ -163,10 +163,13 @@
}, },
"widget": { "widget": {
"name": "अलर्ट फीड", "name": "अलर्ट फीड",
"description": "Your latest alerts, with a quick way to mark them read", "description": "आपके नवीनतम अलर्ट, जिन्हें आप आसानी से पढ़ सकते हैं।",
"maxItems": "Max items", "maxItems": "अधिकतम आइटम",
"showRead": "Show read alerts", "showRead": "पढ़े जाने के अलर्ट दिखाएँ",
"allClear": "सब ठीक है", "allClear": "सब ठीक है",
"loading": "लोड हो रहा है..." "loading": "लोड हो रहा है..."
},
"plugin": {
"name": "Alerts"
} }
} }
@@ -168,5 +168,8 @@
"showRead": "Olvasási értesítések megjelenítése", "showRead": "Olvasási értesítések megjelenítése",
"allClear": "Minden tiszta", "allClear": "Minden tiszta",
"loading": "Terhelés..." "loading": "Terhelés..."
},
"plugin": {
"name": "Alerts"
} }
} }
+117 -114
View File
@@ -1,172 +1,175 @@
{ {
"nav": { "nav": {
"alerts": "Alerts" "alerts": "Peringatan"
}, },
"permissions": { "permissions": {
"use": { "use": {
"title": "Use alerts", "title": "Gunakan peringatan",
"description": "Get alerts in the inbox and send them to your own channels." "description": "Dapatkan notifikasi di kotak masuk dan kirimkan ke saluran Anda sendiri."
} }
}, },
"onboarding": { "onboarding": {
"feature": "Alerts", "feature": "Peringatan",
"featureDesc": "Every alert in one inbox, sent on to Discord, ntfy, email or a webhook if you want." "featureDesc": "Semua notifikasi dalam satu kotak masuk, yang kemudian dikirim ke Discord, ntfy, email, atau webhook jika Anda mau."
}, },
"settings": { "settings": {
"group": { "group": {
"general": "General", "general": "Umum",
"email": "Email" "email": "E-mail"
}, },
"admin": { "admin": {
"announcements": { "announcements": {
"label": "Termix announcements", "label": "Pengumuman Termix",
"description": "Show news from the Termix team, like security notices and releases, in everyone's inbox." "description": "Tampilkan berita dari tim Termix, seperti pemberitahuan keamanan dan rilis, di kotak masuk setiap orang."
}, },
"retentionDays": { "retentionDays": {
"label": "Keep alerts for (days)", "label": "Aktifkan peringatan selama (hari)",
"description": "Older alerts are removed from every inbox." "description": "Notifikasi lama dihapus dari setiap kotak masuk."
}, },
"smtpHost": { "smtpHost": {
"label": "SMTP server", "label": "Server SMTP",
"description": "Needed for email channels. Leave empty to turn email off.", "description": "Diperlukan untuk saluran email. Biarkan kosong untuk menonaktifkan email.",
"placeholder": "smtp.example.com" "placeholder": "smtp.example.com"
}, },
"smtpPort": { "smtpPort": {
"label": "SMTP port", "label": "Port SMTP",
"description": "Usually 587 with STARTTLS or 465 with TLS." "description": "Biasanya 587 dengan STARTTLS atau 465 dengan TLS."
}, },
"smtpSecure": { "smtpSecure": {
"label": "Use TLS from the start", "label": "Gunakan TLS sejak awal.",
"description": "Turn on for port 465. Leave off for 587, which upgrades to TLS on its own." "description": "Aktifkan untuk port 465. Biarkan nonaktif untuk port 587, yang akan secara otomatis diupgrade ke TLS."
}, },
"smtpUser": { "smtpUser": {
"label": "SMTP username", "label": "Nama pengguna SMTP",
"description": "Leave empty if the server does not need a login." "description": "Biarkan kosong jika server tidak memerlukan login."
}, },
"smtpPassword": { "smtpPassword": {
"label": "SMTP password", "label": "Kata sandi SMTP",
"description": "Stored encrypted." "description": "Disimpan dalam keadaan terenkripsi."
}, },
"smtpFrom": { "smtpFrom": {
"label": "From address", "label": "Dari alamat",
"description": "The sender alerts come from.", "description": "Peringatan pengirim berasal dari.",
"placeholder": "Termix <alerts@example.com>" "placeholder": "Termix <alerts@example.com>"
} }
}, },
"user": { "user": {
"popups": { "popups": {
"label": "Alert popups", "label": "Popup peringatan",
"description": "Which new alerts pop up while you use Termix. They always land in the inbox.", "description": "Notifikasi baru apa saja yang muncul saat Anda menggunakan Termix? Notifikasi tersebut selalu masuk ke kotak masuk Anda.",
"all": "All alerts", "all": "Semua peringatan",
"warning": "Warnings and critical", "warning": "Peringatan dan hal-hal penting",
"critical": "Critical only", "critical": "Kritik saja",
"off": "None" "off": "Tidak ada"
} }
} }
}, },
"sections": { "sections": {
"inbox": "Inbox", "inbox": "Kotak Masuk",
"channels": "Channels", "channels": "Saluran",
"rules": "Delivery rules" "rules": "Aturan pengiriman"
}, },
"severity": { "severity": {
"info": "Info", "info": "Informasi",
"success": "Success", "success": "Kesuksesan",
"warning": "Warning", "warning": "Peringatan",
"critical": "Critical" "critical": "Kritis"
}, },
"inbox": { "inbox": {
"sourceTermix": "Termix", "sourceTermix": "Termix",
"openLink": "Open", "openLink": "Membuka",
"view": "View", "view": "Melihat",
"unread": "Unread", "unread": "Belum dibaca",
"deliveryFailed_one": "{{count}} channel failed", "deliveryFailed_one": "{{count}} saluran gagal",
"deliveryFailed_other": "{{count}} channels failed", "deliveryFailed_other": "{{count}} saluran gagal",
"markRead": "Mark as read", "markRead": "Tandai sebagai sudah dibaca",
"markUnread": "Mark as unread", "markUnread": "Tandai sebagai belum dibaca",
"markAllRead": "Mark all as read", "markAllRead": "Tandai semua sebagai sudah dibaca",
"delete": "Delete", "delete": "Menghapus",
"clearRead": "Delete read alerts", "clearRead": "Hapus notifikasi baca",
"cleared_one": "Deleted {{count}} alert", "cleared_one": "Peringatan {{count}} dihapus",
"cleared_other": "Deleted {{count}} alerts", "cleared_other": "Peringatan {{count}} dihapus",
"filterAll": "All", "filterAll": "Semua",
"filterUnread": "Unread", "filterUnread": "Belum dibaca",
"anySeverity": "Any severity", "anySeverity": "Tingkat keparahan apa pun",
"anySource": "Any source", "anySource": "Sumber apa pun",
"openAll": "Open in a tab", "openAll": "Buka di tab",
"empty": "No alerts yet.", "empty": "Belum ada peringatan.",
"emptyUnread": "You are all caught up.", "emptyUnread": "Anda sudah mengetahui semuanya.",
"loadMore": "Load more" "loadMore": "Muat lebih banyak"
}, },
"channels": { "channels": {
"intro": "Channels are where alerts can go outside Termix. Delivery rules pick which alerts use them.", "intro": "Saluran adalah tempat peringatan dapat dikirim ke luar Termix. Aturan pengiriman memilih peringatan mana yang akan menggunakannya.",
"add": "Add channel", "add": "Tambahkan saluran",
"edit": "Edit channel", "edit": "Edit saluran",
"test": "Send a test", "test": "Kirim tes",
"testSent": "Test alert sent", "testSent": "Peringatan uji coba terkirim",
"testFailed": "Test failed: {{error}}", "testFailed": "Tes gagal: {{error}}",
"deleteConfirm": "Delete the channel \"{{name}}\"?", "deleteConfirm": "Hapus saluran \"{{name}}\"?",
"deleted": "Channel deleted", "deleted": "Saluran dihapus",
"empty": "No channels yet.", "empty": "Belum ada saluran.",
"enabled": "Enabled", "enabled": "Diaktifkan",
"needsSave": "This channel needs to be opened and saved again before it can send.", "needsSave": "Saluran ini perlu dibuka dan disimpan kembali sebelum dapat mengirim data.",
"name": "Name", "name": "Nama",
"nameRequired": "Name is required", "nameRequired": "Nama wajib diisi.",
"type": "Type", "type": "Jenis",
"types": { "types": {
"webhook": "Webhook", "webhook": "Webhook",
"ntfy": "ntfy", "ntfy": "ntfy",
"discord": "Discord", "discord": "Perselisihan",
"email": "Email" "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", "webhookUrl": "URL",
"webhookHint": "Gets a JSON body for every alert.", "webhookHint": "Menerima isi JSON untuk setiap peringatan.",
"method": "Method", "method": "Metode",
"headers": "Headers", "headers": "Judul",
"headersHint": "One per line, like Name: value.", "headersHint": "Satu per baris, seperti Nama: nilai.",
"ntfyServer": "Server URL", "ntfyServer": "URL Server",
"ntfyTopic": "Topic", "ntfyTopic": "Topik",
"ntfyToken": "Access token (optional)", "ntfyToken": "Token akses (opsional)",
"discordUrl": "Discord webhook URL", "discordUrl": "URL webhook Discord",
"discordHint": "From the channel's settings in Discord, under Integrations.", "discordHint": "Dari pengaturan saluran di Discord, di bawah Integrasi.",
"discordUsername": "Display name (optional)", "discordUsername": "Nama tampilan (opsional)",
"discordAvatar": "Avatar URL (optional)", "discordAvatar": "URL Avatar (opsional)",
"emailTo": "Send to", "emailTo": "Kirim ke",
"emailHint": "Separate more than one address with commas.", "emailHint": "Pisahkan lebih dari satu alamat dengan koma.",
"privateNetwork": "Allow a private network address", "privateNetwork": "Izinkan alamat jaringan pribadi",
"privateNetworkHint": "Only works for hosts an admin allows in the private endpoint list." "privateNetworkHint": "Hanya berfungsi untuk host yang diizinkan oleh admin dalam daftar endpoint privat."
}, },
"rules": { "rules": {
"intro": "A delivery rule sends matching alerts to your channels. Alerts always stay in the inbox too.", "intro": "Aturan pengiriman mengirimkan peringatan yang sesuai ke saluran Anda. Peringatan juga selalu tetap berada di kotak masuk.",
"add": "Add rule", "add": "Tambahkan aturan",
"edit": "Edit rule", "edit": "Edit aturan",
"empty": "No rules yet, so alerts only show up in the inbox.", "empty": "Belum ada aturan, jadi notifikasi hanya muncul di kotak masuk.",
"needChannel": "Add a channel first.", "needChannel": "Tambahkan saluran terlebih dahulu.",
"enabled": "Enabled", "enabled": "Diaktifkan",
"name": "Name", "name": "Nama",
"nameRequired": "Name is required", "nameRequired": "Nama wajib diisi.",
"match": "Alerts to send", "match": "Peringatan untuk dikirim",
"matchHint": "* for everything, automations.* for everything from automations, or one exact kind.", "matchHint": "* untuk segala hal, otomatisasi.* untuk segala hal mulai dari otomatisasi, atau satu jenis tertentu.",
"minSeverity": "At least", "minSeverity": "Setidaknya",
"channels": "Send to", "channels": "Kirim ke",
"channelRequired": "Pick at least one channel", "channelRequired": "Pilih setidaknya satu saluran",
"deleteConfirm": "Delete the rule \"{{name}}\"?", "deleteConfirm": "Hapus aturan \"{{name}}\"?",
"everything": "Everything", "everything": "Semuanya",
"summary": "{{match}}, {{severity}} or higher, to {{channels}}" "summary": "{{match}}, {{severity}} atau lebih tinggi, hingga {{channels}}"
}, },
"actions": { "actions": {
"cancel": "Cancel", "cancel": "Membatalkan",
"save": "Save", "save": "Menyimpan",
"saving": "Saving...", "saving": "Penghematan...",
"delete": "Delete" "delete": "Menghapus"
}, },
"widget": { "widget": {
"name": "Alert Feed", "name": "Umpan Peringatan",
"description": "Your latest alerts, with a quick way to mark them read", "description": "Notifikasi terbaru Anda, dengan cara cepat untuk menandainya sebagai sudah dibaca.",
"maxItems": "Max items", "maxItems": "Jumlah maksimum",
"showRead": "Show read alerts", "showRead": "Tampilkan pemberitahuan telah dibaca",
"allClear": "All clear", "allClear": "Semuanya aman.",
"loading": "Loading..." "loading": "Memuat..."
},
"plugin": {
"name": "Alerts"
} }
} }
@@ -168,5 +168,8 @@
"showRead": "Mostra gli avvisi di lettura", "showRead": "Mostra gli avvisi di lettura",
"allClear": "Tutto a posto", "allClear": "Tutto a posto",
"loading": "Caricamento in corso..." "loading": "Caricamento in corso..."
},
"plugin": {
"name": "Alerts"
} }
} }
@@ -168,5 +168,8 @@
"showRead": "既読通知を表示する", "showRead": "既読通知を表示する",
"allClear": "すべて正常", "allClear": "すべて正常",
"loading": "読み込み中..." "loading": "読み込み中..."
},
"plugin": {
"name": "Alerts"
} }
} }
@@ -168,5 +168,8 @@
"showRead": "읽음 알림 표시", "showRead": "읽음 알림 표시",
"allClear": "모두 정상", "allClear": "모두 정상",
"loading": "로딩 중..." "loading": "로딩 중..."
},
"plugin": {
"name": "Alerts"
} }
} }
@@ -168,5 +168,8 @@
"showRead": "Leeswaarschuwingen weergeven", "showRead": "Leeswaarschuwingen weergeven",
"allClear": "Alles in orde", "allClear": "Alles in orde",
"loading": "Laden..." "loading": "Laden..."
},
"plugin": {
"name": "Alerts"
} }
} }
+97 -94
View File
@@ -1,16 +1,16 @@
{ {
"nav": { "nav": {
"alerts": "Alerts" "alerts": "Varsler"
}, },
"permissions": { "permissions": {
"use": { "use": {
"title": "Use alerts", "title": "Bruk varsler",
"description": "Get alerts in the inbox and send them to your own channels." "description": "Få varsler i innboksen og send dem til dine egne kanaler."
} }
}, },
"onboarding": { "onboarding": {
"feature": "Alerts", "feature": "Varsler",
"featureDesc": "Every alert in one inbox, sent on to Discord, ntfy, email or a webhook if you want." "featureDesc": "Alle varsler i én innboks, sendt videre til Discord, ntfy, e-post eller en webhook om du vil."
}, },
"settings": { "settings": {
"group": { "group": {
@@ -19,141 +19,141 @@
}, },
"admin": { "admin": {
"announcements": { "announcements": {
"label": "Termix announcements", "label": "Termix-kunngjøringer",
"description": "Show news from the Termix team, like security notices and releases, in everyone's inbox." "description": "Vis nyheter fra Termix-teamet, som sikkerhetsvarsler og utgivelser, i alles innboks."
}, },
"retentionDays": { "retentionDays": {
"label": "Keep alerts for (days)", "label": "Behold varsler i (dager)",
"description": "Older alerts are removed from every inbox." "description": "Eldre varsler fjernes fra alle innbokser."
}, },
"smtpHost": { "smtpHost": {
"label": "SMTP server", "label": "SMTP-server",
"description": "Needed for email channels. Leave empty to turn email off.", "description": "Nødvendig for e-postkanaler. La stå tomt for å slå av e-post.",
"placeholder": "smtp.example.com" "placeholder": "smtp.example.com"
}, },
"smtpPort": { "smtpPort": {
"label": "SMTP port", "label": "SMTP-port",
"description": "Usually 587 with STARTTLS or 465 with TLS." "description": "Vanligvis 587 med STARTTLS eller 465 med TLS."
}, },
"smtpSecure": { "smtpSecure": {
"label": "Use TLS from the start", "label": "Bruk TLS fra starten av",
"description": "Turn on for port 465. Leave off for 587, which upgrades to TLS on its own." "description": "Slå på port 465. Slå av for port 587, som oppgraderer til TLS på egenhånd."
}, },
"smtpUser": { "smtpUser": {
"label": "SMTP username", "label": "SMTP-brukernavn",
"description": "Leave empty if the server does not need a login." "description": "La feltet stå tomt hvis serveren ikke trenger pålogging."
}, },
"smtpPassword": { "smtpPassword": {
"label": "SMTP password", "label": "SMTP-passord",
"description": "Stored encrypted." "description": "Lagret kryptert."
}, },
"smtpFrom": { "smtpFrom": {
"label": "From address", "label": "Fra adresse",
"description": "The sender alerts come from.", "description": "Avsendervarslene kommer fra.",
"placeholder": "Termix <alerts@example.com>" "placeholder": "Termix <alerts@example.com>"
} }
}, },
"user": { "user": {
"popups": { "popups": {
"label": "Alert popups", "label": "Varselspopup-vinduer",
"description": "Which new alerts pop up while you use Termix. They always land in the inbox.", "description": "Hvilke nye varsler dukker opp mens du bruker Termix? De havner alltid i innboksen.",
"all": "All alerts", "all": "Alle varsler",
"warning": "Warnings and critical", "warning": "Advarsler og kritiske",
"critical": "Critical only", "critical": "Kun kritisk",
"off": "Ingen" "off": "Ingen"
} }
} }
}, },
"sections": { "sections": {
"inbox": "Inbox", "inbox": "Innboks",
"channels": "Channels", "channels": "Kanaler",
"rules": "Delivery rules" "rules": "Leveringsregler"
}, },
"severity": { "severity": {
"info": "Info", "info": "Info",
"success": "Suksess", "success": "Suksess",
"warning": "Advarsel", "warning": "Advarsel",
"critical": "Critical" "critical": "Kritisk"
}, },
"inbox": { "inbox": {
"sourceTermix": "Termix", "sourceTermix": "Termix",
"openLink": "Open", "openLink": "Åpne",
"view": "View", "view": "Utsikt",
"unread": "Unread", "unread": "Ulest",
"deliveryFailed_one": "{{count}} channel failed", "deliveryFailed_one": "{{count}} kanal mislyktes",
"deliveryFailed_other": "{{count}} channels failed", "deliveryFailed_other": "{{count}} kanaler mislyktes",
"markRead": "Mark as read", "markRead": "Merk som lest",
"markUnread": "Mark as unread", "markUnread": "Merk som ulest",
"markAllRead": "Mark all as read", "markAllRead": "Merk alle som lest",
"delete": "Slett", "delete": "Slett",
"clearRead": "Delete read alerts", "clearRead": "Slett lesevarsler",
"cleared_one": "Deleted {{count}} alert", "cleared_one": "Slettet {{count}} -varsel",
"cleared_other": "Deleted {{count}} alerts", "cleared_other": "Slettede {{count}} varsler",
"filterAll": "All", "filterAll": "Alle",
"filterUnread": "Unread", "filterUnread": "Ulest",
"anySeverity": "Any severity", "anySeverity": "Enhver alvorlighetsgrad",
"anySource": "Any source", "anySource": "Enhver kilde",
"openAll": "Open in a tab", "openAll": "Åpne i en fane",
"empty": "No alerts yet.", "empty": "Ingen varsler ennå.",
"emptyUnread": "You are all caught up.", "emptyUnread": "Dere er helt oppdatert.",
"loadMore": "Load more" "loadMore": "Last inn mer"
}, },
"channels": { "channels": {
"intro": "Channels are where alerts can go outside Termix. Delivery rules pick which alerts use them.", "intro": "Kanaler er der varsler kan sendes utenfor Termix. Leveringsregler velger hvilke varsler som bruker dem.",
"add": "Add channel", "add": "Legg til kanal",
"edit": "Edit channel", "edit": "Rediger kanal",
"test": "Send a test", "test": "Send en test",
"testSent": "Test alert sent", "testSent": "Testvarsel sendt",
"testFailed": "Test failed: {{error}}", "testFailed": "Testen mislyktes: {{error}}",
"deleteConfirm": "Delete the channel \"{{name}}\"?", "deleteConfirm": "Slette kanalen «{{name}}»?",
"deleted": "Channel deleted", "deleted": "Kanalen slettet",
"empty": "No channels yet.", "empty": "Ingen kanaler ennå.",
"enabled": "Aktivert", "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", "name": "Navn",
"nameRequired": "Navn er påkrevd", "nameRequired": "Navn er påkrevd",
"type": "Type", "type": "Type",
"types": { "types": {
"webhook": "Webhook", "webhook": "Webhook",
"ntfy": "ntfy", "ntfy": "ntfy",
"discord": "Discord", "discord": "Disharmoni",
"email": "E-post" "email": "E-post"
}, },
"emailUnavailable": "Email needs an SMTP server, which an admin sets up in the Alerts settings.", "emailUnavailable": "E-post trenger en SMTP-server, som en administrator konfigurerer i varslingsinnstillingene.",
"webhookUrl": "URL", "webhookUrl": "URL-adresse",
"webhookHint": "Gets a JSON body for every alert.", "webhookHint": "Henter en JSON-tekst for hvert varsel.",
"method": "Method", "method": "Metode",
"headers": "Headers", "headers": "Overskrifter",
"headersHint": "One per line, like Name: value.", "headersHint": "Én per linje, som Navn: verdi.",
"ntfyServer": "Server-URL", "ntfyServer": "Server-URL",
"ntfyTopic": "Topic", "ntfyTopic": "Emne",
"ntfyToken": "Access token (optional)", "ntfyToken": "Tilgangstoken (valgfritt)",
"discordUrl": "Discord webhook URL", "discordUrl": "Discord webhook-URL",
"discordHint": "From the channel's settings in Discord, under Integrations.", "discordHint": "Fra kanalens innstillinger i Discord, under Integrasjoner.",
"discordUsername": "Display name (optional)", "discordUsername": "Visningsnavn (valgfritt)",
"discordAvatar": "Avatar URL (optional)", "discordAvatar": "Avatar-URL (valgfritt)",
"emailTo": "Send to", "emailTo": "Send til",
"emailHint": "Separate more than one address with commas.", "emailHint": "Skill mer enn én adresse med komma.",
"privateNetwork": "Allow a private network address", "privateNetwork": "Tillat en privat nettverksadresse",
"privateNetworkHint": "Only works for hosts an admin allows in the private endpoint list." "privateNetworkHint": "Fungerer bare for verter som en administrator tillater i listen over private endepunkter."
}, },
"rules": { "rules": {
"intro": "A delivery rule sends matching alerts to your channels. Alerts always stay in the inbox too.", "intro": "En leveringsregel sender samsvarende varsler til kanalene dine. Varsler forblir også alltid i innboksen.",
"add": "Add rule", "add": "Legg til regel",
"edit": "Edit rule", "edit": "Rediger regel",
"empty": "No rules yet, so alerts only show up in the inbox.", "empty": "Ingen regler ennå, så varsler vises bare i innboksen.",
"needChannel": "Add a channel first.", "needChannel": "Legg til en kanal først.",
"enabled": "Aktivert", "enabled": "Aktivert",
"name": "Navn", "name": "Navn",
"nameRequired": "Navn er påkrevd", "nameRequired": "Navn er påkrevd",
"match": "Alerts to send", "match": "Varsler som skal sendes",
"matchHint": "* for everything, automations.* for everything from automations, or one exact kind.", "matchHint": "* for alt, automatiseringer.* for alt fra automatiseringer, eller én eksakt type.",
"minSeverity": "At least", "minSeverity": "Minst",
"channels": "Send to", "channels": "Send til",
"channelRequired": "Pick at least one channel", "channelRequired": "Velg minst én kanal",
"deleteConfirm": "Delete the rule \"{{name}}\"?", "deleteConfirm": "Slette regelen «{{name}}»?",
"everything": "Everything", "everything": "Alt",
"summary": "{{match}}, {{severity}} or higher, to {{channels}}" "summary": "{{match}}, {{severity}} eller høyere, til {{channels}}"
}, },
"actions": { "actions": {
"cancel": "Avbryt", "cancel": "Avbryt",
@@ -162,11 +162,14 @@
"delete": "Slett" "delete": "Slett"
}, },
"widget": { "widget": {
"name": "Alert Feed", "name": "Varselstrøm",
"description": "Your latest alerts, with a quick way to mark them read", "description": "Dine siste varsler, med en rask måte å merke dem som lest",
"maxItems": "Max items", "maxItems": "Maks antall varer",
"showRead": "Show read alerts", "showRead": "Vis lesevarsler",
"allClear": "All clear", "allClear": "Alt klart",
"loading": "Laster..." "loading": "Laster..."
},
"plugin": {
"name": "Alerts"
} }
} }
+84 -81
View File
@@ -4,13 +4,13 @@
}, },
"permissions": { "permissions": {
"use": { "use": {
"title": "Use alerts", "title": "Użyj alertów",
"description": "Get alerts in the inbox and send them to your own channels." "description": "Otrzymuj powiadomienia do skrzynki odbiorczej i wysyłaj je na swoje kanały."
} }
}, },
"onboarding": { "onboarding": {
"feature": "Alerty", "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": { "settings": {
"group": { "group": {
@@ -19,97 +19,97 @@
}, },
"admin": { "admin": {
"announcements": { "announcements": {
"label": "Termix announcements", "label": "Ogłoszenia Termix",
"description": "Show news from the Termix team, like security notices and releases, in everyone's inbox." "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": { "retentionDays": {
"label": "Keep alerts for (days)", "label": "Zachowaj alerty przez (dni)",
"description": "Older alerts are removed from every inbox." "description": "Starsze alerty zostaną usunięte ze wszystkich skrzynek odbiorczych."
}, },
"smtpHost": { "smtpHost": {
"label": "SMTP server", "label": "Serwer SMTP",
"description": "Needed for email channels. Leave empty to turn email off.", "description": "Potrzebne dla kanałów e-mail. Pozostaw puste, aby wyłączyć pocztę e-mail.",
"placeholder": "smtp.example.com" "placeholder": "smtp.example.com"
}, },
"smtpPort": { "smtpPort": {
"label": "SMTP port", "label": "Port SMTP",
"description": "Usually 587 with STARTTLS or 465 with TLS." "description": "Zwykle 587 z STARTTLS lub 465 z TLS."
}, },
"smtpSecure": { "smtpSecure": {
"label": "Use TLS from the start", "label": "Używaj protokołu TLS od samego początku",
"description": "Turn on for port 465. Leave off for 587, which upgrades to TLS on its own." "description": "Włącz dla portu 465. Pozostaw wyłączone dla portu 587, który automatycznie uaktualnia się do protokołu TLS."
}, },
"smtpUser": { "smtpUser": {
"label": "SMTP username", "label": "Nazwa użytkownika SMTP",
"description": "Leave empty if the server does not need a login." "description": "Pozostaw puste, jeśli serwer nie wymaga logowania."
}, },
"smtpPassword": { "smtpPassword": {
"label": "SMTP password", "label": "Hasło SMTP",
"description": "Stored encrypted." "description": "Przechowywane w postaci zaszyfrowanej."
}, },
"smtpFrom": { "smtpFrom": {
"label": "From address", "label": "Z adresu",
"description": "The sender alerts come from.", "description": "Od nadawcy pochodzą alerty.",
"placeholder": "Termix <alerts@example.com>" "placeholder": "Termix <alerts@example.com>"
} }
}, },
"user": { "user": {
"popups": { "popups": {
"label": "Alert popups", "label": "Okienka z alertami",
"description": "Which new alerts pop up while you use Termix. They always land in the inbox.", "description": "Jakie nowe alerty pojawiają się podczas korzystania z Termix. Zawsze trafiają do skrzynki odbiorczej.",
"all": "All alerts", "all": "Wszystkie alerty",
"warning": "Warnings and critical", "warning": "Ostrzeżenia i ostrzeżenia krytyczne",
"critical": "Critical only", "critical": "Tylko krytyczne",
"off": "Żaden" "off": "Żaden"
} }
} }
}, },
"sections": { "sections": {
"inbox": "Inbox", "inbox": "Skrzynka odbiorcza",
"channels": "Kanały", "channels": "Kanały",
"rules": "Delivery rules" "rules": "Zasady dostawy"
}, },
"severity": { "severity": {
"info": "Informacje", "info": "Informacje",
"success": "Powodzenie", "success": "Powodzenie",
"warning": "Ostrzeżenie", "warning": "Ostrzeżenie",
"critical": "Critical" "critical": "Krytyczny"
}, },
"inbox": { "inbox": {
"sourceTermix": "Termix", "sourceTermix": "Termix",
"openLink": "Otwórz", "openLink": "Otwórz",
"view": "Podgląd", "view": "Podgląd",
"unread": "Unread", "unread": "Niewykształcony",
"deliveryFailed_one": "{{count}} channel failed", "deliveryFailed_one": "{{count}} kanał uszkodzony",
"deliveryFailed_other": "{{count}} channels failed", "deliveryFailed_other": "{{count}} kanałów nie powiodło się",
"markRead": "Mark as read", "markRead": "Oznacz jako przeczytane",
"markUnread": "Mark as unread", "markUnread": "Oznacz jako nieprzeczytane",
"markAllRead": "Mark all as read", "markAllRead": "Oznacz wszystkie jako przeczytane",
"delete": "Usuń", "delete": "Usuń",
"clearRead": "Delete read alerts", "clearRead": "Usuń alerty odczytu",
"cleared_one": "Deleted {{count}} alert", "cleared_one": "Usunięto alert {{count}}",
"cleared_other": "Deleted {{count}} alerts", "cleared_other": "Usunięto {{count}} alertów",
"filterAll": "Wszystkie", "filterAll": "Wszystkie",
"filterUnread": "Unread", "filterUnread": "Niewykształcony",
"anySeverity": "Any severity", "anySeverity": "Jakakolwiek powaga",
"anySource": "Any source", "anySource": "Jakiekolwiek źródło",
"openAll": "Open in a tab", "openAll": "Otwórz w karcie",
"empty": "No alerts yet.", "empty": "Brak alertów.",
"emptyUnread": "You are all caught up.", "emptyUnread": "Wszyscy jesteście na bieżąco.",
"loadMore": "Load more" "loadMore": "Załaduj więcej"
}, },
"channels": { "channels": {
"intro": "Channels are where alerts can go outside Termix. Delivery rules pick which alerts use them.", "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": "Add channel", "add": "Dodaj kanał",
"edit": "Edit channel", "edit": "Edytuj kanał",
"test": "Send a test", "test": "Wyślij test",
"testSent": "Test alert sent", "testSent": "Wysłano alert testowy",
"testFailed": "Test failed: {{error}}", "testFailed": "Test nie powiódł się: {{error}}",
"deleteConfirm": "Delete the channel \"{{name}}\"?", "deleteConfirm": "Usunąć kanał „{{name}}”?",
"deleted": "Kanał usunięty", "deleted": "Kanał usunięty",
"empty": "No channels yet.", "empty": "Brak kanałów.",
"enabled": "Włączona", "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", "name": "Nazwa",
"nameRequired": "Nazwa jest wymagana", "nameRequired": "Nazwa jest wymagana",
"type": "Typ", "type": "Typ",
@@ -119,41 +119,41 @@
"discord": "Discord", "discord": "Discord",
"email": "E-mail" "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", "webhookUrl": "Adres URL",
"webhookHint": "Gets a JSON body for every alert.", "webhookHint": "Pobiera treść JSON dla każdego alertu.",
"method": "Metoda", "method": "Metoda",
"headers": "Headers", "headers": "Nagłówki",
"headersHint": "One per line, like Name: value.", "headersHint": "Po jednym w każdym wierszu, np. Nazwa: wartość.",
"ntfyServer": "Adres URL serwera", "ntfyServer": "Adres URL serwera",
"ntfyTopic": "Temat", "ntfyTopic": "Temat",
"ntfyToken": "Access token (optional)", "ntfyToken": "Token dostępu (opcjonalnie)",
"discordUrl": "Discord webhook URL", "discordUrl": "Adres URL webhooka Discord",
"discordHint": "From the channel's settings in Discord, under Integrations.", "discordHint": "W ustawieniach kanału w Discordzie, w sekcji Integracje.",
"discordUsername": "Display name (optional)", "discordUsername": "Nazwa wyświetlana (opcjonalnie)",
"discordAvatar": "Avatar URL (optional)", "discordAvatar": "Adres URL awatara (opcjonalnie)",
"emailTo": "Send to", "emailTo": "Wyślij do",
"emailHint": "Separate more than one address with commas.", "emailHint": "Oddziel więcej niż jeden adres przecinkami.",
"privateNetwork": "Allow a private network address", "privateNetwork": "Zezwól na prywatny adres sieciowy",
"privateNetworkHint": "Only works for hosts an admin allows in the private endpoint list." "privateNetworkHint": "Działa tylko w przypadku hostów dozwolonych przez administratora na liście prywatnych punktów końcowych."
}, },
"rules": { "rules": {
"intro": "A delivery rule sends matching alerts to your channels. Alerts always stay in the inbox too.", "intro": "Reguła dostarczania wysyła pasujące alerty do Twoich kanałów. Alerty zawsze pozostają w skrzynce odbiorczej.",
"add": "Add rule", "add": "Dodaj regułę",
"edit": "Edit rule", "edit": "Edytuj regułę",
"empty": "No rules yet, so alerts only show up in the inbox.", "empty": "Nie ma jeszcze żadnych reguł, więc powiadomienia pojawiają się tylko w skrzynce odbiorczej.",
"needChannel": "Add a channel first.", "needChannel": "Najpierw dodaj kanał.",
"enabled": "Włączona", "enabled": "Włączona",
"name": "Nazwa", "name": "Nazwa",
"nameRequired": "Nazwa jest wymagana", "nameRequired": "Nazwa jest wymagana",
"match": "Alerts to send", "match": "Alerty do wysłania",
"matchHint": "* for everything, automations.* for everything from automations, or one exact kind.", "matchHint": "* do wszystkiego, automatyzacje.* do wszystkiego, od automatyzacji, lub jednego konkretnego rodzaju.",
"minSeverity": "At least", "minSeverity": "Co najmniej",
"channels": "Send to", "channels": "Wyślij do",
"channelRequired": "Pick at least one channel", "channelRequired": "Wybierz co najmniej jeden kanał",
"deleteConfirm": "Delete the rule \"{{name}}\"?", "deleteConfirm": "Usunąć regułę „{{name}}”?",
"everything": "Everything", "everything": "Wszystko",
"summary": "{{match}}, {{severity}} or higher, to {{channels}}" "summary": "{{match}}, {{severity}} lub wyższy, do {{channels}}"
}, },
"actions": { "actions": {
"cancel": "Anuluj", "cancel": "Anuluj",
@@ -163,10 +163,13 @@
}, },
"widget": { "widget": {
"name": "Kanał alertów", "name": "Kanał alertów",
"description": "Your latest alerts, with a quick way to mark them read", "description": "Twoje najnowsze alerty z możliwością szybkiego oznaczenia ich jako przeczytanych",
"maxItems": "Max items", "maxItems": "Maksymalna liczba elementów",
"showRead": "Show read alerts", "showRead": "Pokaż alerty odczytu",
"allClear": "Bez alertów", "allClear": "Bez alertów",
"loading": "Ładowanie..." "loading": "Ładowanie..."
},
"plugin": {
"name": "Alerts"
} }
} }
+106 -103
View File
@@ -1,159 +1,159 @@
{ {
"nav": { "nav": {
"alerts": "Alerts" "alerts": "Alertas"
}, },
"permissions": { "permissions": {
"use": { "use": {
"title": "Use alerts", "title": "Usar alertas",
"description": "Get alerts in the inbox and send them to your own channels." "description": "Receba alertas na caixa de entrada e envie-os para seus próprios canais."
} }
}, },
"onboarding": { "onboarding": {
"feature": "Alerts", "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 em uma única caixa de entrada, enviadas para o Discord, NTfy, e-mail ou webhook, se desejar."
}, },
"settings": { "settings": {
"group": { "group": {
"general": "Geral", "general": "Geral",
"email": "Email" "email": "E-mail"
}, },
"admin": { "admin": {
"announcements": { "announcements": {
"label": "Termix announcements", "label": "Anúncios da Termix",
"description": "Show news from the Termix team, like security notices and releases, in everyone's inbox." "description": "Exibir notícias da equipe Termix, como avisos de segurança e comunicados, na caixa de entrada de todos."
}, },
"retentionDays": { "retentionDays": {
"label": "Keep alerts for (days)", "label": "Manter alertas por (dias)",
"description": "Older alerts are removed from every inbox." "description": "Alertas antigos são removidos de todas as caixas de entrada."
}, },
"smtpHost": { "smtpHost": {
"label": "SMTP server", "label": "Servidor SMTP",
"description": "Needed for email channels. Leave empty to turn email off.", "description": "Necessário para canais de e-mail. Deixe em branco para desativar o e-mail.",
"placeholder": "smtp.example.com" "placeholder": "smtp.example.com"
}, },
"smtpPort": { "smtpPort": {
"label": "SMTP port", "label": "porta SMTP",
"description": "Usually 587 with STARTTLS or 465 with TLS." "description": "Normalmente, usa-se a porta 587 com STARTTLS ou a porta 465 com TLS."
}, },
"smtpSecure": { "smtpSecure": {
"label": "Use TLS from the start", "label": "Use TLS desde o início.",
"description": "Turn on for port 465. Leave off for 587, which upgrades to TLS on its own." "description": "Ative para a porta 465. Deixe desativado para a porta 587, que atualiza para TLS automaticamente."
}, },
"smtpUser": { "smtpUser": {
"label": "SMTP username", "label": "nome de usuário SMTP",
"description": "Leave empty if the server does not need a login." "description": "Deixe em branco se o servidor não exigir login."
}, },
"smtpPassword": { "smtpPassword": {
"label": "SMTP password", "label": "Senha SMTP",
"description": "Stored encrypted." "description": "Armazenado criptografado."
}, },
"smtpFrom": { "smtpFrom": {
"label": "From address", "label": "Do endereço",
"description": "The sender alerts come from.", "description": "Os alertas do remetente vêm de:",
"placeholder": "Termix <alerts@example.com>" "placeholder": "Termix <alerts@example.com>"
} }
}, },
"user": { "user": {
"popups": { "popups": {
"label": "Alert popups", "label": "Janelas de alerta",
"description": "Which new alerts pop up while you use Termix. They always land in the inbox.", "description": "Quais novos alertas aparecem enquanto você usa o Termix? Eles sempre chegam na caixa de entrada.",
"all": "All alerts", "all": "Todos os alertas",
"warning": "Warnings and critical", "warning": "Avisos e alertas",
"critical": "Critical only", "critical": "Somente crítico",
"off": "Nenhum" "off": "Nenhum"
} }
} }
}, },
"sections": { "sections": {
"inbox": "Inbox", "inbox": "Caixa de entrada",
"channels": "Channels", "channels": "Canais",
"rules": "Delivery rules" "rules": "Regras de entrega"
}, },
"severity": { "severity": {
"info": "Info", "info": "Informações",
"success": "Success", "success": "Sucesso",
"warning": "Atenção", "warning": "Atenção",
"critical": "Critical" "critical": "Crítico"
}, },
"inbox": { "inbox": {
"sourceTermix": "Termix", "sourceTermix": "Termix",
"openLink": "Open", "openLink": "Abrir",
"view": "View", "view": "Visualizar",
"unread": "Unread", "unread": "Não lido",
"deliveryFailed_one": "{{count}} channel failed", "deliveryFailed_one": "{{count}} canal falhou",
"deliveryFailed_other": "{{count}} channels failed", "deliveryFailed_other": "{{count}} canais falharam",
"markRead": "Mark as read", "markRead": "Marcar como lido",
"markUnread": "Mark as unread", "markUnread": "Marcar como não lida",
"markAllRead": "Mark all as read", "markAllRead": "Marcar tudo como lido",
"delete": "Apagar", "delete": "Apagar",
"clearRead": "Delete read alerts", "clearRead": "Excluir alertas de leitura",
"cleared_one": "Deleted {{count}} alert", "cleared_one": "Alerta excluído {{count}}",
"cleared_other": "Deleted {{count}} alerts", "cleared_other": "Alertas excluídos {{count}}",
"filterAll": "All", "filterAll": "Todos",
"filterUnread": "Unread", "filterUnread": "Não lido",
"anySeverity": "Any severity", "anySeverity": "Qualquer gravidade",
"anySource": "Any source", "anySource": "Qualquer fonte",
"openAll": "Open in a tab", "openAll": "Abrir em uma aba",
"empty": "No alerts yet.", "empty": "Ainda não há alertas.",
"emptyUnread": "You are all caught up.", "emptyUnread": "Vocês estão todos a par da situação.",
"loadMore": "Load more" "loadMore": "Carregar mais"
}, },
"channels": { "channels": {
"intro": "Channels are where alerts can go outside Termix. Delivery rules pick which alerts use them.", "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": "Add channel", "add": "Adicionar canal",
"edit": "Edit channel", "edit": "Editar canal",
"test": "Send a test", "test": "Enviar um teste",
"testSent": "Test alert sent", "testSent": "Alerta de teste enviado",
"testFailed": "Test failed: {{error}}", "testFailed": "Teste falhou: {{error}}",
"deleteConfirm": "Delete the channel \"{{name}}\"?", "deleteConfirm": "Excluir o canal \"{{name}}\"?",
"deleted": "Channel deleted", "deleted": "Canal excluído",
"empty": "No channels yet.", "empty": "Ainda não há canais.",
"enabled": "Enabled", "enabled": "Habilitado",
"needsSave": "This channel needs to be opened and saved again before it can send.", "needsSave": "Este canal precisa ser aberto e salvo novamente antes de poder enviar mensagens.",
"name": "Name", "name": "Nome",
"nameRequired": "Name is required", "nameRequired": "O nome é obrigatório.",
"type": "Tipo", "type": "Tipo",
"types": { "types": {
"webhook": "Webhook", "webhook": "Webhook",
"ntfy": "ntfy", "ntfy": "ntfy",
"discord": "Discord", "discord": "Discórdia",
"email": "Email" "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", "webhookUrl": "URL",
"webhookHint": "Gets a JSON body for every alert.", "webhookHint": "Obtém um corpo JSON para cada alerta.",
"method": "Method", "method": "Método",
"headers": "Headers", "headers": "Cabeçalhos",
"headersHint": "One per line, like Name: value.", "headersHint": "Um por linha, como Nome: valor.",
"ntfyServer": "URL do Servidor", "ntfyServer": "URL do Servidor",
"ntfyTopic": "Topic", "ntfyTopic": "Tópico",
"ntfyToken": "Access token (optional)", "ntfyToken": "Token de acesso (opcional)",
"discordUrl": "Discord webhook URL", "discordUrl": "URL do webhook do Discord",
"discordHint": "From the channel's settings in Discord, under Integrations.", "discordHint": "Nas configurações do canal no Discord, em Integrações.",
"discordUsername": "Display name (optional)", "discordUsername": "Nome de exibição (opcional)",
"discordAvatar": "Avatar URL (optional)", "discordAvatar": "URL do avatar (opcional)",
"emailTo": "Send to", "emailTo": "Enviar para",
"emailHint": "Separate more than one address with commas.", "emailHint": "Separe mais de um endereço com vírgulas.",
"privateNetwork": "Allow a private network address", "privateNetwork": "Permitir um endereço de rede privada",
"privateNetworkHint": "Only works for hosts an admin allows in the private endpoint list." "privateNetworkHint": "Funciona apenas para hosts que um administrador permite na lista de endpoints privados."
}, },
"rules": { "rules": {
"intro": "A delivery rule sends matching alerts to your channels. Alerts always stay in the inbox too.", "intro": "Uma regra de entrega envia alertas correspondentes aos seus canais. Os alertas também permanecem sempre na caixa de entrada.",
"add": "Add rule", "add": "Adicionar regra",
"edit": "Edit rule", "edit": "Editar regra",
"empty": "No rules yet, so alerts only show up in the inbox.", "empty": "Ainda não existem regras, portanto os alertas só aparecem na caixa de entrada.",
"needChannel": "Add a channel first.", "needChannel": "Primeiro, adicione um canal.",
"enabled": "Enabled", "enabled": "Habilitado",
"name": "Name", "name": "Nome",
"nameRequired": "Name is required", "nameRequired": "O nome é obrigatório.",
"match": "Alerts to send", "match": "Alertas a enviar",
"matchHint": "* for everything, automations.* for everything from automations, or one exact kind.", "matchHint": "* para tudo, automações.* para tudo, desde automações, até um tipo específico.",
"minSeverity": "At least", "minSeverity": "Pelo menos",
"channels": "Send to", "channels": "Enviar para",
"channelRequired": "Pick at least one channel", "channelRequired": "Escolha pelo menos um canal.",
"deleteConfirm": "Delete the rule \"{{name}}\"?", "deleteConfirm": "Apagar a regra \"{{name}}\"?",
"everything": "Everything", "everything": "Tudo",
"summary": "{{match}}, {{severity}} or higher, to {{channels}}" "summary": "{{match}}, {{severity}} ou superior, para {{channels}}"
}, },
"actions": { "actions": {
"cancel": "Cancelar", "cancel": "Cancelar",
@@ -162,11 +162,14 @@
"delete": "Apagar" "delete": "Apagar"
}, },
"widget": { "widget": {
"name": "Alert Feed", "name": "Feed de alertas",
"description": "Your latest alerts, with a quick way to mark them read", "description": "Seus alertas mais recentes, com uma maneira rápida de marcá-los como lidos.",
"maxItems": "Max items", "maxItems": "Itens máximos",
"showRead": "Show read alerts", "showRead": "Mostrar alertas de leitura",
"allClear": "All clear", "allClear": "Tudo certo",
"loading": "Carregando..." "loading": "Carregando..."
},
"plugin": {
"name": "Alerts"
} }
} }
+87 -84
View File
@@ -4,13 +4,13 @@
}, },
"permissions": { "permissions": {
"use": { "use": {
"title": "Use alerts", "title": "Usar alertas",
"description": "Get alerts in the inbox and send them to your own channels." "description": "Receba alertas na caixa de entrada e envie-os para os seus próprios canais."
} }
}, },
"onboarding": { "onboarding": {
"feature": "Alertas", "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": { "settings": {
"group": { "group": {
@@ -19,97 +19,97 @@
}, },
"admin": { "admin": {
"announcements": { "announcements": {
"label": "Termix announcements", "label": "Anúncios da Termix",
"description": "Show news from the Termix team, like security notices and releases, in everyone's inbox." "description": "Exibir notícias da equipa Termix, como avisos de segurança e comunicados, na caixa de entrada de todos."
}, },
"retentionDays": { "retentionDays": {
"label": "Keep alerts for (days)", "label": "Manter alertas durante (dias)",
"description": "Older alerts are removed from every inbox." "description": "Os alertas antigos são removidos de todas as caixas de entrada."
}, },
"smtpHost": { "smtpHost": {
"label": "SMTP server", "label": "Servidor SMTP",
"description": "Needed for email channels. Leave empty to turn email off.", "description": "Necessário para canais de e-mail. Deixe em branco para desativar o e-mail.",
"placeholder": "smtp.example.com" "placeholder": "smtp.exemplo.com"
}, },
"smtpPort": { "smtpPort": {
"label": "SMTP port", "label": "porta SMTP",
"description": "Usually 587 with STARTTLS or 465 with TLS." "description": "Normalmente, utiliza-se a porta 587 com STARTTLS ou a porta 465 com TLS."
}, },
"smtpSecure": { "smtpSecure": {
"label": "Use TLS from the start", "label": "Utilize TLS desde o início.",
"description": "Turn on for port 465. Leave off for 587, which upgrades to TLS on its own." "description": "Ative para a porta 465. Deixe desativado para a porta 587, que atualiza para TLS automaticamente."
}, },
"smtpUser": { "smtpUser": {
"label": "SMTP username", "label": "nome de utilizador SMTP",
"description": "Leave empty if the server does not need a login." "description": "Deixe em branco se o servidor não necessitar de login."
}, },
"smtpPassword": { "smtpPassword": {
"label": "SMTP password", "label": "Palavra-passe SMTP",
"description": "Stored encrypted." "description": "Armazenado encriptado."
}, },
"smtpFrom": { "smtpFrom": {
"label": "From address", "label": "Do endereço",
"description": "The sender alerts come from.", "description": "Os alertas do remetente provêm de:",
"placeholder": "Termix <alerts@example.com>" "placeholder": "Termix <alerts@example.com>"
} }
}, },
"user": { "user": {
"popups": { "popups": {
"label": "Alert popups", "label": "Janelas de alerta",
"description": "Which new alerts pop up while you use Termix. They always land in the inbox.", "description": "Que novos alertas aparecem enquanto utiliza o Termix? Chegam sempre na caixa de entrada.",
"all": "All alerts", "all": "Todos os alertas",
"warning": "Warnings and critical", "warning": "Avisos e alertas",
"critical": "Critical only", "critical": "Somente crítico",
"off": "Nenhuma" "off": "Nenhuma"
} }
} }
}, },
"sections": { "sections": {
"inbox": "Inbox", "inbox": "Caixa de entrada",
"channels": "Canais", "channels": "Canais",
"rules": "Delivery rules" "rules": "Regras de entrega"
}, },
"severity": { "severity": {
"info": "Info", "info": "Info",
"success": "Sucesso", "success": "Sucesso",
"warning": "Aviso", "warning": "Aviso",
"critical": "Critical" "critical": "Crítico"
}, },
"inbox": { "inbox": {
"sourceTermix": "Termix", "sourceTermix": "Termix",
"openLink": "Abrir", "openLink": "Abrir",
"view": "Ver", "view": "Ver",
"unread": "Unread", "unread": "Não lido",
"deliveryFailed_one": "{{count}} channel failed", "deliveryFailed_one": "{{count}} canal falhou",
"deliveryFailed_other": "{{count}} channels failed", "deliveryFailed_other": "{{count}} canais falharam",
"markRead": "Mark as read", "markRead": "Marcar como lido",
"markUnread": "Mark as unread", "markUnread": "Marcar como não lida",
"markAllRead": "Mark all as read", "markAllRead": "Marcar tudo como lido",
"delete": "Eliminar", "delete": "Eliminar",
"clearRead": "Delete read alerts", "clearRead": "Apagar alertas de leitura",
"cleared_one": "Deleted {{count}} alert", "cleared_one": "Alerta eliminado {{count}}",
"cleared_other": "Deleted {{count}} alerts", "cleared_other": "Alertas excluídos {{count}}",
"filterAll": "Todas", "filterAll": "Todas",
"filterUnread": "Unread", "filterUnread": "Não lido",
"anySeverity": "Any severity", "anySeverity": "Qualquer gravidade",
"anySource": "Any source", "anySource": "Qualquer fonte",
"openAll": "Open in a tab", "openAll": "Abrir numa aba",
"empty": "No alerts yet.", "empty": "Ainda não há alertas.",
"emptyUnread": "You are all caught up.", "emptyUnread": "Estão todos a par da situação.",
"loadMore": "Load more" "loadMore": "Carregar mais"
}, },
"channels": { "channels": {
"intro": "Channels are where alerts can go outside Termix. Delivery rules pick which alerts use them.", "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": "Add channel", "add": "Adicionar canal",
"edit": "Edit channel", "edit": "Editar canal",
"test": "Send a test", "test": "Enviar um teste",
"testSent": "Test alert sent", "testSent": "Alerta de teste enviado",
"testFailed": "Test failed: {{error}}", "testFailed": "Teste falhou: {{error}}",
"deleteConfirm": "Delete the channel \"{{name}}\"?", "deleteConfirm": "Apagar o canal \"{{name}}\"?",
"deleted": "Channel deleted", "deleted": "Canal excluído",
"empty": "No channels yet.", "empty": "Ainda não há canais.",
"enabled": "Ativado", "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", "name": "Nome",
"nameRequired": "O nome é obrigatório", "nameRequired": "O nome é obrigatório",
"type": "Tipo", "type": "Tipo",
@@ -119,41 +119,41 @@
"discord": "Discord", "discord": "Discord",
"email": "E-mail" "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", "webhookUrl": "URL",
"webhookHint": "Gets a JSON body for every alert.", "webhookHint": "Obtém um corpo JSON para cada alerta.",
"method": "Method", "method": "Método",
"headers": "Headers", "headers": "Cabeçalhos",
"headersHint": "One per line, like Name: value.", "headersHint": "Um por linha, como por exemplo Nome: valor.",
"ntfyServer": "URL do servidor", "ntfyServer": "URL do servidor",
"ntfyTopic": "Tópico", "ntfyTopic": "Tópico",
"ntfyToken": "Access token (optional)", "ntfyToken": "Token de acesso (opcional)",
"discordUrl": "Discord webhook URL", "discordUrl": "URL do webhook do Discord",
"discordHint": "From the channel's settings in Discord, under Integrations.", "discordHint": "Nas definições do canal no Discord, em Integrações.",
"discordUsername": "Display name (optional)", "discordUsername": "Nome de visualização (opcional)",
"discordAvatar": "Avatar URL (optional)", "discordAvatar": "URL do avatar (opcional)",
"emailTo": "Send to", "emailTo": "Enviar para",
"emailHint": "Separate more than one address with commas.", "emailHint": "Separe mais do que um endereço com vírgulas.",
"privateNetwork": "Allow a private network address", "privateNetwork": "Permitir um endereço de rede privada",
"privateNetworkHint": "Only works for hosts an admin allows in the private endpoint list." "privateNetworkHint": "Funciona apenas para hosts que um administrador permite na lista de endpoints privados."
}, },
"rules": { "rules": {
"intro": "A delivery rule sends matching alerts to your channels. Alerts always stay in the inbox too.", "intro": "Uma regra de entrega envia alertas correspondentes aos seus canais. Os alertas também permanecem sempre na caixa de entrada.",
"add": "Add rule", "add": "Adicionar regra",
"edit": "Edit rule", "edit": "Editar regra",
"empty": "No rules yet, so alerts only show up in the inbox.", "empty": "Ainda não existem regras, pelo que os alertas apenas aparecem na caixa de entrada.",
"needChannel": "Add a channel first.", "needChannel": "Primeiro, adicione um canal.",
"enabled": "Ativado", "enabled": "Ativado",
"name": "Nome", "name": "Nome",
"nameRequired": "O nome é obrigatório", "nameRequired": "O nome é obrigatório",
"match": "Alerts to send", "match": "Alertas a enviar",
"matchHint": "* for everything, automations.* for everything from automations, or one exact kind.", "matchHint": "* para tudo, automações.* para tudo, desde automações, a um tipo específico.",
"minSeverity": "At least", "minSeverity": "Pelo menos",
"channels": "Send to", "channels": "Enviar para",
"channelRequired": "Pick at least one channel", "channelRequired": "Escolha pelo menos um canal.",
"deleteConfirm": "Delete the rule \"{{name}}\"?", "deleteConfirm": "Apagar a regra \"{{name}}\"?",
"everything": "Everything", "everything": "Tudo",
"summary": "{{match}}, {{severity}} or higher, to {{channels}}" "summary": "{{match}}, {{severity}} ou superior, para {{channels}}"
}, },
"actions": { "actions": {
"cancel": "Cancelar", "cancel": "Cancelar",
@@ -163,10 +163,13 @@
}, },
"widget": { "widget": {
"name": "Feed de alertas", "name": "Feed de alertas",
"description": "Your latest alerts, with a quick way to mark them read", "description": "Os seus alertas mais recentes, com uma forma rápida de os marcar como lidos.",
"maxItems": "Max items", "maxItems": "Itens máximos",
"showRead": "Show read alerts", "showRead": "Mostrar alertas de leitura",
"allClear": "Tudo em ordem", "allClear": "Tudo em ordem",
"loading": "A carregar..." "loading": "A carregar..."
},
"plugin": {
"name": "Alerts"
} }
} }
@@ -168,5 +168,8 @@
"showRead": "Afișează alertele de citire", "showRead": "Afișează alertele de citire",
"allClear": "Totul este clar", "allClear": "Totul este clar",
"loading": "Încărcare..." "loading": "Încărcare..."
},
"plugin": {
"name": "Alerts"
} }
} }
+88 -85
View File
@@ -4,13 +4,13 @@
}, },
"permissions": { "permissions": {
"use": { "use": {
"title": "Use alerts", "title": "Используйте оповещения",
"description": "Get alerts in the inbox and send them to your own channels." "description": "Получайте уведомления на свою электронную почту и отправляйте их в свои каналы."
} }
}, },
"onboarding": { "onboarding": {
"feature": "Оповещения", "feature": "Оповещения",
"featureDesc": "Every alert in one inbox, sent on to Discord, ntfy, email or a webhook if you want." "featureDesc": "Все оповещения в одном почтовом ящике, которые можно отправить в Discord, ntfy, на электронную почту или через веб-хук, если хотите."
}, },
"settings": { "settings": {
"group": { "group": {
@@ -19,141 +19,141 @@
}, },
"admin": { "admin": {
"announcements": { "announcements": {
"label": "Termix announcements", "label": "Объявления компании Termix",
"description": "Show news from the Termix team, like security notices and releases, in everyone's inbox." "description": "Показывайте новости от команды Termix, такие как уведомления о безопасности и обновления, в почтовые ящики всех пользователей."
}, },
"retentionDays": { "retentionDays": {
"label": "Keep alerts for (days)", "label": "Сохранять оповещения в течение (дней)",
"description": "Older alerts are removed from every inbox." "description": "Более старые уведомления удаляются из всех почтовых ящиков."
}, },
"smtpHost": { "smtpHost": {
"label": "SMTP server", "label": "SMTP-сервер",
"description": "Needed for email channels. Leave empty to turn email off.", "description": "Необходимо для каналов электронной почты. Оставьте поле пустым, чтобы отключить отправку писем.",
"placeholder": "smtp.example.com" "placeholder": "smtp.example.com"
}, },
"smtpPort": { "smtpPort": {
"label": "SMTP port", "label": "SMTP-порт",
"description": "Usually 587 with STARTTLS or 465 with TLS." "description": "Обычно используется код 587 с STARTTLS или 465 с TLS."
}, },
"smtpSecure": { "smtpSecure": {
"label": "Use TLS from the start", "label": "Используйте TLS с самого начала.",
"description": "Turn on for port 465. Leave off for 587, which upgrades to TLS on its own." "description": "Включите порт 465. Оставьте выключенным порт 587, так как он автоматически переходит на TLS."
}, },
"smtpUser": { "smtpUser": {
"label": "SMTP username", "label": "Имя пользователя SMTP",
"description": "Leave empty if the server does not need a login." "description": "Оставьте поле пустым, если серверу не требуется авторизация."
}, },
"smtpPassword": { "smtpPassword": {
"label": "SMTP password", "label": "SMTP-пароль",
"description": "Stored encrypted." "description": "Сохранено в зашифрованном виде."
}, },
"smtpFrom": { "smtpFrom": {
"label": "From address", "label": "От адреса",
"description": "The sender alerts come from.", "description": "Уведомления поступают от отправителя.",
"placeholder": "Termix <alerts@example.com>" "placeholder": "Termix <alerts@example.com>"
} }
}, },
"user": { "user": {
"popups": { "popups": {
"label": "Alert popups", "label": "Всплывающие уведомления",
"description": "Which new alerts pop up while you use Termix. They always land in the inbox.", "description": "Какие новые уведомления появляются во время использования Termix? Они всегда попадают во входящие сообщения.",
"all": "All alerts", "all": "Все оповещения",
"warning": "Warnings and critical", "warning": "Предупреждения и критические",
"critical": "Critical only", "critical": "Только критически важные",
"off": "Ни одного" "off": "Ни одного"
} }
} }
}, },
"sections": { "sections": {
"inbox": "Inbox", "inbox": "Входящие",
"channels": "Каналы", "channels": "Каналы",
"rules": "Delivery rules" "rules": "Правила доставки"
}, },
"severity": { "severity": {
"info": "Информация", "info": "Информация",
"success": "Успех", "success": "Успех",
"warning": "Предупреждение", "warning": "Предупреждение",
"critical": "Critical" "critical": "Критический"
}, },
"inbox": { "inbox": {
"sourceTermix": "Termix", "sourceTermix": "Termix",
"openLink": "Открыть", "openLink": "Открыть",
"view": "Просмотр", "view": "Просмотр",
"unread": "Unread", "unread": "Непрочитано",
"deliveryFailed_one": "{{count}} channel failed", "deliveryFailed_one": "{{count}} канал не работает",
"deliveryFailed_other": "{{count}} channels failed", "deliveryFailed_other": "{{count}} каналы не работают",
"markRead": "Mark as read", "markRead": "Отметить как прочитанное",
"markUnread": "Mark as unread", "markUnread": "Отметить как непрочитанное",
"markAllRead": "Mark all as read", "markAllRead": "Отметьте все как прочитанное",
"delete": "Удалить", "delete": "Удалить",
"clearRead": "Delete read alerts", "clearRead": "Удалить оповещения о прочтении",
"cleared_one": "Deleted {{count}} alert", "cleared_one": "Удалено {{count}} оповещение",
"cleared_other": "Deleted {{count}} alerts", "cleared_other": "Удалены {{count}} оповещения",
"filterAll": "Все", "filterAll": "Все",
"filterUnread": "Unread", "filterUnread": "Непрочитано",
"anySeverity": "Any severity", "anySeverity": "Любая степень тяжести",
"anySource": "Any source", "anySource": "Любой источник",
"openAll": "Open in a tab", "openAll": "Открыть во вкладке",
"empty": "No alerts yet.", "empty": "Пока нет оповещений.",
"emptyUnread": "You are all caught up.", "emptyUnread": "Вы всё успели посмотреть.",
"loadMore": "Load more" "loadMore": "Загрузить ещё"
}, },
"channels": { "channels": {
"intro": "Channels are where alerts can go outside Termix. Delivery rules pick which alerts use them.", "intro": "Каналы — это место, куда могут отправляться оповещения за пределы Termix. Правила доставки определяют, какие оповещения будут их использовать.",
"add": "Add channel", "add": "Добавить канал",
"edit": "Edit channel", "edit": "Редактировать канал",
"test": "Send a test", "test": "Отправить тест",
"testSent": "Test alert sent", "testSent": "Отправлено тестовое оповещение",
"testFailed": "Test failed: {{error}}", "testFailed": "Тест не пройден: {{error}}",
"deleteConfirm": "Delete the channel \"{{name}}\"?", "deleteConfirm": "Удалить канал \"{{name}}\"?",
"deleted": "Channel deleted", "deleted": "Канал удален",
"empty": "No channels yet.", "empty": "Каналов пока нет.",
"enabled": "Включено", "enabled": "Включено",
"needsSave": "This channel needs to be opened and saved again before it can send.", "needsSave": "Перед отправкой сообщения этот канал необходимо снова открыть и сохранить.",
"name": "Название", "name": "Название",
"nameRequired": "Имя обязательно", "nameRequired": "Имя обязательно",
"type": "Тип", "type": "Тип",
"types": { "types": {
"webhook": "Webhook", "webhook": "Вебхук",
"ntfy": "ntfy", "ntfy": "нтфи",
"discord": "Discord", "discord": "Discord",
"email": "Email" "email": "Email"
}, },
"emailUnavailable": "Email needs an SMTP server, which an admin sets up in the Alerts settings.", "emailUnavailable": "Для работы электронной почты необходим SMTP-сервер, который администратор настраивает в параметрах оповещений.",
"webhookUrl": "URL", "webhookUrl": "URL",
"webhookHint": "Gets a JSON body for every alert.", "webhookHint": "Получает JSON-тело для каждого оповещения.",
"method": "Method", "method": "Метод",
"headers": "Headers", "headers": "Заголовки",
"headersHint": "One per line, like Name: value.", "headersHint": "Один символ на строку, например, Имя: значение.",
"ntfyServer": "URL сервера", "ntfyServer": "URL сервера",
"ntfyTopic": "Тема", "ntfyTopic": "Тема",
"ntfyToken": "Access token (optional)", "ntfyToken": "Токен доступа (необязательно)",
"discordUrl": "Discord webhook URL", "discordUrl": "URL веб-перехватчика Discord",
"discordHint": "From the channel's settings in Discord, under Integrations.", "discordHint": "В настройках канала в Discord, в разделе «Интеграции».",
"discordUsername": "Display name (optional)", "discordUsername": "Отображаемое имя (необязательно)",
"discordAvatar": "Avatar URL (optional)", "discordAvatar": "URL-адрес аватара (необязательно)",
"emailTo": "Send to", "emailTo": "Отправить",
"emailHint": "Separate more than one address with commas.", "emailHint": "Разделяя несколько адресов запятыми.",
"privateNetwork": "Allow a private network address", "privateNetwork": "Разрешить использование частного сетевого адреса",
"privateNetworkHint": "Only works for hosts an admin allows in the private endpoint list." "privateNetworkHint": "Работает только для хостов, разрешенных администратором в списке частных конечных точек."
}, },
"rules": { "rules": {
"intro": "A delivery rule sends matching alerts to your channels. Alerts always stay in the inbox too.", "intro": "Правило доставки отправляет соответствующие оповещения в ваши каналы. Оповещения также всегда остаются во входящих сообщениях.",
"add": "Add rule", "add": "Добавить правило",
"edit": "Edit rule", "edit": "Редактировать правило",
"empty": "No rules yet, so alerts only show up in the inbox.", "empty": "Правил пока нет, поэтому уведомления отображаются только во входящих сообщениях.",
"needChannel": "Add a channel first.", "needChannel": "Сначала добавьте канал.",
"enabled": "Включено", "enabled": "Включено",
"name": "Название", "name": "Название",
"nameRequired": "Имя обязательно", "nameRequired": "Имя обязательно",
"match": "Alerts to send", "match": "Уведомления для отправки",
"matchHint": "* for everything, automations.* for everything from automations, or one exact kind.", "matchHint": "* для всего, что связано с автоматизацией.* для всего, что связано с автоматизацией, или для одного конкретного типа.",
"minSeverity": "At least", "minSeverity": "По меньшей мере",
"channels": "Send to", "channels": "Отправить",
"channelRequired": "Pick at least one channel", "channelRequired": "Выберите хотя бы один канал",
"deleteConfirm": "Delete the rule \"{{name}}\"?", "deleteConfirm": "Удалить правило \"{{name}}\"?",
"everything": "Everything", "everything": "Все",
"summary": "{{match}}, {{severity}} or higher, to {{channels}}" "summary": "{{match}}, {{severity}} или выше, до {{channels}}"
}, },
"actions": { "actions": {
"cancel": "Отмена", "cancel": "Отмена",
@@ -163,10 +163,13 @@
}, },
"widget": { "widget": {
"name": "Лента оповещений", "name": "Лента оповещений",
"description": "Your latest alerts, with a quick way to mark them read", "description": "Ваши последние уведомления с возможностью быстрой пометки их как прочитанных.",
"maxItems": "Max items", "maxItems": "Максимальное количество предметов",
"showRead": "Show read alerts", "showRead": "Показать уведомления о прочтении",
"allClear": "Всё в порядке", "allClear": "Всё в порядке",
"loading": "Загрузка..." "loading": "Загрузка..."
},
"plugin": {
"name": "Alerts"
} }
} }
+121 -118
View File
@@ -1,172 +1,175 @@
{ {
"nav": { "nav": {
"alerts": "Alerts" "alerts": "Упозорења"
}, },
"permissions": { "permissions": {
"use": { "use": {
"title": "Use alerts", "title": "Користите упозорења",
"description": "Get alerts in the inbox and send them to your own channels." "description": "Добијајте обавештења у пријемно сандуче и шаљите их на своје канале."
} }
}, },
"onboarding": { "onboarding": {
"feature": "Alerts", "feature": "Упозорења",
"featureDesc": "Every alert in one inbox, sent on to Discord, ntfy, email or a webhook if you want." "featureDesc": "Свако упозорење у једном пријемном сандучету, послато на Discord, ntfy, имејл или вебхук ако желите."
}, },
"settings": { "settings": {
"group": { "group": {
"general": "General", "general": "Опште",
"email": "Email" "email": "Е-пошта"
}, },
"admin": { "admin": {
"announcements": { "announcements": {
"label": "Termix announcements", "label": "Termix саопштења",
"description": "Show news from the Termix team, like security notices and releases, in everyone's inbox." "description": "Прикажи вести од Termix тима, као што су безбедносна обавештења и издања, у пријемном сандучету свих корисника."
}, },
"retentionDays": { "retentionDays": {
"label": "Keep alerts for (days)", "label": "Задржавај упозорења (дана)",
"description": "Older alerts are removed from every inbox." "description": "Старија упозорења се уклањају из сваког пријемног сандучета."
}, },
"smtpHost": { "smtpHost": {
"label": "SMTP server", "label": "SMTP сервер",
"description": "Needed for email channels. Leave empty to turn email off.", "description": "Потребно за имејл канале. Оставите празно да бисте искључили имејл.",
"placeholder": "smtp.example.com" "placeholder": "smtp.example.com"
}, },
"smtpPort": { "smtpPort": {
"label": "SMTP port", "label": "СМТП порт",
"description": "Usually 587 with STARTTLS or 465 with TLS." "description": "Обично 587 са STARTTLS-ом или 465 са TLS-ом."
}, },
"smtpSecure": { "smtpSecure": {
"label": "Use TLS from the start", "label": "Користите TLS од почетка",
"description": "Turn on for port 465. Leave off for 587, which upgrades to TLS on its own." "description": "Укључите за порт 465. Оставите искључено за порт 587, који се сам надограђује на TLS."
}, },
"smtpUser": { "smtpUser": {
"label": "SMTP username", "label": "SMTP корисничко име",
"description": "Leave empty if the server does not need a login." "description": "Оставите празно ако сервер не захтева пријаву."
}, },
"smtpPassword": { "smtpPassword": {
"label": "SMTP password", "label": "СМТП лозинка",
"description": "Stored encrypted." "description": "Сачувано шифровано."
}, },
"smtpFrom": { "smtpFrom": {
"label": "From address", "label": "Адреса одакле",
"description": "The sender alerts come from.", "description": "Упозорења пошиљаоца долазе од.",
"placeholder": "Termix <alerts@example.com>" "placeholder": "Термикс <alerts@example.com>"
} }
}, },
"user": { "user": {
"popups": { "popups": {
"label": "Alert popups", "label": "Искачући прозори са упозорењима",
"description": "Which new alerts pop up while you use Termix. They always land in the inbox.", "description": "Која нова упозорења се појављују док користите Termix. Она увек стижу у пријемно сандуче.",
"all": "All alerts", "all": "Сва упозорења",
"warning": "Warnings and critical", "warning": "Упозорења и критичне информације",
"critical": "Critical only", "critical": "Само критично",
"off": "None" "off": "Ниједан"
} }
} }
}, },
"sections": { "sections": {
"inbox": "Inbox", "inbox": "Пријемно сандуче",
"channels": "Channels", "channels": "Канали",
"rules": "Delivery rules" "rules": "Правила испоруке"
}, },
"severity": { "severity": {
"info": "Info", "info": "Информације",
"success": "Success", "success": "Успех",
"warning": "Warning", "warning": "Упозорење",
"critical": "Critical" "critical": "Критично"
}, },
"inbox": { "inbox": {
"sourceTermix": "Termix", "sourceTermix": "Термикс",
"openLink": "Open", "openLink": "Отворено",
"view": "View", "view": "Поглед",
"unread": "Unread", "unread": "Непрочитано",
"deliveryFailed_one": "{{count}} channel failed", "deliveryFailed_one": "{{count}} канал није успео",
"deliveryFailed_other": "{{count}} channels failed", "deliveryFailed_other": "{{count}} канала није успело",
"markRead": "Mark as read", "markRead": "Означи као прочитано",
"markUnread": "Mark as unread", "markUnread": "Означи као непрочитано",
"markAllRead": "Mark all as read", "markAllRead": "Означи све као прочитано",
"delete": "Delete", "delete": "Обриши",
"clearRead": "Delete read alerts", "clearRead": "Обриши упозорења о читању",
"cleared_one": "Deleted {{count}} alert", "cleared_one": "Обрисано упозорење {{count}}",
"cleared_other": "Deleted {{count}} alerts", "cleared_other": "Обрисана упозорења {{count}}",
"filterAll": "All", "filterAll": "Сви",
"filterUnread": "Unread", "filterUnread": "Непрочитано",
"anySeverity": "Any severity", "anySeverity": "Било која тежина",
"anySource": "Any source", "anySource": "Било који извор",
"openAll": "Open in a tab", "openAll": "Отвори у картици",
"empty": "No alerts yet.", "empty": "Још нема упозорења.",
"emptyUnread": "You are all caught up.", "emptyUnread": "Све сте у току.",
"loadMore": "Load more" "loadMore": "Учитај још"
}, },
"channels": { "channels": {
"intro": "Channels are where alerts can go outside Termix. Delivery rules pick which alerts use them.", "intro": "Канали су места где упозорења могу да се шаљу изван Termix-а. Правила испоруке бирају која упозорења их користе.",
"add": "Add channel", "add": "Додај канал",
"edit": "Edit channel", "edit": "Измени канал",
"test": "Send a test", "test": "Пошаљи тест",
"testSent": "Test alert sent", "testSent": "Послато је тестно упозорење",
"testFailed": "Test failed: {{error}}", "testFailed": "Тест није успео: {{error}}",
"deleteConfirm": "Delete the channel \"{{name}}\"?", "deleteConfirm": "Обрисати канал „{{name}}“?",
"deleted": "Channel deleted", "deleted": "Канал је обрисан",
"empty": "No channels yet.", "empty": "Још нема канала.",
"enabled": "Enabled", "enabled": "Омогућено",
"needsSave": "This channel needs to be opened and saved again before it can send.", "needsSave": "Овај канал треба поново отворити и сачувати пре него што се може послати.",
"name": "Name", "name": "Име",
"nameRequired": "Name is required", "nameRequired": "Име је обавезно",
"type": "Type", "type": "Тип",
"types": { "types": {
"webhook": "Webhook", "webhook": "Вебхук",
"ntfy": "ntfy", "ntfy": "нтфи",
"discord": "Discord", "discord": "Неслагање",
"email": "Email" "email": "Е-пошта"
}, },
"emailUnavailable": "Email needs an SMTP server, which an admin sets up in the Alerts settings.", "emailUnavailable": "Е-пошти је потребан SMTP сервер, који администратор подешава у подешавањима упозорења.",
"webhookUrl": "URL", "webhookUrl": "URL",
"webhookHint": "Gets a JSON body for every alert.", "webhookHint": "Добија JSON тело за свако упозорење.",
"method": "Method", "method": "Метод",
"headers": "Headers", "headers": "Заглавља",
"headersHint": "One per line, like Name: value.", "headersHint": "Један по реду, као што је Име: вредност.",
"ntfyServer": "Server URL", "ntfyServer": "URL сервера",
"ntfyTopic": "Topic", "ntfyTopic": "Тема",
"ntfyToken": "Access token (optional)", "ntfyToken": "Приступни токен (опционо)",
"discordUrl": "Discord webhook URL", "discordUrl": "URL вебхука на Дискорду",
"discordHint": "From the channel's settings in Discord, under Integrations.", "discordHint": "Из подешавања канала на Дискорду, под Интеграције.",
"discordUsername": "Display name (optional)", "discordUsername": "Приказано име (опционо)",
"discordAvatar": "Avatar URL (optional)", "discordAvatar": "URL адреса аватара (опционо)",
"emailTo": "Send to", "emailTo": "Пошаљи",
"emailHint": "Separate more than one address with commas.", "emailHint": "Одвојите више од једне адресе зарезима.",
"privateNetwork": "Allow a private network address", "privateNetwork": "Дозволи адресу приватне мреже",
"privateNetworkHint": "Only works for hosts an admin allows in the private endpoint list." "privateNetworkHint": "Ради само за хостове које администратор дозвољава на листи приватних крајњих тачака."
}, },
"rules": { "rules": {
"intro": "A delivery rule sends matching alerts to your channels. Alerts always stay in the inbox too.", "intro": "Правило испоруке шаље одговарајућа упозорења вашим каналима. Упозорења такође увек остају у пријемном сандучету.",
"add": "Add rule", "add": "Додај правило",
"edit": "Edit rule", "edit": "Измени правило",
"empty": "No rules yet, so alerts only show up in the inbox.", "empty": "Још нема правила, тако да се упозорења приказују само у пријемном сандучету.",
"needChannel": "Add a channel first.", "needChannel": "Прво додајте канал.",
"enabled": "Enabled", "enabled": "Омогућено",
"name": "Name", "name": "Име",
"nameRequired": "Name is required", "nameRequired": "Име је обавезно",
"match": "Alerts to send", "match": "Обавештења за слање",
"matchHint": "* for everything, automations.* for everything from automations, or one exact kind.", "matchHint": "* за све, аутоматизације.* за све од аутоматизација, или само једну врсту.",
"minSeverity": "At least", "minSeverity": "Барем",
"channels": "Send to", "channels": "Пошаљи",
"channelRequired": "Pick at least one channel", "channelRequired": "Изаберите барем један канал",
"deleteConfirm": "Delete the rule \"{{name}}\"?", "deleteConfirm": "Обрисати правило „{{name}}“?",
"everything": "Everything", "everything": "Све",
"summary": "{{match}}, {{severity}} or higher, to {{channels}}" "summary": "{{match}}, {{severity}} или више, до {{channels}}"
}, },
"actions": { "actions": {
"cancel": "Cancel", "cancel": "Откажи",
"save": "Save", "save": "Сачувај",
"saving": "Saving...", "saving": "Чување...",
"delete": "Delete" "delete": "Обриши"
}, },
"widget": { "widget": {
"name": "Alert Feed", "name": "Фид обавештења",
"description": "Your latest alerts, with a quick way to mark them read", "description": "Ваша најновија обавештења, са брзим начином да их означите као прочитане",
"maxItems": "Max items", "maxItems": "Максималан број ставки",
"showRead": "Show read alerts", "showRead": "Прикажи обавештења о читању",
"allClear": "All clear", "allClear": "Све је чисто",
"loading": "Loading..." "loading": "Учитавање..."
},
"plugin": {
"name": "Alerts"
} }
} }
+117 -114
View File
@@ -1,172 +1,175 @@
{ {
"nav": { "nav": {
"alerts": "Alerts" "alerts": "Aviseringar"
}, },
"permissions": { "permissions": {
"use": { "use": {
"title": "Use alerts", "title": "Använd varningar",
"description": "Get alerts in the inbox and send them to your own channels." "description": "Få aviseringar i inkorgen och skicka dem till dina egna kanaler."
} }
}, },
"onboarding": { "onboarding": {
"feature": "Alerts", "feature": "Aviseringar",
"featureDesc": "Every alert in one inbox, sent on to Discord, ntfy, email or a webhook if you want." "featureDesc": "Varje avisering i en inkorg, skickad vidare till Discord, ntfy, e-post eller en webhook om du vill."
}, },
"settings": { "settings": {
"group": { "group": {
"general": "General", "general": "Allmän",
"email": "Email" "email": "E-post"
}, },
"admin": { "admin": {
"announcements": { "announcements": {
"label": "Termix announcements", "label": "Termix-meddelanden",
"description": "Show news from the Termix team, like security notices and releases, in everyone's inbox." "description": "Visa nyheter från Termix-teamet, som säkerhetsmeddelanden och pressmeddelanden, i allas inkorg."
}, },
"retentionDays": { "retentionDays": {
"label": "Keep alerts for (days)", "label": "Behåll varningar i (dagar)",
"description": "Older alerts are removed from every inbox." "description": "Äldre aviseringar tas bort från alla inkorgar."
}, },
"smtpHost": { "smtpHost": {
"label": "SMTP server", "label": "SMTP-server",
"description": "Needed for email channels. Leave empty to turn email off.", "description": "Behövs för e-postkanaler. Lämna tomt för att stänga av e-post.",
"placeholder": "smtp.example.com" "placeholder": "smtp.example.com"
}, },
"smtpPort": { "smtpPort": {
"label": "SMTP port", "label": "SMTP-port",
"description": "Usually 587 with STARTTLS or 465 with TLS." "description": "Vanligtvis 587 med STARTTLS eller 465 med TLS."
}, },
"smtpSecure": { "smtpSecure": {
"label": "Use TLS from the start", "label": "Använd TLS från början",
"description": "Turn on for port 465. Leave off for 587, which upgrades to TLS on its own." "description": "Aktivera port 465. Avaktivera port 587, som uppgraderar till TLS på egen hand."
}, },
"smtpUser": { "smtpUser": {
"label": "SMTP username", "label": "SMTP-användarnamn",
"description": "Leave empty if the server does not need a login." "description": "Lämna tomt om servern inte behöver inloggning."
}, },
"smtpPassword": { "smtpPassword": {
"label": "SMTP password", "label": "SMTP-lösenord",
"description": "Stored encrypted." "description": "Lagras krypterat."
}, },
"smtpFrom": { "smtpFrom": {
"label": "From address", "label": "Från adress",
"description": "The sender alerts come from.", "description": "Avsändaraviseringarna kommer från.",
"placeholder": "Termix <alerts@example.com>" "placeholder": "Termix <alerts@example.com>"
} }
}, },
"user": { "user": {
"popups": { "popups": {
"label": "Alert popups", "label": "Aviseringspopup-fönster",
"description": "Which new alerts pop up while you use Termix. They always land in the inbox.", "description": "Vilka nya aviseringar dyker upp när du använder Termix? De hamnar alltid i inkorgen.",
"all": "All alerts", "all": "Alla varningar",
"warning": "Warnings and critical", "warning": "Varningar och kritiska",
"critical": "Critical only", "critical": "Endast kritisk",
"off": "None" "off": "Ingen"
} }
} }
}, },
"sections": { "sections": {
"inbox": "Inbox", "inbox": "Inkorg",
"channels": "Channels", "channels": "Kanaler",
"rules": "Delivery rules" "rules": "Leveransregler"
}, },
"severity": { "severity": {
"info": "Info", "info": "Info",
"success": "Success", "success": "Framgång",
"warning": "Warning", "warning": "Varning",
"critical": "Critical" "critical": "Kritisk"
}, },
"inbox": { "inbox": {
"sourceTermix": "Termix", "sourceTermix": "Termix",
"openLink": "Open", "openLink": "Öppna",
"view": "View", "view": "Se",
"unread": "Unread", "unread": "Oläst",
"deliveryFailed_one": "{{count}} channel failed", "deliveryFailed_one": "{{count}} kanal misslyckades",
"deliveryFailed_other": "{{count}} channels failed", "deliveryFailed_other": "{{count}} kanaler misslyckades",
"markRead": "Mark as read", "markRead": "Markera som läst",
"markUnread": "Mark as unread", "markUnread": "Markera som oläst",
"markAllRead": "Mark all as read", "markAllRead": "Markera alla som lästa",
"delete": "Delete", "delete": "Radera",
"clearRead": "Delete read alerts", "clearRead": "Ta bort läsaviseringar",
"cleared_one": "Deleted {{count}} alert", "cleared_one": "Borttagen {{count}} -avisering",
"cleared_other": "Deleted {{count}} alerts", "cleared_other": "Borttagna {{count}} varningar",
"filterAll": "All", "filterAll": "Alla",
"filterUnread": "Unread", "filterUnread": "Oläst",
"anySeverity": "Any severity", "anySeverity": "Vilken allvarlighetsgrad som helst",
"anySource": "Any source", "anySource": "Vilken källa som helst",
"openAll": "Open in a tab", "openAll": "Öppna i en flik",
"empty": "No alerts yet.", "empty": "Inga varningar ännu.",
"emptyUnread": "You are all caught up.", "emptyUnread": "Ni är helt uppdaterade.",
"loadMore": "Load more" "loadMore": "Ladda mer"
}, },
"channels": { "channels": {
"intro": "Channels are where alerts can go outside Termix. Delivery rules pick which alerts use them.", "intro": "Kanaler är där aviseringar kan skickas utanför Termix. Leveransregler väljer vilka aviseringar som använder dem.",
"add": "Add channel", "add": "Lägg till kanal",
"edit": "Edit channel", "edit": "Redigera kanal",
"test": "Send a test", "test": "Skicka ett test",
"testSent": "Test alert sent", "testSent": "Testavisering skickad",
"testFailed": "Test failed: {{error}}", "testFailed": "Testet misslyckades: {{error}}",
"deleteConfirm": "Delete the channel \"{{name}}\"?", "deleteConfirm": "Ta bort kanalen \"{{name}}\"?",
"deleted": "Channel deleted", "deleted": "Kanal borttagen",
"empty": "No channels yet.", "empty": "Inga kanaler än.",
"enabled": "Enabled", "enabled": "Aktiverad",
"needsSave": "This channel needs to be opened and saved again before it can send.", "needsSave": "Den här kanalen måste öppnas och sparas igen innan den kan skicka.",
"name": "Name", "name": "Namn",
"nameRequired": "Name is required", "nameRequired": "Namn krävs",
"type": "Type", "type": "Typ",
"types": { "types": {
"webhook": "Webhook", "webhook": "Webbhook",
"ntfy": "ntfy", "ntfy": "ntfy",
"discord": "Discord", "discord": "Disharmoni",
"email": "Email" "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", "webhookUrl": "URL",
"webhookHint": "Gets a JSON body for every alert.", "webhookHint": "Hämtar en JSON-text för varje avisering.",
"method": "Method", "method": "Metod",
"headers": "Headers", "headers": "Rubriker",
"headersHint": "One per line, like Name: value.", "headersHint": "En per rad, som Namn: värde.",
"ntfyServer": "Server URL", "ntfyServer": "Server-URL",
"ntfyTopic": "Topic", "ntfyTopic": "Ämne",
"ntfyToken": "Access token (optional)", "ntfyToken": "Åtkomsttoken (valfritt)",
"discordUrl": "Discord webhook URL", "discordUrl": "Discord webhook-URL",
"discordHint": "From the channel's settings in Discord, under Integrations.", "discordHint": "Från kanalens inställningar i Discord, under Integrationer.",
"discordUsername": "Display name (optional)", "discordUsername": "Visningsnamn (valfritt)",
"discordAvatar": "Avatar URL (optional)", "discordAvatar": "Avatar-URL (valfritt)",
"emailTo": "Send to", "emailTo": "Skicka till",
"emailHint": "Separate more than one address with commas.", "emailHint": "Separera mer än en adress med kommatecken.",
"privateNetwork": "Allow a private network address", "privateNetwork": "Tillåt en privat nätverksadress",
"privateNetworkHint": "Only works for hosts an admin allows in the private endpoint list." "privateNetworkHint": "Fungerar bara för värdar som en administratör tillåter i listan över privata slutpunkter."
}, },
"rules": { "rules": {
"intro": "A delivery rule sends matching alerts to your channels. Alerts always stay in the inbox too.", "intro": "En leveransregel skickar matchande aviseringar till dina kanaler. Aviseringar finns alltid kvar i inkorgen också.",
"add": "Add rule", "add": "Lägg till regel",
"edit": "Edit rule", "edit": "Redigera regel",
"empty": "No rules yet, so alerts only show up in the inbox.", "empty": "Inga regler ännu, så aviseringar visas bara i inkorgen.",
"needChannel": "Add a channel first.", "needChannel": "Lägg till en kanal först.",
"enabled": "Enabled", "enabled": "Aktiverad",
"name": "Name", "name": "Namn",
"nameRequired": "Name is required", "nameRequired": "Namn krävs",
"match": "Alerts to send", "match": "Aviseringar att skicka",
"matchHint": "* for everything, automations.* for everything from automations, or one exact kind.", "matchHint": "* för allt, automatiseringar.* för allt från automatiseringar, eller en exakt sort.",
"minSeverity": "At least", "minSeverity": "Åtminstone",
"channels": "Send to", "channels": "Skicka till",
"channelRequired": "Pick at least one channel", "channelRequired": "Välj minst en kanal",
"deleteConfirm": "Delete the rule \"{{name}}\"?", "deleteConfirm": "Ta bort regeln \"{{name}}\"?",
"everything": "Everything", "everything": "Allt",
"summary": "{{match}}, {{severity}} or higher, to {{channels}}" "summary": "{{match}}, {{severity}} eller högre, till {{channels}}"
}, },
"actions": { "actions": {
"cancel": "Cancel", "cancel": "Avboka",
"save": "Save", "save": "Spara",
"saving": "Saving...", "saving": "Sparande...",
"delete": "Delete" "delete": "Radera"
}, },
"widget": { "widget": {
"name": "Alert Feed", "name": "Aviseringsflöde",
"description": "Your latest alerts, with a quick way to mark them read", "description": "Dina senaste aviseringar, med ett snabbt sätt att markera dem som lästa",
"maxItems": "Max items", "maxItems": "Max antal artiklar",
"showRead": "Show read alerts", "showRead": "Visa läsaviseringar",
"allClear": "All clear", "allClear": "Faran över",
"loading": "Loading..." "loading": "Belastning..."
},
"plugin": {
"name": "Alerts"
} }
} }
Loaded 100 of 996 files, more files were not shown because too many files have changed in this diff. Show more