114 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
		
		
			
		
	
	
			114 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
| 
								 | 
							
								#!/usr/bin/env php
							 | 
						||
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Compares translation files to find missing and redundant content.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								$args = array_slice($argv, 1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if (count($args) === 0) {
							 | 
						||
| 
								 | 
							
								    errorOut("Please provide a language code as the first argument (./check.php fr)");
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Get content from files
							 | 
						||
| 
								 | 
							
								$lang = formatLang($args[0]);
							 | 
						||
| 
								 | 
							
								$enContent = loadLang('en');
							 | 
						||
| 
								 | 
							
								$langContent = loadLang($lang);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if (count($langContent) === 0) {
							 | 
						||
| 
								 | 
							
								    errorOut("No language content found for '{$lang}'");
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								info("Checking '{$lang}' translation content against 'en'");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Track missing lang strings
							 | 
						||
| 
								 | 
							
								$missingLangStrings = [];
							 | 
						||
| 
								 | 
							
								foreach ($enContent as $enKey => $enStr) {
							 | 
						||
| 
								 | 
							
								    if (strpos($enKey, 'settings.language_select.') === 0) {
							 | 
						||
| 
								 | 
							
								        unset($langContent[$enKey]);
							 | 
						||
| 
								 | 
							
								        continue;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    if (!isset($langContent[$enKey])) {
							 | 
						||
| 
								 | 
							
								        $missingLangStrings[$enKey] = $enStr;
							 | 
						||
| 
								 | 
							
								        continue;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    unset($langContent[$enKey]);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if (count($missingLangStrings) > 0) {
							 | 
						||
| 
								 | 
							
								    info("\n========================");
							 | 
						||
| 
								 | 
							
								    info("Missing language content");
							 | 
						||
| 
								 | 
							
								    info("========================");
							 | 
						||
| 
								 | 
							
								    outputFlatArray($missingLangStrings, $lang);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if (count($langContent) > 0) {
							 | 
						||
| 
								 | 
							
								    info("\n==========================");
							 | 
						||
| 
								 | 
							
								    info("Redundant language content");
							 | 
						||
| 
								 | 
							
								    info("==========================");
							 | 
						||
| 
								 | 
							
								    outputFlatArray($langContent, $lang);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function outputFlatArray($arr, $lang) {
							 | 
						||
| 
								 | 
							
								    $grouped = [];
							 | 
						||
| 
								 | 
							
								    foreach ($arr as $key => $val) {
							 | 
						||
| 
								 | 
							
								        $explodedKey = explode('.', $key);
							 | 
						||
| 
								 | 
							
								        $group = $explodedKey[0];
							 | 
						||
| 
								 | 
							
								        $path = implode('.', array_slice($explodedKey, 1));
							 | 
						||
| 
								 | 
							
								        if (!isset($grouped[$group])) $grouped[$group] = [];
							 | 
						||
| 
								 | 
							
								        $grouped[$group][$path] = $val;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    foreach ($grouped as $filename => $arr) {
							 | 
						||
| 
								 | 
							
								        echo "\e[36m" . $lang . '/' . $filename . ".php\e[0m\n";
							 | 
						||
| 
								 | 
							
								        echo json_encode($arr, JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE) . "\n";
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function formatLang($lang) {
							 | 
						||
| 
								 | 
							
								    $langParts = explode('_', strtoupper($lang));
							 | 
						||
| 
								 | 
							
								    $langParts[0] = strtolower($langParts[0]);
							 | 
						||
| 
								 | 
							
								    return implode('_', $langParts);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function loadLang(string $lang) {
							 | 
						||
| 
								 | 
							
								    $dir = __DIR__ . "/{$lang}";
							 | 
						||
| 
								 | 
							
								    if (!file_exists($dir)) {
							 | 
						||
| 
								 | 
							
								       errorOut("Expected directory '{$dir}' does not exist");
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    $files = scandir($dir);
							 | 
						||
| 
								 | 
							
								    $data = [];
							 | 
						||
| 
								 | 
							
								    foreach ($files as $file) {
							 | 
						||
| 
								 | 
							
								        if (substr($file, -4) !== '.php') continue;
							 | 
						||
| 
								 | 
							
								        $fileData = include ($dir . '/' . $file);
							 | 
						||
| 
								 | 
							
								        $name = substr($file, 0, -4);
							 | 
						||
| 
								 | 
							
								        $data[$name] = $fileData;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    return flattenArray($data);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function flattenArray(array $arr) {
							 | 
						||
| 
								 | 
							
								    $data = [];
							 | 
						||
| 
								 | 
							
								    foreach ($arr as $key => $arrItem) {
							 | 
						||
| 
								 | 
							
								        if (!is_array($arrItem)) {
							 | 
						||
| 
								 | 
							
								            $data[$key] = $arrItem;
							 | 
						||
| 
								 | 
							
								            continue;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $toUse = flattenArray($arrItem);
							 | 
						||
| 
								 | 
							
								        foreach ($toUse as $innerKey => $item) {
							 | 
						||
| 
								 | 
							
								            $data[$key . '.' . $innerKey] = $item;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    return $data;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function info($text) {
							 | 
						||
| 
								 | 
							
								    echo "\e[34m" . $text . "\e[0m\n";
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function errorOut($text) {
							 | 
						||
| 
								 | 
							
								    echo "\e[31m" . $text . "\e[0m\n";
							 | 
						||
| 
								 | 
							
								    exit(1);
							 | 
						||
| 
								 | 
							
								}
							 |