1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import errno, glob, polib, re, os, getopt, sys
from time import strftime
def usage():
print '\nUsage: python %s [OPTION]' %os.path.basename(sys.argv[0])
print ' generates po file for existing lang translations'
print 'Options: -h, --help : usage'
print ' -l lang_code, --language lang_code : code of the translation language'
sys.exit(2)
try:
opts, args = getopt.getopt(sys.argv[1:], "hl:", ["help", "language="])
except getopt.GetoptError:
usage() # print help information and exit
language=''
for o,a in opts:
if o in ("-h", "--help"):
usage()
if o in ("-l", "--language"):
lang_code=a
if lang_code == '':
sys.exit('Empty language code')
file_extension = '.' + lang_code + '.lang'
file_mask = '*' + file_extension
for langfile in glob.glob(file_mask):
langfilename = langfile.replace(file_extension, '')
# Create localization directories if needed
podir = langfilename + '/po'
try:
os.makedirs(podir)
except OSError, e:
if e.errno != errno.EEXIST:
raise
#open lang file
text = open(langfile,"r").read()
#Remove trailing spaces from lines
spaces=' {1,}\n'
spattern=re.compile(spaces,re.DOTALL)
for emptyline in spattern.findall(text):
text = text.replace(emptyline,'\n')
text = text.replace('\n\n','\n\n\n\n')+'\n'
# Write PO file
po = polib.POFile()
pocreationtime = strftime('%Y-%m-%d %H:%M%z')
po.metadata = {
'Project-Id-Version': langfile,
'Report-Msgid-Bugs-To': 'mageia-i18n@mageia.org',
'POT-Creation-Date': pocreationtime,
'PO-Revision-Date': pocreationtime,
'Last-Translator': 'Duffy Duck <d_duck@nowhere.net>',
'Language-Team': lang_code + ' <mageia-' + lang_code + '@mageia.org>',
'MIME-Version': '1.0',
'Content-Type': 'text/plain; charset=UTF-8',
'Content-Transfer-Encoding': '8bit',
}
# Parse contents and add them to PO
messagetemplate='\n\n#\ .*?\n\n'
mpattern=re.compile(messagetemplate,re.DOTALL)
for mblock in mpattern.findall(text):
mblock_stripped = mblock.strip('\n')
message_comment, message_text = mblock.strip('\n').split('\n;',1)
# Strip '# ' from comments
message_comment = message_comment.lstrip('# ')
message_id, message_str = message_text.split('\n',1)
# Strip ';' from msgid
message_id = message_id.lstrip(';')
potentry = polib.POEntry(
msgctxt = message_comment,
msgid = message_id.decode('utf-8'),
msgstr = message_str.decode('utf-8'),
occurrences=[(langfile,'')]
)
po.append(potentry)
messagetemplate='\n\n;.*?\n\n'
mpattern=re.compile(messagetemplate,re.DOTALL)
for mblock in mpattern.findall(text):
message_id, message_str = mblock.strip('\n').split('\n',1)
# Strip ';' from msgid
message_id = message_id.lstrip(';')
potentry = polib.POEntry(
msgid = message_id.decode('utf-8'),
msgstr = message_str.decode('utf-8'),
occurrences=[(langfile,'')]
)
po.append(potentry)
if text[0] == ';':
message_id, message_str = text.partition('\n\n')[0].strip('\n').split('\n',1)
# Strip ';' from msgid
message_id = message_id.lstrip(';')
potentry = polib.POEntry(
msgid = message_id.decode('utf-8'),
msgstr = message_str.decode('utf-8'),
occurrences=[(langfile,'')]
)
po.append(potentry)
pofilename = langfilename + '/po/' + lang_code + '.po'
po.save(pofilename)
|