本地化无法读取字符串文件(Xcode 6.3.2)

时间:2015-06-07 00:08:08

标签: xcode localization nslocalizedstring

我无法导出本地化,我只是得到“本地化无法读取字符串文件”错误。

系统日志说:

2015-06-07 01:41:48,305 Xcode[1914]: [MT] DVTAssertions: Warning in /SourceCache/IDEFrameworks/IDEFrameworks-7718/IDEFoundation/Localization/IDELocalizationWork.m:434
Details:  Failed to read strings file "/var/folders/vh/z7jrdtc16mv_ml4rdf3c_yf40000gn/T/Xcode3SourceStringsAdaptor-8B1BF14F-E8BF-4354-9FB6-BFF843BD6623/Localizable.strings", underlying error:
The data couldn’t be read because it isn’t in the correct format.
Object:   <IDELocalizationWork>
Method:   +readStringsWorkForContext:
Thread:   <NSThread: 0x7fa8a250a200>{number = 1, name = main}
Please file a bug at http://bugreport.apple.com with this warning message and any useful information you can provide.

但我不知道“Localizable.strings”是什么文件。 这些步骤不起作用:

  • 在Base.lproj中找到“Localizable.strings”并将其删除。它完全是空的。
  • 删除了日志消息中指定的整个文件夹。
  • 清理并清理构建文件夹。
  • 首先运行genstrings以生成缺少的.strings文件。 genstrings抱怨说我的字符串在NSLocalizedString的调用中不是文字。呃......他们看起来都像这样:private let ALERT_REMINDER_FIRED_TITLE = NSLocalizedString("ALERT_REMINDER_FIRED_TITLE", tableName:"ReminderHandler", comment:"my comment")

我认为Localizable.strings应该包含某些内容,例如/** no localizable strings **/或其他内容。问题是我的项目甚至不包含文件,它被生成为完全空的。

6 个答案:

答案 0 :(得分:3)

似乎未完成并注释掉NSLocalizedString的来电会影响本地化的导出。

答案 1 :(得分:3)

对我而言,这就像key =&#34;你的字符串&#34 ;;这在swift 3中有效。 密钥没有引号。最后用分号。

答案 2 :(得分:1)

尝试使用指定了自己的NSLocalizedString的{​​{1}}时遇到了同样的问题。如果您使用格式不同于NSBundle的本地化宏,似乎Xcode不会起作用。我已经通过重新定义NSLocalizedString("Some key", comment: "Some comment")函数来解决这个问题:

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或您想要的任何内容。

答案 3 :(得分:1)

检查Localizable.strings文件中是否有冗余双引号,然后将其删除。

答案 4 :(得分:1)

我遇到的问题是我已经完全清空了xx.strings文件 - 我会手动清除它们。

在任何空的xx.strings文件的顶部添加此行,导出再次起作用:

/* No Localized Strings */

答案 5 :(得分:0)

有同样的问题。 在我的情况下,它是由NSLocalizedString导致使用从服务器传递的变量作为键而不是实际字符串。系统仍会扫描已注释的代码,因此删除代码行的任何内容都将无效。