本地化无法读取字符串文件 (Xcode 6.3.2)
Localization failed to read a strings file (Xcode 6.3.2)
我无法导出本地化,我只是收到 "Localization failed to read a strings file" 错误。
系统日志显示:
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 **/
之类的。问题是我的项目甚至不包含该文件,它生成时完全是空的。
似乎对 NSLocalizedString
的未完成和注释掉的调用干扰了本地化的导出。
我在尝试使用 NSLocalizedString
并指定自己的 NSBundle
时遇到了同样的问题。如果您使用与 NSLocalizedString("Some key", comment: "Some comment")
不同形式的本地化宏,似乎 Xcode 将不起作用。我通过重新定义 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()
或您想要的任何内容。
有同样的问题。
在我的例子中,它是由 NSLocalizedString
引起的, 使用从服务器 传递的变量 作为键而不是实际的字符串 。系统仍会扫描注释代码,因此除了 删除代码行 之外的任何操作都将无效。
检查您的 Localizable.strings 文件中是否有多余的双引号,然后将其删除。
我的问题是我有完全空的 xx.strings 个文件 - 我手动清除了它们。
将此行添加到任何空 xx.strings 文件的顶部,然后再次导出:
/* No Localized Strings */
对我来说就像是钥匙= "your string";在 swift 3 中有效。
键没有引号。分号在末尾。
我无法导出本地化,我只是收到 "Localization failed to read a strings file" 错误。
系统日志显示:
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 **/
之类的。问题是我的项目甚至不包含该文件,它生成时完全是空的。
似乎对 NSLocalizedString
的未完成和注释掉的调用干扰了本地化的导出。
我在尝试使用 NSLocalizedString
并指定自己的 NSBundle
时遇到了同样的问题。如果您使用与 NSLocalizedString("Some key", comment: "Some comment")
不同形式的本地化宏,似乎 Xcode 将不起作用。我通过重新定义 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()
或您想要的任何内容。
有同样的问题。
在我的例子中,它是由 NSLocalizedString
引起的, 使用从服务器 传递的变量 作为键而不是实际的字符串 。系统仍会扫描注释代码,因此除了 删除代码行 之外的任何操作都将无效。
检查您的 Localizable.strings 文件中是否有多余的双引号,然后将其删除。
我的问题是我有完全空的 xx.strings 个文件 - 我手动清除了它们。
将此行添加到任何空 xx.strings 文件的顶部,然后再次导出:
/* No Localized Strings */
对我来说就像是钥匙= "your string";在 swift 3 中有效。 键没有引号。分号在末尾。