Um zu vermeiden, eine Reihe von Kategorien zu schaffen, erstellen Sie einfach eine, die die NSObject und dann prüfen, für die isKindOfClass kategorisiert, wie vorgeschlagen. Siehe den folgenden Code:
#import "NSObject+Localized.h"
@implementation NSObject (Localized)
///
/// This method is used to translate strings in .xib files.
/// Using the "User Defined Runtime Attributes" set an entry like:
/// Key Path: textLocalized
/// Type: String
/// Value: {THE TRANSLATION KEY}
///
-(void) setTextLocalized:(NSString *)key
{
if ([self isKindOfClass:[UILabel class]])
{
UILabel *label = (UILabel *)self;
[label setText:NSLocalizedString(key, nil)];
}
else if ([self isKindOfClass:[UIButton class]])
{
UIButton *button = (UIButton *)self;
[button setTitle:NSLocalizedString(key, nil) forState:UIControlStateNormal];
}
else if ([self isKindOfClass:[UIBarButtonItem class]])
{
UIBarButtonItem *button = (UIBarButtonItem *)self;
[button setTitle:NSLocalizedString(key, nil)];
}
}
@end
Ich benutze nicht gerne ibtool. weil es mehrere Nib-Dateien für jede Sprache erstellt, und wenn Sie sich entscheiden, die Schnittstelle zu ändern, müssen Sie zu jeder Nib für jede Sprache gehen und sie alle 1 durch 1 ändern – aryaxt
Unabhängig davon, ist iftool der richtige Weg, es zu tun. Mit separaten Nibs können Sie die Schaltflächengröße oder sogar das gesamte Layout anpassen, um längere Strings oder kulturspezifische Erwartungen zu erfüllen. ibtool hat auch einige Funktionen, mit denen Sie "inkrementelle Lokalisierung" durchführen können; Weitere Informationen finden Sie unter 'man ibtool'. –
ibtool funktioniert nicht gut, wenn Lokalisierungszeichenfolgen von einem Server abgerufen werden, da sie zum Zeitpunkt der Kompilierung nicht vorhanden sind. –