2009-06-12 20 views
32

Cuándo debo llamar a CultureInfo. CreateSpecificCulture (Cadena) en lugar de CultureInfo. GetCultureInfo (Cadena). La documentación de MSDN no es muy clara.Cuándo utilizar CultureInfo.GetCultureInfo (String) o CultureInfo.CreateSpecificCulture (String)

¿Existe alguna manera de comprobar más fácilmente si el nombre de una cultura es válido?

Yo creo si pasa “en” en lugar de “en-GB” a CultureInfo.CreateSpecificCulture (String) obtendrá un error, pero que CultureInfo.GetCultureInfo (String) no me importa. P.ej. CultureInfo.GetCultureInfo (String) puede hacer frente si solo pasa un idioma. Sin embargo, aún no estoy seguro de esto.

Respuesta

10

Depende un poco de lo que necesita la cultura. Los nombres cortos ("en", "fr", etc.) se usan para culturas neutrales, suficientes para el manejo de recursos específicos del idioma. Pero para el formato numérico y de fechas necesita una cultura específica, como "en-GB".

Y CultureInfo.CreateSpecificCulture("en"); funciona bien aquí. Está especialmente destinado a obtener 'una' cultura específica para una neutral.

19

Las culturas se agrupan en tres conjuntos: la cultura invariante, las culturas neutrales y las culturas específicas. El cultivo en es un cultivo neutro mientras que el cultivo en-US es un cultivo específico.

GetCultureInfo le dará la cultura que solicite, por lo que si solicita una cultura neutral, también obtendrá una cultura neutral como en.

CreateSpecificCulture va a crear una cultura específica de una cultura neutra por lo que si se llama a la CreateSpecificCulture("en")CultureInfo devuelto es para la cultura en-US. No estoy seguro de cómo se asignan las culturas neutrales a las culturas específicas, pero debe haber alguna tabla dentro de BCL o Windows que contenga esas asignaciones y decide que se devuelve el en-US y no el en-GB. Especificar una referencia cultural específica como el argumento CreateSpecificCulture le dará ese CultureInfo específico como lo hace GetCultureInfo.

Pero hay una característica sorprendente de la cultura específica creada:

Si el identificador de la cultura de la cultura específica devuelto por este método coincide con el identificador de la cultura de la actual cultura de Windows, este método crea un CultureInfo objeto que usa las anulaciones de cultura de Windows. Las modificaciones incluyen la configuración del usuario para las propiedades del objeto DateTimeFormatInfo devuelto por la propiedad DateTimeFormat y el objeto NumberFormatInfo devuelto por la propiedad NumberFormat.

Lo que esto significa es que si la cultura específica devuelto por CreateSpecificCulture coincide con el cultivo seleccionado por el usuario en regional y de idioma panel de control de Windows, entonces cualquier personalización de usuario a que la cultura está incluido en el CultureInfo devuelto. P.ej. el usuario puede cambiar el patrón de fecha larga o el separador decimal utilizado en números. Otra forma de pensar sobre esto es que cuando CreateSpecificCulture devuelve una cultura que coincide con el nombre CurrentCulture, en realidad devolverá esta cultura, incluidas las personalizaciones del usuario.

Por lo que puedo decir GetCultureInfo no tiene esta propiedad y siempre devolverá un CultureInfo sin modificaciones.

Y para verificar si una cultura es válida, usaría GetCultureInfo.

Cuestiones relacionadas