1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- 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
|