Как реализовать i18n использовать Spring MVC использовать URL-адрес, а не параметр в запросе get? - PullRequest
0 голосов
/ 02 сентября 2018

Большинство обучающих программ реализованы по запросу GET, например: www.xxx.com.index? Lang = en-US.

Я хочу получить решение, подобное этому: [https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/index][1].

Локаль («en-US») указана после домена.

И я также не хочу изменять существующий контроллер.

1 Ответ

0 голосов
/ 09 сентября 2018

Я решил это. Решение заключается в реализации LocaleChangeInterceptor, Весной этого класса preHandle является:

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException {
    String newLocale = request.getParameter(this.paramName);
    if (newLocale != null && this.checkHttpMethod(request.getMethod())) {
        LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request);
        if (localeResolver == null) {
            throw new IllegalStateException("No LocaleResolver found: not in a DispatcherServlet request?");
        }

        localeResolver.setLocale(request, response, StringUtils.parseLocaleString(newLocale));
    }

    return true;
}

Мой метод preHandle:

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException {
    if (this.checkHttpMethod(request.getMethod())) {
        LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request);
        if (localeResolver == null) {
            throw new IllegalStateException("No LocaleResolver found: not in a DispatcherServlet request?");
        }

        localeResolver.setLocale(request, response, I18nUtil.getLocaleByUrl(request.getServletPath()));
    }

    return true;
}

Просто внедрите I18nUtil.getLocaleByUrl(request.getServletPath()). Большое спасибо! @M. Deinum

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...