#!/usr/bin/env php * * This file is part of a Moko Consulting project. * * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION * DEFGROUP: MokoStandards.Scripts.Validate * INGROUP: MokoStandards * REPO: https://git.mokoconsulting.tech/MokoConsulting/moko-platform * PATH: /validate/check_language_structure.php * BRIEF: Validates language INI file structure (KEY=value format) */ declare(strict_types=1); require_once __DIR__ . '/../../vendor/autoload.php'; use MokoEnterprise\CliFramework; /** * Validates that all tracked INI language files follow the KEY=value format. */ class CheckLanguageStructure extends CliFramework { /** * Configure available arguments. */ protected function configure(): void { $this->setDescription('Validates language INI file structure'); $this->addArgument('--path', 'Repository path to check', '.'); } /** * Validate language INI files. * * @return int Exit code: 0 on pass, 1 on failure. */ protected function run(): int { $path = $this->getArgument('--path'); $output = shell_exec('git -C ' . escapeshellarg($path) . " ls-files '*.ini' 2>/dev/null") ?? ''; $files = array_filter(explode("\n", $output)); $errors = 0; $i = 0; $total = count($files); $this->section('Scanning INI language files'); foreach ($files as $file) { $fullPath = $path . '/' . $file; if (!is_file($fullPath)) { continue; } if ($total >= 3) { $this->progress(++$i, $total, basename((string) $file)); } $content = (string) file_get_contents($fullPath); if (!preg_match('/^[A-Z_][A-Z0-9_]*=/m', $content)) { $this->warning("Language file may have format issues: {$file}"); $errors++; } } if ($total >= 3) { $this->progress($total, $total, 'done', true); } if ($errors === 0) { $this->status(true, 'Language file validation passed'); $this->printSummary(1, 0, $this->elapsed()); return 0; } $this->status(false, 'Language file validation', "{$errors} file(s) with format issues"); $this->printSummary(0, $errors, $this->elapsed()); return 1; } } $script = new CheckLanguageStructure('check_language_structure', 'Validates language INI file structure'); exit($script->execute());