C# 如何将单词/字符串复数化? 目标
我想用C#Net的Razor引擎实现单词的复数。我使用的是MVC4 问题 我有以下资料:C# 如何将单词/字符串复数化? 目标,c#,asp.net-mvc-4,razor,C#,Asp.net Mvc 4,Razor,我想用C#Net的Razor引擎实现单词的复数。我使用的是MVC4 问题 我有以下资料: <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"]
market(s)">
Compare
</button>
比较
我不想使用“市场”,但可以使用“市场”或“市场”
我已经试过了
比较
但我觉得这样做不舒服
我必须做什么?您可以使用逻辑:
market@(someNumber == 1 ? "" : "s")
@
{
字符串last=Model[“NumberOfMarketsHathatHatThisProduct”]==1?”:“'s”;
}
比较
最“ASP.NET MVC风格”的方式是使用显示模板:
@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)
通过修改显示模板以在需要时使用本地资源,可以非常轻松地转换这种方法
如果您必须经常重复此操作,那么这将比在视图中内联执行更整洁。如果是一次性的,您可能会发现它有点过分。更好的方法是创建一个自定义HTML帮助程序,它将使用.NET 4(在
System.Data.Entity.Design.PluralizationServices
命名空间中-引用System.Data.Entity.Design
程序集)正确地执行多重化EF6也使用它将表名复数化
剃须刀辅助对象如下所示:
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>
@使用CustomHelpers
Hi@Html.Pluralize(“人”)
你可以想象,它将正确地将人到人,市场到市场和许多其他词进行多重化,因为它内部使用了多重化词典。这比使用一些自定义的复数代码要好得多。你确定你的软件总是用英语吗?实际上他用的是葡萄牙语,@svick。是的,我肯定我不会翻译它,因为他是为了地区目的。你的
最后一个字符串中没有包含2。如果Model[“NumberOfMarketsThathatThisProduct”]
=2
,则不会打印s
。@svick tnx它应该等于1小时,现在我明白你的答案了。你是对的——逻辑就足够了。谢谢你好谢谢你的加入。DisplayTemplates它是Views目录中的文件夹?@chiefGui是的,“Views/ControllerName/DisplayTemplates”或“Views/Shared/DisplayTemplates”都可以。噢@AntP,谢谢!但是您的代码有语法问题。Visual Studio向我展示了以下内容:只有赋值、调用、递增、递减、等待和新对象表达式可以用作语句。
当我的鼠标悬停在“市场/市场”字上时。@chiefGui看起来我的剃须刀逃逸很时髦-我编辑了我的帖子,这有帮助吗?
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);
}
}
}
@using CustomHelpers
<div class="jumbotron">
<h1>Hi @Html.Pluralize("person")</h1>
</div>