iOS本地化正确! SwiftGen巴蒂·克鲁奇

本地化是一个广泛的话题,很多时候所要做的不仅仅是将单词翻译成预期的语言。 雷·温德利希(Ray Wenderlich)在他的博客上有很多与此相关的文章。 苹果公司已经就该主题制作了多个WWDC视频。 这是一个在网络上覆盖面很广的主题,那么另一篇文章的重点是什么? 我将与大家分享一些技巧和库,这些技巧和库可以在两个常见问题上为您提供很多帮助:

  • 保持情节提要的.strings文件同步
  • 使用枚举而不是使用NSLocalizedString宏处理本地化

这篇文章从您已经在项目中配置了本地化的地方继续进行,包括字符串和情节提要。 如果不是这种情况,您可以在Ray Wenderlich的帖子中找到所需要做的一切。

SwiftGen比NSLocalizedString更好

SwiftGen是一个神奇的宝石,它为我们的iOS管道带来了很多自动化,它可以帮助您生成一个故事板,字符串等枚举。
您可以在github页面上找到一些用例和更多信息。

AliSoftware / SwiftGen
SwiftGen –用于生成Swift代码的Swift工具集合(用于您的资产的枚举,情节提要,Localizable.strings… github.com

脚步:

  1. 首先,我们需要安装swiftgen,我们可以通过自制软件完成
  $ brew更新 
$ brew install swiftgen

2.在此之后,我们只需要向项目的“构建”阶段添加一个新的运行脚本阶段

代码很简单,在上面的屏幕快照中,我同时生成了情节提要和字符串枚举

  $ PODS_ROOT / SwiftGen / bin / swiftgen故事板-t swift3 $ SOURCE_ROOT —输出$ SOURCE_ROOT / {STORYBOARD_ENUM_OUTPUT_PATH} /Storyboard.swift — sceneEnumName故事板 
  $ PODS_ROOT / SwiftGen / bin / swiftgen字符串-t swift3 $ SOURCE_ROOT / {PATH_TO_LOCALIZABLE_STRINGS_FILE} /en.lproj/Localizable.strings —输出$ SOURCE_ROOT / {STRINGS_ENUM_OUTPUT_PATH} /Localized.swift 

现在,您只需要用项目的正确路径替换{STORYBOARD_ENUM_OUTPUT_PATH}和{STRINGS_ENUM_OUTPUT_PATH},唯一缺少的部分就是将生成的文件添加到xcode,然后就可以了。 *我还添加了用于生成故事板枚举的代码,但这是最佳的,与本地化无关,这只是SwiftGen的另一个功能。

现在,我们可以使用枚举以更优雅的方式在代码中调用本地化的字符串

将Storyboard的.strings与BartyCrouch同步。

故事板本地化的一个大问题是关于同步状态的问题。 当您第一次从情节提要中创建.string时,它将生成一个适当的文件

不幸的是,xcode在创建后不会更新此文件,因此最终将这些字符串迁移到localizable.strings并手动设置每个标签。 我知道那听起来真的很奇怪而且很麻烦,但是它确实发生了。 我已经看到许多项目都在发生这种情况。

BartyCrouch为此提供了帮助,这是我们添加到项目中的另一个脚本构建阶段,该阶段将确保情节提要的字符串保持同步。

脚步:

  1. 要安装,我们将再次使用自制软件
  $ brew tap flinesoft / bartycrouch 
$ brew install flinesoft / bartycrouch / bartycrouch

2.之后,我们将新的运行脚本添加到buildphases

和代码:

 如果哪个bartycrouch> / dev / null; 然后 
  #增量更新所有Storyboard / XIB字符串文件 
  bartycrouch接口-p“ $ PROJECT_DIR” -b -v 
 其他 
 回声“警告:未安装BartyCrouch,请从https://github.com/Flinesoft/BartyCrouch下载” 
 科幻 

3.所有人。

包起来 ..

因此,通过几个简单的步骤,我们可以改善我们的工作流程并适当地处理本地化,两个库的github页面都有很棒的文档,绝对推荐您看看。

与往常一样,任何想法,疑问或评论都将受到欢迎。