| @c This file is part of the GNU gettext manual. |
| @c Copyright (C) 1995-2020 Free Software Foundation, Inc. |
| @c See the file gettext.texi for copying conditions. |
| |
| @node Python |
| @subsection Python |
| @cindex Python |
| |
| @table @asis |
| @item RPMs |
| python |
| |
| @item Ubuntu packages |
| python |
| |
| @item File extension |
| @code{py} |
| |
| @item String syntax |
| @code{'abc'}, @code{u'abc'}, @code{r'abc'}, @code{ur'abc'}, |
| @*@code{"abc"}, @code{u"abc"}, @code{r"abc"}, @code{ur"abc"}, |
| @*@code{'''abc'''}, @code{u'''abc'''}, @code{r'''abc'''}, @code{ur'''abc'''}, |
| @*@code{"""abc"""}, @code{u"""abc"""}, @code{r"""abc"""}, @code{ur"""abc"""} |
| |
| @item gettext shorthand |
| @code{_('abc')} etc. |
| |
| @item gettext/ngettext functions |
| @code{gettext.gettext}, @code{gettext.dgettext}, |
| @code{gettext.ngettext}, @code{gettext.dngettext}, |
| also @code{ugettext}, @code{ungettext} |
| |
| @item textdomain |
| @code{gettext.textdomain} function, or |
| @code{gettext.install(@var{domain})} function |
| |
| @item bindtextdomain |
| @code{gettext.bindtextdomain} function, or |
| @code{gettext.install(@var{domain},@var{localedir})} function |
| |
| @item setlocale |
| not used by the gettext emulation |
| |
| @item Prerequisite |
| @code{import gettext} |
| |
| @item Use or emulate GNU gettext |
| emulate |
| |
| @item Extractor |
| @code{xgettext} |
| |
| @item Formatting with positions |
| @code{'...%(ident)d...' % @{ 'ident': value @}} |
| |
| @item Portability |
| fully portable |
| |
| @item po-mode marking |
| --- |
| @end table |
| |
| An example is available in the @file{examples} directory: @code{hello-python}. |
| |
| A note about format strings: Python supports format strings with unnamed |
| arguments, such as @code{'...%d...'}, and format strings with named arguments, |
| such as @code{'...%(ident)d...'}. The latter are preferable for |
| internationalized programs, for two reasons: |
| |
| @itemize @bullet |
| @item |
| When a format string takes more than one argument, the translator can provide |
| a translation that uses the arguments in a different order, if the format |
| string uses named arguments. For example, the translator can reformulate |
| @smallexample |
| "'%(volume)s' has only %(freespace)d bytes free." |
| @end smallexample |
| @noindent |
| to |
| @smallexample |
| "Only %(freespace)d bytes free on '%(volume)s'." |
| @end smallexample |
| @noindent |
| Additionally, the identifiers also provide some context to the translator. |
| |
| @item |
| In the context of plural forms, the format string used for the singular form |
| does not use the numeric argument in many languages. Even in English, one |
| prefers to write @code{"one hour"} instead of @code{"1 hour"}. Omitting |
| individual arguments from format strings like this is only possible with |
| the named argument syntax. (With unnamed arguments, Python -- unlike C -- |
| verifies that the format string uses all supplied arguments.) |
| @end itemize |