2011-06-10 13 views
15

Sunucum belirli bir dize için yerelleştirmelerin bir listesini göndermem gerekiyor. Benim app Rusça @ "Фу" @ İngilizce "Foo" ve lokalize bir dize Foo varsaiPhone/iOS: Uygulamamın yerelleştirildiği tüm dillerde yerelleştirilmiş dizeler listesini nasıl edinebilirim?

Anlamı, ben bu gibi sunucusunu bir liste göndermek istiyorum:

  • Dize Foo:
    • İngilizce: "Foo"
    • Rus: "Фу" Ben muktedir gerektiğini düşünüyorum ne

do:

    benim app her dil için Foo yerelleştirilmiş sürümünü alın
  1. için yerelleştirilmiş her dil için
  2. Numaralandırma yerelleştirilmiş dizeleri

I (1) ve nasıl yaparım bunu nasıl (2)?

+0

Eğer NSLocalizedStringFromTable' 'peeked mü? http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html%23//apple_ref/c/macro/NSLocalizedStringFromTableInBundle – joshpaul

+1

Tablodan Tüm varsayılan tablo içinde tutmak yerine, dizelerinizi bölümleme yolu. İstediğim bu değil. Belirli bir dizenin tüm farklı konumlarını almak istiyorum. –

cevap

31

Bunu anahtarlarını bir sözlük olarak English.lproj/Localizable.strings okuma ve alma yoluyla dize tuşlarının hepsi alabilirsiniz:

NSString *stringsPath = [[NSBundle mainBundle] pathForResource:@"Localizable" ofType:@"strings"]; 
NSDictionary *dictionary = [NSDictionary dictionaryWithContentsOfFile:stringsPath]; 

, her bir dilin çevirisini elde etmek için, için dil adımlayabilirsiniz her İngiliz anahtarı ve kullanımı NSLocalizedStringFromTableInBundle:

for (NSString *language in [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"]) { 
    NSBundle *bundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:language ofType:@"lproj"]]; 
    NSLog(@"%@: %@", language, NSLocalizedStringFromTableInBundle(@"Testing", @"Localizable", bundle, nil)); 
} 
+0

Bu makul gibi geliyor; Gördüğüm diğer seçenekler dizeleri alma şeklimizi yeniden yazmayı gerektiriyordu, ancak bu daha az invaziv ve ihtiyacım olan şeyi yapıyor gibi görünüyor. Bugün deneyeceğim. –

+0

bana da yardımcı oldu :) – Swati

+2

Yukarıdaki kod örneklerinde 'pathForResource' için yapılan ilk çağrının, * geçerli * yerelleştirmenin yolunu, ingilizcede değil (örneğin, simülatörünüz/aygıtınız Almanca olarak ayarlanmışsa) döndüreceğini unutmayın. 'de.lproj/Localizable.strings' yolunu alacaktır. – Alessandro

İlgili konular