RESTful URL:我应该把语言环境放在哪里? example.com/en/page 与 example.com/page?locale=en
Posted
技术标签:
【中文标题】RESTful URL:我应该把语言环境放在哪里? example.com/en/page 与 example.com/page?locale=en【英文标题】:RESTful URL: where should I put locale? example.com/en/page vs example.com/page?locale=en 【发布时间】:2011-12-15 02:29:28 【问题描述】:我正在决定如何组织 URL 并将语言环境放入其中。我有两个选择:
-
example.com/en/page
example.com/page?locale=en -- Google 方式
从一方面看,example.com/en/page
比 example.com/page?locale=en
更好更紧凑。
另一方面,我们有两个 URL example.com/en/page
和 example.com/ru/page
用于具有两种表示形式的一个资源。
当然,在example.com/page?locale=en
的情况下,我们对于一个资源也有两个 URL,但在我看来它更 RESTful。
最佳做法是什么?你在用什么,为什么?
【问题讨论】:
【参考方案1】:本地化是 Restful API 中内容协商的一部分。
所以我的首选方式是通过标题来实现。 HTTP 提供了定义所需语言的标准方法。看看Accept-Language 标头。
【讨论】:
是的。我知道接受语言。但例如在俄罗斯,很多人使用英语语言环境,但更喜欢俄语内容。因此,如果我只使用 Accept-Language,他们将没有机会更改内容的语言(当然更改浏览器的语言环境除外)。最常见的解决方案是站点布局中的语言切换器。所以我试图了解组织这种切换器的最佳方式是什么。 我明白了,所以您的 api 客户端是浏览器(例如通过 AJAX 调用)?然后我会选择您建议的 url 参数方式(例如 ?lang=en),因为为您提供“可选”语义(回退到 Accept-Language 标头)。 浏览器和外部服务。谢谢你的意见,我也是这么想的。 我没有看到使用Accept-Language
的问题。是的,当您的 浏览器 发送页面的 HTTP 请求(可能只是您的 SPA 索引)时,它将发送浏览器设置中设置的值。但是对于您对 API 的所有请求,使用 Ajax,您当然可以为此标头指定任何您想要的值——任何体面的框架都允许您自动配置它。因此,您仍然可以让用户从下拉列表中选择一个区域设置,并始终将其与每个连续的请求一起发送。【参考方案2】:
来自https://www.w3.org/International/questions/qa-accept-lang-locales:
HTTP Accept-Language 标头最初仅用于指定用户的语言。然而,由于许多应用程序需要知道用户的语言环境,通常的做法是使用 Accept-Language 来确定此信息。 单独使用 HTTP Accept-Language 标头来确定用户的区域设置不是一个好主意。如果您只使用 Accept-Language,您可能会将用户束缚在一组不符合他喜好的选择中。
我的偏好:
请求 使用查询参数 如果查询参数不是,则回退到Accept-Language
标头
指定
如果未定义 Accept-Language
标头,则回退到 已记录默认语言环境
响应
设置Content-Language
在响应负载中设置区域设置,例如 <some-root-tag xml:lang="en-US">
(参见 http://www.opentag.com/xfaq_lang.htm)
【讨论】:
以上是关于RESTful URL:我应该把语言环境放在哪里? example.com/en/page 与 example.com/page?locale=en的主要内容,如果未能解决你的问题,请参考以下文章