selectPreferredLanguage • Akka HTTP (original) (raw)
Signature
def selectPreferredLanguage(first: Language, more: Language*): Directive1[Language]
Description
Inspects the request’s Accept-Language
header and determines, which of a given set of language alternatives is preferred by the client according to content negotiation rules defined by RFC 7231 in section 5.3.5.
If there are several best language alternatives that the client has equal preference for (even if this preference is zero!) the order of the arguments is used as a tie breaker (first one wins).
Example
Scala
source`` val request = Get() ~> Accept-Language
(
Language("en-US"),
Language("en") withQValue 0.7f,
LanguageRange.*
withQValue 0.1f,
Language("de") withQValue 0.5f)
request ~> { selectPreferredLanguage("en", "en-US") { lang => complete(lang.toString) } } ~> check { responseAs[String] shouldEqual "en-US" }
request ~> { selectPreferredLanguage("de-DE", "hu") { lang => complete(lang.toString) } } ~> check { responseAs[String] shouldEqual "de-DE" } ``
Java
source`import static akka.http.javadsl.server.Directives.complete; import static akka.http.javadsl.server.Directives.selectPreferredLanguage;
final Route enRoute = selectPreferredLanguage( Arrays.asList(Language.create("en"), Language.create("en-US")), lang -> complete(lang.toString()) ); final Route deHuRoute = selectPreferredLanguage( Arrays.asList(Language.create("de-DE"), Language.create("hu")), lang -> complete(lang.toString()) );
// tests: final HttpRequest request = HttpRequest.GET("/").addHeader(AcceptLanguage.create( Language.create("en-US").withQValue(1f), Language.create("en").withQValue(0.7f), LanguageRanges.ALL.withQValue(0.1f), Language.create("de-DE").withQValue(0.5f) ));
testRoute(enRoute).run(request).assertEntity("en-US"); testRoute(deHuRoute).run(request).assertEntity("de-DE");`
Found an error in this documentation? The source code for this page can be found here. Please feel free to edit and contribute a pull request.