Alexander Wels has uploaded a new change for review. Change subject: userportal,webadmin: Fix behavior unsupported locale ......................................................................
userportal,webadmin: Fix behavior unsupported locale - Changed behavior to select en_US locale if the browser returns an unsupported locale. - Changed behavior to select close enough locale if the browser returns a close but unsupported locale for instance if the browser return es, then it will be transformed into es_ES as that is 'close' Change-Id: Ic5beceaf7f4ce2333e83cd72c3fa8721103cf805 Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=838456 Signed-off-by: Alexander Wels <[email protected]> --- M backend/manager/modules/root/src/main/java/org/ovirt/engine/core/LocaleFilter.java M backend/manager/modules/root/src/main/java/org/ovirt/engine/core/SplashServlet.java M backend/manager/modules/root/src/test/java/org/ovirt/engine/core/LocaleFilterTest.java 3 files changed, 51 insertions(+), 28 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/20/15520/1 diff --git a/backend/manager/modules/root/src/main/java/org/ovirt/engine/core/LocaleFilter.java b/backend/manager/modules/root/src/main/java/org/ovirt/engine/core/LocaleFilter.java index 8f62ba4..f2b70d6 100644 --- a/backend/manager/modules/root/src/main/java/org/ovirt/engine/core/LocaleFilter.java +++ b/backend/manager/modules/root/src/main/java/org/ovirt/engine/core/LocaleFilter.java @@ -1,7 +1,10 @@ package org.ovirt.engine.core; import java.io.IOException; +import java.util.Collections; +import java.util.List; import java.util.Locale; +import java.util.ResourceBundle; import javax.servlet.Filter; import javax.servlet.FilterChain; @@ -37,6 +40,11 @@ */ public static final String LOCALE = "locale"; + /** + * The extension of the properties file containing the available languages. + */ + private static final String LANGUAGES = ".languages"; //the resource bundle name + @Override public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException { @@ -71,7 +79,7 @@ locale = Locale.US; } log.debug("Filter determined locale to be: " + locale.toLanguageTag()); - return locale; + return lookupSupportedLocale(locale, getLocaleKeys()); } /** @@ -92,6 +100,43 @@ return locale; } + /** + * Get a list of available locales. + * @return A {@code List} of Locale strings. + */ + public static List<String> getLocaleKeys() { + ResourceBundle bundle = ResourceBundle.getBundle(LocaleFilter.class.getPackage().getName() + LANGUAGES, + Locale.US); + List<String> keys = Collections.list(bundle.getKeys()); + //Can't just return the unsorted list, it won't match the GWT output. + //Apparently GWT does a sort before showing the list as well, which + //works out nicely for me. + Collections.sort(keys); + return keys; + } + + /** + * + * @param filteredLocale The locale the filter determined. + * @param supportedLocales The list of supported locale strings. + * @return The supported locale based on the passed in filteredLocale and list of supported locales. + */ + private Locale lookupSupportedLocale(final Locale filteredLocale, final List<String> supportedLocales) { + for (String localeString: supportedLocales) { + Locale locale = LocaleUtils.getLocaleFromString(localeString); + @SuppressWarnings("unchecked") + List<Locale> localeLookupList = org.apache.commons.lang.LocaleUtils.localeLookupList(locale); + for (Locale lookupLocale: localeLookupList) { + if (lookupLocale.equals(filteredLocale)) { + // Matched on one of the locales. Find the supported one in the list. + return locale; + } + } + } + // When branding patch is merged update me to say LocaleFilter.defaultLocale + return Locale.US; + } + @Override public void init(final FilterConfig filterConfig) throws ServletException { //Do nothing diff --git a/backend/manager/modules/root/src/main/java/org/ovirt/engine/core/SplashServlet.java b/backend/manager/modules/root/src/main/java/org/ovirt/engine/core/SplashServlet.java index ce72ad6..888539d 100644 --- a/backend/manager/modules/root/src/main/java/org/ovirt/engine/core/SplashServlet.java +++ b/backend/manager/modules/root/src/main/java/org/ovirt/engine/core/SplashServlet.java @@ -1,10 +1,7 @@ package org.ovirt.engine.core; import java.io.IOException; -import java.util.Collections; -import java.util.List; import java.util.Locale; -import java.util.ResourceBundle; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; @@ -36,17 +33,12 @@ */ private static final String LOCALE_KEYS = "localeKeys"; - /** - * The extension of the properties file containing the available languages. - */ - private static final String LANGUAGES = ".languages"; //the resource bundle name - @Override protected void doGet(final HttpServletRequest request, final HttpServletResponse response) throws IOException, ServletException { Locale userLocale = (Locale) request.getAttribute(LocaleFilter.LOCALE); log.info("Detected Locale: " + userLocale.toLanguageTag()); - request.setAttribute(LOCALE_KEYS, getLocaleKeys()); + request.setAttribute(LOCALE_KEYS, LocaleFilter.getLocaleKeys()); setCookie(response, userLocale); RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/ovirt-engine.jsp"); response.setContentType("text/html;charset=UTF-8"); @@ -68,19 +60,5 @@ // This cookie never expires cookie.setMaxAge(Integer.MAX_VALUE); response.addCookie(cookie); - } - - /** - * Get a list of available locales. - * @return A {@code List} of Locale strings. - */ - private List<String> getLocaleKeys() { - ResourceBundle bundle = ResourceBundle.getBundle(this.getClass().getPackage().getName() + LANGUAGES, Locale.US); - List<String> keys = Collections.list(bundle.getKeys()); - //Can't just return the unsorted list, it won't match the GWT output. - //Apparently GWT does a sort before showing the list as well, which - //works out nicely for me. - Collections.sort(keys); - return keys; } } diff --git a/backend/manager/modules/root/src/test/java/org/ovirt/engine/core/LocaleFilterTest.java b/backend/manager/modules/root/src/test/java/org/ovirt/engine/core/LocaleFilterTest.java index 0345426..31451db 100644 --- a/backend/manager/modules/root/src/test/java/org/ovirt/engine/core/LocaleFilterTest.java +++ b/backend/manager/modules/root/src/test/java/org/ovirt/engine/core/LocaleFilterTest.java @@ -38,7 +38,7 @@ @Test public void testDoFilterFromParameter() throws IOException, ServletException { - Locale testLocale = Locale.ITALIAN; + Locale testLocale = Locale.GERMANY; when(mockRequest.getParameter(LocaleFilter.LOCALE)).thenReturn(testLocale.toString()); testFilter.doFilter(mockRequest, mockResponse, mockChain); verify(mockChain).doFilter(mockRequest, mockResponse); @@ -47,7 +47,7 @@ @Test public void testDoFilterFromParameterWithCookie() throws IOException, ServletException { - Locale testLocale = Locale.ITALIAN; + Locale testLocale = Locale.JAPAN; Cookie[] cookies = createCookies(Locale.GERMAN); when(mockRequest.getParameter(LocaleFilter.LOCALE)).thenReturn(testLocale.toString()); when(mockRequest.getCookies()).thenReturn(cookies); @@ -58,7 +58,7 @@ @Test public void testDoFilterFromCookie() throws IOException, ServletException { - Locale testLocale = Locale.ITALIAN; + Locale testLocale = Locale.GERMANY; Cookie[] cookies = createCookies(testLocale); when(mockRequest.getCookies()).thenReturn(cookies); testFilter.doFilter(mockRequest, mockResponse, mockChain); @@ -92,7 +92,7 @@ when(mockRequest.getLocale()).thenReturn(Locale.JAPANESE); testFilter.doFilter(mockRequest, mockResponse, mockChain); verify(mockChain).doFilter(mockRequest, mockResponse); - verify(mockRequest).setAttribute(LocaleFilter.LOCALE, Locale.JAPANESE); + verify(mockRequest).setAttribute(LocaleFilter.LOCALE, Locale.JAPAN); } @Test -- To view, visit http://gerrit.ovirt.org/15520 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ic5beceaf7f4ce2333e83cd72c3fa8721103cf805 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Alexander Wels <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
