Cotonti / Open Source PHP Content Management FrameworkContent Management Framework

Делаем сайт мультиязычным

Документация / Расширяем Cotonti / Локализация / Делаем сайт мультиязычным

Пошаговое руководство для организации сайта на нескольких языках

В данном разделе описаны настройки плгина `i18n` (идет в базовой поставке), для обеспечения следующих возможностей:

  • выбор и переключение пользователем основного языка сайта (языка интерфейса);
  • отображение страниц и разделов сайта на различных языках;
  • создание переводов страниц на другие языки (при наличии у пользователя соответствующих прав);
  • интеграция с другими расширениями для поддержки мультиязычности (page, search, tags и др).

#1. Установка и настройка

Итак, давайте разберемся что нам для этого потребуется:

  1. Установить плагин "Content Internationalization" для этого идем в раздел «Управление сайтом» → «Расширения» → «i18n» (для всех версий Siena он уже входит в стандартный набор, скачивать дополнительно его не нужно).
  2. После установки идем в раздел настроек плагина — Управление сайтом → Расширения → Content Internationalization → Конфигурация.
  3. В поле «Корневые категории» указываем коды тех корневых разделов которые предполагаются для работы на нескольких зыках, например: "articles, news".
  4. В поле «Список локалей сайта» указываем список языков, которые предполагается использовать (первым должен идти основной язык сайта): 
    en|English
    nl|Nederlands
    de|Deutsch
    1. Далее надо сделать перевод названий категорий, для этого идем в раздел «Управление сайтом» → «Структура» и жмем кнопку «Интернационализация структуры». Тут вы увидите таблицу выбранных категорий и их описаний. Заполняем поля в колонках, соответствующих каждому из указанных ранее дополнительных языков.
  5. Далее надо добавить элементы управления в шаблоны страниц сайта — это меню выбора перевода и кнопки «Добавить/удалить перевод».  page.tpl
    <!-- Меню выбора перевода -->
    <!-- BEGIN: I18N_LANG -->
    {PHP.L.Language}:
    <ul>
    	<!-- BEGIN: I18N_LANG_ROW -->
    	<li><a href="{I18N_LANG_ROW_URL}">{I18N_LANG_ROW_TITLE}</a></li>
    	<!-- END: I18N_LANG_ROW -->
    </ul>
    <!-- END: I18N_LANG -->
    
    <!-- Кнопки управления -->
    {PAGE_I18N_TRANSLATE} {PAGE_I18N_DELETE}
  6. Теперь Вы (или пользователь с соответствующим доступом) открыв любую страницу из категории указанной в п.2 увидит кнопку «Перевести», нажав на которую будет доступен интерфейс перевода страницы на один из еще не переведенных языков.
  7. Ну и последнее... Надо добавить на сайт меню переключения языков. Для примера добавим код в шаблон header.tpl, чтобы меню было доступно на всех страницах сайта. Вот пример такого кода:
    <!-- BEGIN: I18N_LANG -->
    <ul>
    	<!-- BEGIN: I18N_LANG_ROW -->
    	<li>
    		<a href="{I18N_LANG_ROW_URL}" title="{I18N_LANG_ROW_TITLE}"><img src="images/flags/{I18N_LANG_ROW_FLAG}.png" alt="{I18N_LANG_ROW_CODE}" /></a>
    	</li>
    	<!-- END: I18N_LANG_ROW -->
    </ul>
    <!-- END: I18N_LANG -->

Вот и все.

Добавление:

8. Если на вашем сайте используется плагин `urlreditor`, то стоит проверить наличие следующей строки в файле `.htaccess`:

# Language selector
RewriteRule ^(ru|ua|en|de|nl)/(.*) $2?l=$1 [QSA,NC,NE,DPI]

Если вы его устанавливали по инструкции, то строка скорее всего в вашем файле имеется, т.к. она есть в шаблоне `sef-urls.htaccess`.
Если вы добавляете язык отличный от указанных в списке (ru|ua|en|de|nl), то просто добавьте его туда через разделитель `|`.

 

#2. Нюансы

Плагин i18n не имеет настройки для задания отдельных заголовка и описания сайта (meta description, title) для каждого из языков. Но это можно исправить в 2 счета: 

  • Редактируем языковые файлы своей темы оформления (пример для дефолтной Nemesis) `themes\nemesis\nemesis.*.lang.php`
  • втсавляем туда строки для изменения глобальных настроек:
    $cfg['maintitle']='maintitle-en';
    $cfg['subtitle']='subtitle-en';
    

 Для единообразия отображения заголовков переведенных страниц в категории system  добавляем в  языковые файлы темы следующую строку:

if (strtolower($_GET['c']) == 'system') $cfg['page']['title_page'] = '{TITLE}';

 



1. elfrenazo  20.06.2012 05:39

Thanks: 0

thanks

2. Denisbox  15.08.2016 06:35

Thanks: 0

Спасибо за дополнение!

3. cotemplate  04.01.2017 11:41

Thanks: 0

# Language selector
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(ru|ua|en|de|nl)/(.*) index.php?rwr=$2&l=$1 [QSA,NC,NE]

Так лушче

4. cotemplate  04.01.2017 19:05

Thanks: 0

Финальный вариант:

# Language selector
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z]{2})/(.*)$  $2?l=$1 [L,QSA]
RewriteRule ^([a-z]{2})$  index.php?l=$1 [L,QSA]

5. VladisOK  08.11.2017 18:42

Thanks: 0

1.Далее надо сделать перевод названий категорий, для этого идем в раздел «Управление сайтом» → «Структура» и жмем кнопку «Интернационализация структуры». Тут вы увидите таблицу выбранных категорий и их описаний. Заполняем поля в колонках, соответствующих каждому из указанных ранее дополнительных языков.

-------------------------------------------------------------

Зайдя в раздел «Управление сайтом» → «Структура», вижу только перечень модулей Folio,  Pages, User Categories, Project.

Кнопки «Интернационализация структуры» - нет!

Если зайти в любой модуль, например в Project, то вижу кнопку «Интернационализация структуры», нажав на неё открывается страница (index.php?e=i18n&m=structure), где написано "Интернационализация структуры" под ней English, Russian

Нету таблицы выбранных категорий и их описаний, вообще пусто

В чём может быть проблема ?

Cotonti SIENA(самая последня на сег. день), тема Masters, Админки разные пробовал ставить, сейчас Yukon

 

Всего: 5, на странице: 5

Добавление комментариев доступно только зарегистрированным пользователям