Изменение настроек ОС «Регион и язык» программно - PullRequest
5 голосов
/ 02 марта 2012

Я бы хотел иметь возможность изменить настройки Region and Language операционной системы (Windows 7) из программы на C #.Я не против выполнения команд командной строки, но я только дошел до того, как открыть диалог Region and Language : control /name Microsoft.RegionAndLanguage

Это проблема языковой локализациигде Control s, как DateTimePicker, может использовать только настройки Windows Region and Language (см. здесь details );однако обновление операционной системы для соответствия языковым настройкам приложения выходит за рамки этого и в конечном итоге является желаемой целью.

Предложения и / или обходные пути приветствуются.

Ответы [ 6 ]

4 голосов
/ 05 марта 2012

Единственное решение, которое мне удалось реализовать, - это изменить реестр. В Windows 7 при смене языка в реестр добавляется новая запись в подразделе: HKEY_CURRENT_USER\Control Panel\Desktop. Этот ключ будет содержать запись PreferredUILanguagesPending типа REG_MULTI_SZ, и его значение будет определять язык интерфейса пользователя. Для применения изменений текущий пользователь должен выйти и снова войти в систему. Это можно сделать с помощью следующего кода:

RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Control Panel\Desktop", true);
string[] lang = {"en-ZA"};
key.SetValue("PreferredUILanguagesPending", lang, RegistryValueKind.MultiString);

Чтобы установить языковой пакет, его необходимо установить. Для списка языковых пакетов проверьте здесь или здесь . Если установлено более 1 языкового пакета, опция изменения языка интерфейса появится в Control Panel > Region and Language > Keyboards and Languages > Display language.

3 голосов
/ 02 марта 2012

Звучит так, как будто достаточно изменить Культуру / UICulture вашего приложения

например

Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("de-DE");
1 голос
/ 02 марта 2012

Я нашел хорошую замену для DateTimePicker: http://www.visualhint.com/fieldpackeditor

У вас будут такие же проблемы со всеми элементами управления системой и системными диалогами, как OpenFileDialog, PrintDialog и т. Д., Они не локализуются в .NET.

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

0 голосов
/ 07 февраля 2019

Я нашел решение здесь: 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.

0 голосов
/ 02 марта 2012

Это проблема языковой локализации, когда элементы управления, такие как DateTimePicker, могут использовать только Windows> Регион и языковые настройки

NUTS. Шутки в сторону. Подумай о том, что ты здесь делаешь; Я запускаю вашу программу, а вы меняете весь мой компьютер, чтобы заставить работать небольшой элемент интерфейса? Желательно, не спрашивая и не говоря мне?

Существуют законы против этого - это можно рассматривать как несанкционированное манипулирование компьютером.

Используйте надлежащий контроль и правильно программируйте; но не совершайте саботаж на этом уровне.

0 голосов
/ 02 марта 2012

Я думаю, вы думаете противоположно тому, что вам нужно. Часто приложения (-ы) могут нуждаться в помощи / уважении / удовлетворении пользовательских настроек ОС, а не в их изменении для удобства приложения. Посмотрите на сообщение с проблемой, аналогичной вашей: Как я могу изменить региональные настройки / формат даты пользователя Windows *

...