http://www.mediawiki.org/wiki/Special:Code/pywikipedia/8846

Revision: 8846
Author:   valhallasw
Date:     2011-01-16 20:16:05 +0000 (Sun, 16 Jan 2011)
Log Message:
-----------
Implemented fallback translations for TW translations.

Modified Paths:
--------------
    branches/rewrite/pywikibot/i18n.py

Modified: branches/rewrite/pywikibot/i18n.py
===================================================================
--- branches/rewrite/pywikibot/i18n.py  2011-01-16 20:16:01 UTC (rev 8845)
+++ branches/rewrite/pywikibot/i18n.py  2011-01-16 20:16:05 UTC (rev 8846)
@@ -2,6 +2,8 @@
 # I18N functions
 #----------------
 
+from pywikibot import Error
+
 # Languages to use for comment text after the actual language but before
 # en:. For example, if for language 'xx', you want the preference of
 # languages to be:
@@ -185,6 +187,10 @@
         return xdict['en']
     return xdict.values()[0]
 
+
+class TranslationError(Error):
+    pass
+
 def twtranslate(code, twtitle, parameters=None):
     """ Uses TranslateWiki files to provide translations based on the TW title
         twtitle, which corresponds to a page on TW.
@@ -197,8 +203,24 @@
     """
     package = twtitle.split("-")[0]
     transdict = getattr(__import__("i18n", fromlist=[package]), package).msg
-    trans = translate(code, transdict)[twtitle]
 
+    # There are two possible failure modes: the msg dict might not have the
+    # language altogether, or a specific key could be untranslated.
+    
+    trans = None
+    try:
+        trans = transdict[code][twtitle]
+    except KeyError:
+        # try alternative languages and English
+        for alt in _altlang(code) + ['en']:
+            try:
+                trans = transdict[alt][twtitle]
+                break
+            except KeyError:
+                continue
+        if not trans:
+            raise TranslationError("No English translation has been defined 
for TranslateWiki key %r" % twtitle)
+
     if parameters:
         return trans % parameters
     else:


_______________________________________________
Pywikipedia-svn mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/pywikipedia-svn

Reply via email to