Глобализация для WPF

В этом разделе рассматриваются проблемы, которые следует учитывать при написании приложений Windows Presentation Foundation для мирового рынка. Элементы программирования глобализации определяются в пространстве имен System.Globalization.

Глобализация XAML

Расширяемый язык разметки приложений (XAML) разработан на основе XML и использует поддержку глобализации, определенную в спецификации XML. В следующих разделах описаны некоторые функции XAML, о которых следует помнить.

Ссылки символов

Ссылка символа предоставляет единицу кода UTF16 для определенных символов Юникод, которые она представляет (в десятичном или шестнадцатеричном формате). В следующем примере показана ссылка на символы десятичных чисел для COPTIC CAPITAL LETTER HORI или Ϩ:

Ϩ

В следующем примере показана шестнадцатеричная ссылка символа. Обратите внимание, что она содержит x перед шестнадцатеричным числом.

Ϩ

Кодировка

Кодировка, поддерживаемая XAML — ASCII, Юникод UTF-16 и UTF-8. Оператор кодировки должен находиться в начале документа XAML. Если атрибут кодировки и порядок байтов отсутствуют, по умолчанию в средстве синтаксического анализа используется кодировка UTF-8. Предпочтительные кодировки: UTF-8 и UTF-16. UTF-7 не поддерживается. В следующем примере демонстрируется указание кодировки UTF-8 в файле XAML.

?xml encoding="UTF-8"?

Атрибут Language

XAML использует xml:lang для представления атрибута языка элемента. Чтобы использовать преимущества класса CultureInfo, в качестве значения атрибута языка должно использоваться одно из имен языка и региональных стандартов, предварительно определенное CultureInfo. xml:lang наследуется в дереве элементов (правилами XML, не обязательно из-за наследования свойства зависимости), и его значение по умолчанию — пустая строка, если оно не назначено явно.

Атрибут языка очень полезен для указания региональных языков. Например, французский язык имеет разные написание, словарь и произношение во Франции, Квебеке, Бельгии и Швейцарии. Кроме того, китайский, японский и корейский используют одни и те же кодовые точки в Юникод, однако их идеограммы и шрифты различаются.

В следующем примере XAML используется атрибут языка fr-CA для указания на канадский французский.

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

Unicode

XAML поддерживает все функции Юникода, включая суррогаты. Если набор символов можно сопоставить с Юникодом, он поддерживается. Например, GB18030 представляет определенные символы, которые сопоставляются расширениям A и B и парам суррогатов китайского, японского и корейского. Следовательно, этот набор символов полностью поддерживается. Приложение WPF может использовать StringInfo для управления строками без понимания наличия суррогатных пар или объединения символов.

Проектирование международного интерфейса пользователя с XAML

В этом разделе описываются функции пользовательского интерфейса, которые следует учитывать при написании приложения.

Международный текст

WPF включает встроенную обработку для всех поддерживаемых систем записи в Microsoft .NET Framework.

В настоящее время поддерживаются следующие скрипты.

  • Арабский

  • Бенгальский

  • Девангари

  • Кириллица

  • Греческий

  • Гуджарати

  • Гурмукхи

  • Иврит

  • Идеографические скрипты

  • Каннада

  • Лаосский

  • Латинская

  • Малаялам

  • Монгольский

  • Ория

  • Сирийский

  • Тамильский

  • Телугу

  • мальдивский

  • Тайский *

  • Тибетский

* В этом выпуске отображение и изменение текста на тайском языке поддерживается; а разбиение по словам — нет.

В настоящее время не поддерживаются следующие скрипты.

  • Кхмерский

  • Старый хангыль (корейский)

  • Мьянма

  • Сингальский

Все обработчики систем письма поддерживают шрифты OpenType. Шрифты OpenType могут включать таблицы макетов OpenType, которые позволяют создателям шрифтов проектировать более качественные международные и профессиональные типографские шрифты. Таблицы макетов шрифтов OpenType содержат информацию о заменах, позиционировании, выравнивании глифов, позиционировании относительно базового уровня, включении приложений обработки текста для улучшения макетов текста.

Шрифты OpenType позволяют обрабатывать крупные наборы глифов с помощью кодировки Юникод. Такая кодировка обеспечивает широкую международную поддержку и возможность использования типографских вариантов глифов.

Отрисовка текста WPF основана на технологии вложенных пикселей Microsoft ClearType, которая поддерживает независимость от разрешения. Это значительно улучшает читаемость и предоставляет возможность поддержки качественных документов журнального стиля для всех скриптов.

Международный макет

WPF предоставляет очень удобный способ поддержки горизонтальных, двунаправленных и вертикальных макетов. На платформе представления свойство FlowDirection можно использовать для определения макета. Ниже перечислены шаблоны направления текста:

  • LeftToRight — горизонтальная разметка для латиницы, восточноазиатских языков и т. д.

  • RightToLeft — двунаправленная разметка для арабского, иврита и т. д.

Разработка локализуемых приложений

При написании приложений для мирового рынка следует помнить, что приложения должны быть локализуемыми. В следующих разделах указано, на что обратить внимание.

Многоязыковой интерфейс пользователя

Многоязыковой интерфейс пользователя реализует поддержку Майкрософт для переключения пользовательских интерфейсов с одного языка на другой. В приложении WPF для поддержки MUI используется модель сборок. Одно приложение содержит независимые от языка сборки, а также зависимые от языка сборки вспомогательных ресурсов. Точкой входа является управляемый EXE-файл в основной сборке. Загрузчик ресурсов WPF использует диспетчер ресурсов Framework для поддержки поиска и резервного копирования ресурсов. Многоязыковые вспомогательные сборки работают с одной и той же основной сборкой. Загружаемая сборка ресурса зависит от CurrentUICulture текущего потока.

Локализуемый пользовательский интерфейс

Приложения WPF используют XAML для определения пользовательского интерфейса. XAML позволяет разработчикам указывать иерархию объектов с набором свойств и логики. Основное использование XAML заключается в разработке приложений WPF, но его можно использовать для указания иерархии любых объектов среды CLR. Большинство разработчиков используют XAML для указания пользовательского интерфейса приложения и использования языка программирования, например C# для реагирования на взаимодействие с пользователем.

С точки зрения ресурсов пользовательский интерфейс представляет собой элемент ресурсов и, следовательно, для поддержки международных языков окончательный формат распространения должен быть локализуемым. Поскольку XAML не может обрабатывать события, многие приложения XAML содержат для этого специальные блоки кода. Дополнительные сведения см. в разделе XAML в WPF. Код исключается и компилируется в разные двоичные файлы при разметке файла XAML в BAML-форму XAML. Форма BAML файлов XAML, изображения и другие типы управляемых объектов ресурсов внедряются во вспомогательную сборку ресурсов, которая может быть локализована на другие языки, или в основную сборку, если локализация не требуется.

Примечание.

Приложения WPF поддерживают все ресурсы FrameworkCLR, включая таблицы строк, изображения и т. д.

Разработка локализуемых приложений

Локализация означает адаптацию пользовательского интерфейса к разным языкам и региональным параметрам. Чтобы сделать приложение WPF локализуемым, разработчикам нужно объединить все локализуемые ресурсы в сборку ресурсов. Сборка ресурсов локализуется на разные языки, и код программной части использует модуль управления ресурсами API для загрузки. Один из файлов, необходимых для приложения WPF — это файл проекта (PROJ). Все ресурсы, используемые в приложении, необходимо включить в файл проекта. В следующем примере из CSPROJ-файла показано, как это сделать.

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

Чтобы использовать ресурс в своем приложении, создайте экземпляр ResourceManager и загрузите требуемый ресурс. В следующем примере показано, как это сделать.

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

Использование ClickOnce с локализованными приложениями

ClickOnce — это новая технология развертывания Windows Forms, поставляемая с Visual Studio 2005. Она позволяет устанавливать и обновлять веб-приложения. При локализации приложения, которое было развернуто с помощью ClickOnce, просмотреть его можно только на локализованном языке и с соответствующими региональными параметрами. Например, если развернутое приложение локализуется на японский, просмотреть его можно только в версии Microsoft Windows на японском языке, но не в англоязычной версии Windows. Это представляет собой проблему, поскольку японские пользователи часто пользуются версией Windows на английском языке.

Чтобы решить эту проблему, можно задать резервный атрибут нейтрального языка. Разработчик приложения может при необходимости удалить ресурсы из основной сборки и указать, что ресурсы можно найти во вспомогательной сборке, соответствующей определенной культуре. Для управления этим процессом используйте NeutralResourcesLanguageAttribute. Конструктор класса NeutralResourcesLanguageAttribute содержит две подписи, одна из которых принимает параметр UltimateResourceFallbackLocation, чтобы указать расположение, где ResourceManager должен извлекать резервные ресурсы: основная сборка или вспомогательная сборка. В следующем примере показано использование атрибута . Что касается конечного расположения резервных ресурсов, код заставляет ResourceManager искать ресурсы во вложенном каталоге de каталога выполняемой в настоящее время сборки.

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

См. также