假设我有3个LCID:
如何检索当前UI线程语言的语言名称,例如波兰语我期望的那样:
属性NativeName
不是我问题的解决方案。
答案 0 :(得分:1)
LCID在Windows中已弃用,它现在使用.NET中熟悉的区域设置标识符,例如" en-US"。当然最好加入这个潮流。您仍然可以对遗留函数GetLocaleInfo()进行调整以获取此信息,并通过LOCALE_SCOUNTRY获取本地化的国家/地区名称。示例程序:
using System;
using System.Text;
using System.Runtime.InteropServices;
class Program {
static void Main(string[] args) {
var buffer = new StringBuilder(256);
if (GetLocaleInfo(2057, 6, buffer, buffer.Capacity) == 0) {
throw new System.ComponentModel.Win32Exception();
}
Console.WriteLine(buffer.ToString());
Console.ReadLine();
}
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern int GetLocaleInfo(int LCID, int LCType, StringBuilder buffer, int buflen);
}
输出:英国
我使用的是美国版本的Windows,所以请输入英文名称。
答案 1 :(得分:1)
我已经发布了此duplicate question的链接。简而言之,语言名称是.NET资源。如果您需要本地化版本,则需要安装相应的语言包。
不同的框架有不同的语言包,例如4.5,4.5.2。您需要在下载前选择适当的语言版本。
返回资源的语言由调用线程的Thread.CurrentUICulture属性决定。这设置为与当前OS用户的UI语言设置相匹配,因此您可能不需要更改代码中的任何内容。
请注意,这会影响所有可本地化的框架资源,包括File not found
等异常消息
答案 2 :(得分:0)
unicode联盟确实维护了这种数据。我相信,它不是内置于.net框架中的。
您可以在此处找到它,以及其他数据和有关xml数据的信息。 http://cldr.unicode.org/index/downloads
数据采用LDML格式,可由框架本机使用。 https://msdn.microsoft.com/en-us/library/ms404373%28v=vs.85%29.aspx