Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

Gray-Ice

个人博客兼个人网站

这里所说的国际化,是根据访问者的浏览器语言来更改页面语言。

首先,需要导入一个插件:

1
npm install vue-i18n --save

在main的js中注册该组件:

1
2
3
4
// 导入
import VueI18n from 'vue-i18n'
// 注册
Vue.use(VueI18n)

在src目录下新建lang文件夹,在文件夹中新建zh.js和en.js文件

在两个文件中(如果不止是中文和英文的话就再新建对应的文件)输入对应的文本,具体内容按自己需求而定,这是我自己的zh.js文件内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 双语规范的变量(中文)

export const m = {
'index':'美多商城',
'home': '主页',
'shop': '商店',
'page': '页面',
'contact': '联系我们!',
'register': '注册',
'login': '登录',
'logout': '登出',
'welcome': '欢迎您',
}

这是我的en.js文件内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 双语规范的变量(英文)

export const m= {
'index': 'Mei Duo SHop',
'home': 'Home',
'shop': 'Shop',
'page': 'Page',
'contact': 'Contact',
'register': 'Register',
'login': 'Login',
'logout': "Logout",
'welcome': 'Welcome!'
}

然后再在main.js中加入以下内容,注意要放在上次写的语句下面:

1
2
3
4
5
6
7
8
9
10
11
// 导入语言包
const i18n = new VueI18n({
// 当前默认语言
locale: 'en',
// 语言包声明
messages:{
'zh': require('./lang/zh'),
'en': require('./lang/en'),
}
})

在new Vue中加入以下内容:

1
i18n

为了方便理解,我把我的new Vue内容写出来:

1
2
3
4
5
6
7
8
9
new Vue({
el: '#app',
router,
i18n,
components: { App },
template: '<App/>',
render: h => h(App)
})

这个i18n就是上面定义的const i18n = new VueI18n中的i18n。

到了这里就差不多了,那么接下来该调用了,在需要国际化的地方输入以下内容:

1
{{$t('m.register')}}

如:

1
2
3
<div v-if="username===''">
<router-link to='/register'>{{$t('m.register')}}</router-link>
<router-link to='/login'>{{$t('m.login')}}</router-link>

其中

1
{{$t()}}

是固定语法,m是之前在js文件中定义的,register和login是之前在js文件中设置的键。注意加上引号。

为了方便访问者选用语言,这里我做出了这样的代码(这里使用了heyui,返回false或者true):

1
<h-switch v-model="lang" @change="language_change">中/English</h-switch>

在data中添加lang变量:

1
2
3
4
5
data(){
return {
lang: 0
}
}

这里说明一下lang的值,因为使用的是heyui,所以默认是0,即”false”,不过即便不是使用的heyui,其也有存在的的必要,具体请看以下代码,这是在methods中:

1
2
3
4
5
6
7
8
9
10
11
language_change:function(){
console.log(this.lang);
if(this.lang === true){
this.$i18n.locale = 'en';
localStorage.setItem('lang', 'en');
}
else if(this.lang === false){
this.$i18n.locale = 'zh';
localStorage.setItem('lang', 'zh');
}
}

这里说一下为什么这样写: 之前已经提到过,heyui的h-switch标签返回false或true,因为v-model的缘故,变量lang也会变为false或true,所以根据这个原理来判断,如果不使用heyui可以写一个button,点击使lang变成true或false。

如果用户点击了按钮,那么便存在本地一个值,以后每次登陆就按照存在本地的值判断选择哪个语言。如果用户是第一次登陆,那么根据浏览器语言来自动选择语言:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mounted:function(){
if(localStorage.getItem('lang') === 'zh'){
this.lang = false;
this.$i18n.locale = 'zh';
}
else if(localStorage.getItem('lang') === 'en'){
this.lang = true;
this.$i18n.locale = 'en';
}
else if(navigator.languages[0]==='zh-CN'){
this.$i18n.locale='zh';
}
else if(navigator.languages[0] === 'en'){
this.$i18n.locale = 'en';
}
}

navigator.languages[0]是你浏览器的首选语言,次选语言是navigator.languages[1],第三语言是navigator.languages[2]以此类推。

评论



愿火焰指引你