通过TyStrings实现iOS strings 自动化

iOS 下, 通过 .strings 文件来做 本地化/国际化.

以往, 我们增删一个本地化文本, 需要在源文件和各个 .strings 中手动修改.

其实, 可以从源文件中自动生成各个 .strings 文件. 甚至对于 简体(zh-Hans) 到 繁体(zh-Hant) 的翻译也可以通过自动化的方案解决.

genstrings

genstrings 是 Apple 在 OS X 10.9 添加的 .strings 文件生成工具. 它可以通过源文件(.c, .m, .swift) 生成 strings 文件.

使用方法

例如: 遍历当前目录(以及子目录), 将所有 .m 生成 .strings 文件.

$ find . -name *.m | xargs genstrings -o en.lproj

上面的命令会生成(覆盖) .strings 文件.

可以在添加 -a 选项, 将生成的条目追加到已存在的同名文件末尾:

$ find . -name *.m | xargs genstrings -o en.lproj -a

缺陷

使用中会发现, genstrings 相当鸡肋. 它无法增量更新.

不加 -a, 会覆盖之前已经翻译好的内容.

就算添加 -a, 你也会发现, 它只是简单的将内容加到了已存在的文件末尾.

较为有效的做法是, 总是通过 genstrings 生成到另一个路径下. 然后通过 diff 工具手动检查差异并合并.

这显然相当糟糕.

TyStrings

我用 Python 编写了一个工具: Github - luckytianyiyan/TyStrings

TyStrings 是一套针对 .strings 文件的CLI工具.

安装

TyStrings 所需的运行环境:

- OS X 10.9+

- Python 2.7

通过 pip安装

$ sudo pip install tystrings

> 如果尚未安装 pip, 可以查看 pip 安装文档: pip — installing

检查是否安装:

$ tystrings -h

使用方法

通过 源文件(.c, .m) 生成/更新 .strings

基于 genstrings, 在其基础上添加了增量更新

例如: 遍历当前目录下的所有 .m 文件, 生成 en.lprojzh-Hans.lprog 下的 .strings文件

$ tystrings generate $(find . -name \*.m) -o your/path/en.lproj your/path/zh-Hans.lprog -v

对比两个 .strings 差异(diff)

$ tystrings diff your/path/file1.strings your/path/file2.strings

检验 .strings 文件

当前, 只包含检查重复的内容
$ tystrings diff your/path/file1.strings your/path/file2.strings

翻译 .strings 文件

翻译用的是 百度翻译 的API, 内置了一个官方Demo中的 App IDSecret Key.

所以暂时不需要自己去百度翻译申请这两样东西, 就可以直接使用

这个功能只建议使用在类似 简体 和 繁体 翻译上, 翻译结果的准确性高.

例如: 英译中

$ tystrings translate your/path/en.lproj/Localizable.strings your/path/zh-Hans.lproj/Localizable.strings — src-lang en — dst-lang zh