我希望能够从C#程序更改操作系统(Windows 7)的区域和语言设置。我并不反对执行命令行命令,但我只是发现了如何启动区域和语言对话框:control /name Microsoft.RegionAndLanguage
这是一个语言本地化问题,Control
只有DateTimePicker
只能使用Windows 区域和语言设置(请参阅此处details);但是,更新操作系统以符合应用程序的语言设置不仅限于此,而且最终是期望的目标。
建议和/或解决方法将不胜感激。
答案 0 :(得分:4)
我设法实现的唯一解决方案是修改注册表。在Windows 7中,更改语言时,会在子项中将新条目添加到注册表中:HKEY_CURRENT_USER\Control Panel\Desktop
。此密钥将包含PreferredUILanguagesPending
类型的条目REG_MULTI_SZ
,其值将决定UI语言。要应用更改,当前用户需要注销并再次登录。这可以使用以下代码完成:
RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Control Panel\Desktop", true);
string[] lang = {"en-ZA"};
key.SetValue("PreferredUILanguagesPending", lang, RegistryValueKind.MultiString);
语言包需要先安装才能设置。有关语言包列表,请选中here或here。如果安装了多个语言包,则更改UI语言的选项将显示在Control Panel > Region and Language > Keyboards and Languages > Display language
。
答案 1 :(得分:3)
听起来好像改变应用程序的Culture / UICulture应该足够了
e.g。
Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("de-DE");
答案 2 :(得分:1)
我找到了DateTimePicker
的一个很好的替代品:
http://www.visualhint.com/fieldpackeditor
所有系统控件和系统对话框(例如OpenFileDialog
,PrintDialog
等)都会遇到相同的问题,它们在.NET中无法本地化。
但是考虑一下,为什么要改变应用程序的文化?用户可以使用控制面板自行更改其区域和语言设置,为什么您的应用程序会覆盖这些设置?
答案 3 :(得分:0)
我认为,你正在思考你需要的东西。应用程序通常需要帮助/尊重/满足用户操作系统设置,而不是为了方便应用程序而更改它们。请查看与您的问题类似的帖子:How can I change a Windows user's regional settings/date format?
答案 4 :(得分:0)
我在这里找到了解决方案:https://msdn.microsoft.com/en-ie/goglobal/bb964650(en-us).aspx
您需要创建一个具有以下内容的XML文件:
<gs:GlobalizationServices xmlns:gs="urn:longhornGlobalizationUnattend">
<gs:UserList>
<gs:User UserID="Current"/>
</gs:UserList>
<gs:UserLocale>
<gs:Locale Name="en-US" SetAsCurrent="true"/>
</gs:UserLocale>
</gs:GlobalizationServices>
然后运行以下命令:
control intl.cpl,, /f:"<path to XML file>"
这会将当前登录用户的格式设置为English (United States)
。
尽管本文是有关Windows Vista的,但它也适用于Windows 7。
答案 5 :(得分:-1)
这是一个语言本地化问题,其中像DateTimePicker这样的控件只能使用 Windows&gt;区域和语言设置
螺母。认真。想想你在这里做了什么;我启动你的程序,你重新配置我的整个计算机,使一个小的UI元素工作?最好不要求或告诉我?
有法律禁止 - 这可以被视为未经授权操纵计算机。
使用适当的控制并正确编程;但不要在那个级别上进行破坏。