| | <?php |
| |
|
| | namespace Kanboard\Console; |
| |
|
| | use DirectoryIterator; |
| | use Symfony\Component\Console\Input\InputInterface; |
| | use Symfony\Component\Console\Output\OutputInterface; |
| |
|
| | class LocaleSyncCommand extends BaseCommand |
| | { |
| | const REF_LOCALE = 'fr_FR'; |
| |
|
| | protected function configure() |
| | { |
| | $this |
| | ->setName('locale:sync') |
| | ->setDescription('Synchronize all translations based on the '.self::REF_LOCALE.' locale'); |
| | } |
| |
|
| | protected function execute(InputInterface $input, OutputInterface $output): int |
| | { |
| | $reference_file = APP_DIR.DIRECTORY_SEPARATOR.'Locale'.DIRECTORY_SEPARATOR.self::REF_LOCALE.DIRECTORY_SEPARATOR.'translations.php'; |
| | $reference = include $reference_file; |
| |
|
| | foreach (new DirectoryIterator(APP_DIR.DIRECTORY_SEPARATOR.'Locale') as $fileInfo) { |
| | if (! $fileInfo->isDot() && $fileInfo->isDir() && $fileInfo->getFilename() !== self::REF_LOCALE) { |
| | $filename = APP_DIR.DIRECTORY_SEPARATOR.'Locale'.DIRECTORY_SEPARATOR.$fileInfo->getFilename().DIRECTORY_SEPARATOR.'translations.php'; |
| | echo $fileInfo->getFilename().' ('.$filename.')'.PHP_EOL; |
| |
|
| | file_put_contents($filename, $this->updateFile($reference, $filename)); |
| | } |
| | } |
| | return 0; |
| | } |
| |
|
| | public function updateFile(array $reference, $outdated_file) |
| | { |
| | $outdated = include $outdated_file; |
| |
|
| | $output = '<?php'.PHP_EOL.PHP_EOL; |
| | $output .= 'return array('.PHP_EOL; |
| |
|
| | foreach ($reference as $key => $value) { |
| | if (! empty($outdated[$key])) { |
| | $output .= " '".str_replace("'", "\'", $key)."' => '".str_replace("'", "\'", $outdated[$key])."',\n"; |
| | } else { |
| | $output .= " // '".str_replace("'", "\'", $key)."' => '',\n"; |
| | } |
| | } |
| |
|
| | $output .= ");\n"; |
| | return $output; |
| | } |
| | } |
| |
|