Saj*_*ran 12 c# localization azure asp.net-core-2.0
我试图从浏览器中获取默认语言,并使用以下代码来获取它:
var languages = HttpContext.Request.UserLanguages;
Run Code Online (Sandbox Code Playgroud)
由于.NET Core 2不支持上述内容,因此我测试了:
var requestContext = Request.HttpContext.Features.Get<IRequestCultureFeature>();
Run Code Online (Sandbox Code Playgroud)
但是,它返回null.获得语言的正确方法或替代方法是什么?
IRequestCultureFeature
提供第一种匹配的语言,您的应用程序支持该语言。在Startup类的Configure()中定义的受支持语言的声明(请参阅示例)。如果您仍然需要所有string[]
与旧Request.UserLanguages
属性一样简单的接受语言,请使用HeaderDictionaryTypeExtensions.GetTypedHeaders()
在Microsoft.AspNetCore.Http
命名空间中定义的扩展名:
// 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<string>();
Run Code Online (Sandbox Code Playgroud)
该数组languages
根据优先级参数包含可接受的语言列表q
。具有最高优先级的语言是第一位的。要获取默认语言,请使用数组的第一个元素languages
。
作为扩展方法:
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<string>();
}
}
Run Code Online (Sandbox Code Playgroud)
您需要添加本地化中间件才能获得该IRequestCultureFeature
功能:
public void Configure(IApplicationBuilder app)
{
//...
//Add this:
app.UseRequestLocalization();
//...
}
Run Code Online (Sandbox Code Playgroud)
现在在您的控制器中,您可以请求如下功能:
var requestCulture = Request.HttpContext.Features.Get<IRequestCultureFeature>();
Run Code Online (Sandbox Code Playgroud)
您可以从请求标头获取浏览器语言
在你的控制器上写下:
//For example --> browserLang = 'en-US'
var browserLang= Request.Headers["Accept-Language"].ToString().Split(";").FirstOrDefault()?.Split(",").FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4603 次 |
最近记录: |