i18n.tsx
TLDR
The i18n.tsx
file in the Demo Projects project is responsible for handling internationalization (i18n) in the application. It exports functions for getting and setting the language messages, as well as determining the current language based on user settings or browser language.
Methods
getMessages
This method takes a language code as a parameter and returns the corresponding messages object for that language. If the language code is not recognized, it returns the messages for the default language (English).
getCurrentLanguage
This method returns the current language based on user settings or the browser language. If a stored language is available in the user settings, it is returned. Otherwise, it checks for the browser language and returns the closest match among the supported languages. If no match is found, it defaults to English.
storeLanguage
This method takes a language code as a parameter and stores it in the user settings.
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import messages_ca from '../i18n/ca.json'
import messages_de from '../i18n/de.json'
import messages_el from '../i18n/el.json'
import messages_en from '../i18n/en.json'
import messages_es from '../i18n/es.json'
import messages_fr from '../i18n/fr.json'
import messages_id from '../i18n/id.json'
import messages_it from '../i18n/it.json'
import messages_ja from '../i18n/ja.json'
import messages_nl from '../i18n/nl.json'
import messages_oc from '../i18n/oc.json'
import messages_ptBr from '../i18n/pt_BR.json'
import messages_ru from '../i18n/ru.json'
import messages_sv from '../i18n/sv.json'
import messages_tr from '../i18n/tr.json'
import messages_zhHans from '../i18n/zh_Hans.json'
import messages_zhHant from '../i18n/zh_Hant.json'
import {UserSettings} from './userSettings'
const supportedLanguages = ['ca', 'de', 'el', 'en', 'es', 'fr', 'id', 'it', 'ja', 'nl', 'oc', 'pt-br', 'ru', 'sv', 'tr', 'zh-cn', 'zh-tw']
export function getMessages(lang: string): {[key: string]: string} {
switch (lang) {
case 'ca':
return messages_ca
case 'de':
return messages_de
case 'el':
return messages_el
case 'es':
return messages_es
case 'fr':
return messages_fr
case 'id':
return messages_id
case 'it':
return messages_it
case 'ja':
return messages_ja
case 'nl':
return messages_nl
case 'oc':
return messages_oc
case 'pt-br':
return messages_ptBr
case 'ru':
return messages_ru
case 'sv':
return messages_sv
case 'tr':
return messages_tr
case 'zh-cn':
return messages_zhHans
case 'zh-tw':
return messages_zhHant
}
return messages_en
}
export function getCurrentLanguage(): string {
let lang = UserSettings.language
if (!lang) {
if (supportedLanguages.includes(navigator.language)) {
lang = navigator.language
} else if (supportedLanguages.includes(navigator.language.split(/[-_]/)[0])) {
lang = navigator.language.split(/[-_]/)[0]
} else {
lang = 'en'
}
}
return lang
}
export function storeLanguage(lang: string): void {
UserSettings.language = lang
}