Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 45 additions & 19 deletions src/Umbraco.Web.Common/UmbracoHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core.Strings;
using Umbraco.Cms.Core.Templates;
using Umbraco.Extensions;

namespace Umbraco.Cms.Web.Common;

Expand All @@ -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;

Expand Down Expand Up @@ -103,29 +104,29 @@ public async Task<IHtmlEncodedString> RenderTemplateAsync(int contentId, int? al
/// <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);
Expand All @@ -140,26 +141,51 @@ public string GetDictionaryValueOrDefault(string key, string defaultValue)
/// <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

Expand Down