Praca z lokalizacją systemu watchOS na platformie Xamarin
Dostosowywanie aplikacji systemu watchOS dla wielu języków
Aplikacje systemu watchOS są zlokalizowane przy użyciu standardowych metod systemu iOS:
- Używanie identyfikatora lokalizacji w elementach scenorysu,
- Pliki ciągów skojarzone z scenorysem i
- Pliki Localizable.strings dla tekstu używanego w kodzie.
Domyślne scenorysy i zasoby znajdują się w katalogu Podstawowym , a tłumaczenia specyficzne dla języka i inne zasoby są przechowywane w katalogach lproj . System operacyjny iOS i Watch automatycznie będą używać wybranego języka użytkownika do ładowania poprawnych ciągów i zasobów.
Ponieważ aplikacja Apple Watch ma dwie części — aplikacja zegarka i rozszerzenie zegarka — zlokalizowane zasoby ciągów są wymagane w dwóch miejscach, w zależności od sposobu ich użycia.
Zlokalizowany tekst i zasoby będą się różnić w aplikacji zegarka i rozszerzeniu zegarka.
Aplikacja do obejrzenia
Aplikacja do obejrzenia zawiera scenorys opisujący interfejs użytkownika aplikacji. Wszystkie kontrolki (takie jak Label
i Image
), które obsługują lokalizację, mają identyfikator lokalizacji.
Każdy katalog lproj specyficzny dla języka powinien zawierać pliki ciągów z tłumaczeniami dla każdego elementu (przy użyciu identyfikatora lokalizacji), a także obrazy, do których odwołuje się scenorys.
Rozszerzenie zegarka
Rozszerzenie zegarka to miejsce, w którym jest uruchamiany kod aplikacji. Każdy tekst wyświetlany użytkownikowi z kodu musi być zlokalizowany w rozszerzeniu, a nie w aplikacji zegarka.
Rozszerzenie powinno również zawierać katalogi lproj specyficzne dla języka, ale pliki strings wymagają tłumaczenia tekstu używanego w kodzie.
Globalizowanie rozwiązania do obserwowanych
Globalizacja to proces lokalizowania aplikacji.
W przypadku aplikacji do oglądania oznacza to zaprojektowanie scenorysu z uwzględnieniem różnych długości tekstu, dzięki czemu każdy układ ekranu odpowiednio dostosowuje się w zależności od tego, jaki tekst jest wyświetlany. Należy również upewnić się, że wszystkie ciągi, do których odwołuje się kod rozszerzenia zegarka, można przetłumaczyć przy użyciu LocalizedString
metody .
Aplikacja do obejrzenia
Domyślnie aplikacja zegarka nie jest skonfigurowana do lokalizacji. Musisz przenieść domyślny plik scenorysu i utworzyć inne katalogi dla tłumaczeń:
Utwórz katalog Base.lproj i przenieś do niego plik Interface.storyboard .
Utwórz <katalogi language.lproj> dla każdego języka, który chcesz obsługiwać.
Katalogi lproj powinny zawierać plik tekstowy Interface.strings (nazwa pliku powinna być zgodna z nazwą schowka). Opcjonalnie możesz umieścić wszystkie obrazy, które wymagają lokalizacji w tych katalogach.
Projekt aplikacji zegarka wygląda następująco po wprowadzeniu tych zmian (dodano tylko pliki języka angielskiego i hiszpańskiego):
Tekst scenorysu
Podczas edytowania scenorysu zaznacz każdy element i zwróć uwagę na identyfikator lokalizacji wyświetlany w okienku Właściwości :
W folderze Base.lproj utwórz pary klucz-wartość, jak pokazano poniżej, gdzie klucz jest tworzony przez identyfikator lokalizacji i nazwę właściwości w kontrolce, połączone kropką (.
).
"AgC-eL-Hgc.title" = "WatchL10nEN"; // interface controller title
"0.text" = "Welcome to WatchL10n"; // Welcome
"1.text" = "Language settings are in Apple Watch App"; // How to change language
"2.title" = "Greetings"; // Greeting
"6.title" = "Detail";
"39.text" = "Second screen";
Zwróć uwagę, że w tym przykładzie identyfikator lokalizacji może być prostym ciągiem liczbowym (np. "0", "1" itp.) lub bardziej złożony ciąg (np. "AgC-eL-Hgc"). Label
kontrolki Text
mają właściwość i Button
mają Title
właściwość, która jest odzwierciedlana w sposób ustawiania ich zlokalizowanych wartości — pamiętaj, aby użyć nazwy właściwości małej litery, jak pokazano w powyższym przykładzie.
Po renderowaniu scenorysu w zegarku poprawne wartości zostaną automatycznie wyodrębnione i wyświetlane zgodnie z językiem wybranym przez użytkownika.
Obrazy scenorysu
Przykładowe gradient@2x.png rozwiązanie zawiera również obraz w każdym folderze języka. Ten obraz może być inny dla każdego języka (np. może zawierać osadzony tekst, który wymaga tłumaczenia, lub używać zlokalizowanej ikonografii).
Po prostu ustaw właściwość Image obrazu w scenorysie, a prawidłowy obraz będzie renderowany na zegarku zgodnie z językiem wybranym przez użytkownika.
Uwaga: ponieważ wszystkie zegarki Apple Watch mają wyświetlacze Retina, wymagana jest tylko @2x wersja obrazu. Nie trzeba określać @2x w scenorysie.
Rozszerzenie zegarka
Rozszerzenie zegarka wymaga podobnej struktury katalogów do obsługi lokalizacji, jednak nie ma scenorysu. Zlokalizowane ciągi w rozszerzeniu to tylko te, do których odwołuje się kod języka C#.
Ciągi w kodzie
Plik Localizable.strings ma nieco inną strukturę niż w przypadku skojarzenia z scenorysem. W tym przypadku możemy wybrać dowolny ciąg "klucz"; Zaleceniem firmy Apple jest użycie klucza odzwierciedlającego rzeczywisty tekst, który będzie wyświetlany w języku domyślnym:
"Breakfast time" = "Breakfast time!"; // morning
"Lunch time" = "Lunch time!"; // midday
"Dinner time" = "Dinner time!"; // evening
"Bed time" = "Bed time!"; // night
Metoda NSBundle.MainBundle.LocalizedString
służy do rozpoznawania ciągów w przetłumaczonych odpowiednikach, jak pokazano w poniższym kodzie.
var display = "Breakfast time";
var localizedDisplay =
NSBundle.MainBundle.LocalizedString (display, comment:"greeting");
displayText.SetText (localizedDisplay);
Obrazy w kodzie
Obrazy wypełnione kodem można ustawić na dwa sposoby.
Kontrolkę
Image
można zmienić, ustawiając jej wartość na nazwę ciągu obrazu, który już istnieje w aplikacji do oglądania, np.displayImage.SetImage("gradient"); // image in Watch App (as shown above)
Obraz można przenieść z rozszerzenia do zegarka przy użyciu polecenia
FromBundle
, a aplikacja automatycznie wybierze prawidłowy obraz do wyboru języka użytkownika. W przykładowym rozwiązaniu istnieje obraz language@2x.png w każdym folderze języka, który jest wyświetlanyDetailController
przy użyciu następującego kodu:using (var image = UIImage.FromBundle ("language")) { displayImage.SetImage (image); }
Należy pamiętać, że nie trzeba określać @2x podczas odwoływania się do nazwy pliku obrazu.
Druga metoda ma zastosowanie również w przypadku pobrania obrazu z serwera zdalnego do renderowania na zegarku; jednak w takim przypadku należy upewnić się, że pobrany obraz jest poprawnie zlokalizowany zgodnie z preferencjami użytkownika.
Lokalizacja
Po skonfigurowaniu rozwiązania tłumacze będą musieli przetworzyć pliki i obrazy ciągów dla każdego języka, który chcesz obsługiwać.
Możesz utworzyć dowolną liczbę katalogów lproj (po jednym dla każdego obsługiwanego języka). Są one nazwane przy użyciu kodów językowych, takich jak en, es, de, ja, pt-BR itp. (odpowiednio dla języka angielskiego, hiszpańskiego, niemieckiego, japońskiego i portugalskiego (Brazylijczyk).
Dołączony przykład używa (generowanych maszynowo) tłumaczeń, aby zademonstrować sposób lokalizowania aplikacji systemu watchOS.
Aplikacja do obejrzenia
Te wartości służą do tłumaczenia interfejsu użytkownika zdefiniowanego w scenorysie aplikacji zegarka. Wartość klucza jest kombinacją identyfikatora lokalizacji kontrolki scenorysu i przetłumaczonej właściwości.
Zaleca się dodawanie komentarzy zawierających oryginalny tekst do pliku, aby tłumacze wiedzieli, co powinno być tłumaczenie.
es.lproj/Interface.strings
Poniżej przedstawiono ciągi języka hiszpańskiego (przetłumaczone maszynie) dla scenorysu. Warto dodać komentarze do każdego wiersza, ponieważ trudno jest wiedzieć, do czego odnosi się identyfikator lokalizacji w przeciwnym razie:
"AgC-eL-Hgc.title" = "Spanish"; // app screen heading
"0.text" = "Bienvenido a WatchL10n"; // Welcome to WatchL10n
"1.text" = "Ajustes de idioma están en Apple Watch App"; // Change the language in the Apple Watch App
"2.title" = "Saludos"; // Greetings
"6.title" = "2nd"; // second screen heading
"39.text" = "Segunda pantalla"; // second screen
Rozszerzenie zegarka
Te wartości są używane w kodzie do tłumaczenia informacji przed wyświetleniem ich użytkownikowi. Klucz jest wybierany przez dewelopera podczas pisania kodu i zwykle zawiera rzeczywisty ciąg do tłumaczenia.
Plik es.lproj/Localizable.strings
Ciągi języka spansish (przetłumaczone maszyny):
"Breakfast time" = "la hora del desayuno"; // morning
"Lunch time" = "hora de comer"; // midday
"Dinner time" = "hora de la cena"; // evening
"Bed time" = "la hora de dormir"; // night
Testowanie
Metoda zmiany preferencji języka różni się między symulatorem a urządzeniami fizycznymi.
Symulator
W symulatorze wybierz język do przetestowania przy użyciu aplikacji Ustawienia systemu iOS (szare koła zębate na ekranie głównym symulatora).
Oglądaj urządzenie
Podczas testowania za pomocą zegarka zmień język zegarka w aplikacji Apple Watch na sparowanym urządzeniu i Telefon.