mirror of
https://github.com/nextcloud/documentation.git
synced 2026-01-04 10:46:21 +07:00
While fixing a few minor grammar things, I also felt it would be useful to add an extra sentence to explain why translation does not work in little pieces of a sentence. I work in Nepal and speak Nepali as well as English. The Nepali grammar order is subject-object-verb and it does not work to translate "The dog" "bit" "the man" as 3 pieces - the result has to also be reordered as "The dog" "to the man" "bit". "the man" also has to get an object indicator on it, which would be different if it was the subject of the sentence...
103 lines
3.7 KiB
ReStructuredText
103 lines
3.7 KiB
ReStructuredText
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');``
|
|
|
|
|
|
.. 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
|
|
|
|
<?php p($l->t('Select file from')) . ' '; ?><a href='#' id="browselink"><?php p($l->t('local filesystem'));?></a><?php p($l->t(' or ')); ?><a href='#' id="cloudlink"><?php p($l->t('cloud'));?></a>
|
|
|
|
Translators will translate:
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
* Select file from
|
|
* local filesystem
|
|
* ' or "
|
|
* cloud
|
|
|
|
By translating these individual strings for sure the case will be lost of local filesystem and cloud. The two white spaces with the 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 <a href="%s">more information</a>', 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/<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.
|
|
|
|
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 owncloud.$resource "<lang>/$resource.po" --source-language=en \
|
|
--source-file "templates/$resource.pot" --execute
|
|
done
|
|
|
|
.. _Transifex: https://www.transifex.net/projects/p/owncloud/
|