vue-i18n 初体验

使用vue,如何国际化呢?采用 vue-i18n。(i18n,internationalization,i和n中间省略18个字符)

vue-i18n 官网地址

https://kazupon.github.io/vue-i18n/zh/started.html#html

1. 安装相关的依赖

npm

npm install vue-i18n

yarn

yarn add vue-i18n

在官网中,我们看 start ,js 部分

// 如果使用模块系统 (例如通过 vue-cli),则需要导入 Vue 和 VueI18n ,然后调用 Vue.use(VueI18n)。
// import Vue from 'vue'
// import VueI18n from 'vue-i18n'
//
// Vue.use(VueI18n) // 准备翻译的语言环境信息
const messages = {
en: {
message: {
hello: 'hello world'
}
},
ja: {
message: {
hello: 'こんにちは、世界'
}
}
} // 通过选项创建 VueI18n 实例
const i18n = new VueI18n({
locale: 'ja', // 设置地区
messages, // 设置地区信息
}) // 通过 `i18n` 选项创建 Vue 实例
new Vue({ i18n }).$mount('#app') // 现在应用程序已经准备好了!

2. 照猫画虎,main.js文件修改

修改main.js文件(目前为一个新项目),注意new VUE({})中 i18n 放在 el 的后面,不要放在最后面,要不然有可能会报错

import Vue from 'vue'
import App from './App'
import router from './router'
import VueI18n from 'vue-i18n' Vue.config.productionTip = false Vue.use(VueI18n) const messages = {
en: {
message:{
hello:'hello world'
}
},
zh: {
message:{
hello:'你好 世界'
}
}
} // 通过选项创建 VueI18n 实例
const i18n = new VueI18n({
locale: 'zh', // 设置地区,目前设置的是中文
messages, // 设置地区信息
}) /* eslint-disable no-new */
new Vue({
el: '#app',
i18n,
router,
components: { App },
template: '<App/>'
})

3. 修改APP.vue文件

里面暂时用不到的全可以删了,注意是 $t ,后面接小括号

<template>
<div id="app">
<h1>{{$t('message.hello')}}</h1>
</div>
</template> <script>
export default {
name: 'App',
data(){
return{
}
},
}
</script>

4. 启动项目,访问页面

由于上方设置的是中文,所以我们看到的是中文,将

const i18n = new VueI18n({
locale: 'zh', // 设置地区,目前设置的是中文
messages, // 设置地区信息
})

中的zh改成en(messages 定义,此处i18n使用的是上方的messages),刷新页面

我们看到变成了英文的hello world。简单的 demo 就完成了。

我们输出 this.$i18n.locale 看看具体是什么

mounted(){
console.log(this.$i18n.locale);
}

输出的是 'en' ,据此,我们可以修改 $i18n.locale 来切换语言

5. 手动切换语言

采用 饿了么 的前端组件,修改App.vue文件

主要代码如下

this.$i18n.locale = language;

<template>
<div id="app">
<h1>{{$t('message.hello')}}</h1>
<el-button @click="changeLocale('zh')" type="primary">中文</el-button>
<el-button @click="changeLocale('en')" type="success">English</el-button>
</div>
</template> <script> export default {
name: 'App',
data(){
return{
}
},
mounted(){
console.log(this.$i18n.locale);
},
methods:{
changeLocale(language){
this.$i18n.locale = language;
}
}
}
</script>

我们来试试效果

当我们刷新页面的时候,会发现又回到了最初的起点

6. 利用localStorage解决刷新不保存问题

我们可以利用本地存储来解决这个问题,在页面加载的时候不使用默认的,首先查看localStorage是否有语言设置,没有再使用默认的,同时在切换数据源的时候,localStorage保存语言。

main.js中修改

// 通过选项创建 VueI18n 实例
const i18n = new VueI18n({
locale: localStorage.getItem('locale') || 'en', // 设置地区
messages, // 设置地区信息
})

App.vue中修改

    ```vue
changeLocale(language){
localStorage.setItem('locale',language);
this.$i18n.locale = language;
}
```

查看一下效果

7. 将i18n显示的内容修改成js文件

在 main.js 文件中显示很多message总归是不好的,所以把它弄成一个js文件,方便操作及管理。

新建两个js文件,en.js、zh.js,一个对应英文,一个对应中文。

我这边将两个文件放入的位置为 src\common\lang 中

en.js内容

module.exports = {
question: {
title: 'What fruit do you like?'
},
}

zh.js内容

module.exports = {
question: {
title: '你喜欢吃什么水果?'
},
}

修改main.js中的 messages 改完引用

const messages = {
en: require('./common/lang/en'),
zh: require('./common/lang/zh')
}

同时 App.vue 中的显示也需要改成 $t('question.title')

<h1>{{$t('question.title')}}</h1>

查看效果

有标题,当然会有选择需要显示咯,加上

module.exports = {
question: {
title: 'What fruit do you like?'
},
answer:{
a:'apple',
b:'banana',
c:'cherry',
d:'durian'
}
}
module.exports = {
question: {
title: '你喜欢吃什么水果?'
},
answer:{
a:'苹果',
b:'香蕉',
c:'樱桃',
d:'榴莲'
}
}

在App.vue中添加数组数据

<el-checkbox-group v-model="ans">
<el-checkbox v-for="a in answer" :value="a.key" :key="a.key" :label="a.value">{{a.value}}</el-checkbox>
</el-checkbox-group>
answer:[ {key:'a',value:this.$t('answer.a')},
{key:'b',value:this.$t('answer.b')},
{key:'c',value:this.$t('answer.c')},
{key:'d',value:this.$t('answer.d')}]
<template>
<div id="app">
<h1>{{$t('question.title')}}</h1>
<el-checkbox-group v-model="ans">
<el-checkbox v-for="a in answer" :value="a.key" :key="a.key" :label="a.value">{{a.value}}</el-checkbox>
</el-checkbox-group>
<br><br>
<el-button @click="changeLocale('zh')" type="primary">中文</el-button>
<el-button @click="changeLocale('en')" type="success">English</el-button>
</div>
</template> <script> export default {
name: 'App',
data(){
return{
ans:[],
answer:[ {key:'a',value:this.$t('answer.a')},
{key:'b',value:this.$t('answer.b')},
{key:'c',value:this.$t('answer.c')},
{key:'d',value:this.$t('answer.d')}]
}
},
mounted(){
console.log(this.$i18n.locale);
},
methods:{
changeLocale(language){
localStorage.setItem('locale',language);
this.$i18n.locale = language;
}
}
}
</script>

刷新页面,我们看到显示正常

但我们切换语言的时候发现下面的选项并没有被切换,怎么解决呢?

8. 解决数组无法切换中英文问题

可以将要转换的东西放入数组中,而不是转换后的东西放入数组中,即 将 answer.a 这样的放入数组的value中,然后在外面转义。

<template>
<div id="app">
<h1>{{$t('question.title')}}</h1>
<el-checkbox-group v-model="ans">
<el-checkbox v-for="a in answer" :value="a.key" :key="a.key" :label="$t(a.value)">{{$t(a.value)}}</el-checkbox>
</el-checkbox-group>
<br><br>
<el-button @click="changeLocale('zh')" type="primary">中文</el-button>
<el-button @click="changeLocale('en')" type="success">English</el-button>
</div>
</template> <script> export default {
name: 'App',
data(){
return{
ans:[],
answer:[ {key:'a',value:'answer.a'},
{key:'b',value:'answer.b'},
{key:'c',value:'answer.c'},
{key:'d',value:'answer.d'}]
}
},
mounted(){
console.log(this.$i18n.locale);
},
methods:{
changeLocale(language){
localStorage.setItem('locale',language);
this.$i18n.locale = language;
}
}
}
</script>

vue-i18n 初体验的更多相关文章

  1. vue.js 初体验— Chrome 插件开发实录

    欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者:陈纬杰 背景 对于经常和动画开发打交道的开发者对于Animate.css这个动画库不会陌生,它把一些常见 ...

  2. vue.js——初体验

    看到最近很火的vue.js,于是开启了自己人生中首篇翻译之路,才意识到这个纯英文版的的确没有中文的通俗易懂~~~~~~不过, 还是硬着头皮把这篇英文版的博客给翻译完了,希望可以帮助自己的同时也方便别人 ...

  3. MVC + Vue.js 初体验(实现表单操作)

    Vuejs http://cn.vuejs.org/ Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的 渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的 ...

  4. Laravel 5.4+Vue.js 初体验:Laravel下配置运行Vue.js

    生产材料PHP:PHP 5.6+Laravel 5.4:https://github.com/laravel/laravel/releases/Composer:http://getcomposer. ...

  5. Vue+Vuex初体验

    首先: 安装vuex npm install vuex -S 需要有两个组件(HelloWord.vue 和 HelloDemo.vue)[组件自定义] 注册路由 注册store 测试 一.需要有两个 ...

  6. vue.jsc初体验

    Vue 1.安装脚手架 (1)npm install -g vue-cli (2)Vue -v //查看是否安装成功 (3)Vue init webpack name(名称) (4)Npm insta ...

  7. 【腾讯Bugly干货分享】基于 Webpack & Vue & Vue-Router 的 SPA 初体验

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d13a57132ff21c38110186 导语 最近这几年的前端圈子,由于 ...

  8. 基于 Webpack & Vue & Vue-Router 的 SPA 初体验

    基于 Webpack & Vue & Vue-Router 的 SPA 初体验 本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com ...

  9. vue.js2.0 自定义组件初体验

    理解 组件(Component)是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素, Vue.js 的编译器为它添加特殊功能.在有些情况 ...

  10. vue组件化初体验 全局组件和局部组件

    vue组件化初体验 全局组件和局部组件 vue组件化 全局组件 局部组件  关于vue入门案例请参阅 https://www.cnblogs.com/singledogpro/p/11938222.h ...

随机推荐

  1. 【01】微服务(Microservice)是什么?为什么会出现微服务?

    微服务(Microservice)虽然是当下刚兴起的比较流行的新名词,但本质上来说,微服务并非什么新的概念. 实际上,很多 SOA(面向服务的架构)实施成熟度比较好的企业,已经在使用和实施微服务了.只 ...

  2. 国产GOWIN实现低成本实现CSI MIPI转换DVP

    CSI MIPI转换DVP,要么就是通用IC操作,如龙讯芯片和索尼芯片,但是复杂的寄存器控制器实在开发太累.对于FPGA操作,大部分都是用xilinx的方案,xilinx方案成本太高,IP复杂. 而用 ...

  3. pypinyin 获取拼音,作为智能设备的唤醒比对结果

    from pypinyin import lazy_pinyin,TONE,TONE2,TONE3,NORMAL a = "小七同学" b = "小琦同学" c ...

  4. Ingress Nginx 接连披露高危安全漏洞,是否有更好的选择?

    简介: 在<K8s 网关选型初判:Nginx 还是 Envoy>一文中,我们已经给出了这个新的选项:MSE 云原生网关.本文继续展开分析,为何 MSE 云原生网关有更好的安全性保障. 作者 ...

  5. 浅谈专有云MQ存储空间的清理机制

    简介: 浅谈专有云MQ存储空间的清理机制 在近⼀年的项⽬保障过程中,对专有云MQ产品的存储⽔位清理模式⼀直存疑,总想一探究竟但又苦于工作繁忙.精力有限,直到最近⼀次项⽬保障过程中再次出现了类似的问题, ...

  6. 阿里云徐立:面向容器和 Serverless Computing 的存储创新

    ​简介:以上为大家分享了阿里云容器存储的技术创新,包括 DADI 镜像加速技术,为容器规模化启动奠定了很好的基础,ESSD 云盘提供极致性能,CNFS 容器网络文件系统提供极致的用户体验. 作者:徐立 ...

  7. 阿里云OSS文件上传几种方法(主要是前端)

    目录 零.准备 一.服务端签名后直传 1. 阿里云控制台配置 2. 后端接口开发(PHP) 3. 前端获取签名后上传 二.使用STS临时凭证进行上传 1. 后端接口开发(node) 2. 前端获取临时 ...

  8. OLAP系列之分析型数据库clickhouse主从副本模式(三)

    一.测试单分片,单副本或多副本模式 # 1.停止集群 systemctl stop clickhouse-server # 修改配置文件 vim /etc/clickhouse-server/conf ...

  9. QT使用外部库

    一.简述 当QT使用第三方库时,编译会报错,哪怕是使用linux下的软件库时都有可能报错,所以在使用的时候需要添加一下外部库的路径,这里我以mosquitto的库函数为例,主要的导入方式有两种. 二. ...

  10. ClickHouse常用Sql

    -- 删除字段 ALTER TABLE 表名 DROP COLUMN 字段名; -- 新增字段,和字段备注 ALTER TABLE 表名 ADD COLUMN IF NOT EXISTS 字段名 St ...