Archived
Totally resorted the language files, added subscription strings
This commit is contained in:
@@ -0,0 +1,206 @@
|
||||
<?php
|
||||
|
||||
// this function is meant to be run from the command line
|
||||
// usage: php -f langsorter.php [arg1] [arg1]
|
||||
// arg1: language file to sort, for example de
|
||||
// arg2: folder, empty = language root folder, UTF-8 = subfolder
|
||||
// or single argument -all to batch process all existing language files
|
||||
// rearranges the language file the same as is in the english file
|
||||
// missing definitions are copied from the english file
|
||||
// removed definitions going to be removed
|
||||
// if some values are going to be changed, do it to the array in line 86
|
||||
// for example where the string has changed and to be back-set to english
|
||||
// or change definition name by changing the array key
|
||||
// remove this safety block
|
||||
exit;
|
||||
|
||||
function getDef($line) {
|
||||
$matches = array();
|
||||
$def = preg_match("#@define\\('([a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*)',#", $line, $matches);
|
||||
if (empty($matches[1])) {
|
||||
return false;
|
||||
}
|
||||
return $matches[1];
|
||||
}
|
||||
|
||||
function getVal($line) {
|
||||
$matches = array();
|
||||
$val = preg_match("#,(.+)\\);#", $line, $matches);
|
||||
if (empty($matches[1])) return false;
|
||||
return ' ' . trim($matches[1]);
|
||||
}
|
||||
|
||||
function checkIgnore($line) {
|
||||
if ( empty($line) ||
|
||||
substr($line, 0, 1) == '/' ||
|
||||
substr($line, 0, 1) == '#' ||
|
||||
substr($line, 0, 5) == '<?php' ||
|
||||
substr($line, 0, 2) == '?>' ) {
|
||||
return true;
|
||||
} else { return false; }
|
||||
}
|
||||
|
||||
function synclang($dir, $lancode) {
|
||||
global $refarray, $refstart;
|
||||
|
||||
// load target language
|
||||
$tarlang = file_get_contents( $dir . 'serendipity_lang_' . $lancode . '.inc.php');
|
||||
|
||||
if ($tarlang === false) {
|
||||
echo "Error: cannot load target file\n";
|
||||
exit;
|
||||
}
|
||||
|
||||
// explode file into lines
|
||||
$tararray = explode("\n", $tarlang);
|
||||
|
||||
// get first definition line
|
||||
foreach ($tararray as $key => $value) {
|
||||
if ( strpos($value, "@define('LANG_CHARSET',") !== false ) {
|
||||
$tarstart = $key;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$tardefs = array();
|
||||
// split target definitions in key - value array
|
||||
echo "prepare target language file ...\r\n";
|
||||
for ($i = $tarstart; $i < count($tararray); $i++) {
|
||||
$line = $tararray[$i];
|
||||
if (checkIgnore($line)) continue;
|
||||
if (preg_match("#@define( +)\\(( +)'[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*'( +),#", $value) !== 0 ) {
|
||||
echo "line " . ($key + 1) . " contains additional spaces\r\n";
|
||||
exit;
|
||||
}
|
||||
$def = getDef($line, $i);
|
||||
if ($def === false) {
|
||||
echo "no definition found in line " . ($i + 1) . ": " . $line . "\r\n";
|
||||
exit;
|
||||
}
|
||||
$val = getVal($line, $i);
|
||||
if ($val === false) {
|
||||
echo "no value found in line " . ($i + 1) . ": " . $line . "\r\n";
|
||||
exit;
|
||||
}
|
||||
$tardefs[$def] = $val;
|
||||
}
|
||||
|
||||
// make changes, e.g. delete translations which have to be changed
|
||||
unset($tardefs['IFRAME_SAVE']);
|
||||
|
||||
echo "OK\r\n";
|
||||
$output = array_slice($tararray, 0, $tarstart);
|
||||
|
||||
echo "sort target language according to template file ...\r\n";
|
||||
for ($i = $refstart; $i < count($refarray); $i++) {
|
||||
$line = $refarray[$i];
|
||||
if (checkIgnore($line)) {
|
||||
$output[] = $line;
|
||||
continue;
|
||||
}
|
||||
$def = getDef($line, $i);
|
||||
if (array_key_exists($def, $tardefs)) {
|
||||
$output[] = "@define('{$def}',{$tardefs[$def]});";
|
||||
} else {
|
||||
echo "definition {$def} missing from target file, copying from template\r\n";
|
||||
$output[] = $line;
|
||||
}
|
||||
}
|
||||
echo "OK\r\n\r\n";
|
||||
|
||||
if (!file_exists($dir . 'processed')) mkdir($dir . 'processed', 0777, true);
|
||||
|
||||
file_put_contents( $dir . 'processed/serendipity_lang_' . $lancode . '.inc.php', implode("\n", $output));
|
||||
|
||||
}
|
||||
|
||||
// ===========================
|
||||
// program start
|
||||
// ===========================
|
||||
|
||||
if (!is_array($argv) || empty($argv[1])) {
|
||||
echo "This tool is intended to be called via commandline!\n";
|
||||
exit;
|
||||
}
|
||||
|
||||
// argument = language code of the file to be converted
|
||||
$lancode = $argv[1];
|
||||
|
||||
// load template language
|
||||
$reflang = file_get_contents('serendipity_lang_en.inc.php');
|
||||
|
||||
// explode file into lines
|
||||
$refarray = explode("\n", $reflang);
|
||||
|
||||
// get first definition line
|
||||
foreach ($refarray as $key => $value) {
|
||||
if ( strpos($value, "@define('LANG_CHARSET',") !== false ) {
|
||||
$refstart = $key;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// check syntax of reference files
|
||||
echo "syntax check of reference file ...\r\n";
|
||||
foreach ($refarray as $key => $value) {
|
||||
if (checkIgnore($value) ) continue;
|
||||
if (trim($value) == '') {
|
||||
echo "line " . ($key + 1) . " contains only space\r\n";
|
||||
exit;
|
||||
}
|
||||
if (preg_match("#@define( +)\\(( +)'[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*'( +),#", $value) !== 0 ) {
|
||||
echo "line " . ($key + 1) . " contains additional spaces\r\n";
|
||||
exit;
|
||||
}
|
||||
if (getDef($value) === false) {
|
||||
echo "no definition found in line " . ($key + 1) . ": " . $value . "\r\n";
|
||||
exit;
|
||||
}
|
||||
if (getVal($value) === false) {
|
||||
echo "no value found in line " . ($key + 1) . ": " . $value . "\r\n";
|
||||
exit;
|
||||
}
|
||||
}
|
||||
echo "OK\r\n\r\n";
|
||||
|
||||
// process single file
|
||||
if ($lancode != 'all') {
|
||||
if (empty($argv[2])) {
|
||||
synclang('', $lancode);
|
||||
} elseif ($argv[2] == 'UTF-8') {
|
||||
synclang('UTF-8/', $lancode);
|
||||
}
|
||||
} else {
|
||||
// batch processing all files in folder
|
||||
$d = @opendir('./');
|
||||
|
||||
if (!$d) {
|
||||
die('Failure');
|
||||
}
|
||||
|
||||
while(($file = readdir($d)) !== false) {
|
||||
$matches = array();
|
||||
preg_match('@serendipity_lang_([a-z]{2}[_]*[A-Z]*)\.inc\.php@', $file, $matches);
|
||||
echo "{$matches[1]}\r\n";
|
||||
if (empty($matches[1])) continue;
|
||||
if ($matches[1] == 'en') continue;
|
||||
echo "syncing language {$matches[1]}\r\n========================\r\n";
|
||||
synclang('', $matches[1]);
|
||||
}
|
||||
|
||||
$d = @opendir('UTF-8');
|
||||
|
||||
if (!$d) {
|
||||
die('Failure');
|
||||
}
|
||||
|
||||
while(($file = readdir($d)) !== false) {
|
||||
$matches = array();
|
||||
preg_match('@serendipity_lang_([a-z]{2}[_]*[A-Z]*)\.inc\.php@', $file, $matches);
|
||||
if (empty($matches[1])) continue;
|
||||
echo "syncing language {$matches[1]}\r\n========================\r\n";
|
||||
synclang('UTF-8/', $matches[1]);
|
||||
}
|
||||
}
|
||||
echo "DONE\r\n";
|
||||
?>
|
||||
Reference in New Issue
Block a user