سؤال

في .NET، توجد أي طريقة للتحويل من رموز البلدان المكونة من ثلاثة أحرف (المحددة في ISO 3166-1 alpha-3) إلى رموز اللغة المكونة من حرفين (المحددة في ISO 3166-1 alpha-2) على سبيل المثال.تحويل BEL إلى BE؟

لقد ألقيت نظرة على فئة RegionInfo في System.Globalization ولكن يبدو أن المنشئ لا يدعم الرموز المكونة من ثلاثة أحرف.

هل كانت مفيدة؟

المحلول

ال RegionInfo يعرف الفصل الرمز المكون من ثلاثة أحرف (في ملف ThreeLetterISORegionName الممتلكات)، ولكن لا أعتقد أن هناك طريقة للحصول عليها RegionInfo بناءً على هذا الرمز، ستحتاج إلى تعداد جميع المناطق وإضافتها إلى القاموس الخاص بك، باستخدام الرمز المكون من ثلاثة أحرف كمفتاح.

ومع ذلك، أعتقد أن .NET Framework يستخدم RegionInfo للعمل مع الثقافات, ، وليس الدول بالمعنى ISO 3166-1.لذلك، لا تتوفر العديد من البلدان من معيار ISO 3166-1 (حاول على سبيل المثال: SX).أعتقد أنه يجب عليك إنشاء كتاب رموز بلدك الخاص.

يحرر: من 246 دولة في كتاب رموز بلدي الحالي، RegionInfo متاح لـ 125 منهم، والباقي (121) غير مدعوم.خاتمة:هذه ليست طريقة جيدة للحصول على كتاب رموز البلد.

نصائح أخرى

يبدو أنه لا توجد طريقة مضمنة للقيام بذلك.يمكنك استخدام الأسلوب من إجابة GenericTypeTea .ولكن إذا كنت بحاجة إلى تحويل العديد من رموز البلدان ، فيمكنك تجنب تعداد الثقافات والحساب المسبق لقاموس الخرائط لتحويل رموز البلدان.

هكذا يبدو هذا المُنشئ: Genacodicetagpre

قم بتشغيل هذا المُنشئ للحصول على قاموس تعيين رموز البلدان مثل هذا: Genacodicetagpre

محدث:

لم أقرأ السؤال جيدا من قبلالأتى يجب يتم الآن التحويل بشكل صحيح من ISO 3166-1 alpha-3 إلى ISO 3166-1 alpha-2:


ليس هناك طريقة مدمجة للقيام بذلك.سوف تحتاج إلى التكرار من خلال CultureInfoق للحصول على RegionInfos من أجل العثور على التطابق يدويًا (هذا غير فعال إلى حد ما لذا يُنصح ببعض التخزين المؤقت):

public string ConvertThreeLetterNameToTwoLetterName(string name)
{
    if (name.Length != 3)
    {
        throw new ArgumentException("name must be three letters.");
    }

    name = name.ToUpper();

    CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.SpecificCultures);
    foreach (CultureInfo culture in cultures)
    {
        RegionInfo region = new RegionInfo(culture.LCID);
        if (region.ThreeLetterISORegionName.ToUpper() == name)
        {
            return region.TwoLetterISORegionName;
        }
    }

    return null;
}

لقد قمت للتو بربط هذه الفئة السريعة والقذرة معًا للاستعلام عن إدخالات ISO3166-1 وإدارتها.هناك طريقة واحدة فقط للاستعلام عن طريق كود ألفا 3 ، ولكن يجب أن تكون بسيطة بما يكفي لإضافة تحويلات أخرى كما هو مطلوب.

مثال على الاستخدام: Genacodicetagpre

فئة: Genacodicetagpre

بعض الإجابات المذكورة أعلاه هي O (N) لعمليات البحث ، وهو أمر جيد إذا كنت تفعل ذلك مرة واحدة فقط ، ولكن بشكل عام سترغب في استدعاء هذا أكثر من مرة لكل عملية وفي هذه الحالة ربما تريدشيء أكثر كفاءة.

Genacodicetagpre

بعد ذلك ، يمكنك البحث باستخدام: Genacodicetagpre

المطبوعات: Genacodicetagpre

هناك ISO3166 حزمة Nuget التي توفر قائمة بدول ISO3166 التي تتضمن الاسم والرمز المكون من حرفين وثلاثة أحرف والرمز الرقمي.

إلى الزميل المتخبط: إذا كان ما تريده هو فقط اشتقاق البلد "الافتراضي" لاسم لغوي مؤلف من حرفين في عالم .NET (على سبيل المثال " en "=> "US "،" ja "=>" JP ") ، هذه هي الحيلة Genacodicetagpre

لقد عملت مع مكتبة JS لا تقبل سوى أكواد ISO3166 ، وبالنسبة إلى 25 لغة ، يدعم موقعنا هذا بشكل لا تشوبه شائبة.اختبر السيناريو الخاص بك دائمًا

فئة C # للجميع رمز البلد الدولي واسم الدولة Genacodicetagpre

يمكنك محاولة استخدام .NET RegionInfo كما هو موضح هنا :

Genacodicetagpre

راجع حزمة Nuget "Bia.Countries"
قام https://github.com/ilyabreev/Bia.Countries بعمل جيد مع

< Bia.Countries.Sso3166.Countries.GetCountryByAlpha2()

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top