diff --git a/scripts/boxesserver b/scripts/boxesserver index 4d677c5..ce1fd36 100755 --- a/scripts/boxesserver +++ b/scripts/boxesserver @@ -25,6 +25,7 @@ import codecs import mimetypes import re import markdown +import gettext # Python 2 vs Python 3 compat try: @@ -90,6 +91,9 @@ class ThrowingArgumentParser(argparse.ArgumentParser): boxes.ArgumentParser = ThrowingArgumentParser # Evil hack class BServer: + + lang_re = re.compile(r"([a-z]{2,3}(-[-a-zA-Z0-9]*)?)\s*(;\s*q=(\d\.?\d*))?") + def __init__(self): self.boxes = {b.__name__ : b() for b in boxes.generators.getAllBoxGenerators().values() if b.webinterface} self.boxes['TrayLayout2'] = boxes.generators.traylayout.TrayLayout2(self, webargs=True) @@ -102,7 +106,22 @@ class BServer: self.staticdir = os.path.join(os.path.dirname(__file__), '../static/') - def arg2html(self, a, prefix, defaults={}): + def getLanguage(self, accept_language): + languages = accept_language.split(",") + langs = [] + for l in languages: + m = self.lang_re.match(l.strip()) + if m: + langs.append((float(m.group(4) or 1.0), m.group(1))) + langs.sort(reverse=True) + langs = [l[1].replace("-", "_") for l in langs] + try: + return gettext.translation('boxes.py', localedir='locale', + languages=langs) + except OSError: + return gettext.translation('boxes.py', languages=langs, fallback=True) + + def arg2html(self, a, prefix, defaults={}, _=lambda s:s): name = a.option_strings[0].replace("-", "") if isinstance(a, argparse._HelpAction): return "" @@ -113,7 +132,7 @@ class BServer: default = defaults.get(name, None) row = """
""", box.__doc__ or "", """
+""", _(box.__doc__) if box.__doc__ else "", """
@@ -212,29 +231,20 @@ class BServer: