Установка большего количества культур на Windows Server 2012
На компьютере с Windows 8.1 я вижу гораздо больше доступных культур, чем на компьютере с Windows Server 2012: 791 против 378. Чтобы привести конкретный пример, на компьютере сервера отсутствует культура "en-HK".
Вот тестовый код, который я использую для перечисления их:
foreach (var ci in CultureInfo.GetCultures(System.Globalization.CultureTypes.AllCultures).OrderBy(ci => ci.Name))
{
Console.WriteLine("{0} ({1})", ci.Name, ci.EnglishName);
}
Вопрос: как я могу установить более полный список культур на Windows Server 2012, чтобы он соответствовал тому, что доступно в Windows 8.1?
1 ответ
Исправление заключается в обновлении ОС машины, на которой работает ваша система. Как описано здесь...
en-HK поддерживается в "Выпуске 8.1"
Выпуск 8.1 соответствует "Windows 8.1 и Windows Server 2012 R2. Поддерживается во всех более поздних версиях".
Так что да, вы увидите en-HK в Windows 8.1, чтобы увидеть его на своем сервере, установив пакет обновления R2.
Вот несколько Powershell, которые я использовал для добавления пользовательских культур в 2012 году. Это жестко запрограммированный скрипт (извините, грубый!). Основы новой культуры ($newCulture
) на существующий, в данном случае en-US.
Это основано на примере кода C# из MSDN в разделе "Как: создать пользовательские культуры": https://msdn.microsoft.com/en-us/library/ms172469(v=vs.100).aspx
Надеюсь, поможет!
###################################
# Add-Culture
#
# Edit script to add a new custom culture
#
###################################
function Add-Culture($Servers, $Credential) {
Invoke-Command {
# Import System.Globalization
Add-Type -AssemblyName "sysglobl"
$newCulture = "en-TH"
# Create new CultureAndRegionInfoBuilder
$cib = New-Object "System.Globalization.CultureAndRegionInfoBuilder" -Args $newCulture, None
# Based on existing en-US culture
$ci = New-Object "System.Globalization.CultureInfo" -Args "en-US"
$ri = New-Object "System.Globalization.RegionInfo" -Args "th-TH"
$cib.LoadDataFromCultureInfo($ci)
$cib.LoadDataFromRegionInfo($ri)
# Set culture values here
# Naming
$cib.CultureEnglishName = "English (Thailand)"
$cib.CultureNativeName = "English (Thailand)"
$cib.IetfLanguageTag = $newCulture
# RegionInfo
$cib.RegionEnglishName = "Thailand"
$cib.RegionNativeName = "Thailand"
# ISO
$cib.ThreeLetterISOLanguageName = "eng"
$cib.ThreeLetterWindowsLanguageName = "ENG"
$cib.TwoLetterISOLanguageName = "en"
$cib.ThreeLetterISORegionName = "THA"
$cib.TwoLetterISORegionName = "TH"
$cib.ThreeLetterISORegionName = "THA"
$cib.ThreeLetterWindowsRegionName = "THA"
# Currency
$cib.ISOCurrencySymbol = "THB"
$cib.CurrencyEnglishName = "Thai Baht"
$cib.CurrencyNativeName = "Thai Baht"
$cib.NumberFormat.CurrencySymbol = "฿"
# Dates
$cib.GregorianDateTimeFormat.ShortDatePattern = "d/M/yyyy";
# Print values
Write-Verbose ($cib | Format-List | Out-String)
Write-Verbose ($cib.GregorianDateTimeFormat | Format-List | Out-String)
Write-Verbose ($cib.NumberFormat | Format-List | Out-String)
$cib.Register();
} -ComputerName $Servers -Credential $Credential
Write-Output "Registered new culture $newCulture on $servers"
}