ब्लॉक को स्थानीय भाषा में लिखें

ब्लॉक की परिभाषाएं, जो उपयोगकर्ता की भाषा के हिसाब से लिखी जा सकती हैं, ब्लॉक की गई परिभाषा के साथ काम करती है. स्ट्रिंग टेबल का इस्तेमाल करके, JSON ब्लॉक डेफ़िनिशन की मैसेज स्ट्रिंग, इनपुट, फ़ील्ड, और लेबल को ऑप्टिमाइज़ कर सकती हैं. इससे भाषा की शब्दावली, शब्दों के क्रम, और निर्देश दिखाने में मदद मिलती है.

अंग्रेज़ी में list_repeat ब्लॉक स्पैनिश में list_repeat ब्लॉक कोरियन में list_repeat ब्लॉक दाएं से बाएं अरबी में list_repeat ब्लॉक

इन सभी मामलों में, JSON ब्लॉक की परिभाषा एक ही होती है:

// Block for creating a list with one element repeated.
{
  "type": "lists_repeat",
  "message0": "%{BKY_LISTS_REPEAT_TITLE}",
  "args0": [
    {
      "type": "input_value",
      "name": "ITEM"
    },
    {
      "type": "input_value",
      "name": "NUM",
      "check": "Number"
    }
  ],
  "output": "Array",
  "colour": "%{BKY_LISTS_HUE}",
  "tooltip": "%{BKY_LISTS_REPEAT_TOOLTIP}",
  "helpUrl": "%{BKY_LISTS_REPEAT_HELPURL}"
}

स्ट्रिंग टेबल

lists_repeat के उदाहरण में कई "%{BKY_...}" स्ट्रिंग शामिल हैं. इनमें से हर एक, Blockly.Msg स्ट्रिंग टेबल में मौजूद किसी स्ट्रिंग का रेफ़रंस है. ब्लॉक को इंस्टैंशिएट किए जाने पर, ब्लॉकली स्ट्रिंग को वैल्यू से बदलने की कोशिश करता है.

उदाहरण के लिए, अगर %{BKY_LISTS_REPEAT_TITLE} मौजूद है, तो उसे Blockly.Msg['LISTS_REPEAT_TITLE'] की वैल्यू से बदल दिया जाता है. अगर वैल्यू मौजूद नहीं है, तो %{BKY_...} नोटेशन को उसकी जगह पर छोड़ दिया जाता है और जो अनुवाद मौजूद नहीं है उसके लिए, ब्लॉकली एक चेतावनी देता है.

जैसा कि उदाहरण में दिखाया गया है, नोटेशन कई जगहों पर काम करता है. मैसेज और टूलटिप की मदद से, उपयोगकर्ता को दिखने वाली स्ट्रिंग को बदला जा सकता है. इसी तरह, ड्रॉपडाउन फ़ील्ड भी आइटम टेक्स्ट के लिए नोटेशन का इस्तेमाल कर सकते हैं. सहायता यूआरएल को स्थानीय भाषा में बदला जा सकता है. इससे यह पक्का किया जा सकेगा कि उपयोगकर्ता को उसी तरह के स्थानीय भाषा वाले पेज पर भेजा जा रहा है. आखिर में, colour वैल्यू, ब्लॉक के पैलेट को एक ही जगह पर लाने के लिए नोटेशन का इस्तेमाल कर सकती है.

अगर आपने JavaScript लागू किया है और आपको रनटाइम के दौरान उपयोगकर्ता की भाषा बदलने की उम्मीद नहीं है, तो सीधे तौर पर दिए जाने वाले रेफ़रंस का इस्तेमाल करना आसान हो सकता है. उदाहरण के लिए, Blockly.Msg['LISTS_REPEAT_TITLE'] या Blockly.Msg.LISTS_REPEAT_TITLE'.

स्ट्रिंग टेबल, msg/js में भाषा के हिसाब से बनी किसी .js फ़ाइल से लोड की जाती हैं. सही ब्लॉक अनुवाद लोड करने के लिए, अपने वेब पेज में सही फ़ाइल लोड करें.

JSON मैसेज इंटरपोलेशन

message0 एट्रिब्यूट (और message1, message2 वगैरह) इनपुट, फ़ील्ड, और आस-पास के लेबल टेक्स्ट को लिखता है. lists_repeat ब्लॉक में मौजूद LISTS_REPEAT_TITLE के लिए, अंग्रेज़ी में वैल्यू इस तरह होगी:

Blockly.Msg.LISTS_REPEAT_TITLE = 'create list with item %1 repeated %2 times';

दो इंटरपोलेशन मार्कर, %1 और %2, दो इनपुट की जगहों को मार्क करते हैं. ज़्यादा जानकारी, args0 कलेक्शन में दी गई है. args1, message1 स्ट्रिंग से जुड़ा होगा. ब्लॉक इनपुट और फ़ील्ड तय करने के बारे में ज़्यादा जानने के लिए, कस्टम ब्लॉक बनाएं गाइड देखें.

इंटरपोलेशन मार्कर के बीच के टेक्स्ट को बिना नाम वाले लेबल फ़ील्ड में बदल दिया जाता है. इससे ब्लॉक में शब्दों का क्रम और यह कैसे दिखता है:

// In Spanish
Blockly.Msg.LISTS_REPEAT_TITLE = "crear lista con el elemento %1 repetido %2 veces";
// In Korean
Blockly.Msg.LISTS_REPEAT_TITLE = "%1을 %2번 넣어, 리스트 생성";

दाईं से बाईं ओर लिखी जाने वाली भाषाओं में अनुवाद करते समय, मैसेज स्ट्रिंग विज़ुअल क्रम में लिखी जाती है. इसमें यूनिकोड के निर्देश वाले निर्देश शामिल नहीं होने चाहिए:

// In Arabic. Note how %2 is left of %1, since it read right to left.
Blockly.Msg.LISTS_REPEAT_TITLE = "إنشئ قائمة مع العنصر  %1 %2 مرات";

स्ट्रिंग टेबल फिर से बनाना

स्ट्रिंग टेबल .js फ़ाइलें बनाना, build:langfiles स्क्रिप्ट का हिस्सा है. स्क्रिप्ट एक नया en.json बनाने के लिए, msg/messages.js से आइडेंटिफ़ायर की और अंग्रेज़ी में किए गए अनुवादों को लेता है. इसके बाद, अन्य JSON फ़ाइलों में मौजूद सभी अनुवादों के साथ-साथ, ये सभी भाषाओं के लिए अपडेट की गई JavaScript स्ट्रिंग टेबल फिर से बना देती हैं. इसमें सभी भाषाओं के लिए, एक नई en.js भी शामिल है.

अंग्रेज़ी के अलावा दूसरी भाषाओं वाली JSON फ़ाइलें, TranslateWiki पर मौजूद पार्टनर से मिलती हैं. आप कैसे मदद कर सकते हैं, इस बारे में जानने के लिए अनुवाद करना पर मौजूद नोट देखें.