带有语言和区域的REST API请求

时间:2018-06-22 10:52:09

标签: java rest api http http-accept-language

我正在开发REST API,我需要实现一种方法,该方法需要语言和国家/地区才能以正确的格式生成结果,因为结果包含数字和日期。

我正在使用HTTP Accept-Language标头来获取语言。规范将标头定义为语言说明符,但是现在我不确定使用此标头获取国家/地区是否正确。例如,我希望以西班牙语显示结果,但以英语格式显示数字(用逗号代替点号)。

es-US标头是Accept-Language的可接受值吗?

我当时想我可以为我的REST API开发一个新的自定义标头,例如X-Country

有什么想法吗?谢谢。

3 个答案:

答案 0 :(得分:0)

关于如何localize your APIs的文档很好。甚至还有stack overflow response about it

大多数情况下,它围绕content negotiation和“ Accept-Language”标头展开。如果您需要单独管理货币,则一般共识似乎保留在有效负载中,而不是标题中,但是如果您要进行标题,则可以使用Accept-Currency(类似于其他HTTP Accept标题,但在请求上使用ISO 4217货币代码),在响应上使用Content-Currency

答案 1 :(得分:0)

  

我当时想我可以为我的REST API开发一个新的自定义标头,例如X-Country

如果标准HTTP标头之一适合您的需求,我会避免使用自定义标头。

  

es-US标头是否接受Accept-Language的值?

是的,es-US(西班牙语/美国)是有效语言环境(请参见以下说明),并且它是{{3 }}标头:

  

Accept-Language

     

Accept-Language标头字段可由用户代理用来     指出在     响应。语言标签在5.3.5. Accept-Language中定义。 [...]

下面引用了Section 3.1.3.1的相关部分:

  

section 3.1.3.1

     

3.1.3.1. Language Tags中定义的语言标签可识别自然     人类为以下目的而使用的口语,书面或其他方式传达的语言     与他人交流信息。电脑     语言被明确排除。 [...]

     

语言标签是一个或多个不区分大小写的子标签的序列,     每个字符之间用连字符(-%x2D)分隔。在大多数情况下,     语言标签包含主要语言子标签,用于标识     广泛的相关语言(例如en =英语),即     可选地,其后是一系列子标签,用于细化或缩小     语言的范围(例如en-CA =     在加拿大交流)。语言中不允许使用空格     标签。标签示例包括:

fr, en-US, es-419, az-Arab, x-pig-latin, man-Nkoo-GN
     

有关更多信息,请参见RFC 5646


注1:可以被视为有效的语言和地区代码的组合(在某种意义上,给定地区的给定人口能够RFC 5646,您可以阅读和编写给定的语言,并且足够舒适地在计算机上使用它。

注意2::不确定使用的是哪种编程语言,但是here是Java可用语言环境的列表。

答案 2 :(得分:0)

  

有什么想法吗?谢谢。

我的建议是从为您支持的每个资​​源(语言,国家/地区)开始都有一个资源,然后担心是否要拥有一个content negotiation的资源。

使用内容协商的资源的简单模式是使用Content-Location标头指向协商的语言/国家/地区对的特定资源。

另请参阅2012年的Tom Christie's answer,尤其是指向Fielding's comment in 2006的链接