/** * Languages Loader */ const fs = require('fs'); const yaml = require('js-yaml'); const merge = (...args) => args.reduce((a, c) => ({ ...a, ...c, ...Object.entries(a) .filter(([k]) => c && typeof c[k] === 'object') .reduce((a, [k, v]) => (a[k] = merge(v, c[k]), a), {}) }), {}); const languages = [ 'ar-SA', 'cs-CZ', 'da-DK', 'de-DE', 'en-US', 'eo-UY', 'es-ES', 'fr-FR', 'id-ID', 'it-IT', 'ja-JP', 'ja-KS', 'kab-KAB', 'kn-IN', 'ko-KR', 'nl-NL', 'no-NO', 'pl-PL', 'pt-PT', 'ru-RU', 'ug-CN', 'uk-UA', 'zh-CN', 'zh-TW', ]; const primaries = { 'en': 'US', 'ja': 'JP', 'zh': 'CN', }; const locales = languages.reduce((a, c) => (a[c] = yaml.load(fs.readFileSync(`${__dirname}/${c}.yml`, 'utf-8')) || {}, a), {}); module.exports = Object.entries(locales) .reduce((a, [k ,v]) => (a[k] = (() => { const [lang] = k.split('-'); switch (k) { case 'ja-JP': return v; case 'ja-KS': case 'en-US': return merge(locales['ja-JP'], v); default: return merge( locales['ja-JP'], locales['en-US'], locales[`${lang}-${primaries[lang]}`] || {}, v ); } })(), a), {});