2009-10-11 59 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建议的方法