friendica/util
Adam Magness ead9d86236 More t()
Update more t() calls
2018-01-22 18:03:26 -05:00
..
bookmarklet-share2friendica Added Description for creating a bookmark 2017-11-25 01:49:18 +01:00
fpostit Use short form array syntax everywhere 2018-01-15 14:07:17 -05:00
.htaccess recreate fix for #2617 on correct branch 2016-06-18 08:16:09 -04:00
composer.phar Update Composer version 2018-01-14 19:01:08 -05:00
config added some x permissions to scripts 2017-12-05 07:21:21 +01:00
config.md config cli will also work with Friendica without change - so bringing it over 2013-01-14 15:50:39 -08:00
createdoxygen.php added some x permissions to scripts 2017-12-05 07:21:21 +01:00
credits.txt regen credits 2017-11-27 18:42:05 +01:00
docblox_errorchecker.php Use short form array syntax everywhere 2018-01-15 14:07:17 -05:00
Doxyfile Update Doxyfile (add src folder) 2017-05-16 17:36:19 +02:00
Doxygen.footer added code reference to docs 2015-12-03 00:06:11 +01:00
extract.php Use short form array syntax everywhere 2018-01-15 14:07:17 -05:00
friendica-to-smarty-tpl.py move tpl scripts to util 2013-02-04 22:55:15 -07:00
global_community_block.php More t() 2018-01-22 18:03:26 -05:00
global_community_silence.php Use short form array syntax everywhere 2018-01-15 14:07:17 -05:00
htconfig.vagrant.php Remove RINO2 and RINO3 2018-01-19 11:27:53 -05:00
maintenance.php Update functions and calls 2018-01-22 18:03:26 -05:00
make_credits.py add Ratten to the special contributors who are not found in git and messages.po files 2017-11-26 10:58:15 +01:00
messages.po regenerated master messages.po file 2018-01-15 07:37:47 +01:00
minifyjs.sh Update all references to webtoolkit.base64 2018-01-17 21:23:51 -05:00
php2po.php Use short form array syntax everywhere 2018-01-15 14:07:17 -05:00
po2php.php Use short form array syntax everywhere 2018-01-15 14:07:17 -05:00
README More t() 2018-01-22 18:03:26 -05:00
run_xgettext.sh exclude addons-extra directory from the translation as well 2015-12-14 07:51:11 +01:00
strings.php Change plugin to addon 2018-01-20 07:48:22 -05:00
typo.php Avoid undefined class variables 2017-10-11 14:52:08 +00:00
updatetpl.py move tpl scripts to util 2013-02-04 22:55:15 -07:00
vagrant_provision.sh added some x permissions to scripts 2017-12-05 07:21:21 +01:00
vagrant_vhost.sh added some x permissions to scripts 2017-12-05 07:21:21 +01:00

Utilities

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
cmdline and see if any parsing errors are reported.



Internationalisation

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
the HTML parsers.

In order for extract to do its job, every use of the L10n::t() translation function
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.

\x28 = (
\x29 = )

This only applies to English. Other languages may use parens in strings
because they don't require extraction.

strings.php - a recent run of the strings program. This provides output that
is suitable for direct inclusion in the program.

There are also translatable strings in the various files in the view/lang/en
directory. By setting $lang = 'something' in .htconfig.php, the application
will search for view/lang/something/filename prior to the English version in
view/lang/en/filename when loading templates and view files.

The translated string table should be placed in view/lang/$lang/strings.php for
automatic inclusion.

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
text which you don't care for.

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
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
directory are template files which do not require translation.


Placeholders

Do not translate placeholders in strings! Things like %s, %d, %1$s and $somename
are used to add dynamic content to the string.

%s represents a dynamic string, like in "Welcome to %s"
%d represents a dynamic number, like in "%d new messages"
$somename is a variable like in php
In %1$s %2$s,  the numbers are the position index of multiple dynamic content.
You could swap position in string of indexed placeholders.
e.g.
"%1$s's %2$s" => "John's photo", "John's item"
"%2$s di %1$s" => "foto di John", "elemento di John"


Plural

The L10n::tt() function supports plural form. Script extract.php write this in
strings.php as an array, one string for every plural form language supports:

$a->string["%d message sent"] = Array(
 0 => "%d message sent",
 1 => "%d messages sent",
);

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).

This is modelled after ngettext function of GNU gettext.
More info at http://www.gnu.org/software/hello/manual/gettext/Plural-forms.html


Xgettext and .po workflow

1. Run util/run_xgettext.sh script (on *unix sistems, with GNU xgettext installed)
	This script runs xgettext on source tree, extracting strings from L10n::t() and L10n::tt()
	functions, and creates a util/messages.po file.

	$ cd util; ./run_xgettext.sh

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.

3. open view/lang/<language>/messages.po with a text editor and fill in infos in
	"Last-Translator: FULL NAME <EMAIL@ADDRESS>"
	"Language-Team: LANGUAGE <LL@li.org>\n"
	"Language: \n"

	(eg:
	"Last-Translator: Guybrush Threepwood <gb@host.com>"
	"Language-Team: Pirate Friendika <pirate-friendika-ml@host.com>\n"
	"Language: pi\n"
	)

	For the line
	"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
	read GNU gettext manual at
	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
	of the many .po editors out there, like QtLinguist

5. run
	$ php util/po2php.php view/lang/<language>/messages.po
 	to create the strings.php file

When strings are added or modified in source, you could run
	$ cd util; ./run_xgettext.sh ../view/lang/<language>/messages.po
	to extract strings from source files and join them with the existing .po file:
	new strings are added, the existing are not overwritten.

If you already translated Friendica using strings.php, you could import your old
translation to messages.po. Run:
$ 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.