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 相关文章推荐
用JS写的一个TableView控件代码
Jan 23 Javascript
ExtJS中设置下拉列表框不可编辑的方法
May 07 Javascript
jQuery.parseJSON(json)将JSON字符串转换成js对象
Jul 27 Javascript
实现图片预加载的三大方法及优缺点分析
Nov 19 Javascript
javascript 常见功能汇总
Jun 11 Javascript
JS实现带鼠标效果的头像及文章列表代码
Sep 27 Javascript
AngularJS表单详解及示例代码
Aug 17 Javascript
Bootstrap 3的box-sizing样式导致UEditor控件的图片无法正常缩放的解决方案
Sep 15 Javascript
JavaScript中浅讲ajax图文详解
Nov 11 Javascript
Vue.js 中取得后台原生HTML字符串 原样显示问题的解决方法
Jun 10 Javascript
原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作
Feb 27 jQuery
vue项目从node8.x升级到12.x后的问题解决
Oct 25 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+Mysql日期时间如何转换(UNIX时间戳和格式化日期)
2012/07/15 PHP
PHP框架Swoole定时器Timer特性分析
2014/08/19 PHP
PHP获取数组中重复最多的元素的实现方法
2014/11/11 PHP
PHP目录与文件操作技巧总结(创建,删除,遍历,读写,修改等)
2016/09/11 PHP
js 禁用只读文本框获得焦点时的退格键
2010/04/25 Javascript
用js写了一个类似php的print_r输出换行功能
2013/02/18 Javascript
jquery定时滑出可最小化的底部提示层特效代码
2013/10/02 Javascript
jquery.fastLiveFilter.js实现输入自动过滤的方法
2015/08/11 Javascript
微信js-sdk界面操作接口用法示例
2016/10/12 Javascript
详解jQuery如何实现模糊搜索
2019/05/10 jQuery
微信小程序sessionid不一致问题解决
2019/08/30 Javascript
[01:02:26]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第二场 1月18日
2021/03/11 DOTA
django 删除数据库表后重新同步的方法
2018/05/27 Python
详解Python循环作用域与闭包
2019/03/21 Python
如何安装并使用conda指令管理python环境
2019/07/10 Python
python 中xpath爬虫实例详解
2019/08/26 Python
Python生态圈图像格式转换问题(推荐)
2019/12/02 Python
Pycharm及python安装详细步骤及PyCharm配置整理(推荐)
2020/07/31 Python
Windows下Anaconda安装、换源与更新的方法
2020/04/17 Python
如何通过命令行进入python
2020/07/06 Python
Python常用GUI框架原理解析汇总
2020/12/07 Python
python推导式的使用方法实例
2021/02/28 Python
澳大利亚第一的设计师礼服租赁网站:GlamCorner
2017/08/13 全球购物
介绍一下Cookie和Session及他们之间的区别
2012/11/20 面试题
团队精神演讲稿
2013/12/31 职场文书
2014年最新党员对照检查材料汇总
2014/09/15 职场文书
2014党员自我评议表范文
2014/09/20 职场文书
博士生专家推荐信
2014/09/26 职场文书
信访维稳工作汇报
2014/10/27 职场文书
亮剑观后感
2015/06/05 职场文书
雷锋的故事观后感
2015/06/10 职场文书
平凡的世界读书笔记
2015/06/25 职场文书
nginx网站服务如何配置防盗链(推荐)
2021/03/31 Servers
老生常谈 使用 CSS 实现三角形的技巧(多种方法)
2021/04/13 HTML / CSS
《群青的幻想曲》京力秋树角色PV公开
2022/04/08 日漫
ipad隐藏软件app图标方法
2022/04/19 数码科技