【问题标题】:Supporting multiple languages in a REST API在 REST API 中支持多种语言
【发布时间】:2014-10-10 19:24:23
【问题描述】:

我有一组城市,我正在为其创建一个 REST API(我的第一个 REST API)。每个城市都有许多与语言无关的东西,例如建国日期和人口数量。城市也有一些取决于语言的东西,例如标题和简短描述。在内部,城市文件具有以下格式:

{
   "population": 9042,
   "name": {
       "en": "Berlin",
       "nl": "Berlijn",
       // ...
   },
   // ...
}

我的 API 的用户总是希望只查看特定语言的城市信息,然后返回如下内容:

{
   "population": 9042,
   "name": Berlin,
   // ...
}

我已通过/cities/:id/:language_code 访问这些内容,例如cities/123/en。现在我想实现城市列表:GET /cities。那里也需要请求的语言。因为这会导致/cities/:language_code,所以我觉得把它放在网址的末尾不是一个好主意,我怀疑我最好用/en/cities/...whatever...

这通常如何在 REST API 中完成?有什么大的、很好实现的 API 是一个很好的例子吗?

【问题讨论】:

    标签: rest asp.net-web-api


    【解决方案1】:

    REST API 基于 HTTP 协议,因此它们可以使用标头,这些标头通常用于定义首选语言环境。

    所以我会为此使用Accept-Language 参数。

    # Request
    GET /cities/.... HTTP/1.1
    Host: www.example.org
    Accept-Language: en,en-US,fr;q=0.6
    

    愿意:

    {
       "population": 9042,
       "name": Berlin,
       // ...
    }
    

    【讨论】:

      【解决方案2】:

      这取决于您的客户。如果客户是应用程序,那么@Orabîg 的答案是 100% 正确的。但是,如果您的客户是网络浏览器,您应该将语言作为用户偏好进行跟踪。原因是用户可能正在使用非个人计算机,其中浏览器设置为不同的语言,他们可能不知道如何或能够更改该设置。与其强迫他们使用不熟悉的语言,不如将偏好构建到您的 API 中。

      在这种情况下,我会从 Accept-Language 中提供的语言开始,直到用户识别出自己。一旦他们在每个请求的标头中传递了一些识别令牌,就可以使用它来确定应该使用哪种语言响应。

      【讨论】:

        【解决方案3】:

        仅提及 W3C 关于使用标头进行区域设置确定的相关文章(不仅是似乎是问题原始案例的语言)

        HTTP Accept-Language 标头最初仅用于指定用户的语言。然而,由于许多应用程序需要知道用户的语言环境,通常的做法是使用 Accept-Language 来确定此信息。单独使用 HTTP Accept-Language 标头来确定用户的语言环境并不是一个好主意。如果您只使用 Accept-Language,您可能会将用户束缚在一组不符合他喜好的选择中。

        对于第一次接触,使用 Accept-Language 值推断区域设置可能是一个很好的起点,但请确保允许他们根据需要更改语言并在必要时更准确地指定他们的文化设置。将结果存储在数据库或 cookie 中以供以后访问。

        一些潜在的问题包括:

        • 许多用户从不更改Accept-Language 的默认值。他们是 在安装用户代理时设置。除非他们会多种语言或 有其他理由来调整他们可能没有的语言偏好 甚至知道存在这样的设置。因此,用户可能从来没有 批准接受语言设置。
        • 用户代理可以发送请求 只指定一种语言而不是一个地区,例如,您可以 没有得到带有 de-DE、de-CH 或 de-AT 的标头来指示德语为 分别在德国、瑞士或奥地利使用。在另一 手,你可能只会得到 de 表示对德语的偏好。如果 您计划使用该地区来决定使用哪种货币 你现在陷入困境。您的特殊情况可能允许您 做出诸如“德国有 8300 万人口, 瑞士有 700 万,但只有 63% 会说德语,奥地利有 8 百万,因此该用户可能使用欧元。如果我们错了,我们会 只冒犯了 4.6% 的德语客户或超过 4 百万人。”如果可以,请随意做出这样的假设 接受风险。向用户询问更多信息要简单得多 信息。此外,对于西班牙语或 以英语为例。
        • 人们从朋友那里借机器,然后租用 他们来自网吧。在这些情况下,推断的语言环境可能是 不合适,应注意让用户选择 来自任何页面的适当语言和区域设置 看着。

        全文:Accept-Language used for locale setting

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-07
          • 1970-01-01
          • 2015-05-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多