Bạn nên tạo tệp plist mà bạn bản địa hóa, trong kho lưu trữ định danh địa phương chính xác cho nội địa hóa tương ứng, khi bạn sử dụng đoạn mã của mình, bạn nên tải ngôn ngữ từ tệp plist được bản địa hóa đó và sử dụng tên hiển thị.
Bằng cách đó, ngôn ngữ của bạn sẽ luôn tương ứng với ngôn ngữ giao diện trên màn hình. Tôi cần phải làm điều này cho một số ngày tôi muốn định dạng, và không phụ thuộc vào hệ thống như là định dạng lịch có thể được thiết lập trong một ngôn ngữ khác vào hệ thống ...
hy vọng rằng sẽ giúp ...
- (NSDictionary*)getLocalizedCalendarStrings{
NSString* plistPath = [[NSBundle mainBundle] pathForResource:@"calendar" ofType:@"plist"]; // will return the path of the plist in the right language-specific .lproj directory)
NSDictionary* calendar = [NSDictionary dictionaryWithContentsOfFile:plistPath];
return calendar;
}
Và sử dụng nó như vậy:
NSDictionary * calendar = [self getLocalizedCalendarStrings];
NSString * localeIdentifier = [calendar objectForKey:@"locale_identifier"];
[[NSLocale currentLocale] displayNameForKey: NSLocaleIdentifier value: localeIdentifier]
Để tránh rủi ro của những chuỗi locale được nhập bị viết sai thành vv, hoặc nếu bạn muốn có một tốt hơn hướng đang giải pháp, bạn có thể sử dụng tất nhiên một tài sản có tên là "default_language" như một BOOL trong plist và đặt nó là YES chỉ dành cho tiếng Anh, trong mã của bạn chỉ cần kiểm tra giá trị này và nếu nó là NO, sau đó nhận được các thiết bị địa phương, nên nó là YES, sau đó bạn biết rằng ứng dụng bằng tiếng Anh vì đó là cài đặt thiết bị hoặc bằng tiếng Anh vì nó không hỗ trợ ngôn ngữ hiện tại của thiết bị và do đó đã giảm trở lại tiếng Anh theo mặc định ... vì vậy nên "default_language" là YES, mã hóa cứng miền địa phương thành en_US, hoặc en_UK nếu bạn là người yêu nước ...
Ví dụ này có thể giải quyết vấn đề của bạn, một danh mục cho NSLocale, nhưng tất nhiên điều này sẽ làm cho bạn cần phải có một plist bản địa hóa cho từng ngôn ngữ bạn hỗ trợ ...
@implementation NSLocale (AppLocale)
+(NSString*)applicationCurrentLocale{
NSString* plistPath = [[NSBundle mainBundle] pathForResource:@"currentLocale" ofType:@"plist"];
NSDictionary* currentLocaleData = [NSDictionary dictionaryWithContentsOfFile:plistPath];
if([[currentLocaleData objectForKey:@"english_default"] boolValue] == YES){
return @"en_US";
}else{
NSString * deviceLocaleIdentifier = [[NSLocale currentLocale] localeIdentifier];
return [[NSLocale currentLocale] displayNameForKey:NSLocaleIdentifier value:deviceLocaleIdentifier];
}
}
@end
không [câu hỏi có khả năng liên quan này] (http://stackoverflow.com/questions/1522210/always-returns-en-us-not-users-current-language) giúp bạn ra ở tất cả? –
tốt, tôi có thể nhận được các ngôn ngữ ưa thích nhất ứng dụng của tôi hỗ trợ của '[NSLocale preferredLanguages]' để xác định được sử dụng nhưng đó không phải là giải pháp lý tưởng Tôi nghĩ ... – Jef