» » Мультиязычный сайт на DLE (или как добавить английский язык)

Мультиязычный сайт на DLE (или как добавить английский язык)

3.12
73
83 376
Мультиязычный сайт на DLE (или как добавить английский язык)

Тема довольно избитая, информации много, но основная масса - это копипаст статьи целсофта пятилетней давности.
И вот буквально вчера понадобилось добавить на несложный DLE-сайт английскую версию. Заняло это у меня 3 часа, включая поиск информации (ибо раньше с этим не сталкивался), перевод шаблона, перевод текста картинок и объяснение администрации сайта правил заполнения английской версии новостей.

Ещё раз отмечу, что сайт довольно прост, половина функционала DLE там отключена, отсюда и простота добавления второго языка.

Итак



Требовалось добавить английскую версию публичной части сайта, т.е. новостей.

Первым делом

необходимо найти английскую версию языкового пакета для нужной версии DLE. Я буду писать про DLE 9.4

Т.к. изначально администрация сайта не думала добавлять второй язык сайту, DLE установили в кодировке windows-1251, что в принципе не является критичным. На всякий случай я открыл файл languge/English/website.lng и поменял там строку
'charset'            =>    "utf-8",

на
'charset'            =>    "windows-1251",

Не забыв при этом поменять кодировку самого файла.

Если у вас установлена UTF версия DLE - этих телодвижений делать не нужно.

Дополнительные поля

только так можно нормально осуществить задуманное.
Нам потребуется создать 3 дополнительных поля:
Одно - однострочное:

Название поля eng_title
Описание поля Заголовок Eng
Категория Все
Тип поля Одна строка
Значение по умолчанию пусто

Не забываем галочку "использовать при желании"


и два многострочных.

Название поля eng_short_story
Описание поля Краткое описание Eng
Категория Все
Тип поля Несколько строк
Значение по умолчанию пусто

Название поля eng_full_story
Описание поля Полное описание Eng
Категория Все
Тип поля Несколько строк
Значение по умолчанию пусто

Так же у обоих полей ставим галочку "использовать при желании"



Далее

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

А теперь самое интересное

как же сделать, чтобы в английской версии сайта выводилось соответствующий языку контент?
Очень просто.
открываем shortstory.tpl и вместо
<a href={full-link}" title="Мультиязычный сайт на DLE (или как добавить английский язык)">Мультиязычный сайт на DLE (или как добавить английский язык)</a>
(это правильно написанная ссылка на полную новость)
пишем:
<a href="{full-link}" title="[xfvalue_eng_title]">[xfvalue_eng_title]</a>


Вместо тега
{short-story}
пишем:
[xfvalue_eng_short_story]

Теперь защитим себя от незаполненной английской версии новости:
в начало файла пишем: [xfgiven_eng_short_story], а в конец - [/xfgiven_eng_short_story]. Грубо, но эффективно!

Остальное по желанию. Я например убрал облако тегов, всё равно ПС не проиндексирует английскую версию сайта, да и теги на русском языке в английской версии сайта не нужны.


Теперь fullstory.tpl (сейчас поймёте почему DLE 9.4)
Так же заменяем
Мультиязычный сайт на DLE (или как добавить английский язык)
на
[xfvalue_eng_title]


А вот
{full-story}
мы заменим немного хитрее, ведь где гарантия того, что пользователь заполнит поле eng_full_story?
Дабы обезопасить себя родимого от кривости рук нерадивых журналистов делаем так:
[xfnotgiven_eng_full_story][xfvalue_eng_short_story][/xfnotgiven_eng_full_story][xfgiven_eng_full_story][xfvalue_eng_full_story][/xfgiven_eng_full_story]
Таким образом, если не заполнено полное содержимое английской версии - будет выведено краткое содержимое английской же версии smile

После этого

желательно переименовать папки с шаблонами на соответствующие языку имена, напимер theme_ru и theme_eng ну и залить обратно на хостинг отредактированную папку с шаблоном и языковой пакет.


Теперь идём в админку

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

Открываем .htaccess (тот, который лежит в корне сайта) и после RewriteEngine On дописываем:
RewriteRule ^eng/(/?)+$ index.php?action_skin_change=yes&skin_name=theme_eng [L]
RewriteRule ^ru/(/?)+$ index.php?action_skin_change=yes&skin_name=theme_ru [L]

Это для нормального вида ссылок на смену языка сайта.

Ну и конечно же в русском main.tpl в нужном месте ставим ссылку
<a rel="nofollow" href="/eng/" title="English version">English version</a>
а в английской версии:
<a href="/ru/" title="Руская версия">Руская версия</a>



Вот и всё



P.S. Посмотреть живой пример работы можно на сайте heartiness.org.

Похожие материалы

Комментарии

ПафНутиЙ
ПафНутиЙ 28 июня 2012 19:31
Не понял вас, и поэтому не представляю как это осуществить.
grek
grek 29 июня 2012 00:25
ПафНутиЙ, у меня сайт типо каталога с боку сайта много катигорий разных фирм мне надо чтоб наверху было выподающие меню с разными облостями городов при выборе города чтоб только катигории менялись
ПафНутиЙ
ПафНутиЙ 29 июня 2012 10:53
Думаю вам стоит обратиться к фрилансерам.
grek
grek 30 июня 2012 14:30
Мне Нужно чтоб при нажатии на ссылку только боковое меню менялось а сам сайт остовался не изменным Такое возможно??
ПафНутиЙ
ПафНутиЙ 30 июня 2012 22:40
За ваши деньги любой каприз. Вопрос в том, стОит ли "игра свеч". А вообще я в предыдущем комментарии выразил уже мысль по этому поводу.
grek
grek 1 июля 2012 19:14
Вопрос Можно Ли зделать Чтоб Поиск в DLe по умолчанию сразу искал и в новостях и в статических страницах Не Заходя В раширинный поик Просто Набрал и нашол????
ПафНутиЙ
ПафНутиЙ 2 июля 2012 00:03
подключите поиск гугл или яндекс - будет искать даже в комментариях.
ZORGE
ZORGE 29 июля 2012 17:57
Всем спасибо за разьяснения.

Несколько вопросов:

1. Как быть с категориями?
Если категория на русском то она будет отображать эту категорию на русском в обоих движках (рассматриварием варианто двух движков на одной базе данных)

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

но тогда если сделать тег "категория" то он выведет название как на руском так и на английском... или отказаться от испорльзования этого тега.

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

Кстати вывод тегов можно также заменить дополнительными полями (однострочными через запятую) то есть сделать два дополнительных поля

теги-ru и теги-eng и соотвественно выводить их в полных или коротких новостях. То есть поиск по ним можно будет производить. Однако в этом случае вывод поля тегов не сделать, так как это будет поиск по дополнительным полям...
Sykoku
Sykoku 18 февраля 2014 17:12
Работает только для новостей. Статические страницы придется ковырять дополнительно.

topnews правится аналогично - с {title} на [xfvalue_eng_title]

Календарь заклинило на английском. Причина - загадистое управление в АдминПанели связкой шаблон - язык шаблона. Проще отредактировать руками файл /engine/data/config.php - это строки вида "язык - имя_шаблона". У меня это выглядит так:

'lang_Russian' => 'Russian',
'lang_English' => 'English',

Не забываем добавить следующие строки:
'home_title_eng', 'description_eng' ,'keywords_eng' ,'short_title_eng', offline_reason_eng'.

Внимание! Лучше копировать сразу 2 строки - старое значение и пустоту над/под ней и, вставив в конец файла, начинать редактирование. Или пользоваться редактором, понимающим все кодировки, иначе получите ошибки при чтении файла.

Определение языка вставляем в начало кода файла /engine/modules/static.php

if ($lang['wysiwyg_language'] == 'en') $lang_add = '_eng'; else $lang_add = '';

и следующую строку меняем с

if( !$static_result['id'] ) $static_result = $db->super_query( "SELECT * FROM " . PREFIX . "_static WHERE name='{$name}'" ); else $static_result['id'] = intval($static_result['id']);

на

if( !$static_result['id'] ) $static_result = $db->super_query( "SELECT * FROM " . PREFIX . "_static WHERE name='{$name}{$lang_add}'" ); else $static_result['id'] = intval($static_result['id']);

Ну и предпоследнюю строчку можно изменить с

$lang['static_page_err'] = str_replace ("{page}", $name".html", $lang['static_page_err']);

на

$lang['static_page_err'] = str_replace ("{page}", $name.$lang_add.".html", $lang['static_page_err']);



Далее, файл /engine/engine.php. Нам нужны заголовки на "правильном" языке. Ищем

$metatags['title'] = $titl_e . $page_extra . ' » ' . $config['home_title'];

и меняем на

$metatags['title'] = $titl_e . $page_extra . ' » ' . $config['home_title'.$lang_add];

На пару строчек выше (до начал условия, примерно 798 строка) вставляем уже знакомое определение языка

if ($lang['wysiwyg_language'] == 'en') $lang_add = '_eng'; else $lang_add = '';

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


Кто хочет, меняет SpeedBar (текстовая строчка над содержимым страницы со ссылками на родительские разделы). Механизм аналогичен:
- вставляем проверку языка
- и меняем ссылки. Пример: было $config['short_title'] стало$config['short_title'.$lang_add]


Далее. Файл /engine/init.php

В начале файла находим определение

if( $config['start_site'] == 3 AND $_SERVER['QUERY_STRING'] == "" AND !$_POST['do']) {

$_GET['do'] = "static";
$_REQUEST['do'] = "static";
$_GET['page'] = "main";
$_REQUEST['page'] = "main";
}

и ПЕРЕНОСИМ его строчек на 300 ниже - примерно над

$smartphone_detected = false;

Это сделано потому, что обработка страницы "main" (если она у Вас есть) идет по особым правилам, не таким, как для остальных статических страниц. И, чтобы не городить дополнительные проверки, просто перенесем вызов до того момента, как уже будут объявлены все необходимые условия работы движка.

Почти все.
Теперь заводим копии всех статических страниц с суффиксом "_eng". Естественно, не на русском.
ПафНутиЙ
ПафНутиЙ 18 февраля 2014 20:28
что мешает сделать две статические страницы, по одной для каждого языка?
Sykoku
Sykoku 19 февраля 2014 13:00
Сделано, выложено. Если бы еще и движок форума позволял это сделать с 1-й попытки, а не орал "хакерская атака", было бы еще лучше.
ПафНутиЙ
ПафНутиЙ 19 февраля 2014 13:27
Положите код на gist, вставьте сюда ссылку. Ну или на почту мне пришлите
Внимание! У Вас нет прав для просмотра скрытого текста.
Sykoku
Sykoku 19 февраля 2014 13:32
С n-й попытки получилось - пост #3525. Пример лежит на trodat.kiev.ua.
Golden_Eagle
Golden_Eagle 21 сентября 2014 10:54
Спасибо, очень интересно. Давно бы уже создатели ДЛЕ задумались над мультиязычностью своего движка, было-бы очень классно :)
ПафНутиЙ
ПафНутиЙ 23 сентября 2014 14:56
DLE изначально не предполагает мультиязычности. Проще сделать два движка на поддоменах.
atis
atis 8 октября 2014 15:22
При переходе на английскую версию, этот шаблон становится основным. Т.е. когда я в следующий раз захожу на сайт открывается английская версия. Все решается чисткой cookie и кэша. Но хотелось бы, чтобы всегда изначально открывалась русская версия. Как это можно реализовать?
ПафНутиЙ
ПафНутиЙ 8 октября 2014 15:56
Так ведь именно так и должно быть. Посетитель выбирает нужную ему версию сайта и при следующем визите он заходит в нужную ему версию автоматически.
atis
atis 8 октября 2014 15:59
Да, но если при переходе на английскую версию, перейти обратно на русскую версию, при следующем визите все равно откроется английская версия
atis
atis 9 октября 2014 14:06
А еще может подскажете, как быть. На сайте установлен модуль галереи iphoto, и когда в русской версии переходишь в нее, то открывается галерея но в английском шаблоне. Заранее спасибо :-)
ПафНутиЙ
ПафНутиЙ 9 октября 2014 14:53
нужно смотреть сайт.
kenandi12
kenandi12 4 декабря 2014 04:33
ya zdelal tak je no u menya vozniklo problema..103.info.az pojalusta posmatriti i pomaqiti menya
Manvel
Manvel 21 апреля 2015 12:29
Здравствуйте,

Кто поможет мне у меня такая проблема когда изменю язик из армянского на англиского или на оборот у меня дает это

"ВНИМАНИЕ! ОБНАРУЖЕНА ОШИБКА
По данному адресу публикаций на сайте не найдено, либо у Вас нет доступа для просмотра информации по данному адресу."

что мне делать?

Заранее спасибо
Prof1
Prof1 18 мая 2015 23:27
Сделал сайт на DLE 10.4 на 3 языках - русском, английском и украинском. Соответственно, сделал 3 шаблона - Russian, English, Ukrainian. При переключении языков (шаблонов) при помощи {changeskin}всё работает замечательно. Если же использовать ссылки типа site.ua/index.php?action_skin_change=yes&skin_name=ИМЯ_ШАБЛОНА, то шаблоны переключаются, а язык системных сообщений остается такой, какой выбран по умолчанию в админке. Шаблоны связаны со своими языковыми файлами в админке. Возможно ли это как-то исправить?
ПафНутиЙ
ПафНутиЙ 18 мая 2015 23:33
Вам нужно написать в техподдержку движка, я не помогу.
Prof1
Prof1 18 мая 2015 23:46
Спасибо за оперативный ответ. В техподдержку писать не буду - не купил его. Буду ковыряться сам
Prof1
Prof1 30 мая 2015 23:22
Календарь, порядок сортировки, другие системные сообщения у меня не выводились на нужном языке по простой причине - шаблоны у меня назывались English, Russian, Ukrainian. В качестве ссылок я использовал конструкцию - index.php?action_skin_change=yes&skin_name=english, а надо было - index.php?action_skin_change=yes&skin_name=English. Самое интересное, шаблоны переключались вне зависимости от регистра, а для переключения языка системных сообщений регистр букв имеет значение.
Zhurik
Zhurik 5 декабря 2016 02:24
Возник вопрос:
Как подобной ссылкой Сделать так чтобы пользователь переходил не на главную сайта а на туже новость с которой он хочет поменять язык?
ПафНутиЙ
ПафНутиЙ 6 декабря 2016 08:05
Лучше сделать два разных сайта.
nanupocuk
nanupocuk 17 декабря 2016 20:26
Добрый день, возник вопрос по DLE 11.0
RewriteRule ^eng/(/?)+$ index.php?action_skin_change=yes&skin_name=theme_eng [L]

Такой способ смены шаблона в DLE 11.0 не работает, незнаю может поменяли функцию смены шаблона, может вы знаете другой способ смены ? пробывал на dle 9.4 работает всё замечательно, но DLE 9.4 слишком старое управление. хотелось бы на новой DLE 11.0 сделать
ПафНутиЙ
ПафНутиЙ 18 декабря 2016 08:41
К сожалению я не смогу вам помочь. Вполне вероятно, что в 11 версии что-то изменили.
Рекомендую использовать два отдельнх сайта для реализации многоязычности.

Добавить комментарий

Комментировать могут только зарегистрированные пользователи

Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.