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
+196
-9
@@ -817,10 +817,10 @@
|
||||
"enable": "Увімкніть 2FA",
|
||||
"rateLimit": "Too many attempts. Please wait before trying again."
|
||||
},
|
||||
"title": "Підключені облікові записи",
|
||||
"subtitle": "Зв’яжіть обліковий запис у соціальній мережі, щоб увійти одним клацанням миші",
|
||||
"connected": "Підключено",
|
||||
"unavailable": "Недоступний",
|
||||
"title": "Пов'язані акаунти",
|
||||
"subtitle": "Пов'яжіть соціальний акаунт для входу одним натисканням",
|
||||
"connected": "Пов'язано",
|
||||
"unavailable": "Недоступно",
|
||||
"login": {
|
||||
"title": "Увійдіть",
|
||||
"subtitle": "Ласкаво просимо назад — увійдіть, щоб увійти в готель.",
|
||||
@@ -882,7 +882,9 @@
|
||||
"hidePassword": "Hide",
|
||||
"accountDetails": "Account details",
|
||||
"credentials": "Credentials & security",
|
||||
"newestCitizens": "Newest citizens"
|
||||
"newestCitizens": "Newest citizens",
|
||||
"ageVerified": "Мені 18+ і я погоджуюся з віковими вимогами.",
|
||||
"invitedBy": "Запросив користувач {username}"
|
||||
},
|
||||
"forgot": {
|
||||
"title": "Скинути пароль",
|
||||
@@ -1048,7 +1050,9 @@
|
||||
"cmsErrors": "CMS errors",
|
||||
"themeBuilder": "Theme builder",
|
||||
"openSidebar": "Open menu",
|
||||
"closeSidebar": "Close menu"
|
||||
"closeSidebar": "Close menu",
|
||||
"referrals": "Реферали",
|
||||
"dailyRewards": "Щоденні нагороди"
|
||||
},
|
||||
"dashboard": {
|
||||
"title": "Приладова панель",
|
||||
@@ -4336,7 +4340,9 @@
|
||||
"importAudit": "Audit",
|
||||
"themeBuilder": "Theme Builder",
|
||||
"studio": "Studio",
|
||||
"cmsErrors": "CMS errors"
|
||||
"cmsErrors": "CMS errors",
|
||||
"referrals": "Реферали",
|
||||
"dailyRewards": "Щоденні нагороди"
|
||||
},
|
||||
"events": "Events",
|
||||
"eventsSubtitle": "Hotel events and event types",
|
||||
@@ -5843,6 +5849,64 @@
|
||||
"NoscopescreatedyetAddonebelow": "No scopes created yet. Add one below.",
|
||||
"Rename": "Rename"
|
||||
}
|
||||
},
|
||||
"referrals": {
|
||||
"title": "Реферали",
|
||||
"subtitle": "Система запрошень",
|
||||
"referralsToday": "Реферали сьогодні",
|
||||
"referralsTotal": "Усього рефералів",
|
||||
"invitedTotal": "Запрошень нараховано",
|
||||
"claims": "Отримані нагороди",
|
||||
"settings": "Налаштування нагороди",
|
||||
"needed": "Необхідні реферали",
|
||||
"rewardAmount": "Сума нагороди",
|
||||
"rewardCurrency": "Валюта нагороди",
|
||||
"blockSameIp": "Відхиляти реферали з поточною IP запрошуючого",
|
||||
"save": "Зберегти налаштування",
|
||||
"saving": "Збереження…",
|
||||
"saved": "Налаштування рефералів збережено.",
|
||||
"saveError": "Налаштування рефералів не вдалося зберегти.",
|
||||
"recent": "Останні реферали",
|
||||
"unavailable": "Дані про реферали тимчасово недоступні.",
|
||||
"empty": "Рефералів ще немає.",
|
||||
"inviter": "Запрошуючий",
|
||||
"invitee": "Запрошений користувач",
|
||||
"ip": "IP",
|
||||
"date": "Дата"
|
||||
},
|
||||
"dailyRewards": {
|
||||
"title": "Щоденні нагороди за вхід",
|
||||
"subtitle": "Розклад щоденних нагород за вхід",
|
||||
"enabled": "Статус функції",
|
||||
"yes": "Увімкнено",
|
||||
"no": "Вимкнено",
|
||||
"scheduleDays": "Дні розкладу",
|
||||
"claimsToday": "Отримань сьогодні",
|
||||
"claimsTotal": "Усього отримань",
|
||||
"status": "Статус функції",
|
||||
"statusHint": "При вимкненні карта нагороди ховається, а нові отримання відхиляються.",
|
||||
"disable": "Вимкнути",
|
||||
"enable": "Увімкнути",
|
||||
"schedule": "Розклад нагород",
|
||||
"day": "День {day}",
|
||||
"reward": "Нагорода",
|
||||
"amount": "Сума",
|
||||
"actions": "Дії",
|
||||
"addDay": "День",
|
||||
"add": "Додати день",
|
||||
"save": "Зберегти",
|
||||
"saving": "Збереження…",
|
||||
"saved": "Розклад нагород збережено.",
|
||||
"cancel": "Скасувати",
|
||||
"edit": "Редагувати",
|
||||
"delete": "Видалити",
|
||||
"created": "День нагороди додано.",
|
||||
"updated": "День нагороди оновлено.",
|
||||
"deleted": "День нагороди видалено.",
|
||||
"saveError": "День нагороди не вдалося зберегти.",
|
||||
"deleteError": "День нагороди не вдалося видалити.",
|
||||
"confirmDeleteTitle": "Видалити день нагороди",
|
||||
"confirmDeleteBody": "Цей день нагороди більше не видаватиметься. Минулі отримання залишаються записаними."
|
||||
}
|
||||
},
|
||||
"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": "Ваша щоденна нагорода готова до отримання"
|
||||
},
|
||||
"dailyClaimed": "Щоденну нагороду отримано — до завтра!",
|
||||
"dailyErrors": {
|
||||
"already_claimed": "Ви вже отримали сьогоднішню щоденну нагороду.",
|
||||
"disabled": "Щоденні нагороди зараз вимкнені.",
|
||||
"bad_config": "Розклад щоденних нагород налаштовано неправильно. Зверніться до персоналу.",
|
||||
"ratelimit": "Забагато спроб. Зачекайте трохи та спробуйте знову.",
|
||||
"error": "Щоденну нагороду не вдалося отримати. Спробуйте ще раз."
|
||||
},
|
||||
"dailyRewardTitle": "Щоденні нагороди",
|
||||
"dailyRewardHint": "Входьте щодня та отримуйте нагороду — серії ростуть до великих днів.",
|
||||
"dailyRewardDay": "День {day}",
|
||||
"dailyRewardStreak": "{count, plural, one {Серія: # день} few {Серія: # дня} many {Серія: # днів} other {Серія: # дня}}",
|
||||
"dailyRewardNextClaim": "Наступне отримання: {amount} {currency}",
|
||||
"dailyRewardTomorrow": "Завтра: {amount} {currency}",
|
||||
"dailyRewardClaim": "Отримати щоденну нагороду",
|
||||
"dailyRewardClaimedToday": "Отримано сьогодні — повертайтеся завтра за наступною нагородою.",
|
||||
"dailyRewardDisabled": "Щоденні нагороди зараз вимкнені. Ви можете дослідити готель.",
|
||||
"dailyRewardUnavailable": "Розклад щоденних нагород не вдалося завантажити. Спробуйте ще раз."
|
||||
},
|
||||
"housekeeping": {
|
||||
"preview": {
|
||||
@@ -6502,6 +6585,110 @@
|
||||
},
|
||||
"admin": {
|
||||
"studio": {
|
||||
"nitroCleanup": {
|
||||
"alreadyRunning": "Сканування вже виконується — підключено до нього.",
|
||||
"ageUnknown": "вік невідомий",
|
||||
"ageBelow": "< 1д",
|
||||
"scanButton": "Сканувати ресурси меблів",
|
||||
"scanningAssets": "Сканування ресурсів…",
|
||||
"cancelButton": "Скасувати",
|
||||
"deleteSelected": "Видалити вибрані ({count})",
|
||||
"deleting": "Видалення…",
|
||||
"redownloadBroken": "Завантажити пошкоджені заново",
|
||||
"redownloading": "Повне завантаження…",
|
||||
"autoClean": "Автоматично чистити старі підробки",
|
||||
"cleaning": "Очищення…",
|
||||
"exportManifest": "Експортувати манIFEST",
|
||||
"exporting": "Експорт…",
|
||||
"phaseStems": "Завантаження стеблів меблів…",
|
||||
"phaseReaddir": "Читання каталогів ресурсів…",
|
||||
"phaseValidate": "Перевірка пакетів .nitro…",
|
||||
"phaseScanning": "Сканування…",
|
||||
"scanProgressFiles": "{count} файлів",
|
||||
"repairProgress": "ok {ok}, не вдалося {failed}",
|
||||
"attachedNotice": "Сканування продовжується у фоні — результати з'являться після завершення.",
|
||||
"sessionCancelled": "Сканування скасовано.",
|
||||
"onlyOldLabel": "Показувати лише файли старіші за",
|
||||
"onlyOldAgeLabel": "Мінімальний вік у днях для показу",
|
||||
"onlyOldToggle": "Сховати нещодавні файли",
|
||||
"daysLabel": "днів",
|
||||
"autoAgeLabel": "Мінімальний вік у днях для автоочищення",
|
||||
"loadingResult": "Завантаження результату сканування…",
|
||||
"scannedStat": "файлів ресурсів проскановано",
|
||||
"cachedNotice": "(у кеші — каталоги не змінилися)",
|
||||
"fakeStat": "Підробки nitro (немає відповідного елемента)",
|
||||
"brokenStat": "Пошкоджені nitro (нечитабельні)",
|
||||
"groupEmpty": "Нічого не знайдено",
|
||||
"selectedCount": "вибрано {count}",
|
||||
"copiesBadge": "{count} копій",
|
||||
"groupFakeLabel": "Підробки nitro",
|
||||
"groupFakeDescription": "Ці файли не відповідають жодному елементу в items_base — залишки видалених або перейменованих меблів.",
|
||||
"groupBrokenLabel": "Пошкоджені nitro",
|
||||
"groupBrokenDescription": "Ці файли належать елементу, але не можуть бути прочитані як допустимий пакет Nitro.",
|
||||
"groupSwfLabel": "Сироти SWF",
|
||||
"groupSwfDescription": "Файли .swf, які не відповідають жодному елементу в items_base.",
|
||||
"groupIconLabel": "Сироти іконки",
|
||||
"groupIconDescription": "Файли іконок, які не відповідають жодному елементу в items_base.",
|
||||
"warningText": "Видалення пошкодженого .nitro залишає елемент у базі без пакета — краще завантажте його заново або дозвольте аудиту каталогу отримати його пізніше. Рядки бази ніколи не видаляються цим інструментом.",
|
||||
"onlyAssetsTouched": "Змінюються лише файли ресурсів — FurnitureData.json та рядки бази залишаються недоторканими.",
|
||||
"emptyHint": "Проскануйте кожен каталог ресурсів меблів, щоб знайти підробки та пошкоджені пакети nitro, а також сиріт SWF та іконки. Видаліть їх, завантажте пошкоджені заново або автоматично очистіть старі залишки.",
|
||||
"noResult": "Ще немає результату сканування — спочатку запустіть сканування ресурсів меблів.",
|
||||
"scanFailed": "Сканування не вдалося.",
|
||||
"confirmDeleteTitle": "Видалити {count} файл(ів) ресурсів?",
|
||||
"confirmDeleteDescription": "Файли буде видалено з кожного каталогу (public + дзеркальні gamedata). Рядки бази ніколи не змінюються.",
|
||||
"confirmDeleteLabel": "Видалити",
|
||||
"confirmRepairTitle": "Завантажити заново {count} пошкоджений(их) пакет(ів) .nitro?",
|
||||
"confirmRepairDescription": "Пакети будуть отримані заново з налаштованих джерел nitro та записані поверх кожного каталогу (public + дзеркальні gamedata).",
|
||||
"confirmRepairLabel": "Завантажити заново",
|
||||
"confirmAutoCleanTitle": "Автоматично очистити підробки nitro старіші за {days} днів?",
|
||||
"confirmAutoCleanDescription": "Видаляються лише підробки файлів .nitro (немає відповідного елемента) старіші за поріг. Пошкоджені пакети та нещодавні файли ніколи не змінюються.",
|
||||
"confirmAutoCleanLabel": "Автоочищення",
|
||||
"toastDeletePartial": "Видалено {copies} копій, але деякі файли не вдалося видалити",
|
||||
"toastDeleteDone": "Видалено {copies} копій файлів ({deleted} файлів)",
|
||||
"toastRepairDone": "Відновлено {count} пакетів .nitro",
|
||||
"toastRepairFailed": "Не вдалося отримати жодного пакета ({failed} не вдалося)",
|
||||
"toastRepairCancelled": "Відновлення скасовано",
|
||||
"toastAutoCleanDone": "Очищено {deleted} старих підробок файлів .nitro ({copies} копій). Пропущено {recent} нещодавніх + {broken} пошкоджених.",
|
||||
"toastAutoCleanNothing": "Немає достатньо старого для видалення (пропущено {recent} нещодавніх, {broken} пошкоджених)",
|
||||
"toastManifestDownload": "МанIFEST сканування завантажено",
|
||||
"gamedataTitle": "Очищення ігрових даних",
|
||||
"gamedataHint": "Спочатку перегляд: це переписує FurnitureData.json, FigureMap.json та FigureData.json. На відміну від інструментів ресурсів вище, видаляє рядки, які ні на що не посилаються — перевірте кількість перед запуском.",
|
||||
"gamedataScan": "Перегляд ігрових даних",
|
||||
"gamedataScanning": "Сканування…",
|
||||
"gamedataRun": "Запустити вибране",
|
||||
"gamedataRunning": "Очищення…",
|
||||
"gamedataNoResult": "Ще немає перегляду — спочатку проскануйте файли JSON ігрових даних.",
|
||||
"gamedataCount_duplicates": "Дублікати FurnitureData",
|
||||
"gamedataCount_orphans": "Сироти FurnitureData",
|
||||
"gamedataCount_figureMap": "Проблеми FigureMap",
|
||||
"gamedataCount_figureData": "Невикористаний FigureData",
|
||||
"gamedataPass_dedupeFurnitureData": "Дедуплікація FurnitureData",
|
||||
"gamedataPassDesc_dedupeFurnitureData": "Видаляє повторювані classnames всередині одного розділу, зберігаючи запис із найвищою ревізією.",
|
||||
"gamedataPass_cleanFurnitureData": "Очистити FurnitureData",
|
||||
"gamedataPassDesc_cleanFurnitureData": "Видаляє записи, у яких пакет .nitro відсутній у кожному каталозі.",
|
||||
"gamedataPass_cleanFigureMap": "Очистити FigureMap",
|
||||
"gamedataPassDesc_cleanFigureMap": "Видаляє частини, що вказують на відсутній набір у FigureData, а також точні дублікати.",
|
||||
"gamedataPass_cleanFigureData": "Очистити FigureData",
|
||||
"gamedataPassDesc_cleanFigureData": "Видаляє набори, на які не посилається жодна частина FigureMap, потім палітри, які не використовує жодин тип набору. Має запускатися після Очистити FigureMap.",
|
||||
"gamedataNothingSelected": "Виберіть хоча б один крок очищення",
|
||||
"gamedataConfirmTitle": "Перезаписати файли JSON ігрових даних?",
|
||||
"gamedataConfirmDescription": "{passes} крок(ів) будуть запущені проти {duplicates} дубльованих груп, {orphans} сирітських рядків, {figureMap} проблем FigureMap та {figureData} невикористаних записів FigureData. Рядки видаляються без резервної копії — це неможливо скасувати.",
|
||||
"gamedataConfirmLabel": "Перезаписати файли",
|
||||
"gamedataDifferingWarning": "Принаймні один дублікат не є точною копією збереженого запису, тому видалений рядок містяв дані, яких немає у вижившого.",
|
||||
"gamedataCrossSectionNote": "{count} classname(ів) існують як у roomitemtypes, так і в wallitemtypes. Вони лише повідомляються — видалення одного змінить тип елемента.",
|
||||
"gamedataToastDone": "Очищення ігрових даних видалило {removed} рядків",
|
||||
"gamedataToastNothing": "Ігрові дані вже були чистими",
|
||||
"gamedataMaxRemovalsLabel": "Макс. рядків на крок",
|
||||
"gamedataMaxRemovalsHint": "0 використовує значення за замовчуванням 500. Крок, який видалив би більше, зупиняється та питає замість запису.",
|
||||
"gamedataLimitTitle": "{pass} видалив би {wouldRemove} рядків, вище ліміту {maxRemovals}.",
|
||||
"gamedataLimitDescription": "Цей крок нічого не записав, тому файли не змінені. Спочатку перевірте шляхи до ресурсів — неправильний каталог робить кожен рядок сирітським. Підвищення ліміту — окремий, навмисний запуск.",
|
||||
"gamedataLimitOverride": "Все одно видалити {wouldRemove} рядків",
|
||||
"historyTitle": "Історія автоочищення",
|
||||
"historyScheduled": "за розкладом",
|
||||
"historyManual": "вручну",
|
||||
"historyEntry": "Видалено {deleted} ({copies} копій); пропущено {recent} нещодавніх і {broken} пошкоджених",
|
||||
"historyErrors": "{count} помилок"
|
||||
},
|
||||
"importDiagnostics": {
|
||||
"attempts": "Діагностика файлів",
|
||||
"preliminary": "Попередня перевірка адрес; вміст перевіряється під час імпорту.",
|
||||
|
||||
Reference in new issue
Block a user