情况:
我们使用XCode导出/导入工具为我们的翻译生成可本地化的文件。这在XCode 8中运行良好。由于我们更新到XCode 9,我们发现了一些问题。
问题:
NSLocalizedString()
键/值,因为它应该according to this documentation:When you export localizations, Xcode searches your code for the macros and includes the strings files in the exported localization file for translation.
.xliff
文件中不存在。 .xliff
文件时,XCode似乎删除了文件中的所有注释。它被"(No Comment)"
配置:
我尝试了什么:
NSLocalizedString()
手动生成开发Localizable.strings
文件时,我可以在导出中显示我的find ./ -name "*.m" -print0 | xargs -0 xcrun extractLocStrings -o .
字符串(我再次运行它)对于.swift
文件,因为我的项目是swift / objc混合)。然后结合结果,让我的字符串显示在导出中,但没有注释,这是翻译人员的指南。 问题:
这是一个XCode 9错误吗?我是否错过了本地化导出/导入的任何文档或新功能/选项?有变通方法吗?
答案 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)
我终于找到了问题的原因。
存在该问题是因为Xcode从未以承诺的编码保存文件。
可以在两个位置设置文本编码,一个是“默认文本编码”,其中包括“在保存时转换现有文件”复选框。
在打开每个文件时,还有一个指定为“文本编码”的文件。如果未在文件上指定文本编码,则使用“默认文本编码”。
但是,Xcode从未按承诺保存文件。例如,如果选择文件指定的文本编码,例如说“ UTF-16”,则会显示一个警告窗口,其中显示“取消”,“重新解释”,“转换”。
如警报所述,如果您选择转换,则Xcode会将文件转换为编码。但是,事实并非如此。
因此,当您导出翻译时,该文件将以其从未转换过且不会被忽略的编码打开。
解决方案很简单。对于您指定的文本编码的文件,请将其保存为指定的编码。您可以通过另存为并选择正确的编码,与其他编辑器(如BBEdit)一起执行此操作。
对于那些未指定文本编码的文件。确保将它们另存为“默认文本编码”。如果没有,请更改“默认文本编码”,这样就无需更改每个文件。
答案 2 :(得分:0)
这是一个比较老的问题,但是我在Xcode 10中也遇到了同样的问题。
解决方案是将字符串文件(例如InfoPlist.strings
)与plist.info
放在同一文件夹中。只有这样,现有翻译才包含在本地化导出中。
以前,我将它们放在专门的“本地化”组中。虽然这对本地化本身有效(例如,在运行应用程序时),但本地化导出似乎仅包括“ plist.info
附近”的现有字符串文件的翻译。