Xcode 6 本地化无法读取字符串文件
Xcode 6 localization failed to read a strings file
Xcode 无法生成 xliff 本地化文件并出现错误 本地化无法读取字符串文件。请查看系统日志以获取更多详细信息。有谁知道我在哪里可以找到这些日志?它是 Xcode 6.3.2 GM,但我也尝试过 6.3.1 版本。与 6.3.1。错误出现在特定文件上,但在该文件内部并无异常。此外,我试图删除该文件,但我得到了同样的错误,尽管该文件不再存在。有人知道为什么吗?
最后,我通过从代码中删除所有 NSLocalizedString 宏解决了这个问题,因为 xliff 导出器会为它们查找代码,并根据结果查找字符串文件。奇怪的是他也扫描评论,所以简单地评论不需要的 NSLocalizedString 宏是没有用的。
Does anyone know where do I find these logs?
打开 Console
应用程序。例如,在 system.log
"strings" 中搜索。
Does anyone idea why?
有几个问题导致了这个错误:
- 清空
Localizable.strings
文件。
解决方法: 加评论即可
/** no localizable strings **/
到这个文件,问题就解决了。
- 转义符号中的第二个问题:
\
解决方案: 删除它并用你的特殊字符找出一些东西。并且您的导出过程可能会顺利完成。
P.S.
- 至少在
Version 6.4 (6E35b)
期间仍然有效
- Related openradar bug-report
我在尝试使用 NSLocalizedString
并指定自己的 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
替换为 NSBundle.mainBundle()
或您想要的任何内容。
我遇到了类似的问题。检查系统日志中的条目 "Xcode: [MT] DVTAssertions"。 (应用程序->实用程序->Console.app)
例如:
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
详细信息:无法读取字符串文件 "Controllers/FindMyPhone/fr.lproj/TILMarkPhoneLostMessageViewController.strings",基础错误:
评论解析器输出:
{
"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. ";
}
不匹配:
{
"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. ";
}
对象:
方法:-work
主题:{number = 1, name = main}
请在 http://bugreport.apple.com 提交错误,并附上此警告消息和您可以提供的任何有用信息。
如您所见,在我的案例中,问题与 'NO-BREAK SPACE' (U+00A0) unicode 字符有关。导出本地化时,xcode 期望代码为 \U00A0
,但在我的字符串文件中是 \U00A0
(否则应用程序显示字符而不是 space.. .).对我来说听起来像是 xcode 中的错误。如果您想要一个快速而肮脏的解决方案,我会说在所有项目中搜索 \U00A0
并将其替换为 \U00A0
仅用于导出(并且一旦您获得 xliff 再次撤消这些更改)。
系统日志:
Xcode 无法生成 xliff 本地化文件并出现错误 本地化无法读取字符串文件。请查看系统日志以获取更多详细信息。有谁知道我在哪里可以找到这些日志?它是 Xcode 6.3.2 GM,但我也尝试过 6.3.1 版本。与 6.3.1。错误出现在特定文件上,但在该文件内部并无异常。此外,我试图删除该文件,但我得到了同样的错误,尽管该文件不再存在。有人知道为什么吗?
最后,我通过从代码中删除所有 NSLocalizedString 宏解决了这个问题,因为 xliff 导出器会为它们查找代码,并根据结果查找字符串文件。奇怪的是他也扫描评论,所以简单地评论不需要的 NSLocalizedString 宏是没有用的。
Does anyone know where do I find these logs?
打开 Console
应用程序。例如,在 system.log
"strings" 中搜索。
Does anyone idea why?
有几个问题导致了这个错误:
- 清空
Localizable.strings
文件。
解决方法: 加评论即可
/** no localizable strings **/
到这个文件,问题就解决了。
- 转义符号中的第二个问题:
\
解决方案: 删除它并用你的特殊字符找出一些东西。并且您的导出过程可能会顺利完成。
P.S.
- 至少在
Version 6.4 (6E35b)
期间仍然有效
- Related openradar bug-report
我在尝试使用 NSLocalizedString
并指定自己的 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
替换为 NSBundle.mainBundle()
或您想要的任何内容。
我遇到了类似的问题。检查系统日志中的条目 "Xcode: [MT] DVTAssertions"。 (应用程序->实用程序->Console.app)
例如:
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
详细信息:无法读取字符串文件 "Controllers/FindMyPhone/fr.lproj/TILMarkPhoneLostMessageViewController.strings",基础错误:
评论解析器输出:
{
"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. ";
}
不匹配:
{
"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. ";
}
对象: 方法:-work 主题:{number = 1, name = main}
请在 http://bugreport.apple.com 提交错误,并附上此警告消息和您可以提供的任何有用信息。
如您所见,在我的案例中,问题与 'NO-BREAK SPACE' (U+00A0) unicode 字符有关。导出本地化时,xcode 期望代码为 \U00A0
,但在我的字符串文件中是 \U00A0
(否则应用程序显示字符而不是 space.. .).对我来说听起来像是 xcode 中的错误。如果您想要一个快速而肮脏的解决方案,我会说在所有项目中搜索 \U00A0
并将其替换为 \U00A0
仅用于导出(并且一旦您获得 xliff 再次撤消这些更改)。
系统日志: