Cache a dictionary of dictionaries (#15908)
* Re-commit change Re-commit change after merge * Fix issues after merge Update usings after merge * Re-delete obsolete Remove the obsolete method
This commit is contained in:
@@ -4,6 +4,7 @@ using Umbraco.Cms.Core.Dictionary;
|
||||
using Umbraco.Cms.Core.Models.PublishedContent;
|
||||
using Umbraco.Cms.Core.Strings;
|
||||
using Umbraco.Cms.Core.Templates;
|
||||
using Umbraco.Extensions;
|
||||
|
||||
namespace Umbraco.Cms.Web.Common;
|
||||
|
||||
@@ -18,7 +19,7 @@ public class UmbracoHelper
|
||||
private readonly IUmbracoComponentRenderer _componentRenderer;
|
||||
private readonly ICultureDictionaryFactory _cultureDictionaryFactory;
|
||||
private readonly IPublishedContentQuery _publishedContentQuery;
|
||||
private ICultureDictionary? _cultureDictionary;
|
||||
private readonly Dictionary<CultureInfo, ICultureDictionary> _cultureDictionaries = [];
|
||||
|
||||
private IPublishedContent? _currentPage;
|
||||
|
||||
@@ -103,29 +104,29 @@ public class UmbracoHelper
|
||||
/// <summary>
|
||||
/// Returns the dictionary value for the key specified
|
||||
/// </summary>
|
||||
/// <param name="key"></param>
|
||||
/// <returns></returns>
|
||||
public string? GetDictionaryValue(string key) => CultureDictionary[key];
|
||||
/// <param name="key">Key of dictionary item.</param>
|
||||
/// <returns>The dictionary value, should one exist.</returns>
|
||||
public string? GetDictionaryValue(string key) => GetDictionaryValue(key, Thread.CurrentThread.CurrentUICulture);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Returns the dictionary value for the key specified, and if empty returns the specified default fall back value
|
||||
/// </summary>
|
||||
/// <param name="key">key of dictionary item</param>
|
||||
/// <param name="key">Key of dictionary item.</param>
|
||||
/// <param name="specificCulture">the specific culture on which the result well be back upon</param>
|
||||
/// <returns></returns>
|
||||
/// <returns>The dictionary value, should one exist.</returns>
|
||||
public string? GetDictionaryValue(string key, CultureInfo specificCulture)
|
||||
{
|
||||
_cultureDictionary = _cultureDictionaryFactory.CreateDictionary(specificCulture);
|
||||
return GetDictionaryValue(key);
|
||||
ICultureDictionary cultureDictionary = GetCultureDictionary(specificCulture);
|
||||
return cultureDictionary[key];
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the dictionary value for the key specified, and if empty returns the specified default fall back value
|
||||
/// </summary>
|
||||
/// <param name="key">key of dictionary item</param>
|
||||
/// <param name="defaultValue">fall back text if dictionary item is empty - Name altText to match Umbraco.Field</param>
|
||||
/// <returns></returns>
|
||||
/// <param name="key">key of dictionary item.</param>
|
||||
/// <param name="defaultValue">fall back text if dictionary item is empty - Name altText to match Umbraco.Field.</param>
|
||||
/// <returns>Returns the dictionary value, or a default value if none exists.</returns>
|
||||
public string GetDictionaryValueOrDefault(string key, string defaultValue)
|
||||
{
|
||||
var dictionaryValue = GetDictionaryValue(key);
|
||||
@@ -140,26 +141,51 @@ public class UmbracoHelper
|
||||
/// <summary>
|
||||
/// Returns the dictionary value for the key specified, and if empty returns the specified default fall back value
|
||||
/// </summary>
|
||||
/// <param name="key">key of dictionary item</param>
|
||||
/// <param name="specificCulture">the specific culture on which the result well be back upon</param>
|
||||
/// <param name="defaultValue">fall back text if dictionary item is empty - Name altText to match Umbraco.Field</param>
|
||||
/// <returns></returns>
|
||||
/// <param name="key">Key of dictionary item.</param>
|
||||
/// <param name="specificCulture">The specific culture on which the result well be back upon.</param>
|
||||
/// <param name="defaultValue">Fall back text if dictionary item is empty - Name altText to match Umbraco.Field.</param>
|
||||
/// <returns>Returns the dictionary value, or a default value if none exists.</returns>
|
||||
public string GetDictionaryValueOrDefault(string key, CultureInfo specificCulture, string defaultValue)
|
||||
{
|
||||
_cultureDictionary = _cultureDictionaryFactory.CreateDictionary(specificCulture);
|
||||
var dictionaryValue = GetDictionaryValue(key);
|
||||
var dictionaryValue = GetDictionaryValue(key, specificCulture);
|
||||
if (string.IsNullOrWhiteSpace(dictionaryValue))
|
||||
{
|
||||
dictionaryValue = defaultValue;
|
||||
}
|
||||
|
||||
return dictionaryValue;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the ICultureDictionary for the current UI Culture for access to dictionary items
|
||||
/// </summary>
|
||||
public ICultureDictionary CultureDictionary => GetCultureDictionary(Thread.CurrentThread.CurrentUICulture);
|
||||
|
||||
/// <summary>
|
||||
/// Returns the ICultureDictionary for access to dictionary items
|
||||
/// Gets the ICultureDictionary for access to dictionary items for a specific culture
|
||||
/// </summary>
|
||||
public ICultureDictionary CultureDictionary => _cultureDictionary ??= _cultureDictionaryFactory.CreateDictionary();
|
||||
/// <param name="specificCulture">The culture of the culture dictionary you want to retrieve.</param>
|
||||
/// <returns>Returns the culture dictionary for the specified culture.</returns>
|
||||
public ICultureDictionary GetCultureDictionary(CultureInfo specificCulture)
|
||||
{
|
||||
CreateCultureDictionary(specificCulture);
|
||||
return _cultureDictionaries.GetValue(specificCulture)!;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a culture dictionary for a specific culture if it doesn't already exist
|
||||
/// </summary>
|
||||
/// <param name="specificCulture">The culture to create a culture dictionary for.</param>
|
||||
internal void CreateCultureDictionary(CultureInfo specificCulture)
|
||||
{
|
||||
if (_cultureDictionaries.ContainsKey(specificCulture))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
ICultureDictionary dictionary = _cultureDictionaryFactory.CreateDictionary(specificCulture);
|
||||
_cultureDictionaries.Add(specificCulture, dictionary);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
Reference in New Issue
Block a user