|
|
@ -1,5 +1,15 @@ |
|
|
|
<?php |
|
|
|
|
|
|
|
/** |
|
|
|
* Read strings.php file and create messages.po |
|
|
|
* |
|
|
|
* php utils/php2po.php <path/to/strings.php> |
|
|
|
* |
|
|
|
* Output to <path/to/messages.po> |
|
|
|
*/ |
|
|
|
|
|
|
|
DEFINE("NORM_REGEXP", "|[\\\]|"); |
|
|
|
|
|
|
|
|
|
|
|
if(! class_exists('App')) { |
|
|
|
class TmpA { |
|
|
|
public $strings = Array(); |
|
|
@ -7,11 +17,14 @@ |
|
|
|
$a = new TmpA(); |
|
|
|
} |
|
|
|
|
|
|
|
if ($argc!=2) { |
|
|
|
print "Usage: ".$argv[0]." <strings.php>\n\n"; |
|
|
|
if ($argc<2 || in_array('-h', $argv) || in_array('--h', $argv)) { |
|
|
|
print "Usage: ".$argv[0]." [-p <n>] <strings.php>\n\n"; |
|
|
|
print "Options:\n"; |
|
|
|
print "p\tNumber of plural forms. Default: 2\n"; |
|
|
|
print "\n"; |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
$phpfile = $argv[1]; |
|
|
|
$pofile = dirname($phpfile)."/messages.po"; |
|
|
|
|
|
|
@ -20,52 +33,174 @@ |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
// utility functions
|
|
|
|
function startsWith($haystack, $needle) { |
|
|
|
// search backwards starting from haystack length characters from the end
|
|
|
|
return $needle === "" || strrpos($haystack, $needle, -strlen($haystack)) !== FALSE; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// start !
|
|
|
|
include_once($phpfile); |
|
|
|
|
|
|
|
print "Out to '$pofile'\n"; |
|
|
|
$out = ''; |
|
|
|
$out .= "# FRIENDICA Distributed Social Network\n"; |
|
|
|
$out .= "# Copyright (C) 2010, 2011, 2012, 2013 the Friendica Project\n"; |
|
|
|
$out .= "# This file is distributed under the same license as the Friendica package.\n"; |
|
|
|
$out .= "# \n"; |
|
|
|
$out .= 'msgid ""' ."\n"; |
|
|
|
$out .= 'msgstr ""' ."\n"; |
|
|
|
$out .= '"Project-Id-Version: friendica\n"' ."\n"; |
|
|
|
$out .= '"Report-Msgid-Bugs-To: \n"' ."\n"; |
|
|
|
$out .= '"POT-Creation-Date: 2015-09-22 09:58+0200\n"' ."\n"; |
|
|
|
$out .= '"PO-Revision-Date: 2015-10-06 17:43+0000\n"' ."\n"; |
|
|
|
$out .= '"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n"' ."\n"; |
|
|
|
$out .= '"MIME-Version: 1.0\n"' ."\n"; |
|
|
|
$out .= '"Content-Type: text/plain; charset=UTF-8\n"' ."\n"; |
|
|
|
$out .= '"Content-Transfer-Encoding: 8bit\n"' ."\n"; |
|
|
|
|
|
|
|
$out = ""; |
|
|
|
$infile = file($pofile); |
|
|
|
$k=""; |
|
|
|
$ink = False; |
|
|
|
foreach ($infile as $l) { |
|
|
|
// search for plural info
|
|
|
|
$lang = ""; |
|
|
|
$lang_logic = ""; |
|
|
|
$lang_pnum = 2; |
|
|
|
|
|
|
|
$_idx = array_search('-p', $argv); |
|
|
|
if ($_idx !== false) { |
|
|
|
$lang_pnum = $argv[$_idx+1]; |
|
|
|
} |
|
|
|
|
|
|
|
if ($k!="" && substr($l,0,7)=="msgstr "){ |
|
|
|
$ink = False; |
|
|
|
$v = '""'; |
|
|
|
//echo "DBG: k:'$k'\n";
|
|
|
|
if (isset($a->strings[$k])) { |
|
|
|
$v= '"'.$a->strings[$k].'"'; |
|
|
|
//echo "DBG\n";
|
|
|
|
//var_dump($k, $v, $a->strings[$k], $v);
|
|
|
|
//echo "/DBG\n";
|
|
|
|
|
|
|
|
$infile = file($phpfile); |
|
|
|
foreach($infile as $l) { |
|
|
|
$l = trim($l); |
|
|
|
if (startsWith($l, 'function string_plural_select_')) { |
|
|
|
$lang = str_replace( 'function string_plural_select_' , '', str_replace( '($n){','', $l) ); |
|
|
|
} |
|
|
|
if (startsWith($l, 'return')) { |
|
|
|
$lang_logic = str_replace( '$', '', trim( str_replace( 'return ' , '', $l) , ';') ); |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
echo "Language: $lang\n"; |
|
|
|
echo "Plural forms: $lang_pnum\n"; |
|
|
|
echo "Plural logic: $lang_logic;\n"; |
|
|
|
|
|
|
|
$out .= sprintf('"Language: %s\n"', $lang) ."\n"; |
|
|
|
$out .= sprintf('"Plural-Forms: nplurals=%s; plural=%s;\n"', $lang_pnum, $lang_logic) ."\n"; |
|
|
|
$out .= "\n"; |
|
|
|
|
|
|
|
print "\nLoading base message.po..."; |
|
|
|
|
|
|
|
// load base messages.po and extract msgids
|
|
|
|
$base_msgids = array(); |
|
|
|
$norm_base_msgids = array(); |
|
|
|
$base_f = file("util/messages.po") or die("No base messages.po\n"); |
|
|
|
$_f = 0; $_mid = ""; $_mids = array(); |
|
|
|
foreach( $base_f as $l) { |
|
|
|
$l = trim($l); |
|
|
|
//~ print $l."\n";
|
|
|
|
|
|
|
|
if (startsWith($l, 'msgstr')) { |
|
|
|
if ($_mid != '""') { |
|
|
|
$base_msgids[$_mid] = $_mids; |
|
|
|
$norm_base_msgids[preg_replace(NORM_REGEXP, "", $_mid)] = $_mid; |
|
|
|
//~ print "\t\t\t".$_mid. print_r($base_msgids[$_mid], true);
|
|
|
|
} |
|
|
|
//echo "DBG: v:'$v'\n";
|
|
|
|
$l = "msgstr ".$v."\n"; |
|
|
|
|
|
|
|
$_f = 0; |
|
|
|
$_mid = ""; |
|
|
|
$_mids = array(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (startsWith($l, '"') && $_f==2) { |
|
|
|
$_mids[count($_mids)-1] .= "\n".$l; |
|
|
|
//~ print "\t\t+mids: ".print_t($_mids, true);
|
|
|
|
} |
|
|
|
if (startsWith($l, 'msgid_plural ')) { |
|
|
|
$_f = 2; |
|
|
|
$_mids[] = str_replace('msgid_plural ', '' , $l); |
|
|
|
//~ print "\t\t mids: ".print_r($_mids, true);
|
|
|
|
} |
|
|
|
|
|
|
|
if (startsWith($l, '"') && $_f==1) { |
|
|
|
$_mid .= "\n".$l; |
|
|
|
$_mids[count($_mids)-1] .= "\n".$l; |
|
|
|
//~ print "\t+mid: $_mid \n";
|
|
|
|
} |
|
|
|
if (startsWith($l, 'msgid ')) { |
|
|
|
$_f = 1; |
|
|
|
$_mid = str_replace('msgid ', '' , $l); |
|
|
|
$_mids = array($_mid); |
|
|
|
//~ print "\t mid: $_mid \n";
|
|
|
|
} |
|
|
|
//~ print "\t\t\t\t$_f\n\n";
|
|
|
|
} |
|
|
|
|
|
|
|
print " done\n"; |
|
|
|
print "Creating '$pofile'..."; |
|
|
|
// create msgid and msgstr
|
|
|
|
|
|
|
|
if (substr($l,0,6)=="msgid_" || substr($l,0,7)=="msgstr[" )$ink = False;; |
|
|
|
/** |
|
|
|
* Get a string and retun a message.po ready text |
|
|
|
* - replace " with \"
|
|
|
|
* - replace tab char with \t |
|
|
|
* - manage multiline strings |
|
|
|
*/ |
|
|
|
function massage_string($str) { |
|
|
|
$str = str_replace('\\','\\\\',$str); |
|
|
|
$str = str_replace('"','\"',$str); |
|
|
|
$str = str_replace("\t",'\t',$str); |
|
|
|
$str = str_replace("\n",'\n"'."\n".'"',$str); |
|
|
|
if (strpos($str, "\n")!==false && $str[0]!=='"') $str = '"'."\n".$str; |
|
|
|
$str = preg_replace("|\n([^\"])|", "\n\"$1", $str); |
|
|
|
return sprintf('"%s"', $str); |
|
|
|
} |
|
|
|
|
|
|
|
if ($ink) { |
|
|
|
$k .= trim($l,"\"\r\n"); |
|
|
|
$k = str_replace('\"','"',$k); |
|
|
|
function find_original_msgid($str) { |
|
|
|
global $norm_base_msgids; |
|
|
|
$norm_str = preg_replace(NORM_REGEXP, "", $str); |
|
|
|
if (array_key_exists($norm_str, $norm_base_msgids)) { |
|
|
|
return $norm_base_msgids[$norm_str]; |
|
|
|
} |
|
|
|
return $str; |
|
|
|
} |
|
|
|
|
|
|
|
$warnings = ""; |
|
|
|
foreach($a->strings as $key=>$str) { |
|
|
|
$msgid = massage_string($key); |
|
|
|
|
|
|
|
if (substr($l,0,6)=="msgid "){ |
|
|
|
$arr=False; |
|
|
|
$k = str_replace("msgid ","",$l); |
|
|
|
if ($k != '""' ) { |
|
|
|
$k = trim($k,"\"\r\n"); |
|
|
|
$k = str_replace('\"','"',$k); |
|
|
|
if (preg_match("|%[sd0-9](\$[sn])*|", $msgid)) { |
|
|
|
$out .= "#, php-format\n"; |
|
|
|
} |
|
|
|
$msgid = find_original_msgid($msgid); |
|
|
|
$out .= 'msgid '. $msgid . "\n"; |
|
|
|
|
|
|
|
if (is_array($str)) { |
|
|
|
if (array_key_exists($msgid, $base_msgids) && isset($base_msgids[$msgid][1])) { |
|
|
|
$out .= 'msgid_plural '. $base_msgids[$msgid][1] . "\n"; |
|
|
|
} else { |
|
|
|
$k = ""; |
|
|
|
$out .= 'msgid_plural '. $msgid . "\n"; |
|
|
|
$warnings .= "[W] No source plural form for msgid:\n". str_replace("\n","\n\t", $msgid) . "\n\n"; |
|
|
|
} |
|
|
|
foreach ( $str as $n => $msgstr) { |
|
|
|
$out .= 'msgstr['.$n.'] '. massage_string($msgstr) . "\n"; |
|
|
|
} |
|
|
|
$ink = True; |
|
|
|
} else { |
|
|
|
$out .= 'msgstr '. massage_string($str) . "\n"; |
|
|
|
} |
|
|
|
|
|
|
|
$out .= $l; |
|
|
|
$out .= "\n"; |
|
|
|
|
|
|
|
} |
|
|
|
//echo $out;
|
|
|
|
|
|
|
|
file_put_contents($pofile, $out); |
|
|
|
?>
|
|
|
|
|
|
|
|
print " done\n"; |
|
|
|
|
|
|
|
if ($warnings=="") { |
|
|
|
print "No warnings.\n"; |
|
|
|
} else { |
|
|
|
print $warnings; |
|
|
|
} |
|
|
|
|