annotate 0.8.x/doc/messages.txt @ 507:56ea1ec02e16 stable

Back out r553 for now.
author jruigrok
date Tue, 22 Feb 2011 16:04:56 +0000
parents 32a242175da5
children
rev   line source
142
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
1 .. -*- mode: rst; encoding: utf-8 -*-
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
2
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
3 =============================
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
4 Working with Message Catalogs
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
5 =============================
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
6
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
7 .. contents:: Contents
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
8 :depth: 2
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
9 .. sectnum::
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
10
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
11
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
12 Introduction
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
13 ============
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
14
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
15 The ``gettext`` translation system enables you to mark any strings used in your
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
16 application as subject to localization, by wrapping them in functions such as
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
17 ``gettext(str)`` and ``ngettext(singular, plural, num)``. For brevity, the
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
18 ``gettext`` function is often aliased to ``_(str)``, so you can write:
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
19
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
20 .. code-block:: python
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
21
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
22 print _("Hello")
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
23
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
24 instead of just:
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
25
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
26 .. code-block:: python
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
27
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
28 print "Hello"
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
29
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
30 to make the string "Hello" localizable.
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
31
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
32 Message catalogs are collections of translations for such localizable messages
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
33 used in an application. They are commonly stored in PO (Portable Object) and MO
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
34 (Machine Object) files, the formats of which are defined by the GNU `gettext`_
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
35 tools and the GNU `translation project`_.
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
36
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
37 .. _`gettext`: http://www.gnu.org/software/gettext/
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
38 .. _`translation project`: http://sourceforge.net/projects/translation
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
39
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
40 The general procedure for building message catalogs looks something like this:
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
41
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
42 * use a tool (such as ``xgettext``) to extract localizable strings from the
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
43 code base and write them to a POT (PO Template) file.
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
44 * make a copy of the POT file for a specific locale (for example, "en_US")
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
45 and start translating the messages
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
46 * use a tool such as ``msgfmt`` to compile the locale PO file into an binary
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
47 MO file
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
48 * later, when code changes make it necessary to update the translations, you
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
49 regenerate the POT file and merge the changes into the various
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
50 locale-specific PO files, for example using ``msgmerge``
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
51
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
52 Python provides the `gettext module`_ as part of the standard library, which
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
53 enables applications to work with appropriately generated MO files.
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
54
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
55 .. _`gettext module`: http://docs.python.org/lib/module-gettext.html
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
56
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
57 As ``gettext`` provides a solid and well supported foundation for translating
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
58 application messages, Babel does not reinvent the wheel, but rather reuses this
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
59 infrastructure, and makes it easier to build message catalogs for Python
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
60 applications.
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
61
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
62
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
63 Message Extraction
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
64 ==================
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
65
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
66 Babel provides functionality similar to that of the ``xgettext`` program,
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
67 except that only extraction from Python source files is built-in, while support
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
68 for other file formats can be added using a simple extension mechanism.
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
69
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
70 Unlike ``xgettext``, which is usually invoked once for every file, the routines
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
71 for message extraction in Babel operate on directories. While the per-file
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
72 approach of ``xgettext`` works nicely with projects using a ``Makefile``,
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
73 Python projects rarely use ``make``, and thus a different mechanism is needed
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
74 for extracting messages from the heterogeneous collection of source files that
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
75 many Python projects are composed of.
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
76
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
77 When message extraction is based on directories instead of individual files,
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
78 there needs to be a way to configure which files should be treated in which
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
79 manner. For example, while many projects may contain ``.html`` files, some of
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
80 those files may be static HTML files that don't contain localizable message,
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
81 while others may be `Django`_ templates, and still others may contain `Genshi`_
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
82 markup templates. Some projects may even mix HTML files for different templates
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
83 languages (for whatever reason). Therefore the way in which messages are
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
84 extracted from source files can not only depend on the file extension, but
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
85 needs to be controllable in a precise manner.
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
86
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
87 .. _`Django`: http://www.djangoproject.com/
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
88 .. _`Genshi`: http://genshi.edgewall.org/
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
89
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
90 Babel accepts a configuration file to specify this mapping of files to
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
91 extraction methods, which is described below.
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
92
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
93
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
94 .. _`mapping`:
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
95
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
96 -------------------------------------------
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
97 Extraction Method Mapping and Configuration
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
98 -------------------------------------------
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
99
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
100 The mapping of extraction methods to files in Babel is done via a configuration
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
101 file. This file maps extended glob patterns to the names of the extraction
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
102 methods, and can also set various options for each pattern (which options are
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
103 available depends on the specific extraction method).
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
104
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
105 For example, the following configuration adds extraction of messages from both
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
106 Genshi markup templates and text templates:
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
107
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
108 .. code-block:: ini
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
109
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
110 # Extraction from Python source files
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
111
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
112 [python: foobar/**.py]
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
113
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
114 # Extraction from Genshi HTML and text templates
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
115
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
116 [genshi: foobar/**/templates/**.html]
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
117 ignore_tags = script,style
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
118 include_attrs = alt title summary
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
119
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
120 [genshi: foobar/**/templates/**.txt]
147
32a242175da5 Ported [147] to 0.4.x branch.
cmlenz
parents: 142
diff changeset
121 template_class = genshi.template:TextTemplate
142
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
122 encoding = ISO-8819-15
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
123
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
124 The configuration file syntax is based on the format commonly found in ``.INI``
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
125 files on Windows systems, and as supported by the ``ConfigParser`` module in
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
126 the Python standard libraries. Section names (the strings enclosed in square
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
127 brackets) specify both the name of the extraction method, and the extended glob
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
128 pattern to specify the files that this extraction method should be used for,
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
129 separated by a colon. The options in the sections are passed to the extraction
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
130 method. Which options are available is specific to the extraction method used.
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
131
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
132 The extended glob patterns used in this configuration are similar to the glob
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
133 patterns provided by most shells. A single asterisk (``*``) is a wildcard for
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
134 any number of characters (except for the pathname component separator "/"),
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
135 while a question mark (``?``) only matches a single character. In addition,
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
136 two subsequent asterisk characters (``**``) can be used to make the wildcard
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
137 match any directory level, so the pattern ``**.txt`` matches any file with the
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
138 extension ``.txt`` in any directory.
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
139
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
140 Lines that start with a ``#`` or ``;`` character are ignored and can be used
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
141 for comments. Empty lines are also ignored, too.
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
142
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
143 .. note:: if you're performing message extraction using the command Babel
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
144 provides for integration into ``setup.py`` scripts (see below), you
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
145 can also provide this configuration in a different way, namely as a
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
146 keyword argument to the ``setup()`` function.
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
147
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
148
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
149 ----------
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
150 Front-Ends
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
151 ----------
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
152
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
153 Babel provides two different front-ends to access its functionality for working
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
154 with message catalogs:
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
155
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
156 * A `Command-line interface <cmdline.html>`_, and
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
157 * `Integration with distutils/setuptools <setup.html>`_
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
158
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
159 Which one you choose depends on the nature of your project. For most modern
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
160 Python projects, the distutils/setuptools integration is probably more
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
161 convenient.
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
162
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
163
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
164 --------------------------
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
165 Writing Extraction Methods
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
166 --------------------------
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
167
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
168 Adding new methods for extracting localizable methods is easy. First, you'll
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
169 need to implement a function that complies with the following interface:
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
170
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
171 .. code-block:: python
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
172
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
173 def extract_xxx(fileobj, keywords, comment_tags, options):
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
174 """Extract messages from XXX files.
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
175
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
176 :param fileobj: the file-like object the messages should be extracted
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
177 from
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
178 :param keywords: a list of keywords (i.e. function names) that should
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
179 be recognized as translation functions
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
180 :param comment_tags: a list of translator tags to search for and
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
181 include in the results
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
182 :param options: a dictionary of additional options (optional)
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
183 :return: an iterator over ``(lineno, funcname, message, comments)``
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
184 tuples
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
185 :rtype: ``iterator``
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
186 """
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
187
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
188 .. note:: Any strings in the tuples produced by this function must be either
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
189 ``unicode`` objects, or ``str`` objects using plain ASCII characters.
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
190 That means that if sources contain strings using other encodings, it
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
191 is the job of the extractor implementation to do the decoding to
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
192 ``unicode`` objects.
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
193
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
194 Next, you should register that function as an entry point. This requires your
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
195 ``setup.py`` script to use `setuptools`_, and your package to be installed with
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
196 the necessary metadata. If that's taken care of, add something like the
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
197 following to your ``setup.py`` script:
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
198
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
199 .. code-block:: python
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
200
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
201 def setup(...
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
202
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
203 entry_points = """
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
204 [babel.extractors]
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
205 xxx = your.package:extract_xxx
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
206 """,
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
207
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
208 That is, add your extraction method to the entry point group
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
209 ``babel.extractors``, where the name of the entry point is the name that people
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
210 will use to reference the extraction method, and the value being the module and
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
211 the name of the function (separated by a colon) implementing the actual
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
212 extraction.
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
213
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
214 .. _`setuptools`: http://peak.telecommunity.com/DevCenter/setuptools
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
215
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
216 Comments Tags And Translator Comments Explanation
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
217 .................................................
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
218
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
219 First of all what are comments tags. Comments tags are excerpts of text to
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
220 search for in comments, only comments, right before the `python gettext`_
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
221 calls, as shown on the following example:
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
222
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
223 .. _`python gettext`: http://docs.python.org/lib/module-gettext.html
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
224
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
225 .. code-block:: python
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
226
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
227 # NOTE: This is a comment about `Foo Bar`
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
228 _('Foo Bar')
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
229
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
230 The comments tag for the above example would be ``NOTE:``, and the translator
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
231 comment for that tag would be ``This is a comment about `Foo Bar```.
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
232
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
233 The resulting output in the catalog template would be something like::
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
234
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
235 #. This is a comment about `Foo Bar`
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
236 #: main.py:2
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
237 msgid "Foo Bar"
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
238 msgstr ""
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
239
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
240 Now, you might ask, why would I need that?
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
241
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
242 Consider this simple case; you have a menu item called “Manual”. You know what
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
243 it means, but when the translator sees this they will wonder did you mean:
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
244
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
245 1. a document or help manual, or
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
246 2. a manual process?
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
247
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
248 This is the simplest case where a translation comment such as
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
249 “The installation manual” helps to clarify the situation and makes a translator
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
250 more productive.
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
251
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
252 **More examples of the need for translation comments**
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
253
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
254 Real world examples are best. This is a discussion over the use of the word
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
255 “Forward” in Northern Sotho:
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
256
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
257 “When you go forward. You go ‘Pele’, but when you forward the document,
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
258 you ‘Fetišetša pele’. So if you just say forward, we don’t know what you are
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
259 talking about.
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
260 It is better if it's in a sentence. But in this case i think we will use ‘pele’
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
261 because on the string no. 86 and 88 there is “show previous page in history”
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
262 and “show next page in history”.
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
263
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
264 Were the translators guess correct? I think so, but it makes it so much easier
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
265 if they don’t need to be super `sleuths`_ as well as translators.
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
266
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
267 .. _`sleuths`: http://www.thefreedictionary.com/sleuth
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
268
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
269
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
270 *Explanation Borrowed From:* `Wordforge`_
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
271
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
272 .. _`Wordforge`: http://www.wordforge.org/static/translation_comments.html
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
273
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
274 **Note**: Translator comments are currently only supported in python source
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
275 code.
4a7af44e6695 Create branch for 0.8.x releases.
cmlenz
parents:
diff changeset
276
Copyright (C) 2012-2017 Edgewall Software