वर्डप्रेस प्लगइन अनुवाद कैसे तैयार करें?


19

अनुवाद तैयार करने का सबसे अच्छा तरीका क्या है?

इसका शुरुआत से अनुवाद नहीं किया जाता है, लेकिन इसे आसानी से अनुवाद किया जा सकता है, इसलिए विभिन्न संस्कृतियों के साथी डेवलपर्स प्लगइन के स्थानीयकरण प्रक्रिया में भाग ले सकते हैं।

जवाबों:


38

1. स्थानीयकरण को ध्यान में रखकर लिखें

टेक्स्ट आउटपुट का उपयोग echoया print()उत्पादन न करें , इसके बजाय वर्डप्रेस फ़ंक्शंस का उपयोग करें __()और _e():

/** Not localization friendly */
echo "Welcome to my plugin";    
// OR
print("Welcome to my plugin");

/** Localization friendly */
_e('Welcome to my plugin', 'my-plugin');
// OR
$my_text = __('Welcome to my plugin', 'my-plugin');
echo $my_text;

_e()और __()अनुवाद प्रदान करेगा - वर्तमान भाषा में - पहले पैरामीटर के रूप में प्रदान किए गए पाठ का। _e()पाठ को आउटपुट करेगा जबकि __()इसे वापस करेगा।

दूसरा पैरामीटर टेक्स्ट डोमेन है , आप इसका उपयोग वर्डप्रेस को यह बताने के लिए करेंगे कि पहले पैरामीटर के रूप में प्रदान किया गया टेक्स्ट इस प्लगइन का है, आप किसी भी नाम का उपयोग कर सकते हैं, लेकिन मैं उसी नाम का उपयोग करना पसंद करता हूं, जैसा कि मैंने प्लगइन के लिए उपयोग किया है। निर्देशिका की फ़ाइल, मुझे यह अधिक सहज लगती है।

डायनामिक टेक्स्ट को आउटपुट कैसे करें: "हैलो <यूजरनेम>"?

के साथ __()और sprintf():

/** Get the username */
$username = 'Magictrick';

/** Not localization friendly */
echo "Hello $username";     

/** Localization friendly */
printf(__('Hello %s', 'my-plugin'), $username);
// OR 
$my_text = sprintf(__('Hello %s', 'my-plugin'), $username);
echo $my_text;

2. .pot / .po / .mo फाइलें तैयार करें

परिभाषाएं

  • .Pot फ़ाइल : प्लगइन डेवलपर द्वारा आपके निपटान में डाल दी जाती है और इसका उपयोग नए अनुवाद बनाने के लिए शुरुआती बिंदु के रूप में किया जाता है, वर्डप्रेस इसका उपयोग नहीं करता है।
  • A .po फ़ाइल : एक अनुवाद फ़ाइल है जिसे आपने या किसी और ने शुरू किया है, और शायद पूरा हो गया है, वर्डप्रेस इसका उपयोग नहीं करता है।
  • A.mo फ़ाइल : स्वचालित रूप से Poedit द्वारा बनाई जाती है। जब भी आप एक .po फ़ाइल को सहेजते हैं, तो आप इन फ़ाइलों के साथ सभी कर सकते हैं। जब भी आप एक .po फ़ाइल बनाते या अपडेट करते हैं, तो उन्हें अपलोड या फिर से अपलोड करना होता है। वर्डप्रेस .mo फ़ाइलों से अनुवाद करता है

ओपन Poedit और एक नई सूची बनाने (फ़ाइल> नया Catallog ...) इन सेटिंग के साथ:

  • प्रोजेक्ट जानकारी: अपनी (या अपनी टीम की) जानकारी का उपयोग करें, भाषा और देश को आपकी प्लगइन डिफ़ॉल्ट भाषा से मेल खाना चाहिए
  • पथ:
    • आधार पथ: .
    • पथ: सभी निकालें और जोड़ें .., (हम भाषा फ़ाइल को एक प्लगइन उपनिर्देशिका में संग्रहीत करेंगे जिसे भाषा कहा जाता है)
  • कीवर्ड: सभी निकालें और जोड़ें __और_e

कैटलॉग को सेव करें और अपडेट बटन दबाकर ट्रांसलेटेबल टेक्स्ट के लिए अपनी प्लगइन फाइल्स को स्कैन करें। जब अद्यतन उस कैटलॉग के पास समाप्त हो जाता है, तो आपको उस फ़ाइल को अपडेट करने की आवश्यकता नहीं होगी जब तक कि आप अपने प्लगइन में नई ट्रांसलेटेबल स्ट्रिंग्स (यानी संलग्न या ) जोड़ न दें ।/my_wordpress_blog/wp-content/plugins/my-plugin/languages/my-plugin.pot__()_e()

अब पहला अनुवाद बनाते हैं (मैं fr_FR का उपयोग करूंगा):

Podeit का उपयोग करना , POT फ़ाइल से एक कैटलॉग बनाएं (फ़ाइल फ़ाइल POT से नई सूची ...) :

  • प्रोजेक्ट जानकारी: अपनी (या अपनी टीम) जानकारी का उपयोग करें, भाषा और देश को बदलें , मैं फ्रेंच और फ्रांस का उपयोग करूंगा
  • पथ: परिवर्तन न करें
  • कीवर्ड: पीछा नहीं करते

कैटलॉग के रूप में सहेजें । कुछ या सभी स्ट्रिंग्स का अनुवाद करें, .po फ़ाइल को फिर से सहेजें , .po और .mo दोनों फ़ाइलों को अपलोड करें।/my_wordpress_blog/wp-content/plugins/my-plugin/languages/my-plugin-fr_FR.po

ध्यान दें कि जब भी आप को बचाने के लिए एक पुलिस फाइल एक mo फ़ाइल ही नाम के साथ उत्पन्न होता है, पुलिस फाइल के फ़ाइल नाम महत्वपूर्ण है , यह प्लगइन पाठ डोमेन (मेरी-प्लगइन) और भाषा लोकेल के संयोजन से बना है ( fr_FR), हमेशा प्लगइन्स के लिए अपनी .po फ़ाइलों को इस तरह से नाम दें: [टेक्सटोमैन] - [लोकेल] .po , यहाँ कुछ उदाहरण दिए गए हैं:

  • इतालवी / इटली: wpcf7-it_IT.po
  • पुर्तगाली / ब्राजील: wpcf7-pt_BR.po
  • अरबी: wpcf7-ar.po... हाँ!

जब भी प्लगइन को नए टेक्स्ट के साथ अपडेट किया जाता है, तो पो फाइल को अपडेट करें, नए स्ट्रिंग्स का अनुवाद करें और .po -mo फाइलों को फिर से लोड करें।

3. वर्तमान भाषा के लिए अनुवादित पाठ को लोड करने के लिए प्लगइन को निर्देश दें

कहीं न कहीं आपके प्लगइन में, आपको वर्डप्रेस को अपनी .mo फ़ाइल का उपयोग करने के लिए कहना होगा, आप इस कोड का उपयोग अपने प्लगइन की शुरुआत में कर सकते हैं:

function my_plugin_init() {
  load_plugin_textdomain( 'my-plugin', false, 'my-plugin/languages' );
}
add_action('init', 'my_plugin_init');

फ़ंक्शन my-pluginके 1 और 3 पैरामीटर में अपने प्लगइन नाम के साथ बदलें load_plugin_textdomain

4. परीक्षण और समस्या निवारण

कुछ कारणों से यह काम नहीं कर सकता है:

  • स्ट्रैप्स को .pot या .po फ़ाइल में आयात नहीं किया जाता है
    • → गलत सूची सेटिंग्स (पथ या कीवर्ड या दोनों)
  • वर्डप्रेस साइट पर टेक्स्ट का अनुवाद नहीं किया गया है
    • → .मो फ़ाइल उस भाषा के गुम होने या गलत फ़ाइल नाम के लिए
    • → पाठ डोमेन का उपयोग नहीं किया गया (इसके _e('my text')साथ बदलें _e('my text', 'my-plugin'))
    • → पाठ डोमेन लोड नहीं किया गया (सही मापदंडों के साथ ऊपर उदाहरण का उपयोग करें, WP आपको गलतियों के बारे में चेतावनी नहीं देगा)

3
+1 अच्छा लेखन-अप :) इस लेख पर एक नज़र डालें: वर्डप्रेस भाषा लोड करना सही तरीका है , " वर्डप्रेस में लोडिंग भाषा फ़ाइलों से दर्द को बाहर निकालने के लिए व्यावहारिक दिशानिर्देश "। :::::: Glotpress और Polyglots समूह भी ध्यान देने योग्य हो सकते हैं।
ब्रासोफिलो

इस अच्छे निर्देश के लिए धन्यवाद! यह ध्यान देने योग्य है कि load_plugin_textdomain () को हर विधि में बुलाया जाना चाहिए, जहाँ आप _e () और __ () का उपयोग करते हैं
Andreas

2

नबील का जवाब काफी हद तक पूरा हो गया है, लेकिन एक आसान बदलाव प्रदान किया गया है:

  1. आपका प्लगइन WordPress.org plugin repository पर है

  2. आप यह चाहते हैं कि आपका प्लगइन केवल वर्डप्रेस 4.6 या उच्चतर के साथ काम करे।

कदम ये हैं:

  1. अपने प्लगइन की readme.txt फ़ाइल में, जोड़ें Requires at least: 4.6Https://developer.wordpress.org/plugins/wordpress-org/how-your-readme-txt-Street/ देखें

  2. यदि यह पहले से ही नहीं है, तो अपने प्लगइन को WordPress प्लगइन रिपॉजिटरी में अपलोड करें। Https://wordpress.org/plugins/developers/add/ देखें ।

  3. अपने प्लगइन का स्लग / टेक्स्ट डोमेन खोजें। ऐसा करने के लिए, वर्डप्रेस प्लगइन रिपॉजिटरी पर अपने प्लगइन के पेज पर जाएं। URL https://wordpress.org/plugins/your-plugin-slug/ जैसा होगा । URL का अंतिम भाग, "आपका प्लगइन-स्लग", आपके प्लगइन का स्लग है। यही आप अनुवाद कार्यों के पाठ डोमेन के लिए उपयोग करते हैं।

  4. अपने प्लगइन में वर्डप्रेस अनुवाद कार्यों का उपयोग करें (जैसे __e(‘hello’, ‘my-plugin-domain’);)। बस पिछले चरण में अधिग्रहित सही प्लगइन टेक्स्ट डोमेन का उपयोग करना सुनिश्चित करें। अधिक जानकारी के लिए https://developer.wordpress.org/plugins/internationalization/how-to-internationalize-your-plugin/ देखें ।

यदि आप उपरोक्त चरण करते हैं, तो वर्डप्रेस इसका ध्यान रखेगा:

  • सभी अनुवाद योग्य स्ट्रिंग्स के लिए अपने प्लगइन के माध्यम से पार्सिंग (Poedit या कुछ भी स्थापित करने और चलाने की कोई आवश्यकता नहीं)
  • किसी को भी अपने प्लगइन के अनुवाद में योगदान करने के लिए इसे आसान बनाइए। Translate.wordpress.org (अपने प्लगइन का अनुवाद करने के लिए अपनी खुद की साइट समर्पित करने की आवश्यकता नहीं है, या अनुवादकों के लिए एक कस्टम प्रक्रिया आपके पास अपने अनुवाद प्रस्तुत करने के लिए है)
  • जब कोई आपके प्लगइन का उपयोग करता है, तो वर्डप्रेस यह जांचने का ध्यान रखेगा कि क्या यह उनकी भाषा में अनुवाद करता है, और यदि ऐसा है, तो इसे अपनी भाषा में दिखाते हुए (उनके लिए कोई ज़रूरत नहीं है, या आप, उनकी वेबसाइट पर अनुवाद फ़ाइलों को लोड करने के लिए)

(मेरे ब्लॉग पोस्ट का उत्तर यहां दें: https://cmljnelson.blog/2019/01/01/the-really-lazy-way-to-translate-a-wordpress-plugin/ )


मुझे यकीन नहीं है कि यह क्यों ठुकरा दिया गया था। यह मैंने wordpress.org/plugins/print-my-blog अनुवाद-तैयार करने के लिए किया है (और प्लगइन का सफलतापूर्वक अनुवाद किया गया है)
thespacecamel

क्या इसका मतलब यह है कि यदि कोई प्लगइन / थीम वर्डप्रेस प्लगइन रिपॉजिटरी में नहीं है, लेकिन वहां एक प्लगइन के टेक्स्ट डोमेन का उपयोग करता है, तो वर्डप्रेस गलत अनुवाद फ़ाइलों को लोड करेगा?
बोडो

अच्छा सवाल @bodo। यदि कोई प्लगइन wp.org रेपो में किसी अन्य प्लगइन के टेक्स्ट डोमेन का उपयोग करने का संकेत देता है, तो मुझे लगता है कि वर्डप्रेस खुशी से wp.org प्लगइन के अनुवाद फ़ाइलों का उपयोग करेगा। लेकिन क्षमा करें, मुझे यकीन नहीं है।
thespacecamel
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.