我已经在Google和StackOverflow上搜索了很久,但仍然没有找到一个简单且自动化的方法来完成以下场景:
- 我有一个应用程序,其中包含1000个字符串,分别本地化为en、fr、de、es、it。
- 我构建了一个新功能,其中包含10个不同的
NSLocalizedString()
键。 - 我只想将这10个新字符串附加到以下文件的末尾:
- en.lproj/Localizable.strings
- fr.lproj/Localizable.strings
- es.lproj/Localizable.strings
- de.lproj/Localizable.strings
- it.lproj/Localizable.strings
genstrings
将检索所有1010个不同的字符串。这很麻烦,因为每次更新时我都需要“大海捞针”地找到这10个字符串。
更新 2014年9月19日 -- XCode 6 - Apple 终于发布了对于你的.strings文件进行XLIFF导出和导入的支持 XCode 6有什么新功能?本地化
Linguan (v1.1.3) 虽然它是一个可爱的工具,但大部分时间它正在变成另一种工具。它合并更改,但某些字符串在合并时无法正确匹配,所以每次执行扫描源代码操作时,它都会创建100个新的重复键,以及我需要的10个字符串,这样会增加更多的工作量。
文件合并 如下所建议,尝试在旧版本和新版本的 genstrings
输出文件之间进行差异比较。 genstrings
输出按字母顺序排序,因此在1000个字符串中分散出现的10个字符串意味着需要审查200个差异。它会继续匹配 / * ... * /
和"..." = "..."
,并说 ...
已更新。它没有更新,只是在文件中的新位置上移。越来越多的情况看起来像我将不得不编写一个自定义工具。
MacHG + 文件合并 另外一边注意到,由于某种奇怪的原因,不喜欢从本地化工作拷贝中的存储库进行差异比较。左右两个窗格都为空。 更新:事实证明,保存为UTF-16和保存为UTF-8的一些更改集中的变化会影响它执行正确的差异比较。
Bash脚本 + 文件合并 我编写了以下脚本,以帮助在每次添加新的 NSLocalizedString
条目后维护我的英文参考文件:
#LOCALISATION UPDATE SCRIPT
#
#This will create a temporary copy of the current 'en' reference file then generate the
#latest reference file using the 'genstrings' tool. Finally forcing FileMerge to launch
#and diff the changes.
#
#Last Updated: 2014-JAN-06
#Author(s): Josh Wilson
clear
#assuming this script is run from $SRCROOT
#Backup Existing 'en' reference
cp "en.lproj/Localizable.strings" "en.lproj/Localizable-src.strings"
#Scan source files for 'NSLocalizableString' macros
genstrings -q -u -o en.lproj Classes/*.{m,mm}
genstrings -q -u -a -o en.lproj Classes/iPad/*.{m,mm}
genstrings -q -u -a -o en.lproj Classes/iPhone/*.{m,mm}
#Force FileMerge to launch and diff the update (NOTE: piping to cat forces GUI to open)
opendiff "en.lproj/Localizable-src.strings" "en.lproj/Localizable.strings" | cat
#Cleanup up temporary file
rm "en.lproj/Localizable-src.strings"
但这只更新了EN文件,我缺少一种方法来更新其他语言文件中的新键。在没有英语单词作为键且genstrings炸弹我的"welcome_message" = "Welcome!"
与"welcome_message" = "welcome_message"
的情况下,这个功能非常好。
POEditorhttp://poeditor.com/。这是一个在线工具,订阅后每1000个字符串收费。似乎工作得很好,但如果有一个非订阅式的工具就更好了。
Traducto Pro似乎做了一个不错的工作,与XCode集成并提取字符串并合并它们。但在完全翻译之前,无法从中获取任何内容,因此你被迫使用他们的翻译服务。
肯定已经实现了这个功能。苹果如何使他们的应用程序本地化?
脚本爱好者,我呼唤你!iOS开发已经进行了一段时间,本地化已经很普遍了,肯定现在有成熟的解决方案了吧?
Python脚本 update_strings.py: Stackoverflow最终推荐了一个相关的问题和这个答案中的python脚本Best practice using NSLocalizedString看起来很有前途...
测试了一下,目前版本(2013年5月31日)如果您有重复的注释条目(期望单行注释),它不会处理多行注释。
可能只需要稍微调整一下正则表达式。
.strings
文件作为可交付物交给我们的翻译人员。感谢您链接其他SO问题并建议其他工具。我们将不得不进行调查。最终,我们使用了POEditor并花了一些钱来使用它。理想情况下,一个非订阅式的工具会是最好的。 - Josh Peak