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