Obtener los nombres de meses del calendario sin hardcoding en C#
En varias aplicaciones que proveen un dropdownlist para escoger el nombre de un Mes, he visto que los desarrolladores llenan los nombres de los meses a través de un archivo de recursos, o peor, hard-codeando los valores. Esto no es necesario, ya que los nombres de los meses del calendario de cada cultura pueden ser accesados a través de un objeto CultureInfo que represente la cultura del país/idioma para el cual queremos obtener los meses.
Lo primero es agregar un using de System.Globalization.
El siguiente metodo va a imprimir todos los meses del año del calendario del objeto CultureInfo que le pasemos.
Generalmente vamos a querer que los nombres empiecen con mayúsculas, así que también estoy usando el método ToTitleCase, que va a formatear correctamente los nombres de los meses a TitleCase según el formato correcto de la cultura tambien.
public static void ImprimirNombreMeses(CultureInfo cultura)
{
// Primera manera, LINQ
var qry = from m in cultura.DateTimeFormat.MonthNames
select cultura.TextInfo.ToTitleCase(m);
foreach (var mes in qry)
{
Console.WriteLine(mes);
}
// Segunda manera, tipico foreach
foreach(string mes in cultura.DateTimeFormat.MonthNames)
{
Console.WriteLine(cultura.TextInfo.ToTitleCase(mes));
}
Console.ReadLine();
}
La primera parte del método usa LINQ. Si estás usando una version anterior al framework 3.5, tendrías que ciclar usando un foreach.
El resultado se ve así:
Esta es una de las tantas razones por las cuales me gusta el .NET Framework. Si lo necesitas, probablemente ya esté integrado.
