【问题标题】:XCode 9 localization export/import doesn't include NSLocalizedString() or commentsXCode 9 本地化导出/导入不包括 NSLocalizedString() 或注释
【发布时间】:2017-10-19 13:50:38
【问题描述】:

情况:

我们使用 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 似乎删除了文件中的所有 cmets。它被"(No Comment)" 取代

配置:

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

我的尝试:

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

问题:

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

【问题讨论】:

  • 在这个问题上有什么进展吗?我的本地化版本都没有在 Xcode 9 中导出。
  • 不,很遗憾没有。我现在每次导出时都使用了我在问题中描述的解决方法('我尝试过的'的第二点)......希望这也适用于你作为一种解决方法
  • 这太糟糕了。我在其他项目中导出字符串时运气不错。我认为问题出在与单个文件的“绝对路径”或“相对于组”相关的项目设置中。我已经修改了一些设置,但到目前为止,什么都没有。但是我过去在这个项目上遇到过问题,但其他的都很好。
  • 不是答案,但 Xcode 9.3 似乎至少解决了其中一些问题 - 当然现在导入似乎已经修复。
  • Xcode 9.3 中的导出似乎仍然存在问题。使用 Xcode 10 beta 导出为完全不同的格式,但确实包含 9.3 导出中缺少的字符串。 ??????

标签: ios xcode localization export nslocalizedstring


【解决方案1】:

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

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

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

【讨论】:

  • 感谢您的回答!它没有直接帮助我,但导致了解决方案。我正在使用 CocoaPods,但在本地化库内容时遇到了麻烦。尝试将导出的 XLIFF 导入回来,然后将文件放在 Xcode 想要的位置——在我的情况下,它是 lib 的根文件夹。
【解决方案2】:

解决导入和导出问题的方法是通过取消选中 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。

【讨论】:

    【解决方案3】:

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

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

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

    当您打开每个文件时,还有一个指定“文本编码”的文件。如果不指定文件的文本编码,则使用“默认文本编码”。

    然而,Xcode 从未像承诺的那样保存文件。例如,如果您选择一个文件指定的文本编码,比如“UTF-16”,则会显示一个带有“Cancel”、“Reinterpret”、“Convert”的警报窗口。

    正如警报所说,如果您选择转换,Xcode 会将文件转换为编码。但是,它没有。

    因此,当您导出翻译时,文件会以从未转换和忽略的编码打开。

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

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

    解决方案

    解决方法很简单。对于您指定文本编码的文件,请将其保存在指定的编码中。您可以使用其他编辑器(例如 BBEdit)执行此操作,方法是另存为并选择正确的编码。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-11
      • 1970-01-01
      • 2015-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-22
      相关资源
      最近更新 更多