IBInspectable和NSLocalizedString

JRV*_*JRV 8 objective-c interface-builder xcode6

我在Localizable.strings文件中编写了很多本地化文本,我正在寻找一种方法来使用它们并在界面构建器中显示它们.也就是说,不是为我的所有视图创建出口并在代码中设置文本,我想创建一个IB_DESIGNABLEUILabel子类,它必须访问我的Localizable.strings文件,然后直接在界面构建器上显示本地化文本.

问题是,NSLocalizedString在接口构建器中没有给出任何结果,但仅在我实际运行代码时.有没有办法告诉界面构建器用于本地化的文件(例如在prepareForInterfaceBuilder中)?

Ant*_*ine 12

感谢JRV的回答,我终于解决了这个问题:

@IBDesignable class ALLocalizableLabel: UILabel {

    @IBInspectable var localizeString:String = "" {
        didSet {
            #if TARGET_INTERFACE_BUILDER
                var bundle = NSBundle(forClass: self.dynamicType)
                self.text = bundle.localizedStringForKey(self.localizeString, value:"", table: nil)
            #else
                self.text = NSLocalizedString(self.localizeString, comment:"");
            #endif
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

这样就可以在界面构建器中设置键:

接口构建器中设置的本地化字符串

这将直接在界面构建器中更新标签,非常酷,默认情况下xcode应该支持!

您也可以在Github上找到它:https: //github.com/AvdLee/ALLocalizableLabel


JRV*_*JRV 7

我终于弄明白了.答案是:用于[[NSBundle bundleForClass:self.class] localizedStringForKey:key value:@"" table:nil]从界面构建器中的Localizable.strings文件获取翻译.这种实现使我可以重新定义NSLocalizedString宏(用于界面构建器):

#if TARGET_INTERFACE_BUILDER
#undef NSLocalizedString
#define NSLocalizedString(key, comment) [[NSBundle bundleForClass:self.class] localizedStringForKey:key value:@"" table:nil]
#endif
Run Code Online (Sandbox Code Playgroud)