ব্লকলি একটি অ্যাপ্লিকেশনে পাঠ্য স্থানীয়করণের জন্য একটি সিস্টেম প্রদান করে, যেমন টুলটিপস, প্রসঙ্গ মেনু এবং ব্লকের পাঠ্য। এটি তার নিজস্ব পাঠ্য স্থানীয়করণ করতে এই সিস্টেম ব্যবহার করে; আপনি আপনার অ্যাপ্লিকেশনের অনন্য পাঠ্য স্থানীয়করণ করতে এটি ব্যবহার করতে পারেন।
দ্রষ্টব্য: স্থানীয়করণ অনুবাদের মতোই, এটি ব্যতীত যে এটি বিভিন্ন দেশের জন্য অনুবাদগুলিকে আলাদা হতে দেয়, যেমন পর্তুগাল এবং ব্রাজিলে পর্তুগিজ ভাষায় বিভিন্ন অনুবাদ।
স্থানীয়করণ সিস্টেম কিভাবে কাজ করে
স্থানীয়করণ সিস্টেমে স্থানীয়করণ টোকেন, স্থানীয়করণ টেবিল এবং ফাংশন রয়েছে যা স্থানীয় স্ট্রিংগুলির সাথে টোকেনগুলি প্রতিস্থাপন করতে টেবিলগুলি ব্যবহার করে।
স্থানীয়করণ টোকেন
একটি স্থানীয়করণ টোকেন হল একটি সংক্ষিপ্ত স্ট্রিং যা পাঠ্যকে প্রতিনিধিত্ব করে যা স্থানীয়করণ করা প্রয়োজন। উদাহরণস্বরূপ, একটি কাস্টম তারিখ ব্লকে একটি টুলটিপ MY_DATE_TOOLTIP টোকেন ব্যবহার করতে পারে। স্থানীয়করণ টোকেন পাঠ্যের জায়গায় কোডে ব্যবহার করা হয়। রানটাইমে, ব্লকলি এই টোকেনগুলিকে স্থানীয় স্ট্রিং দিয়ে প্রতিস্থাপন করে।
স্থানীয়করণ টেবিল
একটি স্থানীয়করণ টেবিল , যা একটি স্ট্রিং টেবিল বা বার্তা টেবিল নামেও পরিচিত, এটি এমন একটি বস্তু যা স্থানীয়করণ টোকেনকে স্থানীয় স্ট্রিংগুলিতে ম্যাপ করে। প্রতিটি লোকেলের জন্য আপনার একটি আলাদা টেবিল প্রয়োজন। উদাহরণস্বরূপ, আপনি যদি ইংরেজি এবং স্প্যানিশ সমর্থন করতে চান, আপনার ইংরেজি টেবিলে থাকতে পারে:
enTable.MY_DATE_TOOLTIP = 'Enter a date.';
এবং আপনার স্প্যানিশ টেবিলে থাকতে পারে:
esTable.MY_DATE_TOOLTIP = 'Introduzca una fecha.';
ব্লকলি তার নিজস্ব পাঠ্যের জন্য স্থানীয়করণ টেবিল অন্তর্ভুক্ত করে। এগুলি ব্লকলি ডিস্ট্রিবিউশনে blockly/msg/xx.js নামে ফাইল হিসাবে উপলব্ধ, যেখানে xx হল লোকেল কোড।
আপনার নিজের পাঠ্যের জন্য আপনাকে স্থানীয়করণ টেবিল তৈরি করতে হবে। রান টাইমে, আপনি Blockly.Msg এ নির্বাচিত লোকেলের জন্য স্থানীয়করণ টেবিল -- Blockly's and yours -- লোড করেন, যা Blockly অভ্যন্তরীণভাবে ব্যবহার করে স্থানীয়করণ টেবিল।
স্থানীয়করণ সিস্টেম ব্যবহার করুন
স্থানীয়করণ সিস্টেম ব্যবহার করার আগে, আপনি কতগুলি লোকেল সমর্থন করতে চান এবং আপনি ভবিষ্যতে আরও লোকেল সমর্থন করার পরিকল্পনা করছেন কিনা তা নির্ধারণ করতে হবে।
আপনি যদি শুধুমাত্র একটি একক লোকেল সমর্থন করতে চান, তাহলে সরাসরি আপনার কোডে আপনার পাঠ্য লিখুন। আপনাকে স্থানীয়করণ টোকেন ব্যবহার করতে হবে না।
- আপনার লোকেল ইংরেজি হলে (
en), আপনাকে আর কিছু করতে হবে না।enলোকেলের জন্য ব্লকলি স্থানীয়করণ টেবিলটি ডিফল্টরূপে লোড হয়। - যদি আপনার লোকেল
enনা হয়, তাহলে সেই লোকেলের জন্য ব্লকলি স্থানীয়করণ টেবিলটি লোড করুন ।
- আপনার লোকেল ইংরেজি হলে (
আপনি যদি এখন বা ভবিষ্যতে একাধিক লোকেল সমর্থন করতে চান:
- আপনার কাস্টম পাঠ্যের জন্য স্থানীয়করণ টোকেন সংজ্ঞায়িত করুন এবং ব্যবহার করুন ।
- ব্যবহারকারীরা কীভাবে একটি লোকেল বেছে নেবে তা নির্ধারণ করুন৷
- লোকেলের জন্য ব্লকলি স্থানীয়করণ টেবিলটি লোড করুন ।
- লোকেলের জন্য আপনার স্থানীয়করণ টেবিল লোড করুন ।
স্থানীয়করণ টোকেন সংজ্ঞায়িত করুন এবং ব্যবহার করুন
একাধিক লোকেল সমর্থন করার সময়, আপনাকে আপনার সমস্ত কাস্টম পাঠ্যের জন্য স্থানীয়করণ টোকেন সংজ্ঞায়িত করতে হবে এবং ব্যবহার করতে হবে।
স্থানীয়করণ টোকেন সংজ্ঞায়িত করুন
প্রতিটি স্ট্রিংয়ের জন্য যা স্থানীয়করণ করা প্রয়োজন, একটি টোকেন সংজ্ঞায়িত করুন। আপনি আপনার টোকেনগুলির সাথে একটি কাস্টম উপসর্গ ব্যবহার করতে চাইতে পারেন যাতে ভবিষ্যতে ব্লকলি যোগ করা যেকোনো টোকেনের সাথে সংঘর্ষ এড়াতে পারে।
উদাহরণস্বরূপ, যদি আপনার একটি একক কাস্টম ব্লক এবং একটি একক কাস্টম বিভাগ থাকে, তাহলে আপনি নিম্নলিখিত টোকেনগুলি সংজ্ঞায়িত করতে পারেন:
MY_DATE_BLOCK_TEXT
MY_DATE_TOOLTIP
MY_DATE_HELPURL
MY_DATE_CATEGORY
স্থানীয়করণ টেবিল সংজ্ঞায়িত করুন
প্রতিটি লোকেলের জন্য আপনি সমর্থন করতে চান, একটি স্থানীয়করণ টেবিল সংজ্ঞায়িত করুন। যেমন:
// English localization table: my_tokens_en.js
export const myEnTable = {
MY_DATE_BLOCK_TEXT: 'Date %1',
MY_DATE_TOOLTIP: 'Enter a date.',
MY_DATE_HELPURL: 'https://myownpersonaldomain.com/help/en/dateblock'
MY_DATE_CATEGORY: 'Dates',
}
// Spanish localization table: my_tokens_es.js
export const myEsTable = {
MY_DATE_BLOCK_TEXT: 'Fecha %1',
MY_DATE_TOOLTIP: 'Introduzca una fecha.',
MY_DATE_HELPURL: 'https://myownpersonaldomain.com/help/es/dateblock'
MY_DATE_CATEGORY: 'Fechas',
}
JSON-এ স্থানীয়করণ টোকেন ব্যবহার করুন
JSON-এ স্থানীয়করণ টোকেন ব্যবহার করতে, একটি টোকেন রেফারেন্স দিয়ে স্থানীয়করণের জন্য স্ট্রিংটি প্রতিস্থাপন করুন। একটি টোকেন রেফারেন্সের ফর্ম আছে %{BKY_TOKEN} । যেমন:
Blockly.common.defineBlocksWithJsonArray([{
type: 'my_date',
message0: '%{BKY_MY_DATE_BLOCK_TEXT}',
args0: [
{
type: 'field_input',
name: 'DATE',
}
],
output: 'Date',
colour: '%{BKY_MY_DATE_COLOUR}',
tooltip: '%{BKY_MY_DATE_TOOLTIP}',
helpUrl: '%{BKY_MY_DATE_HELPURL}',
extensions: ['validate_date'],
}]);
যখন JSON প্রক্রিয়া করা হয় -- এই ক্ষেত্রে, যখন ব্লকটি ইনস্ট্যান্ট করা হয় -- Blockly Blockly.Msg এ টোকেনগুলি সন্ধান করে এবং স্থানীয় স্ট্রিংগুলির সাথে প্রতিস্থাপন করে। যদি এটি একটি টোকেন খুঁজে না পায়, তবে এটি রেফারেন্সটি জায়গায় রেখে দেয় এবং একটি সতর্কতা নির্গত করে।
যেখানে টোকেন রেফারেন্স ব্যবহার করা যেতে পারে তার সম্পূর্ণ তালিকার জন্য, পরিশিষ্ট দেখুন।
JSON বার্তা ইন্টারপোলেশন
একটি JSON ব্লক সংজ্ঞার message কীগুলি একটি ব্লকের ইনপুট এবং ক্ষেত্রগুলি (লেবেল সহ) সংজ্ঞায়িত করে৷ এই কীগুলিতে টোকেন রেফারেন্সের ব্যবহার একটি একক ব্লক সংজ্ঞাকে শব্দভান্ডার, শব্দ ক্রম এবং একাধিক লোকেলের দিকনির্দেশের সাথে খাপ খাইয়ে নিতে দেয়। উদাহরণস্বরূপ, এখানে চারটি ভিন্ন ভাষায় ব্লকলির lists_repeat ব্লক রয়েছে:




এই সমস্ত ব্লক একই ব্লক সংজ্ঞা ভাগ করে, যার message0 কী হল:
message0: %{BKY_LISTS_REPEAT_TITLE},
ইংরেজি স্থানীয়করণ টেবিলে এই টোকেনের মান হল:
Blockly.Msg['LISTS_REPEAT_TITLE'] = 'create list with item %1 repeated %2 times';
ইন্টারপোলেশন মার্কারগুলি ( %1 এবং %2 ) ব্লকের সংজ্ঞায়িত ইনপুট এবং ক্ষেত্রগুলির সাথে মিলে যায় এবং মার্কারগুলির মধ্যে পাঠ্য নামবিহীন লেবেল ক্ষেত্রে রূপান্তরিত হয়৷ যেহেতু message0 এর পাঠ্য স্থানীয়করণ টেবিলে সংরক্ষিত আছে এবং ব্লক সংজ্ঞা নয়, JSON-এ একটি একক ব্লক সংজ্ঞা ইনপুট এবং ক্ষেত্রগুলির বিভিন্ন ক্রম সমর্থন করতে পারে:
// In Spanish: label, input, label, input, label
Blockly.Msg['LISTS_REPEAT_TITLE'] = "crear lista con el elemento %1 repetido %2 veces";
// In Korean: input, label, input, label, input (dummy)
Blockly.Msg['LISTS_REPEAT_TITLE'] = "%1을 %2번 넣어, 리스트 생성";
জাভাস্ক্রিপ্টে ব্লক সংজ্ঞাগুলির জন্য এটি সম্ভব নয়, যেখানে ইনপুট এবং ক্ষেত্রগুলির বিভিন্ন ক্রমগুলির জন্য ফাংশন কলগুলির বিভিন্ন ক্রম প্রয়োজন।
ডান-থেকে-বাম ভাষা ব্যবহার করার সময়, বার্তা স্ট্রিংটি ভিজ্যুয়াল ক্রমে লিখুন এবং ইউনিকোড দিক নির্দেশনা অন্তর্ভুক্ত করবেন না:
// In Arabic. Note how %2 is left of %1, since it reads right to left.
Blockly.Msg['LISTS_REPEAT_TITLE'] = "إنشئ قائمة مع العنصر %1 %2 مرات";
ব্লকলি কীভাবে message কীগুলিকে ইনপুট এবং ক্ষেত্রগুলিতে রূপান্তর করে সে সম্পর্কে আরও তথ্যের জন্য, JSON-এ ব্লক কাঠামো সংজ্ঞায়িত করুন দেখুন।
জাভাস্ক্রিপ্টে স্থানীয়করণ টোকেন ব্যবহার করুন
জাভাস্ক্রিপ্টে স্থানীয়করণ টোকেন ব্যবহার করতে, ব্লকলি দিয়ে স্থানীয়করণের জন্য স্ট্রিংটি প্রতিস্থাপন করুন Blockly.Msg['TOKEN'] । যেমন:
// Return the text for a localized context menu item.
displayText: () => Blockly.Msg['MY_CONTEXT_MENU_ITEM'];
পরিশিষ্টে উল্লিখিত ব্যতীত, ব্লকলি জাভাস্ক্রিপ্টে টোকেন রেফারেন্স পার্স করে না:
// Doesn't work. Returns '%{BKY_MY_CONTEXT_MENU_ITEM}'.
displayText: () => '%{BKY_MY_CONTEXT_MENU_ITEM}';
একটি লোকেল বেছে নিন
একটি লোকেল কীভাবে বেছে নেবেন তা অ্যাপ্লিকেশন-নির্দিষ্ট এবং Blockly এর সুযোগের বাইরে। উদাহরণস্বরূপ, আপনার অ্যাপ্লিকেশন সবসময় একই লোকেল ব্যবহার করতে পারে, URL বা URL প্যারামিটার থেকে লোকেল নির্ধারণ করতে পারে বা ব্যবহারকারীদের তালিকা থেকে একটি লোকেল বেছে নিতে দিতে পারে।
একটি সাধারণ নিয়ম হিসাবে, আপনি একটি কর্মক্ষেত্র তৈরি করার আগে একটি লোকেল বেছে নিন এবং সংশ্লিষ্ট স্থানীয়করণ টেবিলগুলি লোড করুন৷ যদি আপনি একটি ভিন্ন লোকেল বেছে নেন এবং একটি ওয়ার্কস্পেস তৈরি করার পরে নতুন টেবিল লোড করেন, তাহলে আপনাকে ওয়ার্কস্পেসটি পুনরায় তৈরি করতে হবে: Blockly বিদ্যমান টুলবক্স আপডেট করে না বা স্বয়ংক্রিয়ভাবে নতুন লোকেল ব্যবহার করতে ব্লক করে না। ব্যবহারকারীর কাজ সংরক্ষণ করতে (যদি থাকে), ওয়ার্কস্পেস পুনরায় তৈরি করার আগে রাজ্যটি সংরক্ষণ করুন এবং পরে এটি পুনরায় লোড করুন।
একটি ব্লকলি স্থানীয়করণ টেবিল লোড করুন
Blockly তার নিজস্ব সমস্ত পাঠ্যের জন্য স্থানীয়করণ টেবিল প্রদান করে, যেমন অন্তর্নির্মিত ব্লকের পাঠ্য। আপনি en লোকেল ব্যবহার না করলে, যা ডিফল্টরূপে লোড হয়, আপনাকে আপনার লোকেলের জন্য ব্লকলি স্থানীয়করণ টেবিলটি লোড করতে হবে।
Blockly-এর স্থানীয়করণ টেবিলগুলি blockly/msg/xx.js নামের ফাইলগুলিতে সংরক্ষণ করা হয়, যেখানে xx হল লোকেল কোড। সমর্থিত লোকেলের তালিকার জন্য, blockly/msg/json এ ফাইলগুলি দেখুন।
npm সহ একটি ব্লকলি স্থানীয়করণ টেবিল লোড করুন
যখন আপনি import * as Blockly from 'blockly'; আপনি ডিফল্ট মডিউলগুলি পাবেন: ব্লকলি কোর, ব্লকলি বিল্ট-ইন ব্লক, জাভাস্ক্রিপ্ট জেনারেটর এবং ইংরেজি ( en ) লোকেলের জন্য ব্লকলি স্থানীয়করণ টেবিল।
npm ব্যবহার করে একটি ভিন্ন লোকেলের জন্য ব্লকলি স্থানীয়করণ টেবিল লোড করতে:
ব্লকলি ডিফল্ট মডিউল আমদানি করুন:
import * as Blockly from 'blockly/core'; import 'blockly/blocks'; import 'blockly/javascript'; // Or the generator of your choiceআপনার লোকেলের জন্য ব্লকলি স্থানীয়করণ টেবিলটি আমদানি করুন। উদাহরণস্বরূপ, স্প্যানিশ (
es) লোকেলের জন্য টেবিলটি আমদানি করতে:import * as Es from 'blockly/msg/es';Blockly.setLocaleদিয়ে টেবিলটি লোড করুন। এই ফাংশন টেবিলটিকেBlockly.Msgঅবজেক্টে কপি করে।Blockly.setLocale(Es);setLocaleশুধুমাত্র Blockly এর npm রিলিজে অন্তর্ভুক্ত করা হয়েছে।
npm ছাড়া একটি ব্লকলি স্থানীয়করণ টেবিল লোড করুন
npm ব্যবহার না করে একটি ব্লকলি স্থানীয়করণ টেবিল লোড করতে, msg ডিরেক্টরি থেকে টেবিলটি লোড করতে একটি <script> ট্যাগ ব্যবহার করুন। যেমন:
<script src="../../blockly_compressed.js"></script>
<script src="../../blocks_compressed.js"></script>
<script src="../../msg/es.js"></script>
স্থানীয়করণ টেবিল স্বয়ংক্রিয়ভাবে লোড হয়.
আপনার নিজস্ব স্থানীয়করণ টেবিল লোড করুন
আপনি যদি আপনার নিজস্ব স্থানীয়করণ টেবিল সংজ্ঞায়িত করেন, তাহলে আপনাকে আপনার নির্বাচিত লোকেলের জন্য টেবিলটি লোড করতে হবে।
আপনি যদি npm ব্যবহার করেন, আপনি
Blockly.setLocaleসাথে এটি করতে পারেন:import * as Es from 'blockly/msg/es'; import {myEsTable} from '../my_tokens_es'; Blockly.setLocale(Es); Blockly.setLocale(myEsTable);setLocaleইনপুট অবজেক্ট থেকেBlockly.Msgএ প্রতিটি কী-মানের জোড়া কপি করে। আপনি এটিকে স্বতন্ত্র কী দিয়ে একাধিকবার কল করতে পারেন, কিন্তু একটি ডুপ্লিকেট কী দিয়ে এটিকে দ্বিতীয়বার কল করলে প্রথমটি ওভাররাইট হয়।আপনি যদি npm ব্যবহার না করেন, তাহলে আপনাকে অবশ্যই আপনার টেবিলটি
Blockly.Msgএ কপি করতে হবে। (setLocaleশুধুমাত্র Blockly এর npm রিলিজে অন্তর্ভুক্ত করা হয়েছে।) এটি করার সবচেয়ে সহজ উপায় হলsetLocaleএর আপনার নিজস্ব সংস্করণ নির্ধারণ করা।function mySetLocale(locale) { Object.keys(locale).forEach(function (k) { Blockly.Msg[k] = locale[k]; } } mySetLocale(myEsTable);
টোকেন রেফারেন্স সমাধানের ফাংশন
Blockly টোকেন রেফারেন্স সমাধানের জন্য দুটি ফাংশন প্রদান করে: Blockly.utils.parsing.replaceMessageReferences (সাধারণত ব্যবহৃত) এবং Blockly.utils.parsing.tokenizeInterpolation (কদাচিৎ ব্যবহৃত)। বেশিরভাগ ক্ষেত্রে, আপনাকে এই ফাংশনগুলির একটিতে কল করতে হবে না। এর কারণ হল Blockly ইতিমধ্যেই তাদের সেই জায়গাগুলিতে কল করে যেখানে এটি টোকেন রেফারেন্স সমর্থন করে । উদাহরণস্বরূপ, Blockly এই ফাংশনগুলি ব্যবহার করে messageN , tooltip , এবং helpUrl কীগুলির টোকেন রেফারেন্সগুলিকে একটি JSON ব্লক সংজ্ঞায় সমাধান করতে।
আপনার একটি জায়গায় replaceMessageReferences ব্যবহার করতে হবে তা হল কাস্টম ক্ষেত্রগুলিতে৷ যদি আপনার কাস্টম ক্ষেত্রটি এর যেকোন বিকল্পে টোকেন রেফারেন্স গ্রহণ করে, সেগুলি সমাধান করতে replaceMessageReferences ব্যবহার করুন। আরও তথ্যের জন্য, JSON এবং নিবন্ধন দেখুন।
সম্পর্কিত বিষয়
- ডান-থেকে-বামে ভাষা: RTL ডেমো দেখুন।
- ব্লকলির পাঠ্য স্থানীয়করণে সহায়তা করুন: ব্লকলিতে অবদান রাখার বিভাগে অনুবাদ দেখুন।
পরিশিষ্ট: যেখানে টোকেন রেফারেন্স অনুমোদিত
আপনি নিম্নলিখিত JSON কীগুলিতে টোকেন রেফারেন্স ব্যবহার করতে পারেন:
- বিভাগ টুলবক্স সংজ্ঞায়:
-
name -
colour
-
- ব্লক সংজ্ঞায়:
-
messageN -
tooltip -
helpUrl -
colour
-
- সমস্ত ক্ষেত্রে পাস করা বিকল্পগুলিতে:
-
tooltip
-
-
field_dropdownoptionsপাস করা নেস্টেড অ্যারেগুলিতে :- প্রথম উপাদান, যখন প্রথম উপাদান একটি স্ট্রিং হয়
-
altএর মান , যখন প্রথম উপাদানটি একটি চিত্র বর্ণনাকারী একটি বস্তু
-
field_variableপাস করা বিকল্পগুলিতে:-
variable
-
-
field_labelএবংfield_label_serializableপাস করা বিকল্পগুলিতে:-
text
-
-
field_imageপাস করা বিকল্পগুলিতে:-
height -
width -
src -
alt
-
- থিমগুলিতে:
- বিভাগ শৈলী মধ্যে
colour -
colourPrimary,colourSecondaryএবংcolourTertiaryব্লক শৈলীতে
- বিভাগ শৈলী মধ্যে
এবং নিম্নলিখিত পদ্ধতিতে যুক্তি মান হিসাবে:
-
Block.setColour -
Blockly.utils.extensions.buildTooltipForDropDown -
Blockly.utils.extensions.buildTooltipWithFieldText -
Blockly.utils.parsing.parseBlockColour
এবং XML সংজ্ঞায় একটি টুলবক্সের নিম্নলিখিত বৈশিষ্ট্যগুলির মধ্যে <category> :
-
name -
colour
রঙের মান হিসাবে টোকেন রেফারেন্স ব্যবহার করার বিষয়ে আরও তথ্যের জন্য, রঙের রেফারেন্স দেখুন।
,ব্লকলি একটি অ্যাপ্লিকেশনে পাঠ্য স্থানীয়করণের জন্য একটি সিস্টেম প্রদান করে, যেমন টুলটিপস, প্রসঙ্গ মেনু এবং ব্লকের পাঠ্য। এটি তার নিজস্ব পাঠ্য স্থানীয়করণ করতে এই সিস্টেম ব্যবহার করে; আপনি আপনার অ্যাপ্লিকেশনের অনন্য পাঠ্য স্থানীয়করণ করতে এটি ব্যবহার করতে পারেন।
দ্রষ্টব্য: স্থানীয়করণ অনুবাদের মতোই, এটি ব্যতীত যে এটি বিভিন্ন দেশের জন্য অনুবাদগুলিকে আলাদা হতে দেয়, যেমন পর্তুগাল এবং ব্রাজিলে পর্তুগিজ ভাষায় বিভিন্ন অনুবাদ।
স্থানীয়করণ সিস্টেম কিভাবে কাজ করে
স্থানীয়করণ সিস্টেমে স্থানীয়করণ টোকেন, স্থানীয়করণ টেবিল এবং ফাংশন রয়েছে যা স্থানীয় স্ট্রিংগুলির সাথে টোকেনগুলি প্রতিস্থাপন করতে টেবিলগুলি ব্যবহার করে।
স্থানীয়করণ টোকেন
একটি স্থানীয়করণ টোকেন হল একটি সংক্ষিপ্ত স্ট্রিং যা পাঠ্যকে প্রতিনিধিত্ব করে যা স্থানীয়করণ করা প্রয়োজন। উদাহরণস্বরূপ, একটি কাস্টম তারিখ ব্লকে একটি টুলটিপ MY_DATE_TOOLTIP টোকেন ব্যবহার করতে পারে। স্থানীয়করণ টোকেন পাঠ্যের জায়গায় কোডে ব্যবহার করা হয়। রানটাইমে, ব্লকলি এই টোকেনগুলিকে স্থানীয় স্ট্রিং দিয়ে প্রতিস্থাপন করে।
স্থানীয়করণ টেবিল
একটি স্থানীয়করণ টেবিল , যা একটি স্ট্রিং টেবিল বা বার্তা টেবিল নামেও পরিচিত, এটি এমন একটি বস্তু যা স্থানীয়করণ টোকেনকে স্থানীয় স্ট্রিংগুলিতে ম্যাপ করে। প্রতিটি লোকেলের জন্য আপনার একটি আলাদা টেবিল প্রয়োজন। উদাহরণস্বরূপ, আপনি যদি ইংরেজি এবং স্প্যানিশ সমর্থন করতে চান, আপনার ইংরেজি টেবিলে থাকতে পারে:
enTable.MY_DATE_TOOLTIP = 'Enter a date.';
এবং আপনার স্প্যানিশ টেবিলে থাকতে পারে:
esTable.MY_DATE_TOOLTIP = 'Introduzca una fecha.';
ব্লকলি তার নিজস্ব পাঠ্যের জন্য স্থানীয়করণ টেবিল অন্তর্ভুক্ত করে। এগুলি ব্লকলি ডিস্ট্রিবিউশনে blockly/msg/xx.js নামে ফাইল হিসাবে উপলব্ধ, যেখানে xx হল লোকেল কোড।
আপনার নিজের পাঠ্যের জন্য আপনাকে স্থানীয়করণ টেবিল তৈরি করতে হবে। রান টাইমে, আপনি Blockly.Msg এ নির্বাচিত লোকেলের জন্য স্থানীয়করণ টেবিল -- Blockly's and yours -- লোড করেন, যা Blockly অভ্যন্তরীণভাবে ব্যবহার করে স্থানীয়করণ টেবিল।
স্থানীয়করণ সিস্টেম ব্যবহার করুন
স্থানীয়করণ সিস্টেম ব্যবহার করার আগে, আপনি কতগুলি লোকেল সমর্থন করতে চান এবং আপনি ভবিষ্যতে আরও লোকেল সমর্থন করার পরিকল্পনা করছেন কিনা তা নির্ধারণ করতে হবে।
আপনি যদি শুধুমাত্র একটি একক লোকেল সমর্থন করতে চান, তাহলে সরাসরি আপনার কোডে আপনার পাঠ্য লিখুন। আপনাকে স্থানীয়করণ টোকেন ব্যবহার করতে হবে না।
- আপনার লোকেল ইংরেজি হলে (
en), আপনাকে আর কিছু করতে হবে না।enলোকেলের জন্য ব্লকলি স্থানীয়করণ টেবিলটি ডিফল্টরূপে লোড হয়। - যদি আপনার লোকেল
enনা হয়, তাহলে সেই লোকেলের জন্য ব্লকলি স্থানীয়করণ টেবিলটি লোড করুন ।
- আপনার লোকেল ইংরেজি হলে (
আপনি যদি এখন বা ভবিষ্যতে একাধিক লোকেল সমর্থন করতে চান:
- আপনার কাস্টম পাঠ্যের জন্য স্থানীয়করণ টোকেন সংজ্ঞায়িত করুন এবং ব্যবহার করুন ।
- ব্যবহারকারীরা কীভাবে একটি লোকেল বেছে নেবে তা নির্ধারণ করুন৷
- লোকেলের জন্য ব্লকলি স্থানীয়করণ টেবিলটি লোড করুন ।
- লোকেলের জন্য আপনার স্থানীয়করণ টেবিল লোড করুন ।
স্থানীয়করণ টোকেন সংজ্ঞায়িত করুন এবং ব্যবহার করুন
একাধিক লোকেল সমর্থন করার সময়, আপনাকে আপনার সমস্ত কাস্টম পাঠ্যের জন্য স্থানীয়করণ টোকেন সংজ্ঞায়িত করতে হবে এবং ব্যবহার করতে হবে।
স্থানীয়করণ টোকেন সংজ্ঞায়িত করুন
প্রতিটি স্ট্রিংয়ের জন্য যা স্থানীয়করণ করা প্রয়োজন, একটি টোকেন সংজ্ঞায়িত করুন। আপনি আপনার টোকেনগুলির সাথে একটি কাস্টম উপসর্গ ব্যবহার করতে চাইতে পারেন যাতে ভবিষ্যতে ব্লকলি যোগ করা যেকোনো টোকেনের সাথে সংঘর্ষ এড়াতে পারে।
উদাহরণস্বরূপ, যদি আপনার একটি একক কাস্টম ব্লক এবং একটি একক কাস্টম বিভাগ থাকে, তাহলে আপনি নিম্নলিখিত টোকেনগুলি সংজ্ঞায়িত করতে পারেন:
MY_DATE_BLOCK_TEXT
MY_DATE_TOOLTIP
MY_DATE_HELPURL
MY_DATE_CATEGORY
স্থানীয়করণ টেবিল সংজ্ঞায়িত করুন
প্রতিটি লোকেলের জন্য আপনি সমর্থন করতে চান, একটি স্থানীয়করণ টেবিল সংজ্ঞায়িত করুন। যেমন:
// English localization table: my_tokens_en.js
export const myEnTable = {
MY_DATE_BLOCK_TEXT: 'Date %1',
MY_DATE_TOOLTIP: 'Enter a date.',
MY_DATE_HELPURL: 'https://myownpersonaldomain.com/help/en/dateblock'
MY_DATE_CATEGORY: 'Dates',
}
// Spanish localization table: my_tokens_es.js
export const myEsTable = {
MY_DATE_BLOCK_TEXT: 'Fecha %1',
MY_DATE_TOOLTIP: 'Introduzca una fecha.',
MY_DATE_HELPURL: 'https://myownpersonaldomain.com/help/es/dateblock'
MY_DATE_CATEGORY: 'Fechas',
}
JSON-এ স্থানীয়করণ টোকেন ব্যবহার করুন
JSON-এ স্থানীয়করণ টোকেন ব্যবহার করতে, একটি টোকেন রেফারেন্স দিয়ে স্থানীয়করণের জন্য স্ট্রিংটি প্রতিস্থাপন করুন। একটি টোকেন রেফারেন্সের ফর্ম আছে %{BKY_TOKEN} । যেমন:
Blockly.common.defineBlocksWithJsonArray([{
type: 'my_date',
message0: '%{BKY_MY_DATE_BLOCK_TEXT}',
args0: [
{
type: 'field_input',
name: 'DATE',
}
],
output: 'Date',
colour: '%{BKY_MY_DATE_COLOUR}',
tooltip: '%{BKY_MY_DATE_TOOLTIP}',
helpUrl: '%{BKY_MY_DATE_HELPURL}',
extensions: ['validate_date'],
}]);
যখন JSON প্রক্রিয়া করা হয় -- এই ক্ষেত্রে, যখন ব্লকটি ইনস্ট্যান্ট করা হয় -- Blockly Blockly.Msg এ টোকেনগুলি সন্ধান করে এবং স্থানীয় স্ট্রিংগুলির সাথে প্রতিস্থাপন করে। যদি এটি একটি টোকেন খুঁজে না পায়, তবে এটি রেফারেন্সটি জায়গায় রেখে দেয় এবং একটি সতর্কতা নির্গত করে।
যেখানে টোকেন রেফারেন্স ব্যবহার করা যেতে পারে তার সম্পূর্ণ তালিকার জন্য, পরিশিষ্ট দেখুন।
JSON বার্তা ইন্টারপোলেশন
একটি JSON ব্লক সংজ্ঞার message কীগুলি একটি ব্লকের ইনপুট এবং ক্ষেত্রগুলি (লেবেল সহ) সংজ্ঞায়িত করে৷ এই কীগুলিতে টোকেন রেফারেন্সের ব্যবহার একটি একক ব্লক সংজ্ঞাকে শব্দভান্ডার, শব্দ ক্রম এবং একাধিক লোকেলের দিকনির্দেশের সাথে খাপ খাইয়ে নিতে দেয়। উদাহরণস্বরূপ, এখানে চারটি ভিন্ন ভাষায় ব্লকলির lists_repeat ব্লক রয়েছে:




এই সমস্ত ব্লক একই ব্লক সংজ্ঞা ভাগ করে, যার message0 কী হল:
message0: %{BKY_LISTS_REPEAT_TITLE},
ইংরেজি স্থানীয়করণ টেবিলে এই টোকেনের মান হল:
Blockly.Msg['LISTS_REPEAT_TITLE'] = 'create list with item %1 repeated %2 times';
ইন্টারপোলেশন মার্কারগুলি ( %1 এবং %2 ) ব্লকের সংজ্ঞায়িত ইনপুট এবং ক্ষেত্রগুলির সাথে মিলে যায় এবং মার্কারগুলির মধ্যে পাঠ্য নামবিহীন লেবেল ক্ষেত্রে রূপান্তরিত হয়৷ যেহেতু message0 এর পাঠ্য স্থানীয়করণ টেবিলে সংরক্ষিত আছে এবং ব্লক সংজ্ঞা নয়, JSON-এ একটি একক ব্লক সংজ্ঞা ইনপুট এবং ক্ষেত্রগুলির বিভিন্ন ক্রম সমর্থন করতে পারে:
// In Spanish: label, input, label, input, label
Blockly.Msg['LISTS_REPEAT_TITLE'] = "crear lista con el elemento %1 repetido %2 veces";
// In Korean: input, label, input, label, input (dummy)
Blockly.Msg['LISTS_REPEAT_TITLE'] = "%1을 %2번 넣어, 리스트 생성";
জাভাস্ক্রিপ্টে ব্লক সংজ্ঞাগুলির জন্য এটি সম্ভব নয়, যেখানে ইনপুট এবং ক্ষেত্রগুলির বিভিন্ন ক্রমগুলির জন্য ফাংশন কলগুলির বিভিন্ন ক্রম প্রয়োজন।
ডান-থেকে-বাম ভাষা ব্যবহার করার সময়, বার্তা স্ট্রিংটি ভিজ্যুয়াল ক্রমে লিখুন এবং ইউনিকোড দিক নির্দেশনা অন্তর্ভুক্ত করবেন না:
// In Arabic. Note how %2 is left of %1, since it reads right to left.
Blockly.Msg['LISTS_REPEAT_TITLE'] = "إنشئ قائمة مع العنصر %1 %2 مرات";
ব্লকলি কীভাবে message কীগুলিকে ইনপুট এবং ক্ষেত্রগুলিতে রূপান্তর করে সে সম্পর্কে আরও তথ্যের জন্য, JSON-এ ব্লক কাঠামো সংজ্ঞায়িত করুন দেখুন।
জাভাস্ক্রিপ্টে স্থানীয়করণ টোকেন ব্যবহার করুন
জাভাস্ক্রিপ্টে স্থানীয়করণ টোকেন ব্যবহার করতে, ব্লকলি দিয়ে স্থানীয়করণের জন্য স্ট্রিংটি প্রতিস্থাপন করুন Blockly.Msg['TOKEN'] । যেমন:
// Return the text for a localized context menu item.
displayText: () => Blockly.Msg['MY_CONTEXT_MENU_ITEM'];
পরিশিষ্টে উল্লিখিত ব্যতীত, ব্লকলি জাভাস্ক্রিপ্টে টোকেন রেফারেন্স পার্স করে না:
// Doesn't work. Returns '%{BKY_MY_CONTEXT_MENU_ITEM}'.
displayText: () => '%{BKY_MY_CONTEXT_MENU_ITEM}';
একটি লোকেল বেছে নিন
একটি লোকেল কীভাবে বেছে নেবেন তা অ্যাপ্লিকেশন-নির্দিষ্ট এবং Blockly এর সুযোগের বাইরে। উদাহরণস্বরূপ, আপনার অ্যাপ্লিকেশন সবসময় একই লোকেল ব্যবহার করতে পারে, URL বা URL প্যারামিটার থেকে লোকেল নির্ধারণ করতে পারে বা ব্যবহারকারীদের তালিকা থেকে একটি লোকেল বেছে নিতে দিতে পারে।
একটি সাধারণ নিয়ম হিসাবে, আপনি একটি কর্মক্ষেত্র তৈরি করার আগে একটি লোকেল বেছে নিন এবং সংশ্লিষ্ট স্থানীয়করণ টেবিলগুলি লোড করুন৷ যদি আপনি একটি ভিন্ন লোকেল বেছে নেন এবং একটি ওয়ার্কস্পেস তৈরি করার পরে নতুন টেবিল লোড করেন, তাহলে আপনাকে ওয়ার্কস্পেসটি পুনরায় তৈরি করতে হবে: Blockly বিদ্যমান টুলবক্স আপডেট করে না বা স্বয়ংক্রিয়ভাবে নতুন লোকেল ব্যবহার করতে ব্লক করে না। ব্যবহারকারীর কাজ সংরক্ষণ করতে (যদি থাকে), ওয়ার্কস্পেস পুনরায় তৈরি করার আগে রাজ্যটি সংরক্ষণ করুন এবং পরে এটি পুনরায় লোড করুন।
একটি ব্লকলি স্থানীয়করণ টেবিল লোড করুন
Blockly তার নিজস্ব সমস্ত পাঠ্যের জন্য স্থানীয়করণ টেবিল প্রদান করে, যেমন অন্তর্নির্মিত ব্লকের পাঠ্য। আপনি en লোকেল ব্যবহার না করলে, যা ডিফল্টরূপে লোড হয়, আপনাকে আপনার লোকেলের জন্য ব্লকলি স্থানীয়করণ টেবিলটি লোড করতে হবে।
Blockly-এর স্থানীয়করণ টেবিলগুলি blockly/msg/xx.js নামের ফাইলগুলিতে সংরক্ষণ করা হয়, যেখানে xx হল লোকেল কোড। সমর্থিত লোকেলের তালিকার জন্য, blockly/msg/json এ ফাইলগুলি দেখুন।
npm সহ একটি ব্লকলি স্থানীয়করণ টেবিল লোড করুন
যখন আপনি import * as Blockly from 'blockly'; আপনি ডিফল্ট মডিউলগুলি পাবেন: ব্লকলি কোর, ব্লকলি বিল্ট-ইন ব্লক, জাভাস্ক্রিপ্ট জেনারেটর এবং ইংরেজি ( en ) লোকেলের জন্য ব্লকলি স্থানীয়করণ টেবিল।
npm ব্যবহার করে একটি ভিন্ন লোকেলের জন্য ব্লকলি স্থানীয়করণ টেবিল লোড করতে:
ব্লকলি ডিফল্ট মডিউল আমদানি করুন:
import * as Blockly from 'blockly/core'; import 'blockly/blocks'; import 'blockly/javascript'; // Or the generator of your choiceআপনার লোকেলের জন্য ব্লকলি স্থানীয়করণ টেবিলটি আমদানি করুন। উদাহরণস্বরূপ, স্প্যানিশ (
es) লোকেলের জন্য টেবিলটি আমদানি করতে:import * as Es from 'blockly/msg/es';Blockly.setLocaleদিয়ে টেবিলটি লোড করুন। এই ফাংশন টেবিলটিকেBlockly.Msgঅবজেক্টে কপি করে।Blockly.setLocale(Es);setLocaleশুধুমাত্র Blockly এর npm রিলিজে অন্তর্ভুক্ত করা হয়েছে।
npm ছাড়া একটি ব্লকলি স্থানীয়করণ টেবিল লোড করুন
npm ব্যবহার না করে একটি ব্লকলি স্থানীয়করণ টেবিল লোড করতে, msg ডিরেক্টরি থেকে টেবিলটি লোড করতে একটি <script> ট্যাগ ব্যবহার করুন। যেমন:
<script src="../../blockly_compressed.js"></script>
<script src="../../blocks_compressed.js"></script>
<script src="../../msg/es.js"></script>
স্থানীয়করণ টেবিল স্বয়ংক্রিয়ভাবে লোড হয়.
আপনার নিজস্ব স্থানীয়করণ টেবিল লোড করুন
আপনি যদি আপনার নিজস্ব স্থানীয়করণ টেবিল সংজ্ঞায়িত করেন, তাহলে আপনাকে আপনার নির্বাচিত লোকেলের জন্য টেবিলটি লোড করতে হবে।
আপনি যদি npm ব্যবহার করেন, আপনি
Blockly.setLocaleসাথে এটি করতে পারেন:import * as Es from 'blockly/msg/es'; import {myEsTable} from '../my_tokens_es'; Blockly.setLocale(Es); Blockly.setLocale(myEsTable);setLocaleইনপুট অবজেক্ট থেকেBlockly.Msgএ প্রতিটি কী-মানের জোড়া কপি করে। আপনি এটিকে স্বতন্ত্র কী দিয়ে একাধিকবার কল করতে পারেন, কিন্তু একটি ডুপ্লিকেট কী দিয়ে এটিকে দ্বিতীয়বার কল করলে প্রথমটি ওভাররাইট হয়।আপনি যদি npm ব্যবহার না করেন, তাহলে আপনাকে অবশ্যই আপনার টেবিলটি
Blockly.Msgএ কপি করতে হবে। (setLocaleশুধুমাত্র Blockly এর npm রিলিজে অন্তর্ভুক্ত করা হয়েছে।) এটি করার সবচেয়ে সহজ উপায় হলsetLocaleএর আপনার নিজস্ব সংস্করণ নির্ধারণ করা।function mySetLocale(locale) { Object.keys(locale).forEach(function (k) { Blockly.Msg[k] = locale[k]; } } mySetLocale(myEsTable);
টোকেন রেফারেন্স সমাধানের ফাংশন
Blockly টোকেন রেফারেন্স সমাধানের জন্য দুটি ফাংশন প্রদান করে: Blockly.utils.parsing.replaceMessageReferences (সাধারণত ব্যবহৃত) এবং Blockly.utils.parsing.tokenizeInterpolation (কদাচিৎ ব্যবহৃত)। বেশিরভাগ ক্ষেত্রে, আপনাকে এই ফাংশনগুলির একটিতে কল করতে হবে না। এর কারণ হল Blockly ইতিমধ্যেই তাদের সেই জায়গাগুলিতে কল করে যেখানে এটি টোকেন রেফারেন্স সমর্থন করে । উদাহরণস্বরূপ, Blockly এই ফাংশনগুলি ব্যবহার করে messageN , tooltip , এবং helpUrl কীগুলির টোকেন রেফারেন্সগুলিকে একটি JSON ব্লক সংজ্ঞায় সমাধান করতে।
আপনার একটি জায়গায় replaceMessageReferences ব্যবহার করতে হবে তা হল কাস্টম ক্ষেত্রগুলিতে৷ যদি আপনার কাস্টম ক্ষেত্রটি এর যেকোন বিকল্পে টোকেন রেফারেন্স গ্রহণ করে, সেগুলি সমাধান করতে replaceMessageReferences ব্যবহার করুন। আরও তথ্যের জন্য, JSON এবং নিবন্ধন দেখুন।
সম্পর্কিত বিষয়
- ডান-থেকে-বামে ভাষা: RTL ডেমো দেখুন।
- ব্লকলির পাঠ্য স্থানীয়করণে সহায়তা করুন: ব্লকলিতে অবদান রাখার বিভাগে অনুবাদ দেখুন।
পরিশিষ্ট: যেখানে টোকেন রেফারেন্স অনুমোদিত
আপনি নিম্নলিখিত JSON কীগুলিতে টোকেন রেফারেন্স ব্যবহার করতে পারেন:
- বিভাগ টুলবক্স সংজ্ঞায়:
-
name -
colour
-
- ব্লক সংজ্ঞায়:
-
messageN -
tooltip -
helpUrl -
colour
-
- সমস্ত ক্ষেত্রে পাস করা বিকল্পগুলিতে:
-
tooltip
-
-
field_dropdownoptionsপাস করা নেস্টেড অ্যারেগুলিতে :- প্রথম উপাদান, যখন প্রথম উপাদান একটি স্ট্রিং হয়
-
altএর মান , যখন প্রথম উপাদানটি একটি চিত্র বর্ণনাকারী একটি বস্তু
-
field_variableপাস করা বিকল্পগুলিতে:-
variable
-
-
field_labelএবংfield_label_serializableপাস করা বিকল্পগুলিতে:-
text
-
-
field_imageপাস করা বিকল্পগুলিতে:-
height -
width -
src -
alt
-
- থিমগুলিতে:
- বিভাগ শৈলী মধ্যে
colour -
colourPrimary,colourSecondaryএবংcolourTertiaryব্লক শৈলীতে
- বিভাগ শৈলী মধ্যে
এবং নিম্নলিখিত পদ্ধতিতে যুক্তি মান হিসাবে:
-
Block.setColour -
Blockly.utils.extensions.buildTooltipForDropDown -
Blockly.utils.extensions.buildTooltipWithFieldText -
Blockly.utils.parsing.parseBlockColour
এবং XML সংজ্ঞায় একটি টুলবক্সের নিম্নলিখিত বৈশিষ্ট্যগুলির মধ্যে <category> :
-
name -
colour
রঙের মান হিসাবে টোকেন রেফারেন্স ব্যবহার করার বিষয়ে আরও তথ্যের জন্য, রঙের রেফারেন্স দেখুন।