Глобализация для 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)]