要为NSLocalizedString
提供后备语言,我在Objective-C中使用此#undef
和#define
:
#undef NSLocalizedString
#define NSLocalizedString(key, comment) @"NSLocalizedString has been replaced";
如果从Objective-C调用,这非常有效,但如果从Swift调用,则忽略NSLocalizedString
的新定义。 (桥接头已正确配置并正常工作)
这在Swift中是否可行,若然,怎么办?
注意:真实的例子是here on Github,另见SO answer here
答案 0 :(得分:3)
您可以为此{/ 1>这样的NSObject
子类执行此操作
extension NSObject {
func NSLocalizedString(key: String, comment: String) -> String {
return "yes we have localized an NSObject"
}
}
AnyObject
怎么样?在这种情况下,您必须了解并遵守FallbackLanguage
子类中的AnyObject
协议
protocol FallbackLanguage: class {}
// add default implementations
extension FallbackLanguage {
func NSLocalizedString(key: String, comment: String) -> String {
return "yes we have localized AnyObject via FallbackLanguage protocol"
}
}
备注强>
NSLocalizedString
,那么您将无法运气。答案 1 :(得分:0)
您将必须执行全局功能...其他选项将导致各种各样的问题,例如重新训练周期,或者女巫的类类不从NSObject继承(这只是问题的子集)-这将根本不起作用。是的,全局函数通常很大!但这是“覆盖”全局功能的唯一方法。 , 这是我在生产中使用的代码,我们有数千个字符串,在某些时候,我们必须使我们的应用程序动态本地化-这就是我们所做的。
// Global functions for lagacy code
func NSLocalizedString(_ key: String, comment: String) -> String {
return key.localized()
}
func NSLocalizedStringInTable(key: String, tableName: String ) -> String {
return key.localized(using: tableName)
}