-
Notifications
You must be signed in to change notification settings - Fork 486
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Internal: Fix language variable replacement script for Twig and PHP f…
…iles - refs BT#21777
- Loading branch information
1 parent
8ff5955
commit f9601d4
Showing
2 changed files
with
88 additions
and
49 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,90 +1,130 @@ | ||
<?php | ||
/* For licensing terms, see /license.txt */ | ||
/** | ||
* Script to switch all PHP files in Chamilo to a more Gettext-like syntax. | ||
* 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_LANG_PATH).'english'; | ||
$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; | ||
$file = $path . '/' . $entry; | ||
echo "Processing language file: $file\n"; // Add debug message | ||
if (is_file($file)) { | ||
$terms = array_merge($terms, SubLanguageManager::get_all_language_variable_in_file($file, true)); | ||
$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) | ||
|
||
// 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; | ||
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 files of Chamilo (this takes some | ||
// time and memory) | ||
// 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/default/gamification/"; | ||
$files = getAllPhpFiles($pathfile); | ||
$pathfile = api_get_path(SYS_PATH) . "main/template/default/gamification/my_progress.html.twig"; | ||
$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) { | ||
if ('vendor' === substr($file, $rootLength, 6) || 'web' === substr($file, $rootLength, 3)) { | ||
continue; | ||
} | ||
//echo 'Analyzing '.$file.PHP_EOL; | ||
$shortFile = substr($file, $l); | ||
//echo 'Analyzing '.$shortFile.PHP_EOL; | ||
echo "Analyzing $file" . PHP_EOL; | ||
$lines = file($file); | ||
$newContent = ''; // Store new file content | ||
$fileModified = false; | ||
|
||
// Browse lines inside file $file | ||
foreach ($lines as $line) { | ||
$myTerms = []; | ||
$res = preg_match_all('/get_lang\(([\'"](\\w*)[\'"])\)/m', $line, $myTerms); | ||
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) { | ||
foreach ($myTerms[2] as $term) { | ||
echo "Found term $term - ".print_r($myTerms, 1).PHP_EOL; | ||
if ('lang' == substr($term, 0, 4)) { | ||
$term = substr($term, 4); | ||
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 | ||
} | ||
if (!empty($terms[$term])) { | ||
} | ||
} | ||
|
||
// 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]; | ||
$quotedTerm = $myTerms[1][0]; | ||
//echo "Would do sed -i \"s#$quotedTerm#'$translation'#g\" $file here\n"; | ||
system("sed -i \"s#$quotedTerm#'$translation'#g\" $file"); | ||
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 | ||
} | ||
} | ||
} else { | ||
$res = preg_match_all('/\{\{\s*([\'"](\\w*)[\'"])\s*\|get_lang\}\}/m', $line, $myTerms); | ||
if ($res > 0) { | ||
foreach ($myTerms[2] as $term) { | ||
echo "Found term $term".PHP_EOL; | ||
if ('lang' == substr($term, 0, 4)) { | ||
$term = substr($term, 4); | ||
} | ||
if (!empty($terms[$term])) { | ||
$translation = $terms[$term]; | ||
$quotedTerm = $myTerms[1][0]; | ||
//echo "Would do sed -i \"s#$quotedTerm#'$translation'#g\" $file here\n"; | ||
system("sed -i \"s#$quotedTerm#'$translation'#g\" $file"); | ||
$countReplaces++; | ||
} | ||
} | ||
|
||
// 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++; | ||
flush(); | ||
} | ||
|
||
echo "Done analyzing $countFiles files, with $countReplaces replacements!\n"; |