如何在 ASP.net 核心3.1中改变当前文化



多语言应用调用我的API,我想返回消息,基于应用语言而不是基于应用文化。所以我决定使用本地化,但当前文化不会随着这段代码而改变。 像这样:

[HttpPost("[action]/{languageid}")]
public async Task<IActionResult> login([FromBody] AccountViewModel model, [FromRoute] int languageid)
{
var result = await signInManager.CheckPasswordSignInAsync(model.UserName, model.Password, true);
CultureInfo cultureInfo;
if(languageid == 1)
{
cultureInfo = new CultureInfo("fa-IR");
}
else
{
cultureInfo = new CultureInfo("en-US");
}
Thread.CurrentThread.CurrentCulture = cultureInfo;
if (result)
return Ok(new {Result = true , Message = _localize["Login-Success"] });
return Ok(new { Result = false, Message = _localize["Login-failed"] });
}

是否有更好的解决方案来返回基于应用程序语言的多语言消息? 我不想将此消息保存在我的数据库中。

必须为每个请求设置区域性。您的登录代码不会将设置保存在任何位置,因此下一个网页请求的设置将丢失。

ASP.NET Core 有一个本地化框架,其中包括用于更改请求文化的中间件。

请参阅有关更改请求区域性的文档

在您的情况下,您可以使用CookieRequestCultureProvider在用户登录时设置具有其首选区域性和 UI 区域性的 cookie。

例如

这。Response.Cookies.Append(  CookieRequestCultureProvider.DefaultCookieName,  "c=fa-IR|uic=fa-IR"(;

确保使用CookieRequestCultureProvider.DefaultCookieName作为 cookie 名称,因为这是中间件将查找的名称。

如果需要,还有其他方法可以设置请求区域性,例如QueryStringRequestCultureProviderCustomProvider

最新更新