Imported from Camellia895/StarSector-skill (
skills/starsector-mod-localization-spec/SKILL.md). Install upstream withnpx skills add Camellia895/StarSector-skill --skill starsector-mod-localization-spec. Copyright stays with the author.
文本规范:译文动笔时就该守的格式约束
职责:把 <skills>\shared\iron-rules.md 的引擎级铁律操作化成"写作时怎么写"。
区别:iron-rules.md 回答"为什么/引擎做了什么";本 skill 回答"我现在落笔该敲什么"。
读者:人译者、AI 译者(任务1 的人工阶段、任务2 的直译阶段)、子代理。
相关:译文风格与质量见 starsector-mod-localization-content;对话/叙事声线见 starsector-translation-voice。
1. 占位符与转义(逐项对照检查)
| 原文形式 | 译文中怎么写 | 违反后果 |
|---|---|---|
%s / %d / %f |
原样保留,且有对应传参才保留 | 多写 → 渲染报错/显示异常 |
字面百分号 10% |
写 10%% |
UnknownFormatConversionException,悬停即崩(R4) |
%% |
原样保留(渲染为单个 %) |
— |
\n |
原样保留(可换行) | 文本粘连 |
\u0001 |
数量与位置完全不变 | 运行时 StringConcatException(R6) |
{%s}(旧版风格) |
改成 %s |
游戏显示字面 {750} |
%PLAYER_NAME / %LORD_NAME / %c0 |
原样保留 | 变量不替换 |
Kotlin ${var}(源码/补丁) |
后接汉字必须写 "…${var}护航" |
编译错误 unresolved reference(R5) |
$变量(rules script) |
原样保留 | 规则失效 |
2. CSV 单元格怎么写
- 含
",\n\r之一 → 用 ASCII 引号包裹并做""转义;其余不加引号。(写回铁律) - 禁止在单元格里写弯引号
“”‘’(引擎解析前归一化为 ASCII 引号,贴字段边界即拆列崩溃,R1)。 需要中文引号观感 → 用【】/《》。 - rules.csv 的
script列:命令参数内不得出现任何会被归一化为"的字符,也不得出现 ASCII"; 强调用【】(R2)。text/options纯显示列不受此限。 - 文件编码 UTF-8 无 BOM,换行保持原 CRLF。
- 多行单元格(如原版
hull_mods.csv的desc)必须用完整状态机处理,不要逐行split(',')。 - 列数对照当前版 header(如
hull_mods.csv0.98a 为 20 列,含sModDesc);缺列 = 该字段用默认值,不算错。 - 高亮
{词}风格仅用于旧版strings.json;花括号必须配对,内含原文专有名词。
3. JSON 怎么写
- 绝不用
ConvertTo-Json/ 序列化回写——会破坏#注释与缩进,甚至写错内容(R8)。 一律文本替换:replaceOnce(path, 原片段, 译文片段)。 - 字符串值内禁未转义 ASCII
"(截断字符串 → 解析失败,R19):中文引用用弯引号“”或【】; 权威校验用游戏 org.json(JsonProbe.java),先 probe 英文基线再 probe 注入版定分伪 JSON 容忍与注入破坏。 - 修改键的场景极少(
designTypeColors是例外):键译后必须唯一,且与 CSV 中文值精确一致(R10)。 - 产出无 BOM;尾随逗号/
#注释可以保留(游戏接受)。 - 校验用游戏自带
org.json(JsonProbe.java),不要用严格解析器判死刑。
4. 字符集:只写有字形的字
中文核心字库仅约 6742 字形,表外字符渲染为 ?(无报错、无日志,R3)。
- ❌ 禁用:
「」『』〈〉〔〕、全角空格 U+3000、生僻字(艏等)。 - ✅ 安全:
【】、《》、()、—、…、、。,:;?!、·、“”‘’(但见 §2 的使用位置限制)。 - 生僻字 → 换同义常用字(
舰艏→舰首)。 - 落笔后必跑
check_font_glyphs.js。
5. 长度与排版
| 位置 | 约束 |
|---|---|
| 船插/武器/技能名称 | 短,放得进 refit 列表与 tooltip 标题(不超过原文太多) |
short(一行简述) |
一句话,不换行 |
desc |
说清"触发条件 + 效果 + 例外/覆盖关系";可用 \n 分段 |
rules options |
每个选项保持 optionId:显示文本 形式,只译显示文本 |
| 对话/任务文本 | 可脱离原文句式重组(见 translation-voice),但不改剧情逻辑与关键信息 |
6. 绝不译(白名单式清单)
- 标识符类:mod id、插件 id、
script类名、hullmod id 后缀(light/reckless)、配置键、枚举值。 - 引擎常量:
personality=reckless/aggressive/…、TEN_PERCENT_PPT、designTypeColors中的原版键。 - 路径与资源名:
graphics/…、sounds/…、.wpn/.proj/.system的 spec id。 - 逻辑键:LunaSettings 的 Radio 选项值(
Base/150%/Wide,被when(x){ "Base" -> }匹配)。 - URL、
http://…、邮件地址。 - 开发者日志的内部 id 与常量原文(日志正文可译,但保留 id)。
7. 动笔前 30 秒自检
- 术语查过
<skills>\shared\glossary.md与 0.98a 核心(不凭感觉) - 占位符按 §1 对照处理(尤其
%→%%、\u0001数量) - 写的是 CSV/JSON 的哪个位置,按 §2/§3 决定引号与回填方式
- 没有用
「」、没有生僻字 - 长度符合 §5
- 没有碰 §6 的任何一项