69 lines
2.8 KiB
C#
69 lines
2.8 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Globalization;
|
|
using System.Linq;
|
|
using Kreta.Framework.Caching;
|
|
|
|
namespace Kreta.Framework.Localization
|
|
{
|
|
/// <summary>
|
|
/// Felsorolások nyelvesítésére szolgáló <see cref="ILocalizer"/> megvalósítás.
|
|
/// </summary>
|
|
internal sealed class EnumLocalizer : ILocalizer
|
|
{
|
|
private static object SyncObject = new object();
|
|
|
|
private static readonly Dictionary<Enum, FriendlyNameAttribute> friendlyNameAttributeCache = new Dictionary<Enum, FriendlyNameAttribute>();
|
|
|
|
/// <summary>
|
|
/// Az osztály alapértelmezett konstruktora.
|
|
/// </summary>
|
|
public EnumLocalizer()
|
|
{
|
|
}
|
|
|
|
/// <summary>
|
|
/// Lásd <see cref="ILocalizer.Localize"/>.
|
|
/// </summary>
|
|
/// <param name="value">Lásd <see cref="ILocalizer.Localize"/></param>
|
|
/// <param name="cultureInfo">Lásd <see cref="ILocalizer.Localize"/></param>
|
|
/// <returns>Lásd <see cref="ILocalizer.Localize"/></returns>
|
|
string ILocalizer.Localize(object value, CultureInfo cultureInfo)
|
|
{
|
|
return Localize((Enum)value, cultureInfo);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Lásd <see cref="ILocalizer.Localize"/>.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// A nyelvesítés a felsorolás mezőire tett <see cref="FriendlyNameAttribute"/> attribútum
|
|
/// alapján történik. A felsorolás mezője ilyet nem tartalmaz, akkor egyszerűen a <see cref="Enum.ToString()"/>
|
|
/// metódus lesz használva.
|
|
/// </remarks>
|
|
/// <param name="value">Lásd <see cref="ILocalizer.Localize"/></param>
|
|
/// <param name="cultureInfo">Lásd <see cref="ILocalizer.Localize"/></param>
|
|
/// <returns>Lásd <see cref="ILocalizer.Localize"/></returns>
|
|
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<StringResourcesCache>().Get(attribute.StringResourceId, cultureInfo.LCID, attribute.DisplayText)
|
|
: value.ToString();
|
|
}
|
|
}
|
|
}
|