2012-08-25 15 views
12

_n(); समारोह के इस उदाहरण देखें (http://codex.wordpress.org/Function_Reference/_n):gettext में एकाधिक बहुवचन रूपों()

sprintf(_n('%d comment.', '%d comments.', $number, 'text-domain'), $number);

अंग्रेजी में

:

1 Comment 
2 Comments 
ऐसे पॉलिश के रूप में भाषाओं में

वहाँ एक अलग तरीके की है और एकाधिक बहुवचन रूप:

1 Komentarz 
2 Komentarze 
3 Komentarze 
4 Komentarze 
5 Komentarzy 
6 Komentarzy 
... 
21 Komentarzy 
22 Komentarze 
23 Komentarze 
24 Komentarze 
25 Komentarzy 
... 
31 Komentarzy 
32 Komentarze 
... 
91 Komentarzy 
92 Komentarze 
... 
111 Komentarzy 
112 Komentarzy (!) 
... 
121 Komentarzy 
122 Komentarze 

मैं अनुवादकों को अपना खुद का पैटर्न सेट करने में सक्षम बनाने के लिए कुछ तरीकों की तलाश कर रहा हूं यदि उनकी भाषा एकाधिक बहुवचन रूपों का समर्थन करती है। क्या आप ऐसा करने के लिए किसी रचनात्मक PHP दृष्टिकोण के बारे में सोच सकते हैं?

कुछ समाधान मैं के बारे में सोच सकते हैं (लेकिन अभी भी अनुवादकों किसी भी पैटर्न सेट करने के लिए सक्षम नहीं होगा):

if($number == 1){ 
    $message = __(‘1 Komentarz’ , ‘text-domain’); 
}else if($number == 2){ 
    $message = __(‘2 Komentarze’ , ‘text-domain’); 
}else if($number == 3){ 
    $message = __(‘3 Komentarze’ , ‘text-domain’); 
} 

संपादित करें: मैं पोलिश के लिए पीओ फ़ाइल में इस पाया: "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" लेकिन मैं अभी भी नहीं मिलता है इसका समर्थन करने के लिए _n(); फ़ंक्शन कैसे तैयार करें।

उत्तर

13

सबसे पहले, आपकी लोकेल फ़ाइल को बहुवचन की परिभाषा की आवश्यकता है। जैसा कि आपने सवाल पर जोड़ा है, पोलिश मामले में आप

"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" 

या (domain_name) -pl.po फ़ाइल में समान परिभाषा देख सकते हैं।

फिर, आपको .po फ़ाइल में "% d टिप्पणी"/"% d टिप्पणियां" के लिए अनुवाद तैयार करने की आवश्यकता है। उदाहरण के लिए,

msgid "%d Comment" 
msgid_plural "%d Comments" 
msgstr[0] "%d Komentarz" 
msgstr[1] "%d Komentarze" 
msgstr[2] "%d Komentarzy" 

कृपया .mo फ़ाइल में .po फ़ाइल को संकलित करें और उचित फ़ोल्डर में रखें। (जैसे भाषाओं/(DOMAIN_NAME) -pl.mo

अपने Wordpress (प्लगइन/विषय मुझे लगता है) कोड है, तो आप इसे इस तरह कह सकते हैं में,

for ($i=1;$i<15;$i++) { 
    printf(_n("%d Comment", "%d Comments", $i, "(domain_name)"), $i);echo "<br />"; 
} 
printf(_n("%d Comment", "%d Comments", 112, (domain_name)"), 112);echo "<br />"; 

तो निश्चित रूप से पॉलिश करने के लिए वर्डप्रेस किसी भी स्थान के लिए सेट , WP-config.php में,

define ('WPLANG', 'pl'); 

आप सही बहुवचन रूपों वाले परिणाम दिखाई देंगे

+0

आपका उत्तर सही बड़े हिस्से में है (सिवाय इसके कि आप के लिए() की जरूरत नहीं है -। यह काम करेंगे बस '_n(); 'भले ही यह सैद्धांतिक रूप से केवल दो बहुवचन रूपों का समर्थन करता है)। मैंने कल इसे पाया :) धन्यवाद! – Atadj

+1

लूप के लिए अधिक संख्या वाले जेनरेट ग्रंथों को दिखाने के लिए है। – akky

0

मुझे लगता है कि मुझे जो करना है वह करने का एक तरीका मिला है। POEdit एप्लिकेशन आपको पैटर्न में निर्दिष्ट पैटर्न का उपयोग करके एकाधिक बहुवचन रूपों को बनाने की अनुमति देता है।

ट्रांसलेटर को स्वयं को पैटर्न कोड करना है (मेरे प्रश्न में पोलिश के लिए पैटर्न देखें)। मैं अभी भी उस विषय पर शोध कर रहा हूं लेकिन अगर किसी के पास समान प्रश्न है तो यह शुरू करने के लिए एक अच्छी जगह है: http://www.poedit.net/trac/wiki/Doc/PluralForms

संबंधित मुद्दे