2015-10-26 70 views
1

從MSDN有關FormatMessage功能:什麼是語言中立,用戶默認LANGID和系統默認LANGID?

如果在零傳遞,FormatMessage會查找LANGIDs在 下列順序的消息:

  • 中性語言
  • 主題LANGID,基於線程的語言環境值
  • 用戶默認LANGID,基於用戶的默認語言環境值
  • 系統默認LANGID,基於系統默認區域值
  • 美國英語

但零是中性語言已經,因爲值爲語言中立爲0 ...

LCID lang = MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL); // 0 

什麼是語言中和?任何電腦都一樣嗎?如果「是」,那麼它是en-US

又是什麼系統默認LANGID?它與屏幕上的相同嗎?

enter image description here

而且什麼是用戶默認LANGID?這三個本地化之間有什麼區別?它們的值存儲在Windows操作系統設置中的位置?

+0

相關/可能的重複:[什麼'語言中立'是關於MAKELANGID?](http://stackoverflow.com/questions/3234736/what-does-language-neutral-mean-with-regard-to -makelangid) – NathanOliver

+0

我沒有在你的鏈接中看到我的問題上的明確ansewer。零(即0)與LCID lang = MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL)相同;即,零變量是「語言中立」。這三個本地化之間的區別是什麼?他們的價值存儲在哪裏? –

+0

Opps。抱歉。我實際上正在查看從該答案到[本頁]的鏈接(https://msdn.microsoft.com/en-us/library/ms534732(VS.85).aspx),其中有:*類型:LANGID 可選。指定要使用的語言的十六位值。默認值是LANG_NEUTRAL,這是用戶的默認語言。* – NathanOliver

回答

1

如果說語言中立的代替中性語言爲的FormatMessage MSDN文檔可能會更容易理解。 Windows MUI資源可以是語言特定的或語言中立的(您可以瞭解有關此主題here的更多信息)。使用dwLanguageId=0調用FormatMessage會告訴Windows嘗試從語言中立資源中加載給定的dwMessageID的字符串。如果該字符串不存在於與語言無關的資源中,Windows會嘗試使用LANGID(線程缺省值,用戶缺省值,系統缺省值1033)的記錄順序從語言特定的資源加載該字符串。這有點不尋常,因爲不考慮進程默認的LANGID。

用戶默認 LANGID是你從呼叫GetUserDefaultUILanguage回來。您可以在控制面板中更改它(對於Windows 8.1:控制面板\時鐘,語言和區域\語言)。 GetSystemDefaultUILanguage返回系統默認值 LANGID。我希望您可以在您發佈的屏幕上更改它,但我不確定上部或下部按鈕是否正確。恐怕我不知道這些設置的存儲位置。

+0

感謝您的答覆,** Jenszcz **。我現在瞭解它。即使我將我在屏幕上指向的設置切換到英語(美國)並重新加載我的電腦,「GetUserDefaultUILanguage」和「GetSystemDefaultUILanguage」始終會爲我的電腦返回「1049」。 –

+0

@AndreyBushman,您可能需要使用您發佈的屏幕上的上部按鈕來更改_system default_ locale(對不起,我無法正確讀取西里爾文)。我會嘗試自己,但目前我無法重新啓動機器...。可能您應該首先更改_user default_語言:[本文](https://msdn.microsoft.com/en-us/library/windows/desktop/dd374098(v=vs.85).aspx)有更多信息系統默認和用戶默認語言。不幸的是,它沒有俄文翻譯,可以幫助您在控制面板中找到合適的位置。 :-( – Jenszcz