vue不依赖外部资源如何实现多语操作?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
第一步
首先建立一个locales.js 存放多语语言包的内容,这里只写了 zh-CN, en这两种语言,其他还想新增的话 方法一样,代码如下:
export default {
'zh-CN': {
name: '我是中文名字'
},
'en': {
name: 'I am English name'
}
}
第二步
通过浏览器的语言环境,获取对应的语言包,并吧语言包值付给 data 中的 locales
data () {
return {
locales: (() => {
// this.lang是父组件传递过来的, 这里的意思就是lang 优先使用父组件传递的语言,如果没有传递,就使用浏览器的语言(navigator.language)
const lang = this.lang || navigator.language
let useLang = /^zh/.test(lang) ? 'zh-CN' : /^en/.test(lang) ? 'en' : lang
// Object.keys 获取可枚举的属性 如果浏览器的语言不是英语 中文, 而且传递的lang参数也不是这两种之一,就默认使用 zh-CN
if (!Object.keys(locales).includes(useLang)) useLang = 'zh-CN'
return locales[useLang]
})(),
}
},
这个locales最终返回的是一个对象,比如,如果是中文环境,返回的数据如下:
{
name: '我是中文名字'
}
第三步
既然语言包都获取到了,还剩一个从语言包里面 获取对应key的方法:
methods: {
$_t (key) {
// this.locales就是上面那个对象
let localeStr = this.locales[key]
return localeStr
}
}
通过$_t这个方法,传入key,就可以获取到对应的value
总结&优化:
这样就实现了不用依赖vue-i18n这样的外部依赖,只使用vue就实现了多语;
$_t 这个方法可以放到 mixins 里面就避免了每次都要引入这个方法。
具体代码看这里: https://github.com/YalongYan/vue-practice/tree/master/vue-simple-multilingual
补充知识:vue-cli 打包(npm run build) 出现 ERROR in xx..js from UglifyJs Unexpected token: punc (()
之前打包还没问题,这次就报错了,后来发现原来是少了 .babelrc 文件, 网上找了好多方法都不行,后来看了之前的项目,原来是少了 .babelrc 文件, 只要在根目录下建立这个文件, 文件内容如下:
{
"presets": [
["env", { "modules": false }],
"stage-3"
]
}
文件位置看下图:
看完上述内容,你们掌握vue不依赖外部资源如何实现多语操作的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。