XCode 9本地化导出/导入不包括NSLocalizedString()或评论

时间:2017-10-19 13:50:39

标签: ios xcode localization export nslocalizedstring

情况:

我们使用XCode导出/导入工具为我们的翻译生成可本地化的文件。这在XCode 8中运行良好。由于我们更新到XCode 9,我们发现了一些问题。

问题:

  1. 通过编辑器导出本地化时 - >导出本地化...-->仅限开发语言,它不包含 NSLocalizedString()键/值,因为它应该according to this documentationWhen you export localizations, Xcode searches your code for the macros and includes the strings files in the exported localization file for translation.
  2. 添加到Localizable.strings开发语言文件的注释似乎在导出.xliff文件中不存在。
  3. 导入已翻译的.xliff文件时,XCode似乎删除了文件中的所有注释。它被"(No Comment)"
  4. 取代

    配置:

    • XCode 9.0(9A235)
    • 开发语言:NL
    • 本地化语言:Base,NL,DE,BE,LU
    • Objective-C& Swift混合项目

    我尝试了什么:

    • 我曾尝试查看XCode 9文档或更改日志以查看本地化中发生的变化,但我无法找到提及此更改的内容
    • 当我第一次使用命令行命令NSLocalizedString()手动生成开发Localizable.strings文件时,我可以在导出中显示我的find ./ -name "*.m" -print0 | xargs -0 xcrun extractLocStrings -o .字符串(我再次运行它)对于.swift文件,因为我的项目是swift / objc混合)。然后结合结果,让我的字符串显示在导出中,但没有注释,这是翻译人员的指南。

    问题:

    这是一个XCode 9错误吗?我是否错过了本地化导出/导入的任何文档或新功能/选项?有变通方法吗?

3 个答案:

答案 0 :(得分:0)

对我来说,解决进出口问题的是通过取消选中 Project> Info> Localizations 下的 Use Base Internationalization 来关闭Base Internationalization。我在代码中设置了所有翻译,所以我的.storyboard和.xib文件不需要启用它。

以前,当启用它时,“ Localizable.strings(Base)”文件中没有任何内容,但是当使用Xcode 8时,使用我的“ Localizable(English)”文件中的内容似乎仍然可以正常工作出口。对于Xcode 9,如果我的源文本位于Localizable(Base)中,则导出工作正常,但是导入仍然存在问题。

我正在使用Xcode 9.4.1。

答案 1 :(得分:0)

我终于找到了问题的原因。

enter image description here

存在该问题是因为Xcode从未以承诺的编码保存文件。

可以在两个位置设置文本编码,一个是“默认文本编码”,其中包括“在保存时转换现有文件”复选框。

在打开每个文件时,还有一个指定为“文本编码”的文件。如果未在文件上指定文本编码,则使用“默认文本编码”。

但是,Xcode从未按承诺保存文件。例如,如果选择文件指定的文本编码,例如说“ UTF-16”,则会显示一个警告窗口,其中显示“取消”,“重新解释”,“转换”。

enter image description here

如警报所述,如果您选择转换,则Xcode会将文件转换为编码。但是,事实并非如此。

因此,当您导出翻译时,该文件将以其从未转换过且不会被忽略的编码打开。

您可以通过以下步骤进行验证。

  1. 选择源文件。
  2. 将其更改为其他文本编码。
  3. 在警报窗口中,选择“转换”
  4. 在Xcode中,右键单击该文件,然后选择“在Finder中显示”。
  5. 退出Xcode。
  6. 用另一个可以处理文本编码的文本编辑器打开文件,我的是BBEdit。
  7. 在BBEdit中,选择文件->另存为
  8. 现在您可以看到,该文件未按承诺保存在编码中。

解决方案

解决方案很简单。对于您指定的文本编码的文件,请将其保存为指定的编码。您可以通过另存为并选择正确的编码,与其他编辑器(如BBEdit)一起执行此操作。

对于那些未指定文本编码的文件。确保将它们另存为“默认文本编码”。如果没有,请更改“默认文本编码”,这样就无需更改每个文件。

答案 2 :(得分:0)

这是一个比较老的问题,但是我在Xcode 10中也遇到了同样的问题。

解决方案是将字符串文件(例如InfoPlist.strings)与plist.info放在同一文件夹中。只有这样,现有翻译才包含在本地化导出中。

以前,我将它们放在专门的“本地化”组中。虽然这对本地化本身有效(例如,在运行应用程序时),但本地化导出似乎仅包括“ plist.info附近”的现有字符串文件的翻译。