Да, en-EN
действительно неверный идентификатор культуры.Однако в Windows 10 поведение обработки недопустимых идентификаторов немного изменилось .
У вас есть два основных варианта:
- Использовать допустимый идентификатор.Для английского языка в Англии вы должны использовать
en-GB
- Если желаемая культура Англии отличается от
en-GB
, зарегистрируйте новую культуру.
Таким образом вы можете зарегистрировать новуюкультура:
У культур есть иерархия, где корнем всегда является CultureInfo.InvariantCulture
.Условно названия культур отражают эту иерархию.Так, например, en-GB
, которая является культурой, специфичной для региона (Великобритания), происходит от en
, которая является независимой от региона английской культурой, а ее родителем является инвариантная культура.
Если вы хотите создать специфичную для Англии культуру, основанную на en-GB
, то вам следует назвать ее как en-GB-England
var parent = CultureInfo.GetCultureInfo("en-GB");
var builder = new CultureAndRegionInfoBuilder("en-GB-England", CultureAndRegionModifiers.None);
builder.LoadDataFromCultureInfo(parent);
builder.LoadDataFromRegionInfo(new RegionInfo(parent.Name));
builder.Parent = parent;
builder.CultureEnglishName = "English (Great Britain, England)";
builder.CultureNativeName = builder.CultureEnglishName;
try
{
builder.Register();
}
catch (UnauthorizedAccessException e)
{
// You must run this code with Administrator rights
throw;
}
catch (InvalidOperationException e) when (e.Message.Contains("already exists"))
{
// culture is already registered
}
var enEN = CultureInfo.GetCultureInfo("en-GB-England");