changeset 1165:6424d3684d1e

pages: locale handling: language/locale can be set using C.KEY_LANG in url query (e.g. [url]?lang=fr), it is set for the whole session.
author Goffi <goffi@goffi.org>
date Wed, 10 Apr 2019 21:06:34 +0200
parents ef3adc3f2078
children 5baf7ece44a0
files libervia/server/pages.py libervia/server/session_iface.py
diffstat 2 files changed, 18 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/libervia/server/pages.py	Sun Mar 03 17:14:27 2019 +0100
+++ b/libervia/server/pages.py	Wed Apr 10 21:06:34 2019 +0200
@@ -1137,13 +1137,17 @@
             request.finish()
         else:
             template = u"error/" + unicode(code) + ".html"
+            template_data = request.template_data
+            session_data = self.host.getSessionData(request, session_iface.ISATSession)
+            if session_data.locale is not None:
+                template_data[u'locale'] = session_data.locale
             if self.vhost_root.site_name:
-                request.template_data[u'site'] = self.vhost_root.site_name
+                template_data[u'site'] = self.vhost_root.site_name
 
             rendered = self.host.renderer.render(
                 template,
                 error_code=code,
-                **request.template_data
+                **template_data
             )
 
             self.writeData(rendered, request)
@@ -1214,6 +1218,8 @@
         session_data = self.host.getSessionData(request, session_iface.ISATSession)
         if session_data.popPageFlag(self, C.FLAG_CONFIRM):
             template_data[u"confirm"] = True
+        if session_data.locale is not None:
+            template_data[u'locale'] = session_data.locale
         if self.vhost_root.site_name:
             template_data[u'site'] = self.vhost_root.site_name
 
@@ -1413,6 +1419,8 @@
                 _(u"renderPartial must only be used with dynamic pages")
             )
         session_data = self.host.getSessionData(request, session_iface.ISATSession)
+        if session_data.locale is not None:
+            template_data[u'locale'] = session_data.locale
         if self.vhost_root.site_name:
             template_data[u'site'] = self.vhost_root.site_name
 
@@ -1465,6 +1473,13 @@
                 # we don't differenciate URLs finishing with '/' or not
                 del request.postpath[-1]
 
+            if C.KEY_LANG in request.args:
+                try:
+                    session_data.locale = request.args.pop(C.KEY_LANG)[0]
+                except IndexError:
+                    log.warning(u"empty lang received")
+
+
         d = defer.Deferred()
         d.addCallback(self._checkAccess, request)
 
--- a/libervia/server/session_iface.py	Sun Mar 03 17:14:27 2019 +0100
+++ b/libervia/server/session_iface.py	Wed Apr 10 21:06:34 2019 +0200
@@ -47,6 +47,7 @@
         self.uuid = unicode(shortuuid.uuid())
         self.identities = data_objects.Identities()
         self.csrf_token = unicode(shortuuid.uuid())
+        self.locale = None  # i18n of the pages
         self.pages_data = {}  # used to keep data accross reloads (key is page instance)
         self.affiliations = OrderedDict()  # cache for node affiliations