CultureInfo within DLL

Status
Niet open voor verdere reacties.

DavyQuyo

Gebruiker
Lid geworden
6 jul 2010
Berichten
6
Hey

Ik maak een Library(DLL file) met all landen en bijhorende steden er in.
De hoofdtaal is ingesteld op engels. Dus alle namen van alle landen zijn in het engels.
Ik wil graag mijn DLL bestand gebruiken in meerdere applicaties dus cultureinfo gebruiken om
de landen in meerdere talen te voerzien.

Ik heb onderstaande class gemaakt maar hou zou ik dit het best opmaken want als ik
Name output met de vertaling zal ik in mijn Equals function problemen vinden.
Hou zou ik dit het best uitvoeren.

Op dit moment heb ik dit opgesteld

Code:
public class Country
{
      private string _name = string.Empty;
      private string _abbreviation = string.Empty;
      private int _code = 0;

      public Country(string name, string abbreviation, int code)
      {
             _name = name;
             _abbreviation = abbreviation;
             _code = code;
       }

       public string Name
       {
               get { return _name; }
       }

       public string Abbreviation
       {
               get { return _abbreviation; }
       }

       public string Code
       {
               get { return _code; }
       }

       public Image Flag
       {
               get { return Resources.ResourceManager.getObject(_abbreviation) as Image; }
       }

       public override string ToString()
       {
               return _name;
       }

       public override int GetHashCode()
       {
               return _name.GetHashCode();
       }

       public override bool Equalls(object obj)
       {
               if(obj == null || !(obj is Country))
                   return false;
               return _name == ((Country)obj).Name;
       }

       public static bool operator ==(object x, object y)
       {
               return x.equalls(y);
       }

       public static bool operator !=(object x, object y)
       {
               return !x.equalls(y);
       }
}

Dan heb ik een grote lijst gemaakt die alle landen invoert

Code:
new Country("Belgium", "BE", 32);
new Country("Netherlands", "NL", 31);
...

Ik wil jullie hulp om te weten te komen hoe ik dit het beste zou doen. ik sta open voor alle suggesties.

PS. fouten in het script is mogelijk omdat ik niet achter mijn pc zit en alles met de hand typ.
Ik weet dat ik resx bestanden nodig om mijn vertaling in te voeren dus dat is geen probleem.

Thx in advance
Davy
 
Laatst bewerkt:
You know this is a Dutch forum ?
 
oops. macht der gewoonte om op het internet engels te praten.

Heb het vlug allemaal even vertaald. en aangepast.
 
Misschien de country class als wrapper gebruiken voor een culture? De DisplayName property op de info geeft de het land in de huisysteem taal weer.

Code:
    public class Country
        {
            private readonly CultureInfo _info;

            public Country(int id)//handle exceptions for unknown id's
            {
                _info = CultureInfo.GetCultureInfo(id);
            }

            public CultureInfo Culture
            {
                get { return _info; }
            }

            public int Id
            {
                get { return _info.LCID; }
            }

            public string Name
            {
                get { return _info.DisplayName; }
            }

            public string Abbreviation
            {
                get { return _info.TwoLetterISOLanguageName.ToUpper(); }
            }

            public override string ToString()
            {
                return string.Format("{0} ({1})", Name, Abbreviation);
            }

            public override bool Equals(object other)
            {
                if (other == null || !(other is Country))
                    return false;

                //compare the culture, since all properties are read only
                return this.Culture.Equals(((Country)other).Culture);
            }
        }
    }

eenvoudig de taal die je ondersteunt aanmaken
Code:
        static void Main(string[] args)
        {
            //somewhere setup the supported countries

            List<Country> supportedCountries = new List<Country>();

            supportedCountries.Add(new Country(19)); //NL
            supportedCountries.Add(new Country(20)); //NO
            supportedCountries.Add(new Country(21)); //PL
            supportedCountries.Add(new Country(29)); //SV

            foreach (Country supportedCountry in supportedCountries)
                Console.WriteLine(supportedCountry.ToString());
            
            Console.Read();
        }
 
Dit is een interssant gegeven waar ik nog niet aan gedacht heb.
Maar ik wil deze class nog verder uitbreiden met alle steden per land.
Enkel de landen wou ik vertaald hebben.
Namen van steden wou ik behouden in hun originele namen.

De namen zoals jij ze weergeven met uw uitkomst geeft de taal op en niet echt de naam van het land.
Maar ik heb denk ik een oplossing gevonden.
ik heb country veranderd naar dit

Code:
public class Country
    {
        private string _abbreviation = string.Empty;
        private int _code = 0;

        public Country(string abbreviation, int code)
        {
            _abbreviation = abbreviation;
            _code = code;
        }

        public string Name
        {
            get { return new ComponentResourceManager(typeof(CountryLanguageCollection)).GetString(_abbreviation, new CultureInfo("en")); }
        }

        public string Abbreviation
        {
            get { return _abbreviation; }
        }

        public int Code
        {
            get { return _code; }
        }

        public Image Flag
        {
            get { return Resources.ResourceManager.GetObject(_abbreviation) as Image; }
        }

        public override string ToString()
        {
            return Name;
        }

        public string ToString(CultureInfo culture)
        {
            return new ComponentResourceManager(typeof(CountryLanguageCollection)).GetString(_abbreviation, culture);;
        }

        public override int GetHashCode()
        {
            return Name.GetHashCode();
        }

        public override bool Equals(object obj)
        {
            if (obj == null || !(obj is Country))
                return false;
            return this.Name == ((Country)obj).Name;
        }

        public static bool operator ==(Country x, Country y)
        {
            return x.Equals(y);
        }

        public static bool operator !=(Country x, Country y)
        {
            return !x.Equals(y);
        }
    }

ik heb de nodige resx bestanden gemaakt in een apparte folder in mijn assembly en zo dit hij perfect wat ik wil.
Enige probleem dat ik heb is. Dat mijn assembly niet automatisch detecteerd wat de standaar ingestelde taal is van de form waar de class word opgeroepen.
Daarom heb ik een ToString functie bijgemaakt die de cultureinfo opvraagd om het dan in de gewenste taal weer te geven.
In mijn assembly heb ik ook de neutrale taal ingesteld op EN maar op 1 of andere reden gaf hij me altijd de nederlandse versie.
Vermoedelijk omdat mijn pc op nederlands is ingesteld.
Daarom heb ik in de Name property expleciet naar de engels vertaling gevraagd.

Indien iemand nog betere opties heeft. altijd welkom
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan