利用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 相关文章推荐
用js通过url传参把数据从一个页面传到另一个页面
Sep 01 Javascript
JS实现获取剪贴板内容的方法
Jun 21 Javascript
js数组操作方法总结(必看篇)
Nov 22 Javascript
JavaScript常见的五种数组去重的方式
Dec 15 Javascript
js中数组插入、删除元素操作的方法
Feb 15 Javascript
js实现时间轴自动排列效果
Mar 09 Javascript
JS实现获取汉字首字母拼音、全拼音及混拼音的方法
Nov 14 Javascript
Vue 中使用富文本编译器wangEditor3的方法
Sep 26 Javascript
vue element 中的table动态渲染实现(动态表头)
Nov 21 Javascript
Vue分页效果与购物车功能
Dec 13 Javascript
JS正则表达式常见函数与用法小结
Apr 13 Javascript
vue中解决微信html5原生ios虚拟键返回不刷新问题
Oct 20 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 $_ENV为空的原因分析
2009/06/01 PHP
浅谈PHP中单引号和双引号到底有啥区别呢?
2015/03/04 PHP
PHP设计模式之适配器模式代码实例
2015/05/11 PHP
Laravel学习教程之IOC容器的介绍与用例
2017/08/15 PHP
搜索附近的人PHP实现代码
2018/02/11 PHP
PHP商品秒杀问题解决方案实例详解【mysql与redis】
2019/07/22 PHP
PHP中有关长整数的一些操作教程
2019/09/11 PHP
Thinkphp极验滑动验证码实现步骤解析
2020/11/24 PHP
javascript数组使用调用方法汇总
2007/12/08 Javascript
javascript 隐藏/显示指定的区域附HTML元素【legend】用法
2010/03/05 Javascript
通过jQuery源码学习javascript(三)
2012/12/27 Javascript
JSP中使用JavaScript动态插入删除输入框实现代码
2014/06/13 Javascript
Node.js开源应用框架HapiJS介绍
2015/01/14 Javascript
详解Vue.js动态绑定class
2016/12/20 Javascript
jQuery实现的省市联动菜单功能示例【测试可用】
2017/01/13 Javascript
vue项目引入字体.ttf的方法
2018/09/28 Javascript
JavaScript学习笔记之基于定时器实现图片无缝滚动功能详解
2019/01/09 Javascript
jQuery操作cookie的示例代码
2019/06/05 jQuery
JS实现网站吸顶条
2020/01/08 Javascript
微信小程序scroll-view隐藏滚动条的方法详解
2020/03/25 Javascript
python实现颜色空间转换程序(Tkinter)
2015/12/31 Python
Python3实现并发检验代理池地址的方法
2016/09/18 Python
Python爬虫——爬取豆瓣电影Top250代码实例
2019/04/17 Python
解决pycharm上的jupyter notebook端口被占用问题
2019/12/17 Python
Python Handler处理器和自定义Opener原理详解
2020/03/05 Python
Jupyter Notebook折叠输出的内容实例
2020/04/22 Python
Godiva巧克力英国官网:比利时歌帝梵巧克力
2018/08/28 全球购物
查找廉价航班和发现新目的地:Kiwi.com
2019/02/25 全球购物
波兰家居和花园家具专家:4Home
2019/05/26 全球购物
Yahoo-PHP面试题3
2012/01/14 面试题
公司JAVA开发面试题
2015/04/02 面试题
初中语文教学反思范文
2016/03/03 职场文书
nginx前后端同域名配置的方法实现
2021/03/31 Servers
SQL SERVER存储过程用法详解
2022/02/24 SQL Server
Win11运行育碧游戏总是崩溃怎么办 win11玩育碧游戏出现性能崩溃的解决办法
2022/04/06 数码科技