parent
2b2c676eca
commit
2226ed2949
|
@ -27,17 +27,17 @@ The location of the translated files in the source tree is
|
||||||
/view/lang/LNG-CODE/
|
/view/lang/LNG-CODE/
|
||||||
where LNG-CODE is the language code used, e.g. de for German or fr for French.
|
where LNG-CODE is the language code used, e.g. de for German or fr for French.
|
||||||
The translated strings come as a "message.po" file from transifex which needs to be translated into the PHP file friendica uses.
|
The translated strings come as a "message.po" file from transifex which needs to be translated into the PHP file friendica uses.
|
||||||
To do so, place the file in the directory mentioned above and use the "po2php" utility from the util directory of your friendica installation.
|
To do so, place the file in the directory mentioned above and use the "po2php" command from the console.
|
||||||
|
|
||||||
Assuming you want to convert the German localization which is placed in view/lang/de/message.po you would do the following.
|
Assuming you want to convert the German localization which is placed in view/lang/de/message.po you would do the following.
|
||||||
|
|
||||||
1. Navigate at the command prompt to the base directory of your
|
1. Navigate at the command prompt to the base directory of your
|
||||||
friendica installation
|
friendica installation
|
||||||
|
|
||||||
2. Execute the po2php script, which will place the translation
|
2. Execute the po2php command, which will place the translation
|
||||||
in the strings.php file that is used by friendica.
|
in the strings.php file that is used by friendica.
|
||||||
|
|
||||||
$> php util/po2php.php view/lang/de/messages.po
|
$> php bin/console po2php view/lang/de/messages.po
|
||||||
|
|
||||||
The output of the script will be placed at view/lang/de/strings.php where
|
The output of the script will be placed at view/lang/de/strings.php where
|
||||||
friendica is expecting it, so you can test your translation immediately.
|
friendica is expecting it, so you can test your translation immediately.
|
||||||
|
@ -62,7 +62,7 @@ Otherwise your work might get lost, when the translation from Transifex is inclu
|
||||||
Utilities
|
Utilities
|
||||||
---------
|
---------
|
||||||
|
|
||||||
Additional to the po2php script there are some more utilities for translation in the "util" directory of the friendica source tree.
|
Additional to the po2php command there are some more utilities for translation in the console.
|
||||||
If you only want to translate friendica into another language you wont need any of these tools most likely but it gives you an idea how the translation process of friendica works.
|
If you only want to translate friendica into another language you wont need any of these tools most likely but it gives you an idea how the translation process of friendica works.
|
||||||
|
|
||||||
For further information see the utils/README file.
|
For further information see the utils/README file.
|
||||||
|
@ -90,9 +90,9 @@ To update the translation files after you have translated strings of e.g. Espera
|
||||||
|
|
||||||
$> tx pull -l eo
|
$> tx pull -l eo
|
||||||
|
|
||||||
And then use the `po2php` utility described above to convert the `messages.po` file to the `strings.php` file Friendica is loading.
|
And then use the `po2php` command described above to convert the `messages.po` file to the `strings.php` file Friendica is loading.
|
||||||
|
|
||||||
$> php util/po2php.php view/lang/eo/messages.po
|
$> php bin/console po2php view/lang/eo/messages.po
|
||||||
|
|
||||||
Afterwards, just commit the two changed files to a feature branch of your Friendica repository, push the changes to github and open a pull request for your changes.
|
Afterwards, just commit the two changed files to a feature branch of your Friendica repository, push the changes to github and open a pull request for your changes.
|
||||||
|
|
||||||
|
|
|
@ -29,17 +29,17 @@ The location of the translated files in the source tree is
|
||||||
/view/lang/LNG-CODE/
|
/view/lang/LNG-CODE/
|
||||||
where LNG-CODE is the language code used, e.g. de for German or fr for French.
|
where LNG-CODE is the language code used, e.g. de for German or fr for French.
|
||||||
The translated strings come as a "message.po" file from transifex which needs to be translated into the PHP file friendica uses.
|
The translated strings come as a "message.po" file from transifex which needs to be translated into the PHP file friendica uses.
|
||||||
To do so, place the file in the directory mentioned above and use the "po2php" utility from the util directory of your friendica installation.
|
To do so, place the file in the directory mentioned above and use the "po2php" command from the Friendica Console.
|
||||||
|
|
||||||
Assuming you want to convert the German localization which is placed in view/lang/de/message.po you would do the following.
|
Assuming you want to convert the German localization which is placed in view/lang/de/message.po you would do the following.
|
||||||
|
|
||||||
1. Navigate at the command prompt to the base directory of your
|
1. Navigate at the command prompt to the base directory of your
|
||||||
friendica installation
|
friendica installation
|
||||||
|
|
||||||
2. Execute the po2php script, which will place the translation
|
2. Execute the po2php command, which will place the translation
|
||||||
in the strings.php file that is used by friendica.
|
in the strings.php file that is used by friendica.
|
||||||
|
|
||||||
$> php util/po2php.php view/lang/de/messages.po
|
$> php bin/console po2php view/lang/de/messages.po
|
||||||
|
|
||||||
The output of the script will be placed at view/lang/de/strings.php where
|
The output of the script will be placed at view/lang/de/strings.php where
|
||||||
friendica is expecting it, so you can test your translation immediately.
|
friendica is expecting it, so you can test your translation immediately.
|
||||||
|
@ -64,7 +64,7 @@ Otherwise your work might get lost, when the translation from Transifex is inclu
|
||||||
Utilities
|
Utilities
|
||||||
---------
|
---------
|
||||||
|
|
||||||
Additional to the po2php script there are some more utilities for translation in the "util" directory of the friendica source tree.
|
Additional to the po2php command there are some more utilities for translation in the console.
|
||||||
If you only want to translate friendica into another language you wont need any of these tools most likely but it gives you an idea how the translation process of friendica works.
|
If you only want to translate friendica into another language you wont need any of these tools most likely but it gives you an idea how the translation process of friendica works.
|
||||||
|
|
||||||
For further information see the utils/README file.
|
For further information see the utils/README file.
|
||||||
|
@ -92,9 +92,9 @@ To update the translation files after you have translated strings of e.g. Espera
|
||||||
|
|
||||||
$> tx pull -l eo
|
$> tx pull -l eo
|
||||||
|
|
||||||
And then use the `po2php` utility described above to convert the `messages.po` file to the `strings.php` file Friendica is loading.
|
And then use the `po2php` command described above to convert the `messages.po` file to the `strings.php` file Friendica is loading.
|
||||||
|
|
||||||
$> php util/po2php.php view/lang/eo/messages.po
|
$> php bin/console po2php view/lang/eo/messages.po
|
||||||
|
|
||||||
Afterwards, just commit the two changed files to a feature branch of your Friendica repository, push the changes to github and open a pull request for your changes.
|
Afterwards, just commit the two changed files to a feature branch of your Friendica repository, push the changes to github and open a pull request for your changes.
|
||||||
|
|
||||||
|
|
|
@ -107,7 +107,7 @@ Xgettext and .po workflow
|
||||||
of the many .po editors out there, like QtLinguist
|
of the many .po editors out there, like QtLinguist
|
||||||
|
|
||||||
5. run
|
5. run
|
||||||
$ php util/po2php.php view/lang/<language>/messages.po
|
$ php bin/console po2php view/lang/<language>/messages.po
|
||||||
to create the strings.php file
|
to create the strings.php file
|
||||||
|
|
||||||
When strings are added or modified in source, you could run
|
When strings are added or modified in source, you could run
|
||||||
|
|
151
util/po2php.php
151
util/po2php.php
|
@ -1,151 +0,0 @@
|
||||||
#!/usr/bin/env php
|
|
||||||
<?php
|
|
||||||
define("DQ_ESCAPE", "__DQ__");
|
|
||||||
|
|
||||||
function po2php_run(&$argv, &$argc) {
|
|
||||||
|
|
||||||
if ($argc!=2) {
|
|
||||||
print "Usage: ".$argv[0]." <file.po>\n\n";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$pofile = $argv[1];
|
|
||||||
$outfile = dirname($pofile)."/strings.php";
|
|
||||||
|
|
||||||
if (strstr($outfile, 'util')) {
|
|
||||||
$lang = 'en';
|
|
||||||
} else {
|
|
||||||
$lang = str_replace('-','_',basename(dirname($pofile)));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!file_exists($pofile)) {
|
|
||||||
print "Unable to find '$pofile'\n";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
print "Out to '$outfile'\n";
|
|
||||||
|
|
||||||
$out = "<?php\n\n";
|
|
||||||
|
|
||||||
$infile = file($pofile);
|
|
||||||
$k = "";
|
|
||||||
$v = "";
|
|
||||||
$arr = false;
|
|
||||||
$ink = false;
|
|
||||||
$inv = false;
|
|
||||||
$escape_s_exp = '|[^\\\\]\$[a-z]|';
|
|
||||||
function escape_s($match) {
|
|
||||||
return str_replace('$','\$',$match[0]);
|
|
||||||
}
|
|
||||||
foreach ($infile as $l) {
|
|
||||||
$l = str_replace('\"', DQ_ESCAPE, $l);
|
|
||||||
$len = strlen($l);
|
|
||||||
if ($l[0] == "#") {
|
|
||||||
$l = "";
|
|
||||||
}
|
|
||||||
if (substr($l, 0, 15) == '"Plural-Forms: ') {
|
|
||||||
$match = [];
|
|
||||||
preg_match("|nplurals=([0-9]*); *plural=(.*)[;\\\\]|", $l, $match);
|
|
||||||
$cond = str_replace('n', '$n', $match[2]);
|
|
||||||
// define plural select function if not already defined
|
|
||||||
$fnname = 'string_plural_select_' . $lang;
|
|
||||||
$out .= 'if(! function_exists("' . $fnname . '")) {' . "\n";
|
|
||||||
$out .= 'function '. $fnname . '($n){' . "\n";
|
|
||||||
$out .= ' return ' . $cond . ';' . "\n";
|
|
||||||
$out .= '}}' . "\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($k != "" && substr($l, 0, 7) == "msgstr ") {
|
|
||||||
if ($ink) {
|
|
||||||
$ink = false;
|
|
||||||
$out .= '$a->strings["' . $k . '"] = ';
|
|
||||||
}
|
|
||||||
if ($inv) {
|
|
||||||
$inv = false;
|
|
||||||
$out .= '"' . $v . '"';
|
|
||||||
}
|
|
||||||
|
|
||||||
$v = substr($l, 8, $len - 10);
|
|
||||||
$v = preg_replace_callback($escape_s_exp, 'escape_s', $v);
|
|
||||||
$inv = true;
|
|
||||||
//$out .= $v;
|
|
||||||
}
|
|
||||||
if ($k != "" && substr($l, 0, 7) == "msgstr[") {
|
|
||||||
if ($ink) {
|
|
||||||
$ink = false;
|
|
||||||
$out .= '$a->strings["' . $k . '"] = ';
|
|
||||||
}
|
|
||||||
if ($inv) {
|
|
||||||
$inv = false;
|
|
||||||
$out .= '"' . $v . '"';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$arr) {
|
|
||||||
$arr=True;
|
|
||||||
$out .= "[\n";
|
|
||||||
}
|
|
||||||
$match = [];
|
|
||||||
preg_match("|\[([0-9]*)\] (.*)|", $l, $match);
|
|
||||||
$out .= "\t"
|
|
||||||
. preg_replace_callback($escape_s_exp, 'escape_s', $match[1])
|
|
||||||
. " => "
|
|
||||||
. preg_replace_callback($escape_s_exp, 'escape_s', $match[2])
|
|
||||||
. ",\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (substr($l, 0, 6) == "msgid_") {
|
|
||||||
$ink = false;
|
|
||||||
$out .= '$a->strings["' . $k . '"] = ';
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($ink) {
|
|
||||||
$k .= trim($l, "\"\r\n");
|
|
||||||
$k = preg_replace_callback($escape_s_exp, 'escape_s', $k);
|
|
||||||
//$out .= '$a->strings['.$k.'] = ';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (substr($l, 0, 6) == "msgid ") {
|
|
||||||
if ($inv) {
|
|
||||||
$inv = false;
|
|
||||||
$out .= '"' . $v . '"';
|
|
||||||
}
|
|
||||||
if ($k != "") {
|
|
||||||
$out .= ($arr) ? "];\n" : ";\n";
|
|
||||||
}
|
|
||||||
$arr = false;
|
|
||||||
$k = str_replace("msgid ", "", $l);
|
|
||||||
if ($k != '""') {
|
|
||||||
$k = trim($k, "\"\r\n");
|
|
||||||
} else {
|
|
||||||
$k = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
$k = preg_replace_callback($escape_s_exp, 'escape_s', $k);
|
|
||||||
$ink = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($inv && substr($l, 0, 6) != "msgstr") {
|
|
||||||
$v .= trim($l, "\"\r\n");
|
|
||||||
$v = preg_replace_callback($escape_s_exp, 'escape_s', $v);
|
|
||||||
//$out .= '$a->strings['.$k.'] = ';
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($inv) {
|
|
||||||
$inv = false;
|
|
||||||
$out .= '"' . $v . '"';
|
|
||||||
}
|
|
||||||
if ($k != "") {
|
|
||||||
$out .= ($arr ? "];\n" : ";\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
$out = str_replace(DQ_ESCAPE, '\"', $out);
|
|
||||||
file_put_contents($outfile, $out);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (array_search(__FILE__, get_included_files()) === 0) {
|
|
||||||
po2php_run($_SERVER["argv"],$_SERVER["argc"]);
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user