Updated i18n
[ocitysmap-polish-translation:ocitysmap-polish-translation.git] / i18n.py
1 #! /usr/bin/env python
2 # -*- coding: utf-8 -*-
3
4 # ocitysmap, city map and street index generator from OpenStreetMap data
5 # Copyright (C) 2009  David Decotigny
6 # Copyright (C) 2009  Frédéric Lehobey
7 # Copyright (C) 2009  David Mentré
8 # Copyright (C) 2009  Maxime Petazzoni
9 # Copyright (C) 2009  Thomas Petazzoni
10 # Copyright (C) 2009  Gaël Utard
11
12 # This program is free software: you can redistribute it and/or modify
13 # it under the terms of the GNU Affero General Public License as
14 # published by the Free Software Foundation, either version 3 of the
15 # License, or any later version.
16
17 # This program is distributed in the hope that it will be useful,
18 # but WITHOUT ANY WARRANTY; without even the implied warranty of
19 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20 # GNU Affero General Public License for more details.
21
22 # You should have received a copy of the GNU Affero General Public License
23 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
24
25 import os
26 import sys
27 import shutil
28 import optparse
29 import subprocess
30
31 def make_pot():
32     print "Make locale/ocitysmap.pot"
33     subprocess.check_call(['pygettext', '-o', 'ocitysmap.pot', '-p', 'locale',
34                            'ocitysmap2/indexlib/indexer.py',
35                            'ocitysmap2/maplib/renderers.py',
36                            'ocitysmap2/layoutlib/renderers.py'])
37     return
38
39 def make_po(languages):
40     print "Merge locale/ocitysmap.pot into locale/*/LC_MESSAGES/ocitysmap.po"
41     for l in languages:
42         print " * %s" % l
43         subprocess.check_call(['msgmerge', '-U',
44                                'locale/%s/LC_MESSAGES/ocitysmap.po' % l,
45                                'locale/ocitysmap.pot'])
46     return
47
48 def compile_mo(languages):
49     print "Compile locale/*/LC_MESSAGES/ocitysmap.mo files"
50     for l in languages:
51         print " * %s" % l
52         subprocess.check_call(['msgfmt', '-o',
53                                'locale/%s/LC_MESSAGES/ocitysmap.mo' %l,
54                                'locale/%s/LC_MESSAGES/ocitysmap.po' %l])
55     return
56
57 def create_language(country_code):
58     print "Create directory for %s" % country_code
59     os.makedirs('locale/%s/LC_MESSAGES' % country_code)
60     shutil.copyfile('locale/ocitysmap.pot',
61                     'locale/%s/LC_MESSAGES/ocitysmap.po' % country_code)
62     return
63
64 def get_languages():
65     l = os.listdir('locale')
66     return filter(lambda s: s!='ocitysmap.pot', l)
67
68 def main():
69     usage = '%prog [options]\n WARNING: This program should be called from ocitysmap/ directory!'
70
71     parser = optparse.OptionParser(usage=usage)
72     parser.add_option('-P', '--make-pot', dest='make_pot',
73                       action='store_true', default=False,
74                       help="make locale/ocitysmap.pot")
75     parser.add_option('-p', '--make-po', dest='make_po',
76                       action='store_true', default=False,
77                       help="merge locale/ocitysmap.pot with locale/*/LC_MESSAGES/ocitysmap.po")
78     parser.add_option('-m', '--compile-mo', dest='compile_mo',
79                       action='store_true', default=False,
80                       help="compile locale/*/LC_MESSAGES/ocitysmap.mo files")
81     parser.add_option('-n', '--new-language', dest='new_language',
82                       metavar='LANGUAGE_CODE',
83                       help='create .pot file for a new language. '
84                       'LANGUAGE_CODE is like "fr_FR".',
85                       default=None)
86
87     (options, args) = parser.parse_args()
88     if len(args):
89         parser.print_help()
90         return 1
91
92     languages = get_languages()
93
94     if options.make_pot:
95         make_pot()
96     if options.make_po:
97         make_po(languages)
98     if options.compile_mo:
99         compile_mo(languages)
100     if options.new_language:
101         create_language(options.new_language)
102
103 if __name__ == '__main__':
104     sys.exit(main())