vue实践---vue不依赖外部资源实现简单多语操作


Posted in Javascript onSeptember 21, 2020

vue使用多语,最常见的就是 vue-i18n, 但是如果开发中的多语很少,比如就不到10个多语,这样就没必要引入vue-i18n了, 引入了反正导致代码体积大了,这时候单纯用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实践---vue不依赖外部资源实现简单多语操作

以上这篇vue实践---vue不依赖外部资源实现简单多语操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用prototype实现的简单小巧的多级联动菜单
Mar 24 Javascript
JQuery的Validation插件中Remote验证的中文问题
Jul 26 Javascript
jQuery表格行换色的三种实现方法
Jun 27 Javascript
jQuery学习笔记之总体架构
Jun 03 Javascript
Node.js异步I/O学习笔记
Nov 04 Javascript
jQuery中[attribute*=value]选择器用法实例
Dec 31 Javascript
AngualrJS中的Directive制作一个菜单
Jan 26 Javascript
window.onerror()的用法与实例分析
Jan 27 Javascript
JS实现设置ff与ie元素绝对位置的方法
Mar 08 Javascript
微信小程序实现3D轮播图效果(非swiper组件)
Sep 21 Javascript
解决vue项目F5刷新mounted里的函数不执行问题
Nov 05 Javascript
vue远程加载sfc组件思路详解
Dec 25 Javascript
js节流防抖应用场景,以及在vue中节流防抖的具体实现操作
Sep 21 #Javascript
微信小程序实现翻牌抽奖动画
Sep 21 #Javascript
不依任何赖第三方,单纯用vue实现Tree 树形控件的案例
Sep 21 #Javascript
微信小程序实现转盘抽奖
Sep 21 #Javascript
结合axios对项目中的api请求进行封装操作
Sep 21 #Javascript
微信小程序实现打卡签到页面
Sep 21 #Javascript
微信小程序实现签到弹窗动画
Sep 21 #Javascript
You might like
PHP 模板高级篇总结
2006/12/21 PHP
PHP设置图片文件上传大小的具体实现方法
2013/10/11 PHP
php选择排序法实现数组排序实例分析
2015/02/16 PHP
php筛选不存在的图片资源
2015/04/28 PHP
PHP使用Memcache时模拟命名空间及缓存失效问题的解决
2016/02/27 PHP
php基于环形链表解决约瑟夫环问题示例
2017/11/07 PHP
PHP使用 Imagick 扩展实现图片合成,圆角处理功能示例
2019/09/09 PHP
鼠标事件延时切换插件
2011/03/12 Javascript
使用jQuery判断浏览器滚动条位置的方法
2016/05/30 Javascript
JS中如何实现Laravel的route函数详解
2017/02/12 Javascript
jQuery文字轮播特效
2017/02/12 Javascript
基于JQuery的购物车添加删除以及结算功能示例
2017/03/08 Javascript
Angular中ng-repeat与ul li的多层嵌套重复问题
2017/07/24 Javascript
Vue中使用的EventBus有生命周期
2018/07/12 Javascript
react native 原生模块桥接的简单说明小结
2019/02/26 Javascript
JS绘图Flot如何实现可选显示曲线图功能
2020/10/16 Javascript
详解ES6 扩展运算符的使用与注意事项
2020/11/12 Javascript
[04:04]显微镜下的DOTA2第六期——电影级别的华丽团战
2014/06/20 DOTA
python编写的最短路径算法
2015/03/25 Python
快速入手Python字符编码
2016/08/03 Python
python中的计时器timeit的使用方法
2017/10/20 Python
python批量设置多个Excel文件页眉页脚的脚本
2018/03/14 Python
pygame游戏之旅 添加碰撞效果的方法
2018/11/20 Python
解决Python中pandas读取*.csv文件出现编码问题
2019/07/12 Python
PyQt+socket实现远程操作服务器的方法示例
2019/08/22 Python
python manage.py runserver流程解析
2019/11/08 Python
重写django的model下的objects模型管理器方式
2020/05/15 Python
Django filter动态过滤与排序实现过程解析
2020/11/26 Python
维珍澳洲航空官网:Virgin Australia
2017/09/08 全球购物
外语系毕业生找工作的求职信
2013/11/28 职场文书
社区优秀志愿者先进事迹
2014/05/09 职场文书
中秋晚会活动方案
2014/08/31 职场文书
个人融资协议书范本两则
2014/10/15 职场文书
致短跑运动员加油稿
2015/07/21 职场文书
会计岗位工作总结
2015/08/12 职场文书
【DOTA2】高能暴走TK秀!PSG LGD vs ASTER - DPC 2022 WINTER TOUR CN
2022/04/02 DOTA