Files
cultivation-world-simulator/docs/I18N_MAINTENANCE_GUIDE.md
2026-02-06 00:43:08 +08:00

3.3 KiB
Raw Permalink Blame History

国际化资源文件 (messages.po) 维护与增补指南

1. 核心问题警示 (CRITICAL WARNING)

严禁在 Windows PowerShell 环境下直接使用重定向符号 (>>) 追加内容到 PO 文件!

现象

messages.po 文件末尾出现大量 NULL (\x00) 字符或乱码导致文件损坏IDE 打开后显示为空白或包含红色方块。

原因

  • 项目中的 PO 文件使用标准的 UTF-8 编码。
  • Windows PowerShell 的默认输出编码(尤其是在使用 >> 时)通常是 UTF-16LE (Windows Unicode)。
  • 当 UTF-16LE 的内容被追加到 UTF-8 文件末尾时,文件会包含两种不兼容的编码,且 UTF-16 中的 \x00 字节会被视为乱码。

2. 正确的增补方式 (Source Split, Build Merge)

项目现已采用 "Source Split, Build Merge" 策略,将庞大的 messages.po 拆分为多个模块文件。

请勿直接修改 LC_MESSAGES/messages.po!该文件现由构建脚本自动生成。

方法 A修改模块文件 (推荐)

所有源文件位于 static/locales/{lang}/modules/ 目录下。请根据内容分类修改对应的 .po 文件:

  • static/locales/zh-CN/modules/battle.po - 战斗相关
  • static/locales/zh-CN/modules/action.po - 动作相关
  • static/locales/zh-CN/modules/fortune.po - 奇遇相关
  • static/locales/zh-CN/modules/ui.po - 界面相关
  • ... (以及其他分类)

直接使用编辑器打开相应的模块文件进行修改或追加。

方法 B构建与合并

修改完成后,必须运行构建脚本将模块合并并编译为 MO 文件:

# 在项目根目录下运行
python tools/i18n/build_mo.py

该脚本会:

  1. 合并 modules/*.poLC_MESSAGES/messages.po
  2. 编译生成 LC_MESSAGES/messages.mo
  3. 编译其他独立文件 (如 game_configs.po)

方法 C添加新模块

如果需要添加新的分类:

  1. static/locales/{lang}/modules/ 下新建 {category}.po
  2. 确保包含标准 Header (参考其他模块)。
  3. 运行 build_mo.py 即可自动识别并合并。

3. 文件格式规范

在增补 PO 文件时,请遵守以下格式规则,否则可能导致解析错误:

  1. 不要重复 Header

    • PO 文件的开头已经包含了元数据(Project-Id-Version, Content-Type 等)。
    • 不要在追加的内容中再次包含这些 Header 信息。追加内容应仅包含 msgidmsgstr
  2. 保持空行分隔

    • 每个 msgid/msgstr 对之间应保留一个空行,以提高可读性。
  3. UTF-8 无 BOM

    • 始终确保文件保存为 UTF-8 编码且不带 BOM 头。

4. 紧急修复指南

如果不慎损坏了文件(出现了 NULL 字节),请按以下步骤修复:

  1. 立即停止写入
  2. 使用支持二进制查看的编辑器(或 Python读取文件。
  3. 去除所有的 \x00 字节。
  4. 检查并删除文件中段出现的重复 Header。
  5. 重新保存为 UTF-8。

Python 修复脚本示例:

def fix_po_file(path):
    with open(path, 'rb') as f:
        content = f.read()
    
    # 替换掉 null 字节
    content = content.replace(b'\x00', b'')
    
    # 重新写入为 UTF-8
    with open(path, 'w', encoding='utf-8') as f:
        f.write(content.decode('utf-8')) # 假设剩余内容是合法的 utf-8