44using Umbraco . Cms . Core . Models . PublishedContent ;
55using Umbraco . Cms . Core . Strings ;
66using Umbraco . Cms . Core . Templates ;
7+ using Umbraco . Extensions ;
78
89namespace Umbraco . Cms . Web . Common ;
910
@@ -18,7 +19,7 @@ public class UmbracoHelper
1819 private readonly IUmbracoComponentRenderer _componentRenderer ;
1920 private readonly ICultureDictionaryFactory _cultureDictionaryFactory ;
2021 private readonly IPublishedContentQuery _publishedContentQuery ;
21- private ICultureDictionary ? _cultureDictionary ;
22+ private readonly Dictionary < CultureInfo , ICultureDictionary > _cultureDictionaries = [ ] ;
2223
2324 private IPublishedContent ? _currentPage ;
2425
@@ -103,29 +104,29 @@ public async Task<IHtmlEncodedString> RenderTemplateAsync(int contentId, int? al
103104 /// <summary>
104105 /// Returns the dictionary value for the key specified
105106 /// </summary>
106- /// <param name="key"></param>
107- /// <returns></returns>
108- public string ? GetDictionaryValue ( string key ) => CultureDictionary [ key ] ;
107+ /// <param name="key">Key of dictionary item. </param>
108+ /// <returns>The dictionary value, should one exist. </returns>
109+ public string ? GetDictionaryValue ( string key ) => GetDictionaryValue ( key , Thread . CurrentThread . CurrentUICulture ) ;
109110
110111
111112 /// <summary>
112113 /// Returns the dictionary value for the key specified, and if empty returns the specified default fall back value
113114 /// </summary>
114- /// <param name="key">key of dictionary item</param>
115+ /// <param name="key">Key of dictionary item. </param>
115116 /// <param name="specificCulture">the specific culture on which the result well be back upon</param>
116- /// <returns></returns>
117+ /// <returns>The dictionary value, should one exist. </returns>
117118 public string ? GetDictionaryValue ( string key , CultureInfo specificCulture )
118119 {
119- _cultureDictionary = _cultureDictionaryFactory . CreateDictionary ( specificCulture ) ;
120- return GetDictionaryValue ( key ) ;
120+ ICultureDictionary cultureDictionary = GetCultureDictionary ( specificCulture ) ;
121+ return cultureDictionary [ key ] ;
121122 }
122123
123124 /// <summary>
124125 /// Returns the dictionary value for the key specified, and if empty returns the specified default fall back value
125126 /// </summary>
126- /// <param name="key">key of dictionary item</param>
127- /// <param name="defaultValue">fall back text if dictionary item is empty - Name altText to match Umbraco.Field</param>
128- /// <returns></returns>
127+ /// <param name="key">key of dictionary item. </param>
128+ /// <param name="defaultValue">fall back text if dictionary item is empty - Name altText to match Umbraco.Field. </param>
129+ /// <returns>Returns the dictionary value, or a default value if none exists. </returns>
129130 public string GetDictionaryValueOrDefault ( string key , string defaultValue )
130131 {
131132 var dictionaryValue = GetDictionaryValue ( key ) ;
@@ -140,26 +141,51 @@ public string GetDictionaryValueOrDefault(string key, string defaultValue)
140141 /// <summary>
141142 /// Returns the dictionary value for the key specified, and if empty returns the specified default fall back value
142143 /// </summary>
143- /// <param name="key">key of dictionary item</param>
144- /// <param name="specificCulture">the specific culture on which the result well be back upon</param>
145- /// <param name="defaultValue">fall back text if dictionary item is empty - Name altText to match Umbraco.Field</param>
146- /// <returns></returns>
144+ /// <param name="key">Key of dictionary item. </param>
145+ /// <param name="specificCulture">The specific culture on which the result well be back upon. </param>
146+ /// <param name="defaultValue">Fall back text if dictionary item is empty - Name altText to match Umbraco.Field. </param>
147+ /// <returns>Returns the dictionary value, or a default value if none exists. </returns>
147148 public string GetDictionaryValueOrDefault ( string key , CultureInfo specificCulture , string defaultValue )
148149 {
149- _cultureDictionary = _cultureDictionaryFactory . CreateDictionary ( specificCulture ) ;
150- var dictionaryValue = GetDictionaryValue ( key ) ;
150+ var dictionaryValue = GetDictionaryValue ( key , specificCulture ) ;
151151 if ( string . IsNullOrWhiteSpace ( dictionaryValue ) )
152152 {
153153 dictionaryValue = defaultValue ;
154154 }
155+
155156 return dictionaryValue ;
156157 }
157158
159+ /// <summary>
160+ /// Gets the ICultureDictionary for the current UI Culture for access to dictionary items
161+ /// </summary>
162+ public ICultureDictionary CultureDictionary => GetCultureDictionary ( Thread . CurrentThread . CurrentUICulture ) ;
158163
159164 /// <summary>
160- /// Returns the ICultureDictionary for access to dictionary items
165+ /// Gets the ICultureDictionary for access to dictionary items for a specific culture
161166 /// </summary>
162- public ICultureDictionary CultureDictionary => _cultureDictionary ??= _cultureDictionaryFactory . CreateDictionary ( ) ;
167+ /// <param name="specificCulture">The culture of the culture dictionary you want to retrieve.</param>
168+ /// <returns>Returns the culture dictionary for the specified culture.</returns>
169+ public ICultureDictionary GetCultureDictionary ( CultureInfo specificCulture )
170+ {
171+ CreateCultureDictionary ( specificCulture ) ;
172+ return _cultureDictionaries . GetValue ( specificCulture ) ! ;
173+ }
174+
175+ /// <summary>
176+ /// Creates a culture dictionary for a specific culture if it doesn't already exist
177+ /// </summary>
178+ /// <param name="specificCulture">The culture to create a culture dictionary for.</param>
179+ internal void CreateCultureDictionary ( CultureInfo specificCulture )
180+ {
181+ if ( _cultureDictionaries . ContainsKey ( specificCulture ) )
182+ {
183+ return ;
184+ }
185+
186+ ICultureDictionary dictionary = _cultureDictionaryFactory . CreateDictionary ( specificCulture ) ;
187+ _cultureDictionaries . Add ( specificCulture , dictionary ) ;
188+ }
163189
164190 #endregion
165191
0 commit comments