diff --git a/.env.example b/.env.example index 5babb7a..1adc7a2 100644 --- a/.env.example +++ b/.env.example @@ -1,5 +1,14 @@ -YANDEX_API_KEY= -YANDEX_API_FOLDER_ID= +TRANSLATION_GOOGLE_ENABLED=true +TRANSLATION_GOOGLE_PRIORITY=3 + +TRANSLATION_DEEPL_ENABLED=false +TRANSLATION_DEEPL_PRIORITY=1 +TRANSLATION_DEEPL_KEY= + +TRANSLATION_YANDEX_ENABLED=false +TRANSLATION_YANDEX_PRIORITY=2 +TRANSLATION_YANDEX_KEY= +TRANSLATION_FOLDER_ID= GIT_REPOSITORY=origin GIT_SOURCE_BRANCH=master diff --git a/composer.json b/composer.json index 884a4e5..ca64b17 100644 --- a/composer.json +++ b/composer.json @@ -28,16 +28,16 @@ "ext-json": "*", "ext-zip": "*", "archtechx/enums": "^1.0", - "deeplcom/deepl-php": "^1.5", "dragon-code/pretty-array": "^4.0", "dragon-code/simple-dto": "^2.3", "dragon-code/support": "^6.11", "guzzlehttp/guzzle": "^7.4", "illuminate/console": "^10.0 || ^11.0", "illuminate/container": "^10.0 || ^11.0", + "illuminate/support": "^10.0 || ^11.0", "laravel-lang/locale-list": "^1.2", + "laravel-lang/translator": "^1.0-ALPHA5", "phpunit/phpunit": "^10.0", - "stichoza/google-translate-php": "^5.1", "symfony/console": "^6.0 || ^7.0", "symfony/finder": "^6.0 || ^7.0" }, diff --git a/phpunit.xml b/phpunit.xml index 3dc2180..3b8763f 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -24,4 +24,14 @@ ./src + + + + + + + + + + diff --git a/src/Helpers/Translators/DeeplTranslate.php b/src/Helpers/Translators/DeeplTranslate.php deleted file mode 100644 index 6f9568b..0000000 --- a/src/Helpers/Translators/DeeplTranslate.php +++ /dev/null @@ -1,105 +0,0 @@ -translateText($value, $sourceLocale, $targetLocale)->text; - } - - protected static function locales(): array - { - return [ - // Locale::Afrikaans->value => 'af', - // Locale::Albanian->value => 'sq', - // Locale::Arabic->value => 'ar', - // Locale::Armenian->value => 'hy', - // Locale::Azerbaijani->value => 'az', - // Locale::Basque->value => 'eu', - // Locale::Belarusian->value => 'be', - // Locale::Bengali->value => 'bn', - // Locale::Bosnian->value => 'bs', - Locale::Bulgarian->value => 'bg', - // Locale::Catalan->value => 'ca', - // Locale::CentralKhmer->value => 'km', - // Locale::Chinese->value => 'zh-CN', - Locale::ChineseHongKong->value => 'zh', - // Locale::ChineseT->value => 'zh-TW', - // Locale::Croatian->value => 'hr', - Locale::Czech->value => 'cs', - Locale::Danish->value => 'da', - Locale::Dutch->value => 'nl', - Locale::Estonian->value => 'et', - Locale::Finnish->value => 'fi', - Locale::French->value => 'fr', - // Locale::Galician->value => 'gl', - // Locale::Georgian->value => 'ka', - Locale::German->value => 'de', - Locale::GermanSwitzerland->value => 'de', - Locale::Greek->value => 'el', - // Locale::Gujarati->value => 'gu', - // Locale::Hebrew->value => 'he', - // Locale::Hindi->value => 'hi', - Locale::Hungarian->value => 'hu', - // Locale::Icelandic->value => 'is', - Locale::Indonesian->value => 'id', - Locale::Italian->value => 'it', - Locale::Japanese->value => 'ja', - // Locale::Kannada->value => 'kn', - // Locale::Kazakh->value => 'kk', - Locale::Korean->value => 'ko', - Locale::Latvian->value => 'lv', - Locale::Lithuanian->value => 'lt', - // Locale::Macedonian->value => 'mk', - // Locale::Malay->value => 'ms', - // Locale::Marathi->value => 'mr', - // Locale::Mongolian->value => 'mn', - // Locale::Nepali->value => 'ne', - Locale::NorwegianBokmal->value => 'no', - Locale::NorwegianNynorsk->value => 'no', - // Locale::Occitan->value => 'oc', - // Locale::Pashto->value => 'ps', - // Locale::Persian->value => 'fa', - // Locale::Pilipino->value => 'fil', - Locale::Polish->value => 'pl', - Locale::Portuguese->value => 'pt', - Locale::PortugueseBrazil->value => 'pt-BR', - Locale::Romanian->value => 'ro', - Locale::Russian->value => 'ru', - // Locale::Sardinian->value => 'sc', - // Locale::SerbianCyrillic->value => 'sr', - // Locale::SerbianLatin->value => 'sr-Latn', - // Locale::SerbianMontenegrin->value => 'sr-Latn-ME', - // Locale::Sinhala->value => 'si', - Locale::Slovak->value => 'sk', - Locale::Slovenian->value => 'sl', - Locale::Spanish->value => 'es', - // Locale::Swahili->value => 'sw', - Locale::Swedish->value => 'sv', - // Locale::Tagalog->value => 'tl', - // Locale::Tajik->value => 'tg', - // Locale::Thai->value => 'th', - Locale::Turkish->value => 'tr', - // Locale::Turkmen->value => 'tk', - // Locale::Uighur->value => 'ug', - Locale::Ukrainian->value => 'uk', - // Locale::Urdu->value => 'ur', - // Locale::UzbekCyrillic->value => 'uz', - // Locale::UzbekLatin->value => 'uz-Latn', - // Locale::Vietnamese->value => 'vi', - // Locale::Welsh->value => 'cy', - ]; - } - - protected static function instance(): DT - { - return new DT(getenv('DEEPL_API_KEY')); - } -} diff --git a/src/Helpers/Translators/GoogleTranslate.php b/src/Helpers/Translators/GoogleTranslate.php deleted file mode 100644 index c0fca95..0000000 --- a/src/Helpers/Translators/GoogleTranslate.php +++ /dev/null @@ -1,147 +0,0 @@ - - */ - protected static function locales(): array - { - return [ - Locale::Afrikaans->value => 'af', - Locale::Albanian->value => 'sq', - Locale::Amharic->value => 'am', - Locale::Arabic->value => 'ar', - Locale::Armenian->value => 'hy', - Locale::Assamese->value => 'as', - Locale::Azerbaijani->value => 'az', - Locale::Bambara->value => 'bm', - Locale::Basque->value => 'eu', - Locale::Belarusian->value => 'be', - Locale::Bengali->value => 'bn', - Locale::Bhojpuri->value => 'bho', - Locale::Bosnian->value => 'bs', - Locale::Bulgarian->value => 'bg', - Locale::Catalan->value => 'ca', - Locale::Cebuano->value => 'ceb', - Locale::CentralKhmer->value => 'km', - Locale::Chinese->value => 'zh-CN', - Locale::ChineseHongKong->value => 'zh', - Locale::ChineseT->value => 'zh-TW', - Locale::Croatian->value => 'hr', - Locale::Czech->value => 'cs', - Locale::Danish->value => 'da', - Locale::Dogri->value => 'doi', - Locale::Dutch->value => 'nl', - Locale::Esperanto->value => 'eo', - Locale::Estonian->value => 'et', - Locale::Ewe->value => 'ee', - Locale::Finnish->value => 'fi', - Locale::French->value => 'fr', - Locale::Frisian->value => 'fy', - Locale::Galician->value => 'gl', - Locale::Georgian->value => 'ka', - Locale::German->value => 'de', - Locale::GermanSwitzerland->value => 'de', - Locale::Greek->value => 'el', - Locale::Gujarati->value => 'gu', - Locale::Hausa->value => 'ha', - Locale::Hawaiian->value => 'haw', - Locale::Hebrew->value => 'he', - Locale::Hindi->value => 'hi', - Locale::Hungarian->value => 'hu', - Locale::Icelandic->value => 'is', - Locale::Igbo->value => 'ig', - Locale::Indonesian->value => 'id', - Locale::Irish->value => 'ga', - Locale::Italian->value => 'it', - Locale::Japanese->value => 'ja', - Locale::Kannada->value => 'kn', - Locale::Kazakh->value => 'kk', - Locale::Kinyarwanda->value => 'rw', - Locale::Korean->value => 'ko', - Locale::Kurdish->value => 'ku', - Locale::KurdishSorani->value => 'ckb', - Locale::Kyrgyz->value => 'ky', - Locale::Lao->value => 'lo', - Locale::Latvian->value => 'lv', - Locale::Lingala->value => 'ln', - Locale::Lithuanian->value => 'lt', - Locale::Luganda->value => 'lg', - Locale::Luxembourgish->value => 'lb', - Locale::Macedonian->value => 'mk', - Locale::Maithili->value => 'mai', - Locale::Malagasy->value => 'mg', - Locale::Malay->value => 'ms', - Locale::Malayalam->value => 'ml', - Locale::Maltese->value => 'mt', - Locale::Maori->value => 'mi', - Locale::Marathi->value => 'mr', - Locale::MeiteilonManipuri->value => 'mni-Mtei', - Locale::Mongolian->value => 'mn', - Locale::MyanmarBurmese->value => 'my', - Locale::Nepali->value => 'ne', - Locale::NorwegianBokmal->value => 'no', - Locale::NorwegianNynorsk->value => 'no', - Locale::OdiaOriya->value => 'or', - Locale::Oromo->value => 'om', - Locale::Pashto->value => 'ps', - Locale::Persian->value => 'fa', - Locale::Pilipino->value => 'fil', - Locale::Polish->value => 'pl', - Locale::Portuguese->value => 'pt', - Locale::PortugueseBrazil->value => 'pt', - Locale::Punjabi->value => 'pa', - Locale::Quechua->value => 'qu', - Locale::Romanian->value => 'ro', - Locale::Russian->value => 'ru', - Locale::Sanskrit->value => 'sa', - Locale::ScotsGaelic->value => 'gd', - Locale::SerbianCyrillic->value => 'sr', - Locale::Shona->value => 'sn', - Locale::Sindhi->value => 'sd', - Locale::Sinhala->value => 'si', - Locale::Slovak->value => 'sk', - Locale::Slovenian->value => 'sl', - Locale::Somali->value => 'so', - Locale::Spanish->value => 'es', - Locale::Sundanese->value => 'su', - Locale::Swahili->value => 'sw', - Locale::Swedish->value => 'sv', - Locale::Tagalog->value => 'tl', - Locale::Tajik->value => 'tg', - Locale::Tamil->value => 'ta', - Locale::Tatar->value => 'tt', - Locale::Telugu->value => 'te', - Locale::Thai->value => 'th', - Locale::Tigrinya->value => 'ti', - Locale::Turkish->value => 'tr', - Locale::Turkmen->value => 'tk', - Locale::TwiAkan->value => 'ak', - Locale::Uighur->value => 'ug', - Locale::Ukrainian->value => 'uk', - Locale::Urdu->value => 'ur', - Locale::UzbekCyrillic->value => 'uz', - Locale::Vietnamese->value => 'vi', - Locale::Welsh->value => 'cy', - Locale::Xhosa->value => 'xh', - Locale::Yiddish->value => 'yi', - Locale::Yoruba->value => 'yo', - Locale::Zulu->value => 'zu', - ]; - } - - protected static function request(string $value, string $targetLocale, string $sourceLocale): string - { - return GT::trans($value, $targetLocale, $sourceLocale); - } -} diff --git a/src/Helpers/Translators/TranslateManager.php b/src/Helpers/Translators/TranslateManager.php deleted file mode 100644 index 84f2749..0000000 --- a/src/Helpers/Translators/TranslateManager.php +++ /dev/null @@ -1,56 +0,0 @@ - */ - protected static array $priority = [ - // DeeplTranslate::class, - GoogleTranslate::class, - ]; - - public static function translate(string $text, string $locale): string - { - foreach (static::$priority as $translator) { - if ($translator::allow($locale)) { - try { - return static::lines($translator, static::split($text), $locale); - } - catch (Throwable) { - } - } - } - - return $text; - } - - protected static function lines(string|Translator $translator, array $values, string $locale): string - { - return static::compact(static::map($translator, $values, $locale)); - } - - protected static function map(string|Translator $translator, array $values, string $locale): array - { - return array_map(fn (string $value) => static::request($translator, $value, $locale), $values); - } - - protected static function request(string|Translator $translator, string $text, string $locale): string - { - return $translator::translate($text, $locale); - } - - protected static function split(string $text): array - { - return explode('|', $text); - } - - protected static function compact(array $values): string - { - return implode('|', $values); - } -} diff --git a/src/Helpers/Translators/Translator.php b/src/Helpers/Translators/Translator.php deleted file mode 100644 index 82ee6c0..0000000 --- a/src/Helpers/Translators/Translator.php +++ /dev/null @@ -1,47 +0,0 @@ -value); - } - - return $value; - } - - public static function allow(string $locale): bool - { - return array_key_exists($locale, static::locales()); - } - - protected static function get(Translatable $trans, string $targetLocale, string $sourceLocale): string - { - return $trans->compile(static::request($trans->value, $targetLocale, $sourceLocale)); - } - - protected static function prepare(string $value): Translatable - { - return Translatable::make(compact('value')); - } - - protected static function locale(string $locale): ?string - { - return Arr::get(static::locales(), $locale); - } -} diff --git a/src/Processors/Translate/Translate.php b/src/Processors/Translate/Translate.php index bc127b4..8d91ee4 100644 --- a/src/Processors/Translate/Translate.php +++ b/src/Processors/Translate/Translate.php @@ -7,8 +7,8 @@ use DragonCode\Support\Facades\Filesystem\File; use DragonCode\Support\Facades\Helpers\Arr; use DragonCode\Support\Facades\Helpers\Str; -use LaravelLang\StatusGenerator\Helpers\Translators\TranslateManager; use LaravelLang\StatusGenerator\Processors\Processor; +use LaravelLang\Translator\Services\Translate as Translator; class Translate extends Processor { @@ -41,20 +41,16 @@ public function handle(): void protected function merge(array $source, array $target, array $excludes, string $locale): array { - Arr::of($target) - ->only(Arr::keys($source)) - ->tap(function (string $value, int|string $key) use (&$source, $excludes, $locale) { - $source[$key] = $this->isTranslatable($excludes, $source, $key, $value) - ? $this->translate($value, $locale) - : $value; - }); + $translatable = collect($target)->only(Arr::keys($source))->filter( + fn (string $value, int|string $key) => $this->isTranslatable($excludes, $source, $key, $value) + ); - return $source; + return array_merge($source, $this->translate($translatable, $locale)); } - protected function translate(string $value, string $locale): string + protected function translate(mixed $value, string $locale): array { - return TranslateManager::translate($value, $locale); + return app(Translator::class)->text($value, $locale); } protected function store(string $path, array $values): void diff --git a/tests/Unit/Commands/Translate/Base.php b/tests/Unit/Commands/Translate/Base.php index 4faa7ac..d360f33 100644 --- a/tests/Unit/Commands/Translate/Base.php +++ b/tests/Unit/Commands/Translate/Base.php @@ -5,6 +5,7 @@ namespace Tests\Unit\Commands\Translate; use LaravelLang\StatusGenerator\Constants\Command as CommandName; +use LaravelLang\Translator\Integrations\Google; use Tests\TestCase; abstract class Base extends TestCase @@ -12,4 +13,13 @@ abstract class Base extends TestCase protected ?string $fixtures = __DIR__ . '/../../../Fixtures/Resources/Translate'; protected ?CommandName $call = CommandName::TRANSLATE; + + protected function setUp(): void + { + parent::setUp(); + + app()->singleton(Google::class, fn () => new Google( + new Google::$integration() + )); + } }