@tracearr/translations 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -0
- package/README.md +116 -0
- package/dist/config.d.ts +4510 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +164 -0
- package/dist/config.js.map +1 -0
- package/dist/config.mobile.d.ts +4511 -0
- package/dist/config.mobile.d.ts.map +1 -0
- package/dist/config.mobile.js +587 -0
- package/dist/config.mobile.js.map +1 -0
- package/dist/formatting.d.ts +120 -0
- package/dist/formatting.d.ts.map +1 -0
- package/dist/formatting.js +265 -0
- package/dist/formatting.js.map +1 -0
- package/dist/index.d.ts +46 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +49 -0
- package/dist/index.js.map +1 -0
- package/dist/language.d.ts +101 -0
- package/dist/language.d.ts.map +1 -0
- package/dist/language.js +241 -0
- package/dist/language.js.map +1 -0
- package/dist/locales/af/common.json +276 -0
- package/dist/locales/af/mobile.json +60 -0
- package/dist/locales/af/nav.json +22 -0
- package/dist/locales/af/notifications.json +262 -0
- package/dist/locales/af/pages.json +324 -0
- package/dist/locales/af/settings.json +243 -0
- package/dist/locales/af-ZA/common.json +308 -0
- package/dist/locales/af-ZA/mobile.json +178 -0
- package/dist/locales/af-ZA/nav.json +28 -0
- package/dist/locales/af-ZA/notifications.json +279 -0
- package/dist/locales/af-ZA/pages.json +953 -0
- package/dist/locales/af-ZA/settings.json +487 -0
- package/dist/locales/ar/common.json +276 -0
- package/dist/locales/ar/mobile.json +60 -0
- package/dist/locales/ar/nav.json +22 -0
- package/dist/locales/ar/notifications.json +262 -0
- package/dist/locales/ar/pages.json +324 -0
- package/dist/locales/ar/settings.json +243 -0
- package/dist/locales/ar-SA/common.json +308 -0
- package/dist/locales/ar-SA/mobile.json +178 -0
- package/dist/locales/ar-SA/nav.json +28 -0
- package/dist/locales/ar-SA/notifications.json +279 -0
- package/dist/locales/ar-SA/pages.json +953 -0
- package/dist/locales/ar-SA/settings.json +487 -0
- package/dist/locales/ca/common.json +276 -0
- package/dist/locales/ca/mobile.json +60 -0
- package/dist/locales/ca/nav.json +22 -0
- package/dist/locales/ca/notifications.json +262 -0
- package/dist/locales/ca/pages.json +324 -0
- package/dist/locales/ca/settings.json +243 -0
- package/dist/locales/ca-ES/common.json +308 -0
- package/dist/locales/ca-ES/mobile.json +178 -0
- package/dist/locales/ca-ES/nav.json +28 -0
- package/dist/locales/ca-ES/notifications.json +279 -0
- package/dist/locales/ca-ES/pages.json +953 -0
- package/dist/locales/ca-ES/settings.json +487 -0
- package/dist/locales/cs/common.json +276 -0
- package/dist/locales/cs/mobile.json +60 -0
- package/dist/locales/cs/nav.json +22 -0
- package/dist/locales/cs/notifications.json +262 -0
- package/dist/locales/cs/pages.json +324 -0
- package/dist/locales/cs/settings.json +243 -0
- package/dist/locales/cs-CZ/common.json +308 -0
- package/dist/locales/cs-CZ/mobile.json +178 -0
- package/dist/locales/cs-CZ/nav.json +28 -0
- package/dist/locales/cs-CZ/notifications.json +279 -0
- package/dist/locales/cs-CZ/pages.json +953 -0
- package/dist/locales/cs-CZ/settings.json +487 -0
- package/dist/locales/da/common.json +276 -0
- package/dist/locales/da/mobile.json +60 -0
- package/dist/locales/da/nav.json +22 -0
- package/dist/locales/da/notifications.json +262 -0
- package/dist/locales/da/pages.json +324 -0
- package/dist/locales/da/settings.json +243 -0
- package/dist/locales/da-DK/common.json +308 -0
- package/dist/locales/da-DK/mobile.json +178 -0
- package/dist/locales/da-DK/nav.json +28 -0
- package/dist/locales/da-DK/notifications.json +279 -0
- package/dist/locales/da-DK/pages.json +953 -0
- package/dist/locales/da-DK/settings.json +487 -0
- package/dist/locales/de/common.json +276 -0
- package/dist/locales/de/mobile.json +60 -0
- package/dist/locales/de/nav.json +22 -0
- package/dist/locales/de/notifications.json +262 -0
- package/dist/locales/de/pages.json +324 -0
- package/dist/locales/de/settings.json +243 -0
- package/dist/locales/de-DE/common.json +308 -0
- package/dist/locales/de-DE/mobile.json +178 -0
- package/dist/locales/de-DE/nav.json +28 -0
- package/dist/locales/de-DE/notifications.json +279 -0
- package/dist/locales/de-DE/pages.json +953 -0
- package/dist/locales/de-DE/settings.json +487 -0
- package/dist/locales/el/common.json +276 -0
- package/dist/locales/el/mobile.json +60 -0
- package/dist/locales/el/nav.json +22 -0
- package/dist/locales/el/notifications.json +262 -0
- package/dist/locales/el/pages.json +324 -0
- package/dist/locales/el/settings.json +243 -0
- package/dist/locales/el-GR/common.json +308 -0
- package/dist/locales/el-GR/mobile.json +178 -0
- package/dist/locales/el-GR/nav.json +28 -0
- package/dist/locales/el-GR/notifications.json +279 -0
- package/dist/locales/el-GR/pages.json +953 -0
- package/dist/locales/el-GR/settings.json +487 -0
- package/dist/locales/en/common.json +308 -0
- package/dist/locales/en/mobile.json +178 -0
- package/dist/locales/en/nav.json +28 -0
- package/dist/locales/en/notifications.json +279 -0
- package/dist/locales/en/pages.json +953 -0
- package/dist/locales/en/settings.json +487 -0
- package/dist/locales/en-US/common.json +308 -0
- package/dist/locales/en-US/mobile.json +178 -0
- package/dist/locales/en-US/nav.json +28 -0
- package/dist/locales/en-US/notifications.json +279 -0
- package/dist/locales/en-US/pages.json +953 -0
- package/dist/locales/en-US/settings.json +487 -0
- package/dist/locales/es/common.json +276 -0
- package/dist/locales/es/mobile.json +60 -0
- package/dist/locales/es/nav.json +22 -0
- package/dist/locales/es/notifications.json +262 -0
- package/dist/locales/es/pages.json +324 -0
- package/dist/locales/es/settings.json +243 -0
- package/dist/locales/es-ES/common.json +308 -0
- package/dist/locales/es-ES/mobile.json +178 -0
- package/dist/locales/es-ES/nav.json +28 -0
- package/dist/locales/es-ES/notifications.json +279 -0
- package/dist/locales/es-ES/pages.json +953 -0
- package/dist/locales/es-ES/settings.json +487 -0
- package/dist/locales/fi/common.json +276 -0
- package/dist/locales/fi/mobile.json +60 -0
- package/dist/locales/fi/nav.json +22 -0
- package/dist/locales/fi/notifications.json +262 -0
- package/dist/locales/fi/pages.json +324 -0
- package/dist/locales/fi/settings.json +243 -0
- package/dist/locales/fi-FI/common.json +308 -0
- package/dist/locales/fi-FI/mobile.json +178 -0
- package/dist/locales/fi-FI/nav.json +28 -0
- package/dist/locales/fi-FI/notifications.json +279 -0
- package/dist/locales/fi-FI/pages.json +953 -0
- package/dist/locales/fi-FI/settings.json +487 -0
- package/dist/locales/fr/common.json +276 -0
- package/dist/locales/fr/mobile.json +60 -0
- package/dist/locales/fr/nav.json +22 -0
- package/dist/locales/fr/notifications.json +262 -0
- package/dist/locales/fr/pages.json +324 -0
- package/dist/locales/fr/settings.json +243 -0
- package/dist/locales/fr-FR/common.json +308 -0
- package/dist/locales/fr-FR/mobile.json +178 -0
- package/dist/locales/fr-FR/nav.json +28 -0
- package/dist/locales/fr-FR/notifications.json +279 -0
- package/dist/locales/fr-FR/pages.json +953 -0
- package/dist/locales/fr-FR/settings.json +487 -0
- package/dist/locales/he/common.json +276 -0
- package/dist/locales/he/mobile.json +60 -0
- package/dist/locales/he/nav.json +22 -0
- package/dist/locales/he/notifications.json +262 -0
- package/dist/locales/he/pages.json +324 -0
- package/dist/locales/he/settings.json +243 -0
- package/dist/locales/he-IL/common.json +308 -0
- package/dist/locales/he-IL/mobile.json +178 -0
- package/dist/locales/he-IL/nav.json +28 -0
- package/dist/locales/he-IL/notifications.json +279 -0
- package/dist/locales/he-IL/pages.json +953 -0
- package/dist/locales/he-IL/settings.json +487 -0
- package/dist/locales/hu/common.json +276 -0
- package/dist/locales/hu/mobile.json +60 -0
- package/dist/locales/hu/nav.json +22 -0
- package/dist/locales/hu/notifications.json +262 -0
- package/dist/locales/hu/pages.json +324 -0
- package/dist/locales/hu/settings.json +243 -0
- package/dist/locales/hu-HU/common.json +308 -0
- package/dist/locales/hu-HU/mobile.json +178 -0
- package/dist/locales/hu-HU/nav.json +28 -0
- package/dist/locales/hu-HU/notifications.json +279 -0
- package/dist/locales/hu-HU/pages.json +953 -0
- package/dist/locales/hu-HU/settings.json +487 -0
- package/dist/locales/it/common.json +276 -0
- package/dist/locales/it/mobile.json +60 -0
- package/dist/locales/it/nav.json +22 -0
- package/dist/locales/it/notifications.json +262 -0
- package/dist/locales/it/pages.json +324 -0
- package/dist/locales/it/settings.json +243 -0
- package/dist/locales/it-IT/common.json +308 -0
- package/dist/locales/it-IT/mobile.json +178 -0
- package/dist/locales/it-IT/nav.json +28 -0
- package/dist/locales/it-IT/notifications.json +279 -0
- package/dist/locales/it-IT/pages.json +953 -0
- package/dist/locales/it-IT/settings.json +487 -0
- package/dist/locales/ja/common.json +276 -0
- package/dist/locales/ja/mobile.json +60 -0
- package/dist/locales/ja/nav.json +22 -0
- package/dist/locales/ja/notifications.json +262 -0
- package/dist/locales/ja/pages.json +324 -0
- package/dist/locales/ja/settings.json +243 -0
- package/dist/locales/ja-JP/common.json +308 -0
- package/dist/locales/ja-JP/mobile.json +178 -0
- package/dist/locales/ja-JP/nav.json +28 -0
- package/dist/locales/ja-JP/notifications.json +279 -0
- package/dist/locales/ja-JP/pages.json +953 -0
- package/dist/locales/ja-JP/settings.json +487 -0
- package/dist/locales/ko/common.json +276 -0
- package/dist/locales/ko/mobile.json +60 -0
- package/dist/locales/ko/nav.json +22 -0
- package/dist/locales/ko/notifications.json +262 -0
- package/dist/locales/ko/pages.json +324 -0
- package/dist/locales/ko/settings.json +243 -0
- package/dist/locales/ko-KR/common.json +308 -0
- package/dist/locales/ko-KR/mobile.json +178 -0
- package/dist/locales/ko-KR/nav.json +28 -0
- package/dist/locales/ko-KR/notifications.json +279 -0
- package/dist/locales/ko-KR/pages.json +953 -0
- package/dist/locales/ko-KR/settings.json +487 -0
- package/dist/locales/nl/common.json +276 -0
- package/dist/locales/nl/mobile.json +60 -0
- package/dist/locales/nl/nav.json +22 -0
- package/dist/locales/nl/notifications.json +262 -0
- package/dist/locales/nl/pages.json +324 -0
- package/dist/locales/nl/settings.json +243 -0
- package/dist/locales/nl-NL/common.json +308 -0
- package/dist/locales/nl-NL/mobile.json +178 -0
- package/dist/locales/nl-NL/nav.json +28 -0
- package/dist/locales/nl-NL/notifications.json +279 -0
- package/dist/locales/nl-NL/pages.json +953 -0
- package/dist/locales/nl-NL/settings.json +487 -0
- package/dist/locales/no/common.json +276 -0
- package/dist/locales/no/mobile.json +60 -0
- package/dist/locales/no/nav.json +22 -0
- package/dist/locales/no/notifications.json +262 -0
- package/dist/locales/no/pages.json +324 -0
- package/dist/locales/no/settings.json +243 -0
- package/dist/locales/no-NO/common.json +308 -0
- package/dist/locales/no-NO/mobile.json +178 -0
- package/dist/locales/no-NO/nav.json +28 -0
- package/dist/locales/no-NO/notifications.json +279 -0
- package/dist/locales/no-NO/pages.json +953 -0
- package/dist/locales/no-NO/settings.json +487 -0
- package/dist/locales/pl/common.json +276 -0
- package/dist/locales/pl/mobile.json +60 -0
- package/dist/locales/pl/nav.json +22 -0
- package/dist/locales/pl/notifications.json +262 -0
- package/dist/locales/pl/pages.json +324 -0
- package/dist/locales/pl/settings.json +243 -0
- package/dist/locales/pl-PL/common.json +308 -0
- package/dist/locales/pl-PL/mobile.json +178 -0
- package/dist/locales/pl-PL/nav.json +28 -0
- package/dist/locales/pl-PL/notifications.json +279 -0
- package/dist/locales/pl-PL/pages.json +953 -0
- package/dist/locales/pl-PL/settings.json +487 -0
- package/dist/locales/pt/common.json +276 -0
- package/dist/locales/pt/mobile.json +60 -0
- package/dist/locales/pt/nav.json +22 -0
- package/dist/locales/pt/notifications.json +262 -0
- package/dist/locales/pt/pages.json +324 -0
- package/dist/locales/pt/settings.json +243 -0
- package/dist/locales/pt-BR/common.json +308 -0
- package/dist/locales/pt-BR/mobile.json +178 -0
- package/dist/locales/pt-BR/nav.json +28 -0
- package/dist/locales/pt-BR/notifications.json +279 -0
- package/dist/locales/pt-BR/pages.json +953 -0
- package/dist/locales/pt-BR/settings.json +487 -0
- package/dist/locales/pt-PT/common.json +308 -0
- package/dist/locales/pt-PT/mobile.json +178 -0
- package/dist/locales/pt-PT/nav.json +28 -0
- package/dist/locales/pt-PT/notifications.json +279 -0
- package/dist/locales/pt-PT/pages.json +953 -0
- package/dist/locales/pt-PT/settings.json +487 -0
- package/dist/locales/ro/common.json +276 -0
- package/dist/locales/ro/mobile.json +60 -0
- package/dist/locales/ro/nav.json +22 -0
- package/dist/locales/ro/notifications.json +262 -0
- package/dist/locales/ro/pages.json +324 -0
- package/dist/locales/ro/settings.json +243 -0
- package/dist/locales/ro-RO/common.json +308 -0
- package/dist/locales/ro-RO/mobile.json +178 -0
- package/dist/locales/ro-RO/nav.json +28 -0
- package/dist/locales/ro-RO/notifications.json +279 -0
- package/dist/locales/ro-RO/pages.json +953 -0
- package/dist/locales/ro-RO/settings.json +487 -0
- package/dist/locales/ru/common.json +276 -0
- package/dist/locales/ru/mobile.json +60 -0
- package/dist/locales/ru/nav.json +22 -0
- package/dist/locales/ru/notifications.json +262 -0
- package/dist/locales/ru/pages.json +324 -0
- package/dist/locales/ru/settings.json +243 -0
- package/dist/locales/ru-RU/common.json +308 -0
- package/dist/locales/ru-RU/mobile.json +178 -0
- package/dist/locales/ru-RU/nav.json +28 -0
- package/dist/locales/ru-RU/notifications.json +279 -0
- package/dist/locales/ru-RU/pages.json +953 -0
- package/dist/locales/ru-RU/settings.json +487 -0
- package/dist/locales/sr/common.json +276 -0
- package/dist/locales/sr/mobile.json +60 -0
- package/dist/locales/sr/nav.json +22 -0
- package/dist/locales/sr/notifications.json +262 -0
- package/dist/locales/sr/pages.json +324 -0
- package/dist/locales/sr/settings.json +243 -0
- package/dist/locales/sr-SP/common.json +308 -0
- package/dist/locales/sr-SP/mobile.json +178 -0
- package/dist/locales/sr-SP/nav.json +28 -0
- package/dist/locales/sr-SP/notifications.json +279 -0
- package/dist/locales/sr-SP/pages.json +953 -0
- package/dist/locales/sr-SP/settings.json +487 -0
- package/dist/locales/sv/common.json +276 -0
- package/dist/locales/sv/mobile.json +60 -0
- package/dist/locales/sv/nav.json +22 -0
- package/dist/locales/sv/notifications.json +262 -0
- package/dist/locales/sv/pages.json +324 -0
- package/dist/locales/sv/settings.json +243 -0
- package/dist/locales/sv-SE/common.json +308 -0
- package/dist/locales/sv-SE/mobile.json +178 -0
- package/dist/locales/sv-SE/nav.json +28 -0
- package/dist/locales/sv-SE/notifications.json +279 -0
- package/dist/locales/sv-SE/pages.json +953 -0
- package/dist/locales/sv-SE/settings.json +487 -0
- package/dist/locales/tr/common.json +276 -0
- package/dist/locales/tr/mobile.json +60 -0
- package/dist/locales/tr/nav.json +22 -0
- package/dist/locales/tr/notifications.json +262 -0
- package/dist/locales/tr/pages.json +324 -0
- package/dist/locales/tr/settings.json +243 -0
- package/dist/locales/tr-TR/common.json +308 -0
- package/dist/locales/tr-TR/mobile.json +178 -0
- package/dist/locales/tr-TR/nav.json +28 -0
- package/dist/locales/tr-TR/notifications.json +279 -0
- package/dist/locales/tr-TR/pages.json +953 -0
- package/dist/locales/tr-TR/settings.json +487 -0
- package/dist/locales/uk/common.json +276 -0
- package/dist/locales/uk/mobile.json +60 -0
- package/dist/locales/uk/nav.json +22 -0
- package/dist/locales/uk/notifications.json +262 -0
- package/dist/locales/uk/pages.json +324 -0
- package/dist/locales/uk/settings.json +243 -0
- package/dist/locales/uk-UA/common.json +308 -0
- package/dist/locales/uk-UA/mobile.json +178 -0
- package/dist/locales/uk-UA/nav.json +28 -0
- package/dist/locales/uk-UA/notifications.json +279 -0
- package/dist/locales/uk-UA/pages.json +953 -0
- package/dist/locales/uk-UA/settings.json +487 -0
- package/dist/locales/vi/common.json +276 -0
- package/dist/locales/vi/mobile.json +60 -0
- package/dist/locales/vi/nav.json +22 -0
- package/dist/locales/vi/notifications.json +262 -0
- package/dist/locales/vi/pages.json +324 -0
- package/dist/locales/vi/settings.json +243 -0
- package/dist/locales/vi-VN/common.json +308 -0
- package/dist/locales/vi-VN/mobile.json +178 -0
- package/dist/locales/vi-VN/nav.json +28 -0
- package/dist/locales/vi-VN/notifications.json +279 -0
- package/dist/locales/vi-VN/pages.json +953 -0
- package/dist/locales/vi-VN/settings.json +487 -0
- package/dist/locales/zh/common.json +276 -0
- package/dist/locales/zh/mobile.json +60 -0
- package/dist/locales/zh/nav.json +22 -0
- package/dist/locales/zh/notifications.json +262 -0
- package/dist/locales/zh/pages.json +324 -0
- package/dist/locales/zh/settings.json +243 -0
- package/dist/locales/zh-CN/common.json +308 -0
- package/dist/locales/zh-CN/mobile.json +178 -0
- package/dist/locales/zh-CN/nav.json +28 -0
- package/dist/locales/zh-CN/notifications.json +279 -0
- package/dist/locales/zh-CN/pages.json +953 -0
- package/dist/locales/zh-CN/settings.json +487 -0
- package/dist/locales/zh-TW/common.json +308 -0
- package/dist/locales/zh-TW/mobile.json +178 -0
- package/dist/locales/zh-TW/nav.json +28 -0
- package/dist/locales/zh-TW/notifications.json +279 -0
- package/dist/locales/zh-TW/pages.json +953 -0
- package/dist/locales/zh-TW/settings.json +487 -0
- package/dist/mobile.d.ts +11 -0
- package/dist/mobile.d.ts.map +1 -0
- package/dist/mobile.js +14 -0
- package/dist/mobile.js.map +1 -0
- package/dist/types.d.ts +54 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +57 -0
- package/src/config.mobile.ts +647 -0
- package/src/config.ts +209 -0
- package/src/formatting.ts +297 -0
- package/src/index.ts +105 -0
- package/src/language.ts +270 -0
- package/src/locales/af-ZA/common.json +308 -0
- package/src/locales/af-ZA/mobile.json +178 -0
- package/src/locales/af-ZA/nav.json +28 -0
- package/src/locales/af-ZA/notifications.json +279 -0
- package/src/locales/af-ZA/pages.json +953 -0
- package/src/locales/af-ZA/settings.json +487 -0
- package/src/locales/ar-SA/common.json +308 -0
- package/src/locales/ar-SA/mobile.json +178 -0
- package/src/locales/ar-SA/nav.json +28 -0
- package/src/locales/ar-SA/notifications.json +279 -0
- package/src/locales/ar-SA/pages.json +953 -0
- package/src/locales/ar-SA/settings.json +487 -0
- package/src/locales/ca-ES/common.json +308 -0
- package/src/locales/ca-ES/mobile.json +178 -0
- package/src/locales/ca-ES/nav.json +28 -0
- package/src/locales/ca-ES/notifications.json +279 -0
- package/src/locales/ca-ES/pages.json +953 -0
- package/src/locales/ca-ES/settings.json +487 -0
- package/src/locales/cs-CZ/common.json +308 -0
- package/src/locales/cs-CZ/mobile.json +178 -0
- package/src/locales/cs-CZ/nav.json +28 -0
- package/src/locales/cs-CZ/notifications.json +279 -0
- package/src/locales/cs-CZ/pages.json +953 -0
- package/src/locales/cs-CZ/settings.json +487 -0
- package/src/locales/da-DK/common.json +308 -0
- package/src/locales/da-DK/mobile.json +178 -0
- package/src/locales/da-DK/nav.json +28 -0
- package/src/locales/da-DK/notifications.json +279 -0
- package/src/locales/da-DK/pages.json +953 -0
- package/src/locales/da-DK/settings.json +487 -0
- package/src/locales/de-DE/common.json +308 -0
- package/src/locales/de-DE/mobile.json +178 -0
- package/src/locales/de-DE/nav.json +28 -0
- package/src/locales/de-DE/notifications.json +279 -0
- package/src/locales/de-DE/pages.json +953 -0
- package/src/locales/de-DE/settings.json +487 -0
- package/src/locales/el-GR/common.json +308 -0
- package/src/locales/el-GR/mobile.json +178 -0
- package/src/locales/el-GR/nav.json +28 -0
- package/src/locales/el-GR/notifications.json +279 -0
- package/src/locales/el-GR/pages.json +953 -0
- package/src/locales/el-GR/settings.json +487 -0
- package/src/locales/en/common.json +308 -0
- package/src/locales/en/mobile.json +178 -0
- package/src/locales/en/nav.json +28 -0
- package/src/locales/en/notifications.json +279 -0
- package/src/locales/en/pages.json +953 -0
- package/src/locales/en/settings.json +487 -0
- package/src/locales/en-US/common.json +308 -0
- package/src/locales/en-US/mobile.json +178 -0
- package/src/locales/en-US/nav.json +28 -0
- package/src/locales/en-US/notifications.json +279 -0
- package/src/locales/en-US/pages.json +953 -0
- package/src/locales/en-US/settings.json +487 -0
- package/src/locales/es-ES/common.json +308 -0
- package/src/locales/es-ES/mobile.json +178 -0
- package/src/locales/es-ES/nav.json +28 -0
- package/src/locales/es-ES/notifications.json +279 -0
- package/src/locales/es-ES/pages.json +953 -0
- package/src/locales/es-ES/settings.json +487 -0
- package/src/locales/fi-FI/common.json +308 -0
- package/src/locales/fi-FI/mobile.json +178 -0
- package/src/locales/fi-FI/nav.json +28 -0
- package/src/locales/fi-FI/notifications.json +279 -0
- package/src/locales/fi-FI/pages.json +953 -0
- package/src/locales/fi-FI/settings.json +487 -0
- package/src/locales/fr-FR/common.json +308 -0
- package/src/locales/fr-FR/mobile.json +178 -0
- package/src/locales/fr-FR/nav.json +28 -0
- package/src/locales/fr-FR/notifications.json +279 -0
- package/src/locales/fr-FR/pages.json +953 -0
- package/src/locales/fr-FR/settings.json +487 -0
- package/src/locales/he-IL/common.json +308 -0
- package/src/locales/he-IL/mobile.json +178 -0
- package/src/locales/he-IL/nav.json +28 -0
- package/src/locales/he-IL/notifications.json +279 -0
- package/src/locales/he-IL/pages.json +953 -0
- package/src/locales/he-IL/settings.json +487 -0
- package/src/locales/hu-HU/common.json +308 -0
- package/src/locales/hu-HU/mobile.json +178 -0
- package/src/locales/hu-HU/nav.json +28 -0
- package/src/locales/hu-HU/notifications.json +279 -0
- package/src/locales/hu-HU/pages.json +953 -0
- package/src/locales/hu-HU/settings.json +487 -0
- package/src/locales/it-IT/common.json +308 -0
- package/src/locales/it-IT/mobile.json +178 -0
- package/src/locales/it-IT/nav.json +28 -0
- package/src/locales/it-IT/notifications.json +279 -0
- package/src/locales/it-IT/pages.json +953 -0
- package/src/locales/it-IT/settings.json +487 -0
- package/src/locales/ja-JP/common.json +308 -0
- package/src/locales/ja-JP/mobile.json +178 -0
- package/src/locales/ja-JP/nav.json +28 -0
- package/src/locales/ja-JP/notifications.json +279 -0
- package/src/locales/ja-JP/pages.json +953 -0
- package/src/locales/ja-JP/settings.json +487 -0
- package/src/locales/ko-KR/common.json +308 -0
- package/src/locales/ko-KR/mobile.json +178 -0
- package/src/locales/ko-KR/nav.json +28 -0
- package/src/locales/ko-KR/notifications.json +279 -0
- package/src/locales/ko-KR/pages.json +953 -0
- package/src/locales/ko-KR/settings.json +487 -0
- package/src/locales/nl-NL/common.json +308 -0
- package/src/locales/nl-NL/mobile.json +178 -0
- package/src/locales/nl-NL/nav.json +28 -0
- package/src/locales/nl-NL/notifications.json +279 -0
- package/src/locales/nl-NL/pages.json +953 -0
- package/src/locales/nl-NL/settings.json +487 -0
- package/src/locales/no-NO/common.json +308 -0
- package/src/locales/no-NO/mobile.json +178 -0
- package/src/locales/no-NO/nav.json +28 -0
- package/src/locales/no-NO/notifications.json +279 -0
- package/src/locales/no-NO/pages.json +953 -0
- package/src/locales/no-NO/settings.json +487 -0
- package/src/locales/pl-PL/common.json +308 -0
- package/src/locales/pl-PL/mobile.json +178 -0
- package/src/locales/pl-PL/nav.json +28 -0
- package/src/locales/pl-PL/notifications.json +279 -0
- package/src/locales/pl-PL/pages.json +953 -0
- package/src/locales/pl-PL/settings.json +487 -0
- package/src/locales/pt-BR/common.json +308 -0
- package/src/locales/pt-BR/mobile.json +178 -0
- package/src/locales/pt-BR/nav.json +28 -0
- package/src/locales/pt-BR/notifications.json +279 -0
- package/src/locales/pt-BR/pages.json +953 -0
- package/src/locales/pt-BR/settings.json +487 -0
- package/src/locales/pt-PT/common.json +308 -0
- package/src/locales/pt-PT/mobile.json +178 -0
- package/src/locales/pt-PT/nav.json +28 -0
- package/src/locales/pt-PT/notifications.json +279 -0
- package/src/locales/pt-PT/pages.json +953 -0
- package/src/locales/pt-PT/settings.json +487 -0
- package/src/locales/ro-RO/common.json +308 -0
- package/src/locales/ro-RO/mobile.json +178 -0
- package/src/locales/ro-RO/nav.json +28 -0
- package/src/locales/ro-RO/notifications.json +279 -0
- package/src/locales/ro-RO/pages.json +953 -0
- package/src/locales/ro-RO/settings.json +487 -0
- package/src/locales/ru-RU/common.json +308 -0
- package/src/locales/ru-RU/mobile.json +178 -0
- package/src/locales/ru-RU/nav.json +28 -0
- package/src/locales/ru-RU/notifications.json +279 -0
- package/src/locales/ru-RU/pages.json +953 -0
- package/src/locales/ru-RU/settings.json +487 -0
- package/src/locales/sr-SP/common.json +308 -0
- package/src/locales/sr-SP/mobile.json +178 -0
- package/src/locales/sr-SP/nav.json +28 -0
- package/src/locales/sr-SP/notifications.json +279 -0
- package/src/locales/sr-SP/pages.json +953 -0
- package/src/locales/sr-SP/settings.json +487 -0
- package/src/locales/sv-SE/common.json +308 -0
- package/src/locales/sv-SE/mobile.json +178 -0
- package/src/locales/sv-SE/nav.json +28 -0
- package/src/locales/sv-SE/notifications.json +279 -0
- package/src/locales/sv-SE/pages.json +953 -0
- package/src/locales/sv-SE/settings.json +487 -0
- package/src/locales/tr-TR/common.json +308 -0
- package/src/locales/tr-TR/mobile.json +178 -0
- package/src/locales/tr-TR/nav.json +28 -0
- package/src/locales/tr-TR/notifications.json +279 -0
- package/src/locales/tr-TR/pages.json +953 -0
- package/src/locales/tr-TR/settings.json +487 -0
- package/src/locales/uk-UA/common.json +308 -0
- package/src/locales/uk-UA/mobile.json +178 -0
- package/src/locales/uk-UA/nav.json +28 -0
- package/src/locales/uk-UA/notifications.json +279 -0
- package/src/locales/uk-UA/pages.json +953 -0
- package/src/locales/uk-UA/settings.json +487 -0
- package/src/locales/vi-VN/common.json +308 -0
- package/src/locales/vi-VN/mobile.json +178 -0
- package/src/locales/vi-VN/nav.json +28 -0
- package/src/locales/vi-VN/notifications.json +279 -0
- package/src/locales/vi-VN/pages.json +953 -0
- package/src/locales/vi-VN/settings.json +487 -0
- package/src/locales/zh-CN/common.json +308 -0
- package/src/locales/zh-CN/mobile.json +178 -0
- package/src/locales/zh-CN/nav.json +28 -0
- package/src/locales/zh-CN/notifications.json +279 -0
- package/src/locales/zh-CN/pages.json +953 -0
- package/src/locales/zh-CN/settings.json +487 -0
- package/src/locales/zh-TW/common.json +308 -0
- package/src/locales/zh-TW/mobile.json +178 -0
- package/src/locales/zh-TW/nav.json +28 -0
- package/src/locales/zh-TW/notifications.json +279 -0
- package/src/locales/zh-TW/pages.json +953 -0
- package/src/locales/zh-TW/settings.json +487 -0
- package/src/mobile.ts +69 -0
- package/src/types.ts +86 -0
package/src/language.ts
ADDED
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Language detection and management utilities.
|
|
3
|
+
*
|
|
4
|
+
* Works in both web (browser) and mobile (React Native/Expo) environments.
|
|
5
|
+
* Language codes use full locale format (e.g., 'fr-FR', 'zh-CN') except for
|
|
6
|
+
* English which uses 'en' as the base/fallback language.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import i18n from 'i18next';
|
|
10
|
+
|
|
11
|
+
// Locale loader — set by config.ts (web) or config.mobile.ts (mobile) at import time
|
|
12
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
13
|
+
let _loadLocaleFn: (lang: string) => Promise<void> = async () => {};
|
|
14
|
+
|
|
15
|
+
/** @internal */
|
|
16
|
+
export function _registerLocaleLoader(fn: (lang: string) => Promise<void>): void {
|
|
17
|
+
_loadLocaleFn = fn;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// Storage key for persisted language preference
|
|
21
|
+
const LANGUAGE_STORAGE_KEY = 'tracearr_language';
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Supported languages with display names.
|
|
25
|
+
* Add new languages here when adding translations.
|
|
26
|
+
*/
|
|
27
|
+
export const languageNames = {
|
|
28
|
+
en: 'English',
|
|
29
|
+
'af-ZA': 'Afrikaans',
|
|
30
|
+
'ar-SA': 'العربية',
|
|
31
|
+
'ca-ES': 'Català',
|
|
32
|
+
'cs-CZ': 'Čeština',
|
|
33
|
+
'da-DK': 'Dansk',
|
|
34
|
+
'de-DE': 'Deutsch',
|
|
35
|
+
'el-GR': 'Ελληνικά',
|
|
36
|
+
'es-ES': 'Español',
|
|
37
|
+
'fi-FI': 'Suomi',
|
|
38
|
+
'fr-FR': 'Français',
|
|
39
|
+
'he-IL': 'עברית',
|
|
40
|
+
'hu-HU': 'Magyar',
|
|
41
|
+
'it-IT': 'Italiano',
|
|
42
|
+
'ja-JP': '日本語',
|
|
43
|
+
'ko-KR': '한국어',
|
|
44
|
+
'nl-NL': 'Nederlands',
|
|
45
|
+
'no-NO': 'Norsk',
|
|
46
|
+
'pl-PL': 'Polski',
|
|
47
|
+
'pt-BR': 'Português (Brasil)',
|
|
48
|
+
'pt-PT': 'Português (Portugal)',
|
|
49
|
+
'ro-RO': 'Română',
|
|
50
|
+
'ru-RU': 'Русский',
|
|
51
|
+
'sr-SP': 'Српски',
|
|
52
|
+
'sv-SE': 'Svenska',
|
|
53
|
+
'tr-TR': 'Türkçe',
|
|
54
|
+
'uk-UA': 'Українська',
|
|
55
|
+
'vi-VN': 'Tiếng Việt',
|
|
56
|
+
'zh-CN': '中文 (简体)',
|
|
57
|
+
'zh-TW': '中文 (繁體)',
|
|
58
|
+
} as const;
|
|
59
|
+
|
|
60
|
+
export type LanguageCode = keyof typeof languageNames;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Get the list of supported language codes.
|
|
64
|
+
*/
|
|
65
|
+
export function getSupportedLanguages(): string[] {
|
|
66
|
+
return Object.keys(languageNames);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Check if a language code is supported (exact match).
|
|
71
|
+
*/
|
|
72
|
+
export function isLanguageSupported(lang: string): boolean {
|
|
73
|
+
if (!lang || typeof lang !== 'string') return false;
|
|
74
|
+
return lang in languageNames;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Resolve a language code to the best matching supported locale.
|
|
79
|
+
*
|
|
80
|
+
* Handles exact matches, legacy two-letter codes (e.g., 'fr' → 'fr-FR'),
|
|
81
|
+
* and browser locale strings (e.g., 'zh-Hant-TW' → 'zh-TW').
|
|
82
|
+
*
|
|
83
|
+
* Returns null if no match is found.
|
|
84
|
+
*/
|
|
85
|
+
export function resolveLocale(lang: string): string | null {
|
|
86
|
+
if (!lang || typeof lang !== 'string') return null;
|
|
87
|
+
|
|
88
|
+
// Normalize: lowercase language, uppercase region
|
|
89
|
+
const normalized = normalizeLocaleCode(lang);
|
|
90
|
+
|
|
91
|
+
// Exact match (e.g., 'zh-CN', 'en')
|
|
92
|
+
if (normalized in languageNames) return normalized;
|
|
93
|
+
|
|
94
|
+
// Try base language match (e.g., 'fr' → 'fr-FR', 'zh' → 'zh-CN')
|
|
95
|
+
const baseLang = normalized.split('-')[0];
|
|
96
|
+
if (!baseLang) return null;
|
|
97
|
+
|
|
98
|
+
// 'en' is a direct match
|
|
99
|
+
if (baseLang === 'en') return 'en';
|
|
100
|
+
|
|
101
|
+
// Find first supported locale starting with the base language
|
|
102
|
+
const match = Object.keys(languageNames).find((code) => code.startsWith(baseLang + '-'));
|
|
103
|
+
return match ?? null;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Normalize a locale code: lowercase language, uppercase region.
|
|
108
|
+
* e.g., 'ZH-cn' → 'zh-CN', 'FR' → 'fr', 'pt-br' → 'pt-BR'
|
|
109
|
+
*/
|
|
110
|
+
function normalizeLocaleCode(code: string): string {
|
|
111
|
+
const trimmed = code.trim();
|
|
112
|
+
const [lang, region] = trimmed.split('-');
|
|
113
|
+
if (!region) return trimmed.toLowerCase();
|
|
114
|
+
return `${lang?.toLowerCase()}-${region.toUpperCase()}`;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Detect the user's preferred language.
|
|
119
|
+
*
|
|
120
|
+
* Priority order:
|
|
121
|
+
* 1. Stored preference (localStorage/AsyncStorage)
|
|
122
|
+
* 2. Browser/device language (checks all preferred languages)
|
|
123
|
+
* 3. Fallback to 'en'
|
|
124
|
+
*
|
|
125
|
+
* @param storage - Optional storage adapter for React Native (AsyncStorage)
|
|
126
|
+
*/
|
|
127
|
+
export async function detectLanguage(storage?: {
|
|
128
|
+
getItem: (key: string) => Promise<string | null>;
|
|
129
|
+
}): Promise<string> {
|
|
130
|
+
// 1. Check stored preference
|
|
131
|
+
try {
|
|
132
|
+
const stored = await getStoredLanguage(storage);
|
|
133
|
+
if (stored) {
|
|
134
|
+
const resolved = resolveLocale(stored);
|
|
135
|
+
if (resolved) return resolved;
|
|
136
|
+
}
|
|
137
|
+
} catch (error) {
|
|
138
|
+
console.warn('[i18n] Failed to get stored language:', error);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// 2. Check browser/device language
|
|
142
|
+
const detected = detectSystemLanguage();
|
|
143
|
+
if (detected) return detected;
|
|
144
|
+
|
|
145
|
+
// 3. Fallback
|
|
146
|
+
return 'en';
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Detect the system/browser language.
|
|
151
|
+
* Checks all preferred languages in order (navigator.languages).
|
|
152
|
+
* Works in both web and React Native environments.
|
|
153
|
+
*/
|
|
154
|
+
export function detectSystemLanguage(): string | null {
|
|
155
|
+
if (typeof navigator === 'undefined') return null;
|
|
156
|
+
|
|
157
|
+
// Check all preferred languages in order
|
|
158
|
+
const languages = navigator.languages || (navigator.language ? [navigator.language] : []);
|
|
159
|
+
|
|
160
|
+
for (const lang of languages) {
|
|
161
|
+
if (!lang) continue;
|
|
162
|
+
const resolved = resolveLocale(lang);
|
|
163
|
+
if (resolved) return resolved;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return null;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Get the stored language preference.
|
|
171
|
+
* Safely handles localStorage exceptions (private browsing, SSR, etc.).
|
|
172
|
+
*/
|
|
173
|
+
async function getStoredLanguage(storage?: {
|
|
174
|
+
getItem: (key: string) => Promise<string | null>;
|
|
175
|
+
}): Promise<string | null> {
|
|
176
|
+
// React Native with AsyncStorage
|
|
177
|
+
if (storage) {
|
|
178
|
+
try {
|
|
179
|
+
return await storage.getItem(LANGUAGE_STORAGE_KEY);
|
|
180
|
+
} catch (error) {
|
|
181
|
+
console.warn('[i18n] AsyncStorage read failed:', error);
|
|
182
|
+
return null;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// Browser with localStorage
|
|
187
|
+
if (typeof localStorage !== 'undefined') {
|
|
188
|
+
try {
|
|
189
|
+
return localStorage.getItem(LANGUAGE_STORAGE_KEY);
|
|
190
|
+
} catch (error) {
|
|
191
|
+
// Fails in private browsing, SSR, or when storage is disabled
|
|
192
|
+
console.warn('[i18n] localStorage read failed:', error);
|
|
193
|
+
return null;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
return null;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Store the language preference.
|
|
202
|
+
* Safely handles localStorage exceptions.
|
|
203
|
+
*/
|
|
204
|
+
async function setStoredLanguage(
|
|
205
|
+
lang: string,
|
|
206
|
+
storage?: { setItem: (key: string, value: string) => Promise<void> }
|
|
207
|
+
): Promise<void> {
|
|
208
|
+
// React Native with AsyncStorage
|
|
209
|
+
if (storage) {
|
|
210
|
+
try {
|
|
211
|
+
await storage.setItem(LANGUAGE_STORAGE_KEY, lang);
|
|
212
|
+
} catch (error) {
|
|
213
|
+
console.warn('[i18n] AsyncStorage write failed:', error);
|
|
214
|
+
}
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
// Browser with localStorage
|
|
219
|
+
if (typeof localStorage !== 'undefined') {
|
|
220
|
+
try {
|
|
221
|
+
localStorage.setItem(LANGUAGE_STORAGE_KEY, lang);
|
|
222
|
+
} catch (error) {
|
|
223
|
+
// Fails in private browsing, SSR, or when quota exceeded
|
|
224
|
+
console.warn('[i18n] localStorage write failed:', error);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* Change the current language and persist the preference.
|
|
231
|
+
*
|
|
232
|
+
* @param lang - Locale code (e.g., 'en', 'fr-FR', 'zh-CN')
|
|
233
|
+
* @param storage - Optional storage adapter for React Native
|
|
234
|
+
* @throws Error if language code is invalid or unsupported
|
|
235
|
+
*/
|
|
236
|
+
export async function changeLanguage(
|
|
237
|
+
lang: string,
|
|
238
|
+
storage?: { setItem: (key: string, value: string) => Promise<void> }
|
|
239
|
+
): Promise<void> {
|
|
240
|
+
// Validate input
|
|
241
|
+
if (!lang || typeof lang !== 'string') {
|
|
242
|
+
throw new Error(`Invalid language code: ${String(lang)}`);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
const resolved = resolveLocale(lang);
|
|
246
|
+
|
|
247
|
+
if (!resolved) {
|
|
248
|
+
throw new Error(
|
|
249
|
+
`Language '${lang}' is not supported. Available: ${getSupportedLanguages().join(', ')}`
|
|
250
|
+
);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
await _loadLocaleFn(resolved);
|
|
254
|
+
await i18n.changeLanguage(resolved);
|
|
255
|
+
await setStoredLanguage(resolved, storage);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* Get the current language.
|
|
260
|
+
*/
|
|
261
|
+
export function getCurrentLanguage(): string {
|
|
262
|
+
return i18n.language || 'en';
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* Get the display name for a language code.
|
|
267
|
+
*/
|
|
268
|
+
export function getLanguageDisplayName(lang: string): string {
|
|
269
|
+
return languageNames[lang as LanguageCode] || lang;
|
|
270
|
+
}
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
{
|
|
2
|
+
"actions": {
|
|
3
|
+
"acknowledge": "Acknowledge",
|
|
4
|
+
"add": "Add",
|
|
5
|
+
"apply": "Apply",
|
|
6
|
+
"back": "Back",
|
|
7
|
+
"cancel": "Cancel",
|
|
8
|
+
"clear": "Clear",
|
|
9
|
+
"close": "Close",
|
|
10
|
+
"collapse": "Collapse",
|
|
11
|
+
"confirm": "Confirm",
|
|
12
|
+
"connect": "Connect",
|
|
13
|
+
"continue": "Continue",
|
|
14
|
+
"copy": "Copy",
|
|
15
|
+
"create": "Create",
|
|
16
|
+
"delete": "Delete",
|
|
17
|
+
"deselectAll": "Deselect All",
|
|
18
|
+
"disconnect": "Disconnect",
|
|
19
|
+
"dismiss": "Dismiss",
|
|
20
|
+
"download": "Download",
|
|
21
|
+
"edit": "Edit",
|
|
22
|
+
"expand": "Expand",
|
|
23
|
+
"export": "Export",
|
|
24
|
+
"filter": "Filter",
|
|
25
|
+
"goHome": "Go Home",
|
|
26
|
+
"grantPermission": "Grant Permission",
|
|
27
|
+
"import": "Import",
|
|
28
|
+
"later": "Later",
|
|
29
|
+
"next": "Next",
|
|
30
|
+
"openSettings": "Open Settings",
|
|
31
|
+
"previous": "Previous",
|
|
32
|
+
"refresh": "Refresh",
|
|
33
|
+
"remove": "Remove",
|
|
34
|
+
"reset": "Reset",
|
|
35
|
+
"retry": "Retry",
|
|
36
|
+
"save": "Save",
|
|
37
|
+
"search": "Search",
|
|
38
|
+
"select": "Select",
|
|
39
|
+
"selectAll": "Select All",
|
|
40
|
+
"showLess": "Show Less",
|
|
41
|
+
"showMore": "Show More",
|
|
42
|
+
"signIn": "Sign In",
|
|
43
|
+
"signOut": "Sign Out",
|
|
44
|
+
"signUp": "Sign Up",
|
|
45
|
+
"sort": "Sort",
|
|
46
|
+
"submit": "Submit",
|
|
47
|
+
"sync": "Sync",
|
|
48
|
+
"terminate": "Terminate",
|
|
49
|
+
"test": "Test",
|
|
50
|
+
"tryAgain": "Try Again",
|
|
51
|
+
"update": "Update",
|
|
52
|
+
"upload": "Upload",
|
|
53
|
+
"view": "View",
|
|
54
|
+
"viewAll": "View All",
|
|
55
|
+
"viewOnGithub": "View on GitHub",
|
|
56
|
+
"viewProfile": "View Profile"
|
|
57
|
+
},
|
|
58
|
+
"beta": "beta",
|
|
59
|
+
"confirmations": {
|
|
60
|
+
"deleteMessage": "Are you sure you want to delete this? This action cannot be undone.",
|
|
61
|
+
"deleteTitle": "Confirm Delete",
|
|
62
|
+
"unsavedChanges": "You have unsaved changes. Are you sure you want to leave?"
|
|
63
|
+
},
|
|
64
|
+
"count": {
|
|
65
|
+
"alert_one": "{{count}} alert",
|
|
66
|
+
"alert_other": "{{count}} alerts",
|
|
67
|
+
"device_one": "{{count}} device",
|
|
68
|
+
"device_other": "{{count}} devices",
|
|
69
|
+
"error_one": "{{count}} error",
|
|
70
|
+
"error_other": "{{count}} errors",
|
|
71
|
+
"item_one": "{{count}} item",
|
|
72
|
+
"item_other": "{{count}} items",
|
|
73
|
+
"library_one": "{{count}} library",
|
|
74
|
+
"library_other": "{{count}} libraries",
|
|
75
|
+
"location_one": "{{count}} location",
|
|
76
|
+
"location_other": "{{count}} locations",
|
|
77
|
+
"result_one": "{{count}} result",
|
|
78
|
+
"result_other": "{{count}} results",
|
|
79
|
+
"rule_one": "{{count}} rule",
|
|
80
|
+
"rule_other": "{{count}} rules",
|
|
81
|
+
"selected_one": "{{count}} selected",
|
|
82
|
+
"selected_other": "{{count}} selected",
|
|
83
|
+
"server_one": "{{count}} server",
|
|
84
|
+
"server_other": "{{count}} servers",
|
|
85
|
+
"session_one": "{{count}} session",
|
|
86
|
+
"session_other": "{{count}} sessions",
|
|
87
|
+
"stream_one": "{{count}} stream",
|
|
88
|
+
"stream_other": "{{count}} streams",
|
|
89
|
+
"user_one": "{{count}} user",
|
|
90
|
+
"user_other": "{{count}} users",
|
|
91
|
+
"usersAdded_one": "{{count}} user added",
|
|
92
|
+
"usersAdded_other": "{{count}} users added",
|
|
93
|
+
"usersUpdated_one": "{{count}} user updated",
|
|
94
|
+
"usersUpdated_other": "{{count}} users updated",
|
|
95
|
+
"violation_one": "{{count}} violation",
|
|
96
|
+
"violation_other": "{{count}} violations"
|
|
97
|
+
},
|
|
98
|
+
"duration": {
|
|
99
|
+
"day_one": "{{count}} day",
|
|
100
|
+
"day_other": "{{count}} days",
|
|
101
|
+
"hour_one": "{{count}} hour",
|
|
102
|
+
"hour_other": "{{count}} hours",
|
|
103
|
+
"minute_one": "{{count}} minute",
|
|
104
|
+
"minute_other": "{{count}} minutes",
|
|
105
|
+
"second_one": "{{count}} second",
|
|
106
|
+
"second_other": "{{count}} seconds"
|
|
107
|
+
},
|
|
108
|
+
"empty": {
|
|
109
|
+
"noData": "No data available",
|
|
110
|
+
"noDeviceData": "No device data available",
|
|
111
|
+
"noItems": "No items",
|
|
112
|
+
"noJobHistory": "No job history yet",
|
|
113
|
+
"noLocationData": "No location data available",
|
|
114
|
+
"noResults": "No results found",
|
|
115
|
+
"noSessionsFound": "No sessions found",
|
|
116
|
+
"noUserData": "No user data available"
|
|
117
|
+
},
|
|
118
|
+
"errors": {
|
|
119
|
+
"badRequest": "Invalid request",
|
|
120
|
+
"cannotReachServer": "Cannot reach server. Check URL and network connection.",
|
|
121
|
+
"conflict": "A conflict occurred",
|
|
122
|
+
"connectionFailed": "Connection failed",
|
|
123
|
+
"connectionTimedOut": "Connection timed out. Check your server URL.",
|
|
124
|
+
"failedToLoad": "Failed to load {{item}}",
|
|
125
|
+
"forbidden": "Access denied",
|
|
126
|
+
"generic": "An error occurred",
|
|
127
|
+
"networkError": "Network connection failed",
|
|
128
|
+
"notFound": "Not found",
|
|
129
|
+
"pageNotFound": "Page Not Found",
|
|
130
|
+
"pageNotFoundDesc": "The page you're looking for doesn't exist or has been moved.",
|
|
131
|
+
"rateLimited": "Too many requests. Please try again later",
|
|
132
|
+
"serverError": "Server error",
|
|
133
|
+
"somethingWentWrong": "Something went wrong",
|
|
134
|
+
"timeout": "Request timed out",
|
|
135
|
+
"unauthorized": "You are not authorized to perform this action",
|
|
136
|
+
"unexpectedError": "An unexpected error occurred. Please try again."
|
|
137
|
+
},
|
|
138
|
+
"labels": {
|
|
139
|
+
"actions": "Actions",
|
|
140
|
+
"active": "Active",
|
|
141
|
+
"activeStreams": "Active Streams",
|
|
142
|
+
"apiKey": "API Key",
|
|
143
|
+
"bandwidth": "Bandwidth",
|
|
144
|
+
"content": "Content",
|
|
145
|
+
"created": "Created",
|
|
146
|
+
"data": "Data",
|
|
147
|
+
"date": "Date",
|
|
148
|
+
"days": "days",
|
|
149
|
+
"device": "Device",
|
|
150
|
+
"deviceId": "Device ID",
|
|
151
|
+
"disabled": "Disabled",
|
|
152
|
+
"duration": "Duration",
|
|
153
|
+
"filters": "Filters",
|
|
154
|
+
"ipAddress": "IP Address",
|
|
155
|
+
"items": "Items",
|
|
156
|
+
"joined": "Joined",
|
|
157
|
+
"lastActivity": "Last Activity",
|
|
158
|
+
"loadMore": "Load More",
|
|
159
|
+
"location": "Location",
|
|
160
|
+
"media": "Media",
|
|
161
|
+
"mediaLength": "Media length",
|
|
162
|
+
"name": "Name",
|
|
163
|
+
"never": "Never",
|
|
164
|
+
"pausedTime": "Paused Time",
|
|
165
|
+
"platform": "Platform",
|
|
166
|
+
"player": "Player",
|
|
167
|
+
"product": "Product",
|
|
168
|
+
"progress": "Progress",
|
|
169
|
+
"quality": "Quality",
|
|
170
|
+
"rank": "Rank",
|
|
171
|
+
"reason": "Reason",
|
|
172
|
+
"recentSessions": "Recent Sessions",
|
|
173
|
+
"resolution": "Resolution",
|
|
174
|
+
"rule": "Rule",
|
|
175
|
+
"segments": "segments",
|
|
176
|
+
"server": "Server",
|
|
177
|
+
"serverOwner": "Server Owner",
|
|
178
|
+
"sessionDetails": "Session Details",
|
|
179
|
+
"sessions": "Sessions",
|
|
180
|
+
"severity": "Severity",
|
|
181
|
+
"size": "Size",
|
|
182
|
+
"started": "Started",
|
|
183
|
+
"status": "Status",
|
|
184
|
+
"stopped": "Stopped",
|
|
185
|
+
"streamDetails": "Stream Details",
|
|
186
|
+
"total": "total",
|
|
187
|
+
"totalSessions": "Total Sessions",
|
|
188
|
+
"transcodeReason": "Transcode Reason",
|
|
189
|
+
"trustScore": "Trust Score",
|
|
190
|
+
"type": "Type",
|
|
191
|
+
"unknown": "Unknown",
|
|
192
|
+
"user": "User",
|
|
193
|
+
"watchTime": "Watch Time",
|
|
194
|
+
"when": "When"
|
|
195
|
+
},
|
|
196
|
+
"media": {
|
|
197
|
+
"episode": "Episode",
|
|
198
|
+
"episode_plural": "Episodes",
|
|
199
|
+
"liveTV": "Live TV",
|
|
200
|
+
"movie": "Movie",
|
|
201
|
+
"movie_plural": "Movies",
|
|
202
|
+
"music": "Music",
|
|
203
|
+
"photo": "Photo",
|
|
204
|
+
"track": "Track",
|
|
205
|
+
"track_plural": "Tracks",
|
|
206
|
+
"tv": "TV",
|
|
207
|
+
"tvShows": "TV Shows"
|
|
208
|
+
},
|
|
209
|
+
"messages": {
|
|
210
|
+
"noChangesDetected": "No changes detected"
|
|
211
|
+
},
|
|
212
|
+
"or": "or",
|
|
213
|
+
"periods": {
|
|
214
|
+
"byDay": "By Day",
|
|
215
|
+
"byHour": "By Hour",
|
|
216
|
+
"last30Days": "Last 30 Days",
|
|
217
|
+
"last7Days": "Last 7 Days",
|
|
218
|
+
"lastYear": "Last Year"
|
|
219
|
+
},
|
|
220
|
+
"playback": {
|
|
221
|
+
"directPlay": "Direct Play",
|
|
222
|
+
"directStream": "Direct Stream",
|
|
223
|
+
"paused": "Paused",
|
|
224
|
+
"playing": "Playing",
|
|
225
|
+
"stopped": "Stopped",
|
|
226
|
+
"transcode": "Transcode"
|
|
227
|
+
},
|
|
228
|
+
"relativeTime": {
|
|
229
|
+
"day_one": "{{count}} day ago",
|
|
230
|
+
"day_other": "{{count}} days ago",
|
|
231
|
+
"hour_one": "{{count}} hour ago",
|
|
232
|
+
"hour_other": "{{count}} hours ago",
|
|
233
|
+
"justNow": "Just now",
|
|
234
|
+
"minute_one": "{{count}} minute ago",
|
|
235
|
+
"minute_other": "{{count}} minutes ago",
|
|
236
|
+
"month_one": "{{count}} month ago",
|
|
237
|
+
"month_other": "{{count}} months ago",
|
|
238
|
+
"second_one": "{{count}} second ago",
|
|
239
|
+
"second_other": "{{count}} seconds ago",
|
|
240
|
+
"week_one": "{{count}} week ago",
|
|
241
|
+
"week_other": "{{count}} weeks ago",
|
|
242
|
+
"year_one": "{{count}} year ago",
|
|
243
|
+
"year_other": "{{count}} years ago"
|
|
244
|
+
},
|
|
245
|
+
"search": {
|
|
246
|
+
"placeholder": "Search...",
|
|
247
|
+
"searchTitles": "Search titles, users...",
|
|
248
|
+
"searchUsers": "Search users..."
|
|
249
|
+
},
|
|
250
|
+
"servers": {
|
|
251
|
+
"emby": "Emby",
|
|
252
|
+
"jellyfin": "Jellyfin",
|
|
253
|
+
"plex": "Plex"
|
|
254
|
+
},
|
|
255
|
+
"severity": {
|
|
256
|
+
"high": "High",
|
|
257
|
+
"low": "Low",
|
|
258
|
+
"warning": "Warning"
|
|
259
|
+
},
|
|
260
|
+
"states": {
|
|
261
|
+
"acknowledged": "Acknowledged",
|
|
262
|
+
"acknowledging": "Acknowledging...",
|
|
263
|
+
"active": "Active",
|
|
264
|
+
"completed": "Completed",
|
|
265
|
+
"connected": "Connected",
|
|
266
|
+
"connecting": "Connecting...",
|
|
267
|
+
"deleting": "Deleting...",
|
|
268
|
+
"disabled": "Disabled",
|
|
269
|
+
"disconnected": "Disconnected",
|
|
270
|
+
"dismissing": "Dismissing...",
|
|
271
|
+
"enabled": "Enabled",
|
|
272
|
+
"error": "Error",
|
|
273
|
+
"failed": "Failed",
|
|
274
|
+
"inactive": "Inactive",
|
|
275
|
+
"loading": "Loading...",
|
|
276
|
+
"offline": "Offline",
|
|
277
|
+
"online": "Online",
|
|
278
|
+
"pending": "Pending",
|
|
279
|
+
"saving": "Saving...",
|
|
280
|
+
"success": "Success"
|
|
281
|
+
},
|
|
282
|
+
"table": {
|
|
283
|
+
"selectAllOnPage": "Select all on page",
|
|
284
|
+
"selectAllTotal": "Select all {{total}} items",
|
|
285
|
+
"selectRow": "Select row"
|
|
286
|
+
},
|
|
287
|
+
"time": {
|
|
288
|
+
"allTime": "All Time",
|
|
289
|
+
"now": "Now",
|
|
290
|
+
"thisMonth": "This Month",
|
|
291
|
+
"thisWeek": "This Week",
|
|
292
|
+
"today": "Today",
|
|
293
|
+
"yesterday": "Yesterday"
|
|
294
|
+
},
|
|
295
|
+
"units": {
|
|
296
|
+
"km": "km",
|
|
297
|
+
"kmh": "km/h",
|
|
298
|
+
"mi": "mi",
|
|
299
|
+
"mph": "mph"
|
|
300
|
+
},
|
|
301
|
+
"validation": {
|
|
302
|
+
"invalidEmail": "Please enter a valid email address",
|
|
303
|
+
"invalidUrl": "Please enter a valid URL",
|
|
304
|
+
"maxLength": "Must be at most {{max}} characters",
|
|
305
|
+
"minLength": "Must be at least {{min}} characters",
|
|
306
|
+
"required": "This field is required"
|
|
307
|
+
}
|
|
308
|
+
}
|