web-dev-qa-db-fra.com

Obtenir la culture actuelle dans un contrôleur asp.net-core

J'ai configuré les cultures en fonction de mes points de vue et du changement de culture dans un contrôleur, mais je n'arrive pas à trouver comment savoir quelle culture je suis en train d'utiliser dans un contrôleur. Je recherche par exemple:

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

Merci pour votre aide

14
JohnnyAce

La réponse était sur l'objet Request, voici le code:

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();
}
25
JohnnyAce

JohnnysAce répond fonctionne. Si vous voulez juste un moyen facile d’obtenir la culture actuelle, cela se fait comme toujours en .net:

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

Si vous souhaitez utiliser IRequestCultureFeature (voir la réponse de JohnnyAces; en raison de l'injection de dépendance et d'une meilleure testabilité), vous devez configurer les éléments dans Startup.cs. Microsoft a fourni un exemple ici https://github.com/aspnet/Entropy/blob/2fcbabef58c2c21845848c35e9d5e5f89b19adc5/samples/Localization.StarterWeb/Startup.cs

1
yonexbat

Ce code fonctionne pour obtenir la culture actuelle dans le contrôleur principal asp:

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