chore: optimize the i18n code of router; 🌟
This commit is contained in:
67
src/utils/i18n.js
Normal file
67
src/utils/i18n.js
Normal file
@@ -0,0 +1,67 @@
|
||||
import Vue from 'vue'
|
||||
import VueI18n from 'vue-i18n'
|
||||
import routesI18n from '@/router/i18n'
|
||||
import './Objects'
|
||||
|
||||
/**
|
||||
* 创建 i18n 配置
|
||||
* @param router 路由
|
||||
* @param locale 本地化语言
|
||||
* @param fallback 回退语言
|
||||
* @returns {VueI18n}
|
||||
*/
|
||||
function initI18n(router, locale, fallback) {
|
||||
Vue.use(VueI18n)
|
||||
const options = router.options.routes.find(item => item.path === '/').children
|
||||
formatOptions(options, '')
|
||||
const CN = generateI18n(new Object(), options, 'name')
|
||||
const US = generateI18n(new Object(), options, 'path')
|
||||
const i18n = new VueI18n({
|
||||
locale,
|
||||
fallbackLocale: fallback,
|
||||
silentFallbackWarn: true,
|
||||
messages: {CN, US}
|
||||
})
|
||||
const messages = routesI18n.messages
|
||||
Object.keys(messages).forEach(key => {
|
||||
i18n.mergeLocaleMessage(key, messages[key])
|
||||
})
|
||||
return i18n
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据 router options 配置生成 国际化语言
|
||||
* @param lang
|
||||
* @param options
|
||||
* @param valueKey
|
||||
* @returns {*}
|
||||
*/
|
||||
function generateI18n(lang, options, valueKey) {
|
||||
options.forEach(menu => {
|
||||
let keys = menu.fullPath.substring(1).split('/').concat('name')
|
||||
lang.assignProps(keys, menu[valueKey])
|
||||
if (menu.children) {
|
||||
generateI18n(lang, menu.children, valueKey)
|
||||
}
|
||||
})
|
||||
return lang
|
||||
}
|
||||
|
||||
/**
|
||||
* 格式化 router options,生成 fullPath
|
||||
* @param options
|
||||
* @param parentPath
|
||||
*/
|
||||
function formatOptions(options, parentPath) {
|
||||
options.forEach(route => {
|
||||
let isFullPath = route.path.substring(0, 1) === '/'
|
||||
route.fullPath = isFullPath ? route.path : parentPath + '/' + route.path
|
||||
if (route.children) {
|
||||
formatOptions(route.children, route.fullPath)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
export {
|
||||
initI18n
|
||||
}
|
||||
Reference in New Issue
Block a user