/** * Get a locale that best matches the current request or the default locale as specified * in <code>application.lang</code>. * * @return A matching locale. */ @Nonnull default Locale locale() { return locale((priorityList, locales) -> Optional.ofNullable(Locale.lookup(priorityList, locales)) .orElse(locales.get(0))); }
/** * Get a locale that best matches the current request or the default locale as specified * in <code>application.lang</code>. * * @return A matching locale. */ @Nonnull default Locale locale() { return locale((priorityList, locales) -> Optional.ofNullable(Locale.lookup(priorityList, locales)) .orElse(locales.get(0))); }
public class SmartLocaleResolver extends AcceptHeaderLocaleResolver { @Override public Locale resolveLocale(HttpServletRequest request) { if (StringUtils.isBlank(request.getHeader("Accept-Language"))) { return Locale.getDefault(); } List<Locale.LanguageRange> list = Locale.LanguageRange.parse(request.getHeader("Accept-Language")); Locale locale = Locale.lookup(list, ApplicationConstants.LOCALES); return locale ; } }
List<Locale> locales = Arrays.asList(new Locale("en"), new Locale("es"), new Locale("fr"), new Locale("es", "MX"), new Locale("zh"), new Locale("ja")); List<Locale.LanguageRange> ranges = Locale.LanguageRange.parse("da,es-MX;q=0.8"); Locale best = Locale.lookup(ranges, locales); System.out.println("best = " + best); // prints best = es_MX ranges = Locale.LanguageRange.parse("fr,es-MX;q=0.8"); best = Locale.lookup(ranges, locales); System.out.println("best = " + best); // prints best = fr
public class SmartLocaleResolver extends AcceptHeaderLocaleResolver { @Override public Locale resolveLocale(HttpServletRequest request) { if (StringUtils.isBlank(request.getHeader("Accept-Language"))) { return Locale.getDefault(); } List<Locale.LanguageRange> ranges = Locale.LanguageRange.parse("da,es-MX;q=0.8"); Locale locale = Locale.lookup(ranges, locales); return locale ; } }
/** * Returns the best matching locale chosen from the available locales for the given language ranges. * * @param languageRanges a list of comma-separated language ranges or a list of language ranges in the form of * the "Accept-Language" header defined in * <a href="https://tools.ietf.org/html/rfc2616#section-14.4">RFC 2616</a> * @return Locale the best matching locale, or {@code null} if nothing matches */ public Locale getLocale(String languageRanges) { if ((languageRanges == null) || languageRanges.isEmpty()) { return null; } try { return Locale.lookup(Locale.LanguageRange.parse(languageRanges), i18nResources.keySet()); } catch (IllegalArgumentException e) { // languageRanges is ill formed return null; } }
/** * Returns the best matching locale chosen from the available locales for the given language ranges. * * @param languageRanges a list of comma-separated language ranges or a list of language ranges in the form of the * "Accept-Language" header defined in * <a href="https://tools.ietf.org/html/rfc2616#section-14.4">RFC 2616</a> * @return Locale the best matching locale, or {@code null} if nothing matches */ public Locale getLocale(String languageRanges) { if ((languageRanges == null) || languageRanges.isEmpty()) { return null; } try { return Locale.lookup(Locale.LanguageRange.parse(languageRanges), i18nResources.keySet()); } catch (IllegalArgumentException e) { // languageRanges is ill formed return null; } }
private static IProperty chooseForLocale( final @NotNull List<Locale.LanguageRange> priorityList, final @NotNull List<IProperty> properties ) { if (properties.isEmpty()) { return null; } IProperty first = properties.get(0); if (properties.size() == 1) { return first; } final Map<Locale, IProperty> map = new HashMap<>(); final List<Locale> locales = new LinkedList<>(); for (IProperty nextProperty : properties) { Locale nextLocale = safeGetLocale(nextProperty); if (nextLocale != null) { map.put(nextLocale, nextProperty); locales.add(nextLocale); } } Locale best = Locale.lookup(priorityList, locales); //System.err.println("found locales: " + locales + ", best: " + best + ", result: " + map.get(best)); return Optional.ofNullable(best).map(map::get).orElse(first); }
@Override public Voice getPreferredVoice(Set<Voice> voices) { // Express preferences with a Language Priority List Locale locale = localeProvider.getLocale(); // Get collection of voice locales Collection<Locale> locales = new ArrayList<Locale>(); for (Voice currentVoice : voices) { locales.add(currentVoice.getLocale()); } // Determine preferred locale based on RFC 4647 String ranges = locale.toLanguageTag(); List<Locale.LanguageRange> languageRanges = Locale.LanguageRange.parse(ranges + "-*"); Locale preferredLocale = Locale.lookup(languageRanges, locales); // As a last resort choose some Locale if (preferredLocale == null) { preferredLocale = locales.iterator().next(); } // Determine preferred voice Voice preferredVoice = null; for (Voice currentVoice : voices) { if (preferredLocale.equals(currentVoice.getLocale())) { preferredVoice = currentVoice; } } assert (preferredVoice != null); // Return preferred voice return preferredVoice; }