Vue应用多语言支持工程化最佳实践

前言

VoerkaI18n是一款非常优秀的全新的开源国际化多语言解决方案,主要特性包括:

  • 全面工程化解决方案,提供初始化、提取文本、自动翻译、编译等工具链支持。
  • 符合直觉,不需要手动定义文本Key映射。
  • 强大的插值变量格式化器机制,可以扩展出强大的多语言特性。
  • 支持babel插件自动导入t翻译函数。
  • 支持nodejs、浏览器(vue/react/solid)等、React Native等任意JS场景
  • 采用工具链与运行时分开设计,发布时只需要集成很小的运行时。
  • 高度可扩展的复数、货币、数字等常用的多语言处理机制。
  • 翻译过程内,提取文本可以自动进行同步,并保留已翻译的内容。
  • 可以动态在线添加支持的语言
  • 支持发布后的在线打语言包补丁,修复翻译错误
  • 支持调用在线自动翻译对提取文本进行翻译。
  • 核心运行时@voerkai18n/runtime超过90%的测试覆盖率
  • 支持·TypeScript·开发

本节主要介绍如何在Vue 3应用中使用VoerkaI18n

创建Vue 3应用一般采用ViteVue Cli来创建工程。在Vue3应用中引入voerkai18n来添加国际化应用需要由两个插件来简化应用。

  • @voerkai18n/vue

    Vue插件,在初始化Vue应用时引入,提供访问当前语言切换语言自动更新等功能。

  • @voerkai18n/vite

    Vite插件,在vite.config.js中配置,用来实现自动文本映射t函数的自动导入等功能。

@voerkai18n/vue@voerkai18n/vite两件插件相互配合,安装配置好这两个插件后,就可以在Vue文件使用多语言t函数。

第一步:基本流程

Vue应用启用VoerkaI18n国际化功能的完整工程化流程如下:

  • 调用voerkai18n init初始化多语言工程
  • 调用voerkai18n extract提取要翻译的文本
  • 调用voerkai18n translate进行自动翻译或人工翻译
  • 调用voerkai18n compile编译语言包
  • Vue应用中引入@voerkai18n/vue@voerkai18n/vite插件
  • 在源码中使用t函数进行翻译

完整的工程化流程请参见工程化,以下简要介绍如何在Vue应用中使用VoerkaI18n

第二步:启用@voerkai18n/vite插件

@voerkai18n/vite插件作用是:

  • 可以根据idMap.ts映射文件将源码中的t("xxxxx")转换为t("<数字>")的形式,从而实现消除翻译内容的冗余内容。
  • 实现自动导入t函数的功能,省却手动导入的麻烦。

@voerkai18n/vite插件的安装非常简单,只需要在vite.config.(ts|js)中添加如下内容:


import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import Inspect from 'vite-plugin-inspect'
import Voerkai18nPlugin from "@voerkai18n/vite"export default defineConfig({plugins: [    Inspect(),                // 可选    Voerkai18nPlugin(),       // 新增加vue()],
})
  • @voerkai18n/vite插件仅在开发和构建阶段作用。事实上,如果不在乎文本内容的冗余,不安装此插件也是可以工作正常的。
  • vite-plugin-inspect仅用于调试,可以在http://localhost:3000/__inspect/查看当前工程中的@voerkai18n/vite是否正确地进行自动导入和idMap.ts映射,供开发阶段进行调试使用。
  • @voerkai18n/vite插件的完整使用说明。

第三步:配置@voerkai18n/vue插件

@voerkai18n/vue插件用来自动注入t函数、切换语言等功能。

安装方法如下:

import { createApp } from 'vue'
import './style.css'
import App from './App.vue'
// 导入插件
import i18nPlugin from '@voerkai18n/vue'
// 导入当前作用域
import { i18nScope } from './languages'// 等待i18nScope初始化完成
i18nScope.ready(()=>{const app = createApp(App)// 应用插件app.use<VoerkaI18nPluginOptions>(i18nPlugin as any,{i18nScope})app.mount('#app')
})

@voerkai18n/vue插件本质上是为每一个Vue组件自动混入t函数

第四步:使用t翻译函数

Vue应用使用多语言本质是调用import { t } from 'langauges导入的t函数来进行翻译。


<script setup>
// 手动导入t函数
// 如果启用了@voerkai18n/vite插件,则可以省略此行实现自动导入
import { t } from "./languages"
console.log(t("Welcome to VoerkaI18n"))</script>// 直接使用t函数,不需要导入
<script>
export default {data(){return {username:"",password:"",title:t("认证")}},methods:{login(){alert(t("登录"))}}
}
</script>
// 直接使用
<template><div><h1>{{ t("请输入用户名称") }}</h1><div><span>{{t("用户名:")}}</span><input type="text" :placeholder="t('邮件/手机号码/帐号')"/><span>{{t("密码:")}}</span><input type="password" :placeholder="t('至少6位的密码')"/>            </div>            </div><button @click="login">{{t("登录")}}</button></div>
</template>

重点:

  • <script setup>中手动导入import { t } from "./languages"
  • <script><template>中可以直接使用t函数进行翻译。
  • @voerkai18n/vue插件本质上是为每一个Vue组件自动混入t函数,并在在语言切换时会自动重新渲染

第五步:切换语言

引入@voerkai18n/vue插件来实现切换语言和自动重新渲染的功能。


<script setup lang="ts">
import { injectVoerkaI18n } from "@voerkai18n/vue"// 提供一个i18n对象
const i18n = injectVoerkaI18n()
</script><script>
export default {//......
}
</script>  
<template><img alt="Vue logo" src="./assets/logo.png" /><h1>{{ t("中华人民共和国")}} </h1><h2>{{ t("迎接中华民族的伟大复兴")}} </h2><h5>默认语言:{{ i18n.defaultLanguage }}</h5><h5>当前语言:{{ i18n.activeLanguage }}</h5><!-- 遍历支持的语言  --><button v-for="lng of i18n.languages" @click="i18n.activeLanguage = lng.name"  >{{ lng.title }}</button>
</template>

小结

  • @voerkai18n/vue插件为Vue单文件组件提供自动注入t函数,可以在<script><template>中直接使用,在<script setup>中需要手动从language中导入t函数。
  • Vue应用的中普通js/ts文件需要手动从language中导入t函数。
  • 使用injectVoerkaI18n()来实现遍历支持的语言和切换语言的功能。
  • 当切换语言时会自动重新渲染组件。
  • @voerkai18n/vue插件只能用在Vue 3
  • 完整的示例请见这里

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/608573.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么要有虚拟线程(Java项目Loom)?

JEP No 425 是我期待已久的东西。这是 JDK 19 的并发 API 中添加的一个新概念。它处于预览阶段&#xff0c;很快它将在未来的几个版本中成为 JDK 中的永久功能。 虚拟线程非常轻量级&#xff0c;可以减少编写、维护和观察高吞吐量应用程序的工作量。 在这一部分中&#xff0c…

Spring——Spring整合MyBatis

Spring整合MyBatis 1.创建工程 1.1.pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"…

HarmonyOS 编写副标题 解决 ubTitle 可能淘汰问题

目前 harmonyos 中 title属性目前用的还正常 但是ubTitle副标题 会提示我们 可能要淘汰了 虽然说 我们目前 强行用 还是可以生效 但可能 哪天版本更新移除了这个属性 代码就报错了 我们可以通过Builder 来写这个副标题 和 标题 Entry Component struct Index {build() {Row(…

海外社媒运营为什么需要选择优质IP代理?

跨境电商卖家尤其需要关注海外社媒运营&#xff0c;想要更好地运营Instagram、Facebook、TikTok 或 Twitter等&#xff0c;挖掘社媒潜力需要采取战略方法&#xff0c;而社交媒体IP代理在这一活动中发挥着至关重要的作用&#xff0c;下面为你详细介绍。 一、社交媒体代理IP及其运…

【SkyWant.[2304]】路由器操作系统,移动【Netkeeper】使用教程校园网

目录 步骤一&#xff1a;正确连接网线&#xff0c;插电开机正确连接网线&#xff1a; 认识系统灯&#xff1a; 插电开机&#xff1a; 步骤二&#xff1a;开机之后&#xff0c;系统的基本设置 1.进入设置界面&#xff1a; 2.设置辅助热点wifi&#xff1a; 3.设置日常…

ROS2 Humble学习笔记

本文发表与个人的github pages。部分内容未同步到这里。 想查看完整内容&#xff0c;请移步到ROS2 Humble学习笔记。 一、前言 2013年的时候已经接触ROS了&#xff0c;当时断断续续学习了一些ROS的基础知识。16年搬到深圳之后&#xff0c;也有幸参加过星火的一次关于ROS的一些…

变电站综合自动化监控系统在某物流园35kV变电站中应用

摘 要&#xff1a;Acrel-1000变电站综合自动化系统&#xff0c;是我司根据电力系统自动化及无人值守的要求&#xff0c;总结国内外的研究和生产的先进经验&#xff0c;专门研制出的新一代电力监控系统。本系统具有保护、遥测、遥信、遥脉、遥调、遥控功能&#xff0c;可实现无人…

如何通过绘制【学习曲线】来判断模型是否【过拟合】

学习曲线是一种图形化工具&#xff0c;用于展示模型在训练集和验证集&#xff08;或测试集&#xff09;上的性能随着训练样本数量的增加而如何变化。它可以帮助我们理解模型是否受益于更多的训练数据&#xff0c;以及模型是否可能存在过拟合或欠拟合问题。学习曲线的x轴通常是训…

数据结构之B树和B+树

数据结构可视化演示链接&#xff0c;也就是视频中的网址 文章目录 一、B-Tree二、BTree(B-Tree变种) 一、B-Tree 样例图 叶节点具有相同的深度&#xff0c;叶节点的指针为空所有索引元素不重复节点中的数据索引从左到右递增排列 二、BTree(B-Tree变种) 样例图 非叶子节…

ThreadLocal内存泄漏与解决

目录 什么是Threadlocal&#xff1f; Threadlocal的基本使用 ThreadLocal的内存泄漏举例 场景1 场景2 场景3 场景4 内存泄漏原因分析 总结 什么是Threadlocal&#xff1f; ThreadLocal 是 Java 中的一个类&#xff0c;它提供了线程本地变量的支持。线程本地变量是指被…

Qt之单步调试

Qt Creator 单步调试功能介绍 Qt Creator 是 Qt 官方提供的一款集成开发环境&#xff08;IDE&#xff09;&#xff0c;它支持 C 开发&#xff0c;包括 Qt 应用程序的开发。以下是在 Qt Creator 中使用单步调试的基本步骤&#xff1a; 步骤 1&#xff1a;打开项目 首先&#…

Win10子系统Ubuntu实战(一)

在 Windows 10 中安装 Ubuntu 子系统&#xff08;Windows Subsystem for Linux&#xff0c;简称 WSL&#xff09;有几个主要的用途和好处&#xff1a;Linux 环境的支持、跨平台开发、命令行工具、测试和验证、教育用途。总体而言&#xff0c;WSL 提供了一种将 Windows 和 Linux…

Python库中关于时间的常见操作

目录 导入所需的库 获取当前时间 格式化日期和时间 解析日期和时间字符串 时间戳操作 获取当前时间戳&#xff1a; 将时间戳转换为日期和时间&#xff1a; 时间差操作 时间日期的时区处理 时间日期的随机生成 注意事项 总结 在Python中&#xff0c;时间处理是一个重…

Low Poly Cartoon House Interiors

400个独特的低多边形预制件的集合,可以轻松创建高质量的室内场景。所有模型都已准备好放入场景中,并使用一个纹理创建,以提高性能!包含演示场景! 模型分类: - 墙壁(79件) - 地板(28块) - 浴室(33个) - 厨房(36件) - 厨房道具(68件) - 房间道具(85件) - 灯具(…

Oracle19c文档 tnsnames.ora (一)

官网地址&#xff1a;Local Naming Parameters in the tnsnames.ora File 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&#xff0c;笔芯笔芯. 6 tnsnames.ora 文件中的本地命名参数 本章提供了tnsnames.ora文件配置参数的完整列表。…

《亚太教育》是什么级别的期刊?是正规期刊吗?能评职称吗?

《亚太教育》主要发表教育理论研究、教育教学实践、学校管理、学科教育、科研管理等学术论文以及其他与教育教学相关的学术论文和研究成果,现征集教育管理以及各学科优秀论文。欢迎.各位教师、教育工作者及高校学生踊跃投稿。 收录情况&#xff1a;知网万方维普收录 投稿方式&a…

可视化试题(一)

1. 从可视化系统设计的角度出发&#xff0c;通常需要根据系统将要完成的任务的类型选择交互技术。按照任务类型分类可以将数据可视化中的交互技术分为选择、&#xff08; 重新配置 &#xff09;、重新编码、导航、关联、&#xff08; 过滤 &#xff09;、概览和细节等八…

vscode使用npm安装element-UI并添加router路由

npm安装vue&#xff0c;添加淘宝镜像-CSDN博客 elementUI安装与配置 安装可以看我上一篇文章 vscode控制台输入指令 npm i element-ui -S 安装完成后在目录结构打开下图文件 可以看到多了一行elementui就代表安装成功了 下面是项目常用的结构 安装完成后需要启用elementU…

Java项目:114SSM图书管理系统

博主主页&#xff1a;Java旅途 简介&#xff1a;分享计算机知识、学习路线、系统源码及教程 文末获取源码 一、项目介绍 图书管理系统基于SpringSpringMVCMybatis开发&#xff0c;系统主要实现了图书馆借书还书功能&#xff0c;系统分为管理员和读者两种角色。 管理员功能如下…

20240105移远的4G模块EC20在Ubuntu 20.04.6 LTS下使用联通5G卡上网的步骤

20240105移远的4G模块EC20在Ubuntu 20.04.6 LTS下使用联通5G卡上网的步骤 2024/1/5 10:11 缘起&#xff1a;需要在Firefly的AIO-3399J开发板上调试移远的4G模块EC20&#xff08;Android10/11/12&#xff09;&#xff0c;需要现在先测试EC20的好坏&#xff01; 陶老板告诉我找一…