6

我曾经使用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 功能。

有什么方法可以解决这个需求吗?

4

1 回答 1

3

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

这意味着您可以传递给keycommentvalue和的唯一值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")
}
于 2019-06-15T06:21:42.720 回答