XCode 9本地化的导出/导入不包括NSLocalizedString()或注释。

14

情况:

我们使用XCode导出/导入工具为我们的翻译人员生成本地化文件。在XCode 8中,这一切都很顺利。自从我们升级到XCode 9以来,我们遇到了一些问题。

问题:

  1. 通过Editor-->Export for localization...-->Development language only导出本地化时,它没有包括应该包括的NSLocalizedString()键/值,根据此文档当您导出本地化时,Xcode会搜索您的代码中的宏,并在导出的本地化文件中包括字符串文件以进行翻译。
  2. 添加到Localizable.strings开发语言文件中的注释似乎在导出的.xliff文件中不存在。
  3. 导入已翻译的.xliff文件时,XCode似乎会删除文件中的所有注释。它被"(No Comment)"替换。

配置:

  • XCode 9.0 (9A235)
  • 开发语言:NL
  • 本地化语言: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混合的)。然后将结果组合起来,让我的字符串出现在导出中,但没有注释,这些注释是翻译人员需要的指南。

问题:

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


这个问题有进展了吗?我的本地化在Xcode 9中都无法导出。 - Bill Burgess
不好意思,没有。我现在每次导出时都使用了我在问题中描述的解决方法(“我尝试过的第二点”),希望这对你也能起到解决问题的作用。 - Thermometer
那太糟糕了。在其他项目中,我导出字符串的运气还可以。我认为问题出在与个别文件相关的项目设置上,涉及“绝对路径”或“相对于组”。我已经尝试过一些设置,但目前为止还没有解决。但是我以前也遇到过这个项目的问题,但其他项目都很好。 - Bill Burgess
1
不是答案,但 Xcode 9.3 似乎已经解决了至少一些这些问题 - 确实现在导入似乎已经修复。 - Ashley Mills
导出在Xcode 9.3中似乎仍存在问题。使用Xcode 10 beta导出到完全不同的格式,但包括在9.3导出中缺失的字符串。 - Isaac
3个回答

1
这是一个较早的问题,但我在使用Xcode 10时遇到了同样的问题。
解决方法很简单,只需将字符串文件(例如 InfoPlist.strings )放在与 plist.info 相同的文件夹中。只有这样,现有的翻译才会包含在本地化导出中。
之前,我将它们放在专门的“本地化”组中。虽然这对于本地化本身有效(即运行应用程序时),但本地化导出似乎仅包括“接近” plist.info 的现有字符串文件的翻译。

谢谢您的回答!虽然它没有直接帮助到我,但是它引导了我找到了解决方案。我正在使用CocoaPods,并且在本地化库内容时遇到了问题。尝试将导出的XLIFF文件重新导入,并将文件放置在Xcode希望它们存在的位置 - 在我的情况下是库的根目录。 - ReDetection

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)进行操作,保存并选择正确的编码。

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


0

对我来说,解决了导入和导出的问题的方法是在项目 > 信息 > 本地化下取消勾选使用基础国际化。我在代码中设置了所有的翻译,所以不需要为我的.storyboard和.xib文件启用它。

之前启用时,“Localizable.strings(Base)”文件里面没有任何内容,但是Xcode 8仍然可以通过使用“Localizable(英语)”文件中的内容正常工作。对于Xcode 9,如果我在Localizable(Base)中有源文本,则导出工作正常,但我仍然在导入方面遇到问题。

我正在使用Xcode 9.4.1。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接