利用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自定义事件介绍
Aug 29 Javascript
js实现表格字段排序
Feb 19 Javascript
从零学习node.js之利用express搭建简易论坛(七)
Feb 25 Javascript
jQuery扩展_动力节点Java学院整理
Jul 05 jQuery
分析javascript中9 个常见错误阻碍你进步
Sep 18 Javascript
基于vue-ssr服务端渲染入门详解
Jan 08 Javascript
使用淘宝镜像cnpm安装Vue.js的图文教程
May 17 Javascript
Vue项目History模式404问题解决方法
Oct 31 Javascript
Vue 中的受控与非受控组件的实现
Dec 17 Javascript
小程序封装wx.request请求并创建接口管理文件的实现
Apr 29 Javascript
js常见遍历操作小结
Jun 06 Javascript
JQuery绑定事件四种实现方法解析
Dec 02 jQuery
使用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
基于mysql的论坛(3)
2006/10/09 PHP
php写的简易聊天室代码
2011/06/04 PHP
Yii快速入门经典教程
2015/12/28 PHP
JavaScript CSS修改学习第六章 拖拽
2010/02/19 Javascript
[原创]js获取数组任意个不重复的随机数组元素
2010/03/15 Javascript
JavaScript中的函数重载深入理解
2014/08/04 Javascript
jQuery遍历之next()、nextAll()方法使用实例
2014/11/08 Javascript
JS中JSON对象和String之间的互转及处理技巧
2016/04/06 Javascript
Angular.JS判断复选框checkbox是否选中并实时显示
2016/11/30 Javascript
EasyUI框架 使用Ajax提交注册信息的实现代码
2017/09/27 Javascript
AjaxUpLoad.js实现文件上传功能
2018/03/02 Javascript
Angular请求防抖处理第一次请求失效问题
2019/05/17 Javascript
[44:40]Serenity vs Pain 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
[02:12]打造更好的电竞完美世界:完美盛典回顾篇
2018/12/19 DOTA
python实现在线翻译功能
2020/03/03 Python
Selenium 配置启动项参数的方法
2020/12/04 Python
浅析canvas元素的html尺寸和css尺寸对元素视觉的影响
2019/07/22 HTML / CSS
俄罗斯领先的移动和数字设备在线商店:Svyaznoy.ru
2020/12/21 全球购物
C++面试题:关于链表和指针
2013/06/05 面试题
军训考核自我鉴定
2014/02/13 职场文书
《一株紫丁香》教学反思
2014/02/19 职场文书
会计与出纳自荐书范文
2014/03/16 职场文书
银行竞聘演讲稿
2014/05/16 职场文书
出国留学担保书
2014/05/20 职场文书
人事专员岗位职责说明书
2014/07/30 职场文书
党员批评与自我批评(5篇)
2014/09/23 职场文书
拾金不昧表扬稿
2015/01/16 职场文书
航班延误投诉信
2015/07/02 职场文书
团结友爱主题班会
2015/08/13 职场文书
小学大队干部竞选稿
2015/11/20 职场文书
小学体育课教学反思
2016/02/16 职场文书
四年级数学教学反思
2016/02/16 职场文书
关于保护环境的建议书
2019/06/24 职场文书
MySQL Router的安装部署
2021/04/24 MySQL
nginx共享内存的机制详解
2022/03/21 Servers
Nginx的gzip相关介绍
2022/05/11 Servers