1

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

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

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

任何意见和/或建议将不胜感激。

4

3 回答 3

3

好的,所以我找到了一个可行的解决方案。这有点不雅,但它有效。

ISO 639-1(2 字符语言)代码可作为 System.Globalization 命名空间中 RegionInfo 对象的 TwoLetterISORegionName 属性找到。

ISO 4217(3 个字符的货币)代码可以在同一对象的 ISOCurenySymbol 属性中找到。

要创建区域信息,请使用:

new RegionInfo(Int32)

其中 int 是文化标识符

要生成文化标识符列表,使用起来非常简单

System.Globalization.CultureInfo.GetCultures(CULTURETYPE)

其中 CULTURETYPE 是各种文化类型的枚举或各自的数字(请务必选择不包含中性文化的一种,因为这些文化无法正确映射)。这将返回一个 CultureInfo 对象数组,每个对象都包含一个 LCID 属性。此属性可用于构造相应的 RegionInfo,您可以从那里获取所需的内容。

于 2013-05-03T12:45:30.940 回答
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# 中涵盖此主题的另一个重要资源。

于 2013-05-30T10:03:03.160 回答
2

由 Kira Namida 的回答开始:

撒上一点 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)
于 2015-12-23T14:34:07.440 回答