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 AjaxQueue改进步骤
Oct 06 Javascript
createElement与createDocumentFragment的点点区别小结
Dec 19 Javascript
用JavaScript实现一个代码简洁、逻辑不复杂的多级树
May 23 Javascript
JsRender实用入门教程
Oct 31 Javascript
如何提高数据访问速度
Dec 26 Javascript
详解Node.js实现301、302重定向服务
Apr 07 Javascript
解决vue组件中使用v-for出现告警问题及v for指令介绍
Nov 11 Javascript
小程序视频列表中视频的播放与停止的示例代码
Jul 20 Javascript
基于JavaScript实现一个简单的Vue
Sep 26 Javascript
JavaScript强制类型转换和隐式类型转换操作示例
May 01 Javascript
微信小程序实用代码段(收藏版)
Dec 17 Javascript
详解React路由传参方法汇总记录
Nov 29 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
js最简单的拖拽效果实现代码
2010/09/24 Javascript
自写的一个jQuery圆角插件
2010/10/26 Javascript
基于jquery的自定义鼠标提示效果 jquery.toolTip
2010/11/14 Javascript
php对mongodb的扩展(小试牛刀)
2012/11/11 Javascript
jQuery插件pagination实现无刷新分页
2016/05/21 Javascript
基于js实现checkbox批量选中操作
2016/11/22 Javascript
Bootstrap实现导航栏的2种方式
2016/11/28 Javascript
分享一个精简的vue.js 图片lazyload插件实例
2017/03/13 Javascript
解决iView中时间控件选择的时间总是少一天的问题
2018/03/15 Javascript
vue-router动态设置页面title的实例讲解
2018/08/30 Javascript
vue组件(全局,局部,动态加载组件)
2018/09/02 Javascript
对vue下点击事件传参和不传参的区别详解
2018/09/15 Javascript
vue项目中引入vue-datepicker插件的详解
2019/05/14 Javascript
vue data引入本地图片的两种方式小结
2019/11/13 Javascript
Sublime Text3 配置 NodeJs 环境的方法
2020/05/20 NodeJs
Vue3配置axios跨域实现过程解析
2020/11/25 Vue.js
python控制台英汉汉英电子词典
2020/04/23 Python
跟老齐学Python之编写类之四再论继承
2014/10/11 Python
python如何实现excel数据添加到mongodb
2015/07/30 Python
Python保存MongoDB上的文件到本地的方法
2016/03/16 Python
Python的标准模块包json详解
2017/03/13 Python
利用python3随机生成中文字符的实现方法
2017/11/24 Python
python输入整条数据分割存入数组的方法
2018/11/13 Python
Python3网络爬虫中的requests高级用法详解
2019/06/18 Python
Python列表(list)所有元素的同一操作解析
2019/08/01 Python
tensorflow使用CNN分析mnist手写体数字数据集
2020/06/17 Python
浅谈盘点5种基于Python生成的个性化语音方法
2021/02/05 Python
CSS3实现滚动条动画效果代码分享
2016/08/03 HTML / CSS
浅谈html5 video 移动端填坑记
2018/01/15 HTML / CSS
冰淇淋店创业计划书范文
2013/12/27 职场文书
大学生职业规划前言模板
2013/12/27 职场文书
公司员工活动策划方案
2014/08/20 职场文书
观看建国大业观后感
2015/06/01 职场文书
某某幼儿园的教育教学管理调研分析报告
2019/11/29 职场文书
python实现简单的名片管理系统
2021/04/26 Python
vue如何实现关闭对话框后刷新列表
2022/04/08 Vue.js