# translate-laravel Библиотека для Laravel, что бы общаться с сервисом перевода от yandex. В будущем (скорей всего в далёком будущем) планирую расширить поддержку разных сервисов перевода. Что бы можно было общаться через один интерфейс с разными сервисами. # Параметры в **.env**: ### TRANSLATE_SERVICE По умолчанию через какой сервис обращаться за переводом. На данный момент доступен только один сервис - **yandex**. ### 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 символов. **На данный момент работает только перевод через систему очередей.** # Методы ### Перевести обычный текст > \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 > > > 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', '

Привет, Мир!

', 'en', 'ru'); > > // Отправляем на очередь > \KorElf\TranslateLaravel\Facades\Translate::runJob($params, $translationListener); > > return view('success'); > }