using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using Kreta.Framework.Caching; namespace Kreta.Framework.Localization { /// /// Felsorolások nyelvesítésére szolgáló megvalósítás. /// internal sealed class EnumLocalizer : ILocalizer { private static object SyncObject = new object(); private static readonly Dictionary friendlyNameAttributeCache = new Dictionary(); /// /// Az osztály alapértelmezett konstruktora. /// public EnumLocalizer() { } /// /// Lásd . /// /// Lásd /// Lásd /// Lásd string ILocalizer.Localize(object value, CultureInfo cultureInfo) { return Localize((Enum)value, cultureInfo); } /// /// Lásd . /// /// /// A nyelvesítés a felsorolás mezőire tett attribútum /// alapján történik. A felsorolás mezője ilyet nem tartalmaz, akkor egyszerűen a /// metódus lesz használva. /// /// Lásd /// Lásd /// Lásd public string Localize(Enum value, CultureInfo cultureInfo) { FriendlyNameAttribute attribute; lock (SyncObject) { if (!friendlyNameAttributeCache.ContainsKey(value)) { System.Reflection.FieldInfo fieldinfo = value.GetType().GetField(value.ToString()); attribute = (FriendlyNameAttribute)fieldinfo.GetCustomAttributes(typeof(FriendlyNameAttribute), false).FirstOrDefault(); // no inheritance friendlyNameAttributeCache[value] = attribute; } else { attribute = friendlyNameAttributeCache[value]; } } return attribute != null ? SDAServer.Instance.CacheManager.AquireCache().Get(attribute.StringResourceId, cultureInfo.LCID, attribute.DisplayText) : value.ToString(); } } }