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 相关文章推荐
Javascript this指针
Jul 30 Javascript
jquery插件 autoComboBox 下拉框
Dec 22 Javascript
javascript预加载图片、css、js的方法示例介绍
Oct 14 Javascript
JS常用字符串处理方法应用总结
May 22 Javascript
9款2014最热门jQuery实用特效推荐
Dec 07 Javascript
JavaScript中的getTimezoneOffset()方法使用详解
Jun 10 Javascript
jQuery使用$.ajax进行即时验证实例详解
Dec 11 Javascript
AngularJS 过滤器的简单实例
Jul 27 Javascript
AngularJS实现树形结构(ztree)菜单示例代码
Sep 18 Javascript
解决前端跨域问题方案汇总
Nov 20 Javascript
React+TypeScript+webpack4多入口配置详解
Aug 08 Javascript
js制作提示框插件
Dec 24 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实现将GB编码转换为UTF8
2006/11/25 PHP
特详细的PHPMYADMIN简明安装教程
2008/08/01 PHP
9个经典的PHP代码片段分享
2014/12/18 PHP
文件上传之SWFUpload插件(代码)
2015/07/30 PHP
Javascript技术技巧大全(五)
2007/01/22 Javascript
最新优化收藏到网摘代码(digg,diigo)
2007/02/07 Javascript
用jQuery扩展自写的 UI导航
2010/01/13 Javascript
jQuery调用WebService的实现代码
2011/06/19 Javascript
javascript实现动态侧边栏代码
2014/02/19 Javascript
js闭包的用途详解
2014/11/09 Javascript
json实现前后台的相互传值详解
2015/01/05 Javascript
简介可以自动完成UI的AngularJS工具angular-smarty
2015/06/23 Javascript
当jquery ajax遇上401请求的解决方法
2016/05/19 Javascript
Vue.js 表单校验插件
2016/08/14 Javascript
JavaScript如何实现图片懒加载(lazyload) 提高用户体验(增强版)
2016/11/30 Javascript
简单实现jQuery多选框功能
2017/01/09 Javascript
jquery.validate表单验证插件使用详解
2017/06/21 jQuery
用Vue.extend构建消息提示组件的方法实例
2017/08/08 Javascript
JS数组求和的常用方法实例小结
2019/01/07 Javascript
详解微信小程序文件下载--视频和图片
2019/04/24 Javascript
Vue 数组和对象更新,但是页面没有刷新的解决方式
2019/11/09 Javascript
Node绑定全局TraceID的实现方法
2019/11/14 Javascript
[02:19]2018年度DOTA2最佳核心位选手-完美盛典
2018/12/17 DOTA
Python中unittest模块做UT(单元测试)使用实例
2015/06/12 Python
pandas修改DataFrame列名的实现方法
2019/02/22 Python
使用Python实现文字转语音并生成wav文件的例子
2019/08/08 Python
Python操作Sonqube API获取检测结果并打印过程解析
2019/11/27 Python
Django怎么在admin后台注册数据库表
2020/11/14 Python
CSS3 3D立方体效果示例-transform也不过如此
2016/12/05 HTML / CSS
物业电工岗位职责
2013/11/20 职场文书
工作失误检讨书(3篇)
2014/10/11 职场文书
安全承诺书
2015/01/19 职场文书
付款证明格式范文
2015/06/19 职场文书
课文《燕子》教学反思
2016/02/17 职场文书
创业计划书之珠宝饰品
2019/08/26 职场文书
2019年英语版感谢信(8篇)
2019/09/29 职场文书