Principales respuestas
Como puedo cambiar la cultura de un Web Api para manejar archivos de recursos

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
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
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
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);
} -
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
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
-
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
alli usa el header del request paa tomar el request.Headers.AcceptLanguage
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina