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陷阱清单
May 31 Javascript
Javascript 获取字符串字节数的多种方法
Jun 02 Javascript
jquery validate poshytip 自定义样式
Nov 26 Javascript
jquery给图片添加鼠标经过时的边框效果
Nov 12 Javascript
jquery实现checkbox 全选/全不选的通用写法
Feb 22 Javascript
Javascript中prototype属性实现给内置对象添加新的方法
May 14 Javascript
67 个节约开发时间的前端开发者的工具、库和资源
Sep 12 Javascript
详解JS实现系统登录页的登录和验证
Apr 29 Javascript
分享一个vue项目“脚手架”项目的实现步骤
May 26 Javascript
vue keep-alive 动态删除组件缓存的例子
Nov 04 Javascript
elementui更改el-dialog关闭按钮的图标d的示例代码
Aug 04 Javascript
Javascript中Microtask和Macrotask鲜为人知的知识点
Apr 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运行环境教程
2015/02/12 PHP
PHP Include文件实例讲解
2019/02/15 PHP
jQueryPad 实用的jQuery测试工具(支持IE,chrome,FF)
2010/05/22 Javascript
读jQuery之七 判断点击了鼠标哪个键的代码
2011/06/21 Javascript
浅谈JavaScript Array对象
2014/12/29 Javascript
javascript闭包的理解
2015/04/01 Javascript
jQuery 1.9.1源码分析系列(十四)之常用jQuery工具
2015/12/02 Javascript
jQuery动画显示和隐藏效果实例演示(附demo源码下载)
2015/12/31 Javascript
基于javascript实现tab切换特效
2016/03/29 Javascript
js获取Html元素的实际宽度高度的方法
2016/05/19 Javascript
AngularJS入门教程之更多模板详解
2016/08/19 Javascript
react-native DatePicker日期选择组件的实现代码
2017/09/12 Javascript
vue实现分环境打包步骤(给不同的环境配置相对应的打包命令)
2019/06/04 Javascript
ES6 Proxy实现Vue的变化检测问题
2019/06/11 Javascript
如何使用JavaScript实现栈与队列
2019/06/24 Javascript
Nest.js 授权验证的方法示例
2021/02/22 Javascript
Python爬虫实现抓取京东店铺信息及下载图片功能示例
2018/08/07 Python
Python学习笔记之抓取某只基金历史净值数据实战案例
2019/06/03 Python
Django之PopUp的具体实现方法
2019/08/31 Python
python实现的按要求生成手机号功能示例
2019/10/08 Python
Python 脚本拉取 Docker 镜像问题
2019/11/10 Python
Python命令行click参数用法解析
2019/12/19 Python
Python使用pymysql模块操作mysql增删改查实例分析
2019/12/19 Python
Django调用支付宝接口代码实例详解
2020/04/04 Python
原生canvas制作画图小工具的踩坑和爬坑
2020/06/09 HTML / CSS
英国优质鞋类专家:Robinson’s Shoes
2017/12/08 全球购物
Nike瑞典官方网站:Nike.com (SE)
2018/11/26 全球购物
Java中的异常处理机制的简单原理和应用
2013/04/27 面试题
毕业生教师求职信
2013/10/20 职场文书
电子商务专业自我鉴定
2013/12/18 职场文书
运动会通讯稿400字
2014/01/28 职场文书
《少年王冕》教学反思
2014/04/11 职场文书
硕士学位申请报告
2015/05/15 职场文书
合理缓解职场压力,让你随时保持最佳状态!
2019/06/21 职场文书
nginx配置ssl实现https的方法示例
2021/03/31 Servers
Python线程池与GIL全局锁实现抽奖小案例
2022/04/13 Python