iOS本地化 - 仅使用新字符串更新Localizable.strings

Jos*_*eak 31 iphone translation localization ipad ios

我搜索过谷歌StackOverflow,并且仍然没有明确的答案,这是一个简单而自动的方法,但这里是场景:

  1. 我有一个应用程序,1000个字符串本地化为en,fr,de,es,它.
  2. 我构建了一个新功能,可以生成10个非常新的NSLocalizedString()键.
  3. 我只想将这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终于发布了对XLIFF导出和导入.strings文件的支持 在XCode 6中有什么新东西?本土化

灵源(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"
Run Code Online (Sandbox Code Playgroud)

但这只会更新EN文件,而我缺乏使用新密钥更新其他语言文件的方法.这一次已经好了,我没有一个英文单词为重点和genstrings弹我的情况下, "welcome_message" = "Welcome!""welcome_message" = "welcome_message"

POEditor http://poeditor.com/.这是一个基于1000个字符串的在线工具和订阅.似乎运行良好,但如果有一个非订阅的工具会很好.

Traducto Pro似乎可以很好地与XCode集成并提取字符串并将事物合并在一起.但是在完全翻译之前不可能从中获取任何东西,因此你被迫使用他们的翻译服务.

当然这个功能以前已经实现过了.Apple如何保持其本地化的应用程序?

剧本迷们,我拜访你吧!iOS开发已经持续了一段时间,本地化很常见,到目前为止,有一个成熟的解决方案吗?

Python脚本 update_strings.py:#1最后推荐一个相关的问题,并在此答案的python脚本使用NSLocalizedString最佳做法看起来很有希望...

测试它并以其当前形式(2013年5月31日),如果您有重复的注释条目(期望单行注释),它不会处理多行注释.

可能只需要调整一下正则表达式.

Jee*_*hut 7

结帐BartyCrouch,它完美地解决了您的问题.它也是开源的,积极维护的,可以轻松安装和集成到您的项目中.


通过Homebrew 安装 BartyCrouch :

brew install bartycrouch
Run Code Online (Sandbox Code Playgroud)

或者,通过Mint安装它:

mint install Flinesoft/BartyCrouch
Run Code Online (Sandbox Code Playgroud)

逐步更新您的Localizable.strings文件:

$ bartycrouch update
Run Code Online (Sandbox Code Playgroud)

这将完全符合您的要求.


为了使 Storyboards/XIBs Strings文件随时间更新,我强烈建议您添加构建脚本(有关如何在此处添加构建脚本的说明):

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
Run Code Online (Sandbox Code Playgroud)

除了逐步更新Storyboards/XIBs Strings文件之外,还将确保您的Localizable.strings文件使用代码中新添加的密钥保持更新,NSLocalizedString并显示重复键或空值的警告.

请务必在GitHub上查看BartyCrouch以获取更多信息.


Lui*_*uis 1

如果您有以前版本的 genstrings,只需新旧版本之间的“差异”即可解决问题

编辑:最好使用 vimdiff 处理 utf-16 文件