@@ -97,37 +97,35 @@ public Locale resolveLocale(HttpServletRequest request) {
9797 return defaultLocale ;
9898 }
9999 Locale requestLocale = request .getLocale ();
100- if (isSupportedLocale (requestLocale )) {
100+ List <Locale > supportedLocales = getSupportedLocales ();
101+ if (supportedLocales .isEmpty () || supportedLocales .contains (requestLocale )) {
101102 return requestLocale ;
102103 }
103- Locale supportedLocale = findSupportedLocale (request );
104+ Locale supportedLocale = findSupportedLocale (request , supportedLocales );
104105 if (supportedLocale != null ) {
105106 return supportedLocale ;
106107 }
107108 return (defaultLocale != null ? defaultLocale : requestLocale );
108109 }
109110
110- private boolean isSupportedLocale (Locale locale ) {
111- List <Locale > supportedLocales = getSupportedLocales ();
112- return (supportedLocales .isEmpty () || supportedLocales .contains (locale ));
113- }
114-
115- private Locale findSupportedLocale (HttpServletRequest request ) {
111+ private Locale findSupportedLocale (HttpServletRequest request , List <Locale > supportedLocales ) {
116112 Enumeration <Locale > requestLocales = request .getLocales ();
117- List <Locale > supported = getSupportedLocales ();
118113 Locale languageMatch = null ;
119114 while (requestLocales .hasMoreElements ()) {
120115 Locale locale = requestLocales .nextElement ();
121- if (supported .contains (locale )) {
122- // Full match: typically language + country
123- return locale ;
116+ if (supportedLocales .contains (locale )) {
117+ if (languageMatch == null || languageMatch .getLanguage ().equals (locale .getLanguage ())) {
118+ // Full match: language + country, possibly narrowed from earlier language-only match
119+ return locale ;
120+ }
124121 }
125122 else if (languageMatch == null ) {
126123 // Let's try to find a language-only match as a fallback
127- for (Locale candidate : supported ) {
124+ for (Locale candidate : supportedLocales ) {
128125 if (!StringUtils .hasLength (candidate .getCountry ()) &&
129126 candidate .getLanguage ().equals (locale .getLanguage ())) {
130127 languageMatch = candidate ;
128+ break ;
131129 }
132130 }
133131 }
0 commit comments