NSLocalizedString应该直接用于导出XLIFF?

时间:2015-06-27 01:28:01

标签: xcode swift localization internationalization xliff

我曾经使用自定义函数android:layout_height="200dp"

例如,要访问NSLocalizedString,我定义了这个函数:

Profile.strings

并且,这样称呼:

func LocalizedProfile(key: String, comment: String?) { NSLocalizedString(key, tableName: "Profile", comment: comment ?? "") }

除导出XLIFF外,此方法正常工作。

在Xcode 6.3.2上,执行let localized = LocalizedProfile("Submit", comment: "For registration") 抛出错误:

enter image description here

要获取错误信息,我通过命令行执行:

Export for localization

而且,我收到了这个错误:

xcodebuild -exportLocalizations -localizationPath ./xliff -project MyApp.xcodeproj -exportLanguage ja

定义自定义本地化方法对我来说非常有用,但我也想使用导出XLIFF功能。

有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:2)

Export For Localizationxcodebuild -exportLocalizations都通过在代码中查找NSLocalizedString(_:tableName:bundle:value:comment:)的调用来生成字符串文件,并使用传递到参数中的静态值来创建适当的字符串文件。

这意味着您只能传递给keycommentvaluetableName的值是字符串文字。

由于您在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")
}