You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(web): add French / Spanish / Russian UI languages
Expands the interface beyond zh/en to the remaining UN official languages
(minus Arabic for now — RTL is a separate effort):
- SUPPORTED_LANGUAGES gains fr/es/ru; the LanguageToggle becomes a dropdown
menu (radio group of every language by its autonym) instead of a 2-way
toggle, and initial-language detection matches the browser locale's base
subtag against the supported set.
- Full fr/es/ru translations for all eight namespaces (common, home, kbList,
kb, kbSettings, settings, chat, artifacts), preserving every {{placeholder}}
and <0/> tag; Russian includes the one/few/many/other plural forms. Each
locale has complete key coverage vs en (no zh fallback at runtime).
Verified: build passes (i18n:check en/zh parity + no-hardcoded-CJK, tsc, vite);
the menu lists 中文/English/Français/Español/Русский and switching to Français
translates the whole UI (headless Chromium).
Note: fr/es/ru strings are machine translations and should get a native-speaker
review pass before release.
"subtitleWithTypes_one": "{{count}} concepto · {{edges}} enlaces · {{types}} tipos",
18
+
"subtitleWithTypes_other": "{{count}} conceptos · {{edges}} enlaces · {{types}} tipos"
19
+
},
20
+
"skill": {
21
+
"downloadError": "No se pudo descargar el paquete de la habilidad: {{error}}",
22
+
"body": "La habilidad se ha generado como un directorio instalable. Descarga el <0>.zip</0>, descomprímelo en la carpeta de habilidades de tu agente (Claude Code / Codex / Gemini CLI) y estará lista para usar.",
23
+
"download": "Descargar paquete de habilidad (.zip)"
24
+
},
25
+
"unknown": "Artefacto desconocido",
26
+
"previewUnsupported": "Este tipo de artefacto no se puede previsualizar",
27
+
"loadError": "No se pudo cargar el artefacto: {{error}}",
"pageLoadError": "No se pudo cargar la página: {{error}}",
4
+
"noChanges": "No hay cambios que guardar",
5
+
"saveError": "Error al guardar: {{error}}",
6
+
"configLoadError": "No se pudo cargar la configuración: {{error}}",
7
+
"actions": {
8
+
"newKb": "Nueva base de conocimiento",
9
+
"close": "Cerrar",
10
+
"refresh": "Actualizar"
11
+
},
12
+
"fields": {
13
+
"model": "Modelo",
14
+
"wikiLanguage": "Idioma de salida del wiki",
15
+
"threshold": "Umbral de PageIndex (páginas)"
16
+
},
17
+
"errors": {
18
+
"requestFailed": "La solicitud falló",
19
+
"uploadFailed": "Error al subir: {{detail}}"
20
+
},
21
+
"nav": {
22
+
"home": "Inicio",
23
+
"kbs": "Bases de conocimiento",
24
+
"settings": "Ajustes"
25
+
},
26
+
"titlebar": {
27
+
"chat": "Chat",
28
+
"local": "Local"
29
+
},
30
+
"theme": {
31
+
"light": "Claro",
32
+
"dark": "Oscuro",
33
+
"system": "Sistema",
34
+
"toggleTitle": "Tema: {{label}} (clic para cambiar)",
35
+
"toggleAria": "Tema: {{label}}"
36
+
},
37
+
"language": {
38
+
"zh": "中文",
39
+
"en": "English",
40
+
"fr": "Français",
41
+
"es": "Español",
42
+
"ru": "Русский",
43
+
"toggleTitle": "Idioma: {{label}}",
44
+
"toggleAria": "Idioma: {{label}}"
45
+
},
46
+
"auth": {
47
+
"title": "Se requiere un token de acceso",
48
+
"description": "Este servidor tiene un token de acceso configurado (OPENKB_API_TOKEN). Introduce el token para continuar; se almacena solo en este navegador.",
49
+
"tokenLabel": "Token de acceso",
50
+
"baseLabel": "Dirección de la API (opcional; déjalo en blanco para usar el origen actual)",
51
+
"connect": "Conectar"
52
+
},
53
+
"connector": {
54
+
"tooltip": "La sincronización en la nube está en desarrollo · vótala en GitHub",
55
+
"vote": "¿La quieres? Vota"
56
+
},
57
+
"onboarding": {
58
+
"welcomeTitle": "Te damos la bienvenida a OpenKB",
59
+
"welcomeBody": "Convierte tus documentos en una base de conocimiento interconectada y siempre actualizada. Dos pasos rápidos y listo.",
60
+
"getStarted": "Empezar",
61
+
"skip": "Omitir por ahora",
62
+
"configTitle": "Conecta tu modelo",
63
+
"configBody": "OpenKB usa un LLM para compilar y responder. Pega una clave de API — se almacena localmente y nunca sale de tu equipo.",
64
+
"modelLabel": "Modelo LLM",
65
+
"langLabel": "Idioma del wiki",
66
+
"apiKeyLabel": "Clave de API del LLM",
67
+
"apiKeyPlaceholder": "Pega tu clave de API",
68
+
"baseUrlLabel": "URL base personalizada (opcional)",
"subtitle": "Cada base de conocimiento es un wiki compilado de forma continua que puede vincular varias fuentes de datos",
6
+
"docsLabel": "Docs",
7
+
"rawReady": "raw/ listo",
8
+
"rawMissing": "Sin raw/",
9
+
"create": {
10
+
"description": "Ponle un nombre a tu nueva base de conocimiento. El modelo y las credenciales heredan los valores globales por defecto y podrás ajustarlos después en sus ajustes.",
0 commit comments