2022-05-22 18:40:59 +02:00
|
|
|
import languagesObject from '../../i18n/messages'
|
|
|
|
import ISO6391 from 'iso-639-1'
|
|
|
|
import _ from 'lodash'
|
|
|
|
|
2021-01-20 21:49:34 +01:00
|
|
|
const specialLanguageCodes = {
|
2022-07-31 11:35:48 +02:00
|
|
|
ja_easy: 'ja',
|
|
|
|
zh_Hant: 'zh-HANT',
|
|
|
|
zh: 'zh-Hans'
|
2021-01-20 21:49:34 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
const internalToBrowserLocale = code => specialLanguageCodes[code] || code
|
|
|
|
|
2022-05-22 18:40:59 +02:00
|
|
|
const internalToBackendLocale = code => internalToBrowserLocale(code).replace('_', '-')
|
2022-07-25 21:38:05 +02:00
|
|
|
const internalToBackendLocaleMulti = codes => {
|
|
|
|
const langs = Array.isArray(codes) ? codes : [codes]
|
|
|
|
return langs.map(internalToBackendLocale).join(',')
|
|
|
|
}
|
2022-05-22 18:40:59 +02:00
|
|
|
|
|
|
|
const getLanguageName = (code) => {
|
|
|
|
const specialLanguageNames = {
|
2022-07-31 11:35:48 +02:00
|
|
|
ja_easy: 'やさしいにほんご',
|
|
|
|
zh: '简体中文',
|
|
|
|
zh_Hant: '繁體中文'
|
2022-05-22 18:40:59 +02:00
|
|
|
}
|
|
|
|
const languageName = specialLanguageNames[code] || ISO6391.getNativeName(code)
|
|
|
|
const browserLocale = internalToBrowserLocale(code)
|
|
|
|
return languageName.charAt(0).toLocaleUpperCase(browserLocale) + languageName.slice(1)
|
|
|
|
}
|
|
|
|
|
2022-07-31 11:35:48 +02:00
|
|
|
const languages = _.map(languagesObject.languages, (code) => ({ code, name: getLanguageName(code) })).sort((a, b) => a.name.localeCompare(b.name))
|
2022-05-22 18:40:59 +02:00
|
|
|
|
2021-01-20 21:49:34 +01:00
|
|
|
const localeService = {
|
2022-05-22 18:40:59 +02:00
|
|
|
internalToBrowserLocale,
|
|
|
|
internalToBackendLocale,
|
2022-07-25 21:38:05 +02:00
|
|
|
internalToBackendLocaleMulti,
|
2022-05-22 18:40:59 +02:00
|
|
|
languages,
|
|
|
|
getLanguageName
|
2021-01-20 21:49:34 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
export default localeService
|