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