вторник, 6 апреля 2010 г.

Мультиязычный сайт на TYPO3

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

Два метода сделать TYPO3-сайт многоязычным


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

Я расскажу про 2-й вариант решения задачи для трех языков (русский, украинский, английский). И еще, последовательность действий, которая тут описана, пригодна на 100% при использовании шаблонов automaketemplate. Чтобы мультиязычность заработала на сайте с TemplaVoila необходимо вставить еще 5 коп, о которых здесь пока нет ни слова...(хотя здесь все описано)

Что нам для этого понадобится?


1. Расширение static_info_tables - для настройки мультиязычности сайта в бекенде (BE)
2. Расширение sr_language_menu - для выбора языка (на стороне пользователя - FE)
3. Расширение Realurl - чтобы наши URL-ы были "дружественными" для людей и поисковиков

Создаем список дополнительных языков для сайта


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

1. Переходим в режим "Список/List" как показано на скриншоте и выбираем в центральной области самую верхнюю строчку списка, которая имеет пиктограмму глобуса:

Обратите внимание, на заполненную таблицу справа - Языки сайта. Здесь отображаются все дополнительные языки сайта. Изначально этот список будет пустым.

2. Итак, добавляем дополнительный язык для сайта. В самом верху правой части экрана нажимаем кнопку добавить (зеленый плюс) и выбираем тип записи - "Язык сайта".


3. Заполняем следующую формочку:


Таким образом, можно задать сколько угодно языков. Я задал 3 языка: Украинский (id=1), Русский (id=2) и Английский (id=3).
Пока, что условно считаем, что русский язык на нашем сайте является основным.

Настройка Typo3 шаблона


Настраиваем главный (корневой) TS-шаблон для работы с несколькими языками. Добавляем туда следующие строки:

# Настройки для основного языка - РУССКОГО
config.linkVars = L
config.sys_language_uid = 0
config.uniqueLinkVars = 1
config.language = ru
config.locale_all = ru_RU
config.sys_language_overlay = 1
#config.sys_language_mode = content_fallback;0
config.sys_language_mode = ignore
config.htmlTag_langKey = ru-RU
#plugin.tx_indexedsearch._DEFAULT_PI_VARS.lang = 0
#plugin.tx_indexedsearch.templateFile = indexed_search.tmpl

# Настройки для УКРАИНСКОГО языка
[globalVar = GP:L = 1]
config.language = ua
config.locale_all = ua_UA
config.htmlTag_langKey = ua-UA
config.sys_language_uid = 1
#plugin.tx_indexedsearch._DEFAULT_PI_VARS.lang = 1
#plugin.tx_indexedsearch.templateFile = indexed_search.tmpl
# сюда можно добавлять другие строки для более полной локализации (подключение CSS, HTML-шаблонов и т.д.)
[global]

# Настройки для АНГЛИЙСКОГО языка
[globalVar = GP:L = 3]
config.language = en
config.locale_all = en_EN
config.htmlTag_langKey = en-EN
config.sys_language_uid = 3
#plugin.tx_indexedsearch._DEFAULT_PI_VARS.lang = 3
#plugin.tx_indexedsearch.templateFile = indexed_search.tmpl
# сюда можно добавлять другие строки для более полной локализации (подключение CSS, HTML-шаблонов и т.д.)
[global]

Для новичка это может показаться магическим набором невменяемых строк, но на самом деле не всё так сложно.
Вся соль в 2-х ключевых параметрах:
config.linkVars = L (имя GET-переменной отвечающей за идентификацию языка).
Поясню. Обычно страницы нашего сайта доступны по URL типа (без применения RealUrl)
http://mydomain.com/index.php?id=34, что соответствует http://mydomain.com/index.php?id=34&L=0 (язык по умолчанию - русский).
Если же вызвать страницу http://mydomain.com/index.php?id=34&L=1, то увидим страницу с украинским контентом.
Вот, что означает параметр - L.

[globalVar = GP:L = x]
config.sys_language_uid = x
(где, x - id дополнительного языка в списке, в моем случае 1 - укр, 2 - рус, 3 - англ., см. выше). Таким образом, мы сопоставляем значение параметра L с номером (id) дополнительного языка в системе.

Т.к. русский язык является основным для нашего сайта, то отдельную ветвь типа:
[globalVar = GP:L = х]
...
[global]
для него создавать не нужно.

Настройка бекенда (BE)


Для того, чтобы в BE русский язык считался основным и это было видно визуально (см. рисунок ниже),



в свойствах корневой страницы сайта необходимо вставить следующие строки:
mod.web_layout.defLangBinding = 2
mod.SHARED.defaultLanguageLabel = Russia
mod.SHARED.defaultLanguageFlag = ru.gif



Создаем мультиязычный контент в TYPO3


1. Теперь можно создавать дополнительный контент на дополнительных языках. Дополнительный контент это две вещи - заголовок веб-страницы и ее содержимое. Именно по заголовку страницы, с меткой языка, TYPO3 узнает, что страница имеет еще одну языковую версию. Чтобы создать новый заголовок нужно сделать следующее:



Обязательно отмечаем, галочкой для какой страницы нужно создать новый заголовок (Альтернативный язык страницы)







В дальнейшем заголовок можно отредактировать и в режиме Список/List



2. Контент создаем в обычном режиме, но с указанием другого языка:



Т.к. содержимое страницы может состоять из нескольких блоков, то перевести на другой язык нужно каждый такой блок. Но этого мало! Ведь еще нужно эти блоки как-то связать! Чтобы поставить их в соответствие я использую режим Список/List для страницы, открываю на редактирование иноязычный блок контента и указываю оригинал перевода (выбираю из списка):



После этого в режиме Список/List страница будет выглядеть примерно так:



Переключатель языков на стороне пользователя (FE)


Теперь можно подумать и о том как переключаться между разными языками на нашем сайте. Для этого используется довольно популярное расширение - sr_language_menu.
Лично я настроил данный плагин с помощью TS-скрипта следующим образом:
lib {
languageMenu < plugin.tx_srlanguagemenu_pi1 # Список отображаемых языков languageMenu.languagesUidsList = 1,2,3 # Способ представления списка языков - текстовый # (можно также изобразить флажками) languageMenu.defaultLayout = 2 languageMenu.defaultLanguageISOCode = RU #languageMenu.defaultCountryISOCode = languageMenu.link.NO.stdWrap.wrap = <li> | </li> languageMenu.link.CUR.stdWrap.wrap = <li class="curlng"> | </li> languageMenu.link.INACT.stdWrap.wrap = <li> | </li> languageMenu.links.stdWrap.split.wrap = | #languageMenu.hideIfNoAltLanguages = 1 }


Настройка расширения RealURL


В конфигурационном файле RealUrl (например, realurlconf.php) необходимо наличие следующих строк:
'preVars' => array(
array(
'GETvar' => 'no_cache',
'valueMap' => array(
'no_cache' => 1,
),
'noMatch' => 'bypass',
),
array(
'GETvar' => 'L',
'valueMap' => array(
'ru' => '0',
'ua' => '1',
'en' => '3',
),
'noMatch' => 'bypass',
),
),
'pagePath' => array(
'type' => 'user',
'userFunc' => 'EXT:realurl/class.tx_realurl_advanced.php:&tx_realurl_advanced->main',
'spaceCharacter' => '-',
'languageGetVar' => 'L',
'expireDays' => 7,
'rootpage_id' => 1,
),

4 коммент.:

Анонимный комментирует...

Спасибо полезный материал, как раз изучаю тайпо3. Но про "ереключатель языков на стороне пользователя (FE)" не понял... что за скрипт? куда его вставить? и как в шаблоне обознчить место для переключателя?

Анонимный комментирует...

Спасибо, всё получилось.
Но как сделать так чтобы урлы русского были не на латинице а на кириллице
к примеру
не
www.mysite.com/glavnaja.html
а
www.mysite.com/главная.html ?

Вадим комментирует...

К сожалению комбинацию realUrl+кириллица еще не пробовал

Анонимный комментирует...

Спасибо

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

О себе

Моя фотография
Вадим Гиркало
Фрилансер, веб-разработчик сайтов на базе бесплатной, мощнейшей и очень гибкой CMS системы - TYPO3.
Просмотреть профиль

Позвонить мне в Skype

TOP - 3