Проверка элементов данных - ISO 4217 (валюта) и 639-1 (язык)

Итак, я хочу провести некоторую пользовательскую проверку полей данных на некоторых моделях в.NET-проекте, над которым я сейчас работаю.

Они включают в себя язык по умолчанию и валюту по умолчанию. Чтобы соответствовать стандартам этого приложения, а также различных других используемых приложений и услуг, валюта должна быть стандартом ISO 4217 (3-символьная валюта), а язык должен быть ISO 639-1 (2-символьный язык).

Поскольку пока что нигде не проводится валидация модели, я рад ее настроить, и прежде чем приступить к созданию какого-либо огромного настраиваемого валидатора данных, мне было интересно, знает ли кто-нибудь о каких-либо существующих библиотеках, которые с готовностью предоставляют эти стандарты, даже если это что-то вроде проверки строки, которую я могу подключить к Data Validator самостоятельно.

Любые советы и / или рекомендации будут с благодарностью.

3 ответа

Решение

Итак, я нашел подходящее решение для этого. Это немного не элегантно, но работает.

Код ISO 639-1 (двухсимвольный язык) можно найти в виде свойства TwoLetterISORegionName объекта RegionInfo в пространстве имен System.Globalization.

Код ISO 4217 (3-символьная валюта) можно найти в свойстве ISOCurrenySymbol того же объекта.

Чтобы создать информацию о регионе, используйте:

new RegionInfo(Int32)

где int - это идентификатор культуры

Для генерации списка идентификаторов культуры достаточно просто использовать

System.Globalization.CultureInfo.GetCultures(CULTURETYPE)

где CULTURETYPE - это или перечисление, или соответствующее число для различных типов культур (просто убедитесь, что вы выбрали тот, который не содержит нейтральные культуры, поскольку они не отображаются правильно). Это возвращает массив объектов CultureInfo, каждый из которых содержит свойство LCID. Это свойство может быть использовано для создания соответствующего RegionInfo, и вы можете взять то, что вам нужно оттуда.

Автор ответа Киры Намиды:

Посыпанный небольшим 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)

У меня была та же самая проблема, и я думаю, что ваша проблема может быть решена также с помощью источников, которые я нашел.

Этот источник учит нас, как найти объекты CultureInfo, связанные с кодом валюты в формате ISO 4217.

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

Для каждого из этих объектов (может быть несколько культур, использующих один и тот же код валюты), вы можете прочитать свойство TwoLetterISOLanguageName для соответствующего языкового кода формата ISO 639-1.

Вы также можете прочитать свойство Name каждого объекта CultureInfo, где можно найти "(ISO 639-1)-(ISO 3166)" (каждый код длиной 2 буквы) этой культуры (пример: "es-ES", "" en-GB"и т. д.).

Еще один замечательный источник, освещающий эту тему на C#, можно найти здесь.

Другие вопросы по тегам