数据成员验证 - ISO 4217(货币)和639-1(语言)

时间:2013-04-19 16:18:40

标签: c# .net iso model-validation

因此,我希望在我目前正在开发的.NET项目中的某些模型上进行一些自定义数据字段验证。

这些涉及默认语言和默认货币。为了满足此应用程序的标准以及所涉及的各种其他应用程序和服务,货币必须是ISO 4217(3字符货币)标准,并且语言需要是ISO 639-1(2字符语言)。 / p>

看到没有为此任何地方进行模型验证,我很高兴设置它,在我开始制作一些巨大的自定义数据验证器之前,我想知道是否有人知道任何现有的库都可以轻松提供这些标准,即使它类似于检查我可以自己插入数据验证器的字符串。

非常感谢任何建议和/或建议。

3 个答案:

答案 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)