以编程方式更改“区域和语言”操作系统设置

时间:2012-03-02 08:46:49

标签: c# localization datetimepicker

我希望能够从C#程序更改操作系统(Windows 7)的区域和语言设置。我并不反对执行命令行命令,但我只是发现了如何启动区域和语言对话框:control /name Microsoft.RegionAndLanguage

这是一个语言本地化问题,Control只有DateTimePicker只能使用Windows 区域和语言设置(请参阅此处details);但是,更新操作系统以符合应用程序的语言设置不仅限于此,而且最终是期望的目标。

建议和/或解决方法将不胜感激。

6 个答案:

答案 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);

语言包需要先安装才能设置。有关语言包列表,请选中herehere。如果安装了多个语言包,则更改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

所有系统控件和系统对话框(例如OpenFileDialogPrintDialog等)都会遇到相同的问题,它们在.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元素工作?最好不要求或告诉我?

有法律禁止 - 这可以被视为未经授权操纵计算机。

使用适当的控制并正确编程;但不要在那个级别上进行破坏。

相关问题