#!/usr/bin/env python # -*- coding: utf-8 -*- # This file is free software. It come without any warranty, to the extent # permitted by applicable law. You can redistribute it and/or modify them under # the terms of the Do What The Fuck You Want To Public License, Version 2, as # published by Sam Hocevar. See http://sam.zoy.org/wtfpl/COPYING for more details. # author yurchor # http://gitweb.mageia.org/software/i18n/tools/tree/websites # adaptation by filip 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 ' -f filename, --filename filename : target filename' sys.exit(2) try: opts, args = getopt.getopt(sys.argv[1:], "hf:", ["help", "filename="]) except getopt.GetoptError: usage() # print help information and exit filename='' for o,a in opts: if o in ("-h", "--help"): usage() if o in ("-f", "--filename"): filename=a if filename == '': sys.exit('No filename given') def po_append(message_id, message_str, langfile): # Strip ';' from msgid message_id = message_id.lstrip(';') if message_str == message_id: message_str='' message_str = message_str.replace('{ok}', '').rstrip() potentry = polib.POEntry( msgid = message_id.decode('utf-8'), msgstr = message_str.decode('utf-8'), occurrences=[(langfile,'')] ) po.append(potentry) file_mask = filename + '.*.lang' if filename == './_nav/langs/': file_mask = './_nav/langs/*.lang' for langfile in glob.glob(file_mask): # print langfile # useful for debuging nofilename = langfile.replace(filename + '.','') language = nofilename.replace('.lang','') language = language.replace('./_nav/langs/','') #open lang file text = open(langfile,"r").read()+"\n" #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(wrapwidth=999) # increase default wrap limit 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 ', 'Language-Team': 'LANGUAGE ', 'Language': language, '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): 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) # print message_id # useful for debuging po_append(message_id, message_str, langfile) 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) # print message_id # useful for debuging po_append(message_id, message_str, langfile) if text[0] == ';': message_id, message_str = text.partition('\n\n')[0].strip('\n').split('\n',1) # print message_id # useful for debuging po_append(message_id, message_str, langfile) if filename == './_nav/langs/': file_name = filename + language else: file_name = filename po.save(file_name + '.po')