通常你可以通过编写像
这样的东西来获得它 CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture;
但是这样你只能获得在启动应用程序时配置的CultureInfo,如果之后设置已经更改,则不会更新。
那么,如何在Control Panel中配置CultureInfo - >区域和语言设置?
答案 0 :(得分:29)
正如@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
}
}
请注意,如果您还需要重置CurrentUICulture,则应单独执行
Thread.CurrentThread.CurrentUICulture.ClearCachedData()
答案 1 :(得分:6)
Thread.CurrentThread.CurrentCulture.ClearCachedData()
看起来会导致文化数据在下次访问时被重新读取。
答案 2 :(得分:3)
您可以使用Win32 API函数GetSystemDefaultLCID。 签名如下:
[DllImport("kernel32.dll")]
static extern uint GetSystemDefaultLCID();
GetSystemDefaultLCID函数返回LCID。它可以映射下表中的语言字符串。 Locale IDs Assigned by Microsoft
答案 3 :(得分:2)
我们使用WinForms应用程序遇到了这个问题,这是因为Visual Studio创建的[MyApp] .vshost.exe进程在Visual Studio打开时始终在后台运行。
关闭MyApp - >属性 - >调试 - > “启用Visual Studio托管过程”设置为我们修复了此问题。
vshost进程主要用于改进调试,但如果您不想禁用该设置,则可以根据需要终止该进程。
答案 4 :(得分:1)
命名空间CultureInfo
中有类TextInfo
和System.Globalization
。这两个类都获得了控制面板中定义的几个窗口区域设置。可用设置列表位于文档中。
例如:
string separator = CultureInfo.CurrentCulture.TextInfo.ListSeparator;
正在获取正在运行的程序的列表分隔符。
答案 5 :(得分:1)
[DllImport("kernel32.dll")]
private static extern int GetUserDefaultLCID();
public static CultureInfo CurrentCultureInRegionalSettings => new CultureInfo(GetUserDefaultLCID());
答案 6 :(得分:0)
尝试在SystemInformation
中找到您想要的设置
使用System.Management/System.Diagnostics
中的类来查找或查看WMI,您也可以使用LINQ to WMI
答案 7 :(得分:0)
这个简单的代码对我有用(避免缓存):
// Clear cached data for the current culture
Thread.CurrentThread.CurrentCulture.ClearCachedData();
// In a new thread instance we get current culture.
// This code avoid getting wrong cached cultureinfo objects when user replaces some values in the regional settings without restarting the application
CultureInfo currentCulture = new Thread(() => { }).CurrentCulture;