mirror of
https://github.com/iczer/vue-antd-admin
synced 2025-04-05 19:41:37 +08:00
75 lines
1.8 KiB
JavaScript
75 lines
1.8 KiB
JavaScript
import Vue from 'vue'
|
||
import VueI18n from 'vue-i18n'
|
||
import routesI18n from '@/router/i18n'
|
||
import './Objects'
|
||
import {getI18nKey} from '@/utils/routerUtil'
|
||
|
||
/**
|
||
* 创建 i18n 配置
|
||
* @param locale 本地化语言
|
||
* @param fallback 回退语言
|
||
* @returns {VueI18n}
|
||
*/
|
||
function initI18n(locale, fallback) {
|
||
Vue.use(VueI18n)
|
||
let i18nOptions = {
|
||
locale,
|
||
fallbackLocale: fallback,
|
||
silentFallbackWarn: true,
|
||
messages: routesI18n.messages
|
||
}
|
||
return new VueI18n(i18nOptions)
|
||
}
|
||
|
||
/**
|
||
* 根据 router options 配置生成 国际化语言
|
||
* @param lang
|
||
* @param routes
|
||
* @param valueKey
|
||
* @returns {*}
|
||
*/
|
||
function generateI18n(lang, routes, valueKey) {
|
||
routes.forEach(route => {
|
||
let keys = getI18nKey(route.fullPath).split('.')
|
||
let value = valueKey === 'path' ? route[valueKey].split('/').filter(item => !item.startsWith(':') && item != '').join('.') : route[valueKey]
|
||
lang.assignProps(keys, value)
|
||
if (route.children) {
|
||
generateI18n(lang, route.children, valueKey)
|
||
}
|
||
})
|
||
return lang
|
||
}
|
||
|
||
/**
|
||
* 格式化 router.options.routes,生成 fullPath
|
||
* @param routes
|
||
* @param parentPath
|
||
*/
|
||
function formatFullPath(routes, parentPath = '') {
|
||
routes.forEach(route => {
|
||
let isFullPath = route.path.substring(0, 1) === '/'
|
||
route.fullPath = isFullPath ? route.path : (parentPath === '/' ? parentPath + route.path : parentPath + '/' + route.path)
|
||
if (route.children) {
|
||
formatFullPath(route.children, route.fullPath)
|
||
}
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 从路由提取国际化数据
|
||
* @param i18n
|
||
* @param routes
|
||
*/
|
||
function mergeI18nFromRoutes(i18n, routes) {
|
||
formatFullPath(routes)
|
||
const CN = generateI18n(new Object(), routes, 'name')
|
||
const US = generateI18n(new Object(), routes, 'path')
|
||
i18n.mergeLocaleMessage('CN', CN)
|
||
i18n.mergeLocaleMessage('US', US)
|
||
}
|
||
|
||
export {
|
||
initI18n,
|
||
mergeI18nFromRoutes
|
||
}
|