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 相关文章推荐
ExtJS 2.2.1的grid控件在ie6中的显示问题
May 04 Javascript
javascript简易缓动插件(源码打包)
Feb 16 Javascript
javascript-表格排序(降序/反序)实现介绍(附图)
May 30 Javascript
js创建元素(节点)示例
Jan 02 Javascript
js获取数组的最后一个元素
Apr 14 Javascript
jQuery的position()方法详解
Jul 19 Javascript
详解Bootstrap的aria-label和aria-labelledby应用
Jan 04 Javascript
基于Turn.js 实现翻书效果实例解析
Jun 20 Javascript
javascript的函数劫持浅析
Sep 26 Javascript
使用vue框架 Ajax获取数据列表并用BootStrap显示出来
Apr 24 Javascript
layui实现数据分页功能
Jul 27 Javascript
jquery实现图片放大镜效果
Dec 23 jQuery
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
千呼万唤始出来,DOTA2勇士令状不朽宝藏Ⅱ现已推出
2020/08/25 DOTA
浅析PKI加密解密 OpenSSL
2013/07/01 PHP
使用图灵api创建微信聊天机器人
2015/07/23 PHP
PHP使用反射机制实现查找类和方法的所在位置
2016/04/22 PHP
PHP命名空间简单用法示例
2018/12/28 PHP
gearman中任务的优先级和返回状态实例分析
2020/02/27 PHP
jQuery下通过replace字符串替换实现大小图片切换
2012/05/22 Javascript
鼠标滑过出现预览的大图提示效果
2014/02/26 Javascript
node.js入门教程迷你书、node.js入门web应用开发完全示例
2014/04/06 Javascript
jQuery统计上传文件大小的方法
2015/01/24 Javascript
利用JS提交表单的几种方法和验证(必看篇)
2016/09/17 Javascript
Vue.js使用$.ajax和vue-resource实现OAuth的注册、登录、注销和API调用
2017/05/10 Javascript
React从react-router路由上做登陆验证控制的方法
2018/05/10 Javascript
详解jQuery中的easyui
2018/09/02 jQuery
vuex actions传递多参数的处理方法
2018/09/18 Javascript
vue拖拽组件使用方法详解
2018/12/01 Javascript
vue获取时间戳转换为日期格式代码实例
2019/04/17 Javascript
一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)
2019/04/19 Javascript
ant design vue datepicker日期选择器中文化操作
2020/10/28 Javascript
Python 读写文件的操作代码
2018/09/20 Python
Python 实现还原已撤回的微信消息
2019/06/18 Python
Python并发请求下限制QPS(每秒查询率)的实现代码
2020/06/05 Python
python中pathlib模块的基本用法与总结
2020/08/17 Python
详解html5页面 rem 布局适配方法
2018/01/12 HTML / CSS
管道维修工岗位职责
2013/12/27 职场文书
远程培训的心得体会
2014/09/01 职场文书
2014党员自我评议表范文
2014/09/20 职场文书
大学生入党积极分子自我评价
2014/09/20 职场文书
学生穿着不得体检讨书
2014/10/12 职场文书
社区三八妇女节活动总结
2015/02/06 职场文书
爱国之歌(8首)
2019/09/29 职场文书
如何理解python接口自动化之logging日志模块
2021/06/15 Python
Java Spring Lifecycle的使用
2022/05/06 Java/Android
解决Vmware虚拟机安装centos8报错“Section %Packages Does Not End With %End. Pane Is Dead”
2022/06/01 Servers
win10双系统怎么删除一个系统?win10电脑有两个系统删除一个的操作方法
2022/07/15 数码科技
前端框架ECharts dataset对数据可视化的高级管理
2022/12/24 Javascript