Установка большего количества культур на 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 ответ

Исправление заключается в обновлении ОС машины, на которой работает ваша система. Как описано здесь...

https://docs.microsoft.com/en-gb/openspecs/windows_protocols/ms-lcid/a9eac961-e77d-41a6-90a5-ce1a8b0cdb9c

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"
}
Другие вопросы по тегам