【问题标题】:Localizable string in Foundation.framework not foundFoundation.framework 中的可本地化字符串未找到
【发布时间】:2014-12-16 16:32:32
【问题描述】:

我在使用我的应用程序时收到此日志警告,但我不确定如何处理此消息:

2014-10-21 12:57:54.472 App[7067:2540152] 在捆绑 CFBundle 0x12e508f60(未加载)的字符串表“文档”中找不到可本地化的字符串“(由 %@ 保存的文档)”。

看起来,框架内的本地化文件丢失了,这真的很奇怪。重新添加框架没有帮助。

任何提示都可以理解。

【问题讨论】:

  • 这是系统消息还是您的应用程序试图显示该消息?什么代码触发了该日志消息?
  • 这是一条系统消息。我无法将您指向特定的代码,但在应用程序中发生这种情况是在滚动表格视图时触发的。图片是通过 SDWebImage 加载的,可能没有完全保存。当用户首选项未正确保存时,我听说过相关消息。但是,此消息并非在每个设备上都显示,并且即使在重新安装后仍会保留在某个设备上。这让我觉得它与系统(或安装)相关。

标签: ios localization nsbundle


【解决方案1】:

查看整个 StackOverflow 以寻找解决方案。

发现了一个错误。

我只是复制了本地化,例如:

let str = "String".localized

之后也是这样:

str.localized

然后我声称

[strings] 错误:在 bundle 的 Localizable 表中找不到字符串 CFBundle 0x14bd01fc0

【讨论】:

    【解决方案2】:

    另一个常见的错误是忘记了“;”在文件中包含您的 Localizable.strings 的任何行的末尾。在大量复制和粘贴之后很容易发生这种情况。不幸的是,它不容易找到,因为编译器不会抱怨行号或任何其他有用的提示。当您有大型可本地化的表时,这可能会非常痛苦和乏味。

    这个错误的结果是,有的翻译找到了,有的没有,很难找到原因。

    我的解决方案是确保所有键都正确定义(在行尾带有“;”):

    1. 在 Xcode 中打开文件“Localizable.strings”
    2. 删除表格的下半部分(作为开始)
    3. 按 COMMAND + B(构建)

    如果没有报错,问题一定出在删除的下半部分。将其粘贴回来,现在只删除较低的 25 % 并重复构建。重复此过程,直到您可以更好地定位问题。

    【讨论】:

      【解决方案3】:

      根据我在最近的项目中发现的情况,当您在设备中定义了英语(只是没有地区的英语)时,就会发生此错误。 由于一个或多个框架将无法找到翻译字符串,您的控制台日志中将出现此错误。 希望有帮助

      【讨论】:

      • 在用基本语言进行测试期间,我不断收到故事板字符串未找到的错误 - 这终于解决了这个问题。该设备是英文的。将其更改为英语(美国),然后他们就走了。
      【解决方案4】:

      我也遇到了这个问题。

      由于关闭警告似乎是个坏主意(感觉高风险的翻译无法按预期工作),我追查了问题的真正原因。

      在我的例子中,问题是 Localizable.strings 文件中的一个空字符串。 (我使用了非标准的方式生成,默认的genstrings工具不会添加)

      也就是说,在一个地方我有这样一行:

      /* No comment provided by engineer. */
      "" = "";
      

      如果我删除它,警告就会消失! 如果添加空字符串,似乎字符串表实现中存在一些问题,这会使所有字符串表都混乱,而不仅仅是问题所在的那个......

      也许有人会觉得这些信息有用,所以我把它留在这里。

      【讨论】:

      • 我同意,在大多数情况下关闭警告不是正确的方法。然而,在这里,我无法触及原生 iOS 代码。顺便说一句,我正在使用 Phraseapp 进行翻译,并将它们的同步包含在我的构建过程中。我检查了语言文件中是否有像你这样的异常情况,幸运的是没有。无论如何,谢谢你的好评论。
      【解决方案5】:

      我收到了同样的信息。就我而言,TestFlight 和 Crashlytics 似乎都在生成它们;

      [TestFlight takeOff:@"xxxxxxxxxxx"]; // Generates 2 messages 
      [Crashlytics startWithAPIKey:@"xxxxxxxxxxx"]; // Generates 1 message
      

      不会给我们带来任何麻烦,所以暂时不要管他们。

      更新

      好的,明白了。如果您一直在进行本地化,那么您很可能在您的方案中启用了“本地化调试”(Xcode 中的产品 > 方案 > 编辑方案)。如果您想知道为什么会从各种库中收到这些消息,那可能是因为您仍然启用它。

      【讨论】:

      • 也许我应该将该问题直接提交给 Apple... :) 不幸的是,禁用 TF 和 CL(我也同时使用)并没有帮助。我检查了本地文件并在过去做了一些更改。但是,这并没有改变行为。幸运的是,该应用程序并没有因此而崩溃 - 正如您所指出的那样。无论如何,谢谢!
      • @CarstenWitzke - 解决了我的问题,不确定你的想法是否相同!
      • 砰!保罗,就是这样!我假设复选框是在 Xcode 6 中添加的,因为I put it in as argument。无论如何,这关闭了输出。谢谢。
      • 我发现如果您在构建方案中手动传递 -NSShowNonLocalizedStrings YES 参数,即使未选中本地化调试复选框,也会发生这种情况。
      【解决方案6】:

      如果您不指定“文档”,那么它将在文件 Localizable.strings 中查找。否则,请确保您的项目中有 Document.strings 文件。此外,“(由 %@ 保存的文档)”对我来说看起来很奇怪。您可能想要检查这是否真的是您想要的可本地化字符串的键。

      这里有一个链接,可以帮助您了解流程

      https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/LoadingResources/Strings/Strings.html

      【讨论】:

      • 我认为 Carsten 不会用他自己的代码产生这个警告,所以添加一些 Document.strings 可能无济于事。我也收到了警告,我确定它不是由我自己的代码产生的。所以问题宁愿是:哪个外部库产生了这个警告,它是应该关注的还是我们可以忽略它。
      • 嗨,正确,这不是我的代码直接触发的。如上所述,我有一个表视图,包括用于异步图像加载的 SDWebImage。我不确定,但我想我之前也曾在另一个库中看到过这个问题,并检查了 SD 问题跟踪器。到目前为止没有成功。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-21
      • 2016-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多