[Catalyst] Working with C::P::I18N::Request and
C::P::I18N::PathPrefix at the same time?
norbi.lists at nix.hu
Fri Oct 1 10:13:44 GMT 2010
On Thu, 30 Sep 2010 22:32:03 +0200 Ekki Plicht (DF4OR) wrote:
> Am I right that this combination (see subject) does not work well
Dunno, never tried them, but if they don't work together it's a bug that
should be fixed.
> AFAICS C::P::I18N::Request modifies the path very early in the request
> cycle, before the dispatcher and C::P::I18N::PathPrefix can kick in,
Yup, but if you swap the order of these two plugins, ::PathPrefix can act
before ::Request (and, BTW, ::PathPrefix also acts before the dispatcher,
these two modules hook to the same method:-).
Can you try if it works if you simply change the order of
loading ::Request and ::PathPrefix? (If it works then I'll update the
documentation to mention it.)
> IOW: Regardless of what path prefix (language) I use,
> C::P::I18N::Request only looks at the 'accept-language' header
> parameter, right? That makes this combination unusable... too bad.
Nope, ::Request uses $c->localize(), and that uses $c->languages(), and
C:P:I18N::PathPrefix sets that to the language from the path prefix. So
they should work together smoothly (given that ::PathPrefix has the
> I would love to have localized path names (like I18N::Request offers),
> but also the possibility to let the user change languages at will (like
> I18N::PathPrefix + session mgmt offers). That includes letting her
> select a different language than what her browsers header
> 'accept-language' is set to.
You can achieve that using C:P:I18N, C:P:I18N::PathPrefix and
C:P:I18N::Request together. Also you don't need a session for that: if
the user uses an URL to your site with a language code path prefix, that
language will be used throughout the site until (s)he switches language,
if (s)he uses an URL without a language code path prefix then it will be
set from the 'accept-language'. Alternatively you can set a plain cookie
if you want to remember the preferred language from the previous
"browsing session" and if (s)he uses an URL without a path prefix you can
use the value of this cookie to override the language detected from
More information about the Catalyst