Код языка должен использоваться в качестве префикса для каждого маршрута экземпляра 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)
}
}