@Override protected Locale onDetermineLocale() { Locale locale = null; Locale validUnsupportedLocale = null; final String i18nURI = MgnlContext.getAggregationState().getCurrentURI(); log.debug("URI to check for locales is {}", i18nURI); final String[] splitURI = i18nURI.split("/"); final int lastTokenIdx = splitURI.length - 1; for (int i = 0; i < splitURI.length; i++) { String uriToken = splitURI[i]; if (i == lastTokenIdx) { uriToken = StringUtils.substringBefore(uriToken, "."); } locale = determineLocalFromString(uriToken); if (LocaleUtils.isAvailableLocale(locale)) { log.debug("found a valid Locale code {}", uriToken); if (isLocaleSupported(locale)) { break; } // the URI contains a valid Locale code but it is not // supported by the current I18n configuration. // We store it anyway and eventually return it if no exact // match will be found at the end of this loop. validUnsupportedLocale = locale; } locale = null; } return locale != null ? locale : validUnsupportedLocale; }
@Override @Test public void testGetNodeDataEndlessLoop() throws Exception { HierarchyBasedI18nContentSupport defSupport = new HierarchyBasedI18nContentSupport(); defSupport.setEnabled(true); defSupport.setFallbackLocale(DEFAULT_LOCALE); defSupport.addLocale(new LocaleDefinition("de", "CH", true)); defSupport.addLocale(new LocaleDefinition("it", null, false)); Property localized = defSupport.getProperty(content.getJCRNode(), "blah"); assertEquals(defaultblah.getValue(), localized.getValue()); defSupport.setLocale(new Locale("de")); localized = defSupport.getProperty(content.getJCRNode(), "foo"); assertEquals(defaultFoo.getValue(), localized.getValue()); defSupport.setLocale(new Locale("de", "CH")); localized = defSupport.getProperty(content.getJCRNode(), "blah"); assertEquals(swissBlah.getValue(), localized.getValue()); defSupport.setLocale(new Locale("de", "AT")); localized = defSupport.getProperty(content.getJCRNode(), "blah"); assertEquals(swissBlah.getValue(), localized.getValue()); defSupport.setLocale(new Locale("de")); localized = defSupport.getProperty(content.getJCRNode(), "blah"); assertEquals(swissBlah.getValue(), localized.getValue());
@Override @Test public void testDetermineLocaleEndlessLoop() { HierarchyBasedI18nContentSupport defSupport = new HierarchyBasedI18nContentSupport(); defSupport.setFallbackLocale(DEFAULT_LOCALE); defSupport.addLocale(new LocaleDefinition("de", "CH", true)); defSupport.addLocale(new LocaleDefinition("it", null, true)); Locale locale = defSupport.determineLocale(); assertEquals(DEFAULT_LOCALE, locale); locale = defSupport.determineLocale(); assertEquals(new Locale("de", "ch"), locale); locale = defSupport.determineLocale(); assertEquals(new Locale("de", "ch"), locale); locale = defSupport.determineLocale(); assertEquals(new Locale("de", "ch"), locale); locale = defSupport.determineLocale(); assertEquals(DEFAULT_LOCALE, locale); locale = defSupport.determineLocale(); assertEquals(new Locale("it"), locale);
@Override @Test public void testDetermineLocale() { HierarchyBasedI18nContentSupport defSupport = new HierarchyBasedI18nContentSupport(); defSupport.setFallbackLocale(DEFAULT_LOCALE); defSupport.addLocale(new LocaleDefinition("de", null, true)); defSupport.addLocale(new LocaleDefinition("de", "CH", true)); defSupport.addLocale(new LocaleDefinition("it", null, false)); Locale locale = defSupport.determineLocale(); assertEquals(DEFAULT_LOCALE, locale); locale = defSupport.determineLocale(); assertEquals(new Locale("de"), locale); locale = defSupport.determineLocale(); assertEquals(new Locale("de"), locale); locale = defSupport.determineLocale(); assertEquals(new Locale("de", "ch"), locale); locale = defSupport.determineLocale(); assertEquals(new Locale("de", "ch"), locale); locale = defSupport.determineLocale(); assertEquals(new Locale("de"), locale); locale = defSupport.determineLocale(); assertEquals(new Locale("de"), locale);