Polylang

Компонент позволяет создавать мультиязычные сайты без дополнительных контекстов.

Возможности
  • Локализация полей документов Modx
  • Локализация Tv
  • Локализация полей miniShop2 (добавленных через msFieldsManager)
  • Локализация опций miniShop2
  • Изменения типа ввода данных для полей
  • Изменения порядка вывода полей в админке
  • Изменение порядка вывода языков на сайте
  • Автоматический перевод поля или группы полей локализации через google translate или yandex translate
  • Задание полей, для которых следует использовать автоматический перевод
  • Автоматическое создание локализаций для документа с автоматическим переводом полей
  • Индексация полей локализаций в mSearch2
  • Авто определение языковой версии сайта при первом его посещении
  • URL с слэшем на конце и без
Интеграция
  • msFieldsManager — Да
  • mSearch2 — Да
  • pdoTools — Да
  • msMultiCurrency — Да
  • msImportExport — В планах
Видео-обзор


Купить
Prihod
09 июля 2020, 14:18
modx.pro
4
2 634
+24
Поблагодарить автора Отправить деньги

Комментарии: 69

Николай Савин
09 июля 2020, 14:26
+1
О! Еще один языковик. Было бы неплохо почитать об отличиях от Локализатора
    Prihod
    09 июля 2020, 14:52
    +4
    Было бы неплохо почитать об отличиях от Локализатора
    Ну если на вскидку то такие.
    1. Работа с кастомными полями miniShop2
    2. Работа с опциями miniShop2
    3. Индексация полей для mSearch2 из коробки
    4. Возможность сортировки языков при выводе
    5. Возможность скрыть часть полей или изменить для них тип ввода, например прикрутить к полю текстовый редактор
    6. Перевод текста как с помощью yandex translate так и google translate + можно реализовать свой класс с нужным сервисом перевода
    7. Можно указать какие поля следует переводить автоматически
    8. Можно сразу сделать создание и перевод локализаций для ресурса
    9. Поддержка url как со слешем на конце так и без
    10. Авто определение языковой версии сайта при первом его посещении
    11. Сниппет который создает URL для ресурса с учетом выбранной языковой версии сайта.
    12. Ну и в целом меньше лишних тело движений при настройки компонента
      Николай Савин
      09 июля 2020, 14:55
      0
      Выглядит внушительно. Спасибо за работу.
        Андрей Шевяков
        09 июля 2020, 20:18
        0
        Вот где ты был пару месяцев назад(((( Не пришлось бы изобретать кучу велосипедов… Пошел тестить на модхост.
      Sergey Korn
      09 июля 2020, 19:53
      0
      А с MIGX будет работать хотя бы в перспективе? Если да, то это бомба!
        Prihod
        09 июля 2020, 20:06
        +2
        в перспективе да
          Sergey Korn
          09 июля 2020, 20:10
          0
          Тогда жду с нетерпением и буду пользовать!
            igor
            04 апреля 2021, 10:14
            0
            еще не работает c migx?
              Prihod
              04 апреля 2021, 21:45
              0
              Лично не тестировал все моменты, но уже общался с несколькими клиентами которые юзают migx. Да и в принципе не должно быть проблем с migx так как это все те же TV, главное в из названии не использовать дефис. Ну а вообще все можно протестировать в бесплатном тарифе на modhost.pro/
          Тодор
          09 июля 2020, 20:00
          +1
          А как насчет совместимоси с mSearch2?
            Prihod
            09 июля 2020, 20:06
            +1
            совместим
            Андрей Шевяков
            09 июля 2020, 21:29
            +2
            Можно ли указывать разную цену для товара в зависимости от локализации?
              Prihod
              10 июля 2020, 00:32
              0
              Нет
                Андрей Шевяков
                10 июля 2020, 00:37
                +2
                Планируется в дальнейшем? В любом случае думаю этот функционал нужен, т.к. на примере своего сайта, мне только из за того что для ru цены в рублях, а для en цены в $, и не привязанные к курсу, пришлось собирать сайт на контекстах, а это не сильно удобно. Готов помочь со спонсированием по такому функционалу.
                  Николай Савин
                  10 июля 2020, 09:47
                  0
                  Что мешало создать дополнительное поле price_usd и в зависимости от назначенного cultureKey использовать необходимую цену?
                    Андрей Шевяков
                    10 июля 2020, 11:47
                    0
                    Пробовал пойти по такому пути, не завелся mFilter с такими ценами и сложности с опциями товаров в Локализаторе были опять же в mFilter. Долго крутил, в итоге переделал все с помощью Babel.
                      Prihod
                      10 июля 2020, 12:16
                      0
                      Я думаю то как потом с ним работать в корзине и при оформлении заказа не говоря уже об других дополнениях которые как то модифицируют цену. Именно поэтому на данный момент такой возможности и нет даже в msMultiCurrency но в планах такое реализовать есть но для этого нужно будет сделать пару изменений в самом minishop2
                SEQUEL.ONE
                09 июля 2020, 23:44
                0
                Без контекстов это конечно хорошо, но вот если на сайте через контексты разные сайты работают, то как тогда быть?
                  Prihod
                  10 июля 2020, 00:31
                  0
                  Ну в принципе всё должно работать
                  Viktor
                  13 июля 2020, 12:30
                  0
                  Охуе**о!
                    Юрий
                    28 ноября 2020, 21:24
                    0
                    Добрый день!
                    Подскажите пожалуйста какова схема работы с данными при импорте различных языковых версий. Например при работе с Babel создаются дубликаты ресурсов в соответствующих контекстах и организовываются связи между ними. А в случае с Polylang какова схема в этом случае? На что ориентироваться?
                      Роман
                      03 декабря 2020, 12:07
                      0
                      Здравствуйте. В видео для документов html, вы убрали окончание для страниц .html? Это принципиально или сделали так чисто по привычке? На моем сайте товары с расширением .html, не будет ли проблем в работе с вашим дополнением?

                      Спасибо.
                        Prihod
                        03 декабря 2020, 12:20
                        0
                        Чисто по привычке, с html проблем не будет
                          Роман
                          03 декабря 2020, 12:31
                          0
                          И если у меня есть опыт работы с БД через HeidiSQL, я смогу через него и csv сделать быстрый перевод всех товаров и категорий? Коль msImportExport пока в планах.
                            Prihod
                            03 декабря 2020, 12:39
                            0
                            Ну теоретически можешь. Поставь его на бесплатном тестовом тарифе modhost.pro/ и проверь )
                              Роман
                              03 декабря 2020, 14:33
                              0
                              Поставил, покопался, все возможно, основная сложность это свести ID контента и ID локализации. Можно как-то одним кликом создать для всех контентов (категории, страницы, товары) на сайте локализации ru и заполнить содержимым, которым уже заполнены? На сайте около 7к документов, у товара есть опции и ТВ поля, у категорий ТВ поля.

                              Идея какая: сайт в зоне com.ua и делать com.ua/ua не хочется. Сейчас сайт на русском языке, создать локализацию ru с нынешним содержимым (скопировать), а потом нынешнюю версию сайта которая выводиться на domen.com.ua — перевести на укр язык и сделать локализацию UA основной для сайта.

                              Реально ?)
                                Prihod
                                03 декабря 2020, 19:18
                                0
                                ну это нужно писать свой скрипт из коробки такой возможности нет
                                  Роман
                                  03 декабря 2020, 21:47
                                  0
                                  Вы про «одним кликом создать локализации»?
                                    Prihod
                                    03 декабря 2020, 21:49
                                    0
                                    ну да, вопрос же про это был
                        Андрей Рябченко
                        01 февраля 2021, 14:58
                        0
                        Добрый день
                        подскажите, есть у компонента возможность массового заполнения полей?
                        через msPe или отдельным скриптом?
                          Кирилл
                          18 февраля 2021, 05:24
                          0
                          Не в ту ветку обратился, *del*
                          Кирилл
                          18 февраля 2021, 05:25
                          0
                          Доброго времени суток! Насколько я понял по ветке выше, у модуля нет возможности запустить перевод всего сайта автоматически? Соответственно после всех предварительных настроек. В том же бесплатном локализаторе такой функционал есть.

                          Просто, допустим, если сайт на 1к ресурсов, то нужно будет в каждый заходить и прокликивать кнопку на перевод? По моему это было бы очень затратно по времени. Или, допустим, прокликал я 1к раз, переводя на 2 языка, а тут на следующий день надо третий язык добавить. Тогда снова ручной переобход 1к ресов?

                          Вы писали в ветке выше что надо писать скрипт. Не подскажете, например, через тот же модуль консоли, как бы выглядел запрос на авто-перевод всех недостающих полей в абстрактном ресурсе *ID*?
                            Андрей Рябченко
                            18 февраля 2021, 10:27
                            0
                            у меня больше 10к ресурсов
                            прокликал руками основные категории и разделы, остальное нереально.
                            по поводу наличия скрипта массового перевода автор молчит
                              Кирилл
                              18 февраля 2021, 11:54
                              0
                              А через поддержку не пробовали обращаться? Я интересуюсь заранее т.к у меня может быть заказ, где он используется, но я бы туда точно тоже написал, чтобы уточнить т.к важный момент.
                                Андрей Рябченко
                                18 февраля 2021, 12:03
                                0
                                ну вот сейчас сходил, спросил )
                                а разница… автор и там и тут видит-же тред по своему компоненту
                                больше функционал — всяко лучше
                              Prihod
                              18 февраля 2021, 12:29
                              +3
                              Сегодня будет сборка с таким скриптом
                                Prihod
                                18 февраля 2021, 14:22
                                +2
                                Новая версия 1.0.10-pl уже доступна prnt.sc/zyy7wr
                                  Кирилл
                                  18 февраля 2021, 15:01
                                  +1
                                  Спасибо! Думаю этого многим не хватало для полного счастья) Отличный компонент!
                              Sergey (Sentinel)
                              27 февраля 2021, 14:29
                              0
                              А вот такая конструкция не будет работать для компонента?
                              {11 | resource : 'longtitle'}
                                Prihod
                                27 февраля 2021, 20:13
                                +1
                                используй pdoField
                                  Sergey (Sentinel)
                                  28 февраля 2021, 12:53
                                  0
                                  Спасибо, а если на странице 10 заголовков нужно вывести в разных местах?
                                  На сколько критично по скорости выводить 10 вызовов pdoField?
                                Sergey (Sentinel)
                                28 февраля 2021, 16:46
                                0
                                Кстати, тестировал вывод TV в шаблоне при реализации своего источника файлов к примеру по пути assets/img
                                Получается на другом языке путь не подставляется для такого вызова
                                {set $reviewsImg = 'pdoField' | snippet : ['id' => 18,'field' => 'img']}
                                <img class="lazy" src="{$reviewsImg | Polylang2BaseUrl | pthumb : "w=780&h=752&zc=1&far=1&bg=ffffff&q=75"}" >
                                т.е. для другого языка изображение в TV не найдено, т.к. отсутствует assets/img
                                  Sergey (Sentinel)
                                  28 февраля 2021, 17:14
                                  0
                                  приходится велосипедить
                                  {if $_modx->config.cultureKey == 'en'}
                                  {set $uriLang = '/assets/img/'}
                                  {/if}
                                  {set $reviewsImg = $uriLang ~ 'pdoField' | snippet : ['id' => 18,'field' => 'img']}
                                  но это конечно жесть…
                                    Алексей Смирнов
                                    14 сентября 2021, 19:06
                                    +1
                                    Теперь можно не велосепедить.
                                    Профиксено.
                                    И migx стал фурычить с фотками корректно.
                                  Сергей
                                  20 апреля 2021, 13:41
                                  0
                                  Планы на msImportExport, а то как раз необходимость появилась =)
                                    Prihod
                                    29 апреля 2021, 00:35
                                    +3
                                    UPD 1.1.0-pl
                                    • Добавлено: Поддержка переводчика PROMT
                                    • Добавлено: Поддержка компонента msMultiCurrency
                                    • Добавлено: Сниппет «PolylangSitemap»
                                    • Добавлено: Опции polylang_set_currency_for_language; polylang_post_processing_translation; polylang_disallow_translation_completed_field
                                    После обновления возможно необходимо будет очистить кэш браузера.
                                      Максим
                                      19 мая 2021, 17:02
                                      0
                                      Раньше когда делал через контексты, если было нужно разные данные на разных языковых версиях, то я просто через IF проверял контекст, и выводил нужную информацию, как с подобным обстоит здесь?

                                      Извиняюсь если вопрос не актуальный, но пробежался по всем комментам и вроде не увидел.
                                        Prihod
                                        19 мая 2021, 17:38
                                        0
                                        Ну текущая версия языка хранится в плейсхолдере так что по идее ты так же само можешь использовать IF если я конечно правильно понял суть вопроса
                                          Максим
                                          19 мая 2021, 21:59
                                          0
                                          Возможно так будет нагляднее, правда пример не через IF

                                          [[*context_key:is=`ru`:then=`img src=«logo_ru.svg»`]]
                                          [[*context_key:is=`de`:then=`img src=«logo_de.svg»`]]
                                          [[*context_key:is=`en`:then=`img src=«logo_en.svg»`]]

                                          Верно понимаю, что будет плейсхолдер-аналог "context_key", по которому я смогу также проверять?
                                            Prihod
                                            20 мая 2021, 22:28
                                            0
                                            в ++cultureKey хранится код языка
                                            так что можно делать так
                                            [[++cultureKey:is=`ru`:then=`img src=«logo_ru.svg»`]]
                                            [[++cultureKey:is=`de`:then=`img src=«logo_de.svg»`]]
                                            [[++cultureKey:is=`en`:then=`img src=«logo_en.svg»`]]
                                            или еще проще
                                            src="logo_[[++cultureKey]].svg"
                                              Максим
                                              21 мая 2021, 03:55
                                              0
                                              Отлично, спасибо, за идею!
                                        Alex Zhuravlev
                                        06 июля 2021, 00:42
                                        0
                                        Привет. Спасибо за большую проделанную работу.
                                        А когда документация с примерами и разными готовыми решениями на PolyLang планируется и будет ли вообще?
                                          jss.putty
                                          06 июля 2021, 03:55
                                          0
                                            Alex Zhuravlev
                                            06 июля 2021, 03:57
                                            0
                                            Очень не хватает удобного интерфейса локализации пользовательского текста как это реализовано в Localizator
                                            Переводить а главное создавать переменные в словаре через стандартные функции modx очень не удобно.
                                            Планируется ли такой функционал в PolyLang?

                                              Alex Zhuravlev
                                              06 июля 2021, 06:18
                                              0
                                              — Авто определение языковой версии сайта при первом его посещении
                                              Работает, определяет, но есть нюансы.
                                              Когда первый раз заходишь на сайт по ссылке site.ru ( язык браузера на eng ) то редирект на EN версию сайта, потом ничего не меняя заходишь второй раз и попадаешь на уже версию RU (или тот язык который по дефолту без контекста)
                                              Но правильнее запоминать язык который определился первый раз или же тот который выбрал пользователь после, то есть если пользователя устроил язык авто определения и он его далее не менял, то все гуд, его и подпихиваем ему в дальнейшем, ну и если он его сам изменил то дальше используем уже измененный.
                                              Автор, есть ли возможность допилить?
                                                Prihod
                                                19 июля 2021, 16:46
                                                0
                                                Polylang 1.2.0
                                                • Добавлено: Поддержка мультидоменности
                                                • Добавлено: Опция «polylang_default_domain_settings»
                                                • Добавлено: Событие «OnSetPolylangDefaultSettings»
                                                • Добавлено: Политика доступа
                                                • Добавлено: Клонирование контента как отдельного поля так и всей локализации
                                                • Добавлено: Страница управления лексиконом
                                                • Добавлено: Перевод лексиконов
                                                • Добавлено: Клонирование лексиконов
                                                • Исправлено: Сниппет «PolylangSitemap»
                                                  Prihod
                                                  21 июля 2021, 17:26
                                                  0
                                                  Если после обновления на версию 1.2.0 у вас в логе modx ошибка типа
                                                  Unknown column 'PolylangContent.editedby' in 'field list'
                                                  то выполстите в консоли modx следующий код
                                                  $pkgName = 'Polylang';
                                                  $pkgNameLower = mb_strtolower($pkgName);
                                                  $modelPath = $modx->getOption("{$pkgNameLower}.core_path", null, $modx->getOption('core_path') . "components/{$pkgNameLower}/") . 'model/';
                                                  $modx->addPackage($pkgNameLower, $modelPath);
                                                  $manager = $modx->getManager();
                                                  $manager->createObjectContainer('PolylangTvTmplvars');
                                                  $manager->createObjectContainer('PolylangLanguageGroup');
                                                  $manager->createObjectContainer('PolylangLanguageGroupMember');
                                                  $manager->addField('PolylangContent', 'editedby', array('after' => 'content'));
                                                  $manager->addField('PolylangContent', 'editedon', array('after' => 'content'));
                                                  $manager->addField('PolylangLanguage', 'rank_translation', array('after' => 'rank'));
                                                  $manager->addField('PolylangLanguage', 'parent', array('after' => 'site_url'));
                                                  $manager->addField('PolylangLanguage', 'description', array('after' => 'name'));
                                                    Prihod
                                                    01 сентября 2021, 15:50
                                                    +1
                                                    Polylang 1.2.3
                                                    ====================================
                                                    — Добавлено: Импорт/экспорт лексиконов
                                                    — Исправлено: Работа с контекстами
                                                    — Исправлено: Определения языков для Ajax запросов
                                                    — Исправлено: Ключ кеша ресурса
                                                      Prihod
                                                      22 октября 2021, 19:36
                                                      +1
                                                      Polylang 1.2.8
                                                      ====================================
                                                      — Добавлено: Автоматическая переадресации на домен в зависимости от геолокации посетителя
                                                      — Добавлено: Генерация 404 ошибки для ресурсов бел локализации для выбранного языка
                                                      — Добавлено: Параметр «onlyWithLocalization» для сниппетов использующих pdoTools
                                                      — Добавлено: Опции «polylang_use_error_404» и «polylang_use_error_404_resources»
                                                      — Добавлено: События «OnDetectPolylangGeoRedirectDomain» и «OnHasPolylangError404»
                                                      — Исправлено: Перевод лексиконов
                                                        Prihod
                                                        13 ноября 2021, 17:54
                                                        0
                                                        Polylang 1.2.10
                                                        ====================================
                                                        — Исправлено: Перевод Migx полей

                                                        После обновления необходимо очистит кэш браузера
                                                          Madao
                                                          16 ноября 2021, 01:30
                                                          0
                                                          Доброго времени суток. Перед покупкой тестирую дополнение на modhost и не могу понять, как сделать вывод перевода товаров в каталоге (вывод товаров через msProducts). На самой странице товара всё ок, переводится, а при выводе в каталоге так и остается на одном языке. Есть ли где-то более полная документация с примерами или может тут подскажете? Спасибо.
                                                            Madao
                                                            16 ноября 2021, 02:43
                                                            +1
                                                            вопрос снимается. T.к. на modhost дополнение ставится автоматом, без возможности выбора опций установки, нужно было вручную у pdoTools переопределить pdoFetch.class и pdofetch_class_path
                                                            Madao
                                                            18 ноября 2021, 19:50
                                                            0
                                                            Доброго времени суток. Продолжаю тестировать дополнение и словил ошибку:
                                                            #0 /home/s28089/www/core/components/polylang/vendor/guzzlehttp/guzzle/src/functions.php(71): GuzzleHttp\Utils::defaultUserAgent()
                                                            #1 /home/s28089/www/core/components/upgrademodx/vendor/guzzlehttp/guzzle/src/Client.php(194): GuzzleHttp\default_user_agent()
                                                            #2 /home/s28089/www/core/components/upgrademodx/vendor/guzzlehttp/guzzle/src/Client.php(75): GuzzleHttp\Client->configureDefaults()
                                                            #3 /home/s28089/www/core/components/upgrademodx/model/upgrademodx/upgrademodx.class.php(185): GuzzleHttp\Client->__construct()
                                                            #4 /home/s28089/www/core/cache/includes/elements/modsnippet/34.include.cache.php(75): UpgradeMODX->init()
                                                            Соответственно при заходе в админку вижу:
                                                            Страница недоступна
                                                            Сайт s28089.h8.modhost.pro пока не может обработать этот запрос.
                                                            HTTP ERROR 500
                                                            Причем, если удалить что-то одно (polylang либо upgrademodx) ошибка уходит.
                                                            Почитал интернеты, пишут про конфликт guzzle в разных дополнениях. И я так предполагаю, что с некоторыми другими дополнениями, где используется guzzle другой версии, тоже такая ошибка может выскочить? Кто сталкивался с такой ошибкой и что делать?
                                                              Prihod
                                                              18 ноября 2021, 19:55
                                                              0
                                                              upgrademodx и PolyLang использует guzzlehttp но у upgrademodx используется старая версия из-за чего происходит конфликт. Нужно писать автору upgrademodx что бы он обновил guzzlehttp
                                                                Madao
                                                                18 ноября 2021, 20:15
                                                                0
                                                                Т.е. это не решаемо на уровне вашего дополнения? И если возникнет такая же проблема с другим дополнением (например если я куплю ваше дополнение и поставлю на рабочий сайт, часть дополнений может упасть из-за разницы в версиях), это нужно решать с авторами этих дополнений, а не с вами? Это важно, я хочу ваше дополнение поставить на интернет магазин, который уже давно работает, на котором стоят дополнения, которые используют guzzlehttp (тот же upgrademodx, GoogleSheets) и самостоятельно это не решить? И конечно не стоит надеяться решить проблему тупой подменой папки guzzlehttp новой версии в дополнении?
                                                                  Prihod
                                                                  18 ноября 2021, 20:26
                                                                  0
                                                                  Т.е. это не решаемо на уровне вашего дополнения?
                                                                  вы предлагаете мне ставить более старую версию guzzlehttp лишь бы работало какое то другое дополнение? Это же путь в некуда, так можно и в каменный век вернуться )) Поэтому логично что бы остальные дополнения шли в ногу со временем.
                                                                  Тем более, что guzzlehttp использует не мое дополнение как таковое, а библиотека Google translate так что при всем моем желании я не могу понизить верию guzzlehttp
                                                                    Prihod
                                                                    18 ноября 2021, 20:36
                                                                    0
                                                                    самостоятельно это не решить? И конечно не стоит надеяться решить проблему тупой подменой папки guzzlehttp новой версии в дополнении?
                                                                    скорей всего нет, так как могут вылезти ошибки в других библиотеках ибо зачастую guzzlehttp ставится как зависимость для других библиотек
                                                                      Prihod
                                                                      18 ноября 2021, 20:39
                                                                      +1
                                                                      GoogleSheets это платный компонент так что я думаю автор быстро отреагирует на просьбу обновить guzzlehttp
                                                                        Aleksandr Huz
                                                                        18 ноября 2021, 21:40
                                                                        +1
                                                                        Ага, спасибо. Скоро будет.
                                                              Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                                                              69