Создание и регистрация пользовательских типов Culturelnfo

Средства глобализации платформы .NET Framework всегда были ее сильной стороной. Однако всегда оставалась возможность для усовершенствований, и большая часть этих усовершенствований появились в .NET 2.0.

В частности, в .NET 1.1 всегда был болезненным процесс ввода новой описывающей культуру информации в систему, если каркасу не известна информация об этой культуре и регионе. В .NET 2.0 Framework пространство имен System. Globalization содержит новый класс по имени CultureAndRegionlnfoBuilder.

За счет применения CultureAndRegionlnf oBuilder появляется возможность определять и вводить в систему информацию, описывающую совершенно новую культуру и регион, а также регистрировать ее для глобального использования. Аналогично можно модифицировать уже существующую в системе информацию о культурах и регионах.

И если это еще недостаточно гибко, можно даже сериализовать информацию в файл LDML (Locale Data Markup Language — язык разметки данных локали), имеющий формат, основанный на XML.

После регистрации в системе новой культуры и региона можно создавать экземпляры Culturelnfo и Regionlnfо, применяя строковое имя, зарегистрированное в системе.

При назначении имен описаниям новых культур необходимо следовать стандартному формату именования культур. Здесь принят формат [префикс-] язык [-регион] [-суффикс […]], где обязательной частью является только идентификатор язык. Префикс может быть одним из следующих:

• i — для имен культур, зарегистрированных через IANA
• х — для всех прочих.

Вдобавок префиксная часть может быть представлена в верхнем или нижнем регистре. Часть языка представлена двухсимвольным кодом нижнего регистра в стандарте ISO 639-1, в то время как регион описан двухсимвольным кодом верхнего регистра, соответствующим стандарту ISO 3166.

Например, русский язык, на котором говорят в России, обозначается как ru-RU. Компонент суффикс используется для дополнительного уточнения культуры на основе некоторых данных. Скажем, сербский, на котором говорят в Сербии, может обозначаться либо sr-SP-Cyrl, либо sr-SP-Latn — один для кириллического алфавита, другой — для латинского.

При определении культуры, специфичной для подразделения компании, ее можно создать с использованием имени x-ru-RU-Компания-Подразделение.

Чтобы посмотреть, насколько легко использовать объект CultureAndRegionlnf oBuilder, попробуем создать фиктивную культуру на основе уже существующей. В США основной системой мер является английская. Предположим, что в какой-то момент США решили перейти на метрическую систему, и требуется модифицировать информацию о культуре на некоторых машинах, чтобы она соответствовала новым веяниям.

Посмотрим, как будет выглядеть необходимый код:

using System;
using System.Globalization;
public class EntryPoint
static void Main()  {
CultureAndRegionlnfoBuilder cib = null;
cib = new CultureAndRegionlnfoBuilder( "x-en-US-metric",
CultureAndRegionModifiers.None );
cib.LoadDataFromCulturelnfo ( new Culturelnfo("en-US") );
cib.LoadDataFromRegionlnfо ( new Regionlnfо("US") );
// Внести изменения.
cib.IsMetric = true;
// Создать файл LDML.
cib.Save( "x-en-US-metric.ldml" );
// Зарегистрировать в системе,
cib.Register ();

Чтобы предыдущий пример скомпилировав, понадобится специально сослаться на сборку sysglobl.dll. Для компиляции примера из командной строки воспользуйтесь следующей командой:
esc /rrsysglobl.dll example.cs

Как видите, процесс очень прост, поскольку CultureAndRegionlnf oBuilder имеет продуманный интерфейс. Для целей иллюстрации разметка LDML направляется в файл, чтобы можно было увидеть, как выглядит описание культуры, хотя оно довольно многословно, чтобы приводить его здесь.

Следует отметить один важный момент: для вызова метода Register необходимо обладать соответствующими привилегиями. Обычно нужно быть администратором, хотя это требование можно обойти, если изменить настройки доступа к каталогу %WINDIR%\Globalization и к ключу реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CustomLocale.

После того как культура зарегистрирована в системе, к ней можно обращаться по имени, которое ей было назначено при передаче информации о культуре в среду CLR.

Например, чтобы удостовериться, что информация о культуре и регионе зарегистрирована правильно, скомпилируйте и запустите следующий тестовый код:

using System;
using System.Globalization;
public class EntryPoint {
static void Main()  {
Regionlnfо ri = new Regionlnfо("x-en-US-metric");
Console.WriteLine( ri.IsMetric );

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100