1

そのため、現在取り組んでいる .NET プロジェクトのいくつかのモデルでカスタム データ フィールド検証を行うことを検討しています。

これらには、既定の言語と既定の通貨が含まれます。このアプリケーションおよび関連する他のさまざまなアプリケーションとサービスの基準を満たすためには、通貨が ISO 4217 (3 文字の通貨) 標準である必要があり、言語が ISO 639-1 (2 文字の言語) である必要があります。

このためのモデル検証はまだどこにも行われていないので、私はそれをセットアップする喜びを感じています。巨大なカスタム データ バリデーターを作成する前に、これらの標準を容易に提供する既存のライブラリを誰かが知っているかどうか疑問に思っていました。自分で Data Validator にプラグインできる文字列をチェックするようなものであれば。

アドバイスや推奨事項は大歓迎です。

4

3 に答える 3

3

さて、これに対する実行可能な解決策を見つけました。少しエレガントではありませんが、機能します。

ISO 639-1 (2 文字言語) コードは、System.Globalization 名前空間の RegionInfo オブジェクトの TwoLetterISORegionName プロパティとして見つけることができます。

ISO 4217 (3 文字の通貨) コードは、同じオブジェクトの ISOCurrencySymbol プロパティにあります。

地域情報を作成するには、次を使用します。

new RegionInfo(Int32)

int はカルチャ識別子です

カルチャ識別子のリストを生成するには、非常に簡単に使用できます

System.Globalization.CultureInfo.GetCultures(CULTURETYPE)

ここで、CULTURETYPE は、さまざまなカルチャ タイプの列挙型またはそれぞれの番号です (これらは正しくマッピングされないため、ニュートラル カルチャを含まないものを必ず選択してください)。これは、それぞれが LCID プロパティを含む CultureInfo オブジェクトの配列を返します。このプロパティは、それぞれの RegionInfo を構築するために使用でき、そこから必要なものを取得できます。

于 2013-05-03T12:45:30.940 に答える
2

キラ・ナミダの答えから始めました:

少し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 に答える
2

私自身も同じ問題を抱えていましたが、私が見つけたこの情報源であなたの問題も解決できると思います.

このソースは、ISO 4217 形式の通貨コードに関連付けられたCultureInfoオブジェクトを見つける方法を教えてくれます。

http://eddietech.blogspot.com.es/2008/01/find-cultureinfo-by-iso-currency-code.html

これらのオブジェクト (同じ通貨コードを使用する複数のカルチャが存在する可能性があります)ごとに、関連する ISO 639-1 形式の言語コードのTwoLetterISOLanguageNameプロパティを読み取ることができます。

また、そのカルチャの "(ISO 639-1)-(ISO 3166)" (2 文字の長さの各コード) を見つけることができる各 CultureInfo オブジェクトの Name プロパティを読み取ることもできます (例: "es-ES"、" en-GB」など)。

C# でこのトピックをカバーしている別の優れた情報源は、ここにあります。

于 2013-05-30T10:03:03.160 に答える