Спонсор: Microsoft
Опубликован: 30.01.2013 | Доступ: свободный | Студентов: 1198 / 140 | Длительность: 17:23:00
Теги: .net, ajax, asp, www, интранет
Лекция 10:

Интернациональные приложения ASP.NET

Аннотация: Эта лекция содержит информацию о разработке интернациональных приложений. Обычно такие приложения могут успешно работать с пользователями различных культур, имеющих собственные языки, обозначения и др. Данная лекция рассматриваем механизмы, встроенные в ASP.NET для решения этой задачи.

Проблемы разработки интернациональных приложений и решение задачи в рамках платформы Microsoft .NET

При разработке приложения, разработчики, несомненно, сталкиваются с вопросами создания пользовательских интерфейсов. Кроме самого внешнего оформления, пользовательский интерфейс всегда содержит информацию, написанную на каком-то из языков (английский, русский, немецкий и т.д.). Логично, что если приложение разрабатывается для российских пользователей, то интерфейс приложения будет выполнен на русском языке, если для американских – на английском и т.д. Кроме того, для категорий пользователей из разных стран может отличаться не только язык, но и формат календаря (например, первый день недели – понедельник или воскресенье), способ написания даты, времени, чисел, и т.д. Обычно приложение учитывает всю эту специфику для пользователя той категории, для которой это приложение разрабатывается. Однако, что делать, если необходимо поддерживать несколько языков одновременно?

Для этой цели платформа .NET Framework и ASP.NET в частности содержит встроенные механизмы по созданию интернациональных приложений. Это означает, что в рамках платформы уже заложены все необходимые инструменты, при этом не нужно разрабатывать какую-либо собственную библиотеку по созданию интернациональных приложений.

Среда исполнения .NET Framework поддерживает интернациональные приложения на уровне платформы. Это означает, что создавать многоязычные приложения можно не только в рамках ASP.NET, но и в приложениях на сопутствующих платформах (Windows Forms, WPF, и др.).

.NET Framework вводит понятие культуры. Культура – это вся информация, относящаяся к определенной категории пользователей по географическому признаку. Информация о культуре – это больше, чем просто определение языка, который необходимо использовать, культура также содержит следующую информацию:

  • формат календаря;
  • формат даты;
  • формат времени;
  • формат чисел;
  • язык;
  • способ написания текста (слева-направо или справа-налево).

Эта и другая информация содержится при определении конкретной культуры в .NET Framework. Имя культуры содержит общий идентификатор культуры, а также может содержать уточняющий идентификатор. Примерами имен культур, содержащих только общий идентификатор могут служить следующие названия:

ru - русскоязычная культура;
en - англоязычная культура;
de - немецкоязычная культура.

Список культур можно продолжать очень долго.

Однако, в рамках каждой культуры содержатся субкультуры. Например, культура для США может отличаться от культуры Великобритании, хотя обе эти культуры используют английский язык. Аналогично, культура Австрии может отличаться от культуры Германии, хотя обе эти культуры используют немецкий язык. Для уточнения культуры следует указать уточняющий идентификатор. Например, имя культуры может выглядеть в этом случае следующим образом:

en - англоязычная культура;
en-US - культура для США;
en-UK - культура для Великобритании;
en-AU - культура для Австралии;
de - немецкоязычная культура;
de-DE - культура для Германии;
de-AT - культура для Австрии;
de-CH - культура для Швейцарии.

Кроме того, каждая культура имеет свой уникальный числовой идентификатор.

В рамках .NET Framework содержится описание для каждой культуры страны. Для работы с различными культурами используются объекты из пространства имен "System.Globalization". Каждая культура представляется объектом CultureInfo. Этот объект как раз содержит всю информацию о культуре, о чем мы говорили ранее.

Для получения информации о культуре используется статический метод GetCultureInfo класса CultureInfo. Этот метод может принимать как числовой, так и строковой идентификатор культуры. Например, для получения информации о русскоязычной культуре можно использовать следующий программный код.


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

Как видно, этот объект содержит исчерпывающую информацию о культуре.

При запуске приложения .NET Framework автоматически пытается определить культуру пользователя. Если запускается Windows-приложение, то этот выбор делается на основе региональных настроек операционной системы. Если речь идет о веб-приложениях на базе ASP.NET, то среда исполнения в этом случае также определяет культуру пользователя, который обратился к веб-приложению. Эта информация изымается из HTTP-заголовков текущего запроса, если их выдает браузер. Браузер, обычно, берет эту информацию также из региональных настроек операционной системы.

После определения текущей культуры пользователя, эта информация сохраняется в объекте текущего потока. Для этих целей объект Thread (поток) содержит свойство CurrentUICulture, который хранит объект CultureInfo (рассмотренный нами ранее). Таким образом, после запуска приложения, среда исполнения определит текущую культуру пользователя и сохранит ее в свойстве CurrentUICulture текущего потока. Далее, в процессе работы приложения можно использовать эту информацию для отображения данных на странице.

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


Такой подход будет работать, однако, при увеличении количества требуемых языков разметка страницы будет существенно разрастаться. Поэтому обычно такой подход не используется на практике. Вместо этого, используются файлы ресурсов. Файлы ресурсов содержат различные данные, ассоциированные с определенным ключом. Когда на странице требуется отобразить какие-то данные, она обращается к файлу ресурсов и отображает эти данные. Разметка страницы при этом остается простой. Основная идея файлов ресурсов заключается в том, что файл ресурсов можно подменить для каждой культуры. Это означает, что можно создать несколько одинаковых файлов ресурсов, которые будут содержать данные на различных языках. При этом среда исполнения .NET Framework автоматически выберет нужный файл ресурса и будет использовать из него данные.

Файл ресурса – это файл с расширением "resx", который, по сути, представляет собой файл XML, в котором хранятся соответствующие данные. Предположим, мы создали файл ресурсов "ResourceName.resx", в котором расположены строки, отображаемые на странице. Для того, чтобы создать аналогичные файлы для других культур, следует добавить соответствующий культуре суффикс в имя файла ресурса. Например, имя файла ресурсов для русскоязычной культуры будет иметь вид "ResourceName.ru-RU.resx". При этом файл ресурсов без суффикса будет считаться файлом ресурсов по умолчанию и будет использован, если файл ресурсов для текущей культуры не найден. Таким образом, структура файлов ресурсов может выглядеть следующим образом.


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

Краткие итоги

Создание интернациональных приложений в общем случае задача непростая. Однако, платформа ASP.NET содержит уже готовые механизмы, которые позволяют разработчику создавать интернациональные приложения. Для этого текущий поток содержит информацию о текущей культуре, которая определяется автоматически средой исполнения. Для использования этой информации, создается несколько файлов ресурсов, которые содержат одну и ту же информацию, но на разных языках. При выполнении такого приложения, среда исполнения автоматически выберет файл ресурсов, на основании информации о текущей культуре. Таким образом, создание пользовательского интерфейса на нескольких языка сводится к созданию копии файла ресурсов для этой культуры.

Марина Воробьева
Марина Воробьева
Виктория Ткаченко
Виктория Ткаченко

Проигрыватель не работает. После нажатия кнопки Play ничего не происходит.

Андрей Коробейников
Андрей Коробейников
Россия, Новосибирск, Сибирский государственный университет телекоммуникаций и информатики, 1999
Вадим Трунов
Вадим Трунов
Россия