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
。
render {
}