Создание специальных культур
54C# и .NET --- Основы .NET --- Создание специальных культур
В .NET Framework добавляется поддержка все большего количества языков. Тем не менее, пока в .NET доступны не все языки мира, поэтому предоставляется возможность создавать собственные специальные культуры. Это очень полезно, например, когда необходимо обеспечить поддержку какого-то мало употребляемого в пределах того или иного региона языка либо создать подкультуры для различных диалектов.
Для создания специальных культур и регионов в .NET служит класс CultureAndRegionInfoBuilder из пространства имен System.Globalization. Этот класс поставляется в сборке sysglobl.
Поскольку сборка sysglobl в подмножестве .NETFramework 4 Client Profile отсутствует, для ее использования в поле Target Framework (Целевая версия .NET Framework) параметров проекта должно быть установлено .NETFramework 4.
Конструктору класса CultureAndRegionlnfoBuilder передается имя культуры. Во втором аргументе указывается значение перечисления CultureAndRegionModifiers: Neutral для нейтральной культуры, Replacement для замены существующей культуры .NET Framework или None.
После создания экземпляра CultureAndRegionlnfoBuilder можно приступить к конфигурированию культуры, устанавливая различные свойства. С помощью свойств этого класса задается вся информация, связанная с культурой и регионом, такая как имя, календарь, числовой формат, метрики и т.д. Если параметры культуры должны быть основаны на параметрах каких-то существующих культур или регионов, свойства экземпляра можно устанавливать с использованием методов LoadDataFromCultureInfo() и LoadDataFromRegionInfo(), а затем с помощью свойств заменять значения, которые должны отличаться. Вызов метода Register() позволяет регистрировать новую культуру в операционной системе. После этого в каталоге <Windows>\Globalization появится файл с расширением .nlp, описывающий новую культуру:
using System;
using System.Globalization;
namespace CustomCultures
{
class Program
{
static void Main()
{
try
{
// Create a Styria culture
var styria = new CultureAndRegionInfoBuilder("de-AT-ST", CultureAndRegionModifiers.None);
var cultureParent = new CultureInfo("de-AT");
styria.LoadDataFromCultureInfo(cultureParent);
styria.LoadDataFromRegionInfo(new RegionInfo("AT"));
styria.Parent = cultureParent;
styria.RegionNativeName = "Steiermark";
styria.RegionEnglishName = "Styria";
styria.CultureEnglishName = "Styria (Austria)";
styria.CultureNativeName = "Steirisch";
styria.Register();
}
catch (UnauthorizedAccessException ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
Поскольку для регистрации специальных языков в операционной системе требуется наличие административных привилегий, нужно обязательно создать файл манифеста приложения, сообщающий о запрашиваемых правах на выполнение. Этот файл манифеста должен быть установлен в разделе параметров Application (Приложение) свойств проекта:
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
</asmv1:assembly>
Теперь вновь созданную культуру можно использовать наравне с другими культурами.