通过TyStrings实现iOS strings 自动化

Yiyan Tian
Nov 3, 2018 · 3 min read

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

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

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

genstrings

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

使用方法

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

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

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

缺陷

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

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

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

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

这显然相当糟糕.

TyStrings

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

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

安装

TyStrings 所需的运行环境:

- OS X 10.9+

- Python 2.7

通过 pip安装

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

检查是否安装:

使用方法

通过 源文件(.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)

检验 .strings 文件

当前, 只包含检查重复的内容

翻译 .strings 文件

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

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

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

例如: 英译中

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch

Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore

Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store