You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
131 lines
5.1 KiB
131 lines
5.1 KiB
<?php
|
|
/* For licensing terms, see /license.txt */
|
|
/**
|
|
* Script to switch all language variables in Chamilo to a more Gettext-like syntax.
|
|
*/
|
|
/**
|
|
* Includes and declarations.
|
|
*/
|
|
die('Remove the "die()" statement on line '.__LINE__.' to execute this script'.PHP_EOL);
|
|
require_once __DIR__.'/../../public/main/inc/global.inc.php';
|
|
$path = api_get_path(SYS_PATH) . 'main/lang/english'; // Adjusted path
|
|
ini_set('memory_limit', '128M');
|
|
|
|
/**
|
|
* Main code.
|
|
*/
|
|
$terms = [];
|
|
$list = SubLanguageManager::get_lang_folder_files_list($path);
|
|
|
|
// Verify that the directory content is being read
|
|
echo "Reading language files from: $path\n";
|
|
|
|
foreach ($list as $entry) {
|
|
$file = $path . '/' . $entry;
|
|
echo "Processing language file: $file\n"; // Add debug message
|
|
if (is_file($file)) {
|
|
$file_terms = SubLanguageManager::get_all_language_variable_in_file($file, true);
|
|
//print_r($file_terms); // Debug: print terms loaded from the file
|
|
$terms = array_merge($terms, $file_terms);
|
|
}
|
|
}
|
|
|
|
foreach ($terms as $index => $translation) {
|
|
$terms[$index] = trim(rtrim($translation, ';'), '"');
|
|
}
|
|
|
|
// Get only the array keys (the language variables defined in language files)
|
|
$defined_terms = array_flip(array_keys($terms));
|
|
echo count($defined_terms) . " terms were found in language files" . PHP_EOL;
|
|
//print_r($defined_terms); // Debug: print the terms found
|
|
|
|
// Now get all terms found in all PHP, TPL, and Twig files of Chamilo (this takes some time and memory)
|
|
$usedTerms = [];
|
|
$l = strlen(api_get_path(SYS_PATH));
|
|
$pathfile = api_get_path(SYS_PATH) . "main/template/"; //Path for the missing files, should be adapted for other use
|
|
$files = getAllPhpFiles($pathfile);
|
|
//$files = [$pathfile]; // Process only the specific file for now
|
|
$rootLength = strlen(api_get_path(SYS_PATH));
|
|
$countFiles = 0;
|
|
$countReplaces = 0;
|
|
|
|
// Browse files
|
|
foreach ($files as $file) {
|
|
echo "Analyzing $file" . PHP_EOL;
|
|
$lines = file($file);
|
|
$newContent = ''; // Store new file content
|
|
$fileModified = false;
|
|
|
|
// Browse lines inside file $file
|
|
foreach ($lines as $lineIndex => $line) {
|
|
$lineModified = false;
|
|
|
|
// Regular expression for {{ 'variable'|get_lang|format() }}
|
|
$res = preg_match_all('/\{\{\s*([\'"]\w+[\'"])\s*\|\s*get_lang\s*\|\s*format\s*\((.*?)\)\s*\}\}/m', $line, $myTerms);
|
|
if ($res > 0) {
|
|
echo "Match found for get_lang|format in line: $line" . PHP_EOL;
|
|
foreach ($myTerms[1] as $index => $quotedTerm) {
|
|
$term = trim($quotedTerm, '\'\"');
|
|
if (isset($terms[$term])) {
|
|
$translation = $terms[$term];
|
|
echo "Replacing $quotedTerm with '$translation'" . PHP_EOL;
|
|
$line = str_replace($quotedTerm, "'$translation'", $line);
|
|
$lineModified = true;
|
|
$countReplaces++;
|
|
} else {
|
|
echo "Term $term not found in language file" . PHP_EOL; // Debug: term not found
|
|
}
|
|
}
|
|
}
|
|
|
|
// Regular expression for {{ 'variable'|get_lang }}
|
|
$res = preg_match_all('/\{\{\s*([\'"]\w+[\'"])\s*\|\s*get_lang\s*\}\}/m', $line, $myTerms);
|
|
if ($res > 0) {
|
|
echo "Match found for get_lang in line: $line" . PHP_EOL;
|
|
foreach ($myTerms[1] as $index => $quotedTerm) {
|
|
$term = trim($quotedTerm, '\'\"');
|
|
if (isset($terms[$term])) {
|
|
$translation = $terms[$term];
|
|
echo "Replacing $quotedTerm with '$translation'" . PHP_EOL;
|
|
$line = str_replace($quotedTerm, "'$translation'", $line);
|
|
$lineModified = true;
|
|
$countReplaces++;
|
|
} else {
|
|
echo "Term $term not found in language file" . PHP_EOL; // Debug: term not found
|
|
}
|
|
}
|
|
}
|
|
|
|
// Regular expression for get_lang('variable') or get_lang("variable")
|
|
$res = preg_match_all('/get_lang\(([\'"](\w+)[\'"])\)/m', $line, $myTerms);
|
|
if ($res > 0) {
|
|
echo "Match found for get_lang() in line: $line" . PHP_EOL;
|
|
foreach ($myTerms[2] as $index => $term) {
|
|
if (isset($terms[$term])) {
|
|
$translation = $terms[$term];
|
|
$quotedTerm = $myTerms[1][$index];
|
|
echo "Replacing $quotedTerm with '$translation'" . PHP_EOL;
|
|
$line = str_replace($quotedTerm, "'$translation'", $line);
|
|
$lineModified = true;
|
|
$countReplaces++;
|
|
} else {
|
|
echo "Term $term not found in language file" . PHP_EOL; // Debug: term not found
|
|
}
|
|
}
|
|
}
|
|
|
|
$newContent .= $line; // Add modified line to new content
|
|
if ($lineModified) {
|
|
$fileModified = true;
|
|
}
|
|
}
|
|
|
|
// Write the modified content back to the file if there were modifications
|
|
if ($fileModified) {
|
|
file_put_contents($file, $newContent);
|
|
}
|
|
|
|
$countFiles++;
|
|
}
|
|
|
|
echo "Done analyzing $countFiles files, with $countReplaces replacements!\n";
|
|
|