5 * Contains \Drupal\Console\Command\Locale\LanguageAddCommand.
8 namespace Drupal\Console\Command\Locale;
10 use Symfony\Component\Console\Input\InputArgument;
11 use Symfony\Component\Console\Input\InputInterface;
12 use Symfony\Component\Console\Output\OutputInterface;
13 use Drupal\language\Entity\ConfigurableLanguage;
14 use Drupal\Console\Core\Command\Command;
15 use Drupal\Core\Extension\ModuleHandlerInterface;
16 use Drupal\Console\Utils\Site;
17 use Drupal\Console\Annotations\DrupalCommand;
21 * extension = "locale",
22 * extensionType = "module"
25 class LanguageAddCommand extends Command
34 * @var ModuleHandlerInterface
36 protected $moduleHandler;
41 protected $missingLangues = [];
44 * LanguageAddCommand constructor.
47 * @param ModuleHandlerInterface $moduleHandler
49 public function __construct(
51 ModuleHandlerInterface $moduleHandler
54 $this->moduleHandler = $moduleHandler;
55 parent::__construct();
58 protected function configure()
61 ->setName('locale:language:add')
62 ->setDescription($this->trans('commands.locale.language.add.description'))
65 InputArgument::REQUIRED | InputArgument::IS_ARRAY,
66 $this->trans('commands.locale.translation.status.arguments.language')
70 protected function execute(InputInterface $input, OutputInterface $output)
72 $moduleHandler = $this->moduleHandler;
73 $moduleHandler->loadInclude('locale', 'inc', 'locale.translation');
74 $moduleHandler->loadInclude('locale', 'module');
76 $languageArguments = $this->checkLanguages($input->getArgument('language'));
77 $missingLanguages = $this->getMissingLangugaes();
78 if (!empty($missingLanguages)) {
79 $translatableString = count($missingLanguages) == 1 ? 'commands.locale.language.add.messages.invalid-language' : 'commands.locale.language.add.messages.invalid-languages';
80 $this->getIo()->error(sprintf(
81 $this->trans($translatableString),
82 implode(', ', $missingLanguages)
89 $installedLanguages = [];
90 foreach (array_keys($languageArguments) as $langcode) {
91 if (!($language = ConfigurableLanguage::load($langcode))) {
92 $language = ConfigurableLanguage::createFromLangcode($langcode);
93 $language->type = LOCALE_TRANSLATION_REMOTE;
96 $installedLanguages[] = $languageArguments[$langcode];
97 unset($languageArguments[$langcode]);
101 if (!empty($languageArguments)) {
102 $translatableString = count($languageArguments) == 1 ? 'commands.locale.language.add.messages.language-add-successfully' : 'commands.locale.language.add.messages.languages-add-successfully';
103 $this->getIo()->info(sprintf(
104 $this->trans($translatableString),
105 implode(', ', $languageArguments)
109 if (!empty($installedLanguages)) {
110 $translatableString = count($installedLanguages) == 1 ? 'commands.locale.language.add.messages.language-installed' : 'commands.locale.language.add.messages.languages-installed';
111 $this->getIo()->note(sprintf(
112 $this->trans($translatableString),
113 implode(', ', $installedLanguages)
116 } catch (\Exception $e) {
117 $this->getIo()->error($e->getMessage());
126 * Checks the existance of the languages in the system.
128 * @param array $languageArguments
129 * List of language arguments.
132 * List of available languages.
134 protected function checkLanguages($languageArguments)
136 $languages = $this->site->getStandardLanguages();
137 $language_codes = array_keys($languages);
138 $buildLanguages = [];
139 foreach ($languageArguments as $language) {
140 if (array_search($language, $language_codes)) {
141 $buildLanguages[$language] = $languages[$language];
142 } elseif ($language_code = array_search($language, $languages)) {
143 $buildLanguages[$language_code] = $language;
145 $this->addMissingLanguage($language);
148 return $buildLanguages;
152 * Add missing language.
154 * @param string $language
155 * Language code or name.
157 private function addMissingLanguage($language)
159 $this->missingLangues[] = $language;
163 * Get list of missing languages.
168 private function getMissingLangugaes()
170 return $this->missingLangues;