Бесплатный плагин для мультиязычности "L10n"
Это продолжение темы "Плагин для мультиязычности".
Описание возможностей плагина:
После релиза первой версии плагина прошло больше 6ти месяцев. За это время частично моими силами, а частично силами веб-студии stfalcon.com был реализован следующий функционал:- Cовместимость с LS v0.4.2;
- Возможность выбора языка интерфейса при регистрации пользователя и его последующая смена в настройках пользователя;
- При публикации записи указывается её язык;
- При создании и редактировании блога можно задавать название блога, его описание и url на разных языках;
- Возможность создавать и просматривать переводы для записей;
- Отдельные языковые версии сайта для каждого языка (напр. cookorama.net/ru или cookorama.net/uk). При просмотре отдельной языковой версии сайта выводятся записи только на языке этой версии (аналогично в топе, блоке последней активности, облаке тегов и т.д.). Основная версия сайта остается без изменений (публикуются только топики-оригиналы);
- Чуть не забыл :). Если пользователь зашел на основной сайт (без указания языка в URL), тогда язык пользователя определяется по базе GeoIP Lite (пока для Украины и России, этот момент нужно ещё рефакторить);
- Плагин совместим с плагином Sitemap v0.2.1. Сайтмапы для разных языковых версий лежат в сабдиректориях (напр. cookorama.net/ru/sitemap.xml и cookorama.net/uk/sitemap.xml)
Но не обошлось без хака роутера (для установки и передачи языка). В принципе получилось сделать это средствами конфига (код остался закомментированым в конфиге), но вылезли проблемы при сжатии css/js и ссылкам на статические ресурсы плагинов.
Примеры работы плагина
Я сделал несколько скриншотов, чтобы продемонстрировать работу плагина.Блок выбора языка в сайдбаре
Смена языка в настройках пользователя
Создание перевода
Установка и настройка плагина
Скачать плагин можно на странице плагина в каталоге модулей LiveStreet.Распакованный архив нужно скопировать в корень сайта. Таким образом в папке plugins появится папка l10n, а файл engine/class/Router.php будет заменен на модифицированный роутер.
Теперь чего же там можно крутить. Можно настраивать список доступных языков. См. файл l10n/config/config.php:
// список доступных языков (для разных языковых версий сайта)
$config['allowed_langs'] = array('ukrainian', 'russian');
Допустим если вам нужен английский и русский, тогда меняйте этот код на:
// список доступных языков (для разных языковых версий сайта)
$config['allowed_langs'] = array('english', 'russian');
Обратите внимание, что ниже есть список алиасов для языков. Язык, который вы добавляете в список разрешенных, должен присутствовать в этом списке:
// ключ - язык в урл, значение - папка языка в livestreet
// коды языков взяты из вики http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%B4%D1%8B_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2
$config['langs_aliases'] = array(
'ukrainian' => 'uk',
'russian' => 'ru',
'english' => 'en',
'german' => 'de',
'spanish' => 'es',
'belarussian' => 'be',
'bulgarian' => 'bg',
'lithuanian' => 'lt',
'georgian' => 'ka',
'uzbek' => 'uz',
);
Для того чтобы подтягивался язык интерфейса отличный от дефолтного этот язык должен быть установлен на сайте. Список языков смотрите в каталоге LS.
Плагин вам пригодился?
После релиза плагина SEO многие высказывали желание проспонсировать дальнейшую разработку плагинов — пишите в личку, обсудим. Эти деньги будут потрачены на дальнейшее развитие моих плагинов.Ошибки, замечания, пожелания
По сложившейся традиции пишите все в комментариях к этой записи :).PS. Поздравляю всех с наступающим Новым Годом и Рождеством!
131 комментарий
все, плагин прошел модерацию
Развития Вам и процветания Ваших проектов..;)
так как плагин фришный, то об остальном должно заботиться или коммюнити или заказчики.
с платными плагинами потяжелей :). думаю, что я бы заботился о совместимости с маркетинговой точки зрения. логично, что цена при этом должна повышаться.
А при попытке добавить новосто на русском вижу это:
Стоит aceAdminPanel, и два блока языка — как один убрать то?
дебажьте скрипт
ищите почему он у вас дважды вызывается. блок цепляется в методе SetLang() (classes/hooks/HookL10n.php) который цепляется на хук lang_init_start, который должен вызываться только один раз
найдете — расскажете мне ещё
в файле classes/hook/HookL10n.php закомментировать определение по GeoIP. это в SetLang() третий блок с else. или добавить туда для en настройки.
2. такого не замечал. странное поведение. можно линк?
Вот вылезает при попытке активировать. По рыскал в google и нашел вроде как исправить code.google.com/p/slimstat/issues/detail?id=1
но теперь появляются уведомления аж 14 штук такого вида
Notice: Constant GEOIP_COUNTRY_EDITION already defined in /var/www/vhosts/bestlife.kz/subdomains/blog/httpdocs/plugins/l10n/classes/lib/external/GeoIp/geoip.php on line 31
Notice: Constant GEOIP_PROXY_EDITION already defined in /var/www/vhosts/bestlife.kz/subdomains/blog/httpdocs/plugins/l10n/classes/lib/external/GeoIp/geoip.php on line 32
Они появляются только на дефолтном языке, на других все норм.
или все таки плагин дважды активируется. можете исходники предоставить?
на «кукураме» если я сменю язык на украинский, то на главной странице появятся совсем другие топики.
зачем так сделано? по-моему это не совсем корректно. или я не прав? (:
cookorama.net/ru/ рецепты и переводы на русском
cookorama.net/ оригинальные рецепты
я исходил из мысли, что если пользователь хочет просматривать украинскую версию сайта, то это относится и к интерфейсу и к контенту
cookorama.net/ru/tag/%D1%81%D0%B0%D0%BB%D0%B0%D1%82/ у меня работает. а ссылка так и должна выглядеть
cookorama.net/ru/tag/салат/
и в последней версии trac.lsdev.ru/livestreet/browser/trunk/classes/actions/ActionTag.class.php
дублирую свой ответ из нашей переписки.
для решения проблемы с тегами замените в файле classes/actions/ActionTag.class.php 54 строку на
livestreet.ru/blog/6262.html
наверное не смержил в свое время обновления роутера. сейчас ещё раз обновлю плагин.
Как пофиксить?
cookorama.net/ru/ активная ссылка действительно на домен без указания языка введет. остальные норм.
Duplicate column name 'user_lang' [query] => ALTER TABLE `bzz_user` ADD `user_lang` VARCHAR(16) NOT NULL DEFAULT 'russian' AFTER `user_password` [context] => K:\home\ls.net\www\engine\classes\Plugin.class.php line 196 )
при активации плугин пытается добавить то, что уже есть. Ок. отрубил в activate.sql все это добро… на запросе опять споткнулся
ALTER TABLE `prefix_blog_l10n`
ADD CONSTRAINT `prefix_blog_l10n_fk` FOREIGN KEY (`blog_id`) REFERENCES `prefix_blog` (`blog_id`) ON DELETE CASCADE ON UPDATE CASCADE;
Ошибка: Can't create table '.\social\#sql-5a4_12d.frm' (errno: 121)
)
router
только есть один маленький трабл — если зайти на морду сайта, контент сайта подставляется согласно GeoIP, но урл остается без признака языка.
это может быть вредно для SEO, страница с разным контентом но с одним урлом.
подскажите пожалуйста, куда копать?
пробовал в HockLn10.class.php, в функции setlang делать так
это решило проблему, но перестал работать функционал присоединения к коллективному блогу.
подскажите как решить проблему.
Подскажите как реализовать у себя такое.
Дело в том что настроил плагин всё работает два языка но если выбираешь ru версию блоги пишет на русском, а если выбираешь en версию контент показывается только en а вот блоги остались на русском.
Fatal error: Call to undefined method Router::getLang() in .../plugins/l10n/classes/modules/l10n/L10n.class.php on line 153
После этого все перестало работать, все время выходит эта ошибка.
Что я сделал не так?
Спасибо.
читайте инструкцию по установке github.com/stfalcon-studio/ls-plugin_l10n/blob/master/INSTALL.txt
SQL Error: Duplicate column name 'user_lang' at Z:\home\videoclips\www\engine\modules\database\Database.class.php line 151
Array ( [code] => 1060 [message] => Duplicate column name 'user_lang' [query] => ALTER TABLE `prefix_user` ADD `user_lang` VARCHAR(16) NOT NULL DEFAULT 'russian' AFTER `user_password` [context] => Z:\home\videoclips\www\engine\modules\database\Database.class.php line 151 )
Подскажите, пожалуйста, в чем проблема? Установлены последние версии LS и самого плагина.
У меня кнопка «Написать» перестала работать. На её месте была такая ссылка:
в админке попробовал в «плагины» зайти — то же самое примерно. Потом удалил его. Как бороться с этим? Плагин-то нужен :)
дайте максимум информации по проблеме. какая версия LS, какие плагины установлены
Пробовал отключать все плагины, кроме админпанели и л10н, все осталось по прежнему,
в какую сторону копнуть? или можно передать дамп для изучения?
Да это гениально, есть ли решение????
site\blog\title
А вывод остальных блогов выводить соответственно языку
site\blog\ua\title
site\blog\en\title…
— v0.4.0
— Добавлена поддержка LS v1.0.1
После смены языка к примеру «en» при наведении на названия сайта, топики, все выходит ссылка типа site.com, а должно site.com/en/… на cookorama.net так.
все плагины отключил, не решилась проблема.
нужно заменить
а вот c niceurl у меня не работает, подскажите как поправить
Что неправильно делаю?
Сделал все по инструкции — на синио (голом ЛС) работает нормально, а вот на другом шаблоне выдает это:
Я думаю проблема в недостающих хуках?
Как решить? помогите пожалуйста!
когда отключаешь плагин все нормально
я так понимаю происходит это из за того что язык не выбран. Как можно присвоить язык по умолчанию при регистрации через логинзу? Всё равно потом через настройки пользователя можно его установить на нужный.
выдает вот что:
Strict Standards: Declaration of PluginL10n_ModuleTopic::GetOpenTopicTags() should be compatible with ModuleTopic::GetOpenTopicTags($iLimit, $iUserId = NULL) in /var/www/admin/www/tunister.com/plugins/l10n/classes/modules/topic/Topic.class.php on line 7
Strict Standards: Declaration of PluginL10n_ModuleTopic_MapperTopic::buildFilter() should be compatible with ModuleTopic_MapperTopic::buildFilter($aFilter) in /var/www/admin/www/tunister.com/plugins/l10n/classes/modules/topic/mapper/Topic.mapper.class.php on line 7
Warning: Cannot modify header information — headers already sent by (output started at /var/www/admin/www/tunister.com/plugins/l10n/classes/modules/topic/Topic.class.php:7) in /var/www/admin/www/tunister.com/engine/include/function.php on line 234
Warning: Cannot modify header information — headers already sent by (output started at /var/www/admin/www/site.com/plugins/l10n/classes/modules/topic/Topic.class.php:7) in /var/www/admin/www/site.com/engine/include/function.php on line 235
куда копать не подскажите?
Strict Standards: Declaration of PluginL10n_ModuleTopic::GetOpenTopicTags() should be compatible with ModuleTopic::GetOpenTopicTags($iLimit, $iUserId = NULL) in /var/www/admin/www/site.com/plugins/l10n/classes/modules/topic/Topic.class.php on line 7
Warning: Cannot modify header information — headers already sent by (output started at /var/www/admin/www/site.com/plugins/l10n/classes/modules/topic/Topic.class.php:7) in /var/www/admin/www/site.com/engine/include/function.php on line 235
В расширяемые плагином метод( -ы) нужно добавить параметры $iLimit, $iUserI.
Но возможно этим не ограничитесь.
Более подробно не подскажу, это нужно ставить и смотреть плагин, есть мнение, что это не единственная проблема совместимости. Могу, конечно, предложить решение проблемы на «коммерческих» основаниях =)
stfalcon , спасибо за реализацию плагина!
Установил на чистую LS 1.0.3 skin-synio. Из установленных плагинов 2 предустановленных: Livestreet Profiler Plugin,Static page ( не активированы )aceAdminPanel v.2.0.355 и L10n. Тестирую на локал-хосте ( Денвер ). Раннее была установлена украинская локализация от adamantis1 Для себя перевел «админку» на украинский :-) В config.php выставил
Выполнил установку L10n по инструкции ( заменил Router.class.php ) Все работает. Но появились вопроссы:
Вот так выглядит языковая панель блока
Попитки изменить расположение вывода кнопок в том порядке в котором желаю, не дает желаемого результата:
Позже понял, что так возможно поменять местами подписи к флагам :-)
Что имею: Переключение языков работает корректно. Например выбираю любой из предложенных. Ок. Но при выходе, перебрасывает на главную. Язык русский. «Админка» на русском ( для меня это не критично. Но возможно кому то и принципиально ). Нужна подсказка в каком направлении двигаться? Ранее ставил langchange. Но само его расположение в шапке немного не эстетично. Ваш вариант более приемлем. Собственно только вчера подумал, что неплохо бы такой плагин поискать. И вот чудо — нашел :-)
Изменил в
все наоборот:
В настройках «админки» установил так:
Что получилось:
* «Админка» опять отображается на украинском языке.
* При выходе с сайта возвращает на страницу с украинским языком. Раньше, при выходе перебрасывало на главную с русским. После эксперимента с регистрацией нового пользователя и выбором желаемого языка, при входе и выходе выбранные настройки сохраняются отлично. В моем случае, при установке LS, языком по умолчанию стоял русский. Поэтому покидая сайт, все отображалось в оригинале.