Xcode 6.3.2或6.4beta本地化无法读取string文件
是的,我知道有很多关于这个失败的讨论。 但是经过检查后,我觉得我现在所拥有的是不同的。
在这里错误,而“导出本地化..”Xcode 6.3 ,它说单引号(')应被replace为(\)在string文件。
在这里Xcode 6本地化无法读取一个string文件 ,它说NSLocalizedString应该被注释掉(如果我理解的话)。
为了testing这个问题,我创build了一个6.3.2和6.4的新项目(6E23)。 我可以在string文件中有单引号,但只要有NSLocalizedString(例如var str = NSLocalizedString("Hi", tableName: nil, bundle: NSBundle.mainBundle(), value: "Hi", comment: "Hi")
)在视图控制器文件中,Xcode总是popup
然后我做了
xcodebuild -exportLocalizations -localizationPath ./xliff -project testtest.xcodeproj -exportLanguage en
我得到了
在文件ViewController.swift(行= 26)中的错误条目:参数不是一个文字string。
2015-06-15 11:08:22.177 xcodebuild [31272:1150546]
[MT] DVTAssertions:Warning in /SourceCache/IDEFrameworks/IDEFrameworks-7718/IDEFoundation/Localization/IDELocalizationWork.m:434
详细信息:无法读取string文件“/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:错误:本地化无法读取string文件
即使我注释掉第26行,这个错误依然存在
var str = NSLocalizedString("Hi", tableName: nil, bundle: NSBundle.mainBundle(), value: "Hi", comment: "Hi")
但是如果我删除第26行,错误消失了。
所以,我guese,XLIFF发生器不知何故不允许“NSLocalizedString”出现任何?
你有没有find像我这样的?
有几个问题,导致这个错误:
1.清空Localizable.strings
文件。
解决scheme:只需添加评论
/** no localizable strings **/
到这个文件,问题就没有了。
2.转义符号中的第二个问题:(有时)
解决scheme:删除它,找出你的特殊字符的东西。 而且你的导出过程可能会完成而没有错误。
另外\
产生另一个bug:
刺出口:
"ACCOUNT" = "Foo\\\'Bar\'bazz\"";
导入刚刚导出的文件后的string:
"ACCOUNT" = "\\''";
奖金:
如果您将在导出期间尝试导入本地化Xcode将崩溃 !
欢迎来到苹果公司本地化!
PS
- 至less对于
Version 6.4 (6E35b)
- 相关的openradar bug报告
我在Xcode 8.1上遇到了与Swift 3相同的问题,因为我有一个扩展
func localized() -> String { return NSLocalizedString(self, comment: self) }
我修复了删除扩展名,并直接使用NSLocalizedString(“”,comment:“”)。 我真的不知道为什么当我尝试导出.xliff文件时扩展名不起作用。
我在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的string本地化扫描器的一种错误(我认为这是一个天真的方法,他们期望人们只使用NSLocalizedString(key, comment: comment)
,因此只期望string作为参数的方法)。
你得到相同的行为,不pipe行被注释掉的原因是本地化的string检测不排除注释,所以你的NSLocaluzedString调用被发现,因此你的.strings文件被处理,等等。
我已经通过重新定义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) }
replaceyourBundleHere
NSBundle.mainBundle()
或你想要什么。
我有同样的问题,这是因为我使用unicode格式这样的\ u0027 \当我使用一个apostroph charachter',当我把u字符replace成小\错误信息去了。
另外,你不能评论NSLocalizedString,因为它挂断parsing器,你必须从代码中删除它。