Как получить текущий язык в игровом действии?

Я переношу проект Play 2.4 с Java на Scala.

В Java я могу использовать lang().code() для получения текущего языка.

Как я могу сделать то же самое в Scala?


person Guillaume B.    schedule 19.08.2015    source источник
comment
playframework.com/documentation/2.3.x/ScalaI18N   -  person Chris    schedule 19.08.2015
comment
Я, конечно, читал документацию, но не могу найти способ получить текущий язык запроса.   -  person Guillaume B.    schedule 19.08.2015
comment
В документе показано, как получить поле acceptLanguages из поля Request. Объект Lang в play.api.i18N позволяет получить доступ к языкам по умолчанию и доступным языкам.   -  person Chris    schedule 19.08.2015
comment
Хорошо спасибо. Может быть, я должен описать всю мою проблему. По сути, я хочу иметь возможность выбирать язык с помощью кнопки на стороне клиента. Я использовал changeLang() в Java для изменения выбранного языка. Затем в другом запросе я получал текущий язык с помощью lang().code(). Как можно добиться аналогичной операции в Scala?   -  person Guillaume B.    schedule 19.08.2015


Ответы (1)


Вам нужен MessagesApi (документ: Java и Scala ) для вызова prefered(RequestHeader req), который возвращает текущий язык пользователя.

Он использует этот алгоритм для поиска наиболее подходящего языка:

  def preferred(request: RequestHeader) = {
    val maybeLangFromCookie = request.cookies.get(langCookieName).flatMap(c => Lang.get(c.value))
    // match selected lang with play.i18n.langs or return the default one
    val lang = langs.preferred(maybeLangFromCookie.toSeq ++ request.acceptLanguages) 
    Messages(lang, this)
  }

Я не использую Java API, но я думаю, что вы можете получить экземпляр messageApi с инжектором DI:

@Inject MessagesApi messagesApi
person Julien Lafont    schedule 25.08.2015