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.
211 lines
5.5 KiB
211 lines
5.5 KiB
import { app, remote } from 'electron'
|
|
import { addLocaleData } from 'react-intl'
|
|
import Store from 'electron-store'
|
|
import get from 'lodash.get'
|
|
import { lookup } from 'country-data-lookup'
|
|
import createDebug from 'debug'
|
|
|
|
// Load locale data.
|
|
import bg from 'react-intl/locale-data/bg'
|
|
import cs from 'react-intl/locale-data/cs'
|
|
import de from 'react-intl/locale-data/de'
|
|
import el from 'react-intl/locale-data/el'
|
|
import en from 'react-intl/locale-data/en'
|
|
import es from 'react-intl/locale-data/es'
|
|
import fr from 'react-intl/locale-data/fr'
|
|
import ga from 'react-intl/locale-data/ga'
|
|
import hr from 'react-intl/locale-data/hr'
|
|
import ja from 'react-intl/locale-data/ja'
|
|
import nl from 'react-intl/locale-data/nl'
|
|
import pt from 'react-intl/locale-data/pt'
|
|
import ro from 'react-intl/locale-data/ro'
|
|
import ru from 'react-intl/locale-data/ru'
|
|
import sv from 'react-intl/locale-data/sv'
|
|
import tr from 'react-intl/locale-data/tr'
|
|
import uk from 'react-intl/locale-data/uk'
|
|
import zh from 'react-intl/locale-data/zh'
|
|
|
|
// Load translation data.
|
|
import bgTranslationMessages from '../../translations/bg-BG.json'
|
|
import csTranslationMessages from '../../translations/cs-CZ.json'
|
|
import deTranslationMessages from '../../translations/de-DE.json'
|
|
import elTranslationMessages from '../../translations/el-GR.json'
|
|
import enTranslationMessages from '../../translations/en.json'
|
|
import esTranslationMessages from '../../translations/es-ES.json'
|
|
import frTranslationMessages from '../../translations/fr-FR.json'
|
|
import gaTranslationMessages from '../../translations/ga-IE.json'
|
|
import hrTranslationMessages from '../../translations/hr-HR.json'
|
|
import jaTranslationMessages from '../../translations/ja-JP.json'
|
|
import nlTranslationMessages from '../../translations/nl-NL.json'
|
|
import ptTranslationMessages from '../../translations/pt-BR.json'
|
|
import roTranslationMessages from '../../translations/ro-RO.json'
|
|
import ruTranslationMessages from '../../translations/ru-RU.json'
|
|
import svTranslationMessages from '../../translations/sv-SE.json'
|
|
import trTranslationMessages from '../../translations/tr-TR.json'
|
|
import ukTranslationMessages from '../../translations/uk-UA.json'
|
|
import zhCNTranslationMessages from '../../translations/zh-CN.json'
|
|
import zhTWTranslationMessages from '../../translations/zh-TW.json'
|
|
|
|
const debug = createDebug('zap:i18n')
|
|
|
|
// Add locale data.
|
|
addLocaleData([
|
|
...bg,
|
|
...cs,
|
|
...de,
|
|
...el,
|
|
...en,
|
|
...es,
|
|
...fr,
|
|
...ga,
|
|
...hr,
|
|
...ja,
|
|
...nl,
|
|
...pt,
|
|
...ro,
|
|
...ru,
|
|
...sv,
|
|
...tr,
|
|
...uk,
|
|
...zh
|
|
])
|
|
|
|
// 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'
|
|
]
|
|
|
|
// Collate all translations.
|
|
export const translationMessages = {
|
|
en: enTranslationMessages,
|
|
bg: bgTranslationMessages,
|
|
'zh-CN': zhCNTranslationMessages,
|
|
'zh-TW': zhTWTranslationMessages,
|
|
hr: hrTranslationMessages,
|
|
cs: csTranslationMessages,
|
|
nl: nlTranslationMessages,
|
|
fr: frTranslationMessages,
|
|
ga: gaTranslationMessages,
|
|
de: deTranslationMessages,
|
|
el: elTranslationMessages,
|
|
ja: jaTranslationMessages,
|
|
pt: ptTranslationMessages,
|
|
ro: roTranslationMessages,
|
|
ru: ruTranslationMessages,
|
|
es: esTranslationMessages,
|
|
sv: svTranslationMessages,
|
|
tr: trTranslationMessages,
|
|
uk: ukTranslationMessages
|
|
}
|
|
|
|
/**
|
|
* Get the most appropriate language code.
|
|
* @return {string} Language code.
|
|
*/
|
|
export const getLocale = () => {
|
|
const store = new Store({ name: 'settings' })
|
|
const userLocale = store.get('locale')
|
|
if (userLocale) {
|
|
debug('Determined locale as %s from settings', userLocale)
|
|
return userLocale
|
|
}
|
|
const defaultLocale = (app || remote.app).getLocale() || 'en-US'
|
|
const language = defaultLocale.toLowerCase().split(/[_-]+/)[0]
|
|
let locale = 'en'
|
|
if (locales.includes(language)) {
|
|
locale = language
|
|
}
|
|
if (locales.includes(defaultLocale)) {
|
|
locale = userLocale
|
|
}
|
|
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 getCurrency = () => {
|
|
const store = new Store({ name: 'settings' })
|
|
const userCurrency = store.get('fiatTicker')
|
|
if (userCurrency) {
|
|
debug('Determined currency as %s from settings', userCurrency)
|
|
return userCurrency
|
|
}
|
|
const defaultLocale = (app || remote.app).getLocale() || 'en-US'
|
|
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
|
|
}
|
|
|