Поделиться через


Глобализация и Windows Presentation Foundation

Обновлен: Ноябрь 2007

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

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

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

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

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

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

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

Ϩ

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

Ϩ

Кодировка

XAML поддерживает следующие кодировки: ASCII, Юникод 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, а не обязательно из-за наследования свойств зависимостей) и имеет в качестве значения по умолчанию пустую строку, если значение не назначено явно.

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

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

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

Юникод

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

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

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

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

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

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

  • Арабская

  • Бенгальская

  • Деванагари

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

  • Греческая

  • Гуджарати

  • Гурмухи

  • Иврит

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

  • Каннада

  • Лаосская

  • Латинская

  • Малаялам

  • Монгольская

  • Ория

  • Сирийская

  • Тамильская

  • Телугу

  • Таана

  • Тайская*

  • Тибетская

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

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

  • Кхмерская

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

  • Мьянма

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ms745650.alert_note(ru-ru,VS.90).gifПримечание.

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

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

Локализация означает настройку Пользовательский интерфейс для различных языков и региональных параметров. Чтобы предоставить возможность локализации приложения WPF, разработчики должны встроить все локализуемые ресурсы в сборку ресурсов. Сборка ресурсов локализуется на разные языки, и фоновый код использует API управления ресурсами 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, которая будет поставляться с Microsoft Visual Studio 2005. Она позволяет устанавливать и обновлять веб-приложения. Когда приложение, которое было развернуто с помощью ClickOnce, локализовано, его можно просматривать только с применением языка и региональных параметров локализации. Например, если развертываемое приложение локализовано на японский язык, его можно просматривать только на японском языке Microsoft Windows, а не на английском языке Windows. Это представляет собой проблему, поскольку для японских пользователей запускать английскую версию Windows — это обычная ситуация.

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

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

См. также

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

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