Parse Accept-Language header in Java

后端 未结 7 814
孤城傲影
孤城傲影 2020-12-15 02:54

The accept-language header in request is usually a long complex string -

Eg.

Accept-Language : en-ca,en;q=0.8,en-us;q=0.6,de-de;q=0.4,de;q=0.2
         


        
7条回答
  •  南笙
    南笙 (楼主)
    2020-12-15 03:19

    We are using Spring boot and Java 8. This works

    In ApplicationConfig.java write this

    @Bean
    
    public LocaleResolver localeResolver() {
        return new SmartLocaleResolver();
    }
    

    and I have this list in my constants class that has languages that we support

    List locales = Arrays.asList(new Locale("en"),
                                             new Locale("es"),
                                             new Locale("fr"),
                                             new Locale("es", "MX"),
                                             new Locale("zh"),
                                             new Locale("ja"));
    

    and write the logic in the below class.

    public class SmartLocaleResolver extends AcceptHeaderLocaleResolver {
              @Override
             public Locale resolveLocale(HttpServletRequest request) {
                if (StringUtils.isBlank(request.getHeader("Accept-Language"))) {
                return Locale.getDefault();
                }
                List ranges = Locale.LanguageRange.parse("da,es-MX;q=0.8");
                Locale locale = Locale.lookup(ranges, locales);
                return locale ;
            }
    }
    

提交回复
热议问题