[Catalyst] Language selection in URLs

Joel Bernstein joel at fysh.org
Sun Nov 15 15:23:15 GMT 2009

On 15 Nov 2009, at 15:06, Bill Moseley wrote:

> What's your preferred approach to specifying a language tag in a URL?  Is there strong argument for one over the other?
> http://example.com/en_us/path/to/some/index.html # language prefix
> http://example.com/path/to/some/index.html?lang=en_us

No no no! Allow the client and server to negotiate what content to serve for the resource identified. As a URI to a resource which may vary according to many dimensions, /path/to/some/content is fine.

GET /path/to/content HTTP/1.1
Accept-Language: en
Accept: text/html

> Are pages in different languages different resources or different versions of the same resource?

They are different *representations* of the same *resource*. The dimension of variation in this case is the Accept-Language: request header.


and you might reasonably vary the content type returned according to the client's Accept: header too.

> Obviously, the prefix is easier if you use relative URLs, but uri_for makes adding the query parameter easy.  Although, probably could argue that the prefix approach is more efficient than wrapping uri_for for every generated link.

If you really must stick it in the URL, I'd go for something like:

A better question is: what kind of problems are you solving where server-driven or agent-driven content negotiation as described in the HTTP 1.1 RFC (an excellent and very readable document, honestly) are insufficient?


More information about the Catalyst mailing list