2009-06-01 12 views
10

Chcę zlokalizować ciągi znaków w mojej aplikacji na iphone dla en_GB i innych pod-języków "en", ale XCode i iphone nie pozwalają na to. Stworzyłem lokalizację "Localizable.strings" dla en_GB i en_US (próbowałem zarówno myślników, jak i podkreśleń) do celów testowych, ale one po prostu nie są rozpoznawane. Jedyny kod języka, który działa, to po prostu "en" (wyświetlane jako "English" w XCode).iPhone en_ * lokalizacja sublanguage

Nie mogę uwierzyć, że to niemożliwe, więc co robię źle? Mam także nadzieję na zachowanie typowego "kaskadowania", jeśli nie znaleziono ciągu w podfirmie, np. "en_GB", jeśli to możliwe, powinno zostać pobrane z "en". Wsparcie?

Odpowiedz

6

Po wybraniu "Angielski" z listy języków w preferencjach iPhone'a, oznacza to faktycznie język "en_US".

Tak długo, aż jabłko zaktualizuje swoje oprogramowanie o dodatkowe podhasła, takie jak "angielski (brytyjski)" itp., Pozostaje nam tylko ustawienie regionu lokalnego i ręczne ładowanie łańcuchów z innej tabeli napisów.

Jednak język i regionalne ustawienia regionalne są oddzielone z jednego powodu: hiszpański użytkownik w Wielkiej Brytanii może chcieć dat/godzin sformatowanych zgodnie z lokalnymi zwyczajami, ale ciągi programów w ich ojczystym języku. Niewłaściwe byłoby wykrycie regionalnych ustawień regionalnych (UK), a zatem wyświetlanie łańcuchów brytyjskich.

Zasadniczo nie ma obecnie sposobu, aby to zrobić.

+0

Dobra odpowiedź! Jednakże rodzi to pytanie: jaki jest dobry format ustawienia regionu, jeśli nie do lokalizacji ciągów znaków? –

+0

Ustawienie regionu służy do formatowania dat, walut, aby wybrać, które znaki oddzielają cyfry ułamkowe w liczbie itp. –

4

To, co robisz, powinno działać zgodnie z dokumentami. Wygląda jednak na to, że implementacja iPhoneOS jest niezgodna z dokumentacją. Zgodnie z Radar 6158876, nie ma obsługi języka en_GB, tylko locale (formaty daty i tym podobne).

1

Znalazłem ten sam problem.

BTW, jeśli spojrzeć na iPhone Ustawienia -> Ogólne -> menu międzynarodowe, czyni rozróżnienie między językiem i regionu całkiem jasne:

Języki:
-Angielski Format

Region:
-Wielka Zjednoczone
-Wielka Brytania

ramy lokalizacja pojawia się tylko zwrócić uwagę na l Anguage, a nie region.

Mam ochotę zgłosić prośbę o ulepszenie do firmy Apple, ponieważ IMO jest uzasadnione, że użytkownik może chcieć używać brytyjskiego angielskiego (dla tekstu) będąc w Stanach Zjednoczonych (gdzie, powiedzmy, numery telefonów powinien być w formacie amerykańskim).

1

Utwórz osobny zasób ciągów, na przykład UKLocalization.strings, i utwórz lokalizacje dla każdego obsługiwanego języka. Dla wszystkich lokalizacji innych niż en ten plik jest pusty. Dla en zawiera tylko ciągi, które mają unikalną pisownię en_GB.

Następnie należy utworzyć zamiennik dla NSLocalizationString, który najpierw sprawdzi tabelę UKLocalization, a następnie powróci do standardowej tabeli lokalizacji.

np.:

static NSString* _locTable = nil; 
void RTLocalizationInit() 
{ 
    _locTable = nil; 

    NSString* country = [[NSLocale currentLocale] objectForKey:NSLocaleCountryCode]; 
    if ([country isEqual:@"GB"]) 
    { 
     _locTable = @"UKLocalization"; 
    } 
} 

NSString* RTLocalizedString(NSString* key, NSString* ignored) 
{ 
    NSString* value = nil; 
    value = [[NSBundle mainBundle] localizedStringForKey:key value:nil table: _locTable]; 
    if (value == key) 
    { 
     value = NSLocalizedString(key, @""); 
    } 
    return value; 
} 
1

Nie jestem pewien, w którą wersję iOS został wprowadzony, ale iOS 7 pewno ma preferencje językowe A „British English” który zbierze zasoby z katalogu en_GB.lproj. Różne hacki pływające po sieci nie powinny być konieczne, chyba że szukasz bardziej wyspecjalizowanego * dialektu.

* Zobacz, co zrobiłem;)

+0

Czy na pewno to działa? Użyłem jednego z hacków: http://stackoverflow.com/questions/3308519/iphone-app-localization-english-problems. Ale ios 8.1 złamał ten hack. Tak więc próbuję wdrożyć twoje rozwiązanie. Moje lokalizacje en_GB.lproj nie są pobierane. – Mike

+0

Problem polega na tym, że użytkownik jest w Wielkiej Brytanii, ale (rozsądnie) wybiera swój język jako "angielski" zamiast "brytyjski angielski". Aplikacja jest następnie zlokalizowana dla języka angielskiego w USA –