7

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

我正在使用 HTTPAccept-Language标头来获取语言。规范将标头定义为语言说明符,但现在我不确定使用此标头获取国家/地区是否正确。例如,我想允许结果为西班牙语,但数字为英文格式(用逗号而不是点)。

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

我在想我可以X-Country为我的 REST API 开发一个新的自定义标头。

有什么想法吗?谢谢。

4

3 回答 3

4

那里有关于如何本地化 API的好文档。甚至还有关于它的堆栈溢出响应

它主要围绕内容协商和“Accept-Language”标头展开。如果您需要单独管理货币,则普遍共识似乎保留在有效负载中而不是标头中,但如果您要做标头,我会这样做 X-Accept-Currency(类似于其他 HTTP Accept 标头,但使用 ISO 4217 货币代码)在请求和X-Content-Currency响应上。

更新:事情发生了变化——如果你打算提交你的标头进行标准化,你不应该在它前面加上 X。

于 2018-06-22T11:22:01.807 回答
3

我在想我可以X-Country为我的 REST API 开发一个新的自定义标头。

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

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

是的,es-US(西班牙/美国)是一个有效的语言环境(见下面的注释)Accept-Language ,它是标题的合适值:

5.3.5。接受语言

Accept-Language用户代理可以使用标头字段来指示响应中首选的自然语言集。语言标签在第 3.1.3.1 节中定义。[...]

3.1.3.1节的相关部分引述如下:

3.1.3.1。语言标签

RFC 5646中定义的语言标签标识人类说出、书面或以其他方式传达的自然语言,用于与其他人进行信息通信。计算机语言被明确排除。[...]

语言标签是一个或多个不区分大小写的子标签的序列,每个子标签由连字符 ( -, %x2D) 分隔。在大多数情况下,语言标签由一个主要语言子标签组成,该子标签标识一个广泛的相关语言家族(例如,en= 英语),其后可选地跟随一系列子标签,以优化或缩小该语言的范围(例如,en-CA= 品种在加拿大交流的英语)。语言标签中不允许有空格。示例标签包括:

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

有关详细信息,请参阅RFC 5646


注 1:可以找到有效的语言和地区代码组合(在某种意义上,给定地区的给定人口能够读写给定语言,并且可以舒适地与计算机一起使用)在这里

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

于 2018-06-22T11:33:33.363 回答
0

有什么想法吗?谢谢。

我的建议是从为您支持的每种(语言、国家/地区)拥有一个资源开始,然后担心您是否希望拥有一个进行内容协商的资源。

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

另请参阅汤姆克里斯蒂2012 年的回答,尤其是菲尔丁 2006 年评论的链接

于 2018-06-22T11:37:18.217 回答