import AntdEn from 'ant-design-vue/es/locale/en_US'; import AntdZh from 'ant-design-vue/es/locale/zh_CN'; import lodash from 'lodash'; import Vue from 'vue'; import VueI18n from 'vue-i18n'; import en from './en'; import zh from './zh'; Vue.use(VueI18n) const defaultLocales = { en, zh, } // const files = require.context('@/pages', true, /locales.ts$/) // 根据目录结构去搜索文件 // files.keys().map(x => { // const locale = files(x).default // lodash.assign(locales.en, locale.en) // lodash.assign(locales.zh, locale.zh) // }) const Enumlocales = lodash.mapValues(lodash.cloneDeep(zh), (val, key) => key) const $i18n = new VueI18n({ locale: 'zh', fallbackLocale: 'zh', messages: defaultLocales }); // export const $i18n = new VueI18n({ // locale: 'zh', // fallbackLocale: 'zh', // messages: locales // }) export const Locales = { $i18n, getAntdLocale: (locale) => lodash.get({ zh: AntdZh, en: AntdEn }, locale), inject(context) { // nuxt context if (lodash.has(context, 'app')) { lodash.set(context.app, 'i18n', $i18n) } }, init(params: { /** 页面配置 */ pagesContext?: __WebpackModuleApi.RequireContext, /** 扩展 */ locales?: any } = {}) { const locale = {} if (params.pagesContext) { const files = params.pagesContext; files.keys().map(x => { const lole = files(x) if (lodash.has(lole, 'default')) { lodash.merge(locale, lole.default) } }) } lodash.merge(locale, params.locales) lodash.mapValues(locale, (val, key) => { $i18n.mergeLocaleMessage(key, val) }) return $i18n } } lodash.set(Vue, 'onChangeLanguage', (locale) => { Locales.$i18n.locale = locale; }) Object.defineProperty(Vue.prototype, '$Enumlocales', { get: lodash.constant(Enumlocales) }) Object.defineProperty(Vue.prototype, 'getAntdLocale', { get: lodash.constant(Locales.getAntdLocale) }) // Object.defineProperty(Vue.prototype, 'i18n', { // get: lodash.constant($i18n) // }) declare module 'vue/types/vue' { interface Vue { /** * 语言包 */ readonly $Enumlocales: typeof Enumlocales readonly getAntdLocale: (locale) => any } interface VueConstructor { readonly onChangeLanguage: (locale) => any } }