Не давно был у меня «интересный заказ», и вот после него остались некоторые наработки. Одна из них, это плагин «Знание языков», который позволяет пользователям указывать языки которые они знаю, и после они будут отображаться в его профиле.
Интересно, а где находится информация о том что массив в языковом файле плагина не добавляется к общему массиву, а к элементу [«plugin»][«название плагина»] => array(«здесь то что в файле»)? И что в итоге в шаблоне надо подставлять {$aLang.plugin.названиеплагина.названиеключа}? Это как то совсем не очевидно. Я это понял только посмотрев содержимое docs.livestreetcms.com/api/1.0/ModuleLang#GetLangMsg-detail.
Имею один хостинг на котором установлен ЛС, на нем 2 домена host.ru host.com с одной базой данных.
Проблем с интерфейсом не возникло если набирают host.ru то грузит русскую локализацию, если набирают host.com то грузит английскую локализацию.
Но вот не могу понять как сделать по языкавому наполнению отбор. Если грузять host.com что бы грузились посты и инфа которая есть на сайте только та которая написана на английском языке, а если host.ru загружают то отображалась только русские топики которые писались а английские не показывались.
Такая проблема, допустим есть статья в русском варианте сайта mysite.ru/ru/zdraste.html. Видна она только пользователям в русскоязычной версии. Но если поменять в адресной строке ru на en — mysite.ru/en/zdraste.html, то интерфейс поменяется на английский, но русская статья все-равно отобразится. По идее должно выкинуть 404 ошибку, ведь в англ. версии такой статьи нет. На той же кукураме эта проблема решена. Подскажите как этого добиться?
Существует модуль языки, устанавливается в настройках как язык интерфейса.
Еще можно добавить статьи под определенный язык и выбрать статьи из этого языка по нажатию на язык с панели. Как сделать следующее, чтоб без кликов всегда выбирались статьи определенного языка. Что-то вроде для Англоязычных и для Русских, для англоязычных будет добавляться копия статьи на EN и им не требуется показывать Ру.
Как можно переписать модуль под эти нужды, думаю это бы стало полезным.
Как и прежде, модуль многоязычной поддержки входит в пакет модуля Админпанель. Но в версии 1.2.98 была сделана одна небольшая доработка, немного облегчающая жизнь тем, кого эта тема (многоязычные сайты на базе ЛС) интересует.
А именно — если раньше выбранный пользователем язык сохранялся только на время сессии, то теперь его можно сохранять в куках. Т.е. выбрал юзер свой язык, отличный от установки LANG_CURRENT, и этот выбор (если заданы соответствующие установки) будет действовать и при последющих заходах юзера на сайт с этого компьютера.
Как это сделать? Открываем файл /config/modules/language/config.php и задаем параметр:
define('LANG_SAVE_DAYS', 365);
Число указывает, сколько дней будет храниться выбранный язык.
И еще один вопрос часто задают: а как сделать выбор языка? Мне казалось, что я достаточно подробно об этом писал здесь: livestreet.ru/blog/2109.html. Но, видимо, нужен конкретный пример, как организовать «мультиязычность». Поэтому вот вам пример на базе скина new.
1. Открываем шаблон header_nav.tpl
2. Находим форму поиска
Теперь над полем поиска у вас появятся два флажочка — российский и британский, при клике на которые юзер будет переключаться соответственно на русский или английский язык.
ЗЫ Прошу гуру за говнокод не пинать, т.к. это всего лишь пример. Хотя и вполне рабочий. :)
ЗЗЫ А кртинки с флажочками, нужными для работы примера реально лежат в папке /templates/language/flags/
Честно говоря, не очень хорошо представляю, как это может быть реализовано организационно, но технически сделать это очень даже просто, если у вас установлена Админпанель версии 1.2 и выше. И хоть я лично несколько скептически отношусь к подобной идее, но раз уж такая фича получилась практически сама по себе, то решил ее описать.
Я уже писал, как сторонние разработчики могут использовать для своих нужд Модуль расширения языковой поддержки. Теперь я дополнил его обработчиком экшена. Итак, если вам очень уж хочется, чтоб юзер мог переключать язык на сайте, то нужно сделать следующее:
1. Установить Админпанель версии не ниже 1.2 (модуль языковой поддержки также будет установлен).
2. В папку templates/language/ положить нужные файлы переводов
3. В конфиг-файле config/modules/language/ определите константу LANG_DEFAULT, определяющую язык по умолчанию (будет использоваться в тех случаях, когда не найден нужный перевод; подробнее см. здесь). Там же желательно определить список языков, которые будут поддерживаться — константа LANG_DEFINE.
4. В смарти-шаблонах сайта переменные вида $aLang.blablabla заменить на $oLang->blablabla
5. Добавить в шаблоны переключение языка, т.е. ссылки вида httр://ваш_сайт/language/russian, httр://ваш_сайт/language/english и т.д.
Для тех, кто еще не знает – модули Admin (Админпанель) и Language (Расширенная языковая поддержка) это дополнительные модули к движку LiveStreet для упрощения и облегчения администрирования сайтов, построенных на этом движке. Скачать их можно в разделе Модули по адресу livestreet.ru/addons/34/ (одним пакетом).
Функционал модулей описан в соответствующих топиках (например, livestreet.ru/blog/addons/2105.html) и разобраться, как с ними работать, довольно просто.
Но хочу рассказать, как можно использовать этот функционал из других модулей и как можно доработать шаблоны сайта для быстрого доступа к нужным функциям.