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, localeher 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 NSLocaleburada 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);