本地化字符串表模板
一张译者可以直接上手的字符串表:每个键一行,带上下文、长度限制、英文源文本和四种译文,另外每种语言都有术语表和风格指南。以 .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
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 则导入为表格。
文件 本地化字符串表模板/本地化字符串表/字符串.csv
字符串
| key | context | max_length | en | fr | de | es | pl |
|---|---|---|---|---|---|---|---|
| menu.play | 主菜单按钮 | 12 | Play | Jouer | Spielen | Jugar | Graj |
| menu.settings | 主菜单按钮;按钮可容纳 10 个字符 | 10 | Settings | Paramètres | Einstellungen | Ajustes | Ustawienia |
| menu.quit | 主菜单按钮 | 12 | Quit | Quitter | Beenden | Salir | Wyjdź |
| hud.tide.warning | 潮水转向前两分钟显示在 HUD 上;{minutes} 是数字 | 40 | The tide turns in {minutes} min | La marée tourne dans {minutes} min | Gezeitenwechsel in {minutes} Min. | La marea cambia en {minutes} min | Zmiana pływu za {minutes} min |
| hud.salt.count | HUD 计数器;{count} 是数字 | 20 | Salt: {count} | Sel : {count} | Salz: {count} | Sal: {count} | Sól: {count} |
| dialogue.archivist.greet | 溺亡的档案员,初次见面。冷静而正式:用敬称称呼玩家 | 120 | You came down with the tide. Most who do, stay. | Vous êtes descendu avec la marée. La plupart de ceux qui le font restent. | Sie sind mit der Flut herabgestiegen. Die meisten, die das tun, bleiben. | Ha bajado con la marea. La mayoría de quienes lo hacen se quedan. | |
| item.crystal.name | 物品名称,用于背包和商店 | 24 | Memory crystal | Cristal de mémoire | Erinnerungskristall | Cristal de memoria | Kryształ pamięci |
| item.crystal.desc | 物品描述;<b> 标出需要突出的词 | 140 | Holds one <b>memory</b> of the drowned city. Sells well in the village. | Contient un <b>souvenir</b> de la cité engloutie. Se vend bien au village. | Enthält eine <b>Erinnerung</b> an die versunkene Stadt. Verkauft sich gut im Dorf. | Guarda un <b>recuerdo</b> de la ciudad sumergida. Se vende bien en el pueblo. | Zawiera jedno <b>wspomnienie</b> zatopionego miasta. Dobrze się sprzedaje w wiosce. |
| quest.horn.title | 日志中的任务标题 | 32 | Before the horn | Avant la corne | Vor dem Horn | Antes del cuerno | Zanim zabrzmi róg |
| quest.horn.goal | 日志中的任务目标;{count} 是数字 | 60 | Crystals to bring up before the horn: {count} | Cristaux à remonter avant la corne : {count} | Kristalle, die vor dem Horn nach oben müssen: {count} | Cristales que subir antes del cuerno: {count} | Kryształy do wyniesienia, zanim zabrzmi róg: {count} |
| ui.save.done | 存档后的提示,显示两秒 | 40 | Game saved | Partie sauvegardée | Spiel gespeichert | Partida guardada | Gra zapisana |
| ui.tide.low | 潮汐指示器的标签 | 16 | Low tide | Marée basse | Ebbe | Marea baja | Odpływ |
| ui.tide.high | 潮汐指示器的标签 | 16 | High tide | Marée haute | Flut | Marea alta | Przypływ |
文件 本地化字符串表模板/本地化字符串表/01 术语表.md
术语表
译者第一次问到某个术语时就把它加进来。同一个词有两种译法,会让玩家困惑,客服问题也会翻倍。
术语
| 术语 (en) | fr | de | es | pl | 备注 |
|---|---|---|---|---|---|
| tide | marée | Gezeiten | marea | pływ | 驱动所有系统的水位 |
| salt | sel | Salz | sal | sól | 常用资源 |
| memory crystal | cristal de mémoire | Erinnerungskristall | cristal de memoria | kryształ pamięci | 始终用全称,在商店里绝不只写“水晶” |
| horn | corne | Horn | cuerno | róg | 潮水转向前两分钟响起的信号 |
| [术语] | [...] | [...] | [...] | [...] | [...] |
永不翻译
- Saltmarrow,游戏名称
- [保持原样的角色名和地名]
- [平台和品牌名称]
文件 本地化字符串表模板/本地化字符串表/02 风格指南.md
风格指南
语气
用三个词描述游戏的语气,再写下它绝不会是什么样子。
- 语气:[...]
- 绝不:[...]
示例(Saltmarrow,一款示例游戏): 沉静,略带古意,像一位档案馆的看守。句子简短。不用现代网络用语。
逐个语言
| 语言 | 如何称呼玩家 | 排版 | 备注 |
|---|---|---|---|
| 法语 (fr) | [tu 或 vous] | 在 : ; ! ? 之前和 « » 内侧加不换行空格 | [...] |
| 德语 (de) | [du 或 Sie] | „引号“,名词首字母大写 | 常比英文长:先检查 max_length |
| 西班牙语 (es) | [tú 或 usted] | 句首倒置的 ¿ 和 ¡ | [...] |
| 波兰语 (pl) | [ty,或 Pan 和 Pani] | „引号”,三种复数形式 | 玩家名字周围的词会随性别变化 |
| [语言] | [...] | [...] | [...] |
长度
留出余地:从英文译出的文本常常更长,有些语言长出三分之一。按屏幕空间设定 max_length,而不是按英文长度。
复数和数字
各语言的计数方式不同:波兰语有三种复数形式,英语有两种。把数字放在标签后面(盐:{count}),或者使用引擎的复数系统,并按每种语言的习惯格式化数字和日期。
如何使用
替换示例字符串
保留各列和键的命名方式,填入你自己的字符串。每条字符串交给译者之前,都要写好上下文和长度限制。
尽早写术语表
译者第一次问到某个术语时就把它加进来,并写上每种语言的译法。同一个词有两种译法,会让玩家困惑,客服问题也会翻倍。
按语言约定风格
开始翻译前,先决定每种语言如何称呼玩家、遵循哪些排版规则。之后再改,就意味着要重读每一条字符串。
发出前先冻结源文本
英文定稿后再把字符串送去翻译。源文本之后若有改动,它的译文都要重新检查。
导入 Nodary,用作翻译表
Nodary 是一个为 AI 而生的工作区,团队的文档在这里互相链接,而不是越堆越多。导入 .zip 后,CSV 会作为一张表格出现在概览下面,术语表和风格指南就在旁边。在表格上,“翻译表”会从表头读取各列的角色(key、context、max_length,以及每种语言一列),然后检查每条译文的长度和占位符,为每条译文标记状态,在源文本改动时把译文标为过期,并导出 Unity、Unreal 和 Godot 可用的文件:CSV、JSON、gettext .po 和 XLIFF。
- 打开一个项目的地图,点击“导入”。
- 选择“文件夹或 ZIP”标签页,再点击“选择 ZIP 文件”,选中文件后导入。
- 打开“字符串”,选择“翻译表”,检查从表头读出的角色,然后点击“用作翻译表”。
免费版每个工作区可容纳十个文档,项目自己的页面也算在内:模板的四个文件绰绰有余。源文本列是英文:如果你的游戏用其他语言写成,在 Nodary 显示角色时把那一列设为源文本即可。
Nodary 如何处理游戏本地化
维护一张译者能用的字符串表
当译者不得不猜一行字是什么意思、有多少空间,或者文本翻译之后又被改动却没人发现时,字符串表就失效了。下面这些习惯能避免这三种情况。
给每条字符串写上下文
谁说的、出现在哪里、回应的是什么。“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,字符串表就会和设计、对话放在同一张地图上,每条译文的状态一目了然。免费版包含两名成员、一个项目和十个文档,无需绑卡。