X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=shared%2Fmodels%2Fi18n%2Fi18n.ts;h=9a5ea27dc59c0628f232d91b25ea76257a545dc5;hb=2a39506c7da9ef79671d4c21539313b6d49b1884;hp=4d50bc36ea73edca5e4130c1766ec08655bf01a5;hpb=e945b184a0f29b47c33bbd05578f3493ca9c8e6c;p=github%2FChocobozzz%2FPeerTube.git diff --git a/shared/models/i18n/i18n.ts b/shared/models/i18n/i18n.ts index 4d50bc36e..9a5ea27dc 100644 --- a/shared/models/i18n/i18n.ts +++ b/shared/models/i18n/i18n.ts @@ -1,34 +1,100 @@ +export const LOCALE_FILES = [ 'player', 'server' ] + export const I18N_LOCALES = { - 'en-US': 'English (US)', - fr: 'French' + // Always first to avoid issues when using express acceptLanguages function when no accept language header is set + 'en-US': 'English', + + 'ca-ES': 'Català', + 'cs-CZ': 'Čeština', + 'de-DE': 'Deutsch', + 'el-GR': 'ελληνικά', + 'eo': 'Esperanto', + 'es-ES': 'Español', + 'eu-ES': 'Euskara', + 'fi-FI': 'suomi', + 'fr-FR': 'Français', + 'gd': 'Gàidhlig', + 'hu-HU': 'magyar', + 'it-IT': 'Italiano', + 'ja-JP': '日本語', + 'nl-NL': 'Nederlands', + 'oc': 'Occitan', + 'pl-PL': 'Polski', + 'pt-BR': 'Português (Brasil)', + 'pt-PT': 'Português (Portugal)', + 'ru-RU': 'русский', + 'sv-SE': 'svenska', + 'th-TH': 'ไทย', + 'zh-Hans-CN': '简体中文(中国)', + 'zh-Hant-TW': '繁體中文(台灣)' +} + +const I18N_LOCALE_ALIAS = { + 'ca': 'ca-ES', + 'cs': 'cs-CZ', + 'de': 'de-DE', + 'el': 'el-GR', + 'en': 'en-US', + 'es': 'es-ES', + 'eu': 'eu-ES', + 'fi': 'fi-FI', + 'fr': 'fr-FR', + 'ja': 'ja-JP', + 'it': 'it-IT', + 'hu': 'hu-HU', + 'nl': 'nl-NL', + 'pl': 'pl-PL', + 'pt': 'pt-BR', + 'ru': 'ru-RU', + 'sv': 'sv-SE', + 'th': 'th-TH', + 'zh': 'zh-Hans-CN', + 'zh-Hans': 'zh-Hans-CN', + 'zh-CN': 'zh-Hans-CN', + 'zh-Hant': 'zh-Hant-TW', + 'zh-TW': 'zh-Hant-TW' } +export const POSSIBLE_LOCALES = Object.keys(I18N_LOCALES) + .concat(Object.keys(I18N_LOCALE_ALIAS)) + export function getDefaultLocale () { return 'en-US' } export function isDefaultLocale (locale: string) { - return locale === getDefaultLocale() + return getCompleteLocale(locale) === getCompleteLocale(getDefaultLocale()) +} + +export function peertubeTranslate (str: string, translations?: { [ id: string ]: string }) { + // FIXME: remove disable rule when the client is upgraded to typescript 3.7 + // eslint-disable-next-line + return translations && translations[str] ? translations[str] : str } -const possiblePaths = Object.keys(I18N_LOCALES).map(l => '/' + l) +const possiblePaths = POSSIBLE_LOCALES.map(l => '/' + l) export function is18nPath (path: string) { - return possiblePaths.indexOf(path) !== -1 + return possiblePaths.includes(path) } -const possibleLanguages = Object.keys(I18N_LOCALES) export function is18nLocale (locale: string) { - return possibleLanguages.indexOf(locale) !== -1 + return POSSIBLE_LOCALES.includes(locale) } -// Only use in dev mode, so relax -// In production, the locale always match with a I18N_LANGUAGES key -export function buildFileLocale (locale: string) { - if (!is18nLocale(locale)) { - // Some working examples for development purpose - if (locale.split('-')[ 0 ] === 'en') return 'en_US' - else if (locale === 'fr') return 'fr' - } +export function getCompleteLocale (locale: string) { + if (!locale) return locale - return locale.replace('-', '_') + if (I18N_LOCALE_ALIAS[locale]) return I18N_LOCALE_ALIAS[locale] + + return locale +} + +export function getShortLocale (locale: string) { + if (locale.includes('-') === false) return locale + + return locale.split('-')[0] +} + +export function buildFileLocale (locale: string) { + return getCompleteLocale(locale) }