среда, 6 июня 2012 г.

Локализация строк на примере модуля FAQ

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

Давайте вместе локализируем строки на конкретном примере.

Есть такой модуль расширения Composite.Lists.FAQ, который, как следует из названия, позволяет создать на сайте список часто задаваемых вопросов (ЧаВо).

Примечание. Имеется в виду Composite.Lists.FAQ версии 1.2.3, в котором не локализирована строка. На данный момент это последняя его версия.

Если вы его будет использовать на локализированной странице (напр, на русском языке), то ссылка, по которой можно вернуться с ответа на отдельный вопрос к списку вопросов будет называться "Back to FAQ". Но это легко исправимо.

Давайте локализируем эту строку, чтобы на англоязычной версии страницы - она читалась  "Back to FAQ", а на русскоязычной версии - "К списку вопросов".


Предварительные требования

На нашем сайте:
  1. Установлено два языка - русский и английский.
  2. Установлен модуль расширения Composite.Lists.FAQ версии 1.2.3.
  3. Создана страница типа "FAQ page" (что добавит папку данных "FAQ" к странице и вставит на нее функцию "Composite.Lists.FAQ.LinksToDetails").
  4. Страница существует на обоих языках.
  5. Добавлено несколько вопросов в ЧаВо.
Файлы локализации строк

Начнем с создания файлов локализации.
  1. Открываем наш веб-сайт в Visual Studio.
  2. Убеждаемся, что на нашем сайте есть папка ~/App_GlobalResources. И если ее нет  - создаем ее.
  3. Создаем ресурсный файл (.resx) в этой папке под названием "FaqStrings.resx":  ~/App_GlobalResources/FaqStrings.resx
  4. Добавляем в него нашу строку по английски:
    1. Name: BackToFaq
    2. Value: Back to FAQ
  5. Теперь делаем копию этого файла, но добавляем в его название суффикс "ru-ru" для русского языка (или соответствующий суффикс для нужного языка):  ~/App_GlobalResources/FaqStrings.ru-ru.resx
  6. Так как это - копия, то у нас уже имеется запись BackToFaq. Мы только переводим значение с английского на русский:
    1. Name: BackToFaq
    2. Value: К списку вопросов
Файлы локализации с нужной нам строкой - готовы. А теперь воспользуемся локализированной строкой.

Использование локализированых строк

Итак, мы помним, что название файла у нас "FaqStrings", а название нужной нам строки "BackToFaq". Эта информация нам сейчас будет нужна.

Сама нелокализированная строка находится в функции "Composite.Lists.FAQ.LinksToDetails"(которая добавлена на страницу), поэтому:
  1. В разделе "Функции", открываем XSLT-функцию "Composite.Lists.FAQ.LinksToDetails" на редактирование.
  2. На вкладке "Шаблон", находим строку Back to FAQ.
  3. И заменяем ее на такой элемент:

    <lang:string key=”Resource, Resources.FaqStrings.BackToFaq” />

  4. Сохраняем функцию.
Все, можно проверять страницу. При переключении страницы с ответом, скажем, на русский, ссылка "Back to FAQ" превратиться в "К списку вопросов".

Обратите внимание, где и как использовалось название файла и название строки в примере.

Подведем итоги

Итак:
  • Строки локализации нужно хранить в ресурсных файлах (.resx) в папке  App_GlobalResources. Их удобнее всего создавать в Visual Studio, где есть нужный для этого редактор.
  • Для языка по умолчанию название файла не включает в себя языковой суффикс. Для каждого языка на сайте нужно создать копию такого файла с суффиксом языка/культуры, напр., "ru-ru".
  • Локализированные строки можно использовать, напр., в XML-коде - то есть в шаблонах страниц и XSLT-функциях.
  • В XML-коде используется XML-элемент <lang:string/> (пространство имен  xmlns:lang="http://www.composite.net/ns/localization/1.0" если что).
  • В атрибуте key этого  XML- элемента указывается "Resource, Resources." и дальше добавляется имя ресурсного файла (без расширения и суффикса), точка, имя строки в ресурсном файле (см. пример выше).

Комментариев нет:

Отправить комментарий