allLocales()->all(); $platforms = $registry->allPlatforms()->all(); $defaultLocale = Registry::DEFAULT_LOCALE; if (! in_array($defaultLocale, $locales, true)) { $this->error("Default locale '{$defaultLocale}' folder not found at templates/{$defaultLocale}/"); return self::FAILURE; } $this->info('Post Template Status'); $this->line('Locales: '.implode(', ', $locales)); $this->line('Source: '.$defaultLocale); $this->newLine(); $totalTemplates = 0; $totalDrift = 0; foreach ($platforms as $platform) { $this->line("Platform: {$platform}"); $sourceTemplates = $this->loadFile($defaultLocale, $platform); $sourceCount = count($sourceTemplates); $sourceSlugs = collect($sourceTemplates)->pluck('slug')->all(); $totalTemplates += $sourceCount; foreach ($locales as $locale) { $rows = $this->loadFile($locale, $platform); $count = count($rows); $localeSlugs = collect($rows)->pluck('slug')->all(); $missing = array_diff($sourceSlugs, $localeSlugs); $extra = array_diff($localeSlugs, $sourceSlugs); if ($locale === $defaultLocale) { $this->line(" {$locale}: {$count} templates"); continue; } if ($count === $sourceCount && empty($missing) && empty($extra)) { $this->line(" {$locale}: {$count} templates ✓"); continue; } $this->line(" {$locale}: {$count} templates ⚠"); if ($missing) { $totalDrift += count($missing); $this->line(' missing: '.implode(', ', $missing)); } if ($extra) { $totalDrift += count($extra); $this->line(' extra (not in source): '.implode(', ', $extra)); } } $this->newLine(); } $this->info("Total source templates: {$totalTemplates} across ".count($platforms).' platforms × '.count($locales).' locales'); if ($totalDrift > 0) { $this->warn("{$totalDrift} translation gaps found. Run `php artisan test --filter=PostTemplates/Integrity` for full diagnosis."); return self::SUCCESS; } $this->info('All locales are in sync with the source.'); return self::SUCCESS; } /** * @return array> */ private function loadFile(string $locale, string $platform): array { $path = base_path("templates/{$locale}/{$platform}.php"); return is_file($path) ? require $path : []; } }