Joh*_*Ace 22 asp.net asp.net-mvc visual-studio-code
我已经为我的观点设置了文化并在控制器中改变了文化,但我似乎无法找到如何知道我目前在控制器中使用的文化,我正在寻找类似的东西:
public class HomeController : Controller {
public async Task<IActionResult> Index()
{
// Something like the next line
var requestCulture = GetRequestedCulture()
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
感谢你的帮助
Joh*_*Ace 36
答案是在Request Object上,这是代码:
public async Task<IActionResult> Index() {
// Retrieves the requested culture
var rqf = Request.HttpContext.Features.Get<IRequestCultureFeature>();
// Culture contains the information of the requested culture
var culture = rqf.RequestCulture.Culture;
return View();
}
Run Code Online (Sandbox Code Playgroud)
HMZ*_*HMZ 13
ASP.Net 核心 3.1:
如果配置正确,我可以确认这是有效的(请参阅第二个代码块)
CultureInfo cultureInfo = Thread.CurrentThread.CurrentCulture;
Run Code Online (Sandbox Code Playgroud)
在您的启动类中,将此添加到Configure方法中:
IList<CultureInfo> supportedCultures = new List<CultureInfo>
{
new CultureInfo("en-US"), //English US
new CultureInfo("ar-SY"), //Arabic SY
};
var localizationOptions = new RequestLocalizationOptions
{
DefaultRequestCulture = new RequestCulture("en-US"), //English US will be the default culture (for new visitors)
SupportedCultures = supportedCultures,
SupportedUICultures = supportedCultures
};
app.UseRequestLocalization(localizationOptions);
Run Code Online (Sandbox Code Playgroud)
然后用户可以通过调用这个动作来改变文化:
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult SetCulture(string culture, string returnUrl)
{
HttpContext.Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)),
new CookieOptions { Path = Url.Content("~/") });
if (!string.IsNullOrEmpty(returnUrl) && Url.IsLocalUrl(returnUrl))
{
return LocalRedirect(returnUrl);
}
return RedirectToAction("Index", "Home");
}
Run Code Online (Sandbox Code Playgroud)
JohnnysAce答案有效。如果您只是想以一种简单的方式来获取当前的文化,那么它通常会在.net中完成:
CultureInfo uiCultureInfo = Thread.CurrentThread.CurrentUICulture;
CultureInfo cultureInfo = Thread.CurrentThread.CurrentCulture;
Run Code Online (Sandbox Code Playgroud)
如果要使用IRequestCultureFeature(请参阅JohnnyAces答案;由于依赖项注入和更好的可测试性),则必须在Startup.cs中进行配置。微软在这里提供了一个示例https://github.com/aspnet/Entropy/blob/2fcbabef58c2c21845848c35e9d5e5f89b19adc5/samples/Localization.StarterWeb/Startup.cs
此代码用于获取 ASP 核心控制器中的当前文化:
public string GetCulture() => $"CurrentCulture:{CultureInfo.CurrentCulture.Name}, CurrentUICulture:{CultureInfo.CurrentUICulture.Name}";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15294 次 |
| 最近记录: |