четверг, 6 сентября 2012 г.

Создание многоязычного сайта в Composite C1 CMS (7). Перевод строк в шаблонах и функциях

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

Локализация строк в XML-шаблонах и XSLT-функциях, в принципе, одинакова.

В двух словах:
  1. Вы создаете ресурсный файл для строк для языка сайтам по умолчанию (например, английского).
  2. Заносите туда все строки.
  3. Далее создаете копию этого ресурсного файла, но уже для второго языка сайта (скажем, русского).
  4. Переводите строки там.
  5. Далее в шаблоне или функции, вместо жестко прописанных строк вы используете специальный XML-элемент <lang:string/>.
  6. Используя специальный синтаксис вызова строки из ресурсных файлов, вы указываете нужную строку в атрибуте key указанного выше элемента.
Все остальное система делает сама. То есть, при переключении языка на сайте, пользователь увидит строки на странице (которые на самом деле, прописаны в шаблонах и функциях) на нужном языке.

Приведу пример.

У вас есть страницы, которые используют общий шаблон, скажем, под названием "Standard Page". В шаблоне жестко прописана строка на английском, скажем:

<div id="attribution">
Created with Composite C1 CMS
</div>

Вы хотите, чтобы эта фраза была на русском при переключении сайта на русский язык, что-то вроде: "Создано с помощью Composite C1 CMS".

Создание ресурсных файлов

Если у вас нет папки ~/App_GlobalResources в корневой папке сайта добавьте ее (в Visual Studio: правый клик на папке сайта / Add ASP.NET Folder / App_GlobalResource).
  1. Открываем наш веб-сайт в Visual Studio.
  2. В папке ~/App_GlobalResources, создаем ресурсный файл (.resx) для строк из шаблонов, например, "Templates.resx".
  3. Добавляем в него строку по английски из шаблона:
    • Name: AttributionText
    • Value: Created with Composite C1 CMS
Теперь ресурсный файл для русского языка:
  1. Делаем копию "Templates.resx", добавив в его название "ru-ru" перед расширением: ~/App_GlobalResources/Templates.ru-ru.resx.
  2. Открываем его в  Visual Studio и переводим строку:
    • Name: AttributionText
    • Value: Создано с помощью Composite C1 CMS
Если у вас больше строк, то вам нужно добавить их в оба ресурсных файла под одними и теми же названиями (Name) и c переводом в их значениях (Value).

Эти же шаги вы используете для строк, используемых в функциях.

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

Для использования элемента <lang:string/> в шаблоне или функции вам нужно указать пространство имен, которому он относится. Удобнее всего добавить его в корневой элемент  <html/>.

В XML-шаблонах и XSLT-функциях, создаваемых системой, обычно это пространство имен уже указано в <html/>, но если его там нет, то добавьте его сами:

<html ... xmlns:lang="http://www.composite.net/ns/localization/1.0">
  ...
</html>

А теперь воспользуемся строкой из ресурсных файлов:
  1. Открываем шаблон для редактирования.
  2. Заменяем строку элементом <lang:string/>, указав в его атрибуте key нужную строку (AttributionText) из ресурсного файла (Templates):

    <lang:string key="Resource, Resources.Templates.AttributionText" />
Строка указывается при помощи специального синтаксиса:

Resource, Resources.<имя ресурсного файла>.<имя строки>

Имя ресурсного файла не должно включать в себя расширение и код языка. То есть для файлов  Templates.resx и Templates. ru-ru.resx это будет выглядеть так: Resource, Resources.Templates.<имя строки>

Как вы видите, синтаксис почти такой же, как и для локализации форм, только в полях типов данных вызов строки еще помещается в ${...}.

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


Предыдущие сообщения:

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

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