programing

컨트롤러 asp.net -core에서 최신 문화 가져오기

muds 2023. 10. 28. 08:18
반응형

컨트롤러 asp.net -core에서 최신 문화 가져오기

내 보기에 맞게 문화를 설정하고 컨트롤러에서 문화를 변경했는데 컨트롤러에서 현재 어떤 문화를 사용하고 있는지 알 수 없는 것 같습니다. 다음과 같은 것을 찾고 있습니다.

public class HomeController : Controller {
  public async Task<IActionResult> Index()
  {
      // Something like the next line
      var requestCulture = GetRequestedCulture()
      return View();
  }
}

정답은 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();
}

조니 에이스의 대답은 통합니다.현재 문화를 쉽게 얻을 수 있는 방법을 원한다면 .net에서 항상 수행됩니다.

CultureInfo uiCultureInfo = Thread.CurrentThread.CurrentUICulture;
CultureInfo cultureInfo = Thread.CurrentThread.CurrentCulture;

IRquestCultureFeature를 사용하려면(JohnnyAces 답변 참조) Startup.cs 에서 구성해야 합니다.마이크로소프트는 여기 https://github.com/aspnet/Entropy/blob/2fcbabef58c2c21845848c35e9d5e5f89b19adc5/samples/Localization.StarterWeb/Startup.cs 에 샘플을 제공했습니다.

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");
        }

이 코드는 aspcore 컨트롤러에서 현재 문화를 가져오는 데 사용됩니다.

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

전세계적인 부동산이 있습니다.CultureInfo.CurrentCulture에서System.Globalization현재 스레드에 대한 문화를 가져오는 네임스페이스입니다.이것은 지금까지 존재해 왔습니다.NET Framework 4.0과 의 현재 버전까지.NET Core 3.1.

언급URL : https://stackoverflow.com/questions/41289737/get-the-current-culture-in-a-controller-asp-net-core

반응형