我一直在通过为每种语言创建字符串文件和/或本地化 xib 文件来本地化我的程序。这个过程非常缓慢,因为维护所有本地化的 xib 文件并向界面添加新功能很复杂。
为了避免这种情况,在我最近的项目中,我只是为界面上的每个 UI 元素制作了 IBOutlets,并-(void)awakeFromNib
更改了所有使用的元素的标题和字符串值NSLocalizedString
和一个字符串文件。
有没有其他更有效的方法来批量翻译所有 UI 而无需创建多个 xib 和/或浪费时间尝试“保持同步”?
我有一个想法来解决这个问题,我制作了一个 NSObject 类别,如下所示:
@implementation NSObject (Localizable)
-(void)awakeFromNib {
if ([self isKindOfClass:[NSTextField class]]) {
NSTextField *txtField = (NSTextField *)self;
txtField.stringValue = NSLocalizedString(txtField.stringValue, nil);
}
else if ([self isKindOfClass:[NSWindow class]]) {
NSWindow *windowC = (NSWindow *)self;
windowC.title = NSLocalizedString(windowC.title, nil);
}
}
@end
正如您在我的类别中看到的那样,我可以NSTextField
通过将翻译占位符保留为NSTextField
文本来轻松更改应用程序中所有对象的值...
这很好用,但是我担心性能,因为这将对我的应用程序中的所有对象运行。
这样做很糟糕吗?有没有更好的选择?
PS:我创建了一个类别NSObject
而不是NSTextField
,NSWindow
因为这样我可以将所有本地化逻辑保存在一个地方,并且只需else if
为我可能想要翻译的每个 UI 类添加另一个语句,而不是创建一个新类别。