0

Получение текущей культуры в контроллере ASP.NET Core

11

У меня настроены культуры для моих представлений, и я меняю культуру в контроллере, но я не могу найти способ узнать, какую культуру я в данный момент использую в контроллере. Я ищу что-то похожее на следующий код:

public class HomeController : Controller {
    public async Task<IActionResult> Index()
    {
        // Что-то вроде следующей строки
        var requestCulture = GetRequestedCulture();
        return View();
    }
}

Как узнать текущую культуру в контроллере?

5 ответ(ов)

0

Ответ был в объекте Request, вот код:

public async Task<IActionResult> Index() {
    // Получаем запрашиваемую культуру
    var rqf = Request.HttpContext.Features.Get<IRequestCultureFeature>();
    // Culture содержит информацию о запрашиваемой культуре
    var culture = rqf.RequestCulture.Culture;
    return View();
}
0

Ответ Джонниса работает. Если вам просто нужно узнать текущую культуру, это делается, как всегда, в .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

0

Вы можете подтвердить, что это работает, если настроить правильно (см. второй блок кода).

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.

0

Да, этот код правильно получает текущую культуру в контроллере ASP.NET Core. Вот его пример:

public string GetCulture() => $"CurrentCulture:{CultureInfo.CurrentCulture.Name}, CurrentUICulture:{CultureInfo.CurrentUICulture.Name}";

Этот метод возвращает строку, содержащую имя текущей культуры (CurrentCulture) и текущей пользовательской интерфейсной культуры (CurrentUICulture). Вы можете использовать CultureInfo.CurrentCulture и CultureInfo.CurrentUICulture для получения информации о культуре, установленной в приложении. Это может быть полезно для отображения информации на разных языках или для форматирования данных в зависимости от культурных настроек.

0

Вы можете легко получить текущую культуру с помощью следующего кода:

var culture = CultureInfo.CurrentCulture.Name;

Этот код также можно использовать в program.cs.

Надеюсь, это будет полезно!

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь