const fs = require('fs') const path = require('path') const { parseJson } = require('./json') const { getManifestJson } = require('./manifest') const delimiters = ['%', '%'] function initI18nOptions ( platform, inputDir, warning = false, withMessages = true ) { const locales = initLocales(path.resolve(inputDir, 'locale'), withMessages) if (!Object.keys(locales).length) { return } const manifestJson = getManifestJson() const fallbackLocale = manifestJson.fallbackLocale || manifestJson.locale const locale = resolveI18nLocale( platform, Object.keys(locales), fallbackLocale ) if (warning) { if (!fallbackLocale) { console.warn() } else if (locale !== fallbackLocale) { console.warn() } } return { locale, locales, delimiters } } function initLocales (dir, withMessages = true) { if (!fs.existsSync(dir)) { return {} } return fs.readdirSync(dir).reduce((res, filename) => { if (path.extname(filename) === '.json') { try { res[path.basename(filename).replace('.json', '')] = withMessages ? parseJson(fs.readFileSync(path.join(dir, filename), 'utf8')) : {} } catch (e) {} } return res }, {}) } function resolveI18nLocale (platfrom, locales, locale) { if (locale && locales.includes(locale)) { return locale } const defaultLocales = ['zh-Hans', 'zh-Hant'] if (platfrom === 'app' || platfrom === 'h5') { defaultLocales.unshift('en') } else { // 小程序 defaultLocales.push('en') } return defaultLocales.find(locale => locales.includes(locale)) || locales[0] } module.exports = { initLocales, initI18nOptions }