init
This commit is contained in:
commit
e124a47765
19374 changed files with 9806149 additions and 0 deletions
80
Framework/Caching/StringResourcesCache.cs
Normal file
80
Framework/Caching/StringResourcesCache.cs
Normal file
|
@ -0,0 +1,80 @@
|
|||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.IO;
|
||||
using System.Xml.Linq;
|
||||
|
||||
namespace Kreta.Framework.Caching
|
||||
{
|
||||
public sealed class StringResourcesCache : Cache
|
||||
{
|
||||
private const int DefaultLcid = 1038; // magyar
|
||||
private const string StringResourcesFileName = "StringResources.kres";
|
||||
|
||||
private ConcurrentDictionary<string, string> cache;
|
||||
|
||||
public StringResourcesCache(CacheManager cacheManager) : base(cacheManager)
|
||||
{
|
||||
cache = new ConcurrentDictionary<string, string>();
|
||||
LoadCache();
|
||||
}
|
||||
|
||||
private string GetStringResourcesKey(int id, int lcid)
|
||||
{
|
||||
return $"{id}¤{lcid}";
|
||||
}
|
||||
|
||||
private void LoadCache()
|
||||
{
|
||||
string[] stringResourcesFilePath = Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory, StringResourcesFileName, SearchOption.AllDirectories);
|
||||
if (stringResourcesFilePath.Length == 0)
|
||||
{
|
||||
throw new Exception($"Not found {StringResourcesFileName} file!");
|
||||
}
|
||||
|
||||
var root = XElement.Load(stringResourcesFilePath[0]);
|
||||
|
||||
foreach (XElement text in root.Elements())
|
||||
{
|
||||
foreach (XElement language in text.Elements())
|
||||
{
|
||||
string stringResourcesKey = GetStringResourcesKey(Convert.ToInt32(text.Attribute("ID").Value), Convert.ToInt32(language.Attribute("LCID").Value));
|
||||
string value = language.Value.Replace("\n", "<br/>");
|
||||
|
||||
cache.AddOrUpdate(stringResourcesKey, key => value, (k, v) => value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static string GetDefaultText(int id, int lcid)
|
||||
{
|
||||
return $"Nincs fordítása -> ID:{id} - LCID:{lcid}!";
|
||||
}
|
||||
|
||||
public string Get(int id, int lcid)
|
||||
{
|
||||
return Get(id, lcid, GetDefaultText(id, lcid));
|
||||
}
|
||||
|
||||
public string Get(int id, int lcid, string defaultText)
|
||||
{
|
||||
var result = cache.GetOrAdd(GetStringResourcesKey(id, lcid), key => GetDefaultText(id, lcid));
|
||||
|
||||
if (result == null && lcid != DefaultLcid)
|
||||
{
|
||||
result = cache.GetOrAdd(GetStringResourcesKey(id, DefaultLcid), key => GetDefaultText(id, DefaultLcid));
|
||||
}
|
||||
|
||||
if (result == null)
|
||||
{
|
||||
result = defaultText;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public override void Reset()
|
||||
{
|
||||
cache.Clear();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue