我正在开发REST API,我需要实现一种方法,该方法需要语言和国家/地区才能以正确的格式生成结果,因为结果包含数字和日期。
我正在使用HTTP Accept-Language
标头来获取语言。规范将标头定义为语言说明符,但是现在我不确定使用此标头获取国家/地区是否正确。例如,我希望以西班牙语显示结果,但以英语格式显示数字(用逗号代替点号)。
es-US
标头是Accept-Language
的可接受值吗?
我当时想我可以为我的REST API开发一个新的自定义标头,例如X-Country
。
有什么想法吗?谢谢。
答案 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
标头字段可由用户代理用来 指出在 响应。语言标签在5.3.5. Accept-Language中定义。 [...]
下面引用了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的链接