import Vue from 'vue' import VueI18n from 'vue-i18n' import store from '@/store' export const getLocale = function() { let locale = uni.getStorageSync('locale') if (!locale) { locale = uni.getLocale() if (locale.indexOf('zh') === 0) { return 'zh-cn' } else { return 'en-us' } } return locale || 'zh-cn' } export function setLocale(locale) { if (VueI18n.instance && VueI18n.instance.locale === locale) { return } if (VueI18n.instance) { VueI18n.instance.locale = locale } // if (locale !== 'zh-cn') { // const r = getAppLocale({ 'app_id': 'starify-ui', 'locale': locale.replace('-', '_') }) // if (r.ret === 0) { // let messages = VueI18n.instance.getLocaleMessage(locale) // messages = Object.assign(messages, r.data) // VueI18n.instance.setLocaleMessage(locale, messages) // } // } const messages = VueI18n.instance.getLocaleMessage(locale) VueI18n.instance.setLocaleMessage(locale, messages) store.commit('SET_LOCALE', locale) uni.setLocale(locale) uni.setStorageSync('locale', locale) } function loadLocaleMessages() { const locales = require.context('./lang', true, /[A-Za-z0-9-_,\s]+\.js$/i) const messages = { 'zh-cn': {}} locales.keys().forEach((key) => { const matched = key.match(/\/module\/([A-Za-z0-9-_]+)\/([^.]*)\./i) if (matched && matched.length > 1) { const locale = matched[1] const module = matched[2] if (!messages[locale]) { messages[locale] = {} } messages[locale][module] = locales(key)['default'] } }) return messages } export function initLocale() { if (!VueI18n.locateInit) { VueI18n.locateInit = true const locale = getLocale() setLocale(locale) } } if (!VueI18n.instance) { Vue.use(VueI18n) const i18n = new VueI18n({ locale: 'zh-cn', fallbackLocale: 'zh-cn', messages: loadLocaleMessages(), silentFallbackWarn: true }) VueI18n.instance = i18n i18n.$t = Vue.prototype.$t = (key, text, values) => { let t = i18n.t(key, values) if (t) { t = t.toString() } return t || text } i18n.$tc = Vue.prototype.$tc = (key, text, values) => { let t = i18n.t(key, values) if (t) { t = t.toString() } return t || text } } export default VueI18n.instance