Получение текущей культуры в контроллере ASP.NET Core
У меня настроены культуры для моих представлений, и я меняю культуру в контроллере, но я не могу найти способ узнать, какую культуру я в данный момент использую в контроллере. Я ищу что-то похожее на следующий код:
public class HomeController : Controller {
public async Task<IActionResult> Index()
{
// Что-то вроде следующей строки
var requestCulture = GetRequestedCulture();
return View();
}
}
Как узнать текущую культуру в контроллере?
5 ответ(ов)
Ответ был в объекте Request, вот код:
public async Task<IActionResult> Index() {
// Получаем запрашиваемую культуру
var rqf = Request.HttpContext.Features.Get<IRequestCultureFeature>();
// Culture содержит информацию о запрашиваемой культуре
var culture = rqf.RequestCulture.Culture;
return View();
}
Ответ Джонниса работает. Если вам просто нужно узнать текущую культуру, это делается, как всегда, в .NET:
CultureInfo uiCultureInfo = Thread.CurrentThread.CurrentUICulture;
CultureInfo cultureInfo = Thread.CurrentThread.CurrentCulture;
Если вы хотите использовать IRequestCultureFeature (смотрите ответ Джонниса; это полезно для внедрения зависимостей и улучшения тестируемости), вам нужно будет настроить это в файле Startup.cs. Microsoft предоставила пример здесь: https://github.com/aspnet/Entropy/blob/2fcbabef58c2c21845848c35e9d5e5f89b19adc5/samples/Localization.StarterWeb/Startup.cs
Вы можете подтвердить, что это работает, если настроить правильно (см. второй блок кода).
CultureInfo cultureInfo = Thread.CurrentThread.CurrentCulture;
В вашем классе Startup
добавьте следующий код в метод Configure
:
IList<CultureInfo> supportedCultures = new List<CultureInfo>
{
new CultureInfo("en-US"), // Английский (США)
new CultureInfo("ar-SY"), // Арабский (Сирия)
};
var localizationOptions = new RequestLocalizationOptions
{
DefaultRequestCulture = new RequestCulture("en-US"), // Английский (США) будет культурой по умолчанию (для новых посетителей)
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");
}
Таким образом, эти настройки позволят вам управлять локализацией в вашем приложении ASP.Net Core 3.1.
Да, этот код правильно получает текущую культуру в контроллере ASP.NET Core. Вот его пример:
public string GetCulture() => $"CurrentCulture:{CultureInfo.CurrentCulture.Name}, CurrentUICulture:{CultureInfo.CurrentUICulture.Name}";
Этот метод возвращает строку, содержащую имя текущей культуры (CurrentCulture
) и текущей пользовательской интерфейсной культуры (CurrentUICulture
). Вы можете использовать CultureInfo.CurrentCulture
и CultureInfo.CurrentUICulture
для получения информации о культуре, установленной в приложении. Это может быть полезно для отображения информации на разных языках или для форматирования данных в зависимости от культурных настроек.
Вы можете легко получить текущую культуру с помощью следующего кода:
var culture = CultureInfo.CurrentCulture.Name;
Этот код также можно использовать в program.cs
.
Надеюсь, это будет полезно!
Обнаружено потенциально опасное значение Request.Form, полученное от клиента
ASP.NET MVC - Установка пользовательского IIdentity или IPrincipal
Экранирование символа @ в Razor View Engine
Компиляция представлений в ASP.NET MVC
Добавление подпапки в папку "View/Shared" в ASP.Net MVC и вызов представления