Parse Accept-Language header in Java

后端 未结 7 810
孤城傲影
孤城傲影 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:30

    ServletRequest.getLocale() is certainly the best option if it is available and not overwritten as some frameworks do.

    For all other cases Java 8 offers Locale.LanguageRange.parse() as previously mentioned by Quiang Li. This however only gives back a Language String, not a Locale. To parse the language strings you can use Locale.forLanguageTag() (available since Java 7):

        final List acceptedLocales = new ArrayList<>();
        final String userLocale = request.getHeader("Accept-Language");
        if (userLocale != null) {
            final List ranges = Locale.LanguageRange.parse(userLocale);
    
            if (ranges != null) {
                ranges.forEach(languageRange -> {
                    final String localeString = languageRange.getRange();
                    final Locale locale = Locale.forLanguageTag(localeString);
                    acceptedLocales.add(locale);
                });
            }
        }
        return acceptedLocales;
    

提交回复
热议问题