xcode - NSLocalizedString 应该直接用于导出 XLIFF?

标签 xcode swift localization internationalization xliff

我曾经通过自定义函数使用 NSLocalizedString

例如,要访问Profile.strings,我定义了这个函数:

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

然后,像这样调用:

let localized = LocalizedProfile("提交", comment: "注册")

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

在 Xcode 6.3.2 上,执行 Export for localization 抛出错误:

enter image description here

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

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

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

文件/Users/mono/Documents/Git/MyApp/Localization.swift(第 29 行)中的错误条目:参数不是文字字符串。

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

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

最佳答案

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")
}

关于xcode - NSLocalizedString 应该直接用于导出 XLIFF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31084240/

相关文章:

ios - 寻找 iOS 中所有可用语言的列表

ios - 建议在不使用 MacOS 或 Xcode 的情况下在 iOS(最好是 9 及更高版本)上启用开发人员选项的任何解决方法?

c++ - Objective C 的 Xcode 6 上出现错误 'Undefined symbols for architecture x86_64 '

ios - 无法快速解码 Base64 字符串

css - 汉字的辅助字体

XCode 本地化字符串 Swift

ios - 更新启动时调用的 View Controller

ios - Xcodes UI 测试 - 点击一个 x y 位置

swift - NSNotification 永远不会被发送

swift - 我是否必须关闭使用 NSURLSessionDataTask 创建的连接