因此,我希望在我目前正在开发的.NET项目中的某些模型上进行一些自定义数据字段验证。
这些涉及默认语言和默认货币。为了满足此应用程序的标准以及所涉及的各种其他应用程序和服务,货币必须是ISO 4217(3字符货币)标准,并且语言需要是ISO 639-1(2字符语言)。 / p>
看到没有为此任何地方进行模型验证,我很高兴设置它,在我开始制作一些巨大的自定义数据验证器之前,我想知道是否有人知道任何现有的库都可以轻松提供这些标准,即使它类似于检查我可以自己插入数据验证器的字符串。
非常感谢任何建议和/或建议。
答案 0 :(得分:3)
好的,所以我找到了一个可行的解决方案。它有点不雅,但它确实有效。
可以在System.Globalization命名空间中的RegionInfo对象上找到ISO 639-1(2字符语言)代码作为TwoLetterISORegionName属性。
ISO 4217(3字符货币)代码可以在同一对象的ISOCurrenySymbol属性中找到。
要创建区域信息,请使用:
new RegionInfo(Int32)
其中int是文化标识符
要生成文化标识符列表,使用起来非常简单
System.Globalization.CultureInfo.GetCultures(CULTURETYPE)
其中CULTURETYPE是各种文化类型的枚举或相应数字(只需确保选择一个不包含中性文化的文化,因为这些文化没有正确映射)。这将返回CultureInfo对象的数组,每个对象都包含一个LCID属性。此属性可用于构造相应的RegionInfo,您可以从中获取所需的内容。
答案 1 :(得分:2)
我自己也遇到过同样的问题,我认为你的问题也可以通过我找到的这些来源解决。
此来源告诉我们如何找到与ISO 4217格式的货币代码相关联的 CultureInfo 对象。
http://eddietech.blogspot.com.es/2008/01/find-cultureinfo-by-iso-currency-code.html
对于每个对象(可以使用相同的货币代码可以有多个文化),您可以阅读关联的ISO 639-1格式语言代码的 TwoLetterISOLanguageName 属性。
您还可以阅读每个CultureInfo对象的Name属性,您可以在其中找到"(ISO 639-1) - (ISO 3166)" (该文化的每个代码长2个字母)(例如:" es-ES"," en-GB"等)。
可以找到在C#中涵盖此主题的另一个重要来源here。
答案 2 :(得分:2)
Kira Namida的回答:
撒上litle Linq,这将是系统中已知的所有已知ISO 4217字符的列表:
using System.Globalization;
using System.Linq;
IEnumerable<string> currencySymbols = CultureInfo.GetCultures(CultureTypes.SpecificCultures) //Only specific cultures contain region information
.Select(x => (new RegionInfo(x.LCID)).ISOCurrencySymbol)
.Distinct()
.OrderBy(x=>x)