NSLocalizedString 应该直接用于导出 XLIFF?
NSLocalizedString should be used directly for exporting XLIFF?
我曾经通过自定义函数使用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 localization
抛出错误:
为了获取错误信息,我通过命令行执行:
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:)
是在那个带有 [=32 的包装函数中=] 值,这是无效的。
您真正想做的是直接调用 NSLocalizedString(_:tableName:comment:)
。
或者,您可以在包装函数中调用 Bundle.localizedString(forKey:value:table:)
,但是您必须为那些 key-value 对手动创建自己的字符串文件。
/// - 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")
}
我曾经通过自定义函数使用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 localization
抛出错误:
为了获取错误信息,我通过命令行执行:
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:)
是在那个带有 [=32 的包装函数中=] 值,这是无效的。
您真正想做的是直接调用 NSLocalizedString(_:tableName:comment:)
。
或者,您可以在包装函数中调用 Bundle.localizedString(forKey:value:table:)
,但是您必须为那些 key-value 对手动创建自己的字符串文件。
/// - 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")
}