Localizator

Здравствуйте, использую на сайте Localizator но автоперевод не работает так как яндекс стал платным может кто подскажет пробовал ли кто подключить google Translation API — там вроде как есть бесплатный тариф с ограничением на текст.
eflit
10 декабря 2021, 08:34
modx.pro
156
0
Поблагодарить автора Отправить деньги

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

Евгений Webinmd
10 декабря 2021, 17:56
0
автор когда-то давно хотел переделать, но видимо времени не нашлось. Готовых решений не встречал
    Иван Бочкарев
    11 декабря 2021, 05:35
    0
    @Артем привет. Может получится добавить?
      В интрнете лежит класс GoogleTranslateForFree.
      Я через плагин на событие сохранения ресурса в режиме обновления переводил поля.
      Для того чтобы при создании ресурса автоматически создавался перевод на нужный язык необходимо дорабатывать стандартный плагин localizator.
      Вот к примеру реализация автоматического перевода заголовка ресурса при сохранении уже существующего ресурса (для нового ресурса нужно расширить стандартный плагин localizator).
      У меня два входящих параметра:
      • $templates — айдишки новостных шаблонов (у меня их два 10 и 11);
      • $key_out — ключ языка на который переводим (можно из класа локализатора взять список всех ключей и циклом перевести на все языки, кто захочет доработает);
      switch ($modx->event->name) {
          case 'OnBeforeDocFormSave':
              if ($mode == 'new'){
                  break;
              }
              //Properties for plugin
              $key_out = 'en';
              $templates = array(10, 11);
              //Work
              if(in_array($resource->get('template'), $templates)){
                  $default_lang = $modx->getOption('localizator_default_language', null, false, true);
                  require_once(MODX_CORE_PATH . '***/GoogleTranslateForFree.php');
                  $pagetitle = $resource->get('pagetitle');
                  $tr = new GoogleTranslateForFree();
                  $pagetitle_en = $tr->translate($default_lang, $key_out, $pagetitle);
      
                  if ($resource->get('class_key') == 'modDocument'){
                      $res_id = $resource->get('id');
                      if (!$locContent = $modx->getObject('localizatorContent', ['resource_id' => $res_id, 'key' => $key_out])){
                          //if translate for key_out language empty
                          $locContent = $modx->newObject('localizatorContent');
                          $locContent->set('resource_id', $res_id);
                          $locContent->set('key', $key_out);
                          $locContent->set('pagetitle', $pagetitle_en);
                          $locContent->save();
                      } else {
                          //Update field pagetitle
                          $upd = $modx->prepare("UPDATE ".$modx->getTableName('localizatorContent')." SET `pagetitle` = ? WHERE `resource_id` = ? AND `key` = ?");
                          $upd->execute(array($pagetitle_en, $res_id, $key_out));
                      }
                  }
              }
              break;
      }
      В событиях плагина ставим галочку OnBeforeDocFormSave, и я выставляю приоритет в 20.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        3