[Zope3-dev] Adapter that determines request.locale is hard-wired
Philipp von Weitershausen
philipp at weitershausen.de
Thu Mar 31 15:02:18 EST 2005
Hello all,
I've discovered a problem in the way zope.publisher chooses the
request's locale object (accessible via request.locale).
In an ideal circumstance, the number of languages that a user client
prefers (in order) is retrieved by adapting the request to
IUserPreferredLanguages. The language negotiator in zope.i18n does so,
for example. When choosing the appropriate locale object for the
request, the request is not adapted to IUserPreferredLanguages, though,
but the default implementation (zope.publisher.browser.BrowserLanguages)
is hard-wired, making it impossible to override the negotiation of the
locale (this takes place in zope.publisher.http.HTTPRequest.__setupLocale).
I have a good example that demonstrates this. My book website,
http://worldcookery.com, runs on X3.0. I have overridden the
IUserPreferredLanguages adapter to always return 'en' as the preferred
language (see the downloadable source of the website software if you
want to double-check). So, for mere translations, the browser's
Accept-Language header is totally ignored, which is what I want. Now pay
attention to the *News* section on the front page. Every news item has a
creation date that is shown. I used the locale's date formatter to
present the datetime object returned by the DublinCore adapter. If the
locale would use my custom IUserPreferredLanguages adapter to choose the
locale, the date formatting would always be according to the default
(U.S.) locale. But it isn't. Try setting your browser's preferred
language to German. You'll see the date format changes.
So, I propose to turn that hard-wiring into an adaption to
IUserPreferredLanguages. I'll make that change some time next week if
noone objects.
Philipp
More information about the Zope3-dev
mailing list