feat(i18n): complete message parity across all 25 locales
Gitea Actions Runner Test / test-job (push) Successful in 1s
CI / check (push) Successful in 37s
CI / tests-unit (push) Successful in 1m49s
CI / tests-integration (push) Successful in 1m50s
CI / tests-ui (push) Successful in 2m29s
CI / preflight (push) Skipped
CI / deploy (push) Failing after 1m37s

The admin.studio.nitroCleanup section (102 keys) only existed in en and
nl, so 23 locales fell back to English for the entire Nitro Cleanup
panel. The referrals and dailyRewards keys were missing from the same
23 locales, and en itself was missing 6 keys that nl had.

Add the missing keys to every locale with translations, so all 25
locales now carry the same 6063 keys.
This commit is contained in:
openhands committed 2026-09-27 18:38:58 +02:00
1 parent 944527e078
commit bc00ecf08c
24 files changed
+4483 -182

No files matched your search

+194 -7
View File
@@ -818,8 +818,8 @@
"rateLimit": "Too many attempts. Please wait before trying again."
},
"title": "Tilknyttede kontoer",
"subtitle": "Koble til en sosial konto slik at du kan logge på med ett klikk",
"connected": "Tilkoblet",
"subtitle": "Knytt en sosial konto for å logge inn med ett klikk",
"connected": "Tilknyttet",
"unavailable": "Utilgjengelig",
"login": {
"title": "Logg på",
@@ -882,7 +882,9 @@
"hidePassword": "Hide",
"accountDetails": "Account details",
"credentials": "Credentials & security",
"newestCitizens": "Newest citizens"
"newestCitizens": "Newest citizens",
"ageVerified": "Jeg er 18+ og godtar alderskravet.",
"invitedBy": "Invitert av {username}"
},
"forgot": {
"title": "Tilbakestill passord",
@@ -1048,7 +1050,9 @@
"cmsErrors": "CMS errors",
"themeBuilder": "Theme builder",
"openSidebar": "Open menu",
"closeSidebar": "Close menu"
"closeSidebar": "Close menu",
"referrals": "Henvisninger",
"dailyRewards": "Daglige belønninger"
},
"dashboard": {
"title": "Dashbord",
@@ -4336,7 +4340,9 @@
"importAudit": "Audit",
"themeBuilder": "Theme Builder",
"studio": "Studio",
"cmsErrors": "CMS errors"
"cmsErrors": "CMS errors",
"referrals": "Henvisninger",
"dailyRewards": "Daglige belønninger"
},
"events": "Events",
"eventsSubtitle": "Hotel events and event types",
@@ -5843,6 +5849,64 @@
"NoscopescreatedyetAddonebelow": "No scopes created yet. Add one below.",
"Rename": "Rename"
}
},
"referrals": {
"title": "Henvisninger",
"subtitle": "Invitasjonssystem",
"referralsToday": "Henvisninger i dag",
"referralsTotal": "Totalt antall henvisninger",
"invitedTotal": "Invitasjoner tellt",
"claims": "Belønninger hevet",
"settings": "Belønningsinnstillinger",
"needed": "Nødvendige henvisninger",
"rewardAmount": "Belønningsbeløp",
"rewardCurrency": "Belønningsvaluta",
"blockSameIp": "Avslå henvisninger som deler invitererens nåværende IP",
"save": "Lagre innstillinger",
"saving": "Lagrer…",
"saved": "Henvisningsinnstillinger lagret.",
"saveError": "Henvisningsinnstillinger kunne ikke lagres.",
"recent": "Nylige henvisninger",
"unavailable": "Henvisningsdata er midlertidig utilgjengelig.",
"empty": "Ingen henvisninger ennå.",
"inviter": "Inviterer",
"invitee": "Invitert bruker",
"ip": "IP",
"date": "Dato"
},
"dailyRewards": {
"title": "Daglige innloggingsbelønninger",
"subtitle": "Daglig innloggingsbelønningsplan",
"enabled": "Funksjonsstatus",
"yes": "Aktivert",
"no": "Deaktivert",
"scheduleDays": "Planens dager",
"claimsToday": "Uttak i dag",
"claimsTotal": "Totalt antall uttak",
"status": "Funksjonsstatus",
"statusHint": "Når deaktivert, skjules belønningskortet og nye uttak avslås.",
"disable": "Deaktiver",
"enable": "Aktiver",
"schedule": "Belønningsplan",
"day": "Dag {day}",
"reward": "Belønning",
"amount": "Beløp",
"actions": "Handlinger",
"addDay": "Dag",
"add": "Legg til dag",
"save": "Lagre",
"saving": "Lagrer…",
"saved": "Belønningsplan lagret.",
"cancel": "Avbryt",
"edit": "Rediger",
"delete": "Slett",
"created": "Belønningsdag lagt til.",
"updated": "Belønningsdag oppdatert.",
"deleted": "Belønningsdag fjernet.",
"saveError": "Belønningsdag kunne ikke lagres.",
"deleteError": "Belønningsdag kunne ikke fjernes.",
"confirmDeleteTitle": "Fjern belønningsdag",
"confirmDeleteBody": "Denne belønningsdagen vil ikke lengere bli gitt. Tidligere uttak forblir registrert."
}
},
"error": {
@@ -6223,8 +6287,27 @@
"empty": "You're all caught up. No actions waiting.",
"unavailable": "Some actions could not be checked. Available actions are shown above.",
"retry": "Try again",
"rewardUnavailable": "Referral progress is temporarily unavailable. Please try again."
}
"rewardUnavailable": "Referral progress is temporarily unavailable. Please try again.",
"dailyReward": "Den daglige belønningen din er klar til å heves"
},
"dailyClaimed": "Daglig belønning hevet — sees i morgen!",
"dailyErrors": {
"already_claimed": "Du har allerede hevet dagens daglige belønning.",
"disabled": "Daglige belønninger er deaktivert for øyeblikket.",
"bad_config": "Den daglige belønningsplanen er ikke konfigurert riktig. Kontakt personalet.",
"ratelimit": "For mange forsøk. Vent et øyeblikk og prøv igjen.",
"error": "Den daglige belønningen kunne ikke heves. Prøv igjen."
},
"dailyRewardTitle": "Daglige belønninger",
"dailyRewardHint": "Logg inn hver dag og hev belønningen din — serier vokser inn til de store dagene.",
"dailyRewardDay": "Dag {day}",
"dailyRewardStreak": "{count, plural, one {Serie: # dag} other {Serie: # dager}}",
"dailyRewardNextClaim": "Neste uttak: {amount} {currency}",
"dailyRewardTomorrow": "I morgen: {amount} {currency}",
"dailyRewardClaim": "Hev daglig belønning",
"dailyRewardClaimedToday": "Hevet i dag — kom tilbake i morgen for neste belønning.",
"dailyRewardDisabled": "Daglige belønninger er deaktivert for øyeblikket. Du kan utforske hotellet.",
"dailyRewardUnavailable": "Den daglige belønningsplanen kunne ikke lastes. Prøv igjen."
},
"housekeeping": {
"preview": {
@@ -6502,6 +6585,110 @@
},
"admin": {
"studio": {
"nitroCleanup": {
"alreadyRunning": "En scan kjører allerede — tilkoblet den.",
"ageUnknown": "alder ukjent",
"ageBelow": "< 1d",
"scanButton": "Skann møbelressurser",
"scanningAssets": "Skanner ressurser…",
"cancelButton": "Avbryt",
"deleteSelected": "Slett valgte ({count})",
"deleting": "Sletter…",
"redownloadBroken": "Last ned skadede på nytt",
"redownloading": "Laster ned på nytt…",
"autoClean": "Rensk gamle falske automatisk",
"cleaning": "Renser…",
"exportManifest": "Eksporter manifest",
"exporting": "Eksporterer…",
"phaseStems": "Laster møbelstilker…",
"phaseReaddir": "Leser ressurskataloger…",
"phaseValidate": "Validerer .nitro-pakker…",
"phaseScanning": "Skanner…",
"scanProgressFiles": "{count} filer",
"repairProgress": "ok {ok}, mislyktes {failed}",
"attachedNotice": "Scanen fortsetter i bakgrunnen — resultatene vises når den er ferdig.",
"sessionCancelled": "Scanen avbrutt.",
"onlyOldLabel": "Vis kun filer eldre enn",
"onlyOldAgeLabel": "Minimumsalder i dager for visning",
"onlyOldToggle": "Skjul nylige filer",
"daysLabel": "dager",
"autoAgeLabel": "Minimumsalder i dager for automatisk rengjøring",
"loadingResult": "Laster skannerresultat…",
"scannedStat": "ressursfiler skannet",
"cachedNotice": "(mellomlagret — katalogene er uendret)",
"fakeStat": "Falske nitro (ingen matchende gjenstand)",
"brokenStat": "Skadede nitro (kan ikke parses)",
"groupEmpty": "Ingenting funnet",
"selectedCount": "{count} valgt",
"copiesBadge": "{count} kopier",
"groupFakeLabel": "Falske nitro",
"groupFakeDescription": "Disse filene matcher ingen gjenstand i items_base — rester fra slettede eller omdøpte møbler.",
"groupBrokenLabel": "Skadede nitro",
"groupBrokenDescription": "Disse filene tilhører en gjenstand, men kan ikke parses som en gyldig Nitro-pakke.",
"groupSwfLabel": "Foreldreløse SWF-filer",
"groupSwfDescription": ".swf-filer som matcher ingen gjenstand i items_base.",
"groupIconLabel": "Foreldreløse ikoner",
"groupIconDescription": "Ikonfiler som matcher ingen gjenstand i items_base.",
"warningText": "Hvis du sletter en skadet .nitro, forblir gjenstanden i databasen uten pakke — foretrekker å laste den ned på nytt, eller la kataloggjennomgangen skaffe den senere. Databaserader fjernes aldri av dette verktøyet.",
"onlyAssetsTouched": "Kun ressursfiler berøres — FurnitureData.json og databaserader forblir intakte.",
"emptyHint": "Skann hver møbelressurskatalog for å finne falske og skadede nitro-pakker samt foreldreløse SWF-filer og ikoner. Slett dem, last ned de skadede på nytt eller rens gamle rester automatisk.",
"noResult": "Ingen skannerresultat ennå — kjør en møbelressursskanning først.",
"scanFailed": "Skanningen mislyktes.",
"confirmDeleteTitle": "Slett {count} ressursfil(er)?",
"confirmDeleteDescription": "Filene fjernes fra alle kataloger (public + speilede gamedata). Databaserader berøres aldri.",
"confirmDeleteLabel": "Slett",
"confirmRepairTitle": "Last ned {count} skadet(e) .nitro-pakke(r) på nytt?",
"confirmRepairDescription": "Pakkene hentes på nytt fra de konfigurerte nitro-kildene og skrives over alle kataloger (public + speilede gamedata).",
"confirmRepairLabel": "Last ned på nytt",
"confirmAutoCleanTitle": "Rens falske nitro eldre enn {days} dag(er) automatisk?",
"confirmAutoCleanDescription": "Kun falske .nitro-filer (ingen matchende gjenstand) eldre enn terskelen fjernes. Skadede pakker og nylige filer berøres aldri.",
"confirmAutoCleanLabel": "Rens automatisk",
"toastDeletePartial": "Slettet {copies} kopier, men noen filer kunne ikke fjernes",
"toastDeleteDone": "Slettet {copies} filkopier ({deleted} filer)",
"toastRepairDone": "Reparerte {count} .nitro-pakker",
"toastRepairFailed": "Kunne ikke skaffe noen pakker ({failed} mislyktes)",
"toastRepairCancelled": "Reparasjon avbrutt",
"toastAutoCleanDone": "Renset {deleted} gamle falske .nitro-filer ({copies} kopier). Hoppet over {recent} nylige + {broken} skadede.",
"toastAutoCleanNothing": "Ingenting gammelt nok til å fjerne (hoppet over {recent} nylige, {broken} skadede)",
"toastManifestDownload": "Skannemanifest lastet ned",
"gamedataTitle": "Rens spilldata",
"gamedataHint": "Forhåndsvis først: dette skriver på nytt FurnitureData.json, FigureMap.json og FigureData.json. I motsetning til ressursverktøyene ovenfor fjerner det rader som ikke refererer til noe — sjekk tallene før du kjører det.",
"gamedataScan": "Forhåndsvis spilldata",
"gamedataScanning": "Skanner…",
"gamedataRun": "Kjør valgte",
"gamedataRunning": "Renser…",
"gamedataNoResult": "Ingen forhåndsvisning ennå — skann spilldata-JSON-filene først.",
"gamedataCount_duplicates": "FurnitureData-duplikater",
"gamedataCount_orphans": "FurnitureData-foreldreløse",
"gamedataCount_figureMap": "FigureMap-problemer",
"gamedataCount_figureData": "Ubrukt FigureData",
"gamedataPass_dedupeFurnitureData": "Fjern duplikater i FurnitureData",
"gamedataPassDesc_dedupeFurnitureData": "Fjerner gjentatte classnames innen én seksjon og beholder oppføringen med høyest revisjon.",
"gamedataPass_cleanFurnitureData": "Rens FurnitureData",
"gamedataPassDesc_cleanFurnitureData": "Fjerner oppføringer hvor .nitro-pakken mangler i alle kataloger.",
"gamedataPass_cleanFigureMap": "Rens FigureMap",
"gamedataPassDesc_cleanFigureMap": "Fjerner deler som peker på et sett som mangler i FigureData, pluss nøyaktige duplikater.",
"gamedataPass_cleanFigureData": "Rens FigureData",
"gamedataPassDesc_cleanFigureData": "Fjerner sett som ingen FigureMap-del refererer til, deretter paletter som ingen sett-type bruker. Må kjøres etter Rens FigureMap.",
"gamedataNothingSelected": "Velg minst ett rengjøringssteg",
"gamedataConfirmTitle": "Skriv på nytt spilldata-JSON-filer?",
"gamedataConfirmDescription": "{passes} steg kjøres mot {duplicates} duplikatgrupper, {orphans} foreldreløse rader, {figureMap} FigureMap-problemer og {figureData} ubrukte FigureData-oppføringer. Rader fjernes uten sikkerhetskopi — dette kan ikke angres.",
"gamedataConfirmLabel": "Skriv på nytt filer",
"gamedataDifferingWarning": "Minst én duplikat er ikke en nøyaktig kopi av oppføringen som beholdes, så den slettede raden inneholdt data som den overlevende ikke har.",
"gamedataCrossSectionNote": "{count} classnames finnes i både roomitemtypes og wallitemtypes. Disse rapporteres kun — å fjerne én ville endre en gjenstands type.",
"gamedataToastDone": "Rensing av spilldata fjernet {removed} rader",
"gamedataToastNothing": "Spilldata var allerede rent",
"gamedataMaxRemovalsLabel": "Maks. rader per steg",
"gamedataMaxRemovalsHint": "0 bruker standardverdien 500. Et steg som ville fjernet mer stopper og spør i stedet for å skrive.",
"gamedataLimitTitle": "{pass} ville fjernet {wouldRemove} rader, over grensen på {maxRemovals}.",
"gamedataLimitDescription": "Dette steget skrev ingenting, så filene er uendret. Sjekk ressursstiene først — en feil katalog får hver rad til å se foreldreløs ut. Å heve grensen er en separat, bevisst kjøring.",
"gamedataLimitOverride": "Fjern {wouldRemove} rader likevel",
"historyTitle": "Historikk for automatisk rengjøring",
"historyScheduled": "planlagt",
"historyManual": "manuelt",
"historyEntry": "Fjernet {deleted} ({copies} kopier); hoppet over {recent} nylige og {broken} skadede",
"historyErrors": "{count} feil"
},
"importDiagnostics": {
"attempts": "Fildiagnostikk",
"preliminary": "Foreløpig kontroll av adresser; innholdet valideres ved import.",