Как получить текущие региональные настройки в С#?
Обычно вы можете получить его, написав что-то вроде
CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture;
Но таким образом вы можете получить только CultureInfo, который был настроен в момент запуска приложения, и не будет обновляться, если после этого параметр был изменен.
Итак, как настроить CultureInfo в настоящее время настроено на панели управления → региональные и языковые настройки?
Ответы
Ответ 1
Как предложил @Christian ClearCachedData - метод. Но согласно MSDN:
Метод ClearCachedData не обновить информацию в Свойство Thread.CurrentCulture для существующие потоки
Итак, вам нужно сначала вызвать функцию, а затем запустить новый поток. В этом новом потоке вы можете использовать CurrentCulture для получения свежих значений культуры.
class Program
{
private class State
{
public CultureInfo Result { get; set; }
}
static void Main(string[] args)
{
Thread.CurrentThread.CurrentCulture.ClearCachedData();
var thread = new Thread(
s => ((State)s).Result = Thread.CurrentThread.CurrentCulture);
var state = new State();
thread.Start(state);
thread.Join();
var culture = state.Result;
// Do something with the culture
}
}
Обратите внимание, что если вам также нужно reset CurrentUICulture, вы должны сделать это отдельно
Thread.CurrentThread.CurrentUICulture.ClearCachedData()
Ответ 2
Thread.CurrentThread.CurrentCulture.ClearCachedData()
выглядит так, что данные культуры будут перечитываться при следующем доступе.
Ответ 3
Вы можете использовать функцию Win32 API GetSystemDefaultLCID.
Это означает следующее:
[DllImport("kernel32.dll")]
static extern uint GetSystemDefaultLCID();
Функция GetSystemDefaultLCID возвращает LCID. Он может отображать строку языка из следующей таблицы.
Идентификаторы локалей, назначенные Microsoft
Ответ 4
Мы столкнулись с этой проблемой с нашим приложением WinForms, и это произошло из-за того, что Visual Studio создала процесс [MyApp].vshost.exe, который всегда работает в фоновом режиме всякий раз, когда Visual Studio открыта.
Отключение настройки MyApp → Свойства → Отладка → "Включить процесс хостинга Visual Studio" исправила это для нас.
vshost в основном используется для улучшения отладки, но если вы не хотите отключать этот параметр, вы можете убить процесс по мере необходимости.
Ответ 5
В пространстве имен System.Globalization
есть классы CultureInfo
и TextInfo
. Оба класса получают несколько региональных параметров окна, определенных в панелях управления. Список доступных настроек приведен в документации.
Например:
string separator = CultureInfo.CurrentCulture.TextInfo.ListSeparator;
получает разделитель списка для выполняемой программы.
Ответ 6
Попробуйте найти настройки, которые вы хотите в SystemInformation
класс или посмотрите в WMI, используя классы в System.Management/System.Diagnostics
, вы можете также использовать LINQ to WMI
Ответ 7
[DllImport("kernel32.dll")]
private static extern int GetUserDefaultLCID();
public static CultureInfo CurrentCultureInRegionalSettings => new CultureInfo(GetUserDefaultLCID());