今日速览

  • 本地化不是「翻译 UI」那么简单:Godot 用 tr(key) 查表,文本全部走 key,代码里不出现任何硬编码中文,才能一键切语言。
  • 核心三件套:tr() 取文本 → CSV/PO 翻译表 → Project Settings > Localization > Translations 把 .translation 资源挂进项目。
  • locale ≠ language:en 是语言,pt_BR/zh_CN 是「语言 + 地区」,Steam 商店页支持的语言列表就是按这个粒度填的。
  • 自动跟系统:OS.get_locale_language() 拿玩家系统语言,匹配不到就回落 fallback(默认 en)。
  • 给 AI 留接口:把文案抽成 key 后,DeepSeek 做翻译/校验/补全最容易——这是本次「AI 做游戏」的关键杠杆。

核心学习内容

1. 两种 key 策略,小团队别选错

Godot 官方文档给了两条路:用英文原文当 key,或用唯一 ID 当 key。

  • 英文当 key:前期快,适合「先上英文、后续补语言」的独游,翻译表就一列 en 一列 zh_CN,一眼能看懂。
  • 唯一 ID 当 key(如 MENU_START、HUD_HP):多语言同时推进时才是正解,因为改文案不用动代码。

给 AI 做的项目强烈建议用第二种:key 语义化、翻译独立于文案,DeepSeek 也能靠 key 名推断上下文,翻译质量更稳。

2. CSV 翻译表怎么写

Godot 有个专门的 CSV 导入器,格式很简单:第一行是 keys,en,zh_CN,ja,之后每行一个 key 加各语言文本。存成 strings.csv 放进项目,Godot 会自动为每种语言生成 .translation 资源,再去 Project Settings > Localization > Translations 把它们加进来即可。

几个实操坑:

  • 占位符要对齐:LEVEL_UP=升到第 {level} 级,各语言必须保留 {level},否则运行时格式化报错。
  • 别把换行塞进格子:CSV 里的 \n 用转义写,别真的敲回车。
  • 按模块分批:ui.csv / dialogue.csv / items.csv,几千条文案才管得过来。

3. 语言切换 + 自动识别(Autoload 落地)

做一个 Loc 全局单例:启动时读玩家设置,没有就 OS.get_locale_language() 猜,切语言调 TranslationServer.set_locale(code) 并写回存档。设置菜单里放一个 OptionButton 列出已有语言,改完即时生效——Godot 的 tr() 返回的是「当前 locale 的文本」,切换后重读场景/刷新控件即可。

4. 图片与字体:Remaps 和字体回落

有些素材(带文字的招牌、配音)要按语言换版本,用 Project Settings > Localization > Remaps 给资源挂各语言替代版。字体这块注意:Remaps 不支持动态字体,要用 字体回落(fallback)——主字体缺字时自动落到下一个字体,做中日韩时尤其重要。

5. 和 Steam 的关系

Steam 商店页可以勾选「支持语言」,会直接显示在你的页面上、也是筛选器的一部分。先把游戏内语言做扎实,再去后台勾选,否则会被差评「标注支持却没有」。多语言是拉非英语区愿望单性价比最高的一招。

🎯 DeepSeek 提示词

提示词一:把硬编码文案抽成可本地化 key(改造现有项目)

你是一名 Godot 4 本地化工程师。下面是我项目里一段含硬编码文本的 GDScript / 场景代码。
请帮我改造成可本地化:

任务:
1. 找出所有面向玩家的硬编码字符串(UI 文本、对话、提示、报错弹窗)。
2. 为每条分配一个语义化大写 key,命名规则:模块_含义(如 MENU_START、HUD_HP_LABEL)。
3. 给出改造后的代码,把所有文本替换为 tr("KEY")(带参数的用 tr("KEY").format({"x": ...}))。
4. 输出一张 CSV 片段:第一行 keys,en,zh_CN,之后填好英文与中文原文。

约束:
- key 必须唯一、全大写、下划线分隔,不含空格。
- 保留原有占位符,格式为 {name}。
- 不要改动与文本无关的逻辑。
- 输出格式:先「改动清单表」,再「完整代码块」,最后「CSV 片段」。

代码:
<粘贴你的代码或场景文本>

适用场景:项目写了一堆中文,想加多语言,第一步永远是「抽 key」。让模型产出清单 + CSV,你只需复制粘贴。

提示词二:生成多语言翻译表 + 术语表校验

你是一名游戏本地化译者,精通简体中文、英文、日文。请把下面的 key/value 表翻译成目标语言。

目标语言:en, zh_CN, ja
术语表(必须遵守,保持全文一致):
- HP = 生命值 / HP / HP
- Inventory = 背包 / Inventory / インベントリ
- 角色名「阿岚」保持音译:Aran / 阿岚 / アラン

要求:
1. 保留占位符 {name}、{level} 等原样,位置可随语序调整。
2. 译文语气:<如:轻松休闲、UI 简洁>,标点符合目标语言习惯。
3. 若某条无法确定含义,填 [NEED_CONTEXT] 并在备注列说明,不要瞎猜。
4. 输出为可直接用的 CSV(keys,en,zh_CN,ja),不要用表格以外的解释文字。

源表:
<粘贴 keys,en 两列 CSV>

适用场景:AI 出初翻,人工只做校对;术语表是「风格统一」的命门。

提示词三:写一个语言切换 + 持久化的 Autoload 管理器

你是一名 Godot 4.3+ GDScript 专家。请写一个本地化管理器 Autoload(单例名 Loc)。

需求:
1. 启动时:先读 user://settings.cfg 里的 language;若为 "automatic" 或不存在,
   用 OS.get_locale_language() 匹配已加载的翻译;匹配不到回落到 "en"。
2. public 方法 set_language(code: String):调用 TranslationServer.set_locale(code),
   写回 settings.cfg,并 emit 一个 signal language_changed。
3. 提供 available_languages() 返回 [{code, name}],供设置菜单填充 OptionButton。
4. 切换后要通知当前场景刷新(用 signal,不要直接重载场景)。

约束:
- 用 ConfigFile 存 user://settings.cfg,键名 language。
- 只输出 .gd 脚本 + 一个最小使用示例(如何在设置菜单里接 OptionButton)。
- 代码加中文注释,说明每个函数作用。

适用场景:本地化系统的「控制中枢」,一次生成、长期复用。

学习心得

本地化是「用 DeepSeek 做 Steam 游戏」里少见的双向红利主题:一方面它是上线必修课(不做多语言,等于放弃大半个 Steam 市场);另一方面,它天然适合 AI——文案抽取、批量翻译、术语一致性校验,全是 DeepSeek 的强项。今天最大的收获是:趁现在就把文本抽成 key。等文案写了几千条再回头改,成本会翻十倍;而只要 key 体系立住,往后加语言就是「喂给 AI + 校对」的机械劳动。这和整个系列的主线一致:先给 AI 铺好结构化的「接口」,再让它干活。

本文由自动化学习流水线每日生成,坚持即学即记。