Udostępnij za pośrednictwem


Praca z lokalizacją systemu watchOS na platformie Xamarin

Dostosowywanie aplikacji systemu watchOS dla wielu języków

Usługa Apple Watch wyświetla zlokalizowaną zawartość

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ń:

  1. Utwórz katalog Base.lproj i przenieś do niego plik Interface.storyboard .

  2. Utwórz <katalogi language.lproj> dla każdego języka, który chcesz obsługiwać.

  3. 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):

Projekt aplikacji do oglądania z plikami w języku angielskim i hiszpańskim

Tekst scenorysu

Podczas edytowania scenorysu zaznacz każdy element i zwróć uwagę na identyfikator lokalizacji wyświetlany w okienku Właściwości :

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 Buttonmają 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.

Ustawianie właściwości image obrazów w scenorysie

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#.

Struktura katalogu rozszerzenia zegarka do obsługi lokalizacji

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.

  1. 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)
    
  2. 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świetlany DetailController 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).

Ustawienia lokalizacji aplikacji systemu iOS Ustawienia

Oglądaj urządzenie

Podczas testowania za pomocą zegarka zmień język zegarka w aplikacji Apple Watch na sparowanym urządzeniu i Telefon.

Zmień język zegarka w aplikacji Apple Watch na sparowanym urządzeniu i Telefon