如何从C#中的lcid获取当前线程语言的语言名称
How to get language name in language of the current thread from lcid in C#
假设我有 3 个 LCID:
- 2057 - 英语(英国)
- 1034 - 西班牙语(西班牙)
- 1045 - 波兰语(波兰)
如何在当前 UI 线程的语言中检索语言的名称,例如我期望的波兰语:
- 2057 - 安吉尔斯基(Wielka Brytania)
- 1034 - Hiszpański(西班牙)
- 1045 - Polski(波兰语)
属性 NativeName
无法解决我的问题。
unicode 联盟确实维护着这种数据。我相信,它没有内置到 .net 框架中。
您可以在此处找到它,以及其他数据和有关 xml 数据的信息。
http://cldr.unicode.org/index/downloads
数据在LDML中,可以被框架原生使用。 https://msdn.microsoft.com/en-us/library/ms404373%28v=vs.85%29.aspx
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 的 en-US 版本,所以获取英文名称。
我已经将 link 发布到此 duplicate question。简而言之,语言名称是 .NET 资源。如果您想要本地化版本,则需要安装相应的语言包。
不同的框架有不同的语言包,例如4.5, 4.5.2。下载前需要select合适的语言版本。
返回资源的语言由调用线程的Thread.CurrentUICulture属性决定。这设置为与当前 OS 用户的 UI 语言设置匹配,因此您可能不需要更改代码中的任何内容。
请注意,这会影响 所有 可本地化的框架资源,包括 File not found
等异常消息
假设我有 3 个 LCID:
- 2057 - 英语(英国)
- 1034 - 西班牙语(西班牙)
- 1045 - 波兰语(波兰)
如何在当前 UI 线程的语言中检索语言的名称,例如我期望的波兰语:
- 2057 - 安吉尔斯基(Wielka Brytania)
- 1034 - Hiszpański(西班牙)
- 1045 - Polski(波兰语)
属性 NativeName
无法解决我的问题。
unicode 联盟确实维护着这种数据。我相信,它没有内置到 .net 框架中。
您可以在此处找到它,以及其他数据和有关 xml 数据的信息。 http://cldr.unicode.org/index/downloads
数据在LDML中,可以被框架原生使用。 https://msdn.microsoft.com/en-us/library/ms404373%28v=vs.85%29.aspx
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 的 en-US 版本,所以获取英文名称。
我已经将 link 发布到此 duplicate question。简而言之,语言名称是 .NET 资源。如果您想要本地化版本,则需要安装相应的语言包。
不同的框架有不同的语言包,例如4.5, 4.5.2。下载前需要select合适的语言版本。
返回资源的语言由调用线程的Thread.CurrentUICulture属性决定。这设置为与当前 OS 用户的 UI 语言设置匹配,因此您可能不需要更改代码中的任何内容。
请注意,这会影响 所有 可本地化的框架资源,包括 File not found