2010-03-25 23 views
7

Estoy trabajando en la localización de un sitio web en francés. Sin embargo, no se supone que deba cambiar el formato de fecha a francés. Debe permanecer según el formato en-us, incluso si la cultura está configurada en fr-ca, es decir, cuando el resto de los contenidos estén en francés, el formato de fecha aún debe estar en inglés (en-us).Cambiar el formato de fecha a en-us mientras culture es fr-ca

Respuesta

1

Sorprendentemente me dieron una respuesta muy simple. Al configurar Culture y UICulture, todo lo que tengo que hacer es establecer Culture Property en en us siempre. Esto dará como resultado que se muestre el formato de fecha en inglés siempre.

2

en la cuerda, cuando se muestra la fecha, haga lo siguiente:

CultureInfo ci = new CultureInfo("en-US"); 
string s = dateTimeObject.ToString(ci); 

Este es un ejemplo simplificado sin embargo, sólo tiene que hacer el trabajo necesario que quiere hacer en el objeto DateTime.

+0

Si lo hago de esta manera tendré que cambiar el código en todas partes. ¿No se puede hacer esto globalmente? –

+0

@Nadeem: es posible crear su propio CultureInfo. Ver mi respuesta actualizada. – bernhof

9

Para cambiar la forma en que se formatean las fechas, podría create a custom CultureInfo, en función de un CultureInfo existente (en su caso "fr-CA"), modificando solo los formatos de fecha. No tengo ninguna experiencia en esto, pero el arículo enlazado y this article explica cómo se hace. Supuestamente, no es muy difícil.

Imagino que la configuración de System.Threading.Thread.CurrentThread.CurrentCulture a una instancia de su CultureInfo personalizado (por ejemplo, en el evento Page.Load) debería hacer el trabajo.


O bien, utilizar la clase CultureInfo para especificar la cultura en función de cada cadena:

CultureInfo culture = new CultureInfo("en-US"); 

Cada vez que se escribe una fecha para la página, utilice la siguiente sintaxis:

myDate.ToString("d", culture); 

o

string.Format(
    culture, 
    "This is a string containing a date: {0:d}", 
    myDate); 

Th La clase e CultureInfo reside en el espacio de nombres System.Globalization y d en el ejemplo anterior es el formato en el que se imprime la fecha. See John Sheehan's ".NET Format String Quick Reference" cheat sheet para obtener más información sobre las cadenas de formato.

2

Thanks Guys !!!! Parece que tus sugerencias están funcionando para mí. Intenté crear una cultura personalizada que amplíe las características de fr-ca y cambie su formato de fecha a en-us. Este es el código

CultureInfo ci = new CultureInfo("fr-ca"); 
DateTimeFormatInfo dateformat = new DateTimeFormatInfo(); 
dateformat.FullDateTimePattern = "dddd, mmmm dd, yyyy h:mm:ss tt";// Date format of en-us 
ci.DateTimeFormat = dateformat; 
CultureAndRegionInfoBuilder obj = new CultureAndRegionInfoBuilder("fr-ca", CultureAndRegionModifiers.Replacement); 
obj.LoadDataFromCultureInfo(ci); 
obj.Register(); 

Una vez que el código registra nuevo FR-ca, el formato de fecha de la FR-ca será el mismo que el de en-us. El código se puede usar en Page_Load.

1

Aquí está el código anterior en snipet código:

CultureInfo ci = new CultureInfo("fr-ca"); 

DateTimeFormatInfo dateformat = new DateTimeFormatInfo(); 



dateformat.FullDateTimePattern = "dddd, mmmm dd, yyyy h:mm:ss tt";// Date format of en-us 



ci.DateTimeFormat = dateformat; 

CultureAndRegionInfoBuilder obj = new CultureAndRegionInfoBuilder("fr-ca", CultureAndRegionModifiers.Replacement); 


obj.LoadDataFromCultureInfo(ci); 

obj.Register(); 
2

En mi caso, eso es lo que hice. Tuve que establecer el idioma de la aplicación, también determinar si el idioma es de derecha a izquierda, pero también era necesario para mantener el formato estándar de fecha y hora. Así que eso fue lo que hice:

string culture = "ar-SA"; 
//Set language and culture to Arabic 
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(culture); 
Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(culture); 

//But independent of language, keep datetime format same 
DateTimeFormatInfo englishDateTimeFormat = new CultureInfo("en-CA").DateTimeFormat; 
Thread.CurrentThread.CurrentCulture.DateTimeFormat = englishDateTimeFormat; 
+0

muchas gracias, me salvaste el día. De todos modos, edité tu respuesta para restablecer el formato de fecha y hora en la Cultura de interfaz de usuario también. ¡Que tengas un buen día! –

+0

¡Genial! De nada :) – Elnoor

+0

La mejor solución, me funciona – amal50

Cuestiones relacionadas