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

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

В этом разделе содержатся следующие подразделы.

  • Глобализация и язык XAML
  • Разработка многоязыкового пользовательского интерфейса с помощью языка XAML
  • Разработка локализуемых приложений
  • Использование ClickOnce с локализованными приложениями
  • Связанные разделы

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

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

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

Ссылка на символы дает код определенного символа Unicodeа, который она представляет (в десятичном или шестнадцатеричном формате). В следующем примере показана ссылка на символы в десятичном формате.

Ϩ

В этом примере показана ссылка на символы в шестнадцатеричном формате. Обратите внимание, что в начале шестнадцатеричного числа стоит x.

Ϩ

Кодировка

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

?xml encoding="UTF-8"?

Атрибут языка

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

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

В следующем примере Extensible Application Markup Language (XAML) используется атрибут языка fr-CA для указания языка "французский (Канада)".

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

Unicode

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

Разработка многоязыкового пользовательского интерфейса с помощью языка XAML

В этом подразделе описаны возможности user interface (UI), которые следует учитывать при написании приложений.

Многоязыковый текст

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

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

  • Арабский

  • бенгальский язык;

  • деванагари;

  • Кириллическая

  • Греческий

  • Гуджарати

  • гурмукхи;

  • Иврит

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

  • Каннада

  • Лаосская

  • Латинская

  • малаялам;

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

  • Ория

  • Сирийский

  • Тамильский

  • Телугу

  • Таана

  • Тайская*

  • Тибетская

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

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

  • Кхмерская

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

  • Мьянма

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

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

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

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

Международное письмо

WPF предоставляет очень удобный способ поддержки горизонтального, двунаправленного и вертикального письма. В Presentation Framework свойство FlowDirection может быть использовано для определения направления. Шаблонами направления являются:

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

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

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

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

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

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

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

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

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

ПримечаниеПримечание

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

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

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

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

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

        Private Sub OnClick(ByVal sender As Object, ByVal e As RoutedEventArgs)
          Dim rm As New ResourceManager("stringtable", System.Reflection.Assembly.GetExecutingAssembly())
          Text1.Text = rm.GetString("Message")
        End Sub
void OnClick(object sender, RoutedEventArgs e)
{
  ResourceManager rm = new ResourceManager ("MySampleApp.data.stringtable",
       Assembly.GetExecutingAssembly());
  Text1.Text = rm.GetString("Message");
}

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

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

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

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

См. также

Основные понятия

Общие сведения о глобализации и локализации WPF