Page i18n

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

#1. Возможности

  • Мультиязычность для страниц без правкиядра
  • Основано на структуре категорий с отдельными ветками для дополнительных языков
  • Встроенная поддержка URLs/SEO
  • Выбор языка «на лету»

 

#2. Установка

 

 

1. Установить плагин.

2. Настроить список доступных яхыков Администрирование → Конфигурация → pagi18n → правка,  разделяя ISO коды необходимых языков символом «|» (вертикальная черта).

3. Отредактируйте datas/urltrans.dat (напрямую или через Администрирование → Модули →> Ссылки), добавив в начало списка следующие правила:

 

list	c=*	{pagi18n_cat_url()}
page	al=*	{pagi18n_url()}

 

4. Добавте следующие правила в файл .htaccess (при условии, что ваш сервер Апачи и включен модуль  mod_rewrite):

 

# Для категорий
RewriteRule ^(en|ru)/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/$ list.php?c=$1-$2-$3-$4-$5 [QSA,NC,NE,L]
RewriteRule ^(en|ru)/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/$ list.php?c=$1-$2-$3-$4 [QSA,NC,NE,L]
RewriteRule ^(en|ru)/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/$ list.php?c=$1-$2-$3 [QSA,NC,NE,L]
RewriteRule ^(en|ru)/([a-zA-Z0-9_]+)/$ list.php?c=$1-$2 [QSA,NC,NE,L]
RewriteRule ^(en|ru)/$ list.php?c=$1 [QSA,NC,NE,L]

# Pages with aliases only
RewriteRule ^(en|ru)/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([a-zA-Z0-9_\-]+) page.php?al=$6_$1 [QSA,NC,NE,L]
RewriteRule ^(en|ru)/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([a-zA-Z0-9_\-]+) page.php?al=$5_$1 [QSA,NC,NE,L]
RewriteRule ^(en|ru)/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([a-zA-Z0-9_\-]+) page.php?al=$4_$1 [QSA,NC,NE,L]
RewriteRule ^(en|ru)/([a-zA-Z0-9_]+)/([a-zA-Z0-9_\-]+) page.php?al=$3_$1 [QSA,NC,NE,L]
RewriteRule ^(en|ru)/([a-zA-Z0-9_\-]+) page.php?al=$2_$1 [QSA,NC,NE,L]

где вместо (en|ru) поставьте ваш вариант списка языков разделенных вертикальной чертой.

Примечание: Данные правила предполагают глубину структуры категорий не более 4 уровней. Для более глубокой структуры допишите правила самостоятельно, по данному шаблону.

5. Дабавьте в шаблон header.tpl блок для элемента выбора языков «LANG_ROW», в котором заключается разметка для ссылки выбора каждого из языков. Формат блока может быть таким:

<div id="lang">
	<!-- BEGIN: LANG_ROW -->
		<a href="{LANG_ROW_URL}" class="{LANG_ROW_CURRENT}" title="{LANG_ROW_NAME}">{LANG_ROW_CODE}</a>
	<!-- END: LANG_ROW -->
</div>

 

6. Настройте структуру категорий для страниц специальным образом (см. ниже).
 

 

#3. Использование

 

#3.1. Создание правильной структуры категорий

 

 

Для правильной работы плагина «i18n» необзодимо создать структуру категори (или отредактировать текущую) придерживаясь особых правил. Код текущей категории должен состоять из следующих частей: кода языка, кода родительской категории, собственного кода категории. Эти части должны быть разделены знаком тире «-». Для создание категорий на другом языке вы должны повторить текущую структуру изменив для нее первую часть (код языка).

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

1 en (English)

1.1 en-articles (Articles)
1.1.1 en-articles-tech (Technical)
1.1.2 en-articles-fiction (Fiction)
1.1.3 en-articles-economy (Economy)
1.2 en-news (News)
1.3 en-goods (Goods)
1.3.1 en-goods-food (Food)
1.3.1.1 en-goods-food-fruits (Fruits)
1.3.1.2 en-goods-food-fast (Fast Food)
1.3.1.3 en-goods-food-cakes (Cakes)
1.3.2 en-goods-computers (Computers)
2 ru (Русский)
2.1 ru-articles (Статьи)
2.1.1 ru-articles-tech (Технические)
2.1.2 ru-articles-fiction (Художественные)
2.1.3 ru-articles-economy (Экономика)
2.2 ru-news (Новости)
2.3 ru-goods (Товары)
2.3.1 ru-goods-food (Еда)
2.3.1.1 ru-goods-food-fruits (Фрукты)
2.3.1.2 ru-goods-food-fast (Фаст-фуд)
2.3.1.3 ru-goods-food-cakes (Пирожные)
2.3.2 ru-goods-computers (Компьютеры)

 

Ссылка на одну из категорий будет выглядеть примерно следующим образом: http://yoursite.com/en/goods/food/

Код языка не обязательно должен быть первым, поэтому коды могут быть следующенго вида:

 

4.3.1 news-en-world (World)
4.4.1 news-ru-world (Мир)

или такого:

4.3.1 news-world-en (World)
4.3.2 news-world-ru (Мир)

(но учтите, что для такой нотации надо будет менять приведенные выше правила для mod_rewrite)

Для понимания как будут строиться ссылки на категори просто мысленно замените в коде категории знак тире «-» на слэш.
 

 

#3.2. Добавляем мультиязыковые страницы

 

Страница добавляется как обычно через ссылку «добавть новую страницу», но для корректной работы плагина надо соблюсти следующие правила:

- Выберите категорию в которую вы хотите поместить страницу
- Заполните необходимые поля как для остальных страниц
- Обязательно укажите псевдоним (alias) для страницы (например my_page), добавив в конце код языка (пример my_page_en). Это код будет использоваться плагином для определения языка страницы. Для указания псевдонимов допустимы латинские буквы, знак тире и подчеркивания.

Для добавления перевода - создайте еще одну страницу с соответствующем разделе, заполнив поля аналогично приведенной выше схеме, за исключением того, что псевдоним будет заканчиваться кодом другого языка (для данного примера my_page_ru).

Ссылки на различные версии страницы будут выглядеть так:
http://yoursite.com/en/somecat/my_page
http://yoursite.com/ru/somecat/my_page

В остельном все будет работать как обычно.

Внимание! Будьте уверены, что вы добавили перевод для каждой страницы во все соответствующие категории, в противном случае пользователь будет получать сообщение об ошибке при попытке переключиться на другой (отсутствующий) вариант данной страницы.

 


1. pieter  13.03.2009 03:37
Thanks Trustmaster. This is what we and cotonti needed.
2. fedai  16.03.2009 19:22
Fatal error: Call to undefined function pagi18n_cat_url() in /home/tsnet/public_html/system/functions.php on line 4359
3. Mr G.  27.03.2009 16:38
Is there any possibility to use this plugin to change news language on index page?
4. tensh  31.03.2009 14:44
Thank you for this plugin!
5. ez  31.10.2009 02:49
Just Brilliant... :D
The url transformation is also new for me... great stuff you guys
6. jbra  10.08.2012 20:00

When I goto page it shows this: http://www."domain".com/online/ru/articles/my_page_en

in URL but I get a nopage found error 404. And when I click the russian link on the home page it just refreshes screen.

Please help...

7. jbra  21.08.2012 15:43

Any help with previous post??

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