Przegląd Lokalizacja i globalizacja 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 użyjesz interfejsów API w System.Windows.Markup.Localizer przestrzeni nazw. Te interfejsy API umożliwiają 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 uwidaczniasz 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ść i wysokość ustawioną na Autowartość .

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

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

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

  • Włącz, TextWrappingTextBlock aby uniknąć wycinków.

  • xml:lang Ustaw atrybut . 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, kształtowania złożonego skryptu i rezerwowania 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 nawigacji, które mogą być zlokalizowane w kulturze, która przedstawia tekst w formacie od prawej do lewej, jawnie ustaw FlowDirection dla każdej strony, aby upewnić się, że strona nie dziedziczy FlowDirection z elementu NavigationWindow.

  • Podczas tworzenia autonomicznych aplikacji nawigacyjnych hostowanych poza przeglądarką ustaw StartupUri dla początkowej aplikacji NavigationWindow wartość 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 funkcji 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 język dla rezerwowego (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 satelity, 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ęzycznym.

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 do par klucz-wartość przy użyciu interfejsów API w obszarze System.Windows.Markup.Localizer. Lokalizatory używają par klucz-wartość do lokalizowania aplikacji. Nową bibliotekę .resource.dll można wygenerować na podstawie nowych wartości po zakończeniu lokalizacji.

Klucze par klucz-wartość to x:Uid wartości umieszczone przez dewelopera w oryginalnym języku 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 lokalizatora, możesz scalić zmianę programowania z już ukończoną lokalizacją, aby minimalna praca tłumaczenia została utracona.

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 zestawy <UICulture>en-US</UICulture> tak, aby podczas kompilacji, główny zestaw neutralny dla języka jest generowany za pomocą satelity .resources.dll zawierającego 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ą dostarczane do klienta mówiącego po angielsku.

Diagram showing the Localization workflow.

Diagram showing the Unlocalized workflow.

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:

Screenshot showing an English Run dialog box.

Niemiecki:

Screenshot showing a German Run dialog box.

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 okno dialogowe Uruchamianie, które jest dostępne w menu Start 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 śledzenia zmian między programowaniem i lokalizacją interfejsu użytkownika. Uid właściwości umożliwiają scalanie nowszej wersji interfejsu użytkownika ze starszą lokalizacją interfejsu użytkownika. Właściwość można dodać Uid , uruchamiając polecenie 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 w przykładzie użyto funkcji określania rozmiaru udostępnionego elementu Grid. Ostatnie trzy kolumny korzystają z tej funkcji, umieszczając się w tym samym SharedSizeGroupobiekcie . Jak można oczekiwać od nazwy właściwości, umożliwia to kolumnom współużytkowanie tego samego rozmiaru. Tak więc, gdy "Przeglądaj..." program jest zlokalizowany w dłuższym ciągu "Durchsuchen...", wszystkie przyciski rosną w szerokości zamiast mieć mały przycisk "OK" i nieproporcjonalnie duży "Durchsuchen..." Przycisk.

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 elementów podrzędnych. Ta wartość jest używana przez kilka funkcji w WPF i powinna zostać odpowiednio zmieniona podczas lokalizacji. Ta wartość zmienia słownik języka w celu 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 UICulture wartości. Po ustawieniu tej wartości na prawidłową CultureInfo wartość, taką jak en-US, utworzenie 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 parametr jest ustawiony tak false , aby pozostał w neutralnym języku głównym zestawie zamiast zestawu satelitarnego. Wartość domyślna wszystkich niekompilowalnych zasobów jest Localizable ustawiona na truewartość .

Lokalizowanie okna dialogowego Uruchamiania

Analizuj

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ą pliku LocBaml uruchom następujące polecenie, aby przeanalizować: LocBaml /parse RunDialog.resources.dll /out: w celu wygenerowania pliku "RunDialog.resources.dll.CSV".

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 ComboBox
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 Stanowisko Uruchom

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 Abbrechen
Button_3:System.Windows.Controls.Button.$Content Przycisk Durchsuchen...
ComboBox_1:System.Windows.Controls.ComboBox.$Content ComboBox
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 Öffnen:
Window_1:System.Windows.Window.Title Stanowisko Uruchom

Generowania

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

Jeśli ten plik resources.dll znajduje się w folderze de-DE obok głównego zestawu, ten zasób zostanie automatycznie załadowany zamiast tego w folderze en-US. Jeśli nie masz niemieckiej wersji systemu Windows, aby to przetestować, ustaw kulturę na dowolną używaną kulturę systemu Windows (na przykład en-US), a następnie zastąp 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 kod 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 Thread.CurrentUICulturena podstawie aplikacji . Domyślnie jest to kultura systemu operacyjnego Windows. Jeśli używasz niemieckiego systemu Windows, zostanie załadowany plik de-DE\MyDialog.resources.dll . Jeśli używasz systemu Windows w języku angielskim, zostanie załadowany plik en-US\MyDialog.resources.dll . 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:

Screenshot showing an English home page.

Arabski:

Screenshot showing an Arabic home page.

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 od języka od lewej do prawej do języka od prawej do lewej lub odwrotnie może być dość trudne. WPF został zaprojektowany tak, aby takie lokalizacje były znacznie łatwiejsze.

Flowdirection

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 FlowDirection właściwość na .Page Zmiana tej właściwości RightToLeft na spowoduje zmianę FlowDirection elementów elementów podrzędnych Page i i tak, aby układ tego interfejsu użytkownika został przerzucony, aby stał się od prawej do lewej, jak oczekiwałby użytkownik arabski. Można zastąpić zachowanie dziedziczenia, określając jawnie 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 przerzucane po zmianie katalogu głównego FlowDirection :

FlowDirection="LeftToRight"

Screenshot showing the gradient flow from left to right.

FlowDirection="RightToLeft"

Screenshot showing the gradient flow from right to left.

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ą Gridpolecenia można również ustawić względne szerokości i wysokości przy użyciu funkcji "*" (na przykład Width="0.25*") lub funkcji udostępniania 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 do lokalizatorów 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 wyjściowym pliku CSV:

Klucz zasobu Kategoria Czytelny Modyfikowalnych Komentarz Wartość
TextBlock_1:System.Windows.Controls.TextBlock.$Content Tekst PRAWDA PRAWDA 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 menedżer deweloperów lub lokalizacji wymaga kontroli nad tym, co lokalizatory 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. W celu uzyskania więcej informacji, zobacz następujący temat: 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 punktów kodu, program WPF automatycznie wróci do tej, która będzie używana przy użyciu globalnego interfejsu użytkownika.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 wykonać te same kroki co przykład uruchom okno dialogowe. Zlokalizowany plik CSV dla języka arabskiego jest dostępny w przykładzie strony głównej globalizacji.