Вариант многоязычия шестого Друпала
(без вмешательства в код)
1. Перевод и переключение интерфейса.
1.1. Желательно вначале создать базу, установить Друпал, выбрать тему, можно свою и все это на английском языке, сделать элементарные настройки, а затем установить другие языки.
1.2. В языковой панели (admin/settings/language) добавить необходимый язык, установить его по умолчанию и импортировать перевод дополнительного языка, далее повторить, если необходим третий, четвертый и т.д. Переводы скачать с drupal.org. Установить на Ваш выбор родной или иной язык по умолчанию.
1.3. В установках языка на странице (admin/settings/language/add) отразить соответствующий префикс для каждого языка (ru-русский, en-английский и т.д.).
1.4. Определяем префикс пути языка, из четырех предложенных выбираем третий (Префикс пути с определением языка) на странице (admin/settings/language/configure).
1.5. Устанавливаем дополнительный модуль переключения языков Language Icons, на сегодня это самостоятельный модуль, но в более ранних релизах он входил в состав модуля i18n (возможна установка другого переключателя) и переходим к пункту 2.
2. На странице блоков, при установке дополнительных модулей и различных меню, создаются соответствующие блоки, которые необходимо вывести в соответствующий регион и настроить. Для переключения языков, во вновь созданных блоках выбираем третий пункт визуализации блока (Show if the following PHP code returns TRUE (PHP-mode, experts only) и ниже, в зависимости от включенного языка интерфейса, прописываем:
<?php global $language;if($language ->language == "ru") return
true;
else return false;
?>
Если интерфейс русский, либо «en», если интерфейс английский и по аналогии также прописываем и для других языков. На этой же странице выбираем и соответствующий язык.
3. Для вывода контента на Главную страницу и отражения самой Главной страницы, при вызове пункта меню ГЛАВНАЯ (если не вводится сугубо отдельная Главная страница - frontpage), отражаем вверху путь для любого языка, а на странице «О сайте» (admin/settings/site-information) в самом низу ставим node также для любого языка. В данном случае переключение осуществляется через префикс соответствующего языка и Главная страница будет вызываться тремя способами: при нажатии на Главную; при нажатии на Наименование сайта; при нажатии на Логотип, если тема это позволяет.
4. Перевод и переключение контента и меню.
4.1. Устанавливаем дополнительные модули: i18n, Transliteration и Pathauto, они необходимы для перевода контента, меню и работы с переменными.
4.2. Внимательно читаем текстовые файлы по установке этих модулей и дополняем settings.php в конце необходимыми переменными, а в модуль Pathauto добаляем файл транслитерации. После апдейта Друпала, если все установлено верно, на большинстве страниц, где присутствуют переменные, появляется дополнительная запись: This is a multilingual variable.
Если такой надписи нет на какой-либо странице, то она либо не нужна, либо отсутствует соответствующая переменная в settings.php и ее надо ввести.
4.3. Открываем страницу материалы (page, story, book и другие, если создали новые материалы) и везде отмечаем: публиковать с переводом. Перевод контента осуществляется на странице (admin/content/node) вызвав действие – изменить и далее сделать перевод на соответствующий язык.
4.4. На странице модуля i18n (admin/settings/i18n) выбираем из пяти предложений - четвертое (Only current language).
4.5.Методика работы с контентом: Сначала создается контент на главном (или основном, родном) языке, затем переключаем интерфейс на другой язык. Включаем кнопку переводы и заполняем страницу с соответствующим переводом. Перевод может быть один к одному, но может быть и иной, то есть, по усмотрению. На каждой странице внизу отражаются флажки всех переведеных языков.
4.6. Перевод меню (Primary links) также не сложен, но пришлось потратить очень много времени для разрешения этого момента, меню создается для каждого языка отдельно, и здесь есть особенности. Для штатного (стандартного) горизонтального меню обязательно необходимо, чтобы страница содержала переменную, хотя это же меню в любых других регионах (кроме горизонтального) свободно переключается (переводится) на другие языки, разумеется, тоже через переменные. Однако если не будет переменной на странице (admin/build/menu/settings), то горизонтальное меню, при переключении на любой язык, будет отражать меню только на одном языке, который Вы ввели первым. Как Вы назовете меню Primary links, роли особой не играет, но для горизонтального меню предпочтительно назвать Primary links (ru), Primary links (en), Primary links (de) и т.д., а затем создать новое меню и соответствующий ему перевод. Тем более что в горизонтальном меню, видимость наименования меню отключена. Пример: при переключенном интерфейсе на русский, переименовываем Primary links на Primary links (ru) и вводим пункты меню на русском языке. Затем, при переключенном интерфейсе на английский, создаем новое меню Primary links (en) и далее набираем пункты меню на английском языке. В остальных регионах (кроме горизонтального стандартного меню) наименование меню и пункты меню могут быть произвольными. Для Secondary links все аналогично.
5. Перевод и переключение: Наименования сайта, Слогана, Миссии, Логотипа
Все эти переменные отображаются на одной странице «О сайте». Если Вы не обратили внимание, то напоминаю, в конце страницы путь на Главную не трогаем, оставляем для всех языков, одно слово, node, а остальные просто меняем на соответствующий язык, в зависимости от языка интерфейса. В результате, после переключения интерфейса, все они отображаются на том же языке, что и интерфейс.
6. Не забывайте всегда апгрейдить Друпал, при включении новых модулей, сохранять все свои изменения и корректировать вновь созданные блоки на странице блоков. Если все сделано верно, то переключение с одного языка на другой осуществляется практически с любой страницы или через переключатель.
Комментарии
спасибо большое за столь содержательную статью.
Долго не мог "победить" главную страницу. Не совсем был понятен 5ый пункт, но уже во всем разобрался.
Еще с 4.2 и 4.6 пунктом не все ясно, особенно тут:
«Для штатного (стандартного) горизонтального меню обязательно необходимо, чтобы страница содержала переменную, хотя это же меню в любых других регионах (кроме горизонтального) свободно переключается (переводится) на другие языки, разумеется, тоже через переменные.» могли бы вы поподробней описать как работать с этими переменными? у меня ни на одной странице не появилось странице такого: This is a multilingual variable.
отформатируйте статью, а то нечитабильно
Во-первых: в п.1.5. есть небольшая неточность, но она не существенна. Сам переключатель встроен в один из основных модулей, который выводится на странице блоков в любой регион, а включается в работу только при наличии двух или более языков.
Во-вторых: читайте внимательно текстовые файлы в модулях. Все переменные, о которых упомянуто в статье вносятся в конце файла settings.php и это также отражено в статье.
В-третьих:если все сделано верно, то отсутствие строки: (This is a multilingual variable.) может быть вызвано либо сбоем при установке Друпала, либо кривым модулем i18n,тогда следует установить не последний релиз, а предыдущий. Отсутствие этой фразы может также зависеть от неверной кодировки. Все это надо проверить.
И последнее: вариантов переменных много и каждый подбирает группу переменных, в зависимости от требования к сайту. Эти варианты имеются на drupal.ru и drupal.org, и даже в модуле i18n. Штатное горизонтальное меню работает отлично лишь при добавлении в settings.php следующей переменной (menu_primary_links_source), а во всех других регионах срабатывает другая переменная (menu_primary_links_menu), которая чаще встречается в сборках переменных. Естественно следует применить и первую, и вторую.
Надеюсь уже разберетесь.
Здравствуйте, на пятый Drupal пытался установить I18N но у меня уже стоит localaizer, и поставить i18n не получается, просто выдает ошибку.
может есть еще какой нибудь способ перевести блоки и их заголовки? или переключать их с языка на язык?
С пятым Друпалом работал очень мало, но рано или поздно все равно вам прийдется перейти на шестой. Разве большая проблема отказаться от localaizer и поставить i18n, чтобы не искать различные патчи. Посмотрите обсуждение вопроса localaizer здесь: http://www.drupal.ru/node/9837
Спасибо, а смысл переходить на 6-й, и если нужно то как это сделать чтобы не создавать сайт заново?
Да, возможно вы сталкивались, как можно редактировать Шапку? Я имею ввиду, не верхний блок, а та синяя полоса кот. под ним(или вообще ее убрать - вопрос новичка)?
Заранее спасибо.
Здравствуйте, в 5-й версии решить эту проблему не получилось, но на локальной машине поставил 6-ю и к примеру те же чистые ссылки заработали, но не понятно как переводить контент? Я установи i18n потом Language Icons, переключение есть но нет перевода(т.е как переводить сам контент на сраницах), возможно стоит поставить localaizer? но тогда ка перевести блоки? Подскажите пожалуйста.
Здравствуйте, кто то может пояснить пункт:
4.2. Внимательно читаем текстовые файлы по установке этих модулей и дополняем settings.php в конце необходимыми переменными, а в модуль Pathauto добаляем файл транслитерации. После апдейта Друпала, если все установлено верно, на большинстве страниц, где присутствуют переменные, появляется дополнительная запись: This is a multilingual variable.
дополняем settings.php в конце необходимыми переменными
не нашел.
to 237us
В статье и дополнении все расписано довольно широко. Не может быть, чтобы через Гугл невозможно найти необходимые файлы. Если уж не найдете, тогда выставлю в блоге. Касательно перевода контента, тоже все написано, повторяю еще раз - в создаваемых материалах (где нужен перевод) page, story и других, необходимо проставить галочку - ( с переводом) и ничего здесь проблемного нет.
По вопросу работы пятерки и шестерки. Любую пятерку можно обновить до любой шестерки, посмотрите поиском в Гугле, мне просто не приходилось это делать. Следует лишь видимо учесть, что возможно в шестерке будет отсутствовать какой-либо модуль, используемый в пятерке.
По вопросу полосы в шапке, вопрос совершенно не раскрыт и на него невозможно ответить. Можно лишь предположить, что речь идет о полосе, которая может появляется чаще всего в браузере Опера при работе на локальном сервере. Учтите, каждый вопрос должен уже содержать какую-то часть ответа, поэтому старайтесь раскрывать более широко любой поднимаемый вопрос, указать свой путь ли попытку решения. И еще один момент, наскоком Друпал невозможно осилить, этим он отличается от других СМС. Несмотря на отдельные недостатки Друпала, эта СМС превосходит многие другие СМС, поэтому не торопитесь и вникайте.
Большое спасибо, за содержательный ответ.
*Но не могли бы Вы написать или дать ссылку что именно нужно прописывать в файле settings.php (дополняем settings.php в конце необходимыми переменными), перечитал все Readme - файлы, но не нашел, а по поводу - в модуль Pathauto добаляем файл транслитерации - я так понимаю реч идет о модуле Token(который следует добавить в папку с модулем Pathauto) или есть еще файлы которые необходимо добавить?
*По поводу отдельных меню для каждого языка, для не горизонтального меню(стандартного - вертикального, или вертикального с выпадающим списком) тоже необходимо создавать отдельные меню для каждого из языков(В пятом Drupal под модулем localaizer этого не требовалось)?
1. В папку модуля Pathauto надо скопировать файл i18n-ascii.txt, который найдете через поиск – это и есть файл транслитерации. Чувствую легче приложить этот файл ниже.
2. Переменные в сетингс.пхп (просто скопируйте эти данные)
/**
* Multilingual settings
*
* This is a collection of variables that can be set up for each language when i18n enabled.
* These are the basic ones for Drupal core, but you can add your own here.
*/
$conf['i18n_variables'] = array(
// Site configuration
'site_name',
'site_slogan',
'site_mission',
'site_footer',
'site_frontpage',
'anonymous',
// Node help
'blog_help',
'story_help',
// User configuration
'user_registration_help',
'user_mail_welcome_subject',
'user_mail_welcome_body',
'user_mail_password_reset_body',
'user_mail_password_reset_subject',
'user_mail_register_admin_created_body',
'user_mail_register_admin_created_subject',
'user_mail_register_no_approval_required_body',
'user_mail_register_no_approval_required_subject',
'user_mail_register_pending_approval_body',
'user_mail_register_pending_approval_subject',
'user_mail_status_activated_body',
'user_mail_status_activated_subject',
'user_mail_status_blocked_body',
'user_mail_status_blocked_subject',
'user_mail_status_deleted_body',
'user_mail_status_deleted_subject',
// Theme settings: you may want to use different logos for each language
'theme_settings',
// Primary and secondary links
'menu_primary_links_source',
'menu_primary_menu',
'menu_primary_links_menu',
'menu_secondary_links_source',
'menu_secondary_menu',
'contact_form_information',
// Theme settings. This is an 'all or nothing' for each theme
// This is for 'garland' theme, for other theme it would be 'theme_[themename]_settings'
'theme_garland_settings',
'phptemplate_primary_links',
'phptemplate_primary_links_more',
'phptemplate_secondary_links',
'phptemplate_secondary_links_more',
);
3.Касательно меню:
Возможно есть другие методы, но чтобы уйти в дальнейшем от проблем с апгрейдом, что будет обязательно и неоднократно, лучше создавать для каждого языка отдельное меню.
Огромное спасибо!
Позвольте спросить, если отдельные меню для каждого языка, тогда отсюда вытекает, что для каждого языка отдельно созданные page? Или я не прав?
Надо все-таки немного поработать, иначе в дальнейшем будет очень сложно и больше потеряете времени, а может и данных. Когда будете набирать меню, возникнут проблемы с нодами и надо будет создавать материал, определяя ему соответствующую ноду, которая и станет основой для пункта меню. Разумеется для статических страниц лучше использовать page, а для динамических story, хотя в принципе они совершенно ничем не отличаются друг от друга, просто на одном виде можно кое-какие моменты поотключать, а на другом оставить, либо вообще создать свой вид материала.
Спасибо.
Я вас правильно понял, создаем блок меню под каждый язык, а page/story остается 1 для всех, только с переводом? Либо мы создаем под каждый язык свой page/story?
И если можете, скажите (мне очень интересно) где вы Вы нашли текст который выложили для меня (касаемо settings.php)? - я все переискал
чтото я ничего в сеттинегс пхп не вносил, и вродекак все нормально переключается и работает...
отменный гайд, следуя его инструкциям и документации по i18n, ввёл поддержку 3 языков у себя на интернетах.
афтар, пиши ищо *DRINK*))
прочитал баян и ужаснулся. У меня стоит Drupal 6.9 в комплекте есть блок language switcher. Включаю его, нифига не вижу на странице. Даже если так, включаю у себя в профиле английский, всё равно русский. Включаю английский по умолчанию, тогда вижу английский.
Очень нужно английский чтоб был у админа, а для остальных русский, т.к. перевод корявый и зачастую противоречивый.
Неужели надо проделывать все эти сложные операции с правкой файлов и установкой дополнительных модулей?
Всё разобрался. В 6.9 работает с английским и русским без проблем. Нужно в admin/settings/language/configure включить радиобаттон Path prefix with language fallback. Видимо этот баян нужно тем, кому нужен ещё какой то язык.
лучше английский, чем такой русский
При добавление выше указанных переменных в файл settings.php
появляется ошибка:
warning:
array_merge() [function.array-merge]: Argument #2 is not an array in Z:\home\drupal6\www\includes\theme.inc on line 921.
Что делать?
подскажите, а как добавить флаги языков которых нет в данном модуле?
Внимательно смотрите модуль, там есть папка flags и в этой папке полно флажков, вот и уберите ненужные, либо установите свои в эту папку. Если уж и папки нет такой, что маловероятно, может потеряли по дороге, то создайте ее и внесите, например, русский флажок ru.png
спасибо. это я понял. видимо неправильно задал вопрос. флаги я добавлю без проблем. а где его привязать к конкретному языку языку?
Скажите, ЕСТЬ ВОЗМОЖНОСТЬ ТОГО, что в версии 6.9 ненужно добавлять переменные в settings? Потому, что без них все работает, но с ними выдает ошибку.
И какой смысл в создании отдельного меню под каждый язык? И так все работает?
Касательно флажков, ничего не надо привязывать, если рисунки разрешены, автоматически выводится флажок. Возможно в меню у вас не прописаны префиксы для языков en, ru и друпал не может выбрать язык, посмотрите внимательней.
To 237us
Если у вас все работает без переменных, не устанавливайте их, если только вы уверены, что все кеши очищены. Тоже самое и относительно меню для каждого языка. Однако переменные наименование сайта, миссия и т.д.проще переводить через переменные, но есть и другие пути, выбор за вами.
А как можно проверить, что все кеши очищены? Просто как только вставляю переменные выдает ошибку. Пришла интересная мысль на основе Ваших советов, сделать вместо меню просто блок привязанный к языку и внем обычное CSS меню сверстать. Выбора как такого нет, либо работает либо нет, Что Вы посоветуете?
К слову, может подскажите как мне проще всего разместить дополнительный рисунок так же как логотип, только в правом углу(что бы не лесть в сам код)?
Я говорю про редактирование шапки в которой размещен логотип, наименование сайта, и т.д.
Пробовал создать просто новый блок вверху, но тогда получиться двойная шапка.
Очищены кеши или нет можно посмотреть в таблице базы и там же их удалить, либо через страницу производительность, либо дополнительный модуль админ меню, но для вашего варинта надо еще очистить и браузер, чтобы убедиться, что все работает без переменных.
Проще простого разместить картинку в шапке и центральном контейнере с помощью редактора, например, FCKeditor.
Спасибо, а что Вы думаете по поводу - сделать вместо меню просто блок привязанный к языку и внем обычное CSS меню сверстать?
При прописании адреса на любую страницу или путь к картинки столкнулся со следующей проблемой:
Проблема - дублирование нодов в адресе:
http://mysite.com/ru/node/files/img/path/6.gif
http://mysite.com/ru/node/files/img/path2/path3/DSCF3911.JPG
Решение:
перед адресом страницы или путь к картинке пишу '/./' т.е. - '/./files/img/path/6.gif'
или '/./files/img/path2/path3/DSCF3911.JPG' или /./node/12'
В этом случае все работает, но вот еще интересный момент - если поставить '/../' - т.е. путь на 2 уровня выше то все ссылки работают во всех браузерах за исключением IE6.
Если кто то указывает путь к картинкам или ссылкам на сайте по другому, и у него при этом все работает, прошу поделиться(при использование чистых ссылок).
Как перевести уже существующий сайт с 5-й на 6-ю версию, чтобы не затронуть раскрутки сайта? Сайт работает на localaizere, хотелось бы перевести на i18n.
иногда подглючивает когда ноду редактируешь, и она привязана к конкретному пункту меню и языку.
например страница "Часто задаваемые вопросы" отображается в primary-links-ru как "ЧАВО". Когда же редактируешь ее она может автоматически присвоиться пункту FAQ в primary-links-en. Страница ЧАВО является переводом страницы FAQ.
Стоит:
Drupal 6.10
i18n 6.x-1.0
Кто-нибудь сталкивался с подобной проблемой?
А почему данной записи нет в книге (Документация)?
А кто-нибудь когда-нибудь пробовал делать перевод для названия сайта, слогана, миссии? Поделитесь пожалуйста секретом как это можно реализовать.
Да, чего ж не пробовали? Куда ж без этого??? в это же посте описано как
Опубликовано anpal в ср, 28/01/2009 - 21:10
как сделать автоопределение ip региона и подставление соответствующего языка сайта?
IpGeoBase:
http://ipgeobase.ru/cgi-bin/Software.cgi
Спасибо за мануал, буду проходить. Но сразу вопрос: как в php-условие определения языка вписать ещё и условие страницы? Т.е. "показывать только на русской версии сайта _И_ только на главной (ну или на какой-то другой) странице".
спасибо.
вопрос по теме. как прописать сниппет для модуля custom_breadcrumb
так не работает:
<?php global $language;
if($language ->language == "ru") return
TRUE;
else return FALSE;
?>
Для семерки как сделать?
Вот на .орг рекомендуют http://drupal.org/node/313272#comment-4479640
Весь сайт удалось перевести, кроме форума, с ним такая проблема:
Пользователь заходит на сайт под языком "Х", переходит на форум и видит форум (контейнеры, форумы, подфорумы, топики и комментарии) на этом языке. Потом переключает язык на другой - "Y" и видит форум (контейнеры, форумы, подфорумы, топики и комментарии) на этом языке. Т.е. языки не пересекаются.
Проблемма следующая:
Когда пользователь заходит на форум под языком "X", то в контейнерах отображаются и форумы языка "X" и форумы языка "Y", но сами контейнеры переводятся и если провалится внутрь какого либо форума, то топики тоже отображаются соответственно текущему языку. При попытке провалится в отображаемый по ошибке форум другого языка (не текущего), топики не выводятся.
PS Вот сайт. Форум переведён не весь, а точнее одна часть - первый контейнер и первая тема "General questions of ..." и тут же выводится на русском "Общие вопросы по". В данный момент на этом форуме, провалившись внутрь одного из подфорумов, о которых я написал выше, топики выводятся все подряд, но это из-за того, что я отключил фильтр во вьюхах. Сама ошибка - это главная страница форума, где в контейнере выводится и англ форум и русский.