利用vue-i18n实现多语言切换效果的方法


Posted in Javascript onJune 19, 2019

前言

有些项目我们需要支持多种语言切换,满足国际化需求。 vue-i18n是一个vue插件,主要作用就是让项目支持国际化多语言,使用方便快捷,能很轻松的将我们的项目国际化。本文主要介绍使用vue-i18n实现切换中英文效果。

安装vue-i18n

我们使用npm安装vue-i18n。

npm install vue vue-i18n --save

引入vue-i18n

首先在 main.js 中引入 vue-i18n。

import Vue from 'vue'
import App from './App'
import VueI18n from 'vue-i18n'

 
Vue.use(VueI18n) // 通过插件的形式挂载

接着创建带有选项的 VueI18n 实例。

const i18n = new VueI18n({
 locale: localStorage.getItem('locale') || 'zh-CN',
 //this.$i18n.locale // 通过切换locale的值来实现语言切换
 messages: {
  'zh-CN': require('./lang/zh'), // 中文语言包
  'en-US': require('./lang/en') // 英文语言包
 }
})

注意实例中加载了中英文两个语言包。分别准备两个语言包, 使用require引入到main.js中:

中文语言包:zh.js

export const m = {
  welcome: '欢迎来到北京',
  today: '今天是',
  week: {
  sun: '星期日',
  mon: '星期一',
  tues: '星期二',
  wed: '星期三',
  thur: '星期四',
  fri: '星期五',
  sat: '星期六'
  }
}

英文语言包: en.js

export const m = { 
 welcome: 'Welcome to Beijing.',
 today: 'Today is ',
 week: {
 sun: 'Sunday',
 mon: 'Monday',
 tues: 'Tuesday',
 wed: 'Wednesday',
 thur: 'Thursday',
 fri: 'Friday',
 sat: 'Saturday'
 }
}

然后把 i18n 挂载到 vue 根实例上:

new Vue({
 el: '#app',
 i18n,
 components: { App },
 template: '<App/>'
})

使用vue-i18n

我们先建立模板:

<button @click="changeLang">切换语言</button>
 <h1>{{$t('m.welcome')}}</h1>
 <h3>{{$t('m.today')}}{{weekname}}</h3>

注意用法,在组件的模板template中,调用 $t() 方法, {{$t('m.welcome')}} 表示使用welcome的语言。如果是在组件的script中,调用 this.$i18n.t() 方法获取语言,下文会讲到。

我们想通过点击“切换语言”按钮,来对模板中的文字内容进行相应的语言切换。

那我们就在方法 changeLang() 中这样写:

changeLang() {
  this.lang = localStorage.getItem('locale') || 'zh-CN';
  
  if ( this.lang === 'zh-CN' ) {
   this.lang = 'en-US';
   this.$i18n.locale = this.lang;
  } else {
   this.lang = 'zh-CN';
   this.$i18n.locale = this.lang;
  }
  localStorage.setItem('locale', this.lang);
  let week = this.getWeek();
  this.weekname = week;
 },

我们先在本地存储中获取 locale 的值,如果不存在则默认为 zh-CN 。然后在判断当前语言是中文还是英文,如果是中文则切换成英文,反之亦然。通过 this.$i18n.locale 实现语言的切换。

我们希望浏览器保存每次切换后的语言,用户刷新页面的时候会自动识别语言。因此我们使用 localStorage 本地存储来保存每次设置后的语言,当然你也可以使用 coockie 实现。

有时候我们要在js部分处理多语言,例如以下 getWeek() 部分实现了当前是星期几的代码,仅供参考。

getWeek() {
  let week = new Date().getDay(); 
  let day = 'm.week.sun';
  switch (week) {
  case 0:
   day = 'm.week.sun';
   break;
  case 1:
   day = 'm.week.mon';
   break;
  case 2:
   day = 'm.week.tues';
   break;
  case 3:
   day = 'm.week.wed';
   break;
  case 4:
   day = 'm.week.thur';
   break;
  case 5:
   day = 'm.week.fri';
   break;
  case 6:
   day = 'm.week.sat';
   break;
  }
  return this.$i18n.t(day);
 }

以上就是使用vue-i18n实现中英文语言切换效果的详细内容。有关vue-i18n的更多用法可以参考项目地址: http://kazupon.github.io/vue-i18n/

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
Javascript 面向对象 继承
May 13 Javascript
JavaScript call apply使用 JavaScript对象的方法绑定到DOM事件后this指向问题
Sep 28 Javascript
javascript常用的方法分享
Jul 01 Javascript
详解JavaScript基于面向对象之继承
Dec 13 Javascript
jQuery 3.0十大新特性
Jul 06 Javascript
jQuery中show与hide方法用法示例
Sep 16 Javascript
Vue实现路由跳转和嵌套
Jun 20 Javascript
vue2.0开发入门笔记之.vue文件的生成和使用
Sep 19 Javascript
详解node单线程实现高并发原理与node异步I/O
Sep 21 Javascript
[原创]js实现保存文本框内容为本地文件兼容IE,chrome,火狐浏览器
Feb 14 Javascript
Vue-component全局注册实例
Sep 06 Javascript
利用js实现简易红绿灯
Oct 15 Javascript
使用JQuery自动完成插件Auto Complete详解
Jun 18 #jQuery
使用异步controller与jQuery实现卷帘式分页
Jun 18 #jQuery
使用jQuery mobile NuGet让你的网站在移动设备上同样精彩
Jun 18 #jQuery
如何使用CSS3和JQuery easing 插件制作绚丽菜单
Jun 18 #jQuery
如何用webpack4.0撸单页/多页脚手架 (jquery, react, vue, typescript)
Jun 18 #jQuery
通过JQuery,JQueryUI和Jsplumb实现拖拽模块
Jun 18 #jQuery
如何使用CSS3+JQuery实现悬浮墙式菜单
Jun 18 #jQuery
You might like
深入PHP获取随机数字和字母的方法详解
2013/06/06 PHP
php中simplexml_load_file函数用法实例
2014/11/12 PHP
PHP发送AT指令实例代码
2016/05/26 PHP
PHP封装函数实现生成随机的字符串验证码
2017/01/24 PHP
laravel-admin 管理平台获取当前登陆用户信息的例子
2019/10/08 PHP
PHP dirname简单使用代码实例
2020/11/13 PHP
jQuery EasyUI API 中文文档 - PropertyGrid属性表格
2011/11/18 Javascript
详解JS函数重载
2014/12/04 Javascript
jQuery 选择器详解
2015/01/19 Javascript
JS Array.slice 截取数组的实现方法
2016/01/02 Javascript
element ui 对话框el-dialog关闭事件详解
2018/02/26 Javascript
elementUI 设置input的只读或禁用的方法
2018/10/30 Javascript
js如何获取图片url的Blob值并预览示例代码
2019/03/07 Javascript
详解在网页上通过JS实现文本的语音朗读
2019/03/28 Javascript
JS控制只能输入数字并且最多允许小数点两位
2019/11/24 Javascript
JS表格的动态操作完整示例
2020/01/13 Javascript
浅谈webpack构建工具配置和常用插件总结
2020/05/11 Javascript
vue addRoutes路由动态加载操作
2020/08/04 Javascript
Python 字典(Dictionary)操作详解
2014/03/11 Python
python 网络编程详解及简单实例
2017/04/25 Python
Python虚拟环境virtualenv的安装与使用详解
2017/05/28 Python
Python装饰器简单用法实例小结
2018/12/03 Python
对Python的交互模式和直接运行.py文件的区别详解
2019/06/29 Python
Python操作qml对象过程详解
2019/09/26 Python
python的mysql数据库建立表与插入数据操作示例
2019/09/30 Python
Python迭代器iterator生成器generator使用解析
2019/10/24 Python
如何把外网python虚拟环境迁移到内网
2020/05/18 Python
深入理解HTML的FormData对象
2016/05/17 HTML / CSS
印尼披萨外送专家:Domino’s Pizza印尼
2017/12/28 全球购物
奥地利度假券的专家:we-are.travel
2019/04/10 全球购物
美国知名的隐形眼镜电商:Contacts America
2019/11/19 全球购物
公司活动邀请函
2014/01/24 职场文书
安全生产中长期规划实施方案
2014/02/21 职场文书
《母鸡》教学反思
2014/02/25 职场文书
求职自我推荐信
2014/06/25 职场文书
党支部综合考察意见
2015/06/01 职场文书