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实现textarea中tab键的缩排处理方法
Jun 26 Javascript
JS实现具备延时功能的滑动门菜单效果
Sep 17 Javascript
jquery trigger函数执行两次的解决方法
Feb 29 Javascript
input file上传 图片预览功能实例代码
Oct 25 Javascript
微信小程序商城项目之商品属性分类(4)
Apr 17 Javascript
JavaScript学习总结(一) ECMAScript、BOM、DOM(核心、浏览器对象模型与文档对象模型)
Jan 07 Javascript
vuejs简单验证码功能完整示例
Jan 08 Javascript
微信小程序时间标签和时间范围的联动效果
Feb 15 Javascript
elementUI table表格动态合并的示例代码
May 15 Javascript
浅析Angular 实现一个repeat指令的方法
Jul 21 Javascript
scrapyd schedule.json setting 传入多个值问题
Aug 07 Javascript
代码块高亮可复制显示js插件highlight.js+clipboard.js整合
Feb 15 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
国王的咖啡这么大来头,名字的由来是什么
2021/03/03 咖啡文化
如何删除多级目录
2006/10/09 PHP
php中iconv函数使用方法
2008/05/24 PHP
php whois查询API制作方法
2011/06/23 PHP
php实现在限定区域里自动调整字体大小的类实例
2015/04/02 PHP
深入讲解PHP Session及如何保持其不过期的方法
2015/08/18 PHP
thinkPHP5框架导出Excel文件简单操作示例
2018/08/03 PHP
Javascript异步编程的4种方法让你写出更出色的程序
2013/01/17 Javascript
JS实现金额转换(将输入的阿拉伯数字)转换成中文的实现代码
2013/09/30 Javascript
动态加载jQuery的两种方法实例分析
2015/07/17 Javascript
Javascript 5种方法实现过滤删除前后所有空格
2016/06/22 Javascript
ES6新数据结构Map功能与用法示例
2017/03/31 Javascript
ES6新特性之数组、Math和扩展操作符用法示例
2017/04/01 Javascript
详解ajax的data参数错误导致页面崩溃
2018/04/30 Javascript
在小程序/mpvue中使用flyio发起网络请求的方法
2018/09/13 Javascript
每周一练 之 数据结构与算法(Stack)
2019/04/16 Javascript
javascript的惯性运动实现代码实例
2019/09/07 Javascript
JS插件amCharts实现绘制柱形图默认显示数值功能示例
2019/11/26 Javascript
javascript实现计算器功能
2020/03/30 Javascript
python实现图书馆研习室自动预约功能
2018/04/27 Python
python随机数分布random均匀分布实例
2019/11/27 Python
解决运行出现'dict' object has no attribute 'has_key'问题
2020/07/15 Python
python爬虫要用到的库总结
2020/07/28 Python
解决PyCharm无法使用lxml库的问题(图解)
2020/12/22 Python
Python使用Turtle模块绘制国旗的方法示例
2021/02/28 Python
日本最大级玩偶手办购物:あみあみ Amiami
2018/04/23 全球购物
波兰在线体育用品商店:Hop-Sport.pl
2019/07/23 全球购物
斯洛伐克家具和时尚装饰品购物网站:Butlers.sk
2019/09/08 全球购物
static全局变量与普通的全局变量有什么区别
2014/05/27 面试题
学前教育教师求职自荐信
2013/09/22 职场文书
祖国在我心中演讲稿
2014/01/15 职场文书
网络宣传方案
2014/03/15 职场文书
第二课堂活动总结
2014/05/07 职场文书
县委常委班子对照检查材料思想汇报
2014/09/28 职场文书
党的群众路线教育实践活动心得体会(医院)
2014/11/03 职场文书
nginx中proxy_pass各种用法详解
2021/11/07 Servers