Skip to content

Commit

Permalink
[locale:language:add] Add multiple languages as arguments (#3738)
Browse files Browse the repository at this point in the history
* Add opportunity to add multiple languages as arguments

* Update the messages for mutiple languages, add messages for installed languages. Fix Codding standards
  • Loading branch information
LOBsTerr authored and jmolivas committed Jan 26, 2018
1 parent 4573260 commit dcc986f
Showing 1 changed file with 98 additions and 29 deletions.
127 changes: 98 additions & 29 deletions src/Command/Locale/LanguageAddCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -35,15 +35,20 @@ class LanguageAddCommand extends Command
*/
protected $moduleHandler;

/**
* @var array
*/
protected $missingLangues = [];

/**
* LanguageAddCommand constructor.
*
* @param Site $site
* @param Site $site
* @param ModuleHandlerInterface $moduleHandler
*/
public function __construct(
Site $site,
ModuleHandlerInterface $moduleHandler
Site $site,
ModuleHandlerInterface $moduleHandler
) {
$this->site = $site;
$this->moduleHandler = $moduleHandler;
Expand All @@ -53,13 +58,13 @@ public function __construct(
protected function configure()
{
$this
->setName('locale:language:add')
->setDescription($this->trans('commands.locale.language.add.description'))
->addArgument(
'language',
InputArgument::REQUIRED,
$this->trans('commands.locale.translation.status.arguments.language')
);
->setName('locale:language:add')
->setDescription($this->trans('commands.locale.language.add.description'))
->addArgument(
'language',
InputArgument::REQUIRED | InputArgument::IS_ARRAY,
$this->trans('commands.locale.translation.status.arguments.language')
);
}

protected function execute(InputInterface $input, OutputInterface $output)
Expand All @@ -68,30 +73,46 @@ protected function execute(InputInterface $input, OutputInterface $output)
$moduleHandler->loadInclude('locale', 'inc', 'locale.translation');
$moduleHandler->loadInclude('locale', 'module');

$language = $input->getArgument('language');
$languages = $this->site->getStandardLanguages();

if (isset($languages[$language])) {
$langcode = $language;
} elseif (array_search($language, $languages)) {
$langcode = array_search($language, $languages);
} else {
$this->getIo()->error(
sprintf(
$this->trans('commands.locale.language.add.messages.invalid-language'),
$language
)
);
$languageArguments = $this->checkLanguages($input->getArgument('language'));
$missingLanguages = $this->getMissingLangugaes();
if (!empty($missingLanguages)) {
$translatableString = count($missingLanguages) == 1 ? 'commands.locale.language.add.messages.invalid-language' : 'commands.locale.language.add.messages.invalid-languages';
$this->getIo()->error(sprintf(
$this->trans($translatableString),
implode(', ', $missingLanguages)
));

return 1;
}

try {
$language = ConfigurableLanguage::createFromLangcode($langcode);
$language->type = LOCALE_TRANSLATION_REMOTE;
$language->save();

$this->getIo()->info(sprintf($this->trans('commands.locale.language.add.messages.language-add-successfully'), $language->getName()));
$installedLanguages = [];
foreach (array_keys($languageArguments) as $langcode) {
if (!($language = ConfigurableLanguage::load($langcode))) {
$language = ConfigurableLanguage::createFromLangcode($langcode);
$language->type = LOCALE_TRANSLATION_REMOTE;
$language->save();
} else {
$installedLanguages[] = $languageArguments[$langcode];
unset($languageArguments[$langcode]);
}
}

if (!empty($languageArguments)) {
$translatableString = count($languageArguments) == 1 ? 'commands.locale.language.add.messages.language-add-successfully' : 'commands.locale.language.add.messages.languages-add-successfully';
$this->getIo()->info(sprintf(
$this->trans($translatableString),
implode(', ', $languageArguments)
));
}

if (!empty($installedLanguages)) {
$translatableString = count($installedLanguages) == 1 ? 'commands.locale.language.add.messages.language-installed' : 'commands.locale.language.add.messages.languages-installed';
$this->getIo()->note(sprintf(
$this->trans($translatableString),
implode(', ', $installedLanguages)
));
}
} catch (\Exception $e) {
$this->getIo()->error($e->getMessage());

Expand All @@ -100,4 +121,52 @@ protected function execute(InputInterface $input, OutputInterface $output)

return 0;
}

/**
* Checks the existance of the languages in the system.
*
* @param array $languageArguments
* List of language arguments.
*
* @return array
* List of available languages.
*/
protected function checkLanguages($languageArguments)
{
$languages = $this->site->getStandardLanguages();
$language_codes = array_keys($languages);
$buildLanguages = [];
foreach ($languageArguments as $language) {
if (array_search($language, $language_codes)) {
$buildLanguages[$language] = $languages[$language];
} elseif ($language_code = array_search($language, $languages)) {
$buildLanguages[$language_code] = $language;
} else {
$this->addMissingLanguage($language);
}
}
return $buildLanguages;
}

/**
* Add missing language.
*
* @param string $language
* Language code or name.
*/
private function addMissingLanguage($language)
{
$this->missingLangues[] = $language;
}

/**
* Get list of missing languages.
*
* @return array
* Missing languges.
*/
private function getMissingLangugaes()
{
return $this->missingLangues;
}
}

0 comments on commit dcc986f

Please sign in to comment.