जवाबों:
आपके पास System.Data.Entity.Design.PluralizationServices.PluralizationService भी है ।
अद्यतन : पुराना उत्तर अद्यतन का हकदार है। अब मानवतावादी भी है: https://github.com/MehdiK/Humanizer
मैं इसे एस्पेरांतो के लिए कर सकता हूँ, कोई विशेष मामले नहीं!
string plural(string noun) { return noun + "j"; }
अंग्रेजी के लिए, नॉन के रेगुलर प्लुरल्स के साथ-साथ नॉन के अनियमित प्लुरल के नियमों से परिचित होना उपयोगी होगा । अंग्रेजी बहुवचन पर एक संपूर्ण विकिपीडिया लेख है , जिसमें कुछ उपयोगी जानकारी भी हो सकती है।
अधिकांश ORM के पास एक छुरा होता है, हालांकि वे आम तौर पर परिपूर्ण नहीं होते हैं। मुझे पता है कि कैसल में यह इंफ़्लेक्टर क्लास है जो आप शायद चारों ओर प्रहार कर सकते हैं यह "पूरी तरह से" करना एक आसान काम नहीं है, हालांकि (अंग्रेजी "नियम" वास्तव में नियम नहीं हैं :)), इसलिए यह निर्भर करता है कि क्या आप "उचित अनुमान" दृष्टिकोण से खुश हैं।
मैंने जावा में धोखा दिया - मैं "कुछ कुछ थे (एन) के लिए एक सही स्ट्रिंग का उत्पादन करने में सक्षम होना चाहता था, इसलिए मैंने फोल लिखा। थोड़ा अतिभारित उपयोगिता विधि:
static public String pluralize(int val, String sng) {
return pluralize(val,sng,(sng+"s"));
}
static public String pluralize(int val, String sng, String plu) {
return (val+" "+(val==1 ? sng : plu));
}
जैसे आह्वान किया
System.out.println("There were "+pluralize(count,"something"));
System.out.println("You have broken "+pluralize(count,"knife","knives"));
मैंने इसके लिए .net (C #) में एक छोटी सी लाइब्रेरी बनाई है, जिसे Pluralizer (अनिश्चित रूप से) कहा जाता है।
यह पूर्ण वाक्यों के साथ काम करने के लिए है, String.Format की तरह कुछ।
यह मूल रूप से इस तरह काम करता है:
var target = new Pluralizer();
var str = "There {is} {_} {person}.";
var single = target.Pluralize(str, 1);
Assert.AreEqual("There is 1 person.", single);
// Or use the singleton if you're feeling dirty:
var several = Pluralizer.Instance.Pluralize(str, 47);
Assert.AreEqual("There are 47 people.", several);
यह इससे ज्यादा भी कर सकता है। मेरे ब्लॉग पर इसके बारे में और पढ़ें । यह NuGet में भी उपलब्ध है।
मैं एक साथ रेल pluralizer के आधार पर मार पड़ी है। आप मेरे ब्लॉग पोस्ट यहाँ , या यहाँ github पर देख सकते हैं
output = Formatting.Pluralization(100, "sausage");
जैसा कि प्रश्न सी # के लिए था, यहां सॉफ्टवेयर मंकी के समाधान पर एक अच्छा बदलाव है (फिर से "धोखा" का एक सा, लेकिन मेरे लिए वास्तव में ऐसा करने का सबसे व्यावहारिक और पुन: प्रयोज्य तरीका है):
public static string Pluralize(this string singularForm, int howMany)
{
return singularForm.Pluralize(howMany, singularForm + "s");
}
public static string Pluralize(this string singularForm, int howMany, string pluralForm)
{
return howMany == 1 ? singularForm : pluralForm;
}
उपयोग इस प्रकार है:
"Item".Pluralize(1) = "Item"
"Item".Pluralize(2) = "Items"
"Person".Pluralize(1, "People") = "Person"
"Person".Pluralize(2, "People") = "People"
सबसोनिक 3 में एक Inflectorवर्ग है जिसने मुझे बदल PersonदियाPeople । मैंने स्रोत को देखा और पाया कि यह स्वाभाविक रूप से हार्डकोड सूची के साथ थोड़ा धोखा देता है लेकिन यह वास्तव में अंग्रेजी में इसे करने का एकमात्र तरीका है और मनुष्य इसे कैसे करते हैं - हम प्रत्येक शब्द के एकवचन और बहुवचन को याद करते हैं और केवल एक नियम लागू नहीं करते हैं । जैसा कि मिश्रण में जोड़ने के लिए मर्दाना / स्त्री (/ तटस्थ) नहीं है, यह बहुत सरल है।
यहाँ एक स्निपेट है:
AddSingularRule("^(ox)en", "$1");
AddSingularRule("(vert|ind)ices$", "$1ex");
AddSingularRule("(matr)ices$", "$1ix");
AddSingularRule("(quiz)zes$", "$1");
AddIrregularRule("person", "people");
AddIrregularRule("man", "men");
AddIrregularRule("child", "children");
AddIrregularRule("sex", "sexes");
AddIrregularRule("tax", "taxes");
AddIrregularRule("move", "moves");
AddUnknownCountRule("equipment");
यह कुछ शब्दों के लिए बहुवचन समतुल्य नहीं है, जैसे उपकरण उदाहरण। जैसा कि आप शायद बता सकते हैं कि यह Regex$ 1 का उपयोग करके एक सरल प्रतिस्थापन करता है ।
अपडेट:
ऐसा प्रतीत होता है कि सबसोनिक Inflectorहै कैसल एक्टिवरकार्डInflector वर्ग को संक्रमित कर रहा है !
PlurizationService वर्ग के विशिष्ट उपयोग पर MSDN से अधिक दस्तावेज़ीकरण नहीं है, इसलिए यहां मूल उपयोग दिखाने के लिए एक इकाई परीक्षण वर्ग (NUnit) है। गैर-बहुवचन बहुवचन रूपों की बात आती है, तो निचले स्तर पर अजीब परीक्षण के मामले को देखें जो सेवा को सही नहीं दिखाता है।
[TestFixture]
public class PluralizationServiceTests
{
[Test]
public void Test01()
{
var service = PluralizationService.CreateService(CultureInfo.CurrentCulture);
Assert.AreEqual("tigers", service.Pluralize("tiger"));
Assert.AreEqual("processes", service.Pluralize("process"));
Assert.AreEqual("fungi", service.Pluralize("fungus"));
Assert.AreNotEqual("syllabi", service.Pluralize("syllabus")); // wrong pluralization
}
}
कैसे उपयोग करने के लिए इस पृष्ठ से पता चलता है PluralizationServiceकी System.Data.Entity(.NET फ्रेमवर्क 4.0)
http://zquanghoangz.blogspot.it/2012/02/beginner-with-pluralizationservices.html
Microsoft के नॉर्थविंड उदाहरण डेटाबेस का उपयोग करना:
System.Data.Entity.Design.PluralizationServices.PluralizationService.CreateService(new System.Globalization.CultureInfo("en-US"));
Singularize, "Order_Details" को Singularize नहीं करता है s, यह अंत में "Order_Details" देता है । चारों ओर काम क्या है?