跳到主要内容

本地化​字符串表​模板

一张译者可以直接上手的字符串表:每个键一行,带上下文、长度限制、英文源文本和四种译文,另外每种语言都有术语表和风格指南。以 .zip 下载:表格是一个 CSV 文件(UTF-8,逗号分隔),其余是 Markdown,整套文件都能导入 Nodary,CSV 会变成一张可用作翻译表的表格。

4 个文件,打包为 .zip(Markdown 和 CSV),6 kB

免费,无需账户,无需邮箱。随意使用、修改和分享。

下载前先读每个文件

概览说明各列的含义、键的命名方式、占位符和翻译状态。表格中有 13 条来自 Saltmarrow 的示例字符串,这是本网站处处使用的示例游戏;其中两个单元格是故意写错的,用来展示检查能发现什么。

文档

文件 本地化字符串表模板/本地化字符串表.md

本地化字符串表

使用方法:斜体行是写作提示。用你自己的话替换它们,然后删除。方括号里的值由你填写。表格本身是这一页旁边的 CSV 文件。

文件

  • 字符串:表格本身,每条字符串一行,每种语言一列
  • 术语表:处处译法一致的词,以及永不翻译的名称
  • 风格指南:游戏在每种语言里怎样说话

列

列内容
key字符串的唯一名称,永远不会显示给玩家
context文本出现在哪里、由谁说出:译者无法猜到的信息
max_length文本在屏幕上最多可占的字符数
en源文本
fr, de, es, pl每种语言一列,以语言代码命名

键的命名

按文本所在的位置命名键,从大到小,这样相关的字符串会排在一起。

  • 格式:[界面].[元素].[细节],比如 menu.play 或 hud.tide.warning
  • 全部小写,各部分之间用点分隔,不含空格
  • 不要把一个键挪用给另一段文本:新增一个

占位符和标记

由游戏填入的值写在花括号里,比如 {count};每条译文都保留源文本中的每个占位符。标记标签,比如 item.crystal.desc 中的粗体标签,要留在它所标记的词周围。

翻译状态

  • 缺失草稿
  • 草稿已审校
  • 已审校定稿
  • 定稿已过期
  • 已过期草稿
译文的状态:源文本改动后,译文会变为已过期,需要重新检查文件中是一张 Mermaid 图表:Nodary、GitHub 和 Obsidian 都会把它画出来。
Mermaid
flowchart LR
  n0["缺失"]
  n1["草稿"]
  n2["已审校"]
  n3["定稿"]
  n4["已过期"]
  n0 --> n1
  n1 --> n2
  n2 --> n3
  n3 --> n4
  n4 --> n1

示例(Saltmarrow,一款示例游戏): 示例中有两个单元格是故意写错的。menu.settings 的德语 Einstellungen 有 13 个字符,而按钮只能容纳 10 个,所以长度检查会标出它;档案员的问候语还没有波兰语译文,所以算作缺失。

这个模板可以自由使用、修改和分享。它来自 Nodary,在那里这些文件会以互相链接的文档地图形式导入,CSV 则导入为表格。

下载模板4 个文件,打包为 .zip(Markdown 和 CSV),6 kB

如何使用

  1. 替换示例字符串

    保留各列和键的命名方式,填入你自己的字符串。每条字符串交给译者之前,都要写好上下文和长度限制。

  2. 尽早写术语表

    译者第一次问到某个术语时就把它加进来,并写上每种语言的译法。同一个词有两种译法,会让玩家困惑,客服问题也会翻倍。

  3. 按语言约定风格

    开始翻译前,先决定每种语言如何称呼玩家、遵循哪些排版规则。之后再改,就意味着要重读每一条字符串。

  4. 发出前先冻结源文本

    英文定稿后再把字符串送去翻译。源文本之后若有改动,它的译文都要重新检查。

导入 Nodary,用作翻译表

Nodary 是一个为 AI 而生的工作区,团队的文档在这里互相链接,而不是越堆越多。导入 .zip 后,CSV 会作为一张表格出现在概览下面,术语表和风格指南就在旁边。在表格上,“翻译表”会从表头读取各列的角色(key、context、max_length,以及每种语言一列),然后检查每条译文的长度和占位符,为每条译文标记状态,在源文本改动时把译文标为过期,并导出 Unity、Unreal 和 Godot 可用的文件:CSV、JSON、gettext .po 和 XLIFF。

  1. 打开一个项目的地图,点击“导入”。
  2. 选择“文件夹或 ZIP”标签页,再点击“选择 ZIP 文件”,选中文件后导入。
  3. 打开“字符串”,选择“翻译表”,检查从表头读出的角色,然后点击“用作翻译表”。

免费版每个工作区可容纳十个文档,项目自己的页面也算在内:模板的四个文件绰绰有余。源文本列是英文:如果你的游戏用其他语言写成,在 Nodary 显示角色时把那一列设为源文本即可。

Nodary 如何处理游戏本地化
Nodary 中 Saltmarrow 的翻译表:键、上下文和最大长度,以及英语、法语、德语、日语和巴西葡萄牙语各列,每种语言的进度,还有一条过长的德语字符串和一条丢失了 {seconds} 占位符的字符串的警告。

维护一张译者能用的字符串表

当译者不得不猜一行字是什么意思、有多少空间,或者文本翻译之后又被改动却没人发现时,字符串表就失效了。下面这些习惯能避免这三种情况。

给每条字符串写上下文

谁说的、出现在哪里、回应的是什么。“Open”在门上是动词,在商店招牌上是形容词:只有上下文能分清。

按屏幕定长度

量一量按钮、一行文字或对话气泡能容纳多少字符,写下这个限制,而不是英文的长度。

不要用碎片拼句子

在代码里把“你找到了”和“3 个水晶”拼起来,会破坏大多数语言的语序和语法。每个句子都给一个独立的键,并使用占位符。

保持占位符完整

每条译文都要保留源文本中的每个 {占位符} 和每个标签。丢了一个 {count},玩家就会看到空白,甚至让游戏崩溃。

一个键,一个含义

不要把一个键挪用给另一段文本。新增一个键;等没有地方再用旧键时再删掉它。

发出前先冻结源文本

只翻译定稿的文本。源文本仍然改动时,把它的译文标为过期,以便重新检查。

关于本地化字符串表的问题

什么是本地化字符串表?

字符串表保存游戏显示的所有文字,每条字符串一行:代码使用的键、源文本、给译者的备注、长度限制,以及每种语言一列。游戏按键加载玩家所用语言的文本,因此文字可以修改和翻译,而不用改动代码。

字符串表应该有哪些列?

至少要有键和源文本,再加每种语言一列。上下文列和最大长度列能省掉译者原本要问的大部分问题。这个模板五类列都有,以英语为源语言,另有法语、德语、西班牙语和波兰语。

字符串的键该怎么命名?

按文本所在的位置,从大到小命名,比如 menu.play 或 hud.tide.warning:全部小写,各部分之间用点分隔。这样相关的字符串会排在一起,看到键就知道去游戏里哪里找。

复数怎么处理?

各语言的计数方式不同:英语有两种复数形式,波兰语有三种,中文则没有词形变化。可以把数字放在标签后面,比如“盐:{count}”,或者使用引擎的复数系统,每种形式一段文本。

如何在 Excel 中打开这个 CSV?

Google 表格、LibreOffice Calc、Numbers 和 Nodary 可以直接打开。只有当电脑的列表分隔符是逗号时(中文系统设置通常如此),Excel 才能双击直接打开;如果分隔符是分号,比如法语或德语设置,每一行都会挤在一列里。这时请改用导入:在“数据”选项卡中选择从文本/CSV 导入,选中文件,把文件原始格式设为 UTF-8、分隔符设为逗号,然后加载。

Unity、Unreal 或 Godot 能读取这个 CSV 吗?

模板的 CSV 是为电子表格和 Nodary 的导入而做的。每个引擎读取各自的格式:从同一张表,Nodary 的翻译表可以导出 Godot 和 Unity 用的 CSV、Unreal 和 Godot 用的 gettext .po、大多数引擎可用的 JSON,以及翻译工具用的 XLIFF。

可以添加语言吗?

可以。新增一列,用语言代码命名,比如 zh-Hans 或 pt-BR。Nodary 能识别表头中的语言代码和语言名称,它的翻译表也可以为某种语言新增一列。

让游戏文本留在团队工作的地方。

把模板导入 Nodary,字符串表就会和设计、对话放在同一张地图上,每条译文的状态一目了然。免费版包含两名成员、一个项目和十个文档,无需绑卡。