Mercurial > babel > mirror
annotate babel/messages/frontend.py @ 593:99983baf1067 trunk
resort to hard-coded message extractors/checkers if pkg_resources is installed but no egg-info was found (#230)
author | fschwarz |
---|---|
date | Thu, 09 Aug 2012 11:20:25 +0000 |
parents | 99c48a6ca1d6 |
children | e61e27d9347d |
rev | line source |
---|---|
62
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
1 #!/usr/bin/env python |
1 | 2 # -*- coding: utf-8 -*- |
3 # | |
530 | 4 # Copyright (C) 2007-2011 Edgewall Software |
1 | 5 # All rights reserved. |
6 # | |
7 # This software is licensed as described in the file COPYING, which | |
8 # you should have received as part of this distribution. The terms | |
9 # are also available at http://babel.edgewall.org/wiki/License. | |
10 # | |
11 # This software consists of voluntary contributions made by many | |
12 # individuals. For the exact contribution history, see the revision | |
13 # history and logs, available at http://babel.edgewall.org/log/. | |
14 | |
15 """Frontends for the message extraction functionality.""" | |
16 | |
48
22b90b3b161a
Move the mapping configuration file format to `ConfigParser`, and add some more documentation about it.
cmlenz
parents:
47
diff
changeset
|
17 from ConfigParser import RawConfigParser |
104
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
18 from datetime import datetime |
1 | 19 from distutils import log |
20 from distutils.cmd import Command | |
49
37bd476dafe4
Support a `message_extractors` keyword argument directly in `setup()`. Closes #4.
cmlenz
parents:
48
diff
changeset
|
21 from distutils.errors import DistutilsOptionError, DistutilsSetupError |
298
03b4ed33d413
When using sys.stdout with a pipe or redirection the sys.stdout.encoding value
jruigrok
parents:
290
diff
changeset
|
22 from locale import getpreferredencoding |
232 | 23 import logging |
1 | 24 from optparse import OptionParser |
25 import os | |
197
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
26 import shutil |
49
37bd476dafe4
Support a `message_extractors` keyword argument directly in `setup()`. Closes #4.
cmlenz
parents:
48
diff
changeset
|
27 from StringIO import StringIO |
1 | 28 import sys |
197
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
29 import tempfile |
1 | 30 |
31 from babel import __version__ as VERSION | |
185
6503a227ba93
Add a command-line option that prints out all available locales. Closes #24.
cmlenz
parents:
181
diff
changeset
|
32 from babel import Locale, localedata |
51
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
33 from babel.core import UnknownLocaleError |
56
f40fc143439c
Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents:
55
diff
changeset
|
34 from babel.messages.catalog import Catalog |
54
7dbcbc3f07e0
Rename the `babel.catalog` package to `babel.messages` for consistency with the other package names.
cmlenz
parents:
52
diff
changeset
|
35 from babel.messages.extract import extract_from_dir, DEFAULT_KEYWORDS, \ |
7dbcbc3f07e0
Rename the `babel.catalog` package to `babel.messages` for consistency with the other package names.
cmlenz
parents:
52
diff
changeset
|
36 DEFAULT_MAPPING |
160 | 37 from babel.messages.mofile import write_mo |
104
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
38 from babel.messages.pofile import read_po, write_po |
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
39 from babel.util import odict, LOCALTZ |
1 | 40 |
178
749c0f6863bc
Minor change to what symbols are ?exported?, primarily for the generated docs.
cmlenz
parents:
177
diff
changeset
|
41 __all__ = ['CommandLineInterface', 'compile_catalog', 'extract_messages', |
234 | 42 'init_catalog', 'check_message_extractors', 'update_catalog'] |
1 | 43 __docformat__ = 'restructuredtext en' |
44 | |
45 | |
160 | 46 class compile_catalog(Command): |
47 """Catalog compilation command for use in ``setup.py`` scripts. | |
48 | |
49 If correctly installed, this command is available to Setuptools-using | |
50 setup scripts automatically. For projects using plain old ``distutils``, | |
51 the command needs to be registered explicitly in ``setup.py``:: | |
52 | |
53 from babel.messages.frontend import compile_catalog | |
54 | |
55 setup( | |
56 ... | |
169 | 57 cmdclass = {'compile_catalog': compile_catalog} |
160 | 58 ) |
59 | |
234 | 60 :since: version 0.9 |
160 | 61 :see: `Integrating new distutils commands <http://docs.python.org/dist/node32.html>`_ |
62 :see: `setuptools <http://peak.telecommunity.com/DevCenter/setuptools>`_ | |
63 """ | |
64 | |
181
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
65 description = 'compile message catalogs to binary MO files' |
160 | 66 user_options = [ |
67 ('domain=', 'D', | |
68 "domain of PO file (default 'messages')"), | |
69 ('directory=', 'd', | |
70 'path to base directory containing the catalogs'), | |
71 ('input-file=', 'i', | |
72 'name of the input file'), | |
73 ('output-file=', 'o', | |
74 "name of the output file (default " | |
75 "'<output_dir>/<locale>/LC_MESSAGES/<domain>.po')"), | |
76 ('locale=', 'l', | |
77 'locale of the catalog to compile'), | |
78 ('use-fuzzy', 'f', | |
79 'also include fuzzy translations'), | |
207 | 80 ('statistics', None, |
81 'print statistics about translations') | |
160 | 82 ] |
207 | 83 boolean_options = ['use-fuzzy', 'statistics'] |
160 | 84 |
85 def initialize_options(self): | |
86 self.domain = 'messages' | |
87 self.directory = None | |
88 self.input_file = None | |
89 self.output_file = None | |
90 self.locale = None | |
91 self.use_fuzzy = False | |
207 | 92 self.statistics = False |
160 | 93 |
94 def finalize_options(self): | |
177
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
95 if not self.input_file and not self.directory: |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
96 raise DistutilsOptionError('you must specify either the input file ' |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
97 'or the base directory') |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
98 if not self.output_file and not self.directory: |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
99 raise DistutilsOptionError('you must specify either the input file ' |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
100 'or the base directory') |
160 | 101 |
102 def run(self): | |
177
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
103 po_files = [] |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
104 mo_files = [] |
175
5d32098d8352
Changed the `__repr__` output to include the flags(it can be changed back, but it was usefull to implement the fuzzy header parsing).
palgarvio
parents:
170
diff
changeset
|
105 |
177
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
106 if not self.input_file: |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
107 if self.locale: |
331
afc5070a623c
Fix message catalog compilation for locales with more than two plural forms. Closes #95. Many thanks to Victor Safronovich for the patch.
cmlenz
parents:
317
diff
changeset
|
108 po_files.append((self.locale, |
afc5070a623c
Fix message catalog compilation for locales with more than two plural forms. Closes #95. Many thanks to Victor Safronovich for the patch.
cmlenz
parents:
317
diff
changeset
|
109 os.path.join(self.directory, self.locale, |
afc5070a623c
Fix message catalog compilation for locales with more than two plural forms. Closes #95. Many thanks to Victor Safronovich for the patch.
cmlenz
parents:
317
diff
changeset
|
110 'LC_MESSAGES', |
afc5070a623c
Fix message catalog compilation for locales with more than two plural forms. Closes #95. Many thanks to Victor Safronovich for the patch.
cmlenz
parents:
317
diff
changeset
|
111 self.domain + '.po'))) |
177
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
112 mo_files.append(os.path.join(self.directory, self.locale, |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
113 'LC_MESSAGES', |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
114 self.domain + '.mo')) |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
115 else: |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
116 for locale in os.listdir(self.directory): |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
117 po_file = os.path.join(self.directory, locale, |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
118 'LC_MESSAGES', self.domain + '.po') |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
119 if os.path.exists(po_file): |
331
afc5070a623c
Fix message catalog compilation for locales with more than two plural forms. Closes #95. Many thanks to Victor Safronovich for the patch.
cmlenz
parents:
317
diff
changeset
|
120 po_files.append((locale, po_file)) |
177
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
121 mo_files.append(os.path.join(self.directory, locale, |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
122 'LC_MESSAGES', |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
123 self.domain + '.mo')) |
170
3f9d9268537d
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
169
diff
changeset
|
124 else: |
331
afc5070a623c
Fix message catalog compilation for locales with more than two plural forms. Closes #95. Many thanks to Victor Safronovich for the patch.
cmlenz
parents:
317
diff
changeset
|
125 po_files.append((self.locale, self.input_file)) |
177
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
126 if self.output_file: |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
127 mo_files.append(self.output_file) |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
128 else: |
288
b6efe6a8e2ec
Fix error in `compile_catalog` distutils command. Closes #65.
cmlenz
parents:
279
diff
changeset
|
129 mo_files.append(os.path.join(self.directory, self.locale, |
177
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
130 'LC_MESSAGES', |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
131 self.domain + '.mo')) |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
132 |
208
d17f4b876f95
Make frontends that make use of a ''loop all'' fail if no message catalogs are found.
palgarvio
parents:
207
diff
changeset
|
133 if not po_files: |
d17f4b876f95
Make frontends that make use of a ''loop all'' fail if no message catalogs are found.
palgarvio
parents:
207
diff
changeset
|
134 raise DistutilsOptionError('no message catalogs found') |
d17f4b876f95
Make frontends that make use of a ''loop all'' fail if no message catalogs are found.
palgarvio
parents:
207
diff
changeset
|
135 |
331
afc5070a623c
Fix message catalog compilation for locales with more than two plural forms. Closes #95. Many thanks to Victor Safronovich for the patch.
cmlenz
parents:
317
diff
changeset
|
136 for idx, (locale, po_file) in enumerate(po_files): |
177
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
137 mo_file = mo_files[idx] |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
138 infile = open(po_file, 'r') |
170
3f9d9268537d
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
169
diff
changeset
|
139 try: |
331
afc5070a623c
Fix message catalog compilation for locales with more than two plural forms. Closes #95. Many thanks to Victor Safronovich for the patch.
cmlenz
parents:
317
diff
changeset
|
140 catalog = read_po(infile, locale) |
170
3f9d9268537d
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
169
diff
changeset
|
141 finally: |
3f9d9268537d
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
169
diff
changeset
|
142 infile.close() |
175
5d32098d8352
Changed the `__repr__` output to include the flags(it can be changed back, but it was usefull to implement the fuzzy header parsing).
palgarvio
parents:
170
diff
changeset
|
143 |
207 | 144 if self.statistics: |
145 translated = 0 | |
146 for message in list(catalog)[1:]: | |
147 if message.string: | |
148 translated +=1 | |
317 | 149 percentage = 0 |
150 if len(catalog): | |
151 percentage = translated * 100 // len(catalog) | |
231
052d29963c1c
Use proper logging in distutils `compile_catalog` command.
cmlenz
parents:
220
diff
changeset
|
152 log.info('%d of %d messages (%d%%) translated in %r', |
317 | 153 translated, len(catalog), percentage, po_file) |
207 | 154 |
177
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
155 if catalog.fuzzy and not self.use_fuzzy: |
231
052d29963c1c
Use proper logging in distutils `compile_catalog` command.
cmlenz
parents:
220
diff
changeset
|
156 log.warn('catalog %r is marked as fuzzy, skipping', po_file) |
177
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
157 continue |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
158 |
220
97b4b289e792
Added infrastructure for adding catalog checkers, and implement a checker that validations Python format parameters in translations, closing #19.
cmlenz
parents:
210
diff
changeset
|
159 for message, errors in catalog.check(): |
97b4b289e792
Added infrastructure for adding catalog checkers, and implement a checker that validations Python format parameters in translations, closing #19.
cmlenz
parents:
210
diff
changeset
|
160 for error in errors: |
231
052d29963c1c
Use proper logging in distutils `compile_catalog` command.
cmlenz
parents:
220
diff
changeset
|
161 log.error('error: %s:%d: %s', po_file, message.lineno, |
052d29963c1c
Use proper logging in distutils `compile_catalog` command.
cmlenz
parents:
220
diff
changeset
|
162 error) |
220
97b4b289e792
Added infrastructure for adding catalog checkers, and implement a checker that validations Python format parameters in translations, closing #19.
cmlenz
parents:
210
diff
changeset
|
163 |
231
052d29963c1c
Use proper logging in distutils `compile_catalog` command.
cmlenz
parents:
220
diff
changeset
|
164 log.info('compiling catalog %r to %r', po_file, mo_file) |
177
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
165 |
279 | 166 outfile = open(mo_file, 'wb') |
170
3f9d9268537d
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
169
diff
changeset
|
167 try: |
3f9d9268537d
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
169
diff
changeset
|
168 write_mo(outfile, catalog, use_fuzzy=self.use_fuzzy) |
3f9d9268537d
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
169
diff
changeset
|
169 finally: |
3f9d9268537d
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
169
diff
changeset
|
170 outfile.close() |
160 | 171 |
172 | |
1 | 173 class extract_messages(Command): |
174 """Message extraction command for use in ``setup.py`` scripts. | |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
175 |
1 | 176 If correctly installed, this command is available to Setuptools-using |
177 setup scripts automatically. For projects using plain old ``distutils``, | |
178 the command needs to be registered explicitly in ``setup.py``:: | |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
179 |
54
7dbcbc3f07e0
Rename the `babel.catalog` package to `babel.messages` for consistency with the other package names.
cmlenz
parents:
52
diff
changeset
|
180 from babel.messages.frontend import extract_messages |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
181 |
1 | 182 setup( |
183 ... | |
184 cmdclass = {'extract_messages': extract_messages} | |
185 ) | |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
186 |
1 | 187 :see: `Integrating new distutils commands <http://docs.python.org/dist/node32.html>`_ |
188 :see: `setuptools <http://peak.telecommunity.com/DevCenter/setuptools>`_ | |
189 """ | |
190 | |
191 description = 'extract localizable strings from the project code' | |
192 user_options = [ | |
193 ('charset=', None, | |
194 'charset to use in the output file'), | |
195 ('keywords=', 'k', | |
10
4130d9c6cb34
Both Babel's [source:trunk/babel/catalog/frontend.py frontend] and [source:trunk/babel/catalog/extract.py extract] now handle keyword indices. Also added an extra boolean flag so that the default keywords defined by Babel are not included in the keywords to search for when extracting strings.
palgarvio
parents:
7
diff
changeset
|
196 'space-separated list of keywords to look for in addition to the ' |
1 | 197 'defaults'), |
10
4130d9c6cb34
Both Babel's [source:trunk/babel/catalog/frontend.py frontend] and [source:trunk/babel/catalog/extract.py extract] now handle keyword indices. Also added an extra boolean flag so that the default keywords defined by Babel are not included in the keywords to search for when extracting strings.
palgarvio
parents:
7
diff
changeset
|
198 ('no-default-keywords', None, |
12
e6ba3e878b10
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
10
diff
changeset
|
199 'do not include the default keywords'), |
47
f8469ab4b257
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
24
diff
changeset
|
200 ('mapping-file=', 'F', |
f8469ab4b257
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
24
diff
changeset
|
201 'path to the mapping configuration file'), |
1 | 202 ('no-location', None, |
203 'do not include location comments with filename and line number'), | |
204 ('omit-header', None, | |
205 'do not include msgid "" entry in header'), | |
5
132526dcd074
* The creation-date header in generated PO files now includes the timezone offset.
cmlenz
parents:
1
diff
changeset
|
206 ('output-file=', 'o', |
1 | 207 'name of the output file'), |
23 | 208 ('width=', 'w', |
24
b09e90803d1b
Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents:
23
diff
changeset
|
209 'set output line width (default 76)'), |
23 | 210 ('no-wrap', None, |
24
b09e90803d1b
Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents:
23
diff
changeset
|
211 'do not break long message lines, longer than the output line width, ' |
58 | 212 'into several lines'), |
71 | 213 ('sort-output', None, |
214 'generate sorted output (default False)'), | |
215 ('sort-by-file', None, | |
216 'sort output by file location (default False)'), | |
78
d0d8d6cd8601
Fixed the plurals header on `Catalog` which should only be written if it's not a catalog template.
palgarvio
parents:
71
diff
changeset
|
217 ('msgid-bugs-address=', None, |
d0d8d6cd8601
Fixed the plurals header on `Catalog` which should only be written if it's not a catalog template.
palgarvio
parents:
71
diff
changeset
|
218 'set report address for msgid'), |
79
450ac2291ca5
Implemented item 4 from #12. Set the copyright holder in the output.
palgarvio
parents:
78
diff
changeset
|
219 ('copyright-holder=', None, |
450ac2291ca5
Implemented item 4 from #12. Set the copyright holder in the output.
palgarvio
parents:
78
diff
changeset
|
220 'set copyright holder in output'), |
80
116e34b8cefa
Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents:
79
diff
changeset
|
221 ('add-comments=', 'c', |
116e34b8cefa
Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents:
79
diff
changeset
|
222 'place comment block with TAG (or those preceding keyword lines) in ' |
116e34b8cefa
Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents:
79
diff
changeset
|
223 'output file. Seperate multiple TAGs with commas(,)'), |
338
b39145076d8a
Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents:
335
diff
changeset
|
224 ('strip-comments', None, |
b39145076d8a
Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents:
335
diff
changeset
|
225 'strip the comment TAGs from the comments.'), |
59 | 226 ('input-dirs=', None, |
57
d930a3dfbf3d
* The `extract_messages` distutils command now operators on configurable input directories again, instead of the complete current directory. The `input_dirs` default to the package directories.
cmlenz
parents:
56
diff
changeset
|
227 'directories that should be scanned for messages'), |
1 | 228 ] |
23 | 229 boolean_options = [ |
71 | 230 'no-default-keywords', 'no-location', 'omit-header', 'no-wrap', |
338
b39145076d8a
Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents:
335
diff
changeset
|
231 'sort-output', 'sort-by-file', 'strip-comments' |
23 | 232 ] |
1 | 233 |
234 def initialize_options(self): | |
235 self.charset = 'utf-8' | |
117
e1dffa3423a0
Made new frontend tests more ''unit-y'', i.e. calling the APIs directly instead of launching the scripts.
cmlenz
parents:
112
diff
changeset
|
236 self.keywords = '' |
e1dffa3423a0
Made new frontend tests more ''unit-y'', i.e. calling the APIs directly instead of launching the scripts.
cmlenz
parents:
112
diff
changeset
|
237 self._keywords = DEFAULT_KEYWORDS.copy() |
12
e6ba3e878b10
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
10
diff
changeset
|
238 self.no_default_keywords = False |
47
f8469ab4b257
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
24
diff
changeset
|
239 self.mapping_file = None |
1 | 240 self.no_location = False |
241 self.omit_header = False | |
242 self.output_file = None | |
57
d930a3dfbf3d
* The `extract_messages` distutils command now operators on configurable input directories again, instead of the complete current directory. The `input_dirs` default to the package directories.
cmlenz
parents:
56
diff
changeset
|
243 self.input_dirs = None |
423
fb926f48efba
Now, the `--width` option, although with a default value of 76, it's not set to any value initially so that the `--no-wrap` option can be passed without throwing an error. Fixes #145.
palgarvio
parents:
417
diff
changeset
|
244 self.width = None |
47
f8469ab4b257
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
24
diff
changeset
|
245 self.no_wrap = False |
71 | 246 self.sort_output = False |
247 self.sort_by_file = False | |
78
d0d8d6cd8601
Fixed the plurals header on `Catalog` which should only be written if it's not a catalog template.
palgarvio
parents:
71
diff
changeset
|
248 self.msgid_bugs_address = None |
79
450ac2291ca5
Implemented item 4 from #12. Set the copyright holder in the output.
palgarvio
parents:
78
diff
changeset
|
249 self.copyright_holder = None |
80
116e34b8cefa
Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents:
79
diff
changeset
|
250 self.add_comments = None |
95
f9007588a860
Fix for #11 (use local timezone in timestamps of generated POT).
cmlenz
parents:
90
diff
changeset
|
251 self._add_comments = [] |
338
b39145076d8a
Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents:
335
diff
changeset
|
252 self.strip_comments = False |
1 | 253 |
254 def finalize_options(self): | |
23 | 255 if self.no_default_keywords and not self.keywords: |
24
b09e90803d1b
Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents:
23
diff
changeset
|
256 raise DistutilsOptionError('you must specify new keywords if you ' |
b09e90803d1b
Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents:
23
diff
changeset
|
257 'disable the default ones') |
12
e6ba3e878b10
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
10
diff
changeset
|
258 if self.no_default_keywords: |
23 | 259 self._keywords = {} |
117
e1dffa3423a0
Made new frontend tests more ''unit-y'', i.e. calling the APIs directly instead of launching the scripts.
cmlenz
parents:
112
diff
changeset
|
260 if self.keywords: |
23 | 261 self._keywords.update(parse_keywords(self.keywords.split())) |
24
b09e90803d1b
Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents:
23
diff
changeset
|
262 |
117
e1dffa3423a0
Made new frontend tests more ''unit-y'', i.e. calling the APIs directly instead of launching the scripts.
cmlenz
parents:
112
diff
changeset
|
263 if not self.output_file: |
e1dffa3423a0
Made new frontend tests more ''unit-y'', i.e. calling the APIs directly instead of launching the scripts.
cmlenz
parents:
112
diff
changeset
|
264 raise DistutilsOptionError('no output file specified') |
23 | 265 if self.no_wrap and self.width: |
71 | 266 raise DistutilsOptionError("'--no-wrap' and '--width' are mutually " |
24
b09e90803d1b
Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents:
23
diff
changeset
|
267 "exclusive") |
423
fb926f48efba
Now, the `--width` option, although with a default value of 76, it's not set to any value initially so that the `--no-wrap` option can be passed without throwing an error. Fixes #145.
palgarvio
parents:
417
diff
changeset
|
268 if not self.no_wrap and not self.width: |
fb926f48efba
Now, the `--width` option, although with a default value of 76, it's not set to any value initially so that the `--no-wrap` option can be passed without throwing an error. Fixes #145.
palgarvio
parents:
417
diff
changeset
|
269 self.width = 76 |
fb926f48efba
Now, the `--width` option, although with a default value of 76, it's not set to any value initially so that the `--no-wrap` option can be passed without throwing an error. Fixes #145.
palgarvio
parents:
417
diff
changeset
|
270 elif self.width is not None: |
23 | 271 self.width = int(self.width) |
95
f9007588a860
Fix for #11 (use local timezone in timestamps of generated POT).
cmlenz
parents:
90
diff
changeset
|
272 |
71 | 273 if self.sort_output and self.sort_by_file: |
274 raise DistutilsOptionError("'--sort-output' and '--sort-by-file' " | |
275 "are mutually exclusive") | |
1 | 276 |
57
d930a3dfbf3d
* The `extract_messages` distutils command now operators on configurable input directories again, instead of the complete current directory. The `input_dirs` default to the package directories.
cmlenz
parents:
56
diff
changeset
|
277 if not self.input_dirs: |
177
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
278 self.input_dirs = dict.fromkeys([k.split('.',1)[0] |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
279 for k in self.distribution.packages |
57
d930a3dfbf3d
* The `extract_messages` distutils command now operators on configurable input directories again, instead of the complete current directory. The `input_dirs` default to the package directories.
cmlenz
parents:
56
diff
changeset
|
280 ]).keys() |
95
f9007588a860
Fix for #11 (use local timezone in timestamps of generated POT).
cmlenz
parents:
90
diff
changeset
|
281 |
80
116e34b8cefa
Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents:
79
diff
changeset
|
282 if self.add_comments: |
116e34b8cefa
Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents:
79
diff
changeset
|
283 self._add_comments = self.add_comments.split(',') |
57
d930a3dfbf3d
* The `extract_messages` distutils command now operators on configurable input directories again, instead of the complete current directory. The `input_dirs` default to the package directories.
cmlenz
parents:
56
diff
changeset
|
284 |
1 | 285 def run(self): |
62
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
286 mappings = self._get_mappings() |
1 | 287 outfile = open(self.output_file, 'w') |
288 try: | |
102
14a3d766a701
Project name and version, and the charset are available via the `Catalog` object, and do not need to be passed to `write_pot()`.
cmlenz
parents:
95
diff
changeset
|
289 catalog = Catalog(project=self.distribution.get_name(), |
14a3d766a701
Project name and version, and the charset are available via the `Catalog` object, and do not need to be passed to `write_pot()`.
cmlenz
parents:
95
diff
changeset
|
290 version=self.distribution.get_version(), |
14a3d766a701
Project name and version, and the charset are available via the `Catalog` object, and do not need to be passed to `write_pot()`.
cmlenz
parents:
95
diff
changeset
|
291 msgid_bugs_address=self.msgid_bugs_address, |
105
c62b68a0b65e
`Message`, `read_po` and `write_po` now all handle user/auto comments correctly.
palgarvio
parents:
104
diff
changeset
|
292 copyright_holder=self.copyright_holder, |
102
14a3d766a701
Project name and version, and the charset are available via the `Catalog` object, and do not need to be passed to `write_pot()`.
cmlenz
parents:
95
diff
changeset
|
293 charset=self.charset) |
14a3d766a701
Project name and version, and the charset are available via the `Catalog` object, and do not need to be passed to `write_pot()`.
cmlenz
parents:
95
diff
changeset
|
294 |
62
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
295 for dirname, (method_map, options_map) in mappings.items(): |
57
d930a3dfbf3d
* The `extract_messages` distutils command now operators on configurable input directories again, instead of the complete current directory. The `input_dirs` default to the package directories.
cmlenz
parents:
56
diff
changeset
|
296 def callback(filename, method, options): |
d930a3dfbf3d
* The `extract_messages` distutils command now operators on configurable input directories again, instead of the complete current directory. The `input_dirs` default to the package directories.
cmlenz
parents:
56
diff
changeset
|
297 if method == 'ignore': |
d930a3dfbf3d
* The `extract_messages` distutils command now operators on configurable input directories again, instead of the complete current directory. The `input_dirs` default to the package directories.
cmlenz
parents:
56
diff
changeset
|
298 return |
d930a3dfbf3d
* The `extract_messages` distutils command now operators on configurable input directories again, instead of the complete current directory. The `input_dirs` default to the package directories.
cmlenz
parents:
56
diff
changeset
|
299 filepath = os.path.normpath(os.path.join(dirname, filename)) |
d930a3dfbf3d
* The `extract_messages` distutils command now operators on configurable input directories again, instead of the complete current directory. The `input_dirs` default to the package directories.
cmlenz
parents:
56
diff
changeset
|
300 optstr = '' |
d930a3dfbf3d
* The `extract_messages` distutils command now operators on configurable input directories again, instead of the complete current directory. The `input_dirs` default to the package directories.
cmlenz
parents:
56
diff
changeset
|
301 if options: |
d930a3dfbf3d
* The `extract_messages` distutils command now operators on configurable input directories again, instead of the complete current directory. The `input_dirs` default to the package directories.
cmlenz
parents:
56
diff
changeset
|
302 optstr = ' (%s)' % ', '.join(['%s="%s"' % (k, v) for |
d930a3dfbf3d
* The `extract_messages` distutils command now operators on configurable input directories again, instead of the complete current directory. The `input_dirs` default to the package directories.
cmlenz
parents:
56
diff
changeset
|
303 k, v in options.items()]) |
232 | 304 log.info('extracting messages from %s%s', filepath, optstr) |
47
f8469ab4b257
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
24
diff
changeset
|
305 |
57
d930a3dfbf3d
* The `extract_messages` distutils command now operators on configurable input directories again, instead of the complete current directory. The `input_dirs` default to the package directories.
cmlenz
parents:
56
diff
changeset
|
306 extracted = extract_from_dir(dirname, method_map, options_map, |
117
e1dffa3423a0
Made new frontend tests more ''unit-y'', i.e. calling the APIs directly instead of launching the scripts.
cmlenz
parents:
112
diff
changeset
|
307 keywords=self._keywords, |
84
3ae316b58231
Some cosmetic changes for the new translator comments support.
cmlenz
parents:
80
diff
changeset
|
308 comment_tags=self._add_comments, |
338
b39145076d8a
Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents:
335
diff
changeset
|
309 callback=callback, |
b39145076d8a
Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents:
335
diff
changeset
|
310 strip_comment_tags= |
b39145076d8a
Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents:
335
diff
changeset
|
311 self.strip_comments) |
569
1b801a0cb2cb
Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
fschwarz
parents:
563
diff
changeset
|
312 for filename, lineno, message, comments, context in extracted: |
57
d930a3dfbf3d
* The `extract_messages` distutils command now operators on configurable input directories again, instead of the complete current directory. The `input_dirs` default to the package directories.
cmlenz
parents:
56
diff
changeset
|
313 filepath = os.path.normpath(os.path.join(dirname, filename)) |
80
116e34b8cefa
Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents:
79
diff
changeset
|
314 catalog.add(message, None, [(filepath, lineno)], |
569
1b801a0cb2cb
Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
fschwarz
parents:
563
diff
changeset
|
315 auto_comments=comments, context=context) |
24
b09e90803d1b
Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents:
23
diff
changeset
|
316 |
51
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
317 log.info('writing PO template file to %s' % self.output_file) |
104
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
318 write_po(outfile, catalog, width=self.width, |
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
319 no_location=self.no_location, |
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
320 omit_header=self.omit_header, |
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
321 sort_output=self.sort_output, |
105
c62b68a0b65e
`Message`, `read_po` and `write_po` now all handle user/auto comments correctly.
palgarvio
parents:
104
diff
changeset
|
322 sort_by_file=self.sort_by_file) |
1 | 323 finally: |
324 outfile.close() | |
325 | |
62
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
326 def _get_mappings(self): |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
327 mappings = {} |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
328 |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
329 if self.mapping_file: |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
330 fileobj = open(self.mapping_file, 'U') |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
331 try: |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
332 method_map, options_map = parse_mapping(fileobj) |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
333 for dirname in self.input_dirs: |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
334 mappings[dirname] = method_map, options_map |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
335 finally: |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
336 fileobj.close() |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
337 |
123
31ca37101a24
Make the check for the `message_extractors` setup keyword more robst.
cmlenz
parents:
120
diff
changeset
|
338 elif getattr(self.distribution, 'message_extractors', None): |
62
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
339 message_extractors = self.distribution.message_extractors |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
340 for dirname, mapping in message_extractors.items(): |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
341 if isinstance(mapping, basestring): |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
342 method_map, options_map = parse_mapping(StringIO(mapping)) |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
343 else: |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
344 method_map, options_map = [], {} |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
345 for pattern, method, options in mapping: |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
346 method_map.append((pattern, method)) |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
347 options_map[pattern] = options or {} |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
348 mappings[dirname] = method_map, options_map |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
349 |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
350 else: |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
351 for dirname in self.input_dirs: |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
352 mappings[dirname] = DEFAULT_MAPPING, {} |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
353 |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
354 return mappings |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
355 |
1 | 356 |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
357 def check_message_extractors(dist, name, value): |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
358 """Validate the ``message_extractors`` keyword argument to ``setup()``. |
47
f8469ab4b257
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
24
diff
changeset
|
359 |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
360 :param dist: the distutils/setuptools ``Distribution`` object |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
361 :param name: the name of the keyword argument (should always be |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
362 "message_extractors") |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
363 :param value: the value of the keyword argument |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
364 :raise `DistutilsSetupError`: if the value is not valid |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
365 :see: `Adding setup() arguments |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
366 <http://peak.telecommunity.com/DevCenter/setuptools#adding-setup-arguments>`_ |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
367 """ |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
368 assert name == 'message_extractors' |
62
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
369 if not isinstance(value, dict): |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
370 raise DistutilsSetupError('the value of the "message_extractors" ' |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
371 'parameter must be a dictionary') |
1 | 372 |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
373 |
181
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
374 class init_catalog(Command): |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
375 """New catalog initialization command for use in ``setup.py`` scripts. |
51
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
376 |
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
377 If correctly installed, this command is available to Setuptools-using |
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
378 setup scripts automatically. For projects using plain old ``distutils``, |
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
379 the command needs to be registered explicitly in ``setup.py``:: |
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
380 |
181
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
381 from babel.messages.frontend import init_catalog |
51
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
382 |
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
383 setup( |
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
384 ... |
181
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
385 cmdclass = {'init_catalog': init_catalog} |
51
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
386 ) |
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
387 |
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
388 :see: `Integrating new distutils commands <http://docs.python.org/dist/node32.html>`_ |
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
389 :see: `setuptools <http://peak.telecommunity.com/DevCenter/setuptools>`_ |
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
390 """ |
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
391 |
181
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
392 description = 'create a new catalog based on a POT file' |
51
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
393 user_options = [ |
55
a258e4015eb6
`new_catalog` now accepts another argument, `--domain`, which is used to build the output file path, which now is of the form `<output_dir>/<locale>/<domain>.po`, the correct form.
palgarvio
parents:
54
diff
changeset
|
394 ('domain=', 'D', |
104
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
395 "domain of PO file (default 'messages')"), |
51
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
396 ('input-file=', 'i', |
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
397 'name of the input file'), |
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
398 ('output-dir=', 'd', |
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
399 'path to output directory'), |
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
400 ('output-file=', 'o', |
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
401 "name of the output file (default " |
87
72c7ac384609
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
86
diff
changeset
|
402 "'<output_dir>/<locale>/LC_MESSAGES/<domain>.po')"), |
51
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
403 ('locale=', 'l', |
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
404 'locale for the new localized catalog'), |
574
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
405 ('no-wrap', None, |
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
406 'do not break long message lines, longer than the output line width, ' |
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
407 'into several lines'), |
51
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
408 ] |
574
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
409 boolean_options = ['no-wrap'] |
51
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
410 |
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
411 def initialize_options(self): |
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
412 self.output_dir = None |
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
413 self.output_file = None |
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
414 self.input_file = None |
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
415 self.locale = None |
104
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
416 self.domain = 'messages' |
574
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
417 self.no_wrap = False |
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
418 self.width = None |
51
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
419 |
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
420 def finalize_options(self): |
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
421 if not self.input_file: |
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
422 raise DistutilsOptionError('you must specify the input file') |
87
72c7ac384609
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
86
diff
changeset
|
423 |
51
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
424 if not self.locale: |
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
425 raise DistutilsOptionError('you must provide a locale for the ' |
87
72c7ac384609
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
86
diff
changeset
|
426 'new catalog') |
104
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
427 try: |
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
428 self._locale = Locale.parse(self.locale) |
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
429 except UnknownLocaleError, e: |
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
430 raise DistutilsOptionError(e) |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
431 |
51
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
432 if not self.output_file and not self.output_dir: |
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
433 raise DistutilsOptionError('you must specify the output directory') |
104
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
434 if not self.output_file: |
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
435 self.output_file = os.path.join(self.output_dir, self.locale, |
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
436 'LC_MESSAGES', self.domain + '.po') |
87
72c7ac384609
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
86
diff
changeset
|
437 |
72c7ac384609
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
86
diff
changeset
|
438 if not os.path.exists(os.path.dirname(self.output_file)): |
72c7ac384609
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
86
diff
changeset
|
439 os.makedirs(os.path.dirname(self.output_file)) |
574
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
440 if not self.no_wrap: |
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
441 self.width = 76 |
51
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
442 |
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
443 def run(self): |
90 | 444 log.info('creating catalog %r based on %r', self.output_file, |
55
a258e4015eb6
`new_catalog` now accepts another argument, `--domain`, which is used to build the output file path, which now is of the form `<output_dir>/<locale>/<domain>.po`, the correct form.
palgarvio
parents:
54
diff
changeset
|
445 self.input_file) |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
446 |
104
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
447 infile = open(self.input_file, 'r') |
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
448 try: |
370
bc18179832b7
We no longer neglect `catalog.plurals`. Added tests for it. Fixes #120.
palgarvio
parents:
338
diff
changeset
|
449 # Although reading from the catalog template, read_po must be fed |
563 | 450 # the locale in order to correctly calculate plurals |
370
bc18179832b7
We no longer neglect `catalog.plurals`. Added tests for it. Fixes #120.
palgarvio
parents:
338
diff
changeset
|
451 catalog = read_po(infile, locale=self.locale) |
104
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
452 finally: |
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
453 infile.close() |
87
72c7ac384609
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
86
diff
changeset
|
454 |
104
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
455 catalog.locale = self._locale |
251 | 456 catalog.fuzzy = False |
104
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
457 |
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
458 outfile = open(self.output_file, 'w') |
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
459 try: |
574
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
460 write_po(outfile, catalog, width=self.width) |
104
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
461 finally: |
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
462 outfile.close() |
51
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
463 |
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
464 |
181
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
465 class update_catalog(Command): |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
466 """Catalog merging command for use in ``setup.py`` scripts. |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
467 |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
468 If correctly installed, this command is available to Setuptools-using |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
469 setup scripts automatically. For projects using plain old ``distutils``, |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
470 the command needs to be registered explicitly in ``setup.py``:: |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
471 |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
472 from babel.messages.frontend import update_catalog |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
473 |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
474 setup( |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
475 ... |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
476 cmdclass = {'update_catalog': update_catalog} |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
477 ) |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
478 |
234 | 479 :since: version 0.9 |
181
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
480 :see: `Integrating new distutils commands <http://docs.python.org/dist/node32.html>`_ |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
481 :see: `setuptools <http://peak.telecommunity.com/DevCenter/setuptools>`_ |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
482 """ |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
483 |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
484 description = 'update message catalogs from a POT file' |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
485 user_options = [ |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
486 ('domain=', 'D', |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
487 "domain of PO file (default 'messages')"), |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
488 ('input-file=', 'i', |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
489 'name of the input file'), |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
490 ('output-dir=', 'd', |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
491 'path to base directory containing the catalogs'), |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
492 ('output-file=', 'o', |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
493 "name of the output file (default " |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
494 "'<output_dir>/<locale>/LC_MESSAGES/<domain>.po')"), |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
495 ('locale=', 'l', |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
496 'locale of the catalog to compile'), |
574
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
497 ('no-wrap', None, |
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
498 'do not break long message lines, longer than the output line width, ' |
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
499 'into several lines'), |
191
c171a0041ad2
Add an option to the frontend commands for catalog updating that removes completely any obsolete messages, instead of putting them comments.
cmlenz
parents:
185
diff
changeset
|
500 ('ignore-obsolete=', None, |
200
1c778cccd330
Added `--no-fuzzy-matching` to the frontends and also `--previous` which adds the old msgid's as comments. The latest closes #31.
palgarvio
parents:
197
diff
changeset
|
501 'whether to omit obsolete messages from the output'), |
1c778cccd330
Added `--no-fuzzy-matching` to the frontends and also `--previous` which adds the old msgid's as comments. The latest closes #31.
palgarvio
parents:
197
diff
changeset
|
502 ('no-fuzzy-matching', 'N', |
1c778cccd330
Added `--no-fuzzy-matching` to the frontends and also `--previous` which adds the old msgid's as comments. The latest closes #31.
palgarvio
parents:
197
diff
changeset
|
503 'do not use fuzzy matching'), |
1c778cccd330
Added `--no-fuzzy-matching` to the frontends and also `--previous` which adds the old msgid's as comments. The latest closes #31.
palgarvio
parents:
197
diff
changeset
|
504 ('previous', None, |
1c778cccd330
Added `--no-fuzzy-matching` to the frontends and also `--previous` which adds the old msgid's as comments. The latest closes #31.
palgarvio
parents:
197
diff
changeset
|
505 'keep previous msgids of translated messages') |
181
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
506 ] |
200
1c778cccd330
Added `--no-fuzzy-matching` to the frontends and also `--previous` which adds the old msgid's as comments. The latest closes #31.
palgarvio
parents:
197
diff
changeset
|
507 boolean_options = ['ignore_obsolete', 'no_fuzzy_matching', 'previous'] |
181
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
508 |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
509 def initialize_options(self): |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
510 self.domain = 'messages' |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
511 self.input_file = None |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
512 self.output_dir = None |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
513 self.output_file = None |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
514 self.locale = None |
574
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
515 self.no_wrap = False |
191
c171a0041ad2
Add an option to the frontend commands for catalog updating that removes completely any obsolete messages, instead of putting them comments.
cmlenz
parents:
185
diff
changeset
|
516 self.ignore_obsolete = False |
200
1c778cccd330
Added `--no-fuzzy-matching` to the frontends and also `--previous` which adds the old msgid's as comments. The latest closes #31.
palgarvio
parents:
197
diff
changeset
|
517 self.no_fuzzy_matching = False |
1c778cccd330
Added `--no-fuzzy-matching` to the frontends and also `--previous` which adds the old msgid's as comments. The latest closes #31.
palgarvio
parents:
197
diff
changeset
|
518 self.previous = False |
181
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
519 |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
520 def finalize_options(self): |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
521 if not self.input_file: |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
522 raise DistutilsOptionError('you must specify the input file') |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
523 if not self.output_file and not self.output_dir: |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
524 raise DistutilsOptionError('you must specify the output file or ' |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
525 'directory') |
196
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
526 if self.output_file and not self.locale: |
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
527 raise DistutilsOptionError('you must specify the locale') |
200
1c778cccd330
Added `--no-fuzzy-matching` to the frontends and also `--previous` which adds the old msgid's as comments. The latest closes #31.
palgarvio
parents:
197
diff
changeset
|
528 if self.no_fuzzy_matching and self.previous: |
1c778cccd330
Added `--no-fuzzy-matching` to the frontends and also `--previous` which adds the old msgid's as comments. The latest closes #31.
palgarvio
parents:
197
diff
changeset
|
529 self.previous = False |
181
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
530 |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
531 def run(self): |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
532 po_files = [] |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
533 if not self.output_file: |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
534 if self.locale: |
196
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
535 po_files.append((self.locale, |
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
536 os.path.join(self.output_dir, self.locale, |
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
537 'LC_MESSAGES', |
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
538 self.domain + '.po'))) |
181
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
539 else: |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
540 for locale in os.listdir(self.output_dir): |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
541 po_file = os.path.join(self.output_dir, locale, |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
542 'LC_MESSAGES', |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
543 self.domain + '.po') |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
544 if os.path.exists(po_file): |
196
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
545 po_files.append((locale, po_file)) |
181
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
546 else: |
196
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
547 po_files.append((self.locale, self.output_file)) |
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
548 |
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
549 domain = self.domain |
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
550 if not domain: |
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
551 domain = os.path.splitext(os.path.basename(self.input_file))[0] |
181
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
552 |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
553 infile = open(self.input_file, 'U') |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
554 try: |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
555 template = read_po(infile) |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
556 finally: |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
557 infile.close() |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
558 |
208
d17f4b876f95
Make frontends that make use of a ''loop all'' fail if no message catalogs are found.
palgarvio
parents:
207
diff
changeset
|
559 if not po_files: |
d17f4b876f95
Make frontends that make use of a ''loop all'' fail if no message catalogs are found.
palgarvio
parents:
207
diff
changeset
|
560 raise DistutilsOptionError('no message catalogs found') |
d17f4b876f95
Make frontends that make use of a ''loop all'' fail if no message catalogs are found.
palgarvio
parents:
207
diff
changeset
|
561 |
574
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
562 extra_params = {} |
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
563 if self.no_wrap: |
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
564 extra_params['width'] = None |
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
565 |
196
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
566 for locale, filename in po_files: |
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
567 log.info('updating catalog %r based on %r', filename, |
181
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
568 self.input_file) |
196
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
569 infile = open(filename, 'U') |
181
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
570 try: |
196
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
571 catalog = read_po(infile, locale=locale, domain=domain) |
181
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
572 finally: |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
573 infile.close() |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
574 |
204 | 575 catalog.update(template, self.no_fuzzy_matching) |
181
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
576 |
197
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
577 tmpname = os.path.join(os.path.dirname(filename), |
200
1c778cccd330
Added `--no-fuzzy-matching` to the frontends and also `--previous` which adds the old msgid's as comments. The latest closes #31.
palgarvio
parents:
197
diff
changeset
|
578 tempfile.gettempprefix() + |
197
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
579 os.path.basename(filename)) |
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
580 tmpfile = open(tmpname, 'w') |
181
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
581 try: |
197
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
582 try: |
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
583 write_po(tmpfile, catalog, |
200
1c778cccd330
Added `--no-fuzzy-matching` to the frontends and also `--previous` which adds the old msgid's as comments. The latest closes #31.
palgarvio
parents:
197
diff
changeset
|
584 ignore_obsolete=self.ignore_obsolete, |
574
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
585 include_previous=self.previous, **extra_params) |
197
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
586 finally: |
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
587 tmpfile.close() |
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
588 except: |
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
589 os.remove(tmpname) |
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
590 raise |
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
591 |
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
592 try: |
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
593 os.rename(tmpname, filename) |
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
594 except OSError: |
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
595 # We're probably on Windows, which doesn't support atomic |
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
596 # renames, at least not through Python |
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
597 # If the error is in fact due to a permissions problem, that |
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
598 # same error is going to be raised from one of the following |
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
599 # operations |
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
600 os.remove(filename) |
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
601 shutil.copy(tmpname, filename) |
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
602 os.remove(tmpname) |
181
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
603 |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
604 |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
605 class CommandLineInterface(object): |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
606 """Command-line interface. |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
607 |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
608 This class provides a simple command-line interface to the message |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
609 extraction and PO file generation functionality. |
51
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
610 """ |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
611 |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
612 usage = '%%prog %s [options] %s' |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
613 version = '%%prog %s' % VERSION |
161 | 614 commands = { |
177
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
615 'compile': 'compile message catalogs to MO files', |
63
47353672f1a8
Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents:
62
diff
changeset
|
616 'extract': 'extract messages from source files and generate a POT file', |
181
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
617 'init': 'create new message catalogs from a POT file', |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
618 'update': 'update existing message catalogs from a POT file' |
63
47353672f1a8
Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents:
62
diff
changeset
|
619 } |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
620 |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
621 def run(self, argv=sys.argv): |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
622 """Main entry point of the command-line interface. |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
623 |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
624 :param argv: list of arguments passed on the command-line |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
625 """ |
127 | 626 self.parser = OptionParser(usage=self.usage % ('command', '[args]'), |
185
6503a227ba93
Add a command-line option that prints out all available locales. Closes #24.
cmlenz
parents:
181
diff
changeset
|
627 version=self.version) |
63
47353672f1a8
Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents:
62
diff
changeset
|
628 self.parser.disable_interspersed_args() |
47353672f1a8
Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents:
62
diff
changeset
|
629 self.parser.print_help = self._help |
185
6503a227ba93
Add a command-line option that prints out all available locales. Closes #24.
cmlenz
parents:
181
diff
changeset
|
630 self.parser.add_option('--list-locales', dest='list_locales', |
6503a227ba93
Add a command-line option that prints out all available locales. Closes #24.
cmlenz
parents:
181
diff
changeset
|
631 action='store_true', |
6503a227ba93
Add a command-line option that prints out all available locales. Closes #24.
cmlenz
parents:
181
diff
changeset
|
632 help="print all known locales and exit") |
232 | 633 self.parser.add_option('-v', '--verbose', action='store_const', |
634 dest='loglevel', const=logging.DEBUG, | |
635 help='print as much as possible') | |
636 self.parser.add_option('-q', '--quiet', action='store_const', | |
637 dest='loglevel', const=logging.ERROR, | |
638 help='print as little as possible') | |
639 self.parser.set_defaults(list_locales=False, loglevel=logging.INFO) | |
185
6503a227ba93
Add a command-line option that prints out all available locales. Closes #24.
cmlenz
parents:
181
diff
changeset
|
640 |
63
47353672f1a8
Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents:
62
diff
changeset
|
641 options, args = self.parser.parse_args(argv[1:]) |
185
6503a227ba93
Add a command-line option that prints out all available locales. Closes #24.
cmlenz
parents:
181
diff
changeset
|
642 |
523
e5a2231ce176
shorten the __init__() method of !CommandLineInterface by extracting the logging configuration into another method
fschwarz
parents:
521
diff
changeset
|
643 self._configure_logging(options.loglevel) |
185
6503a227ba93
Add a command-line option that prints out all available locales. Closes #24.
cmlenz
parents:
181
diff
changeset
|
644 if options.list_locales: |
546
fd3bda2d3d34
rename babel.localedata.list() to ease Python 3 transition (fixes #250)
fschwarz
parents:
533
diff
changeset
|
645 identifiers = localedata.locale_identifiers() |
185
6503a227ba93
Add a command-line option that prints out all available locales. Closes #24.
cmlenz
parents:
181
diff
changeset
|
646 longest = max([len(identifier) for identifier in identifiers]) |
440
2e8fa2145a13
remove sorted and don't assume dict ordering (Python 2.3 & Jython compat)
pjenvey
parents:
429
diff
changeset
|
647 identifiers.sort() |
210
9c237f83d7cb
When parsing catalog headers, look for the content-type first, to be able to use a specified encoding on all other headers.
cmlenz
parents:
209
diff
changeset
|
648 format = u'%%-%ds %%s' % (longest + 1) |
440
2e8fa2145a13
remove sorted and don't assume dict ordering (Python 2.3 & Jython compat)
pjenvey
parents:
429
diff
changeset
|
649 for identifier in identifiers: |
185
6503a227ba93
Add a command-line option that prints out all available locales. Closes #24.
cmlenz
parents:
181
diff
changeset
|
650 locale = Locale.parse(identifier) |
267
385083341519
Default the encoding of output by the `pybabel --list-locales` command to ASCII with errors replaced, if the output stream has no encoding set. For a reason unknown to me I got an encoding error, but only when when running the output through a pipe on the shell.
cmlenz
parents:
251
diff
changeset
|
651 output = format % (identifier, locale.english_name) |
298
03b4ed33d413
When using sys.stdout with a pipe or redirection the sys.stdout.encoding value
jruigrok
parents:
290
diff
changeset
|
652 print output.encode(sys.stdout.encoding or |
03b4ed33d413
When using sys.stdout with a pipe or redirection the sys.stdout.encoding value
jruigrok
parents:
290
diff
changeset
|
653 getpreferredencoding() or |
03b4ed33d413
When using sys.stdout with a pipe or redirection the sys.stdout.encoding value
jruigrok
parents:
290
diff
changeset
|
654 'ascii', 'replace') |
185
6503a227ba93
Add a command-line option that prints out all available locales. Closes #24.
cmlenz
parents:
181
diff
changeset
|
655 return 0 |
6503a227ba93
Add a command-line option that prints out all available locales. Closes #24.
cmlenz
parents:
181
diff
changeset
|
656 |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
657 if not args: |
424
e24e6a4d3512
Use a more explicit error message if no option or argument(command) is passed to `pybabel`. Fixes #81.
palgarvio
parents:
423
diff
changeset
|
658 self.parser.error('no valid command or option passed. ' |
e24e6a4d3512
Use a more explicit error message if no option or argument(command) is passed to `pybabel`. Fixes #81.
palgarvio
parents:
423
diff
changeset
|
659 'Try the -h/--help option for more information.') |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
660 |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
661 cmdname = args[0] |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
662 if cmdname not in self.commands: |
127 | 663 self.parser.error('unknown command "%s"' % cmdname) |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
664 |
185
6503a227ba93
Add a command-line option that prints out all available locales. Closes #24.
cmlenz
parents:
181
diff
changeset
|
665 return getattr(self, cmdname)(args[1:]) |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
666 |
523
e5a2231ce176
shorten the __init__() method of !CommandLineInterface by extracting the logging configuration into another method
fschwarz
parents:
521
diff
changeset
|
667 def _configure_logging(self, loglevel): |
e5a2231ce176
shorten the __init__() method of !CommandLineInterface by extracting the logging configuration into another method
fschwarz
parents:
521
diff
changeset
|
668 self.log = logging.getLogger('babel') |
e5a2231ce176
shorten the __init__() method of !CommandLineInterface by extracting the logging configuration into another method
fschwarz
parents:
521
diff
changeset
|
669 self.log.setLevel(loglevel) |
e5a2231ce176
shorten the __init__() method of !CommandLineInterface by extracting the logging configuration into another method
fschwarz
parents:
521
diff
changeset
|
670 # Don't add a new handler for every instance initialization (#227), this |
e5a2231ce176
shorten the __init__() method of !CommandLineInterface by extracting the logging configuration into another method
fschwarz
parents:
521
diff
changeset
|
671 # would cause duplicated output when the CommandLineInterface as an |
e5a2231ce176
shorten the __init__() method of !CommandLineInterface by extracting the logging configuration into another method
fschwarz
parents:
521
diff
changeset
|
672 # normal Python class. |
e5a2231ce176
shorten the __init__() method of !CommandLineInterface by extracting the logging configuration into another method
fschwarz
parents:
521
diff
changeset
|
673 if self.log.handlers: |
e5a2231ce176
shorten the __init__() method of !CommandLineInterface by extracting the logging configuration into another method
fschwarz
parents:
521
diff
changeset
|
674 handler = self.log.handlers[0] |
e5a2231ce176
shorten the __init__() method of !CommandLineInterface by extracting the logging configuration into another method
fschwarz
parents:
521
diff
changeset
|
675 else: |
e5a2231ce176
shorten the __init__() method of !CommandLineInterface by extracting the logging configuration into another method
fschwarz
parents:
521
diff
changeset
|
676 handler = logging.StreamHandler() |
e5a2231ce176
shorten the __init__() method of !CommandLineInterface by extracting the logging configuration into another method
fschwarz
parents:
521
diff
changeset
|
677 self.log.addHandler(handler) |
e5a2231ce176
shorten the __init__() method of !CommandLineInterface by extracting the logging configuration into another method
fschwarz
parents:
521
diff
changeset
|
678 handler.setLevel(loglevel) |
e5a2231ce176
shorten the __init__() method of !CommandLineInterface by extracting the logging configuration into another method
fschwarz
parents:
521
diff
changeset
|
679 formatter = logging.Formatter('%(message)s') |
e5a2231ce176
shorten the __init__() method of !CommandLineInterface by extracting the logging configuration into another method
fschwarz
parents:
521
diff
changeset
|
680 handler.setFormatter(formatter) |
e5a2231ce176
shorten the __init__() method of !CommandLineInterface by extracting the logging configuration into another method
fschwarz
parents:
521
diff
changeset
|
681 |
63
47353672f1a8
Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents:
62
diff
changeset
|
682 def _help(self): |
47353672f1a8
Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents:
62
diff
changeset
|
683 print self.parser.format_help() |
127 | 684 print "commands:" |
63
47353672f1a8
Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents:
62
diff
changeset
|
685 longest = max([len(command) for command in self.commands]) |
185
6503a227ba93
Add a command-line option that prints out all available locales. Closes #24.
cmlenz
parents:
181
diff
changeset
|
686 format = " %%-%ds %%s" % max(8, longest + 1) |
161 | 687 commands = self.commands.items() |
688 commands.sort() | |
689 for name, description in commands: | |
690 print format % (name, description) | |
87
72c7ac384609
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
86
diff
changeset
|
691 |
160 | 692 def compile(self, argv): |
693 """Subcommand for compiling a message catalog to a MO file. | |
694 | |
695 :param argv: the command arguments | |
234 | 696 :since: version 0.9 |
160 | 697 """ |
177
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
698 parser = OptionParser(usage=self.usage % ('compile', ''), |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
699 description=self.commands['compile']) |
160 | 700 parser.add_option('--domain', '-D', dest='domain', |
701 help="domain of MO and PO files (default '%default')") | |
702 parser.add_option('--directory', '-d', dest='directory', | |
703 metavar='DIR', help='base directory of catalog files') | |
177
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
704 parser.add_option('--locale', '-l', dest='locale', metavar='LOCALE', |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
705 help='locale of the catalog') |
160 | 706 parser.add_option('--input-file', '-i', dest='input_file', |
707 metavar='FILE', help='name of the input file') | |
708 parser.add_option('--output-file', '-o', dest='output_file', | |
709 metavar='FILE', | |
710 help="name of the output file (default " | |
711 "'<output_dir>/<locale>/LC_MESSAGES/" | |
712 "<domain>.mo')") | |
713 parser.add_option('--use-fuzzy', '-f', dest='use_fuzzy', | |
714 action='store_true', | |
715 help='also include fuzzy translations (default ' | |
207 | 716 '%default)') |
717 parser.add_option('--statistics', dest='statistics', | |
718 action='store_true', | |
719 help='print statistics about translations') | |
160 | 720 |
170
3f9d9268537d
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
169
diff
changeset
|
721 parser.set_defaults(domain='messages', use_fuzzy=False, |
207 | 722 compile_all=False, statistics=False) |
170
3f9d9268537d
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
169
diff
changeset
|
723 options, args = parser.parse_args(argv) |
160 | 724 |
177
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
725 po_files = [] |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
726 mo_files = [] |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
727 if not options.input_file: |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
728 if not options.directory: |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
729 parser.error('you must specify either the input file or the ' |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
730 'base directory') |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
731 if options.locale: |
331
afc5070a623c
Fix message catalog compilation for locales with more than two plural forms. Closes #95. Many thanks to Victor Safronovich for the patch.
cmlenz
parents:
317
diff
changeset
|
732 po_files.append((options.locale, |
afc5070a623c
Fix message catalog compilation for locales with more than two plural forms. Closes #95. Many thanks to Victor Safronovich for the patch.
cmlenz
parents:
317
diff
changeset
|
733 os.path.join(options.directory, |
afc5070a623c
Fix message catalog compilation for locales with more than two plural forms. Closes #95. Many thanks to Victor Safronovich for the patch.
cmlenz
parents:
317
diff
changeset
|
734 options.locale, 'LC_MESSAGES', |
afc5070a623c
Fix message catalog compilation for locales with more than two plural forms. Closes #95. Many thanks to Victor Safronovich for the patch.
cmlenz
parents:
317
diff
changeset
|
735 options.domain + '.po'))) |
177
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
736 mo_files.append(os.path.join(options.directory, options.locale, |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
737 'LC_MESSAGES', |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
738 options.domain + '.mo')) |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
739 else: |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
740 for locale in os.listdir(options.directory): |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
741 po_file = os.path.join(options.directory, locale, |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
742 'LC_MESSAGES', options.domain + '.po') |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
743 if os.path.exists(po_file): |
331
afc5070a623c
Fix message catalog compilation for locales with more than two plural forms. Closes #95. Many thanks to Victor Safronovich for the patch.
cmlenz
parents:
317
diff
changeset
|
744 po_files.append((locale, po_file)) |
177
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
745 mo_files.append(os.path.join(options.directory, locale, |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
746 'LC_MESSAGES', |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
747 options.domain + '.mo')) |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
748 else: |
331
afc5070a623c
Fix message catalog compilation for locales with more than two plural forms. Closes #95. Many thanks to Victor Safronovich for the patch.
cmlenz
parents:
317
diff
changeset
|
749 po_files.append((options.locale, options.input_file)) |
177
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
750 if options.output_file: |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
751 mo_files.append(options.output_file) |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
752 else: |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
753 if not options.directory: |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
754 parser.error('you must specify either the input file or ' |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
755 'the base directory') |
290 | 756 mo_files.append(os.path.join(options.directory, options.locale, |
177
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
757 'LC_MESSAGES', |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
758 options.domain + '.mo')) |
208
d17f4b876f95
Make frontends that make use of a ''loop all'' fail if no message catalogs are found.
palgarvio
parents:
207
diff
changeset
|
759 if not po_files: |
d17f4b876f95
Make frontends that make use of a ''loop all'' fail if no message catalogs are found.
palgarvio
parents:
207
diff
changeset
|
760 parser.error('no message catalogs found') |
160 | 761 |
331
afc5070a623c
Fix message catalog compilation for locales with more than two plural forms. Closes #95. Many thanks to Victor Safronovich for the patch.
cmlenz
parents:
317
diff
changeset
|
762 for idx, (locale, po_file) in enumerate(po_files): |
177
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
763 mo_file = mo_files[idx] |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
764 infile = open(po_file, 'r') |
170
3f9d9268537d
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
169
diff
changeset
|
765 try: |
331
afc5070a623c
Fix message catalog compilation for locales with more than two plural forms. Closes #95. Many thanks to Victor Safronovich for the patch.
cmlenz
parents:
317
diff
changeset
|
766 catalog = read_po(infile, locale) |
170
3f9d9268537d
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
169
diff
changeset
|
767 finally: |
3f9d9268537d
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
169
diff
changeset
|
768 infile.close() |
177
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
769 |
207 | 770 if options.statistics: |
771 translated = 0 | |
772 for message in list(catalog)[1:]: | |
773 if message.string: | |
774 translated +=1 | |
317 | 775 percentage = 0 |
776 if len(catalog): | |
777 percentage = translated * 100 // len(catalog) | |
232 | 778 self.log.info("%d of %d messages (%d%%) translated in %r", |
317 | 779 translated, len(catalog), percentage, po_file) |
207 | 780 |
175
5d32098d8352
Changed the `__repr__` output to include the flags(it can be changed back, but it was usefull to implement the fuzzy header parsing).
palgarvio
parents:
170
diff
changeset
|
781 if catalog.fuzzy and not options.use_fuzzy: |
232 | 782 self.log.warn('catalog %r is marked as fuzzy, skipping', |
783 po_file) | |
177
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
784 continue |
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
785 |
220
97b4b289e792
Added infrastructure for adding catalog checkers, and implement a checker that validations Python format parameters in translations, closing #19.
cmlenz
parents:
210
diff
changeset
|
786 for message, errors in catalog.check(): |
97b4b289e792
Added infrastructure for adding catalog checkers, and implement a checker that validations Python format parameters in translations, closing #19.
cmlenz
parents:
210
diff
changeset
|
787 for error in errors: |
232 | 788 self.log.error('error: %s:%d: %s', po_file, message.lineno, |
789 error) | |
220
97b4b289e792
Added infrastructure for adding catalog checkers, and implement a checker that validations Python format parameters in translations, closing #19.
cmlenz
parents:
210
diff
changeset
|
790 |
232 | 791 self.log.info('compiling catalog %r to %r', po_file, mo_file) |
177
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
792 |
279 | 793 outfile = open(mo_file, 'wb') |
170
3f9d9268537d
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
169
diff
changeset
|
794 try: |
3f9d9268537d
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
169
diff
changeset
|
795 write_mo(outfile, catalog, use_fuzzy=options.use_fuzzy) |
3f9d9268537d
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
169
diff
changeset
|
796 finally: |
3f9d9268537d
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
169
diff
changeset
|
797 outfile.close() |
160 | 798 |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
799 def extract(self, argv): |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
800 """Subcommand for extracting messages from source files and generating |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
801 a POT file. |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
802 |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
803 :param argv: the command arguments |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
804 """ |
66
2504451884f3
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
63
diff
changeset
|
805 parser = OptionParser(usage=self.usage % ('extract', 'dir1 <dir2> ...'), |
161 | 806 description=self.commands['extract']) |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
807 parser.add_option('--charset', dest='charset', |
160 | 808 help='charset to use in the output (default ' |
809 '"%default")') | |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
810 parser.add_option('-k', '--keyword', dest='keywords', action='append', |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
811 help='keywords to look for in addition to the ' |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
812 'defaults. You can specify multiple -k flags on ' |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
813 'the command line.') |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
814 parser.add_option('--no-default-keywords', dest='no_default_keywords', |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
815 action='store_true', |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
816 help="do not include the default keywords") |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
817 parser.add_option('--mapping', '-F', dest='mapping_file', |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
818 help='path to the extraction mapping file') |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
819 parser.add_option('--no-location', dest='no_location', |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
820 action='store_true', |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
821 help='do not include location comments with filename ' |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
822 'and line number') |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
823 parser.add_option('--omit-header', dest='omit_header', |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
824 action='store_true', |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
825 help='do not include msgid "" entry in header') |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
826 parser.add_option('-o', '--output', dest='output', |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
827 help='path to the output POT file') |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
828 parser.add_option('-w', '--width', dest='width', type='int', |
423
fb926f48efba
Now, the `--width` option, although with a default value of 76, it's not set to any value initially so that the `--no-wrap` option can be passed without throwing an error. Fixes #145.
palgarvio
parents:
417
diff
changeset
|
829 help="set output line width (default 76)") |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
830 parser.add_option('--no-wrap', dest='no_wrap', action = 'store_true', |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
831 help='do not break long message lines, longer than ' |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
832 'the output line width, into several lines') |
71 | 833 parser.add_option('--sort-output', dest='sort_output', |
834 action='store_true', | |
835 help='generate sorted output (default False)') | |
836 parser.add_option('--sort-by-file', dest='sort_by_file', | |
837 action='store_true', | |
838 help='sort output by file location (default False)') | |
78
d0d8d6cd8601
Fixed the plurals header on `Catalog` which should only be written if it's not a catalog template.
palgarvio
parents:
71
diff
changeset
|
839 parser.add_option('--msgid-bugs-address', dest='msgid_bugs_address', |
d0d8d6cd8601
Fixed the plurals header on `Catalog` which should only be written if it's not a catalog template.
palgarvio
parents:
71
diff
changeset
|
840 metavar='EMAIL@ADDRESS', |
d0d8d6cd8601
Fixed the plurals header on `Catalog` which should only be written if it's not a catalog template.
palgarvio
parents:
71
diff
changeset
|
841 help='set report address for msgid') |
79
450ac2291ca5
Implemented item 4 from #12. Set the copyright holder in the output.
palgarvio
parents:
78
diff
changeset
|
842 parser.add_option('--copyright-holder', dest='copyright_holder', |
450ac2291ca5
Implemented item 4 from #12. Set the copyright holder in the output.
palgarvio
parents:
78
diff
changeset
|
843 help='set copyright holder in output') |
429
28755da4bf13
add `--project` and `--version` options for commandline (fixes #173)
dfraser
parents:
424
diff
changeset
|
844 parser.add_option('--project', dest='project', |
28755da4bf13
add `--project` and `--version` options for commandline (fixes #173)
dfraser
parents:
424
diff
changeset
|
845 help='set project name in output') |
28755da4bf13
add `--project` and `--version` options for commandline (fixes #173)
dfraser
parents:
424
diff
changeset
|
846 parser.add_option('--version', dest='version', |
28755da4bf13
add `--project` and `--version` options for commandline (fixes #173)
dfraser
parents:
424
diff
changeset
|
847 help='set project version in output') |
95
f9007588a860
Fix for #11 (use local timezone in timestamps of generated POT).
cmlenz
parents:
90
diff
changeset
|
848 parser.add_option('--add-comments', '-c', dest='comment_tags', |
80
116e34b8cefa
Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents:
79
diff
changeset
|
849 metavar='TAG', action='append', |
116e34b8cefa
Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents:
79
diff
changeset
|
850 help='place comment block with TAG (or those ' |
116e34b8cefa
Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents:
79
diff
changeset
|
851 'preceding keyword lines) in output file. One ' |
116e34b8cefa
Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents:
79
diff
changeset
|
852 'TAG per argument call') |
338
b39145076d8a
Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents:
335
diff
changeset
|
853 parser.add_option('--strip-comment-tags', '-s', |
b39145076d8a
Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents:
335
diff
changeset
|
854 dest='strip_comment_tags', action='store_true', |
b39145076d8a
Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents:
335
diff
changeset
|
855 help='Strip the comment tags from the comments.') |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
856 |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
857 parser.set_defaults(charset='utf-8', keywords=[], |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
858 no_default_keywords=False, no_location=False, |
423
fb926f48efba
Now, the `--width` option, although with a default value of 76, it's not set to any value initially so that the `--no-wrap` option can be passed without throwing an error. Fixes #145.
palgarvio
parents:
417
diff
changeset
|
859 omit_header = False, width=None, no_wrap=False, |
80
116e34b8cefa
Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents:
79
diff
changeset
|
860 sort_output=False, sort_by_file=False, |
338
b39145076d8a
Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents:
335
diff
changeset
|
861 comment_tags=[], strip_comment_tags=False) |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
862 options, args = parser.parse_args(argv) |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
863 if not args: |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
864 parser.error('incorrect number of arguments') |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
865 |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
866 if options.output not in (None, '-'): |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
867 outfile = open(options.output, 'w') |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
868 else: |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
869 outfile = sys.stdout |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
870 |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
871 keywords = DEFAULT_KEYWORDS.copy() |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
872 if options.no_default_keywords: |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
873 if not options.keywords: |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
874 parser.error('you must specify new keywords if you disable the ' |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
875 'default ones') |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
876 keywords = {} |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
877 if options.keywords: |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
878 keywords.update(parse_keywords(options.keywords)) |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
879 |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
880 if options.mapping_file: |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
881 fileobj = open(options.mapping_file, 'U') |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
882 try: |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
883 method_map, options_map = parse_mapping(fileobj) |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
884 finally: |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
885 fileobj.close() |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
886 else: |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
887 method_map = DEFAULT_MAPPING |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
888 options_map = {} |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
889 |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
890 if options.width and options.no_wrap: |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
891 parser.error("'--no-wrap' and '--width' are mutually exclusive.") |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
892 elif not options.width and not options.no_wrap: |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
893 options.width = 76 |
87
72c7ac384609
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
86
diff
changeset
|
894 |
71 | 895 if options.sort_output and options.sort_by_file: |
896 parser.error("'--sort-output' and '--sort-by-file' are mutually " | |
897 "exclusive") | |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
898 |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
899 try: |
429
28755da4bf13
add `--project` and `--version` options for commandline (fixes #173)
dfraser
parents:
424
diff
changeset
|
900 catalog = Catalog(project=options.project, |
28755da4bf13
add `--project` and `--version` options for commandline (fixes #173)
dfraser
parents:
424
diff
changeset
|
901 version=options.version, |
28755da4bf13
add `--project` and `--version` options for commandline (fixes #173)
dfraser
parents:
424
diff
changeset
|
902 msgid_bugs_address=options.msgid_bugs_address, |
105
c62b68a0b65e
`Message`, `read_po` and `write_po` now all handle user/auto comments correctly.
palgarvio
parents:
104
diff
changeset
|
903 copyright_holder=options.copyright_holder, |
102
14a3d766a701
Project name and version, and the charset are available via the `Catalog` object, and do not need to be passed to `write_pot()`.
cmlenz
parents:
95
diff
changeset
|
904 charset=options.charset) |
14a3d766a701
Project name and version, and the charset are available via the `Catalog` object, and do not need to be passed to `write_pot()`.
cmlenz
parents:
95
diff
changeset
|
905 |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
906 for dirname in args: |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
907 if not os.path.isdir(dirname): |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
908 parser.error('%r is not a directory' % dirname) |
232 | 909 |
910 def callback(filename, method, options): | |
911 if method == 'ignore': | |
912 return | |
913 filepath = os.path.normpath(os.path.join(dirname, filename)) | |
914 optstr = '' | |
915 if options: | |
916 optstr = ' (%s)' % ', '.join(['%s="%s"' % (k, v) for | |
917 k, v in options.items()]) | |
918 self.log.info('extracting messages from %s%s', filepath, | |
919 optstr) | |
920 | |
95
f9007588a860
Fix for #11 (use local timezone in timestamps of generated POT).
cmlenz
parents:
90
diff
changeset
|
921 extracted = extract_from_dir(dirname, method_map, options_map, |
232 | 922 keywords, options.comment_tags, |
338
b39145076d8a
Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents:
335
diff
changeset
|
923 callback=callback, |
b39145076d8a
Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents:
335
diff
changeset
|
924 strip_comment_tags= |
b39145076d8a
Stripping of comment tags is optional now. If enabled it will strip the tags from all lines of a comment now.
aronacher
parents:
335
diff
changeset
|
925 options.strip_comment_tags) |
569
1b801a0cb2cb
Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
fschwarz
parents:
563
diff
changeset
|
926 for filename, lineno, message, comments, context in extracted: |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
927 filepath = os.path.normpath(os.path.join(dirname, filename)) |
177
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
928 catalog.add(message, None, [(filepath, lineno)], |
569
1b801a0cb2cb
Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
fschwarz
parents:
563
diff
changeset
|
929 auto_comments=comments, context=context) |
56
f40fc143439c
Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents:
55
diff
changeset
|
930 |
232 | 931 if options.output not in (None, '-'): |
932 self.log.info('writing PO template file to %s' % options.output) | |
104
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
933 write_po(outfile, catalog, width=options.width, |
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
934 no_location=options.no_location, |
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
935 omit_header=options.omit_header, |
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
936 sort_output=options.sort_output, |
112
5c55ca587c89
copyright_holder arg is no longer needed for write_po
pjenvey
parents:
110
diff
changeset
|
937 sort_by_file=options.sort_by_file) |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
938 finally: |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
939 if options.output: |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
940 outfile.close() |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
941 |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
942 def init(self, argv): |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
943 """Subcommand for creating new message catalogs from a template. |
177
beb8a9eabe6d
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
176
diff
changeset
|
944 |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
945 :param argv: the command arguments |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
946 """ |
165
628bc271ece4
Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents:
161
diff
changeset
|
947 parser = OptionParser(usage=self.usage % ('init', ''), |
161 | 948 description=self.commands['init']) |
66
2504451884f3
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
63
diff
changeset
|
949 parser.add_option('--domain', '-D', dest='domain', |
104
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
950 help="domain of PO file (default '%default')") |
66
2504451884f3
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
63
diff
changeset
|
951 parser.add_option('--input-file', '-i', dest='input_file', |
104
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
952 metavar='FILE', help='name of the input file') |
66
2504451884f3
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
63
diff
changeset
|
953 parser.add_option('--output-dir', '-d', dest='output_dir', |
104
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
954 metavar='DIR', help='path to output directory') |
66
2504451884f3
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
63
diff
changeset
|
955 parser.add_option('--output-file', '-o', dest='output_file', |
104
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
956 metavar='FILE', |
66
2504451884f3
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
63
diff
changeset
|
957 help="name of the output file (default " |
87
72c7ac384609
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
86
diff
changeset
|
958 "'<output_dir>/<locale>/LC_MESSAGES/" |
72c7ac384609
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
86
diff
changeset
|
959 "<domain>.po')") |
104
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
960 parser.add_option('--locale', '-l', dest='locale', metavar='LOCALE', |
66
2504451884f3
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
63
diff
changeset
|
961 help='locale for the new localized catalog') |
574
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
962 parser.add_option('--no-wrap', dest='no_wrap', action='store_true', |
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
963 help='do not break long message lines, longer than ' |
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
964 'the output line width, into several lines') |
87
72c7ac384609
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
86
diff
changeset
|
965 |
104
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
966 parser.set_defaults(domain='messages') |
66
2504451884f3
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
63
diff
changeset
|
967 options, args = parser.parse_args(argv) |
87
72c7ac384609
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
86
diff
changeset
|
968 |
104
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
969 if not options.locale: |
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
970 parser.error('you must provide a locale for the new catalog') |
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
971 try: |
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
972 locale = Locale.parse(options.locale) |
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
973 except UnknownLocaleError, e: |
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
974 parser.error(e) |
87
72c7ac384609
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
86
diff
changeset
|
975 |
66
2504451884f3
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
63
diff
changeset
|
976 if not options.input_file: |
2504451884f3
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
63
diff
changeset
|
977 parser.error('you must specify the input file') |
87
72c7ac384609
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
86
diff
changeset
|
978 |
104
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
979 if not options.output_file and not options.output_dir: |
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
980 parser.error('you must specify the output file or directory') |
87
72c7ac384609
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
86
diff
changeset
|
981 |
104
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
982 if not options.output_file: |
66
2504451884f3
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
63
diff
changeset
|
983 options.output_file = os.path.join(options.output_dir, |
104
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
984 options.locale, 'LC_MESSAGES', |
66
2504451884f3
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
63
diff
changeset
|
985 options.domain + '.po') |
87
72c7ac384609
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
86
diff
changeset
|
986 if not os.path.exists(os.path.dirname(options.output_file)): |
72c7ac384609
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
86
diff
changeset
|
987 os.makedirs(os.path.dirname(options.output_file)) |
574
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
988 width = 76 |
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
989 if options.no_wrap: |
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
990 width = None |
87
72c7ac384609
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
86
diff
changeset
|
991 |
66
2504451884f3
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
63
diff
changeset
|
992 infile = open(options.input_file, 'r') |
104
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
993 try: |
371 | 994 # Although reading from the catalog template, read_po must be fed |
563 | 995 # the locale in order to correctly calculate plurals |
371 | 996 catalog = read_po(infile, locale=options.locale) |
104
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
997 finally: |
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
998 infile.close() |
87
72c7ac384609
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
86
diff
changeset
|
999 |
104
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
1000 catalog.locale = locale |
132 | 1001 catalog.revision_date = datetime.now(LOCALTZ) |
66
2504451884f3
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
63
diff
changeset
|
1002 |
232 | 1003 self.log.info('creating catalog %r based on %r', options.output_file, |
1004 options.input_file) | |
66
2504451884f3
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
63
diff
changeset
|
1005 |
104
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
1006 outfile = open(options.output_file, 'w') |
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
1007 try: |
574
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
1008 write_po(outfile, catalog, width=width) |
104
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
1009 finally: |
395704fda00b
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
103
diff
changeset
|
1010 outfile.close() |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
1011 |
181
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1012 def update(self, argv): |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1013 """Subcommand for updating existing message catalogs from a template. |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1014 |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1015 :param argv: the command arguments |
234 | 1016 :since: version 0.9 |
181
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1017 """ |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1018 parser = OptionParser(usage=self.usage % ('update', ''), |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1019 description=self.commands['update']) |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1020 parser.add_option('--domain', '-D', dest='domain', |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1021 help="domain of PO file (default '%default')") |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1022 parser.add_option('--input-file', '-i', dest='input_file', |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1023 metavar='FILE', help='name of the input file') |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1024 parser.add_option('--output-dir', '-d', dest='output_dir', |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1025 metavar='DIR', help='path to output directory') |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1026 parser.add_option('--output-file', '-o', dest='output_file', |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1027 metavar='FILE', |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1028 help="name of the output file (default " |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1029 "'<output_dir>/<locale>/LC_MESSAGES/" |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1030 "<domain>.po')") |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1031 parser.add_option('--locale', '-l', dest='locale', metavar='LOCALE', |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1032 help='locale of the translations catalog') |
574
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
1033 parser.add_option('--no-wrap', dest='no_wrap', action = 'store_true', |
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
1034 help='do not break long message lines, longer than ' |
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
1035 'the output line width, into several lines') |
191
c171a0041ad2
Add an option to the frontend commands for catalog updating that removes completely any obsolete messages, instead of putting them comments.
cmlenz
parents:
185
diff
changeset
|
1036 parser.add_option('--ignore-obsolete', dest='ignore_obsolete', |
c171a0041ad2
Add an option to the frontend commands for catalog updating that removes completely any obsolete messages, instead of putting them comments.
cmlenz
parents:
185
diff
changeset
|
1037 action='store_true', |
c171a0041ad2
Add an option to the frontend commands for catalog updating that removes completely any obsolete messages, instead of putting them comments.
cmlenz
parents:
185
diff
changeset
|
1038 help='do not include obsolete messages in the output ' |
417 | 1039 '(default %default)') |
200
1c778cccd330
Added `--no-fuzzy-matching` to the frontends and also `--previous` which adds the old msgid's as comments. The latest closes #31.
palgarvio
parents:
197
diff
changeset
|
1040 parser.add_option('--no-fuzzy-matching', '-N', dest='no_fuzzy_matching', |
1c778cccd330
Added `--no-fuzzy-matching` to the frontends and also `--previous` which adds the old msgid's as comments. The latest closes #31.
palgarvio
parents:
197
diff
changeset
|
1041 action='store_true', |
417 | 1042 help='do not use fuzzy matching (default %default)') |
200
1c778cccd330
Added `--no-fuzzy-matching` to the frontends and also `--previous` which adds the old msgid's as comments. The latest closes #31.
palgarvio
parents:
197
diff
changeset
|
1043 parser.add_option('--previous', dest='previous', action='store_true', |
1c778cccd330
Added `--no-fuzzy-matching` to the frontends and also `--previous` which adds the old msgid's as comments. The latest closes #31.
palgarvio
parents:
197
diff
changeset
|
1044 help='keep previous msgids of translated messages ' |
417 | 1045 '(default %default)') |
181
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1046 |
200
1c778cccd330
Added `--no-fuzzy-matching` to the frontends and also `--previous` which adds the old msgid's as comments. The latest closes #31.
palgarvio
parents:
197
diff
changeset
|
1047 parser.set_defaults(domain='messages', ignore_obsolete=False, |
1c778cccd330
Added `--no-fuzzy-matching` to the frontends and also `--previous` which adds the old msgid's as comments. The latest closes #31.
palgarvio
parents:
197
diff
changeset
|
1048 no_fuzzy_matching=False, previous=False) |
181
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1049 options, args = parser.parse_args(argv) |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1050 |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1051 if not options.input_file: |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1052 parser.error('you must specify the input file') |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1053 if not options.output_file and not options.output_dir: |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1054 parser.error('you must specify the output file or directory') |
196
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
1055 if options.output_file and not options.locale: |
417 | 1056 parser.error('you must specify the locale') |
200
1c778cccd330
Added `--no-fuzzy-matching` to the frontends and also `--previous` which adds the old msgid's as comments. The latest closes #31.
palgarvio
parents:
197
diff
changeset
|
1057 if options.no_fuzzy_matching and options.previous: |
1c778cccd330
Added `--no-fuzzy-matching` to the frontends and also `--previous` which adds the old msgid's as comments. The latest closes #31.
palgarvio
parents:
197
diff
changeset
|
1058 options.previous = False |
181
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1059 |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1060 po_files = [] |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1061 if not options.output_file: |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1062 if options.locale: |
196
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
1063 po_files.append((options.locale, |
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
1064 os.path.join(options.output_dir, |
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
1065 options.locale, 'LC_MESSAGES', |
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
1066 options.domain + '.po'))) |
181
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1067 else: |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1068 for locale in os.listdir(options.output_dir): |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1069 po_file = os.path.join(options.output_dir, locale, |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1070 'LC_MESSAGES', |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1071 options.domain + '.po') |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1072 if os.path.exists(po_file): |
196
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
1073 po_files.append((locale, po_file)) |
181
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1074 else: |
196
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
1075 po_files.append((options.locale, options.output_file)) |
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
1076 |
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
1077 domain = options.domain |
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
1078 if not domain: |
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
1079 domain = os.path.splitext(os.path.basename(options.input_file))[0] |
181
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1080 |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1081 infile = open(options.input_file, 'U') |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1082 try: |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1083 template = read_po(infile) |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1084 finally: |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1085 infile.close() |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1086 |
208
d17f4b876f95
Make frontends that make use of a ''loop all'' fail if no message catalogs are found.
palgarvio
parents:
207
diff
changeset
|
1087 if not po_files: |
d17f4b876f95
Make frontends that make use of a ''loop all'' fail if no message catalogs are found.
palgarvio
parents:
207
diff
changeset
|
1088 parser.error('no message catalogs found') |
d17f4b876f95
Make frontends that make use of a ''loop all'' fail if no message catalogs are found.
palgarvio
parents:
207
diff
changeset
|
1089 |
574
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
1090 extra_params = {} |
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
1091 if options.no_wrap: |
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
1092 extra_params['width'] = None |
196
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
1093 for locale, filename in po_files: |
232 | 1094 self.log.info('updating catalog %r based on %r', filename, |
1095 options.input_file) | |
196
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
1096 infile = open(filename, 'U') |
181
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1097 try: |
196
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
1098 catalog = read_po(infile, locale=locale, domain=domain) |
181
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1099 finally: |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1100 infile.close() |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1101 |
204 | 1102 catalog.update(template, options.no_fuzzy_matching) |
197
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
1103 |
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
1104 tmpname = os.path.join(os.path.dirname(filename), |
200
1c778cccd330
Added `--no-fuzzy-matching` to the frontends and also `--previous` which adds the old msgid's as comments. The latest closes #31.
palgarvio
parents:
197
diff
changeset
|
1105 tempfile.gettempprefix() + |
197
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
1106 os.path.basename(filename)) |
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
1107 tmpfile = open(tmpname, 'w') |
181
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1108 try: |
197
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
1109 try: |
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
1110 write_po(tmpfile, catalog, |
200
1c778cccd330
Added `--no-fuzzy-matching` to the frontends and also `--previous` which adds the old msgid's as comments. The latest closes #31.
palgarvio
parents:
197
diff
changeset
|
1111 ignore_obsolete=options.ignore_obsolete, |
574
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
1112 include_previous=options.previous, **extra_params) |
197
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
1113 finally: |
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
1114 tmpfile.close() |
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
1115 except: |
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
1116 os.remove(tmpname) |
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
1117 raise |
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
1118 |
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
1119 try: |
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
1120 os.rename(tmpname, filename) |
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
1121 except OSError: |
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
1122 # We're probably on Windows, which doesn't support atomic |
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
1123 # renames, at least not through Python |
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
1124 # If the error is in fact due to a permissions problem, that |
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
1125 # same error is going to be raised from one of the following |
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
1126 # operations |
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
1127 os.remove(filename) |
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
1128 shutil.copy(tmpname, filename) |
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
1129 os.remove(tmpname) |
181
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1130 |
165
628bc271ece4
Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents:
161
diff
changeset
|
1131 |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
1132 def main(): |
185
6503a227ba93
Add a command-line option that prints out all available locales. Closes #24.
cmlenz
parents:
181
diff
changeset
|
1133 return CommandLineInterface().run(sys.argv) |
1 | 1134 |
48
22b90b3b161a
Move the mapping configuration file format to `ConfigParser`, and add some more documentation about it.
cmlenz
parents:
47
diff
changeset
|
1135 def parse_mapping(fileobj, filename=None): |
47
f8469ab4b257
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
24
diff
changeset
|
1136 """Parse an extraction method mapping from a file-like object. |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
1137 |
47
f8469ab4b257
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
24
diff
changeset
|
1138 >>> buf = StringIO(''' |
250
6c06570af1b9
Soften dependency on setuptools. Extraction methods can now be referenced using a special section in the mapping configuration, mapping short names to fully-qualified function references.
cmlenz
parents:
234
diff
changeset
|
1139 ... [extractors] |
6c06570af1b9
Soften dependency on setuptools. Extraction methods can now be referenced using a special section in the mapping configuration, mapping short names to fully-qualified function references.
cmlenz
parents:
234
diff
changeset
|
1140 ... custom = mypackage.module:myfunc |
6c06570af1b9
Soften dependency on setuptools. Extraction methods can now be referenced using a special section in the mapping configuration, mapping short names to fully-qualified function references.
cmlenz
parents:
234
diff
changeset
|
1141 ... |
47
f8469ab4b257
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
24
diff
changeset
|
1142 ... # Python source files |
62
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
1143 ... [python: **.py] |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
1144 ... |
47
f8469ab4b257
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
24
diff
changeset
|
1145 ... # Genshi templates |
62
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
1146 ... [genshi: **/templates/**.html] |
48
22b90b3b161a
Move the mapping configuration file format to `ConfigParser`, and add some more documentation about it.
cmlenz
parents:
47
diff
changeset
|
1147 ... include_attrs = |
62
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
1148 ... [genshi: **/templates/**.txt] |
144 | 1149 ... template_class = genshi.template:TextTemplate |
48
22b90b3b161a
Move the mapping configuration file format to `ConfigParser`, and add some more documentation about it.
cmlenz
parents:
47
diff
changeset
|
1150 ... encoding = latin-1 |
250
6c06570af1b9
Soften dependency on setuptools. Extraction methods can now be referenced using a special section in the mapping configuration, mapping short names to fully-qualified function references.
cmlenz
parents:
234
diff
changeset
|
1151 ... |
6c06570af1b9
Soften dependency on setuptools. Extraction methods can now be referenced using a special section in the mapping configuration, mapping short names to fully-qualified function references.
cmlenz
parents:
234
diff
changeset
|
1152 ... # Some custom extractor |
6c06570af1b9
Soften dependency on setuptools. Extraction methods can now be referenced using a special section in the mapping configuration, mapping short names to fully-qualified function references.
cmlenz
parents:
234
diff
changeset
|
1153 ... [custom: **/custom/*.*] |
47
f8469ab4b257
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
24
diff
changeset
|
1154 ... ''') |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
1155 |
47
f8469ab4b257
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
24
diff
changeset
|
1156 >>> method_map, options_map = parse_mapping(buf) |
250
6c06570af1b9
Soften dependency on setuptools. Extraction methods can now be referenced using a special section in the mapping configuration, mapping short names to fully-qualified function references.
cmlenz
parents:
234
diff
changeset
|
1157 >>> len(method_map) |
6c06570af1b9
Soften dependency on setuptools. Extraction methods can now be referenced using a special section in the mapping configuration, mapping short names to fully-qualified function references.
cmlenz
parents:
234
diff
changeset
|
1158 4 |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
1159 |
62
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
1160 >>> method_map[0] |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
1161 ('**.py', 'python') |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
1162 >>> options_map['**.py'] |
47
f8469ab4b257
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
24
diff
changeset
|
1163 {} |
62
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
1164 >>> method_map[1] |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
1165 ('**/templates/**.html', 'genshi') |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
1166 >>> options_map['**/templates/**.html']['include_attrs'] |
47
f8469ab4b257
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
24
diff
changeset
|
1167 '' |
62
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
1168 >>> method_map[2] |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
1169 ('**/templates/**.txt', 'genshi') |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
1170 >>> options_map['**/templates/**.txt']['template_class'] |
144 | 1171 'genshi.template:TextTemplate' |
62
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
1172 >>> options_map['**/templates/**.txt']['encoding'] |
47
f8469ab4b257
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
24
diff
changeset
|
1173 'latin-1' |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
1174 |
250
6c06570af1b9
Soften dependency on setuptools. Extraction methods can now be referenced using a special section in the mapping configuration, mapping short names to fully-qualified function references.
cmlenz
parents:
234
diff
changeset
|
1175 >>> method_map[3] |
6c06570af1b9
Soften dependency on setuptools. Extraction methods can now be referenced using a special section in the mapping configuration, mapping short names to fully-qualified function references.
cmlenz
parents:
234
diff
changeset
|
1176 ('**/custom/*.*', 'mypackage.module:myfunc') |
6c06570af1b9
Soften dependency on setuptools. Extraction methods can now be referenced using a special section in the mapping configuration, mapping short names to fully-qualified function references.
cmlenz
parents:
234
diff
changeset
|
1177 >>> options_map['**/custom/*.*'] |
6c06570af1b9
Soften dependency on setuptools. Extraction methods can now be referenced using a special section in the mapping configuration, mapping short names to fully-qualified function references.
cmlenz
parents:
234
diff
changeset
|
1178 {} |
6c06570af1b9
Soften dependency on setuptools. Extraction methods can now be referenced using a special section in the mapping configuration, mapping short names to fully-qualified function references.
cmlenz
parents:
234
diff
changeset
|
1179 |
47
f8469ab4b257
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
24
diff
changeset
|
1180 :param fileobj: a readable file-like object containing the configuration |
f8469ab4b257
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
24
diff
changeset
|
1181 text to parse |
f8469ab4b257
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
24
diff
changeset
|
1182 :return: a `(method_map, options_map)` tuple |
f8469ab4b257
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
24
diff
changeset
|
1183 :rtype: `tuple` |
f8469ab4b257
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
24
diff
changeset
|
1184 :see: `extract_from_directory` |
f8469ab4b257
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
24
diff
changeset
|
1185 """ |
250
6c06570af1b9
Soften dependency on setuptools. Extraction methods can now be referenced using a special section in the mapping configuration, mapping short names to fully-qualified function references.
cmlenz
parents:
234
diff
changeset
|
1186 extractors = {} |
62
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
1187 method_map = [] |
47
f8469ab4b257
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
24
diff
changeset
|
1188 options_map = {} |
f8469ab4b257
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
24
diff
changeset
|
1189 |
48
22b90b3b161a
Move the mapping configuration file format to `ConfigParser`, and add some more documentation about it.
cmlenz
parents:
47
diff
changeset
|
1190 parser = RawConfigParser() |
62
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
1191 parser._sections = odict(parser._sections) # We need ordered sections |
48
22b90b3b161a
Move the mapping configuration file format to `ConfigParser`, and add some more documentation about it.
cmlenz
parents:
47
diff
changeset
|
1192 parser.readfp(fileobj, filename) |
22b90b3b161a
Move the mapping configuration file format to `ConfigParser`, and add some more documentation about it.
cmlenz
parents:
47
diff
changeset
|
1193 for section in parser.sections(): |
250
6c06570af1b9
Soften dependency on setuptools. Extraction methods can now be referenced using a special section in the mapping configuration, mapping short names to fully-qualified function references.
cmlenz
parents:
234
diff
changeset
|
1194 if section == 'extractors': |
6c06570af1b9
Soften dependency on setuptools. Extraction methods can now be referenced using a special section in the mapping configuration, mapping short names to fully-qualified function references.
cmlenz
parents:
234
diff
changeset
|
1195 extractors = dict(parser.items(section)) |
6c06570af1b9
Soften dependency on setuptools. Extraction methods can now be referenced using a special section in the mapping configuration, mapping short names to fully-qualified function references.
cmlenz
parents:
234
diff
changeset
|
1196 else: |
6c06570af1b9
Soften dependency on setuptools. Extraction methods can now be referenced using a special section in the mapping configuration, mapping short names to fully-qualified function references.
cmlenz
parents:
234
diff
changeset
|
1197 method, pattern = [part.strip() for part in section.split(':', 1)] |
6c06570af1b9
Soften dependency on setuptools. Extraction methods can now be referenced using a special section in the mapping configuration, mapping short names to fully-qualified function references.
cmlenz
parents:
234
diff
changeset
|
1198 method_map.append((pattern, method)) |
6c06570af1b9
Soften dependency on setuptools. Extraction methods can now be referenced using a special section in the mapping configuration, mapping short names to fully-qualified function references.
cmlenz
parents:
234
diff
changeset
|
1199 options_map[pattern] = dict(parser.items(section)) |
6c06570af1b9
Soften dependency on setuptools. Extraction methods can now be referenced using a special section in the mapping configuration, mapping short names to fully-qualified function references.
cmlenz
parents:
234
diff
changeset
|
1200 |
6c06570af1b9
Soften dependency on setuptools. Extraction methods can now be referenced using a special section in the mapping configuration, mapping short names to fully-qualified function references.
cmlenz
parents:
234
diff
changeset
|
1201 if extractors: |
6c06570af1b9
Soften dependency on setuptools. Extraction methods can now be referenced using a special section in the mapping configuration, mapping short names to fully-qualified function references.
cmlenz
parents:
234
diff
changeset
|
1202 for idx, (pattern, method) in enumerate(method_map): |
6c06570af1b9
Soften dependency on setuptools. Extraction methods can now be referenced using a special section in the mapping configuration, mapping short names to fully-qualified function references.
cmlenz
parents:
234
diff
changeset
|
1203 if method in extractors: |
6c06570af1b9
Soften dependency on setuptools. Extraction methods can now be referenced using a special section in the mapping configuration, mapping short names to fully-qualified function references.
cmlenz
parents:
234
diff
changeset
|
1204 method = extractors[method] |
6c06570af1b9
Soften dependency on setuptools. Extraction methods can now be referenced using a special section in the mapping configuration, mapping short names to fully-qualified function references.
cmlenz
parents:
234
diff
changeset
|
1205 method_map[idx] = (pattern, method) |
47
f8469ab4b257
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
24
diff
changeset
|
1206 |
f8469ab4b257
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
24
diff
changeset
|
1207 return (method_map, options_map) |
f8469ab4b257
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
24
diff
changeset
|
1208 |
12
e6ba3e878b10
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
10
diff
changeset
|
1209 def parse_keywords(strings=[]): |
e6ba3e878b10
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
10
diff
changeset
|
1210 """Parse keywords specifications from the given list of strings. |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
1211 |
569
1b801a0cb2cb
Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
fschwarz
parents:
563
diff
changeset
|
1212 >>> kw = parse_keywords(['_', 'dgettext:2', 'dngettext:2,3', 'pgettext:1c,2']).items() |
414
05487ae7696e
fix Python 2.3 compat: rearrange set/itemgetter/rsplit/sorted/unicode.decode
pjenvey
parents:
371
diff
changeset
|
1213 >>> kw.sort() |
05487ae7696e
fix Python 2.3 compat: rearrange set/itemgetter/rsplit/sorted/unicode.decode
pjenvey
parents:
371
diff
changeset
|
1214 >>> for keyword, indices in kw: |
12
e6ba3e878b10
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
10
diff
changeset
|
1215 ... print (keyword, indices) |
e6ba3e878b10
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
10
diff
changeset
|
1216 ('_', None) |
e6ba3e878b10
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
10
diff
changeset
|
1217 ('dgettext', (2,)) |
e6ba3e878b10
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
10
diff
changeset
|
1218 ('dngettext', (2, 3)) |
569
1b801a0cb2cb
Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
fschwarz
parents:
563
diff
changeset
|
1219 ('pgettext', ((1, 'c'), 2)) |
12
e6ba3e878b10
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
10
diff
changeset
|
1220 """ |
e6ba3e878b10
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
10
diff
changeset
|
1221 keywords = {} |
e6ba3e878b10
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
10
diff
changeset
|
1222 for string in strings: |
e6ba3e878b10
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
10
diff
changeset
|
1223 if ':' in string: |
e6ba3e878b10
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
10
diff
changeset
|
1224 funcname, indices = string.split(':') |
e6ba3e878b10
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
10
diff
changeset
|
1225 else: |
e6ba3e878b10
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
10
diff
changeset
|
1226 funcname, indices = string, None |
e6ba3e878b10
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
10
diff
changeset
|
1227 if funcname not in keywords: |
e6ba3e878b10
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
10
diff
changeset
|
1228 if indices: |
569
1b801a0cb2cb
Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
fschwarz
parents:
563
diff
changeset
|
1229 inds = [] |
1b801a0cb2cb
Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
fschwarz
parents:
563
diff
changeset
|
1230 for x in indices.split(','): |
1b801a0cb2cb
Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
fschwarz
parents:
563
diff
changeset
|
1231 if x[-1] == 'c': |
1b801a0cb2cb
Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
fschwarz
parents:
563
diff
changeset
|
1232 inds.append((int(x[:-1]), 'c')) |
1b801a0cb2cb
Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
fschwarz
parents:
563
diff
changeset
|
1233 else: |
1b801a0cb2cb
Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
fschwarz
parents:
563
diff
changeset
|
1234 inds.append(int(x)) |
1b801a0cb2cb
Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
fschwarz
parents:
563
diff
changeset
|
1235 indices = tuple(inds) |
12
e6ba3e878b10
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
10
diff
changeset
|
1236 keywords[funcname] = indices |
e6ba3e878b10
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
10
diff
changeset
|
1237 return keywords |
e6ba3e878b10
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
10
diff
changeset
|
1238 |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
1239 |
1 | 1240 if __name__ == '__main__': |
55
a258e4015eb6
`new_catalog` now accepts another argument, `--domain`, which is used to build the output file path, which now is of the form `<output_dir>/<locale>/<domain>.po`, the correct form.
palgarvio
parents:
54
diff
changeset
|
1241 main() |