Introduction
IPluralRule is interface for pluralization rule evaluator.
/// <summary>Plurality rule, evaluatable.</summary>
public interface IPluralRule
{
/// <summary>Metadata info record.</summary>
PluralRuleInfo Info { get; }
/// <summary>Evaluate whether any of the associated rules apply to <paramref name="number"/>.</summary>
/// <param name="number">numeric or text representation of numeric value</param>
bool Evaluate<N>(N number) where N : IPluralNumber;
}
PluralRule.Expression(pluralRuleInfo, expression) creates rule from expression.
PluralRuleInfo info = new PluralRuleInfo("PluralRules", "cardinal", "fi", "one", true);
IExpression expression = new BinaryOpExpression(BinaryOp.Equal, new ArgumentNameExpression("i"), new ConstantExpression(new TextNumber("0", CultureInfo.InvariantCulture)));
IPluralRule rule = new PluralRule.Expression(info, expression);
PluralRule.Zero is rule that evaluates true when compared to zero valued string, e.g. "0000".
PluralRuleInfo info = new PluralRuleInfo("PluralRules", "cardinal", "fi", "zero", true);
IPluralRule rule = new PluralRule.Zero(info);
PluralRule.True is rule that always evaluates true, can be used as fallback rule in rule list.
PluralRuleInfo info = new PluralRuleInfo("PluralRules", "cardinal", "fi", "other", true);
IPluralRule rule = new PluralRule.True(info);
PluralRule.Empty is rule that always evaluates true to empty value string.
PluralRuleInfo info = new PluralRuleInfo("PluralRules", "cardinal", "fi", "", true);
IPluralRule rule = new PluralRule.Empty(info);
Full Example
Full example
using System.Globalization;
using Avalanche.Localization;
using Avalanche.Localization.Pluralization;
class pluralrule
{
public static void Run()
{
{
// <01>
PluralRuleInfo info = new PluralRuleInfo("PluralRules", "cardinal", "fi", "one", true);
IExpression expression = new BinaryOpExpression(BinaryOp.Equal, new ArgumentNameExpression("i"), new ConstantExpression(new TextNumber("0", CultureInfo.InvariantCulture)));
IPluralRule rule = new PluralRule.Expression(info, expression);
// </01>
}
{
// <02>
PluralRuleInfo info = new PluralRuleInfo("PluralRules", "cardinal", "fi", "zero", true);
IPluralRule rule = new PluralRule.Zero(info);
// </02>
}
{
// <03>
PluralRuleInfo info = new PluralRuleInfo("PluralRules", "cardinal", "fi", "other", true);
IPluralRule rule = new PluralRule.True(info);
// </03>
}
{
// <04>
PluralRuleInfo info = new PluralRuleInfo("PluralRules", "cardinal", "fi", "", true);
IPluralRule rule = new PluralRule.Empty(info);
// </04>
}
}
}