当前位置: 首页 > news >正文

Vue3组合式API + TS项目中手写国际化插件

文章目录

    • 1. 在项目中创建一个国际化插件的文件i18n.ts
    • 2. 创建语言模块json
    • 3. 注册插件
    • 4. 语言切换组件
    • 5. 使用插件(ts中使用全局需注意点)

1. 在项目中创建一个国际化插件的文件i18n.ts

<!-- plugins/i18n.ts -->
export const i18nPlugin = {install(app: any, option: any) {app.config.globalProperties.$t = (key: string) => {return key.split(".").reduce((o, k) => {if (o) return o[k];}, option[localStorage.getItem("language") || "zhCN"]);} }
}

2. 创建语言模块json

<!-- assets/i18n/zh-CN.json -->
{"project": {"projectName": "项目名称"}
}
<!-- assets/i18n/en-US.json -->
{"project": {"projectName": "project name"}
}

3. 注册插件

import zhCN from "./assets/i18n/zh-CN.json";
import enUS from "./assets/i18n/en-US.json";
import { i18nPlugin } from "./plugins/i18n";const app = createApp(App);
app.use(i18nPlugin, {zhCN,enUS,
});

4. 语言切换组件

<!-- components/ChangeLanguage.vue -->
<template><a-select:value="language"@change="changeLanguage"><a-select-option value="zhCN">中文</a-select-option><a-select-option value="enUS">English</a-select-option></a-select>
</template><script lang="ts"setup>
import {ref} from "vue";// 将当前选择的语言存到localStorage中
const language = ref(localStorage.getItem("language") || "zhCN");
const changeLanguage = (value: string) => {language.value = value;localStorage.setItem("language", value);window.location.reload();
};
</script>

5. 使用插件(ts中使用全局需注意点)

<template><ChangeLanguage />
</template>
<!-- component.vue -->
<script lang="ts" setup>
import { getCurrentInstance } from "vue";
import SelectLanguage from "@/components/SelectLanguage.vue";// 通过getCurrentInstance()来获取当前组件实例
const instance = getCurrentInstance();
// 从当前组件实例中获取全局的 $t 函数
const $t = instance?.appContext.app.config.globalProperties.$t;// 调用全局的 $t 函数进行文本翻译
const translatedText = $t('project.projectName');
console.log(translatedText);
</script>
http://www.lryc.cn/news/341712.html

相关文章:

  • 深入解析Jackson的ObjectMapper:核心功能与方法指南
  • 计算机是如何执行指令的
  • Jetson Orin NX L4T35.5.0平台相机stop导致系统死机问题调试
  • 【个人博客搭建】(18)使用Quartz.NET 定时备份数据库
  • 【python】MVC架构
  • SVM单类异常值检测
  • 前端动画总结
  • 【源码阅读】 Golang中的database/sql库源码探究
  • 什么是容器微隔离 - 容器微隔离技术有哪些
  • (成品论文22页)24深圳杯数学建模A题1-4问完整代码+参考论文重磅更新!!!!
  • ThreeJs模拟工厂生产过程八
  • [Unity实战]热更新如何预防过度裁剪
  • 任务修复实例(8)
  • torch.flatten(x, 1)”和“x.view(x.size(0), -1)”有什么区别?
  • 达梦主从数据库实例恢复
  • JAVA:jsp+springboot 配置maven兼容版本
  • 【Docker】docker部署lnmp和搭建wordpress网站
  • C#装箱拆箱是怎么回事
  • JavaEE 初阶篇-深入了解 Junit 单元测试框架和 Java 中的反射机制(使用反射做一个简易版框架)
  • 人力资源管理新视野:挖掘员工潜力,共筑卓越未来
  • rust语言tokio库spawn, blocking_spawn等的使用
  • Day_1
  • 2024.05.06作业
  • 什么是抖音橱窗?它和抖音小店有什么区别?普通人更适合做哪个?
  • spring高级篇(九)
  • 用wordpress建跨境电商独立站的5大优势
  • Windows中安装的PostgreSQL 数据库如何重启
  • Remix框架实现 SSR
  • 如何快速开发项目,提高开发效率
  • 面试笔记——多线程使用场景