From 4d6fb49b8f9a18d01b6d17defa21ea1c97940a23 Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Thu, 27 Nov 2014 10:35:07 +0100 Subject: [PATCH] [IMP] doc: move translations to reference documentation --- doc/guides/translations.rst | 97 ------------------------------ doc/guides/translations/po-export.png | Bin 6069 -> 0 bytes doc/reference.rst | 1 + doc/reference/translations.rst | 96 +++++++++++++++++++++++++++++ doc/reference/translations/po-export.png | Bin 0 -> 6069 bytes 5 files changed, 97 insertions(+), 97 deletions(-) delete mode 100644 doc/guides/translations.rst delete mode 100644 doc/guides/translations/po-export.png create mode 100644 doc/reference/translations.rst create mode 100644 doc/reference/translations/po-export.png diff --git a/doc/guides/translations.rst b/doc/guides/translations.rst deleted file mode 100644 index 792caa8..0000000 --- a/doc/guides/translations.rst +++ /dev/null @@ -1,97 +0,0 @@ -.. _guides/translations: - -=================== -Translating Modules -=================== - -Exporting translatable term -=========================== - -A number of terms in your modules are "implicitly translatable" as a result, -even if you haven't done any specific work towards translation you can export -your module's translatable terms and may find content to work with. - -.. todo:: needs technical features - -Translations export is done via the administration interface by logging into -the backend interface and opening :menuselection:`Settings --> Translations ---> Import / Export --> Export Translations` - -* leave the language to the default (new language/empty template) -* select the `PO File`_ format -* select your module -* click :guilabel:`Export` and download the file - -.. image:: translations/po-export.* - :align: center - :width: 75% - -This gives you a file called :file:`{yourmodule}.po` which should be renamed -to :file:`{yourmodule}.pot` and moved to the :file:`{yourmodule}/i18n/` -directory. The file is a *PO Template* which simply lists translatable strings -and from which actual translations (PO files) can be created. PO files can -be created using msginit_, with a dedicated translation tool like POEdit_ or -by simply copying the template to a new file called :file:`{language}.po`. -Translation files should be put in :file:`{yourmodule}/i18n/`, next to -:file:`{yourmodule}.pot`, and will be automatically loaded by Odoo when the -corresponding language is installed (via :menuselection:`Settings --> -Translations --> Load a Translation`) - -.. note:: translations for all loaded languages are also installed or updated - when installing or updating a module - -Implicit exports -================ - -Odoo automatically exports translatable strings from "data"-type content: - -* in non-QWeb views, all text nodes are exported as well as the content of - the ``string``, ``help``, ``sum``, ``confirm`` and ``placeholder`` - attributes -* QWeb templates (both server-side and client-side), all text nodes are - exported except inside ``t-translation="off"`` blocks, the content of the - ``title``, ``alt``, ``label`` and ``placeholder`` attributes are also - exported -* for :class:`~openerp.fields.Field`, unless their model is marked with - ``_translate = False``: - - * their ``string`` and ``help`` attributes are exported - * if ``selection`` is present and a list (or tuple), it's exported - * if their ``translate`` attribute is set to ``True``, all of their existing - values (across all records) are exported -* help/error messages of :attr:`~openerp.models.Model._constraints` and - :attr:`~openerp.models.Model._sql_constraints` are exported - -Explicit exports -================ - -When it comes to more "imperative" situations in Python code or Javascript -code, Odoo is not able to automatically export translatable terms and they -must be marked explicitly for export. This is done by wrapping a literal -string in a function call. - -In Python, the wrapping function is :func:`openerp.tools.translate._`:: - - title = _("Bank Accounts") - -In JavaScript, the wrapping function is generally :js:func:`openerp.web._t`: - -.. code-block:: javascript - - title = _t("Bank Accounts") - -.. warning:: - - only literal strings can be marked for exports, not expressions and not - variables. For situations where strings are formatted, this means the - format string must be marked not the formatted string:: - - # bad, the extract may work but it will not correctly translate the text - _("Scheduled meeting with %s" % invitee.name) - - # good - _("Scheduled meeting with %s") % invitee.name - -.. _PO File: http://en.wikipedia.org/wiki/Gettext#Translating -.. _msginit: http://www.gnu.org/software/gettext/manual/gettext.html#Creating -.. _POEdit: http://poedit.net/ diff --git a/doc/guides/translations/po-export.png b/doc/guides/translations/po-export.png deleted file mode 100644 index 82f8d5ad0118578c2f7f111f73cddbf54d2e0c67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6069 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 diff --git a/doc/reference.rst b/doc/reference.rst index 3e1597d..9c995ef 100644 --- a/doc/reference.rst +++ b/doc/reference.rst @@ -18,5 +18,6 @@ Reference reference/qweb reference/javascript + reference/translations reference/reports reference/workflows diff --git a/doc/reference/translations.rst b/doc/reference/translations.rst new file mode 100644 index 0000000..45616189 --- /dev/null +++ b/doc/reference/translations.rst @@ -0,0 +1,96 @@ +.. _reference/translations: + +=================== +Translating Modules +=================== + +Exporting translatable term +=========================== + +A number of terms in your modules are "implicitly translatable" as a result, +even if you haven't done any specific work towards translation you can export +your module's translatable terms and may find content to work with. + +.. todo:: needs technical features + +Translations export is done via the administration interface by logging into +the backend interface and opening :menuselection:`Settings --> Translations +--> Import / Export --> Export Translations` + +* leave the language to the default (new language/empty template) +* select the `PO File`_ format +* select your module +* click :guilabel:`Export` and download the file + +.. image:: translations/po-export.* + :align: center + :width: 75% + +This gives you a file called :file:`{yourmodule}.pot` which should be moved to +the :file:`{yourmodule}/i18n/` directory. The file is a *PO Template* which +simply lists translatable strings and from which actual translations (PO files) +can be created. PO files can be created using msginit_, with a dedicated +translation tool like POEdit_ or by simply copying the template to a new file +called :file:`{language}.po`. Translation files should be put in +:file:`{yourmodule}/i18n/`, next to :file:`{yourmodule}.pot`, and will be +automatically loaded by Odoo when the corresponding language is installed (via +:menuselection:`Settings --> Translations --> Load a Translation`) + +.. note:: translations for all loaded languages are also installed or updated + when installing or updating a module + +Implicit exports +================ + +Odoo automatically exports translatable strings from "data"-type content: + +* in non-QWeb views, all text nodes are exported as well as the content of + the ``string``, ``help``, ``sum``, ``confirm`` and ``placeholder`` + attributes +* QWeb templates (both server-side and client-side), all text nodes are + exported except inside ``t-translation="off"`` blocks, the content of the + ``title``, ``alt``, ``label`` and ``placeholder`` attributes are also + exported +* for :class:`~openerp.fields.Field`, unless their model is marked with + ``_translate = False``: + + * their ``string`` and ``help`` attributes are exported + * if ``selection`` is present and a list (or tuple), it's exported + * if their ``translate`` attribute is set to ``True``, all of their existing + values (across all records) are exported +* help/error messages of :attr:`~openerp.models.Model._constraints` and + :attr:`~openerp.models.Model._sql_constraints` are exported + +Explicit exports +================ + +When it comes to more "imperative" situations in Python code or Javascript +code, Odoo is not able to automatically export translatable terms and they +must be marked explicitly for export. This is done by wrapping a literal +string in a function call. + +In Python, the wrapping function is :func:`openerp._`:: + + title = _("Bank Accounts") + +In JavaScript, the wrapping function is generally :js:func:`openerp.web._t`: + +.. code-block:: javascript + + title = _t("Bank Accounts") + +.. warning:: + + Only literal strings can be marked for exports, not expressions and not + variables. For situations where strings are formatted, this means the + format string must be marked, not the formatted string:: + + # bad, the extract may work but it will not correctly translate the text + _("Scheduled meeting with %s" % invitee.name) + + # good + _("Scheduled meeting with %s") % invitee.name + +.. _PO File: http://en.wikipedia.org/wiki/Gettext#Translating +.. _msginit: http://www.gnu.org/software/gettext/manual/gettext.html#Creating +.. _POEdit: http://poedit.net/ diff --git a/doc/reference/translations/po-export.png b/doc/reference/translations/po-export.png new file mode 100644 index 0000000000000000000000000000000000000000..82f8d5ad0118578c2f7f111f73cddbf54d2e0c67 GIT binary patch literal 6069 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 literal 0 HcmV?d00001 -- 1.7.10.4