[英]How to get language name in language of the current thread from lcid in C#
假設我有3個LCID:
如何檢索當前UI線程語言的語言名稱,例如波蘭語我預期:
屬性NativeName
不是我的問題的解決方案。
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);
}
產出:英國
我正在使用en-US版本的Windows,所以獲取英文名稱。
我已經發布了這個重復問題的鏈接。 簡而言之,語言名稱是.NET資源。 如果需要本地化版本,則需要安裝相應的語言包。
有不同的框架,例如用於不同的語言包4.5 , 4.5.2 。 您需要在下載之前選擇適當的語言版本。
返回資源的語言由調用線程的Thread.CurrentUICulture屬性確定。 這設置為與當前OS用戶的UI語言設置相匹配,因此您可能不需要更改代碼中的任何內容。
請注意,這會影響所有可本地化的框架資源,包括File not found
等異常消息
unicode聯盟確實維護了這種數據。 我相信,它不是內置於.net框架中的。
您可以在此處找到它,以及其他數據和有關xml數據的信息。 http://cldr.unicode.org/index/downloads
數據采用LDML,可以由框架本機使用。 https://msdn.microsoft.com/en-us/library/ms404373%28v=vs.85%29.aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.