利用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 封装Ajax传递的数据代码
Jun 05 Javascript
jQuery 顺便学习下CSS选择器 奇偶匹配nth-child(even)
May 24 Javascript
javascript实现实时输出当前的时间
Apr 27 Javascript
浅谈Node.js中的定时器
Jun 18 Javascript
详解Bootstrap glyphicons字体图标
Jan 04 Javascript
微信小程序 navigation API实例详解
Oct 02 Javascript
javascript 中的事件委托详解
Oct 25 Javascript
Vue表单验证插件的制作过程
Apr 01 Javascript
jQuery判断邮箱格式对错实例代码讲解
Apr 12 jQuery
node.js 基于cheerio的爬虫工具的实现(需要登录权限的爬虫工具)
Apr 10 Javascript
微信小程序websocket实现即时聊天功能
May 21 Javascript
微信小程序用户盒子、宫格列表的实现
Jul 01 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
40个迹象表明你还是PHP菜鸟
2008/09/29 PHP
浅谈php中mysql与mysqli的区别分析
2013/06/10 PHP
详解PHP实现异步调用的4种方法
2016/03/14 PHP
ecshop适应在PHP7的修改方法解决报错的实现
2016/11/01 PHP
利用JS来控制键盘的上下左右键(示例代码)
2013/12/14 Javascript
Jquery getJSON方法详细分析
2013/12/26 Javascript
Jquery EasyUI中弹出确认对话框以及加载效果示例代码
2014/02/13 Javascript
javascript移动设备Web开发中对touch事件的封装实例
2014/06/05 Javascript
javascript实现浏览器窗口传递参数的方法
2014/09/03 Javascript
JavaScript实现查找字符串中第一个不重复的字符
2014/12/29 Javascript
Jquery ajax加载等待执行结束再继续执行下面代码操作
2015/11/24 Javascript
Javascript中级语法快速入手
2016/07/30 Javascript
Omi v1.0.2发布正式支持传递javascript表达式
2017/03/21 Javascript
jQuery插件FusionCharts绘制的2D双柱状图效果示例【附demo源码】
2017/05/13 jQuery
Angular2使用Augury来调试Angular2程序
2017/05/21 Javascript
bootstrap多层模态框滚动条消失的问题
2017/07/21 Javascript
利用Node.js批量抓取高清妹子图片实例教程
2018/08/02 Javascript
利用vue.js把静态json绑定bootstrap的table方法
2018/08/28 Javascript
Vue CLI3 如何支持less的方法示例
2018/08/29 Javascript
基于Vue el-autocomplete 实现类似百度搜索框功能
2019/10/25 Javascript
javascript实现蒙版与禁止页面滚动
2020/01/11 Javascript
python中尾递归用法实例详解
2015/04/28 Python
python引入导入自定义模块和外部文件的实例
2017/07/24 Python
Python HTML解析模块HTMLParser用法分析【爬虫工具】
2019/04/05 Python
python 列表中[ ]中冒号‘:’的作用
2019/04/30 Python
python实现的发邮件功能示例
2019/09/11 Python
Html5嵌入钉钉的实现示例
2020/06/04 HTML / CSS
澳大利亚便宜的家庭购物网站:CrazySales
2018/02/06 全球购物
网站客服岗位职责
2014/04/05 职场文书
关于中国梦的演讲稿
2014/04/23 职场文书
夫妻双方自愿离婚协议书
2014/10/24 职场文书
人事主管岗位职责
2015/02/04 职场文书
居住证明范文
2015/06/17 职场文书
银行资信证明
2015/06/17 职场文书
职场干货:简历中的自我评价应该这样写!
2019/05/06 职场文书
Python实现DBSCAN聚类算法并样例测试
2021/06/22 Python