Проблема с английской неамериканской культурой

Я могу использовать Set-Culture (Powershell as Admin), чтобы установить текущую культуру в "en-DE" который английский (Германия). Тем не менее, когда я запускаю различные команды PS для просмотра текущей культуры, я все еще получаю en-US, Я также проверил свой регион (формат) и местоположение.

Должен ли я также изменить язык системы на немецкий (немецкий)?

Это вызывает ошибку в приложении, потому что формат даты и времени отличается от en-DE на en-US и приводит к неправильному чтению даты.

Когда я Set-Culture в de-DEвсе, кажется, в рабочем состоянии.

Я уверен, что запустить Powershell Console от имени администратора, Set-CultureЗакрой консоль. Откройте Powershell и запустите Get-Culture, [CultureInfo]::CurrentCulture, [CultureInfo]::CurrentUICulture и еще несколько, чтобы проверить и до сих пор получать en-US

1 ответ

Решение

Примечание: использование en-DE как идентификатор культуры, т. е. смешивание языка en (Английский) с обычно не связанным регионом / страной DE (Германия) - требуется Windows 10 с выпуском канала 1607 или позже или Windows Server 2016, в соответствии с Microsoft.

Однако есть ошибка, которая не позволяет использовать такие смешанные культуры, наблюдаемые в Windows 10 Pro (64-разрядная; Версия 1709, сборка ОС: 16299.371)

В то время как вы можете успешно установить такие значения смешанной культуры с Set-Culture последующие сеансы не распознают его и возвращаются к en-US (как отражено в $PSCulture, Get-Culture а также [cultureinfo]::currentCulture)


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


Set-Culture - через реестр - устанавливает культуру для будущих сеансов PowerShell (только), но не (также) для текущего сеанса.

Get-Culture напротив, только когда-либо сообщает о культуре текущего сеанса во время запуска сеанса. То есть, если вы измените культуру во время сеанса (см. Ниже), это не будет отражено в Get-Culture,

Чтобы также применить вновь установленную культуру к текущему сеансу, выполните следующие действия в дополнение к Set-Culture вызов:

[cultureinfo]::CurrentCulture = 'de-DE'

Предостережение о интерактивном (командной строке) использовании:

  • В Windows PowerShell (все еще начиная с версии 5.1) активная культура сбрасывается после каждой отправленной команды; например,
    [cultureinfo]::CurrentCulture = 'de-DE'; Get-Date работает, как и ожидалось, потому что он является частью той же командной строки, но при выполнении просто Get-Date в качестве следующей команды текущая культура вернулась к той, которая была текущей во время запуска сеанса.
    • Эта проблема была исправлена ​​в PowerShell Core.

Это возможно удивительная асимметрия - Set-Culture применяется только к будущим сессиям, но Get-Culture отчетность о культуре текущего сеанса (запуска) - это то, что может измениться в будущих версиях PowerShell Core.

Другие вопросы по тегам