Clase CultureAndRegionInfoBuilder
En este artículo se proporcionan comentarios adicionales a la documentación de referencia de esta API.
Nota:
La CultureAndRegionInfoBuilder clase es útil solo para sistemas operativos Windows. Los archivos .nlp generados no se admiten en sistemas operativos que no son Windows. Además, incluso en Windows, los archivos .nlp generados solo se admiten en .NET Framework (o en .NET Core cuando se usa el modo de globalización NLS).
La clase CultureInfo contiene información específica de la referencia cultural, como el idioma asociado, la sublanguaje, el país o la región, el calendario y las convenciones culturales. Esta clase también proporciona instancias específicas de la referencia cultural de las clases DateTimeFormatInfo, NumberFormatInfo, CompareInfo, y TextInfo, que son necesarias para operaciones específicas de la referencia cultural, como el uso de mayúsculas y minúsculas, el formato y el análisis de fechas y números, y la comparación de cadenas.
De manera predeterminada, .NET admite objetos CultureInfo que representan un conjunto predefinido de referencias culturales. Para obtener una lista de estas referencias culturales disponibles en los sistemas Windows, consulte la columna Etiqueta de idioma en la lista de nombres de idioma o región admitidos por Windows. Los nombres de las referencias culturales siguen el estándar definido por BCP 47. La clase CultureAndRegionInfoBuilder permite crear una referencia cultural personalizada que sea completamente nueva o que invalide una referencia cultural predefinida. Cuando se instala y registra una referencia cultural personalizada en un equipo determinado, se vuelve indistinguible a partir de objetos predefinidos CultureInfo y se puede crear una instancia y se puede usar igual que esos objetos.
Importante
La CultureAndRegionInfoBuilder clase se encuentra en un ensamblado denominado sysglobl.dll. Para compilar correctamente el código que usa este tipo, debe agregar una referencia a sysglobl.dll.
Un usuario que tenga derechos administrativos en ese equipo solo puede registrar una referencia cultural personalizada en un equipo. Por lo tanto, las aplicaciones normalmente no crean e instalan referencias culturales personalizadas. En su lugar, puede usar la clase CultureAndRegionInfoBuilder para crear una herramienta de propósito especial que un administrador pueda usar para crear, instalar y registrar una referencia cultural personalizada. Una vez registrada la referencia cultural personalizada en un equipo, puede usar la clase CultureInfo de la aplicación para crear instancias de la referencia cultural personalizada como lo haría con una referencia cultural predefinida.
Si analiza las cadenas de fecha y hora generadas para una referencia cultural personalizada, debe usar el método DateTime.ParseExact o DateTime.TryParseExact en lugar del método DateTime.Parse o DateTime.TryParse para mejorar la probabilidad de que la operación de análisis se realice correctamente. Una cadena de fecha y hora para una referencia cultural personalizada puede ser complicada y, por tanto, difícil de analizar. Los métodos Parse y TryParse intentan analizar una cadena con varios patrones de análisis implícitos, lo que podría producir un error. El método TryParseExact, en contraste, requiere que la aplicación designe explícitamente uno o más patrones de análisis exactos que probablemente se realicen correctamente.
Definición y creación de una referencia cultural personalizada
Use la clase CultureAndRegionInfoBuilder para definir y asignar un nombre a una referencia cultural personalizada. La referencia cultural personalizada puede ser una referencia cultural completamente nueva, una nueva referencia cultural basada en una referencia cultural existente (es decir, una referencia cultural complementaria) o una referencia cultural que reemplace una referencia cultural de .NET existente. En cada caso, los pasos básicos son los mismos:
Cree una instancia de un objeto CultureAndRegionInfoBuilder llamando a su constructor CultureAndRegionInfoBuilder(String, CultureAndRegionModifiers). Para reemplazar una referencia cultural existente, pase el nombre de esa referencia cultural y el valor de enumeración CultureAndRegionModifiers.Replacement al constructor. Para crear una nueva referencia cultural o una referencia cultural complementaria, pase un nombre de referencia cultural único y el valor de enumeración CultureAndRegionModifiers.Neutral o CultureAndRegionModifiers.None.
Nota:
Si usa el valor de enumeración CultureAndRegionModifiers.Replacement para crear instancias de un objetoCultureAndRegionInfoBuilder, las propiedades del objeto CultureAndRegionInfoBuilder se rellenan automáticamente con valores del objeto CultureInfoque se van a reemplazar.
Si va a crear una referencia cultural nueva o complementaria:
- Rellene las propiedades del objeto CultureAndRegionInfoBuilderllamando al método LoadDataFromCultureInfo y pasando un objetoCultureInfo cuyos valores de propiedad son similares al nuevo objeto.
- Rellene las propiedades regionales CultureAndRegionInfoBuilderdel objeto llamando al método LoadDataFromRegionInfo y pasando un objeto RegionInfo que representa la región de la referencia cultural personalizada.
Modifique las propiedades del objeto CultureAndRegionInfoBuildersegún sea necesario.
Si planea registrar la referencia cultural personalizada en una rutina independiente, llame al método Save. Esto genera un archivo XML que se puede cargar y registrar en una rutina de instalación de referencia cultural personalizada independiente.
Registro de una referencia cultural personalizada
Si va a desarrollar una aplicación de registro para una referencia cultural personalizada independiente de la aplicación que crea la referencia cultural, llame al método CreateFromLdml para cargar el archivo XML que contiene la definición de la referencia cultural personalizada y cree una instancia del objeto CultureAndRegionInfoBuilder. Para controlar el registro, llame al método Register. Para que el registro se realice correctamente, la aplicación que registra la referencia cultural personalizada debe ejecutarse con privilegios administrativos en el sistema de destino; de lo contrario, la llamada a Register produce una excepción UnauthorizedAccessException.
Advertencia
Los datos de referencia cultural pueden diferir entre sistemas. Si usa la clase CultureAndRegionInfoBuilder para crear una referencia cultural personalizada uniforme en varios sistemas y va a crear la referencia cultural personalizada cargando datos de objetos CultureInfo y RegionInfo existentes y personalizándolo, debe desarrollar dos utilidades diferentes. La primera crea la referencia cultural personalizada y la guarda en un archivo XML. El segundo usa el método CreateFromLdml para cargar la referencia cultural personalizada desde un archivo XML y registrarla en el equipo de destino.
El proceso de registro realiza las siguientes tareas:
- Crea un archivo .nlp que contiene la información definida en el CultureAndRegionInfoBuilder objeto .
- Almacena el archivo .nlp en el directorio del sistema %windir%\Globalization en el equipo de destino. Esto permite que la configuración de la referencia cultural personalizada persista entre sesiones. (El CultureAndRegionInfoBuilder método requiere privilegios administrativos porque el archivo .nlp se almacena en un directorio del sistema).
- Prepara .NET para buscar en el directorio del sistema %windir%\Globalization en lugar de una caché interna la próxima vez que haya una solicitud para crear la nueva referencia cultural personalizada.
Cuando una referencia cultural personalizada se registra correctamente, es indistinguible de las referencias culturales predefinidas por .NET. La referencia cultural personalizada está disponible hasta que una llamada al CultureAndRegionInfoBuilder método quita el archivo .nlp del equipo local.
Creación de instancias de una referencia cultural personalizada
Puede crear una instancia de la referencia cultural personalizada de una de las maneras siguientes:
- Al invocar el constructor CultureInfo.CultureInfo con el nombre de la referencia cultural.
- Llamando al método CultureInfo.CreateSpecificCulture con el nombre de la referencia cultural.
- Llamando al método CultureInfo.GetCultureInfo con el nombre de la referencia cultural.
Además, la matriz de objetos CultureInfo devueltos por el método CultureInfo.GetCultures incluye la referencia cultural personalizada.