1. نظرة عامة
تهدف سلسلة دروس البرمجة هذه (التي يمكن إكمالها بالوتيرة التي تناسبك، وهي عبارة عن برامج تعليمية عملية) إلى مساعدة المطوّرين في فهم الخيارات المختلفة المتاحة لهم عند نشر تطبيقاتهم. ستتعرّف على كيفية استخدام Google Cloud Translation API في تطبيق ويب بسيط. يمكن تشغيل هذا التطبيق على الجهاز أو نشره على منصة حوسبة بدون خادم على السحابة الإلكترونية (App Engine أو Cloud Functions أو Cloud Run).
ستتعلّم في هذا البرنامج التعليمي عن JavaScript كيفية استخدام Node.js مع إطار عمل الويب Express.js. ستتعرّف أيضًا على كيفية الوصول إلى واجهات برمجة تطبيقات Cloud من منصاتنا بلا خادم. جميع إصدارات هذا التطبيق مأخوذة من مستودع"nebulous serverless" المفتوح المصدر، والذي يتضمّن إصدارًا من هذا التطبيق بلغة Python ودروسًا برمجية مستقلة. يستضيف المستودع أيضًا تطبيقات مشابهة توضّح للمطوّرين كيفية الوصول إلى واجهات برمجة تطبيقات Google غير السحابية من منصاتنا التي لا تتطلّب خادمًا.
يركّز هذا الدرس التطبيقي حول الترميز على نشر هذا التطبيق على الأنظمة الأساسية المكتوبة بخط عريض أعلاه.
ستتعرّف على كيفية
- استخدام واجهات Google Cloud API، وتحديدًا ترجمة Cloud API (الوضع المتقدّم/الإصدار 3)
- تشغيل تطبيق ويب أساسي محليًا أو نشره على منصة حوسبة بدون خادم على السحابة الإلكترونية
المتطلبات
- مشروع Google Cloud يتضمّن حساب فوترة نشطًا على Cloud
- إطار عمل ويب مثبَّت لتشغيله محليًا ( Flask للمستخدمين الذين يتابعون البرنامج التعليمي حول Python أو Express للمستخدمين الذين يتابعون البرنامج التعليمي حول JavaScript/Node.js)
- تفعيل منصة واحدة على الأقل للحوسبة بلا خادم لعمليات النشر على Google Cloud
- مهارات البرمجة الأساسية (Python أو JavaScript/Node.js)
- معرفة عملية بأوامر نظام التشغيل الأساسية
استطلاع الرأي
كيف ستستخدم هذا البرنامج التعليمي؟
كيف تقيّم تجربتك في تطوير التطبيقات باستخدام Python أو Node.js؟
ما هو تقييمك لتجربة استخدام خدمات Google Cloud؟
2. الإعداد والمتطلبات
إعداد البيئة بالسرعة التي تناسبك
- سجِّل الدخول إلى Google Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.



- اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة من الأحرف لا تستخدمها Google APIs، ويمكنك تعديلها في أي وقت.
- يجب أن يكون رقم تعريف المشروع فريدًا في جميع مشاريع Google Cloud، كما أنّه غير قابل للتغيير (لا يمكن تغييره بعد ضبطه). تنشئ Cloud Console تلقائيًا سلسلة فريدة، ولا يهمّك عادةً ما هي. في معظم دروس الترميز، عليك الرجوع إلى رقم تعريف المشروع (ويتم تحديده عادةً على أنّه
PROJECT_ID)، لذا إذا لم يعجبك، يمكنك إنشاء رقم آخر عشوائي، أو يمكنك تجربة رقمك الخاص ومعرفة ما إذا كان متاحًا. ثم يتم "تجميده" بعد إنشاء المشروع. - هناك قيمة ثالثة، وهي رقم المشروع الذي تستخدمه بعض واجهات برمجة التطبيقات. يمكنك الاطّلاع على مزيد من المعلومات عن كل هذه القيم الثلاث في المستندات.
- بعد ذلك، عليك تفعيل الفوترة في Cloud Console من أجل استخدام موارد/واجهات برمجة تطبيقات Cloud. لن تكلفك تجربة هذا الدرس التطبيقي حول الترميز الكثير من المال، إن لم تكلفك شيئًا على الإطلاق. لإيقاف الموارد كي لا يتم تحصيل رسوم منك بعد هذا الدرس التطبيقي حول الترميز، اتّبِع أي تعليمات "تنظيف" واردة في نهاية الدرس. يمكن لمستخدمي Google Cloud الجدد الاستفادة من برنامج الفترة التجريبية المجانية بقيمة 300 دولار أمريكي.
3- تفعيل Translation API
في هذا القسم، سنتعرّف على كيفية تفعيل واجهات Google API بشكل عام. بالنسبة إلى نموذج تطبيقنا، عليك تفعيل ترجمة Cloud API. عليك أيضًا تفعيل App Engine و/أو Cloud Functions و/أو Cloud Run (بالإضافة إلى Cloud Artifact Registry)، وذلك حسب الأنظمة الأساسية التي تريد نشر نموذج التطبيق عليها.
تفعيل واجهات Google APIs
مقدّمة
بغض النظر عن واجهة Google API التي تريد استخدامها في تطبيقك، يجب تفعيلها. يمكن تفعيل واجهات برمجة التطبيقات من سطر الأوامر أو من وحدة تحكّم Cloud. إنّ عملية تفعيل واجهات برمجة التطبيقات متطابقة، لذا بعد تفعيل إحدى الواجهات، يمكنك تفعيل واجهة أخرى بالطريقة نفسها.
الخيار 1: gcloud واجهة سطر الأوامر (Cloud Shell أو البيئة المحلية)
على الرغم من أنّ تفعيل واجهات برمجة التطبيقات من Cloud Console هو الإجراء الأكثر شيوعًا، يفضّل بعض المطوّرين تنفيذ كل شيء من سطر الأوامر. لإجراء ذلك، عليك البحث عن "اسم الخدمة" لواجهة برمجة التطبيقات. يبدو أنّها عنوان URL: SERVICE_NAME.googleapis.com. يمكنك العثور على هذه المنتجات في مخطط المنتجات المتوافقة، أو يمكنك طلبها آليًا باستخدام Google Discovery API.
باستخدام هذه المعلومات، يمكنك تفعيل واجهة برمجة تطبيقات باستخدام Cloud Shell (أو بيئة التطوير المحلية مع تثبيت أداة سطر الأوامر gcloud)، وذلك باتّباع الخطوات التالية:
gcloud services enable SERVICE_NAME.googleapis.com
المثال 1: تفعيل Cloud Vision API
gcloud services enable vision.googleapis.com
المثال 2: تفعيل Google App Engine
gcloud services enable appengine.googleapis.com
المثال 3: تفعيل عدة واجهات برمجة تطبيقات بطلب واحد على سبيل المثال، إذا كان هذا الدرس التطبيقي حول الترميز يتضمّن مشاهدين ينشرون تطبيقًا باستخدام Cloud Translation API على App Engine وCloud Functions وCloud Run، سيكون سطر الأوامر كما يلي:
gcloud services enable appengine.googleapis.com cloudfunctions.googleapis.com artifactregistry.googleapis.com run.googleapis.com translate.googleapis.com
يتيح هذا الأمر استخدام App Engine وCloud Functions وCloud Run وCloud Translation API. بالإضافة إلى ذلك، يتيح هذا الإذن استخدام Artifact Registry لأنّ نظام التصميم Cloud Build يجب أن يسجّل فيه صور الحاويات حتى يتمكّن من نشرها على Cloud Run.
الخيار 2: Cloud Console
يمكنك أيضًا تفعيل واجهات Google APIs في "أداة إدارة واجهات برمجة التطبيقات". من Cloud Console، انتقِل إلى إدارة واجهات برمجة التطبيقات واختَر المكتبة.

ابدأ بإدخال اسم واجهة برمجة التطبيقات في شريط البحث للاطّلاع على النتائج المطابقة:

اختَر واجهة برمجة التطبيقات التي تريد تفعيلها وانقر على الزر تفعيل:

تتشابه عملية تفعيل جميع واجهات برمجة التطبيقات، بغض النظر عن واجهة برمجة التطبيقات من Google التي تريد استخدامها.
التكلفة
يمكن استخدام العديد من واجهات Google API بدون رسوم، ولكن هناك تكاليف عند استخدام معظم منتجات وواجهات Google Cloud API. عند تفعيل Cloud APIs، قد يُطلب منك تقديم حساب فوترة نشط. ومع ذلك، تتضمّن بعض منتجات Google Cloud فئة"دائمًا مجانية"، ويجب تجاوزها من أجل تكبُّد رسوم الفوترة.
يمكن لمستخدمي GCP الجدد الاستفادة من الفترة التجريبية المجانية التي تبلغ قيمتها حاليًا 300 دولار أمريكي (أو ما يعادله بالعملة المحلية) لمدة أول 90 يومًا. لا تتكبّد Codelabs عادةً تكلفة كبيرة أو أي تكلفة، لذا نقترح عليك تأجيل الاستفادة من الفترة التجريبية المجانية إلى أن تكون مستعدًا لتجربتها، خاصةً أنّها عرض لمرة واحدة. لا تنتهي صلاحية حصص "الإصدار المجاني"، وهي تسري بغض النظر عمّا إذا كنت تستخدم "الفترة التجريبية المجانية" أم لا.
على المستخدمين الرجوع إلى معلومات التسعير الخاصة بأي واجهة برمجة تطبيقات قبل تفعيلها (مثال: صفحة أسعار Cloud Vision API )، مع الانتباه بشكل خاص إلى ما إذا كانت تتضمّن طبقة مجانية، وإذا كان الأمر كذلك، ما هي هذه الطبقة. وطالما أنّك تلتزم بالحدود اليومية أو الشهرية المحدّدة بشكل إجمالي، لن يتم تحصيل أي رسوم منك. تختلف الأسعار والمستويات المجانية بين واجهات برمجة التطبيقات لمجموعات منتجات Google. أمثلة:
- Google Cloud/GCP: تتم فوترة كل منتج بشكل مختلف، وعادةً ما يتم الدفع مقابل الاستخدام. يمكنك الاطّلاع على معلومات الطبقة المجانية أعلاه.
- خرائط Google: تتضمّن مجموعة من واجهات برمجة التطبيقات وتوفّر للمستخدمين رصيدًا شهريًا مجانيًا بقيمة 200 دولار أمريكي.
- واجهات برمجة التطبيقات في Google Workspace (المعروفة سابقًا باسم G Suite): توفّر استخدامًا (بحدود معيّنة) مشمولاً برسوم الاشتراك الشهري في Workspace، لذا لا تتم فوترة استخدام واجهات برمجة التطبيقات مباشرةً للتطبيقات، مثل Gmail أو Google Drive أو "تقويم Google" أو "مستندات Google" أو "جداول بيانات Google" أو "العروض التقديمية من Google".
تختلف طريقة فوترة منتجات Google المختلفة، لذا احرص على الرجوع إلى المستندات المناسبة للحصول على هذه المعلومات.
التأكّد من تفعيل الخدمات المطلوبة
تأكَّد من تفعيل ترجمة Cloud API في إدارة واجهات برمجة التطبيقات كما هو موضّح أعلاه. إذا لم تفعّل المنصات التي لا تتطلّب خادمًا من سطر الأوامر، يمكنك إجراء ذلك من لوحات البيانات الخاصة بكل منها في Cloud Console: App Engine وCloud Functions وCloud Run.
على الرغم من أنّ تفعيل واجهات برمجة التطبيقات من Cloud Console يقدّم معلومات مرئية مفيدة، إلا أنّ استخدام الأداة 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. لنستعرض المزيد من التفاصيل حول هذا البرنامج التعليمي. على الرغم من أنّ حصتها الشهرية غير مدرَجة في صفحة الملخّص الشامل "دائمًا مجاني"، فإنّ صفحة أسعار Translation API توضّح أنّ جميع المستخدمين يحصلون على كمية ثابتة من الأحرف المترجَمة شهريًا. لن يتم تحصيل أي رسوم منك مقابل استخدام واجهة برمجة التطبيقات إذا بقيت دون هذا الحدّ. لمزيد من المعلومات عن التكاليف باستخدام منصات Google Cloud غير الخادمية، يُرجى الاطّلاع على قسم التكاليف في المستودع. سيتناول قسم "التنظيف" في النهاية كيفية إيقاف تحمّل تكاليف الفوترة بعد إكمال هذا الدرس البرمجي.
4. الحصول على رمز نموذج التطبيق
تنزيل ملف ZIP أو استنساخ مستودع
- نزِّل ملف ZIP أو استنسِخ المستودع باستخدام
git clone https://github.com/googlecodelabs/cloud-nebulous-serverless.git - إذا لم يكن لديك بيئة تطوير محلية وأردت إجراء هذا الدرس التعليمي في Cloud Shell، يمكنك استنساخ المستودع باستخدام الأمر
git cloneنفسه. - يمكنك أيضًا الوصول إلى ملف ZIP من خلال الزر الأخضر الرمز كما هو موضّح في لقطة الشاشة التالية:

بعد أن أصبح كل شيء جاهزًا، أنشئ نسخة كاملة من المجلد لتنفيذ هذا الدرس التعليمي المحدّد، لأنّه من المحتمل أن يتضمّن حذف الملفات أو تغييرها. إذا أردت إجراء عملية نشر مختلفة، يمكنك البدء من جديد عن طريق نسخ الأصل حتى لا تضطر إلى استنساخه أو تنزيله مرة أخرى.
5- تأكيد بيئة Node.js
لإعداد بيئة Node.js، اتّبِع الخطوات التالية:
- تأكَّد من تثبيت أحدث إصدارات Node (الإصدار 10 أو أحدث) وNPM (الإصدار 6 أو أحدث)
- انتقِل إلى المكان الذي استنسخت فيه المستودع (أو فككت ضغط ملف ZIP)، ثم انتقِل إلى المجلد
cloud/nodejs. - تأكَّد من توفّر
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
};
- توفّر
requireوظائف الإطار والنموذج، بالإضافة إلى مكتبة عملاء ترجمة Cloud API. - تمثّل المتغيّرات العامة تطبيق الويب ورقم تعريف مشروع على السحابة الإلكترونية وعميل Translation API ومسار الموقع الجغرافي الرئيسي لطلبات Translation API واللغتَين
SOURCEوTARGET. في هذه الحالة، تكون اللغة الإنجليزية (en) والإسبانية (es)، ولكن يمكنك تغيير هاتين القيمتين إلى رموز لغات أخرى تتيحها ترجمة Cloud API. - العنصر الأول من كل زوج (
SOURCEوTARGET) هو رمز اللغة، بينما العنصر الثاني هو اسم اللغة (ويُستخدم لأغراض العرض فقط لأنّه غير ذي صلة بواجهة برمجة التطبيقات). - السطور القليلة في الأسفل مخصّصة لإرسال جميع طلبات HTTP إلى
translate()ثم تصدير عنصر التطبيق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);
}
تتولّى الوظيفة الأساسية مهمة تلقّي بيانات أدخلها المستخدم، واستدعاء واجهة برمجة التطبيقات Translation API لتنفيذ العمل الشاق. إليك التفاصيل:
- أعِد ضبط المتغيرات الأساسية للنموذج. يتم ذلك بشكل أساسي لطلبات GET لأنّ طلبات POST ستتضمّن بيانات تحلّ محلّها.
- إذا كان الطلب من النوع POST، احصل على النص المطلوب ترجمته، وإذا لم يكن فارغًا، أنشئ بنية JSON تمثّل متطلبات البيانات الوصفية لواجهة برمجة التطبيقات. بعد ذلك، اتّصِل بواجهة برمجة التطبيقات للخدمة.
- لم نمرّر
SOURCE[0]إلى واجهة برمجة التطبيقات إلى مصدر إنجليزي محدّد. عند حذف اللغة المصدر، تطلب من واجهة برمجة التطبيقات رصد اللغة المصدر تلقائيًا (راجِعsourceLanguageCodeفي المستندات). - في كلتا الحالتين، يجب تنسيق النتائج الفعلية (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>
بالنسبة إلى بقية البرنامج التعليمي، يمكنك اختيار أي من الخيارات الأربعة أو جميعها لنشر هذا التطبيق وتشغيله. جميع عمليات النشر اختيارية، ما يعني أنّه يمكنك تنفيذ أي منها أو جميعها.
- تشغيل الخدمة محليًا
- النشر على App Engine (البيئة العادية)
- النشر على Cloud Functions
- النشر على Cloud Run
7. الخيار 1: تشغيل الخدمة محليًا
هذا القسم من الدرس العملي مخصّص للتنفيذ على الجهاز المحلي فقط. إذا كنت ستنفّذ عملية النشر على السحابة الإلكترونية فقط، انتقِل إلى القسم التالي.
لتشغيل نموذج التطبيق محليًا، يجب اتّخاذ ثلاث خطوات مختلفة:
- إنشاء حساب خدمة
- إنشاء مفتاحَي تشفير عام وخاص لحساب خدمة
- تنزيل ملف بيانات الاعتماد وتضمينه في الرمز البرمجي للتطبيق
- بدء الخدمة
مزيد من المعلومات عن حسابات الخدمة
حسابات الخدمة هي آلية الأمان للوصول إلى واجهات Google API للتطبيقات المستندة إلى السحابة الإلكترونية عند الوصول إلى البيانات التي لا تخص المستخدمين من البشر. عند النشر على Google Cloud، لتقليل الوقت اللازم لإعداد المستخدمين على Google Cloud، توفّر جميع منصات الحوسبة من Google Cloud (حوسبة بدون خادم وغيرها) حسابات خدمة تلقائية.
تتضمّن حسابات الخدمة التلقائية مجموعة كبيرة من الأذونات "لتسهيل الإجراءات"، ولكن عند الاستعداد لإطلاق خدمة إنتاجية، ننصح المستخدمين بشدة باتّباع أفضل ممارسة وهي "أقل الامتيازات"، وذلك من خلال إنشاء حسابات خدمة يديرها المستخدم تتضمّن الأذونات الكافية فقط ليعمل تطبيقك بشكلٍ سليم. على أي حال، لا تتوفّر حسابات خدمة تلقائية لعمليات النشر المحلية، لذا عليك إنشاء حساب خدمة بالإضافة إلى مفتاح حساب خدمة (وهو في الواقع زوج من المفاتيح العامة والخاصة) وإتاحة بيانات الاعتماد هذه للرمز البرمجي للتطبيق.
إنشاء زوج مفاتيح لحساب الخدمة وتنزيل ملف بيانات الاعتماد
اتّبِع التعليمات الواردة في هذه الصفحة لإنشاء حساب خدمة وزوج مفاتيح عام/خاص لتشغيل التطبيق محليًا. عند إنشاء مفتاح حساب الخدمة، سيُطلب منك تقديم الأذونات المطلوبة. احرص على اختيار roles/cloudtranslate.user لتتمكّن من الوصول إلى واجهة برمجة التطبيقات بنجاح.
بعد إنشاء مفتاحَي التشفير بنجاح، سيُطلب منك تنزيل ملف مفتاح حساب الخدمة. أطلِق عليه اسم credentials.json وانقله إلى مجلد التطبيق ذي المستوى الأعلى. عليك الآن إخبار Cloud SDK باستخدام بيانات الاعتماد هذه: اضبط متغيّر البيئة GOOGLE_APPLICATION_CREDENTIALS للإشارة إلى هذا الملف. يمكنك أيضًا الاطّلاع على مزيد من المعلومات حول هذه العملية في هذه الصفحة التي تتناول استخدام حسابات الخدمة.
بدء الخدمة
عندما تكون مستعدًا للمتابعة، شغِّل خادم Express محليًا باستخدام الأمر التالي:
$ npm start > cloud-nebulous-serverless-nodejs@0.0.1 start > node index.js Listening on port 8080
انتقِل إلى متصفّح الويب للاتصال به على localhost:8080، ومن المفترض أن يظهر لك محتوى مشابه لما يلي:

ترجمة نص لتجربة هذه الميزة

عندما تكون راضيًا عن النتيجة، يمكنك إيقاف الخادم باستخدام ^C (control-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 Engine (البيئة العادية)
هذا القسم من الدرس التطبيقي حول الترميز مخصّص فقط للنشر على Node App Engine. إذا لم تكن مهتمًا بذلك، انتقِل إلى القسم التالي.
يستخدم هذا النشر ملف الإعداد app.yaml الذي يحدد وقت التشغيل الذي سيتم استخدامه مع App Engine بسطر واحد:
runtime: nodejs16
لا يتم استخدام الملف app.yaml من قِبل Cloud Functions أو Cloud Run. إذا كنت لا تخطّط لاستخدام App Engine، يمكنك حذف هذا الملف بأمان. عندما تكون مستعدًا للنشر على App Engine، شغِّل الأمر التالي:
$ 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 الذي يحتوي على رقم تعريف مشروعك، وأن يظهر لك ناتج مشابه لإصدار Express المحلي، ولكن يجب أن تعلم أنّه يعمل على السحابة الإلكترونية ومتاح في جميع أنحاء العالم:

إذا أرسلت طلبًا، ستجد أنّه يعمل بالطريقة نفسها التي تعمل بها جميع عمليات النشر الأخرى.
9- الخيار 3: النشر على Cloud Functions
هذا القسم من الدرس التطبيقي العملي مخصّص فقط للنشر على Node Cloud Functions. إذا لم تكن مهتمًا بذلك، انتقِل إلى القسم التالي.
لا تتوفّر ملفات إعداد مع Cloud Functions، لذا عندما تكون مستعدًا للنشر على Cloud Functions، نفِّذ الأمر التالي:
$ gcloud functions deploy translate \ --runtime nodejs16 \ --entry-point app \ --trigger-http \ --region REGION \ --allow-unauthenticated
قد يكون لمشروعك على Google Cloud Platform قيمة REGION تلقائية، ولكن يمكنك استخدام العلامة --region لنشر وظيفتك في منطقة معيّنة. لا تطلب منك Cloud Functions إدخال معلومات مثل منتجات Cloud الأخرى. بغض النظر عن المنطقة التي تختارها، يجب أن يبدو الناتج 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، وهو يختلف استنادًا إلى المنطقة التي اخترتها بالإضافة إلى رقم تعريف مشروعك على السحابة الإلكترونية.

10. الخيار 4: النشر على Cloud Run
هذا القسم من الدرس العملي مخصّص فقط للنشر على Cloud Run. إذا لم تكن مهتمًا بذلك، انتقِل إلى القسم التالي.
لا تتضمّن Cloud Run ملفات إعداد، لذا عندما تكون مستعدًا للنشر على Cloud Run، اتّبِع التعليمات أدناه.
أنت الآن جاهز لنشر خدمة الترجمة على Cloud Run من خلال تنفيذ الأمر التالي:
$ 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
تنشئ Cloud Buildpacks تطبيقاتك على Cloud Run بالطريقة نفسها التي تنشئ بها التطبيقات على جهازك. بالنسبة إلى مستخدمي Node.js، يتم تشغيل npm install وnpm start. بالنسبة إلى Python، يتم تشغيل pip install -r requirements.txt وبدء تشغيل التطبيق من التعليمات الواردة في Procfile. (ينطبق الأمر نفسه على جميع اللغات الأخرى التي تتوافق مع Cloud Buildpacks). سيكون تطبيقك جاهزًا للاستخدام بعد اكتمال عملية التصميم.
بعد ذلك، يصبح تطبيقك متاحًا على مستوى العالم (ولكن يتم نشره على مستوى مناطق معيّنة)، ويمكن الوصول إليه من خلال عنوان URL الذي يحتوي على رقم تعريف مشروعك كما هو موضّح في ناتج النشر (ضمن "Service URL:"

ترجمة نص لتجربة هذه الميزة

11. الخاتمة
تهانينا! تعرّفت على كيفية تفعيل Cloud Translation API واستخدامها، والحصول على بيانات الاعتماد اللازمة، ونشر تطبيق ويب بسيط على Express محليًا، أو على App Engine أو Cloud Functions أو Cloud Run. يُرجى الاطّلاع على مجلد المستودع لمعرفة المزيد أو للوصول إلى إصدارات أخرى من هذا التطبيق بالإضافة إلى دروس برمجية أخرى.
تَنظيم
تتيح لك ترجمة Cloud API ترجمة عدد ثابت من الأحرف شهريًا بدون أي تكلفة. يتضمّن App Engine أيضًا حصّة مجانية، وينطبق الأمر نفسه على Cloud Functions وCloud Run. سيتم تحصيل رسوم منك في حال تجاوز أيّ منهما. إذا كنت تخطّط لمتابعة درس تطبيقي حول الترميز التالي، ليس عليك إيقاف تطبيقك.
ومع ذلك، إذا لم تكن مستعدًا للانتقال إلى البرنامج التعليمي التالي بعد أو كنت قلقًا بشأن عثور الإنترنت على التطبيق الذي نشرته للتو، يمكنك إيقاف تطبيق App Engine أو حذف Cloud Function أو إيقاف خدمة Cloud Run لتجنُّب تحمّل رسوم. عندما تكون مستعدًا للانتقال إلى درس تطبيقي حول الترميز التالي، يمكنك إعادة تفعيلها. من ناحية أخرى، إذا كنت لن تواصل استخدام هذا التطبيق أو غيره من دروس البرمجة وتريد حذف كل شيء تمامًا، يمكنك إيقاف مشروعك.
بالإضافة إلى ذلك، يؤدي النشر على منصة حوسبة بدون خادم في Google Cloud إلى تكبُّد تكاليف بسيطة للإنشاء والتخزين. تتضمّن Cloud Build حصة مجانية خاصة بها، وكذلك Cloud Storage. لتعزيز الشفافية، تنشئ Cloud Build صورة تطبيقك، والتي يتم تخزينها بعد ذلك في Cloud Container Registry أو Artifact Registry، وهو المنتج الذي حلّ محلّه. يؤدي تخزين هذه الصورة إلى استهلاك جزء من هذا الحصة، وكذلك خروج البيانات من الشبكة عند نقل هذه الصورة إلى الخدمة. ومع ذلك، قد تكون مقيمًا في منطقة لا تتوفّر فيها هذه الطبقة المجانية، لذا عليك الانتباه إلى استخدامك لمساحة التخزين لتقليل التكاليف المحتملة.
12. مراجع إضافية
في الأقسام التالية، يمكنك العثور على مواد قراءة إضافية بالإضافة إلى تمارين مقترَحة لتعزيز المعرفة التي اكتسبتها من إكمال هذا البرنامج التعليمي.
دراسة إضافية
بعد أن اكتسبت بعض الخبرة في استخدام Translation API، لننفّذ بعض التمارين الإضافية لتطوير مهاراتك بشكل أكبر. لمواصلة مسار التعلّم، عدِّل تطبيقنا النموذجي لتنفيذ ما يلي:
- أكمِل جميع الإصدارات الأخرى من هذا الدرس التطبيقي حول الترميز لتشغيله محليًا أو تفعيله على منصات الحوسبة بدون خادم من Google Cloud (راجِع ملف README في المستودع).
- أكمِل هذا البرنامج التعليمي باستخدام لغة برمجة أخرى.
- غيِّر هذا التطبيق ليتوافق مع لغات مصدر أو لغات مستهدَفة مختلفة.
- يجب ترقية هذا التطبيق ليتمكّن من ترجمة النص إلى أكثر من لغة واحدة، وتغيير ملف النموذج ليتضمّن قائمة منسدلة باللغات المستهدَفة المتاحة.
مزيد من المعلومات
Google App Engine
Google Cloud Functions
- الصفحة الرئيسية في Cloud Functions
- مستندات Cloud Functions
- حسابات الخدمة التلقائية في Cloud Functions
Google Cloud Run
Google Cloud Buildpacks وContainer Registry وArtifact Registry
- الإعلان عن Cloud Buildpacks
- مستودع حِزم الإنشاء السحابية
- الصفحة الرئيسية في Cloud Artifact Registry
- مستندات Cloud Artifact Registry
- الصفحة الرئيسية في Cloud Container Registry
- مستندات Cloud Container Registry
ترجمة Cloud من Google وحزمة تعلّم الآلة من Google
- الصفحة الرئيسية لخدمة Cloud Translation
- مستندات ترجمة Cloud
- مكتبات برامج Cloud Translation API (جميع لغات التطوير)
- اللغات المتوافقة مع ترجمة Cloud API (منطوقة/مكتوبة)
- صفحة أسعار Translation API
- جميع واجهات برمجة التطبيقات "الأساسية" في Cloud AI/ML
- حزمة تعلّم الآلة من Google (مجموعة فرعية من واجهات برمجة التطبيقات المستندة إلى الذكاء الاصطناعي وتعلُّم الآلة على السحابة الإلكترونية للأجهزة الجوّالة)
- Google ML Kit Translation API
منتجات/صفحات Google Cloud الأخرى
روابط Python
- البدء السريع في App Engine باستخدام Python 3
- وقت تشغيل Python 2 App Engine (Standard)
- وقت تشغيل Python 3 App Engine (Standard)
- الاختلافات بين بيئات التشغيل في الإصدارَين 2 و3 من Python في App Engine (الإصدار العادي)
- دليل نقل البيانات من Python 2 إلى Python 3 في App Engine (الإصدار العادي)
- البدء السريع في استخدام Python Cloud Functions
- البدء السريع في استخدام Python على Cloud Run
- دعم Python في Google Cloud
- Flask
روابط Node.js
- البدء السريع في استخدام Node.js على App Engine
- وقت تشغيل Node.js App Engine (Standard)
- بدء استخدام Cloud Functions مع Node.js
- بدء استخدام Node.js على Cloud Run بسرعة
- دعم Node.js في Google Cloud
- Express
الترخيص
يخضع هذا الدليل التوجيهي/التعليمي لترخيص المشاع الإبداعي مع نسب العمل إلى مؤلفه 2.0 Generic License، بينما يخضع الرمز المصدر في المستودع لترخيص Apache 2.