LCIDs in the URI remove ambiguity about which language to serve (do you use Accept-Language? Or IP sniffing? Or user prefs in cookies?), they remove ambiguity about which storefront to show for a market and - most importantly - they make alternate language/markets indexable by search engines because each has a distinct URI.
Why are Apple, IBM, Amazon, Google doing it if it's such a terrible design?
> do you use Accept-Language? Or IP sniffing? Or user prefs in cookies?
How do you think they picked which language to serve me in the first place? ;) What you're saying is true about eliminating ambiguity but parent commenter just linked to microsoft.com.
When I had to do this for a site, the waterfall I settled on was:
1. Did they just manually pick a language/is it in the URL? (serve that language, set cookie)
2. Do they have a cookie? (serve that language)
3. Do we support any of their Accept-Language prefs? (serve that language, set cookie)
4. Serve en-us (fallback)
My points being a) Microsoft.com is using langauge-accept (probably) and b) you can support URL picking & language-accept and not always have an ugly URL.
EDIT: oops, changing my language to ``es``, clearing cookies & revisiting microsoft.com didn't change the language. I guess they are just serving everyone at .com English :p
Accept-Language is clearly the correct solution. It's easy to set in browsers (at least it is in Opera, if it's not in some other browser then I contend that's a UI bug), and OEMs should set it to a sane default for the region in which the browser is distributed.
The indexability is an interesting argument, but my response is that there should be a standard mechanism to query, via HTTP OPTIONS, in which languages a resource is available. By doing so, a user agent or search engine can easily index all versions of a resource.
Whether or not such a standard exists I do not know, but Google certainly has the clout to standardize such a mechanism (viz. sitemaps and #!).
Unfortunately Accept-Language simply doesn't work - if you talk to engineers at Google they'll tell you that they've done the research and an enormous number of browsers have the incorrect setting and hence send an inappropriate header.
What would you propose when, as translations have to be done manually, the available content for different pages is out of sync?
For example, maybe that latest product announcement hasn't been translated to French yet. If I send a product list URL to my french-speaking buddy, should the product disappear from the product list?
Why are Apple, IBM, Amazon, Google doing it if it's such a terrible design?
http://www.ibm.com/us/en/
http://store.apple.com/us
http://www.apple.com/ca/fr/mac/
http://support.google.com/adwords/?hl=en
http://www.amazon.ca/fr/