Get browser language in .AspNetCore2.0?

后端 未结 4 1172
渐次进展
渐次进展 2021-02-19 08:16

I am trying to get the default language from the browser and I use the following code to get it:

var languages = HttpContext.Request.UserLanguages;
4条回答
  •  傲寒
    傲寒 (楼主)
    2021-02-19 09:13

    IRequestCultureFeature provides the first matched language, which is supported by your application. Declaration of supported languages is defined in Configure() of your Startup class (see example). If you still need all accepted languages as a simple string[] like the older Request.UserLanguages property, then use the HeaderDictionaryTypeExtensions.GetTypedHeaders() extension defined in the Microsoft.AspNetCore.Http namespace:

    // In your action method.
    var languages = Request.GetTypedHeaders()
                           .AcceptLanguage
                           ?.OrderByDescending(x => x.Quality ?? 1) // Quality defines priority from 0 to 1, where 1 is the highest.
                           .Select(x => x.Value.ToString())
                           .ToArray() ?? Array.Empty();
    

    The array languages contains the list of accepted languages according to the priority parameter q. The language with the highest priority comes first. To get the default language take the first element of the array languages.

    As an extension method:

    using System.Collections.Generic;
    using System.Linq;
    
    using Microsoft.AspNetCore.Http;
    
    public static class HttpRequestExtensions
    {
        public static string[] GetUserLanguages(this HttpRequest request)
        {
            return request.GetTypedHeaders()
                .AcceptLanguage
                ?.OrderByDescending(x => x.Quality ?? 1)
                .Select(x => x.Value.ToString())
                .ToArray() ?? Array.Empty();
        }
    }
    

提交回复
热议问题