多语言本地化设置

Texturge 通过 ULocalizationSubsystemUGameInstanceSubsystem)提供运行时语言切换能力,借助 FSemanticAnchor 的 LCS 匹配机制确保翻译后动画逐字符对应不失效。

NOTE

Texturge 不使用 UE5 原生 UStringTable 进行文本本地化。自有 ULocalizationSubsystem 与语义锚定机制独立于引擎本地化框架,仅复用引擎的文化切换事件(FInternationalization::OnCultureChanged)。

支持的语言

Texturge.uplugin 的本地化目标支持 15 种语言(NativeCulture = en):

语言代码语言代码
英语en波兰语pl
简体中文zh-Hans德语de
日语ja俄语ru
韩语ko法语fr
西班牙语es巴西葡萄牙语pt-BR
葡萄牙语pt土耳其语tr
阿拉伯语ar拉丁美洲西班牙语es-419
意大利语it

运行时语言切换

// 获取子系统
ULocalizationSubsystem* Localization = GetGameInstance()->GetSubsystem<ULocalizationSubsystem>();

// 切换语言(Culture Code)
Localization->SetLanguage(TEXT("ja"));       // 日语
Localization->SetLanguage(TEXT("zh-Hans"));  // 简体中文
Localization->SetLanguage(TEXT("ar"));       // 阿拉伯语

SetLanguage 设置当前文化并广播 OnLanguageChanged(FString NewCulture)(多播委托)。UAnimatedTextBlock / UAnimatedRichTextBlock 监听该事件,语言切换后自动触发重编译与重播放。

语义锚定机制

FSemanticAnchorAnchorId / ContextualSnippet / SourceOffset)使用 LCS(最长公共子串)算法进行跨翻译文本定位。

问题场景

翻译前后的文本长度与字符序列不同:

  • 英文 "Hello"(5 字符)→ 简体中文 "你好"(2 字符)
  • 每个字符在动画中拥有独立的调度与曲线数据

锚定原理

static TMap<FName, int32> ULocalizationSubsystem::RelocateAnchors(
    const TArray<FSemanticAnchor>& InAnchors,
    const FString& InSourceText,
    const FString& InTargetText);
  1. 精确匹配(忽略大小写)优先
  2. 未精确匹配的锚点通过 FindLongestCommonSubstring 做近似匹配
  3. CalculateConfidence 计算匹配置信度(0.0~1.0),低置信度去重
  4. 偏移量 Clamp 在目标文本范围内

效果保证

  • 原有字符的动画曲线在新语言中继续保持
  • 删除 / 新增的字符不会导致动画数据错位或崩溃
  • 各语言下动画起始 / 结束时间点保持一致

本地化资产配置

插件的 .uplugin 中包含 7 个本地化目标,全部覆盖 15 种语言:

目标加载策略内容
TexturgeRuntimeAlways运行时文本(节点显示名、提示)
TexturgeEditorEditor编辑器 UI 文本
TexturgeEditorTutorialsNever编辑器教程
TexturgePropertyNamesPropertyNames属性名翻译
TexturgeToolTipsToolTips工具提示翻译
TexturgeKeywordsEditor关键字
TexturgeCategoryEditor分类名

预配置的本地化目标无需手动创建,插件加载时自动注册。

Unicode 支持

Texturge 内部使用 Texturge::Unicode 命名空间工具进行码点级分类(IsCJK / IsCJKPunctuation / IsHiragana / IsKatakana / IsHangulSyllables 等),配合 FCharBreakIterator 预计算断点(CJK 附着、Surrogate Pair Emoji、韩文音节),确保 CJK 与 RTL 文本正确逐字动画。

images/language-selector.png — 运行时语言选择器界面示意图:下拉菜单列出 15 种语言(英语/简体中文/日语/韩语/西班牙语/葡萄牙语/阿拉伯语/波兰语/德语/俄语/法语/巴西葡萄牙语/土耳其语/拉丁美洲西班牙语/意大利语),选中后文本动画即时重编译 — Runtime language selector diagram: dropdown listing all 15 cultures (en/zh-Hans/ja/ko/es/pt/ar/pl/de/ru/fr/pt-BR/tr/es-419/it), text animation re-bakes immediately on selection
images/localization-setup.png — 本地化配置示意:ULocalizationSubsystem 生命周期(Initialize 绑定文化变更 → SetLanguage 广播 OnLanguageChanged → 控件监听重编译),下方为 RelocateAnchors 的 LCS 匹配流程(精确匹配 → 最长公共子串 → 置信度去重) — Localization setup diagram: ULocalizationSubsystem lifecycle (Initialize binds culture change → SetLanguage broadcasts OnLanguageChanged → widgets re-bake), below the RelocateAnchors LCS matching flow (exact match → longest common substring → confidence dedup)