Skip to content

Commit c809521

Browse files
committed
use prompt in commands
1 parent c0a6c9f commit c809521

File tree

5 files changed

+103
-21
lines changed

5 files changed

+103
-21
lines changed

src/Commands/FixGrammarTranslationsCommand.php

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,29 +3,27 @@
33
namespace Elegantly\Translator\Commands;
44

55
use Elegantly\Translator\Facades\Translator;
6-
use Elegantly\Translator\TranslatorServiceProvider;
76
use Illuminate\Console\Command;
8-
use Illuminate\Support\Collection;
97

108
class FixGrammarTranslationsCommand extends Command
119
{
10+
use TranslatorCommandTrait;
11+
1212
public $signature = 'translator:grammar {--locales=} {--service=} ';
1313

1414
public $description = 'Translate translations from the given locale to the target one.';
1515

1616
public function handle(): int
1717
{
18-
$serviceArg = $this->option('service');
19-
$localesArg = $this->option('locales');
20-
21-
$service = TranslatorServiceProvider::getGrammarServiceFromConfig($serviceArg);
22-
23-
$locales = collect(Translator::getLanguages())
24-
->when($localesArg, fn (Collection $items) => $items->intersect(explode(',', $localesArg)));
18+
$service = $this->getGrammarService($this->option('service'));
19+
$locales = $this->getLocales(
20+
option: $this->option('locales'),
21+
label: 'In what locales would you like to translate?'
22+
);
2523

2624
foreach ($locales as $locale) {
2725

28-
$this->info("Fixing grammar in '{$locale}' locale:");
26+
$this->info("Fixing grammar in '/{$locale}':");
2927
$this->line('Using service :'.get_class($service));
3028

3129
$namespaces = Translator::getNamespaces($locale);

src/Commands/SortAllTranslationsCommand.php

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,21 @@
88

99
class SortAllTranslationsCommand extends Command
1010
{
11+
use TranslatorCommandTrait;
12+
1113
public $signature = 'translator:sort {--locales=} {--namespaces=}';
1214

1315
public $description = 'Sort all translations using natural order';
1416

1517
public function handle(): int
1618
{
17-
$namespacesArg = $this->option('namespaces');
18-
$localesArg = $this->option('locales');
1919

20-
$locales = collect(Translator::getLanguages())
21-
->when($localesArg, fn (Collection $items) => $items->intersect(explode(',', $localesArg)));
20+
$locales = $this->getLocales(
21+
option: $this->option('locales'),
22+
label: 'What locales would you like to sort?'
23+
);
24+
25+
$namespacesArg = $this->option('namespaces');
2226

2327
foreach ($locales as $locale) {
2428
$this->newLine();

src/Commands/TranslateTranslationsCommand.php

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,29 @@
33
namespace Elegantly\Translator\Commands;
44

55
use Elegantly\Translator\Facades\Translator;
6-
use Elegantly\Translator\TranslatorServiceProvider;
76
use Illuminate\Console\Command;
87

98
class TranslateTranslationsCommand extends Command
109
{
10+
use TranslatorCommandTrait;
11+
1112
public $signature = 'translator:translate {--from=} {--to=} {--service=} {--all} ';
1213

1314
public $description = 'Translate translations from the given locale to the target one.';
1415

1516
public function handle(): int
1617
{
17-
$from = (string) $this->option('from');
18-
$to = $this->option('to');
1918
$all = (bool) $this->option('all');
20-
$serviceName = $this->option('service');
19+
$from = (string) $this->option('from');
2120

22-
$service = TranslatorServiceProvider::getTranslateServiceFromConfig($serviceName);
21+
$service = $this->getTranslateService($this->option('service'));
22+
$targets = $this->getLocales(
23+
option: $this->option('to'),
24+
label: 'In what locales would you like to translate?'
25+
);
2326

2427
$namespaces = Translator::getNamespaces($from);
2528

26-
$targets = collect($to ? [(string) $to] : Translator::getLanguages())->filter(fn ($locale) => $locale !== $from);
27-
2829
foreach ($targets as $target) {
2930

3031
$this->info("Translating from '{$from}' to '{$target}':");
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
<?php
2+
3+
namespace Elegantly\Translator\Commands;
4+
5+
use Elegantly\Translator\Facades\Translator;
6+
use Elegantly\Translator\Services\Grammar\GrammarServiceInterface;
7+
use Elegantly\Translator\Services\Translate\TranslateServiceInterface;
8+
use Elegantly\Translator\TranslatorServiceProvider;
9+
10+
use function Laravel\Prompts\multiselect;
11+
use function Laravel\Prompts\select;
12+
13+
trait TranslatorCommandTrait
14+
{
15+
public function getLocales(
16+
mixed $option,
17+
?string $label = null
18+
): array {
19+
$availableLocales = Translator::getLanguages();
20+
21+
if ($option) {
22+
if (is_array($option)) {
23+
return array_intersect($availableLocales, $option);
24+
}
25+
if (is_string($option)) {
26+
return array_intersect($availableLocales, explode(',', $option));
27+
}
28+
29+
return $availableLocales;
30+
}
31+
32+
return multiselect(
33+
label: $label ?? 'In what locales?',
34+
options: $availableLocales,
35+
default: $availableLocales,
36+
required: true,
37+
);
38+
}
39+
40+
public function getTranslateService(
41+
mixed $option,
42+
?string $label = null,
43+
): TranslateServiceInterface {
44+
45+
if ($option && is_string($option)) {
46+
return TranslatorServiceProvider::getTranslateServiceFromConfig($option);
47+
}
48+
49+
$serviceName = select(
50+
label: $label ?? 'What service would you like to use?',
51+
options: array_keys(config('translator.translate.services')),
52+
default: config('translator.translate.service'),
53+
required: true,
54+
);
55+
56+
return TranslatorServiceProvider::getTranslateServiceFromConfig($serviceName);
57+
}
58+
59+
public function getGrammarService(
60+
mixed $option,
61+
?string $label = null,
62+
): GrammarServiceInterface {
63+
64+
if ($option && is_string($option)) {
65+
return TranslatorServiceProvider::getGrammarServiceFromConfig($option);
66+
}
67+
68+
$serviceName = select(
69+
label: $label ?? 'What service would you like to use?',
70+
options: array_keys(config('translator.grammar.services')),
71+
default: config('translator.grammar.service'),
72+
required: true,
73+
);
74+
75+
return TranslatorServiceProvider::getGrammarServiceFromConfig($serviceName);
76+
}
77+
}

src/TranslatorServiceProvider.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Elegantly\Translator;
44

5+
use Elegantly\Translator\Commands\FixGrammarTranslationsCommand;
56
use Elegantly\Translator\Commands\ShowMissingTranslationsCommand;
67
use Elegantly\Translator\Commands\SortAllTranslationsCommand;
78
use Elegantly\Translator\Commands\TranslateTranslationsCommand;
@@ -30,6 +31,7 @@ public function configurePackage(Package $package): void
3031
ShowMissingTranslationsCommand::class,
3132
SortAllTranslationsCommand::class,
3233
TranslateTranslationsCommand::class,
34+
FixGrammarTranslationsCommand::class,
3335
]);
3436
}
3537

0 commit comments

Comments
 (0)