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