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 相关文章推荐
编辑浪子版表单验证类
May 12 Javascript
JavaScript中的some()方法使用详解
Jun 09 Javascript
jquery插件jquery.confirm弹出确认消息
Dec 22 Javascript
原生JS封装ajax 传json,str,excel文件上传提交表单(推荐)
Jun 21 Javascript
ES2015 Symbol 一种绝不重复的值
Dec 25 Javascript
javascript设计模式之Adapter模式【适配器模式】实现方法示例
Jan 13 Javascript
全面总结Javascript对数组对象的各种操作
Jan 22 Javascript
JavaScript 详解预编译原理
Jan 22 Javascript
详解在vue-cli项目中使用mockjs(请求数据删除数据)
Oct 23 Javascript
简单的React SSR服务器渲染实现
Dec 11 Javascript
axios封装,使用拦截器统一处理接口,超详细的教程(推荐)
May 02 Javascript
Node.js安装详细步骤教程(Windows版)详解
Sep 01 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实现函数内修改外部变量值的方法示例
2018/12/28 PHP
修改jQuery Validation里默认的验证方法
2012/02/14 Javascript
JavaScript prototype属性深入介绍
2012/11/27 Javascript
JQUERY对单选框(radio)操作的小例子
2013/04/25 Javascript
jQuery实现用户注册的表单验证示例
2013/08/28 Javascript
js post提交调用方法
2014/02/12 Javascript
浅谈javascript中自定义模版
2015/01/29 Javascript
jQuery获取file控件中图片的宽高与大小
2016/08/04 Javascript
jstl中判断list中是否包含某个值的简单方法
2016/10/14 Javascript
bootstrap读书笔记之CSS组件(上)
2016/10/17 Javascript
jquery 实时监听输入框值变化的完美方法(必看)
2017/01/26 Javascript
js 输入框 正则表达式(菜鸟必看教程)
2017/02/19 Javascript
微信小程序 弹框和模态框实现代码
2017/03/10 Javascript
Vue2.0如何发布项目实战
2017/07/27 Javascript
图片加载完成再执行事件的实例
2017/11/16 Javascript
AngularJS双向数据绑定原理之$watch、$apply和$digest的应用
2018/01/30 Javascript
node实现简单的增删改查接口实例代码
2019/08/22 Javascript
Python设计模式编程中Adapter适配器模式的使用实例
2016/03/02 Python
Python递归实现汉诺塔算法示例
2018/03/19 Python
详解Python3除法之真除法、截断除法和下取整对比
2019/05/23 Python
python把转列表为集合的方法
2019/06/28 Python
Python调用Windows API函数编写录音机和音乐播放器功能
2020/01/05 Python
Python 在函数上添加包装器
2020/07/28 Python
巴西一家专门从事家居和装饰的连锁店:Camicado
2019/08/14 全球购物
进程的查看和调度分别使用什么命令
2015/03/25 面试题
高级工程师英文求职信
2014/03/19 职场文书
入党思想汇报怎么写
2014/04/03 职场文书
大学本科生职业生涯规划书范文
2014/09/14 职场文书
学生违纪检讨书200字
2014/10/21 职场文书
中秋节慰问信
2015/02/15 职场文书
幼儿园教师岗位职责
2015/04/02 职场文书
庆祝教师节新闻稿
2015/07/17 职场文书
JavaScript中document.activeELement焦点元素介绍
2021/11/27 Javascript
SQL Server中锁的用法
2022/05/20 SQL Server
聊聊配置 Nginx 访问与错误日志的问题
2022/05/25 Servers
浅析JavaScript中的变量提升
2022/06/01 Javascript