Разделы Написать в Telegram

Что проверить после выкладки

Прогон на пятнадцать минут. Он не заменяет тестирование, но ловит то, что ломается чаще всего: не разложились файлы, не встали обработчики, не создалось поле языка.

Проходите сверху вниз — порядок от «модуль вообще жив» к «перевод работает».

Версия PHP

Красная строка здесь объясняет большинство расхождений ниже: на PHP старее требуемого модуль остаётся живым, но без машинного перевода. Витрина будет подставлять переводы, админка откроется, а очередь, разовый перевод и подсчёт использования фраз ответят ошибкой. Пока эта строка красная, остальной прогон проходить бессмысленно — сначала поднимите версию PHP.

Модуль на месте

  • [ ] Пункт Модули mrLexndr → Переводы → Перевод открывается под администратором.
  • [ ] Под группой без прав на модуль пункта меню нет. Если виден — права разъехались, см. Права и безопасность.
  • [ ] Открываются все шесть экранов: Перевод, Пополнение баланса, Файловые фразы, Настройки, Обслуживание, Проверка стенда. Карта — Где живёт модуль в админке.
  • [ ] Красного предупреждения о структуре базы нет.

Хранилище

  • [ ] Highload-блоки → Словарь сайта открывается.
  • [ ] В нём есть UF_CODE, UF_USAGE_COUNT и по полю UF_LANG_<ID> на каждый активный язык сайта.
  • [ ] На вкладке Настройки → Языки список языков перевода отмечен и сохранён. До сохранения модуль работает по автоопределению и предупреждает об этом.

Обработчики и агент

  • [ ] Настройки → Агенты: есть \mrLexndr\Translate\Agent\QueueAgent::run(); с периодом 60 секунд.
  • [ ] Там же нет агента Agents\LangIblockQueue::tick();. Он удалён из модуля, и обновление снимает запись. Если остался — обновление не выполнялось, и агент падает на каждом запуске: класса больше нет.
  • [ ] Настройки → Инструменты → Файлы обработчиков событий — регистрации модуля на месте. Что именно должно быть — События.

Быстрее всего это смотреть на экране Проверка стенда: он проверяет и обработчики, и схему, и настройки разом.

Перевод работает

  • [ ] Вставьте на служебную страницу LANG_VAR('MRLEXNDR_TEST', 'Проверка'), откройте её — в словаре появилась запись.
  • [ ] В режиме правки на сайте фраза подсвечена, клик открывает карточку. См. Правка прямо на сайте.
  • [ ] Подсчёт использования (Обслуживание → Неиспользуемые фразы, шаг 1) проходит до конца. На небольшом проекте это быстро.
  • [ ] Разовый перевод доходит до конца; при обрыве появляется кнопка «Продолжить с места остановки».
  • [ ] В журнале событий нет ошибок вида TRANSLATE_ERROR или DICTIONARY_ADD_EXCEPTION.

Если сервис переводов недоступен

Отдельная проверка — она показывает, ведёт ли себя модуль прилично, когда сеть до api.mrlexndr.com не проходит. Воспроизводится подменой адреса сервиса в настройках на заведомо недоступный.

  • [ ] Экран «Перевод» открывается за приемлемое время, показывает последний известный баланс и не висит.
  • [ ] Разовый перевод останавливается с понятным текстом, кнопка запуска снова активна.
  • [ ] Ответ 402 даёт сообщение о нехватке средств и обновляет локальный баланс; 502 и 503 — сообщение о временной недоступности.
  • [ ] Пустой или битый ответ не подвешивает интерфейс.

Что модуль делает с сетевыми отказами сам — Сеть, таймауты и повторы.

Лицензия на локальном стенде

На стендах с DEMO, TRIAL или учебной лицензией боевого хеша нет, и сервис узнаёт сайт по устойчивому идентификатору разработчика.

  • [ ] Идентификатор не меняется между запросами.
  • [ ] Смена имени сервера на стенде его не меняет.

Что делать, если пункт не сошёлся

Сначала посмотрите на строку О1.10: если версия PHP ниже требуемой, часть пунктов не сойдётся именно из-за неё, и чинить их по отдельности бесполезно.

Дальше — большая часть расхождений на этом прогоне означает, что обновление не выполнялось: файлы заменили, а кнопку «Обновить» не нажали. Начните с неё — Обновление на бою. Остальное разбирает страница Что делать, если.