aboutsummaryrefslogtreecommitdiffstats
path: root/websites/langpo.py
blob: 052c4d5a2ad25948bca194c624a9e530ba0a4eff (plain)
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
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import errno, glob, polib, re, os
from time import strftime

for langfile in glob.glob('*.en.lang'):
  langfilename = langfile.replace('.en.lang', '')
  # 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()
  newtext = text.split('\n\n',1)[0]

  # Write POT file
  pot = polib.POFile()
  potcreationtime = strftime('%Y-%m-%d %H:%M%z')
  pot.metadata = {
    'Project-Id-Version': langfile,
    'Report-Msgid-Bugs-To': 'mageia-i18n@mageia.org',
    'POT-Creation-Date': potcreationtime,
    'PO-Revision-Date': 'YEAR-MO-DA HO:MI+ZONE',
    'Last-Translator': 'FULL NAME <EMAIL@ADDRESS>',
    'Language-Team': 'LANGUAGE <LL@li.org>',
    'MIME-Version': '1.0',
    'Content-Type': 'text/plain; charset=CHARSET',
    'Content-Transfer-Encoding': '8bit',
    }

  # Parse contents and add them to POT
  messagetemplate='\n\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 = '',
	  occurrences=[(langfile,'')]
	  )
    pot.append(potentry)
  potfilename = langfilename + '/po/' + langfilename + '.pot'
  pot.save(potfilename)

  # Parse PO files
  for pofile in glob.glob(podir + '/*.po'):
    lang = pofile[:-3].rsplit('/',1)[1]
    pofilename = pofile
    po = polib.pofile(pofilename)
    po.merge(pot)
    po.save(pofilename)
    content = newtext + '\n\n'
    for entry in po.translated_entries():
      content = content + ('# ' + entry.msgctxt + '\n;' + entry.msgid + '\n' + entry.msgstr).encode('utf-8')
      if entry.msgid == entry.msgstr:
	content = content + ' {ok}'
      content = content + '\n\n'
    translatedlang = open(langfile.rstrip('.en.lang') + '.' + lang + '.lang', "w")
    translatedlang.write(content)
    translatedlang.close()