Globalizacja dla WPF

W tym temacie przedstawiono problemy, o których należy pamiętać podczas pisania aplikacji Windows Presentation Foundation (WPF) na rynku globalnym. Elementy programowania globalizacji są definiowane na platformie .NET w System.Globalization przestrzeni nazw.

Globalizacja XAML

Język XAML (Extensible Application Markup Language) jest oparty na kodzie XML i korzysta z obsługi globalizacji zdefiniowanej w specyfikacji XML. W poniższych sekcjach opisano niektóre funkcje XAML, o których należy pamiętać.

Odwołania do znaków

Odwołanie do znaku daje jednostkę kodu UTF16 określonego znaku Unicode, który reprezentuje, w postaci dziesiętnej lub szesnastkowej. W poniższym przykładzie przedstawiono odwołanie do znaków dziesiętnych dla ZNAKU KOPTYJSKIEGO ZNAKU WIELKIEJ LITERY HORI lub "Ϩ":

Ϩ

W poniższym przykładzie przedstawiono odwołanie do znaków szesnastowych. Zwróć uwagę, że ma wartość x przed szesnastkowym numerem.

Ϩ

Kodowanie

Kodowanie obsługiwane przez język XAML to ASCII, Unicode UTF-16 i UTF-8. Instrukcja kodowania znajduje się na początku dokumentu XAML. Jeśli atrybut kodowania nie istnieje i nie ma kolejności bajtów, analizator domyślnie ma wartość UTF-8. Kodowanie UTF-8 i UTF-16 to preferowane kodowanie. UtF-7 nie jest obsługiwany. W poniższym przykładzie pokazano, jak określić kodowanie UTF-8 w pliku XAML.

?xml encoding="UTF-8"?

Atrybut języka

Język XAML używa xml:lang do reprezentowania atrybutu języka elementu. Aby móc korzystać z klasy, wartość atrybutu CultureInfo języka musi być jedną z nazw kultur wstępnie zdefiniowanych przez CultureInfo. xml:lang jest dziedziczony w drzewie elementów (według reguł XML, niekoniecznie ze względu na dziedziczenie właściwości zależności), a jego wartość domyślna jest pustym ciągiem, jeśli nie jest przypisany jawnie.

Atrybut języka jest bardzo przydatny do określania języków regionalnych. Na przykład francuski ma różne pisownię, słownictwo i wymowę we Francji, Quebecu, Belgii i Szwajcarii. Ponadto chiński, japoński i koreański współdzielą punkty kodu w standardzie Unicode, ale kształty ideograficzne są różne i używają zupełnie różnych czcionek.

Poniższy przykład extensible Application Markup Language (XAML) używa atrybutu fr-CA języka do określenia kanadyjskiego języka francuskiego.

<TextBlock xml:lang="fr-CA">Découvrir la France</TextBlock>

Unicode

Język XAML obsługuje wszystkie funkcje Unicode, w tym zastępcze. Tak długo, jak zestaw znaków można zamapować na Unicode, jest obsługiwany. Na przykład GB18030 wprowadza niektóre znaki mapowane na chińskie, japońskie i koreańskie (CFK) rozszerzenia A i B oraz pary zastępcze, dlatego jest w pełni obsługiwane. Aplikacja WPF może używać StringInfo do manipulowania ciągami bez zrozumienia, czy mają pary zastępcze, czy też łączą znaki.

Projektowanie międzynarodowego interfejsu użytkownika przy użyciu języka XAML

W tej sekcji opisano funkcje interfejsu użytkownika, które należy wziąć pod uwagę podczas pisania aplikacji.

Tekst międzynarodowy

WPF obejmuje wbudowane przetwarzanie dla wszystkich systemów pisania obsługiwanych przez program Microsoft .NET Framework.

Obecnie obsługiwane są następujące skrypty:

  • Arabski

  • Bengalski

  • Dewanagari

  • Cyrylica

  • Grecki

  • Gudżarati

  • Gurmukhi

  • Hebrajski

  • Skrypty ideograficzne

  • Kannada

  • Lao

  • Łacińskiej

  • Malayalam

  • Mongolski

  • Odia

  • Syryjski

  • Tamilski

  • Telugu

  • Thaana

  • Tajski*

  • Tybetański

*W tej wersji obsługiwane jest wyświetlanie i edytowanie tekstu tajskiego; niezgodność wyrazów nie jest.

Następujące skrypty nie są obecnie obsługiwane:

  • Khmer

  • Koreański Stary Hangul

  • Mjanma

  • Syngaleski

Wszystkie aparaty systemu zapisu obsługują czcionki OpenType. Czcionki OpenType mogą zawierać tabele układu OpenType, które umożliwiają twórcom czcionek projektowanie lepszych czcionek międzynarodowych i wysokiej klasy czcionek typograficznych. Tabele układu czcionek OpenType zawierają informacje o podstawianiach glyph, pozycjonowaniu glyph, uzasadnieniu i ustawieniu punktu odniesienia, umożliwiając aplikacji do przetwarzania tekstu w celu ulepszenia układu tekstu.

Czcionki OpenType umożliwiają obsługę dużych zestawów glyph przy użyciu kodowania Unicode. Takie kodowanie umożliwia szerokie wsparcie międzynarodowe, a także warianty glyph typograficzne.

Renderowanie tekstu WPF jest obsługiwane przez technologię podrzędną Microsoft ClearType, która obsługuje niezależność rozpoznawania. Znacznie poprawia to czytelność i zapewnia możliwość obsługi dokumentów w stylu magazynu wysokiej jakości dla wszystkich skryptów.

Układ międzynarodowy

WPF zapewnia bardzo wygodny sposób obsługi układów poziomych, dwukierunkowych i pionowych. W strukturze FlowDirection prezentacji właściwość może służyć do definiowania układu. Wzorce kierunku przepływu to:

  • LeftToRight — układ poziomy dla łacińskich, wschodnioazjatyckich itd.

  • RightToLeft — dwukierunkowe dla języka arabskiego, hebrajskiego itd.

Tworzenie aplikacji lokalizowalnych

Podczas pisania aplikacji do użycia globalnego należy pamiętać, że aplikacja musi być lokalizowalna. W poniższych tematach kwestie należy wziąć pod uwagę.

wielojęzyczny interfejs użytkownika

wielojęzyczny interfejs użytkownika s (MUI) to obsługa przełączania interfejsów użytkownika z jednego języka na inny. Aplikacja WPF używa modelu zestawu do obsługi interfejsu MUI. Jedna aplikacja zawiera zestawy neutralne dla języka, a także zestawy zasobów satelitarnych zależne od języka. Punkt wejścia jest zarządzanym plikiem EXE w zestawie głównym. Moduł ładujący zasobów WPF korzysta z menedżera zasobów platformy do obsługi wyszukiwania zasobów i rezerwowego wyszukiwania zasobów. Wiele zestawów satelickich języka współpracuje z tym samym zestawem głównym. Załadowany zestaw zasobów zależy od CurrentUICulture bieżącego wątku.

Lokalizowalny interfejs użytkownika

Aplikacje WPF używają języka XAML do definiowania interfejsu użytkownika. Język XAML umożliwia deweloperom określenie hierarchii obiektów z zestawem właściwości i logiki. Podstawowym zastosowaniem języka XAML jest opracowywanie aplikacji WPF, ale może służyć do określania hierarchii dowolnych obiektów środowiska uruchomieniowego języka wspólnego (CLR). Większość deweloperów używa języka XAML do określania interfejsu użytkownika aplikacji i używania języka programowania, takiego jak C#, aby reagować na interakcję użytkownika.

Z punktu widzenia zasobu interfejs użytkownika jest elementem zasobu i dlatego jego ostateczny format dystrybucji musi być lokalizowalny, aby obsługiwać języki międzynarodowe. Ponieważ język XAML nie może obsługiwać zdarzeń wielu aplikacji XAML zawiera bloki kodu w tym celu. Aby uzyskać więcej informacji, zobacz XAML w WPF. Kod jest usuwany i kompilowany w różnych plikach binarnych, gdy plik XAML jest tokenizowany do postaci BAML XAML. Forma BAML plików, obrazów i innych typów zarządzanych obiektów zasobów jest osadzona w zestawie zasobów satelitarnych, które mogą być zlokalizowane w innych językach lub głównym zestawie, gdy lokalizacja nie jest wymagana.

Uwaga

Aplikacje WPF obsługują wszystkie zasoby frameworkCLR, w tym tabele ciągów, obrazy itd.

Tworzenie aplikacji lokalizowalnych

Lokalizacja oznacza dostosowanie interfejsu użytkownika do różnych kultur. Aby można było lokalizować aplikację WPF, deweloperzy muszą utworzyć wszystkie zasoby lokalizowalne w zestawie zasobów. Zestaw zasobów jest zlokalizowany w różnych językach, a kod za pomocą interfejsu API zarządzania zasobami do załadowania. Jednym z plików wymaganych dla aplikacji WPF jest plik projektu (.proj). Wszystkie zasoby używane w aplikacji powinny być uwzględnione w pliku projektu. Poniższy przykład z pliku csproj pokazuje, jak to zrobić.

<Resource Include="data\picture1.jpg"/>
<EmbeddedResource Include="data\stringtable.en-US.restext"/>

Aby użyć zasobu w aplikacji, ResourceManager utwórz wystąpienie zasobu i załaduj zasób, którego chcesz użyć. Poniższy przykład demonstruje, jak to zrobić.

void OnClick(object sender, RoutedEventArgs e)
{
  ResourceManager rm = new ResourceManager ("MySampleApp.data.stringtable",
       Assembly.GetExecutingAssembly());
  Text1.Text = rm.GetString("Message");
}

Używanie technologii ClickOnce z zlokalizowanymi aplikacjami

ClickOnce to nowa technologia wdrażania formularzy systemu Windows, która będzie dostarczana z programem Visual Studio 2005. Umożliwia instalowanie i uaktualnianie aplikacji internetowych. Po zlokalizowaniu aplikacji wdrożonej za pomocą technologii ClickOnce można ją wyświetlić tylko w zlokalizowanej kulturze. Jeśli na przykład wdrożona aplikacja jest zlokalizowana w języku japońskim, może być widoczna tylko w japońskim systemie Microsoft Windows, a nie w angielskim systemie Windows. Jest to problem, ponieważ jest to typowy scenariusz dla japońskich użytkowników do uruchamiania angielskiej wersji systemu Windows.

Rozwiązaniem tego problemu jest ustawienie neutralnego atrybutu rezerwowego języka. Deweloper aplikacji może opcjonalnie usunąć zasoby z głównego zestawu i określić, że zasoby można znaleźć w zestawie satelitarnym odpowiadającym określonej kulturze. Aby kontrolować ten proces, użyj polecenia NeutralResourcesLanguageAttribute. Konstruktor NeutralResourcesLanguageAttribute klasy ma dwa podpisy, jeden, który przyjmuje UltimateResourceFallbackLocation parametr w celu określenia lokalizacji, w której ResourceManager powinny zostać wyodrębnione zasoby rezerwowe: zestaw główny lub zestaw satelitarny. W poniższym przykładzie pokazano, jak używać atrybutu . W przypadku ostatecznej lokalizacji rezerwowej kod powoduje ResourceManager wyszukanie zasobów w podkatalogu "de" katalogu aktualnie wykonywanego zestawu.

[assembly: NeutralResourcesLanguageAttribute(
    "de" , UltimateResourceFallbackLocation.Satellite)]

Zobacz też