2011-03-01 45 views
4

在* nix系統上,您可以執行locale -a以獲取可用區域設置的列表。Windows中的區域設置列表

Windows中的等效命令(或動作)是什麼?

我在互聯網上看過列表,但其中大多數只是區域設置標籤,而不是實際的區域設置名稱。另外,並非所有系統都能保證全部安裝,對嗎?

請注意,我在此定義的「語言環境」是「語言環境字符串」,即C的setlocale()的第二個參數,這將導致非空返回值。

程序化的答案也很好,我只是厭倦了蠻力猜測Windows語言環境名稱。

回答

6

最初,我找不到C/Win32 API來獲取信息。 (見後面的編輯。)但是,它看起來像.NET類System.Globalization.CultureInfo可以提供您需要的信息。具體請參閱CultureInfo.GetCultures()。這個網頁似乎有一個complete example你正在尋找。

編輯:如果您更喜歡C/Win32 API,請參閱EnumSystemLocales()函數以及簡單的example code

編輯2:This example顯示如何將LCID(從EnumSystemLocales()獲得)轉換爲可由setlocale()使用的字符串。

+0

那裏有非常好的語言環境信息,但仍然沒有可由setlocale()使用的語言環境字符串。 – aib 2011-03-01 11:48:55

+0

嘗試枚舉現在... – aib 2011-03-01 11:49:19

+0

[last]示例是一個開始,但我想知道它如何處理具有多個代碼頁的語言環境(更不用說語言或國家/地區)。看起來它只會提取默認的ANSI代碼頁或默認代碼頁(如果它不存在)。似乎也有默認的EBCDIC和MAC代碼頁面。並不重要;我得到了我的答案:沒有這樣的效用存在;必須仔細閱讀糟糕的NLS文檔,並以編程方式生成並消除語言環境名稱。 – aib 2011-03-01 12:25:46

1

This page似乎包含指向WIN32 setlocale可識別的語言和國家/地區列表的鏈接。但是:

一組可用的語言, 國家/地區代碼和代碼頁的 包括所有那些不同之處在於 要求每個 字符超過兩個字節代碼頁,如由 的Win32 NLS API支持UTF-7和UTF-8。如果 您提供了UTF-7或 UTF-8代碼頁,則setlocale將失敗,返回 NULL。

失敗。

+1

但是,我仍然對UTF-16支持感到好奇。 – aib 2011-03-01 12:26:16

+0

不用說UTF-32。即爲什麼不? :) – mlvljr 2011-04-01 12:29:29

+0

@mlvljr:* shrug *我想這是因爲UTF-32每個字符的確需要兩個以上的字節(UTF-16也是如此,但UTF-32的功能更多 - 一些要求比其他要求更重要)。想想看,UTF-32更容易實現。 – aib 2011-04-03 05:09:26