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