Lokalizacja
W tym przewodniku przedstawiono pojęcia związane z internacjonalizacją i lokalizacją oraz linki do instrukcji dotyczących tworzenia aplikacji mobilnych platformy Xamarin przy użyciu tych pojęć.
Jeśli chcesz przejść bezpośrednio do szczegółów technicznych lokalizowania aplikacji platformy Xamarin, zacznij od jednego z tych artykułów z instrukcjami specyficznymi dla platformy:
- Lokalizacja międzyplatformowa zestawu narzędzi Xamarin.Forms przy użyciu plików RESX.
- Lokalizacja platformy natywnej platformy Xamarin.iOS .
- Lokalizacja platformy natywnej platformy Xamarin.Android .
i18n i L10n
Internacjonalizacja to proces tworzenia kodu w stanie wyświetlać różne języki i dostosowywać jego wyświetlanie dla różnych ustawień regionalnych (takich jak formatowanie liczb i dat). Jest to również nazywane globalizacją.
Lokalizacja to krok, który następuje — tworzenie zasobów (takich jak ciągi i obrazy) dla każdego języka i łączenie ich za pomocą aplikacji na arenie międzynarodowej.
Internacjonalizacja jest często skracana do i18n – skrót od 18 liter między "i" i "n". Lokalizacja jest podobnie skrócona do L10n — dla 10 liter między "L" i "n".
Omówienie
W tym dokumencie przedstawiono pojęcia związane z międzynarodową i lokalizacją oraz sposób ich stosowania do opracowywania aplikacji mobilnych. Podczas projektowania i kompilowania aplikacji elementy, które mogły wcześniej być zakodowane na stałe, ale które muszą być sparametryzowane dla lokalizacji, obejmują:
- Układy ekranu i tekst,
- Ikony, grafika i kolory,
- Pliki wideo i dźwiękowe,
- Dynamiczne formatowanie tekstu i tekstu (takie jak liczby, waluta i daty),
- Zmiany układu dla języków od prawej do lewej (RTL) i
- Sortowanie danych.
Niezależnie od tego, które platformy mobilne aplikacja jest przeznaczona dla tych wskazówek, pomoże Ci utworzyć zlokalizowaną aplikację o wysokiej jakości.
Zagadnienia dotyczące projektowania
Tworzenie architektury aplikacji w taki sposób, aby można było lokalizować jej zawartość, jest nazywana internacjonalizacją. Prawidłowe przeprowadzenie internacjonalizacji to nie tylko umożliwienie załadowania różnych ciągów językowych w czasie wykonywania — dobrze zaprojektowana aplikacja powinna umożliwić zmianę wszystkich zasobów na podstawie języka i ustawień regionalnych (w tym obrazów, dźwięków i filmów wideo) oraz dostosowanie formatowania i układu w celu radzenia sobie z różnymi ciągami o różnych rozmiarach.
W tej sekcji omówiono niektóre zagadnienia dotyczące projektowania, które należy wziąć pod uwagę podczas tworzenia aplikacji z internacjonalizowaną.
Układy i długość ciągu
Ciągi chińskie i japońskie mogą być bardzo krótkie — czasami jeden lub dwa znaki mogą być wystarczająco znaczące dla etykiety pola wejściowego.
Ciągi niemieckie (na przykład) mogą być bardzo długie; czasami stosunkowo krótkie słowo w języku angielskim staje się bardzo długie w innych językach — albo zostaje obcięty lub nieoczekiwanie zmienia układ.
Porównaj długości ciągów dla kilku elementów na ekranie głównym systemu iOS w języku angielskim, niemieckim i japońskim:
Zwróć uwagę, że Ustawienia w języku angielskim (8 znaków) wymaga 13 znaków tłumaczenia w języku niemieckim, ale tylko 2 znaki w języku japońskim.
Układy, w których etykieta wyświetlana i pole wejściowe są obok siebie, są trudne do pracy, gdy długość etykiety może się znacznie różnić. Często układ, w którym etykieta jest wyświetlana powyżej pola, jest łatwiej lokalizować, ponieważ pełna szerokość ekranu jest dostępna zarówno dla etykiety, jak i danych wejściowych.
Ogólnie rzecz biorąc, jeśli tworzysz stałe układy (zwłaszcza elementy obok siebie) zezwalają na co najmniej 50% większą szerokość niż w przypadku etykiet i tekstu w języku angielskim. Nie rozwiąże to każdego problemu, ale zapewni bufor, który będzie działać w wielu przypadkach.
Weryfikacja danych wejściowych
Uważaj na założenia podczas pisania reguł walidacji. Może się wydawać, że wymagane jest wprowadzenie w polu tekstowym co najmniej trzech znaków w języku angielskim, ponieważ pojedyncza litera bardzo rzadko ma jakiekolwiek znaczenie. W języku chińskim i japońskim pojedynczy znak może być prawidłowym wejściem, a komunikat weryfikacji "co najmniej 3 znaki są wymagane" nie ma sensu w przypadku tych języków.
Inne pozornie proste zadania, takie jak weryfikowanie adresu e-mail lub adresu URL witryny internetowej, stają się bardziej skomplikowane z znakami, nie są ograniczone do podzestawu ASCII.
Napisz reguły walidacji z uwzględnieniem międzynarodowych — wybierz najmniej restrykcyjne reguły lub napisz logikę tak, aby działała inaczej dla każdego języka.
Obrazy i kolor
Nie każdy obraz musi ulec zmianie w zależności od wyboru języka użytkownika. Wiele ikon lub zdjęć będzie odpowiednich dla wszystkich użytkowników, niezależnie od tego, jaki język mówią. Niektóre zasoby mają sens jednak lokalizować, takie jak:
- Obrazy przedstawiające osoby lub określone lokalizacje — aplikacja może wydawać się bardziej odpowiednia dla użytkowników, jeśli wyświetla lokalne osoby/lokalizacje.
- Ikony — niektóre ikonografie mogą być specyficzne dla kultury i możesz ułatwić korzystanie z aplikacji, lokalizując obrazy w celu odzwierciedlenia lokalnych informacji.
- Kolory — niektóre kultury rozumieją kolory inaczej — kolor czerwony może oznaczać ostrzeżenie w jednym regionie, ale szczęście w innym. Podczas projektowania aplikacji należy zapoznać się z prelegentami natywnymi, aby określić, czy należy utworzyć mechanizm lokalizowania kolorów.
Filmy wideo i dźwięk
Filmy wideo i dźwięk stanowią szczególne wyzwania podczas lokalizowania aplikacji, ponieważ chociaż stosunkowo łatwo jest uzyskać przetłumaczone ciągi, nagrywanie wielu utworów głosowych lub klipów wideo może być zarówno kosztowne, jak i trudne.
Wiele kopii plików wideo i dźwiękowych może również znacznie zwiększyć rozmiar aplikacji (zwłaszcza jeśli lokalizujesz w dużej liczbie języków lub masz wiele plików multimedialnych). Możesz rozważyć pobranie tylko wymaganych zasobów językowych po zainstalowaniu aplikacji przez użytkownika, ale może to również spowodować słabe środowisko użytkownika w wolnych sieciach.
Często istnieje wiele sposobów rozwiązywania problemów z lokalizacją — najważniejszą rzeczą jest rozważenie ich z góry i upewnienie się, że aplikacja została zaprojektowana pod kątem ich obsługi.
Daty, godziny, liczby i waluta
Jeśli używasz funkcji formatowania platformy .NET, pamiętaj, aby określić kulturę tak, aby separatory dziesiętne były analizowane poprawnie (i unikać zgłaszania wyjątków konwersji). Na przykład zarówno 1,99, jak i 1,99 są prawidłowymi reprezentacjami dziesiętnych w zależności od ustawień regionalnych.
Gdy dane pochodzą ze znanego źródła (tj. z własnego kodu lub kontrolowanej usługi internetowej), możesz zakodować identyfikator kultury zgodny z formatowaniem, takim jak InvariantCulture, który będzie działać na potrzeby standardowego formatowania języka angielskiego.
double.Parse("1,999.99", CultureInfo.InvariantCulture);
Jeśli dane są wprowadzane przez użytkownika aplikacji, przeanalizuj je przy użyciu wystąpienia CultureInfo, które odzwierciedla ich ustawienia regionalne:
double.Parse("1 999,99", CultureInfo.CreateSpecificCulture("fr-FR"));
Aby uzyskać dodatkowe informacje, zobacz artykuły MSDN Analizowanie ciągów liczbowych i analizowania ciągów daty i godziny.
Języki od prawej do lewej (RTL)
Niektóre języki, takie jak arabski, hebrajski i urdu (na przykład), są odczytywane od prawej do lewej. Aplikacje, które obsługują te języki, powinny używać projektów ekranu, które dostosowują się do czytników od prawej do lewej, na przykład:
- Tekst powinien być wyrównany do prawej.
- Etykiety powinny być wyświetlane po prawej stronie pól wejściowych.
- Domyślne umieszczanie przycisków jest zwykle odwrócone.
- Hierarchiczne przesuwanie i animacja nawigacji (oraz inne metafory nawigacji i animacje), które używają kierunku dla kontekstu, również powinny zostać odwrócone.
Systemy iOS i Android obsługują układy od prawej do lewej i renderowanie czcionek z wbudowanymi funkcjami, które ułatwiają wprowadzanie powyższych korekt. Zestaw narzędzi Xamarin.Forms nie obsługuje obecnie automatycznego renderowania biblioteki RTL.
Sortowanie
Różne języki definiują kolejność sortowania alfabetów inaczej, nawet jeśli używają tego samego zestawu znaków.
Zobacz szczegóły porównania ciągów w najlepszych rozwiązaniach dotyczących używania ciągów w programie .NET Framework, aby zapoznać się z przykładem, w którym język (CultureInfo) ma wpływ na kolejność sortowania.
Jest mało prawdopodobne, że wbudowane funkcje bazy danych na platformach mobilnych będą obsługiwać porządkowanie sortowania specyficzne dla języka, więc może być konieczne zaimplementowanie dodatkowego kodu w logice biznesowej.
Wyszukiwanie tekstu
Upewnij się, że piszesz i testujesz algorytm wyszukiwania, mając na uwadze wiele języków. Należy wziąć pod uwagę następujące kwestie:
- Autouzupełnienie — jeśli utworzono funkcję autouzupełnianą, upewnij się, że źródło sugestii jest istotne dla języka użytkownika.
- Dopasowywanie zapytania do danych — czy zapytania wyszukiwania wprowadzone w określonym języku będą wykonywane względem tylko zawartości napisanej w tym języku, czy dla całej zawartości w aplikacji?
- Stemming — jeśli wyszukiwanie jest tworzone w celu wyszukiwania podobnych słów, korzeni słów i innych optymalizacji wyszukiwania, czy te optymalizacje są tworzone dla wszystkich obsługiwanych języków?
- Sortowanie — upewnij się, że wyniki są prawidłowo posortowane (patrz powyżej).
Dane ze źródeł zewnętrznych
Wiele aplikacji pobiera dane ze źródeł zewnętrznych, z kanałów informacyjnych Twitter i RSS do informacji o pogodzie, wiadomościach lub cenach akcji. Podczas wyświetlania tego użytkownikowi należy wziąć pod uwagę możliwość wyświetlenia do nich ekranu nieistotnych lub nieczytelnych informacji.
Istnieje kilka strategii, których można użyć, aby spróbować upewnić się, że aplikacja wyświetla dane istotne dla użytkownika:
- Różne źródła — aplikacja może pobierać dane z innego źródła w zależności od języka użytkownika lub ustawień regionalnych. Wiadomości dotyczące ustawień regionalnych, pogoda i ceny akcji mogą mieć większy sens niż coś pobranego z kanału informacyjnego Ameryka Północna n.
- Zlokalizowane wyświetlanie — jeśli wyświetlasz twitter lub kanał informacyjny zdjęć, należy wyświetlić metadane (takie jak czas potrzebny) we własnym języku, nawet jeśli sama zawartość pozostaje w oryginalnym języku.
- Tłumaczenie — możesz utworzyć opcję tłumaczenia w aplikacji w celu wykonania tłumaczenia maszynowego danych przychodzących. Może to być automatyczne lub według uznania użytkownika — po prostu pamiętaj, aby powiadomić użytkownika, jeśli tak się dzieje, ponieważ tłumaczenia maszynowe nigdy nie są doskonałe!
Może to również mieć wpływ na zewnętrzne linki do ścieżek audio lub filmów wideo — podczas projektowania aplikacji należy zaplanować z wyprzedzeniem określanie źródła przetłumaczonej zawartości lub zapewnienie, że użytkownicy są odpowiednio informowani przez interfejs użytkownika, gdy zawartość nie będzie prezentowana w ich języku.
Nie przetłumacz
Niektóre ciągi w aplikacji mogą nie wymagać tłumaczenia lub przynajmniej wymagają szczególnej uwagi tłumacza. Przykłady mogą obejmować:
- Adresy URL — jeśli wyświetlasz adres URL, może być konieczne dostosowanie go przez język. Na przykład facebook.com nie wymaga tłumaczenia, że automatycznie wykrywa język w lokacji głównej. Inne witryny mają zawartość specyficzną dla ustawień regionalnych i możesz zaoferować inny adres URL, taki jak yahoo.com a yahoo.fr lub yahoo.it.
- Numery telefonów — zwłaszcza te z różnymi kodami kraju lub numerami dla rozmówców, którzy mówią w określonym języku.
- Dane kontaktowe — adresy i inne informacje mogą się różnić w zależności od języka lub ustawień regionalnych.
- Znaki towarowe i nazwy produktów — niektóre ciągi nie wymagają tłumaczenia, ponieważ są one zawsze zapisywane w tym samym języku.
Na koniec pamiętaj, aby dołączyć szczegółowe instrukcje dla tłumacza, jeśli niektóre ciągi wymagają specjalnego traktowania.
Sformatowany tekst
Zazwyczaj nie występuje problem z aplikacjami mobilnymi, ponieważ ciągi zazwyczaj nie są sformatowane. Jeśli jednak w aplikacji wymagany jest tekst sformatowany (na przykład pogrubienie lub kursywa) upewnij się, że tłumacz wie, jak wprowadzić formatowanie, pliki ciągów przechowują je poprawnie i są prawidłowo sformatowane przed wyświetleniem użytkownikowi (tj. nie pozwól, aby kody formatowania były prezentowane użytkownikowi).
Wskazówki tłumaczenia
Tłumaczenie ciągów używanych przez aplikację jest uważane za część procesu lokalizacji. Zazwyczaj to zadanie zostanie zlecone usłudze tłumaczenia i wykonane przez wielojęzyczny personel, który może nie znać twojej aplikacji lub twojej firmy.
Poniższe porady pomogą Ci w utworzeniu ciągów, które są łatwiejsze do dokładnego tłumaczenia i w związku z tym poprawią jakość zlokalizowanych aplikacji.
Lokalizowanie pełnych ciągów, a nie wyrazów
Czasami deweloperzy przyjmują podejście do próby określenia pojedynczych słów lub zdań "fragmentów kodu", aby mogli ponownie używać ich w całej aplikacji. Na przykład w przypadku tekstu "Masz 5 komunikatów". Mogą one określać następujące ciągi do tłumaczenia
Złe:
"You have"
"no"
"message"
"messages"
a następnie spróbuj utworzyć poprawną frazę w kodzie przy użyciu łączenia ciągów:
Złe:
"You have" + " " + numMsgs + " " + "messages"
"You have" + " no " + "messages"
Jest to zniechęcone , ponieważ niekoniecznie będzie działać dla wszystkich języków i będzie trudno tłumaczowi zrozumieć kontekst każdego krótkiego segmentu. Prowadzi również do ponownego użycia przetłumaczonych ciągów, co może powodować problemy później, jeśli są używane w różnych kontekstach (a następnie są aktualizowane).
Zezwalaj na ponowne porządkowanie parametrów
Niektóre języki programowania wymagają dodatkowej składni, aby określić kolejność parametrów w ciągu, jednak platforma .NET obsługuje już koncepcję symboli zastępczych numerowanych, więc
Dobre:
"a {0} b {1} cde {3}"
można przetłumaczyć następujące (gdzie zmienia się położenie i kolejność symboli zastępczych)
"{2} {3} f g h {0}"
tokeny zostaną uporządkowane zgodnie z oczekiwaniami tłumacza. Pamiętaj, aby uwzględnić wyjaśnienie, co zawiera każdy symbol zastępczy podczas wysyłania ciągu do tłumacza.
Używanie wielu ciągów w celu kardynalności
Unikaj ciągów, takich jak "You have {0} message/s."
Używanie określonych ciągów dla każdego stanu, aby zapewnić lepsze środowisko użytkownika:
Dobre:
"You have no messages."
"You have 1 message."
"You have 2 messages."
"You have {0} messages."
Musisz napisać kod w aplikacji, aby ocenić wyświetlaną liczbę i wybrać odpowiedni ciąg. Niektóre platformy (w tym systemy iOS i Android) mają wbudowane funkcje do automatycznego wybierania najlepszego ciągu w liczbie mnogiej na podstawie preferencji dla bieżącego języka/ustawień regionalnych.
Zezwalanie na płeć
Języki oparte na języku łacińskim czasami używają różnych słów w zależności od płci tematu. Jeśli aplikacja wie o płci, należy zezwolić przetłumaczonym ciągom na odzwierciedlenie tego.
Istnieje również bardziej oczywisty przypadek nawet w języku angielskim, w którym ciągi odnoszą się do określonej osoby lub użytkownika aplikacji. Na przykład niektóre witryny pokazują komunikaty podobne do tych, które "Bob commented on his post"
wymagają ciągów zarówno dla płci męskiej, żeńskiej, jak i niebinarnej lub nieznanej:
Dobre:
"{0} commented on his post"
"{0} commented on her post"
"{0} commented on their post"
Nie używaj ponownie ciągów
Lub dokładniej, nie używaj ponownie ciągów tylko dlatego, że są one podobne, gdy sam ciąg ma inny cel lub znaczenie.
Na przykład: załóżmy, że masz przełącznik włączony/wyłączony w aplikacji, a kontrolka przełącznika wymaga zlokalizowania tekstu "włączone" i "wyłączone". Zostanie również wyświetlona wartość tego ustawienia w innym miejscu aplikacji w etykiecie tekstowej. Dla wyświetlania przełącznika należy używać różnych ciągów w porównaniu ze stanem przełącznika (nawet jeśli są one tym samym ciągiem w języku domyślnym) — na przykład:
- "Włączone" — wyświetlane na samym przełączniku
- "Wyłączone" — wyświetlane na samym przełączniku
- "Włączone" — wyświetlane w etykiecie
- "Wyłączone" — wyświetlane w etykiecie
Zapewnia to maksymalną elastyczność tłumacza:
- Ze względów projektowych, być może sam przełącznik używa małych liter "włączone" i "wyłączone", ale etykieta wyświetlania używa wielkich liter "Włączone" i "Wyłączone".
- Niektóre języki mogą wymagać skrótu wartości przełącznika, aby zmieścić się w kontrolce interfejsu użytkownika, podczas gdy pełny (przetłumaczony) wyraz może pojawić się w etykiecie.
- Alternatywnie w przypadku niektórych języków renderowanie przełącznika może używać znaków "I" i "O" w celu znajomości kultury, ale nadal możesz chcieć, aby etykieta brzmiała "Włączone" lub "Wyłączone".
Usługi tłumaczenia
Tłumaczenie maszynowe
Aby utworzyć funkcje tłumaczenia w aplikacji, rozważ użycie interfejsu API tłumaczenia tekstu w usłudze Azure Translator.
Do celów testowych można użyć jednego z wielu narzędzi tłumaczenia online, aby uwzględnić w aplikacji tekst zlokalizowany podczas programowania:
Dostępnych jest wiele innych. Jakość tłumaczenia maszynowego zwykle nie jest uważana za wystarczająco dobrą, aby zwolnić aplikację bez uprzedniego przejrzenia i przetestowania przez profesjonalnych tłumaczy lub prelegentów natywnych.
Tłumaczenie profesjonalne
Istnieją również profesjonalne usługi tłumaczenia, które będą pobierać swoje ciągi i rozpowszechniać je do własnych tłumaczy, zapewniając gotowe tłumaczenia za opłatę.
Jedną z najbardziej znanych usług jest LionBridge. Większość profesjonalnych usług obsługuje wszystkie typowe typy plików, w tym ciągi, XML, RESX i POT/PO.
Podsumowanie
W tym artykule przedstawiono niektóre pojęcia, które należy znać przed rozpoczęciem międzynarodowych międzynarodowych aplikacji, a następnie lokalizowania zasobów, a także omówiono sposób zmiany preferencji językowych dla każdej platformy.
Te pojęcia można zastosować do różnych technik międzynarodowych specyficznych dla platformy i międzyplatformowych, które są możliwe w środowisku Xamarin.
Kontynuuj czytanie szczegółów technicznych dotyczących platformy, którą cię interesują:
- Lokalizacja międzyplatformowa zestawu narzędzi Xamarin.Forms przy użyciu plików RESX.
- Lokalizacja platformy natywnej platformy Xamarin.iOS .
- Lokalizacja platformy natywnej platformy Xamarin.Android .