我搜索过Google和StackOverflow,但仍然没有明确的答案来解释一种简单和自动化的方法,但下面是一个场景:
NSLocalizedString()键。
genstrings将检索所有1010个不同的字符串。这是一个痛苦,因为我将需要“大海捞针”找到这10字符串,每次我做更新。
更新19-SEP-2014 - XCode 6 - Apple终于发布了对XLIFF导出和导入.strings文件XCode 6有什么新鲜事?地方化的支持
岭uan (v1.1.3)虽然大多数时候都是一个可爱的工具,但在另一个意义上它开始成为一个工具。它合并更改,但一些字符串在合并时不匹配,因此每次进行扫描源时,它都会创建100个新的重复键以及我所追求的10个字符串,因此它正在进行更多的工作。
按照下面的建议,FileMerge尝试对旧版本和新版本的genstrings输出文件进行区分。genstrings输出按字母顺序排列字符串,因此10个字符串分散在1000个字符串中,这意味着有200个差异需要检查。它一直与/*...*/和"..." = "..."相匹配,并表示...已经更新。它还没有更新,只是移到了文件中的一个新位置。越来越多的看起来,我要写一个定制的工具。
MacHG + FileMerge附带说明,由于一些奇怪的原因,它不喜欢使用Localizable.strings的工作副本从存储库中执行分布式操作。左窗格和右窗格都是空的。更新:一些变更集的变化被保存为UTF-16,而另一些作为UTF-8正在与它做一个适当的区别。
Bash Script + 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文件,而且我也缺少一种方法来用新的键更新其他语言文件。这是一个很好的例子,在一些情况下,我没有一个英语单词作为关键和基因字符串轰炸我的"welcome_message" = "Welcome!"与"welcome_message" = "welcome_message"
POEditor http://poeditor.com/.这是一个基于1000个字符串的在线工具和订阅。似乎工作良好,但如果有一个非订阅基础的工具将是好的。
Traducto Pro似乎在集成XCode、提取字符串和合并事物方面做得很好。但是,它是不可能从它得到任何东西,直到它被完全翻译,所以你被迫使用他们的翻译服务。
当然,这个功能以前已经实现过。苹果如何保持他们的应用程序本地化?
剧本迷们,我来找你们!iOS的开发已经进行了一段时间了,本地化是很常见的,到现在肯定有一个成熟的解决方案吗?
Python strings.py:Stackoverflow最后推荐了一个相关的问题,这个答案中的python脚本使用NSLocalizedString的最佳实践看起来很有前途……
对它进行了测试,并且在其当前形式(2013年5月31日至5月31日)中,如果您有重复的注释条目(期望单行注释),它不会处理多行注释。
可能只需要稍微调整一下正则表达式。
发布于 2016-05-06 16:56:33
查看BartyCrouch,它完美地解决了您的问题。另外,它是开放源码,主动维护,可以在项目中轻松安装和集成。
通过自制软件安装 BartyCrouch
brew install bartycrouch或者,通过薄荷安装它
mint install Flinesoft/BartyCrouch增量地更新您的Localizable.strings文件:
$ bartycrouch update这正是你想要的。
为了使保持,您的故事板/XIBs文件随时间而更新,强烈建议添加构建脚本(关于如何添加构建脚本这里的说明):
if which bartycrouch > /dev/null; then
bartycrouch update -x
bartycrouch lint -x
else
echo "warning: BartyCrouch not installed, download it from https://github.com/Flinesoft/BartyCrouch"
fi除了增量地更新故事板/XIBs文件之外,这还将确保您的Localizable.strings 文件使用使用NSLocalizedString的代码中新添加的键保持更新,并显示重复键或空值的警告。
确保签出BartyCrouch on GitHub以获得更多信息。
发布于 2013-05-29 09:21:37
如果您有上一个版本的genstring,那么只需在新版本和旧版本之间使用"diff“就可以完成这些操作。
编辑:最好使用vimdiff来处理utf-16文件。
发布于 2014-06-06 04:31:07
您可以查看我为OneSky构建的这个OneSky,它旨在改进iOS/Mac开发人员的本地化工作流程。
插件的字符串生成功能将genstrings和ibtool --export-strings-file运行到选定的源文件/IB文件中,新文件将自动添加到项目和目标中,新字符串将合并到现有的带有注释的文件中。
它只会为基本语言生成/更新字符串,但是您可以使用插件的其他特性来使用OneSky平台自动翻译、导出和导入,这对于众源项目是免费的。
https://stackoverflow.com/questions/16806682
复制相似问题