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 数据类型之Boolean类型分析介绍
Apr 19 Javascript
js实现动态添加、删除行、onkeyup表格求和示例
Aug 18 Javascript
基于jquery的网站幻灯片切换效果焦点图代码
Sep 15 Javascript
JS+CSS实现滑动切换tab菜单效果
Aug 25 Javascript
ajax在兼容模式下失效的快速解决方法
Mar 22 Javascript
JS图片放大效果简单实现代码
Sep 08 Javascript
node.js 和HTML5开发本地桌面应用程序
Dec 13 Javascript
[js高手之路]单例模式实现模态框的示例
Sep 01 Javascript
vue多页面开发和打包正确处理方法
Apr 20 Javascript
在 Vue 项目中引入 tinymce 富文本编辑器的完整代码
May 04 Javascript
分享5个小技巧让你写出更好的 JavaScript 条件语句
Oct 20 Javascript
js实现有趣的倒计时效果
Jan 19 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
ThinkPHP模板自定义标签使用方法
2014/06/26 PHP
PHP常用编译参数中文说明
2014/09/27 PHP
Linux下安装Memcached服务器和客户端与PHP使用示例
2019/04/15 PHP
ASP SQL防注入的方法
2008/12/25 Javascript
浅谈javascript的数据类型检测
2010/07/10 Javascript
jquery插件之定时查询待处理任务数量
2014/05/01 Javascript
jquery幻灯片插件bxslider样式改进实例
2014/10/15 Javascript
javascript实现状态栏文字首尾相接循环滚动的方法
2015/07/22 Javascript
jquery validate和jquery form 插件组合实现验证表单后AJAX提交
2015/08/26 Javascript
基于BootStrap Metronic开发框架经验小结【四】Bootstrap图标的提取和利用
2016/05/12 Javascript
深入分析node.js的异步API和其局限性
2016/09/05 Javascript
easyui form validate总是返回false的原因及解决方法
2016/11/07 Javascript
使用JavaScript开发跨平台的桌面应用详解
2017/07/27 Javascript
Puppeteer环境搭建的详细步骤
2018/09/21 Javascript
VUE 自定义组件模板的方法详解
2019/08/30 Javascript
浅析vue中的provide / inject 有什么用处
2019/11/10 Javascript
React学习之JSX与react事件实例分析
2020/01/06 Javascript
js实现随机点名
2021/01/19 Javascript
[51:32]Optic vs Serenity 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
今天 平安夜 Python 送你一顶圣诞帽 @微信官方
2017/12/25 Python
Python基于hashlib模块的文件MD5一致性加密验证示例
2018/02/10 Python
Python实现两个list求交集,并集,差集的方法示例
2018/08/02 Python
python中退出多层循环的方法
2018/11/27 Python
Python开启线程,在函数中开线程的实例
2019/02/22 Python
Django 内置权限扩展案例详解
2019/03/04 Python
Python实现二叉树的常见遍历操作总结【7种方法】
2019/03/06 Python
Python内置random模块生成随机数的方法
2019/05/31 Python
Python实现朴素贝叶斯的学习与分类过程解析
2019/08/24 Python
零基础学python应该从哪里入手
2020/08/11 Python
美国高档帽子网上商店:Hats.com
2018/08/09 全球购物
Eton丹麦官网:精美的男式衬衫
2020/05/27 全球购物
你常见到的runtime exception
2016/09/05 面试题
个性大学生自我评价
2013/12/04 职场文书
供电工程专业求职信
2014/08/09 职场文书
简述python四种分词工具,盘点哪个更好用?
2021/04/13 Python
船舶调度指挥系统——助力智慧海事
2022/02/18 无线电