He configuración de las culturas de mis puntos de vista y cambiar la cultura de un controlador, pero me parece que no puede encontrar la manera de saber qué es la cultura actualmente estoy usando en un controlador, estoy buscando algo como:

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

Gracias por toda su ayuda

  • ¿Cómo fijar (guardar) el seleccionado de la cultura? En la cookie o que están cambiando el UICulture para el dominio de la aplicación?
  • En la cookie 🙂 gracias!
  • Responde tu pregunta?
  • Me imagino que podría conseguir la información almacenada en las cookies, pero me parece que no puede encontrar una manera de hacerlo. Hay también el problema de qué sucede cuando el usuario ha entrado a la página web por primera vez, no habrá ninguna de las cookies en su sistema.
InformationsquelleAutor JohnnyAce | 2016-12-22

3 Comentarios

  1. 33

    La respuesta fue en el Objeto Request, aquí está el código:

    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();
    }
  2. 3

    JohnnysAce respuesta obras. Si lo que deseas es una manera fácil de obtener de la cultura actual, se ha hecho como siempre .net:

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

    Si quieres usar IRequestCultureFeature (ver JohnnyAces respuesta; a causa de la inyección de dependencia y mejor capacidad de prueba), usted tiene que configurar las cosas en el Inicio.cs. Microsoft proporciona un ejemplo aquí https://github.com/aspnet/Entropy/blob/2fcbabef58c2c21845848c35e9d5e5f89b19adc5/samples/Localization.StarterWeb/Startup.cs

    • Desde ASP.NET Core no tiene su propio SynchronizationContext a hacer limpieza, no creo que esto funciona como en regular ASP.NET. Si usted nunca conjunto de la cultura actual, no hay ningún problema de curso.
    • Esto no parece funcionar después de hacer app.UseRequestLocalization(options)
    • Que github enlace está muerto por el camino, fija enlace: github.com/aspnet/Entropy/blob/…
    • Esto no va a funcionar una vez que el uso de una única async/await donde interruptor de hilos y de la localización de la mal solicitud/hilo.
    • funciona incluso si el interruptor de subprocesos a través de async/await, yo sólo he probado.
    • el uso de async/await no garantiza que usted va a cambiar los hilos, sólo los estados que permiten alternar los hilos, si es necesario. Por favor, compruebe de nuevo.
    • El Subproceso.CurrentThread.CurrentUICulture se utiliza ampliamente en el clásico .net framework de aplicaciones para el marco de los chicos hizo de trabajo . El async cosas también es parte de .net framework (clásico), y recuerdo que solía ser un problema con exactamente lo que usted describe, pero MS decidido a «arreglar» con la V4.6 (fix no es la palabra adecuada, ya que no es un error).
    • ¿tienes un enlace a «arreglar»? De verdad que me encanta leer cómo lo hicieron.
    • Desde MS WEb: a Partir de las aplicaciones que se dirigen a el .NET Framework 4.6, el hilo de la llamada cultura es heredado por cada tarea, incluso si la tarea se ejecuta de forma asíncrona en un grupo de subprocesos subproceso.docs.microsoft.com/en-us/dotnet/standard/parallel-programming/…
    • Si no que significaría que el formato de cadena también estaría sujeto a la mal cultura – así que realmente no tienen una opción, esta tiene que trabajar.

  3. 0

    Este código funciona para conseguir actual de la cultura en asp núcleo de controlador:

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

Dejar respuesta

Please enter your comment!
Please enter your name here