गुटेनबर्ग कैसे प्रतिक्रिया में अनुवाद करता है?


11

मैं गुटेनबर्ग के स्रोत कोड के माध्यम से जा रहा था, जैसे के लिए यह और नहीं समझ सकता कि वे किस तरह अनुवाद संभाल ...

वे इसका आयात करते हैं import { __ } from '@wordpress/i18n'और फिर स्रोत कोड में वे इसका उपयोग करते हैं speak( __( 'Block settings closed' ) );

क्या कोई मुझे बता सकता है कि वे कैसे रिएक्टज के भीतर इन अनुवादों को एक सामान्य .po फ़ाइल में एकत्र करने का प्रबंधन करते हैं?

मुझे लगता है कि उनके पास कुछ निर्माण प्रक्रिया है जो जेएस सहित सभी फाइलों के माध्यम से जाती है और उन्हें इकट्ठा करती है, लेकिन निश्चित नहीं है।

जवाबों:


6

में गुटेनबर्ग के GitHub भंडार आप i18n पैकेज है कि प्रयोग किया जाता है का स्रोत देख सकते हैं। इस स्रोत में, आप देखेंगे कि जेड आयात किया जा रहा है (gutenberg / पैकेज / i18n / src / index.js की पंक्ति 4) और फिर हुड के तहत अधिकांश अनुवाद कार्यों के लिए उपयोग किया जा रहा है।

जेड ने "गेटटेक्स्ट स्टाइल आई 18 एन फॉर मॉडर्न जावास्क्रिप्ट ऐप्स" पेश किया है (या कम से कम यह उनकी साइट पर ऐसा कहता है)।

आपका प्रश्न .po फाइलों के लिए है। जेड अपनी साइट पर बताते हैं:

वहाँ काफी कुछ उपलब्ध हैं। Gettext .po फाइलें अधिकांश सभ्य अनुवाद कंपनियों से मानक आउटपुट हैं, क्योंकि यह एक पुराना मानक है।

मैं वर्तमान में उपयोग करता हूं: po2json

हालाँकि, मैं भविष्य के संस्करण में इस कार्यक्षमता को एक अलग जेड मॉड्यूल में जोड़ना चाहूंगा।

हालांकि, यह यहां लागू नहीं होता है।

आगे की खुदाई से पता चलता है, setLocaleData( data: Object, domain: string )अनुवाद को पारित करने के लिए उपयोग किया जाता है, इस तरह से :

$locale_data = gutenberg_get_jed_locale_data( 'gutenberg' );
wp_add_inline_script(
    'wp-i18n',
    'wp.i18n.setLocaleData( ' . json_encode( $locale_data ) . ' );'
);

( gutenberg_get_jed_locale_data( $domain )कमोबेश एक आवरण के लिए get_translations_for_domain( $domain ))

तो ऐसा लगता है कि वर्डप्रेस PHP के माध्यम से अनुवाद डेटा को पुनः प्राप्त करता है और फिर इसे जेड में भेजता है। Jed खुद को कोई अनुवाद फाइल लोड नहीं करता है।

पैकेज की रीडमी यह भी बताती है कि स्थानीयकृत तार वाली .pot फ़ाइल को ठीक से कैसे उत्पन्न किया जाए

पैकेज pot-to-phpमें एक .pp फ़ाइल में सूचीबद्ध संदेशों वाले php फ़ाइलों को उत्पन्न करने के लिए उपयोग की जाने वाली स्क्रिप्ट भी शामिल है । इस समय से WordPress.org ट्रांसलेशन स्ट्रिंग्स की खोज को ट्रिक करना उपयोगी है, वर्डप्रेस.org जावास्क्रिप्ट फ़ाइलों से सीधे स्ट्रिंग पार्स करने में सक्षम नहीं है।

npx pot-to-php languages/myplugin.pot languages/myplugin-translations.php text-domain

क्या इसका मतलब यह है कि गुटेनबर्ग कुछ windowसंपत्ति में अनुवाद करता है जैसा wp_add_inline_scriptकि PHP द्वारा लोड किए गए JSON के माध्यम से होता है और फिर इसे React की ओर से पुनः प्राप्त करता है और इसे Jed को भेजता है? ... और जेड आगे जादू करता है?
बोलोगर

@ बोलर जरूरी नहीं कि windowप्रॉपर्टी हो, लेकिन हां। PHP मूल्यों को पुनः प्राप्त करता है और उन्हें wp_add_inline_script
केरो

2
आपको मेरे द्वारा टिप्पणी में जोड़ी गई जानकारी के साथ उत्तर का विस्तार करना चाहिए। यह टिप्पणी वास्तव में ओपी के लिए क्या दिखता है
मार्क कप्लुन

2

कम से कम अभी के लिए, जब तक कि कोई बेहतर स्वचालित प्रक्रिया न हो, मैं सुझाव दूंगा कि जेएस की .pot फाइलें बिल्कुल भी न बनाएं।

जैसा कि @kero ने अपने उत्तर में बताया है कि अभी GB अनुवाद को .mo फ़ाइल से JS में एक प्रकार की बूँद सरणी के रूप में पारित किया जा रहा है। यह वर्कफ़्लो सभी स्थानीयकरण छेड़छाड़ प्लग को तोड़ देगा जो कि __और सहयोगियों के परिणामों को फ़िल्टर करने पर निर्भर करता है । एक बेहतर वर्कफ़्लो में __कॉल के साथ अनुवादित किए जा रहे स्ट्रिंग्स से बूँद सरणी की एक स्पष्ट पीढ़ी होगी, इसी तरह कि आप गैर जीबी संदर्भ में जेएस अनुवाद कैसे करेंगे। यह .pot फ़ाइलों को बनाने के मुद्दे को भी हल करेगा।

यहां जो कुछ याद नहीं है वह कुछ स्वचालित प्रक्रिया है जो जेएस फाइलों पर चलेगी और वह प्रासंगिक PHP कोड का उत्पादन करेगी, जिसका बदले में poedit जैसे टूल द्वारा विश्लेषण किया जा सकता है।



1
अच्छा प्रारंभिक बिंदु, केवल भाग छोड़ दिया गया है ऑटो wp_add_inline_script को कॉल उत्पन्न करता है, जैसा कि अभी यह केवल पॉट पीढ़ी के लाभ के लिए बस php उत्पन्न करता है, लेकिन वास्तव में इसका उपयोग नहीं करते हैं (मेरा अनुमान है)
मार्क कपून
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.