diff --git a/build/build.php b/build/build.php index 6fe4990..931f9a5 100644 --- a/build/build.php +++ b/build/build.php @@ -9,10 +9,22 @@ * @license MIT, https://acollington.mit-license.org/ */ -$options = getopt('j', ['local-js']); +$options = getopt('jl:', ['local-js', 'lang:']); $makeJsLocal = (isset($options['j']) || isset($options['local-js'])); +$useLanguage = $options['l'] ?? $options['lang'] ?? null; +$languagePack = 'null'; $parentPath = dirname(__DIR__); +if ($useLanguage !== null) { + $useLanguage = preg_replace('/[^a-z_-]/', '', $useLanguage); + $languageFile = __DIR__ . "/_languages/{$useLanguage}.json"; + if (!file_exists($languageFile)) { + echo "The '{$useLanguage}' file does not exist - using default English\n\n"; + } else { + $languagePack = "<<< EOJSON\n" . file_get_contents($languageFile) . "\nEOJSON"; + } +} + if (!file_exists($parentPath . '/node_modules')) { echo "🐢 Installing node modules\n"; exec('npm install'); @@ -28,9 +40,10 @@ $template = trim(file_get_contents(__DIR__ . '/template.phps')); $jsOutput = trim(file_get_contents(__DIR__ . '/interface.js')); $cssOutput = trim(file_get_contents(__DIR__ . '/interface.css')); $phpOutput = trim(implode('', array_slice(file($parentPath . '/src/Opcache/Service.php'), 3))); + $output = str_replace( ['{{JS_OUTPUT}}', '{{CSS_OUTPUT}}', '{{PHP_OUTPUT}}', '{{LANGUAGE_PACK}}'], - [$jsOutput, $cssOutput, $phpOutput, 'null'], + [$jsOutput, $cssOutput, $phpOutput, $languagePack], $template ); if ($makeJsLocal) { diff --git a/index.php b/index.php index 9e8a415..731d648 100644 --- a/index.php +++ b/index.php @@ -40,7 +40,115 @@ $options = [ 'jit' => true // show the jit buffer chart/big number ], // json structure of all text strings used, or null for default - 'language_pack' => null + 'language_pack' => <<< EOJSON +{ + "(unsafe) Collect constants": "(instable) Collecter les constantes", + "++, +=, series of jumps": "++, +=, séries de sauts", + "Adjust used stack": "Ajuster la pile utilisée", + "Ascending": "Croissant", + "Available functions": "Fonctions disponibles", + "blacklist misses": "Ratés mis sur liste noire", + "buffer size": "taille du tampon", + "Cached": "En cache", + "CALL GRAPH optimization": "Optimisation CALL GRAPH", + "CFG based optimization": "Optimisation basée sur CFG", + "Compile all functions on script load": "Compiler toutes les fonctions au chargement du script", + "Compile functions on first execution": "Compiler les fonctions à la première exécution", + "Constant conversion and jumps": "Conversion des constantes et sauts", + "CPU-specific optimization": "Optimisation spécifique au CPU", + "CSE, STRING construction": "Construction CSE, STRING", + "Currently unused": "Actuellement inutilisé", + "DCE (dead code elimination)": "DCE (élimination du code mort)", + "Descending": "Décroissant", + "DFA based optimization": "Optimisation basée sur DFA", + "Directives": "Directives", + "Disable CPU-specific optimization": "Désactiver l'optimisation spécifique au processeur", + "Disable real-time update": "Désactiver la mise à jour en temps réel", + "Do not perform register allocation": "Ne pas effectuer d'allocation de registre", + "Enable real-time update": "Activer la mise à jour en temps réel", + "Enable use of AVX, if the CPU supports it": "Activer l'utilisation d'AVX, si le CPU le prend en charge", + "false": "faux", + "File list pagination": "Pagination de la liste des fichiers", + "force file invalidation": "forcer l'invalidation du fichier", + "free memory": "mémoire libre", + "General info": "Informations générales", + "has been invalidated": "a été invalidé", + "hit rate": "taux de succès", + "hits": "accès", + "Host": "Hôte", + "Ignored": "Ignoré", + "INIT_FCALL_BY_NAME -> DO_FCALL": "INIT_FCALL_BY_NAME -> DO_FCALL", + "Inline functions": "Fonctions inline", + "Inline VM handlers": "Gestionnaires de VM inline", + "interned strings usage": "utilisation des chaînes internées", + "Invalidate all matching files": "Invalider tous les fichiers correspondants", + "jit buffer free": "tampon jit libre", + "jit buffer": "tampon jit", + "keys": "clés", + "Last modified": "Dernière modification", + "last modified": "dernière modification", + "Last used": "Dernière utilisation", + "last used": "dernière utilisation", + "max cached keys": "max de clés en cache", + "Memory consumption": "Consommation mémoire", + "memory usage": "utilisation de la mémoire", + "memory": "mémoire", + "Merge equal constants": "Fusionner les constantes égales", + "Minimal JIT (call standard VM handlers)": "JIT minimal (appel des gestionnaires de VM standard)", + "Next": "Suivant", + "No files have been cached or you have opcache.file_cache_only<\/i> turned on": "Aucun fichier n'a été mis en cache ou vous avez opcache.file_cache_only<\/i> activé", + "No files have been ignored via opcache.blacklist_filename<\/i>": "Aucun fichier n'a été ignoré via opcache.blacklist_filename<\/i>", + "No files have been preloaded opcache.preload<\/i>": "Aucun fichier n'a été préchargé opcache.preload<\/i>", + "No JIT": "Pas de JIT", + "no value": "pas de valeur", + "NOP removal": "Suppression de NOP", + "number of cached files": "nombre de fichiers en cache", + "number of cached keys": "nombre de clés en cache", + "Number of hits": "Nombre d'accès", + "number of hits": "nombre d'accès", + "number of misses": "nombre de ratés", + "number of strings": "nombre de chaînes", + "opcache statistics": "statistiques d'opcache", + "Optimization level": "Niveau d'optimisation", + "Optimize whole script": "Optimiser tout le script", + "Overview": "Vue d'ensemble", + "Path": "Chemin", + "Perform block-local register allocation": "Effectuer l'allocation de registre local de bloc", + "Perform global register allocation": "Effectuer une allocation de registre globale", + "preload memory": "précharger la mémoire", + "Preloaded": "Préchargé", + "Previous": "Précédent", + "Profile functions on first request and compile the hottest functions afterwards": "Profiling des fonctions à la première demande et compilation des fonctions les plus fréquentes par la suite", + "Profile on the fly and compile hot functions": "Profiling à la volée et compiler les fonctions les plus fréquentes", + "Register allocation": "Allocation de registre", + "Remove unused variables": "Supprimer les variables inutilisées", + "Reset cache": "Réinitialiser le cache", + "SCCP (constant propagation)": "SCCP (propagation des constantes)", + "Script": "Script", + "Server Software": "Logiciel serveur", + "Sort order": "Ordre de tri", + "Start typing to filter on script path": "Commencez à taper pour filtrer sur le chemin du script", + "TMP VAR usage": "Utilisation TMP VAR", + "total memory": "mémoire totale", + "Trigger": "Déclencheur", + "true": "vrai", + "Use call graph": "Utiliser le graphe des appels", + "Use tracing JIT. Profile on the fly and compile traces for hot code segments": "Utilisez le suivi JIT. Profiling à la volée et compilation des traces pour les segments de code les plus fréquents", + "Use type inference": "Utiliser l'inférence de type", + "used memory": "mémoire utilisée", + "View manual page": "Voir la page du manuel", + "View {0} manual entry": "Voir la page {0} du manuel", + "wasted memory": "mémoire perdue", + "You have opcache.file_cache_only<\/i> turned on. As a result, the memory information is not available. Statistics and file list may also not be returned by opcache_get_statistics()<\/i>.": "Vous avez opcache.file_cache_only<\/i> activé. Par conséquent, les informations sur la mémoire ne sont pas disponibles. Les statistiques et la liste de fichiers peuvent également ne pas être renvoyées par opcache_get_statistics()<\/i>.", + "{0} files cached": "{0} fichiers mis en cache", + "{0} files cached, {1} showing due to filter '{2}'": "{0} fichiers mis en cache, {1} s'affichent en raison du filtre '{2}'", + "{0} ignore file locations": "{0} ignore les fichiers en fonction de l'emplacement", + "{0} preloaded files": "{0} fichiers préchargés", + "Last reset": "", + "Start time": "", + "never": "" +} +EOJSON ]; /* @@ -394,7 +502,7 @@ class Service ->setTimezone($this->tz) ->format($this->getOption('datetime_format')), 'last_restart_time' => ($status['opcache_statistics']['last_restart_time'] === 0 - ? 'never' + ? $this->txt('never') : (new DateTimeImmutable("@{$status['opcache_statistics']['last_restart_time']}")) ->setTimezone($this->tz) ->format($this->getOption('datetime_format')) @@ -522,7 +630,7 @@ $opcache = (new Service($options))->handle();