On Sat, Apr 18, 2009 at 12:34:19AM +0100, Chris Withers wrote: > Hanno Schlichting wrote: > > Or attach a marker interface to the request and register a different > > IUserPreferredLanguages adapter for it. > > This won't quite work as I still need to get the language I'm forcing > from somewhere. > > However, I realised I already had a custom IUserPreferredLanguages > adapter on this project (to get the language from the user object, not > the browser) so I added a bit of code in there. The simplest version of > this would be: > > from zope.publisher.browser import BrowserLanguages > > class Languages(BrowserLanguages): > > def getPreferredLanguages(self): > force = getattr(self.request,'_force_language',None) > if force: > return [force] > return super(Languages, self).getPreferredLanguages() > > Then this zcml: > > <adapter > for="zope.publisher.interfaces.http.IHTTPRequest" > provides="zope.i18n.interfaces.IUserPreferredLanguages" > factory=".languages.Languages" > /> > > ...and then you can do the following in a view: > > def __call__(self): > def1 = self.template(self) > self.request._force_language = 'de'
Does this work? IIRC Zope 3 request objects use __slots__ and therefore cannot have any extra attributes imposed upon them from the outside. Marius Gedminas -- http://pov.lt/ -- Zope 3 consulting and development
Description: Digital signature
_______________________________________________ Zope-Dev maillist - Zope-Dev@zope.org http://mail.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope )