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();
}
}
}