|
1 | 1 | #!/usr/bin/env python
|
2 | 2 |
|
3 | | -# Need to ensure that the i18n framework is enabled |
4 | | -from django.conf import settings |
5 | | -settings.configure(USE_I18N = True) |
6 | | - |
7 | | -from django.utils.translation import templatize |
8 | | -import re |
9 | | -import os |
10 | | -import sys |
11 | | -import getopt |
12 | | -from itertools import dropwhile |
13 | | - |
14 | | -pythonize_re = re.compile(r'\n\s*//') |
15 | | - |
16 | | -def make_messages(): |
17 | | - localedir = None |
18 | | - |
19 | | - if os.path.isdir(os.path.join('conf', 'locale')): |
20 | | - localedir = os.path.abspath(os.path.join('conf', 'locale')) |
21 | | - elif os.path.isdir('locale'): |
22 | | - localedir = os.path.abspath('locale') |
23 | | - else: |
24 | | - print "This script should be run from the django svn tree or your project or app tree." |
25 | | - print "If you did indeed run it from the svn checkout or your project or application," |
26 | | - print "maybe you are just missing the conf/locale (in the django tree) or locale (for project" |
27 | | - print "and application) directory?" |
28 | | - print "make-messages.py doesn't create it automatically, you have to create it by hand if" |
29 | | - print "you want to enable i18n for your project or application." |
30 | | - sys.exit(1) |
31 | | - |
32 | | - (opts, args) = getopt.getopt(sys.argv[1:], 'l:d:va') |
33 | | - |
34 | | - lang = None |
35 | | - domain = 'django' |
36 | | - verbose = False |
37 | | - all = False |
38 | | - |
39 | | - for o, v in opts: |
40 | | - if o == '-l': |
41 | | - lang = v |
42 | | - elif o == '-d': |
43 | | - domain = v |
44 | | - elif o == '-v': |
45 | | - verbose = True |
46 | | - elif o == '-a': |
47 | | - all = True |
48 | | - |
49 | | - if domain not in ('django', 'djangojs'): |
50 | | - print "currently make-messages.py only supports domains 'django' and 'djangojs'" |
51 | | - sys.exit(1) |
52 | | - if (lang is None and not all) or domain is None: |
53 | | - print "usage: make-messages.py -l <language>" |
54 | | - print " or: make-messages.py -a" |
55 | | - sys.exit(1) |
56 | | - |
57 | | - languages = [] |
58 | | - |
59 | | - if lang is not None: |
60 | | - languages.append(lang) |
61 | | - elif all: |
62 | | - languages = [el for el in os.listdir(localedir) if not el.startswith('.')] |
63 | | - |
64 | | - for lang in languages: |
65 | | - |
66 | | - print "processing language", lang |
67 | | - basedir = os.path.join(localedir, lang, 'LC_MESSAGES') |
68 | | - if not os.path.isdir(basedir): |
69 | | - os.makedirs(basedir) |
70 | | - |
71 | | - pofile = os.path.join(basedir, '%s.po' % domain) |
72 | | - potfile = os.path.join(basedir, '%s.pot' % domain) |
73 | | - |
74 | | - if os.path.exists(potfile): |
75 | | - os.unlink(potfile) |
76 | | - |
77 | | - all_files = [] |
78 | | - for (dirpath, dirnames, filenames) in os.walk("."): |
79 | | - all_files.extend([(dirpath, f) for f in filenames]) |
80 | | - all_files.sort() |
81 | | - for dirpath, file in all_files: |
82 | | - if domain == 'djangojs' and file.endswith('.js'): |
83 | | - if verbose: sys.stdout.write('processing file %s in %s\n' % (file, dirpath)) |
84 | | - src = open(os.path.join(dirpath, file), "rb").read() |
85 | | - src = pythonize_re.sub('\n#', src) |
86 | | - open(os.path.join(dirpath, '%s.py' % file), "wb").write(src) |
87 | | - thefile = '%s.py' % file |
88 | | - cmd = 'xgettext -d %s -L Perl --keyword=gettext_noop --keyword=gettext_lazy --keyword=ngettext_lazy:1,2 --from-code UTF-8 -o - "%s"' % (domain, os.path.join(dirpath, thefile)) |
89 | | - (stdin, stdout, stderr) = os.popen3(cmd, 't') |
90 | | - msgs = stdout.read() |
91 | | - errors = stderr.read() |
92 | | - if errors: |
93 | | - print "errors happened while running xgettext on %s" % file |
94 | | - print errors |
95 | | - sys.exit(8) |
96 | | - old = '#: '+os.path.join(dirpath, thefile)[2:] |
97 | | - new = '#: '+os.path.join(dirpath, file)[2:] |
98 | | - msgs = msgs.replace(old, new) |
99 | | - if os.path.exists(potfile): |
100 | | - # Strip the header |
101 | | - msgs = '\n'.join(dropwhile(len, msgs.split('\n'))) |
102 | | - else: |
103 | | - msgs = msgs.replace('charset=CHARSET', 'charset=UTF-8') |
104 | | - if msgs: |
105 | | - open(potfile, 'ab').write(msgs) |
106 | | - os.unlink(os.path.join(dirpath, thefile)) |
107 | | - elif domain == 'django' and (file.endswith('.py') or file.endswith('.html')): |
108 | | - thefile = file |
109 | | - if file.endswith('.html'): |
110 | | - src = open(os.path.join(dirpath, file), "rb").read() |
111 | | - thefile = '%s.py' % file |
112 | | - open(os.path.join(dirpath, thefile), "wb").write(templatize(src)) |
113 | | - if verbose: |
114 | | - sys.stdout.write('processing file %s in %s\n' % (file, dirpath)) |
115 | | - cmd = 'xgettext -d %s -L Python --keyword=gettext_noop --keyword=gettext_lazy --keyword=ngettext_lazy:1,2 --keyword=ugettext_noop --keyword=ugettext_lazy --keyword=ungettext_lazy:1,2 --from-code UTF-8 -o - "%s"' % ( |
116 | | - domain, os.path.join(dirpath, thefile)) |
117 | | - (stdin, stdout, stderr) = os.popen3(cmd, 't') |
118 | | - msgs = stdout.read() |
119 | | - errors = stderr.read() |
120 | | - if errors: |
121 | | - print "errors happened while running xgettext on %s" % file |
122 | | - print errors |
123 | | - sys.exit(8) |
124 | | - if thefile != file: |
125 | | - old = '#: '+os.path.join(dirpath, thefile)[2:] |
126 | | - new = '#: '+os.path.join(dirpath, file)[2:] |
127 | | - msgs = msgs.replace(old, new) |
128 | | - if os.path.exists(potfile): |
129 | | - # Strip the header |
130 | | - msgs = '\n'.join(dropwhile(len, msgs.split('\n'))) |
131 | | - else: |
132 | | - msgs = msgs.replace('charset=CHARSET', 'charset=UTF-8') |
133 | | - if msgs: |
134 | | - open(potfile, 'ab').write(msgs) |
135 | | - if thefile != file: |
136 | | - os.unlink(os.path.join(dirpath, thefile)) |
137 | | - |
138 | | - if os.path.exists(potfile): |
139 | | - (stdin, stdout, stderr) = os.popen3('msguniq --to-code=utf-8 "%s"' % potfile, 'b') |
140 | | - msgs = stdout.read() |
141 | | - errors = stderr.read() |
142 | | - if errors: |
143 | | - print "errors happened while running msguniq" |
144 | | - print errors |
145 | | - sys.exit(8) |
146 | | - open(potfile, 'w').write(msgs) |
147 | | - if os.path.exists(pofile): |
148 | | - (stdin, stdout, stderr) = os.popen3('msgmerge -q "%s" "%s"' % (pofile, potfile), 'b') |
149 | | - msgs = stdout.read() |
150 | | - errors = stderr.read() |
151 | | - if errors: |
152 | | - print "errors happened while running msgmerge" |
153 | | - print errors |
154 | | - sys.exit(8) |
155 | | - open(pofile, 'wb').write(msgs) |
156 | | - os.unlink(potfile) |
157 | | - |
158 | 3 | if __name__ == "__main__":
|
159 | | - make_messages() |
| 4 | + import sys |
| 5 | + name = sys.argv[0] |
| 6 | + args = ' '.join(sys.argv[1:]) |
| 7 | + print >> sys.stderr, "%s has been moved into django-admin.py" % name |
| 8 | + print >> sys.stderr, 'Please run "django-admin.py makemessages %s" instead.'% args |
| 9 | + print >> sys.stderr |
| 10 | + sys.exit(1) |
| 11 | + |
0 commit comments