Introduced a new LogDriver for logging translation operations. Updated the README and configuration file to include support for the LogDriver and its associated limits. This feature enables the use of a logging-based translation driver for testing and debugging purposes.
7.7 KiB
translate-laravel
Библиотека для Laravel, что бы общаться с сервисом перевода от yandex. В будущем (скорей всего в далёком будущем) планирую расширить поддержку разных сервисов перевода. Что бы можно было общаться через один интерфейс с разными сервисами.
Параметры в .env:
TRANSLATE_SERVICE
По умолчанию через какой сервис обращаться за переводом. На данный момент доступен только сервисы - yandex, log.
yandex - https://yandex.cloud/ru/services/translate
log - для проверки и внедрения в свой продукт.
TRANSLATE_YANDEX_FOLDER_ID
ID folder. Код можно увидеть в адресе console.yandex.cloud/folders/{тут будет код}.
TRANSLATE_YANDEX_AUTHORIZED_KEY_PATH
Абсолютный путь в рамках приложения Laravel к файлу authorized_key.json. Например: положили файл в корень Laravel. Тогда будет путь такой: /authorized_key.json.
TRANSLATE_YANDEX_LIMIT_MAX_REQUEST
Максимальное количество запросов в период, который указан в TRANSLATE_YANDEX_LIMIT_RATE_SECONDS. По умолчанию 20 запросов в секунду. На данный момент работает только перевод через систему очередей.
TRANSLATE_YANDEX_LIMIT_RATE_SECONDS
Период в котором считается максимальное количество запросов. По умолчанию стоит секунда. На данный момент работает только перевод через систему очередей.
TRANSLATE_YANDEX_LIMIT_MAX_SYMBOLS
Максимальное количество символов за один запрос. Если превышает, то делится на две части и делает по очереди два запроса. По умолчанию стоит 9000 символов. На данный момент работает только перевод через систему очередей.
TRANSLATE_LOG_LIMIT_MAX_REQUEST
Максимальное количество запросов в период, который указан в TRANSLATE_YANDEX_LIMIT_RATE_SECONDS. По умолчанию 20 запросов в секунду. На данный момент работает только перевод через систему очередей.
TRANSLATE_LOG_LIMIT_RATE_SECONDS
Период в котором считается максимальное количество запросов. По умолчанию стоит секунда. На данный момент работает только перевод через систему очередей.
TRANSLATE_LOG_LIMIT_MAX_SYMBOLS
Максимальное количество символов за один запрос. Если превышает, то делится на две части и делает по очереди два запроса. По умолчанию стоит 9000 символов. На данный момент работает только перевод через систему очередей.
Методы
Перевести обычный текст
\KorElf\TranslateLaravel\Facades\Translate::translateText(
string | array $text,
string $targetLanguageCode,
?string $sourceLanguageCode = null
): string | array
$text - текст который нужно перевести.
$targetLanguageCode - язык на который надо перевести.
$sourceLanguageCode - язык с которого надо перевести. Если null, то сервис сам пытается определить язык.
Перевести текст в формате HTML
\KorElf\TranslateLaravel\Facades\Translate::translateHtml(
string | array $text,
string $targetLanguageCode,
?string $sourceLanguageCode = null
): string | array
$text - текст который нужно перевести.
$targetLanguageCode - язык на который надо перевести.
$sourceLanguageCode - язык с которого надо перевести. Если null, то сервис сам пытается определить язык.
Получить список языков, который сервис поддерживает
\KorElf\TranslateLaravel\Facades\Translate::listLanguages(): \KorElf\TranslateLaravel\DTO\Languages
Перевести с помощью очередей (Queues)
\KorElf\TranslateLaravel\Facades\Translate::runJob(
\KorElf\TranslateLaravel\DTO\RunTranslateDto $params,
\KorElf\TranslateLaravel\Contracts\TranslationCompletedListener $completedListener
): \Illuminate\Foundation\Bus\PendingDispatch
$params - параметры перевода.
$completedListener - после завершения перевода отправляет результат в этот объект. Объект должен соблюдать контракт \KorElf\TranslateLaravel\Contracts\TranslationCompletedListener.
Пример:
Создаём файл TranslationListener например в папке app/Services
<?php declare(strict_types=1); namespace App\Services; use Illuminate\Support\Facades\Log; use KorElf\TranslateLaravel\Contracts\TranslationCompletedListener; final class TranslationListener implements TranslationCompletedListener { public function onTranslationCompleted(array $translatedText): void { foreach ($translatedText as $translatedTextKey => $translatedTextValue) { Log::info($translatedTextKey . ': ' . $translatedTextValue); } } }
Потом например в каком-то контроллере (а лучше конечно в сервисе) пишем такой метод
public function sendingForTranslation(\App\Services\TranslationListener $translationListener): View { // Вначале создаём объект с параметрами $params = (new \KorElf\TranslateLaravel\DTO\RunTranslateDto) ->addParamText('title', 'Заголовок', 'en', 'ru') ->addParamHtml('content', '<p>Привет, Мир!</p>', 'en', 'ru'); // Отправляем на очередь \KorElf\TranslateLaravel\Facades\Translate::runJob($params, $translationListener); return view('success'); }