From 39f77ae290871807d9cfbc4ba94f10eb59b5b257 Mon Sep 17 00:00:00 2001 From: Ettore Di Giacinto Date: Wed, 21 Oct 2026 20:27:07 +0000 Subject: [PATCH] fix(ui): carry the add-on library keys in every locale The add-on library and backend library strings existed only in English, so the other locales had no value for them. Add the missing keys of the addons namespace to de, es, id, it, ko, pt-BR and zh-CN. The values are the English text until a translation is contributed. Assisted-by: Claude Code:claude-sonnet-5-5 Signed-off-by: Ettore Di Giacinto --- .../react-ui/public/locales/de/addons.json | 57 +++++++++++++++-- .../react-ui/public/locales/es/addons.json | 57 +++++++++++++++-- .../react-ui/public/locales/id/addons.json | 57 +++++++++++++++-- .../react-ui/public/locales/it/addons.json | 57 +++++++++++++++-- .../react-ui/public/locales/ko/addons.json | 61 +++++++++++++++++-- .../react-ui/public/locales/pt-BR/addons.json | 57 +++++++++++++++-- .../react-ui/public/locales/zh-CN/addons.json | 61 +++++++++++++++++-- 7 files changed, 372 insertions(+), 35 deletions(-) diff --git a/core/http/react-ui/public/locales/de/addons.json b/core/http/react-ui/public/locales/de/addons.json index d4f4b2a70..5a7ab7868 100644 --- a/core/http/react-ui/public/locales/de/addons.json +++ b/core/http/react-ui/public/locales/de/addons.json @@ -35,6 +35,16 @@ "apps": { "emptyBody": "Sobald ein Administrator ein Add-on installiert und aktiviert, erscheint es hier.", "emptyTitle": "Noch keine Apps", + "firstRun": { + "browse": "Browse add-ons", + "browseBody": "Pick an add-on from a library and install it.", + "browseTitle": "Browse and install.", + "libraryBody": "The official library is registered by default. You can add more under Libraries.", + "libraryTitle": "Choose a library.", + "startBody": "Start an installed add-on from its tile. Add-ons that were running start again with the server.", + "startTitle": "Start it.", + "title": "Welcome to Apps" + }, "headless": "Läuft im Hintergrund und hat keine eigene Seite.", "listLabel": "Apps", "loading": "Apps werden geladen", @@ -66,7 +76,18 @@ "installedSame": "Installiert {{version}}", "installedState": "Installiert", "installing": "Wird installiert", - "search": "Bibliotheken durchsuchen" + "search": "Bibliotheken durchsuchen", + "kind": { + "addon": "Add-on", + "backend": "Backend" + }, + "installedBackend": "Installed", + "installedBackendNote": "Installed as a backend on this node. Models can use it now.", + "confirmBackendBody": "Version {{version}} of the backend from the library {{library}} will be downloaded, checked against its digest and signature, and installed on this node. The backend gallery is not changed.", + "confirmBackendNote": "A backend runs native code with the rights of LocalAI. Install it only from a library you trust.", + "backendFailed": "The backend was not installed.", + "alias": "Alias", + "kindLabel": "Kind" }, "catalog": { "allLibraries": "Alle Bibliotheken", @@ -84,6 +105,27 @@ "retry": "Erneut versuchen", "search": "Suchen" }, + "drawer": { + "add": "Add a new add-on", + "browse": "Browse add-ons", + "builtinDetail": "This add-on ships with LocalAI.", + "close": "Close", + "limitBody": "The sidebar shows at most eight pinned add-ons. Unpin one first.", + "limitTitle": "Eight add-ons are pinned", + "moveEarlier": "Move {{name}} earlier", + "moveLater": "Move {{name}} later", + "pin": "Pin {{name}}", + "pinLabel": "Pin", + "pinned": "Pinned", + "running": "Running", + "search": "Search add-ons", + "status": { + "failed": "failed", + "starting": "starting" + }, + "stopped": "Stopped", + "unpin": "Unpin {{name}}" + }, "errors": { "auth": "Du bist abgemeldet. Melde dich erneut an.", "denied": "Der Server hat dies abgelehnt. Möglicherweise fehlt dir die Berechtigung oder das Add-on hat sich geändert. Die Liste wurde aktualisiert.", @@ -125,7 +167,8 @@ "required": "Erforderlich, wenn eine Signatur verlangt wird.", "url": "Gib eine http- oder https-Adresse ein.", "urlCredentials": "Die Adresse darf keinen Benutzernamen und kein Passwort enthalten.", - "urlQuery": "Die Adresse darf keinen Query-String und kein Fragment enthalten." + "urlQuery": "Die Adresse darf keinen Query-String und kein Fragment enthalten.", + "either": "Use the exact identity or the pattern, not both." }, "fields": { "enabled": "Aktiviert", @@ -135,12 +178,14 @@ "name": "Name", "reference": "Zugangsdaten-Referenz (optional)", "requireSignature": "Signatur verlangen", - "url": "Katalog-URL" + "url": "Katalog-URL", + "identityRegex": "Signer identity pattern (optional)" }, "hints": { "id": "Kleinbuchstaben, Ziffern und Bindestriche. Kann später nicht geändert werden.", "reference": "Der Name einer Zugangsdaten-Konfiguration des Betreibers. Füge hier nie ein Token oder Passwort ein.", - "url": "Eine https-Adresse ohne Zugangsdaten und ohne Query-String." + "url": "Eine https-Adresse ohne Zugangsdaten und ohne Query-String.", + "identityRegex": "An anchored pattern, from ^ to $, used instead of the exact identity. Backend libraries use it so builds from master and from tags both verify." }, "lastRefresh": "Aktualisiert {{when}}, {{count}} Einträge", "lead": "Eine Bibliothek ist ein Katalogdokument, das Add-ons auflistet. Zugangsdaten werden hier nie eingetippt: Eine private Bibliothek nennt eine Zugangsdaten-Referenz, die der Betreiber eingerichtet hat.", @@ -156,7 +201,9 @@ "removeTitle": "{{name}} entfernen?", "removed": "{{name}} entfernt.", "save": "Speichern", - "saved": "{{name}} gespeichert." + "saved": "{{name}} gespeichert.", + "skipped_one": "{{count}} entry skipped: kind {{kinds}} is not read by this version", + "skipped_other": "{{count}} entries skipped: kind {{kinds}} is not read by this version" }, "manage": { "api": "Add-on-API", diff --git a/core/http/react-ui/public/locales/es/addons.json b/core/http/react-ui/public/locales/es/addons.json index 802f94c03..47f7d90bd 100644 --- a/core/http/react-ui/public/locales/es/addons.json +++ b/core/http/react-ui/public/locales/es/addons.json @@ -35,6 +35,16 @@ "apps": { "emptyBody": "Cuando un administrador instala y habilita un complemento, aparece aquí.", "emptyTitle": "Aún no hay apps", + "firstRun": { + "browse": "Browse add-ons", + "browseBody": "Pick an add-on from a library and install it.", + "browseTitle": "Browse and install.", + "libraryBody": "The official library is registered by default. You can add more under Libraries.", + "libraryTitle": "Choose a library.", + "startBody": "Start an installed add-on from its tile. Add-ons that were running start again with the server.", + "startTitle": "Start it.", + "title": "Welcome to Apps" + }, "headless": "Se ejecuta en segundo plano y no tiene página propia.", "listLabel": "Apps", "loading": "Cargando apps", @@ -66,7 +76,18 @@ "installedSame": "Instalado {{version}}", "installedState": "Instalado", "installing": "Instalando", - "search": "Buscar en las bibliotecas" + "search": "Buscar en las bibliotecas", + "kind": { + "addon": "Add-on", + "backend": "Backend" + }, + "installedBackend": "Installed", + "installedBackendNote": "Installed as a backend on this node. Models can use it now.", + "confirmBackendBody": "Version {{version}} of the backend from the library {{library}} will be downloaded, checked against its digest and signature, and installed on this node. The backend gallery is not changed.", + "confirmBackendNote": "A backend runs native code with the rights of LocalAI. Install it only from a library you trust.", + "backendFailed": "The backend was not installed.", + "alias": "Alias", + "kindLabel": "Kind" }, "catalog": { "allLibraries": "Todas las bibliotecas", @@ -84,6 +105,27 @@ "retry": "Reintentar", "search": "Buscar" }, + "drawer": { + "add": "Add a new add-on", + "browse": "Browse add-ons", + "builtinDetail": "This add-on ships with LocalAI.", + "close": "Close", + "limitBody": "The sidebar shows at most eight pinned add-ons. Unpin one first.", + "limitTitle": "Eight add-ons are pinned", + "moveEarlier": "Move {{name}} earlier", + "moveLater": "Move {{name}} later", + "pin": "Pin {{name}}", + "pinLabel": "Pin", + "pinned": "Pinned", + "running": "Running", + "search": "Search add-ons", + "status": { + "failed": "failed", + "starting": "starting" + }, + "stopped": "Stopped", + "unpin": "Unpin {{name}}" + }, "errors": { "auth": "Cerraste la sesión. Inicia sesión de nuevo.", "denied": "El servidor rechazó la solicitud. Puede que no tengas permiso o que el complemento haya cambiado. Se actualizó la lista.", @@ -125,7 +167,8 @@ "required": "Obligatorio cuando se exige una firma.", "url": "Escribe una dirección http o https.", "urlCredentials": "La dirección no debe contener usuario ni contraseña.", - "urlQuery": "La dirección no debe contener cadena de consulta ni fragmento." + "urlQuery": "La dirección no debe contener cadena de consulta ni fragmento.", + "either": "Use the exact identity or the pattern, not both." }, "fields": { "enabled": "Habilitada", @@ -135,12 +178,14 @@ "name": "Nombre", "reference": "Referencia de credencial (opcional)", "requireSignature": "Exigir una firma", - "url": "URL del catálogo" + "url": "URL del catálogo", + "identityRegex": "Signer identity pattern (optional)" }, "hints": { "id": "Letras minúsculas, dígitos y guiones. No se puede cambiar después.", "reference": "El nombre de una credencial que configuró el propietario. Nunca pegues aquí un token ni una contraseña.", - "url": "Una dirección https sin credenciales ni cadena de consulta." + "url": "Una dirección https sin credenciales ni cadena de consulta.", + "identityRegex": "An anchored pattern, from ^ to $, used instead of the exact identity. Backend libraries use it so builds from master and from tags both verify." }, "lastRefresh": "Actualizada {{when}}, {{count}} entradas", "lead": "Una biblioteca es un documento de catálogo que enumera complementos. Las credenciales nunca se escriben aquí: una biblioteca privada nombra una credencial que configuró el propietario.", @@ -156,7 +201,9 @@ "removeTitle": "¿Quitar {{name}}?", "removed": "{{name}} quitada.", "save": "Guardar", - "saved": "{{name}} guardada." + "saved": "{{name}} guardada.", + "skipped_one": "{{count}} entry skipped: kind {{kinds}} is not read by this version", + "skipped_other": "{{count}} entries skipped: kind {{kinds}} is not read by this version" }, "manage": { "api": "API del complemento", diff --git a/core/http/react-ui/public/locales/id/addons.json b/core/http/react-ui/public/locales/id/addons.json index f4c4a0bca..159a8a207 100644 --- a/core/http/react-ui/public/locales/id/addons.json +++ b/core/http/react-ui/public/locales/id/addons.json @@ -35,6 +35,16 @@ "apps": { "emptyBody": "Saat administrator memasang dan mengaktifkan add-on, add-on itu muncul di sini.", "emptyTitle": "Belum ada aplikasi", + "firstRun": { + "browse": "Browse add-ons", + "browseBody": "Pick an add-on from a library and install it.", + "browseTitle": "Browse and install.", + "libraryBody": "The official library is registered by default. You can add more under Libraries.", + "libraryTitle": "Choose a library.", + "startBody": "Start an installed add-on from its tile. Add-ons that were running start again with the server.", + "startTitle": "Start it.", + "title": "Welcome to Apps" + }, "headless": "Berjalan di latar belakang dan tidak punya halaman sendiri.", "listLabel": "Aplikasi", "loading": "Memuat aplikasi", @@ -66,7 +76,18 @@ "installedSame": "Terpasang {{version}}", "installedState": "Terpasang", "installing": "Memasang", - "search": "Cari di pustaka" + "search": "Cari di pustaka", + "kind": { + "addon": "Add-on", + "backend": "Backend" + }, + "installedBackend": "Installed", + "installedBackendNote": "Installed as a backend on this node. Models can use it now.", + "confirmBackendBody": "Version {{version}} of the backend from the library {{library}} will be downloaded, checked against its digest and signature, and installed on this node. The backend gallery is not changed.", + "confirmBackendNote": "A backend runs native code with the rights of LocalAI. Install it only from a library you trust.", + "backendFailed": "The backend was not installed.", + "alias": "Alias", + "kindLabel": "Kind" }, "catalog": { "allLibraries": "Semua pustaka", @@ -84,6 +105,27 @@ "retry": "Coba lagi", "search": "Cari" }, + "drawer": { + "add": "Add a new add-on", + "browse": "Browse add-ons", + "builtinDetail": "This add-on ships with LocalAI.", + "close": "Close", + "limitBody": "The sidebar shows at most eight pinned add-ons. Unpin one first.", + "limitTitle": "Eight add-ons are pinned", + "moveEarlier": "Move {{name}} earlier", + "moveLater": "Move {{name}} later", + "pin": "Pin {{name}}", + "pinLabel": "Pin", + "pinned": "Pinned", + "running": "Running", + "search": "Search add-ons", + "status": { + "failed": "failed", + "starting": "starting" + }, + "stopped": "Stopped", + "unpin": "Unpin {{name}}" + }, "errors": { "auth": "Anda sudah keluar. Masuk lagi.", "denied": "Server menolak ini. Anda mungkin tidak punya izin, atau add-on berubah. Daftar telah diperbarui.", @@ -125,7 +167,8 @@ "required": "Wajib diisi bila tanda tangan diwajibkan.", "url": "Masukkan alamat http atau https.", "urlCredentials": "Alamat tidak boleh berisi nama pengguna atau kata sandi.", - "urlQuery": "Alamat tidak boleh berisi query string atau fragmen." + "urlQuery": "Alamat tidak boleh berisi query string atau fragmen.", + "either": "Use the exact identity or the pattern, not both." }, "fields": { "enabled": "Aktif", @@ -135,12 +178,14 @@ "name": "Nama", "reference": "Referensi kredensial (opsional)", "requireSignature": "Wajibkan tanda tangan", - "url": "URL katalog" + "url": "URL katalog", + "identityRegex": "Signer identity pattern (optional)" }, "hints": { "id": "Huruf kecil, angka, dan tanda hubung. Tidak dapat diubah nanti.", "reference": "Nama kredensial yang dikonfigurasi pemilik. Jangan pernah menempelkan token atau kata sandi di sini.", - "url": "Alamat https tanpa kredensial dan tanpa query string." + "url": "Alamat https tanpa kredensial dan tanpa query string.", + "identityRegex": "An anchored pattern, from ^ to $, used instead of the exact identity. Backend libraries use it so builds from master and from tags both verify." }, "lastRefresh": "Disegarkan {{when}}, {{count}} entri", "lead": "Pustaka adalah dokumen katalog yang mendaftar add-on. Kredensial tidak pernah diketik di sini: pustaka privat menyebut kredensial yang dikonfigurasi pemilik.", @@ -156,7 +201,9 @@ "removeTitle": "Hapus {{name}}?", "removed": "{{name}} dihapus.", "save": "Simpan", - "saved": "{{name}} disimpan." + "saved": "{{name}} disimpan.", + "skipped_one": "{{count}} entry skipped: kind {{kinds}} is not read by this version", + "skipped_other": "{{count}} entries skipped: kind {{kinds}} is not read by this version" }, "manage": { "api": "API add-on", diff --git a/core/http/react-ui/public/locales/it/addons.json b/core/http/react-ui/public/locales/it/addons.json index 94f9bcc74..82c49df68 100644 --- a/core/http/react-ui/public/locales/it/addons.json +++ b/core/http/react-ui/public/locales/it/addons.json @@ -35,6 +35,16 @@ "apps": { "emptyBody": "Quando un amministratore installa e abilita un componente, compare qui.", "emptyTitle": "Ancora nessuna app", + "firstRun": { + "browse": "Browse add-ons", + "browseBody": "Pick an add-on from a library and install it.", + "browseTitle": "Browse and install.", + "libraryBody": "The official library is registered by default. You can add more under Libraries.", + "libraryTitle": "Choose a library.", + "startBody": "Start an installed add-on from its tile. Add-ons that were running start again with the server.", + "startTitle": "Start it.", + "title": "Welcome to Apps" + }, "headless": "Gira in background e non ha una pagina propria.", "listLabel": "App", "loading": "Caricamento delle app", @@ -66,7 +76,18 @@ "installedSame": "Installato {{version}}", "installedState": "Installato", "installing": "Installazione", - "search": "Cerca nelle librerie" + "search": "Cerca nelle librerie", + "kind": { + "addon": "Add-on", + "backend": "Backend" + }, + "installedBackend": "Installed", + "installedBackendNote": "Installed as a backend on this node. Models can use it now.", + "confirmBackendBody": "Version {{version}} of the backend from the library {{library}} will be downloaded, checked against its digest and signature, and installed on this node. The backend gallery is not changed.", + "confirmBackendNote": "A backend runs native code with the rights of LocalAI. Install it only from a library you trust.", + "backendFailed": "The backend was not installed.", + "alias": "Alias", + "kindLabel": "Kind" }, "catalog": { "allLibraries": "Tutte le librerie", @@ -84,6 +105,27 @@ "retry": "Riprova", "search": "Cerca" }, + "drawer": { + "add": "Add a new add-on", + "browse": "Browse add-ons", + "builtinDetail": "This add-on ships with LocalAI.", + "close": "Close", + "limitBody": "The sidebar shows at most eight pinned add-ons. Unpin one first.", + "limitTitle": "Eight add-ons are pinned", + "moveEarlier": "Move {{name}} earlier", + "moveLater": "Move {{name}} later", + "pin": "Pin {{name}}", + "pinLabel": "Pin", + "pinned": "Pinned", + "running": "Running", + "search": "Search add-ons", + "status": { + "failed": "failed", + "starting": "starting" + }, + "stopped": "Stopped", + "unpin": "Unpin {{name}}" + }, "errors": { "auth": "Hai effettuato la disconnessione. Accedi di nuovo.", "denied": "Il server ha rifiutato la richiesta. Potresti non avere il permesso, oppure il componente è cambiato. L'elenco è stato aggiornato.", @@ -125,7 +167,8 @@ "required": "Obbligatorio quando è richiesta una firma.", "url": "Inserisci un indirizzo http o https.", "urlCredentials": "L'indirizzo non deve contenere nome utente o password.", - "urlQuery": "L'indirizzo non deve contenere una stringa di query o un frammento." + "urlQuery": "L'indirizzo non deve contenere una stringa di query o un frammento.", + "either": "Use the exact identity or the pattern, not both." }, "fields": { "enabled": "Abilitata", @@ -135,12 +178,14 @@ "name": "Nome", "reference": "Riferimento credenziale (facoltativo)", "requireSignature": "Richiedi una firma", - "url": "URL del catalogo" + "url": "URL del catalogo", + "identityRegex": "Signer identity pattern (optional)" }, "hints": { "id": "Lettere minuscole, cifre e trattini. Non può cambiare in seguito.", "reference": "Il nome di una credenziale configurata dal proprietario. Non incollare mai un token o una password qui.", - "url": "Un indirizzo https senza credenziali né stringa di query." + "url": "Un indirizzo https senza credenziali né stringa di query.", + "identityRegex": "An anchored pattern, from ^ to $, used instead of the exact identity. Backend libraries use it so builds from master and from tags both verify." }, "lastRefresh": "Aggiornata {{when}}, {{count}} voci", "lead": "Una libreria è un documento di catalogo che elenca componenti. Le credenziali non si digitano mai qui: una libreria privata indica una credenziale configurata dal proprietario.", @@ -156,7 +201,9 @@ "removeTitle": "Rimuovere {{name}}?", "removed": "{{name}} rimossa.", "save": "Salva", - "saved": "{{name}} salvata." + "saved": "{{name}} salvata.", + "skipped_one": "{{count}} entry skipped: kind {{kinds}} is not read by this version", + "skipped_other": "{{count}} entries skipped: kind {{kinds}} is not read by this version" }, "manage": { "api": "API del componente", diff --git a/core/http/react-ui/public/locales/ko/addons.json b/core/http/react-ui/public/locales/ko/addons.json index 6eac2b697..b60a97d7a 100644 --- a/core/http/react-ui/public/locales/ko/addons.json +++ b/core/http/react-ui/public/locales/ko/addons.json @@ -35,6 +35,16 @@ "apps": { "emptyBody": "관리자가 애드온을 설치하고 활성화하면 여기에 나타납니다.", "emptyTitle": "아직 앱이 없습니다", + "firstRun": { + "browse": "Browse add-ons", + "browseBody": "Pick an add-on from a library and install it.", + "browseTitle": "Browse and install.", + "libraryBody": "The official library is registered by default. You can add more under Libraries.", + "libraryTitle": "Choose a library.", + "startBody": "Start an installed add-on from its tile. Add-ons that were running start again with the server.", + "startTitle": "Start it.", + "title": "Welcome to Apps" + }, "headless": "백그라운드에서 실행되며 자체 페이지가 없습니다.", "listLabel": "앱", "loading": "앱을 불러오는 중", @@ -43,7 +53,9 @@ "stale": "목록을 새로 고칠 수 없습니다. 표시된 내용이 오래되었을 수 있습니다.", "start": "시작", "stop": "중지", + "toolsMore_one": "and {{count}} more", "toolsMore_other": "외 {{count}}개", + "tools_one": "{{count}} tool", "tools_other": "도구 {{count}}개", "version": "버전 {{version}}", "working": "소유자의 확인을 기다리는 중입니다." @@ -64,12 +76,24 @@ "installedSame": "{{version}} 설치됨", "installedState": "설치됨", "installing": "설치 중", - "search": "라이브러리 검색" + "search": "라이브러리 검색", + "kind": { + "addon": "Add-on", + "backend": "Backend" + }, + "installedBackend": "Installed", + "installedBackendNote": "Installed as a backend on this node. Models can use it now.", + "confirmBackendBody": "Version {{version}} of the backend from the library {{library}} will be downloaded, checked against its digest and signature, and installed on this node. The backend gallery is not changed.", + "confirmBackendNote": "A backend runs native code with the rights of LocalAI. Install it only from a library you trust.", + "backendFailed": "The backend was not installed.", + "alias": "Alias", + "kindLabel": "Kind" }, "catalog": { "allLibraries": "모든 라이브러리", "cancel": "취소", "close": "닫기", + "count_one": "{{count}} result", "count_other": "결과 {{count}}개", "emptyBody": "이 목록은 비어 있습니다.", "emptyFiltered": "검색과 일치하는 항목이 없습니다. 검색어나 라이브러리를 바꿔 보세요.", @@ -81,6 +105,27 @@ "retry": "다시 시도", "search": "검색" }, + "drawer": { + "add": "Add a new add-on", + "browse": "Browse add-ons", + "builtinDetail": "This add-on ships with LocalAI.", + "close": "Close", + "limitBody": "The sidebar shows at most eight pinned add-ons. Unpin one first.", + "limitTitle": "Eight add-ons are pinned", + "moveEarlier": "Move {{name}} earlier", + "moveLater": "Move {{name}} later", + "pin": "Pin {{name}}", + "pinLabel": "Pin", + "pinned": "Pinned", + "running": "Running", + "search": "Search add-ons", + "status": { + "failed": "failed", + "starting": "starting" + }, + "stopped": "Stopped", + "unpin": "Unpin {{name}}" + }, "errors": { "auth": "로그아웃되었습니다. 다시 로그인하세요.", "denied": "서버가 거부했습니다. 권한이 없거나 애드온이 변경되었을 수 있습니다. 목록을 새로 고쳤습니다.", @@ -122,7 +167,8 @@ "required": "서명을 요구할 때는 필수입니다.", "url": "http 또는 https 주소를 입력하세요.", "urlCredentials": "주소에 사용자 이름이나 비밀번호를 넣을 수 없습니다.", - "urlQuery": "주소에 쿼리 문자열이나 프래그먼트를 넣을 수 없습니다." + "urlQuery": "주소에 쿼리 문자열이나 프래그먼트를 넣을 수 없습니다.", + "either": "Use the exact identity or the pattern, not both." }, "fields": { "enabled": "활성화됨", @@ -132,12 +178,14 @@ "name": "이름", "reference": "자격 증명 참조(선택)", "requireSignature": "서명 요구", - "url": "카탈로그 URL" + "url": "카탈로그 URL", + "identityRegex": "Signer identity pattern (optional)" }, "hints": { "id": "소문자, 숫자, 하이픈. 나중에 변경할 수 없습니다.", "reference": "소유자가 구성한 자격 증명의 이름. 토큰이나 비밀번호를 여기에 붙여넣지 마세요.", - "url": "자격 증명과 쿼리 문자열이 없는 https 주소." + "url": "자격 증명과 쿼리 문자열이 없는 https 주소.", + "identityRegex": "An anchored pattern, from ^ to $, used instead of the exact identity. Backend libraries use it so builds from master and from tags both verify." }, "lastRefresh": "{{when}}에 새로 고침, 항목 {{count}}개", "lead": "라이브러리는 애드온을 나열하는 카탈로그 문서입니다. 자격 증명은 여기에 입력하지 않습니다. 비공개 라이브러리는 소유자가 구성한 자격 증명을 이름으로 가리킵니다.", @@ -153,7 +201,9 @@ "removeTitle": "{{name}}을(를) 제거할까요?", "removed": "{{name}}을(를) 제거했습니다.", "save": "저장", - "saved": "{{name}}을(를) 저장했습니다." + "saved": "{{name}}을(를) 저장했습니다.", + "skipped_one": "{{count}} entry skipped: kind {{kinds}} is not read by this version", + "skipped_other": "{{count}} entries skipped: kind {{kinds}} is not read by this version" }, "manage": { "api": "애드온 API", @@ -162,6 +212,7 @@ "data": "보존된 데이터", "dataFormat": "데이터 형식", "desired": "원하는 상태", + "failedNote_one": "The process is not serving after {{count}} restart attempt.", "failedNote_other": "재시작을 {{count}}번 시도한 후에도 프로세스가 응답하지 않습니다.", "generations": "보존된 세대", "hasUI": "페이지 있음", diff --git a/core/http/react-ui/public/locales/pt-BR/addons.json b/core/http/react-ui/public/locales/pt-BR/addons.json index c89cd7555..9e94d663e 100644 --- a/core/http/react-ui/public/locales/pt-BR/addons.json +++ b/core/http/react-ui/public/locales/pt-BR/addons.json @@ -35,6 +35,16 @@ "apps": { "emptyBody": "Quando um administrador instala e habilita um complemento, ele aparece aqui.", "emptyTitle": "Ainda não há apps", + "firstRun": { + "browse": "Browse add-ons", + "browseBody": "Pick an add-on from a library and install it.", + "browseTitle": "Browse and install.", + "libraryBody": "The official library is registered by default. You can add more under Libraries.", + "libraryTitle": "Choose a library.", + "startBody": "Start an installed add-on from its tile. Add-ons that were running start again with the server.", + "startTitle": "Start it.", + "title": "Welcome to Apps" + }, "headless": "Roda em segundo plano e não tem página própria.", "listLabel": "Apps", "loading": "Carregando apps", @@ -66,7 +76,18 @@ "installedSame": "Instalado {{version}}", "installedState": "Instalado", "installing": "Instalando", - "search": "Pesquisar nas bibliotecas" + "search": "Pesquisar nas bibliotecas", + "kind": { + "addon": "Add-on", + "backend": "Backend" + }, + "installedBackend": "Installed", + "installedBackendNote": "Installed as a backend on this node. Models can use it now.", + "confirmBackendBody": "Version {{version}} of the backend from the library {{library}} will be downloaded, checked against its digest and signature, and installed on this node. The backend gallery is not changed.", + "confirmBackendNote": "A backend runs native code with the rights of LocalAI. Install it only from a library you trust.", + "backendFailed": "The backend was not installed.", + "alias": "Alias", + "kindLabel": "Kind" }, "catalog": { "allLibraries": "Todas as bibliotecas", @@ -84,6 +105,27 @@ "retry": "Tentar de novo", "search": "Pesquisar" }, + "drawer": { + "add": "Add a new add-on", + "browse": "Browse add-ons", + "builtinDetail": "This add-on ships with LocalAI.", + "close": "Close", + "limitBody": "The sidebar shows at most eight pinned add-ons. Unpin one first.", + "limitTitle": "Eight add-ons are pinned", + "moveEarlier": "Move {{name}} earlier", + "moveLater": "Move {{name}} later", + "pin": "Pin {{name}}", + "pinLabel": "Pin", + "pinned": "Pinned", + "running": "Running", + "search": "Search add-ons", + "status": { + "failed": "failed", + "starting": "starting" + }, + "stopped": "Stopped", + "unpin": "Unpin {{name}}" + }, "errors": { "auth": "Você saiu da conta. Entre novamente.", "denied": "O servidor recusou. Você pode não ter permissão, ou o complemento mudou. A lista foi atualizada.", @@ -125,7 +167,8 @@ "required": "Obrigatório quando uma assinatura é exigida.", "url": "Informe um endereço http ou https.", "urlCredentials": "O endereço não deve conter nome de usuário nem senha.", - "urlQuery": "O endereço não deve conter string de consulta nem fragmento." + "urlQuery": "O endereço não deve conter string de consulta nem fragmento.", + "either": "Use the exact identity or the pattern, not both." }, "fields": { "enabled": "Habilitada", @@ -135,12 +178,14 @@ "name": "Nome", "reference": "Referência de credencial (opcional)", "requireSignature": "Exigir assinatura", - "url": "URL do catálogo" + "url": "URL do catálogo", + "identityRegex": "Signer identity pattern (optional)" }, "hints": { "id": "Letras minúsculas, dígitos e hifens. Não pode mudar depois.", "reference": "O nome de uma credencial que o proprietário configurou. Nunca cole um token ou senha aqui.", - "url": "Um endereço https sem credenciais nem string de consulta." + "url": "Um endereço https sem credenciais nem string de consulta.", + "identityRegex": "An anchored pattern, from ^ to $, used instead of the exact identity. Backend libraries use it so builds from master and from tags both verify." }, "lastRefresh": "Atualizada {{when}}, {{count}} entradas", "lead": "Uma biblioteca é um documento de catálogo que lista complementos. Credenciais nunca são digitadas aqui: uma biblioteca privada indica uma credencial que o proprietário configurou.", @@ -156,7 +201,9 @@ "removeTitle": "Remover {{name}}?", "removed": "{{name}} removida.", "save": "Salvar", - "saved": "{{name}} salva." + "saved": "{{name}} salva.", + "skipped_one": "{{count}} entry skipped: kind {{kinds}} is not read by this version", + "skipped_other": "{{count}} entries skipped: kind {{kinds}} is not read by this version" }, "manage": { "api": "API do complemento", diff --git a/core/http/react-ui/public/locales/zh-CN/addons.json b/core/http/react-ui/public/locales/zh-CN/addons.json index 58b1ba632..d0f0e6746 100644 --- a/core/http/react-ui/public/locales/zh-CN/addons.json +++ b/core/http/react-ui/public/locales/zh-CN/addons.json @@ -35,6 +35,16 @@ "apps": { "emptyBody": "管理员安装并启用附加组件后,它会显示在这里。", "emptyTitle": "还没有应用", + "firstRun": { + "browse": "Browse add-ons", + "browseBody": "Pick an add-on from a library and install it.", + "browseTitle": "Browse and install.", + "libraryBody": "The official library is registered by default. You can add more under Libraries.", + "libraryTitle": "Choose a library.", + "startBody": "Start an installed add-on from its tile. Add-ons that were running start again with the server.", + "startTitle": "Start it.", + "title": "Welcome to Apps" + }, "headless": "在后台运行,没有自己的页面。", "listLabel": "应用", "loading": "正在加载应用", @@ -43,7 +53,9 @@ "stale": "无法刷新列表,当前显示的内容可能已过时。", "start": "启动", "stop": "停止", + "toolsMore_one": "and {{count}} more", "toolsMore_other": "另有 {{count}} 个", + "tools_one": "{{count}} tool", "tools_other": "{{count}} 个工具", "version": "版本 {{version}}", "working": "正在等待所有者确认。" @@ -64,12 +76,24 @@ "installedSame": "已安装 {{version}}", "installedState": "已安装", "installing": "正在安装", - "search": "搜索库" + "search": "搜索库", + "kind": { + "addon": "Add-on", + "backend": "Backend" + }, + "installedBackend": "Installed", + "installedBackendNote": "Installed as a backend on this node. Models can use it now.", + "confirmBackendBody": "Version {{version}} of the backend from the library {{library}} will be downloaded, checked against its digest and signature, and installed on this node. The backend gallery is not changed.", + "confirmBackendNote": "A backend runs native code with the rights of LocalAI. Install it only from a library you trust.", + "backendFailed": "The backend was not installed.", + "alias": "Alias", + "kindLabel": "Kind" }, "catalog": { "allLibraries": "所有库", "cancel": "取消", "close": "关闭", + "count_one": "{{count}} result", "count_other": "{{count}} 个结果", "emptyBody": "此列表为空。", "emptyFiltered": "没有匹配的结果。请更换关键词或库。", @@ -81,6 +105,27 @@ "retry": "重试", "search": "搜索" }, + "drawer": { + "add": "Add a new add-on", + "browse": "Browse add-ons", + "builtinDetail": "This add-on ships with LocalAI.", + "close": "Close", + "limitBody": "The sidebar shows at most eight pinned add-ons. Unpin one first.", + "limitTitle": "Eight add-ons are pinned", + "moveEarlier": "Move {{name}} earlier", + "moveLater": "Move {{name}} later", + "pin": "Pin {{name}}", + "pinLabel": "Pin", + "pinned": "Pinned", + "running": "Running", + "search": "Search add-ons", + "status": { + "failed": "failed", + "starting": "starting" + }, + "stopped": "Stopped", + "unpin": "Unpin {{name}}" + }, "errors": { "auth": "你已退出登录,请重新登录。", "denied": "服务器拒绝了此请求。你可能没有权限,或附加组件已变更。列表已刷新。", @@ -122,7 +167,8 @@ "required": "要求签名时必填。", "url": "请输入 http 或 https 地址。", "urlCredentials": "地址不能包含用户名或密码。", - "urlQuery": "地址不能包含查询字符串或片段。" + "urlQuery": "地址不能包含查询字符串或片段。", + "either": "Use the exact identity or the pattern, not both." }, "fields": { "enabled": "已启用", @@ -132,12 +178,14 @@ "name": "名称", "reference": "凭据引用(可选)", "requireSignature": "要求签名", - "url": "目录 URL" + "url": "目录 URL", + "identityRegex": "Signer identity pattern (optional)" }, "hints": { "id": "小写字母、数字和连字符,之后不能更改。", "reference": "所有者已配置的凭据名称。切勿在此粘贴令牌或密码。", - "url": "不含凭据和查询字符串的 https 地址。" + "url": "不含凭据和查询字符串的 https 地址。", + "identityRegex": "An anchored pattern, from ^ to $, used instead of the exact identity. Backend libraries use it so builds from master and from tags both verify." }, "lastRefresh": "{{when}} 已刷新,{{count}} 个条目", "lead": "库是列出附加组件的目录文档。凭据绝不在此输入:私有库只引用所有者配置的凭据。", @@ -153,7 +201,9 @@ "removeTitle": "移除 {{name}}?", "removed": "已移除 {{name}}。", "save": "保存", - "saved": "已保存 {{name}}。" + "saved": "已保存 {{name}}。", + "skipped_one": "{{count}} entry skipped: kind {{kinds}} is not read by this version", + "skipped_other": "{{count}} entries skipped: kind {{kinds}} is not read by this version" }, "manage": { "api": "附加组件 API", @@ -162,6 +212,7 @@ "data": "保留的数据", "dataFormat": "数据格式", "desired": "期望状态", + "failedNote_one": "The process is not serving after {{count}} restart attempt.", "failedNote_other": "经过 {{count}} 次重启尝试后,进程仍未提供服务。", "generations": "保留的代数", "hasUI": "有页面",