Translation =========== Make text translatable ---------------------- In HTML or PHP wrap it like this ``t('This is some text'));?>`` or this ``t('This is some text'));?>`` For the right date format use ``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');`` .. note:: ``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: ~~~~~~~~ .. code-block:: php t('Select file from')) . ' '; ?>t('local filesystem'));?>t(' or ')); ?>t('cloud'));?> 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 on translation string: ~~~~~~~~~~~~~~~~~~~~~~~~~~~ Html tags in translation strings is ugly but usually translators can handle this. What about variable in the strings? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If you need to add variables to the translation strings do it like this: .. code-block:: php $l->t('%s is available. Get more information', array($data['versionstring'], $data['web'])); 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/.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. Translation sync jobs: ~~~~~~~~~~~~~~~~~~~~~~ https://ci.owncloud.org/view/translation-sync/ **Caution: information below is in general not needed!** Manual quick translation update: -------------------------------- .. code-block:: bash cd l10n/ && perl l10n.pl read && tx push -s && tx pull -a && perl l10n.pl write && cd .. The translation script requires Locale::PO, installable via ``apt-get install liblocale-po-perl`` Configure transifex ------------------- .. code-block:: bash tx init for resource in calendar contacts core files media gallery settings do tx set --auto-local -r nextcloud.$resource "/$resource.po" --source-language=en \ --source-file "templates/$resource.pot" --execute done .. _Transifex: https://www.transifex.com/nextcloud/