【问题标题】:Xcode 6.3.2 or 6.4beta Localization failed to read a strings fileXcode 6.3.2 或 6.4beta 本地化未能读取字符串文件
【发布时间】:2015-06-15 09:38:41
【问题描述】:

是的,我知道有很多关于这个失败的讨论。但是在检查之后,我认为我现在所拥有的有所不同。

在这里Error while "Export For Localization.." Xcode 6.3,它说单引号(')应该替换为字符串文件中的(\')。

在这里Xcode 6 localization failed to read a strings file,它说 NSLocalizedString 应该被注释掉(如果我理解正确的话)。

为了测试这个问题,我用 6.3.2 和 6.4(6E23) 创建了一个新项目。我可以在字符串文件中使用单引号,但只要视图控制器文件中有 NSLocalizedString(例如var str = NSLocalizedString("Hi", tableName: nil, bundle: NSBundle.mainBundle(), value: "Hi", comment: "Hi")),Xcode 总是会弹出

然后我做了

xcodebuild -exportLocalizations -localizationPath ./xliff -project testtest.xcodeproj -exportLanguage en

我明白了

文件 ViewController.swift 中的错误条目(行 = 26):参数不是文字字符串。

2015-06-15 11:08:22.177 xcodebuild[31272:1150546]

[MT] DVTAssertions:/SourceCache/IDEFrameworks/IDEFrameworks-7718/IDEFoundation/Localization/IDELocalizationWork.m:434 中的警告

详细信息:读取字符串文件失败 "/var/folders/1s/_d08hx4j2gn9t6wlrc5_7gq00000gn/T/Xcode3SourceStringsAdaptor-48CAE246-EBA5-4326-B3C5-B5032A4027D8/Localizable.strings", 潜在错误:

无法读取数据,因为它的格式不正确。

对象:IDELocalizationWork

方法:+readStringsWorkForContext:

线程:{number = 1, name = main} 请在http://bugreport.apple.com 提交错误,并附上此警告消息以及您可以提供的任何有用信息。

xcodebuild: 错误:本地化未能读取字符串文件

即使我注释掉第 26 行,此错误仍然存​​在,即

var str = NSLocalizedString("Hi", tableName: nil, bundle: NSBundle.mainBundle(), value: "Hi", comment: "Hi")

但如果我删除第 26 行,错误就消失了。

所以,我猜,XLIFF 生成器不知何故不允许“NSLocalizedString”出现??

你有没有像我一样找到这个?

【问题讨论】:

    标签: ios swift localization xcode6


    【解决方案1】:

    有几个问题导致了这个错误:

    1。清空Localizable.strings 文件。

    解决方案:只需添加评论

        /** no localizable strings **/
    

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

    2。转义符号中的第二个问题:\(有时)

    解决方案:删除它并用你的特殊字符找出一些东西。并且您的导出过程可能会顺利完成。

    另外\ 产生另一个错误:

    Sting 导出:

    "ACCOUNT" = "Foo\\\'Bar\'bazz\"";
    

    导入刚刚导出的文件后的字符串:

    "ACCOUNT" = "\\''";
    

    奖金:

    如果您在导出 Xcode 的过程中尝试导入本地化,将会崩溃

    欢迎来到 Apple 的本地化地狱!


    附言

    【讨论】:

    • 谢谢。在我的例子中,在检查了 /private/var/log/system.log 之后,我意识到我们的其他一位程序员已经将一个本地化文件保存在 ASCII/Windows-1252 中,这导致 xcode 认为该文件被编码为移位 JIS(或其他一些编码)。以正确的编码保存文件修复了问题。
    【解决方案2】:

    我在 Xcode 8.1 上使用 Swift 3 时遇到了同样的问题,因为我有一个扩展

    func  localized() -> String {
        return NSLocalizedString(self, comment: self)
    } 
    

    我修复了它删除扩展名并直接使用 NSLocalizedString("", comment: "")。当我尝试导出 .xliff 文件时,我真的不知道为什么扩展程序不起作用。

    【讨论】:

      【解决方案3】:

      我在 Xcode 6.4 (6E35b) 中看到了这个问题。它似乎与在方法调用中包含 bundle: NSBundle.mainBundle() 参数有关。

      去掉那个参数(它有一个默认值)似乎可以修复错误。

      所以从这里改变:

      var str = NSLocalizedString("Hi", tableName: nil, bundle: NSBundle.mainBundle(), value: "Hi", comment: "Hi")

      到这里:

      var str = NSLocalizedString("Hi", tableName: nil, value: "Hi", comment: "Hi")

      这显然是 Xcode 的字符串本地化扫描器中的某种错误(我认为这是一种天真的方法,他们期望人们只使用 NSLocalizedString(key, comment: comment),因此只期望字符串作为该方法的参数)。

      【讨论】:

      • 这对我有用。从我的 Objective-C 项目中删除以下 commented 行导致 xliff 成功生成。 #define NSDateTimeAgoLocalizedStrings(key) NSLocalizedStringFromTableInBundle(key, @"NSDateTimeAgo", [NSBundle bundleWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"NSDateTimeAgo.bundle"]], nil)
      【解决方案4】:

      无论该行是否被注释掉,您得到相同行为的原因是本地化字符串检测不排除 cmets,因此您的 NSLocaluzedString 调用被发现,因此您的 .strings 文件被处理等等。

      【讨论】:

      • 所以这是错误还是某种奇怪的功能?对我来说,它看起来像一个错误的错误。
      • @ileonard 在我看来也是一个错误。归档一个雷达,也许苹果会注意到。
      【解决方案5】:

      我已经通过像这样重新定义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 替换为NSBundle.mainBundle() 或任何你想要的。

      【讨论】:

        【解决方案6】:

        我有同样的问题,这是因为我使用了 unicode 格式的撇号 ' by 这样的 \U0027 并且当我将 u 字符替换为小 \u0027 时,错误消息消失了。

        另外,你不能评论 NSLocalizedString,因为它会挂起解析器,你必须从代码中删除它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-20
          • 2011-02-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-22
          相关资源
          最近更新 更多