Content negotiation

    你可以通过 play.api.mvc.RequestHeader#acceptLanguages 方法来获取针对一个请求的可接受语言列表,该方法从 Accept-Language 报头获取这些语言并根据它们的品质值来排序。Play 在 play.api.mvc.Controller#lang 方法中使用它,该方法为你的 action 提供了一个隐式的 play.api.i18n.Lang 值,因此它会自动选择最可能的语言(如果你的应用支持的话,否则会使用你应用的默认语言)。

    事实上,Accept 报头并不是真的包含 MIME 类型,而是媒体种类(比如一个请求如果接受的是所有文本结果,那媒体种类可设置为 text/*。而 */* 表示所有类型的结果都是可接受的。)。控制器(Controller)提供了一个高级方法 来帮助你处理媒体种类。例如,考虑以下的 action 定义:

    例如,如果一个客户端发出的请求有如下的 Accept 报头:,意味着它接受任意类型的结果,但更倾向于要 JSON 类型的,上面那段代码就会给它返回 JSON 类型的结果。如果另一个客户端发出的请求的 Accept 报头是 application/xml,这意味着它只接受 XML 的结果,上述代码会返回 NotAcceptable

    1. render {
    2. }