我为我的观点设置了文化,并在控制器中改变了文化,但我似乎无法找到如何知道我目前在控制器中使用的文化,我正在寻找类似的东西:
public class HomeController : Controller {
public async Task<IActionResult> Index()
{
// Something like the next line
var requestCulture = GetRequestedCulture()
return View();
}
}
感谢您的帮助
答案 0 :(得分:31)
答案在于请求对象,这里是代码:
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();
}
答案 1 :(得分:5)
ASP.Net Core 3.1:
如果配置正确,我可以确认它是否有效(请参见第二个代码块)
CultureInfo cultureInfo = Thread.CurrentThread.CurrentCulture;
在您的启动类中,将其添加到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);
然后,用户可以通过调用以下操作来更改区域性:
[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");
}
答案 2 :(得分:3)
JohnnysAce回答有效。如果您只是想要一种简单的方法来获得当前的文化,那么它将在.net:
中一如既往地完成CultureInfo uiCultureInfo = Thread.CurrentThread.CurrentUICulture;
CultureInfo cultureInfo = Thread.CurrentThread.CurrentCulture;
如果要使用 IRequestCultureFeature (请参阅JohnnyAces答案;由于依赖注入和更好的可测试性),您必须在Startup.cs中配置内容。 Microsoft在此提供了一个示例https://github.com/aspnet/Entropy/blob/2fcbabef58c2c21845848c35e9d5e5f89b19adc5/samples/Localization.StarterWeb/Startup.cs
答案 3 :(得分:0)
此代码可用于获取ASP核心控制器中的当前区域性:
{{1}}
答案 4 :(得分:0)
CultureInfo.CurrentCulture
命名空间中有一个全局属性System.Globalization
,用于获取当前线程的区域性。这个问题可以追溯到.NET Framework 4.0,一直到.NET Core 3.1的当前版本。