Tôi đang trong quá trình quốc tế hóa một ứng dụng iPhone - tôi cần thực hiện các thay đổi có lập trình đối với các chế độ xem nhất định dựa trên ngôn ngữ hiện tại của người dùng. Tôi đang phát điên lên vì bất kể tùy chọn ngôn ngữ trên trình mô phỏng iPhone hoặc phần cứng thực tế là gì, locale
luôn được đánh giá là "en_US":
NSString *locale = [[NSLocale currentLocale] localeIdentifier];
NSLog(@"current locale: %@", locale);
Điều điên rồ là phần còn lại của ứng dụng hoạt động như mong đợi. Các chuỗi chính xác được chọn từ tệp Localization.strings và được sử dụng trong giao diện và các tệp .xib chính xác cho ngôn ngữ đã chọn được sử dụng.
Tôi cũng đã thử những cách sau, nhưng không có kết quả và cùng một kết quả:
NSString *locale = [[NSLocale autoupdatingCurrentLocale] localeIdentifier];
NSLog(@"current locale: %@", locale);
Có điều gì đơn giản mà tôi đang thiếu không? Có thể là một sở thích hay một nhập khẩu?
Những gì tôi đã từng làm:
Như câu trả lời của Darren gợi ý, sở thích mà tôi đang tìm kiếm không nằm ở đó NSLocale
, thay vào đó là ở đây:
NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
NSArray* languages = [userDefaults objectForKey:@"AppleLanguages"];
NSString* preferredLanguage = [languages objectAtIndex:0];
NSLog(@"preferredLanguage: %@", preferredLang);
Câu trả lời của Peter dường như là một giải pháp tốt hơn:
NSArray* preferredLanguages = [NSLocale preferredLanguages];
NSLog(@"preferredLanguages: %@", preferredLanguages);