2013-07-10 139 views
8

我正在編寫一個WPF應用程序,並且在文化方面遇到了一些困難。默認文化在.NET應用程序中設置的位置

我想知道在沒有明確設置值時,.NET應用程序在哪裏爲CurrentThread.CurrentCulture獲取值。這不是來自Windows文化信息,因爲我已經將它從en-US更改爲en-GB,而不會在運行時注意到應用程序中的任何更改。

請幫忙!

馬克

+0

採取這裏看看 http://stackoverflow.com/questions/2764615/wpf-stringformat-0c-showing-as-dollars 這應該解決您的問題,爲 –

回答

6

the fine manual

CultureInfo.CurrentCulture財產學習線程的默認文化是如何確定的,以及用戶如何設置他們的計算機文化信息。

One laborious click later...

如何線程的文化決定

當一個線程啓動時,它的文化被初步確定爲:

  • 通過檢索文化,是由執行線程的應用程序域中的DefaultThreadCurrentCulture屬性指定,如果屬性va lue不是null

  • 通過調用Windows GetUserDefaultLocaleName函數。

注意,如果你設置一個特定的文化,是從系統中安裝的文化或用戶首選的文化不同,應用程序啓動多個線程,這些線程的當前文化將被返回的文化通過GetUserDefaultLocaleName函數,除非您將文化分配給執行線程的應用程序域中的DefaultThreadCurrentCulture屬性。

有關如何確定線索文化的更多信息,請參閱CultureInfo主題中的「文化和線索」部分。

I didn't budget for another click, but clicked anyway

文化和線程

當一個新的應用程序線程啓動時,它目前的文化和當前UI區域性是當前系統的文化定義,而不是由當前線程的文化。以下示例說明了這種差異。它將應用程序線程的當前文化和當前UI文化設置爲法國(法國)文化(fr-FR)。如果現在的文化已經是FR-FR,那麼這個例子將其設置爲英國(美國)文化(en-US)。它將三個隨機數字顯示爲貨幣值,然後創建一個新線程,而該線程又將三個隨機數字顯示爲貨幣值。但是,正如示例的輸出所示,與主應用程序線程的輸出不同,新線程顯示的貨幣值不反映法國(法國)文化的格式約定。

注意,它說當一個新的應用程序線程開始。因此,考慮到你說:

,因爲我已經改變,從EN-US爲en-GB不運行時,應用程序注意到任何改變這不是從Windows的文化信息。

你可能想檢討this answer

+0

謝謝,我沒有看到這我第一次瀏覽MSDN時的信息。 – serlingpa

+0

@ user343159不要在我的諷刺中讀太多內容。我希望你的問題的答案在我所包含的其中一個鏈接中。 –

0

如果未指定特定文化或使用空字符串替代文化名稱,則使用InvariantCulture

它與英語有關,但與任何國家/地區無關。

相關問題