Culture condition provider

This commit is contained in:
neTp9c
2015-12-06 01:15:26 +03:00
parent 9732c61b0f
commit 6d8704a74a
2 changed files with 71 additions and 0 deletions

View File

@@ -0,0 +1,70 @@
using Orchard.Events;
using System;
using System.Globalization;
using System.Linq;
namespace Orchard.Localization.Conditions {
public interface IConditionProvider : IEventHandler {
void Evaluate(dynamic evaluationContext);
}
public class CultureCondition : IConditionProvider {
private readonly WorkContext _workContext;
public CultureCondition(WorkContext workContext) {
_workContext = workContext;
}
public void Evaluate(dynamic evaluationContext) {
if (String.Equals(evaluationContext.FunctionName, "culturecode", StringComparison.OrdinalIgnoreCase))
ProcessCultureCode(evaluationContext);
if (String.Equals(evaluationContext.FunctionName, "culturelcid", StringComparison.OrdinalIgnoreCase))
ProcessCultureId(evaluationContext);
if (String.Equals(evaluationContext.FunctionName, "cultureisrtl", StringComparison.OrdinalIgnoreCase))
ProcessCurrentCultureIsRtl(evaluationContext);
if (String.Equals(evaluationContext.FunctionName, "culturelang", StringComparison.OrdinalIgnoreCase))
ProcessLanguageCode(evaluationContext);
}
private void ProcessCurrentCultureIsRtl(dynamic ruleContext) {
var currentUserCulture = CultureInfo.GetCultureInfo(_workContext.CurrentCulture);
var isRtl = ((object[])ruleContext.Arguments)
.Cast<bool>()
.SingleOrDefault();
ruleContext.Result = (isRtl == currentUserCulture.TextInfo.IsRightToLeft);
}
private void ProcessCultureCode(dynamic ruleContext) {
var currentUserCulture = CultureInfo.GetCultureInfo(_workContext.CurrentCulture);
ruleContext.Result = ((object[])ruleContext.Arguments)
.Cast<string>()
.Select(CultureInfo.GetCultureInfo)
.Any(c => c.Name == currentUserCulture.Name);
}
private void ProcessLanguageCode(dynamic ruleContext) {
var currentUserCulture = CultureInfo.GetCultureInfo(_workContext.CurrentCulture);
ruleContext.Result = ((object[])ruleContext.Arguments)
.Cast<string>()
.Select(CultureInfo.GetCultureInfo)
.Any(c => c.Name == currentUserCulture.TwoLetterISOLanguageName);
}
private void ProcessCultureId(dynamic ruleContext) {
var currentUserCulture = CultureInfo.GetCultureInfo(_workContext.CurrentCulture);
ruleContext.Result = ((object[])ruleContext.Arguments)
.Cast<int>()
.Select(CultureInfo.GetCultureInfo)
.Any(c => c.Name == currentUserCulture.Name);
}
}
}

View File

@@ -65,6 +65,7 @@
</ItemGroup>
<ItemGroup>
<Compile Include="AdminMenu.cs" />
<Compile Include="Conditions\CultureCondition.cs" />
<Compile Include="Extensions\Constants.cs" />
<Compile Include="Controllers\AdminController.cs" />
<Compile Include="Controllers\TransliterationAdminController.cs" />