Lokalizuję aplikację na iOS, aw Symulatorze działa ona poprawnie w wybranym języku za każdym razem.Dlaczego moja aplikacja iOS wykrywa tylko bieżący język poprawnie przy pierwszym uruchomieniu?
Podczas testowania na moim iPhone 5, wykrywa język poprawnie tylko przy pierwszym uruchomieniu aplikacji. Co drugi raz przekompilowuję i uruchamiam moją aplikację na urządzeniu, wykrywa ona "en" jako język, mimo że testuję z wybranym językiem ("es").
wykryć przy użyciu języka:
[[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0]
Ja również używany:
[[NSLocale preferredLanguages] objectAtIndex:0]
sam rezultat.
Jeśli zabiję aplikację po pierwszym uruchomieniu i uruchomię ją ponownie na urządzeniu, nadal będzie poprawnie wykrywać język.
Ale jeśli zabiję aplikację, a następnie ponownie skompiluję/zrestartuję przez Xcode po pierwszym uruchomieniu, załaduje się ona z wykrytym "en" (angielski).
Po tym, zabijanie i ponowne uruchamianie aplikacji stale wykrywa, jak angielski, chyba że całkowicie usunę aplikację, i ponownie skompilować/ponownie zainstalować/uruchomić aplikację za pośrednictwem Xcode. Cykl następnie powtarza ... późniejsze przebudowanie/ponowne uruchomienie bez wcześniejszego usunięcia aplikacji z urządzenia powoduje błędne wykrycie.
Wszystkie inne aplikacje na moim urządzeniu są wyświetlane przez cały czas w języku hiszpańskim. Cały interfejs użytkownika wyświetla się po hiszpańsku.
AKTUALIZACJA: Testowałem na moim iPadzie (3rd gen), również z systemem iOS 6, i doświadczam tego samego zachowania.
UPDATE 2:
W didFinishLaunchingWithOptions, mam ten kod do wykrywania języka (język jest NSString *):
language = [[NSLocale preferredLanguages] objectAtIndex:0];
Obserwowani przez tego oświadczenia debugowania, aby porównywać wartość, którą otrzymuję, a także nieco inny sposób wykrywania, tylko do debugowania:
NSLog(@"Detected language: %@/%@", language, [[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0]);
Dane wyjściowe są wyświetlane jako "Wykryty język: es/es", gdy aplikacja działa poprawnie w trybie hiszpańskim, a następnie wyświetla się jako "Wykryty język: en/en", gdy nie jest. Wciąż nie mam pojęcia, dlaczego czasami ładuje się jako angielski ...
AKTUALIZACJA 4: Doceniam odpowiedzi wszystkich osób i próbowałem różnych sugestii. Niestety nie udało mi się przyznać +100 bounty, ponieważ żadna z propozycji nie rozwiązała problemu. Jeśli ktoś w końcu znajdzie rozwiązanie, które będzie dla mnie skuteczne, w tym czasie nagrodzę go kolejnym +50 nagrodami.
AKTUALIZACJA 5: Mam zaktualizowane z Xcode 4.5 do 4.5.2 i doświadczam tego samego problemu.
AKTUALIZACJA 6: Zrobiłem nowy projekt testowy od podstaw, i działa idealnie dobrze! Oczywiście coś musi być nie tak w sposobie, w jaki mój projekt został opracowany, lub może w jednym z plików danych. Chyba moja następna podróż będzie ponownie utworzyć projekt od zera, kopiowania danych plików przez jeden po drugim ...
UPDATE (7 miesięcy później): Niestety, jestem znowu w obliczu tego problemu po tymczasowo rozwiązać to (pozornie) przez staranne odtworzenie mojego projektu. Przy pierwszym załadowaniu język jest poprawnie renderowany, ale po kolejnych ładowaniach wraca z powrotem do angielskiego.
SOLVED Zobacz moje ostateczne rozwiązanie below. Dzięki za pomoc dla wszystkich. Mogę odłożyć trochę nagród, ponieważ i tak pójdzie na marne.
Nie mam zbyt wiele do podzielenia się z tobą, ale czy grałeś z parametrem "Uruchomiony język angielski" (angielski)? (Zobacz http://dl.dropbox.com/u/15994997/Screenshots/2h.png, który znajduje się w sekcji Zarządzaj Schematy). Wątpię, że to jest problem, ale to jedyna rzecz, która przychodzi do głowy zakładając, że twój kod jest w porządku. Założę się, że to zrobiłeś, ale spróbuj po prostu wydrukować język za pomocą NSLog zaraz po pobraniu go z ustawień narodowych i sprawdź, czy to nie jest reszta twojego kodu. – Mayjak
Testowałeś to na iOS 5? Może to błąd systemu iOS 6? – Lefteris
@Estarriol Dam twoją -AppleLanguage rzecz strzał po południu. Drukuję z NSLog zaraz po tym, jak otrzymam wartości, i zgłasza je jako "es" za pierwszym razem, gdy działa, a następnie "en", kiedy się nie udaje. Jeśli wyjdę z aplikacji, wszystko inne w iOS będzie nadal w języku hiszpańskim zgodnie z oczekiwaniami. –