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 相关文章推荐
jQuery技巧大放送 学习jquery的朋友可以看下
Oct 14 Javascript
JS实现淘宝幻灯片效果的实现方法
Mar 22 Javascript
jquery操作checked属性以及disabled属性的多种方法
Jun 20 Javascript
8个超实用的jQuery功能代码分享
Jan 08 Javascript
不得不分享的JavaScript常用方法函数集(上)
Dec 23 Javascript
修改Jquery Dialog 位置的实现方法
Aug 26 Javascript
jQuery中checkbox反复调用attr('checked', true/false)只有第一次生效的解决方法
Nov 16 Javascript
基于JavaScript实现微信抢红包功能
Jul 20 Javascript
vue实现通讯录功能
Jul 14 Javascript
vue以组件或者插件的形式实现throttle或者debounce
May 22 Javascript
Moment.js实现多个同时倒计时
Aug 26 Javascript
JavaScript实现简单动态表格
Dec 02 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使用str_replace实现输入框回车替换br的方法
2014/11/24 PHP
thinkPHP5框架分页样式类完整示例
2018/09/01 PHP
调用js时ie6和ie7,ff的区别
2009/08/19 Javascript
JavaScript 获取用户客户端操作系统版本
2009/08/25 Javascript
JSChart轻量级图形报表工具(内置函数中文参考)
2010/10/11 Javascript
javascript 获取模态窗口的滚动位置代码
2013/08/06 Javascript
javascript仿php的print_r函数输出json数据
2013/09/13 Javascript
Javascript单元测试框架QUnitjs详细介绍
2014/05/08 Javascript
node.js中的path.join方法使用说明
2014/12/08 Javascript
JS正则截取两个字符串之间及字符串前后内容的方法
2017/01/06 Javascript
Bootstrap 模态框(Modal)带参数传值实例
2017/08/20 Javascript
JS实现的雪花飘落特效示例
2019/12/03 Javascript
[03:28]2014DOTA2国际邀请赛 走近EG战队天才中单Arteezy
2014/07/12 DOTA
Python MD5加密实例详解
2017/08/02 Python
Django 登陆验证码和中间件的实现
2018/08/17 Python
python实现字符串加密成纯数字
2019/03/19 Python
python实现字符串完美拆分split()的方法
2019/07/16 Python
详解Python 中sys.stdin.readline()的用法
2019/09/12 Python
解决pycharm安装第三方库失败的问题
2020/05/09 Python
CSS3 函数技巧 用css 实现js实现的事情(clac Counters Tooltip)
2017/08/15 HTML / CSS
Javascript 高级手势使用介绍
2013/04/21 HTML / CSS
HTML5 Canvas+JS控制电脑或手机上的摄像头实例
2014/05/03 HTML / CSS
amazeui 验证按钮扩展的实现
2020/08/21 HTML / CSS
欧缇丽美国官网:Caudalie美国
2016/12/31 全球购物
菲律宾旅游网站:Expedia菲律宾
2017/10/11 全球购物
舒适的豪华鞋:Taryn Rose
2018/05/03 全球购物
超市促销实习自我鉴定
2013/09/23 职场文书
工作表扬信的范文
2014/01/10 职场文书
企业道德讲堂实施方案
2014/03/19 职场文书
领导干部“四风”问题批评与自我批评材料
2014/09/24 职场文书
计划生育工作汇报
2014/10/28 职场文书
2014年纪委工作总结
2014/12/05 职场文书
服务明星事迹材料
2014/12/29 职场文书
2016年寒假社会实践活动总结
2015/03/27 职场文书
召开会议通知范文
2015/04/15 职场文书
Redis 哨兵机制及配置实现
2022/03/25 Redis