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

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

3.12
61
61893
Мультиязычный сайт на 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="{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. Посмотреть живой пример работы можно на сайте heartiness.org.

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

  • Добавление картинок в новость через дополнительные поля
  • Block.Pro v2.0 скоро будет
  • {AJAX FULL-STORY} — модуль AJAX-загрузки полной новости для DLE
  • Увеличение скорости загрузки сайта на DLE (часть 1) обновлено
Закрыть

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

+

Комментарии

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

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

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

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

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

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

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

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

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

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

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

Информация

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