首页
/ tModLoader中Info Displays本地化键失效问题解析

tModLoader中Info Displays本地化键失效问题解析

2025-06-13 15:46:02作者:卓炯娓

问题背景

在tModLoader 1.4.4稳定版中,开发者在使用Info Displays功能时遇到了本地化键无法正常工作的问题。具体表现为:当尝试为自定义信息显示添加多语言支持时,系统未能正确识别和使用本地化键,导致显示内容异常。

问题现象

开发者创建了自定义信息显示脚本并添加了本地化键后,发现以下异常行为:

  1. 英文本地化文件中,系统使用了内容名称(content name)而非显示名称(display name)
  2. 非英文本地化文件(如法语)中,系统显示了完整的键路径而非预期的本地化文本
  3. 直接通过Language.GetTextValue方法调用也出现相同问题

根本原因分析

经过深入调查,发现问题根源在于本地化文件的结构错误。开发者创建了名为"en-US_Mods.CharacterStats.hjson"的本地化文件,但在文件内部又嵌套了"Mods"和"CharacterStats"层级结构。由于tModLoader的本地化系统会自动将文件名中的"Mods.CharacterStats"部分作为所有键的前缀,导致实际生成的键路径变为"Mods.CharacterStats.Mods.CharacterStats.InfoDisplays.a1_Damage.DisplayName",与预期不符。

解决方案

正确的本地化文件结构应遵循以下原则:

  1. 移除文件内部多余的"Mods"和"CharacterStats"嵌套层级
  2. 直接在文件顶层定义键值对
  3. 保持键路径简洁,避免重复前缀

修正后的en-US_Mods.CharacterStats.hjson文件示例:

Keybinds: {
    StatVisibilityKeybind.DisplayName: Toggle Stats Visibility
    ChangeStatClassKeybind.DisplayName: Change Damage Class
}

InfoDisplays: {
    d1_Aggro.DisplayName: Enemy Aggro
    a5_ArmorPenetration.DisplayName: Armor Penetration
    a3_AttackSpeed.DisplayName: Attack Speed
    // 其他键值对...
}

最佳实践建议

  1. 文件命名规范:本地化文件名应保持"语言代码_Mods.模组名.hjson"格式
  2. 结构简化:文件内部直接定义键值对,无需重复模组名前缀
  3. 键路径设计:保持键路径简洁,如"InfoDisplays.显示名称.DisplayName"
  4. 多语言支持:修正主语言文件后,其他语言文件会自动更新结构
  5. 测试验证:修改后务必重新构建并重载模组以验证效果

总结

tModLoader的本地化系统设计合理,但需要开发者正确理解其前缀机制。通过遵循正确的文件结构和命名规范,可以确保Info Displays等功能的本地化正常工作。此问题的解决不仅适用于当前案例,也为其他tModLoader开发者提供了本地化实现的参考范例。

登录后查看全文
热门项目推荐
相关项目推荐