diff --git a/src/Umbraco.Core/Dictionary/CultureDictionaryFactoryResolver.cs b/src/Umbraco.Core/Dictionary/CultureDictionaryFactoryResolver.cs
new file mode 100644
index 0000000000..1d754e1970
--- /dev/null
+++ b/src/Umbraco.Core/Dictionary/CultureDictionaryFactoryResolver.cs
@@ -0,0 +1,32 @@
+using Umbraco.Core.ObjectResolution;
+
+namespace Umbraco.Core.Dictionary
+{
+ ///
+ /// Resolves the current CultureDictionaryFactory
+ ///
+ internal class CultureDictionaryFactoryResolver : SingleObjectResolverBase
+ {
+ internal CultureDictionaryFactoryResolver(ICultureDictionaryFactory factory)
+ : base(factory)
+ {
+ }
+
+ ///
+ /// Can be used by developers at runtime to set their ICultureDictionaryFactory at app startup
+ ///
+ ///
+ public void SetContentStore(ICultureDictionaryFactory factory)
+ {
+ Value = factory;
+ }
+
+ ///
+ /// Returns the ICultureDictionaryFactory
+ ///
+ public ICultureDictionaryFactory Factory
+ {
+ get { return Value; }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Core/Dictionary/ICultureDictionary.cs b/src/Umbraco.Core/Dictionary/ICultureDictionary.cs
new file mode 100644
index 0000000000..23c4ea2998
--- /dev/null
+++ b/src/Umbraco.Core/Dictionary/ICultureDictionary.cs
@@ -0,0 +1,23 @@
+using System;
+using System.Globalization;
+
+namespace Umbraco.Core.Dictionary
+{
+ ///
+ /// Represents a dictionary based on a specific culture
+ ///
+ internal interface ICultureDictionary
+ {
+ ///
+ /// Returns the dictionary value based on the key supplied
+ ///
+ ///
+ ///
+ string this[string key] { get; }
+
+ ///
+ /// Returns the current culture
+ ///
+ CultureInfo Culture { get; }
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Core/Dictionary/ICultureDictionaryFactory.cs b/src/Umbraco.Core/Dictionary/ICultureDictionaryFactory.cs
new file mode 100644
index 0000000000..d42df33f91
--- /dev/null
+++ b/src/Umbraco.Core/Dictionary/ICultureDictionaryFactory.cs
@@ -0,0 +1,7 @@
+namespace Umbraco.Core.Dictionary
+{
+ internal interface ICultureDictionaryFactory
+ {
+ ICultureDictionary CreateDictionary();
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Core/ICultureDictionary.cs b/src/Umbraco.Core/ICultureDictionary.cs
deleted file mode 100644
index 1131424551..0000000000
--- a/src/Umbraco.Core/ICultureDictionary.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-using System.Globalization;
-
-namespace Umbraco.Core
-{
- ///
- /// Represents a dictionary based on a specific culture
- ///
- internal interface ICultureDictionary
- {
- string this[string key] { get; }
- CultureInfo Language { get; }
- }
-}
\ No newline at end of file
diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj
index ea3bf482c9..3005f77ffd 100644
--- a/src/Umbraco.Core/Umbraco.Core.csproj
+++ b/src/Umbraco.Core/Umbraco.Core.csproj
@@ -55,8 +55,10 @@
+
+
-
+
diff --git a/src/Umbraco.Web/ContentStoreResolver.cs b/src/Umbraco.Web/ContentStoreResolver.cs
index 762af03d02..fca975a2d5 100644
--- a/src/Umbraco.Web/ContentStoreResolver.cs
+++ b/src/Umbraco.Web/ContentStoreResolver.cs
@@ -2,31 +2,31 @@ using Umbraco.Core.ObjectResolution;
namespace Umbraco.Web
{
-///
-/// An object resolver to return the IContentStore
-///
-internal class ContentStoreResolver : SingleObjectResolverBase
-{
- internal ContentStoreResolver(IContentStore contentStore)
- : base(contentStore)
- {
- }
-
///
- /// Can be used by developers at runtime to set their IContentStore at app startup
+ /// An object resolver to return the IContentStore
///
- ///
- public void SetContentStore(IContentStore contentStore)
+ internal class ContentStoreResolver : SingleObjectResolverBase
{
- Value = contentStore;
- }
+ internal ContentStoreResolver(IContentStore contentStore)
+ : base(contentStore)
+ {
+ }
- ///
- /// Returns the IContentStore
- ///
- public IContentStore ContentStore
- {
- get { return Value; }
+ ///
+ /// Can be used by developers at runtime to set their IContentStore at app startup
+ ///
+ ///
+ public void SetContentStore(IContentStore contentStore)
+ {
+ Value = contentStore;
+ }
+
+ ///
+ /// Returns the IContentStore
+ ///
+ public IContentStore ContentStore
+ {
+ get { return Value; }
+ }
}
-}
}
\ No newline at end of file
diff --git a/src/Umbraco.Web/Dictionary/UmbracoCultureDictionary.cs b/src/Umbraco.Web/Dictionary/UmbracoCultureDictionary.cs
new file mode 100644
index 0000000000..7598a97957
--- /dev/null
+++ b/src/Umbraco.Web/Dictionary/UmbracoCultureDictionary.cs
@@ -0,0 +1,48 @@
+using System;
+using System.Dynamic;
+using System.Globalization;
+using umbraco.cms.businesslogic;
+using umbraco.cms.businesslogic.language;
+
+namespace Umbraco.Web.Dictionary
+{
+
+ internal class DefaultCultureDictionary : Umbraco.Core.Dictionary.ICultureDictionary
+ {
+ ///
+ /// Returns the dictionary value based on the key supplied
+ ///
+ ///
+ ///
+ public string this[string key]
+ {
+ get
+ {
+ try
+ {
+ return new global::umbraco.cms.businesslogic.Dictionary.DictionaryItem(key).Value(Language.id);
+ }
+ catch (Exception)
+ {
+ //NOTE: SD: I'm not sure why this is here but was copied from the UmbracoCultureDictionary in the macroEngines project
+ // which previously seems to have worked so I'm leaving it for now.
+ return string.Empty;
+ }
+ }
+ }
+
+ ///
+ /// Returns the current culture
+ ///
+ public CultureInfo Culture
+ {
+ get { return System.Threading.Thread.CurrentThread.CurrentUICulture; }
+ }
+
+ private Language Language
+ {
+ get { return Language.GetByCultureCode(System.Threading.Thread.CurrentThread.CurrentUICulture.Name); }
+ }
+ }
+
+}
diff --git a/src/Umbraco.Web/Dictionary/UmbracoCultureDictionaryFactory.cs b/src/Umbraco.Web/Dictionary/UmbracoCultureDictionaryFactory.cs
new file mode 100644
index 0000000000..c2662d0616
--- /dev/null
+++ b/src/Umbraco.Web/Dictionary/UmbracoCultureDictionaryFactory.cs
@@ -0,0 +1,16 @@
+namespace Umbraco.Web.Dictionary
+{
+ ///
+ /// A culture dictionary factory used to create an Umbraco.Core.Dictionary.ICultureDictionary.
+ ///
+ ///
+ /// In the future this will allow use to potentially store dictionary items elsewhere and allows for maximum flexibility.
+ ///
+ internal class DefaultCultureDictionaryFactory : Umbraco.Core.Dictionary.ICultureDictionaryFactory
+ {
+ public Umbraco.Core.Dictionary.ICultureDictionary CreateDictionary()
+ {
+ return new DefaultCultureDictionary();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Web/Mvc/RenderViewPage.cs b/src/Umbraco.Web/Mvc/RenderViewPage.cs
index 9def6caeca..3091204a9d 100644
--- a/src/Umbraco.Web/Mvc/RenderViewPage.cs
+++ b/src/Umbraco.Web/Mvc/RenderViewPage.cs
@@ -1,5 +1,6 @@
using System.Web.Mvc;
using Umbraco.Core;
+using Umbraco.Core.Dictionary;
using Umbraco.Web.Routing;
namespace Umbraco.Web.Mvc
@@ -35,11 +36,12 @@ namespace Umbraco.Web.Mvc
public dynamic CurrentPage { get; private set; }
private ICultureDictionary _cultureDictionary;
- public string GetDictionary(string key)
+ public string GetDictionaryValue(string key)
{
if (_cultureDictionary == null)
{
- _cultureDictionary = new UmbracoCultureDictionary();
+ var factory = CultureDictionaryFactoryResolver.Current.Factory;
+ _cultureDictionary = factory.CreateDictionary();
}
return _cultureDictionary[key];
}
diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj
index 6f7d117e9a..447264057b 100644
--- a/src/Umbraco.Web/Umbraco.Web.csproj
+++ b/src/Umbraco.Web/Umbraco.Web.csproj
@@ -239,6 +239,8 @@
Properties\SolutionInfo.cs
+
+
diff --git a/src/Umbraco.Web/WebBootManager.cs b/src/Umbraco.Web/WebBootManager.cs
index 56a36232c9..e6a1020c11 100644
--- a/src/Umbraco.Web/WebBootManager.cs
+++ b/src/Umbraco.Web/WebBootManager.cs
@@ -3,6 +3,8 @@ using System.Collections.Generic;
using System.Web.Mvc;
using System.Web.Routing;
using Umbraco.Core;
+using Umbraco.Core.Dictionary;
+using Umbraco.Web.Dictionary;
using Umbraco.Web.Media.ThumbnailProviders;
using Umbraco.Web.Mvc;
using Umbraco.Web.Routing;
@@ -151,6 +153,9 @@ namespace Umbraco.Web
ThumbnailProvidersResolver.Current = new ThumbnailProvidersResolver(
PluginManager.Current.ResolveThumbnailProviders());
+
+ CultureDictionaryFactoryResolver.Current = new CultureDictionaryFactoryResolver(
+ new DefaultCultureDictionaryFactory());
}
}
diff --git a/src/umbraco.MacroEngines/Properties/AssemblyInfo.cs b/src/umbraco.MacroEngines/Properties/AssemblyInfo.cs
index ead4294796..f618472847 100644
--- a/src/umbraco.MacroEngines/Properties/AssemblyInfo.cs
+++ b/src/umbraco.MacroEngines/Properties/AssemblyInfo.cs
@@ -21,4 +21,3 @@ using System.Runtime.InteropServices;
[assembly: Guid("207a5ae9-5f35-4dec-a649-d3cf4d0efbd9")]
[assembly: InternalsVisibleTo("Umbraco.Tests")]
-
diff --git a/src/umbraco.MacroEngines/RazorCore/ICultureDictionary.cs b/src/umbraco.MacroEngines/RazorCore/ICultureDictionary.cs
index 62a12e67df..a7c7224177 100644
--- a/src/umbraco.MacroEngines/RazorCore/ICultureDictionary.cs
+++ b/src/umbraco.MacroEngines/RazorCore/ICultureDictionary.cs
@@ -1,10 +1,13 @@
-using umbraco.cms.businesslogic.language;
+using System;
+using umbraco.cms.businesslogic.language;
-namespace umbraco.MacroEngines {
-
- public interface ICultureDictionary {
- string this[string key] { get; }
- Language Language { get; }
- }
+namespace umbraco.MacroEngines
+{
+ [Obsolete("This class has been superceded by Umbraco.Core.Dictionary.ICultureDictionary")]
+ public interface ICultureDictionary
+ {
+ string this[string key] { get; }
+ Language Language { get; }
+ }
}
diff --git a/src/umbraco.MacroEngines/RazorCore/UmbracoCultureDictionary.cs b/src/umbraco.MacroEngines/RazorCore/UmbracoCultureDictionary.cs
index 34954946d8..b228f0741e 100644
--- a/src/umbraco.MacroEngines/RazorCore/UmbracoCultureDictionary.cs
+++ b/src/umbraco.MacroEngines/RazorCore/UmbracoCultureDictionary.cs
@@ -1,30 +1,55 @@
using System;
using System.Dynamic;
+using System.Globalization;
using umbraco.cms.businesslogic;
using umbraco.cms.businesslogic.language;
-namespace umbraco.MacroEngines {
+namespace umbraco.MacroEngines
+{
- public class UmbracoCultureDictionary : DynamicObject, ICultureDictionary {
+ //TODO: This is legacy code now since we have the Umbraco.Core.Dictionary.ICultureDictionary and we have a DefaultCultureDictionary
+ // in the Umbraco.Web project. We need to keep this here though because the new ICultureDictionary is different and
+ // doesn't expose the 'Language' property because this is really poor design since the Language object exposes business
+ // logic methods and designers could just call 'Delete' on the object and it will actually remove it from the database!! yikes.
- public string this[string key] {
- get {
- try {
- return new Dictionary.DictionaryItem(key).Value(Language.id);
- } catch (Exception) { }
- return string.Empty;
- }
- }
+ [Obsolete("This class has been superceded by Umbraco.Web.Dictionary.DefaultCultureDictionary")]
+ public class UmbracoCultureDictionary : DynamicObject, ICultureDictionary, Umbraco.Core.Dictionary.ICultureDictionary
+ {
- public Language Language {
- get { return Language.GetByCultureCode(System.Threading.Thread.CurrentThread.CurrentUICulture.Name); }
- }
+ public string this[string key]
+ {
+ get
+ {
+ try
+ {
+ return new Dictionary.DictionaryItem(key).Value(Language.id);
+ }
+ catch (Exception)
+ {
+ return string.Empty;
+ }
+ }
+ }
- public override bool TryGetMember(GetMemberBinder binder, out object result) {
- result = this[binder.Name];
- return true;
- }
+ CultureInfo Umbraco.Core.Dictionary.ICultureDictionary.Culture
+ {
+ get
+ {
+ return new CultureInfo(Language.CultureAlias);
+ }
+ }
- }
+ public Language Language
+ {
+ get { return Language.GetByCultureCode(System.Threading.Thread.CurrentThread.CurrentUICulture.Name); }
+ }
+
+ public override bool TryGetMember(GetMemberBinder binder, out object result)
+ {
+ result = this[binder.Name];
+ return true;
+ }
+
+ }
}
diff --git a/src/umbraco.MacroEngines/umbraco.MacroEngines.csproj b/src/umbraco.MacroEngines/umbraco.MacroEngines.csproj
index 645eca379c..c478cadd58 100644
--- a/src/umbraco.MacroEngines/umbraco.MacroEngines.csproj
+++ b/src/umbraco.MacroEngines/umbraco.MacroEngines.csproj
@@ -151,7 +151,7 @@
{651E1350-91B6-44B7-BD60-7207006D7003}
- umbraco.presentation
+ Umbraco.Web