Bir iPhone uygulamasını uluslararasılaştırma sürecindeyim - Kullanıcının mevcut yerel ayarına bağlı olarak belirli görünümlerde programatik değişiklikler yapmam gerekiyor. Çıldırıyorum çünkü iPhone simülatöründe veya gerçek donanımda dil tercihi ne olursa olsun, locale
her zaman "en_US" olarak değerlendiriliyor:
NSString *locale = [[NSLocale currentLocale] localeIdentifier];
NSLog(@"current locale: %@", locale);
Çılgın olan şey, uygulamanın geri kalanının beklendiği gibi davranmasıdır. Localization.strings dosyasından doğru dizeler seçilir ve arabirimde kullanılır ve seçilen yerel ayar için doğru .xib dosyaları kullanılır.
Ayrıca şunu da denedim, boşuna ve aynı sonuçla:
NSString *locale = [[NSLocale autoupdatingCurrentLocale] localeIdentifier];
NSLog(@"current locale: %@", locale);
Kaçırdığım basit bir şey mi var? Bir tercih mi yoksa bir ithalat mı?
Yaptığım şey:
Darren'ın cevabının önerdiği gibi, aradığım tercih NSLocale
burada değil, burada:
NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
NSArray* languages = [userDefaults objectForKey:@"AppleLanguages"];
NSString* preferredLanguage = [languages objectAtIndex:0];
NSLog(@"preferredLanguage: %@", preferredLang);
Peter'ın cevabı daha iyi bir çözüm gibi görünüyor:
NSArray* preferredLanguages = [NSLocale preferredLanguages];
NSLog(@"preferredLanguages: %@", preferredLanguages);