2012-09-27 11 views
21

¿Hay un conjunto de constantes o una enumeración en el espacio de nombres del sistema C/globalización que contiene nombres de cultura válidos?Constantes para Nombre de CultureInfo

Busco algo para que yo no tengo que escribir "es-ES", etc.

+0

http://msdn.microsoft.com/en-us/goglobal/bb896001.aspx –

Respuesta

9

No, no hay. La lista de culturas disponibles es específica del sistema: incluso puede registrar nuevas culturas personalizadas usando CultureAndRegionInfoBuilder.

Así que si quieres esto, tendrás que crear tu propia enumeración o constantes para el subconjunto de culturas comunes que te interesen, p.:

public static class KnownCulture 
{ 
    public readonly String EnglishUS = "en-US"; 
    public readonly String EnglishGB = "en-GB"; 
    ... etc ... 
} 

o

public enum KnownLCID 
{ 
    EnglishUS = 0x409, 
    EnglishGB = 0x809, 
    ... 
} 

Esto es análogo a la KnownColor enumeración: no es posible crear una enumeración de todos los colores posibles, pero puede tener sentido para tener una enumeración de uso frecuente queridos.

No esperaba que Microsoft proporcionara una enumeración KnownCulture equivalente, ya que es bastante sensible (¿por qué mi cultura no está incluida?).

+1

"No esperaba que Microsoft proporcionara una enumeración KnownCulture equivalente fuera de la caja," bueno, hay estándares iso, que java la localidad sigue ... – NimChimpsky

22

sí, hay, GetCultures:

System.Globalization.CultureInfo.GetCultures(System.Globalization.CultureTypes.SpecificCultures) 

que devuelve una matriz de CultureInfo objetos, por lo que si desea que los nombres de cadena que podría utilizar algo como:

IEnumerable<CultureInfo> cultures = CultureInfo.GetCultures(CultureTypes.SpecificCultures); 
string[] names = cultures.Select(c => c.Name).ToArray(); 

Nota de la "cultura Tipos" enum (desde el enlace de MSDN). Supongo que los más útiles serían NeutralCultures y SpecificCultures.

  • NeutralCultures culturas que están asociados con una lengua, pero no son específicos de un país/región. Los nombres de los cultivos de .NET Framework consisten en el código de dos letras minúsculo derivado de ISO 639-1. Por ejemplo: "en" (inglés) es una cultura neutral. Las culturas personalizadas pueden tener cualquier nombre especificado por el usuario, no solo un código de dos letras. La cultura invariante está incluida en la matriz de cultivos devuelta por el método CultureInfo.GetCultures que especifica este valor.
  • SpecificCultures Culturas que son específicas de un país/región. Los nombres de estas culturas siguen RFC 4646 (Windows Vista y posteriores). El formato es "-", donde es un código de dos letras minúsculo derivado de ISO 639-1 y es un código de dos letras mayúsculas derivado de ISO 3166. Por ejemplo, "en-US" para inglés (Estados Unidos) es un cultura específica Los cultivos personalizados pueden tener cualquier nombre especificado por el usuario, no solo un nombre que cumpla con los estándares.
  • InstalledWin32Cultures Todas las culturas que están instaladas en el sistema operativo Windows. Tenga en cuenta que no todas las culturas compatibles con .NET Framework están instaladas en el sistema operativo.
  • AllCultures Todas las culturas que se envían con .NET Framework, incluidas culturas neutrales y específicas, culturas instaladas en el sistema operativo Windows y culturas personalizadas creadas por el usuario.
  • UserCustomCulture Culturas personalizadas creadas por el usuario.
  • ReplacementCultures Culturas personalizadas creadas por el usuario que reemplazan las culturas enviadas con .NET Framework.