如何复数单词/字符串?

时间:2013-06-13 18:48:47

标签: c# asp.net-mvc-4 razor

目标

我想用C#.Net的Razor Engine复数单词。我正在使用MVC 4.

问题

我有以下内容:

<button class="button light-blue filled compare float-right" 
 title="This product is available in @Model["NumberOfMarketsThatHaveThisProduct"]
   market(s)">
   Compare
</button>

我不想使用“市场”,而是“市场”或“市场”。

我已经尝试了什么

<button class="button light-blue filled compare float-right" 
 title="This product is available in @Model["NumberOfMarketsThatHaveThisProduct"]
   @if((int)@Model["NumberOfMarketsThatHaveThisProduct"] == 1)
   {
      @: market
   } else {
      @: markets
   }">
   Compare
</button>

但我觉得这样做并不舒服。

我必须做什么?

4 个答案:

答案 0 :(得分:6)

您可以使用逻辑:

market@(someNumber == 1 ? "" : "s")

答案 1 :(得分:4)

更好的方法是创建一个自定义HTML Helper,它将使用.NET 4的PluralizationService(在System.Data.Entity.Design.PluralizationServices命名空间中引用System.Data.Entity.Design程序集)正确地进行复数化,这也是EF6用于复数表名。

Razor助手看起来像这样:

namespace CustomHelpers
{
    public static class CustomHelpers
    {
        public static MvcHtmlString Pluralize(this HtmlHelper htmlHelper,
            string source)
        {
            var serv = PluralizationService.CreateService(new System.Globalization.CultureInfo("en-us"));
            var plural = serv.Pluralize(source);

            return MvcHtmlString.Create(plural);
        }
    }
}

您可以使用以下语法在Razor中轻松使用此帮助程序:

@using CustomHelpers

<div class="jumbotron">
    <h1>Hi @Html.Pluralize("person")</h1>
</div>

您可以想象它会正确地将多数化为市场改为市场以及许多其他字词因为它里面使用了复数字典。这比使用一些自定义复数代码要好得多。

答案 2 :(得分:2)

最“ASP.NET-MVC-esque”方式是使用显示模板:

@model int

@if (Model == 1)
{
    @String.Format("{0} market", Model)
}
else
{
    @String.Format("{0} markets", Model)
}

将它放在DisplayTemplates文件夹中,并将其命名为“Market.cshtml”。然后,在您的模型中,执行:

[UIHint("Market")]
public int NumberOfMarketsThatHaveThisProduct { get; set; }

在你看来:

@Html.DisplayFor(m => m.NumberOfMarketsThatHaveThisProduct)

通过修改显示模板以便在需要时使用本地资源,可以非常轻松地翻译此方法。

如果您不得不重复这一点,这将比在视图中内联更简洁。如果它是一次性的,你可能会发现它有点过分。

答案 3 :(得分:0)

@
{
  string last =  Model["NumberOfMarketsThatHaveThisProduct"]==1? "": "'s";

}
<button class="button light-blue filled compare float-right" 
 title="This product is available in @Model["NumberOfMarketsThatHaveThisProduct"] market@last">
   Compare
</button>