Общие сведения о глобализации и локализации WPFWPF Globalization and Localization Overview

Если доступность продукта ограничена только одним языком, то таким образом ограничивается потенциальная база клиентов до некоторой части всего 6,5-миллиардного мирового населения.When you limit your product's availability to only one language, you limit your potential customer base to a fraction of our world’s 6.5 billion population. Чтобы созданные приложения были доступны мировой аудитории, одним из лучших и наиболее экономичных способов охватить большее количество клиентов является экономически эффективная локализация продукта.If you want your applications to reach a global audience, cost-effective localization of your product is one of the best and most economical ways to reach more customers.

В этом обзоре рассматривается глобализация и локализация в Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF).This overview introduces globalization and localization in Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF). Глобализация — это проектирование и разработка приложений, которые выполняются в нескольких расположениях.Globalization is the design and development of applications that perform in multiple locations. Например, глобализация поддерживает локализованные пользовательские интерфейсы и региональные данные для пользователей на различных языках.For example, globalization supports localized user interfaces and regional data for users in different cultures. WPFWPF предоставляет глобализованные функции проектирования, включая автоматический макет, вспомогательные сборки, локализованные атрибуты и комментарии.provides globalized design features, including automatic layout, satellite assemblies, and localized attributes and commenting.

Локализация — это перевод ресурсов приложения в локализованные версии для конкретных языков и региональных параметров, которые поддерживает приложение.Localization is the translation of application resources into localized versions for the specific cultures that the application supports. При локализации в WPFWPFиспользуются API-интерфейсы в пространстве имен System.Windows.Markup.Localizer.When you localize in WPFWPF, you use the APIs in the System.Windows.Markup.Localizer namespace. Эти API-интерфейсы. Пример средства командной строки для средства LocBaml .These APIs power the LocBaml Tool Sample command-line tool. Сведения о том, как создать и использовать LocBaml, см. в разделе Локализация приложения.For information about how to build and use LocBaml, see Localize an Application.

Рекомендации по глобализации и локализации в WPFBest Practices for Globalization and Localization in WPF

Вы можете максимально эффективно использовать функции глобализации и локализации, встроенные в WPFWPF, следуя советам по проектированию пользовательского интерфейса и локализации, приведенным в этом разделе.You can make the most of the globalization and localization functionality that is built into WPFWPF by following the UI design and localization-related tips that this section provides.

Оптимальные методы разработки пользовательского интерфейса WPFBest Practices for WPF UI Design

При проектировании ИПUIна основе WPFWPFрекомендуется реализовать следующие рекомендации:When you design a WPFWPF–based ИПUI, consider implementing these best practices:

  • Напишите ИПUI в XAMLXAML; Избегайте создания ИПUI в коде.Write your ИПUI in XAMLXAML; avoid creating ИПUI in code. При создании ИПUI с помощью XAMLXAMLвы предоставляете его через встроенные API-интерфейсы локализации.When you create your ИПUI by using XAMLXAML, you expose it through built-in localization APIs.

  • Старайтесь не использовать абсолютные позиции и фиксированные размеры для размещения содержимого; Вместо этого используйте относительное или автоматическое изменение размера.Avoid using absolute positions and fixed sizes to lay out content; instead, use relative or automatic sizing.

    • Используйте SizeToContent и задайте для ширины и высоты значение Auto.Use SizeToContent and keep widths and heights set to Auto.

    • Избегайте использования Canvas для размещения ИПUIs.Avoid using Canvas to lay out ИПUIs.

    • Используйте Grid и его функцию совместного использования размера.Use Grid and its size-sharing feature.

  • Необходимо предусмотреть дополнительное пространство в полях, так как локализованный текст часто занимает больше места.Provide extra space in margins because localized text often requires more space. Дополнительное пространство позволит использовать выступающие символы, возможно, присутствующие в конкретном языке.Extra space allows for possible overhanging characters.

  • Включите TextWrapping на TextBlock, чтобы избежать обрезки.Enable TextWrapping on TextBlock to avoid clipping.

  • Задайте атрибут xml:lang .Set the xml:lang attribute. Этот атрибут описывает язык и региональные параметры определенного элемента и его дочерних элементов.This attribute describes the culture of a specific element and its child elements. Значение этого свойства изменяет поведение нескольких функций в WPFWPF.The value of this property changes the behavior of several features in WPFWPF. Например, изменяется процесс переноса по слогам, проверки орфографии, подстановки чисел, формирования сложных скриптов и подмены шрифта.For example, it changes the behavior of hyphenation, spell checking, number substitution, complex script shaping, and font fallback. Дополнительные сведения о настройке обработки XML: lang в XAMLсм. в разделе глобализация для WPF .See Globalization for WPF for more information about setting the xml:lang Handling in XAML.

  • Создайте настраиваемый составной шрифт, чтобы улучшить управление шрифтами, используемыми для разных языков.Create a customized composite font to obtain better control of fonts that are used for different languages. По умолчанию WPFWPF использует шрифт Глобалусеринтерфаце. Composite в каталоге Windows\fonts.By default, WPFWPF uses the GlobalUserInterface.composite font in your Windows\Fonts directory.

  • При создании приложений навигации, которые могут быть локализованы в культуре, представляющей текст в формате справа налево, необходимо явно задать FlowDirection каждой страницы, чтобы убедиться, что страница не наследовала FlowDirection из NavigationWindow.When you create navigation applications that may be localized in a culture that presents text in a right-to-left format, explicitly set the FlowDirection of every page to ensure the page does not inherit FlowDirection from the NavigationWindow.

  • При создании автономных приложений навигации, размещенных за пределами браузера, установите StartupUri для начального приложения на NavigationWindow, а не на страницу (например, <Application StartupUri="NavigationWindow.xaml">).When you create stand-alone navigation applications that are hosted outside a browser, set the StartupUri for your initial application to a NavigationWindow instead of to a page (for example, <Application StartupUri="NavigationWindow.xaml">). Такая схема позволяет изменять FlowDirection окна и панели навигации.This design enables you to change the FlowDirection of the Window and the navigation bar. Дополнительные сведения и пример см. в разделе Пример домашней страницы глобализации.For more information and an example, see Globalization Homepage Sample.

Оптимальные методы локализации приложений WPFBest Practices for WPF Localization

При локализации приложений на основе WPFWPFрекомендуется реализовать следующие рекомендации:When you localize WPFWPF–based applications, consider implementing these best practices:

  • Используйте комментарии локализации, чтобы предоставить дополнительный контекст для локализаторов.Use localization comments to provide extra context for localizers.

  • Используйте атрибуты локализации для управления локализацией вместо выборочного пропуска Uid свойств элементов.Use localization attributes to control localization instead of selectively omitting Uid properties on elements. Дополнительные сведения см. в статье атрибуты и комментарии локализации .See Localization Attributes and Comments for more information.

  • Используйте msbuild -t:updateuid и -t:checkuid для добавления и проверки Uid свойств в XAMLXAML.Use msbuild -t:updateuid and -t:checkuid to add and check Uid properties in your XAMLXAML. Используйте Uid свойства для контроля изменений между разработкой и локализацией.Use Uid properties to track changes between development and localization. Uid свойства помогают локализовать новые изменения в разработке.Uid properties help you localize new development changes. При ручном добавлении Uid свойств в ИПUIзадача обычно утомительна и менее точная.If you manually add Uid properties to a ИПUI, the task is typically tedious and less accurate.

    • Не изменяйте и не изменяйте Uid свойства после начала локализации.Do not edit or change Uid properties after you begin localization.

    • Не используйте дублирующиеся свойства Uid (Помните, что этот Совет следует использовать при использовании команды копирования и вставки).Do not use duplicate Uid properties (remember this tip when you use the copy-and-paste command).

    • Задайте расположение UltimateResourceFallback в AssemblyInfo. *, чтобы указать соответствующий язык для отката (например, [assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]).Set the UltimateResourceFallback location in AssemblyInfo.* to specify the appropriate language for fallback (for example, [assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]).

      Если вы решили включить исходный язык в основную сборку, опустив тег <UICulture> в файле проекта, задайте расположение UltimateResourceFallback в качестве основной сборки, а не вспомогательной (например, [assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.MainAssembly)]).If you decide to include your source language in the main assembly by omitting the <UICulture> tag in your project file, set the UltimateResourceFallback location as the main assembly instead of the satellite (for example, [assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.MainAssembly)]).

Локализация приложения WPFLocalize a WPF Application

При локализации WPFWPF приложения существует несколько вариантов.When you localize a WPFWPF application, you have several options. Например, можно привязать локализуемые ресурсы в приложении к XML-файлу, сохранить локализуемый текст в таблицах RESX или использовать файлы Язык XAMLExtensible Application Markup Language (XAML) в локализатора.For example, you can bind the localizable resources in your application to an XML file, store localizable text in resx tables, or have your localizer use Язык XAMLExtensible Application Markup Language (XAML) files. В этом разделе описывается рабочий процесс локализации, в котором используется форма BAML языка XAML, которая предоставляет несколько преимуществ.This section describes a localization workflow that uses the BAML form of XAML, which provides several benefits:

  • Вы можете локализовать после сборки.You can localize after you build.

  • Можно выполнить обновление до более новой версии формы BAML XAML с локализацией из старой версии XAML-формы, чтобы можно было локализовать в то же время, в котором вы разрабатываете.You can update to a newer version of the BAML form of XAML with localizations from an older version of the BAML form of XAML so that you can localize at the same time that you develop.

  • Можно проверить исходные элементы и семантику во время компиляции, поскольку формат BAML XAML является скомпилированной формой XAMLXAML.You can validate original source elements and semantics at compile time because the BAML form of XAML is the compiled form of XAMLXAML.

Процесс построения локализацииLocalization Build Process

При разработке WPFWPF приложения процесс сборки для локализации выглядит следующим образом:When you develop a WPFWPF application, the build process for localization is as follows:

  • Разработчик создает и глобализация приложения WPFWPF.The developer creates and globalizes the WPFWPF application. В файле проекта разработчик устанавливает <UICulture>en-US</UICulture> таким образом, что при компиляции приложения создается основная сборка, не зависящая от языка.In the project file the developer sets <UICulture>en-US</UICulture> so that when the application is compiled, a language-neutral main assembly is generated. Эта сборка имеет вспомогательный файл .resources.dll, содержащий все локализуемые ресурсы.This assembly has a satellite .resources.dll file that contains all the localizable resources. При необходимости можно разместить исходный язык в основной сборке, так как наши API-интерфейсы локализации поддерживают извлечение из основной сборки.Optionally, you can keep the source language in the main assembly because our localization APIs support extraction from the main assembly.

  • При компиляции файла в сборку XAMLXAML преобразуется в форму BAML XAML.When the file is compiled into the build, the XAMLXAML is converted to the BAML form of XAML. Язык и региональные нейтральные MyDialog.exe, а также MyDialog.resources.dll файлы, зависящие от культуры (на английском языке), выводятся на английском языке.The culturally neutral MyDialog.exe and the culturally dependent (English) MyDialog.resources.dll files are released to the English-speaking customer.

Рабочий процесс локализацииLocalization Workflow

Процесс локализации начинается после сборки нелокализованного MyDialog.resources.dll файла.The localization process begins after the unlocalized MyDialog.resources.dll file is built. ИПUI элементы и свойства исходного XAMLXAML извлекаются из формы BAML XAML в пары "ключ — значение" с помощью API-интерфейсов в разделе System.Windows.Markup.Localizer.The ИПUI elements and properties in your original XAMLXAML are extracted from the BAML form of XAML into key-value pairs by using the APIs under System.Windows.Markup.Localizer. Локализаторы используют пары "ключ —значение" для локализации приложения.Localizers use the key-value pairs to localize the application. После завершения локализации можно создать файл .resource.dll на основе новых значений.You can generate a new .resource.dll from the new values after localization is complete.

Ключи пар «ключ-значение» — это x:Uid значения, помещаемые разработчиком в исходной XAMLXAML.The keys of the key-value pairs are x:Uid values that are placed by the developer in the original XAMLXAML. Эти x:Uid значения позволяют API отслеживанию и слиянию изменений, происходящих между разработчиком и локализаторам во время локализации.These x:Uid values enable the API to track and merge changes that happen between the developer and the localizer during localization. Например, если разработчик изменяет ИПUI после начала локализации, можно объединить изменение в разработку с уже завершенной работой по локализации, чтобы было потеряно минимальное количество операций перевода.For example, if the developer changes the ИПUI after the localizer begins localizing, you can merge the development change with the already completed localization work so that minimal translation work is lost.

На приведенном ниже рисунке показан типичный рабочий процесс локализации на основе BAML-формы XAML.The following graphic shows a typical localization workflow that is based on the BAML form of XAML. На этой схеме предполагается, что разработчик пишет приложение на английском языке.This diagram assumes the developer writes the application in English. Разработчик создает и глобализует приложение WPF.The developer creates and globalizes the WPF application. В файле проекта разработчик устанавливает <UICulture>en-US</UICulture> так, что при сборке не зависящая от языка основная сборка создается с вспомогательным. Resources. dll, содержащим все локализуемые ресурсы.In the project file the developer sets <UICulture>en-US</UICulture> so that on build, a language neutral main assembly gets generated with a satellite .resources.dll containing all localizable resources. Кроме того, можно сохранить исходный язык в основной сборке, так как интерфейсы API локализации WPF поддерживают извлечение из основной сборки.Alternately, one could keep the source language in the main assembly because WPF localization APIs support extraction from the main assembly. По завершении процесса сборки XAML компилируется в BAML.After the build process, the XAML get compiled into BAML. Независимый от языка и региональных параметров файл MyDialog.exe.resources.dll поставляется англоязычному пользователю.The culturally neutral MyDialog.exe.resources.dll get shipped to the English speaking customer.

Схема, показывающая рабочий процесс локализации.

Схема, на которой показан нелокализованный рабочий процесс.

Примеры локализации WPFExamples of WPF Localization

В этом разделе содержатся примеры локализованных приложений, которые помогут вам понять, как создавать и локализовать WPFWPF приложения.This section contains examples of localized applications to help you understand how to build and localize WPFWPF applications.

Пример диалогового окна "Выполнить"Run Dialog Box Example

На следующих рисунках показаны выходные данные образца диалогового окна выполнить .The following graphics show the output of the Run dialog box sample.

Английский.English:

Снимок экрана, показывающий диалоговое окно запуска на английском языке.

Немецкий.German:

Снимок экрана, показывающий диалоговое окно запуска на немецком языке.

Разработка глобального диалогового окна "Выполнить"Designing a Global Run Dialog Box

В этом примере создается диалоговое окно Run с помощью WPFWPF и XAMLXAML.This example produces a Run dialog box by using WPFWPF and XAMLXAML. Это диалоговое окно эквивалентно диалоговому окну выполнить , которое доступно из меню "Пуск" Microsoft Windows.This dialog box is equivalent to the Run dialog box that is available from the Microsoft Windows Start menu.

Некоторые замечания по созданию глобальных диалоговых оконSome highlights for making global dialog boxes are:

Автоматический макетAutomatic Layout

В файле Window1.xamlIn Window1.xaml:

<Window SizeToContent="WidthAndHeight">

Предыдущее свойство Window автоматически изменяет размер окна в соответствии с размером содержимого.The previous Window property automatically resizes the window according to the size of the content. Это свойство предотвращает обрезание содержимого окна, которое увеличивается в размере после локализации. Кроме того, оно также удаляет лишнее пространство, если содержимое уменьшается в размерах после локализации.This property prevents the window from cutting off content that increases in size after localization; it also removes unneeded space when content decreases in size after localization.

<Grid x:Uid="Grid_1">

для правильной работы API локализации WPFWPF требуются свойства Uid.Uid properties are needed in order for WPFWPF localization APIs to work correctly.

Они используются WPFWPF API локализации для контроля изменений между разработкой и локализацией пользовательский интерфейсuser interface (UI).They are used by WPFWPF localization APIs to track changes between the development and localization of the пользовательский интерфейсuser interface (UI). Uid свойства позволяют объединить более новую версию ИПUI с более ранней локализацией ИПUI.Uid properties enable you to merge a newer version of the ИПUI with an older localization of the ИПUI. Чтобы добавить свойство Uid, запустите msbuild -t:updateuid RunDialog.csproj в командной оболочке.You add a Uid property by running msbuild -t:updateuid RunDialog.csproj in a command shell. Это рекомендуемый метод добавления Uid свойств, так как их добавление вручную обычно занимает много времени и менее точно.This is the recommended method of adding Uid properties because manually adding them is typically time-consuming and less accurate. Чтобы убедиться, что Uid свойства правильно заданы, запустите msbuild -t:checkuid RunDialog.csproj.You can check that Uid properties are correctly set by running msbuild -t:checkuid RunDialog.csproj.

ИПUI структурирована с помощью элемента управления Grid, который является полезным элементом управления для использования автоматического макета в WPFWPF.The ИПUI is structured by using the Grid control, which is a useful control for taking advantage of the automatic layout in WPFWPF. Обратите внимание, что диалоговое окно разделено на три строки и пять столбцов.Note that the dialog box is split into three rows and five columns. Не одно из определений строк и столбцов имеет фиксированный размер. Таким образом, элементы ИПUI, расположенные в каждой ячейке, могут адаптироваться к увеличению и уменьшению размера во время локализации.Not one of the row and column definitions has a fixed size; hence, the ИПUI elements that are positioned in each cell can adapt to increases and decreases in size during localization.

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

Первые два столбца, в которых размещены значения Open: label и ComboBox, используют 10 процентов от ИПUI общей ширины.The first two columns where the Open: label and ComboBox are placed use 10 percent of the ИПUI total width.

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

Обратите внимание, что в примере используется функция общего изменения размера Grid.Note that of the example uses the shared-sizing feature of Grid. Последние три столбца используют преимущества этого метода путем помещения себя в один и тот же SharedSizeGroup.The last three columns take advantage of this by placing themselves in the same SharedSizeGroup. Как следует из имени свойства, это позволяет столбцам использовать один и тот же размер.As one would expect from the name of the property, this allows the columns to share the same size. Итак, когда «Browse...» локализовано для более длинной строки "Durchsuchen...", все кнопки увеличиваются по ширине вместо небольшой кнопки "ОК" и непропорционального большого размера "Durchsuchen..." переключатель.So when the "Browse…" gets localized to the longer string "Durchsuchen…", all buttons grow in width instead of having a small "OK" button and a disproportionately large "Durchsuchen…" button.

XML: langxml:lang

xml:lang="en-US"

Обратите внимание на обработку XML: lang в XAML , размещенную в корневом элементе ИПUI.Notice the xml:lang Handling in XAML placed at the root element of the ИПUI. Это свойство описывает язык и региональные параметры конкретного элемента и его потомков.This property describes the culture of a given element and its children. Это значение используется несколькими компонентами в WPFWPF и должно быть соответствующим образом изменено во время локализации.This value is used by several features in WPFWPF and should be changed appropriately during localization. Это значение изменяется в зависимости от того, какой языковой словарь используется для расстановки переносов и проверки орфографии слов.This value changes what language dictionary is use to hyphenate and spell check words. Оно также влияет на отображение цифр и на то, как система подмены шрифтов выбирает шрифт для использования.It also affects the display of digits and how the font fallback system selects which font to use. Наконец, это свойство влияет на способ отображения чисел и на способ написания текста в сложных скриптах.Finally, the property affects the way numbers are displayed and the way texts written in complex scripts are shaped. По умолчанию используется значение en-US.The default value is "en-US".

Создание вспомогательной сборки ресурсовBuilding a Satellite Resource Assembly

В файле .csprojIn .csproj:

Измените файл .csproj и добавьте следующий тег в безусловную <PropertyGroup>:Edit the .csproj file and add the following tag to an unconditional <PropertyGroup>:

<UICulture>en-US</UICulture>

Обратите внимание на добавление UICulture значения.Notice the addition of a UICulture value. Если для этого параметра задано допустимое значение CultureInfo, например en-US, сборка проекта создаст вспомогательную сборку со всеми локализованными ресурсами.When this is set to a valid CultureInfo value such as en-US, building the project will generate a satellite assembly with all localizable resources in it.

<Resource Include="RunIcon.JPG">

<Localizable>False</Localizable>

</Resource>

RunIcon.JPG не обязательно должен быть локализован, так как он должен отображаться одинаковым для всех языков и региональных параметров.The RunIcon.JPG does not need to be localized because it should appear the same for all cultures. Localizable имеет значение false, чтобы оно оставалось в независимой от языка основной сборке, а не в вспомогательной сборке.Localizable is set to false so that it remains in the language neutral main assembly instead of the satellite assembly. Значением по умолчанию для всех некомпилируемых ресурсов является Localizable установлен для true.The default value of all noncompilable resources is Localizable set to true.

Локализация диалогового окна "Выполнить"Localizing the Run Dialog

АнализParse

После сборки приложения первым шагом в локализации является анализ локализуемых ресурсов из вспомогательной сборки.After building the application, the first step in localizing it is parsing the localizable resources out of the satellite assembly. Для целей этого раздела используйте образец средства LocBaml, который можно найти в примере средства LocBaml.For the purposes of this topic, use the sample LocBaml tool which can be found at LocBaml Tool Sample. Обратите внимание, что LocBaml ― только демонстрационное средство, предназначенное помочь начать работу по созданию средства локализации, встраиваемого в процесс локализации.Note that LocBaml is only a sample tool meant to help you get started in building a localization tool that fits into your localization process. С помощью LocBaml выполните следующую команду для синтаксического анализа: LocBaml/Парсе RunDialog. Resources. dll/out: для создания файла "RunDialog. Resources. dll. csv".Using LocBaml, run the following to parse: LocBaml /parse RunDialog.resources.dll /out: to generate a "RunDialog.resources.dll.CSV" file.

ЛокализацияLocalize

Для редактирования этого файла можно воспользоваться любым редактором CSV, поддерживающим Юникод.Use your favorite CSV editor that supports Unicode to edit this file. Исключите все записи с категорией локализации "Нет".Filter out all entries with a localization category of "None". Должны остаться следующие записи.You should see the following entries:

Ключ ресурсаResource Key Категория локализацииLocalization Category значенияValue
Button_1:System.Windows.Controls.Button.$ContentButton_1:System.Windows.Controls.Button.$Content КнопкаButton ОКOK
Button_2:System.Windows.Controls.Button.$ContentButton_2:System.Windows.Controls.Button.$Content КнопкаButton CancelCancel
Button_3:System.Windows.Controls.Button.$ContentButton_3:System.Windows.Controls.Button.$Content КнопкаButton Обзор...Browse...
ComboBox_1:System.Windows.Controls.ComboBox.$ContentComboBox_1:System.Windows.Controls.ComboBox.$Content ComboBoxComboBox
TextBlock_1:System.Windows.Controls.TextBlock.$ContentTextBlock_1:System.Windows.Controls.TextBlock.$Content TextText Введите имя программы, папки, документа или ресурса Интернета, и Windows откроет их.Type the name of a program, folder, document, or Internet resource, and Windows will open it for you.
TextBlock_2:System.Windows.Controls.TextBlock.$ContentTextBlock_2:System.Windows.Controls.TextBlock.$Content TextText Открыть:Open:
Window_1:System.Windows.Window.TitleWindow_1:System.Windows.Window.Title ЗаголовокTitle ВыполнитьRun

Для локализации приложений в немецком языке потребуются следующие переводы.Localizing the application to German would require the following translations:

Ключ ресурсаResource Key Категория локализацииLocalization Category значенияValue
Button_1:System.Windows.Controls.Button.$ContentButton_1:System.Windows.Controls.Button.$Content КнопкаButton ОКOK
Button_2:System.Windows.Controls.Button.$ContentButton_2:System.Windows.Controls.Button.$Content КнопкаButton AbbrechenAbbrechen
Button_3:System.Windows.Controls.Button.$ContentButton_3:System.Windows.Controls.Button.$Content КнопкаButton Durchsuchen…Durchsuchen…
ComboBox_1:System.Windows.Controls.ComboBox.$ContentComboBox_1:System.Windows.Controls.ComboBox.$Content ComboBoxComboBox
TextBlock_1:System.Windows.Controls.TextBlock.$ContentTextBlock_1:System.Windows.Controls.TextBlock.$Content TextText Geben Sie den Namen eines Programms, Ordners, Dokuments oder einer Internetresource an.Geben Sie den Namen eines Programms, Ordners, Dokuments oder einer Internetresource an.
TextBlock_2:System.Windows.Controls.TextBlock.$ContentTextBlock_2:System.Windows.Controls.TextBlock.$Content TextText Öффнен:Öffnen:
Window_1:System.Windows.Window.TitleWindow_1:System.Windows.Window.Title ЗаголовокTitle ВыполнитьRun

СозданиеGenerate

Последний шаг локализации включает создание только что локализованной вспомогательной сборки.The last step of localization involves creating the newly localized satellite assembly. Эту задачу можно решить с помощью следующей команды LocBaml.This can be accomplished with the following LocBaml command:

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

В Windows на немецком языке, если файл Resources. dll помещен в папку de-DE рядом с основной сборкой, этот ресурс будет автоматически загружаться, а не в папку en-US.On German Windows, if this resources.dll is placed in a de-DE folder next to the main assembly, this resource will automatically load instead of the one in the en-US folder. Если у вас нет немецкой версии Windows для тестирования, задайте для языка и региональных параметров используемую язык и региональные параметры Windows (например, en-US) и замените библиотеку DLL исходных ресурсов.If you do not have a German version of Windows to test this, set the culture to whatever culture of Windows you are using (for example, en-US), and replace the original resources DLL.

Загрузка вспомогательных ресурсовSatellite Resource Loading

MyDialog.exeMyDialog.exe en-US\MyDialog.resources.dllen-US\MyDialog.resources.dll de-DE\MyDialog.resources.dllde-DE\MyDialog.resources.dll
КодCode Исходный английский BAMLOriginal English BAML Локализованный BAMLLocalized BAML
Ресурсы, не зависящие от языка и региональных параметровCulturally neutral resources Другие ресурсы на английском языкеOther resources in English Другие ресурсы, локализованные для немецкого языкаOther resources localized to German

Платформа .NET Framework автоматически выбирает вспомогательную сборку ресурсов для загрузки на основе Thread.CurrentThread.CurrentUICultureприложения.The .NET framework automatically chooses which satellite resources assembly to load based on the application’s Thread.CurrentThread.CurrentUICulture. По умолчанию используется язык и региональные параметры операционной системы Windows.This defaults to the culture of your Windows OS. Поэтому, если вы используете Windows на немецком языке, de-DE\MyDialog.resources.dll загружается, если вы используете англоязычные окна, EN-us\mydialog.Resources.dll. загружает.So if you are using German Windows, the de-DE\MyDialog.resources.dll loads, if you are using English Windows, the en-US\MyDialog.resources.dll loads. Можно задать для приложения резервный ресурс, указав NeutralResourcesLanguage в AssemblyInfo.* проекта.You can set the ultimate fallback resource for your application by specifying the NeutralResourcesLanguage in your project’s AssemblyInfo.*. Например, если будет указано:For example if you specify:

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

то в случае недоступности de-DE\MyDialog.resources.dll и de\MyDialog.resources.dll немецкой версией Windows будет использоваться en-US\MyDialog.resources.dll.then the en-US\MyDialog.resources.dll will be used with German Windows if a de-DE\MyDialog.resources.dll or de\MyDialog.resources.dll are both unavailable.

Домашняя страница сайта Майкрософт для Саудовской АравииMicrosoft Saudi Arabia Homepage

На рисунке ниже показаны английская и арабская домашние страницы.The following graphics show an English and Arabic Homepage. Полный пример, в котором создаются эти графические элементы, см. в разделе Пример домашней страницы глобализации.For the complete sample that produces these graphics see Globalization Homepage Sample.

Английский.English:

Снимок экрана, на котором показана домашняя страница английского языка.

Арабский:Arabic:

Снимок экрана, показывающий домашнюю страницу для арабского языка.

Разработка глобальной домашней страницы МайкрософтDesigning a Global Microsoft home page

Этот макет веб-сайта Майкрософт для Саудовской Аравии показывает функциональные возможности глобализации, предоставляемые для языков с порядком чтения справа налево (RightToLeft).This mock up of the Microsoft Saudi Arabia web site illustrates the globalization features provided for RightToLeft languages. Такие языки, как иврит и арабский, имеют порядок чтения справа налево, поэтому компоновка ИПUI должна быть размещена совершенно иначе, чем в языках слева направо, таких как английский.Languages such as Hebrew and Arabic have a right-to-left reading order so the layout of ИПUI must often be laid out quite differently than it would be in left-to-right languages such as English. Локализация с языка с направлением письма слева направо на язык с направлением письма справа налево или наоборот может быть достаточно сложной.Localizing from a left-to-right language to a right-to-left language or vice versa can be quite challenging. WPFWPF разработан так, чтобы значительно упростить подобные локализации.has been designed to make such localizations much easier.

FlowDirectionFlowDirection

Homepage.xaml: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">

Обратите внимание на свойство FlowDirection в Page.Notice the FlowDirection property on Page. Изменение этого свойства на RightToLeft изменит FlowDirection Page и его дочерние элементы таким образом, чтобы макет этого ИПUI был отражен так, чтобы он стал доступен для чтения справа налево.Changing this property to RightToLeft will change the FlowDirection of the Page and its children elements so that the layout of this ИПUI is flipped to become right-to-left as an Arabic user would expect. Одно из них может переопределить поведение наследования, указав явное FlowDirection для любого элемента.One can override the inheritance behavior by specifying an explicit FlowDirection on any element. Свойство FlowDirection доступно для любого FrameworkElement или элемента, связанного с документом, и имеет неявное значение LeftToRight.The FlowDirection property is available on any FrameworkElement or document related element and has an implicit value of LeftToRight.

Обратите внимание, что даже фоновые градиентные кисти переносятся правильно при изменении корневого FlowDirection:Observe that even the background gradient brushes are flipped correctly when the root FlowDirection is changed:

FlowDirection="LeftToRight"FlowDirection="LeftToRight"

Снимок экрана, показывающий поток градиента слева направо.

FlowDirection="RightToLeft"FlowDirection="RightToLeft"

Снимок экрана, показывающий поток градиента справа налево.

Избегайте использования фиксированных размеров для панелей и элементов управленияAvoid Using Fixed Dimensions for Panels and Controls

Взгляните на homepage. XAML, обратите внимание на то, что помимо фиксированной ширины и высоты, указанной для всего ИПUI в верхней DockPanel, нет других фиксированных измерений.Take a look through Homepage.xaml, notice that aside from the fixed width and height specified for the entire ИПUI on the top DockPanel, there are no other fixed dimensions. Не следует использовать фиксированные размеры, чтобы предотвратить отсечение локализованного текста, который может быть больше, чем исходный текст.Avoid using fixed dimensions to prevent clipping localized text that may be longer than the source text. Панели и элементы управления WPFWPF будут автоматически изменяться в размерах в зависимости от находящегося в них содержимого.WPFWPF panels and controls will automatically resize based on the content that they contain. Большинство элементов управления также имеют минимальные и максимальные размеры, которые можно задать для большего контроля (например, MinWidth = "20").Most controls also have minimum and maximum dimensions that you can set for more control (for example, MinWidth="20"). С помощью Gridможно также задать относительную ширину и высоту, используя "*" (например, Width="0.25*") или функцию совместного использования размера ячейки.With Grid, you can also set relative widths and heights by using ‘*’ (for example, Width="0.25*") or use its cell size sharing feature.

Комментарии о локализацииLocalization Comments

Во многих случаях содержимое может быть неоднозначным и трудным для перевода.There are many cases where content may be ambiguous and difficult to translate. Разработчик и проектировщик имеют возможность предоставить локализаторам дополнительный контекст и примечания в комментариях локализации.The developer or designer has the ability to provide extra context and comments to localizers through localization comments. Например, в приведенных ниже комментариях локализации уточняется использование символа "|".For example the Localization.Comments below clarifies the usage of the character ‘|’.

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

Этот комментарий связан с содержимым TextBlock_1's и в случае средства LocBaml (см. раздел Локализация приложения) оно может отображаться в шестом столбце строки TextBlock_1 в файле Output. csv:This comment becomes associated with TextBlock_1’s content and in the case of the LocBaml Tool, ( see Localize an Application), it can be seen in the 6th column of the TextBlock_1 row in the output .csv file:

Ключ ресурсаResource Key КатегорияCategory Доступен для чтенияReadable ИзменяемыйModifiable Добавление примечанийComment значенияValue
TextBlock_1:System.Windows.Controls.TextBlock.$ContentTextBlock_1:System.Windows.Controls.TextBlock.$Content TextText trueTRUE trueTRUE Этот символ используется в качестве декоративного правила.This character is used as a decorative rule. ||

Комментарии могут быть помещены в содержимое или в свойство любого элемента посредством следующего синтаксиса.Comments can be placed on the content or property of any element using the following syntax:

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

Атрибуты локализацииLocalization Attributes

Разработчику или менеджеру локализации часто бывает необходимо управлять тем, что локализаторы могут читать и изменять.Often the developer or localization manager needs control of what localizers can read and modify. Например, может быть нежелательно, чтобы локализатор переводил название компании или юридическую формулировку.For example, you might not want the localizer to translate the name of your company or legal wording. В WPFWPF имеются атрибуты, позволяющие задать возможность чтения, возможность изменения, а также категорию содержимого или свойства элемента. Эти атрибуты можно использовать в средстве локализации для блокировки, скрытия или сортировки элементов.WPFWPF provides attributes that enable you to set the readability, modifiability, and category of an element’s content or property which your localization tool can use to lock, hide, or sort elements. Для получения дополнительной информации см. Attributes.For more information, see Attributes. В этом примере средство LocBaml только выводит значения этих атрибутов.For the purposes of this sample, the LocBaml Tool just outputs the values of these attributes. Во всех элементах управления WPFWPF эти атрибуты имеют значения по умолчанию, но их можно переопределять.WPFWPF controls all have default values for these attributes, but you the can override them. Например, в следующем примере переопределяются атрибуты локализации по умолчанию для TextBlock_1 и задается, что содержимое будет доступно для чтения, но не может быть изменено для локализаторов.For example, the following example overrides the default localization attributes for TextBlock_1 and sets the content to be readable but unmodifiable for localizers.

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

Помимо атрибутов удобочитаемости и модификатора, WPFWPF предоставляет перечисление общих категорий пользовательского интерфейса (LocalizationCategory), которые можно использовать для предоставления локализаторам большего контекста.In addition to the readability and modifiability attributes, WPFWPF provides an enumeration of common UI categories (LocalizationCategory) that can be used to give localizers more context. Категории WPFWPF по умолчанию для элементов управления платформы можно также переопределить в XAMLXAML.The WPFWPF default categories for platform controls can be overridden in XAMLXAML as well:

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

Атрибуты локализации по умолчанию, которые WPFWPF предоставляют, также могут быть переопределены с помощью кода, поэтому можно правильно задать значения по умолчанию для пользовательских элементов управления.The default localization attributes that WPFWPF provides can also be overridden through code, so you can correctly set the right default values for custom controls. Пример:For example:

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

Атрибуты каждого экземпляра, заданные в XAMLXAML, имеют приоритет над значениями, заданными в коде пользовательских элементов управления.The per instance attributes set in XAMLXAML will take precedence over the values set in code on custom controls. Дополнительные сведения об атрибутах и комментариях см. в разделе атрибуты и комментарии локализации.For more information on attributes and comments, see Localization Attributes and Comments.

Подмена шрифтов и составные шрифтыFont Fallback and Composite Fonts

Если указать шрифт, который не поддерживает заданный диапазон codepoint, WPFWPF автоматически вернется к той, которая выполняется с помощью глобального пользовательского интерфейса. компоситефонт, расположенного в каталоге Windows\fonts.If you specify a font that does not support a given codepoint range, WPFWPF will automatically fallback to one that does by using the Global User Interface.compositefont that is located in your Windows\Fonts directory. Составные шрифты работают так же, как любой другой шрифт, и могут использоваться явно путем установки FontFamily элемента (например, FontFamily="Global User Interface").Composite fonts work just as any other font and can be used explicitly by setting an element’s FontFamily (for instance, FontFamily="Global User Interface"). Вы можете задавать собственные предпочтения для подмены шрифта путем создания собственного составного шрифта и указания его использования для конкретных языков и диапазонов кодовых точек.You can specify your own font fallback preference by creating your own composite font and specifying what font to use for specific codepoint ranges and languages.

Дополнительные сведения о составных шрифтах см. в разделе FontFamily.For more information on composite fonts see FontFamily.

Локализация домашней страницы МайкрософтLocalizing the Microsoft Homepage

Для локализации этого приложения можно выполнить те же действия, что и в примере локализации диалогового окна "Выполнить".You can follow the same steps as the Run Dialog example to localize this application. Локализованный CSV-файл для арабского языка доступен в образце домашней страницы глобализации.The localized .csv file for Arabic is available for you in the Globalization Homepage Sample.