skip pdf processing if necessary
[mediagoblin.git] / mediagoblin / tools / translate.py
index 961445382e949b3469ea9b161b767be42d8d560f..b20e57d1ea2791e1e9773ed95d532cc41e5a8c7b 100644 (file)
@@ -42,6 +42,22 @@ def set_available_locales():
     AVAILABLE_LOCALES = locales
 
 
+class ReallyLazyProxy(LazyProxy):
+    """
+    Like LazyProxy, except that it doesn't cache the value ;)
+    """
+    @property
+    def value(self):
+        return self._func(*self._args, **self._kwargs)
+
+    def __repr__(self):
+        return "<%s for %s(%r, %r)>" % (
+            self.__class__.__name__,
+            self._func,
+            self._args,
+            self._kwargs)
+
+
 def locale_to_lower_upper(locale):
     """
     Take a locale, regardless of style, and format it like "en_US"
@@ -73,7 +89,7 @@ def get_locale_from_request(request):
     """
     request_args = (request.args, request.form)[request.method=='POST']
 
-    if request_args.has_key('lang'):
+    if 'lang' in request_args:
         # User explicitely demanded a language, normalize lower_uppercase
         target_lang = locale_to_lower_upper(request_args['lang'])
 
@@ -112,6 +128,11 @@ def get_gettext_translation(locale):
     return this_gettext
 
 
+def set_thread_locale(locale):
+    """Set the current translation for this thread"""
+    mg_globals.thread_scope.translations = get_gettext_translation(locale)
+
+
 def pass_to_ugettext(*args, **kwargs):
     """
     Pass a translation on to the appropriate ugettext method.
@@ -122,6 +143,16 @@ def pass_to_ugettext(*args, **kwargs):
     return mg_globals.thread_scope.translations.ugettext(
         *args, **kwargs)
 
+def pass_to_ungettext(*args, **kwargs):
+    """
+    Pass a translation on to the appropriate ungettext method.
+
+    The reason we can't have a global ugettext method is because
+    mg_globals gets swapped out by the application per-request.
+    """
+    return mg_globals.thread_scope.translations.ungettext(
+        *args, **kwargs)
+
 
 def lazy_pass_to_ugettext(*args, **kwargs):
     """
@@ -134,7 +165,7 @@ def lazy_pass_to_ugettext(*args, **kwargs):
 
     you would want to use the lazy version for _.
     """
-    return LazyProxy(pass_to_ugettext, *args, **kwargs)
+    return ReallyLazyProxy(pass_to_ugettext, *args, **kwargs)
 
 
 def pass_to_ngettext(*args, **kwargs):
@@ -156,7 +187,17 @@ def lazy_pass_to_ngettext(*args, **kwargs):
     level but you need it to not translate until the time that it's
     used as a string.
     """
-    return LazyProxy(pass_to_ngettext, *args, **kwargs)
+    return ReallyLazyProxy(pass_to_ngettext, *args, **kwargs)
+
+def lazy_pass_to_ungettext(*args, **kwargs):
+    """
+    Lazily pass to ungettext.
+
+    This is useful if you have to define a translation on a module
+    level but you need it to not translate until the time that it's
+    used as a string.
+    """
+    return ReallyLazyProxy(pass_to_ungettext, *args, **kwargs)
 
 
 def fake_ugettext_passthrough(string):