初始化配置
TechUI 的多语言系统依赖于全局服务 TuiService 进行初始化。在大多数情况下,您无需手动编写复杂的加载逻辑,系统会自动根据环境适配最合适的语言包。
自动初始化
当应用启动并调用 TechUIInit 时,内部会自动执行 initI18n 方法。该方法的默认行为流程如下:
- 侦测语言:调用
getSysLang()获取当前环境的目标语言(例如'cn')。此函数会优先读取本地存储中的配置,若无则读取浏览器环境语言。 - 检查缓存:通过
tLang.load()检查内存中是否已存在语言数据。 - 动态加载:
- 如果内存中无数据:根据目标语言,动态 import 对应的语言包文件(例如
@techui/locales/cn)。 - 如果内存中有数据(通常是因为手动引入了语言包):则跳过动态加载,直接使用已存在的数据。
- 如果内存中无数据:根据目标语言,动态 import 对应的语言包文件(例如
- 状态挂载:将最终的语言数据挂载到全局响应式状态
$tState.locale中,供组件使用。
代码示例
通常情况下,您只需正常初始化 TechUI 即可,无需额外代码:
javascript
// main.js
import TechUIInit from "techui-prime";
const params = {
// ... 其他配置
};
// 内部会自动调用 initI18n()
TechUIInit(params);手动引入
在某些特定场景下(例如内网环境无法使用动态导入,或者需要将特定语言包打包进主 bundle),您可以在入口文件中显式引入语言包。
机制: 当您显式 import 一个语言包时,该文件内部会自动调用 tLang.register 将数据注册到内存中。initI18n 检测到数据已存在,便不会再发起网络请求。
使用示例:
javascript
// main.js
// 强制引入英文包,不再自动侦测
import "@techui/locales/en";
import TechUIInit from "techui-prime";
// 初始化时将直接使用上方引入的英文数据
TechUIInit({ ... });注意:手动引入会增加主包(Bundle)的体积。除非必要,建议使用默认的异步加载方式。
语言锁定与持久化
TechUI 提供了配套的工具函数来处理用户的主动语言切换和偏好记忆。
锁定语言 (lockLang)
当用户在界面上切换语言时,应调用 lockLang 函数。该函数会将选定的语言代码(如 'en')写入浏览器的 LocalStorage 中。
函数签名:lockLang(lang: 'cn' | 'hk' | 'en')
获取系统语言 (getSysLang)
在初始化时,系统使用此函数决定加载哪种语言。其判断优先级为:
- LocalStorage:检查是否有
lockLang写入的记录。 - Navigator:检查浏览器的
navigator.language。 - Default:默认返回
'cn'。
完整切换逻辑
由于 TechUI 不支持多语言热重载,标准的切换流程是:锁定语言 -> 刷新页面。
javascript
import { lockLang } from "@techui/utils";
const handleLanguageChange = (langCode) => {
// 1. 将用户选择写入本地存储
lockLang(langCode);
// 2. 刷新页面,触发 initI18n 重新读取配置
setTimeout(() => {
location.reload();
}, 300);
};通过这种方式,当页面刷新后,initI18n 会通过 getSysLang 读到最新的本地配置,从而加载用户选定的语言包。