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()
+ ));
+ }
}