Mercurial > babel > mirror
annotate babel/messages/frontend.py @ 600:e61e27d9347d trunk
"init" command support "--width" option (#284)
author | fschwarz |
---|---|
date | Mon, 20 Aug 2012 20:07:27 +0000 |
parents | 99c48a6ca1d6 |
children | 3eeaadb290be |
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'), |
600 | 405 ('width=', 'w', |
406 'set output line width (default 76)'), | |
574
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
407 ('no-wrap', None, |
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
408 '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
|
409 'into several lines'), |
51
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
410 ] |
574
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
411 boolean_options = ['no-wrap'] |
51
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
412 |
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
413 def initialize_options(self): |
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
414 self.output_dir = None |
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
415 self.output_file = None |
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
416 self.input_file = None |
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
417 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
|
418 self.domain = 'messages' |
574
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
419 self.no_wrap = False |
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
420 self.width = None |
51
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
421 |
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
422 def finalize_options(self): |
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
423 if not self.input_file: |
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
424 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
|
425 |
51
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
426 if not self.locale: |
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
427 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
|
428 '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
|
429 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
|
430 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
|
431 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
|
432 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
|
433 |
51
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
434 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
|
435 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
|
436 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
|
437 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
|
438 '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
|
439 |
72c7ac384609
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
86
diff
changeset
|
440 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
|
441 os.makedirs(os.path.dirname(self.output_file)) |
600 | 442 if not self.no_wrap and not self.width: |
574
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
443 self.width = 76 |
600 | 444 elif self.width is not None: |
445 self.width = int(self.width) | |
51
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
446 |
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
447 def run(self): |
90 | 448 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
|
449 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
|
450 |
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
|
451 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
|
452 try: |
370
bc18179832b7
We no longer neglect `catalog.plurals`. Added tests for it. Fixes #120.
palgarvio
parents:
338
diff
changeset
|
453 # Although reading from the catalog template, read_po must be fed |
563 | 454 # 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
|
455 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
|
456 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
|
457 infile.close() |
87
72c7ac384609
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
86
diff
changeset
|
458 |
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
|
459 catalog.locale = self._locale |
251 | 460 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
|
461 |
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 = 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
|
463 try: |
574
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
464 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
|
465 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
|
466 outfile.close() |
51
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
467 |
d484eb9a70d5
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
49
diff
changeset
|
468 |
181
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
469 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
|
470 """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
|
471 |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
472 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
|
473 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
|
474 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
|
475 |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
476 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
|
477 |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
478 setup( |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
479 ... |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
480 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
|
481 ) |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
482 |
234 | 483 :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
|
484 :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
|
485 :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
|
486 """ |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
487 |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
488 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
|
489 user_options = [ |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
490 ('domain=', 'D', |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
491 "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
|
492 ('input-file=', 'i', |
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 input file'), |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
494 ('output-dir=', 'd', |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
495 '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
|
496 ('output-file=', 'o', |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
497 "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
|
498 "'<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
|
499 ('locale=', 'l', |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
500 'locale of the catalog to compile'), |
574
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
501 ('no-wrap', None, |
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
502 '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
|
503 '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
|
504 ('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
|
505 '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
|
506 ('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
|
507 '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
|
508 ('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
|
509 '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
|
510 ] |
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
|
511 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
|
512 |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
513 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
|
514 self.domain = 'messages' |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
515 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
|
516 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
|
517 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
|
518 self.locale = None |
574
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
519 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
|
520 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
|
521 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
|
522 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
|
523 |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
524 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
|
525 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
|
526 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
|
527 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
|
528 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
|
529 'directory') |
196
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
530 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
|
531 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
|
532 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
|
533 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
|
534 |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
535 def run(self): |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
536 po_files = [] |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
537 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
|
538 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
|
539 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
|
540 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
|
541 'LC_MESSAGES', |
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
542 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
|
543 else: |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
544 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
|
545 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
|
546 'LC_MESSAGES', |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
547 self.domain + '.po') |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
548 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
|
549 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
|
550 else: |
196
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
551 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
|
552 |
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
553 domain = self.domain |
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
554 if not domain: |
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
555 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
|
556 |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
557 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
|
558 try: |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
559 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
|
560 finally: |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
561 infile.close() |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
562 |
208
d17f4b876f95
Make frontends that make use of a ''loop all'' fail if no message catalogs are found.
palgarvio
parents:
207
diff
changeset
|
563 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
|
564 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
|
565 |
574
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
566 extra_params = {} |
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
567 if self.no_wrap: |
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
568 extra_params['width'] = None |
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
569 |
196
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
570 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
|
571 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
|
572 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
|
573 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
|
574 try: |
196
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
575 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
|
576 finally: |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
577 infile.close() |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
578 |
204 | 579 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
|
580 |
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
|
581 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
|
582 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
|
583 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
|
584 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
|
585 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
|
586 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
|
587 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
|
588 ignore_obsolete=self.ignore_obsolete, |
574
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
589 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
|
590 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
|
591 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
|
592 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
|
593 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
|
594 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
|
595 |
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 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
|
597 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
|
598 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
|
599 # 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
|
600 # 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
|
601 # 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
|
602 # 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
|
603 # 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
|
604 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
|
605 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
|
606 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
|
607 |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
608 |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
609 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
|
610 """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
|
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 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
|
613 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
|
614 """ |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
615 |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
616 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
|
617 version = '%%prog %s' % VERSION |
161 | 618 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
|
619 '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
|
620 '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
|
621 '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
|
622 '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
|
623 } |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
624 |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
625 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
|
626 """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
|
627 |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
628 :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
|
629 """ |
127 | 630 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
|
631 version=self.version) |
63
47353672f1a8
Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents:
62
diff
changeset
|
632 self.parser.disable_interspersed_args() |
47353672f1a8
Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents:
62
diff
changeset
|
633 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
|
634 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
|
635 action='store_true', |
6503a227ba93
Add a command-line option that prints out all available locales. Closes #24.
cmlenz
parents:
181
diff
changeset
|
636 help="print all known locales and exit") |
232 | 637 self.parser.add_option('-v', '--verbose', action='store_const', |
638 dest='loglevel', const=logging.DEBUG, | |
639 help='print as much as possible') | |
640 self.parser.add_option('-q', '--quiet', action='store_const', | |
641 dest='loglevel', const=logging.ERROR, | |
642 help='print as little as possible') | |
643 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
|
644 |
63
47353672f1a8
Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents:
62
diff
changeset
|
645 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
|
646 |
523
e5a2231ce176
shorten the __init__() method of !CommandLineInterface by extracting the logging configuration into another method
fschwarz
parents:
521
diff
changeset
|
647 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
|
648 if options.list_locales: |
546
fd3bda2d3d34
rename babel.localedata.list() to ease Python 3 transition (fixes #250)
fschwarz
parents:
533
diff
changeset
|
649 identifiers = localedata.locale_identifiers() |
185
6503a227ba93
Add a command-line option that prints out all available locales. Closes #24.
cmlenz
parents:
181
diff
changeset
|
650 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
|
651 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
|
652 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
|
653 for identifier in identifiers: |
185
6503a227ba93
Add a command-line option that prints out all available locales. Closes #24.
cmlenz
parents:
181
diff
changeset
|
654 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
|
655 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
|
656 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
|
657 getpreferredencoding() or |
03b4ed33d413
When using sys.stdout with a pipe or redirection the sys.stdout.encoding value
jruigrok
parents:
290
diff
changeset
|
658 'ascii', 'replace') |
185
6503a227ba93
Add a command-line option that prints out all available locales. Closes #24.
cmlenz
parents:
181
diff
changeset
|
659 return 0 |
6503a227ba93
Add a command-line option that prints out all available locales. Closes #24.
cmlenz
parents:
181
diff
changeset
|
660 |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
661 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
|
662 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
|
663 '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
|
664 |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
665 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
|
666 if cmdname not in self.commands: |
127 | 667 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
|
668 |
185
6503a227ba93
Add a command-line option that prints out all available locales. Closes #24.
cmlenz
parents:
181
diff
changeset
|
669 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
|
670 |
523
e5a2231ce176
shorten the __init__() method of !CommandLineInterface by extracting the logging configuration into another method
fschwarz
parents:
521
diff
changeset
|
671 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
|
672 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
|
673 self.log.setLevel(loglevel) |
e5a2231ce176
shorten the __init__() method of !CommandLineInterface by extracting the logging configuration into another method
fschwarz
parents:
521
diff
changeset
|
674 # 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
|
675 # 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
|
676 # normal Python class. |
e5a2231ce176
shorten the __init__() method of !CommandLineInterface by extracting the logging configuration into another method
fschwarz
parents:
521
diff
changeset
|
677 if self.log.handlers: |
e5a2231ce176
shorten the __init__() method of !CommandLineInterface by extracting the logging configuration into another method
fschwarz
parents:
521
diff
changeset
|
678 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
|
679 else: |
e5a2231ce176
shorten the __init__() method of !CommandLineInterface by extracting the logging configuration into another method
fschwarz
parents:
521
diff
changeset
|
680 handler = logging.StreamHandler() |
e5a2231ce176
shorten the __init__() method of !CommandLineInterface by extracting the logging configuration into another method
fschwarz
parents:
521
diff
changeset
|
681 self.log.addHandler(handler) |
e5a2231ce176
shorten the __init__() method of !CommandLineInterface by extracting the logging configuration into another method
fschwarz
parents:
521
diff
changeset
|
682 handler.setLevel(loglevel) |
e5a2231ce176
shorten the __init__() method of !CommandLineInterface by extracting the logging configuration into another method
fschwarz
parents:
521
diff
changeset
|
683 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
|
684 handler.setFormatter(formatter) |
e5a2231ce176
shorten the __init__() method of !CommandLineInterface by extracting the logging configuration into another method
fschwarz
parents:
521
diff
changeset
|
685 |
63
47353672f1a8
Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents:
62
diff
changeset
|
686 def _help(self): |
47353672f1a8
Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents:
62
diff
changeset
|
687 print self.parser.format_help() |
127 | 688 print "commands:" |
63
47353672f1a8
Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents:
62
diff
changeset
|
689 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
|
690 format = " %%-%ds %%s" % max(8, longest + 1) |
161 | 691 commands = self.commands.items() |
692 commands.sort() | |
693 for name, description in commands: | |
694 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
|
695 |
160 | 696 def compile(self, argv): |
697 """Subcommand for compiling a message catalog to a MO file. | |
698 | |
699 :param argv: the command arguments | |
234 | 700 :since: version 0.9 |
160 | 701 """ |
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
|
702 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
|
703 description=self.commands['compile']) |
160 | 704 parser.add_option('--domain', '-D', dest='domain', |
705 help="domain of MO and PO files (default '%default')") | |
706 parser.add_option('--directory', '-d', dest='directory', | |
707 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
|
708 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
|
709 help='locale of the catalog') |
160 | 710 parser.add_option('--input-file', '-i', dest='input_file', |
711 metavar='FILE', help='name of the input file') | |
712 parser.add_option('--output-file', '-o', dest='output_file', | |
713 metavar='FILE', | |
714 help="name of the output file (default " | |
715 "'<output_dir>/<locale>/LC_MESSAGES/" | |
716 "<domain>.mo')") | |
717 parser.add_option('--use-fuzzy', '-f', dest='use_fuzzy', | |
718 action='store_true', | |
719 help='also include fuzzy translations (default ' | |
207 | 720 '%default)') |
721 parser.add_option('--statistics', dest='statistics', | |
722 action='store_true', | |
723 help='print statistics about translations') | |
160 | 724 |
170
3f9d9268537d
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
169
diff
changeset
|
725 parser.set_defaults(domain='messages', use_fuzzy=False, |
207 | 726 compile_all=False, statistics=False) |
170
3f9d9268537d
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
169
diff
changeset
|
727 options, args = parser.parse_args(argv) |
160 | 728 |
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
|
729 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
|
730 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
|
731 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
|
732 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
|
733 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
|
734 '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
|
735 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
|
736 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
|
737 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
|
738 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
|
739 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
|
740 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
|
741 '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
|
742 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
|
743 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
|
744 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
|
745 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
|
746 '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
|
747 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
|
748 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
|
749 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
|
750 '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
|
751 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
|
752 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
|
753 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
|
754 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
|
755 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
|
756 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
|
757 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
|
758 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
|
759 'the base directory') |
290 | 760 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
|
761 '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
|
762 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
|
763 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
|
764 parser.error('no message catalogs found') |
160 | 765 |
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 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
|
767 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
|
768 infile = open(po_file, 'r') |
170
3f9d9268537d
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
169
diff
changeset
|
769 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
|
770 catalog = read_po(infile, locale) |
170
3f9d9268537d
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
169
diff
changeset
|
771 finally: |
3f9d9268537d
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
169
diff
changeset
|
772 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
|
773 |
207 | 774 if options.statistics: |
775 translated = 0 | |
776 for message in list(catalog)[1:]: | |
777 if message.string: | |
778 translated +=1 | |
317 | 779 percentage = 0 |
780 if len(catalog): | |
781 percentage = translated * 100 // len(catalog) | |
232 | 782 self.log.info("%d of %d messages (%d%%) translated in %r", |
317 | 783 translated, len(catalog), percentage, po_file) |
207 | 784 |
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
|
785 if catalog.fuzzy and not options.use_fuzzy: |
232 | 786 self.log.warn('catalog %r is marked as fuzzy, skipping', |
787 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
|
788 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
|
789 |
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 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
|
791 for error in errors: |
232 | 792 self.log.error('error: %s:%d: %s', po_file, message.lineno, |
793 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
|
794 |
232 | 795 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
|
796 |
279 | 797 outfile = open(mo_file, 'wb') |
170
3f9d9268537d
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
169
diff
changeset
|
798 try: |
3f9d9268537d
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
169
diff
changeset
|
799 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
|
800 finally: |
3f9d9268537d
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
169
diff
changeset
|
801 outfile.close() |
160 | 802 |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
803 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
|
804 """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
|
805 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
|
806 |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
807 :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
|
808 """ |
66
2504451884f3
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
63
diff
changeset
|
809 parser = OptionParser(usage=self.usage % ('extract', 'dir1 <dir2> ...'), |
161 | 810 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
|
811 parser.add_option('--charset', dest='charset', |
160 | 812 help='charset to use in the output (default ' |
813 '"%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
|
814 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
|
815 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
|
816 '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
|
817 '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
|
818 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
|
819 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
|
820 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
|
821 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
|
822 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
|
823 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
|
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 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
|
826 '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
|
827 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
|
828 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
|
829 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
|
830 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
|
831 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
|
832 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
|
833 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
|
834 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
|
835 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
|
836 'the output line width, into several lines') |
71 | 837 parser.add_option('--sort-output', dest='sort_output', |
838 action='store_true', | |
839 help='generate sorted output (default False)') | |
840 parser.add_option('--sort-by-file', dest='sort_by_file', | |
841 action='store_true', | |
842 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
|
843 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
|
844 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
|
845 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
|
846 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
|
847 help='set copyright holder in output') |
429
28755da4bf13
add `--project` and `--version` options for commandline (fixes #173)
dfraser
parents:
424
diff
changeset
|
848 parser.add_option('--project', dest='project', |
28755da4bf13
add `--project` and `--version` options for commandline (fixes #173)
dfraser
parents:
424
diff
changeset
|
849 help='set project name in output') |
28755da4bf13
add `--project` and `--version` options for commandline (fixes #173)
dfraser
parents:
424
diff
changeset
|
850 parser.add_option('--version', dest='version', |
28755da4bf13
add `--project` and `--version` options for commandline (fixes #173)
dfraser
parents:
424
diff
changeset
|
851 help='set project version in output') |
95
f9007588a860
Fix for #11 (use local timezone in timestamps of generated POT).
cmlenz
parents:
90
diff
changeset
|
852 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
|
853 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
|
854 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
|
855 '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
|
856 '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
|
857 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
|
858 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
|
859 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
|
860 |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
861 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
|
862 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
|
863 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
|
864 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
|
865 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
|
866 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
|
867 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
|
868 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
|
869 |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
870 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
|
871 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
|
872 else: |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
873 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
|
874 |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
875 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
|
876 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
|
877 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
|
878 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
|
879 '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
|
880 keywords = {} |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
881 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
|
882 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
|
883 |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
884 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
|
885 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
|
886 try: |
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, 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
|
888 finally: |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
889 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
|
890 else: |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
891 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
|
892 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
|
893 |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
894 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
|
895 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
|
896 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
|
897 options.width = 76 |
87
72c7ac384609
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
86
diff
changeset
|
898 |
71 | 899 if options.sort_output and options.sort_by_file: |
900 parser.error("'--sort-output' and '--sort-by-file' are mutually " | |
901 "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
|
902 |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
903 try: |
429
28755da4bf13
add `--project` and `--version` options for commandline (fixes #173)
dfraser
parents:
424
diff
changeset
|
904 catalog = Catalog(project=options.project, |
28755da4bf13
add `--project` and `--version` options for commandline (fixes #173)
dfraser
parents:
424
diff
changeset
|
905 version=options.version, |
28755da4bf13
add `--project` and `--version` options for commandline (fixes #173)
dfraser
parents:
424
diff
changeset
|
906 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
|
907 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
|
908 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
|
909 |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
910 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
|
911 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
|
912 parser.error('%r is not a directory' % dirname) |
232 | 913 |
914 def callback(filename, method, options): | |
915 if method == 'ignore': | |
916 return | |
917 filepath = os.path.normpath(os.path.join(dirname, filename)) | |
918 optstr = '' | |
919 if options: | |
920 optstr = ' (%s)' % ', '.join(['%s="%s"' % (k, v) for | |
921 k, v in options.items()]) | |
922 self.log.info('extracting messages from %s%s', filepath, | |
923 optstr) | |
924 | |
95
f9007588a860
Fix for #11 (use local timezone in timestamps of generated POT).
cmlenz
parents:
90
diff
changeset
|
925 extracted = extract_from_dir(dirname, method_map, options_map, |
232 | 926 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
|
927 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
|
928 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
|
929 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
|
930 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
|
931 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
|
932 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
|
933 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
|
934 |
232 | 935 if options.output not in (None, '-'): |
936 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
|
937 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
|
938 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
|
939 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
|
940 sort_output=options.sort_output, |
112
5c55ca587c89
copyright_holder arg is no longer needed for write_po
pjenvey
parents:
110
diff
changeset
|
941 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
|
942 finally: |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
943 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
|
944 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
|
945 |
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
946 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
|
947 """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
|
948 |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
949 :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
|
950 """ |
165
628bc271ece4
Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents:
161
diff
changeset
|
951 parser = OptionParser(usage=self.usage % ('init', ''), |
161 | 952 description=self.commands['init']) |
66
2504451884f3
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
63
diff
changeset
|
953 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
|
954 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
|
955 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
|
956 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
|
957 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
|
958 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
|
959 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
|
960 metavar='FILE', |
66
2504451884f3
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
63
diff
changeset
|
961 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
|
962 "'<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
|
963 "<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
|
964 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
|
965 help='locale for the new localized catalog') |
600 | 966 parser.add_option('-w', '--width', dest='width', type='int', |
967 help="set output line width (default 76)") | |
574
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
968 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
|
969 help='do not break long message lines, longer than ' |
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
970 '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
|
971 |
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
|
972 parser.set_defaults(domain='messages') |
66
2504451884f3
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
63
diff
changeset
|
973 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
|
974 |
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
|
975 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
|
976 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
|
977 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
|
978 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
|
979 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
|
980 parser.error(e) |
87
72c7ac384609
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
86
diff
changeset
|
981 |
66
2504451884f3
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
63
diff
changeset
|
982 if not options.input_file: |
2504451884f3
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
63
diff
changeset
|
983 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
|
984 |
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
|
985 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
|
986 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
|
987 |
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
|
988 if not options.output_file: |
66
2504451884f3
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
63
diff
changeset
|
989 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
|
990 options.locale, 'LC_MESSAGES', |
66
2504451884f3
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
63
diff
changeset
|
991 options.domain + '.po') |
87
72c7ac384609
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
86
diff
changeset
|
992 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
|
993 os.makedirs(os.path.dirname(options.output_file)) |
600 | 994 if options.width and options.no_wrap: |
995 parser.error("'--no-wrap' and '--width' are mutually exclusive.") | |
996 elif not options.width and not options.no_wrap: | |
997 options.width = 76 | |
87
72c7ac384609
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
86
diff
changeset
|
998 |
66
2504451884f3
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
63
diff
changeset
|
999 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
|
1000 try: |
371 | 1001 # Although reading from the catalog template, read_po must be fed |
563 | 1002 # the locale in order to correctly calculate plurals |
371 | 1003 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
|
1004 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
|
1005 infile.close() |
87
72c7ac384609
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
86
diff
changeset
|
1006 |
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
|
1007 catalog.locale = locale |
132 | 1008 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
|
1009 |
232 | 1010 self.log.info('creating catalog %r based on %r', options.output_file, |
1011 options.input_file) | |
66
2504451884f3
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
63
diff
changeset
|
1012 |
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
|
1013 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
|
1014 try: |
600 | 1015 write_po(outfile, catalog, width=options.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
|
1016 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
|
1017 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
|
1018 |
181
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1019 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
|
1020 """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
|
1021 |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1022 :param argv: the command arguments |
234 | 1023 :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
|
1024 """ |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1025 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
|
1026 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
|
1027 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
|
1028 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
|
1029 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
|
1030 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
|
1031 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
|
1032 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
|
1033 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
|
1034 metavar='FILE', |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1035 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
|
1036 "'<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
|
1037 "<domain>.po')") |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1038 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
|
1039 help='locale of the translations catalog') |
574
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
1040 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
|
1041 help='do not break long message lines, longer than ' |
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
1042 '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
|
1043 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
|
1044 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
|
1045 help='do not include obsolete messages in the output ' |
417 | 1046 '(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
|
1047 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
|
1048 action='store_true', |
417 | 1049 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
|
1050 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
|
1051 help='keep previous msgids of translated messages ' |
417 | 1052 '(default %default)') |
181
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1053 |
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
|
1054 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
|
1055 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
|
1056 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
|
1057 |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1058 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
|
1059 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
|
1060 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
|
1061 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
|
1062 if options.output_file and not options.locale: |
417 | 1063 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
|
1064 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
|
1065 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
|
1066 |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1067 po_files = [] |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1068 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
|
1069 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
|
1070 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
|
1071 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
|
1072 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
|
1073 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
|
1074 else: |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1075 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
|
1076 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
|
1077 'LC_MESSAGES', |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1078 options.domain + '.po') |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1079 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
|
1080 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
|
1081 else: |
196
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
1082 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
|
1083 |
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
1084 domain = options.domain |
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
1085 if not domain: |
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
1086 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
|
1087 |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1088 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
|
1089 try: |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1090 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
|
1091 finally: |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1092 infile.close() |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1093 |
208
d17f4b876f95
Make frontends that make use of a ''loop all'' fail if no message catalogs are found.
palgarvio
parents:
207
diff
changeset
|
1094 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
|
1095 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
|
1096 |
574
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
1097 extra_params = {} |
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
1098 if options.no_wrap: |
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
1099 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
|
1100 for locale, filename in po_files: |
232 | 1101 self.log.info('updating catalog %r based on %r', filename, |
1102 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
|
1103 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
|
1104 try: |
196
b38a6b220ea2
Fix for #35, and a minor improvement to how we parse the catalog fuzzy bit.
cmlenz
parents:
191
diff
changeset
|
1105 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
|
1106 finally: |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1107 infile.close() |
8a762ce37bf7
The frontends now provide ways to update existing translations catalogs from a template. Closes #22.
cmlenz
parents:
178
diff
changeset
|
1108 |
204 | 1109 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
|
1110 |
0eb3eb447256
Fix for #36: avoid corrupting the catalog on update when there's an error in the writing process.
cmlenz
parents:
196
diff
changeset
|
1111 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
|
1112 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
|
1113 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
|
1114 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
|
1115 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
|
1116 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
|
1117 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
|
1118 ignore_obsolete=options.ignore_obsolete, |
574
99c48a6ca1d6
add "--no-wrap" option for init/update commands (#289)
fschwarz
parents:
569
diff
changeset
|
1119 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
|
1120 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
|
1121 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
|
1122 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
|
1123 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
|
1124 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
|
1125 |
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 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
|
1127 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
|
1128 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
|
1129 # 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
|
1130 # 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
|
1131 # 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
|
1132 # 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
|
1133 # 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
|
1134 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
|
1135 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
|
1136 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
|
1137 |
165
628bc271ece4
Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents:
161
diff
changeset
|
1138 |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
1139 def main(): |
185
6503a227ba93
Add a command-line option that prints out all available locales. Closes #24.
cmlenz
parents:
181
diff
changeset
|
1140 return CommandLineInterface().run(sys.argv) |
1 | 1141 |
48
22b90b3b161a
Move the mapping configuration file format to `ConfigParser`, and add some more documentation about it.
cmlenz
parents:
47
diff
changeset
|
1142 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
|
1143 """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
|
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 >>> 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
|
1146 ... [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
|
1147 ... 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
|
1148 ... |
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
|
1149 ... # Python source files |
62
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
1150 ... [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
|
1151 ... |
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
|
1152 ... # Genshi templates |
62
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
1153 ... [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
|
1154 ... include_attrs = |
62
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
1155 ... [genshi: **/templates/**.txt] |
144 | 1156 ... 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
|
1157 ... 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
|
1158 ... |
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
|
1159 ... # 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
|
1160 ... [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
|
1161 ... ''') |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
1162 |
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 >>> 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
|
1164 >>> 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
|
1165 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
|
1166 |
62
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
1167 >>> method_map[0] |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
1168 ('**.py', 'python') |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
1169 >>> 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
|
1170 {} |
62
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
1171 >>> method_map[1] |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
1172 ('**/templates/**.html', 'genshi') |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
1173 >>> 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
|
1174 '' |
62
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
1175 >>> method_map[2] |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
1176 ('**/templates/**.txt', 'genshi') |
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
1177 >>> options_map['**/templates/**.txt']['template_class'] |
144 | 1178 'genshi.template:TextTemplate' |
62
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
1179 >>> 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
|
1180 '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
|
1181 |
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
|
1182 >>> 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
|
1183 ('**/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
|
1184 >>> 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
|
1185 {} |
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 |
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
|
1187 :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
|
1188 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
|
1189 :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
|
1190 :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
|
1191 :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
|
1192 """ |
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
|
1193 extractors = {} |
62
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
1194 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
|
1195 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
|
1196 |
48
22b90b3b161a
Move the mapping configuration file format to `ConfigParser`, and add some more documentation about it.
cmlenz
parents:
47
diff
changeset
|
1197 parser = RawConfigParser() |
62
2df27f49c320
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
59
diff
changeset
|
1198 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
|
1199 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
|
1200 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
|
1201 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
|
1202 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
|
1203 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
|
1204 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
|
1205 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
|
1206 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
|
1207 |
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
|
1208 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
|
1209 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
|
1210 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
|
1211 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
|
1212 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
|
1213 |
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
|
1214 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
|
1215 |
12
e6ba3e878b10
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
10
diff
changeset
|
1216 def parse_keywords(strings=[]): |
e6ba3e878b10
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
10
diff
changeset
|
1217 """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
|
1218 |
569
1b801a0cb2cb
Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
fschwarz
parents:
563
diff
changeset
|
1219 >>> 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
|
1220 >>> kw.sort() |
05487ae7696e
fix Python 2.3 compat: rearrange set/itemgetter/rsplit/sorted/unicode.decode
pjenvey
parents:
371
diff
changeset
|
1221 >>> for keyword, indices in kw: |
12
e6ba3e878b10
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
10
diff
changeset
|
1222 ... print (keyword, indices) |
e6ba3e878b10
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
10
diff
changeset
|
1223 ('_', None) |
e6ba3e878b10
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
10
diff
changeset
|
1224 ('dgettext', (2,)) |
e6ba3e878b10
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
10
diff
changeset
|
1225 ('dngettext', (2, 3)) |
569
1b801a0cb2cb
Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
fschwarz
parents:
563
diff
changeset
|
1226 ('pgettext', ((1, 'c'), 2)) |
12
e6ba3e878b10
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
10
diff
changeset
|
1227 """ |
e6ba3e878b10
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
10
diff
changeset
|
1228 keywords = {} |
e6ba3e878b10
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
10
diff
changeset
|
1229 for string in strings: |
e6ba3e878b10
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
10
diff
changeset
|
1230 if ':' in string: |
e6ba3e878b10
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
10
diff
changeset
|
1231 funcname, indices = string.split(':') |
e6ba3e878b10
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
10
diff
changeset
|
1232 else: |
e6ba3e878b10
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
10
diff
changeset
|
1233 funcname, indices = string, None |
e6ba3e878b10
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
10
diff
changeset
|
1234 if funcname not in keywords: |
e6ba3e878b10
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
10
diff
changeset
|
1235 if indices: |
569
1b801a0cb2cb
Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
fschwarz
parents:
563
diff
changeset
|
1236 inds = [] |
1b801a0cb2cb
Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
fschwarz
parents:
563
diff
changeset
|
1237 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
|
1238 if x[-1] == 'c': |
1b801a0cb2cb
Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
fschwarz
parents:
563
diff
changeset
|
1239 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
|
1240 else: |
1b801a0cb2cb
Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
fschwarz
parents:
563
diff
changeset
|
1241 inds.append(int(x)) |
1b801a0cb2cb
Support for context-aware methods during message extraction (fixes #229, patch by David Rios)
fschwarz
parents:
563
diff
changeset
|
1242 indices = tuple(inds) |
12
e6ba3e878b10
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
10
diff
changeset
|
1243 keywords[funcname] = indices |
e6ba3e878b10
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
10
diff
changeset
|
1244 return keywords |
e6ba3e878b10
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
10
diff
changeset
|
1245 |
52
6b9c32893007
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
51
diff
changeset
|
1246 |
1 | 1247 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
|
1248 main() |