ПафНутиЙ-Блог » Статьи » Мультиязычный сайт на DLE (или как добавить английский язык)

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

3.12

Тема довольно избитая, информации много, но основная масса - это копипаст статьи целсофта .
И вот буквально вчера понадобилось добавить на несложный 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="{title}">{title}</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)
Так же заменяем
{title}
на
[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. Посмотреть живой пример работы можно на сайте .

Комментарии

PM
PM 3 декабря 2011 12:02
#1
Bolishoe spasibo! winked
jeka66
jeka66 20 декабря 2011 15:41
#2
проблема с поиском. если находит при английской версии в краткой новости, то показывает кусок короткой русской, причем при переходе на полную - идет правильно на полный английский текст..
ПафНутиЙ
ПафНутиЙ 20 декабря 2011 21:24
#3
100% ной поддержки мультиязычности в DLE никогда не будет впринципе. Так что это вполне нормально)))
softcool
softcool 2 января 2012 16:28
#4
дайте пожалуйста ссылку для скачивания английской версии языкового пакета для DLE 9.4.Нигде не могу найти
ПафНутиЙ
ПафНутиЙ 2 января 2012 20:16
#5
softcool
softcool 2 января 2012 21:26
#6
а как быть с тегом {related-news}?показывает ли в русской версии сайта статьи на английском?если описание статьи на русском не имеется?
ПафНутиЙ
ПафНутиЙ 2 января 2012 21:33
#7
конечно же нет)
Как вариант можно модифицировать related-news таким образом, чтобы выводилось содержимое допполей. Возможно я это сделаю когданибудь, если буду заинтересован (имею ввиду НЕ финансовую заинтересованность)
softcool
softcool 3 января 2012 12:15
#8
а куда в 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
#9
Там же написано.
вместо full-story

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

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

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

Спасибо. Всего хорошего.
ПафНутиЙ
ПафНутиЙ 25 февраля 2012 00:02
#16
Вам однозначно нужно писать какойто хак. Како - не могу сказать, это надо к програмистам обращаться.
jeka66
jeka66 25 февраля 2012 08:34
#17
в engine\engine.php есть "Формирование speedbar". сделай аналог на основе английских переменных (дополнительных полей).... вобщем копай в эту сторону.
Barsik
Barsik 18 апреля 2012 21:20
#18
Если нужна индексация английской версии сайта и разные 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
#19
Спасибо за столь большой комментарий!
Но мне кажется проще всё же сделать два разных движка, написать модуль публикации новостей сразу в две БД и авторегистрации/автологина пользователей в двух БД. Возможно даже как то API DLE использовать можно.
Но всё же если делать сайт мультиязычным - лучше юзать соответствующие движки, у которых нормальная реализация языковых файлов и т.д. и т.п.
Barsik
Barsik 19 апреля 2012 14:02
#20
Не знаю — проще ли написать модуль, работающий с БД двух разных сайтов) Может для тех кто умеет — проще. Я лично вообще полный дуб в этих вопросах)))) Да и никто что-то не написал ни одного такого модуля, работающего с разными сайтами, ни для одной CMS (если я только чего-то не пропустил) :(
В плане SEO наверное будет лучше — английская версия будет иметь английские URL, а не русскую транслитерацию. А с другой стороны — адреса будут совсем разные, тогда как с общей БД они могут отличаться только поддоменом «eng.»
Юзать другие движки можно. Но ведь речь шла о DLE :) И о том, насколько я понял, как самостоятельно пошаманив, прикрутить к этому движку мультиязычность.

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

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

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

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

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

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

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

Информация

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

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