Типично ошибка 1366 связана с тем, что кто то пытается записать символы с кодами не соответствующими кодовой таблице символов, установленной для таблицы в базе данных. Но в нашем случае речь идет о иной проблеме.
Drupal использует utf8mb4 для текстовых пользовательских данных. И если вы ничего не меняли вручную, то скорее всего у вас именно такая кодировка.
При использовании tmgmt_deepl данная ошибка может возникать в ряде случаев. У меня это произошло при переводе текста на турецкий язык. Особенность турецкого и ряда других языков заключается в том, что знак процентов ставится до числа.
Например, в европейских языках вы встретите — 25%, а в турецком это будет записано как %25.
Модуль tmgmt_deepl получает переводы с сервера и применяет к ним пост обработку функцией rawurldecode, для которой подобные комбинации в символом % являются целевыми. Так могут появиться символы, которые не соответствуют разрешенным в кодировке.
Я написал небольшой патч, убирающий эту функцию из постобработчика.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
diff --git docroot/modules/contrib/tmgmt_deepl/src/Plugin/tmgmt/Translator/DeeplTranslator.php docroot/modules/contrib/tmgmt_deepl/src/Plugin/tmgmt/Translator/DeeplTranslator.php index 7503af5417..ff810d5bef 100755 --- docroot/modules/contrib/tmgmt_deepl/src/Plugin/tmgmt/Translator/DeeplTranslator.php +++ docroot/modules/contrib/tmgmt_deepl/src/Plugin/tmgmt/Translator/DeeplTranslator.php @@ -520,7 +520,7 @@ public static function batchRequestTranslation(Job $job, array $text, array $tra $result = self::doRequest($job, $query_params); // Collect translated texts with use of initial keys. foreach ($result['translations'] as $translated) { - $translation[$keys_sequence[$i]]['#text'] = $translator_plugin->unescapeText(rawurldecode(Html::decodeEntities($translated['text']))); + $translation[$keys_sequence[$i]]['#text'] = $translator_plugin->unescapeText(Html::decodeEntities($translated['text'])); $i++; } if (isset($context['results']) && isset($context['results']['translation']) && $context['results']['translation'] != NULL) { |
Не стал его публиковать на drupal.org, т.к. наверняка у разработчиков были какие то причины на использование здесь rawurldecode.