Xcode 6本地化无法读取字符串文件

时间:2015-05-11 07:17:16

标签: ios xcode localization localizable.strings

Xcode无法生成xliff本地化文件,错误本地化无法读取字符串文件。请查看系统日志以获取更多详细信息。有谁知道我在哪里可以找到这些日志?这是Xcode 6.3.2 GM,但我也尝试过6.3.1版本。用6.3.1。错误是在特定文件上,但在该文件内并不是什么不寻常的。此外,我试图删除该文件,但我收到相同的错误,虽然该文件不再存在。有谁知道为什么?

4 个答案:

答案 0 :(得分:7)

  

有谁知道我在哪里可以找到这些日志?

打开Console个应用。例如,搜索system.log“字符串”。

  

有谁想到为什么?

有几个问题会导致此错误:

  1. 清空Localizable.strings档案。
  2. 解决方案:只需添加评论

    即可
        /** no localizable strings **/
    

    到这个文件,问题就消失了。

    1. 转义符号中的第二个问题:\
    2. 解决方案:删除它并找出与您的特殊字符有关的内容。并且您的导出过程可能会完成而不会出错。

      P.S。

答案 1 :(得分:5)

最后,我通过从代码中删除所有NSLocalizedString宏来解决这个问题,因为xliff导出器会查找代码并根据结果查找字符串文件。奇怪的是他也会扫描评论,所以只需评论不需要的NSLocalizedString宏就不会有帮助。

答案 2 :(得分:4)

我有类似的问题。在系统日志中检查条目“Xcode:[MT] DVTAssertions”。 (Applciations->实用程序 - > Console.app)

例如:

X::~X

详细信息:无法读取字符串文件“Controllers / FindMyPhone / fr.lproj / TILMarkPhoneLostMessageViewController.strings”,基本错误:

评论解析器输出:

5/13/16 3:08:24.675 PM Xcode[15546]: [MT] DVTAssertions: Warning in /Library/Caches/com.apple.xbs/Sources/IDEFrameworks/IDEFrameworks-10188.1/IDEFoundation/Localization/IDELocalizationWork.m:355

不匹配:

{
    "OGQ-Dm-sLB.text" = "Au secours, je suis perdu**U00A0**! Veuillez appeler mon propri\U00e9taire.";
    "reH-FM-KQF.text" = "Envoyez un message \U00e0 la personne qui trouve votre t\U00e9l\U00e9phoneU00A0; celui-ci s\U2019affiche sur l\U2019\U00e9cran de verrouillage, accompagn\U00e9 de votre num\U00e9ro de t\U00e9l\U00e9phone. ";
}

对象: 方法: - 工作 线程:{number = 1,name = main}

请在http://bugreport.apple.com处提交错误,并附上此警告消息以及您可以提供的任何有用信息。

正如您在我的案例中所看到的,问题与'NO-BREAK SPACE'(U + 00A0)unicode字符有关。导出本地化时,xcode期望代码为{ "OGQ-Dm-sLB.text" = "Au secours, je suis perdu\U00a0! Veuillez appeler mon propri\U00e9taire."; "reH-FM-KQF.text" = "Envoyez un message \U00e0 la personne qui trouve votre t\U00e9l\U00e9phone\U00a0; celui-ci s\U2019affiche sur l\U2019\U00e9cran de verrouillage, accompagn\U00e9 de votre num\U00e9ro de t\U00e9l\U00e9phone. "; } ,但在我的字符串文件中为\\U00A0(否则应用会显示字符而不是空格...)。听起来像xcode中的一个bug给我。如果你想要一个快速而肮脏的解决方案,我会说在\U00A0的所有项目中搜索并仅为导出替换\U00A0(并且一旦你让xliff再次撤消这些更改)。

系统日志:

System log

答案 3 :(得分:1)

尝试使用指定了自己的NSLocalizedString的{​​{1}}时遇到了同样的问题。我已经通过重新定义NSBundle函数来解决这个问题:

NSLocalizedString

public func NSLocalizedString(key: String, tableName: String? = nil, bundle: NSBundle = NSBundle.mainBundle(), value: String = "", comment: String) -> String { return yourBundleHere.localizedStringForKey(key, value: value, table: tableName) } 替换为yourBundleHere或您想要的任何内容。