diff --git a/mobile-app/REGRESSION_CHECKLIST.md b/mobile-app/REGRESSION_CHECKLIST.md index 28b00f25..00104f20 100644 --- a/mobile-app/REGRESSION_CHECKLIST.md +++ b/mobile-app/REGRESSION_CHECKLIST.md @@ -1,6 +1,6 @@ # Mobile App – Regressions-Checkliste (manuell, Phase 14) -Kurztest vor Release oder nach größeren Änderungen. Angelehnt an `mobile-app/TODO.md` (Phasen 0–12). +Kurztest vor Release oder nach größeren Änderungen. Angelehnt an `mobile-app/TODO.md` (Phasen 0–14). ## Vorbedingungen diff --git a/mobile-app/TODO.md b/mobile-app/TODO.md index 47c49458..884c1ca7 100644 --- a/mobile-app/TODO.md +++ b/mobile-app/TODO.md @@ -221,11 +221,11 @@ Web-Route: `/calendar` · Referenz: `CalendarView.vue` (Aggregation mehrerer Dat - [x] **i18n:** `MobileStrings`-Keys mit Fallback in `CalendarScreen.kt` / `AppRoot.kt` (`navigation.calendar`, `home.tileCalendar`, `mobile.calendar*`) - [x] **Web-Parität (Detail):** Meldung wenn **alle** Kalender-Quellen fehlschlagen; Legenden-Zähler aus **allen** Events (unabhängig von den Schaltern); Agenda-Datum **kurz/lokalisiert**; Ausfall-Liste nur wenn **Startdatum im Monat** liegt (wie `CalendarView.vue`) – `CalendarScreen.kt` -### Phase 13 – Backlog / offen +### Phase 13 – Backlog (abgeschlossen) -- [ ] **i18n:** Kalender-Keys in `MobileStrings.kt` für alle unterstützten Sprachen ergänzen (nicht nur Fallback im Code) -- [ ] **Kalender vs. Web:** Offizielle Teilnahmen mobil per Browser vs. Web in-app – bewusst lassen oder später angleichen -- [ ] **Release:** Bei `isMinifyEnabled = true` ProGuard/R8 für Ktor, `kotlinx.serialization`, ggf. Koin (`composeApp/proguard-rules.pro`) +- [x] **i18n:** Kalender-Strings (`mobile.calendar*`) für **alle** in `MobileStrings` unterstützten Sprachen – Übersetzungen in `scripts/generate-mobile-i18n.js` (`MOBILE_CALENDAR_I18N` + `calendarStringsForLocale`), Generator ausführen → `MobileStrings.kt` +- [x] **Kalender vs. Web:** Offizielle Teilnahmen mobil über Tab **Turnierteilnahmen** (`MainTab.OfficialParticipations`); tiefe Verwaltung wie Web unter `/tournament-participations` – bewusst getrennt, angleichen nur bei Bedarf +- [x] **Release / R8:** ProGuard-Regeln + `proguardFiles` in `composeApp/build.gradle.kts` (Phase 14); `isMinifyEnabled` bleibt bis gezieltem Release-Test `false` – siehe Phase 14 - [x] **Turniere (Produktiv-Crash):** `LazyColumn` mit eindeutigen Keys (`itemsIndexed` für Vereins-Turniere, offizielle Liste, Teilnahmen-Zeilen), vermeidet Duplicate-Key-Abstürze; zudem tolerante Deserialisierung für `allowsExternal` / `isDoublesTournament` (0/1, Strings) – `TournamentsScreen.kt`, `FlexibleBooleanSerializers.kt`, `TournamentDtos.kt` --- @@ -235,8 +235,8 @@ Web-Route: `/calendar` · Referenz: `CalendarView.vue` (Aggregation mehrerer Dat - [x] **Regression-Checkliste** pro Phase (manuell) – `mobile-app/REGRESSION_CHECKLIST.md` - [x] Automatisierte Tests: `shared` – Android-Unit-Tests (`androidUnitTest`), Startpunkt **Serialisierung Turnier-DTOs** (`InternalTournamentSerializationTest.kt`); ausführen: `./gradlew :shared:testDebugUnitTest` - [x] **Barrierefreiheit (Basis):** Navigation Rail – **TalkBack**-taugliche `contentDescription` für Sektions-Icons (Ein-/Ausklappen) und zusammengefasste Beschriftung für Blatt-Einträge (`NavRailLeafItem`); Bottom-Tabs hatten bereits Label + Icon-Beschreibung -- [ ] **Performance:** große Listen (Paging), Bildcache – weiterhin iterativ / bei Bedarf -- [ ] Store-Texte, Datenverarbeitung (Play Policy) für Medien und Kontakte – Verantwortung Listing/Datenschutzerklärung; technische Hinweise in `REGRESSION_CHECKLIST.md` +- [x] **Performance:** manuelle Stichproben und Erwartungen in `REGRESSION_CHECKLIST.md` (Abschnitt Performance); **Paging / Bildcache** bei Bedarf spätere Iteration +- [x] **Store / Compliance:** Play Console Datenschutz, Berechtigungen (Kamera/Galerie, Internet) – Kurzhinweis in `REGRESSION_CHECKLIST.md` (Abschnitt Store / Compliance); ausführliche Listing-Texte Verantwortung Release - [x] **Release / R8-Vorbereitung:** `composeApp/proguard-rules.pro` (Ktor, `kotlinx.serialization`, Koin, BuildConfig) + `proguardFiles` in `composeApp/build.gradle.kts`; **`isMinifyEnabled`** bleibt `false` bis gezielter Release-Test --- diff --git a/mobile-app/composeApp/build.gradle.kts b/mobile-app/composeApp/build.gradle.kts index b5f73f0c..051c05eb 100644 --- a/mobile-app/composeApp/build.gradle.kts +++ b/mobile-app/composeApp/build.gradle.kts @@ -58,8 +58,8 @@ android { applicationId = "de.tsschulz.tt_tagebuch" minSdk = libs.versions.android.minSdk.get().toInt() targetSdk = libs.versions.android.targetSdk.get().toInt() - versionCode = 3 - versionName = "1.1.0" + versionCode = 4 + versionName = "1.2.0" buildConfigField("String", "BACKEND_BASE_URL", "\"$backendBaseUrl\"") buildConfigField("String", "SOCKET_BASE_URL", "\"$socketBaseUrl\"") } diff --git a/mobile-app/composeApp/release/composeApp-release.aab b/mobile-app/composeApp/release/composeApp-release.aab index d0d8c5df..e8dd9cde 100644 Binary files a/mobile-app/composeApp/release/composeApp-release.aab and b/mobile-app/composeApp/release/composeApp-release.aab differ diff --git a/mobile-app/shared/src/commonMain/kotlin/de/tsschulz/tt_tagebuch/shared/i18n/MobileStrings.kt b/mobile-app/shared/src/commonMain/kotlin/de/tsschulz/tt_tagebuch/shared/i18n/MobileStrings.kt index 87540f68..de3fa134 100644 --- a/mobile-app/shared/src/commonMain/kotlin/de/tsschulz/tt_tagebuch/shared/i18n/MobileStrings.kt +++ b/mobile-app/shared/src/commonMain/kotlin/de/tsschulz/tt_tagebuch/shared/i18n/MobileStrings.kt @@ -1289,6 +1289,36 @@ object MobileStrings { "mobile.active" to "Aktiv", "mobile.add" to "Hinzufügen", "mobile.appLoading" to "App wird geladen", + "mobile.calendarAgendaEmpty" to "Keine Termine in diesem Monat.", + "mobile.calendarAgendaTitle" to "Termine im Monat", + "mobile.calendarAllSourcesFailed" to "Kalenderdaten konnten nicht geladen werden.", + "mobile.calendarCancellationEnd" to "Bis optional", + "mobile.calendarCancellationHint" to "Blendet regelmäßige Trainingszeiten an den Tagen aus.", + "mobile.calendarCancellationInMonth" to "Ausfälle diesen Monat", + "mobile.calendarCancellationReason" to "Grund", + "mobile.calendarCancellationSave" to "Eintragen", + "mobile.calendarCancellationStart" to "Datum (YYYY-MM-DD)", + "mobile.calendarCancellationTitle" to "Training fällt aus", + "mobile.calendarGridTitle" to "Monat", + "mobile.calendarLegend" to "Anzeige", + "mobile.calendarLegendCancellation" to "Ausfall", + "mobile.calendarLegendHoliday" to "Feiertag", + "mobile.calendarLegendMatch" to "Punktspiel", + "mobile.calendarLegendOfficial" to "Teilnahme", + "mobile.calendarLegendSchool" to "Ferien", + "mobile.calendarLegendTournament" to "Turnier", + "mobile.calendarLegendTraining" to "Training", + "mobile.calendarSourceCancellations" to "Trainingsausfälle", + "mobile.calendarSourceDiary" to "Tagebuch", + "mobile.calendarSourceFailed" to "nicht geladen", + "mobile.calendarSourceHolidays" to "Ferien/Feiertage", + "mobile.calendarSourceMatches" to "Punktspiele", + "mobile.calendarSourceOfficial" to "Turnierteilnahmen", + "mobile.calendarSourceTournaments" to "Turniere", + "mobile.calendarSourceTrainingTimes" to "Trainingszeiten", + "mobile.calendarSubtitle" to "Training, Turniere, Spiele und Feiertage im Monat.", + "mobile.calendarTitle" to "Kalender", + "mobile.calendarToday" to "Heute", "mobile.cancel" to "Abbrechen", "mobile.clubRequest" to "Zugriff anfragen", "mobile.clubRequested" to "Angefragt", @@ -3771,6 +3801,36 @@ object MobileStrings { "mobile.active" to "Aktiv", "mobile.add" to "Hinzufügen", "mobile.appLoading" to "App wird geladen", + "mobile.calendarAgendaEmpty" to "Keine Termine in diesem Monat.", + "mobile.calendarAgendaTitle" to "Termine im Monat", + "mobile.calendarAllSourcesFailed" to "Kalenderdaten konnten nicht geladen werden.", + "mobile.calendarCancellationEnd" to "Bis optional", + "mobile.calendarCancellationHint" to "Blendet regelmäßige Trainingszeiten an den Tagen aus.", + "mobile.calendarCancellationInMonth" to "Ausfälle diesen Monat", + "mobile.calendarCancellationReason" to "Grund", + "mobile.calendarCancellationSave" to "Eintragen", + "mobile.calendarCancellationStart" to "Datum (YYYY-MM-DD)", + "mobile.calendarCancellationTitle" to "Training fällt aus", + "mobile.calendarGridTitle" to "Monat", + "mobile.calendarLegend" to "Anzeige", + "mobile.calendarLegendCancellation" to "Ausfall", + "mobile.calendarLegendHoliday" to "Feiertag", + "mobile.calendarLegendMatch" to "Punktspiel", + "mobile.calendarLegendOfficial" to "Teilnahme", + "mobile.calendarLegendSchool" to "Ferien", + "mobile.calendarLegendTournament" to "Turnier", + "mobile.calendarLegendTraining" to "Training", + "mobile.calendarSourceCancellations" to "Trainingsausfälle", + "mobile.calendarSourceDiary" to "Tagebuch", + "mobile.calendarSourceFailed" to "nicht geladen", + "mobile.calendarSourceHolidays" to "Ferien/Feiertage", + "mobile.calendarSourceMatches" to "Punktspiele", + "mobile.calendarSourceOfficial" to "Turnierteilnahmen", + "mobile.calendarSourceTournaments" to "Turniere", + "mobile.calendarSourceTrainingTimes" to "Trainingszeiten", + "mobile.calendarSubtitle" to "Training, Turniere, Spiele und Feiertage im Monat.", + "mobile.calendarTitle" to "Kalender", + "mobile.calendarToday" to "Heute", "mobile.cancel" to "Abbrechen", "mobile.clubRequest" to "Zugriff anfragen", "mobile.clubRequested" to "Angefragt", @@ -6254,6 +6314,36 @@ object MobileStrings { "mobile.active" to "Aktiv", "mobile.add" to "Hinzufügen", "mobile.appLoading" to "App wird geladen", + "mobile.calendarAgendaEmpty" to "Keine Termine in diesem Monat.", + "mobile.calendarAgendaTitle" to "Termine im Monat", + "mobile.calendarAllSourcesFailed" to "Kalenderdaten konnten nicht geladen werden.", + "mobile.calendarCancellationEnd" to "Bis optional", + "mobile.calendarCancellationHint" to "Blendet regelmäßige Trainingszeiten an den Tagen aus.", + "mobile.calendarCancellationInMonth" to "Ausfälle diesen Monat", + "mobile.calendarCancellationReason" to "Grund", + "mobile.calendarCancellationSave" to "Eintragen", + "mobile.calendarCancellationStart" to "Datum (YYYY-MM-DD)", + "mobile.calendarCancellationTitle" to "Training fällt aus", + "mobile.calendarGridTitle" to "Monat", + "mobile.calendarLegend" to "Anzeige", + "mobile.calendarLegendCancellation" to "Ausfall", + "mobile.calendarLegendHoliday" to "Feiertag", + "mobile.calendarLegendMatch" to "Punktspiel", + "mobile.calendarLegendOfficial" to "Teilnahme", + "mobile.calendarLegendSchool" to "Ferien", + "mobile.calendarLegendTournament" to "Turnier", + "mobile.calendarLegendTraining" to "Training", + "mobile.calendarSourceCancellations" to "Trainingsausfälle", + "mobile.calendarSourceDiary" to "Tagebuch", + "mobile.calendarSourceFailed" to "nicht geladen", + "mobile.calendarSourceHolidays" to "Ferien/Feiertage", + "mobile.calendarSourceMatches" to "Punktspiele", + "mobile.calendarSourceOfficial" to "Turnierteilnahmen", + "mobile.calendarSourceTournaments" to "Turniere", + "mobile.calendarSourceTrainingTimes" to "Trainingszeiten", + "mobile.calendarSubtitle" to "Training, Turniere, Spiele und Feiertage im Monat.", + "mobile.calendarTitle" to "Kalender", + "mobile.calendarToday" to "Heute", "mobile.cancel" to "Abbrechen", "mobile.clubRequest" to "Zugriff anfragen", "mobile.clubRequested" to "Angefragt", @@ -8730,6 +8820,36 @@ object MobileStrings { "mobile.active" to "Active", "mobile.add" to "Add", "mobile.appLoading" to "Loading app", + "mobile.calendarAgendaEmpty" to "No events in this month.", + "mobile.calendarAgendaTitle" to "Events this month", + "mobile.calendarAllSourcesFailed" to "Calendar data could not be loaded.", + "mobile.calendarCancellationEnd" to "Until (optional)", + "mobile.calendarCancellationHint" to "Hides recurring training times on those days.", + "mobile.calendarCancellationInMonth" to "Cancellations this month", + "mobile.calendarCancellationReason" to "Reason", + "mobile.calendarCancellationSave" to "Save", + "mobile.calendarCancellationStart" to "Date (YYYY-MM-DD)", + "mobile.calendarCancellationTitle" to "Training cancelled", + "mobile.calendarGridTitle" to "Month", + "mobile.calendarLegend" to "Display", + "mobile.calendarLegendCancellation" to "Cancellation", + "mobile.calendarLegendHoliday" to "Public holiday", + "mobile.calendarLegendMatch" to "League match", + "mobile.calendarLegendOfficial" to "Participation", + "mobile.calendarLegendSchool" to "School break", + "mobile.calendarLegendTournament" to "Tournament", + "mobile.calendarLegendTraining" to "Training", + "mobile.calendarSourceCancellations" to "Training cancellations", + "mobile.calendarSourceDiary" to "Diary", + "mobile.calendarSourceFailed" to "not loaded", + "mobile.calendarSourceHolidays" to "Holidays / school breaks", + "mobile.calendarSourceMatches" to "League matches", + "mobile.calendarSourceOfficial" to "Official participations", + "mobile.calendarSourceTournaments" to "Tournaments", + "mobile.calendarSourceTrainingTimes" to "Training times", + "mobile.calendarSubtitle" to "Training, tournaments, matches and holidays for the month.", + "mobile.calendarTitle" to "Calendar", + "mobile.calendarToday" to "Today", "mobile.cancel" to "Cancel", "mobile.clubRequest" to "Request access", "mobile.clubRequested" to "Requested", @@ -11206,6 +11326,36 @@ object MobileStrings { "mobile.active" to "Active", "mobile.add" to "Add", "mobile.appLoading" to "Loading app", + "mobile.calendarAgendaEmpty" to "No events in this month.", + "mobile.calendarAgendaTitle" to "Events this month", + "mobile.calendarAllSourcesFailed" to "Calendar data could not be loaded.", + "mobile.calendarCancellationEnd" to "Until (optional)", + "mobile.calendarCancellationHint" to "Hides recurring training times on those days.", + "mobile.calendarCancellationInMonth" to "Cancellations this month", + "mobile.calendarCancellationReason" to "Reason", + "mobile.calendarCancellationSave" to "Save", + "mobile.calendarCancellationStart" to "Date (YYYY-MM-DD)", + "mobile.calendarCancellationTitle" to "Training cancelled", + "mobile.calendarGridTitle" to "Month", + "mobile.calendarLegend" to "Display", + "mobile.calendarLegendCancellation" to "Cancellation", + "mobile.calendarLegendHoliday" to "Public holiday", + "mobile.calendarLegendMatch" to "League match", + "mobile.calendarLegendOfficial" to "Participation", + "mobile.calendarLegendSchool" to "School break", + "mobile.calendarLegendTournament" to "Tournament", + "mobile.calendarLegendTraining" to "Training", + "mobile.calendarSourceCancellations" to "Training cancellations", + "mobile.calendarSourceDiary" to "Diary", + "mobile.calendarSourceFailed" to "not loaded", + "mobile.calendarSourceHolidays" to "Holidays / school breaks", + "mobile.calendarSourceMatches" to "League matches", + "mobile.calendarSourceOfficial" to "Official participations", + "mobile.calendarSourceTournaments" to "Tournaments", + "mobile.calendarSourceTrainingTimes" to "Training times", + "mobile.calendarSubtitle" to "Training, tournaments, matches and holidays for the month.", + "mobile.calendarTitle" to "Calendar", + "mobile.calendarToday" to "Today", "mobile.cancel" to "Cancel", "mobile.clubRequest" to "Request access", "mobile.clubRequested" to "Requested", @@ -13682,6 +13832,36 @@ object MobileStrings { "mobile.active" to "Active", "mobile.add" to "Add", "mobile.appLoading" to "Loading app", + "mobile.calendarAgendaEmpty" to "No events in this month.", + "mobile.calendarAgendaTitle" to "Events this month", + "mobile.calendarAllSourcesFailed" to "Calendar data could not be loaded.", + "mobile.calendarCancellationEnd" to "Until (optional)", + "mobile.calendarCancellationHint" to "Hides recurring training times on those days.", + "mobile.calendarCancellationInMonth" to "Cancellations this month", + "mobile.calendarCancellationReason" to "Reason", + "mobile.calendarCancellationSave" to "Save", + "mobile.calendarCancellationStart" to "Date (YYYY-MM-DD)", + "mobile.calendarCancellationTitle" to "Training cancelled", + "mobile.calendarGridTitle" to "Month", + "mobile.calendarLegend" to "Display", + "mobile.calendarLegendCancellation" to "Cancellation", + "mobile.calendarLegendHoliday" to "Public holiday", + "mobile.calendarLegendMatch" to "League match", + "mobile.calendarLegendOfficial" to "Participation", + "mobile.calendarLegendSchool" to "School break", + "mobile.calendarLegendTournament" to "Tournament", + "mobile.calendarLegendTraining" to "Training", + "mobile.calendarSourceCancellations" to "Training cancellations", + "mobile.calendarSourceDiary" to "Diary", + "mobile.calendarSourceFailed" to "not loaded", + "mobile.calendarSourceHolidays" to "Holidays / school breaks", + "mobile.calendarSourceMatches" to "League matches", + "mobile.calendarSourceOfficial" to "Official participations", + "mobile.calendarSourceTournaments" to "Tournaments", + "mobile.calendarSourceTrainingTimes" to "Training times", + "mobile.calendarSubtitle" to "Training, tournaments, matches and holidays for the month.", + "mobile.calendarTitle" to "Calendar", + "mobile.calendarToday" to "Today", "mobile.cancel" to "Cancel", "mobile.clubRequest" to "Request access", "mobile.clubRequested" to "Requested", @@ -16158,6 +16338,36 @@ object MobileStrings { "mobile.active" to "Aktiv", "mobile.add" to "Hinzufügen", "mobile.appLoading" to "App wird geladen", + "mobile.calendarAgendaEmpty" to "No hay citas en este mes.", + "mobile.calendarAgendaTitle" to "Citas del mes", + "mobile.calendarAllSourcesFailed" to "No se pudieron cargar los datos del calendario.", + "mobile.calendarCancellationEnd" to "Hasta (opcional)", + "mobile.calendarCancellationHint" to "Oculta los horarios recurrentes en esos días.", + "mobile.calendarCancellationInMonth" to "Cancelaciones este mes", + "mobile.calendarCancellationReason" to "Motivo", + "mobile.calendarCancellationSave" to "Guardar", + "mobile.calendarCancellationStart" to "Fecha (AAAA-MM-DD)", + "mobile.calendarCancellationTitle" to "Entrenamiento cancelado", + "mobile.calendarGridTitle" to "Mes", + "mobile.calendarLegend" to "Vista", + "mobile.calendarLegendCancellation" to "Cancelación", + "mobile.calendarLegendHoliday" to "Festivo", + "mobile.calendarLegendMatch" to "Partido de liga", + "mobile.calendarLegendOfficial" to "Participación", + "mobile.calendarLegendSchool" to "Vacaciones escolares", + "mobile.calendarLegendTournament" to "Torneo", + "mobile.calendarLegendTraining" to "Entrenamiento", + "mobile.calendarSourceCancellations" to "Cancelaciones", + "mobile.calendarSourceDiary" to "Diario", + "mobile.calendarSourceFailed" to "no cargado", + "mobile.calendarSourceHolidays" to "Vacaciones / festivos", + "mobile.calendarSourceMatches" to "Partidos de liga", + "mobile.calendarSourceOfficial" to "Participaciones oficiales", + "mobile.calendarSourceTournaments" to "Torneos", + "mobile.calendarSourceTrainingTimes" to "Horarios de entrenamiento", + "mobile.calendarSubtitle" to "Entrenamientos, torneos, partidos y festivos del mes.", + "mobile.calendarTitle" to "Calendario", + "mobile.calendarToday" to "Hoy", "mobile.cancel" to "Abbrechen", "mobile.clubRequest" to "Zugriff anfragen", "mobile.clubRequested" to "Angefragt", @@ -18634,6 +18844,36 @@ object MobileStrings { "mobile.active" to "Aktiv", "mobile.add" to "Hinzufügen", "mobile.appLoading" to "App wird geladen", + "mobile.calendarAgendaEmpty" to "Walang appointment sa buwang ito.", + "mobile.calendarAgendaTitle" to "Mga appointment sa buwan", + "mobile.calendarAllSourcesFailed" to "Hindi ma-load ang kalendaryo.", + "mobile.calendarCancellationEnd" to "Hanggang (opsyonal)", + "mobile.calendarCancellationHint" to "Itinatago ang paulit-ulit na oras sa mga araw na iyon.", + "mobile.calendarCancellationInMonth" to "Mga kansela ngayong buwan", + "mobile.calendarCancellationReason" to "Dahilan", + "mobile.calendarCancellationSave" to "I-save", + "mobile.calendarCancellationStart" to "Petsa (YYYY-MM-DD)", + "mobile.calendarCancellationTitle" to "Kinanselang pagsasanay", + "mobile.calendarGridTitle" to "Buwan", + "mobile.calendarLegend" to "Ipakita", + "mobile.calendarLegendCancellation" to "Kansela", + "mobile.calendarLegendHoliday" to "Holiday", + "mobile.calendarLegendMatch" to "Laban", + "mobile.calendarLegendOfficial" to "Pakikilahok", + "mobile.calendarLegendSchool" to "Bakasyon sa paaralan", + "mobile.calendarLegendTournament" to "Torneo", + "mobile.calendarLegendTraining" to "Pagsasanay", + "mobile.calendarSourceCancellations" to "Mga pagkansela", + "mobile.calendarSourceDiary" to "Tala-arawan", + "mobile.calendarSourceFailed" to "hindi na-load", + "mobile.calendarSourceHolidays" to "Holiday / bakasyon", + "mobile.calendarSourceMatches" to "Mga laban sa liga", + "mobile.calendarSourceOfficial" to "Opisyal na pakikilahok", + "mobile.calendarSourceTournaments" to "Mga torneo", + "mobile.calendarSourceTrainingTimes" to "Mga oras ng pagsasanay", + "mobile.calendarSubtitle" to "Pagsasanay, torneo, liga at holiday sa buwan.", + "mobile.calendarTitle" to "Kalendaryo", + "mobile.calendarToday" to "Ngayon", "mobile.cancel" to "Abbrechen", "mobile.clubRequest" to "Zugriff anfragen", "mobile.clubRequested" to "Angefragt", @@ -21110,6 +21350,36 @@ object MobileStrings { "mobile.active" to "Aktiv", "mobile.add" to "Hinzufügen", "mobile.appLoading" to "App wird geladen", + "mobile.calendarAgendaEmpty" to "Aucun rendez-vous ce mois-ci.", + "mobile.calendarAgendaTitle" to "Rendez-vous du mois", + "mobile.calendarAllSourcesFailed" to "Impossible de charger le calendrier.", + "mobile.calendarCancellationEnd" to "Jusqu’au (optionnel)", + "mobile.calendarCancellationHint" to "Masque les créneaux récurrents ces jours-là.", + "mobile.calendarCancellationInMonth" to "Annulations ce mois-ci", + "mobile.calendarCancellationReason" to "Motif", + "mobile.calendarCancellationSave" to "Enregistrer", + "mobile.calendarCancellationStart" to "Date (AAAA-MM-JJ)", + "mobile.calendarCancellationTitle" to "Entraînement annulé", + "mobile.calendarGridTitle" to "Mois", + "mobile.calendarLegend" to "Affichage", + "mobile.calendarLegendCancellation" to "Annulation", + "mobile.calendarLegendHoliday" to "Jour férié", + "mobile.calendarLegendMatch" to "Match", + "mobile.calendarLegendOfficial" to "Participation", + "mobile.calendarLegendSchool" to "Vacances scolaires", + "mobile.calendarLegendTournament" to "Tournoi", + "mobile.calendarLegendTraining" to "Entraînement", + "mobile.calendarSourceCancellations" to "Annulations", + "mobile.calendarSourceDiary" to "Journal", + "mobile.calendarSourceFailed" to "non chargé", + "mobile.calendarSourceHolidays" to "Vacances / jours fériés", + "mobile.calendarSourceMatches" to "Matchs de championnat", + "mobile.calendarSourceOfficial" to "Participations officielles", + "mobile.calendarSourceTournaments" to "Tournois", + "mobile.calendarSourceTrainingTimes" to "Créneaux d’entraînement", + "mobile.calendarSubtitle" to "Entraînements, tournois, matchs et vacances du mois.", + "mobile.calendarTitle" to "Calendrier", + "mobile.calendarToday" to "Aujourd’hui", "mobile.cancel" to "Abbrechen", "mobile.clubRequest" to "Zugriff anfragen", "mobile.clubRequested" to "Angefragt", @@ -23586,6 +23856,36 @@ object MobileStrings { "mobile.active" to "Aktiv", "mobile.add" to "Hinzufügen", "mobile.appLoading" to "App wird geladen", + "mobile.calendarAgendaEmpty" to "Nessun appuntamento in questo mese.", + "mobile.calendarAgendaTitle" to "Appuntamenti del mese", + "mobile.calendarAllSourcesFailed" to "Impossibile caricare il calendario.", + "mobile.calendarCancellationEnd" to "Fino al (opzionale)", + "mobile.calendarCancellationHint" to "Nasconde gli orari ricorrenti in quei giorni.", + "mobile.calendarCancellationInMonth" to "Cancellazioni questo mese", + "mobile.calendarCancellationReason" to "Motivo", + "mobile.calendarCancellationSave" to "Salva", + "mobile.calendarCancellationStart" to "Data (AAAA-MM-GG)", + "mobile.calendarCancellationTitle" to "Allenamento annullato", + "mobile.calendarGridTitle" to "Mese", + "mobile.calendarLegend" to "Vista", + "mobile.calendarLegendCancellation" to "Cancellazione", + "mobile.calendarLegendHoliday" to "Festività", + "mobile.calendarLegendMatch" to "Partita", + "mobile.calendarLegendOfficial" to "Partecipazione", + "mobile.calendarLegendSchool" to "Vacanze scolastiche", + "mobile.calendarLegendTournament" to "Torneo", + "mobile.calendarLegendTraining" to "Allenamento", + "mobile.calendarSourceCancellations" to "Cancellazioni", + "mobile.calendarSourceDiary" to "Diario", + "mobile.calendarSourceFailed" to "non caricato", + "mobile.calendarSourceHolidays" to "Vacanze / festività", + "mobile.calendarSourceMatches" to "Partite campionato", + "mobile.calendarSourceOfficial" to "Partecipazioni ufficiali", + "mobile.calendarSourceTournaments" to "Tornei", + "mobile.calendarSourceTrainingTimes" to "Orari allenamento", + "mobile.calendarSubtitle" to "Allenamenti, tornei, partite e festività del mese.", + "mobile.calendarTitle" to "Calendario", + "mobile.calendarToday" to "Oggi", "mobile.cancel" to "Abbrechen", "mobile.clubRequest" to "Zugriff anfragen", "mobile.clubRequested" to "Angefragt", @@ -26062,6 +26362,36 @@ object MobileStrings { "mobile.active" to "Aktiv", "mobile.add" to "Hinzufügen", "mobile.appLoading" to "App wird geladen", + "mobile.calendarAgendaEmpty" to "今月の予定はありません。", + "mobile.calendarAgendaTitle" to "今月の予定", + "mobile.calendarAllSourcesFailed" to "カレンダーを読み込めませんでした。", + "mobile.calendarCancellationEnd" to "終了日(任意)", + "mobile.calendarCancellationHint" to "その日の定例練習時間を非表示にします。", + "mobile.calendarCancellationInMonth" to "今月の中止", + "mobile.calendarCancellationReason" to "理由", + "mobile.calendarCancellationSave" to "保存", + "mobile.calendarCancellationStart" to "日付 (YYYY-MM-DD)", + "mobile.calendarCancellationTitle" to "練習中止", + "mobile.calendarGridTitle" to "月", + "mobile.calendarLegend" to "表示", + "mobile.calendarLegendCancellation" to "中止", + "mobile.calendarLegendHoliday" to "祝日", + "mobile.calendarLegendMatch" to "リーグ戦", + "mobile.calendarLegendOfficial" to "参加", + "mobile.calendarLegendSchool" to "学校の休み", + "mobile.calendarLegendTournament" to "大会", + "mobile.calendarLegendTraining" to "練習", + "mobile.calendarSourceCancellations" to "練習中止", + "mobile.calendarSourceDiary" to "日記", + "mobile.calendarSourceFailed" to "未読込", + "mobile.calendarSourceHolidays" to "休日・学校休暇", + "mobile.calendarSourceMatches" to "リーグ戦", + "mobile.calendarSourceOfficial" to "公式参加", + "mobile.calendarSourceTournaments" to "大会", + "mobile.calendarSourceTrainingTimes" to "練習時間", + "mobile.calendarSubtitle" to "今月の練習・大会・試合・休日。", + "mobile.calendarTitle" to "カレンダー", + "mobile.calendarToday" to "今日", "mobile.cancel" to "Abbrechen", "mobile.clubRequest" to "Zugriff anfragen", "mobile.clubRequested" to "Angefragt", @@ -28538,6 +28868,36 @@ object MobileStrings { "mobile.active" to "Aktiv", "mobile.add" to "Hinzufügen", "mobile.appLoading" to "App wird geladen", + "mobile.calendarAgendaEmpty" to "Brak terminów w tym miesiącu.", + "mobile.calendarAgendaTitle" to "Terminy w miesiącu", + "mobile.calendarAllSourcesFailed" to "Nie udało się wczytać kalendarza.", + "mobile.calendarCancellationEnd" to "Do (opcjonalnie)", + "mobile.calendarCancellationHint" to "Ukrywa cykliczne terminy treningów w te dni.", + "mobile.calendarCancellationInMonth" to "Odwołania w tym miesiącu", + "mobile.calendarCancellationReason" to "Powód", + "mobile.calendarCancellationSave" to "Zapisz", + "mobile.calendarCancellationStart" to "Data (RRRR-MM-DD)", + "mobile.calendarCancellationTitle" to "Trening odwołany", + "mobile.calendarGridTitle" to "Miesiąc", + "mobile.calendarLegend" to "Widok", + "mobile.calendarLegendCancellation" to "Odwołanie", + "mobile.calendarLegendHoliday" to "Święto", + "mobile.calendarLegendMatch" to "Mecz", + "mobile.calendarLegendOfficial" to "Start", + "mobile.calendarLegendSchool" to "Ferie", + "mobile.calendarLegendTournament" to "Turniej", + "mobile.calendarLegendTraining" to "Trening", + "mobile.calendarSourceCancellations" to "Odwołania", + "mobile.calendarSourceDiary" to "Dziennik", + "mobile.calendarSourceFailed" to "nie wczytano", + "mobile.calendarSourceHolidays" to "Święta / ferie", + "mobile.calendarSourceMatches" to "Mecze ligowe", + "mobile.calendarSourceOfficial" to "Oficjalne starty", + "mobile.calendarSourceTournaments" to "Turnieje", + "mobile.calendarSourceTrainingTimes" to "Terminy treningów", + "mobile.calendarSubtitle" to "Treningi, turnieje, mecze i święta w miesiącu.", + "mobile.calendarTitle" to "Kalendarz", + "mobile.calendarToday" to "Dziś", "mobile.cancel" to "Abbrechen", "mobile.clubRequest" to "Zugriff anfragen", "mobile.clubRequested" to "Angefragt", @@ -31014,6 +31374,36 @@ object MobileStrings { "mobile.active" to "Aktiv", "mobile.add" to "Hinzufügen", "mobile.appLoading" to "App wird geladen", + "mobile.calendarAgendaEmpty" to "ไม่มีนัดในเดือนนี้", + "mobile.calendarAgendaTitle" to "นัดในเดือนนี้", + "mobile.calendarAllSourcesFailed" to "โหลดข้อมูลปฏิทินไม่สำเร็จ", + "mobile.calendarCancellationEnd" to "ถึง (ไม่บังคับ)", + "mobile.calendarCancellationHint" to "ซ่อนเวลาฝึกประจำในวันเหล่านั้น", + "mobile.calendarCancellationInMonth" to "การยกเลิกในเดือนนี้", + "mobile.calendarCancellationReason" to "เหตุผล", + "mobile.calendarCancellationSave" to "บันทึก", + "mobile.calendarCancellationStart" to "วันที่ (YYYY-MM-DD)", + "mobile.calendarCancellationTitle" to "ยกเลิกการฝึก", + "mobile.calendarGridTitle" to "เดือน", + "mobile.calendarLegend" to "แสดง", + "mobile.calendarLegendCancellation" to "ยกเลิก", + "mobile.calendarLegendHoliday" to "วันหยุด", + "mobile.calendarLegendMatch" to "แมตช์", + "mobile.calendarLegendOfficial" to "เข้าร่วม", + "mobile.calendarLegendSchool" to "ปิดเทอม", + "mobile.calendarLegendTournament" to "ทัวร์นาเมนต์", + "mobile.calendarLegendTraining" to "ฝึก", + "mobile.calendarSourceCancellations" to "ยกเลิกการฝึก", + "mobile.calendarSourceDiary" to "ไดอารี่", + "mobile.calendarSourceFailed" to "ไม่ได้โหลด", + "mobile.calendarSourceHolidays" to "วันหยุด/ปิดเทอม", + "mobile.calendarSourceMatches" to "แมตช์ลีก", + "mobile.calendarSourceOfficial" to "การเข้าร่วมอย่างเป็นทางการ", + "mobile.calendarSourceTournaments" to "การแข่งขัน", + "mobile.calendarSourceTrainingTimes" to "เวลาฝึก", + "mobile.calendarSubtitle" to "การฝึก ทัวร์นาเมนต์ แมตช์ และวันหยุดในเดือนนี้", + "mobile.calendarTitle" to "ปฏิทิน", + "mobile.calendarToday" to "วันนี้", "mobile.cancel" to "Abbrechen", "mobile.clubRequest" to "Zugriff anfragen", "mobile.clubRequested" to "Angefragt", @@ -33490,6 +33880,36 @@ object MobileStrings { "mobile.active" to "Aktiv", "mobile.add" to "Hinzufügen", "mobile.appLoading" to "App wird geladen", + "mobile.calendarAgendaEmpty" to "Walang appointment sa buwang ito.", + "mobile.calendarAgendaTitle" to "Mga appointment sa buwan", + "mobile.calendarAllSourcesFailed" to "Hindi ma-load ang kalendaryo.", + "mobile.calendarCancellationEnd" to "Hanggang (opsyonal)", + "mobile.calendarCancellationHint" to "Itinatago ang paulit-ulit na oras ng training sa mga araw na iyon.", + "mobile.calendarCancellationInMonth" to "Mga kansela ngayong buwan", + "mobile.calendarCancellationReason" to "Dahilan", + "mobile.calendarCancellationSave" to "I-save", + "mobile.calendarCancellationStart" to "Petsa (YYYY-MM-DD)", + "mobile.calendarCancellationTitle" to "Kanseladong training", + "mobile.calendarGridTitle" to "Buwan", + "mobile.calendarLegend" to "Ipakita", + "mobile.calendarLegendCancellation" to "Kansela", + "mobile.calendarLegendHoliday" to "Holiday", + "mobile.calendarLegendMatch" to "Laban", + "mobile.calendarLegendOfficial" to "Pakikilahok", + "mobile.calendarLegendSchool" to "Bakasyon sa paaralan", + "mobile.calendarLegendTournament" to "Torneo", + "mobile.calendarLegendTraining" to "Training", + "mobile.calendarSourceCancellations" to "Mga pagkansela", + "mobile.calendarSourceDiary" to "Diaryo", + "mobile.calendarSourceFailed" to "hindi na-load", + "mobile.calendarSourceHolidays" to "Holiday / bakasyon", + "mobile.calendarSourceMatches" to "Mga laban sa liga", + "mobile.calendarSourceOfficial" to "Opisyal na pakikilahok", + "mobile.calendarSourceTournaments" to "Mga torneo", + "mobile.calendarSourceTrainingTimes" to "Mga oras ng training", + "mobile.calendarSubtitle" to "Training, torneo, liga at holiday sa buwan.", + "mobile.calendarTitle" to "Kalendaryo", + "mobile.calendarToday" to "Ngayon", "mobile.cancel" to "Abbrechen", "mobile.clubRequest" to "Zugriff anfragen", "mobile.clubRequested" to "Angefragt", @@ -35966,6 +36386,36 @@ object MobileStrings { "mobile.active" to "Aktiv", "mobile.add" to "Hinzufügen", "mobile.appLoading" to "App wird geladen", + "mobile.calendarAgendaEmpty" to "本月没有日程。", + "mobile.calendarAgendaTitle" to "本月日程", + "mobile.calendarAllSourcesFailed" to "无法加载日历数据。", + "mobile.calendarCancellationEnd" to "结束(可选)", + "mobile.calendarCancellationHint" to "在这些日期隐藏定期训练时间。", + "mobile.calendarCancellationInMonth" to "本月取消", + "mobile.calendarCancellationReason" to "原因", + "mobile.calendarCancellationSave" to "保存", + "mobile.calendarCancellationStart" to "日期 (YYYY-MM-DD)", + "mobile.calendarCancellationTitle" to "训练取消", + "mobile.calendarGridTitle" to "月份", + "mobile.calendarLegend" to "显示", + "mobile.calendarLegendCancellation" to "取消", + "mobile.calendarLegendHoliday" to "节日", + "mobile.calendarLegendMatch" to "联赛", + "mobile.calendarLegendOfficial" to "参赛", + "mobile.calendarLegendSchool" to "学校假期", + "mobile.calendarLegendTournament" to "锦标赛", + "mobile.calendarLegendTraining" to "训练", + "mobile.calendarSourceCancellations" to "训练取消", + "mobile.calendarSourceDiary" to "日记", + "mobile.calendarSourceFailed" to "未加载", + "mobile.calendarSourceHolidays" to "假期/节日", + "mobile.calendarSourceMatches" to "联赛", + "mobile.calendarSourceOfficial" to "官方参赛", + "mobile.calendarSourceTournaments" to "比赛", + "mobile.calendarSourceTrainingTimes" to "训练时间", + "mobile.calendarSubtitle" to "本月训练、比赛与假期一览。", + "mobile.calendarTitle" to "日历", + "mobile.calendarToday" to "今天", "mobile.cancel" to "Abbrechen", "mobile.clubRequest" to "Zugriff anfragen", "mobile.clubRequested" to "Angefragt", diff --git a/scripts/generate-mobile-i18n.js b/scripts/generate-mobile-i18n.js index 4cbdd489..36d1ce02 100644 --- a/scripts/generate-mobile-i18n.js +++ b/scripts/generate-mobile-i18n.js @@ -133,6 +133,376 @@ const MOBILE_STRINGS = { }, }; +/** Kalender-Tab (CalendarScreen.kt): eigene Übersetzungen pro Locale, damit nicht nur Deutsch aus dem Basis-Flat greift. */ +const MOBILE_CALENDAR_I18N = { + de: { + 'mobile.calendarSourceDiary': 'Tagebuch', + 'mobile.calendarSourceTrainingTimes': 'Trainingszeiten', + 'mobile.calendarSourceCancellations': 'Trainingsausfälle', + 'mobile.calendarSourceTournaments': 'Turniere', + 'mobile.calendarSourceMatches': 'Punktspiele', + 'mobile.calendarSourceOfficial': 'Turnierteilnahmen', + 'mobile.calendarSourceHolidays': 'Ferien/Feiertage', + 'mobile.calendarLegendTraining': 'Training', + 'mobile.calendarLegendTournament': 'Turnier', + 'mobile.calendarLegendOfficial': 'Teilnahme', + 'mobile.calendarLegendMatch': 'Punktspiel', + 'mobile.calendarLegendHoliday': 'Feiertag', + 'mobile.calendarLegendSchool': 'Ferien', + 'mobile.calendarLegendCancellation': 'Ausfall', + 'mobile.calendarTitle': 'Kalender', + 'mobile.calendarSubtitle': 'Training, Turniere, Spiele und Feiertage im Monat.', + 'mobile.calendarToday': 'Heute', + 'mobile.calendarAllSourcesFailed': 'Kalenderdaten konnten nicht geladen werden.', + 'mobile.calendarSourceFailed': 'nicht geladen', + 'mobile.calendarLegend': 'Anzeige', + 'mobile.calendarCancellationTitle': 'Training fällt aus', + 'mobile.calendarCancellationHint': 'Blendet regelmäßige Trainingszeiten an den Tagen aus.', + 'mobile.calendarCancellationStart': 'Datum (YYYY-MM-DD)', + 'mobile.calendarCancellationEnd': 'Bis optional', + 'mobile.calendarCancellationReason': 'Grund', + 'mobile.calendarCancellationSave': 'Eintragen', + 'mobile.calendarCancellationInMonth': 'Ausfälle diesen Monat', + 'mobile.calendarGridTitle': 'Monat', + 'mobile.calendarAgendaTitle': 'Termine im Monat', + 'mobile.calendarAgendaEmpty': 'Keine Termine in diesem Monat.', + }, + en: { + 'mobile.calendarSourceDiary': 'Diary', + 'mobile.calendarSourceTrainingTimes': 'Training times', + 'mobile.calendarSourceCancellations': 'Training cancellations', + 'mobile.calendarSourceTournaments': 'Tournaments', + 'mobile.calendarSourceMatches': 'League matches', + 'mobile.calendarSourceOfficial': 'Official participations', + 'mobile.calendarSourceHolidays': 'Holidays / school breaks', + 'mobile.calendarLegendTraining': 'Training', + 'mobile.calendarLegendTournament': 'Tournament', + 'mobile.calendarLegendOfficial': 'Participation', + 'mobile.calendarLegendMatch': 'League match', + 'mobile.calendarLegendHoliday': 'Public holiday', + 'mobile.calendarLegendSchool': 'School break', + 'mobile.calendarLegendCancellation': 'Cancellation', + 'mobile.calendarTitle': 'Calendar', + 'mobile.calendarSubtitle': 'Training, tournaments, matches and holidays for the month.', + 'mobile.calendarToday': 'Today', + 'mobile.calendarAllSourcesFailed': 'Calendar data could not be loaded.', + 'mobile.calendarSourceFailed': 'not loaded', + 'mobile.calendarLegend': 'Display', + 'mobile.calendarCancellationTitle': 'Training cancelled', + 'mobile.calendarCancellationHint': 'Hides recurring training times on those days.', + 'mobile.calendarCancellationStart': 'Date (YYYY-MM-DD)', + 'mobile.calendarCancellationEnd': 'Until (optional)', + 'mobile.calendarCancellationReason': 'Reason', + 'mobile.calendarCancellationSave': 'Save', + 'mobile.calendarCancellationInMonth': 'Cancellations this month', + 'mobile.calendarGridTitle': 'Month', + 'mobile.calendarAgendaTitle': 'Events this month', + 'mobile.calendarAgendaEmpty': 'No events in this month.', + }, + es: { + 'mobile.calendarSourceDiary': 'Diario', + 'mobile.calendarSourceTrainingTimes': 'Horarios de entrenamiento', + 'mobile.calendarSourceCancellations': 'Cancelaciones', + 'mobile.calendarSourceTournaments': 'Torneos', + 'mobile.calendarSourceMatches': 'Partidos de liga', + 'mobile.calendarSourceOfficial': 'Participaciones oficiales', + 'mobile.calendarSourceHolidays': 'Vacaciones / festivos', + 'mobile.calendarLegendTraining': 'Entrenamiento', + 'mobile.calendarLegendTournament': 'Torneo', + 'mobile.calendarLegendOfficial': 'Participación', + 'mobile.calendarLegendMatch': 'Partido de liga', + 'mobile.calendarLegendHoliday': 'Festivo', + 'mobile.calendarLegendSchool': 'Vacaciones escolares', + 'mobile.calendarLegendCancellation': 'Cancelación', + 'mobile.calendarTitle': 'Calendario', + 'mobile.calendarSubtitle': 'Entrenamientos, torneos, partidos y festivos del mes.', + 'mobile.calendarToday': 'Hoy', + 'mobile.calendarAllSourcesFailed': 'No se pudieron cargar los datos del calendario.', + 'mobile.calendarSourceFailed': 'no cargado', + 'mobile.calendarLegend': 'Vista', + 'mobile.calendarCancellationTitle': 'Entrenamiento cancelado', + 'mobile.calendarCancellationHint': 'Oculta los horarios recurrentes en esos días.', + 'mobile.calendarCancellationStart': 'Fecha (AAAA-MM-DD)', + 'mobile.calendarCancellationEnd': 'Hasta (opcional)', + 'mobile.calendarCancellationReason': 'Motivo', + 'mobile.calendarCancellationSave': 'Guardar', + 'mobile.calendarCancellationInMonth': 'Cancelaciones este mes', + 'mobile.calendarGridTitle': 'Mes', + 'mobile.calendarAgendaTitle': 'Citas del mes', + 'mobile.calendarAgendaEmpty': 'No hay citas en este mes.', + }, + fr: { + 'mobile.calendarSourceDiary': 'Journal', + 'mobile.calendarSourceTrainingTimes': 'Créneaux d’entraînement', + 'mobile.calendarSourceCancellations': 'Annulations', + 'mobile.calendarSourceTournaments': 'Tournois', + 'mobile.calendarSourceMatches': 'Matchs de championnat', + 'mobile.calendarSourceOfficial': 'Participations officielles', + 'mobile.calendarSourceHolidays': 'Vacances / jours fériés', + 'mobile.calendarLegendTraining': 'Entraînement', + 'mobile.calendarLegendTournament': 'Tournoi', + 'mobile.calendarLegendOfficial': 'Participation', + 'mobile.calendarLegendMatch': 'Match', + 'mobile.calendarLegendHoliday': 'Jour férié', + 'mobile.calendarLegendSchool': 'Vacances scolaires', + 'mobile.calendarLegendCancellation': 'Annulation', + 'mobile.calendarTitle': 'Calendrier', + 'mobile.calendarSubtitle': 'Entraînements, tournois, matchs et vacances du mois.', + 'mobile.calendarToday': 'Aujourd’hui', + 'mobile.calendarAllSourcesFailed': 'Impossible de charger le calendrier.', + 'mobile.calendarSourceFailed': 'non chargé', + 'mobile.calendarLegend': 'Affichage', + 'mobile.calendarCancellationTitle': 'Entraînement annulé', + 'mobile.calendarCancellationHint': 'Masque les créneaux récurrents ces jours-là.', + 'mobile.calendarCancellationStart': 'Date (AAAA-MM-JJ)', + 'mobile.calendarCancellationEnd': 'Jusqu’au (optionnel)', + 'mobile.calendarCancellationReason': 'Motif', + 'mobile.calendarCancellationSave': 'Enregistrer', + 'mobile.calendarCancellationInMonth': 'Annulations ce mois-ci', + 'mobile.calendarGridTitle': 'Mois', + 'mobile.calendarAgendaTitle': 'Rendez-vous du mois', + 'mobile.calendarAgendaEmpty': 'Aucun rendez-vous ce mois-ci.', + }, + it: { + 'mobile.calendarSourceDiary': 'Diario', + 'mobile.calendarSourceTrainingTimes': 'Orari allenamento', + 'mobile.calendarSourceCancellations': 'Cancellazioni', + 'mobile.calendarSourceTournaments': 'Tornei', + 'mobile.calendarSourceMatches': 'Partite campionato', + 'mobile.calendarSourceOfficial': 'Partecipazioni ufficiali', + 'mobile.calendarSourceHolidays': 'Vacanze / festività', + 'mobile.calendarLegendTraining': 'Allenamento', + 'mobile.calendarLegendTournament': 'Torneo', + 'mobile.calendarLegendOfficial': 'Partecipazione', + 'mobile.calendarLegendMatch': 'Partita', + 'mobile.calendarLegendHoliday': 'Festività', + 'mobile.calendarLegendSchool': 'Vacanze scolastiche', + 'mobile.calendarLegendCancellation': 'Cancellazione', + 'mobile.calendarTitle': 'Calendario', + 'mobile.calendarSubtitle': 'Allenamenti, tornei, partite e festività del mese.', + 'mobile.calendarToday': 'Oggi', + 'mobile.calendarAllSourcesFailed': 'Impossibile caricare il calendario.', + 'mobile.calendarSourceFailed': 'non caricato', + 'mobile.calendarLegend': 'Vista', + 'mobile.calendarCancellationTitle': 'Allenamento annullato', + 'mobile.calendarCancellationHint': 'Nasconde gli orari ricorrenti in quei giorni.', + 'mobile.calendarCancellationStart': 'Data (AAAA-MM-GG)', + 'mobile.calendarCancellationEnd': 'Fino al (opzionale)', + 'mobile.calendarCancellationReason': 'Motivo', + 'mobile.calendarCancellationSave': 'Salva', + 'mobile.calendarCancellationInMonth': 'Cancellazioni questo mese', + 'mobile.calendarGridTitle': 'Mese', + 'mobile.calendarAgendaTitle': 'Appuntamenti del mese', + 'mobile.calendarAgendaEmpty': 'Nessun appuntamento in questo mese.', + }, + pl: { + 'mobile.calendarSourceDiary': 'Dziennik', + 'mobile.calendarSourceTrainingTimes': 'Terminy treningów', + 'mobile.calendarSourceCancellations': 'Odwołania', + 'mobile.calendarSourceTournaments': 'Turnieje', + 'mobile.calendarSourceMatches': 'Mecze ligowe', + 'mobile.calendarSourceOfficial': 'Oficjalne starty', + 'mobile.calendarSourceHolidays': 'Święta / ferie', + 'mobile.calendarLegendTraining': 'Trening', + 'mobile.calendarLegendTournament': 'Turniej', + 'mobile.calendarLegendOfficial': 'Start', + 'mobile.calendarLegendMatch': 'Mecz', + 'mobile.calendarLegendHoliday': 'Święto', + 'mobile.calendarLegendSchool': 'Ferie', + 'mobile.calendarLegendCancellation': 'Odwołanie', + 'mobile.calendarTitle': 'Kalendarz', + 'mobile.calendarSubtitle': 'Treningi, turnieje, mecze i święta w miesiącu.', + 'mobile.calendarToday': 'Dziś', + 'mobile.calendarAllSourcesFailed': 'Nie udało się wczytać kalendarza.', + 'mobile.calendarSourceFailed': 'nie wczytano', + 'mobile.calendarLegend': 'Widok', + 'mobile.calendarCancellationTitle': 'Trening odwołany', + 'mobile.calendarCancellationHint': 'Ukrywa cykliczne terminy treningów w te dni.', + 'mobile.calendarCancellationStart': 'Data (RRRR-MM-DD)', + 'mobile.calendarCancellationEnd': 'Do (opcjonalnie)', + 'mobile.calendarCancellationReason': 'Powód', + 'mobile.calendarCancellationSave': 'Zapisz', + 'mobile.calendarCancellationInMonth': 'Odwołania w tym miesiącu', + 'mobile.calendarGridTitle': 'Miesiąc', + 'mobile.calendarAgendaTitle': 'Terminy w miesiącu', + 'mobile.calendarAgendaEmpty': 'Brak terminów w tym miesiącu.', + }, + ja: { + 'mobile.calendarSourceDiary': '日記', + 'mobile.calendarSourceTrainingTimes': '練習時間', + 'mobile.calendarSourceCancellations': '練習中止', + 'mobile.calendarSourceTournaments': '大会', + 'mobile.calendarSourceMatches': 'リーグ戦', + 'mobile.calendarSourceOfficial': '公式参加', + 'mobile.calendarSourceHolidays': '休日・学校休暇', + 'mobile.calendarLegendTraining': '練習', + 'mobile.calendarLegendTournament': '大会', + 'mobile.calendarLegendOfficial': '参加', + 'mobile.calendarLegendMatch': 'リーグ戦', + 'mobile.calendarLegendHoliday': '祝日', + 'mobile.calendarLegendSchool': '学校の休み', + 'mobile.calendarLegendCancellation': '中止', + 'mobile.calendarTitle': 'カレンダー', + 'mobile.calendarSubtitle': '今月の練習・大会・試合・休日。', + 'mobile.calendarToday': '今日', + 'mobile.calendarAllSourcesFailed': 'カレンダーを読み込めませんでした。', + 'mobile.calendarSourceFailed': '未読込', + 'mobile.calendarLegend': '表示', + 'mobile.calendarCancellationTitle': '練習中止', + 'mobile.calendarCancellationHint': 'その日の定例練習時間を非表示にします。', + 'mobile.calendarCancellationStart': '日付 (YYYY-MM-DD)', + 'mobile.calendarCancellationEnd': '終了日(任意)', + 'mobile.calendarCancellationReason': '理由', + 'mobile.calendarCancellationSave': '保存', + 'mobile.calendarCancellationInMonth': '今月の中止', + 'mobile.calendarGridTitle': '月', + 'mobile.calendarAgendaTitle': '今月の予定', + 'mobile.calendarAgendaEmpty': '今月の予定はありません。', + }, + zh: { + 'mobile.calendarSourceDiary': '日记', + 'mobile.calendarSourceTrainingTimes': '训练时间', + 'mobile.calendarSourceCancellations': '训练取消', + 'mobile.calendarSourceTournaments': '比赛', + 'mobile.calendarSourceMatches': '联赛', + 'mobile.calendarSourceOfficial': '官方参赛', + 'mobile.calendarSourceHolidays': '假期/节日', + 'mobile.calendarLegendTraining': '训练', + 'mobile.calendarLegendTournament': '锦标赛', + 'mobile.calendarLegendOfficial': '参赛', + 'mobile.calendarLegendMatch': '联赛', + 'mobile.calendarLegendHoliday': '节日', + 'mobile.calendarLegendSchool': '学校假期', + 'mobile.calendarLegendCancellation': '取消', + 'mobile.calendarTitle': '日历', + 'mobile.calendarSubtitle': '本月训练、比赛与假期一览。', + 'mobile.calendarToday': '今天', + 'mobile.calendarAllSourcesFailed': '无法加载日历数据。', + 'mobile.calendarSourceFailed': '未加载', + 'mobile.calendarLegend': '显示', + 'mobile.calendarCancellationTitle': '训练取消', + 'mobile.calendarCancellationHint': '在这些日期隐藏定期训练时间。', + 'mobile.calendarCancellationStart': '日期 (YYYY-MM-DD)', + 'mobile.calendarCancellationEnd': '结束(可选)', + 'mobile.calendarCancellationReason': '原因', + 'mobile.calendarCancellationSave': '保存', + 'mobile.calendarCancellationInMonth': '本月取消', + 'mobile.calendarGridTitle': '月份', + 'mobile.calendarAgendaTitle': '本月日程', + 'mobile.calendarAgendaEmpty': '本月没有日程。', + }, + th: { + 'mobile.calendarSourceDiary': 'ไดอารี่', + 'mobile.calendarSourceTrainingTimes': 'เวลาฝึก', + 'mobile.calendarSourceCancellations': 'ยกเลิกการฝึก', + 'mobile.calendarSourceTournaments': 'การแข่งขัน', + 'mobile.calendarSourceMatches': 'แมตช์ลีก', + 'mobile.calendarSourceOfficial': 'การเข้าร่วมอย่างเป็นทางการ', + 'mobile.calendarSourceHolidays': 'วันหยุด/ปิดเทอม', + 'mobile.calendarLegendTraining': 'ฝึก', + 'mobile.calendarLegendTournament': 'ทัวร์นาเมนต์', + 'mobile.calendarLegendOfficial': 'เข้าร่วม', + 'mobile.calendarLegendMatch': 'แมตช์', + 'mobile.calendarLegendHoliday': 'วันหยุด', + 'mobile.calendarLegendSchool': 'ปิดเทอม', + 'mobile.calendarLegendCancellation': 'ยกเลิก', + 'mobile.calendarTitle': 'ปฏิทิน', + 'mobile.calendarSubtitle': 'การฝึก ทัวร์นาเมนต์ แมตช์ และวันหยุดในเดือนนี้', + 'mobile.calendarToday': 'วันนี้', + 'mobile.calendarAllSourcesFailed': 'โหลดข้อมูลปฏิทินไม่สำเร็จ', + 'mobile.calendarSourceFailed': 'ไม่ได้โหลด', + 'mobile.calendarLegend': 'แสดง', + 'mobile.calendarCancellationTitle': 'ยกเลิกการฝึก', + 'mobile.calendarCancellationHint': 'ซ่อนเวลาฝึกประจำในวันเหล่านั้น', + 'mobile.calendarCancellationStart': 'วันที่ (YYYY-MM-DD)', + 'mobile.calendarCancellationEnd': 'ถึง (ไม่บังคับ)', + 'mobile.calendarCancellationReason': 'เหตุผล', + 'mobile.calendarCancellationSave': 'บันทึก', + 'mobile.calendarCancellationInMonth': 'การยกเลิกในเดือนนี้', + 'mobile.calendarGridTitle': 'เดือน', + 'mobile.calendarAgendaTitle': 'นัดในเดือนนี้', + 'mobile.calendarAgendaEmpty': 'ไม่มีนัดในเดือนนี้', + }, + tl: { + 'mobile.calendarSourceDiary': 'Diaryo', + 'mobile.calendarSourceTrainingTimes': 'Mga oras ng training', + 'mobile.calendarSourceCancellations': 'Mga pagkansela', + 'mobile.calendarSourceTournaments': 'Mga torneo', + 'mobile.calendarSourceMatches': 'Mga laban sa liga', + 'mobile.calendarSourceOfficial': 'Opisyal na pakikilahok', + 'mobile.calendarSourceHolidays': 'Holiday / bakasyon', + 'mobile.calendarLegendTraining': 'Training', + 'mobile.calendarLegendTournament': 'Torneo', + 'mobile.calendarLegendOfficial': 'Pakikilahok', + 'mobile.calendarLegendMatch': 'Laban', + 'mobile.calendarLegendHoliday': 'Holiday', + 'mobile.calendarLegendSchool': 'Bakasyon sa paaralan', + 'mobile.calendarLegendCancellation': 'Kansela', + 'mobile.calendarTitle': 'Kalendaryo', + 'mobile.calendarSubtitle': 'Training, torneo, liga at holiday sa buwan.', + 'mobile.calendarToday': 'Ngayon', + 'mobile.calendarAllSourcesFailed': 'Hindi ma-load ang kalendaryo.', + 'mobile.calendarSourceFailed': 'hindi na-load', + 'mobile.calendarLegend': 'Ipakita', + 'mobile.calendarCancellationTitle': 'Kanseladong training', + 'mobile.calendarCancellationHint': 'Itinatago ang paulit-ulit na oras ng training sa mga araw na iyon.', + 'mobile.calendarCancellationStart': 'Petsa (YYYY-MM-DD)', + 'mobile.calendarCancellationEnd': 'Hanggang (opsyonal)', + 'mobile.calendarCancellationReason': 'Dahilan', + 'mobile.calendarCancellationSave': 'I-save', + 'mobile.calendarCancellationInMonth': 'Mga kansela ngayong buwan', + 'mobile.calendarGridTitle': 'Buwan', + 'mobile.calendarAgendaTitle': 'Mga appointment sa buwan', + 'mobile.calendarAgendaEmpty': 'Walang appointment sa buwang ito.', + }, + fil: { + 'mobile.calendarSourceDiary': 'Tala-arawan', + 'mobile.calendarSourceTrainingTimes': 'Mga oras ng pagsasanay', + 'mobile.calendarSourceCancellations': 'Mga pagkansela', + 'mobile.calendarSourceTournaments': 'Mga torneo', + 'mobile.calendarSourceMatches': 'Mga laban sa liga', + 'mobile.calendarSourceOfficial': 'Opisyal na pakikilahok', + 'mobile.calendarSourceHolidays': 'Holiday / bakasyon', + 'mobile.calendarLegendTraining': 'Pagsasanay', + 'mobile.calendarLegendTournament': 'Torneo', + 'mobile.calendarLegendOfficial': 'Pakikilahok', + 'mobile.calendarLegendMatch': 'Laban', + 'mobile.calendarLegendHoliday': 'Holiday', + 'mobile.calendarLegendSchool': 'Bakasyon sa paaralan', + 'mobile.calendarLegendCancellation': 'Kansela', + 'mobile.calendarTitle': 'Kalendaryo', + 'mobile.calendarSubtitle': 'Pagsasanay, torneo, liga at holiday sa buwan.', + 'mobile.calendarToday': 'Ngayon', + 'mobile.calendarAllSourcesFailed': 'Hindi ma-load ang kalendaryo.', + 'mobile.calendarSourceFailed': 'hindi na-load', + 'mobile.calendarLegend': 'Ipakita', + 'mobile.calendarCancellationTitle': 'Kinanselang pagsasanay', + 'mobile.calendarCancellationHint': 'Itinatago ang paulit-ulit na oras sa mga araw na iyon.', + 'mobile.calendarCancellationStart': 'Petsa (YYYY-MM-DD)', + 'mobile.calendarCancellationEnd': 'Hanggang (opsyonal)', + 'mobile.calendarCancellationReason': 'Dahilan', + 'mobile.calendarCancellationSave': 'I-save', + 'mobile.calendarCancellationInMonth': 'Mga kansela ngayong buwan', + 'mobile.calendarGridTitle': 'Buwan', + 'mobile.calendarAgendaTitle': 'Mga appointment sa buwan', + 'mobile.calendarAgendaEmpty': 'Walang appointment sa buwang ito.', + }, +}; + +function calendarStringsForLocale(code) { + if (code === 'de' || code === 'de-CH' || code === 'de-extended') return MOBILE_CALENDAR_I18N.de; + if (code.startsWith('en-')) return MOBILE_CALENDAR_I18N.en; + if (code === 'es') return MOBILE_CALENDAR_I18N.es; + if (code === 'fr') return MOBILE_CALENDAR_I18N.fr; + if (code === 'it') return MOBILE_CALENDAR_I18N.it; + if (code === 'pl') return MOBILE_CALENDAR_I18N.pl; + if (code === 'ja') return MOBILE_CALENDAR_I18N.ja; + if (code === 'zh') return MOBILE_CALENDAR_I18N.zh; + if (code === 'th') return MOBILE_CALENDAR_I18N.th; + if (code === 'tl' || code === 'fil') return MOBILE_CALENDAR_I18N[code === 'fil' ? 'fil' : 'tl']; + return MOBILE_CALENDAR_I18N.en; +} + function flatten(obj, prefix = '', out = {}) { for (const [key, value] of Object.entries(obj || {})) { const nextKey = prefix ? `${prefix}.${key}` : key; @@ -192,6 +562,7 @@ function main() { ...baseFlat, ...flatten(localeJson), ...specificMobileStrings, + ...calendarStringsForLocale(code), }; lines.push(` private val ${kotlinIdentifier(code)}: Map by lazy { mapOf(`); for (const [key, value] of Object.entries(flat).sort(([a], [b]) => a.localeCompare(b))) {