繁体   English   中英

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

[英]iOS Localization - Updating Localizable.strings with just new strings

我搜索过谷歌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输出具有按字母顺序排序的字符串,因此分散在整个1000中的10个字符串意味着要查看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文件,而我缺乏使用新密钥更新其他语言文件的方法。 对于我没有英文单词作为关键字而且genstrings炸弹我的"welcome_message" = "Welcome!"情况,这个很好"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日),如果您有重复的注释条目(期望单行注释),它不会处理多行注释。

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

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


通过Homebrew 安装 BartyCrouch:

brew install bartycrouch

或者,通过Mint安装它:

mint install Flinesoft/BartyCrouch

逐步更新 Localizable.strings文件:

$ bartycrouch update

这将完全符合您的要求。


为了使 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

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

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

如果你有以前版本的genstrings,只是新旧之间的“差异”可以做的伎俩

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

您可以查看我为OneSky构建的Xcode插件 ,它旨在改善iOS / Mac OSX开发人员的本地化工作流程。

插件的字符串生成功能将genstringsibtool --export-strings-file到选定的源/ IB文件,新文件将自动添加到项目和目标中,新字符串将合并到带注释的现有文件中。

它只会生成/更新基本语言的字符串,但您可以利用插件的其他功能自动执行使用OneSky平台的转换导出和导入,OneSky平台可供众包项目免费使用。

您可能需要在此处查看我的解决方案: SwiftyLocalization

只需几步设置,您就可以在Google电子表格中进行非常灵活的本地化(评论,自定义颜色,突出显示,字体,多张表格等)。

简而言之,步骤如下:Google电子表格 - > CSV文件 - > Localizable.strings

此外,它还生成Localizables.swift ,这个结构就像是为您进行密钥检索和解码的接口(您必须手动指定从密钥解码String的方法)。

为什么这很棒?

  1. 您不再需要在整个地方都使用密钥作为普通字符串。
  2. 在编译时检测到错误的密钥。
  3. Xcode可以自动完成,所以你可以这样做:
// It's defined as computed static var, so it's up-to-date every time you call. 
// You can also have your custom retrieval method there.

button.setTitle(Localizables.login.button_title_login, forState: .Normal)

该项目使用Google App Script转换表格 - > CSV Python脚本以转换CSV文件 - > Localizable.strings您可以快速查看此示例表以了解可能的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM