ASP.NET Core Request Localization Options

后端 未结 4 1319
失恋的感觉
失恋的感觉 2021-02-05 08:17

Here is my custom request culture provider which returns \"en\" as a default culture if no culture specified in url (for example http://sypalo.com/ru or http://sypalo.com/en). M

相关标签:
4条回答
  • 2021-02-05 08:45

    as an additional option, Here is a full solution: Handle culture in route (URL) via RequestCultureProviders

    as an option as well, here is a simplified code for CustomRequestCultureProvider:

    options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(context =>
    {
        var lang = context.Request.GetTypedHeaders().AcceptLanguage.FirstOrDefault()?.Value.Value ?? Constants.Languages.EN_US;
    
        return Task.FromResult(new ProviderCultureResult(lang, lang));
    
    }));
    
    0 讨论(0)
  • 2021-02-05 08:54

    You can get Accept-Language header from the current Request and set default language. Your code should be something like this:

    services.Configure<RequestLocalizationOptions>(options =>
    {
        //...
    
        options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(context =>
        {                    
           //...
           var userLangs = context.Request.Headers["Accept-Language"].ToString();
           var firstLang = userLangs.Split(',').FirstOrDefault();
           var defaultLang = string.IsNullOrEmpty(firstLang) ? "en" : firstLang;
           return Task.FromResult(new ProviderCultureResult(defaultLang, defaultLang));
       }));
    });
    
    0 讨论(0)
  • 2021-02-05 08:58

    Inside your public class Startup:

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        //...
    
        app.Use((context, next) =>
        {
            //get client prefered language
            var userLangs = context.Request.Headers["Accept-Language"].ToString();
            var firstLang = userLangs.Split(',').FirstOrDefault();
    
            //set allowed alanguage
            var lang = "en"; //default
            switch (firstLang)
            {
                case "hy": //allowed
                case "ru": //allowed
                    lang = firstLang; 
                    break;
                default:
                    //client language not supported
                    lang = "en"; //use our default
                    break;
            }
    
            //switch culture
            Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(lang);
            Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
    
            //save for later use
            context.Items["ClientLang"] = lang;
            context.Items["ClientCulture"] = Thread.CurrentThread.CurrentUICulture.Name;
            
            // Call the next delegate/middleware in the pipeline
            return next();
        });
    
        //... then goes app.UseMvc etc..
    
    }
    
    0 讨论(0)
  • 2021-02-05 09:03

    Another way to get the Accept-Language header with a framework call (ASP.NET Core):

    HttpContext.Request.GetTypedHeaders().AcceptLanguage

    0 讨论(0)
提交回复
热议问题