Powinieneś utworzyć plik plist, który zlokalizujesz w swoim magazynie plist prawidłowym identyfikatorze ustawień dla odpowiedniej lokalizacji, podczas używania fragmentu kodu, musisz załadować ustawienia narodowe z tego zlokalizowanego pliku plist i użyć go, aby uzyskać wyświetlana nazwa.
W ten sposób ustawienia regionalne będą zawsze odpowiadać językowi interfejsu na ekranie. Musiałem to zrobić dla niektórych terminach chciałem formacie, a nie opierać się na systemie jako format kalendarza można ustawić w innym języku do systemu ...
nadzieję, że pomoże ...
- (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;
}
i używać go tak:
NSDictionary * calendar = [self getLocalizedCalendarStrings];
NSString * localeIdentifier = [calendar objectForKey:@"locale_identifier"];
[[NSLocale currentLocale] displayNameForKey: NSLocaleIdentifier value: localeIdentifier]
Aby uniknąć ryzyka tych ustawień regionalnych ciągów wpisu jest misspelt itp, albo jeśli chcesz lepszy rozwiązanie zorientowane na kod, możesz oczywiście użyć właściwości o nazwie "default_language" jako BOOL w pliku plist i ustawić ją na YES tylko dla języka angielskiego, w swoim kodzie wystarczy sprawdzić tę wartość, a jeśli NIE, to uzyskać ustawienia regionalne urządzenia, to TAK, to wiesz, że aplikacja jest albo po angielsku, ponieważ jest to ustawienie urządzenia, albo po angielsku, ponieważ nie obsługuje bieżących ustawień regionalnych urządzenia i dlatego domyślnie spadła na angielski ... "default_language" to TAK, sztywno koduj ustawienia regionalne do en_US lub en_UK, jeśli jesteś patriotą brit ...
Coś podobnego do tego przykładu może rozwiązać Twój problem, kategoria dla NSLocale, ale oczywiście musisz mieć zlokalizowany plik plist dla każdego obsługiwanego języka ...
@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
Czy [to potencjalnie powiązane pytanie] (http://stackoverflow.com/questions/1522210/always-returns-en-us-us-users-current-language) w ogóle ci pomaga? –
cóż, mógłbym uzyskać najbardziej preferowany język dla mojej aplikacji z "[NSLocale preferredLanguages]", aby określić, który z nich jest używany, ale to nie jest idealne rozwiązanie, myślę, że ... – Jef