2009-10-11 68 views
2

我嘗試使用國家代碼獲取CultureInfo。我使用hostip.info來獲取國家代碼。獲取cultureinfo和國家代碼

例如,「http://api.hostip.info/?ip=207.46.197.32&position=true」將國家代碼返回給我「US」或返回「TR」的http://api.hostip.info/?ip=82.151.131.196&position=true

如果我可以擁有「en-US」,「tr-TR」,這很容易,但我不能擁有這些文化名稱。我有國家代碼。

那麼有什麼辦法可以讓CultureInfo獲得國家代碼,或者您是否有任何建議使用IP地址獲取CultureInfo?

回答

1

我不確定你可以在實踐中做到這一點。

如果你有瑞士,加拿大或印度作爲國家代碼你想要哪種語言?

+0

是的,你說的對,如果我能從IP地址獲得CultureName會更好嗎?有什麼方法或什麼是使用IP地址進行本地化的最佳方式? – Can

2

如果請求由瀏覽器完成,HTTP請求頭中的「Accept-Language」字段將列出所需的文化。誠然,它不是來自IP,但它可能是一個解決方案,如果你有HTTP請求頭。

例如,

接受語言:EN-US,EN

1

官方的公共標準是最更好的來源使用。 請參閱「CLDR - Unicode通用語言環境數據存儲庫」,地址爲http://cldr.unicode.org/

數據文件可供下載。有趣的文件和建議可用。

+0

'可能的子標籤'部分是你想要的,特別是http://www.unicode.org/reports/tr35/#Likely_Subtags和http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/ likely_subtags.html –

0

我面臨同樣的問題,因爲我從第三方IP本地化庫獲取國家代碼。所以,這是我的解決方案。

首先,我嘗試通過國家代碼獲取文化信息。如果失敗我檢索到的所有cultrure信息,然後我搜索包含國名的一個(也有可能的方式是國家代碼(US)包含在CultureInfo.Name場(EN-US))

ci = CultureInfo.GetCultures(CultureTypes.AllCultures).Where(c => c.EnglishName.Contains(loc.countryName)).FirstOrDefault(); 

如果國家有不止一種文化,那麼我遵循Doug Domeny建議的方法