none
Como puedo cambiar la cultura de un Web Api para manejar archivos de recursos RRS feed

  • Pregunta

  • Hola a todos

    Tengo un proyecto Web Api 2 y un proyecto Class Lbrary, en mi proyecto class labrary tengo una clase Models la cual tiene los Data Anotattion empleando archivos de recursos:

    public class User
    {
    public long UserID { get; set; }
    [Required(ErrorMessageResourceType = typeof(ValidationMessages), ErrorMessageResourceName = "MAIL_REQUIRED")]
    [EmailAddress(ErrorMessageResourceType = typeof(ValidationMessages), ErrorMessageResourceName = "MAIL_INVALID")]
    public string Mail { get; set; }

    [Required(ErrorMessageResourceType = typeof(ValidationMessages), ErrorMessageResourceName = "NAME_INVALID")]
    public string Name { get; set; }
    }

    Tengo 2 archivos de recursos:
    - ValidationMessages.resx
    - ValidationMessages.es.resx

    Tengo un método para validar mi clase.

    public bool Validate(User user, out List<ValidationResult> results)
    {
    var context = new ValidationContext(user, null, null);
    results = new List<ValidationResult>();
    if (Validator.TryValidateObject(user, context, results))
    return true;
    else
    return false;
    }

    Sin embargo los resultados siempre vienen tomando el archivo en español, a los métodos Web Api se le envia la cultura la cual debe tomar ("es-ES o "en-US"), como la defino a la instancia o métodos actuales? He intentado con esto en el controlador pero nada:

                1- System.Globalization.CultureInfo.DefaultThreadCurrentCulture = new System.Globalization.CultureInfo("en-US");
    2- System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US");
    3- System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US")

    Pero nada que funciona...

    Saludos

    miércoles, 1 de noviembre de 2017 16:33

Respuestas

  • hola

    como envias la cultura en la invocacion del webapi ?

    porque definir el CurrentThread eso no es dinamico, lo estas asignando desde codigo servidor de forma fija

    la idea es obtener la cultura del request que invoca la funcionalidad y asignarla en ese momento

    Auto Selecting Cultures for Localization in ASP.NET

    analiza como se usa el SetUserLocale()

    o sino usando handlers

    Web API Localization

    alli usa el header del request paa tomar el request.Headers.AcceptLanguage

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta AdyIr lunes, 6 de noviembre de 2017 0:56
    miércoles, 1 de noviembre de 2017 22:37

Todas las respuestas

  • Yo lo iniccializo la cultura asi en algunas aplicaciones.Te dejo un método de ejemplo. El parametro valor idioma debe ser "en-GB" o "pt-PT" o en tu caso "en-US"

    public void InicializarCultura(string valorIdioma)
      {
           
          System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.GetCultureInfo(valorIdioma);
          System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.GetCultureInfo(valorIdioma);

     
      }

    miércoles, 1 de noviembre de 2017 19:18
  • hola

    como envias la cultura en la invocacion del webapi ?

    porque definir el CurrentThread eso no es dinamico, lo estas asignando desde codigo servidor de forma fija

    la idea es obtener la cultura del request que invoca la funcionalidad y asignarla en ese momento

    Auto Selecting Cultures for Localization in ASP.NET

    analiza como se usa el SetUserLocale()

    o sino usando handlers

    Web API Localization

    alli usa el header del request paa tomar el request.Headers.AcceptLanguage

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta AdyIr lunes, 6 de noviembre de 2017 0:56
    miércoles, 1 de noviembre de 2017 22:37
  • hola

    como envias la cultura en la invocacion del webapi ?

    porque definir el CurrentThread eso no es dinamico, lo estas asignando desde codigo servidor de forma fija

    la idea es obtener la cultura del request que invoca la funcionalidad y asignarla en ese momento

    Auto Selecting Cultures for Localization in ASP.NET

    analiza como se usa el SetUserLocale()

    o sino usando handlers

    Web API Localization

    alli usa el header del request paa tomar el request.Headers.AcceptLanguage

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    Gracias Leandro, el 2do link era lo que necesitaba!
    lunes, 6 de noviembre de 2017 0:57