parent
5a5284b94e
commit
8fc558b8e6
7 changed files with 68 additions and 68 deletions
|
@ -24,12 +24,12 @@ If you want to get your work into the source tree yourself, feel free to do so a
|
||||||
The process is simple and friendica ships with all the tools necessary.
|
The process is simple and friendica ships with all the tools necessary.
|
||||||
|
|
||||||
The location of the translated files in the source tree is
|
The location of the translated files in the source tree is
|
||||||
/view/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" utility from the util directory of your friendica installation.
|
||||||
|
|
||||||
Assuming you want to convert the German localization which is placed in view/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
|
||||||
|
@ -37,9 +37,9 @@ Assuming you want to convert the German localization which is placed in view/de/
|
||||||
2. Execute the po2php script, which will place the translation
|
2. Execute the po2php script, 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/de/messages.po
|
$> php util/po2php.php view/lang/de/messages.po
|
||||||
|
|
||||||
The output of the script will be placed at view/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.
|
||||||
|
|
||||||
3. Visit your friendica page to check if it still works in the language you
|
3. Visit your friendica page to check if it still works in the language you
|
||||||
|
@ -50,7 +50,7 @@ Assuming you want to convert the German localization which is placed in view/de/
|
||||||
not give any output if the file is ok but might give a hint for
|
not give any output if the file is ok but might give a hint for
|
||||||
searching the bug in the file.
|
searching the bug in the file.
|
||||||
|
|
||||||
$> php view/de/strings.php
|
$> php view/lang/de/strings.php
|
||||||
|
|
||||||
4. commit the two files with a meaningful commit message to your git
|
4. commit the two files with a meaningful commit message to your git
|
||||||
repository, push it to your fork of the friendica repository at github and
|
repository, push it to your fork of the friendica repository at github and
|
||||||
|
|
|
@ -24,12 +24,12 @@ If you want to get your work into the source tree yourself, feel free to do so a
|
||||||
The process is simple and friendica ships with all the tools necessary.
|
The process is simple and friendica ships with all the tools necessary.
|
||||||
|
|
||||||
The location of the translated files in the source tree is
|
The location of the translated files in the source tree is
|
||||||
/view/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" utility from the util directory of your friendica installation.
|
||||||
|
|
||||||
Assuming you want to convert the German localization which is placed in view/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
|
||||||
|
@ -37,9 +37,9 @@ Assuming you want to convert the German localization which is placed in view/de/
|
||||||
2. Execute the po2php script, which will place the translation
|
2. Execute the po2php script, 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/de/messages.po
|
$> php util/po2php.php view/lang/de/messages.po
|
||||||
|
|
||||||
The output of the script will be placed at view/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.
|
||||||
|
|
||||||
3. Visit your friendica page to check if it still works in the language you
|
3. Visit your friendica page to check if it still works in the language you
|
||||||
|
@ -50,7 +50,7 @@ Assuming you want to convert the German localization which is placed in view/de/
|
||||||
not give any output if the file is ok but might give a hint for
|
not give any output if the file is ok but might give a hint for
|
||||||
searching the bug in the file.
|
searching the bug in the file.
|
||||||
|
|
||||||
$> php view/de/strings.php
|
$> php view/lang/de/strings.php
|
||||||
|
|
||||||
4. commit the two files with a meaningful commit message to your git
|
4. commit the two files with a meaningful commit message to your git
|
||||||
repository, push it to your fork of the friendica repository at github and
|
repository, push it to your fork of the friendica repository at github and
|
||||||
|
|
|
@ -41,7 +41,7 @@ function get_browser_language() {
|
||||||
|
|
||||||
if(isset($langs) && count($langs)) {
|
if(isset($langs) && count($langs)) {
|
||||||
foreach ($langs as $lang => $v) {
|
foreach ($langs as $lang => $v) {
|
||||||
if(file_exists("view/$lang") && is_dir("view/$lang")) {
|
if(file_exists("view/lang/$lang") && is_dir("view/lang/$lang")) {
|
||||||
$preferred = $lang;
|
$preferred = $lang;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -112,8 +112,8 @@ function load_translation_table($lang) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(file_exists("view/$lang/strings.php")) {
|
if(file_exists("view/lang/$lang/strings.php")) {
|
||||||
include("view/$lang/strings.php");
|
include("view/lang/$lang/strings.php");
|
||||||
}
|
}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
@ -171,11 +171,11 @@ function string_plural_select_default($n) {
|
||||||
*/
|
*/
|
||||||
function get_avaiable_languages() {
|
function get_avaiable_languages() {
|
||||||
$lang_choices = array();
|
$lang_choices = array();
|
||||||
$langs = glob('view/*/strings.php'); /**/
|
$langs = glob('view/lang/*/strings.php'); /**/
|
||||||
|
|
||||||
if(is_array($langs) && count($langs)) {
|
if(is_array($langs) && count($langs)) {
|
||||||
if(! in_array('view/en/strings.php',$langs))
|
if(! in_array('view/lang/en/strings.php',$langs))
|
||||||
$langs[] = 'view/en/';
|
$langs[] = 'view/lang/en/';
|
||||||
asort($langs);
|
asort($langs);
|
||||||
foreach($langs as $l) {
|
foreach($langs as $l) {
|
||||||
$t = explode("/",$l);
|
$t = explode("/",$l);
|
||||||
|
|
|
@ -581,14 +581,14 @@ function get_intltext_template($s) {
|
||||||
if(! isset($lang))
|
if(! isset($lang))
|
||||||
$lang = 'en';
|
$lang = 'en';
|
||||||
|
|
||||||
if(file_exists("view/$lang$engine/$s")) {
|
if(file_exists("view/lang/$lang$engine/$s")) {
|
||||||
$stamp1 = microtime(true);
|
$stamp1 = microtime(true);
|
||||||
$content = file_get_contents("view/$lang$engine/$s");
|
$content = file_get_contents("view/lang/$lang$engine/$s");
|
||||||
$a->save_timestamp($stamp1, "file");
|
$a->save_timestamp($stamp1, "file");
|
||||||
return $content;
|
return $content;
|
||||||
} elseif(file_exists("view/en$engine/$s")) {
|
} elseif(file_exists("view/lang/en$engine/$s")) {
|
||||||
$stamp1 = microtime(true);
|
$stamp1 = microtime(true);
|
||||||
$content = file_get_contents("view/en$engine/$s");
|
$content = file_get_contents("view/lang/en$engine/$s");
|
||||||
$a->save_timestamp($stamp1, "file");
|
$a->save_timestamp($stamp1, "file");
|
||||||
return $content;
|
return $content;
|
||||||
} else {
|
} else {
|
||||||
|
@ -928,11 +928,11 @@ function contact_block() {
|
||||||
* string 'thumb' => The contact picture
|
* string 'thumb' => The contact picture
|
||||||
* string 'click' => js code which is performed when clicking on the contact
|
* string 'click' => js code which is performed when clicking on the contact
|
||||||
* @param boolean $redirect If true try to use the redir url if it's possible
|
* @param boolean $redirect If true try to use the redir url if it's possible
|
||||||
* @param string $class CSS class for the
|
* @param string $class CSS class for the
|
||||||
* @param boolean $textmode If true display the contacts as text links
|
* @param boolean $textmode If true display the contacts as text links
|
||||||
* if false display the contacts as picture links
|
* if false display the contacts as picture links
|
||||||
|
|
||||||
* @return string Formatted html
|
* @return string Formatted html
|
||||||
*/
|
*/
|
||||||
function micropro($contact, $redirect = false, $class = '', $textmode = false) {
|
function micropro($contact, $redirect = false, $class = '', $textmode = false) {
|
||||||
|
|
||||||
|
@ -2087,7 +2087,7 @@ function formatBytes($bytes, $precision = 2) {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief translate and format the networkname of a contact
|
* @brief translate and format the networkname of a contact
|
||||||
*
|
*
|
||||||
* @param string $network
|
* @param string $network
|
||||||
* Networkname of the contact (e.g. dfrn, rss and so on)
|
* Networkname of the contact (e.g. dfrn, rss and so on)
|
||||||
* @param sting $url
|
* @param sting $url
|
||||||
|
@ -2132,7 +2132,7 @@ function text_highlight($s,$lang) {
|
||||||
$s = trim(html_entity_decode($s,ENT_COMPAT));
|
$s = trim(html_entity_decode($s,ENT_COMPAT));
|
||||||
$s = str_replace(" ","\t",$s);
|
$s = str_replace(" ","\t",$s);
|
||||||
|
|
||||||
// The highlighter library insists on an opening php tag for php code blocks. If
|
// The highlighter library insists on an opening php tag for php code blocks. If
|
||||||
// it isn't present, nothing is highlighted. So we're going to see if it's present.
|
// it isn't present, nothing is highlighted. So we're going to see if it's present.
|
||||||
// If not, we'll add it, and then quietly remove it after we get the processed output back.
|
// If not, we'll add it, and then quietly remove it after we get the processed output back.
|
||||||
|
|
||||||
|
@ -2141,7 +2141,7 @@ function text_highlight($s,$lang) {
|
||||||
$s = '<?php' . "\n" . $s;
|
$s = '<?php' . "\n" . $s;
|
||||||
$tag_added = true;
|
$tag_added = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$renderer = new Text_Highlighter_Renderer_HTML($options);
|
$renderer = new Text_Highlighter_Renderer_HTML($options);
|
||||||
$hl = Text_Highlighter::factory($lang);
|
$hl = Text_Highlighter::factory($lang);
|
||||||
|
|
72
util/README
72
util/README
|
@ -1,47 +1,47 @@
|
||||||
Utilities
|
Utilities
|
||||||
|
|
||||||
typo.php - is a crude syntax checker to avoid checking in files with simple
|
typo.php - is a crude syntax checker to avoid checking in files with simple
|
||||||
typos. It basically just loads each of our project files at once. Run from
|
typos. It basically just loads each of our project files at once. Run from
|
||||||
cmdline and see if any parsing errors are reported.
|
cmdline and see if any parsing errors are reported.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Internationalisation
|
Internationalisation
|
||||||
|
|
||||||
extract.php - extracts translatable strings from our project files. It
|
extract.php - extracts translatable strings from our project files. It
|
||||||
currently doesn't pick up strings in other libraries we might be using such as
|
currently doesn't pick up strings in other libraries we might be using such as
|
||||||
tinymce and the HTML parsers.
|
tinymce and the HTML parsers.
|
||||||
|
|
||||||
In order for extract to do its job, every use of the t() translation function
|
In order for extract to do its job, every use of the t() translation function
|
||||||
must be preceded by one space. The string also can not contain parentheses. If
|
must be preceded by one space. The string also can not contain parentheses. If
|
||||||
parens are required in a string which requires translation, please use hex escapes.
|
parens are required in a string which requires translation, please use hex escapes.
|
||||||
|
|
||||||
\x28 = (
|
\x28 = (
|
||||||
\x29 = )
|
\x29 = )
|
||||||
|
|
||||||
This only applies to English. Other languages may use parens in strings
|
This only applies to English. Other languages may use parens in strings
|
||||||
because they don't require extraction.
|
because they don't require extraction.
|
||||||
|
|
||||||
strings.php - a recent run of the strings program. This provides output that
|
strings.php - a recent run of the strings program. This provides output that
|
||||||
is suitable for direct inclusion in the program.
|
is suitable for direct inclusion in the program.
|
||||||
|
|
||||||
There are also translatable strings in the various files in the view/en
|
There are also translatable strings in the various files in the view/lang/en
|
||||||
directory. By setting $lang = 'something' in .htconfig.php, the application
|
directory. By setting $lang = 'something' in .htconfig.php, the application
|
||||||
will search for view/something/filename prior to the English version in
|
will search for view/lang/something/filename prior to the English version in
|
||||||
view/en/filename when loading templates and view files.
|
view/lang/en/filename when loading templates and view files.
|
||||||
|
|
||||||
The translated string table should be placed in view/$lang/strings.php for
|
The translated string table should be placed in view/lang/$lang/strings.php for
|
||||||
automatic inclusion.
|
automatic inclusion.
|
||||||
|
|
||||||
You are not restricted to using known languages. You may also use this to
|
You are not restricted to using known languages. You may also use this to
|
||||||
translate the software into "pirate", "surfer" or merely to replace certain
|
translate the software into "pirate", "surfer" or merely to replace certain
|
||||||
text which you don't care for.
|
text which you don't care for.
|
||||||
|
|
||||||
Note: The view/en directory contains many HTML template files, some of which
|
Note: The view/lang/en directory contains many HTML template files, some of which
|
||||||
only have a few words of English text amongst the HTML. Over time we will move
|
only have a few words of English text amongst the HTML. Over time we will move
|
||||||
the translation to the replace_macros() function which calls these files and
|
the translation to the replace_macros() function which calls these files and
|
||||||
then relocate the files to the view directory. The files in the top-level view
|
then relocate the files to the view directory. The files in the top-level view
|
||||||
directory are template files which do not require translation.
|
directory are template files which do not require translation.
|
||||||
|
|
||||||
|
|
||||||
Placeholders
|
Placeholders
|
||||||
|
@ -61,7 +61,7 @@ e.g.
|
||||||
|
|
||||||
Plural
|
Plural
|
||||||
|
|
||||||
The tt() function supports plural form. Script extract.php write this in
|
The tt() function supports plural form. Script extract.php write this in
|
||||||
strings.php as an array, one string for every plural form language supports:
|
strings.php as an array, one string for every plural form language supports:
|
||||||
|
|
||||||
$a->string["%d message sent"] = Array(
|
$a->string["%d message sent"] = Array(
|
||||||
|
@ -82,12 +82,12 @@ Xgettext and .po workflow
|
||||||
This script runs xgettext on source tree, extracting strings from t() and tt()
|
This script runs xgettext on source tree, extracting strings from t() and tt()
|
||||||
functions, and creates a util/messages.po file.
|
functions, and creates a util/messages.po file.
|
||||||
|
|
||||||
$ cd util; ./run_xgettext.sh
|
$ cd util; ./run_xgettext.sh
|
||||||
|
|
||||||
2. copy util/messages.po to view/<langauage>/messages.po
|
2. copy util/messages.po to view/lang/<language>/messages.po
|
||||||
Replace <language> with the language you are working on - e.g. 'es', 'fr', 'de', etc.
|
Replace <language> with the language you are working on - e.g. 'es', 'fr', 'de', etc.
|
||||||
|
|
||||||
3. open view/<langauage>/messages.po with a text editor and fill in infos in
|
3. open view/lang/<language>/messages.po with a text editor and fill in infos in
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
"Language: \n"
|
"Language: \n"
|
||||||
|
@ -97,30 +97,30 @@ Xgettext and .po workflow
|
||||||
"Language-Team: Pirate Friendika <pirate-friendika-ml@host.com>\n"
|
"Language-Team: Pirate Friendika <pirate-friendika-ml@host.com>\n"
|
||||||
"Language: pi\n"
|
"Language: pi\n"
|
||||||
)
|
)
|
||||||
|
|
||||||
For the line
|
For the line
|
||||||
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
|
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
|
||||||
read GNU gettext manual at
|
read GNU gettext manual at
|
||||||
http://www.gnu.org/software/hello/manual/gettext/Plural-forms.html
|
http://www.gnu.org/software/hello/manual/gettext/Plural-forms.html
|
||||||
|
|
||||||
4. You could then translate the strings in text editor, but I suggest to use one
|
4. You could then translate the strings in text editor, but I suggest to use one
|
||||||
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/<language>/messages.po
|
$ php util/po2php.php 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
|
||||||
$ cd util; ./run_xgettext.sh ../view/<language>/messages.po
|
$ cd util; ./run_xgettext.sh ../view/lang/<language>/messages.po
|
||||||
to extract strings from source files and join them with the existing .po file:
|
to extract strings from source files and join them with the existing .po file:
|
||||||
new strings are added, the existing are not overwritten.
|
new strings are added, the existing are not overwritten.
|
||||||
|
|
||||||
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/<language>/strings.php
|
$ php util/php2po.php 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.
|
||||||
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -67,7 +67,7 @@ os.chdir(path)
|
||||||
# get the translators
|
# get the translators
|
||||||
print('> getting translators')
|
print('> getting translators')
|
||||||
intrans = False
|
intrans = False
|
||||||
for f in glob.glob(path+'/view/*/messages.po'):
|
for f in glob.glob(path+'/view/lang/*/messages.po'):
|
||||||
i = open(f, 'r')
|
i = open(f, 'r')
|
||||||
l = i.readlines()
|
l = i.readlines()
|
||||||
i.close()
|
i.close()
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
// Tired of chasing typos and finding them after a commit.
|
// Tired of chasing typos and finding them after a commit.
|
||||||
// Run this from cmdline in basedir and quickly see if we've
|
// Run this from cmdline in basedir and quickly see if we've
|
||||||
// got any parse errors in our application files.
|
// got any parse errors in our application files.
|
||||||
|
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
||||||
ini_set('log_errors','0');
|
ini_set('log_errors','0');
|
||||||
|
|
||||||
include 'boot.php';
|
include 'boot.php';
|
||||||
|
|
||||||
$a = new App();
|
$a = new App();
|
||||||
|
|
||||||
if(x($a->config,'php_path'))
|
if(x($a->config,'php_path'))
|
||||||
|
@ -29,7 +29,7 @@
|
||||||
foreach($files as $file) {
|
foreach($files as $file) {
|
||||||
passthru("$phpath -l $file", $ret); $ret===0 or die();
|
passthru("$phpath -l $file", $ret); $ret===0 or die();
|
||||||
}
|
}
|
||||||
|
|
||||||
echo "Directory: object\n";
|
echo "Directory: object\n";
|
||||||
$files = glob('object/*.php');
|
$files = glob('object/*.php');
|
||||||
foreach($files as $file) {
|
foreach($files as $file) {
|
||||||
|
@ -53,7 +53,7 @@
|
||||||
echo 'util/strings.php' . "\n";
|
echo 'util/strings.php' . "\n";
|
||||||
passthru("$phpath -l util/strings.php", $ret); $ret===0 or die();
|
passthru("$phpath -l util/strings.php", $ret); $ret===0 or die();
|
||||||
|
|
||||||
$files = glob('view/*/strings.php');
|
$files = glob('view/lang/*/strings.php');
|
||||||
foreach($files as $file) {
|
foreach($files as $file) {
|
||||||
passthru("$phpath -l $file", $ret); $ret===0 or die();
|
passthru("$phpath -l $file", $ret); $ret===0 or die();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue