Słów kilka o lokalizacji OS X

Wojtek Rolecki opublikował(a) wpis dnia 2009/02/13 w kategorii: Cocoa, Maktura

Na długo przed premierą Leoparda w 2007 roku gruchnęła wieść że 10.5 będzie również po polsku. Skazani na lingwistyczną niedolę polscy macuserzy skakali do góry z radości – wreszcie system po polsku, wreszcie będzie można podarować cioci/babci/dziadkowi Maka (bez konieczności jednoczesnego pełnienia funkcji kogoś w stylu pracownika helpdesku skrzyżowanego z biurem tłumaczeń) i, co doceniali najbardziej “hardkorowi” użytkownicy, wreszcie skończy się hegemonia niedołężnego Polonizatora dodawanego do poprzednich wersji systemu przez polskich resellerów (który, abstrahując od jego wartości dodanej, blokował aktualizacje, uniemożliwiał działanie niektórych aplikacji i inne takie-tam drobne uciążliwości).

To tyle historycznego wstępu. Leopard pojawił się w październiku 2007 roku i obyło się bez międzynarodowego skandalu – miał polską wersję.

Jak to się przedstawia z perspektywy programisty pracującego nad programem przeznaczonym dla konkretnego regionu kulturowo-językowego? Jak wiadomo językiem informatyki nie jest Java, C, Pascal, Perl, ani nawet Visual Basic, tylko… język angielski. Jako programiści, a więc osoby które generalnie “umieją komputery”, 99% czasu spędzamy z systemami i programami których interfejsy są po angielsku. Nadeszła jednak w pewnym momencie taka chwila, że musieliśmy kliknąć w ikonkę International i przestawić nasze Maczydła na język polski. Wszak trzeba się orientować w temacie przed napisaniem interfejsu do polskiego programu, żeby potem nie było “nie można open” i tym podobnych historii. Przełączyliśmy, poklikaliśmy – ogólnie OK, system jest po polsku. W miarę dłubania w kodzie i równoległego obcowania z interfejsem w ojczystym języku wyszło kilka śmiesznych kwiatków w tłumaczeniu OS X’a. Poniżej kilka z nich.

iTunes, które myśli że AIFF to jakieś urządzenie:

iTunes dla AIFF PL

Utwórz wersję dla AIFF

Bateria, która zdaje się mówić przedwojenną gwarą polsko-jidysz:

Baterie

Baterie jest naładowana

Model, który myśli że jest modemem (swoją drogą, brzemienny w treść komunikat):

Core Data model/modem

Model myśli że jest modemem

Wiadomo że to pierwsza polska lokalizacja systemu, napięte terminy, tłumacz się zagapił i/lub rozpędził (”Utwórz wersję dla iPoda”, “Utwórz wersję dla Apple TV”, a więc i “dla AIFF”; “model-modem” – same difference), każdemu się może zdarzyć :-)

Ale lokalizacja systemu nie implikuje tylko nowych komunikatów, napisów (”Okno” zamiast “Window”) i nagłego wydłużenia większości przycisków w elementach UI (”Reply all” vs. “Odpowiedz wszystkim”) – jest jeszcze trochę nieoczywistych aspektów – odpowiednie formatowanie liczb (i ich części “po przecinku”), kwot w danej walucie (i nazwy walut), formatu dat, nazw dni tygodnia, miesięcy, i tym podobnych. To są rzeczy, z którymi siłą rzeczy musieliśmy mieć do czynienia podczas tworzenia programu do faktur.
 
Na pierwszy strzał poszły nazwy miesięcy – bomba, ustawiamy polskie locale i wypełniamy menu z terminem płatności, generując daty w pożądanym formacie ([dzień] [miesiąc], [dzień tygodnia]) przy pomocy obiektu klasy NSDateFormatter:
 

NSDateFormatter *longDateFormatter = [[NSDateFormatter alloc] init];
[longDateFormatter setLocale: [[NSLocale alloc] initWithLocaleIdentifier:@"pl_PL"]];
[longDateFormatter setDateFormat:@"d MMMM, EEEE"];

Odpalamy i… Szok! Krwawa bójka w posiadłości Angeliny! Khem. To znaczy oglądamy daty i widzimy, że nie dość że są polskie nazwy miesięcy i dni tygodnia, to nawet nie mamy historii typu “2 luty”, “13 grudzień”, tylko “2 lutego”, “13 grudnia” i tak dalej. Brawo.

Jedziemy zatem dalej, dojeżdżamy do miejsca, które napawa odrazą wielu programistów – kwota słownie, czyli sadomasochistyczne historie z polskimi liczebnikami. Długa chwila zadumy nad własnym losem i… “Zaraz, gdzieś w panelu Interface Buildera widziałem jakiś number formatter, przy którym było coś o walucie”. Następnie krótka chwila szaleńczego przeklikiwania się przez interfejs i dokumentację i jest, jest… uratowani! NSNumberFormatter ze stylem NSNumberFormatterSpellOutStyle powinien załatwić sprawę:
 

NSNumberFormatter *totalAmountFormatter = [[NSNumberFormatter alloc] init];
[totalAmountFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"pl_PL"]];
[totalAmountFormatter setNumberStyle:NSNumberFormatterSpellOutStyle];
 
NSString *s = [NSString stringWithFormat:@"%@ zł. %@ gr.",
  [totalAmountFormatter stringFromNumber: [NSNumber numberWithInt:31337]],
  [totalAmountFormatter stringFromNumber: [NSNumber numberWithInt:23]]];     
 
NSLog(@"słownie: %@", s);

 
Kompilujemy, uruchamiamy, przecieramy oczy ze zdumienia:

słownie: trzydzieści jeden tysiący trzysta trzydzieści siedem zł. dwadzieścia trzy gr.

To działa! Radości nie było końca, a nawet wręcz przeciwnie – było. Wspólnie ustaliliśmy że słowo “tysiący” nie będzie dobrze wyglądać na czyjejś fakturze i wróciliśmy do punktu wyjścia.

Jak widać na załączonych przykładach, drobne błędy w lokalizacji systemu są bardzo zabawne… dopóki nie trzeba klepać kodu, który robi coś, co można było mieć za darmo. ;-)

4 odpowiedzi do “Słów kilka o lokalizacji OS X”

  1. em napisał(a):

    Protip: zapoznac sie z dokumentacja NSMutableString zamiast pisac calosc od nowa.

  2. Wojtek Rolecki napisał(a):

    @em: do licha, zdradziłeś Secret Ingredient. :-)

  3. pemmax napisał(a):

    Mam nadzieję, że Panowie już zaraportowali błędy na odpowiednio przygotowanej do tego stronie. Jeśli nie to podpowiadam – http://developer.apple.com/BugReporter/
    Błędów w lokalizacji trudno uniknąć. Można je natomiast poprawić. Jest to jednak możliwe tylk wówczas, gdy damy autorowi znać o pomyłkach.

  4. Zbigniew Sobiecki napisał(a):

    @pemmax: jasne, błąd od razu zgłosiliśmy przez Radar.