Index: main/waeup.sirp/trunk/src/waeup/sirp/browser/browser.txt
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/browser/browser.txt	(revision 7672)
+++ main/waeup.sirp/trunk/src/waeup/sirp/browser/browser.txt	(revision 7674)
@@ -36,4 +36,19 @@
   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"...
   ...Welcome to the...
+  ...
+
+We can change to German::
+  >>> browser.getLink('de').click()
+  >>> print browser.contents
+  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"...
+  ...Anfragen...
+  ...
+
+And then change back to English by clicking on the third link containing 'en'
+behind 'Anfragen' and 'Einloggen'::
+  >>> browser.getLink('en', index=2).click()
+  >>> print browser.contents
+  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"...
+  ...Enquiries...
   ...
 
Index: main/waeup.sirp/trunk/src/waeup/sirp/browser/pages.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/browser/pages.py	(revision 7672)
+++ main/waeup.sirp/trunk/src/waeup/sirp/browser/pages.py	(revision 7674)
@@ -26,4 +26,5 @@
 import time
 import re
+import zope.i18nmessageid
 from zope import schema
 from zope.authentication.interfaces import (
@@ -137,5 +138,5 @@
 
 #
-# Login/logout pages...
+# Login/logout and language switch pages...
 #
 
@@ -187,4 +188,20 @@
             self.flash("You have been logged out. Thanks for using WAeUP SIRP!")
         self.redirect(self.application_url())
+
+
+class LanguageChangePage(SIRPPage):
+    """ Language switch
+    """
+    grok.context(ISIRPObject)
+    grok.name('change_language')
+    grok.require('waeup.Public')
+
+    def update(self, lang='en', view_name='@@index'):
+        self.response.setCookie('waeup.sirp.language', lang, path='/')
+        self.redirect(self.url(self.context, view_name))
+        return
+
+    def render(self):
+        return
 
 #
Index: main/waeup.sirp/trunk/src/waeup/sirp/browser/static/waeup-base.css
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/browser/static/waeup-base.css	(revision 7672)
+++ main/waeup.sirp/trunk/src/waeup/sirp/browser/static/waeup-base.css	(revision 7674)
@@ -193,2 +193,17 @@
   line-height: 18px;
 }
+
+.language {
+  color: #BFBFBF;
+  position:relative;
+  top:10px;
+  right:-160px;
+}
+
+.language a {
+  color: #BFBFBF;
+}
+
+.language a:hover {
+  color: #ffffff;
+}
Index: main/waeup.sirp/trunk/src/waeup/sirp/browser/templates/facultypage.pt
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/browser/templates/facultypage.pt	(revision 7672)
+++ main/waeup.sirp/trunk/src/waeup/sirp/browser/templates/facultypage.pt	(revision 7674)
@@ -1,11 +1,11 @@
-<div tal:condition="python: not len(context.keys())">
+<div i18n:domain="waeup.sirp" i18n:translate="" tal:condition="python: not len(context.keys())">
 There no subobjects registered yet.
 </div>
 
-<table>
+<table i18n:domain="waeup.sirp">
   <thead>
     <tr>
-      <th>Code</th>
-      <th>Title</th>
+      <th i18n:translate="code">Code</th>
+      <th i18n:translate="title">Title</th>
     </tr>
   </thead>
Index: main/waeup.sirp/trunk/src/waeup/sirp/browser/templates/staffsitelayout.pt
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/browser/templates/staffsitelayout.pt	(revision 7672)
+++ main/waeup.sirp/trunk/src/waeup/sirp/browser/templates/staffsitelayout.pt	(revision 7674)
@@ -1,7 +1,4 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:i18n="http://xml.zope.org/namespaces/i18n"
-      i18n:domain="waeup.sirp"
-      xml:lang="en">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" i18n:domain="waeup.sirp">
   <head>
     <title>WAeUP - your way up
@@ -29,5 +26,5 @@
           <ul class="nav secondary-nav">
             <li tal:condition="not: layout/isAuthenticated">
-            <a href="#" i18n:translate="login"
+            <a href="#" i18n:translate=""
                 tal:attributes="href python: view.url(layout.site, 'login')">
                 Login
@@ -35,12 +32,18 @@
             </li>
             <li tal:condition="layout/isAuthenticated">
-            <a href="#" tal:attributes="href python: view.url(layout.site, '@@contactadmin')">
+            <a href="#" i18n:translate=""
+               tal:attributes="href python: view.url(layout.site, '@@contactadmin')">
                 Contact
             </a>
             </li>
             <li tal:condition="layout/isAuthenticated">
-            <a href="#" tal:attributes="href python: view.url(context, '@@logout')">Logout</a>
+            <a href="#" i18n:translate=""
+               tal:attributes="href python: view.url(context, '@@logout')">Logout</a>
             </li>
           </ul>
+          <span class="language">
+            <tal:languages
+                  tal:content="structure provider:languages" /> |
+          </span>
         </div>
       </div>
Index: main/waeup.sirp/trunk/src/waeup/sirp/browser/templates/studentsitelayout.pt
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/browser/templates/studentsitelayout.pt	(revision 7672)
+++ main/waeup.sirp/trunk/src/waeup/sirp/browser/templates/studentsitelayout.pt	(revision 7674)
@@ -1,7 +1,4 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:i18n="http://xml.zope.org/namespaces/i18n"
-      i18n:domain="waeup.sirp"
-      xml:lang="en">
+<html xmlns="http://www.w3.org/1999/xhtml" i18n:domain="waeup.sirp">
   <head>
     <title>WAeUP - your way up
@@ -34,20 +31,28 @@
           <ul class="nav secondary-nav">
             <li tal:condition="not: layout/isAuthenticated">
-            <a href="#" tal:attributes="href python: view.url(layout.site, 'login')">
+            <a href="#" i18n:translate=""
+               tal:attributes="href python: view.url(layout.site, 'login')">
                 Login
             </a>
             </li>
             <li tal:condition="layout/isAuthenticated">
-            <a href="#" tal:attributes="href python: view.url(layout.site, '@@contactadmin')">
+            <a href="#" i18n:translate=""
+               tal:attributes="href python: view.url(layout.site, '@@contactadmin')">
                 Contact
             </a>
             </li>
             <li tal:condition="layout/isAuthenticated">
-            <a href="#" tal:attributes="href python: view.url(context, '@@logout')">Logout</a>
+            <a href="#" i18n:translate=""
+               tal:attributes="href python: view.url(context, '@@logout')">Logout</a>
             </li>
           </ul>
+          <span class="language">
+            <tal:languages
+                  tal:content="structure provider:languages" /> |
+          </span>
         </div>
       </div>
     </div>
+
     <div class="container">
       <ul class="student-info-bar" tal:condition="layout/isAuthenticated">
Index: main/waeup.sirp/trunk/src/waeup/sirp/browser/viewlets.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/browser/viewlets.py	(revision 7672)
+++ main/waeup.sirp/trunk/src/waeup/sirp/browser/viewlets.py	(revision 7674)
@@ -17,4 +17,6 @@
 ##
 import grok
+import zope.i18nmessageid
+from urllib import urlencode
 from zope.component import getMultiAdapter, queryAdapter
 from zope.interface import Interface
@@ -33,4 +35,6 @@
 from waeup.sirp.utils.helpers import get_user_account
 
+_ = zope.i18nmessageid.MessageFactory('waeup.sirp')
+
 grok.templatedir('templates')
 grok.context(ISIRPObject) # Make ISIRPObject the default context
@@ -41,4 +45,7 @@
 class BreadCrumbManager(grok.ViewletManager):
     grok.name('breadcrumbs')
+
+class LanguageManager(grok.ViewletManager):
+    grok.name('languages')
 
 class ActionBar(grok.ViewletManager):
@@ -200,4 +207,54 @@
                     url = self.view.url(breadcrumb.context, breadcrumb.target)
                     )
+
+class LanguageLink(grok.Viewlet):
+    """ An entry in the language selector.
+
+    This is only a baseclass that won't be rendered actually. Deriving
+    viewlets can override certain values and will be rendered with the
+    values set here as default.
+    """
+    grok.baseclass()
+    grok.viewletmanager(LanguageManager)
+    grok.context(ISIRPObject)
+    grok.require('waeup.Public')
+    lang = 'de'
+    title = u'Deutsch'
+
+    def render(self):
+        args = {'lang':self.lang, 'view_name':self.view.__name__}
+        url = self.view.url(
+            self.context) + '/@@change_language?%s' % urlencode(args)
+        return u'| <a href="%s" title="%s">%s</a> ' % (url,self.title,self.lang)
+
+class English(LanguageLink):
+    """A link to switch to English.
+    """
+    lang = 'en'
+    title = u'English'
+
+class French(LanguageLink):
+    """A link to switch to French.
+    """
+    lang = 'fr'
+    title = u'Fran&ccedil;ais'
+
+class German(LanguageLink):
+    """A link to switch to German.
+    """
+    lang = 'de'
+    title = u'Deutsch'
+
+class Hausa(LanguageLink):
+    """A link to switch to Hausa.
+    """
+    lang = 'ha'
+    title = u'Hausa'
+
+class Yoruba(LanguageLink):
+    """A link to switch to Yoruba.
+    """
+    lang = 'yo'
+    title = u'Yoruba'
 
 
@@ -623,5 +680,5 @@
 
     pnav = 1
-    tab_title = u'Academics'
+    tab_title = _(u'Academics')
 
     @property
@@ -638,5 +695,5 @@
     grok.order(6)
     grok.require('waeup.Anonymous')
-    tab_title = u'Enquiries'
+    tab_title = _(u'Enquiries')
     pnav = 2
 
