mon*_*ono 5 xcode localization internationalization xliff swift
我以前习惯使用NSLocalizedString自定义功能.
例如,要访问Profile.strings,我定义了这个函数:
func LocalizedProfile(key: String, comment: String?) {
NSLocalizedString(key, tableName: "Profile", comment: comment ?? "")
}
而且,这样称呼:
let localized = LocalizedProfile("Submit", comment: "For registration")
除导出XLIFF外,此方法正常工作.
在Xcode 6.3.2上,执行Export for localizationthrows错误:

要获取错误信息,我通过命令行执行:
xcodebuild -exportLocalizations -localizationPath ./xliff -project MyApp.xcodeproj -exportLanguage ja
而且,我收到了这个错误:
Bad entry in file /Users/mono/Documents/Git/MyApp/Localization.swift (line = 29): Argument is not a literal string.
定义自定义本地化方法对我来说非常有用,但我也想使用导出XLIFF功能.
有没有办法解决这个问题?
Export For Localization两者xcodebuild -exportLocalizations都通过在代码中查找调用来生成字符串文件NSLocalizedString(_:tableName:bundle:value:comment:),并使用传递到参数中的静态值来创建适当的字符串文件。
这意味着您可以传递给key、comment、value和的唯一值tableName是字符串文字。
由于您使用包装函数来NSLocalizedString(_:comment:)本地化字符串,因此 Xcode 看到您调用的唯一一次NSLocalizedString(_:comment:)是在具有非字符串文字值的包装函数中,这是无效的。
您真正想做的是NSLocalizedString(_:tableName:comment:)直接调用。
或者,您可以调用Bundle.localizedString(forKey:value:table:)包装函数,但随后您必须为这些键值对手动创建自己的字符串文件。
/// - parameter comment: This value is ignored, but should be provided for
/// context at the call site about the requested localized string.
func LocalizedProfile(key: String, comment: String?) -> String {
return Bundle.main.localizedString(forKey: key, value: nil, table: "Profile")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
340 次 |
| 最近记录: |