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