La clase CultureInfo procesa información específica de la referencia cultural, como el idioma asociado, el idioma secundario, el país o región, el calendario y las convenciones culturales. Esta clase proporciona además acceso a instancias de DateTimeFormatInfo, NumberFormatInfo, CompareInfo y TextInfo específicas de la referencia cultural. Estos objetos contienen la información necesaria para las operaciones específicas de la referencia cultural, como la distinción entre mayúsculas y minúsculas, la aplicación de formato a fechas y números y la comparación de cadenas.
La clase String utiliza de forma indirecta esta clase para obtener información acerca de la referencia cultural predeterminada.
Nombres e identificadores de las referencias culturales
La clase CultureInfo especifica un nombre único para cada referencia cultural, basándose en RFC 4646 (Windows Vista y posterior). Este nombre está formado por un código ISO 639 para la referencia cultural que está asociado a un idioma y se compone de dos letras minúsculas y por un código ISO 3166 para la referencia cultural secundaria que está asociado a un país o región y está compuesto de dos letras.
El formato del nombre de la referencia cultural es "<códigoIdioma2>-<códigoPaís/Región2>", donde <códigoIdioma2> es el código del idioma y <códigoPaís/Región2> es el código de la referencia cultural secundaria. Algunos ejemplos son "ja-JP" para japonés (Japón) y "en-US" para inglés (Estados Unidos). En los casos en que no hay disponible un código de idioma de dos letras, se utiliza un código de tres letras basado en el estándar ISO 639-2.
Conviene tener en cuenta que algunos nombres de referencia cultural también especifican una secuencia de comandos de ISO 15924. Por ejemplo, "- Cyrl" especifica la secuencia de comandos para cirílico y "- Latn" especifica la secuencia de comandos para latín. En Windows Vista y posterior, un nombre de referencia cultural que contiene un script se puede representar utilizando el modelo <códigoIdioma2>-<etiquetaDeScript>-<códigoPaís/Región2>. Un ejemplo de este tipo de nombre de referencia cultural es uz-Cyrl-UZ para uzbeco (Uzbekistán, cirílico). En los sistemas operativos anteriores a Windows Vista, un nombre de referencia cultural que contenga una secuencia de comandos se procesa utilizando el modelo <códigoIdioma2>-<códigoPaís/Región2>-<etiquetaSecuenciaDeComandos>, por ejemplo, uz-UZ-Cyrl para uzbeco (Uzbekistán, cirílico).
Una referencia cultural neutra se especifica únicamente mediante un código de idioma formado por dos letras minúsculas. Por ejemplo, "fr" especifica la referencia cultural neutra para francés y "de" especifica la referencia cultural neutra para alemán.
Nota: |
|---|
Hay dos referencias culturales que contradicen esta regla. Las referencias culturales "zh-Hans" (chino simplificado) y "zh-Hant" (chino tradicional) son neutras. Los nombres de la referencia cultural representan el estándar actual y se deben usar a menos que tenga una razón para utilizar los nombres anteriores "zh-CHS" y "zh-CHT". |
A continuación, se incluyen los nombres e identificadores de las referencias culturales predefinidas aceptadas y utilizadas por esta y otras clases en el espacio de nombres System.Globalization. Recuerde que los nombres de la referencia cultural mostrados a continuación representan sólo un subconjunto de referencias culturales que se pueden buscar en un equipo determinado. Las versiones o los service pack de Windows pueden cambiar las referencias culturales disponibles. Las aplicaciones agregan referencias culturales personalizadas mediante la clase CultureAndRegionInfoBuilder. Los usuarios agregan sus propias referencias culturales personalizadas mediante la herramienta Microsoft Locale Builder. Microsoft Locale Builder está escrito en código administrado mediante la clase CultureAndRegionInfoBuilder.
Nombre de idioma/referencia cultural | Identificador de referencia cultural | Referencia cultural |
|---|
"" (cadena vacía) | 0x007F | Referencia cultural de todos los idiomas |
af | 0x0036 | Afrikaans |
af-ZA | 0x0436 | Afrikaans (Sudáfrica) |
sq | 0x001C | Albanés |
sq-AL | 0x041C | Albanés (Albania) |
ar | 0x0001 | Árabe |
ar-DZ | 0x1401 | Árabe (Argelia) |
ar-BH | 0x3C01 | Árabe (Bahréin) |
ar-EG | 0x0C01 | Árabe (Egipto) |
ar-IQ | 0x0801 | Árabe (Iraq) |
ar-JO | 0x2C01 | Árabe (Jordania) |
ar-KW | 0x3401 | Árabe (Kuwait) |
ar-LB | 0x3001 | Árabe (Líbano) |
ar-LY | 0x1001 | Árabe (Libia) |
ar-MA | 0x1801 | Árabe (Marruecos) |
ar-OM | 0x2001 | Árabe (Omán) |
ar-QA | 0x4001 | Árabe (Qatar) |
ar-SA | 0x0401 | Árabe (Arabia Saudí) |
ar-SY | 0x2801 | Árabe (Siria) |
ar-TN | 0x1C01 | Árabe (Túnez) |
ar-AE | 0x3801 | Árabe (Emiratos Árabes Unidos) |
ar-YE | 0x2401 | Árabe (Yemen) |
hy | 0x002B | Armenio |
hy-AM | 0x042B | Armenio (Armenia) |
az | 0x002C | Azerí |
az-Cyrl-AZ | 0x082C | Azerí (Azerbaiyán, Cirílico) |
az-Latn-AZ | 0x042C | Azerí (Azerbaiyán, Latín) |
eu | 0x002D | Vasco |
eu-ES | 0x042D | Vasco (España) |
be | 0x0023 | Bielorruso |
be-BY | 0x0423 | Bielorruso (Bielorrusia) |
bg | 0x0002 | Búlgaro |
bg-BG | 0x0402 | Búlgaro (Bulgaria) |
ca | 0x0003 | Catalán |
ca-ES | 0x0403 | Catalán (España) |
zh-HK | 0x0C04 | Chino (Hong Kong RAE, RPC) |
zh-MO | 0x1404 | Chino (Macao RAE) |
zh-CN | 0x0804 | Chino (RPC) |
zh-Hans | 0x0004 | Chino (simplificado) |
zh-SG | 0x1004 | Chino (Singapur) |
zh-TW | 0x0404 | Chino (Taiwán) |
zh-Hant | 0x7C04 | Chino (tradicional) |
hr | 0x001A | Croata |
hr-HR | 0x041A | Croata (Croacia) |
cs | 0x0005 | Checo |
cs-CZ | 0x0405 | Checo (República Checa) |
da | 0x0006 | Danés |
da-DK | 0x0406 | Danés (Dinamarca) |
dv | 0x0065 | Divehi |
dv-MV | 0x0465 | Divehi (Maldivas) |
nl | 0x0013 | Holandés |
nl-BE | 0x0813 | Neerlandés (Bélgica) |
nl-NL | 0x0413 | Neerlandés (Países Bajos) |
en | 0x0009 | Inglés |
en-AU | 0x0C09 | Inglés (Australia) |
en-BZ | 0x2809 | Inglés (Belice) |
en-CA | 0x1009 | Inglés (Canadá) |
en-029 | 0x2409 | Inglés (Caribe) |
en-IE | 0x1809 | Inglés (Irlanda) |
en-JM | 0x2009 | Inglés (Jamaica) |
en-NZ | 0x1409 | Inglés (Nueva Zelanda) |
en-PH | 0x3409 | Inglés (Filipinas) |
en-ZA | 0x1C09 | Inglés (Sudáfrica) |
en-TT | 0x2C09 | Inglés (Trinidad y Tobago) |
en-GB | 0x0809 | Inglés (Reino Unido) |
en-US | 0x0409 | Inglés (Estados Unidos) |
en-ZW | 0x3009 | Inglés (Zimbabue) |
et | 0x0025 | Estonio |
et-EE | 0x0425 | Estonio (Estonia) |
fo | 0x0038 | Feroés |
fo-FO | 0x0438 | Feroés (Islas Feroe) |
fa | 0x0029 | Persa |
fa-IR | 0x0429 | Farsi (Irán) |
fi | 0x000B | Finlandés |
fi-FI | 0x040B | Finés (Finlandia) |
fr | 0x000C | Francés |
fr-BE | 0x080C | Francés (Bélgica) |
fr-CA | 0x0C0C | Francés (Canadá) |
fr-FR | 0x040C | Francés (Francia) |
fr-LU | 0x140C | Francés (Luxemburgo) |
fr-MC | 0x180C | Francés (Mónaco) |
fr-CH | 0x100C | Francés (Suiza) |
gl | 0x0056 | Gallego |
gl-ES | 0x0456 | Gallego (España) |
ka | 0x0037 | Georgiano |
ka-GE | 0x0437 | Georgiano (Georgia) |
de | 0x0007 | Alemán |
de-AT | 0x0C07 | Alemán (Austria) |
de-DE | 0x0407 | Alemán (Alemania) |
de-LI | 0x1407 | Alemán (Liechtenstein) |
de-LU | 0x1007 | Alemán (Luxemburgo) |
de-CH | 0x0807 | Alemán (Suiza) |
el | 0x0008 | Griego |
el-GR | 0x0408 | Griego (Grecia) |
gu | 0x0047 | Gujarati |
gu-IN | 0x0447 | Gujarati (India) |
he | 0x000D | Hebreo |
he-IL | 0x040D | Hebreo (Israel) |
hi | 0x0039 | Hindi |
hi-IN | 0x0439 | Hindi (India) |
hu | 0x000E | Húngaro |
hu-HU | 0x040E | Húngaro (Hungría) |
es | 0x000F | Islandés |
is-IS | 0x040F | Islandés (Islandia) |
id | 0x0021 | Indonesio |
id-ID | 0x0421 | Indonesio (Indonesia) |
it | 0x0010 | Italiano |
it-IT | 0x0410 | Italiano (Italia) |
it-CH | 0x0810 | Italiano (Suiza) |
ja | 0x0011 | Japonés |
ja-JP | 0x0411 | Japonés (Japón) |
kn | 0x004B | Kannada |
kn-IN | 0x044B | Kannada (India) |
kk | 0x003F | Kazajo |
kk-KZ | 0x043F | Kazajo (Kazajistán) |
kok | 0x0057 | Konkani |
kok-IN | 0x0457 | Konkani (India) |
ko | 0x0012 | Coreano |
ko-KR | 0x0412 | Coreano (Corea) |
ky | 0x0040 | Kirguís |
ky-KG | 0x0440 | Kirguís (Kirguistán) |
lv | 0x0026 | Letón |
lv-LV | 0x0426 | Letón (Letonia) |
lt | 0x0027 | Lituano |
lt-LT | 0x0427 | Lituano (Lituania) |
mk | 0x002F | Macedonio |
mk-MK | 0x042F | Macedonio (Macedonia, Ex-República Yugoslava de Macedonia) |
ms | 0x003E | Malayo |
ms-BN | 0x083E | Malayo (Estado de Brunéi Darussalam) |
ms-MY | 0x043E | Malayo (Malasia) |
mr | 0x004E | Marathi |
mr-IN | 0x044E | Marathi (India) |
mn | 0x0050 | Mongol |
mn-MN | 0x0450 | Mongol (Mongolia) |
no | 0x0014 | Noruego |
nb-NO | 0x0414 | Noruego (Bokmål, Noruega) |
nn-NO | 0x0814 | Noruego (Nynorsk, Noruega) |
pl | 0x0015 | Polaco |
pl-PL | 0x0415 | Polaco (Polonia) |
pt | 0x0016 | Portugués |
pt-BR | 0x0416 | Portugués (Brasil) |
pt-PT | 0x0816 | Portugués (Portugal) |
pa | 0x0046 | Punjabi |
pa-IN | 0x0446 | Punjabi (India) |
ro | 0x0018 | Rumano |
ro-RO | 0x0418 | Rumano (Rumanía) |
ru | 0x0019 | Ruso |
ru-RU | 0x0419 | Ruso (Rusia) |
sa | 0x004F | Sánscrito |
sa-IN | 0x044F | Sánscrito (India) |
sr-Cyrl-CS | 0x0C1A | Serbio cirílico (Serbia y Montenegro) |
sr-Latn-CS | 0x081A | Serbio latino (Serbia y Montenegro) |
sk | 0x001B | Eslovaco |
sk-SK | 0x041B | Eslovaco (Eslovaquia) |
sl | 0x0024 | Esloveno |
sl-SI | 0x0424 | Esloveno (Eslovenia) |
es | 0x000A | Español |
es-AR | 0x2C0A | Español (Argentina) |
es-BO | 0x400A | Español (Bolivia) |
es-CL | 0x340A | Español (Chile) |
es-CO | 0x240A | Español (Colombia) |
es-CR | 0x140A | Español (Costa Rica) |
es-DO | 0x1C0A | Español (República Dominicana) |
es-EC | 0x300A | Español (Ecuador) |
es-SV | 0x440A | Español (El Salvador) |
es-GT | 0x100A | Español (Guatemala) |
es-HN | 0x480A | Español (Honduras) |
es-MX | 0x080A | Español (México) |
es-NI | 0x4C0A | Español (Nicaragua) |
es-PA | 0x180A | Español (Panamá) |
es-PY | 0x3C0A | Español (Paraguay) |
es-PE | 0x280A | Español (Perú) |
es-PR | 0x500A | Español (Puerto Rico) |
es-ES | 0x0C0A | Español (España) |
es-ES_tradnl | 0x040A | Español (España, alfabetización tradicional) |
es-UY | 0x380A | Español (Uruguay) |
es-VE | 0x200A | Español (Venezuela) |
sw | 0x0041 | Suajili |
sw-KE | 0x0441 | Swahili (Kenia) |
sv | 0x001D | Sueco |
sv-FI | 0x081D | Sueco (Finlandia) |
sv-SE | 0x041D | Sueco (Suecia) |
syr | 0x005A | Sirio |
syr-SY | 0x045A | Sirio (Siria) |
ta | 0x0049 | Tamil |
ta-IN | 0x0449 | Tamil (India) |
tt | 0x0044 | Tatar |
tt-RU | 0x0444 | Tatar (Rusia) |
te | 0x004A | Telugu |
te-IN | 0x044A | Telugu (India) |
th | 0x001E | Tailandés |
th-TH | 0x041E | Tailandés (Tailandia) |
tr | 0x001F | Turco |
tr-TR | 0x041F | Turco (Turquía) |
uk | 0x0022 | Ucraniano |
uk-UA | 0x0422 | Ucraniano (Ucrania) |
ur | 0x0020 | Urdú |
ur-PK | 0x0420 | Urdú (Pakistán) |
uz | 0x0043 | Uzbeko |
uz-Cyrl-UZ | 0x0843 | Uzbeko (Uzbekistán, Cirílico) |
uz-Latn-UZ | 0x0443 | Uzbeko (Uzbekistán, Latino) |
vi | 0x002A | Vietnamita |
vi-VN | 0x042A | Vietnamita (Vietnam) |
Algunos nombres están estrechamente asociados a una referencia cultural, en particular los nombres asociados con los miembros de clase siguientes:
Vea Nombres asociados a un objeto CultureInfo para obtener más información sobre la relación que existe entre estos nombres.
Referencias culturales invariables, neutras y específicas
Las referencias culturales se han dividido en tres grupos: referencias culturales de todos los idiomas, referencias culturales neutras y referencias culturales específicas.
La referencia cultural de todos los idiomas no tiene en cuenta la referencia cultural. La aplicación especifica la referencia cultural de todos los idiomas por su nombre mediante una cadena vacía ("") o por su identificador. InvariantCulture define una instancia de la referencia cultural de todos los idiomas. Se encuentra asociada al idioma inglés pero a ningún país o región. Se puede utilizar en casi todos los métodos del espacio de nombres de Globalization que requieran una referencia cultural.
Una referencia cultural neutra es aquélla asociada a un idioma pero no a un país o región. Una referencia cultural específica es la que está asociada a un idioma y a un país o región. Por ejemplo, "fr" es una referencia cultural neutra y "fr-FR" es una referencia cultural específica. Tenga en cuenta que "zh-Hans" (chino simplificado) y "zh-Hant" (chino tradicional) son referencias culturales neutras.
No se recomienda la creación de instancias de una clase CompareInfo para una referencia cultural neutra porque los datos que contiene son arbitrarios. Para mostrar y ordenar los datos, especifique el lenguaje y región. Además, la propiedad Name de un objeto CompareInfo creada para una referencia cultural neutra devuelve sólo el país y no incluye la región.
Las referencias culturales definidas tienen una jerarquía en que la referencia principal de una referencia cultural específica es una referencia cultural neutra, y la referencia cultural principal de una neutra es la referencia cultural de todos los idiomas. La propiedad Parent contiene la referencia cultural neutra asociada a una referencia cultural específica. Las referencias culturales personalizadas deben establecer la propiedad Parent con arreglo a este modelo.
Si los recursos de la referencia cultural concreta no están disponibles en el sistema, se usan los recursos de la referencia cultural neutra. Si los recursos de la referencia cultural neutra no están disponibles, se usan los recursos incrustados en el ensamblado principal. Para obtener más información sobre el proceso de reserva de recursos, vea Empaquetar e implementar recursos.
La lista de referencias culturales de la API de Windows es ligeramente diferente de la lista de referencias culturales de .NET Framework. Si es necesaria la interoperabilidad con Windows (por ejemplo, mediante el mecanismo p/invoke), la aplicación debe usar una referencia cultural específica definida en el sistema operativo. El uso de referencias culturales específicas garantiza la coherencia con la configuración regional de Windows equivalente, que se establece mediante un identificador de configuración regional que es el mismo que el de la propiedad LCID.
DateTimeFormatInfo o NumberFormatInfo sólo se pueden crear para la referencia cultural invariable o para referencias culturales específicas, pero no para referencias culturales neutras.
Si DateTimeFormatInfo..::.Calendar es TaiwanCalendar pero Thread..::.CurrentCulture no es "zh-TW", DateTimeFormatInfo..::.NativeCalendarName, DateTimeFormatInfo..::.GetEraName y DateTimeFormatInfo..::.GetAbbreviatedEraName devuelven una cadena vacía ("").
Referencias culturales personalizadas
Al preparar el software para administrar las referencias culturales personalizadas, considere lo siguiente:
Las referencias culturales personalizadas pueden tener valores que superen los intervalos de las referencias culturales distribuidas por Microsoft. Por ejemplo, algunas referencias culturales tienen nombres de mes largos, formatos de fecha o de hora inesperados u otros datos no habituales.
Respete los valores de datos de la referencia cultural del usuario; por ejemplo, el usuario quizá desee un reloj de 24 horas o un formato de fecha aaaaMMdd.
Recuerde que las referencias culturales personalizadas invalidan los valores predeterminados. Por consiguiente, no puede considerar que los datos de las referencias culturales sean estables. Los nombres de países, los formatos de fecha, la ortografía, etc. es probable que cambien en el futuro. Si la aplicación necesita serializar el uso de estos datos, como ocurre con el formato y las funciones de análisis de DateTime, se debe utilizar la referencia cultural de todos los idiomas o un formato concreto.
Representar los datos dinámicos de la referencia cultural
Excepto en la referencia cultural de todos los idiomas, los datos de la referencia cultural son dinámicos. Esto es así incluso en las referencias culturales predefinidas. Por ejemplo, los países o regiones adoptan nuevas monedas, cambian la ortografía de sus palabras o modifican su modelos de calendario preferidos y las definiciones de las referencias culturales varían para dar cuenta de ello. Las referencias culturales personalizadas pueden cambiar sin previo aviso y cualquier referencia cultural específica podría reemplazarse por una referencia cultural personalizada. Además, tal y como veremos después, un usuario individual podría reemplazar las preferencias culturales. Las aplicaciones siempre deben obtener los datos de la referencia cultural en tiempo de ejecución.
Precaución: |
|---|
Al guardar los datos, la aplicación debe usar la referencia cultural de todos los idiomas, con el formato binario o el formato independiente de una referencia cultural específica. Los datos que se guardan conforme a los valores actuales asociados a una referencia cultural determinada, que no sea la referencia cultural de todos los idiomas, podrían ser ilegibles o variar su significado si cambia esa referencia cultural. |
Serializar un objeto CultureInfo
Cuando se serializa un objeto CultureInfo, lo que realmente se guarda es Name y UseUserOverride. La serialización sólo se puede anular correctamente en un entorno en el que Name tenga el mismo significado. En los tres ejemplos siguientes se muestra por qué no siempre ocurre esto.
Si CultureTypes indica CultureTypes..::.WindowsOnlyCultures y esa referencia cultural se especifica primero en Windows Vista, no es posible anular su serialización en Windows XP. De igual forma, si la referencia cultural se incluyó primero en Windows XP Service Pack 2, no es posible anular su serialización en un sistema Windows XP en el que no se haya instalado la referencia cultural.
Si CultureTypes indica CultureTypes..::.UserCustomCulture y el equipo en el que debe deserializarse no tiene instalada esta referencia cultural personalizada, no es posible realizar la operación.
Si CultureTypes indica CultureTypes..::.ReplacementCultures y el equipo en el que debe deserializarse no tiene esta referencia cultural de reemplazo, se deserializa en el mismo nombre, pero no las mismas características. Por ejemplo, si “en-US” es una referencia cultural de reemplazo en el equipo A, pero no en el equipo B, y un objeto CultureInfo asociado a esta referencia cultural se serializa en el equipo A y se deserializa en el equipo B, no se transmite ninguna de las características personalizadas de esta referencia cultural. La referencia cultural se deserializará correctamente, pero con un significado distinto.
Configuraciones regionales de Windows
Reemplazos del Panel de control
El usuario puede optar por invalidar algunos de los valores asociados a la referencia cultural actual de Windows a través de la configuración referente a las opciones de configuración regional y de idioma del Panel de control. Por ejemplo, el usuario puede mostrar la fecha en un formato diferente o utilizar una moneda diferente a la predeterminada para la referencia cultural. En general, las aplicaciones deben respetar estas invalidaciones del usuario.
Si UseUserOverride es true y la referencia cultural especificada coincide con la referencia cultural actual de Windows, CultureInfo utiliza estos nuevos valores, incluida la configuración del usuario para las propiedades de la instancia de DateTimeFormatInfo devuelta por la propiedad DateTimeFormat, y las propiedades de la instancia de NumberFormatInfo devueltas por la propiedad NumberFormat. Si la configuración del usuario no es compatible con la referencia cultural asociada a CultureInfo (por ejemplo, si el calendario seleccionado no es uno de OptionalCalendars), no se definen los resultados de los métodos ni los valores de las propiedades.
En las referencias culturales que utilizan el euro, .NET Framework y Windows XP establecen el euro como moneda predeterminada. Esto no ocurre, sin embargo, en las versiones anteriores de Windows. Por consiguiente, si el usuario de una versión antigua de Windows no ha cambiado la moneda a través de la configuración referente a las opciones de configuración regional y de idioma del Panel de control, la moneda podría ser incorrecta. Para usar la configuración predeterminada de .NET Framework para la moneda, debe usar en la aplicación una sobrecarga del constructor CultureInfo que acepte un parámetro useUserOverride y establecerlo en false.
Criterios de ordenación alternativos
La referencia cultural "Español (España)" utiliza dos identificadores de referencia cultural, 0x0C0A (que utiliza la ordenación internacional predeterminada) y 0x040A (que utiliza la ordenación tradicional). Si la clase CultureInfo se construye utilizando el nombre de referencia cultural "es-ES", la nueva CultureInfo utiliza la ordenación internacional predeterminada. En la ordenación tradicional, el objeto se construye utilizando el nombre "es-ES_tradnl". Para obtener información sobre otras referencias culturales con ordenaciones alternativas, vea Comparar y ordenar datos para una referencia cultural específica.
Interfaces implementadas
Esta clase implementa la interfaz ICloneable para habilitar la duplicación de objetos CultureInfo. También implementa IFormatProvider para proporcionar información de formato a aplicaciones.
Referencias culturales, subprocesos y dominios de aplicación
Hay consideraciones únicas que deben tenerse en cuenta al utilizar un subproceso asociado a un objeto CultureInfo. Para obtener más información sobre las referencias culturales y dominios de aplicación, vea Dominios de aplicación y subprocesos.