Xcode 字符串目录翻译进度
拖入你的 Localizable.xcstrings,就能看到每种语言有多少字符串已翻译、需复核、新增、过期或缺失,以及完成百分比。下面还有可按语言、状态和文字筛选的未翻译键列表、标记为“不翻译”的键,以及可发给译者的剩余字符串 CSV。全部在本页运行,不会上传任何内容。
你的字符串目录
把 Localizable.xcstrings(或任何 .xcstrings)文件拖到这里、打开它,或粘贴它的内容。文件只在本页读取,不会上传。
拖入、打开或粘贴一个字符串目录,即可看到翻译进度。
它是怎么工作的
- •本页按 Xcode 写入的格式读取目录的 JSON:sourceLanguage、strings,以及每个键的 localizations,其中有 stringUnit(state 和 value)、按复数或设备的 variations,以及 substitutions。
- •每个键在每种语言里只算一次。如果一个键按复数或设备区分,或带有替换,每个分支都会读取,整个键取最未完成的状态:只要有一个复数分支是 needs_review,整个键就算“需复核”。
- •状态完全按文件里写的统计:translated、needs_review、new。本页不认识的状态按原名单独显示,不做猜测。某种语言没有某个键的条目,就算缺失。
- •源语言里没有条目的键,直接用键本身作为文本,所以算已翻译。
- •extractionState 为 “stale” 的键(Xcode 在代码里已找不到)单独一列计数,不计入百分比。shouldTranslate 为 false 的键单独列出,不计数。
- •CSV 每行是一个语言里一个未翻译的键,附带源文本和开发者注释,方便译者理解上下文。
它做不到的事
- •它不检查某种语言是否具备语法需要的全部复数形式(例如俄语需要 one、few、many、other),只统计文件里已有的分支。
- •Xcode 目录编辑器里显示的百分比可能用了不同的算法。请把本页当作待办清单,而不是 Xcode 数字的复制品。
- •它不翻译,也不会写回目录文件。请在 Xcode 里填写翻译,或用 Product > Export Localizations 导出给译者。
- •它只读取 .xcstrings 文件,不读旧的 .strings、.stringsdict 或导出的 .xliff 文件。
- •它不检查各语言之间 %@、%lld 等格式符是否一致。
常见问题
- 字符串目录里的“需复核”(needs review)是什么意思?
- 翻译已经有了,但需要有人再看一遍。翻译完成后键的源文本又被修改时,Xcode 会设置这个状态;你也可以自己把字符串标记为需复核。文件里保存为 state “needs_review”。
- 什么是过期(stale)的字符串?
- 构建时同步目录,Xcode 在代码里已经找不到的键。它会被标记为 extractionState “stale”,翻译仍然保留,以防代码再用到。我们用 Xcode 的 xcstringstool sync 测试时,有翻译的键被标记为 stale,没有任何翻译的键直接被删除。不再需要的过期键可以删掉。
- 为什么一个复数字符串只算一个键?
- 因为它在 App 里就是一条字符串。它的复数分支(one、other 等)或设备分支(iPhone、Mac 等)会逐一检查,只有全部分支都翻译了,这个键才算已翻译。只要有一个分支是新增或需复核,整个键就显示那个状态。
- “不翻译”(Don't translate)有什么作用?
- 在 Xcode 里把字符串标记为“不翻译”,会写入 shouldTranslate: false,App 在所有语言里都显示源文本。本页把这些键单独列出并不计入统计,品牌名和符号就不会拉低你的百分比。
- 我的目录文件会被上传吗?
- 不会。文件由本页的 JavaScript 读取,从不发送到服务器。页面加载后断开网络,它照样能用。
- 怎么把缺失的字符串交给译者?
- 下载某种语言或全部语言的 CSV。每行有键、状态、源文本和你的注释。如果想直接导回 Xcode,可以用 Product > Export Localizations 生成 .xcloc 包,译者填好后再导入。