Vue3 国际化i18n

国际化i18n方案

  • [1. 什么是i18n](#1. 什么是i18n)
  • [2. i18n安装、配置及使用](#2. i18n安装、配置及使用)
    • [2.1 安装](#2.1 安装)
    • [2.2 配置](#2.2 配置)
    • [2.3 挂载到实例](#2.3 挂载到实例)
    • [2.4 组件中使用](#2.4 组件中使用)
    • [2.5 语言切换](#2.5 语言切换)

1. 什么是i18n

i18n 是"国际化"的简称。在资讯领域,国际化(i18n)指让产品(出版物,软件,硬件等)无需做大的改变就能够适应不同的语言和地区的需要。

对程序来说,在不修改内部代码的情况下,能根据不同语言及地区显示相应的界面。

在全球化的时代,国际化尤为重要,因为产品的潜在用户可能来自世界的各个角落。通常与i18n相关的还有L10n("本地化"的简称)。

2. i18n安装、配置及使用

2.1 安装

npm i vue-i18n

2.2 配置

langs存放各语言文件

en.js

复制代码
export default {
    messages:{
        home:'home',
        login:'login',
        userName:'userName',
        index:'index',
        monitor:'monitor',
        order:'order',
        census:'census',
        switchLanguage:'switchLanguage',
        date:'date',
        name:'name',
        address:'address'
    }
}

tc.js

复制代码
export default {
    messages:{
        home:'首頁',
        login:'登錄',
        userName:'用戶名',
        index:'首頁',
        monitor:'數據監控',
        order:'訂單信息',
        census:'統計管理',
        switchLanguage:'切換語言',
        date:'日期',
        name:'姓名',
        address:'地址'
    }
}

zh.js

复制代码
export default {
    messages:{
        home:'首页',
        login:'登录',
        userName:'用户名',
        index:'首页',
        monitor:'数据监控',
        order:'订单信息',
        census:'统计管理',
        switchLanguage:'切换语言',
        date:'日期',
        name:'姓名',
        address:'地址'
    }
}

message.js

复制代码
//语言包
import zh from './langs/zh'
import en from './langs/en'
import tc from './langs/tc' //繁体

export default { //语言包
    zh,
    en,
    tc
}

index.js

复制代码
import { createI18n } from 'vue-i18n'
import zh from './langs/zh'
import en from './langs/en'
import tc from './langs/tc'
const messages = {
	en,
	zh,
	tc
}
const i18n = createI18n({
	legacy:false,
	locale:localStorage.getItem('lang') ||'zh',
	messages
})
export default i18n

2.3 挂载到实例

复制代码
import { createApp } from 'vue'
import i18n from './locals'
createApp(App).use(i18n).mount("#app")

2.4 组件中使用

复制代码
<template>
 <div>
   {{title}}
   <!-- 二种引入方式 -->
   <div>
   {{$t('messages.userName')}}
   </div>
   <div v-t="'messages.userName'"></div>
 </div>
</template>

2.5 语言切换

复制代码
<script setup>
import { useI18n } from 'vue-i18n'
const { locale } = useI18n();

import { ref, reactive } from 'vue'
let title = ref('订单信息');
const langArr = ['home', 'login', 'userName', 'index', 'monitor', 'order', 'census', 'switchLanguage', 'date', 'name', 'address'];
const changeLang = type => {
  locale.value = type;
  localStorage.setItem('lang', type)
}
</script>

<template>
  <ul>
    <li @click="changeLang('zh')">中文</li>
    <li @click="changeLang('en')">英文</li>
    <li @click="changeLang('tc')">繁体</li>
  </ul>
  <ul>
    <li v-for="item in langArr" :key="item">
      {{ item + ':' }} {{ $t('messages.' + item) }}
    </li>
  </ul>
</template>

<style scoped></style>

中文:

英文:

繁体:

相关推荐
雨季6662 分钟前
Flutter 三端应用实战:OpenHarmony 简易“动态内边距调节器”交互模式深度解析
javascript·flutter·ui·交互·dart
天人合一peng17 分钟前
Unity中button 和toggle监听事件函数有无参数
前端·unity·游戏引擎
会飞的战斗鸡34 分钟前
JS中的链表(含leetcode例题)
javascript·leetcode·链表
方也_arkling1 小时前
别名路径联想提示。@/统一文件路径的配置
前端·javascript
毕设源码-朱学姐1 小时前
【开题答辩全过程】以 基于web教师继续教育系统的设计与实现为例,包含答辩的问题和答案
前端
qq_177767371 小时前
React Native鸿蒙跨平台剧集管理应用实现,包含主应用组件、剧集列表、分类筛选、搜索排序等功能模块
javascript·react native·react.js·交互·harmonyos
qq_177767371 小时前
React Native鸿蒙跨平台自定义复选框组件,通过样式数组实现选中/未选中状态的样式切换,使用链式调用替代样式数组,实现状态驱动的样式变化
javascript·react native·react.js·架构·ecmascript·harmonyos·媒体
web打印社区1 小时前
web-print-pdf:突破浏览器限制,实现专业级Web静默打印
前端·javascript·vue.js·electron·html
RFCEO2 小时前
前端编程 课程十三、:CSS核心基础1:CSS选择器
前端·css·css基础选择器详细教程·css类选择器使用方法·css类选择器命名规范·css后代选择器·精准选中嵌套元素
烬头88212 小时前
React Native鸿蒙跨平台采用了函数式组件的形式,通过 props 接收分类数据,使用 TouchableOpacity实现了点击交互效果
javascript·react native·react.js·ecmascript·交互·harmonyos