You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
2.3 KiB
119 lines
2.3 KiB
import get from 'lodash.get'
|
|
import { lookup } from 'country-data-lookup'
|
|
import createDebug from 'debug'
|
|
import isRenderer from 'is-electron-renderer'
|
|
|
|
// Defaine list of language that we will support.
|
|
export const locales = [
|
|
'bg',
|
|
'cs',
|
|
'de',
|
|
'el',
|
|
'en',
|
|
'es',
|
|
'fr',
|
|
'ga',
|
|
'hr',
|
|
'ja',
|
|
'nl',
|
|
'pt',
|
|
'ro',
|
|
'ru',
|
|
'sv',
|
|
'tr',
|
|
'uk',
|
|
'zh-CN',
|
|
'zh-TW'
|
|
]
|
|
|
|
// Defaine list of currencies that we will support.
|
|
export const currencies = [
|
|
'USD',
|
|
'EUR',
|
|
'JPY',
|
|
'GBP',
|
|
'CAD',
|
|
'KRW',
|
|
'AUD',
|
|
'BRL',
|
|
'CHF',
|
|
'CLP',
|
|
'CNY',
|
|
'DKK',
|
|
'HKD',
|
|
'INR',
|
|
'ISK',
|
|
'NZD',
|
|
'PLN',
|
|
'RUB',
|
|
'SEK',
|
|
'SGD',
|
|
'THB',
|
|
'TWB'
|
|
]
|
|
|
|
/**
|
|
* Debugger that does not log in the renderer process.
|
|
*/
|
|
const debuger = createDebug('zap:i18n')
|
|
const debug = (...args) => {
|
|
if (!isRenderer) {
|
|
debuger(args)
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get the most appropriate language code.
|
|
* @return {string} Language code.
|
|
*/
|
|
export const getDefaultLocale = () => {
|
|
const defaultLocale = window.navigator.language || 'en-US'
|
|
const language = defaultLocale.toLowerCase().split(/[_-]+/)[0]
|
|
let locale = 'en'
|
|
if (locales.includes(language)) {
|
|
locale = language
|
|
}
|
|
if (locales.includes(defaultLocale)) {
|
|
locale = defaultLocale
|
|
}
|
|
debug('Determined locale as %s', locale)
|
|
return locale
|
|
}
|
|
|
|
/**
|
|
* Get the most appropriate language code.
|
|
* @return {string} Language code.
|
|
*/
|
|
export const getLanguageName = lang => {
|
|
const customNames = {
|
|
el: 'Greek',
|
|
'zh-CN': 'Chinese (Simplified, PRC)',
|
|
'zh-TW': 'Chinese (Traditional, Taiwan)'
|
|
}
|
|
if (customNames[lang]) {
|
|
return customNames[lang]
|
|
}
|
|
|
|
const language = lang.toLowerCase().split(/[_-]+/)[0]
|
|
const data = lookup.languages({ alpha2: language })
|
|
const name = get(data, '[0]name', language)
|
|
debug('Determined language as %s', name)
|
|
return name
|
|
}
|
|
|
|
/**
|
|
* Get the most appropriate currency code.
|
|
* @return {string} Currency code.
|
|
*/
|
|
export const getDefaultCurrency = () => {
|
|
const defaultLocale = getDefaultLocale()
|
|
const country = defaultLocale.split(/[_-]+/)[1]
|
|
const data = lookup.countries({ alpha2: country })
|
|
const detectedCurrency = get(data, '[0]currencies[0]', 'USD')
|
|
let currency = 'USD'
|
|
if (currencies.includes(detectedCurrency)) {
|
|
currency = detectedCurrency
|
|
}
|
|
debug('Determined currency as %s', currency)
|
|
return currency
|
|
}
|
|
|