VueI18n插件的简单应用于国际化
作为一个前端小白,刚刚接触学习Vue.js框架结合Element-ui组件开发项目。由于最近需要实现国际化功能,在看element-ui的开发文档时,只有简单的引入没有应用实例,对于我这种小白不能get到,无从下手。在网上也查了很多次,发现资料极其少,可能是两者恰好是近年新兴起来的,成熟的参考资料不是那么多。于是自己在参考相关文档后,多次尝试后,终于成功了。写下这部分的总结便于自己以后参考,也希望有可能帮到有需要的人。
一、Vuei18n的安装(这个是基于已经安装了Vue的前提下哦)
命令行:npm install vue-i18n –save
二、使用(参考于网上现有的资料)
也是先在main.js入口文件中进行引入配置。分如下两种情况:
1. 直接在main.js中写入语言的对应,根据自己实际情况来选择所需要的语言,这里以中文和英语为例尝试:
(1)main.js
import VueI18n from 'vue-i18n' Vue.use(VueI18n);
const i18n = new VueI18n({
locale: 'Chinese', // 语言标识
messages:{
Chinese : {
message: {
hello: '你好世界!',
do:'搜一下',
center:'处理中心',
work:'我的工作台',
choose1:'选择1',
choose2:'选择2',
choose3:'选择3',
dan:'订单管理'
}
},
English : {
message: {
hello: 'hello world',
do:'search',
center:'processing center',
work:'my Workbench',
choose1:'option1',
choose2:'option2',
choose3:'option3',
dan:'Order management'
}
}
}
})
/*还需要将VueI18n挂载到Vue实例上,可全局使用*/
new Vue({
el: '#app',
i18n,
render: h => h(App)
})
(2).vue文件
语言下拉选择框的下面是一个简单的导航栏和form表单的一个输入框,使用element-ui插件中的,用来简单试验是否可以配套element-ui使用。因此简单的设置,下拉列表默认值为中文,表单数据也在数据中定义一下。
!!然后elment-ui相关要显示的,写法有些不一样:
v-bind 属性名 = "$t('message.xx')"
或 :属性名 = "$t('message.xx')"
最后还需要将调用watch函数,对我们的语言变量进行监听,实时监测所选的语言,按key进行匹配。
2 .也可以将翻译文件单独写在assets,在main.js文件中引用即可。如下图所示:我在assets目录下新建了一个translate文件夹,分别存放了中文和英文翻译,便于后面的修改和添加。
Chinese.js代码如下:
export const Ch =
{
message: {
hello: '你好世界!',
do:'搜一下',
center:'处理中心',
work:'我的工作台',
choose1:'选择1',
choose2:'选择2',
choose3:'选择3',
dan:'订单管理',
activityname:'活动名称'
}
同理English.js也一样,下面在main.js中就修改为:
const i18n = new VueI18n({
locale: 'Chinese', // 语言标识
messages:{
Chinese : Ch,
English : En
}
})
最后说下自己犯的两个错误:
1.一定要用es6语法将需要引用的文件export出去,刚开始我就没有这样,直接在main.js里引用没有作用T T;
2.在main.js里import时,一定要加{ },没有加的后果也是……
!!!!!!!可能自己在这方面比较欠缺,在后来第二次项目中使用时,又忘记了加{},找了好久的原因,事不过三,需要自己谨记。
三.最终实现效果如下:
选择要设置的语言,默认为中文显示,如下图所示:
当切换为英文时,效果如下:
有什么不对的地方,希望大家能帮忙指正,一起进步。还有关于element-ui中的国际化的使用,自己也一直没有弄明白,如果大佬们知道能分享给我^_^
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
又过了一周的时间,自己在项目中重新使用时,又遇到了很多新的问题。例如:
(1)虽然在main.js里使用了全局挂载,在各个子组件中使用时,我又分别调用了watch函数去监听locale变量的值变化,,,这样其实是没有必要的。因为我的导航菜单项的路由跳转控制在Home.vue中,在Home.vue中进行监听时即使子路由跳转也会知道locale的值,从而改变语言状态显示。
(2)国际化的模板语言是$t(),而不是{{}},因此在路由跳转时,原本就是通过遍历显示菜单项,然后每个菜单项匹配router.js中的name,原本的未国际化之前,代码实现如下:
修改为:
只要把route.js中定义路由项的地方,路由的name改为key就可以了,在i18n中$t指令是先通过找到item.name中对应的key,再通过key去匹配翻译文件中的语言状态。
暂且遇到的坑都记在这里了……^_^ 接下来的日子,希望自己能继续保持学习和记录的热情,一步一步地成长,♪(^∇^*)
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 、、、、、、、 后来的后来,在vue中的js部分,包括data里的数据及methods里的方法都不可避免的使用到了国际化标签。需要在调用处通过this关键词调用国际化指令t,即this.t(’key’),确实一般实现上都没有问题。
但后来发现,在elment-ui表单处必然涉及到表单验证,如果是直接在data里写简单的不为空的提示信息验证,如下所示:
验证信息不能被识别,提示信息仍是原样输出,时间紧迫我只能通过在函数语句中调用实现:
通过callback语句调用,使用this.$t(‘key’)又能匹配识别。目前还没有找到原因,希望有知道的小伙伴务必分享给我,非常感谢咯。
声明:本博文由博主Bonjourjw(http://blog.csdn.net/bonjourjw)原创编辑,我经其同意后转载过来供大家交流学习,未经其同意禁止转载!
VueI18n插件的简单应用于国际化的更多相关文章
- vue.js国际化vue-i18n插件的使用问题,在模版文本、组件方法、jsf方法里的使用
vue.js国际化vue-i18n插件的使用问题,在模版文本.组件方法.jsf方法里的使用 1.在文本里使用{{$t("xxx")}} <span>{{$t(" ...
- Xcode7使用插件的简单方法&&以及怎样下载到更早版本的Xcode
Xcode7自2015年9上架以来也有段时间了, 使用Xcode7以及Xcode7.1\Xcode7.2的小伙伴会发现像VVDocumenter-Xcode\KSImageNamed-Xcode\HO ...
- 移动端全屏滑动的小插件,简单,轻便,好用,只有3k swiper,myswiper,page,stage
https://github.com/donglegend/mySwiper mySwiper 移动端全屏滑动的小插件,简单,轻便,好用,只有3k 下载 直接下载 bower install mySw ...
- 数据统计表插件,highcharts插件的简单应用
highcharts插件的简单应用,非常全能好用的一个数据统计表插件. $(function () { $('#container').highcharts({ chart:{ type:" ...
- ASP.NET MVC5 插件机制中插件的简单实现
Autofac 依赖注入 ASP.NET MVC5 插件机制中插件的简单实现 一.前言 由于项目业务复杂,创建了多个插件并把他们放在了不同的项目中,项目使用AutoFac做的IOC:但是主项目可以注入 ...
- swiper插件的简单使用,实现图片轮播
移动端和p c端经常会遇到写轮播图的情况,这里只是简单的说一下swiper插件的简单用法(移动端为例). <!DOCTYPE html> <html lang="en&qu ...
- nice-validator表单验证插件的简单使用
前言 前端表单校验是过滤无效数据.假数据.有毒数据的第一步,是数据安全的第一道关卡,虽然我们不能100%相信客户端提交的数据(真正的校验还得在服务端进行),但设置前端表单校验也是至关重要的,自己写逻辑 ...
- 用react的ReactCSSTransitionGroup插件实现简单的弹幕动画
1,开始的思路 公司想做直播方面的项目,并想加入弹幕的功能,直播的页面已经作为一个组件放在了用react+redux写好的一个网站项目上.所以技术老大让我研究下如何用react实现弹幕的功能.下面我就 ...
- 【UI插件】简单的日历插件(下)—— 学习MVC思想
前言 我们上次写了一个简单的日历插件,但是只是一个半成品,而且做完后发现一些问题,于是我们今天尝试来解决这些问题 PS:距离上次貌似很久了 上次,我们大概遇到哪些问题呢: ① 既然想做一套UI库,那么 ...
随机推荐
- 【java提高】---数组增删 list删除 map删除
数组增删 集合删除 1.数组增删 package com.test; import java.util.List; import java.util.ArrayList; import java.ut ...
- Jenkins in OpenCASCADE
Jenkins in OpenCASCADE eryar@163.com Abstract. Jenkins是一个开源软件项目,是基于Java开发的一个持续集成工具,用于监控持续复制的工作,旨在提供一 ...
- 【python】局部变量和全局变量
- 前端模块化:RequireJS(转)
前言 前端模块化能解决什么问题? 模块的版本管理 提高可维护性 -- 通过模块化,可以让每个文件职责单一,非常有利于代码的维护 按需加载 -- 提高显示效率 更好的依赖处理 -- 传统的开发模式,如果 ...
- 【USACO】玉米实验(单调队列)
Description 约翰决定培育新的玉米品种以提高奶牛的产奶效率.约翰所有的土地被分成 N ×N 块,其中第 r行第 c 列的玉米质量为 Ar,c.他打算找一块质量比较均匀的土地开始自己的实验.经 ...
- JAVA中的设计模式一(单例模式)
单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个 ...
- Docker(三):Docker仓库配置
1.仓库介绍 仓库(repository)用来集中管理Docker镜像,支持镜像分发和更新. 目前世界上最大最知名的公共仓库是Docker官方的Docker Hub,国内比较知名的有:Docker P ...
- java小技术之生成二维码
把我们需要的链接或者内容生成二维码其实是一件非常容易的事情,有很多办法可以实现,这里我们采用JS方法生成. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTM ...
- JavaScript的DOM编程--04--获取元素节点的子节点
获取元素节点的子节点(**只有元素节点才有子节点!!) 1). childNodes 属性获取全部的子节点, 但该方法不实用. 因为如果要获取指定的节点 的指定子节点的集合, 可以直接调用元素节点的 ...
- MySQL查询(进阶)(每个标点都是重点)
MySQL 是工作中很普遍的需要用到的,所以必须掌握,而 之前我们一直说的都是怎么存. 你只会存不会取有个屁用.所以希望大家在如何查询读取数据这方面多下点功夫. 这篇和上一篇都是干货,我也是第一次学. ...