簡體   English   中英

如何從C#中的lcid獲取當前線程語言的語言名稱

[英]How to get language name in language of the current thread from lcid in C#

假設我有3個LCID:

  • 2057年 - 英語(英國)
  • 1034 - 西班牙語(西班牙)
  • 1045 - 波蘭語(波蘭)

如何檢索當前UI線程語言的語言名稱,例如波蘭語我預期:

  • 2057年 - Angielski(Wielka Brytania)
  • 1034年 - Hiszpański(Hiszpania)
  • 1045年 - 波蘭(波蘭)

屬性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.54.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM