1
0
Fork 0

Remove util/php2po

- Updated util/README
This commit is contained in:
Hypolite Petovan 2018-03-18 23:44:27 -04:00
parent f6fcda2781
commit 2b2c676eca
2 changed files with 2 additions and 212 deletions

View file

@ -72,7 +72,7 @@ $a->string["%d message sent"] = Array(
The function string_plural_select($n) defined in strings.php, return the string The function string_plural_select($n) defined in strings.php, return the string
index to use, related to the numbers of item (value of $n). index to use, related to the numbers of item (value of $n).
This is modelled after ngettext function of GNU gettext. This is modeled after ngettext function of GNU gettext.
More info at http://www.gnu.org/software/hello/manual/gettext/Plural-forms.html More info at http://www.gnu.org/software/hello/manual/gettext/Plural-forms.html
@ -117,10 +117,4 @@ When strings are added or modified in source, you could run
If you already translated Friendica using strings.php, you could import your old If you already translated Friendica using strings.php, you could import your old
translation to messages.po. Run: translation to messages.po. Run:
$ php util/php2po.php view/lang/<language>/strings.php $ php bin/console php2po view/lang/<language>/strings.php
You may also use the util/string_translator.php web interface to translate the string file, but it is disabled for website security reasons. The web server will need write permission to your language directories and the "Deny ..." line in util/.htaccess will need to be modified or commented to use the utility.

View file

@ -1,204 +0,0 @@
#!/usr/bin/env php
<?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", "|[\\\]|");
$a = new stdClass();
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";
if (!file_exists($phpfile)){
print "Unable to find '$phpfile'\n";
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);
$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: '. date("Y-m-d H:i:sO").'\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";
// search for plural info
$lang = "";
$lang_logic = "";
$lang_pnum = 2;
$_idx = array_search('-p', $argv);
if ($_idx !== false) {
$lang_pnum = $argv[$_idx+1];
}
$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 = [];
$norm_base_msgids = [];
$base_f = file("util/messages.po");
if (!$base_f) {
die("No base messages.po\n");
}
$_f = 0;
$_mid = "";
$_mids = [];
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);
}
$_f = 0;
$_mid = "";
$_mids = [];
}
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 = [$_mid];
//~ print "\t mid: $_mid \n";
}
//~ print "\t\t\t\t$_f\n\n";
}
print " done\n";
print "Creating '$pofile'...";
// create msgid and msgstr
/**
* 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);
}
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 (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 {
$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";
}
} else {
$out .= 'msgstr '. massage_string($str) . "\n";
}
$out .= "\n";
}
file_put_contents($pofile, $out);
print " done\n";
if ($warnings=="") {
print "No warnings.\n";
} else {
print $warnings;
}