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 }