HTML __ () या _e () भाषा अनुवाद स्ट्रिंग के अंदर


24

अनुवाद के तार बनाने के लिए उचित तरीका क्या है?

उदाहरण के लिए,

echo __( 'Hello ' . $first . ' you owe me money.' );
echo __( '<div><p>Top: ' . $t_margin . '</p>' . '<p>Bottom: ' . $b_margin . '</p></div>' )

क्या स्ट्रिंग्स और / या HTML को जोड़ना ठीक है या इसे पहले किया जाना चाहिए और फिर अनुवाद जैसे:

$html = '<div><p>Top: ' . $t_margin . '</p>' . '<p>Bottom: ' . $b_margin . '</p></div>';
echo __( $html ); 

जवाबों:


41

__()फ़ंक्शन में एक दूसरा तर्क है । इसे उस डोमेन पर सेट किया जाना चाहिए जिसे आप अपने प्लगइन या थीम के लिए उपयोग कर रहे हैं। नीचे दिए गए उदाहरणों में मैं उपयोग करता हूं 'text_domain'। आपका डोमेन स्ट्रिंग अद्वितीय होना चाहिए। यह किसी अन्य डोमेन स्ट्रिंग से मेल नहीं खाना चाहिए। 'default'वर्डप्रेस डोमेन नाम पर एक पाठ डोमेन तर्क चूक का उपयोग नहीं करना । अधिक जानकारी के लिए लिंक देखें।

हमेशा स्ट्रिंग ( 'text_domain') का उपयोग करें । इसमें स्ट्रिंग के साथ कभी भी वैरिएबल, फंक्शन या कंटीन्यू का इस्तेमाल न करें। अधिकांश (सभी?) अनुवाद कार्यक्रम इसे स्ट्रिंग के बिना नहीं देखेंगे।

तुम्हारा कोड:

echo __( 'Hello ' . $first . ' you own me money.' );

स्ट्रिंग में चर शामिल न करें।

एक बेहतर तरीका:

echo sprintf( __( 'Hello %s you own me money.', 'text_domain' ), $first );

या केवल:

printf( __( 'Hello %s you own me money.', 'text_domain' ), $first );

%sप्लेसहोल्डर मानव अनुवादक कि एक स्ट्रिंग वहाँ में जा रहा है बताता है। %dसंख्या के लिए उपयोग करें । अन्य प्लेसहोल्डर भी हैं ।

(यह वाक्य व्याकरणिक रूप से गलत अंग्रेजी है। 'Hello %s, you owe me money.'या तो 'Hello %s, you own my money.'आप जिस अर्थ के लिए इच्छुक थे, उसका उपयोग करें ।)


तुम्हारा कोड:

$html = '<div><p>Top: ' . $t_margin . '</p>' . <p>Bottom: ' . $b_margin . '</p></div>';

HTML का अनुवाद न करें। यह किसी भी भाषा में समान है।

एक बेहतर तरीका:

$html = sprintf( '<div><p>%s</p><p>%s</p></div>', __( 'Top: ', 'text_domain' ) .  $t_margin, __( 'Bottom: ', 'text_domain' ) . $b_margin );

या इसे कई लाइनों में तोड़ दें:

$html = sprintf(
    '<div><p>%s</p><p>%s</p></div>',
    __( 'Top: ', 'text_domain' ) .  $t_margin,
    __( 'Bottom: ', 'text_domain' ) . $b_margin
);

यदि यह स्पष्ट नहीं है कि आप इन शब्दों के संदर्भ को समझाने के लिए किस शीर्ष और नीचे का उपयोग कर रहे हैं _x()


आप अन्य अनुवाद मामलों को यहां पा सकते हैं: अंतर्राष्ट्रीयकरण: आप शायद गलत कर रहे हैं


आप कहते हैं कि HTML का अनुवाद न करें। क्या मैं इंगित कर सकता हूं कि इसका अनुवाद नहीं किया जा रहा है, इसे पहले से अनुवादित स्ट्रिंग्स के एक मौजूदा टेबल / एस में देखा जा रहा है। HTML में स्ट्रिंग होने से कोई फर्क नहीं पड़ता है, बशर्ते अनुवादक उन्हें हटा न दे। वास्तव में, कुछ स्थितियों में यह regex खोज और प्रतिस्थापन की तुलना में बेहतर प्रदर्शन के लिए बनाता है।
Twifty

असंबंधित, लेकिन ध्यान देने योग्य: textdomainएक शाब्दिक स्ट्रिंग होना चाहिए, यह एक चर / स्थिर / संपत्ति नहीं हो सकता है।
ब्रासोफिलो

@brasofilo, उस सलाह को शीर्ष के पास उत्तर में लिखा गया है, लेकिन भालू दोहरा रहा है। मैंने यह गलती कई कस्टम प्लगइन्स में की थी जो मैंने ग्राहकों के लिए लिखी थी।
चार्ल्स क्लार्कसन

के लिए +1 sprintf()। यह वास्तव में अनुवाद योग्य स्ट्रिंग में HTML होने के आसपास का तरीका है।
हेलगेटहाइकिंग

मैं नहीं देखता कि sprintf()किसी और तरह से मदद करने का उपयोग कैसे किया जा सकता है और शायद कुछ और साफ दिखते हैं। यदि आपके अंदर HTML के साथ एक वाक्य है जैसे Some text with a <strong>strong</strong> word inside.कि वाक्य को पूरे के रूप में अनुवाद करना कैसे संभव है और अनुवाद नहीं है Some text with a, strongऔर word insideव्यक्तिगत रूप से (जिसका कोई मतलब नहीं है)।
फफनी

4

मैं स्ट्रिंग में चर के मुद्दे को संबोधित नहीं करूंगा क्योंकि यह पहले ही कहा जा चुका है।

आप अपने स्ट्रिंग को स्थिर रखना चाहते हैं, जिसका अर्थ है कि सामग्री नहीं बदलेगी। आप अनावश्यक HTML को भी बाहर रखना चाहते हैं।

__( '<p>Hello World!</p>' );
__( '<h1>Hello World!</h1>' );

उपरोक्त एक ही पाठ के लिए आपकी तालिका में दो पंक्तियों को ले जाएगा। उन्हें इस रूप में फिर से लिखा जा सकता है:

'<p>' . __( 'Hello World!' ) . '</p>'
'<h1>' . __( 'Hello World!' ) . '</h1>'

इसे एक ही पंक्ति में कम करना।

पाठ में कभी-कभी HTML अपरिहार्य होता है। उदाहरण के लिए:

__( 'You currently owe <b>%s</b> dollars' );

चूंकि भाषा व्याकरणिक हैं, पाठ को विभाजित करने से जो कोई भी अनुवाद कर रहा है, उसके लिए समस्याएँ पैदा होंगी।

अंगूठे का नियम। HTML पाठ स्वरूपण टैग मध्य वाक्य ठीक हैं। HTML के साथ शुरुआत और अंत में वाक्य केवल स्थान बर्बाद करते हैं।


अंतिम उदाहरण में, आप बोल्ड टैग्स को उस तर्क के चारों ओर लपेट सकते हैं जो डाला गया है "<b>$string</b>"। तब आप उपयोग कर सकते हैं 'You currently owe %s dollars'। लेकिन अगर आपको इसे उस _n()फ़ंक्शन के साथ उपयोग करने की आवश्यकता हो सकती है जिसे %dप्लेसहोल्डर की आवश्यकता होती है ।
चार्ल्स क्लार्कसन

@CharlesClarkson अच्छी कॉल। शायद मुझे %sइसे थोड़ा और स्पष्ट करने के लिए छोड़ देना चाहिए था ।
12
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.