feat(i18n): add French language support and enhance localization
All checks were successful
Deploy to production / deploy (push) Successful in 2m48s

- Introduced French as a supported language across the application, updating locale files and adding translations for various components.
- Enhanced language handling logic to accommodate French, ensuring proper detection and fallback mechanisms.
- Updated UI elements to include French language options, improving accessibility for French-speaking users.
- Refactored SEO handling to include French in hreflang links, enhancing search engine indexing for multilingual content.
- Added new scripts for managing French translations and ensuring consistency across language files.
This commit is contained in:
Torsten Schulz (local)
2026-04-07 18:04:03 +02:00
parent f715c6125d
commit f7030bbabe
56 changed files with 5220 additions and 175 deletions

View File

@@ -10,6 +10,16 @@
"windy": "Ventoso",
"clear": "Despejado"
},
"conditionBand": {
"excellent": "Excelente",
"veryGood": "Muy bueno",
"good": "Bueno",
"moderate": "Regular",
"bad": "Malo",
"veryBad": "Muy malo",
"catastrophic": "Crítico",
"unknown": "Desconocido"
},
"statusbar": {
"age": "Edad",
"wealth": "Patrimonio",
@@ -128,7 +138,8 @@
"loading": "Cargando posibles herederos…",
"noHeirs": "No hay herederos disponibles.",
"select": "Elegir como personaje",
"error": "Error al elegir al heredero."
"error": "Error al elegir al heredero.",
"success": "Ahora juegas con el heredero elegido."
},
"metadata": {
"title": "Datos personales",
@@ -194,6 +205,32 @@
"stockHint": "Vista resumida del inventario en todas las regiones.",
"open": "Abrir"
},
"routine": {
"branch": {
"kicker": "Rutina",
"title": "Abrir una sucursal",
"description": "La ruta más rápida a producción, almacén, ventas y transporte.",
"cta": "Ir a operaciones"
},
"finance": {
"kicker": "Resumen",
"title": "Revisar finanzas",
"description": "Saldo, historial y evolución económica sin buscar mucho.",
"cta": "Historial de dinero"
},
"family": {
"kicker": "Personaje",
"title": "Familia y sucesión",
"description": "Decisiones personales y estado del hogar en un solo lugar.",
"cta": "Abrir familia"
},
"house": {
"kicker": "Propiedad",
"title": "Casa y entorno",
"description": "Residencia y día a día como área de trabajo propia.",
"cta": "Ir a la casa"
}
},
"productions": {
"title": "Producciones"
},
@@ -1052,20 +1089,44 @@
"highestOfficeAny": "Cargo más alto en total",
"none": "ninguno",
"nextTitle": "Siguiente título posible",
"advanceNoNext": "Error: no hay información sobre el siguiente título. Recarga la página.",
"requirement": {
"money": "Patrimonio mínimo {amount}",
"cost": "Coste: {amount}",
"branches": "Al menos {amount} sucursales",
"reputation": "Popularidad mínima {amount}",
"house_position": "Casa al menos nivel {amount}",
"house_condition": "Estado de la casa al menos {amount}",
"house_position": "Hogar al menos: {label}",
"house_condition": "Estado de la casa al menos {quality}",
"office_rank_any": "Cargo político o eclesiástico más alto al menos rango {amount}",
"office_rank_political": "Cargo político más alto al menos rango {amount}",
"lover_count_min": "Al menos {amount} amantes o favoritos",
"lover_count_max": "Como máximo {amount} amantes o favoritos"
"lover_count_max": "Como máximo {amount} amantes o favoritos",
"unknown": "{type}: {amount}"
},
"housePosition": {
"1": "Vivir bajo un puente",
"2": "Una choza de paja",
"3": "Una casa de madera",
"4": "Un cuarto en el patio",
"5": "Una casa familiar pequeña",
"6": "Una casa urbana",
"7": "Una villa",
"8": "Una mansión",
"9": "Un castillo",
"fallback": "Nivel de casa {level}"
},
"houseConditionQuality": {
"nearPerfect": "casi impecable",
"veryGood": "muy bueno",
"good": "bueno",
"decent": "decente",
"usable": "aceptable"
},
"houseConditionPercent": "{pct} %",
"officeWithRank": "{label} (rango {rank})",
"advance": {
"confirm": "Solicitar ascenso"
"confirm": "Solicitar ascenso",
"processing": "Procesando…"
},
"cooldown": "Podrás ascender de nuevo como muy pronto el {date}.",
"errors": {
@@ -1358,6 +1419,9 @@
"elections": "Elecciones"
},
"bookmarkCandidate": "Recordar esta candidatura",
"voteSuccess": "Voto enviado correctamente.",
"voteAllSuccess": "Todos los votos se enviaron correctamente.",
"applyBookmarkSuccess": "Candidaturas guardadas correctamente.",
"voteError": "Error al emitir el voto",
"voteAllError": "Error al emitir los votos",
"applyError": "No se pudo enviar la candidatura.",

View File

@@ -10,7 +10,8 @@
"en": "Inglés",
"de": "Alemán",
"ceb": "Bisaya",
"es": "Español"
"es": "Español",
"fr": "Francés"
},
"register": "Registrarse",
"close": "Cerrar",

View File

@@ -58,7 +58,8 @@
"de": "Alemán",
"en": "Inglés",
"ceb": "Bisaya",
"es": "Español"
"es": "Español",
"fr": "Francés"
},
"eyecolor": {
"blue": "Azul",