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

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

3.12
73
80 718
Мультиязычный сайт на 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.

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

Комментарии

PM
PM 3 декабря 2011 12:02
Bolishoe spasibo! winked
jeka66
jeka66 20 декабря 2011 15:41
проблема с поиском. если находит при английской версии в краткой новости, то показывает кусок короткой русской, причем при переходе на полную - идет правильно на полный английский текст..
ПафНутиЙ
ПафНутиЙ 20 декабря 2011 21:24
100% ной поддержки мультиязычности в DLE никогда не будет впринципе. Так что это вполне нормально)))
softcool
softcool 2 января 2012 16:28
дайте пожалуйста ссылку для скачивания английской версии языкового пакета для DLE 9.4.Нигде не могу найти
softcool
softcool 2 января 2012 21:26
а как быть с тегом {related-news}?показывает ли в русской версии сайта статьи на английском?если описание статьи на русском не имеется?
ПафНутиЙ
ПафНутиЙ 2 января 2012 21:33
конечно же нет)
Как вариант можно модифицировать related-news таким образом, чтобы выводилось содержимое допполей. Возможно я это сделаю когданибудь, если буду заинтересован (имею ввиду НЕ финансовую заинтересованность)
softcool
softcool 3 января 2012 12:15
а куда в fullstory надо вставить это [xfnotgiven_eng_full_story][xfvalue_eng_short_story][/xfnotgiven_eng_full_story][xfgiven_eng_full_story][xfvalue_eng_full_story][/xfgiven_eng_full_story]
ПафНутиЙ
ПафНутиЙ 3 января 2012 12:49
Там же написано.
вместо full-story

Кстати советую обратить внимание на новую версию Block.Pro.2 - теперь можно выводить похожие новости. Более подробную статью уже пишу.
avdsm
avdsm 5 февраля 2012 16:01
Что то не получается каждому шаблону назначить свой язык.
При переходе на другой шаблон язык остается тот-же.
Движок DLE-9.2 utf
jeka66
jeka66 6 февраля 2012 08:36
а ты в каждом (!) шаблоне все поправил?
chrome
chrome 21 февраля 2012 00:19
что-то не работает. вставил 2 строки в .htaccess сайт выдает ошибку 500 dle 9.5
проблема решена
chrome
chrome 21 февраля 2012 16:43
а как решить проблему: я сижу на английской версии сайта и жму "Выход" (из панели) и попадаю на русскую версию belay
ПафНутиЙ
ПафНутиЙ 21 февраля 2012 19:26
нужно править ссылку на выход.
как - не знаю.
ialexdr
ialexdr 24 февраля 2012 16:58
Буду рад, если кто-нибудь поможет решить следующее: как быть с модулем {speedbar}, к примеру на русском он так и будет выводиться, как при стандартном выводе, но что можно сделать с выводом этого модуля на другом языке в шаблоне другого языка.

Мне пока что в голову лишь пришла такая идея. Вот пример:

[category=1] ссылка на главную > главная категория > подкатегория [/category]
[category=2] ссылка на главную > главная категория > подкатегория [/category]
...
В моём случае таких строк будет 167, боюсь что создаст нагрузку. Как думаете?

Спасибо. Всего хорошего.
ПафНутиЙ
ПафНутиЙ 25 февраля 2012 00:02
Вам однозначно нужно писать какойто хак. Како - не могу сказать, это надо к програмистам обращаться.
jeka66
jeka66 25 февраля 2012 08:34
в engine\engine.php есть "Формирование speedbar". сделай аналог на основе английских переменных (дополнительных полей).... вобщем копай в эту сторону.
Barsik
Barsik 18 апреля 2012 21:20
Если нужна индексация английской версии сайта и разные URL — устанавливаем второй такой же движок DLE на поддомен или в подпапку, предварительно ее создав и залив туда установочные файлы — получается движок в движке и обманчивая видимость категории. Например хттп://site.ru/eng/

При установке указываем ту же БД, что и у основного сайта — таким образом будут общая авторизация и возможность добавлять одновременно обе языковых версии статьи на оба сайта через одну форму ( с доп. полями).

После этого удаляем у второго двига дефолтные шаблоны, копируем туда шаблон из основного движка, переименовываем их соответственно в «rus» и «eng» — так, чисто для удобопонимания. Назначаем их каждый в своей админке шаблоном по умолчанию, присваиваем языковые пакеты.

После этого создаем одинаковые для обоих движков дополнительные поля и редактируем шаблон «eng» (всё как описано в этой теме).

Разделы так же создаем одинаковые (ну или можно во втором двиге их просто переиндексировать, нажав «отсортировать категории» — сами появятся). Но если не отсортировывать (никогда) — им можно присвоить одинаковые ИД, но разные названия, например «Новости» и «News», то есть перевести на другой язык. Тот же фокус можно проделать и с названиями групп пользователей.

Поскольку переключаться на другой язык шаблонами при такой установке уже не получится (теперь у одной и той же статьи на разных языках будут разные адреса — а нам именно это и надо) — делаем переключатель перелинковкой site.ru <—> site.ru/eng

Недостаток — при смене языка будет выбрасывать на главную.
Но зато можно смело давать людям линки сразу непосредственно на нужную языковую версию статьи.

Кстати, отличаться ссылки будут только наличием «eng/» в URLе, например:
site.ru/main/26-novost.html — новость на русском
site.ru/eng/main/26-novost.html — та же самая новость на английском
Возможно, как-то можно сделать переключатель языков, который внутрь текущего адреса страницы засовывал бы этот «енг/» или наоборот убирал его, но как — я не знаю, не умею.

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

Чтобы переводились Топ-10 новостей, похожие новости и прочее — придется повозиться с этими модулями и их шалонами во втором движке, подсовывая данные из дополнительных полей — муторно, но можно сделать, один раз повозившись. Если модуль только у вас не сторонний с закрытым кодом и поддерживает доп. поля.

Можно пойти еще дальше и сделать, например, разные комментарии — свои для каждой языковой версии.
Здесь способов два:
Первый — убрать из шаблона второго движка родные комменты и навесить сторонние. Но опять же — они будут по-разному смотреться.

Второй способ (пробовал — получилось) — несколько модифицировать второй движок перед его установкой: загнать его целиком в редактор и поменять везде где только можно — в названиях папок, файлов и содержимом файлов «comment» на, например, «komment». Важно нигде не пропустить. С шаблоном «eng» нужно сделать то же самое!
При установке такого движка в таблице БД сайта появится например dle_komments и комментарии будут видны только в той языковой версии, в которую их добавляли.

При желании даже RSS-поток наверняка можно сделать двуязычным, поиграв с дополнительными полями в его модуле второго движка. А если уж совсем задаться целью, то возможно и с поиском на сайте можно такое провернуть. Хотя проще прицепить на сайт поиск от Яндекса или Гугла — и будет вам счастье.

Так что даже самостоятельно, вручную сделать сайт на DLE с практически 100%-ной поддержкой мультиязычности - хлопотно, но можно.
А в условиях разработчика движка, имхо, — проще пареной репы: там всего-то и нужно что добавить в движок несколько основных (опционально включаемых при установке) полей, которые будут равноценны существующим и выводиться в шаблонах например — {title-2}, {short-story-2}, {full-story-2}, ну и заодно — {addcomments-2} и {comments-2} .
Тогда пользователю только и останется для реализации мультиязычности, что дописать в нужном шаблоне сайта или модуле одну циферку.
ПафНутиЙ
ПафНутиЙ 19 апреля 2012 08:39
Спасибо за столь большой комментарий!
Но мне кажется проще всё же сделать два разных движка, написать модуль публикации новостей сразу в две БД и авторегистрации/автологина пользователей в двух БД. Возможно даже как то API DLE использовать можно.
Но всё же если делать сайт мультиязычным - лучше юзать соответствующие движки, у которых нормальная реализация языковых файлов и т.д. и т.п.
Barsik
Barsik 19 апреля 2012 14:02
Не знаю — проще ли написать модуль, работающий с БД двух разных сайтов) Может для тех кто умеет — проще. Я лично вообще полный дуб в этих вопросах)))) Да и никто что-то не написал ни одного такого модуля, работающего с разными сайтами, ни для одной CMS (если я только чего-то не пропустил) :(
В плане SEO наверное будет лучше — английская версия будет иметь английские URL, а не русскую транслитерацию. А с другой стороны — адреса будут совсем разные, тогда как с общей БД они могут отличаться только поддоменом «eng.»
Юзать другие движки можно. Но ведь речь шла о DLE :) И о том, насколько я понял, как самостоятельно пошаманив, прикрутить к этому движку мультиязычность.

Кстати, смена языка шаблоном и двумя сайтами с общей БД — не единственные способы реализации многоязычности на DLE. Ну с помощью Гугла — в расчет не берем конечно, это не мультиязычный сайт, а автотранслят.
Но вот как вариант — кому-то подойдет — можно думаю изготовить соответствующий шаблон и выводить два языка одновременно в соседних центральных колонках. Слева — на русском, справа — на английском из дополнительных полей.Для небольших презентационных сайтов, каталогов с продукцией предприятия и тому подобного вполне может сгодиться и так. На этикетках ведь так и делают)))) И Гуглы оба текста подхватят...

А вот насчет других движков — а есть ли они, мощные и хоть сколько-нибудь заточенные под русскоязычного пользователя? Я имею ввиду не двиг чтобы сайт-визитку склепать, а, например, портальную CMS.
Ставим, например, задачу: новости, каталоги, афиши, городская информация и так далее — городской портал. Берем страну бывшего СНГ, например Казахстан, Украину, Литву и т.п., где приличная часть населения — русскоязычные.
И добавляем такое условие: сайт наполняет не админ и не секретутка в офисе фирмы, а предоставляем эту возможность совершенно разным городским структурам и организациям, дав им соответствующие права в соответствующих разделах. Соответственно, заполнение обоих сайтов должно быть крайне удобно для пользователей (непосредственно с сайта), логически понятно ( всё в одной форме) и вообще не вызывать никаких трудностей и вопросов.
Читаем инфу о возможностях и мультиязычности разных CMS, отбрасываем Друпалы, битриксы и иже с ними.Ничего толкового о мультиязычности такого рода в них я не нашел.
Останавливаемся на Джумле, Вордпрессе, DLE.

Сначала отметаем Джумлу. Единственное внятное средство мультиязычности — ДжумФиш — отличная вешь, но это не средство заполнения сайта на нескольльких языках одновременно, а средство перевода имеющихся уже на сайте статей на другой язык. Да и вообще Джумла мало подходит для интерактивного заполнения сайта пользователями. Костылей и возни будет порядком.

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

В DLE же можно создать неограниченное количество групп пользователей, права пользователей можно организовать и распределить сколь угодно гибко, добавление новостей на сайт архиудобнейшее, почти как сообщений на форум, а с помощью дополнительных полей можно создать любые самые извращенные формы и разделы с информацией, в том числе двуязычные. И всё это — штатными средствами.
Так что с мультиязычностью можно немного и повозиться и ручками, тем более там ничего архисложного нет. Не без недостатков получается, но тем не менее..
ПафНутиЙ
ПафНутиЙ 19 апреля 2012 19:20
Я бы первым пунктоп поставил цену)))
в данном вопросе "цена вопроса" (каламбурчик вышел) - главное.
Ибо имея опыт создания сайтов на DLE и bitrix, я первым делом обращу внимание на битрикс.
1. В нём есть возможность грузить определённые шаблоны (имею ввиду шаблон сайта а не шаблон новостей и т.п.) при определённых условиях (например &eng в адресной строке).
2. ВСЕ тексты можно легко и непринужденно перенести в lang-файлы, где для каждого языка тупо создаётся своя папка, в которой лежит языковой файл. т.е. например один и тот же шаблон новостей в зависимости от шаблона сайта будет выдавать разные поля, тексты, и полне возможно метатеги и т.д. и т.п. не углублялся в эту тему. при этом тот же шаблон новостей лежит в одном экземпляре и его просто "подхватывают" шаблоны сайта, никаких дублирований ненужных не происходит.
3. Формы добавления чеголибо на сайт кем либо - как два пальца ... я гдето видел даже модуль, установив который можно быстро настроить всё это дело без особых навыков.

Но и конечно же ложка дёгтя - говнохостинг с битриксом не справится, а разработку под битрикс лучше заказывать нормальным конторам, а не фрилансерам, ибо проверенно (к нам постоянно приходят клиенты за переделками после филансеров или других контор, делающих на отъе**сь)
Barsik
Barsik 20 апреля 2012 00:34
В Битрикс почему-то «не воткнул» (( Поюзал как-то демку и понял, что не хочу даже связываться))) Друпал и тот показался более понятным :) А вот DLE как-то сразу легла на душу, как никакая другая система. Хоть и приходится часто ручками ковыряться, но в админке всё архилогично и понятно. Каждому своё :)
ПафНутиЙ
ПафНутиЙ 20 апреля 2012 16:29
Просто DLE и Битрикс рассчитаны на разные сайты)
DLE - легко и быстро.
Битрикс - долго, но с запасом на дальнейшее усложнение и обновление проекта, без особых заморочек.
sppn911
sppn911 23 июня 2012 13:41
Добрый день. К сожалению у меня где-то что-то не так и я не могу добиться желаемого результата. Много искал в инете и форумах, но ничего не нашел, поэтому решил обратиться к вам.
Все сделал согластно мануалу, переключение на другой язык осуществляется нормально, но при нажатии на любую ссылку в навигации или на новость, меня возвращяет на предыдущий язык... ( тестирую я использую Денвер на локалхосте, версия 9.4) Заранее благодарствую.
ПафНутиЙ
ПафНутиЙ 23 июня 2012 14:03
GoogleChrome (а может и ещё кто) не воспринимает cookies на локалхосте.
Советую пользоваться хостингом для проверки работоспособности сайта.
sppn911
sppn911 23 июня 2012 21:06
ПафНутиЙ,
Примного благодарен. У меня были сомнения по поводу локалхоста... а как на хостинг закинул так все заработало, осталось купить новую клавиатуру после ночного безумия:)))
grek
grek 27 июня 2012 16:18
народ Я зделал всё как написано но в полнуюю новость зайти не могу при нажатии на любю ссылку кидает на русский Как Исправить Я на лакальном сервере ща пишу dle 9.5
ПафНутиЙ
ПафНутиЙ 27 июня 2012 16:44
читайте два комментария выше.
grek
grek 27 июня 2012 17:12
Ща попробуюю ))) Заранее Спасиб)
grek
grek 28 июня 2012 17:46
Здравствуйте меня интиресует Можно ли зделать подпункт выподающем меню в котором будут список городов при выборе города с боку сайта будет менятся только коталог с подпунктами Такое Можно ЗДЕлать если можете подскозать То как ???? Зарание блогодарен

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

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

Информация

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