利用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 相关文章推荐
jquery异步调用页面后台方法&amp;#8207;(asp.net)
Mar 01 Javascript
jquery子元素过滤选择器使用示例
Jun 24 Javascript
php跨域调用json的例子
Nov 13 Javascript
setTimeout()与setInterval()方法区别介绍
Dec 24 Javascript
对之前写的jquery分页做下升级
Jun 19 Javascript
js实现动画特效的文字链接鼠标悬停提示的方法
Mar 02 Javascript
JavaScript获取两个数组交集的方法
Jun 09 Javascript
Angularjs实现mvvm式的选项卡示例代码
Sep 08 Javascript
AngularJS表单验证中级篇(3)
Sep 28 Javascript
微信小程序 获取相册照片实例详解
Nov 16 Javascript
详解在Vue中使用TypeScript的一些思考(实践)
Jul 06 Javascript
微信小程序返回上一页传参并刷新过程解析
Dec 13 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实现curl模拟ftp上传的方法
2015/07/29 PHP
PHP命令行执行整合pathinfo模拟定时任务实例
2016/08/12 PHP
thinkphp5 + ajax 使用formdata提交数据(包括文件上传) 后台返回json完整实例
2020/03/02 PHP
firefox下对ajax的onreadystatechange的支持情况分析
2009/12/14 Javascript
JS字符串处理实例代码
2013/08/05 Javascript
通过js获取div的background-image属性
2013/10/15 Javascript
JS实现图片无间断滚动代码汇总
2014/07/30 Javascript
Bootstrap模块dropdown实现下拉框响应
2016/05/22 Javascript
jquery 无限极下拉菜单的简单实例(精简浓缩版)
2016/05/31 Javascript
jquery 获取select数组与name数组长度的实现代码
2016/06/20 Javascript
js插件dropload上拉下滑加载数据实例解析
2016/07/27 Javascript
jQuery Validate插件实现表单验证
2016/08/19 Javascript
原生js实现选项卡功能
2017/03/08 Javascript
zTree实现节点修改的实时刷新功能
2017/03/20 Javascript
vue中子组件传递数据给父组件的讲解
2019/01/27 Javascript
vue新建项目并配置标准路由过程解析
2019/12/09 Javascript
React Native登录之指纹登录篇的示例代码
2020/11/03 Javascript
Vue——前端生成二维码的示例
2020/12/19 Vue.js
Python SQLite3数据库操作类分享
2014/06/10 Python
Python中用format函数格式化字符串的用法
2015/04/08 Python
Python编程实现两个文件夹里文件的对比功能示例【包含内容的对比】
2017/06/20 Python
神经网络python源码分享
2017/12/15 Python
python模块之subprocess模块级方法的使用
2019/03/26 Python
tensorflow获取预训练模型某层参数并赋值到当前网络指定层方式
2020/01/24 Python
Python使用requests xpath 并开启多线程爬取西刺代理ip实例
2020/03/06 Python
Python任务自动化工具tox使用教程
2020/03/17 Python
解决redis与Python交互取出来的是bytes类型的问题
2020/07/16 Python
python怎么删除缓存文件
2020/07/19 Python
css3 position fixed固定居中问题解决方案
2014/08/19 HTML / CSS
html5用video标签流式加载的实现
2020/05/20 HTML / CSS
求职简历的自我评价怎样写好
2013/10/07 职场文书
先进典型事迹材料
2014/12/29 职场文书
行政助理岗位职责范本
2015/04/11 职场文书
预备党员转正党小组意见
2015/06/01 职场文书
创业开店,这样方式更合理
2019/08/26 职场文书
MySQL创建管理HASH分区
2022/04/13 MySQL