【Vue I18n 国际化插件】vue3+vue-i18n 项目实战总结

一、为什么要国际化?

前端国际化:应用要服务于不同的地区的用户,所以应用不能单一语言;应用要能让不同地区的人无障碍使用就需要实现国际化。目前在各大商城项目中,对于国际化语言的需求越来越高了,其中最多的就是 vue 项目使用 i18n 插件实现多语言切换功能。

前端国际化:应用要服务于不同的地区的用户,所以应用不能单一语言;应用要能让不同地区的人无障碍使用就需要实现国际化。目前在各大商城项目中,对于国际化语言的需求越来越高了,其中最多的就是 vue 项目使用 i18n 插件实现多语言切换功能。

二、插件基本思路

  • 定义语言包:需要几种语言展示,就定义几个语言包。
  • 组合语言包对象:创建对象,对语言包进行组合,对象的 key 为语言包引用,值为语言包对象。
  • 创建实例:创建 vue-i18n 类的对象,添加 message 和 locale 属性。
  • 挂载:挂载创建的实例对象。

三、插件版本适用框架

vue-i18n 作为国际化插件,它主要有两个版本:v8 和 v9。v8 版本适用于 Vue2 框架,v9 版本适用于 Vue3 框架。具体区别可以查看 官网 ,以下内容均在 Vue3 中使用。

四、项目实战

1、安装插件 vue-i18n
npm install vue-i18n --save

yarn add vue-i18n --save
2、创建文件,进行相关配置

1.在 src 目录下,新建 i18n 文件夹 2.在 i18n 文件夹中,新建 lang 文件夹(en.ts 、zh-cn.ts)、index.ts 文件
在这里插入图片描述
en.ts

export default {
   
  home: {
   
    name: 'home',
  },
  tabs: {
   
    work: 'Work',
    private: 'Private',
    collect: 'Collect',
    like: 'Like',
  },
}

zh-cn.ts

export default {
   
  home: {
   
    name: '首页',
  },
  tabs: {
   
    work: '作品',
    private: '私密',
    collect: '收藏',
    like: '喜欢',
  },
}

index.ts

import {
    createI18n } from 'vue-i18n'
// 语言包
import zhCn from './lang/zh-cn'
import en from './lang/en'

const i18n = createI18n({
   
  legacy:
### Vue i18n 前端国际化实现无感刷新技术方案 #### 安装依赖库 为了在Vue项目中使用i18n插件,需先通过命令行工具安装`vue-i18n`包。 ```bash cnpm install vue-i18n --save ``` 此操作会将所需资源下载到本地环境中以便后续开发工作开展[^1]。 #### 创建多语言文件结构 建议于`src`根目录下创建名为`language`的新文件夹用于存放不同语种的消息资源文件。这些文件通常按照ISO 639-1标准命名(如`en.js`, `zh-CN.js`),内部采用键值对形式定义待翻译字符串。 例如,在`zh-CN.js`内可以这样编写: ```javascript export default { welcomeMessage: &#39;欢迎访问我们的网站&#39;, } ``` 而对应的英语版本则放在`en.js`里: ```javascript export default { welcomeMessage: &#39;Welcome to our website&#39; } ``` #### 初始化i18n实例 编辑项目的入口文件(main.ts 或 main.js),引入上述准备好的消息资源,并初始化一个新的`createI18n()`对象来管理应用内的语言环境设置。 ```typescript import { createApp } from &#39;vue&#39;; import App from &#39;./App.vue&#39;; // 导入i18n模块以及各语言包 import { createI18n } from &#39;vue-i18n&#39;; import enLocale from &#39;@/languages/en&#39;; import zhCNLocale from &#39;@/languages/zh-CN&#39;; const app = createApp(App); app.use(createI18n({ locale: navigator.language === &#39;zh-CN&#39; ? &#39;zh-CN&#39; : &#39;en&#39;, // 设置默认语言 messages: { &#39;en&#39;: enLocale, &#39;zh-CN&#39;: zhCNLocale } })); app.mount(&#39;#app&#39;); ``` #### 组件中的动态文本处理 对于那些需要随用户偏好自动调整显示内容的部分,推荐利用计算属性(`computed`)而非静态数据声明(`data`)来进行封装。这样做能够确保每当当前选中的locale发生变化时,视图层能及时反映出最新的译文结果[^2]。 ```html <template> <div>{{ translatedText }}</div> </template> <script lang="ts"> import { defineComponent, computed } from &#39;vue&#39;; export default defineComponent({ setup(props){ return{ translatedText: computed(() => props.$t(&#39;welcomeMessage&#39;)) }; }, }); </script> ``` #### 切换语言逻辑设计 为了让用户体验更加流畅自然,当检测到用户的浏览器设置了不同的地区参数或者手动触发了切换按钮之后,应该立即更新全局状态机里的locale字段值。与此同时,页面上的所有已注册过的组件都会监听这一变动事件从而重新渲染自身携带的文字描述部分[^3]。 ```typescript methods:{ switchLanguage(lang:string){ this.$i18n.locale=lang; localStorage.setItem(&#39;preferredLangauge&#39;,lang); window.location.reload(); // 可选:强制重载以达到最佳效果 } } ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值