mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2026-02-09 09:16:41 +08:00
Adding Transliteration Service
This commit is contained in:
@@ -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; }
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
@@ -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" />
|
||||
|
||||
@@ -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();
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
@@ -0,0 +1,5 @@
|
||||
namespace Orchard.Localization.Services {
|
||||
public interface ITransliterationServices : IDependency {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user