Udostępnij za pośrednictwem


Omówienie globalizacji i lokalizacji WPF

Jeśli ograniczasz dostępność produktu tylko do jednego języka, ograniczasz potencjalną bazę klientów do ułamka populacji 7,5 miliarda ludzi na świecie. Jeśli chcesz, aby aplikacje docierały do odbiorców globalnych, ekonomiczna lokalizacja produktu jest jednym z najlepszych i najbardziej ekonomicznych sposobów dotarcia do większej liczby klientów.

W tym omówieniu przedstawiono globalizację i lokalizację w programie Windows Presentation Foundation (WPF). Globalizacja to projektowanie i opracowywanie aplikacji, które działają w wielu lokalizacjach. Na przykład globalizacja obsługuje zlokalizowane interfejsy użytkownika i dane regionalne dla użytkowników w różnych kulturach. Platforma WPF udostępnia zglobalizowane funkcje projektowania, w tym automatyczne układy, zestawy satelitarne oraz zlokalizowane atrybuty i komentowanie.

Lokalizacja to tłumaczenie zasobów aplikacji na zlokalizowane wersje dla określonych kultur, które obsługuje aplikacja. Podczas lokalizowania w WPF korzystasz z interfejsów API w System.Windows.Markup.Localizer przestrzeni nazw. Te interfejsy API zasilają narzędzie wiersza polecenia LocBaml Tool Sample. Aby uzyskać informacje o sposobie kompilowania i używania metody LocBaml, zobacz Lokalizowanie aplikacji.

Ostrzeżenie

Narzędzie LocBaml działa tylko z WPF dla projektów .NET Framework, nie działa z WPF dla platformy .NET.

Najlepsze rozwiązania dotyczące globalizacji i lokalizacji w WPF

Większość funkcji globalizacji i lokalizacji wbudowanych w platformę WPF można wykorzystać, postępując zgodnie z poradami dotyczącymi projektowania i lokalizacji interfejsu użytkownika, które udostępnia ta sekcja.

Najlepsze rozwiązania dotyczące projektowania interfejsu użytkownika WPF

Podczas projektowania interfejsu użytkownika opartego na WPF rozważ zaimplementowanie następujących najlepszych rozwiązań:

  • Pisanie interfejsu użytkownika w języku XAML; unikaj tworzenia interfejsu użytkownika w kodzie. Podczas tworzenia interfejsu użytkownika przy użyciu języka XAML, udostępniasz go za pomocą wbudowanych interfejsów API lokalizacji.

  • Unikaj używania pozycji bezwzględnych i stałych rozmiarów do układania zawartości; Zamiast tego należy użyć względnego lub automatycznego określania rozmiaru.

    • Użyj SizeToContent i zachowaj szerokości i wysokości ustawionych na Auto.

    • Unikaj używania Canvas do określania interfejsów użytkownika.

    • Użyj Grid i jego funkcji udostępniania rozmiaru.

  • Podaj dodatkowe miejsce na marginesach, ponieważ zlokalizowany tekst często wymaga więcej miejsca. Dodatkowe miejsce pozwala na ewentualne zwisające znaki.

  • Włącz TextWrapping na TextBlock, aby uniknąć przycinania.

  • Ustaw atrybut xml:lang. Ten atrybut opisuje kulturę określonego elementu i jego elementów podrzędnych. Wartość tej właściwości zmienia zachowanie kilku funkcji w WPF. Na przykład zmienia zachowanie dzielenia wyrazów, sprawdzania pisowni, podstawienia liczb, formatowania złożonych skryptów i zastępowania czcionek. Zobacz Globalizacja dla WPF, aby uzyskać więcej informacji na temat ustawiania xml:lang Handling w języku XAML.

  • Utwórz niestandardową czcionkę złożoną, aby uzyskać lepszą kontrolę nad czcionkami używanymi w różnych językach. Domyślnie WPF używa czcionki GlobalUserInterface.composite w katalogu Windows\Fonts.

  • Podczas tworzenia aplikacji nawigacyjnych, które mogą być zlokalizowane w kulturze, gdzie tekst jest przedstawiany w formacie od prawej do lewej, jawnie ustaw FlowDirection dla każdej strony, aby upewnić się, że strona nie dziedziczy FlowDirection z NavigationWindow.

  • Podczas tworzenia samodzielnych aplikacji nawigacyjnych hostowanych poza przeglądarką, dla początkowej aplikacji ustaw StartupUri na NavigationWindow zamiast na stronę (na przykład <Application StartupUri="NavigationWindow.xaml">). Ten projekt umożliwia zmianę FlowDirection okna i paska nawigacyjnego. Aby uzyskać więcej informacji i przykład, zobacz Przykład strony głównej globalizacji.

Najlepsze rozwiązania dotyczące lokalizacji WPF

Podczas lokalizowania aplikacji opartych na WPF rozważ zaimplementowanie następujących najlepszych rozwiązań:

  • Użyj komentarzy lokalizacji, aby zapewnić dodatkowy kontekst dla lokalizatorów.

  • Użyj atrybutów lokalizacji, aby kontrolować lokalizację zamiast selektywnie pomijać Uid właściwości elementów. Aby uzyskać więcej informacji, zobacz Atrybuty lokalizacji i komentarze .

  • Użyj msbuild -t:updateuid i -t:checkuid, aby dodać i sprawdzić Uid właściwości w języku XAML. Użyj Uid właściwości, aby śledzić zmiany między programowaniem a lokalizacją. Uid właściwości ułatwiają lokalizowanie nowych zmian programistycznych. Jeśli ręcznie dodasz Uid właściwości do interfejsu użytkownika, zadanie jest zazwyczaj żmudne i mniej dokładne.

    • Nie edytuj ani nie zmieniaj Uid właściwości po rozpoczęciu lokalizacji.

    • Nie używaj zduplikowanych Uid właściwości (pamiętaj tę poradę podczas korzystania z polecenia kopiowania i wklejania).

    • Ustaw lokalizację UltimateResourceFallback w pliku AssemblyInfo.* , aby określić odpowiednią wersję językową dla języka awaryjnego (na przykład [assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]).

      Jeśli zdecydujesz się dołączyć język źródłowy do głównego zestawu, pomijając <UICulture> tag w pliku projektu, ustaw lokalizację UltimateResourceFallback jako główny zestaw zamiast satelity (na przykład [assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.MainAssembly)]).

Lokalizowanie aplikacji WPF

Podczas lokalizowania aplikacji WPF masz kilka opcji. Na przykład można powiązać zasoby lokalizowalne w aplikacji z plikiem XML, przechowywać lokalizowalny tekst w tabelach resx lub lokalizować pliki XAML. W tej sekcji opisano przepływ pracy lokalizacji, który korzysta z formularza BAML języka XAML, który zapewnia kilka korzyści:

  • Lokalizację można zlokalizować po kompilacji.

  • Możesz zaktualizować do nowszej wersji formatu BAML języka XAML przy użyciu lokalizacji ze starszej wersji formatu BAML języka XAML, aby można było lokalizować je w tym samym czasie.

  • Można zweryfikować oryginalne elementy źródłowe i semantyki w czasie kompilacji, ponieważ forma BAML XAML to skompilowana forma XAML.

Proces kompilacji lokalizacji

Podczas tworzenia aplikacji WPF proces kompilacji lokalizacji jest następujący:

  • Deweloper tworzy i globalizuje aplikację WPF. W pliku projektu deweloper ustawia się <UICulture>en-US</UICulture> tak, aby po skompilowaniu aplikacji generowany jest główny zestaw neutralny dla języka. Ten zestaw zawiera plik .resources.dll satelitarnej, który zawiera wszystkie zasoby lokalizowalne. Opcjonalnie możesz zachować język źródłowy w głównym zestawie, ponieważ nasze interfejsy API lokalizacji obsługują wyodrębnianie z głównego zestawu.

  • Po skompilowaniu pliku w kompilacji kod XAML jest konwertowany na formę BAML XAML. Pliki neutralne MyDialog.exe kulturowo i zależne od kultury (angielski) MyDialog.resources.dll są wydawane klientowi anglojęzycznemu.

Przepływ pracy lokalizacji

Proces lokalizacji rozpoczyna się po skompilowaniu nielokalizowanego MyDialog.resources.dll pliku. Elementy interfejsu użytkownika i właściwości w oryginalnym języku XAML są wyodrębniane z formularza BAML języka XAML i przekształcane w pary klucz-wartość za pomocą interfejsów API znajdujących się pod System.Windows.Markup.Localizer. Lokalizatory używają par klucz-wartość do lokalizowania aplikacji. Nowe .resource.dll można wygenerować na podstawie nowych wartości po zakończeniu procesu lokalizacji.

Klucze par klucz-wartość to wartości x:Uid umieszczone przez dewelopera w oryginalnym XAML. Te x:Uid wartości umożliwiają interfejsowi API śledzenie i scalanie zmian występujących między deweloperem a lokalizatorem podczas lokalizacji. Jeśli na przykład deweloper zmieni interfejs użytkownika po rozpoczęciu pracy przez lokalizatora, możesz scalić zmianę wprowadzoną przez dewelopera z już ukończoną lokalizacją, aby utrata pracy tłumaczeniowej była minimalna.

Na poniższej ilustracji przedstawiono typowy przepływ pracy lokalizacji oparty na postaci BAML języka XAML. Na tym diagramie założono, że deweloper pisze aplikację w języku angielskim. Deweloper tworzy i globalizuje aplikację WPF. W pliku projektu deweloper ustawia <UICulture>en-US</UICulture> tak, aby podczas kompilacji został wygenerowany główny zestaw neutralny językowo z satelitarnym .resources.dll, który zawiera wszystkie zasoby lokalizowalne. Alternatywnie można zachować język źródłowy w głównym zestawie, ponieważ interfejsy API lokalizacji WPF obsługują wyodrębnianie z głównego zestawu. Po zakończeniu procesu kompilacji kod XAML zostanie skompilowany w języku BAML. Neutralne kulturowo MyDialog.exe.resources.dll są wysyłane do klienta anglojęzycznego.

Diagram przedstawiający proces lokalizacji.

Diagram przedstawiający nielokalizowany przepływ pracy.

Przykłady lokalizacji WPF

Ta sekcja zawiera przykłady zlokalizowanych aplikacji, które ułatwiają zrozumienie sposobu tworzenia i lokalizowania aplikacji WPF.

Przykład uruchamiania okna dialogowego

Poniższa grafika przedstawia dane wyjściowe przykładowego okna dialogowego Uruchamianie .

Angielski:

Zrzut ekranu przedstawiający okno dialogowe Uruchamianie w języku angielskim.

Niemiecki:

Zrzut ekranu przedstawiający okno dialogowe Uruchamianie w języku niemieckim.

Projektowanie globalnego okna dialogowego uruchamiania

Ten przykład tworzy okno dialogowe Uruchom przy użyciu WPF i XAML. To okno dialogowe jest równoważne oknu dialogowemu Uruchamianie, które jest dostępne z menu Start systemu Microsoft Windows.

Niektóre najważniejsze informacje dotyczące tworzenia globalnych okien dialogowych to:

Układ automatyczny

W pliku Window1.xaml:

<Window SizeToContent="WidthAndHeight">

Poprzednia właściwość Okno automatycznie zmienia rozmiar okna zgodnie z rozmiarem zawartości. Ta właściwość uniemożliwia odcinanie zawartości, która zwiększa rozmiar po lokalizacji; usuwa również niepotrzebne miejsce, gdy zawartość zmniejsza rozmiar po lokalizacji.

<Grid x:Uid="Grid_1">

Uid Właściwości są potrzebne, aby interfejsy API lokalizacji WPF działały poprawnie.

Są one używane przez interfejsy API lokalizacji WPF do monitorowania zmian między opracowywaniem a lokalizacją interfejsu użytkownika. Uid właściwości umożliwiają scalanie nowszej wersji interfejsu użytkownika ze starszą lokalizacją interfejsu użytkownika. Dodaj właściwość Uid , uruchamiając msbuild -t:updateuid RunDialog.csproj w powłoce poleceń. Jest to zalecana metoda dodawania Uid właściwości, ponieważ ręczne dodawanie ich jest zwykle czasochłonne i mniej dokładne. Możesz sprawdzić, czy Uid właściwości są poprawnie ustawione, uruchamiając polecenie msbuild -t:checkuid RunDialog.csproj.

Interfejs użytkownika jest ustrukturyzowany przy użyciu kontrolki Grid , która jest przydatną kontrolką do korzystania z automatycznego układu w WPF. Należy pamiętać, że okno dialogowe jest podzielone na trzy wiersze i pięć kolumn. Nie jedna z definicji wierszy i kolumn ma stały rozmiar; w związku z tym elementy interfejsu użytkownika umieszczone w każdej komórce mogą dostosować się do wzrostu i spadku rozmiaru podczas lokalizacji.

<Grid.ColumnDefinitions>
  <ColumnDefinition x:Uid="ColumnDefinition_1" />
  <ColumnDefinition x:Uid="ColumnDefinition_2" />

Pierwsze dwie kolumny, w których etykieta Open: i ComboBox są umieszczone, używają 10 procent całkowitej szerokości interfejsu użytkownika.

  <ColumnDefinition x:Uid="ColumnDefinition_3" SharedSizeGroup="Buttons" />
  <ColumnDefinition x:Uid="ColumnDefinition_4" SharedSizeGroup="Buttons" />
  <ColumnDefinition x:Uid="ColumnDefinition_5" SharedSizeGroup="Buttons" />
</Grid.ColumnDefinitions>

Należy pamiętać, że przykład używa funkcji shared-sizing elementu Grid. Ostatnie trzy kolumny wykorzystują to, umieszczając się w tym samym SharedSizeGroup. Jak można oczekiwać od nazwy właściwości, dzięki temu kolumny mogą dzielić ten sam rozmiar. Tak więc, gdy "Przeglądaj..." zostaje zlokalizowane jako dłuższy ciąg "Durchsuchen...", wszystkie przyciski zwiększają szerokość zamiast posiadania małego przycisku "OK" i nieproporcjonalnie dużego przycisku "Durchsuchen…".

xml:lang

xml:lang="en-US"

Zwróć uwagę na obsługę xml:lang w języku XAML umieszczonym w głównym elemenie interfejsu użytkownika. Ta właściwość opisuje kulturę danego elementu i jego dzieci. Ta wartość jest używana przez kilka funkcji w WPF i powinna zostać odpowiednio zmieniona podczas lokalizacji. Ta wartość określa, jaki słownik językowy jest używany do dzielenia wyrazów i sprawdzania pisowni. Ma to również wpływ na wyświetlanie cyfr i sposób, w jaki system rezerwowy czcionki wybiera czcionkę do użycia. Na koniec właściwość wpływa na sposób wyświetlania liczb i sposób kształtowania tekstów napisanych w złożonych skryptach. Wartość domyślna to "en-US".

Tworzenie zestawu zasobów satelitarnych

W pliku csproj:

.csproj Edytuj plik i dodaj następujący tag do bezwarunkowego <PropertyGroup>elementu :

<UICulture>en-US</UICulture>

Zwróć uwagę na dodanie wartości UICulture. Po ustawieniu tej wartości na prawidłową CultureInfo wartość, taką jak en-US, kompilowanie projektu spowoduje wygenerowanie zestawu satelitarnego ze wszystkimi zasobami lokalizowalnymi w nim.

<Resource Include="RunIcon.JPG">

<Localizable>False</Localizable>

</Resource>

Element RunIcon.JPG nie musi być zlokalizowany, ponieważ powinien być taki sam dla wszystkich kultur. Localizable jest ustawiony na false , aby pozostał w neutralnym językowo głównym zestawie zamiast zestawu satelitarnego. Wartość domyślna wszystkich niekompilowalnych zasobów jest ustawiona na Localizable.

Lokalizowanie okna dialogowego Uruchamiania

parsowanie

Po utworzeniu aplikacji pierwszym krokiem lokalizowania jest analizowanie zasobów lokalizowalnych z zestawu satelitarnego. Na potrzeby tego tematu użyj przykładowego narzędzia LocBaml, które można znaleźć w przykładzie narzędzia LocBaml. Należy pamiętać, że LocBaml to tylko przykładowe narzędzie, które ułatwia rozpoczęcie tworzenia narzędzia lokalizacji, które pasuje do procesu lokalizacji. Za pomocą LocBaml uruchom następujące polecenie, aby przeanalizować: LocBaml /parse RunDialog.resources.dll /out: i wygenerować plik CSVRunDialog.resources.dll.

Ostrzeżenie

Narzędzie LocBaml działa tylko z WPF dla projektów .NET Framework, nie działa z WPF dla platformy .NET.

Zlokalizować

Użyj ulubionego edytora CSV, który obsługuje kod Unicode, aby edytować ten plik. Odfiltruj wszystkie wpisy z kategorią lokalizacji "Brak". Powinny zostać wyświetlone następujące wpisy:

Klucz zasobu Kategoria lokalizacji Wartość
Button_1:System.Windows.Controls.Button.$Content Przycisk OK
Button_2:System.Windows.Controls.Button.$Content Przycisk Anuluj
Button_3:System.Windows.Controls.Button.$Content Przycisk Przeglądaj...
ComboBox_1:System.Windows.Controls.ComboBox.$Content kombinowane pole wyboru
TextBlock_1:System.Windows.Controls.TextBlock.$Content Tekst Wpisz nazwę programu, folderu, dokumentu lub zasobu internetowego, a system Windows otworzy go dla Ciebie.
TextBlock_2:System.Windows.Controls.TextBlock.$Content Tekst Otwórz:
Window_1:System.Windows.Window.Title Nazwa Biegnij

Lokalizowanie aplikacji w języku niemieckim wymagałoby następujących tłumaczeń:

Klucz zasobu Kategoria lokalizacji Wartość
Button_1:System.Windows.Controls.Button.$Content Przycisk OK
Button_2:System.Windows.Controls.Button.$Content Przycisk Anuluj
Button_3:System.Windows.Controls.Button.$Content Przycisk Przeszukaj…
ComboBox_1:System.Windows.Controls.ComboBox.$Content kombinowane pole wyboru
TextBlock_1:System.Windows.Controls.TextBlock.$Content Tekst Geben Sie den Namen eines Programms, Ordners, Dokuments oder einer Internetresource an.
TextBlock_2:System.Windows.Controls.TextBlock.$Content Tekst Otwórz
Window_1:System.Windows.Window.Title Nazwa Biegnij

generowanie

Ostatnim krokiem lokalizacji jest utworzenie nowo zlokalizowanego zestawu satelitarnego. Można to zrobić za pomocą następującego polecenia LocBaml:

LocBaml.exe /generate RunDialog.resources.dll /trans:RunDialog.resources.dll. CSV /out: . /cul:de-DE

W niemieckim systemie Windows, jeśli ten resources.dll znajduje się w folderze de-DE obok głównego zestawu, zasób ten zostanie automatycznie załadowany zamiast tego znajdującego się w folderze en-US. Jeśli nie masz niemieckiej wersji systemu Windows, aby to przetestować, ustaw kulturę na kulturę odpowiadającą twojemu systemowi Windows (na przykład en-US), a następnie zamień oryginalną bibliotekę DLL zasobów.

Ładowanie zasobów satelickich

MyDialog.exe en-US\MyDialog.resources.dll de-DE\MyDialog.resources.dll
Kod Oryginalny angielski BAML Zlokalizowany BAML
Zasoby neutralne kulturowo Inne zasoby w języku angielskim Inne zasoby zlokalizowane w języku niemieckim

Platforma .NET automatycznie wybiera zestaw zasobów satelitarnych do załadowania na podstawie Thread.CurrentUICulture aplikacji. Domyślnie jest to kultura systemu operacyjnego Windows. Jeśli używasz niemieckiego systemu Windows, plik de-DE\MyDialog.resources.dll zostanie załadowany. Jeśli używasz systemu Windows w języku angielskim, plik en-US\MyDialog.resources.dllzostanie załadowany. Możesz ustawić ostateczny zasób rezerwowy dla aplikacji, określając NeutralResourcesLanguage atrybut w pliku AssemblyInfo projektu. Jeśli na przykład określisz:

[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]

następnie plik en-US\MyDialog.resources.dll jest używany z niemieckim systemem Windows, jeśli żaden z następujących plików nie jest dostępny: de-DE\MyDialog.resources.dll lub de\MyDialog.resources.dll.

Strona główna Arabii Saudyjskiej Firmy Microsoft

Poniższa grafika przedstawia stronę główną języka angielskiego i arabskiego. Aby uzyskać kompletny przykład, który tworzy te grafiki, zobacz Przykład strony głównej globalizacji.

Angielski:

Zrzut ekranu przedstawiający stronę główną w języku angielskim.

Arabski:

Zrzut ekranu przedstawiający stronę główną języka arabskiego.

Projektowanie globalnej strony głównej firmy Microsoft

Ta pozorowana witryna internetowa Microsoft Saudi Arabia ilustruje funkcje globalizacji oferowane dla języków RightToLeft. Języki, takie jak hebrajski i arabski, mają kolejność czytania od prawej do lewej, więc układ interfejsu użytkownika musi być często rozmieszczony zupełnie inaczej niż w językach od lewej do prawej, takich jak angielski. Lokalizowanie języka czytanego od lewej do prawej na język czytany od prawej do lewej lub odwrotnie może być dość trudne. WPF został zaprojektowany tak, aby takie lokalizacje były znacznie łatwiejsze.

Kierunek przepływu

Homepage.xaml:

<Page x:Uid="Page_1" x:Class="MicrosoftSaudiArabiaHomepage.Homepage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"   
    FlowDirection="LeftToRight" 
    Localization.Comments="FlowDirection(This FlowDirection controls the actual content of the homepage)"
    xml:lang="en-US">

Zwróć uwagę na właściwość FlowDirection na Page. Zmiana tej właściwości na RightToLeft spowoduje zmianę FlowDirection elementów podrzędnych Page, tak aby układ tego interfejsu użytkownika został odwrócony, stając się od prawej do lewej, jak oczekiwałby użytkownik arabski. Można zastąpić mechanizm dziedziczenia, określając wyraźnie FlowDirection dla dowolnego elementu. Właściwość FlowDirection jest dostępna dla dowolnego FrameworkElement elementu powiązanego z dokumentem lub i ma niejawną wartość LeftToRight.

Zwróć uwagę, że nawet pędzle gradientu tła są prawidłowo odwracane po zmianie elementu głównego FlowDirection

FlowDirection="LeftToRight"

Zrzut ekranu przedstawiający przepływ gradientu od lewej do prawej.

Kierunek przepływu="Od prawej do lewej"

Zrzut ekranu przedstawiający przepływ gradientu od prawej do lewej.

Unikaj używania stałych wymiarów dla paneli i kontrolek

Spójrz na stronę Homepage.xaml, zwróć uwagę, że oprócz stałej szerokości i wysokości określonej dla całego interfejsu użytkownika u góry DockPanel, nie ma innych stałych wymiarów. Unikaj używania stałych wymiarów, aby zapobiec wycinaniu zlokalizowanego tekstu, który może być dłuższy niż tekst źródłowy. Panele i kontrolki WPF automatycznie zmienią rozmiar na podstawie zawartości, którą zawierają. Większość kontrolek ma również minimalne i maksymalne wymiary, które można ustawić dla większej liczby kontrolek (na przykład MinWidth="20"). Za pomocą polecenia Grid można również ustawić względne szerokości i wysokości przy użyciu "*" (na przykład Width="0.25*") lub funkcji dzielenia rozmiaru komórki.

Komentarze lokalizacji

Istnieje wiele przypadków, w których zawartość może być niejednoznaczna i trudna do przetłumaczenia. Deweloper lub projektant ma możliwość zapewnienia dodatkowego kontekstu i komentarzy lokalizatorom za pośrednictwem komentarzy do lokalizacji. Na przykład w poniższym pliku Localization.Comments wyjaśniono użycie znaku '|'.

<TextBlock 
  x:Uid="TextBlock_2" 
  DockPanel.Dock="Right" 
  Foreground="White" 
  Margin="5,0,5,0"
  Localization.Comments="$Content(This character is used as a decorative rule.)">
  |
</TextBlock>

Ten komentarz staje się skojarzony z zawartością TextBlock_1, a w przypadku narzędzia LocBaml (zobacz Lokalizowanie aplikacji), można go zobaczyć w 6 kolumnie wiersza TextBlock_1 w pliku wyjściowym .csv:

Klucz zasobu Kategoria Czytelny Można modyfikować Komentarz Wartość
TextBlock_1:System.Windows.Controls.TextBlock.$Content Tekst PRAWIDŁOWE PRAWIDŁOWE Ten znak jest używany jako reguła dekoracyjna. |

Komentarze można umieścić w zawartości lub właściwości dowolnego elementu przy użyciu następującej składni:

<TextBlock 
  x:Uid="TextBlock_1" 
  DockPanel.Dock="Right" 
  Foreground="White" 
  Margin="5,0,5,0"
  Localization.Comments="$Content(This is a comment on the TextBlock's content.)
     Margin(This is a comment on the TextBlock's Margin property.)">
  |
 </TextBlock>

Atrybuty lokalizacji

Często deweloper lub menedżer ds. lokalizacji chce mieć kontrolę nad tym, co osoby zajmujące się lokalizacją mogą odczytywać i modyfikować. Na przykład możesz nie chcieć, aby lokalizator przetłumaczył nazwę firmy lub sformułowanie prawne. WPF udostępnia atrybuty, które umożliwiają ustawianie czytelności, modyfikacji i kategorii zawartości lub właściwości elementu, których narzędzie lokalizacji może użyć do blokowania, ukrywania lub sortowania elementów. Aby uzyskać więcej informacji, zobacz Attributes. Na potrzeby tego przykładu narzędzie LocBaml po prostu generuje wartości tych atrybutów. Wszystkie kontrolki WPF mają wartości domyślne dla tych atrybutów, ale można je zastąpić. Na przykład poniższy przykład zastępuje domyślne atrybuty lokalizacji dla TextBlock_1 i ustawia zawartość jako czytelną, ale niezmodyfikalną dla lokalizatorów.

<TextBlock
x:Uid="TextBlock_1"
Localization.Attributes=
"$Content(Readable Unmodifiable)">
  Microsoft Corporation
</TextBlock>

Oprócz atrybutów czytelności i modyfikacji, WPF zapewnia wyliczenie typowych kategorii interfejsu użytkownika (LocalizationCategory), które mogą służyć do nadania lokalizatorom większego kontekstu. Domyślne kategorie kontrolek platformy WPF można również zastąpić w języku XAML:

<TextBlock x:Uid="TextBlock_2">
<TextBlock.ToolTip>
<TextBlock
x:Uid="TextBlock_3"
Localization.Attributes=
"$Content(ToolTip Readable Unmodifiable)">
Microsoft Corporation
</TextBlock>
</TextBlock.ToolTip>
Windows Vista
</TextBlock>

Domyślne atrybuty lokalizacji, które udostępnia WPF, można również zastąpić za pomocą kodu, dzięki czemu można poprawnie ustawić odpowiednie wartości domyślne dla kontrolek niestandardowych. Przykład:

[Localizability(Readability = Readability.Readable, Modifiability=Modifiability.Unmodifiable, LocalizationCategory.None)]
public class CorporateLogo : TextBlock
{
    // ...
}

Atrybuty na wystąpienie ustawione w języku XAML będą miały pierwszeństwo przed wartościami ustawionymi w kodzie dla kontrolek niestandardowych. Aby uzyskać więcej informacji na temat atrybutów i komentarzy, zobacz Atrybuty lokalizacji i komentarze.

Czcionki rezerwowe i czcionki złożone

Jeśli określisz czcionkę, która nie obsługuje danego zakresu kodu, program WPF automatycznie przełączy się na tę, która obsługuje, przy użyciu pliku Global User Interface.compositefont znajdującego się w katalogu Windows\Fonts. Czcionki złożone działają tak samo jak każda inna czcionka i mogą być używane jawnie przez ustawienie elementu FontFamily (na przykład FontFamily="Global User Interface"). Możesz określić własną preferencję rezerwową czcionki, tworząc własną czcionkę złożoną i określając czcionkę używaną dla określonych zakresów i języków punktów kodu.

Aby uzyskać więcej informacji na temat czcionek złożonych, zobacz FontFamily.

Lokalizowanie strony głównej firmy Microsoft

Aby zlokalizować tę aplikację, możesz postępować według tych samych kroków, co w przypadku przykładu okna dialogowego Uruchom. Zlokalizowany plik .csv dla języka arabskiego jest dostępny na przykładowej stronie głównej Globalizacji.