Vue3+vite使用i18n国际化

vue3+vite使用i18n国际化

安装i18n

js 复制代码
npm install vue-i18n

创建结构

  • 在src下面新建locales文件夹
  • 在locales文件夹内新建index.js文件和language文件夹
  • 在language文件夹内新建zh.js和en.js

添加语言包

zh.js内容如下

js 复制代码
export default {
    name:"姓名",
    aa:{
        bb:"你好"
    }
}

en.js内容如下

js 复制代码
export default {
    name:"name",
    aa:{
        bb:"hello"
    }
}

融合语言包模块

在locales/index.js将language/zh.js和language/en.js添加到语言包

locales/index.js内容如下

js 复制代码
import { createI18n } from "vue-i18n";
import zh from "./language/zh";
import en from "./language/en";
 
const i18n = createI18n({
  legacy: false, // 默认使用 composition API,不启用旧版的 API 兼容模式,是 vue-i18n v9 引入的,为了更好地与 Vue 3 的设计理念保持一致。使用 Composition API 可以提供更灵活的代码组织和更好的类型支持。
  locale: "zh",  // 当前使用的语言
  fallbackLocale: "zh",  // 找不到对应的语言时,使用 fallbackLocale对应的语言
  messages:{
    zh, // 提供的中文语言
    en, // 提供的英文语言
  },
});
 
export default i18n; // 导出

在main.js进行注册

js 复制代码
import { createApp } from "vue";
import App from "./App.vue";
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import '@/assets/fonts/font.css'
import * as echarts from 'echarts';
import router from "./router/index.js";
import { createPinia } from "pinia";

// 一:引入i18n
import i18n from "./locales/index.js";

window.echarts = echarts; 
const pinia = createPinia();

// 二:注册i18n
// 这里注册i18n记得一个小坑,例如下面这种,前面如果有路由模块/UI组件模块/pinia这种全局共享模块的,将i18n放到最后注册,否则会报错(反正我是报错了,放到最后面注册就没事了)
createApp(App).use(pinia).use(router).use(ElementPlus).use(i18n).mount("#app");

在页面内使用

js 复制代码
<script setup>
import { ref, reactive } from 'vue';
import { useI18n } from "vue-i18n";
const { t, locale } = useI18n();
const zlLengedTxtOne = ref(t("name"));
const zlLengedTxtTwo= ref(t("aa.bb"));
console.log('zlLengedTxtOne',zlLengedTxtOne.value) // 中文显示姓名,英文显示name
console.log('zlLengedTxtTwo',zlLengedTxtTwo.value) // 中文显示你好,英文显示hello

</script>

<template>
    <div style="text-align: center;margin-top: 200px;">
        <!-- 中文显示姓名,英文显示name -->
        {{ $t("name") }}
        <br>
        <!-- 中文显示你好,英文显示hello -->
        {{ $t("aa.bb") }}  
    </div>
</template>

<style scoped lang="scss">

</style>

切换语言包

js 复制代码
<script setup>
import { ref, reactive } from 'vue';
import { useI18n } from "vue-i18n";
const { t, locale } = useI18n();
const zlLengedTxtOne = ref(t("name"));
const zlLengedTxtTwo= ref(t("aa.bb"));

// 可以通过locale切换语言包
locale.value = 'zh'; // 切换为中文

console.log('zlLengedTxtOne',zlLengedTxtOne.value) // 中文显示姓名,英文显示name
console.log('zlLengedTxtTwo',zlLengedTxtTwo.value) // 中文显示你好,英文显示hello
</script>

<template>
    <div style="text-align: center;margin-top: 200px;">
        <!-- 中文显示姓名,英文显示name -->
        {{ $t("name") }}
        <br>
        <!-- 中文显示你好,英文显示hello -->
        {{ $t("aa.bb") }}  
    </div>
</template>

<style scoped lang="scss">

</style>
相关推荐
高级程序源43 分钟前
django校园寻物通失物招领平台32261-计算机课程设计、毕业设计
vue.js·python·mysql·小程序·django·flask·课程设计
WeiXin_DZbishe1 小时前
基于springboot宠物领养系统-计算机毕设 附源码【课程设计】94217
vue.js·spring boot·python·django·php·课程设计
架构技术专栏1 小时前
Agent 工具调用:从工具声明到执行反馈
前端·人工智能·后端
别动我齐刘海2 小时前
C++ 工程化学习
java·linux·前端·c++·学习·机器学习·机器人
志尊宝3 小时前
Vue3 零基础每日笔记(071):暗黑模式与主题切换——CSS 变量 + Element Plus 暗黑方案
前端·css·笔记·vue·html·前端开发·软件开发
WeiXin_DZbishe3 小时前
基于springboot城市公交实时运营与调度系统-计算机毕设 附源码【课程设计】66173
java·vue.js·spring boot·后端·python·php·课程设计
刘发财3 小时前
前端如何生成10000页PDF文件?
前端·javascript·开源
WeiXin_DZbishe4 小时前
基于Springboot+AI的kuall音乐广场的设计与实现-计算机毕设 附源码【课程设计】12715
vue.js·人工智能·spring boot·后端·python·php·课程设计
A接拉起0074 小时前
2026 年 JavaScript 开发者需要了解的知识
前端·javascript·后端
_馒头4 小时前
pixiJs游戏开发实践 - 跳棋小游戏
javascript·vue.js