Adding Transliteration Service

This commit is contained in:
Nicholas Mayne
2014-08-25 12:49:47 +01:00
parent cf02023a2a
commit 8303193284
6 changed files with 66 additions and 26 deletions

View File

@@ -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; }
}
}

View File

@@ -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

View File

@@ -70,7 +70,7 @@
<ItemGroup>
<Compile Include="Controllers\AdminController.cs" />
<Compile Include="Controllers\CutlureSelectorController.cs" />
<Compile Include="Providers\ContentTokens.cs" />
<Compile Include="Models\TransliterationSpecificationRecord.cs" />
<Compile Include="Providers\CultureSelectorSelector.cs" />
<Compile Include="Services\AdminDirectionalityFactory.cs" />
<Compile Include="Services\CultureSelectorFactory.cs" />
@@ -87,8 +87,10 @@
<Compile Include="Routes.cs" />
<Compile Include="Services\ICultureStorageProvider.cs" />
<Compile Include="Services\ILocalizationService.cs" />
<Compile Include="Services\ITransliterationServices.cs" />
<Compile Include="Services\LocalizationDateTimeFormatProvider.cs" />
<Compile Include="Services\LocalizationService.cs" />
<Compile Include="Services\TransliterationServices.cs" />
<Compile Include="ViewModels\AddLocalizationViewModel.cs" />
<Compile Include="ViewModels\ContentLocalizationsViewModel.cs" />
<Compile Include="ViewModels\EditLocalizationViewModel.cs" />

View File

@@ -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();
// }
// }
//}

View File

@@ -0,0 +1,5 @@
namespace Orchard.Localization.Services {
public interface ITransliterationServices : IDependency {
}
}

View File

@@ -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<TransliterationSpecificationRecord> _transliterationRepository;
private readonly bool fOnlyMetadata = false;
public TransliterationServices(IRepository<TransliterationSpecificationRecord> 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);
}
}
}
}