feat: implement internationalization with multi-language support and runtime language selection

This commit is contained in:
nessar committed 2026-05-30 21:03:12 +02:00
1 parent 2de09383b9
commit 9c9114879d
26 files changed
+826 -159

No files matched your search

+76
View File
@@ -0,0 +1,76 @@
{
"locale": "de-DE",
"app": {
"title": "vac-optimizer",
"description": "Optimieren Sie Ihre Urlaubstage basierend auf Feiertagen und Wochenenden!"
},
"userInput": {
"addVacationDay": "Urlaubstag hinzufügen",
"calculate": "Berechnen",
"remainingDaysWarning": "{count} nicht platziert:",
"remainingDaysManualPlace": "Bitte manuell platzieren.",
"chooseDate": "Datum auswählen",
"daySuffix": "Tag",
"daysSuffix": "Tage",
"expires": "abl."
},
"dayTypes": {
"weekend": "Wochenende",
"closedDay": "Feiertag",
"rtt": "RTT",
"cp": "CP",
"other": "Andere",
"today": "Heute",
"any": "Beliebig"
},
"settings": {
"title": "Einstellungen",
"description": "Einstellungen anpassen",
"showWeekNumbers": "Wochennummern anzeigen",
"close": "Schließen",
"selectLanguage": "Sprache auswählen"
},
"rules": {
"title": "Regeln",
"subtitle": "Urlaubsregeln konfigurieren",
"priorityInfo": "Regeln werden von oben nach unten angewendet",
"ifThenTemplate": "Wenn {type} dann {placement}",
"timeWindowTemplate": "Zeitfenster {startDate} bis {endDate}",
"editRule": "Regel bearbeiten",
"addRule": "Regel hinzufügen",
"place": "platzieren",
"ruleName": "Regelname",
"holidayFalls": "Feiertag fällt auf",
"days": "Tage",
"type": "Typ",
"position": "Position",
"getBonus": "Bonus erhalten",
"startDate": "Startdatum",
"endDate": "Enddatum",
"cancel": "Abbrechen",
"save": "Speichern",
"add": "Hinzufügen",
"addRuleButton": "Regel hinzufügen",
"newIfThenRule": "Neue Wenn-Dann-Regel",
"newTimeWindowRule": "Neue Zeitfenster-Regel",
"defaultNewRuleName": "Neue Regel",
"defaultNewPeriodName": "Neuer Zeitraum",
"daysOfWeek": {
"1": "Montag",
"2": "Dienstag",
"3": "Mittwoch",
"4": "Donnerstag",
"5": "Freitag",
"6": "Samstag",
"0": "Sonntag"
},
"placement": {
"before": "davor",
"after": "danach",
"around": "darum herum",
"auto": "automatisch"
}
},
"loading": "Wird geladen...",
"weekdaysShort": ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"]
}
+76
View File
@@ -0,0 +1,76 @@
{
"locale": "en-GB",
"app": {
"title": "vac-optimizer",
"description": "Optimize your vacation days based on holidays and weekends!"
},
"userInput": {
"addVacationDay": "Add a vacation day",
"calculate": "Calculate",
"remainingDaysWarning": "{count} vacation day{plural} not placed:",
"remainingDaysManualPlace": "Please place them manually.",
"chooseDate": "Choose a date",
"daySuffix": "day",
"daysSuffix": "days",
"expires": "exp."
},
"dayTypes": {
"weekend": "Weekend",
"closedDay": "Public Holiday",
"rtt": "RTT",
"cp": "Paid Leave",
"other": "Other",
"today": "Today",
"any": "Any"
},
"settings": {
"title": "Calendar Settings",
"description": "Configure your calendar settings here.",
"showWeekNumbers": "Show week numbers",
"close": "Close",
"selectLanguage": "Language"
},
"rules": {
"title": "Custom Rules",
"subtitle": "Manage optimization rules",
"priorityInfo": "The order of rules defines their execution priority (from top to bottom). Drag and drop to reorder.",
"ifThenTemplate": "If a holiday falls on a <strong>{day}</strong>, place <strong>{placeDays}</strong> day(s) <strong>{placeType}</strong> <strong>{placement}</strong> and get <strong>{rewardDays}</strong> day(s) <strong>{rewardType}</strong> as a bonus.",
"timeWindowTemplate": "Place <strong>{placeDays}</strong> day(s) <strong>{placeType}</strong> between <strong>{startDate}</strong> and <strong>{endDate}</strong>.",
"editRule": "Edit rule",
"addRule": "Add a rule",
"place": "Place",
"ruleName": "Rule name",
"holidayFalls": "Holiday falls on a",
"days": "Days",
"type": "Type",
"position": "Position",
"getBonus": "Get as bonus",
"startDate": "Start date",
"endDate": "End date",
"cancel": "Cancel",
"save": "Save",
"add": "Add",
"addRuleButton": "Add Rule",
"newIfThenRule": "New \"If ... Then\" Rule",
"newTimeWindowRule": "New Imposed Period",
"defaultNewRuleName": "New Rule",
"defaultNewPeriodName": "New Period",
"daysOfWeek": {
"1": "Monday",
"2": "Tuesday",
"3": "Wednesday",
"4": "Thursday",
"5": "Friday",
"6": "Saturday",
"0": "Sunday"
},
"placement": {
"before": "Before",
"after": "After",
"around": "Around",
"auto": "Auto (Best choice)"
}
},
"loading": "Calculating...",
"weekdaysShort": ["M", "T", "W", "T", "F", "S", "S"]
}
+76
View File
@@ -0,0 +1,76 @@
{
"locale": "es-ES",
"app": {
"title": "vac-optimizer",
"description": "¡Optimice sus días de vacaciones según los días festivos y los fines de semana!"
},
"userInput": {
"addVacationDay": "Añadir un día de vacaciones",
"calculate": "Calcular",
"remainingDaysWarning": "{count} día{plural} de vacaciones no colocado{plural}:",
"remainingDaysManualPlace": "Por favor, colóquelos manualmente.",
"chooseDate": "Elija una fecha",
"daySuffix": "día",
"daysSuffix": "días",
"expires": "exp."
},
"dayTypes": {
"weekend": "Fin de semana",
"closedDay": "Día festivo",
"rtt": "RTT",
"cp": "Vacaciones pagadas",
"other": "Otro",
"today": "Hoy",
"any": "Cualquier"
},
"settings": {
"title": "Ajustes del calendario",
"description": "Configure sus ajustes del calendario aquí.",
"showWeekNumbers": "Mostrar números de semana",
"close": "Cerrar",
"selectLanguage": "Idioma"
},
"rules": {
"title": "Reglas personalizadas",
"subtitle": "Gestionar reglas de optimización",
"priorityInfo": "El orden de las reglas define su prioridad de ejecución (de arriba a abajo). Arrastre y suelte para reorganizar.",
"ifThenTemplate": "Si un día festivo cae en <strong>{day}</strong>, colocar <strong>{placeDays}</strong> día(s) <strong>{placeType}</strong> <strong>{placement}</strong> y obtener <strong>{rewardDays}</strong> día(s) <strong>{rewardType}</strong> de bonificación.",
"timeWindowTemplate": "Colocar <strong>{placeDays}</strong> día(s) <strong>{placeType}</strong> entre el <strong>{startDate}</strong> y el <strong>{endDate}</strong>.",
"editRule": "Editar regla",
"addRule": "Añadir una regla",
"place": "Colocar",
"ruleName": "Nombre de la regla",
"holidayFalls": "Día festivo cae en",
"days": "Días",
"type": "Tipo",
"position": "Posición",
"getBonus": "Obtener en bonificación",
"startDate": "Fecha de inicio",
"endDate": "Fecha de fin",
"cancel": "Cancelar",
"save": "Guardar",
"add": "Añadir",
"addRuleButton": "Añadir",
"newIfThenRule": "Nueva regla \"Si ... Entonces\"",
"newTimeWindowRule": "Nuevo período impuesto",
"defaultNewRuleName": "Nueva regla",
"defaultNewPeriodName": "Nuevo período",
"daysOfWeek": {
"1": "Lunes",
"2": "Martes",
"3": "Miércoles",
"4": "Jueves",
"5": "Viernes",
"6": "Sábado",
"0": "Domingo"
},
"placement": {
"before": "Antes",
"after": "Después",
"around": "Alrededor",
"auto": "Auto (Mejor opción)"
}
},
"loading": "Calculando...",
"weekdaysShort": ["L", "M", "M", "J", "V", "S", "D"]
}
+76
View File
@@ -0,0 +1,76 @@
{
"locale": "fr-FR",
"app": {
"title": "vac-optimizer",
"description": "Optimisez vos jours de vacances en fonction des jours fériés et des week-ends !"
},
"userInput": {
"addVacationDay": "Ajouter un jour de vacances",
"calculate": "Calculer",
"remainingDaysWarning": "{count} jour{plural} de vacances non placé{plural}:",
"remainingDaysManualPlace": "Veuillez les placer manuellement.",
"chooseDate": "Choisissez une date",
"daySuffix": "jour",
"daysSuffix": "jours",
"expires": "exp."
},
"dayTypes": {
"weekend": "Weekend",
"closedDay": "Jour Férié",
"rtt": "RTT",
"cp": "Congé Payé",
"other": "Autre",
"today": "Aujourd'hui",
"any": "N'importe"
},
"settings": {
"title": "Paramètres du calendrier",
"description": "Configurez vos paramètres de calendrier ici.",
"showWeekNumbers": "Afficher les numéros de semaine",
"close": "Fermer",
"selectLanguage": "Langue"
},
"rules": {
"title": "Règles Personnalisées",
"subtitle": "Gérer les règles d'optimisation",
"priorityInfo": "L'ordre des règles définit leur priorité d'exécution (de haut en bas). Glissez-déposez pour réorganiser.",
"ifThenTemplate": "Si un jour férié tombe un <strong>{day}</strong>, placer <strong>{placeDays}</strong> jour(s) <strong>{placeType}</strong> <strong>{placement}</strong> et obtenir <strong>{rewardDays}</strong> jour(s) <strong>{rewardType}</strong> en bonus.",
"timeWindowTemplate": "Placer <strong>{placeDays}</strong> jour(s) <strong>{placeType}</strong> entre le <strong>{startDate}</strong> et le <strong>{endDate}</strong>.",
"editRule": "Modifier la règle",
"addRule": "Ajouter une règle",
"place": "Placer",
"ruleName": "Nom de la règle",
"holidayFalls": "Jour férié tombe un",
"days": "Jours",
"type": "Type",
"position": "Position",
"getBonus": "Obtenir en bonus",
"startDate": "Date de début",
"endDate": "Date de fin",
"cancel": "Annuler",
"save": "Enregistrer",
"add": "Ajouter",
"addRuleButton": "Ajouter",
"newIfThenRule": "Nouvelle Règle \"Si ... Alors\"",
"newTimeWindowRule": "Nouvelle Période Imposée",
"defaultNewRuleName": "Nouvelle Règle",
"defaultNewPeriodName": "Nouvelle Période",
"daysOfWeek": {
"1": "Lundi",
"2": "Mardi",
"3": "Mercredi",
"4": "Jeudi",
"5": "Vendredi",
"6": "Samedi",
"0": "Dimanche"
},
"placement": {
"before": "Avant",
"after": "Après",
"around": "Autour",
"auto": "Auto (Meilleur choix)"
}
},
"loading": "Calcul en cours...",
"weekdaysShort": ["L", "M", "M", "J", "V", "S", "D"]
}