একটি মৌলিক "Google অনুবাদ" অ্যাপ ইঞ্জিন, ক্লাউড ফাংশন এবং ক্লাউড রানে Express.js অ্যাপ

1. ওভারভিউ

কোডল্যাবগুলির এই সিরিজ (স্ব-গতিসম্পন্ন, হাতে-কলমে টিউটোরিয়াল) ডেভেলপারদের তাদের অ্যাপ্লিকেশনগুলি স্থাপন করার সময় তাদের কাছে থাকা বিভিন্ন বিকল্পগুলি বুঝতে সাহায্য করা। আপনি শিখবেন কিভাবে একটি সাধারণ ওয়েব অ্যাপ্লিকেশনে Google ক্লাউড অনুবাদ API ব্যবহার করতে হয়। এই অ্যাপটি স্থানীয়ভাবে চালানো যেতে পারে বা ক্লাউড সার্ভারহীন কম্পিউট প্ল্যাটফর্মে ( অ্যাপ ইঞ্জিন, ক্লাউড ফাংশন, বা ক্লাউড রান ) স্থাপন করা যেতে পারে।

আপনি Express.js ওয়েব ফ্রেমওয়ার্ক ব্যবহার করে Node.js এর সাথে এই JavaScript টিউটোরিয়ালটি করবেন। আপনি আমাদের সার্ভারহীন প্ল্যাটফর্মগুলি থেকে Google ক্লাউড API গুলি কীভাবে অ্যাক্সেস করবেন তাও শিখবেন৷ এই অ্যাপটির সমস্ত সংস্করণ "নিবুলাস সার্ভারলেস" ওপেন সোর্স রেপো থেকে এসেছে, যার মধ্যে এই অ্যাপের একটি পাইথন সংস্করণ এবং স্বাধীন কোডল্যাব রয়েছে৷ রেপো একই ধরনের অ্যাপ হোস্ট করে যা ডেভেলপারদের দেখায় কিভাবে আমাদের সার্ভারহীন প্ল্যাটফর্ম থেকে নন-ক্লাউড Google API গুলি অ্যাক্সেস করতে হয়।

এই কোডল্যাবটি উপরের বোল্ড প্ল্যাটফর্মে এই অ্যাপটি স্থাপন করার উপর ফোকাস করে।

আপনি কিভাবে শিখবেন

আপনি কি প্রয়োজন হবে

  • একটি সক্রিয় ক্লাউড বিলিং অ্যাকাউন্ট সহ একটি Google ক্লাউড প্রকল্প৷
  • স্থানীয়ভাবে চালানোর জন্য একটি ওয়েব ফ্রেমওয়ার্ক ইনস্টল করা হয়েছে (যারা পাইথন টিউটোরিয়াল করছেন তাদের জন্য ফ্লাস্ক বা যারা JavaScript/Node.js টিউটোরিয়াল করছেন তাদের জন্য এক্সপ্রেস )
  • Google ক্লাউড স্থাপনার জন্য কমপক্ষে একটি বিচ্ছিন্ন গণনা প্ল্যাটফর্ম সক্ষম করা হয়েছে৷
  • মৌলিক প্রোগ্রামিং দক্ষতা (Python বা JavaScript/Node.js)
  • মৌলিক অপারেটিং সিস্টেম কমান্ডের কাজের জ্ঞান

সমীক্ষা

আপনি কিভাবে এই টিউটোরিয়াল ব্যবহার করবেন?

এটি পড়ুন এবং ব্যায়াম সম্পূর্ণ করুন এটি শুধুমাত্র পড়ুন

Python বা Node.js-এ আপনার বিকাশের অভিজ্ঞতাকে আপনি কীভাবে মূল্যায়ন করবেন?

নবজাতক মধ্যবর্তী দক্ষ

আপনি Google ক্লাউড পরিষেবাগুলি ব্যবহার করার সাথে আপনার অভিজ্ঞতাকে কীভাবে মূল্যায়ন করবেন?

নবজাতক মধ্যবর্তী দক্ষ

2. সেটআপ এবং প্রয়োজনীয়তা

স্ব-গতিসম্পন্ন পরিবেশ সেটআপ

  1. Google ক্লাউড কনসোলে সাইন-ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন বা বিদ্যমান একটি পুনরায় ব্যবহার করুন৷ আপনার যদি ইতিমধ্যেই একটি Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে।

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • প্রকল্পের নাম এই প্রকল্পের অংশগ্রহণকারীদের জন্য প্রদর্শনের নাম। এটি একটি অক্ষর স্ট্রিং যা Google API দ্বারা ব্যবহৃত হয় না এবং আপনি যে কোনো সময় এটি আপডেট করতে পারেন।
  • সমস্ত Google ক্লাউড প্রজেক্ট জুড়ে প্রোজেক্ট আইডি অবশ্যই অনন্য হতে হবে এবং অপরিবর্তনীয় (সেট করার পরে পরিবর্তন করা যাবে না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত আপনি এটা কি যত্ন না. বেশিরভাগ কোডল্যাবে, আপনাকে প্রজেক্ট আইডি উল্লেখ করতে হবে (এবং এটি সাধারণত PROJECT_ID হিসাবে চিহ্নিত করা হয়), তাই আপনি যদি এটি পছন্দ না করেন তবে অন্য একটি এলোমেলো তৈরি করুন, অথবা, আপনি নিজের চেষ্টা করে দেখতে পারেন এটি উপলব্ধ কিনা। তারপর প্রকল্প তৈরি হওয়ার পরে এটি "হিমায়িত" হয়।
  • একটি তৃতীয় মান আছে, একটি প্রকল্প নম্বর যা কিছু API ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি মান সম্পর্কে আরও জানুন।
  1. এরপরে, ক্লাউড রিসোর্স/এপিআই ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে। এই কোডল্যাবের মাধ্যমে চালানোর জন্য খুব বেশি খরচ করা উচিত নয়, যদি কিছু থাকে। রিসোর্স বন্ধ করতে যাতে আপনি এই টিউটোরিয়ালের বাইরে বিলিং করতে না পারেন, কোডল্যাবের শেষে পাওয়া যেকোনো "ক্লিন-আপ" নির্দেশাবলী অনুসরণ করুন। Google ক্লাউডের নতুন ব্যবহারকারীরা $300 USD বিনামূল্যের ট্রায়াল প্রোগ্রামের জন্য যোগ্য৷

3. অনুবাদ API সক্ষম করুন৷

এই বিভাগে, আপনি কীভাবে সাধারণভাবে Google API সক্রিয় করবেন তা শিখবেন। আমাদের নমুনা অ্যাপের জন্য, আপনি ক্লাউড অনুবাদ API সক্ষম করবেন। আপনি অ্যাপ ইঞ্জিন, ক্লাউড ফাংশন এবং/অথবা ক্লাউড রান (প্লাস ক্লাউড আর্টিফ্যাক্ট রেজিস্ট্রি) সক্ষম করবেন, আপনি কোন প্ল্যাটফর্মে (গুলি) নমুনা অ্যাপটি স্থাপন করতে চান তার উপর নির্ভর করে।

Google API সক্রিয় করা হচ্ছে

ভূমিকা

আপনি আপনার অ্যাপ্লিকেশনে যে Google API ব্যবহার করতে চান তা নির্বিশেষে, সেগুলি অবশ্যই সক্ষম হতে হবে। এপিআই কমান্ড-লাইন বা ক্লাউড কনসোল থেকে সক্ষম করা যেতে পারে। এপিআই সক্ষম করার প্রক্রিয়াটি অভিন্ন, তাই আপনি একবার একটি এপিআই সক্ষম করলে, আপনি একইভাবে অন্যটি করতে পারেন।

বিকল্প 1: gcloud কমান্ড-লাইন ইন্টারফেস (ক্লাউড শেল বা স্থানীয় পরিবেশ)

ক্লাউড কনসোল থেকে এপিআই সক্ষম করা আরও সাধারণ, কিছু বিকাশকারী কমান্ড লাইন থেকে সবকিছু করতে পছন্দ করে। এটি করার জন্য, আপনাকে একটি API এর "পরিষেবার নাম" সন্ধান করতে হবে। এটি একটি URL এর মত দেখাচ্ছে: SERVICE_NAME .googleapis.com । আপনি এগুলিকে সমর্থিত পণ্যের চার্টে খুঁজে পেতে পারেন, অথবা আপনি Google Discovery API- এর মাধ্যমে প্রোগ্রাম্যাটিকভাবে তাদের জন্য অনুসন্ধান করতে পারেন৷

এই তথ্য দিয়ে সজ্জিত, ক্লাউড শেল ব্যবহার করে (অথবা gcloud কমান্ড-লাইন টুল ইনস্টল সহ আপনার স্থানীয় উন্নয়ন পরিবেশ), আপনি একটি API সক্রিয় করতে পারেন, নিম্নরূপ:

gcloud services enable SERVICE_NAME.googleapis.com

উদাহরণ 1: ক্লাউড ভিশন API সক্ষম করুন

gcloud services enable vision.googleapis.com

উদাহরণ 2: Google অ্যাপ ইঞ্জিন সক্ষম করুন

gcloud services enable appengine.googleapis.com

উদাহরণ 3: একটি অনুরোধের সাথে একাধিক API সক্রিয় করুন। উদাহরণস্বরূপ, যদি এই কোডল্যাবে দর্শকরা অ্যাপ ইঞ্জিন, ক্লাউড ফাংশন এবং ক্লাউড রানে ক্লাউড ট্রান্সলেশন API ব্যবহার করে একটি অ্যাপ স্থাপন করে, কমান্ড লাইনটি হবে:

gcloud services enable appengine.googleapis.com cloudfunctions.googleapis.com artifactregistry.googleapis.com run.googleapis.com translate.googleapis.com

এই কমান্ডটি অ্যাপ ইঞ্জিন, ক্লাউড ফাংশন, ক্লাউড রান এবং ক্লাউড অনুবাদ API সক্ষম করে। উপরন্তু, এটি ক্লাউড আর্টিফ্যাক্ট রেজিস্ট্রি সক্ষম করে কারণ ক্লাউড রানে স্থাপন করার জন্য ক্লাউড বিল্ড সিস্টেম দ্বারা কন্টেইনার চিত্রগুলিকে অবশ্যই নিবন্ধিত করতে হবে৷

বিকল্প 2: ক্লাউড কনসোল

আপনি API ম্যানেজারে Google API গুলিও সক্ষম করতে পারেন৷ ক্লাউড কনসোল থেকে, API ম্যানেজারে যান এবং লাইব্রেরি নির্বাচন করুন।

fb0f1d315f122d4a.png

মিলিত ফলাফল দেখতে অনুসন্ধান বারে একটি API এর নাম লিখতে শুরু করুন:

2275786a24f8f204.png

আপনি যে APIটি সক্ষম করতে চাইছেন সেটি নির্বাচন করুন এবং সক্ষম বোতামটি ক্লিক করুন:

7960a6752a1da767.png

আপনি যে Google API ব্যবহার করতে চান তা নির্বিশেষে সমস্ত API সক্রিয় করার প্রক্রিয়া একই রকম।

খরচ

অনেক Google API ফি ছাড়াই ব্যবহার করা যেতে পারে, তবে বেশিরভাগ Google ক্লাউড পণ্য এবং API ব্যবহার করার সময় খরচ আছে। ক্লাউড API সক্রিয় করার সময়, আপনাকে একটি সক্রিয় বিলিং অ্যাকাউন্টের জন্য বলা হতে পারে৷ যাইহোক, কিছু Google ক্লাউড পণ্যে একটি "সর্বদা বিনামূল্যে" স্তর রয়েছে, যা আপনাকে বিলিং চার্জ বহন করার জন্য অতিক্রম করতে হবে।

নতুন GCP ব্যবহারকারীরা বিনামূল্যে ট্রায়ালের জন্য যোগ্য, বর্তমানে প্রথম 90 দিনের জন্য $300USD ভাল। কোডল্যাবগুলি সাধারণত খুব বেশি বা কোনও বিলিং খরচ করে না, তাই আমরা আপনাকে বিনামূল্যে ট্রায়াল বন্ধ রাখার পরামর্শ দিচ্ছি যতক্ষণ না আপনি এটিকে একটি টেস্ট ড্রাইভ দেওয়ার জন্য প্রস্তুত না হন, বিশেষ করে যেহেতু এটি একবারের অফার। আপনি বিনামূল্যে ট্রায়াল ব্যবহার করুন বা না করুন নির্বিশেষে বিনামূল্যে স্তরের কোটার মেয়াদ শেষ হয় না এবং প্রয়োগ হয়।

ব্যবহারকারীদেরকে সক্ষম করার আগে যেকোনো API-এর মূল্যের তথ্য উল্লেখ করা উচিত (উদাহরণ: ক্লাউড ভিশন API মূল্য পৃষ্ঠা), বিশেষ করে উল্লেখ করা যে এটির একটি বিনামূল্যের স্তর আছে কিনা, এবং যদি তাই হয়, তাহলে এটি কী। যতক্ষণ আপনি নির্দিষ্ট দৈনিক বা মাসিক সীমার মধ্যে থাকবেন, ততক্ষণ আপনাকে কোনও চার্জ নেওয়া উচিত নয়। মূল্য এবং বিনামূল্যের স্তর Google পণ্য গ্রুপ API-এর মধ্যে পরিবর্তিত হয়। উদাহরণ:

বিভিন্ন Google পণ্য আলাদাভাবে বিল করা হয়, তাই সেই তথ্যের জন্য উপযুক্ত ডকুমেন্টেশন উল্লেখ করতে ভুলবেন না।

পছন্দসই পরিষেবাগুলি সক্ষম করা নিশ্চিত করুন

উপরে নির্দেশিত হিসাবে API ম্যানেজারে ক্লাউড অনুবাদ API নিশ্চিত করুন। আপনি যদি কমান্ড-লাইন থেকে সার্ভারবিহীন প্ল্যাটফর্মগুলি সক্ষম না করে থাকেন তবে আপনি ক্লাউড কনসোলে তাদের প্রতিটি ড্যাশবোর্ড থেকে তা করতে পারেন: অ্যাপ ইঞ্জিন , ক্লাউড ফাংশন , ক্লাউড রান

ক্লাউড কনসোল থেকে এপিআই সক্ষম করা দৃশ্যত তথ্যপূর্ণ হলেও, gcloud টুল ব্যবহার করা আরও দ্রুত, যা সমস্ত পরিষেবা সক্ষম করতে কয়েক সেকেন্ড সময় নেয়:

$ gcloud services enable appengine.googleapis.com \
cloudfunctions.googleapis.com artifactregistry.googleapis.com \
run.googleapis.com translate.googleapis.com
Operation "operations/acf.p2-xxxxxx035451-704918f2-5470-4436-9bdd-c3b204yyyyyy" finished successfully.

খরচ আরো

খরচের উপরোক্ত বিভাগটি Google API জুড়ে সাধারণ। আসুন এই টিউটোরিয়ালের জন্য আরও সুনির্দিষ্ট বিষয়গুলি কভার করি। যদিও এর মাসিক কোটা সামগ্রিক "সর্বদা বিনামূল্যে" স্তরের সারাংশ পৃষ্ঠায় তালিকাভুক্ত করা হয় না, অনুবাদ API-এর মূল্য পৃষ্ঠায় বলা হয়েছে যে সমস্ত ব্যবহারকারী প্রতি মাসে একটি নির্দিষ্ট পরিমাণ অনুবাদিত অক্ষর পান৷ আপনি যদি সেই থ্রেশহোল্ডের নিচে থাকেন তাহলে আপনাকে API থেকে কোনো চার্জ নেওয়া উচিত নয়। Google ক্লাউড সার্ভারহীন প্ল্যাটফর্ম ব্যবহার করে খরচ সম্পর্কে আরও জানতে, সংগ্রহস্থলের খরচ বিভাগটি দেখুন। শেষে "ক্লিন আপ" বিভাগটি আলোচনা করবে যে এই কোডল্যাবটি সম্পূর্ণ হওয়ার পরে কীভাবে বিলিং বন্ধ করা যায়।

4. নমুনা অ্যাপ কোড পান

জিপ বা ক্লোন রেপো ডাউনলোড করুন

  • জিপ ফাইলটি ডাউনলোড করুন বা git clone https://github.com/googlecodelabs/cloud-nebulous-serverless.git দিয়ে রেপো ক্লোন করুন https://github.com/googlecodelabs/cloud-nebulous-serverless.git
  • আপনার যদি স্থানীয় ডেভ এনভায়রনমেন্ট না থাকে এবং আপনি ক্লাউড শেল -এ এই টিউটোরিয়ালটি করতে চান, আপনি সেখানে একই git clone কমান্ড দিয়ে রেপো ক্লোন করতে পারেন।
  • আপনি নীচের স্ক্রিনশটে দেখানো হিসাবে জিপ ফাইলটি এর সবুজ কোড বোতাম থেকে অ্যাক্সেস করতে পারেন:

5cd6110c4414cf65.png

এখন আপনার কাছে সবকিছু আছে, এই নির্দিষ্ট টিউটোরিয়ালটি করার জন্য ফোল্ডারটির একটি সম্পূর্ণ অনুলিপি তৈরি করুন, কারণ এতে সম্ভবত ফাইলগুলি মুছে ফেলা বা পরিবর্তন করা জড়িত। আপনি যদি একটি ভিন্ন স্থাপনা করতে চান, আপনি মূলটি অনুলিপি করে আবার শুরু করতে পারেন যাতে আপনাকে এটিকে আবার ক্লোন করতে বা ডাউনলোড করতে না হয়।

5. Node.js পরিবেশ নিশ্চিত করুন

আপনার Node.js পরিবেশ সেট আপ করতে, নিম্নলিখিতগুলি করুন:

  1. নিশ্চিত করুন যে আপনি নোড (>=10) এবং NPM (>=6) এর সমসাময়িক সংস্করণগুলি ইনস্টল করেছেন
  2. আপনি যেখানে রেপো ক্লোন করেছেন সেখানে যান (বা জিপ ফাইলটি আনজিপ করেছেন) তারপর cloud/nodejs ফোল্ডারে যান
  3. নিশ্চিত করুন package.json উপস্থিত আছে তারপর npm install চালান

উপরের # 1 এর জন্য, আপনি কমান্ড-লাইনে আপনার কোন সংস্করণ আছে তা যাচাই করতে পারেন:

$ node -v
v17.0.1
$ npm -v
8.1.0

6. নমুনা অ্যাপের সফর

নমুনা অ্যাপটি হল একটি সাধারণ Google অনুবাদ ডেরিভেটিভ যা ব্যবহারকারীদের ইংরেজিতে পাঠ্য লিখতে এবং স্প্যানিশ ভাষায় সেই পাঠ্যের সমতুল্য অনুবাদ পেতে অনুরোধ করে।

package.json কনফিগারেশন ফাইলটি নির্দেশ করে যে কোন তৃতীয় পক্ষের প্যাকেজগুলি অ্যাপ্লিকেশনের জন্য প্রয়োজন (মনে রাখবেন যে প্যাকেজ সংস্করণগুলি এখানে তালিকাভুক্ত করা থেকেও আপডেট করা যেতে পারে):

{
  "name": "cloud-nebulous-serverless-nodejs",
  "version": "0.0.1",
  "description": "Nebulous Serverless sample app",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "test": "mocha test/test_neb.js"
  },
  "author": "Google LLC",
  "license": "Apache-2.0",
  "dependencies": {
    "@google-cloud/translate": "^6.3.1",
    "express": "^4.17.1",
    "nunjucks": "^3.2.3"
  },
  "devDependencies": {
    "mocha": "^9.1.3",
    "supertest": "^6.1.6"
  }
}

এখন index.js ফাইলটি খুলুন যাতে আমরা দেখতে পারি এটি কিভাবে কাজ করে। লাইসেন্সিং সম্পর্কে মন্তব্য করা লাইনগুলি বাদ দিয়ে, এটি উপরের এবং নীচের মত দেখাচ্ছে:

const express = require('express');
const nunjucks = require('nunjucks');
const {TranslationServiceClient} = require('@google-cloud/translate');

const app = express();
app.use(express.urlencoded({extended: true}));
nunjucks.configure('templates', {autoescape: true, express: app});
const TRANSLATE = new TranslationServiceClient();

const PORT = process.env.PORT || 8080;
const SOURCE = ['en', 'English'];
const TARGET = ['es', 'Spanish'];
let parent;
TRANSLATE.getProjectId().then(result => {
    parent = `projects/${result}`;
});


if (!process.env.FUNCTION_TARGET) {
    app.listen(PORT, () =>
        console.log(`Listening on port ${PORT}`)
    );
}

# . . . [translate() function definition] . . .

app.all('/', translate);
module.exports = {
    app
};
  1. ফ্রেমওয়ার্ক এবং টেমপ্লেটিং কার্যকারিতা এবং ক্লাউড ট্রান্সলেশন API ক্লায়েন্ট লাইব্রেরি আনতে require
  2. গ্লোবাল ভেরিয়েবলগুলি ওয়েব অ্যাপ, ক্লাউড প্রোজেক্ট আইডি, ট্রান্সলেশন API ক্লায়েন্ট, অনুবাদ API কলগুলির জন্য প্যারেন্ট "অবস্থান পাথ" এবং SOURCE এবং TARGET ভাষাগুলিকে উপস্থাপন করে৷ এই ক্ষেত্রে, এটি ইংরেজি ( en ) এবং স্প্যানিশ ( es ), কিন্তু ক্লাউড অনুবাদ API দ্বারা সমর্থিত অন্যান্য ভাষার কোডগুলিতে এই মানগুলিকে নির্দ্বিধায় পরিবর্তন করুন৷
  3. প্রতিটি জোড়ার প্রথম উপাদান ( SOURCE এবং TARGET ) হল ভাষা কোড যখন দ্বিতীয়টি হল ভাষার নাম (এবং শুধুমাত্র প্রদর্শনের উদ্দেশ্যে ব্যবহার করা হয় কারণ এটি API-এর জন্য অপ্রাসঙ্গিক)।
  4. নীচের কয়েকটি লাইন হল translate() জন্য সমস্ত HTTP অনুরোধ পাঠাতে তারপর app অ্যাপ্লিকেশন অবজেক্টটি রপ্তানি করে।

অবশেষে, index.js এর মাঝখানে হল অ্যাপ্লিকেশনের হৃদয়, translate() ফাংশন:

async function translate(req, rsp) {
    let text = null;
    let translated = null;
    if (req.method === 'POST') {
        text = req.body.text.trim();
        if (text) {
            const data = {
                contents: [text],
                parent: parent,
                targetLanguageCode: TARGET[0]
            };
            const [response] = await TRANSLATE.translateText(data);
            translated = response.translations[0].translatedText;
        }
    }
    const context = {
        orig:  {text: text, lc: SOURCE},
        trans: {text: translated, lc: TARGET}
    };
    rsp.render('index.html', context);
}

প্রাথমিক ফাংশনটি ব্যবহারকারীর ইনপুট নেওয়ার কাজ করে এবং হেভি-লিফটিং করার জন্য অনুবাদ API-কে কল করে। আসুন এটি ভেঙে দেওয়া যাক:

  1. ফর্মের জন্য মৌলিক ভেরিয়েবল রিসেট করুন। এটি প্রাথমিকভাবে GET অনুরোধের জন্য কারণ POST অনুরোধে এইগুলি প্রতিস্থাপনকারী ডেটা থাকবে৷
  2. যদি এটি একটি পোস্ট হয়, অনুবাদ করার জন্য পাঠ্যটি ধরুন এবং যদি খালি না থাকে তবে API মেটাডেটা প্রয়োজনীয়তা উপস্থাপন করে একটি JSON কাঠামো তৈরি করুন৷ তারপর পরিষেবার জন্য API কল করুন।
  3. আমরা SOURCE[0] এ APIকে একটি নির্দিষ্ট ইংরেজি উৎসে পাস করিনি। আপনি যখন উৎস ভাষা ছেড়ে দেন, তখন আপনি API-কে উৎস ভাষা স্বয়ংক্রিয়ভাবে সনাক্ত করার জন্য অনুরোধ করছেন ( ডক্সে sourceLanguageCode দেখুন)।
  4. নির্বিশেষে, টেমপ্লেট প্রেক্ষাপটে প্রকৃত ফলাফল (POST) বা কোন ডেটা (GET) ফর্ম্যাট করুন এবং রেন্ডার করুন।

অ্যাপ্লিকেশনটির ভিজ্যুয়াল অংশটি টেমপ্লেট index.html ফাইলে রয়েছে। এটি পূর্বে অনূদিত ফলাফল দেখায় (অন্যথায় ফাঁকা) তারপরে ফর্মটি অনুবাদ করার জন্য কিছু জিজ্ঞাসা করে:

<!doctype html>
<html><head><title>My Google Translate 1990s</title><body>
<style>
body {
  font-family: Verdana, Helvetica, sans-serif;
  background-color: #DDDDDD;
}
</style>
<h2>My Google Translate (1990s edition)</h2>

{% if trans['text'] %}
    <h4>Previous translation</h4>
    <li><b>Original</b>:   {{ orig['text'] }}  (<i>{{ orig['lc'][0] }}</i>)</li>
    <li><b>Translated</b>: {{ trans['text'] }} (<i>{{ trans['lc'][0] }}</i>)</li>
{% endif %}

<h4>Enter <i>{{ orig['lc'][1] }}</i> text to translate to <i>{{ trans['lc'][1] }}</i>:</h4>
<form method="POST"><input name="text"><input type="submit"></form>
</body></html>

টিউটোরিয়ালের বাকি অংশের জন্য, আপনি এই অ্যাপটি স্থাপন এবং চালানোর জন্য চারটি বিকল্পের যেকোনো একটি বা সবকটি বেছে নিতে পারেন। সমস্ত স্থাপনা ঐচ্ছিক, যার অর্থ আপনি যেকোনও বা সমস্ত করতে পারেন।

  1. স্থানীয়ভাবে পরিষেবাটি চালান
  2. অ্যাপ ইঞ্জিনে স্থাপন করুন (মান পরিবেশ)
  3. ক্লাউড ফাংশনে স্থাপন করুন
  4. ক্লাউড রানে স্থাপন করুন

7. বিকল্প 1: পরিষেবাটি স্থানীয়ভাবে চালান৷

কোডল্যাবের এই বিভাগটি শুধুমাত্র স্থানীয়ভাবে চালানোর জন্য। আপনি যদি শুধুমাত্র ক্লাউডে স্থাপন করে থাকেন, তাহলে পরবর্তী বিভাগে যান।

নমুনা অ্যাপটি স্থানীয়ভাবে চালানোর জন্য, তিনটি স্বতন্ত্র পদক্ষেপ নিতে হবে:

  1. একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন
  2. একটি পরিষেবা অ্যাকাউন্ট পাবলিক/প্রাইভেট কী জোড়া তৈরি করুন
  3. শংসাপত্র ফাইল ডাউনলোড করুন এবং অ্যাপ্লিকেশন কোড সহ বান্ডেল করুন
  4. পরিষেবা শুরু করুন

পরিষেবা অ্যাকাউন্ট সম্পর্কে জানুন

পরিষেবা অ্যাকাউন্টগুলি হল ক্লাউড-ভিত্তিক অ্যাপ্লিকেশনগুলির জন্য Google API অ্যাক্সেস করার জন্য নিরাপত্তা ব্যবস্থা যা মানব ব্যবহারকারীদের অন্তর্গত নয় এমন ডেটা অ্যাক্সেস করার সময়। ক্লাউডে স্থাপন করার সময়, ক্লাউডে অনবোর্ডিং ব্যবহারকারীদের র‌্যাম্প-আপের সময় কমাতে, সমস্ত Google ক্লাউড কম্পিউট প্ল্যাটফর্ম (সার্ভারহীন এবং অন্যথায়) ডিফল্ট পরিষেবা অ্যাকাউন্ট সরবরাহ করে।

ডিফল্ট পরিষেবা অ্যাকাউন্টগুলি "লাল ফিতার মাধ্যমে কাটা" করার জন্য বিস্তৃত অনুমতিগুলির সাথে আসে, কিন্তু যখন একটি উত্পাদন পরিষেবা চালু করার জন্য প্রস্তুত হয়, আমরা দৃঢ়ভাবে সুপারিশ করি যে ব্যবহারকারীরা "ন্যূনতম বিশেষাধিকার" এর সর্বোত্তম অনুশীলন অনুসরণ করুন তবে ব্যবহারকারী-পরিচালিত পরিষেবা অ্যাকাউন্ট তৈরি করুন আপনার অ্যাপ সঠিকভাবে কাজ করার জন্য শুধুমাত্র যথেষ্ট অনুমতি সহ। যাই হোক না কেন, স্থানীয় স্থাপনার জন্য কোনও ডিফল্ট পরিষেবা অ্যাকাউন্ট নেই, তাই আপনাকে অবশ্যই একটি পরিষেবা অ্যাকাউন্ট এবং একটি পরিষেবা অ্যাকাউন্ট কী (আসলে একটি সর্বজনীন/ব্যক্তিগত কী জোড়া) তৈরি করতে হবে এবং সেই শংসাপত্রগুলিকে অ্যাপ্লিকেশন কোডে উপলব্ধ করতে হবে।

পরিষেবা অ্যাকাউন্ট কী-জোড়া তৈরি করুন এবং শংসাপত্র ফাইল ডাউনলোড করুন

স্থানীয়ভাবে চালানোর জন্য একটি পরিষেবা অ্যাকাউন্ট এবং পাবলিক/প্রাইভেট কী জোড়া তৈরি করতে এই পৃষ্ঠার নির্দেশাবলী অনুসরণ করুন। পরিষেবা অ্যাকাউন্ট কী তৈরি করার সময়, আপনাকে পছন্দসই অনুমতি প্রদান করতে বলা হবে। roles/cloudtranslate.user নির্বাচন করতে ভুলবেন না যাতে আপনি সফলভাবে API অ্যাক্সেস করতে পারেন।

আপনার কী জোড়া সফলভাবে তৈরি হয়ে গেলে, আপনাকে পরিষেবা অ্যাকাউন্ট কী ফাইলটি ডাউনলোড করতে বলা হবে। এটিকে credentials.json বলুন এবং এটিকে অ্যাপ্লিকেশন টপ-লেভেল ফোল্ডারে নিয়ে যান। এখন আপনাকে ক্লাউড SDK-কে সেই শংসাপত্রগুলি ব্যবহার করতে বলতে হবে: সেই ফাইলটিতে নির্দেশ করতে GOOGLE_APPLICATION_CREDENTIALS পরিবেশ পরিবর্তনশীল সেট করুন৷ পরিষেবা অ্যাকাউন্টের ব্যবহার কভার করে এই প্রক্রিয়া সম্পর্কে আরও এই পৃষ্ঠায় পাওয়া যাবে।

পরিষেবা শুরু করুন

যখন আপনি এগিয়ে যাওয়ার জন্য প্রস্তুত হন, তখন নিম্নোক্ত কমান্ডের মাধ্যমে স্থানীয়ভাবে এক্সপ্রেস সার্ভার চালু করুন:

$ npm start

> cloud-nebulous-serverless-nodejs@0.0.1 start
> node index.js

Listening on port 8080

স্থানীয় হোস্ট:8080 এ এটির সাথে সংযোগ করতে আপনার ওয়েব ব্রাউজারে যান এবং আপনি নিম্নলিখিতগুলির মতো কিছু দেখতে পাবেন:

adc6665b7ae13c40.png

এটা কাজ দেখতে কিছু অনুবাদ!

fc154326080bf14f.png

আপনি যখন এতে সন্তুষ্ট হন, তখন ^C (কন্ট্রোল-সি) দিয়ে সার্ভার থেকে প্রস্থান করুন এবং প্রস্থান করুন। স্থানীয় স্থাপনা চালু হওয়ার জন্য অভিনন্দন। ভাল খবর আছে: ক্লাউডে স্থাপন করা অনেক সহজ।

সমস্যা সমাধান

একটি অনুবাদ অনুরোধ করার সময় আপনি এই মত একটি ত্রুটি পাচ্ছেন?

node:fs:2486
      handleErrorFromBinding(ctx);
      ^

Error: The file at credentials.json does not exist, or it is not a file. ENOENT: no such file or directory, lstat '/tmp/nodejs/credentials.json'
    . . .

সমাধান : এই ত্রুটির অর্থ হল আপনি একটি পরিষেবা অ্যাকাউন্ট তৈরি করা এবং পাবলিক/প্রাইভেট কী জোড়া ফাইল credentials.json ডাউনলোড করা সম্পূর্ণ করেননি। অনুগ্রহ করে " বিকল্প 1: স্থানীয়ভাবে পরিষেবা চালান " এ ফিরে যান এবং এই প্রক্রিয়াটি সম্পূর্ণ করুন এবং এগিয়ে যাওয়ার আগে প্রধান ফোল্ডারে ক্রেড ইনস্টল করুন৷

8. বিকল্প 2: অ্যাপ ইঞ্জিনে স্থাপন করুন (মান পরিবেশ)

কোডল্যাবের এই বিভাগটি শুধুমাত্র নোড অ্যাপ ইঞ্জিনে স্থাপনের জন্য। আপনি যদি আগ্রহী না হন তবে পরবর্তী বিভাগে যান।

এই স্থাপনাটি app.yaml কনফিগারেশন ফাইল ব্যবহার করে যা অ্যাপ ইঞ্জিনকে বলে যে কোন একক লাইনে রানটাইম ব্যবহার করতে হবে:

runtime: nodejs16

app.yaml ফাইলটি ক্লাউড ফাংশন বা ক্লাউড রান দ্বারা ব্যবহৃত হয় না। আপনি অ্যাপ ইঞ্জিন ব্যবহার করার পরিকল্পনা না করলে, এই ফাইলটি নিরাপদে মুছে ফেলা হতে পারে। আপনি যখন অ্যাপ ইঞ্জিনে স্থাপন করতে প্রস্তুত হন, তখন এই কমান্ডটি চালান:

$ gcloud app deploy

একবার একটি অঞ্চল নির্বাচন করা হলে, gcloud app deploy আউটপুট অনেক কম ভার্বোস হবে এবং এটি নিম্নরূপ দেখা উচিত:

Services to deploy:

descriptor:                  [/private/tmp/nodejs/app.yaml]
source:                      [/private/tmp/nodejs]
target project:              [PROJECT_ID]
target service:              [default]
target version:              [2021...]
target url:                  [https://PROJECT_ID.REG_ABBR.appspot.com]
target service account:      [App Engine default service account]


Do you want to continue (Y/n)?

Beginning deployment of service [default]...
╔════════════════════════════════════════════════════════════╗
╠═ Uploading 2 files to Google Cloud Storage                          ═╣
╚════════════════════════════════════════════════════════════╝
File upload done.
Updating service [default]...⠏WARNING: *** Improve build performance by generating and committing package-lock.json.

Updating service [default]...done.
Setting traffic split for service [default]...done.
Deployed service [default] to [https://PROJECT_ID.REG_ABBR.appspot.com]

You can stream logs from the command line by running:
  $ gcloud app logs tail -s default

To view your application in the web browser run:
  $ gcloud app browse

To take a quick anonymous survey, run:
  $ gcloud survey

এখন যেহেতু আপনার অ্যাপটি বিশ্বব্যাপী বিশ্বব্যাপী উপলব্ধ, আপনি এটিকে আপনার প্রোজেক্ট আইডি ধারণকারী URL-এ পৌঁছাতে সক্ষম হবেন, এবং আপনি স্থানীয় এক্সপ্রেস সংস্করণের মতো একটি আউটপুট দেখতে পাবেন কিন্তু জেনে রাখুন যে এটি ক্লাউডে চলছে এবং চারপাশে উপলব্ধ বিশ্ব:

da28f951c33a2c3d.png

আপনি যদি একটি অনুরোধ জমা দেন, আপনি দেখতে পাবেন যে এটি অন্য সব স্থাপনার মতোই কাজ করে।

9. বিকল্প 3: ক্লাউড ফাংশনে স্থাপন করুন

কোডল্যাবের এই বিভাগটি শুধুমাত্র নোড ক্লাউড ফাংশনে স্থাপনের জন্য। আপনি যদি আগ্রহী না হন তবে পরবর্তী বিভাগে যান।

ক্লাউড ফাংশনগুলির সাথে কোনও কনফিগারেশন ফাইল নেই, তাই আপনি যখন ক্লাউড ফাংশনে স্থাপন করতে প্রস্তুত হন, তখন এই কমান্ডটি চালান:

$ gcloud functions deploy translate \
  --runtime nodejs16 \
  --entry-point app \
  --trigger-http \
  --region REGION \
  --allow-unauthenticated

আপনার GCP প্রকল্পের একটি ডিফল্ট REGION থাকতে পারে, কিন্তু আপনি একটি নির্দিষ্ট অঞ্চলে আপনার ফাংশন স্থাপন করতে --region পতাকা ব্যবহার করতে পারেন। ক্লাউড ফাংশন আপনাকে অন্যান্য ক্লাউড পণ্যের মতো প্রম্পট করে না। আপনি যে অঞ্চলটি বেছে নিন তা নির্বিশেষে, gcloud functions deploy আউটপুট নিম্নরূপ হওয়া উচিত:

Deploying function (may take a while - up to 2 minutes)...⠛
For Cloud Build Logs, visit: https://console.cloud.google.com/cloud-build/builds;region=REGION/15ac7fc1-731d-4f3b-bc15-8f2614xxxxxx?project=062269xxxxxx
Deploying function (may take a while - up to 2 minutes)...done.
availableMemoryMb: 256
buildId: aaf7e0cd-fbbd-4624-abeb-3e7437xxxxxx
buildName: projects/062269xxxxxx/locations/REGION/builds/aaf7e0cd-fbbd-4624-abeb-3e7437xxxxxx
entryPoint: app
httpsTrigger:
  securityLevel: SECURE_OPTIONAL
  url: https://REGION-PROJECT_ID.cloudfunctions.net/translate
ingressSettings: ALLOW_ALL
labels:
  deployment-tool: cli-gcloud
name: projects/PROJECT_ID/locations/REGION/functions/translate
runtime: nodejs16
serviceAccountEmail: PROJECT_ID@appspot.gserviceaccount.com
sourceUploadUrl: https://storage.googleapis.com/gcf-upload-REGION-01de94c2-6eb4-4c49-aaff-09276cdb7ae9/a1db9f2d-3511-414b-aeeb-de6042xxxxxx.zip
status: ACTIVE
timeout: 60s
updateTime: '2021...'
versionId: '...'

এখন যেহেতু আপনার অ্যাপটি বিশ্বব্যাপী বিশ্বব্যাপী উপলব্ধ, আপনি এটিকে আপনার প্রোজেক্ট আইডি সমন্বিত URL-এ পৌঁছাতে সক্ষম হবেন যেমনটি স্থাপনার আউটপুটে দেখানো হয়েছে (" httpsTrigger/url " এর অধীনে)। URLটি দেখতে এরকম কিছু হওয়া উচিত: https:// REGION - PROJECT_ID .cloudfunctions.net/translate যা আপনি কোন অঞ্চল নির্বাচন করেছেন এবং আপনার ক্লাউড প্রকল্প আইডির উপর ভিত্তি করে পরিবর্তিত হয়৷

518f1c3165f2096d.png

10. বিকল্প 4: ক্লাউড রানে স্থাপন করুন

কোডল্যাবের এই বিভাগটি শুধুমাত্র ক্লাউড রানে স্থাপনের জন্য। আপনি যদি আগ্রহী না হন তবে পরবর্তী বিভাগে যান।

ক্লাউড রানের সাথে কোনও কনফিগারেশন ফাইল নেই, তাই আপনি যখন ক্লাউড রানে স্থাপন করতে প্রস্তুত হন, নীচের নির্দেশাবলী অনুসরণ করুন৷

এখন আপনি এই কমান্ডটি চালিয়ে ক্লাউড রানে আপনার অনুবাদ পরিষেবা স্থাপন করতে প্রস্তুত:

$ gcloud run deploy translate --source . --allow-unauthenticated --platform managed

আউটপুট নিম্নলিখিত হিসাবে দেখা উচিত, এবং পরবর্তী পদক্ষেপের জন্য কিছু প্রম্পট প্রদান করুন:

Please specify a region:
 [1] asia-east1
 [2] asia-east2
. . . (other regions) . . .
 [28] us-west4
 [29] cancel
Please enter your numeric choice:  REGION_CHOICE

To make this the default region, run `gcloud config set run/region REGION`.

Deploying from source requires an Artifact Registry repository to
store build artifacts. A repository named [cloud-run-source-deploy] in
 region [REGION] will be created.

Do you want to continue (Y/n)?

This command is equivalent to running "gcloud builds submit --pack image=[IMAGE] ." and "gcloud run deploy translate --image [IMAGE]"

Building . . . and deploying container to Cloud Run service [translate] in project [PROJECT_ID] region [REGION]
✓ Building and deploying... Done.
  ✓ Creating Container Repository...
  ✓ Uploading sources...
  ✓ Building Container... Logs are available at [https://console.cloud.google.com/cloud-build/builds/60e1b
  9bb-b991-4b4e-8d8a-HASH?project=PROJECT_NUMBER].
  ✓ Creating Revision...
  ✓ Routing traffic...
  ✓ Setting IAM Policy...
Done.
Service [translate] revision [translate-00001-xyz] has been deployed and is serving 100 percent of traffic.
Service URL: https://SVC_NAME-HASH-REG_ABBR.a.run.app

ক্লাউড বিল্ড আপনার অ্যাপগুলিকে ক্লাউড রানে প্যাক করে যেমন আপনি যদি স্থানীয়ভাবে আপনার অ্যাপ চালান। Node.js ব্যবহারকারীদের জন্য, এটি npm install এবং npm start চালায়। পাইথনের জন্য, এটি pip install -r requirements.txt চালায় এবং আপনার Procfile এর নির্দেশাবলী থেকে অ্যাপটি শুরু করে। ( ক্লাউড বিল্ডপ্যাক দ্বারা সমর্থিত অন্যান্য সমস্ত ভাষার ক্ষেত্রেও একই কথা প্রযোজ্য।) বিল্ড প্রক্রিয়া সম্পূর্ণ হয়ে গেলে আপনার অ্যাপটি ব্যবহারের জন্য প্রস্তুত হয়ে যাবে।

আপনার অ্যাপটি তখন (আঞ্চলিকভাবে স্থাপন করা হয়েছে কিন্তু) বিশ্বব্যাপী উপলভ্য, এবং এটিকে আপনার প্রোজেক্ট আইডি সম্বলিত ইউআরএলে পৌঁছানো যেতে পারে যেমনটি স্থাপনার আউটপুটে দেখানো হয়েছে (" Service URL :" এর অধীনে।

169f6edf5f7d2068.png

এটা কাজ দেখতে কিছু অনুবাদ!

31554e71cb80f1b4.png

11. উপসংহার

অভিনন্দন! আপনি শিখেছেন কিভাবে ক্লাউড ট্রান্সলেশন এপিআই সক্ষম করতে হয় এবং ব্যবহার করতে হয়, প্রয়োজনীয় শংসাপত্রগুলি পান এবং স্থানীয়ভাবে এক্সপ্রেস করার জন্য একটি সাধারণ ওয়েব অ্যাপ স্থাপন করতে হয়, অ্যাপ ইঞ্জিন, ক্লাউড ফাংশন এবং/অথবা ক্লাউড রানে। আরও জানতে বা এই অ্যাপের অন্যান্য সংস্করণের পাশাপাশি অন্যান্য কোডল্যাব অ্যাক্সেস করতে অনুগ্রহ করে রেপো ফোল্ডারটি দেখুন।

পরিষ্কার করুন

ক্লাউড ট্রান্সলেশন API আপনাকে প্রতি মাসে একটি নির্দিষ্ট পরিমাণ অনুবাদিত অক্ষর বিনামূল্যে সম্পাদন করতে দেয়৷ অ্যাপ ইঞ্জিনেরও একটি বিনামূল্যের কোটা রয়েছে, এবং ক্লাউড ফাংশন এবং ক্লাউড রানের ক্ষেত্রেও এটি প্রযোজ্য। কোনটি অতিক্রম করলে আপনাকে চার্জ দিতে হবে। আপনি যদি পরবর্তী কোডল্যাবে চালিয়ে যাওয়ার পরিকল্পনা করেন তবে আপনাকে আপনার অ্যাপটি বন্ধ করতে হবে না।

যাইহোক, যদি আপনি এখনও পরবর্তী টিউটোরিয়ালে যেতে প্রস্তুত না হন বা উদ্বিগ্ন হন যে ইন্টারনেট আপনি এইমাত্র যে অ্যাপটি স্থাপন করেছেন সেটি আবিষ্কার করে, আপনার অ্যাপ ইঞ্জিন অ্যাপটি অক্ষম করুন , আপনার ক্লাউড ফাংশন মুছুন , বা এড়াতে আপনার ক্লাউড রান পরিষেবা অক্ষম করুন দায়বদ্ধ চার্জ। আপনি যখন পরবর্তী কোডল্যাবে যাওয়ার জন্য প্রস্তুত হন, আপনি এটি পুনরায় সক্ষম করতে পারেন৷ অন্যদিকে, আপনি যদি এই অ্যাপ্লিকেশন বা অন্যান্য কোডল্যাবগুলি চালিয়ে যেতে না চান এবং সবকিছু সম্পূর্ণরূপে মুছে ফেলতে চান তবে আপনি আপনার প্রকল্পটি বন্ধ করতে পারেন৷

এছাড়াও, একটি Google ক্লাউড সার্ভারহীন কম্পিউট প্ল্যাটফর্মে স্থাপন করার জন্য সামান্য বিল্ড এবং স্টোরেজ খরচ হয়। ক্লাউড স্টোরেজের মতো ক্লাউড বিল্ডের নিজস্ব ফ্রি কোটা রয়েছে। বৃহত্তর স্বচ্ছতার জন্য, ক্লাউড বিল্ড আপনার অ্যাপ্লিকেশান ইমেজ তৈরি করে, যা পরে ক্লাউড কন্টেইনার রেজিস্ট্রি বা আর্টিফ্যাক্ট রেজিস্ট্রিতে সংরক্ষিত হয়, এর উত্তরসূরি৷ সেই ছবির সঞ্চয়স্থান সেই কোটার কিছু অংশ ব্যবহার করে যেমনটি পরিষেবাতে সেই ছবিটি স্থানান্তর করার সময় নেটওয়ার্ক প্রস্থান করে। যাইহোক, আপনি এমন একটি অঞ্চলে বাস করতে পারেন যেখানে এই ধরনের বিনামূল্যের স্তর নেই, তাই সম্ভাব্য খরচ কমাতে আপনার স্টোরেজ ব্যবহার সম্পর্কে সচেতন থাকুন।

12. অতিরিক্ত সম্পদ

নিম্নলিখিত বিভাগগুলিতে, আপনি এই টিউটোরিয়ালটি সম্পূর্ণ করার মাধ্যমে আপনার অর্জিত জ্ঞানকে বাড়ানোর জন্য অতিরিক্ত পড়ার উপাদানের পাশাপাশি প্রস্তাবিত অনুশীলনগুলি খুঁজে পেতে পারেন।

অতিরিক্ত অধ্যয়ন

এখন আপনার বেল্টের নীচে অনুবাদ API-এর সাথে আপনার কিছু অভিজ্ঞতা আছে, আসুন আপনার দক্ষতা আরও বিকাশের জন্য কিছু অতিরিক্ত অনুশীলন করি। আপনার শেখার পথ চালিয়ে যেতে, নিম্নলিখিতগুলি করতে আমাদের নমুনা অ্যাপটি পরিবর্তন করুন:

  1. স্থানীয়ভাবে চালানোর জন্য বা Google ক্লাউড সার্ভারহীন কম্পিউট প্ল্যাটফর্মে স্থাপন করার জন্য এই কোডল্যাবের অন্যান্য সংস্করণগুলি সম্পূর্ণ করুন (দেখুন রেপো README )।
  2. অন্য একটি প্রোগ্রামিং ভাষা ব্যবহার করে এই টিউটোরিয়ালটি সম্পূর্ণ করুন।
  3. বিভিন্ন উৎস বা লক্ষ্য ভাষা সমর্থন করতে এই অ্যাপ্লিকেশন পরিবর্তন করুন.
  4. একাধিক ভাষায় পাঠ্য অনুবাদ করতে সক্ষম হতে এই অ্যাপ্লিকেশনটি আপগ্রেড করুন; সমর্থিত টার্গেট ভাষাগুলির একটি পুলডাউন পেতে টেমপ্লেট ফাইলটি পরিবর্তন করুন।

আরও জানুন

গুগল অ্যাপ ইঞ্জিন

গুগল ক্লাউড ফাংশন

গুগল ক্লাউড রান

Google ক্লাউড বিল্ডপ্যাক, কন্টেইনার রেজিস্ট্রি, আর্টিফ্যাক্ট রেজিস্ট্রি

গুগল ক্লাউড ট্রান্সলেশন এবং গুগল এমএল কিট

অন্যান্য Google ক্লাউড পণ্য/পৃষ্ঠা

লাইসেন্স

এই টিউটোরিয়ালটি ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন 2.0 জেনেরিক লাইসেন্সের অধীনে লাইসেন্সকৃত যখন রেপোতে সোর্স কোডটি অ্যাপাচি 2-এর অধীনে লাইসেন্সপ্রাপ্ত।