2009-07-07 16 views

cevap

11

Bir çözüm birden çok yerelleştirilmiş nib dosyası oluşturmaktır. Bu, yerelleştirme ihtiyaçlarınız çok basitse ve kaynaklarınızı geliştirmenin sonunda uzman yazılım yerelleştiricilerine bırakıyorsanız, muhtemelen en iyi sonucu verir.

Gelişmekte olduğunuz sırada yerelleştiriyorsanız ve kullanıcı arabirimi hızla değişiyorsa, her UI ayırmanın ara parçasının her yerel sürümünde çoğaltılması gerektiğinden, yinelenen nib dosyaları büyük bir acı olabilir. Bunu önlemek için, genellikle denetleyicinin -viewDidLoad yönteminde yerelleştirilmiş dizeleri ayarlama işlemek için görünüm denetleyicilerinize bir kod yazmanız gerekir. Yerelleştirilmiş metin içeren her denetimin bir IBOutlet olduğundan emin olun ve bunları IB'de görünüm denetleyicinize bağlayın.

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    hello.text = NSLocalizedString(@"Hello", @"Hello label"); 
    world.text = NSLocalizedString(@"world", @"world label"); 
    // ... etc 
} 

sonra -init yöntem bitene kadar sizin uçlu nesneler tamamen oluşturulmaz beri -viewDidLoad görünüm kurulum bu tip yapın: Sonra görünümü denetleyicisi en -viewDidLoad bu gibi bir şey olacaktır. -viewDidLoad, -init'dan sonra çalışır, ancak görünümünüz görünür hale gelmeden önce.

3

Her yerel ayar için .nib dosyasının birden çok sürümünü oluşturabilirsiniz. Dizeleri kolayca düzenlemenize izin veren araçlar da vardır. Apple'da bunun üzerinde pretty good documentation var.

2

Ayrıca iPhone için değil, genel olarak XCode/IB için bir çözüm arıyordum. Tüm referanslar, bir durumu belirtmek için dahili olarak bir anahtara ihtiyaç duyabileceğiniz ve kullanıcı için bu tuşa karşılık gelen bir etiket veya metin hücresindeki yerelleştirilmiş dizesini görüntülemek isteyebileceğiniz gerçeğiyle ilgilenmedi. İlk adımda standart bir yaklaşımın nasıl saklanacağını, örn. Paylaşılan kullanıcı varsayılanlarında bir anahtar için bir anahtar değer ve bir etiketteki bu anahtar değeri için yerelleştirilmiş dizeyi görüntüler.

Birçok kodlamaya ihtiyaç duymayan ve ib bağlamaları ile uyumlu bir çözüm buldum.

Önce bir dosya localizable.strings örn. NSLocalizedString (aKeyValue nil): Artık birlikte anahtar değeri yerelleştirebilirsiniz

"MyKeyValue" = "Localized display label"; 

içeren bir çizgi ile.

Etiketde, NSLocalized String ile ilgili herhangi bir değer trafosu bulamadınız.

@interface KeyToLocalizedStringTransformer : NSValueTransformer {} 

@implementation KeyToLocalizedStringTransformer 

+ (Class)transformedValueClass 
{ 
    return [NSString class]; 
} 

+ (BOOL)allowsReverseTransformation 
{ 
    return NO; 
} 

- (id)transformedValue:(id)aValue 
{ 
    NSString *NLString = [NSString stringWithString:NSLocalizedString(aValue,nil)]; 
return NLString; 
} 
hazırlamak için

Son adım örneğin trafo kayıt etmek: yüzden yerelleştirilmiş bir dizeye bir anahtar değeri dönüştürmek için bir sınıf KeyToLocalizedStringTransformer yarattı + Başlatılamadı: Bunu yalnızca NSUnArchiveFromData görmek ve eğer

NSValueTransformer *transformer = [[KeyToLocalizedStringTransformer alloc] init]; 
[NSValueTransformer setValueTransformer:transformer forName:@"KeyToLocalizedStringTransformer"]; 

Şimdi metin alanına veya hücre için bağlantılarında bir değer trafosu kullanabilirsiniz (Basitçe adını yazın ...)

IB'den buraya görüntü yok üzgünüm, çünkü burada yeniyim ve "hiçbir itibara sahip değilim": paylaşılan kullanıcı varsayılan denetleyicisine bağlanmayı hayal etmelisiniz, Kontroller anahtarı: değerler, Model Anahtar Yolu: MyStateKey ve bir değer tarif edildiği gibi transformatör. Sonuç olarak, nl etiketli etiket üzerinde nl etiketinde hiçbir şey yapmanız gerekmez, sadece Localizable.strings dizgisini çevirmeniz yeterli olmaz.

0

iOS 7'den itibaren & Xcode 5, Mümkün olduğunda NSLocalizedString kullanmaktan kaçınmalısınız. Tercih edilen yönteme 'taban lokalizasyonu' denir ve Storyboard üzerinden çalışır. Size çok iş kazandıracak. Eğer 'base localisation' için google'ı kullanırsanız,