写 App 的激情与动力,往往在于核心功能的实现,至于那些 UI 细节的微调、多国家的语言文件,岂是尔等大牛需要做的事?
但是,一款出色的产品,往往不只有出色的核心功能,它的产品细节、用户体验也是趋于完善近乎完美的。大牛的你,虽然不想干这些脏活累活,然而,牛在江湖身不由己,你有三个选择:
- 咬咬牙,自己上。
- 招个临时工 or 实习生,让他干。
- 写个脚本,自动完成。
现在要说的 App 本地化,就是一个典型的又粗又脏又累的活:
- 没有任何技术含量。
- 需要大量重复劳动。
- 每个 App 都需要做一遍。
身为一名程序员,看到上述三个烦死人的特征,除了累觉不爱之外,还有没有别的什么想法呢?
利用脚本自动完成啊!脚本天生就是干这些事的。
脚本已经写好了:AppStringsTranslator
原理
- 扫描 App 的
xx.strings
文件,遍历每一行。 - 如果该行格式为
"xx" = "xxx";
,则把等号左右的key
和value
提取出来,保存到keys
和values
两个数组中。 - 如果该行不是 key/value 格式,则把整行加到
keys
,而往values
里加一个空字符串。 - 利用百度翻译的 API,翻译
values
里的每个元素。 - 把
keys
和翻译结果按照同样的格式写入到新的xx_toLang.strings
文件。
第 3 步的目的是,保留原来的语言文件里的注释和空行。
用法
- 修改
AppStringsTranslator.py
,填上你自己的百度AppKey/SecretKey
,见这里。 - 在终端执行脚本,eg:
python AppStringsTranslator.py
。 - 输入语言文件名称,eg:
Localizable.strings
。 - 输入源文件的语言简写,eg:
zh
。 - 输入需要翻译成的语言列表,以空格区分。eg:
en cht jp kor
。 - 等待完成。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
支持的语言
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|
无法脚本化的情况
有时候,我们会在语言文件里添加一些特殊的字符,比如 %@ %d %lld
之类的格式化占位符,这些字符是不需要被翻译的。但是利用脚本,是没有办法智能识别哪些字符需要保留,以及保留到哪里的,这种情况还是需要开发者自己去处理。
参考和说明
- 百度翻译 API
- 百度翻译不是完全免费的,不过每个月有一定的免费调用次数,还是完全可以满足 App 开发这种小数据量的。
- 可以修改脚本,改变翻译后的文件存放方式。
原文作者: lslin
原文链接: http://blog.lessfun.com/blog/2016/12/26/ios-app-strings-translator/
版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0