| | <?php |
| |
|
| | namespace Kanboard\Console; |
| |
|
| | use RecursiveIteratorIterator; |
| | use RecursiveDirectoryIterator; |
| | use Symfony\Component\Console\Input\InputInterface; |
| | use Symfony\Component\Console\Output\OutputInterface; |
| |
|
| | class LocaleComparatorCommand extends BaseCommand |
| | { |
| | const REF_LOCALE = 'fr_FR'; |
| |
|
| | protected function configure() |
| | { |
| | $this |
| | ->setName('locale:compare') |
| | ->setDescription('Compare application translations with the '.self::REF_LOCALE.' locale'); |
| | } |
| |
|
| | protected function execute(InputInterface $input, OutputInterface $output): int |
| | { |
| | $strings = array(); |
| | $it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(APP_DIR)); |
| | $it->rewind(); |
| |
|
| | while ($it->valid()) { |
| | if (! $it->isDot() && substr($it->key(), -4) === '.php') { |
| | $strings = array_merge($strings, $this->search($it->key())); |
| | } |
| |
|
| | $it->next(); |
| | } |
| |
|
| | $this->compare(array_unique($strings)); |
| | return 0; |
| | } |
| |
|
| | public function show(array $strings) |
| | { |
| | foreach ($strings as $string) { |
| | echo " '".str_replace("'", "\'", $string)."' => '',".PHP_EOL; |
| | } |
| | } |
| |
|
| | public function compare(array $strings) |
| | { |
| | $reference_file = APP_DIR.DIRECTORY_SEPARATOR.'Locale'.DIRECTORY_SEPARATOR.self::REF_LOCALE.DIRECTORY_SEPARATOR.'translations.php'; |
| | $reference = include $reference_file; |
| |
|
| | echo str_repeat('#', 70).PHP_EOL; |
| | echo 'MISSING STRINGS'.PHP_EOL; |
| | echo str_repeat('#', 70).PHP_EOL; |
| | $this->show(array_diff($strings, array_keys($reference))); |
| |
|
| | echo str_repeat('#', 70).PHP_EOL; |
| | echo 'USELESS STRINGS'.PHP_EOL; |
| | echo str_repeat('#', 70).PHP_EOL; |
| | $this->show(array_diff(array_keys($reference), $strings)); |
| | } |
| |
|
| | public function search($filename) |
| | { |
| | $content = file_get_contents($filename); |
| | $strings = array(); |
| |
|
| | if (preg_match_all('/\b[et]\s*\(\s*(\'\K.*?\')\s*[\)\,]/', $content, $matches) && isset($matches[1])) { |
| | $strings = $matches[1]; |
| | } |
| |
|
| | if (preg_match_all('/\bdt\s*\(\s*(\'\K.*?\')\s*[\)\,]/', $content, $matches) && isset($matches[1])) { |
| | $strings = array_merge($strings, $matches[1]); |
| | } |
| |
|
| | array_walk($strings, function (&$value) { |
| | $value = trim($value, "'"); |
| | $value = str_replace("\'", "'", $value); |
| | }); |
| |
|
| | return $strings; |
| | } |
| | } |
| |
|