annotate roundup/msgfmt.py @ 2806:845e87d5e3ba

translator objects now have the following search path: - selected locale messages in the tracker locale dir - selected locale messages in the system locale dir - english messages in the tracker locale dir - english messages in the system locale dir automatically compile .mo files if needed (found .po file and .mo is missing or .po mtime is greater that .mo mtime) removed support for python < 2.0. gettext module is now required. get_translation: removed 'domain' argument, added 'tracker_home' argument
author Alexander Smishlajev <a1s@users.sourceforge.net>
date Sat, 23 Oct 2004 14:03:34 +0000
parents ee9c3b850f9e
children a6bf25d38518
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2784
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1 #! /usr/bin/env python
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
2 # -*- coding: iso-8859-1 -*-
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
3 # Written by Martin v. Löwis <loewis@informatik.hu-berlin.de>
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
4 # Plural forms support added by alexander smishlajev <alex@tycobka.lv>
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
5
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
6 """Generate binary message catalog from textual translation description.
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
7
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
8 This program converts a textual Uniforum-style message catalog (.po file) into
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
9 a binary GNU catalog (.mo file). This is essentially the same function as the
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
10 GNU msgfmt program, however, it is a simpler implementation.
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
11
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
12 Usage: msgfmt.py [OPTIONS] filename.po
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
13
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
14 Options:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
15 -o file
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
16 --output-file=file
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
17 Specify the output file to write to. If omitted, output will go to a
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
18 file named filename.mo (based off the input file name).
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
19
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
20 -h
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
21 --help
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
22 Print this message and exit.
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
23
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
24 -V
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
25 --version
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
26 Display version information and exit.
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
27 """
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
28
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
29 import sys
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
30 import os
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
31 import getopt
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
32 import struct
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
33 import array
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
34
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
35 __version__ = "1.1"
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
36
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
37 MESSAGES = {}
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
38
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
39
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
40
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
41 def usage(code, msg=''):
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
42 print >> sys.stderr, __doc__
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
43 if msg:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
44 print >> sys.stderr, msg
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
45 sys.exit(code)
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
46
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
47
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
48
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
49 def add(id, str, fuzzy):
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
50 "Add a non-fuzzy translation to the dictionary."
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
51 global MESSAGES
2801
ee9c3b850f9e fix plural forms:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2784
diff changeset
52 if not fuzzy and str and not str.startswith('\0'):
2784
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
53 MESSAGES[id] = str
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
54
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
55
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
56
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
57 def generate():
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
58 "Return the generated output."
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
59 global MESSAGES
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
60 keys = MESSAGES.keys()
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
61 # the keys are sorted in the .mo file
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
62 keys.sort()
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
63 offsets = []
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
64 ids = strs = ''
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
65 for id in keys:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
66 # For each string, we need size and file offset. Each string is NUL
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
67 # terminated; the NUL does not count into the size.
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
68 offsets.append((len(ids), len(id), len(strs), len(MESSAGES[id])))
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
69 ids += id + '\0'
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
70 strs += MESSAGES[id] + '\0'
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
71 output = ''
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
72 # The header is 7 32-bit unsigned integers. We don't use hash tables, so
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
73 # the keys start right after the index tables.
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
74 # translated string.
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
75 keystart = 7*4+16*len(keys)
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
76 # and the values start after the keys
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
77 valuestart = keystart + len(ids)
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
78 koffsets = []
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
79 voffsets = []
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
80 # The string table first has the list of keys, then the list of values.
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
81 # Each entry has first the size of the string, then the file offset.
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
82 for o1, l1, o2, l2 in offsets:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
83 koffsets += [l1, o1+keystart]
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
84 voffsets += [l2, o2+valuestart]
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
85 offsets = koffsets + voffsets
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
86 output = struct.pack("Iiiiiii",
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
87 0x950412deL, # Magic
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
88 0, # Version
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
89 len(keys), # # of entries
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
90 7*4, # start of key index
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
91 7*4+len(keys)*8, # start of value index
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
92 0, 0) # size and offset of hash table
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
93 output += array.array("i", offsets).tostring()
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
94 output += ids
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
95 output += strs
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
96 return output
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
97
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
98
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
99
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
100 def make(filename, outfile):
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
101 ID = 1
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
102 STR = 2
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
103
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
104 # Compute .mo name from .po name and arguments
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
105 if filename.endswith('.po'):
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
106 infile = filename
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
107 else:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
108 infile = filename + '.po'
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
109 if outfile is None:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
110 outfile = os.path.splitext(infile)[0] + '.mo'
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
111
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
112 try:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
113 lines = open(infile).readlines()
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
114 except IOError, msg:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
115 print >> sys.stderr, msg
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
116 sys.exit(1)
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
117
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
118 section = None
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
119 fuzzy = 0
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
120
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
121 # Parse the catalog
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
122 lno = 0
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
123 for l in lines:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
124 lno += 1
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
125 # If we get a comment line after a msgstr, this is a new entry
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
126 if l[0] == '#' and section == STR:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
127 add(msgid, msgstr, fuzzy)
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
128 section = None
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
129 fuzzy = 0
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
130 # Record a fuzzy mark
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
131 if l[:2] == '#,' and (l.find('fuzzy') >= 0):
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
132 fuzzy = 1
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
133 # Skip comments
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
134 if l[0] == '#':
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
135 continue
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
136 # Start of msgid_plural section, separate from singular form with \0
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
137 if l.startswith('msgid_plural'):
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
138 msgid += '\0'
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
139 l = l[12:]
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
140 # Now we are in a msgid section, output previous section
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
141 elif l.startswith('msgid'):
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
142 if section == STR:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
143 add(msgid, msgstr, fuzzy)
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
144 section = ID
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
145 l = l[5:]
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
146 msgid = msgstr = ''
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
147 # Now we are in a msgstr section
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
148 elif l.startswith('msgstr'):
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
149 section = STR
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
150 l = l[6:]
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
151 # Check for plural forms
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
152 if l.startswith('['):
2801
ee9c3b850f9e fix plural forms:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2784
diff changeset
153 # Separate plural forms with \0
ee9c3b850f9e fix plural forms:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2784
diff changeset
154 if not l.startswith('[0]'):
ee9c3b850f9e fix plural forms:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2784
diff changeset
155 msgstr += '\0'
2784
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
156 # Ignore the index - must come in sequence
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
157 l = l[l.index(']') + 1:]
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
158 # Skip empty lines
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
159 l = l.strip()
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
160 if not l:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
161 continue
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
162 # XXX: Does this always follow Python escape semantics?
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
163 l = eval(l)
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
164 if section == ID:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
165 msgid += l
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
166 elif section == STR:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
167 msgstr += l
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
168 else:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
169 print >> sys.stderr, 'Syntax error on %s:%d' % (infile, lno), \
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
170 'before:'
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
171 print >> sys.stderr, l
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
172 sys.exit(1)
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
173 # Add last entry
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
174 if section == STR:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
175 add(msgid, msgstr, fuzzy)
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
176
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
177 # Compute output
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
178 output = generate()
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
179
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
180 try:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
181 open(outfile,"wb").write(output)
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
182 except IOError,msg:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
183 print >> sys.stderr, msg
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
184
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
185
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
186
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
187 def main():
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
188 try:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
189 opts, args = getopt.getopt(sys.argv[1:], 'hVo:',
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
190 ['help', 'version', 'output-file='])
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
191 except getopt.error, msg:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
192 usage(1, msg)
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
193
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
194 outfile = None
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
195 # parse options
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
196 for opt, arg in opts:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
197 if opt in ('-h', '--help'):
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
198 usage(0)
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
199 elif opt in ('-V', '--version'):
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
200 print >> sys.stderr, "msgfmt.py", __version__
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
201 sys.exit(0)
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
202 elif opt in ('-o', '--output-file'):
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
203 outfile = arg
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
204 # do it
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
205 if not args:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
206 print >> sys.stderr, 'No input file given'
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
207 print >> sys.stderr, "Try `msgfmt --help' for more information."
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
208 return
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
209
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
210 for filename in args:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
211 make(filename, outfile)
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
212
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
213
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
214 if __name__ == '__main__':
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
215 main()

Roundup Issue Tracker: http://roundup-tracker.org/