我正在创建一个基于 mcr.microsoft.com/dotnet/framework/runtime:4.8
的 docker 容器基础图像。
此图像设置为 en_US
,这意味着所有 Windows 语言和区域设置以及默认位置都设置为美国。
我需要做的是将其更改为 en_GB
并将位置更改为 United Kindom
对于默认用户,因为我有一个 .Net 应用程序,它依赖于使用它来将数据输出到 Excel 的 3rd 方库。但是,到目前为止,我尝试过的任何内容似乎都无法更改语言和区域设置。
到目前为止我尝试过的事情:
intl.cpl
用于导入设置并更新默认用户的国际设置:# Set Locale and language
& $env:SystemRoot\System32\control.exe "intl.cpl,,/f:`"UKRegion.xml`""
# Set Languages/culture
Set-Culture en-GB
UKRegion.xml 的内容:
<gs:GlobalizationServices xmlns:gs="urn:longhornGlobalizationUnattend">
<!--User List-->
<gs:UserList>
<gs:User UserID="Current" CopySettingsToDefaultUserAcct="true" CopySettingsToSystemAcct="true"/>
</gs:UserList>
<!-- user locale -->
<gs:UserLocale>
<gs:Locale Name="en-GB" SetAsCurrent="true"/>
</gs:UserLocale>
<!-- system locale -->
<gs:SystemLocale Name="en-GB"/>
<!-- GeoID -->
<gs:LocationPreferences>
<gs:GeoID Value="242"/>
</gs:LocationPreferences>
<gs:MUILanguagePreferences>
<gs:MUILanguage Value="en-GB"/>
<gs:MUIFallback Value="en-US"/>
</gs:MUILanguagePreferences>
<!-- input preferences -->
<gs:InputPreferences>
<!--en-GB-->
<gs:InputLanguageID Action="add" ID="0809:00000809" Default="true"/>
</gs:InputPreferences>
</gs:GlobalizationServices>
powershell
中启动应用程序之前设置值脚本:Set-WinSystemLocale -SystemLocale en-GB
Set-WinHomeLocation -GeoId 242
Set-WinUserLanguageList -LanguageList (New-WinUserLanguageList -Language en-GB) -Force
Set-Location -Path "C:\\AppFolder"
.\AppExe.exe
设置容器并附加后,我可以看到
Get-WinHomeLocation
已更新,Get-WinUserLanguageList
显示 en_GB
作为一个选项,但是 Windows 的默认语言来自 Get-WinSystemLocale
仍然返回 en-US
我还考虑从 en-GB Windows Server Core 基础镜像构建我自己的基础镜像,并运行 Microsoft 运行的框架设置来创建 Framework 运行时 4.8 镜像,但 Microsoft 似乎没有发布 en-GB 基础镜像!
有没有其他人遇到过这个?你是怎么解决的?还有其他建议吗?
最佳答案
答案是 Docker 容器在使用进程隔离时从主机继承语言设置。因此,根据需要更改主机的语言设置。在 PowerShell 中,要设置区域,您可以执行以下操作:
Set-WinSystemLocale en-GB
Restart-Computer
现在运行 Docker:
docker run -it --isolation=process mcr.microsoft.com/windows/servercore:1909 PowerShell
在 Docker shell 中:
Get-WinSystemLocale
LCID Name DisplayName
---- ---- -----------
2057 en-GB English (United Kingdom)
关于c# - 在 Windows Docker 容器中设置语言和区域设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58168226/