Translation

Make text translatable

In HTML or PHP wrap it like this
<?php p($l→t('This is some text'));?> or this
<?php print_unescaped($l→t('This is some text'));?> For the right
date format use <?php p($l→l('date', time()));?>. Change the way
dates are shown by editing /core/l10n/l10n-[lang].php To translate text
in javascript use: t('appname','text to translate');

print_unescaped() should be preferred only if you would like to
display HTML code. Otherwise, using p() is strongly preferred to
escape HTML characters against XSS attacks.

You shall never split sentences!

Reason:

Translators lose the context and they have no chance to possibly
re-arrange words.

Example:

Translators will translate:

Select file from

local filesystem

’ or "

cloud

Translating these individual strings results in local filesystem and
cloud losing case. The two white spaces surrounding or will get lost
while translating as well. For languages that have a different
grammatical order it prevents the translators from reordering the
sentence components.

Html in translation strings

Html tags can be kept out of translation strings like in the example
below. Then the detail of the tags is uncoupled from the translation.

What about variables in the strings?

If you need to add variables to the translation strings do it like this:

When there are multiple substitutions, number them. Then the translators
have the chance to re-order them if they need to translate the whole
sentence in a different word order.

Automated synchronization of translations

Multiple nightly jobs have been setup in order to synchronize
translations - it’s a multi-step process: perl l10n.pl read will
rescan all php and javascript files and generate the templates. The
templates are pushed to
Transifex (tx push -s).
All translations are pulled from
Transifex (tx pull -a).
perl l10n.pl write will write the php files containing the
translations. Finally the changes are pushed to git.

Please follow the steps below to add translation support to your app:

Create a folder l10n. Create the file ignorelist which can contain
files which shall not be scanned during step 4. Edit l10n/.tx/config
and copy/past a config section and adopt it by changing the app/folder
name. Run perl l10n.pl read with l10n Add the newly created
translation template (l10n/Templates/<appname>.pot) to git and commit
the changes above. After the next nightly sync job a new resource will
appear on Transifex and from now on every night the latest translations
will arrive.