Skip to content

🧱 基础用法 ​

引擎全方法速览:注册、切换、插值、订阅、命名空间与生命周期。

两种使用方式 ​

方式一:全局单例(推荐大多数应用) ​

ts
import { i18n, t } from '@yyc3/i18n-core/browser';

// 注册语言资源(同步)
i18n.registerTranslation('zh-CN', {
  greeting: '你好,{name}!',
});

// 激活语言(异步,通知所有订阅者)
await i18n.setLocale('zh-CN');

// 翻译
t('greeting', { name: '世界' }); // => "你好,世界!"

方式二:独立实例(多租户 / 隔离场景) ​

ts
import { I18nEngine } from '@yyc3/i18n-core/browser';

const engine = new I18nEngine({
  locale: 'zh-CN',
  fallbackLocale: 'en',
});

引擎配置项 ​

I18nEngineConfig 完整字段(全部可选):

字段类型默认值说明
localeLocale内置默认初始语言
fallbackLocaleLocale—键缺失时的回退语言
cache.maxSizenumber1000LRU 缓存最大条目数
cache.ttlnumber300000缓存过期时间(毫秒)
debugbooleanfalse调试模式(输出日志、挂载 __i18n_debug__)
onError(error, context) => void—错误回调,context 含 key 与 locale
missingKeyHandler(key, locale) => string—缺失键兜底,返回值作为翻译结果

方法总览 ​

方法签名说明
tt(key, params?) => string核心翻译方法,支持插值与 ICU
setLocaleasync setLocale(locale)切换语言并广播事件
getLocalegetLocale() => Locale读取当前语言
registerTranslationregisterTranslation(locale, map)同步注册语言资源(覆盖同名键并清缓存)
getTranslationsgetTranslations(locale) => TranslationMap | undefined读取某语言已注册资源
subscribesubscribe(cb) => unsubscribe订阅语言变更,返回退订函数
batchTranslatebatchTranslate(keys, params?) => Record<string, string>批量翻译
createNamespacecreateNamespace(prefix)创建命名空间翻译器
setDebugsetDebug(enabled)运行时开关调试模式
getStatsgetStats()引擎统计(语言、缓存、插件、订阅数)
destroyasync destroy()销毁实例、清理缓存与调试挂载

插值与转义 ​

占位符使用花括号 {name},参数默认 HTML 转义,天然防 XSS:

ts
i18n.registerTranslation('zh-CN', {
  welcome: '欢迎回来,{name}!购物车中有 {count} 件商品。',
});

t('welcome', { name: '张三', count: '2' });
// => "欢迎回来,张三!购物车中有 2 件商品。"

<script> 之类的值会被转义为无害文本,详见安全防护。

响应式切换 ​

ts
const unsubscribe = i18n.subscribe((locale) => {
  console.log('语言已切换:', locale);
  renderApp();
});

await i18n.setLocale('en');
await i18n.setLocale('zh-CN');

unsubscribe(); // 组件卸载时退订

缺失键策略 ​

三级兜底,按优先级生效:

  1. 插件 onMissingKey(见插件系统)
  2. 引擎配置 missingKeyHandler
  3. 返回键名本身(调试模式下输出警告日志)
ts
const engine = new I18nEngine({
  missingKeyHandler: (key, locale) => `[缺译:${locale}]${key}`,
});

引擎统计 ​

ts
const stats = i18n.getStats();
console.log(stats);
// {
//   locale: 'zh-CN',
//   cache: { size, maxSize, hits, misses, hitRate, ... },
//   plugins: ['console-logger', ...],
//   subscriberCount: 2,
//   loadedLocales: ['zh-CN', 'en'],
// }

生命周期与销毁 ​

SPA 中引擎常驻全局无需销毁;微前端 / 测试场景结束时显式清理:

ts
await engine.destroy(); // 清空缓存、移除调试挂载、断开插件

下一步 ​

基于 MIT 许可发布 · YYC³ 团队维护