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
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:
1 parent
944527e078
commit
bc00ecf08c
24 files changed
+4483
-182
No files matched your search
+194
-7
@@ -787,9 +787,9 @@
|
||||
"enable": "Activer l'A2F",
|
||||
"rateLimit": "Too many attempts. Please wait before trying again."
|
||||
},
|
||||
"title": "Comptes connectés",
|
||||
"title": "Comptes liés",
|
||||
"subtitle": "Associez un compte social pour vous connecter en un clic",
|
||||
"connected": "Connecté",
|
||||
"connected": "Lié",
|
||||
"unavailable": "Indisponible",
|
||||
"login": {
|
||||
"title": "Connexion",
|
||||
@@ -852,7 +852,9 @@
|
||||
"hidePassword": "Hide",
|
||||
"accountDetails": "Account details",
|
||||
"credentials": "Credentials & security",
|
||||
"newestCitizens": "Newest citizens"
|
||||
"newestCitizens": "Newest citizens",
|
||||
"ageVerified": "J'ai 18+ et j'accepte la condition d'âge.",
|
||||
"invitedBy": "Invité par {username}"
|
||||
},
|
||||
"forgot": {
|
||||
"title": "Réinitialiser le mot de passe",
|
||||
@@ -1018,7 +1020,9 @@
|
||||
"cmsErrors": "CMS errors",
|
||||
"themeBuilder": "Theme builder",
|
||||
"openSidebar": "Open menu",
|
||||
"closeSidebar": "Close menu"
|
||||
"closeSidebar": "Close menu",
|
||||
"referrals": "Parrainages",
|
||||
"dailyRewards": "Récompenses quotidiennes"
|
||||
},
|
||||
"dashboard": {
|
||||
"title": "Tableau de bord",
|
||||
@@ -4306,7 +4310,9 @@
|
||||
"importAudit": "Audit",
|
||||
"themeBuilder": "Theme Builder",
|
||||
"studio": "Studio",
|
||||
"cmsErrors": "CMS errors"
|
||||
"cmsErrors": "CMS errors",
|
||||
"referrals": "Parrainages",
|
||||
"dailyRewards": "Récompenses quotidiennes"
|
||||
},
|
||||
"events": "Events",
|
||||
"eventsSubtitle": "Hotel events and event types",
|
||||
@@ -5813,6 +5819,64 @@
|
||||
"NoscopescreatedyetAddonebelow": "No scopes created yet. Add one below.",
|
||||
"Rename": "Rename"
|
||||
}
|
||||
},
|
||||
"referrals": {
|
||||
"title": "Parrainages",
|
||||
"subtitle": "Système d'invitation",
|
||||
"referralsToday": "Parrainages aujourd'hui",
|
||||
"referralsTotal": "Parrainages au total",
|
||||
"invitedTotal": "Invitations comptées",
|
||||
"claims": "Récompenses réclamées",
|
||||
"settings": "Paramètres de récompense",
|
||||
"needed": "Parrainages requis",
|
||||
"rewardAmount": "Montant de la récompense",
|
||||
"rewardCurrency": "Devise de la récompense",
|
||||
"blockSameIp": "Refuser les parrainages partageant l'IP actuelle de l'inviteur",
|
||||
"save": "Enregistrer les paramètres",
|
||||
"saving": "Enregistrement…",
|
||||
"saved": "Paramètres de parrainage enregistrés.",
|
||||
"saveError": "Les paramètres de parrainage n'ont pas pu être enregistrés.",
|
||||
"recent": "Parrainages récents",
|
||||
"unavailable": "Les données de parrainage sont temporairement indisponibles.",
|
||||
"empty": "Aucun parrainage pour le moment.",
|
||||
"inviter": "Parrain",
|
||||
"invitee": "Utilisateur invité",
|
||||
"ip": "IP",
|
||||
"date": "Date"
|
||||
},
|
||||
"dailyRewards": {
|
||||
"title": "Récompenses de connexion quotidiennes",
|
||||
"subtitle": "Programme de récompenses de connexion quotidiennes",
|
||||
"enabled": "Statut de la fonctionnalité",
|
||||
"yes": "Activé",
|
||||
"no": "Désactivé",
|
||||
"scheduleDays": "Jours du programme",
|
||||
"claimsToday": "Réclamations aujourd'hui",
|
||||
"claimsTotal": "Réclamations au total",
|
||||
"status": "Statut de la fonctionnalité",
|
||||
"statusHint": "Lorsque désactivé, la carte de récompense est masquée et les nouvelles réclamations sont refusées.",
|
||||
"disable": "Désactiver",
|
||||
"enable": "Activer",
|
||||
"schedule": "Programme de récompenses",
|
||||
"day": "Jour {day}",
|
||||
"reward": "Récompense",
|
||||
"amount": "Montant",
|
||||
"actions": "Actions",
|
||||
"addDay": "Jour",
|
||||
"add": "Ajouter un jour",
|
||||
"save": "Enregistrer",
|
||||
"saving": "Enregistrement…",
|
||||
"saved": "Programme de récompenses enregistré.",
|
||||
"cancel": "Annuler",
|
||||
"edit": "Modifier",
|
||||
"delete": "Supprimer",
|
||||
"created": "Jour de récompense ajouté.",
|
||||
"updated": "Jour de récompense mis à jour.",
|
||||
"deleted": "Jour de récompense supprimé.",
|
||||
"saveError": "Le jour de récompense n'a pas pu être enregistré.",
|
||||
"deleteError": "Le jour de récompense n'a pas pu être supprimé.",
|
||||
"confirmDeleteTitle": "Supprimer le jour de récompense",
|
||||
"confirmDeleteBody": "Ce jour de récompense ne sera plus accordé. Les réclamations passées restent enregistrées."
|
||||
}
|
||||
},
|
||||
"radioRequests": {
|
||||
@@ -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": "Votre récompense quotidienne est prête à être réclamée"
|
||||
},
|
||||
"dailyClaimed": "Récompense quotidienne réclamée — à demain !",
|
||||
"dailyErrors": {
|
||||
"already_claimed": "Vous avez déjà réclamé la récompense quotidienne d'aujourd'hui.",
|
||||
"disabled": "Les récompenses quotidiennes sont actuellement désactivées.",
|
||||
"bad_config": "Le programme de récompenses quotidiennes n'est pas configuré correctement. Contactez le personnel.",
|
||||
"ratelimit": "Trop de tentatives. Attendez un instant et réessayez.",
|
||||
"error": "La récompense quotidienne n'a pas pu être réclamée. Veuillez réessayer."
|
||||
},
|
||||
"dailyRewardTitle": "Récompenses quotidiennes",
|
||||
"dailyRewardHint": "Connectez-vous chaque jour et réclamez votre récompense — les séries grandissent jusqu'aux grands jours.",
|
||||
"dailyRewardDay": "Jour {day}",
|
||||
"dailyRewardStreak": "{count, plural, one {Série : # jour} other {Série : # jours}}",
|
||||
"dailyRewardNextClaim": "Prochaine réclamation : {amount} {currency}",
|
||||
"dailyRewardTomorrow": "Demain : {amount} {currency}",
|
||||
"dailyRewardClaim": "Réclamer la récompense quotidienne",
|
||||
"dailyRewardClaimedToday": "Réclamé aujourd'hui — revenez demain pour la prochaine récompense.",
|
||||
"dailyRewardDisabled": "Les récompenses quotidiennes sont actuellement désactivées. Vous pouvez explorer l'hôtel.",
|
||||
"dailyRewardUnavailable": "Le programme de récompenses quotidiennes n'a pas pu être chargé. Veuillez réessayer."
|
||||
},
|
||||
"housekeeping": {
|
||||
"preview": {
|
||||
@@ -6502,6 +6585,110 @@
|
||||
},
|
||||
"admin": {
|
||||
"studio": {
|
||||
"nitroCleanup": {
|
||||
"alreadyRunning": "Un scan est déjà en cours — connexion à celui-ci.",
|
||||
"ageUnknown": "âge inconnu",
|
||||
"ageBelow": "< 1j",
|
||||
"scanButton": "Scanner les ressources de meubles",
|
||||
"scanningAssets": "Analyse des ressources…",
|
||||
"cancelButton": "Annuler",
|
||||
"deleteSelected": "Supprimer la sélection ({count})",
|
||||
"deleting": "Suppression…",
|
||||
"redownloadBroken": "Re-télécharger les corrompus",
|
||||
"redownloading": "Re-téléchargement…",
|
||||
"autoClean": "Nettoyage automatique des anciens faux",
|
||||
"cleaning": "Nettoyage…",
|
||||
"exportManifest": "Exporter le manifeste",
|
||||
"exporting": "Exportation…",
|
||||
"phaseStems": "Chargement des tiges de meubles…",
|
||||
"phaseReaddir": "Lecture des répertoires de ressources…",
|
||||
"phaseValidate": "Validation des paquets .nitro…",
|
||||
"phaseScanning": "Analyse…",
|
||||
"scanProgressFiles": "{count} fichiers",
|
||||
"repairProgress": "ok {ok}, échec {failed}",
|
||||
"attachedNotice": "Le scan continue en arrière-plan — les résultats apparaîtront à la fin.",
|
||||
"sessionCancelled": "Scan annulé.",
|
||||
"onlyOldLabel": "Afficher uniquement les fichiers plus anciens que",
|
||||
"onlyOldAgeLabel": "Âge minimum en jours pour affichage",
|
||||
"onlyOldToggle": "Masquer les fichiers récents",
|
||||
"daysLabel": "jours",
|
||||
"autoAgeLabel": "Âge minimum en jours pour le nettoyage automatique",
|
||||
"loadingResult": "Chargement du résultat du scan…",
|
||||
"scannedStat": "fichiers de ressources analysés",
|
||||
"cachedNotice": "(en cache — les répertoires sont inchangés)",
|
||||
"fakeStat": "Faux nitro (aucun élément correspondant)",
|
||||
"brokenStat": "Nitro corrompus (illisibles)",
|
||||
"groupEmpty": "Aucun résultat",
|
||||
"selectedCount": "{count} sélectionnés",
|
||||
"copiesBadge": "{count} copies",
|
||||
"groupFakeLabel": "Faux nitro",
|
||||
"groupFakeDescription": "Ces fichiers ne correspondent à aucun élément de items_base — restes de meubles supprimés ou renommés.",
|
||||
"groupBrokenLabel": "Nitro corrompus",
|
||||
"groupBrokenDescription": "Ces fichiers appartiennent à un élément mais ne peuvent pas être lus comme un paquet Nitro valide.",
|
||||
"groupSwfLabel": "SWF orphelins",
|
||||
"groupSwfDescription": "Fichiers .swf qui ne correspondent à aucun élément de items_base.",
|
||||
"groupIconLabel": "Icônes orphelines",
|
||||
"groupIconDescription": "Fichiers d'icônes qui ne correspondent à aucun élément de items_base.",
|
||||
"warningText": "Supprimer un .nitro corrompu laisse son élément dans la base sans paquet — préférez le re-télécharger, ou laissez l'audit du catalogue l'obtenir plus tard. Les lignes de base ne sont jamais supprimées par cet outil.",
|
||||
"onlyAssetsTouched": "Seuls les fichiers de ressources sont modifiés — FurnitureData.json et les lignes de base restent intacts.",
|
||||
"emptyHint": "Scannez chaque répertoire de meubles pour trouver les paquets nitro faux et corrompus ainsi que les SWF et icônes orphelins. Supprimez-les, re-téléchargez les corrompus ou nettoyez automatiquement les anciens restes.",
|
||||
"noResult": "Aucun résultat de scan pour le moment — lancez d'abord un scan des ressources de meubles.",
|
||||
"scanFailed": "Le scan a échoué.",
|
||||
"confirmDeleteTitle": "Supprimer {count} fichier(s) ?",
|
||||
"confirmDeleteDescription": "Les fichiers seront retirés de chaque répertoire (public + gamedata en miroir). Les lignes de base ne sont jamais modifiées.",
|
||||
"confirmDeleteLabel": "Supprimer",
|
||||
"confirmRepairTitle": "Re-télécharger {count} paquet(s) .nitro corrompu(s) ?",
|
||||
"confirmRepairDescription": "Les paquets seront récupérés depuis les sources nitro configurées et écrits sur chaque répertoire (public + gamedata en miroir).",
|
||||
"confirmRepairLabel": "Re-télécharger",
|
||||
"confirmAutoCleanTitle": "Nettoyer automatiquement les faux nitro plus anciens que {days} jour(s) ?",
|
||||
"confirmAutoCleanDescription": "Seuls les fichiers .nitro faux (aucun élément correspondant) plus anciens que le seuil sont retirés. Les paquets corrompus et les fichiers récents ne sont jamais modifiés.",
|
||||
"confirmAutoCleanLabel": "Nettoyer automatiquement",
|
||||
"toastDeletePartial": "{copies} copie(s) supprimées, mais certains fichiers n'ont pas pu être retirés",
|
||||
"toastDeleteDone": "{copies} copie(s) de fichier supprimées ({deleted} fichier(s))",
|
||||
"toastRepairDone": "{count} paquet(s) .nitro réparé(s)",
|
||||
"toastRepairFailed": "Impossible d'obtenir un paquet ({failed} échec(s))",
|
||||
"toastRepairCancelled": "Réparation annulée",
|
||||
"toastAutoCleanDone": "{deleted} ancien(s) fichier(s) .nitro faux nettoyé(s) ({copies} copies). {recent} récents + {broken} corrompus ignorés.",
|
||||
"toastAutoCleanNothing": "Rien d'assez ancien pour être retiré ({recent} récents, {broken} corrompus ignorés)",
|
||||
"toastManifestDownload": "Manifeste de scan téléchargé",
|
||||
"gamedataTitle": "Nettoyage des données de jeu",
|
||||
"gamedataHint": "Aperçu d'abord : ceci réécrit FurnitureData.json, FigureMap.json et FigureData.json. Contrairement aux outils de ressources ci-dessus, cela supprime des lignes qui ne référencent rien — examinez les comptes avant de l'exécuter.",
|
||||
"gamedataScan": "Aperçu des données de jeu",
|
||||
"gamedataScanning": "Analyse…",
|
||||
"gamedataRun": "Exécuter la sélection",
|
||||
"gamedataRunning": "Nettoyage…",
|
||||
"gamedataNoResult": "Aucun aperçu pour le moment — scannez d'abord les fichiers JSON des données de jeu.",
|
||||
"gamedataCount_duplicates": "Doublons de FurnitureData",
|
||||
"gamedataCount_orphans": "Pupilles de FurnitureData",
|
||||
"gamedataCount_figureMap": "Problèmes de FigureMap",
|
||||
"gamedataCount_figureData": "FigureData inutilisé",
|
||||
"gamedataPass_dedupeFurnitureData": "Dédupliquer FurnitureData",
|
||||
"gamedataPassDesc_dedupeFurnitureData": "Supprime les classnames répétés dans une section, en conservant l'entrée avec la révision la plus élevée.",
|
||||
"gamedataPass_cleanFurnitureData": "Nettoyer FurnitureData",
|
||||
"gamedataPassDesc_cleanFurnitureData": "Supprime les entrées dont le paquet .nitro est absent de chaque répertoire.",
|
||||
"gamedataPass_cleanFigureMap": "Nettoyer FigureMap",
|
||||
"gamedataPassDesc_cleanFigureMap": "Supprime les parties pointant vers un ensemble manquant dans FigureData, ainsi que les doublons exacts.",
|
||||
"gamedataPass_cleanFigureData": "Nettoyer FigureData",
|
||||
"gamedataPassDesc_cleanFigureData": "Supprime les ensembles qu'aucune partie de FigureMap ne référence, puis les palettes qu'aucun type d'ensemble n'utilise. Doit s'exécuter après Nettoyer FigureMap.",
|
||||
"gamedataNothingSelected": "Sélectionnez au moins une étape de nettoyage",
|
||||
"gamedataConfirmTitle": "Réécrire les fichiers JSON des données de jeu ?",
|
||||
"gamedataConfirmDescription": "{passes} étape(s) s'exécuteront contre {duplicates} groupe(s) en double, {orphans} ligne(s) pupille(s), {figureMap} problème(s) de FigureMap et {figureData} entrée(s) FigureData inutilisée(s). Les lignes sont supprimées sans sauvegarde — ceci est irréversible.",
|
||||
"gamedataConfirmLabel": "Réécrire les fichiers",
|
||||
"gamedataDifferingWarning": "Au moins un double n'est pas une copie exacte de l'entrée conservée, donc la ligne supprimée contenait des données que le survivant n'a pas.",
|
||||
"gamedataCrossSectionNote": "{count} classname(s) existent à la fois dans roomitemtypes et wallitemtypes. Ceux-ci sont seulement signalés — en supprimer un changerait le type d'un élément.",
|
||||
"gamedataToastDone": "Le nettoyage des données de jeu a supprimé {removed} ligne(s)",
|
||||
"gamedataToastNothing": "Les données de jeu étaient déjà propres",
|
||||
"gamedataMaxRemovalsLabel": "Max. lignes par étape",
|
||||
"gamedataMaxRemovalsHint": "0 utilise la valeur par défaut 500. Une étape qui en supprimerait plus s'arrête et demande au lieu d'écrire.",
|
||||
"gamedataLimitTitle": "{pass} supprimerait {wouldRemove} ligne(s), au-dessus de la limite de {maxRemovals}.",
|
||||
"gamedataLimitDescription": "Cette étape n'a rien écrit, donc les fichiers sont inchangés. Vérifiez d'abord les chemins de ressources — un mauvais répertoire rend chaque ligne pupille. Augmenter la limite est une exécution séparée et délibérée.",
|
||||
"gamedataLimitOverride": "Supprimer quand même {wouldRemove} ligne(s)",
|
||||
"historyTitle": "Historique du nettoyage automatique",
|
||||
"historyScheduled": "planifié",
|
||||
"historyManual": "manuel",
|
||||
"historyEntry": "{deleted} supprimé(s) ({copies} copies); {recent} récents et {broken} corrompus ignorés",
|
||||
"historyErrors": "{count} erreurs"
|
||||
},
|
||||
"importDiagnostics": {
|
||||
"attempts": "Diagnostic des fichiers",
|
||||
"preliminary": "Vérification préliminaire des adresses ; le contenu sera validé à l’importation.",
|
||||
|
||||
Reference in new issue
Block a user