Files
cultivation-world-simulator/docs/I18N_MAINTENANCE_GUIDE.md
4thfever 0315dca6e6 Feat/hidden domain (#113)
Summary
新增秘境探索,属于多人活动,每N年触发一次
Closes #105
2026-01-31 20:43:42 +08:00

2.7 KiB
Raw 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. 正确的增补方式

方法 A直接使用 IDE 编辑 (推荐)

最安全、最简单的方法。直接在 Cursor / VSCode 中打开 src/i18n/locales/xx_XX/LC_MESSAGES/messages.po,在文件末尾手动粘贴或输入新的翻译条目。

方法 B使用 Python 脚本追加

如果必须通过脚本自动化,请务必使用 Python 并显式指定 UTF-8 编码。

# correct_append.py
content = """
msgid "new_key"
msgstr "Translation"
"""

with open("path/to/messages.po", "a", encoding="utf-8") as f:
    f.write(content)

方法 CLinux/Bash 环境

在 Git Bash 或 WSL 中使用 cat >> 是安全的,因为它们默认处理 UTF-8 流。

# Git Bash / WSL only
cat temp.po >> messages.po

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