Skip to content

初始化配置

TechUI 的多语言系统依赖于全局服务 TuiService 进行初始化。在大多数情况下,您无需手动编写复杂的加载逻辑,系统会自动根据环境适配最合适的语言包。

自动初始化

当应用启动并调用 TechUIInit 时,内部会自动执行 initI18n 方法。该方法的默认行为流程如下:

  1. 侦测语言:调用 getSysLang() 获取当前环境的目标语言(例如 'cn')。此函数会优先读取本地存储中的配置,若无则读取浏览器环境语言。
  2. 检查缓存:通过 tLang.load() 检查内存中是否已存在语言数据。
  3. 动态加载
    • 如果内存中无数据:根据目标语言,动态 import 对应的语言包文件(例如 @techui/locales/cn)。
    • 如果内存中有数据(通常是因为手动引入了语言包):则跳过动态加载,直接使用已存在的数据。
  4. 状态挂载:将最终的语言数据挂载到全局响应式状态 $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)

在初始化时,系统使用此函数决定加载哪种语言。其判断优先级为:

  1. LocalStorage:检查是否有 lockLang 写入的记录。
  2. Navigator:检查浏览器的 navigator.language
  3. Default:默认返回 'cn'

完整切换逻辑

由于 TechUI 不支持多语言热重载,标准的切换流程是:锁定语言 -> 刷新页面

javascript
import { lockLang } from "@techui/utils";

const handleLanguageChange = (langCode) => {
  // 1. 将用户选择写入本地存储
  lockLang(langCode);
  
  // 2. 刷新页面,触发 initI18n 重新读取配置
  setTimeout(() => {
    location.reload();
  }, 300);
};

通过这种方式,当页面刷新后,initI18n 会通过 getSysLang 读到最新的本地配置,从而加载用户选定的语言包。