Глобализация для WPF
В этом разделе рассматриваются проблемы, которые следует учитывать при написании приложений Windows Presentation Foundation (WPF) для глобального рынка. Элементы программирования глобализации определяются в .NET в пространстве имен System.Globalization.
Глобализация XAML
Расширяемый язык разметки приложений (XAML) основан на XML и использует поддержку глобализации, определенную в спецификации XML. В следующих разделах описываются некоторые функции XAML, которые следует учитывать.
Ссылки на символы
Символьная ссылка указывает на кодовую единицу UTF16 соответствующего символа Юникода, либо в десятичном, либо в шестнадцатеричном формате. В следующем примере показана десятичная ссылка на коптскую заглавную букву Хори: 'Ϩ'.
Ϩ
В следующем примере показана шестнадцатеричная ссылка на символ. Обратите внимание, что он имеет 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) используется атрибут языка fr-CA
для указания канадского французского языка.
<TextBlock xml:lang="fr-CA">Découvrir la France</TextBlock>
Юникод
XAML поддерживает все функции Юникода, включая суррогаты. Если набор символов можно сопоставить с Юникодом, он поддерживается. Например, GB18030 вводит некоторые символы, сопоставленные с китайским, японским и корейским расширениями A и B, а также с суррогатными парами, поэтому он полностью поддерживается. Приложение WPF может использовать StringInfo для управления строками без понимания наличия суррогатных пар или объединения символов.
Проектирование международного пользовательского интерфейса с помощью XAML
В этом разделе описаны функции пользовательского интерфейса, которые следует учитывать при написании приложения.
Международный текст
WPF включает встроенную поддержку всех письменных систем, поддерживаемых Microsoft .NET Framework.
В настоящее время поддерживаются следующие скрипты:
Арабский
Бенгальский
Деванагари
Кириллический
Греческий
Гуджарати
Гурмухи
Иврит
Идеографическое письмо
Каннада
Лаосский
Латинский
Малаялам
Монгольский
Одия
Сирийский
Тамильский
Телугу
Таана
Тайский*
Тибетский
В этом выпуске поддерживается отображение и редактирование тайского текста; разделение слов не поддерживается.
В настоящее время следующие скрипты не поддерживаются.
Кхмерский
Корейский старинный алфавит хангыль
Мьянма
Синхала
Все движки систем письма поддерживают шрифты OpenType. Шрифты OpenType могут включать таблицы макетов OpenType, которые позволяют создателям шрифтов разрабатывать лучшие международные и высокоуровневые типографические шрифты. Таблицы макета шрифтов OpenType содержат сведения о подстановках глифов, расположении глифов, оправдании и базовом расположении, что позволяет приложениям обработки текста улучшить макет текста.
Шрифты OpenType позволяют обрабатывать большие глифы с помощью кодировки Юникода. Такая кодировка обеспечивает широкую международную поддержку, а также поддержку вариантов типографических глифов.
Отрисовка текста в WPF осуществляется с помощью технологии субпикселей Microsoft ClearType, обеспечивающей независимость от разрешения. Это значительно повышает читаемость и обеспечивает возможность поддерживать высококачественные документы стиля журнала для всех сценариев.
Международный макет
WPF предоставляет очень удобный способ поддержки горизонтальных, двунаправленных и вертикальных макетов. В платформе презентации свойство FlowDirection можно использовать для определения макета. Шаблоны направления потока:
LeftToRight — горизонтальное расположение для латинской, Восточной Азии и так далее.
RightToLeft — двунаправленный для арабского, иврита и т. д.
Разработка локализованных приложений
При написании приложения для глобального потребления следует помнить, что приложение должно быть локализуемым. В следующих разделах рассматриваются вопросы.
Многоязычный пользовательский интерфейс
Многоязычные пользовательские интерфейсы (MUI) — это поддержка майкрософт для переключения пользовательских интерфейсов с одного языка на другой. Приложение WPF использует модель сборки для поддержки MUI. Одно приложение содержит сборки, не зависящие от языка, а также сателлитные сборки ресурсов, зависящие от языка. Точка входа — это управляемый файл .EXE в главной сборке. Загрузчик ресурсов WPF использует диспетчер ресурсов Платформы для поддержки поиска ресурсов и резервного размещения ресурсов. Несколько сателлитных сборок языка работают с той же основной сборкой. Загруженный компонент ресурсов зависит от CurrentUICulture текущего потока.
Локализуемый пользовательский интерфейс
Приложения WPF используют XAML для определения пользовательского интерфейса. XAML позволяет разработчикам указывать иерархию объектов с набором свойств и логики. Основное использование XAML заключается в разработке приложений WPF, но его можно использовать для указания иерархии любых объектов среды CLR. Большинство разработчиков используют XAML для указания пользовательского интерфейса приложения и использования языка программирования, например C# для реагирования на взаимодействие с пользователем.
С точки зрения ресурса пользовательский интерфейс является элементом ресурса, поэтому его окончательный формат распространения должен быть локализуемым для поддержки международных языков. Так как XAML не может обрабатывать события, многие приложения XAML содержат блоки кода для этого. Дополнительные сведения см. в XAML в WPF. Код удаляется и компилируется в различные двоичные файлы, когда XAML-файл токенизируется в форму BAML. 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)]
См. также
.NET Desktop feedback