Add rules language support and improve password validation across the app

This commit is contained in:
Jan Meinl
2026-05-17 05:57:20 +02:00
parent 68034dea7d
commit 570272a777
16 changed files with 330 additions and 77 deletions
+30 -16
View File
@@ -16,7 +16,9 @@ const I18N_DATA = {
pilots: "Pilots", penalties: "Penalties", members: "Members", rules: "Rules",
settings_tab: "Settings",
number: "Number", last_name: "Last name", first_name: "First name",
country: "Country", balloon_id: "Balloon ID",
country: "Country", balloon_id: "Registration",
rules_language: "Rules language",
rules_language_hint: "Language of rule texts loaded for this competition (UI language stays per user)",
add_pilot: "Add pilot", import_csv: "Import CSV", export_csv: "Export CSV",
flight: "Flight", date: "Date", pilot_number: "Pilot No.",
pilot_name: "Pilot name", rule: "Rule", task: "Task",
@@ -33,7 +35,7 @@ const I18N_DATA = {
display_name: "Display name", is_admin: "Admin",
allow_any_scorer_edit: "Allow any scorer to edit penalties",
open: "Open", back: "Back", change_password: "Change password",
new_password: "New password", csv_paste: "Paste CSV (number,last,first,country,balloon)",
new_password: "New password", csv_paste: "Paste CSV (number,last,first,country,registration)",
no_pilots: "No pilots yet", no_penalties: "No penalties yet",
no_members: "No members yet", no_competitions: "No competitions",
select_pilot: "Select pilot", rule_number_short: "Rule No.",
@@ -71,7 +73,7 @@ const I18N_DATA = {
filter_applied: "Applied only",
total: "Total", open: "Open",
repeat_password: "Repeat password",
password_too_short: "Password must be at least 6 characters",
password_too_short: "Password must be at least 8 characters",
passwords_dont_match: "Passwords do not match",
too_many_attempts: "Too many login attempts — please wait a few minutes",
profile_username_readonly: "Username can only be changed by a system administrator",
@@ -107,7 +109,9 @@ const I18N_DATA = {
pilots: "Piloten", penalties: "Strafen", members: "Mitglieder", rules: "Regeln",
settings_tab: "Einstellungen",
number: "Nummer", last_name: "Nachname", first_name: "Vorname",
country: "Land", balloon_id: "Ballon-Kennung",
country: "Land", balloon_id: "Registration",
rules_language: "Sprache der Regeln",
rules_language_hint: "Sprache der Regeltexte für diesen Wettbewerb (Bedienoberfläche bleibt pro Benutzer)",
add_pilot: "Pilot hinzufügen", import_csv: "CSV importieren", export_csv: "CSV exportieren",
flight: "Fahrt", date: "Datum", pilot_number: "Pilot-Nr.",
pilot_name: "Pilotenname", rule: "Regel", task: "Aufgabe",
@@ -124,7 +128,7 @@ const I18N_DATA = {
display_name: "Anzeigename", is_admin: "Admin",
allow_any_scorer_edit: "Alle Scorer dürfen Strafen bearbeiten",
open: "Öffnen", back: "Zurück", change_password: "Passwort ändern",
new_password: "Neues Passwort", csv_paste: "CSV einfügen (Nr,Nachname,Vorname,Land,Ballon)",
new_password: "Neues Passwort", csv_paste: "CSV einfügen (Nr,Nachname,Vorname,Land,Registration)",
no_pilots: "Noch keine Piloten", no_penalties: "Noch keine Strafen",
no_members: "Noch keine Mitglieder", no_competitions: "Keine Wettbewerbe",
select_pilot: "Pilot wählen", rule_number_short: "Regel-Nr.",
@@ -162,7 +166,7 @@ const I18N_DATA = {
filter_applied: "Nur angewendete",
total: "Gesamt", open: "Offen",
repeat_password: "Passwort wiederholen",
password_too_short: "Passwort muss mindestens 6 Zeichen lang sein",
password_too_short: "Passwort muss mindestens 8 Zeichen lang sein",
passwords_dont_match: "Passwörter stimmen nicht überein",
too_many_attempts: "Zu viele Anmeldeversuche — bitte ein paar Minuten warten",
profile_username_readonly: "Der Benutzername kann nur vom Systemadministrator geändert werden",
@@ -198,7 +202,9 @@ const I18N_DATA = {
pilots: "Piloci", penalties: "Kary", members: "Członkowie", rules: "Zasady",
settings_tab: "Ustawienia",
number: "Numer", last_name: "Nazwisko", first_name: "Imię",
country: "Kraj", balloon_id: "Oznaczenie balonu",
country: "Kraj", balloon_id: "Registration",
rules_language: "Język zasad",
rules_language_hint: "Język tekstu zasad dla tych zawodów (język interfejsu pozostaje per użytkownik)",
add_pilot: "Dodaj pilota", import_csv: "Import CSV", export_csv: "Eksport CSV",
flight: "Lot", date: "Data", pilot_number: "Nr pilota",
pilot_name: "Imię i nazwisko", rule: "Zasada", task: "Zadanie",
@@ -215,7 +221,7 @@ const I18N_DATA = {
display_name: "Wyświetlana nazwa", is_admin: "Admin",
allow_any_scorer_edit: "Pozwól dowolnemu scorerowi edytować kary",
open: "Otwórz", back: "Wstecz", change_password: "Zmień hasło",
new_password: "Nowe hasło", csv_paste: "Wklej CSV (nr,nazwisko,imię,kraj,balon)",
new_password: "Nowe hasło", csv_paste: "Wklej CSV (nr,nazwisko,imię,kraj,registration)",
no_pilots: "Brak pilotów", no_penalties: "Brak kar",
no_members: "Brak członków", no_competitions: "Brak zawodów",
select_pilot: "Wybierz pilota", rule_number_short: "Nr zasady",
@@ -238,7 +244,9 @@ const I18N_DATA = {
pilots: "Пилоты", penalties: "Штрафы", members: "Участники", rules: "Правила",
settings_tab: "Настройки",
number: "Номер", last_name: "Фамилия", first_name: "Имя",
country: "Страна", balloon_id: "Регистрация шара",
country: "Страна", balloon_id: "Registration",
rules_language: "Язык правил",
rules_language_hint: "Язык текстов правил для этого соревнования (язык интерфейса — индивидуальный)",
add_pilot: "Добавить пилота", import_csv: "Импорт CSV", export_csv: "Экспорт CSV",
flight: "Полёт", date: "Дата", pilot_number: "№ пилота",
pilot_name: "Имя пилота", rule: "Правило", task: "Задание",
@@ -255,7 +263,7 @@ const I18N_DATA = {
display_name: "Отображаемое имя", is_admin: "Админ",
allow_any_scorer_edit: "Любой Scorer может редактировать штрафы",
open: "Открыть", back: "Назад", change_password: "Изменить пароль",
new_password: "Новый пароль", csv_paste: "Вставьте CSV (№,фамилия,имя,страна,шар)",
new_password: "Новый пароль", csv_paste: "Вставьте CSV (№,фамилия,имя,страна,registration)",
no_pilots: "Нет пилотов", no_penalties: "Нет штрафов",
no_members: "Нет участников", no_competitions: "Нет соревнований",
select_pilot: "Выберите пилота", rule_number_short: "№ правила",
@@ -278,7 +286,9 @@ const I18N_DATA = {
pilots: "Pilotes", penalties: "Pénalités", members: "Membres", rules: "Règles",
settings_tab: "Paramètres",
number: "Numéro", last_name: "Nom", first_name: "Prénom",
country: "Pays", balloon_id: "Immat. ballon",
country: "Pays", balloon_id: "Registration",
rules_language: "Langue des règles",
rules_language_hint: "Langue des textes de règles pour cette compétition (la langue de l'interface reste par utilisateur)",
add_pilot: "Ajouter un pilote", import_csv: "Importer CSV", export_csv: "Exporter CSV",
flight: "Vol", date: "Date", pilot_number: "N° pilote",
pilot_name: "Nom du pilote", rule: "Règle", task: "Épreuve",
@@ -295,7 +305,7 @@ const I18N_DATA = {
display_name: "Nom affiché", is_admin: "Admin",
allow_any_scorer_edit: "Tous les scorers peuvent modifier les pénalités",
open: "Ouvrir", back: "Retour", change_password: "Changer le mot de passe",
new_password: "Nouveau mot de passe", csv_paste: "Coller CSV (n°,nom,prénom,pays,ballon)",
new_password: "Nouveau mot de passe", csv_paste: "Coller CSV (n°,nom,prénom,pays,registration)",
no_pilots: "Aucun pilote", no_penalties: "Aucune pénalité",
no_members: "Aucun membre", no_competitions: "Aucune compétition",
select_pilot: "Choisir un pilote", rule_number_short: "N° règle",
@@ -318,7 +328,9 @@ const I18N_DATA = {
pilots: "Pilotos", penalties: "Penalizaciones", members: "Miembros", rules: "Reglas",
settings_tab: "Ajustes",
number: "Número", last_name: "Apellido", first_name: "Nombre",
country: "País", balloon_id: "Matrícula globo",
country: "País", balloon_id: "Registration",
rules_language: "Idioma de las reglas",
rules_language_hint: "Idioma de los textos de reglas para esta competición (el idioma de la interfaz se mantiene por usuario)",
add_pilot: "Añadir piloto", import_csv: "Importar CSV", export_csv: "Exportar CSV",
flight: "Vuelo", date: "Fecha", pilot_number: "N.º piloto",
pilot_name: "Nombre piloto", rule: "Regla", task: "Tarea",
@@ -335,7 +347,7 @@ const I18N_DATA = {
display_name: "Nombre mostrado", is_admin: "Admin",
allow_any_scorer_edit: "Cualquier scorer puede editar penalizaciones",
open: "Abrir", back: "Atrás", change_password: "Cambiar contraseña",
new_password: "Nueva contraseña", csv_paste: "Pegar CSV (n.º,apellido,nombre,país,globo)",
new_password: "Nueva contraseña", csv_paste: "Pegar CSV (n.º,apellido,nombre,país,registration)",
no_pilots: "Sin pilotos", no_penalties: "Sin penalizaciones",
no_members: "Sin miembros", no_competitions: "Sin competiciones",
select_pilot: "Elegir piloto", rule_number_short: "N.º regla",
@@ -358,7 +370,9 @@ const I18N_DATA = {
pilots: "Pilotos", penalties: "Penalizações", members: "Membros", rules: "Regras",
settings_tab: "Definições",
number: "Número", last_name: "Apelido", first_name: "Nome",
country: "País", balloon_id: "Matrícula balão",
country: "País", balloon_id: "Registration",
rules_language: "Idioma das regras",
rules_language_hint: "Idioma dos textos das regras desta competição (o idioma da interface mantém-se por utilizador)",
add_pilot: "Adicionar piloto", import_csv: "Importar CSV", export_csv: "Exportar CSV",
flight: "Voo", date: "Data", pilot_number: "N.º piloto",
pilot_name: "Nome do piloto", rule: "Regra", task: "Tarefa",
@@ -375,7 +389,7 @@ const I18N_DATA = {
display_name: "Nome mostrado", is_admin: "Admin",
allow_any_scorer_edit: "Qualquer scorer pode editar penalizações",
open: "Abrir", back: "Voltar", change_password: "Alterar palavra-passe",
new_password: "Nova palavra-passe", csv_paste: "Colar CSV (n.º,apelido,nome,país,balão)",
new_password: "Nova palavra-passe", csv_paste: "Colar CSV (n.º,apelido,nome,país,registration)",
no_pilots: "Sem pilotos", no_penalties: "Sem penalizações",
no_members: "Sem membros", no_competitions: "Sem competições",
select_pilot: "Escolher piloto", rule_number_short: "N.º regra",