Общие сведения о локализации ASP.NET AJAX

Скотт Кейт

Локализация — это процесс проектирования и интеграции поддержки определенного языка и культуры в приложение или компонент приложения. Платформа Microsoft ASP.NET предоставляет обширную поддержку локализации для стандартных приложений ASP.NET путем интеграции стандартной модели локализации .NET; Microsoft AJAX Framework использует интегрированную модель для поддержки различных сценариев, в которых можно выполнить локализацию.

Введение

Технология microsoft ASP.NET приносит объектно-ориентированное и управляемое событиями модель программирования и объединяет ее с преимуществами скомпилированного кода. Однако его серверная модель обработки имеет несколько недостатков, присущих технологии, многие из которых можно решить новыми функциями, включенными в пространство имен System.Web.Extensions, который инкапсулирует службы Microsoft AJAX в .NET Framework 3.5. Эти расширения позволяют использовать множество расширенных клиентских функций, ранее доступных в рамках расширений AJAX ASP.NET 2.0, но теперь входит в библиотеку базовых классов Framework. Элементы управления и функции в этом пространстве имен включают частичную отрисовку страниц, не требуя полного обновления страницы, возможности доступа к веб-службам через клиентский скрипт (включая API профилирования ASP.NET), а также обширный клиентский API, предназначенный для зеркального отображения многих схем управления, отображаемых в наборе элементов управления ASP.NET серверной части.

В этом техническом документе рассматриваются функции локализации, представленные в Microsoft AJAX Framework и библиотеке сценариев Microsoft AJAX, в контексте бизнес-потребности в поддержке локализации и анализа уже интегрированной поддержки локализации в веб-приложениях, реализованной платформой .NET Framework. Библиотека сценариев Microsoft AJAX использует формат RESX-файла, уже используемый приложениями .NET, который обеспечивает встроенную поддержку интегрированной среды разработки и тип ресурса, доступный для совместного использования.

Этот технический документ основан на бета-версии 2 Microsoft Visual Studio 2008. Этот технический документ также предполагает, что вы будете работать с Visual Studio 2008, а не Visual Web Developer Express, и предоставит пошаговые руководства в соответствии с пользовательским интерфейсом Visual Studio. Некоторые примеры кода будут использовать шаблоны проектов, которые могут быть недоступны в Visual Web Developer Express.

Необходимость локализации

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

Локализация — это процесс проектирования и интеграции поддержки определенного языка и культуры в приложение или компонент приложения. Платформа Microsoft ASP.NET предоставляет обширную поддержку локализации для стандартных приложений ASP.NET путем интеграции стандартной модели локализации .NET; Microsoft AJAX Framework использует интегрированную модель для поддержки различных сценариев, в которых можно выполнить локализацию. С помощью Microsoft AJAX Framework скрипты можно локализовать, развертывая в вспомогательных сборках или используя статическую структуру файловой системы.

Внедрение скриптов с сателлитными сборками

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

Скрипты внедряются в сборки путём включения их в управляемые файлы .resx (или компилированные файлы .resources), которые добавляются в сборку на этапе компиляции. Затем их ресурсы становятся доступными для приложения скриптов с помощью кода, созданного средой выполнения AJAX, с помощью атрибутов уровня сборки

Соглашения об именовании для внедренных файлов скриптов

Управление скриптами Microsoft AJAX Framework поддерживает различные варианты использования в развертывании и тестировании скриптов, а также рекомендации по упрощению этих вариантов.

Чтобы упростить отладку, выполните следующие действия.

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

Чтобы упростить локализацию:

Скрипты нейтральной культуры не должны содержать идентификатор культуры в названии файла. Для скриптов, содержащих локализованные ресурсы, код языка ISO должен быть указан в имени файла. Например, es-CO обозначает испанский язык, Колумбия.

В следующей таблице перечислены соглашения об именовании файлов с примерами:

Filename Значение
Script.js Культурно-нейтральный скрипт, не зависящий от версии релиза.
Script.debug.js Скрипт, соответствующий отладочной версии и культурально-нейтральный.
Script.en-US.js Версия релиза программы на английском языке для США.
Script.debug.es-CO.js Отладочная версия колумбийского испанского скрипта.

Пошаговое руководство. Создание локализованного внедренного скрипта

Обратите внимание: в этом пошаговом руководстве требуется использование Visual Studio 2008, так как Visual Web Developer Express не включает шаблон проекта для проектов библиотек классов.

  1. Создайте проект веб-сайта с интегрированными расширениями AJAX ASP.NET. Создайте другой проект, проект библиотеки классов, в решении с именем LocalizingResources.
  2. Добавьте JScript-файл с именем VerifyDeletion.js в проект LocalizingResources, а также ресурсы .resx с именами DeletionResources.resx и DeletionResources.es.resx. Первый будет содержать ресурсы, не зависящие от культуры; второй будет содержать ресурсы на испанском языке.
  3. Добавьте следующий код в VerifyDeletion.js:
function VerifyDeletion(fileName)
{
 if (confirm(Message.VerifyDelete.replace(/FILENAME/, fileName)))
 {
 Delete(fileName);
 return true;
 }
 return false;
}
function Delete(fileName)
{
 alert (Message.Deleted.replace(/FILENAME/, fileName));
}

Для тех, кто не знаком с синтаксисом регулярных выражений в JavaScript, текст между двумя косыми чертами (в предыдущем примере, /FILENAME/ является примером) обозначает объект RegExp. Библиотека MSDN содержит обширную ссылку на JavaScript, а ресурсы на собственных объектах JavaScript можно найти в Интернете.

  1. Добавьте следующие строки ресурсов в файл DeletionResources.resx.

    VerifyDelete: Вы уверены, что хотите удалить FILENAME?

    Удалено: FILENAME удалено.

  2. Добавьте следующие строки ресурсов в DeletionResources.es.resx:

    VerifyDelete: Est seguro que desee quitar FILENAME?

    Удалено: FILENAME был удалён.

  3. Добавьте следующие строки кода в файл AssemblyInfo:

[assembly: System.Web.UI.WebResource("LocalizingResources.VerifyDeletion.js",
 "text/javascript")]
[assembly: System.Web.UI.ScriptResource("LocalizingResources.VerifyDeletion.js",
 "LocalizingResources.DeletionResources", "Message")]
  1. Добавьте ссылки на System.Web и System.Web.Extensions в проект LocalizingResources.
  2. Добавьте ссылку на проект LocalizingResources из проекта веб-сайта.
  3. В default.aspx в проекте веб-сайта обновите элемент управления ScriptManager следующим дополнительным разметкой:
<asp:ScriptManager ID="ScriptManager1" runat="server" EnableScriptLocalization="true">
 <Scripts>
 <asp:ScriptReference Assembly="LocalizingResources" Name="LocalizingResources.VerifyDeletion.js"/>
 </Scripts>
</asp:ScriptManager>
  1. В default.aspx в любом месте страницы включите эту разметку:
<asp:Button ID="btnDelete" runat="Server" OnClientClick="VerifyDeletion('a.txt');" Text="Delete" />
  1. Нажмите клавишу F5. При появлении запроса включите отладку. При загрузке страницы нажмите кнопку "Удалить". Обратите внимание, что вы получите запрос на английском языке для подтверждения (если ваш компьютер по умолчанию не настроен на использование ресурсов на испанском языке).
  2. Закройте окно браузера и вернитесь к default.aspx. В директиве заголовка замените @Page auto для Culture и UICulture на es-ES. Нажмите клавишу F5 еще раз, чтобы снова запустить веб-приложение в браузере. На этот раз обратите внимание, что вам будет предложено удалить файл на испанском языке:

Снимок экрана: диалоговое окно Windows Internet Explorer с запросом на испанский язык, чтобы щелкнуть O K.

(Щелкните, чтобы просмотреть изображение полного размера)

Снимок экрана: запрос на удаление файла на испанском языке.

(Щелкните, чтобы просмотреть изображение полного размера)

Обратите внимание, что для этого пошагового руководства существует несколько вариантов. Например, скрипты можно зарегистрировать с помощью элемента управления ScriptManager программным способом во время загрузки страницы.

Включение статической структуры файлов скриптов

При использовании статических файлов скриптов для развертывания некоторые преимущества использования изначальной схемы локализации .NET теряются. Основное, что замечается, это потеря автоматически сгенерированного типа, включающего файлы ресурсов скрипта; в приведённом выше пошаговом руководстве ресурсы были представлены автоматически созданным типом Message из элемента управления ScriptManager.

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

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

Поскольку нет ресурсов для декларативного включения, статические файлы скриптов следует ссылаться либо путем добавления <asp:ScriptElement> элементов в качестве дочернего <Scripts> элемента элемента управления ScriptManager, либо путем программного добавления ScriptReference объектов Scripts в свойство ScriptManager элемента управления на странице во время выполнения.

ScriptManager и ее роль в локализации

ScriptManager включает несколько автоматических действий для локализованных приложений:

  • Он автоматически находит файлы скриптов на основе параметров и соглашений об именовании; например, он загружает скрипты с поддержкой отладки в режиме отладки и загружает локализованные скрипты на основе выбора пользовательского интерфейса браузера.
  • Он включает определение языков и культур, включая пользовательские культуры.
  • Он обеспечивает сжатие файлов скриптов по протоколу HTTP.
  • Он кэширует скрипты для эффективного управления многими запросами.
  • Он добавляет слой косвенного обращения к скриптам путем их отправки через зашифрованный URL-адрес.

Ссылки на скрипты можно добавлять в элемент управления ScriptManager программным способом или декларативной разметкой. Декларативная разметка особенно полезна при работе со скриптами, внедренными в сборки, отличные от сборок самого проекта веб-сайта, поскольку имя скрипта, скорее всего, останется неизменным по мере внесения изменений.

Сводка

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

Платформа .NET Framework встроенно поддерживает богатую систему локализации, используя сателлитные сборки и XML-файлы ресурсов (.resx), чтобы представить универсальный способ поиска строк ресурсов и изображений. Расширения AJAX ASP.NET, включая Microsoft AJAX Framework и библиотеку скриптов Microsoft AJAX, обеспечивают поддержку этой модели программирования в клиентском коде, что позволяет легко искать строки ресурсов. Сателлитные сборки поддерживают автоматическое добавление ресурсов скрипта (js-файлы) с помощью ScriptResource.axd при условии, что имена файлов соответствуют заданной схеме именования. Благодаря этой поддержке ASP.NET расширения AJAX упрощают локализацию сценариев и глобализацию приложений.

Био

Скотт Кейт работает с технологиями Microsoft Web с 1997 года и является президентом myKB.com (www.myKB.com), где он специализируется на написании ASP.NET приложений, ориентированных на решения базы знаний. Связаться с Скоттом можно по электронной почте на scott.cate@myKB.com или в его блоге на ScottCate.com.