#!/usr/bin/python import polib import sys import os import codecs CODE2LANG = { 'af': 'afrikaans', 'ar': 'arabic', 'az': 'azerbaijani', 'bn': 'bangla', 'be': 'belarusian_cyrillic', 'be@latin': 'belarusian_latin', 'bg': 'bulgarian', 'bs': 'bosnian', 'ca': 'catalan', 'cs': 'czech', 'da': 'danish', 'de': 'german', 'el': 'greek', 'en': 'english', 'en_GB': 'english-gb', 'es': 'spanish', 'et': 'estonian', 'eu': 'basque', 'fa': 'persian', 'fi': 'finnish', 'fr': 'french', 'gl': 'galician', 'he': 'hebrew', 'hi': 'hindi', 'hr': 'croatian', 'hu': 'hungarian', 'id': 'indonesian', 'it': 'italian', 'ja': 'japanese', 'ko': 'korean', 'ka': 'georgian', 'lt': 'lithuanian', 'lv': 'latvian', 'mk': 'macedonian_cyrillic', 'mn': 'mongolian', 'ms': 'malay', 'nl': 'dutch', 'nb': 'norwegian', 'pl': 'polish', 'pt_BR': 'brazilian_portuguese', 'pt': 'portuguese', 'ro': 'romanian', 'ru': 'russian', 'si': 'sinhala', 'sk': 'slovak', 'sl': 'slovenian', 'sq': 'albanian', 'sr@latin': 'serbian_latin', 'sr': 'serbian_cyrillic', 'sv': 'swedish', 'th': 'thai', 'tr': 'turkish', 'tt': 'tatarish', 'uk': 'ukrainian', 'zh_TW': 'chinese_traditional', 'zh_CN': 'chinese_simplified', 'uz': 'uzbek_cyrillic', 'uz@latin': 'uzbek_latin', } if len(sys.argv) < 2: print 'Usage: update-from-po PO_FILES' sys.exit(1) f = file('lang/english-utf-8.inc.php', 'r') langmap = {} for line in f: line = line.strip() if line[:4] == '$str': parts = line.split(' = ') langmap[parts[1].strip(';').strip('\'')] = parts[0].strip('$') for pofile_full in sys.argv[1:]: pofile = os.path.basename(pofile_full) if pofile[-3:] != '.po': print 'Not a po file, skipping: %s' % pofile continue try: lang = CODE2LANG[pofile[:-3]] except KeyError: print 'Language for %s not defined!' % pofile continue try: langfile = codecs.open('lang/%s-utf-8.inc.php' % lang, 'r', 'utf-8').readlines() except IOError: print 'Language file %s does not exist!' % lang continue print 'Updating %s from: %s' % (lang, pofile) po = polib.pofile(os.path.join(sys.argv[1], pofile_full)) for translation in po.translated_entries(): if translation.msgctxt is None: msgid = translation.msgid.replace('\'', '\\\'') msgstr = translation.msgstr.replace('\'', '\\\'') try: key = langmap[msgid] keylen = len(key) except KeyError: continue for i in xrange(len(langfile)): if langfile[i][:2 + keylen] == '$%s ' % key: langfile[i] = u'$%s = \'%s\';\n' % (key, msgstr) out = codecs.open('lang/%s-utf-8.inc.php' % lang, 'w', 'utf-8') out.writelines(langfile)