गेटटेक्स्ट सिंटैक्स पर क्या बात है?


9

अब तक मैं वर्डप्रेस में कुछ अनुवादों को संभाल रहा हूं और आधिकारिक गेटटेक्स्ट डॉक्यूमेंटेशन को पढ़ने की कोशिश कर रहा हूं, लेकिन एक साधारण बात नहीं मिलेगी: __ (, _e (, आदि) और यहां तक ​​कि उन शुरुआतओं के बीच क्या अंतर है? अधिक: जो दूसरों के बगल में हैं! अग्रिम धन्यवाद!

फ्रैंक


आपके विस्तृत जवाब के लिए आप सभी का धन्यवाद! मैं वास्तव में यहाँ की सराहना करता हूँ!
सर्किट सर्कस

... हो सकता है कि इस पर एक और सवाल: क्या पाठ-डोमेन के प्रवेश को छोड़ा जा सकता है? मैंने इसे हर उस स्ट्रिंग तक पहुंचाना शुरू किया जिसका मैं अनुवाद करना चाहता था, लेकिन फिर वर्डप्रेस कोडेक्स में कुछ उदाहरणों को मान्यता दी, जिनमें यह बिल्कुल नहीं है ...
सर्किट सर्कस

... ठीक है, अब मैं इसे इस कोडेक्स पेज में लेकर आया हूं - इस निरर्थक प्रश्न के लिए खेद है :-)
सर्किट सर्कस

जवाबों:


13

__(डबल अंडरस्कोर) बेस ट्रांसलेशन फंक्शन है। यह एक स्ट्रिंग का अनुवाद करता है और इसे एक स्ट्रिंग के रूप में लौटाता है।

_eके रूप में एक ही है __, लेकिन परिणाम तुरंत गूंज है।

_xप्रासंगिक अनुवाद कार्य है। अनुवाद करने वाले लोगों को संदर्भ प्रदान करने के लिए इसका दूसरा विकल्प है।

_exके रूप में ही है _x, लेकिन गूंज का परिणाम है।

उपयोग करने का उदाहरण _x:

$string = _x( 'Buffalo', 'an animal', 'plugin-domain' );
$string = _x( 'Buffalo', 'a city in New York', 'plugin-domain' );
$string = _x( 'Buffalo', 'a verb meaning to confuse somebody', 'plugin-domain' );

कभी-कभी एक ही स्ट्रिंग अन्य भाषाओं में भिन्न हो सकती है। अनुवादकों को संदर्भ प्रदान करने से उन्हें सही शब्द चुनने में मदद मिल सकती है।

शॉर्टकट कार्य:

  • esc_attr__: समतुल्य __लेकिन परिणाम के माध्यम से भी चलाता है esc_attr
  • esc_html__: समतुल्य __लेकिन परिणाम के माध्यम से भी चलाता है esc_html
  • esc_attr_e: समतुल्य _eलेकिन परिणाम के माध्यम से भी चलाता है esc_attr
  • esc_html_e: समतुल्य _eलेकिन परिणाम के माध्यम से भी चलाता है esc_html
  • esc_attr_x: समतुल्य _xलेकिन परिणाम के माध्यम से भी चलाता है esc_attr
  • esc_html_x: समतुल्य _xलेकिन परिणाम के माध्यम से भी चलाता है esc_html

_nबहुवचन हैंडलर है। उदाहरण:

$string = sprintf( _n(
        'You have %d taco.', 
        'You have %d tacos.', 
        $number, 
        'plugin-domain'), 
    $number );

उस उदाहरण में, टैकोस की संख्या कहने के दो तरीके हैं, यह इस बात पर निर्भर करता है कि यह विलक्षण है या नहीं। $ संख्या का पहला उपयोग _nफ़ंक्शन को बताता है कि किस संस्करण का उपयोग करना है। $ संख्या का दूसरा उपयोग स्प्रिंट में वास्तविक संख्या के साथ% d को बदलने के लिए स्प्रिंटफ में होता है।

इसके लिए कोई इको फंक्शन समतुल्य नहीं है _n, लेकिन एक फंक्शन है जिसका नाम है _nx। यह का एक संयोजन है _nऔर _x। बहुवचन और संदर्भ।

_n_noopएक विशेष है। इसका उपयोग बहुवचन स्ट्रिंग्स का अनुवाद करने के लिए किया जाता है, लेकिन वास्तव में अनुवाद तुरंत नहीं किया जाता है। यह उपयोगी है यदि आप तार को केंद्रीकृत बनाना चाहते हैं लेकिन वास्तव में काम कहीं और करते हैं। वह कार्य जो वास्तव में अन्यत्र कार्य करता है translate_nooped_plural

उदाहरण:

$holder = _n_noop('You have %d taco.', 'You have %d tacos.', 'plugin-domain');
// ... later ...
$string = sprintf( translate_nooped_plural( $holder, $count ), $count );

यह ज्यादा उपयोग नहीं किया जाता है, लेकिन संगठन के लिए उपयोगी हो सकता है। यदि आप अपने सभी तार एक फ़ाइल में डालते हैं, उदाहरण के लिए, तो उन्हें कहीं और संदर्भ दें, यह बस के साथ संभव नहीं होगा _n, आपको ऐसा _n_noopकरने की आवश्यकता है।

_nx_noopजैसा है, वैसा ही है _n_noop, लेकिन अनुवादकों के लिए भी एक संदर्भ ले सकते हैं, जैसा कि _x

ध्यान दें कि आप डोमेन को नोप फंक्शन कॉल में या ट्रांसलेशन_नोओपेड_प्लुरल फंक्शन कॉल में डाल सकते हैं। जो भी आपके संगठन के लिए अधिक समझ में आता है। यदि दोनों के पास एक डोमेन है, तो कोई भी बिना कॉल किए जीत जाता है।

number_format_i18nPHP के बिल्ट-इन नंबर_फॉर्मैट के बराबर है , लेकिन यह दशमलव और इसी तरह की चीजों के लिए हैंडलिंग में जोड़ता है, जो अन्य स्थानों में भिन्न हैं।

date_i18nPHP की अंतर्निहित तिथि के समतुल्य है , साथ ही सभी प्रासंगिक हैंडलिंग के साथ। महीने के नाम, दिन के नाम आदि।

इसके अलावा, कभी भी कानूनों को न तोड़ें । याद दिलाने हेतु। :)


वाह, यह वास्तव में इसका एक अच्छा विवरण है! मदद करने के लिए बहुत बहुत धन्यवाद! अब मैं स्पष्ट देख रहा हूं।
सर्किट सर्कस

6

__ (), _e () और _x (), _ex ()

__()और _e()अनिवार्य रूप से दोनों का एक आवरण translate()(सीधे उपयोग न करें) और लगभग समान है।

अंतर यह है कि __()अनुवादित स्ट्रिंग लौटाता है और _e()इसे गूँजता है। दोनों को एक आवश्यक पैरामीटर के रूप में एक स्ट्रिंग खिलाया जाना चाहिए और आमतौर पर, हालांकि वैकल्पिक, एक टेक्सटोमैन भी।

एनालॉग रूप से, वहाँ _x()और _ex(), जो आपको एक संदर्भ निर्दिष्ट करते हैं जो यह वर्णन कर सकता है कि स्ट्रिंग कहाँ दिखाई देती है। यदि आपकी परियोजना में कुछ दसियों से अधिक अनुवाद योग्य तार शामिल हैं, तो संदर्भ का उपयोग करना बहुत मायने रखता है।

इसके अलावा, के लिए _n()और _nx()plurals के अस्तित्व पर ध्यान दें ।

आम उपयोग का उदाहरण

$output = '<label for="some_field">' .
        _x( 'Some Information.', 'Some Form Field', 'your-text-domain' ) .
    '</label>' .
    '<input type="text" name="some_field" value="" />' .
    '<p class="description">' .
        _x( 'Here you can enter some info.', 'Some Form Field', 'your-text-domain' ) .
    '</p>';

return $output;

पैरामीटर

__( $text, $domain )
_e( $text, $domain )
_x( $text, $context, $domain )
_ex( $text, $context, $domain )
_n( $single, $plural, $number $domain )
_nx( $single, $plural, $number, $context, $domain )

सभी मापदंडों लेकिन $numberतार हैं। सभी $domainआवश्यक हैं।

चर और स्प्रिंट के साथ आगे लचीलापन ()

यदि आपके तार में परिवर्तनशील संख्याएँ या शब्द होंगे, तो उपयोग करें sprintf():

$stars = get_post_meta( $post->ID, 'rating', true );
$title = get_the_title( $post->ID );

$output = '<p>' .
        sprintf(
            _x(
                'The movie titled %2$s received a %1$d star rating.',
                'Movie Description',
                'your-text-domain'
            ),
            $stars,
            $title
        ) .
    '</p>';

return $output;

अतिरिक्त संसाधन

आगामी वर्डप्रेस I18n निंजा के लिए कुछ अतिरिक्त संसाधन:


इसके अलावा बाहर की जाँच कोडेक्स में "स्थानीयकरण" "विविध" के तहत काम करता है और विस्तृत व्याख्या की एक पूरी टूटने के लिए।
TheDeadMedic


@ जोहान्स पेल: जब तक मैं अपना पोस्ट नहीं करूंगा, मुझे आपका जवाब नहीं चाहिए, क्या मुझे अपना पोस्ट डिलीट कर देना चाहिए?
जेरेमी जेरेड

@JeremyJared नहीं, क्यों? आगे की जानकारी एक बुरी बात नहीं हो सकती है, क्या यह हो सकता है ?! मुझे लगता है कि आपके उत्तर के माध्यम से अच्छी तरह से सोचा गया है। मुझ से +1।
जोहान्स पिल्ले

@ TheDeadMedic "अतिरिक्त संसाधनों" में संपादित।
जोहान्स पिल्ले

3

मैं अनुवादों का विशेषज्ञ नहीं हूं, लेकिन वर्डप्रेस कोडेक्स पेज का अच्छा प्रलेखन है और प्रत्येक उदाहरण का उपयोग करने का कारण बताता है।

कोडेक्स पृष्ठों से:

__()

का उपयोग तब किया जाता है जब संदेश किसी अन्य फ़ंक्शन के तर्क के रूप में पारित हो जाता है; _e()संदेश को सीधे पृष्ठ पर लिखने के लिए उपयोग किया जाता है। इन दो कार्यों पर अधिक विवरण:

__('message')

'संदेश' के अनुवाद के लिए स्थानीयकरण मॉड्यूल खोजता है, और अनुवाद को PHP रिटर्न स्टेटमेंट में भेजता है। यदि 'संदेश' के लिए कोई अनुवाद नहीं मिला है, तो यह 'संदेश' देता है।

_e('message')

'संदेश' के अनुवाद के लिए स्थानीयकरण मॉड्यूल की खोज करता है, और अनुवाद को PHP इको स्टेटमेंट में भेजता है। यदि 'संदेश' के लिए कोई अनुवाद नहीं मिला है, तो यह केवल 'संदेश' को ग्रहण करता है।

ध्यान दें कि यदि आप एक थीम या प्लगइन का अंतर्राष्ट्रीयकरण कर रहे हैं, तो आपको एक का उपयोग करना चाहिए "Text Domain"

गेटटेक्स्ट फ्रेमवर्क में ज्यादातर वर्डप्रेस का ध्यान रखा जाता है। हालाँकि, वर्डप्रेस वितरण में कुछ स्थान हैं जहाँ गेटटेक्स्ट का उपयोग नहीं किया जा सकता है:

  • मुख्य वर्डप्रेस README फ़ाइल - यह एक स्थिर HTML फ़ाइल है, PHP फ़ाइल नहीं है, इसलिए इसे गेटेक्स्ट फ़ंक्शन के माध्यम से नहीं चलाया जा सकता है।
  • वर्डएक्स लोडिंग चक्र में कुछ त्रुटि संदेश बहुत पहले उत्पन्न होते हैं, इससे पहले कि गेटटेक्स्ट लोड हो जाए।

कोडेक्स पेज से लिंक करें

अतिरिक्त जानकारी जब गेटटेक्स्ट काम नहीं करता है

उम्मीद है कि आपके सवाल का जवाब है, अगर हमें पता नहीं है और शायद कोई और मदद कर सकता है या मैं कुछ और शोध कर सकता हूं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.