Tworzenie wersji językowych aplikacji (iOS)

Zacznijmy zatem od stworzenia prostego projektu składającego się z jednej etykiety i jednego rysunku. Będzie to wersja angielska naszej aplikacji. Później dodamy obsługę wersji polskiej.
- Tworzymy nowy projekt View-based Application o nazwie LangProject.
- Edytujemy plik LangProjectViewController.xib i umieszczamy w widoku obiekt Label. Nadajemy mu treść "Hello, World!".
- Dodajemy do projektu jakiś plik graficzny, np. Rysunek.png, a następnie umieszczamy w widoku obiekt Image View i wyświetlamy w nim dołączony rysunek.
- Przechodzimy do pliku LangProjectViewController.h i dodajemy w nim właściwość label.
#import <UIKit/UIKit.h>
@interface LangProjectViewController : UIViewController
{
IBOutlet UILabel *label;
}
@property (nonatomic, retain) IBOutlet UILabel *label;
@end
- W pliku LangProjektViewController.m również dodajemy obsługę tej właściwości.
#import "LangProjectViewController.h"
@implementation LangProjectViewController
@synthesize label;
-(void)dealloc {
[label release];
[super dealloc];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
#pragma mark - View lifecycle
- (void)viewDidLoad
{
[super viewDidLoad];
}
- (void)viewDidUnload
{
[super viewDidUnload];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
@end
- Wracamy do pliku LangProjektViewController.xib i tworzymy połączenie obiektu Label z właściwością label.
- Po uruchomieniu programu powinien on wyglądać tak:

Możemy teraz rozpocząć przygotowanie polskiej wersji językowej aplikacji. W tym celu:
- Klikamy prawy klawisz myszy w oknie z listą plików i z menu podręcznego wybieramy New File. Pokaże się okno wyboru szablonu. Wybieramy szablon Strings File z sekcji Resources. Plik nazywamy Localizable.strings.
- Stworzony zostanie nowy plik w naszym projekcie. Przechodzimy do jego edycji i wpisujemy:
/* Localizable.strings LangProject Created by _Autor_ on 23.08.2011. Copyright 2011 __MyCompanyName__. All rights reserved. */ "LabelPowitanie"="Hello, World!";
- Jest to plik, w którym nadajemy dowolnym etykietom pewne wartości. Zarówno etykiety jak i wartości umieszczamy w cudzysłowach i rozdzielamy znakiem "=". Z poziomu kodu źródłowego możemy odwoływać się do tych etykiet korzystając z funkcji NSLocalizedString. Dopiszmy więc dodatkową linię w pliku LangProjektViewController.m.
- (void)viewDidLoad
{
[super viewDidLoad];
label.text=NSLocalizedString(@"LabelPowitanie", @"Witaj Świecie");
}
Jako pierwszy parametr funkcji NSLocalizedString podajemy etykietę, którą użyliśmy w pliku Localizable.strings. W naszym przykładzie użyliśmy etykiety LabelPowitanie, także funkcja ta zwróci tekst "Hello, World!" - tekst przypisany do tej etykiety. Drugi z parametrów to komentarz. Informuje on nas tylko o tym, co znajduje się pod tą etykietą (czasami etykiety nazywa się np. P001, P002, P003 i wówczas w kodzie trudno byłoby się domyśleć, co pod etykietą się znajduje).
Zaznaczamy plik Localizable.strings w oknie plików i przełączamy się na zakładkę File Inspector (prawy panel). Odszukujemy sekcję Localization i wciskamy w niej ikonkę +. Nasz plik zostanie odznaczony, zaznaczamy więc go ponownie. W okienku Localization widoczny będzie wpis English. Klikamy ponownie w ikonę + i z menu, które się pojawi wybieramy Polish (PL).
W ten sposób stworzyliśmy nasz plik w dwóch wersjach językowych - polskiej i angielskiej. Kiedy nasz program uruchomiony będzie na iPhone z ustawionym językiem polskim - załaduje się polska wersja tego pliku. Kiedy będzie to iPhone z angielską wersją językową - wczyta się także angielska wersja językowa tego pliku. W oknie z listą plików obok Localizable.strings pojawiła się mała strzałeczka. Klikając ją rozwiniemy drzewo zapewniające dostęp do obu wersji językowych pliku. Zaznaczmy zatem Localizable.strings (Polish) i w edytorze wpisujemy:
/* Localizable.strings LangProject Created by _Autor_ on 23.08.2011. Copyright 2011 __MyCompanyName__. All rights reserved. */ "LabelPowitanie"="Witaj Świecie!";
Uwaga! Jeśli po uruchomieniu programu, pomimo ustawienia polskiej wersji językowej w symulatorze, nadal nie widzimy komunikatu "Witaj Świecie", powinniśmy usunąć program z symulatora, wybrać z menu Product opcję Clean, później Build i uruchomić go ponownie, aby zainstalowała się nowa wersja dwujęzyczna.
W powyższy sposób powinniśmy odwoływać się do wszystkich komunikatów w naszym programie. Również wszelkie napisy wyświetlane w różnych obiektach powinny być pobierane z pliku Localizable.strings. Dzięki temu rozwiązaniu, tłumacząc tylko ten jeden plik na dowolny język, stworzymy nową lokalizację naszej aplikacji.
Czasami może zajść jeszcze potrzeba dodania odpowiedniej wersji językowej rysunku umieszczonego w programie. Robimy to tak samo jak tłumaczyliśmy plik Localizable.strings, a więc - odszukujemy plik Rysunek.png i dodajemy do niego dwie lokalizacje: English i Polish. Następnie rozwijamy drzewko obok Rysunek.png i zaznaczamy Rysunek.png (Polish). Klikamy na nim prawy klawisz myszy i z menu, które się pojawi wybieramy Show in Finder. Pokaże się okno Findera a w nim zaznaczony będzie plik Rysunek.png. Ma to być wersja polska tego pliku, dlatego skopiujmy w to miejsce nową jego wersję, zastępując dotychczasową.
Dokładnie w ten sam sposób możemy dodać do projektu różne wersje ikony i splasha.
- Teraz, po uruchomieniu programu ujrzymy okno:

Korzystając z powyższej metody możemy również dodawać nowe wersje językowe wszystkich plików XIB. Wystarczy zaznaczyć taki plik, stworzyć lokalizacje np. Polish i English, a następnie przetłumaczyć taki plik. Rozwiązanie to ma jednak pewne wady. Po pierwsze, mamy problem z wysłaniem takiego pliku do tłumacza i po drugie - zmieniając coś w interfejsie zmieniać będziemy tylko wersję danego języka. Dlatego odradzam tę metodę na rzecz przedstawionej wcześniej.
Ostatnia rzecz, jaka jeszcze może się przydać - to tłumaczenie tytułu aplikacji. Jeśli chcemy przygotować różne wersje tytułu (wyświetlanego na springboardzie) musimy odszukać pliku _InfoPlist.strings__ i stworzyć jego lokalizacje Polish i English. Następnie należy edytować te pliki i dodać do nich wpis (w przykładzie otworzony jest plik InfoPlist.strings Polish).
/* Localized versions of Info.plist keys */ "CFBundleDisplayName" = "Tytuł Polski";
Aby dodawać komentarze musisz być zalogowany!
