From 7e05777385b20d457644ff9136564ff82c3a0c09 Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Tue, 10 Dec 2024 21:54:11 +0500 Subject: [PATCH] Add LogDriver for translation with configuration support. 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. --- README.md | 15 ++++++++++- config/translate.php | 11 ++++++++ src/Translate/LogDriver.php | 50 +++++++++++++++++++++++++++++++++++++ 3 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 src/Translate/LogDriver.php diff --git a/README.md b/README.md index ce17fd1..ecb4196 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,10 @@ # Параметры в **.env**: ### TRANSLATE_SERVICE -По умолчанию через какой сервис обращаться за переводом. На данный момент доступен только один сервис - **yandex**. +По умолчанию через какой сервис обращаться за переводом. На данный момент доступен только сервисы - **yandex**, **log**. + +**yandex** - https://yandex.cloud/ru/services/translate
+**log** - для проверки и внедрения в свой продукт. ### TRANSLATE_YANDEX_FOLDER_ID ID folder. Код можно увидеть в адресе console.yandex.cloud/folders/**{тут будет код}**. @@ -23,6 +26,16 @@ ID folder. Код можно увидеть в адресе console.yandex.cloud ### 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( diff --git a/config/translate.php b/config/translate.php index 641347b..9b7f9d0 100644 --- a/config/translate.php +++ b/config/translate.php @@ -35,5 +35,16 @@ return [ ], ], ], + + 'log' => [ + 'driver' => '\KorElf\TranslateLaravel\Translate\LogDriver', + 'config' => [ + 'limit' => [ + 'max_request' => (int) env('TRANSLATE_LOG_LIMIT_MAX_REQUEST', 20), + 'rate_seconds' => (int) env('TRANSLATE_LOG_LIMIT_RATE_SECONDS', 1), + 'max_symbols' => (int) env('TRANSLATE_LOG_LIMIT_MAX_SYMBOLS', 9000), + ], + ], + ], ], ]; diff --git a/src/Translate/LogDriver.php b/src/Translate/LogDriver.php new file mode 100644 index 0000000..13c65f5 --- /dev/null +++ b/src/Translate/LogDriver.php @@ -0,0 +1,50 @@ +make(Log::class), + ); + } + + public function __construct( + private readonly Log $log + ) { } + + public function translateText(array|string $text, string $targetLanguageCode, ?string $sourceLanguageCode = null): string|array + { + $this->log::info('Translate text', ['text' => $text, 'targetLanguageCode' => $targetLanguageCode, 'sourceLanguageCode' => $sourceLanguageCode]); + + return $text; + } + + public function translateHtml(array|string $text, string $targetLanguageCode, ?string $sourceLanguageCode = null): string|array + { + $this->log::info('Translate html', ['text' => $text, 'targetLanguageCode' => $targetLanguageCode, 'sourceLanguageCode' => $sourceLanguageCode]); + + return $text; + } + + public function listLanguages(): Languages + { + $languages = new Languages(); + $languages->add('ru', 'Russian'); + $languages->add('en', 'English'); + $languages->add('de', 'Deutsch'); + + return $languages; + } +} \ No newline at end of file