[Zope3-Users] Re: User preferences for languages- possible?
Giovannetti, Mark
giovanne at nrcan.gc.ca
Thu Feb 22 18:12:34 EST 2007
Hi Philipp,
You are a great resource, thanks for helping. See below.
> From: zope3-users-bounces at zope.org
> [mailto:zope3-users-bounces at zope.org] On Behalf Of Philipp
> von Weitershausen
> Giovannetti, Mark wrote:
> > Hi,
> >
> > This stuff is crazy. I just want to implement a user
> > preference for a language (because I have to). I've
> > read all the user pref. documentation (skinpref, apidoc
> > prefs and zope.app.preference) until I'm blue in the
> > face. Nothing seems to work and there is no help via
> > google and so forth.
> >
> > I know that UserPreferences() wants an ILocation object.
> > I can't seem to get one inside the BrowserFormLanguages
> > class. I am only given the request object.
> >
> > What do I need to do? Getting a root site is insane
> > the way I found to do it via a mailing list message. Not
> > to mention it had issues racking up db connections, then
> > failing on close.
> >
> > Help! Please! Thank you!
> >
> > Preferences seem to work since I can edit them using
> > the http://.../++preferences++/ form.
>
> The zope.app.preference stuff stores the info in principal
> annotations, in a weird way. I personally find that
> stuff a bit convoluted.
If you find it convoluted, then how are us mere mortals
supposed to deal with it? ;-)
>
> The key, as you've correctly identified, is write your own
> IUserPreferredLanguages adapter (or a variant thereof). I would store
> the user's preferences in a cookie or a session. This makes
> things much easier. Simply adapt the request to
> ISession(request).
I'll end up having to do something like this, I suppose.
It really sucks, though, because I *want* to use the
preferences machinery. Why was it built if it can't be
used in certain places - and why aren't the places it can't
be used documented? Arrg.
>
> Note that this might not always work, e.g. when the request is
> instantiated and the request's locale is first created (because local
> utilities to store the session data in aren't available at
> that point).
How am I supposed to deal with what you say above? I don't
even understand most of it! ;-)
> It seems you're hitting that exact problem with the
> preference stuff as well. The trick here is to stub this
> out when the adapter is first called,
'stub this out ... ' - I don't understand, sorry.
> and then later during traversal, when you know the local
> components are there, you revisit it all again by calling
> request.setUpLocale() or whatever it is.
I don't know what you mean. How is a noob supposed to
deal with this?
> The ++lang++ implementation might give some pointers.
The ++lang++ implementation (and ensuing errors when I tested using
it) told me that I needed to change BrowserFormLanguages to
use IModifiableUserPreferredLanguages. Since I had to do that
in order to allow language preferences I decided to get the
UserPreferences machinery running for the app. Now I have
this problem.
The *must* be a common use case. Why isn't this already solved
and documented as a 'best practice' example?
Mark
More information about the Zope3-users
mailing list