mirror of
https://github.com/Einundzwanzig-Podcast/einundzwanzig-portal.git
synced 2025-12-15 07:06:47 +00:00
huge Laravel 10 upgrade
This commit is contained in:
@@ -0,0 +1,194 @@
|
||||
<?php
|
||||
|
||||
namespace JoeDixon\Translation\Console\Commands;
|
||||
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Filesystem\Filesystem;
|
||||
use JoeDixon\Translation\Drivers\Database;
|
||||
use JoeDixon\Translation\Drivers\File;
|
||||
use JoeDixon\Translation\Drivers\Translation;
|
||||
use JoeDixon\Translation\Scanner;
|
||||
|
||||
class SynchroniseTranslationsCommand extends Command
|
||||
{
|
||||
/**
|
||||
* The name and signature of the console command.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $signature = 'translation:sync-translations {from?} {to?} {language?}';
|
||||
|
||||
/**
|
||||
* The console command description.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $description = 'Synchronise translations between drivers';
|
||||
|
||||
/**
|
||||
* File scanner.
|
||||
*
|
||||
* @var Scanner
|
||||
*/
|
||||
private $scanner;
|
||||
|
||||
/**
|
||||
* Translation.
|
||||
*
|
||||
* @var Translation
|
||||
*/
|
||||
private $translation;
|
||||
|
||||
/**
|
||||
* From driver.
|
||||
*/
|
||||
private $fromDriver;
|
||||
|
||||
/**
|
||||
* To driver.
|
||||
*/
|
||||
private $toDriver;
|
||||
|
||||
/**
|
||||
* Translation drivers.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
private $drivers = ['file', 'database'];
|
||||
|
||||
/**
|
||||
* Create a new command instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(Scanner $scanner, Translation $translation)
|
||||
{
|
||||
parent::__construct();
|
||||
$this->scanner = $scanner;
|
||||
$this->translation = $translation;
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the console command.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
$languages = array_keys($this->translation->allLanguages()->toArray());
|
||||
|
||||
// If a valid from driver has been specified as an argument.
|
||||
if ($this->argument('from') && in_array($this->argument('from'), $this->drivers)) {
|
||||
$this->fromDriver = $this->argument('from');
|
||||
}
|
||||
|
||||
// When the from driver will be entered manually or if the argument is invalid.
|
||||
else {
|
||||
$this->fromDriver = $this->anticipate('Which driver would you like to take translations from?', $this->drivers);
|
||||
|
||||
if (! in_array($this->fromDriver, $this->drivers)) {
|
||||
return $this->error('Invalid driver');
|
||||
}
|
||||
}
|
||||
|
||||
// Create the driver.
|
||||
$this->fromDriver = $this->createDriver($this->fromDriver);
|
||||
|
||||
// When the to driver has been specified.
|
||||
if ($this->argument('to') && in_array($this->argument('to'), $this->drivers)) {
|
||||
$this->toDriver = $this->argument('to');
|
||||
}
|
||||
|
||||
// When the to driver will be entered manually.
|
||||
else {
|
||||
$this->toDriver = $this->anticipate('Which driver would you like to add the translations to?', $this->drivers);
|
||||
|
||||
if (! in_array($this->toDriver, $this->drivers)) {
|
||||
return $this->error('Invalid driver');
|
||||
}
|
||||
}
|
||||
|
||||
// Create the driver.
|
||||
$this->toDriver = $this->createDriver($this->toDriver);
|
||||
|
||||
// If the language argument is set.
|
||||
if ($this->argument('language')) {
|
||||
|
||||
// If all languages should be synced.
|
||||
if ($this->argument('language') == 'all') {
|
||||
$language = false;
|
||||
}
|
||||
// When a specific language is set and is valid.
|
||||
elseif (in_array($this->argument('language'), $languages)) {
|
||||
$language = $this->argument('language');
|
||||
} else {
|
||||
return $this->error('Invalid language');
|
||||
}
|
||||
} // When the language will be entered manually or if the argument is invalid.
|
||||
else {
|
||||
$language = $this->anticipate('Which language? (leave blank for all)', $languages);
|
||||
|
||||
if ($language && ! in_array($language, $languages)) {
|
||||
return $this->error('Invalid language');
|
||||
}
|
||||
}
|
||||
|
||||
$this->line('Syncing translations');
|
||||
|
||||
// If a specific language is set.
|
||||
if ($language) {
|
||||
$this->mergeTranslations($this->toDriver, $language, $this->fromDriver->allTranslationsFor($language));
|
||||
} // Else process all languages.
|
||||
else {
|
||||
$translations = $this->mergeLanguages($this->toDriver, $this->fromDriver->allTranslations());
|
||||
}
|
||||
|
||||
$this->info('Translations have been synced');
|
||||
}
|
||||
|
||||
private function createDriver($driver)
|
||||
{
|
||||
if ($driver === 'file') {
|
||||
return new File(new Filesystem, app('path.lang'), config('app.locale'), $this->scanner);
|
||||
}
|
||||
|
||||
return new Database(config('app.locale'), $this->scanner);
|
||||
}
|
||||
|
||||
private function mergeLanguages($driver, $languages)
|
||||
{
|
||||
foreach ($languages as $language => $translations) {
|
||||
$this->mergeTranslations($driver, $language, $translations);
|
||||
}
|
||||
}
|
||||
|
||||
private function mergeTranslations($driver, $language, $translations)
|
||||
{
|
||||
$this->mergeGroupTranslations($driver, $language, $translations['group']);
|
||||
$this->mergeSingleTranslations($driver, $language, $translations['single']);
|
||||
}
|
||||
|
||||
private function mergeGroupTranslations($driver, $language, $groups)
|
||||
{
|
||||
foreach ($groups as $group => $translations) {
|
||||
foreach ($translations as $key => $value) {
|
||||
if (is_array($value)) {
|
||||
continue;
|
||||
}
|
||||
$driver->addGroupTranslation($language, $group, $key, $value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function mergeSingleTranslations($driver, $language, $vendors)
|
||||
{
|
||||
foreach ($vendors as $vendor => $translations) {
|
||||
foreach ($translations as $key => $value) {
|
||||
if (is_array($value)) {
|
||||
continue;
|
||||
}
|
||||
$driver->addSingleTranslation($language, $vendor, $key, $value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user