NAME

Apache::LangPrefCookie - implant a language-preference provided by a cookie into httpd's representation of the Accept-Language HTTP-header.

SYNOPSIS

<Location />
   PerlInitHandler  Apache::LangPrefCookie
</Location>

<Location /foo>
   # optionally set a custom cookie-name, default is "prefer-language"
   PerlSetVar LangPrefCookieName "foo-pref"
</Location>

DESCRIPTION

This module looks for a cookie providing a language-code as its value. This preference is then implanted into httpd's representation of the Accept-Language header, just as if the client had asked for it as #1 choice. The original preferences are still present, albeit with lowered q-values. The cookie's name is configurable, as described in the examples. Setting/modifying/deleting such a cookie is to be handled separately, Apache::LangPrefCookie just consumes it.

After that, it's up to httpd's mod_negotiation to choose the best deliverable representation.

WHY?

I had demands to let users switch language once for a given site. Also, the availability and languages of translations offered, vary over places within this site.

In theory a user-agent should help its users to set a reasonable choice of language(s). In practice, the dialog is hidden in the 3rd level of some menu, maybe even misguiding the user in his selections. (See http://ppewww.ph.gla.ac.uk/~flavell/www/lang-neg.html, especially the section Language subset selections for examples.)

There might also be scenarios, where one wants to let users set a different preference just for certain realms within one site.

I dislike solutions involving virtual paths, as they lengthen some, and generally increase the number of URIs for a given resource.

Admittedly, the itch scratched here might very well be quite specific for the Author. :-)

EXAMPLE COOKIE

prefer-language=x-klingon;expires=Saturday 31-Dec-05 24:00:00 GMT;path=/

Optionally, the default cookie name prefer-language can be overridden by setting the LangPrefCookieName variable:

PerlSetVar LangPrefCookieName "mypref"

mypref=x-klingon;expires=Saturday 31-Dec-05 24:00:00 GMT;path=/

BUGS

  • Not tested with Apache2

SEE ALSO

mod_perl(3)

http://httpd.apache.org/docs/1.3/content-negotiation.html

http://httpd.apache.org/docs/1.3/mod/mod_negotiation.html

http://ppewww.ph.gla.ac.uk/~flavell/www/lang-neg.html

http://www.w3.org/TR/2004/WD-webarch-20040705/#avoid-uri-aliases

AUTHOR

Hansjoerg Pehofer, <hansjoerg.pehofer@uibk.ac.at>

COPYRIGHT AND LICENSE

Copyright (C) 2005-2006 by Hansjoerg Pehofer

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.7 or, at your option, any later version of Perl 5 you may have available.