Skip to content

翻译与本地化 ​

本页属于 GenPy Ren'Py 学习路线。教程内容面向 Ren'Py 8.x,并在页面末尾连接到 GenPy 的对应工作流。

学习目标 ​

  • 了解“翻译与本地化”在 Ren'Py 项目中的用途。
  • 能在一个最小项目里验证本章相关语法或工作流。
  • 知道发布前需要检查的常见风险,并能在 GenPy 中继续维护。

核心语法 ​

  • translate
  • Generate Translations
  • strings
  • language
  • fonts

可运行示例 ​

text
translate schinese start_8e3jf2a1:
    # e "Hello, world!"
    e "你好,世界!"

教程正文 ​

Ren'Py 内置完整的本地化系统:能自动提取对话与界面文字,生成翻译模板,按语言切换。 (注:本系列文档本身是“给开发者看的中文教程”;本章讲的是“如何把你的游戏翻译成多语言”。)

1. 工作流总览 ​

  1. 用英文/原文写好游戏。
  2. 启动器 → Generate Translations,选目标语言(如 schinese),生成 game/tl/<语言>/。
  3. 翻译生成的 .rpy 文件里的字符串。
  4. 运行时用 config.language 或菜单切换语言。

2. 生成的目录结构 ​

game/tl/
├── None/              # 原文(默认语言)
├── schinese/          # 简体中文
│   ├── script.rpy     # 对话翻译(translate 块)
│   ├── common.rpy     # 引擎通用 UI 文本
│   └── ...
└── japanese/

3. 对话翻译(translate 块) ​

生成的对话翻译形如:

text
translate schinese start_8e3jf2a1:
    # e "Hello, world!"
    e "你好,世界!"
  • start_8e3jf2a1 是引擎按文件/行生成的唯一 id,不要改。
  • 注释行是原文,下面一行填译文。

4. 界面/字符串翻译 ​

界面里硬编码的字符串用 translate strings 块或 _() 标记:

text
translate schinese strings:
    old "New Game"
    new "新游戏"

    old "Quit"
    new "退出"

代码里要被翻译的字符串包一层 _()(运行期按当前语言查表):

text
textbutton _("Settings") action ShowMenu("preferences")
$ msg = _("You found a key!")

_("...") 标记“可翻译字符串”,是本地化的关键习惯:所有给玩家看的硬编码英文都该包 _()。

5. 切换语言 ​

text
# 设为简体中文(None 表示原文)
$ renpy.change_language("schinese")

# 在设置界面里给语言按钮
textbutton "简体中文" action Language("schinese")
textbutton "English" action Language(None)

config.language 设默认语言。8.5 起可用 config.enable_language_autodetect + config.locale_to_language_map 自动按系统区域选语言。

6. 不同语言用不同字体 ​

中文/日文需要 CJK 字体,可在切语言时换字体:

text
translate schinese python:
    gui.text_font = "fonts/SourceHanSansSC-Regular.otf"
    gui.name_text_font = "fonts/SourceHanSansSC-Bold.otf"

或用 config.font_replacement_map 做字体替换。

7. 翻译图片 / 语音 ​

  • 含文字的图片可放到 tl/<语言>/ 同名路径覆盖(图片本地化)。
  • 语音可按语言放不同目录,配合 config.auto_voice。

8. RTL 语言(阿拉伯语/希伯来语) ​

8.5:默认启用 RTL 支持,不再需要手动设 config.rtl。文字会自动从右到左排版。

9. 提取与维护 ​

  • 改了原文后重新 Generate Translations,引擎会追加新条目、保留已译条目。
  • 用 “Extract dialogue” 可把对话导出为表格交给译者,再导回。
  • 发布前对每种语言跑一次 Lint 检查缺失翻译。

常见坑 ​

  • 翻译 id(如 start_8e3jf2a1)是机器生成的锚点,绝不要手改。
  • 硬编码界面文字忘了包 _() → 永远翻译不到。
  • 中文翻译没换字体 → 显示成方块/空白。
  • 改原文顺序/内容会生成新 id,旧译文可能变“孤儿”,重新生成后核对。

官方参考 ​

在 GenPy 里怎么做 ​

  • 在 GenPy 的代码模式中维护相关 .rpy 文件,先保持语法清晰,再逐步加入本章功能。
  • 用故事图谱、变量、校验或演出编辑器把“能运行”提升到“可维护”。
  • 导出前结合 Ren'Py Lint 和 GenPy 校验结果,确认脚本、素材和发布路径一致。

推荐继续阅读:

Built for GenPy creators.