[Pkg-isocodes-devel] [SCM] ISO language, territory, currency, script codes and their translations branch, master, updated. fe61d559e8e8204656ef1ac9adf8fd6e96f74f84

LI Daobing lidaobing at gmail.com
Thu Nov 29 12:51:27 UTC 2012


The following commit has been merged in the master branch:
commit 1639fa60b8297ca856a6cb793632ee82790d4f03
Author: LI Daobing <lidaobing at gmail.com>
Date:   Thu Nov 29 20:45:26 2012 +0800

    add iso-codes-merge.py

diff --git a/iso-codes-merge.py b/iso-codes-merge.py
new file mode 100755
index 0000000..83ce5f8
--- /dev/null
+++ b/iso-codes-merge.py
@@ -0,0 +1,217 @@
+#!/usr/bin/env python
+
+import sys
+import os
+import logging
+import tempfile
+import urllib
+import subprocess
+
+lang2Name = {'af': 'Afrikaans',
+ 'am': 'Amharic',
+ 'ar': 'Arabic',
+ 'ast': 'Asturian',
+ 'az': 'Azerbaijani',
+ 'be': 'Belarusian',
+ 'be at latin': 'Belarusian (Latin script)',
+ 'bg': 'Bulgarian',
+ 'bn': 'Bengali',
+ 'bn_IN': 'Bengali (India)',
+ 'bs': 'Bosnian',
+ 'ca': 'Catalan',
+ 'crh': 'Crimean Tatar (Crimean Turkish)',
+ 'cs': 'Czech',
+ 'da': 'Danish',
+ 'de': 'German',
+ 'el': 'Greek',
+ 'en_GB': 'English (British)',
+ 'en_ZA': 'English (South African)',
+ 'eo': 'Esperanto',
+ 'es': 'Spanish',
+ 'et': 'Estonian',
+ 'eu': 'Basque',
+ 'fa': 'Persian',
+ 'fi': 'Finnish',
+ 'fr': 'French',
+ 'ga': 'Irish',
+ 'gl': 'Galician',
+ 'gu': 'Gujarati',
+ 'he': 'Hebrew',
+ 'hi': 'Hindi',
+ 'hr': 'Croatian',
+ 'hu': 'Hungarian',
+ 'hy': 'Armenian',
+ 'id': 'Indonesian',
+ 'is': 'Icelandic',
+ 'it': 'Italian',
+ 'ja': 'Japanese',
+ 'ka': 'Georgian',
+ 'kk': 'Kazakh',
+ 'kn': 'Kannada',
+ 'ko': 'Korean',
+ 'ku': 'Kurdish',
+ 'ky': 'Kirghiz',
+ 'lg': 'Luganda',
+ 'lo': 'Lao',
+ 'lt': 'Lithuanian',
+ 'lv': 'Latvian',
+ 'mk': 'Macedonian',
+ 'ml': 'Malayalam',
+ 'mn': 'Mongolian',
+ 'mr': 'Marathi',
+ 'ms': 'Malay',
+ 'mt': 'Maltese',
+ 'nb': 'Norwegian Bokmaal',
+ 'nds': 'Low German',
+ 'ne': 'Nepali',
+ 'nl': 'Dutch',
+ 'nn': 'Norwegian Nynorsk',
+ 'pa': 'Punjabi',
+ 'pl': 'Polish',
+ 'ps': 'Pashto',
+ 'pt': 'Portuguese',
+ 'pt_BR': 'Brazilian Portuguese',
+ 'ro': 'Romanian',
+ 'ru': 'Russian',
+ 'rw': 'Kinyarwanda',
+ 'sk': 'Slovak',
+ 'sl': 'Slovenian',
+ 'sq': 'Albanian',
+ 'sr': 'Serbian',
+ 'sv': 'Swedish',
+ 'sw': 'Swahili',
+ 'ta': 'Tamil',
+ 'te': 'Telugu',
+ 'tg': 'Tajik',
+ 'th': 'Thai',
+ 'tr': 'Turkish',
+ 'uk': 'Ukrainian',
+ 'vi': 'Vietnamese',
+ 'wa': 'Walloon',
+ 'zh_CN': 'Chinese (simplified)',
+ 'zh_HK': 'Chinese (Hong Kong)',
+ 'zh_TW': 'Chinese (traditional)'}
+
+class Isocodes(object):
+
+    def __init__(self, home=None):
+        self.home = home or "."
+        self.tmpfiles = []
+
+    def _getUrl(self, domain, lang):
+        return "http://translationproject.org/latest/%s/%s.po" % (domain, lang)
+
+    def _msgfmt(self, fname):
+        logging.info(fname)
+        subprocess.check_call(['msgfmt', '-v', fname])
+
+    def _getOldFname(self, domain, lang):
+        return os.path.join(self.home, domain, lang+".po")
+
+    def merge(self, domain, lang):
+        url = self._getUrl(domain, lang)
+        logging.info(url)
+        oldfname = self._getOldFname(domain, lang)
+        newfname = self._downloadFile(url)
+        self._diff(oldfname, newfname)
+        self._msgfmt(oldfname)
+        self._msgfmt(newfname)
+
+        res = raw_input('merge this (Y/n): ')
+        if res == '' or res == 'y' or res == 'Y':
+            self._doMerge(domain, lang, oldfname, newfname)
+
+    def _doMerge(self, domain, lang, oldfname, newfname):
+        logging.info("_doMerge: %s, %s" % (oldfname, newfname))
+        os.rename(newfname, oldfname)
+        subprocess.check_call(['git', 'add', oldfname])
+        translator = self._findLastTranslator(oldfname)
+        changelogFname = self._updateChangeLog(domain, lang, translator)
+        subprocess.check_call(['git', 'add', changelogFname])
+        subprocess.check_call(['git', 'diff', 'HEAD'])
+        res = raw_input('commit this (Y/n): ')
+        if res == '' or res == 'y' or res == 'Y':
+            commitMessage = '%s: %s by %s from TP' % (domain, lang2Name[lang], translator)
+            subprocess.check_call(['git', 'commit', '-m', commitMessage])
+
+    def _downloadFile(self, url):
+        fd, ofname = tempfile.mkstemp(dir=self.home)
+        ofile = os.fdopen(fd, 'wb')
+        ofile.write(urllib.urlopen(url).read())
+        ofile.close()
+        self.tmpfiles.append(ofname)
+        return ofname
+
+    def _diff(self, fname1, fname2):
+        subprocess.call(['diff', '-u', fname1, fname2])
+
+    def __del__(self):
+        for fname in self.tmpfiles:
+            logging.info(fname)
+            if os.path.exists(fname):
+                os.unlink(fname)
+
+    def _findLastTranslator(self, fname):
+        prefix ='"Last-Translator: ' 
+        for line in file(fname):
+            if line.startswith(prefix):
+                line = line[len(prefix):]
+                return line[:line.index('<')].strip()
+        return None
+
+    def _updateChangeLog(self, domain, lang, translator):
+        changelogFname = os.path.join(self.home, 'ChangeLog')
+        lines = file(changelogFname).readlines()
+        section, rest = self._findFirstSection(lines)
+        before, middle, after = self._findDomainLines(section, domain)
+        self._updateChangeLog2(middle, domain, lang, translator)
+        file(changelogFname, 'w').writelines(before + middle + after + rest)
+        return changelogFname
+
+    def _updateChangeLog2(self, lines, domain, lang, translator):
+        if not lines:
+            line = '  [ ISO %s translations ]\n' % domain[4:].replace('_', '-')
+            lines[:] = [line, '\n']
+
+        line = '  * %s by %s (TP)\n' % (lang2Name[lang], translator)
+        lines[-1:-1] = [line]
+    
+    def _findFirstSection(self, lines):
+        for i in range(1, len(lines)):
+            if lines[i].startswith('iso-codes'):
+                return lines[:i], lines[i:]
+
+    def _findDomainLines(self, lines, domain):
+        keyword = '[ ISO %s translations ]' % domain[4:].replace('_', '-')
+
+        i1 = None
+        i2 = None
+        for i in range(len(lines)):
+            line = lines[i]
+            if keyword in line:
+                i1 = i
+                break
+
+        if i1 is not None:
+            for i in range(i1, len(lines)):
+                line = lines[i]
+                if not line.strip():
+                    i2 = i
+                    break
+
+        if i1 is None:
+            return lines[:-1], [], lines[-1:]
+        else:
+            return lines[:i1], lines[i1:i2+1], lines[i2+1:]
+
+def main():
+    if len(sys.argv) != 3:
+        sys.stderr.write('Usage: %s <domain> <lang>\n' % os.path.basename(sys.argv[0]))
+        sys.exit(2)
+    isocodes = Isocodes()
+    isocodes.merge(sys.argv[1], sys.argv[2])
+
+
+if __name__ == '__main__':
+    logging.basicConfig(level=logging.INFO)
+    main()

-- 
ISO language, territory, currency, script codes and their translations



More information about the Pkg-isocodes-devel mailing list