diff --git a/src/Orchard.Web/Modules/Orchard.Localization/AdminMenu.cs b/src/Orchard.Web/Modules/Orchard.Localization/AdminMenu.cs new file mode 100644 index 000000000..c75b73128 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Localization/AdminMenu.cs @@ -0,0 +1,18 @@ +using Orchard.Environment.Extensions; +using Orchard.UI.Navigation; + +namespace Orchard.Localization { + [OrchardFeature("Orchard.Localization.Transliteration")] + public class AdminMenu : INavigationProvider { + public Localizer T { get; set; } + public string MenuName { get { return "admin"; } } + + public void GetNavigation(NavigationBuilder builder) { + builder + .Add(T("Settings"), menu => menu + .Add(T("Transliteration"), "10.0", subMenu => subMenu.Action("Index", "TransliterationAdmin", new { area = "Orchard.Localization" }) + .Add(T("Settings"), "10.0", item => item.Action("Index", "TransliterationAdmin", new { area = "Orchard.Localization" }).LocalNav()) + )); + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Localization/Controllers/TransliterationAdminController.cs b/src/Orchard.Web/Modules/Orchard.Localization/Controllers/TransliterationAdminController.cs new file mode 100644 index 000000000..7bd391abf --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Localization/Controllers/TransliterationAdminController.cs @@ -0,0 +1,40 @@ +using System.Web.Mvc; +using Orchard.DisplayManagement; +using Orchard.Environment.Extensions; +using Orchard.Localization.Services; +using Orchard.Localization.ViewModels; +using Orchard.UI.Admin; + +namespace Orchard.Localization.Controllers { + [OrchardFeature("Orchard.Localization.Transliteration")] + [Admin] + public class TransliterationAdminController : Controller { + private readonly ITransliterationService _transliterationService; + + public TransliterationAdminController(ITransliterationService transliterationService, + IShapeFactory shapeFactory) { + _transliterationService = transliterationService; + T = NullLocalizer.Instance; + Shape = shapeFactory; + } + + dynamic Shape { get; set; } + public Localizer T { get; set; } + + public ActionResult Index() { + + var specifications = _transliterationService.GetSpecifications(); + + var viewModel = Shape.ViewModel() + .Specifications(specifications); + + return View(viewModel); + } + + public ActionResult Import() { + var viewModel = new ImportTransliterationViewModel(); + + return View(viewModel); + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Localization/Migrations.cs b/src/Orchard.Web/Modules/Orchard.Localization/Migrations.cs index 705ce256c..45f9967ea 100644 --- a/src/Orchard.Web/Modules/Orchard.Localization/Migrations.cs +++ b/src/Orchard.Web/Modules/Orchard.Localization/Migrations.cs @@ -1,6 +1,7 @@ using Orchard.ContentManagement.MetaData; using Orchard.Core.Contents.Extensions; using Orchard.Data.Migration; +using Orchard.Environment.Extensions; namespace Orchard.Localization { public class Migrations : DataMigrationImpl { @@ -25,4 +26,20 @@ namespace Orchard.Localization { return 2; } } + + [OrchardFeature("Orchard.Localization.Transliteration")] + public class TransliteratoinMigrations : DataMigrationImpl { + + public int Create() { + SchemaBuilder.CreateTable("TransliterationSpecificationRecord", + table => table + .Column("Id", column => column.PrimaryKey().Identity()) + .Column("CultureFrom") + .Column("CultureTo") + .Column("Rules", c => c.Unlimited()) + ); + + return 1; + } + } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Localization/Models/TransliterationSpecificationRecord.cs b/src/Orchard.Web/Modules/Orchard.Localization/Models/TransliterationSpecificationRecord.cs index 559b99e38..1f79c4555 100644 --- a/src/Orchard.Web/Modules/Orchard.Localization/Models/TransliterationSpecificationRecord.cs +++ b/src/Orchard.Web/Modules/Orchard.Localization/Models/TransliterationSpecificationRecord.cs @@ -1,10 +1,12 @@ using Orchard.Data.Conventions; +using Orchard.Environment.Extensions; namespace Orchard.Localization.Models { + [OrchardFeature("Orchard.Localization.Transliteration")] public class TransliterationSpecificationRecord { public virtual int Id { get; set; } - public virtual int LCIDFrom { get; set; } - public virtual int LCIDTo { get; set; } + public virtual string CultureFrom { get; set; } + public virtual string CultureTo { get; set; } [StringLengthMax] public virtual string Rules { get; set; } diff --git a/src/Orchard.Web/Modules/Orchard.Localization/Orchard.Localization.csproj b/src/Orchard.Web/Modules/Orchard.Localization/Orchard.Localization.csproj index b14b3117d..f690ee828 100644 --- a/src/Orchard.Web/Modules/Orchard.Localization/Orchard.Localization.csproj +++ b/src/Orchard.Web/Modules/Orchard.Localization/Orchard.Localization.csproj @@ -68,7 +68,9 @@ + + @@ -87,13 +89,14 @@ - + - + + @@ -142,6 +145,12 @@ + + + + + + 10.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) diff --git a/src/Orchard.Web/Modules/Orchard.Localization/Services/ITransliterationService.cs b/src/Orchard.Web/Modules/Orchard.Localization/Services/ITransliterationService.cs new file mode 100644 index 000000000..90263b9e4 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Localization/Services/ITransliterationService.cs @@ -0,0 +1,9 @@ +using System.Collections.Generic; +using Orchard.Localization.Models; + +namespace Orchard.Localization.Services { + public interface ITransliterationService : IDependency { + string Convert(string value, int transliterationSpecificationId); + IEnumerable GetSpecifications(); + } +} \ 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 deleted file mode 100644 index ff13c5f00..000000000 --- a/src/Orchard.Web/Modules/Orchard.Localization/Services/ITransliterationServices.cs +++ /dev/null @@ -1,5 +0,0 @@ -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/TransliterationService.cs similarity index 79% rename from src/Orchard.Web/Modules/Orchard.Localization/Services/TransliterationServices.cs rename to src/Orchard.Web/Modules/Orchard.Localization/Services/TransliterationService.cs index bcbc85256..d77dc407b 100644 --- a/src/Orchard.Web/Modules/Orchard.Localization/Services/TransliterationServices.cs +++ b/src/Orchard.Web/Modules/Orchard.Localization/Services/TransliterationService.cs @@ -1,4 +1,6 @@ +using System.Collections.Generic; using System.IO; +using System.Linq; using System.NaturalLanguage.Tools; using System.Text; using Orchard.Data; @@ -7,11 +9,11 @@ using Orchard.Localization.Models; namespace Orchard.Localization.Services { [OrchardFeature("Orchard.Localization.Transliteration")] - public class TransliterationServices : ITransliterationServices { + public class TransliterationService : ITransliterationService { private readonly IRepository _transliterationRepository; private readonly bool fOnlyMetadata = false; - public TransliterationServices(IRepository transliterationRepository) { + public TransliterationService(IRepository transliterationRepository) { _transliterationRepository = transliterationRepository; } @@ -22,7 +24,7 @@ namespace Orchard.Localization.Services { var specification = GetSpecification(transliterationSpecification); Transliterator transliterator = Transliterator.FromSpecification(specification); - + // TODO : Return the contents of this var transliteratorRuleTraceList = new TransliteratorRuleTraceList(); @@ -32,6 +34,10 @@ namespace Orchard.Localization.Services { transliteratorRuleTraceList); } + public IEnumerable GetSpecifications() { + return _transliterationRepository.Table.ToList(); + } + private TransliteratorSpecification GetSpecification(TransliterationSpecificationRecord record) { using (TextReader specificationReader = new StringReader(record.Rules)) { return TransliteratorSpecification.FromSpecificationFile(specificationReader, fOnlyMetadata); diff --git a/src/Orchard.Web/Modules/Orchard.Localization/ViewModels/ImportTransliterationViewModel.cs b/src/Orchard.Web/Modules/Orchard.Localization/ViewModels/ImportTransliterationViewModel.cs new file mode 100644 index 000000000..837af8128 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Localization/ViewModels/ImportTransliterationViewModel.cs @@ -0,0 +1,5 @@ +namespace Orchard.Localization.ViewModels { + public class ImportTransliterationViewModel { + public string Rules { get; set; } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Localization/Views/TransliterationAdmin/Import.cshtml b/src/Orchard.Web/Modules/Orchard.Localization/Views/TransliterationAdmin/Import.cshtml new file mode 100644 index 000000000..3e4e3d342 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Localization/Views/TransliterationAdmin/Import.cshtml @@ -0,0 +1,63 @@ +@model Orchard.Localization.ViewModels.ImportTransliterationViewModel + +@{ + Layout.Title = T("Import Transliteration").Text; +} + +@using(Html.BeginFormAntiForgeryPost()) { + @Html.ValidationSummary() +
+ + + @T("[Input]") + @T("// Insert a several-word description of the module’s input.") + @T("// For example:") + @T("// Romanization") + + @T("[Output]") + @T("// Insert a several-word description of the module’s output.") + @T("// For example:") + @T("// Cyrillic") + + @T("[Description]") + @T("// Give a several-sentence description of the module.") + + @T("[Preprocess]") + @T("// If you need to preprocess your input before applying") + @T("// rules specify the procedure here.") + @T("// For example:") + @T("// ToLower") + @T("// ToUpper(tr-TR)") + + @T("[States]") + @T("// If you need any states other than the two predefined ones") + @T("// (START and DEFAULT) then declare their names here.") + @T("// For example:") + @T("// CONSONANT") + @T("// VOWEL") + + @T("[FollowingContextMacros]") + @T("// Insert any following context macro definitions here.") + @T("// For example:") + @T("// Cons b c d f g h j k l m n p q r s t v w x y z") + @T("// ConsOrEnd :Cons:") + @T("// Vowel a e i o u") + @T("// VowelAtEnd a e i o u") + + @T("[EscapeSpanDelimiters]") + @T("// If you need to be able to prevent spans of the input") + @T("// from being processed you can specify one pair of strings") + @T("// to indicate the beginning and end of such escaped spans.") + @T("// For example:") + @T("// { }") + @T("// /* */") + + @T("[Rules]") + @T("// List your rules here. For example:") + @T("// a –> x") + @T("// a() –> y") + @T("// [START] fa –> z [VOWEL]") +
+ + +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Localization/Views/TransliterationAdmin/Index.cshtml b/src/Orchard.Web/Modules/Orchard.Localization/Views/TransliterationAdmin/Index.cshtml new file mode 100644 index 000000000..f6fec5205 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Localization/Views/TransliterationAdmin/Index.cshtml @@ -0,0 +1,41 @@ +@using System.Globalization +@using Orchard.Localization.Models +@{ + Layout.Title = T("Transliteration Settings"); + + var currentSpecifications = (IEnumerable)Model.Specifications; +} + +@using (Html.BeginFormAntiForgeryPost()) { + @Html.ValidationSummary() + + if (currentSpecifications.Any()) { + + + + + + + + + + + @foreach (var currentSpecification in currentSpecifications) { + CultureInfo cultureInfoFrom = CultureInfo.GetCultureInfo(currentSpecification.CultureFrom); + CultureInfo cultureInfoTo = CultureInfo.GetCultureInfo(currentSpecification.CultureTo); + + + + + + + } +
@T("Culture From")@T("Culture To")
@cultureInfoFrom.DisplayName@cultureInfoTo.DisplayName + @*@T("Remove")*@ +
+ @T("A provider identifier may not be shown if not supplied by an internal library. Also A key and secret are not required for every mechanism") + } + else { +

@T("There are no specifications registered. Why not register one?", "#")

+ } +} \ No newline at end of file