Vue3+Ts+Vite项目(第十四篇)——安装vue-i18n配置中英文切换,完成国际化

前言

简介:本文将带你安装 vue-i18n 这一个国际化插件,带你完成项目的国际化,实现中英文切换效果

一、 安装 vue-i18n

pnpm install vue-i18n

二、新建文件

2.1 在项目根目录下新建 locales 文件夹,并新建 index.tsen.tszh.ts 三个文件(只做中英文切换)

在这里插入图片描述

2.2 在 index.tsen.tszh.ts 文件中填入代码

2.2.1 index.ts 文件中填入如下代码

// index.ts
import {
    
     createI18n } from 'vue-i18n';
import zh from './zh';
import en from './en';

const messages = {
    
    
	en,
	zh
};
const language = (navigator.language || 'en').toLocaleLowerCase(); // 这是获取浏览器的语言
const i18n = createI18n({
    
    
	locale: localStorage.getItem('lang') || language.split('-')[0] || 'en', // 首先从缓存里拿,没有的话就用浏览器语言,
	fallbackLocale: 'en', // 设置备用语言
	messages
});

export default i18n;

2.2.2 en.ts 文件中填入如下代码

// en.ts
export default {
    
    
	login: {
    
    
		username: 'Username',
		password: 'Password',
	}
};

2.2.3 zh.ts 文件中填入如下代码

// zh.ts
export default {
    
    
	login: {
    
    
		username: '账号',
		password: '密码',
	}
};

三、main.ts 中引入

import {
    
     createApp } from 'vue'
import i18n from './locales' // 关键代码
​
const app = createApp(App)
app.use(i18n) // 关键代码
​
app.mount('#app')

四、使用

4.1 在 template 中使用,要用到一个$t()的方法,或者使用v-t也行

<template>
   <div>
      // 使用方式一
      <div> {
    
    {
    
    `$t('login.userName')`}} </div>
      
      // 使用方式二
      <div v-t="'login.password'"></div>
   </div>
</template>

4.2 在 setup 中使用

<script setup lang="ts">
import {
    
     useI18n } from 'vue-i18n'
​
const {
    
     t } = useI18n()
​
console.log(t('login.useName'))
</script>

4.3 中英文切换

<template>
    <div class="menu">
        <div class="menu-item" @click="changeLang('zh')">中文</div>
        <div class="menu-item" @click="changeLang('en')">English</div>
    </div>
</template>
<script setup lang="ts">
import {
    
     useI18n } from 'vue-i18n'
const {
    
     locale } = useI18n()
​
// 切换中英文
const changeLang = (lang: string) => {
    
    
  locale.value = lang
  localStorage.setItem('lang', lang)// 持久化,避免刷新页面后重置中英文
}
</script>

五、注意事项

el-form 中使用时,想实现 rules 规则的中英文切换,必须在每个 el-form-item上写 :rules

<el-form-item
    // 想实现 rules 规则的中英文切换,必须在每个 el-form-item上写 :rules
	:rules="[
		{
			required: true,
			message: t('login.usernameReg'),
			trigger: 'blur'
		}
	]"
	class="mt-22"
	prop="username">
	
	// placeholder处用法如下
	<el-input v-model="loginForm.username" :placeholder="t('login.username')" clearable>
		<template #prefix>
			<svg-icon class="login-iconSize" icon-class="login-account" />
		</template>
	</el-input>
</el-form-item>

猜你喜欢

转载自blog.csdn.net/qq_61402485/article/details/131870218