[localizator] Мультиязычность, СЕО, автоперевод...




Языковые версии \ сателиты без контекстов, с автоматическим переводом всех полей ресурса + сео, да еще и автоперевод лексиконов — это я уместил в названии localizator.

Зачем я это сделал: бабeл мне ниразу не подошел, долго я держал один проект на migx «локализации», но слишком он не удобен, собрал все минусы которые успел выявить и решил их в своем компоненте.

Возможности
1. Создание псевдоконтекстов «локализации» (можно вместе работать через site.ru/en/ и ch.site.ru)


2. У ресурса есть таб, где заполняются все стандартные поля ресурса + сео, далее по нажатию кнопки это все можно перевести на другие языки, поле контента пока что поддерживает только tiny mce rte.


3. Для удобства пользования лексиконами есть отдельные таб на странице компонента, где видны только лексиконы компонента. Там же выбор языка. Тут тоже есть автоматизация перевода, одно нажатие кнопки.


Локализация pdoTools
Про работу с pdoResources и pdoMenu не забыл, вот пример:
{'!pdoMenu' | snippet : [
	'parents' => 0,
	'leftJoin' => '{
		"localizator" : {
			"class" : "localizatorContent",
			"alias" : "localizator",
			"on" : "localizator.resource_id = modResource.id"
		}
	}',
	'select' => '{ "localizator" : "modResource.*, localizator.*, modResource.id" }',
        'where' => '{ "localizator.key" : "' ~ ('localizator_key' | option) ~ '"}',
]}
Итого все поля ресурса заменяются на переведенные.

Как использовать
Все поля ресурса подменяются локализированными, кроме content, он выводится через {$_modx->resource.localizator_content}.

Настройки
Для автоматизации перевода нужен api key для яндекс переводчика, получить можно тут: translate.yandex.ru/developers/keys и указать в настройке localizator_key_yandex, так же что бы переводчик понимал с какого языка переводить нужно указать ключ локализации в localizator_default_language

Стоимость
Компонент полностью бесплатен, делал для своего проекта, думаю многим облегчит жизнь.
Отправить свое спасибо можно тут: yasobe.ru/na/localizator или попросить у меня номер карты в лс :)

Демо: s9732.h8.modhost.pro/

Компонент отправил в modstore.pro, исходники на github.com/but1head/localizator
23 april 2017, 23:57    but1head   
28    740 +32

Comments (49)

  1. Николай Савин 24 april 2017, 00:35 # +1
    Интересное решение. Пока не знаю где применить, но жопой чую уверен, что пригодится и не раз.
    P.S. Ссылка на Git не работает.
    1. Sem 24 april 2017, 08:57 # 0
      Автору респект. Теперь мультиязычность сайтов перестанет быть головной болью, с кучей контекстов и дублей ресурсов.
      1. Василий Столейков 24 april 2017, 09:35 # +1
        Круто получилось!
        И никаких плагинов, контекстов и дополнительных настроек!
        1. Владимир 24 april 2017, 10:28 # 0
          Круто, не терпится попробовать, а на github.com/but1head/localizator — 404
          1. but1head 24 april 2017, 12:47 # +2
            Залил на github
            1. Владимир 24 april 2017, 13:17 # 0
              Спасибо! И вопрос, если не сильно отвлекаю, на рабочий сайт ставить можно?
              PS По описанию это похоже на Lingua (там тоже поля документа создаются для каждого языка. Очень интересно попробовать и сравнить, и да, сателлиты как раз делаю прямо сейчас, до чего же кстати, если все поойдет)
              1. but1head 24 april 2017, 13:22 # +1
                Уже вижу «A MODX's Lexicon switcher for front-end interface.», у меня одной из задач было уйти от лексиконов.
                По поводу полей — создаются только pagetitle, longtitle, menutitle, introtext, description, content, seotitle, keywords, и подменяются если нужно. В настройках можно задать только перевод определенных полей.

                Демо вполне рабочее, только там pdoTools не понимает что главная в /en/ это не / (ссылка), пока не знаю как его обучить, руками в чанке можно поправить.

                На боевой проект в теории можно, я пока перестраиваю свой проект на эту связку.
                1. Владимир 24 april 2017, 14:05 # 0
                  кстати, в Lingua
                  Lexicon switcher
                  — это не связано с лексиконами MODX, просто переключает поля в документе в соответствии с выбранным с фронтенда языком.
                  Даже для минишопа пробовал — было «почти» хорошо.
                  1. but1head 25 april 2017, 12:52 # +5
                    Перевел dev версию своего проекта, пока полет нормальный. На 11 языков правда долго переводит :)
                    Думаю добавлю в компонент кнопку «перевести все» и чтоб крон обратабывал.



                    Скорость загрузки идентична на всех языках, кэш работает для каждой версии.
                    Разницы в скорости без и с локализатором не заметил.
                    1. Владимир 25 april 2017, 12:55 # +2
                      «перевести все» и чтоб крон обратабывал
                      отличная идея!
                      1. Владимир 28 april 2017, 12:48 # 0
                        Компонент отправил в modstore.pro
                        — что-то долго не появляется. Будет ли доступен в modstore.pro?
                        1. but1head 28 april 2017, 18:25 # +1
                          Давно уже отправил, modstore видимо уехали в Алматы на встречу
                          1. Владимир 28 april 2017, 18:26 # 0
                            Точно.
              2. Алексей Федоров 24 april 2017, 15:10 # 0
                баг с ссылкой на главную, всегда кидает на «голый домен»
                В случае поддомена — нет проблемы, а с «папочными» вариантами скидывает на оригинальный язык
                P.S.: Видел для мультиязычности на MODX проект SLI (github), но обновлялся годы назад, плюс идет поверх системы, поэтому экспериментировать с ним не решился. Нативное решение очень радует). Отключенный перевод контента — это супер))
                1. Николай Загумённов 25 april 2017, 00:28 # +1
                  Афигенно! =) Очень часто делал мультиязычные сайты, на 3-4 языках. Это просто идеальное решение, без контекстов! Спасибо автору!
                  1. Константин Ильин 25 april 2017, 13:27 # 0
                    Однако опередил) Пишу такой же компонент…
                    1. but1head 29 april 2017, 16:08 # +1
                      modstore.pro/packages/utilities/localizator Пакет в модстор
                      1. Ishvan 29 april 2017, 19:09 # 0
                        есть сайт site.ru и есть сайт site.com так будет расширение работать?
                        1. but1head 30 april 2017, 00:26 # +1
                          Я даже не знаю как ответить на этот вопрос.
                          Делаете 2 псевдоконтекста и все.
                        2. Артём 01 may 2017, 11:55 # 0
                          спасибо… компонент то что нужно! спасибо
                          1. Oleh 08 may 2017, 11:37 # 0
                            Спасибо. Про babel можно смело забыть.
                            1. Владимир 10 may 2017, 22:10 # 0
                              Вообще не понял где брать все эти ключи локализаций…
                              попробовал что то сделать, нажимаю автоматический перевод пишет «Для автоматического перевода необходимо добавить хотя бы одну запись в таблицу»…
                              Что писать в localizator_default_language, ru Russian или Ru ???
                              Чот скудная документация, извините мозги после годовой работы без выходных не пашут, но хотелось бы поподробней информативней как то…
                              1. serbeh 17 may 2017, 12:20 # 0
                                Восстановите, пожалуйста, демо-сайт.
                                1. but1head 23 may 2017, 15:15 # 0
                                  Ввиду того что компонент бесплатный, а хостинг нет, я удалил демку.
                                  Если кто-нибудь задонатит yasobe.ru/na/localizator то демка чудом оживет.
                                  1. but1head 23 may 2017, 16:47 # 0
                                    Чудо произошло! Скоро верну демку.
                                    1. but1head 23 may 2017, 18:25 # 0
                                    2. Дмитрий 24 may 2017, 16:09 # 0
                                      А можно еще одну, совсем уж нагловатую просьбу?)
                                      Можешь запилить исходники демо-сайта, я имею в виду элементы, тоже на GitHub? Я что-то не хочу быдлокодить, но в упор не понимаю, как можно сделать ссылки в меню. А так залез и смотришь, все что хочешь
                                        1. Дмитрий 24 may 2017, 16:38 # 0
                                          А, увидел. Спасибо)
                                  2. Дмитрий Храмов 22 may 2017, 14:47 # 0
                                    yadi.sk/d/VxBlpjwk3JQG2Z
                                    Не знаете почему вот так всё? Без подписей, надписей?
                                    1. but1head 23 may 2017, 00:49 # 0
                                      Попробуйте переустановить
                                      1. Дмитрий Храмов 23 may 2017, 20:09 # 0
                                        Ошибка была в том, что по умолчанию язык панели — английский у меня был. Ваш компонент имеет только русскую локализацию — очень неудобно для иностранных разработчиков
                                        1. but1head 23 may 2017, 23:29 # +1
                                          Не делал перевод кроме русского, можете добавить на гитхаб.
                                    2. Дмитрий 23 may 2017, 01:28 # 0
                                      Чото я не догнал немного, как включить эту прелесть…
                                      Контексты нужно создавать?
                                      Можно в паре предложений маленький «fast start»?
                                      1. but1head 23 may 2017, 01:52 # +1
                                        1) создаем локализации (псевдоконтексты)

                                        2) в настройке localizator_default_language указываем ключ основной локализации (у меня это ru, на скрине pt)
                                        3) в настройке localizator_key_yandex указываем апи ключ яндекса, translate.yandex.ru/developers/keys

                                        Конец.
                                        Контент указывается в табе ресурса.
                                        1. Дмитрий 23 may 2017, 02:22 # 0
                                          Хм, вроде все так и делал. Не хочет на sitename.com/en/ контент отображать, 404 отдает. хоть и настроил вроде все, и перевод ресурса сделал… Ладно, завтра еще попробую. Спасибо!
                                          1. Дмитрий 23 may 2017, 11:55 # 0
                                            Можно еще подсказку?
                                            1. Вот главная страница. К ней сделана локализация во вкладке.

                                            2. Вот настройки модуля

                                            3. Вот системные настройки


                                            И в итоге — перехожу по адресу sitename.com/en/ — получаю 404.
                                            Где я что пропустил?
                                            1. but1head 23 may 2017, 14:10 # 0
                                              Пришли доступы modx.pro/users/but1head/, не помню как там через /en/ делать
                                              1. but1head 23 may 2017, 16:09 # +1
                                                ****/en/ слэша вконце не хватало
                                        2. Кирилл 23 may 2017, 17:44 # 0
                                          Отличное расширение! Решил проверить вместе с minishop2. Локализация срабатывает частично http://i.imgur.com/v6ev1X4.png
                                          Пробовал подгружать через {$_modx->lexicon->load('minishop2:default')} — разницы нет.
                                          1. but1head 23 may 2017, 18:29 # +1
                                            Локализатор грузит свои словари вот так:
                                            $modx->lexicon->load($cultureKey . ':localizator:site');
                                            Следовательно вам надо (возможно синтаксис не правильный)
                                             {$_modx->lexicon->load(('cultureKey' | option) ~ ':minishop2:default')}
                                            
                                            или в плагине\сниппете
                                            $modx->lexicon->load($modx->cultureKey . ':minishop2:default');
                                            А вообще должно было «само», но видимо минишоп грузит словари раньше чем локализатор подменит язык.
                                            1. Кирилл 23 may 2017, 18:37 # 0
                                              Спасибо! Синтаксис правильный.
                                          2. Дмитрий Храмов 24 may 2017, 18:25 # 0
                                            Можно ли пользоваться для локализации товаров в minishop2?
                                            Пока чтото не особо выходит(
                                            1. but1head 24 may 2017, 18:27 # 0
                                              Выше спрашивали про ms2, что у вас не выходит?
                                              Теги товаров \ тв параметры не получится, только костылями
                                              1. Дмитрий Храмов 24 may 2017, 18:35 # 0
                                                названия товаров, метатеги, название опций.
                                                вообще запутался, может посмотрите доступ в админку дам, отблагодарю
                                                1. but1head 24 may 2017, 18:37 # +1
                                                  Все инструкции в посте есть, в комментариях тоже
                                            2. Евгений Webinmd 28 may 2017, 11:28 # 0
                                              Есть небольшой вопрос — уточнение.
                                              Есть 2 языка RU EN
                                              Создал два псевдоконтекста, во вкладке Локализация при добавлении перевода можно выбрать эти оба.
                                              То есть получается что, чтобы создать ресурс с переводом, необходимо заполнить 3 вкладки?
                                              1* Основная (там что в основной вкладке Документ)
                                              2* RU
                                              3* EN

                                              Я правильно понял или есть какие-то тонкости?
                                              1. but1head 28 may 2017, 16:49 # 0
                                                У ресурса вам надо заполнить только pagetitle, далее основную локализацию т.е. RU. Потом нажать «автоматический перевод» и переведется на EN. Все.
                                                1. Евгений Webinmd 28 may 2017, 16:50 # 0
                                                  Спасибо
                                              You need to login to create comments.