aboutsummaryrefslogtreecommitdiff
path: root/src/services/locale/locale.service.js
blob: a4af8b90f4452f88a54b023824cb9eb34f533126 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import languagesObject from '../../i18n/messages'
import ISO6391 from 'iso-639-1'
import _ from 'lodash'

const specialLanguageCodes = {
  ja_easy: 'ja',
  zh_Hant: 'zh-HANT',
  zh: 'zh-Hans'
}

const internalToBrowserLocale = code => specialLanguageCodes[code] || code

const internalToBackendLocale = code => internalToBrowserLocale(code).replace('_', '-')
const internalToBackendLocaleMulti = codes => {
  const langs = Array.isArray(codes) ? codes : [codes]
  return langs.map(internalToBackendLocale).join(',')
}

const getLanguageName = (code) => {
  const specialLanguageNames = {
    ja_easy: 'やさしいにほんご',
    zh: '简体中文',
    zh_Hant: '繁體中文'
  }
  const languageName = specialLanguageNames[code] || ISO6391.getNativeName(code)
  const browserLocale = internalToBrowserLocale(code)
  return languageName.charAt(0).toLocaleUpperCase(browserLocale) + languageName.slice(1)
}

const languages = _.map(languagesObject.languages, (code) => ({ code, name: getLanguageName(code) })).sort((a, b) => a.name.localeCompare(b.name))

const localeService = {
  internalToBrowserLocale,
  internalToBackendLocale,
  internalToBackendLocaleMulti,
  languages,
  getLanguageName
}

export default localeService