2013-03-13 21 views
5

Chcę umożliwić moim użytkownikom wybór języka/lokalizacji, w których pojawia się moja aplikacja. Wyjaśniłem, jak załadować odpowiedni pakiet, wybrać odpowiednie pliki tekstowe, itp. Jednak niektóre elementy systemu wciąż wydaje mi się nie mieć kontroli. Przełącz na przykład sterowanie.iOS: Czy istnieje sposób na sfałszowanie ustawień regionalnych użytkownika?

Czy jest jakiś sposób, aby powiedzieć systemowi, że ta aplikacja powinna teraz zachowywać się w określonym języku, a nie bieżące ustawienia systemowe użytkownika?

+1

Whoa-whoo. 'method_setImplementation (class_getInstanceMethod ([klasa NSLocale], @selector (currentLocale)), (IMP) spoofedImpl);'? –

+2

Jakikolwiek sposób to zrobić bez swizzling? – Mike

+0

Czy próbowałeś utworzyć kategorię dla NSLocale, aby zwrócić wybrane ustawienia narodowe dla metod klasowych? –

Odpowiedz

5

Najmniej hacky sposobem jest poprzez NSUserDefaults: ustawienia jest określony przez AppleLocale (Locale ID jako łańcuch) i język jest określona przez pierwsze dopasowanie AppleLanguages (tablica języka ID); Twoja aplikacja może zastąpić te wartości domyślne: tylko dla Twojej aplikacji:. Aby sprawdzić, czy jest ona nadpisywana przez Twoją aplikację, możesz użyć czegoś takiego jak [defaults persistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]] objectForKey:@"AppleLocale"]. Aby usunąć zastąpienie, użyj -removeObjectForKey:.

Niezależnie od tego, kiedy to zrobisz, prawdopodobnie będziesz musiał zmienić język na relaunch the app; Aplikacje OS X i iOS po prostu nie są zaprojektowane do zmiany języka w czasie wykonywania (w OS X, tylko nowo uruchomione aplikacje widzą zmianę języka, w systemie iOS system zabija wszystkie aplikacje, aby zmienić język).

Dodałem tę funkcję, aby ułatwić zmianę języków programowania/testowania; Nie mam pojęcia, czy to nie powiedzie się proces przeglądu App Store.

+0

Dzięki @tc. Wygląda na to, że prawdopodobnie jest to coś, z dala od, ale doceniam szczegółową opcję. – Mike