Как автоматически добавить код языка для изменения маршрутов в игровой среде 2.7 - PullRequest
0 голосов
/ 28 июня 2019

Код языка должен использоваться в качестве префикса для каждого маршрута экземпляра Routes .Маршрутизация работает, но обратные маршруты нет:

Код языка текущих заголовков HttpHeaders должен добавляться в качестве префикса к каждому вызову , возвращаемому из обратных маршрутов.Какой лучший способ достичь этого?Может быть, есть способ настроить генерацию маршрутов?

Фон

Подход, над которым я сейчас работаю, заключается в использовании настраиваемого HttpRequestHandler для правильной маршрутизации.Этот обработчик обновляет путь и постоянный язык запроса, если присутствует код языка.

class RequestHandler @Inject()(
                                webCommands: WebCommands,
                                optionalDevContext: OptionalDevContext,
                                errorHandler: HttpErrorHandler,
                                configuration: HttpConfiguration,
                                filters: HttpFilters,
                                routes: router.Routes
                              ) extends DefaultHttpRequestHandler(
  webCommands,
  optionalDevContext,
  routes,
  errorHandler,
  configuration,
  filters
) {

  val langRouteRegex = "/(.{2})(/.*)?".r

  override def routeRequest(request: RequestHeader): Option[Handler] = {
    val updatedRequest = request.path match {
      case langRouteRegex(lang, path) =>
        updateLangRequest(request, lang, path)
      case _ =>
        request
    }
    super.routeRequest(updatedRequest)
  }

  def updateLangRequest(requestHeader: RequestHeader, lang: String, path: String): RequestHeader = {
    requestHeader
      .withTarget(requestHeader.target.withPath(if (path == null) "/" else path))
      .withTransientLang(lang)
  }
}
...