This commit is contained in:
skidoodle 2024-03-13 00:33:46 +01:00
commit e124a47765
19374 changed files with 9806149 additions and 0 deletions

View file

@ -0,0 +1,69 @@
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();
}
}
}