Nslocale currentLocale zawsze zwraca "en US", a nie bieżący język użytkownika
Jestem w procesie internacjonalizacji aplikacji na iPhone ' a - muszę wprowadzać zmiany programowe w niektórych widokach w oparciu o bieżące ustawienia regionalne użytkownika. Zaczynam wariować, bo bez względu na preferencje językowe w symulatorze iPhone 'a czy faktycznym sprzęcie, locale
zawsze ocenia się na "en_US":
NSString *locale = [[NSLocale currentLocale] localeIdentifier];
NSLog(@"current locale: %@", locale);
Szalone Jest to, że reszta aplikacji zachowuje się zgodnie z oczekiwaniami. Odpowiednie ciągi znaków są wybierane z lokalizacji.plik strings i używany w interfejs i poprawny .używane są pliki xib dla wybranych ustawień regionalnych.
Próbowałem również następujących, bezskutecznie i z takim samym skutkiem:
NSString *locale = [[NSLocale autoupdatingCurrentLocale] localeIdentifier];
NSLog(@"current locale: %@", locale);
Czy jest coś prostego, co mi umyka? Preferencje czy może import?
Co kiedyś robiłem:
Jak sugeruje odpowiedź Darrena, preferencja, której szukam, nie jest w NSLocale
, raczej jest tutaj:
NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
NSArray* languages = [userDefaults objectForKey:@"AppleLanguages"];
NSString* preferredLanguage = [languages objectAtIndex:0];
NSLog(@"preferredLanguage: %@", preferredLang);
Odpowiedź Piotra wydaje się być lepszym rozwiązaniem:
NSArray* preferredLanguages = [NSLocale preferredLanguages];
NSLog(@"preferredLanguages: %@", preferredLanguages);
9 answers
Zamiast odpytywać domyślne wartości bezpośrednio używając nieudokumentowanego klucza, zapytaj klasę NSLocale o tablicę preferowanych języków.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-29 18:30:16
[NSLocale currentLocale]
opiera się na Ustawieniach formatu regionu urządzenia, a nie na języku. Jeśli region jest ustawiony na Stany Zjednoczone, otrzymasz en_US niezależnie od używanego języka.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-05 21:55:31
Aby uzyskać bieżący język urządzenia, użyj tego zamiast:
NSString * language = [[NSLocale preferredLanguages] objectAtIndex:0];
Jak opisano tutaj: Pobieranie bieżącego języka urządzenia w iOS?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:59
Dla nas problemem było to, że nadpisywaliśmy język aplikacji i region aplikacji w naszym schemacie dev. Upewnij się, że język aplikacji jest ustawiony na język systemowy w opcjach scheme (Edytuj schemat -> opcje).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-11 07:28:36
Dla mnie, zarówno
NSString *localeString = [[NSLocale currentLocale] localeIdentifier];
I
NSArray *array = [NSLocale preferredLanguages];
self.label.text = array[0];
Uzyskaj ten sam wynik, gdy jesteś w symulatorze.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-18 20:48:42
Miałem problem z formatowaniem nazw miesięcy w języku angielskim na urządzeniu ustawionym na język francuski.
Moim rozwiązaniem było użycie tego:
NSLocale *locale = [NSLocale localeWithLocaleIdentifier:[[NSLocale preferredLanguages] objectAtIndex:0] ];
[self.monthNameFormatter setLocale:locale];
[self.monthNameFormatter setDateFormat:@"MMMM"];
[self.monthNameFormatter stringFromDate:myDate];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-13 16:17:17
Odkryłem, że jeśli zostawiam" en_US", ale mam lokalizację "en", która jest kopią "en_US", symulator automatycznie zaczyna respektować Ustawienia języka, ale jak tylko" en_US " jest opcją, zawsze wybiera ją niezależnie od ustawień.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-11 17:24:58
Pytanie jest za stare, ale ten kod może pomóc wielu:
Główny.m powinno wyglądać tak:
NSString *localecode=[[NSLocale currentLocale] localeIdentifier];
localecode=[localecode substringToIndex:2]; //en_GB -> en
NSArray *arr = [NSLocale preferredLanguages];
NSMutableArray * mutable = [arr mutableCopy];
NSString *prefered = [mutable firstObject];
if(![localecode isEqualToString:prefered]){
if(![prefered isEqualToString:@"es"] && ![prefered isEqualToString:@"en"] && ![prefered isEqualToString:@"pt"]){
int index = [mutable indexOfObject:@"en"];
[mutable replaceObjectAtIndex:0 withObject:@"en"];
[mutable replaceObjectAtIndex:index withObject:prefered];
[[NSUserDefaults standardUserDefaults] setObject:mutable forKey:@"AppleLanguages"];
}
else{
int index = [mutable indexOfObject:localecode];
[mutable replaceObjectAtIndex:0 withObject:localecode];
[mutable replaceObjectAtIndex:index withObject:prefered];
[[NSUserDefaults standardUserDefaults] setObject:mutable forKey:@"AppleLanguages"];
}
}
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
Co to zrobić? Jeśli bieżący język urządzenia es hiszpański, angielski lub portugalski użyć aplikacji używa zlokalizowanych ciągów, z drugiej strony, Jeśli bieżący język nie jest jednym z tych i nie jest obsługiwany przez aplikację jest ustawiony na angielski.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-05 14:00:53
Pokazuje poprawne ustawienia regionalne na prawdziwym iPadzie. Jednak symulator ma własny iOS, który domyślnie jest ustawiony na en-US. Przejdź do preferencji iOS symulatora i przełącz język i region na ten, który chcesz.
To wystarczy.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-03 05:49:12