我已经搜索了Google和StackOverflow,但仍然没有明确的答案来简单自动化地执行此操作,但情况如下:
- 我有一个包含 1000 个字符串的应用程序,这些字符串本地化为 en、fr、de、es 等。
- 我构建了一个新功能,可以制作 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 个字符串。
更新 19-SEP-2014 - XCode 6 - Apple 终于发布了对 .strings 文件的 XLIFF 导出和导入的支持 XCode 6中有什么新功能?本土化
Linguan (v1.1.3)虽然大多数时候它是一个可爱的工具,但它开始成为另一种意义上的工具。它合并了更改,但某些字符串在合并时没有正确匹配,因此每次它执行 Scan Sources 时,它都会创建 100 个新的重复键以及我所追求的 10 个字符串,因此它正在做更多的工作。
FileMergegenstrings
如下所示,尝试在输出文件的新旧版本之间进行比较。输出的genstrings
字符串按字母顺序排序,因此 10 个字符串分散在 1000 个中,这意味着有 200 个差异需要查看。它一直匹配 the/*...*/
和 the"..." = "..."
并说 the...
已更新。它尚未更新,只是转移到文件中的新位置。越来越像我将不得不编写一个自定义工具。
MacHG + FileMerge在旁注中,出于某种奇怪的原因,不喜欢使用 Localizable.strings 的工作副本从存储库中进行差异。左右窗格都显示为空。 更新:结果发现一些变更集的变化被保存为 UTF-16,而一些 UTF-8 正在搞砸它能够进行适当的差异。
Bash 脚本 + FileMerge每次添加新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"
POEditor http://poeditor.com/。这是一个基于 1000 个字符串的在线工具和订阅。似乎工作得很好,但如果有一个非订阅的工具会很好。
Traducto Pro似乎在与 XCode 集成并提取字符串并将事物合并在一起方面做得很好。但在完全翻译之前,不可能从中取回任何东西,因此您被迫使用他们的翻译服务。
当然,这个功能之前已经实现过。Apple 如何将其应用程序本地化?
脚本迷,我召唤你!iOS 开发已经进行了一段时间,本地化已经很普遍了,现在肯定有成熟的解决方案吗?
Python Script update_strings.py:Stackoverflow最终推荐了一个相关问题,并且这个答案中的 python 脚本使用 NSLocalizedString 的最佳实践看起来很有希望......
对其进行了测试,如果您有重复的评论条目(预计单行评论),它在其当前形式(2013 年 5 月 31 日)中不处理多行评论。
可能只需要稍微调整一下正则表达式。