From 8303193284d04b814fb1014f3756fe0757f99d81 Mon Sep 17 00:00:00 2001 From: Nicholas Mayne Date: Mon, 25 Aug 2014 12:49:47 +0100 Subject: [PATCH] Adding Transliteration Service --- .../TransliterationSpecificationRecord.cs | 12 ++++++ .../Modules/Orchard.Localization/Module.txt | 5 +++ .../Orchard.Localization.csproj | 4 +- .../Providers/ContentTokens.cs | 25 ----------- .../Services/ITransliterationServices.cs | 5 +++ .../Services/TransliterationServices.cs | 41 +++++++++++++++++++ 6 files changed, 66 insertions(+), 26 deletions(-) create mode 100644 src/Orchard.Web/Modules/Orchard.Localization/Models/TransliterationSpecificationRecord.cs delete mode 100644 src/Orchard.Web/Modules/Orchard.Localization/Providers/ContentTokens.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Localization/Services/ITransliterationServices.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Localization/Services/TransliterationServices.cs diff --git a/src/Orchard.Web/Modules/Orchard.Localization/Models/TransliterationSpecificationRecord.cs b/src/Orchard.Web/Modules/Orchard.Localization/Models/TransliterationSpecificationRecord.cs new file mode 100644 index 000000000..559b99e38 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Localization/Models/TransliterationSpecificationRecord.cs @@ -0,0 +1,12 @@ +using Orchard.Data.Conventions; + +namespace Orchard.Localization.Models { + public class TransliterationSpecificationRecord { + public virtual int Id { get; set; } + public virtual int LCIDFrom { get; set; } + public virtual int LCIDTo { get; set; } + + [StringLengthMax] + public virtual string Rules { get; set; } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Localization/Module.txt b/src/Orchard.Web/Modules/Orchard.Localization/Module.txt index a7285ff8f..689aa326c 100644 --- a/src/Orchard.Web/Modules/Orchard.Localization/Module.txt +++ b/src/Orchard.Web/Modules/Orchard.Localization/Module.txt @@ -19,4 +19,9 @@ Features: Description: Enables a culture picker to localize the UI. Category: Content Name: Culture Picker + Dependencies: Orchard.Localization + Orchard.Localization.Transliteration: + Description: Enabled transliteration of content + Category: Content + Name: Transliteration Dependencies: Orchard.Localization \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Localization/Orchard.Localization.csproj b/src/Orchard.Web/Modules/Orchard.Localization/Orchard.Localization.csproj index 2c7014a3c..b14b3117d 100644 --- a/src/Orchard.Web/Modules/Orchard.Localization/Orchard.Localization.csproj +++ b/src/Orchard.Web/Modules/Orchard.Localization/Orchard.Localization.csproj @@ -70,7 +70,7 @@ - + @@ -87,8 +87,10 @@ + + diff --git a/src/Orchard.Web/Modules/Orchard.Localization/Providers/ContentTokens.cs b/src/Orchard.Web/Modules/Orchard.Localization/Providers/ContentTokens.cs deleted file mode 100644 index 9e1b6d0d6..000000000 --- a/src/Orchard.Web/Modules/Orchard.Localization/Providers/ContentTokens.cs +++ /dev/null @@ -1,25 +0,0 @@ -//using System; -//using System.NaturalLanguage.Tools; -//using Orchard.ContentManagement; -//using Orchard.Core.Settings.Tokens; - -//namespace Orchard.Localization.Providers { -// public class TransliterationTokens : ITokenProvider { -// private readonly IContentManager _contentManager; - -// public TransliterationTokens(IContentManager contentManager) { -// _contentManager = contentManager; -// } - -// public Localizer T { get; set; } - - -// public void Describe(dynamic context) { -// var x = new Transliterator() -// } - -// public void Evaluate(dynamic context) { -// throw new NotImplementedException(); -// } -// } -//} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Localization/Services/ITransliterationServices.cs b/src/Orchard.Web/Modules/Orchard.Localization/Services/ITransliterationServices.cs new file mode 100644 index 000000000..ff13c5f00 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Localization/Services/ITransliterationServices.cs @@ -0,0 +1,5 @@ +namespace Orchard.Localization.Services { + public interface ITransliterationServices : IDependency { + + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Localization/Services/TransliterationServices.cs b/src/Orchard.Web/Modules/Orchard.Localization/Services/TransliterationServices.cs new file mode 100644 index 000000000..bcbc85256 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Localization/Services/TransliterationServices.cs @@ -0,0 +1,41 @@ +using System.IO; +using System.NaturalLanguage.Tools; +using System.Text; +using Orchard.Data; +using Orchard.Environment.Extensions; +using Orchard.Localization.Models; + +namespace Orchard.Localization.Services { + [OrchardFeature("Orchard.Localization.Transliteration")] + public class TransliterationServices : ITransliterationServices { + private readonly IRepository _transliterationRepository; + private readonly bool fOnlyMetadata = false; + + public TransliterationServices(IRepository transliterationRepository) { + _transliterationRepository = transliterationRepository; + } + + public string Convert(string value, int transliterationSpecificationId) { + var transliterationSpecification = _transliterationRepository.Get(transliterationSpecificationId); + if (transliterationSpecification == null) return value; + + var specification = GetSpecification(transliterationSpecification); + + Transliterator transliterator = Transliterator.FromSpecification(specification); + + // TODO : Return the contents of this + var transliteratorRuleTraceList = new TransliteratorRuleTraceList(); + + return transliterator.Transliterate( + value, + new StringBuilder(value.Length * 2), + transliteratorRuleTraceList); + } + + private TransliteratorSpecification GetSpecification(TransliterationSpecificationRecord record) { + using (TextReader specificationReader = new StringReader(record.Rules)) { + return TransliteratorSpecification.FromSpecificationFile(specificationReader, fOnlyMetadata); + } + } + } +} \ No newline at end of file