2016-03-25 2 views
2

Ich habe i18n in meiner Spring MVC App (localeInterceptor etc) konfiguriert.Spring mvc Standardgebietsschema von Anfrage erhalten, wenn das Gebietsschema ungültig ist

Zwei Sprachen unterstützt (en & pl). PL ist standardmäßig eins. I18n funktioniert natürlich.

Mein Fall ist, das aktuelle Gebietsschema zu erhalten und es an das Modell zu übergeben. Das ist einfach, aber wenn ich ein ungültiges Gebietsschema-Argument übergebe (wie localhost: 8080 /? Language = asd) bekomme ich "asd" statt "pl", was standardmäßig ist.

Es ist erwähnenswert, dass ganze i18n perfekt funktioniert, ich meine, messages_pl.properties werden in diesem Fall verwendet. Ich habe versucht, folgende Methoden ohne Erfolg:

@RequestMapping(...) 
public String home(Locale locale,..) 

localeResolver.resolveLocale(request); 
RequestContextUtils.getLocale(request); 
LocaleContextHolder.getLocale(); 

davon jeder gibt mir ein „asd“ statt „pl“.

Atm ich ein bisschen chaotisch Abhilfe haben:

if (!supportedLocaleService.isLocaleSupported(locale)) {//myservice 
    locale = new Locale("pl"); 
} 

Antwort

1

könnte Sie überschreiben die LocaleChangeInterceptor

public class SupportedLocaleAwareLocaleChangeInterceptor extends LocaleChangeInterceptor { 

    private List<String>supportedLocales = Arrays.asList("pl",....); 

    @Override 
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) 
     throws ServletException { 

     String newLocale = request.getParameter(this.paramName); 
     //if (newLocale != null) { 
     if (newLocale != null && supportedLocales.contains(newLocale)) { 
      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)); 
     } 
     // Proceed in any case. 
     return true; 
    } 
} 
+0

ja, dass eine richtige Lösung zu sein scheint. Aber ich dachte, dass Frühling es für Standard tut, weil es passende Eigenschaftendatei wählt (Standard eine), wenn Gebietsschema ungültig ist. – Rotek