نشر تطبيق أساسي "ترجمة Google" تطبيق على Python 2 App Engine

1. نظرة عامة

تهدف هذه السلسلة من الدروس التطبيقية حول الترميز (البرامج التعليمية العملية الذاتية) إلى مساعدة المطوّرين على فهم الخيارات المختلفة المتاحة لهم عند نشر تطبيقاتهم. في هذا الدرس التطبيقي حول الترميز، ستتعلّم كيفية استخدام Google Cloud Translation API مع لغة Python وتنفيذ طريقة التشغيل محليًا أو النشر على منصة حوسبة بدون خادم على السحابة الإلكترونية (App Engine أو Cloud Functions أو Cloud Run). يمكن نشر نموذج التطبيق المتوفّر في مستودع هذا البرنامج التعليمي (على الأقل) ثماني طرق مختلفة مع إجراء تغييرات بسيطة على الإعدادات:

  1. خادم Flask المحلي (Python 2)
  2. خادم Flask المحلي (Python 3)
  3. App Engine (Python 2)
  4. App Engine (Python 3)
  5. دوال السحابة (Python 3)
  6. تشغيل السحابة الإلكترونية (Python 2 عبر Docker)
  7. تشغيل السحابة الإلكترونية (Python 3 عبر Docker)
  8. تشغيل السحابة الإلكترونية (Python 3 عبر Cloud Buildpacks)

يركّز هذا الدرس التطبيقي حول الترميز على نشر هذا التطبيق على الأنظمة الأساسية المكتوبة بالخط العريض أعلاه.

ستتعرَّف على كيفية

المتطلبات

  • أن يكون لديك مشروع على Google Cloud مع حساب فوترة نشط على Cloud
  • Flask مثبَّت للعمل محليًا، أو منصة حوسبة بدون خادم على السحابة الإلكترونية مفعّلة لعمليات النشر المستندة إلى السحابة الإلكترونية
  • المهارات الأساسية في لغة بايثون
  • معرفة عملية بأوامر نظام التشغيل الأساسية

استطلاع

كيف ستستخدم هذا البرنامج التعليمي؟

اقرأها وأكمِل التمارين القراءة فقط

كيف تقيّم تجربتك مع Python؟

حديث متوسط بارع

ما هو تقييمك لتجربتك في استخدام خدمات Google Cloud؟

حديث متوسط بارع

2. الإعداد والمتطلبات

إعداد بيئة ذاتية

  1. سجِّل الدخول إلى Google Cloud Console وأنشئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي عبارة عن سلسلة أحرف لا تستخدمها Google APIs، ويمكنك تحديثها في أي وقت.
  • يجب أن يكون رقم تعريف المشروع فريدًا في جميع مشاريع Google Cloud وغير قابل للتغيير (لا يمكن تغييره بعد ضبطه). تنشئ Cloud Console سلسلة فريدة تلقائيًا. فعادةً لا تهتم بما هو. في معظم الدروس التطبيقية حول الترميز، يجب الرجوع إلى رقم تعريف المشروع (والذي يتم تحديده عادةً على أنّه PROJECT_ID). لذلك، إذا لم يعجبك، يمكنك إنشاء رقم تعريف عشوائي آخر أو يمكنك تجربة رقم تعريف المشروع الخاص بك ومعرفة ما إذا كان متاحًا. بعد ذلك تكون الحالة "مجمّدة". بعد إنشاء المشروع.
  • هناك قيمة ثالثة، وهي رقم المشروع الذي تستخدمه بعض واجهات برمجة التطبيقات. اطّلِع على مزيد من المعلومات حول هذه القيم الثلاث في المستندات.
  1. بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام الموارد/واجهات برمجة التطبيقات في Cloud. إنّ تنفيذ هذا الدرس التطبيقي حول الترميز لن يكون مكلفًا أو مكلفًا على الإطلاق. لإيقاف تشغيل الموارد حتى لا تتحمل الفوترة بعد أكثر من هذا البرنامج التعليمي، اتبع أي عملية "تنظيف". التعليمات الموجودة في نهاية الدرس التطبيقي حول الترميز. يكون مستخدمو Google Cloud الجدد مؤهَّلون للانضمام إلى برنامج فترة تجريبية مجانية بقيمة 300 دولار أمريكي.

3- تفعيل واجهة برمجة تطبيقات الترجمة

بالنسبة إلى نموذج التطبيق الذي نقدّمه، يجب تفعيل Cloud Translation API وخدمة App Engine بدلاً من ذلك باستخدام تعليمات مشابهة متوفّرة أدناه.

تفعيل Cloud APIs

مقدمة

بغض النظر عن واجهة Google API التي تريد استخدامها في تطبيقك، يجب تفعيلها. يوضّح المثال التالي طريقتَين لتفعيل Cloud Vision API. بعد التعرّف على كيفية تفعيل إحدى واجهات برمجة تطبيقات Cloud، ستتمكّن من تفعيل واجهات برمجة تطبيقات أخرى لأنّ العملية مشابهة.

الخيار 1: من Cloud Shell أو واجهة سطر الأوامر

على الرغم من أن تفعيل واجهات برمجة التطبيقات من Cloud Console هو الأكثر شيوعًا، إلا أنّ بعض المطوّرين يفضّلون تنفيذ كل شيء من سطر الأوامر. لإجراء ذلك، عليك البحث عن "اسم الخدمة" في واجهة برمجة التطبيقات. يبدو أنّ عنوان URL هو: SERVICE_NAME.googleapis.com. يمكنك العثور على هذه المنتجات في الرسم البياني للمنتجات المتوافقة، أو يمكنك طلبها آليًا باستخدام Google Discovery API.

من خلال هذه المعلومات، وباستخدام Cloud Shell (أو بيئة التطوير المحلية التي تم تثبيت أداة سطر الأوامر gcloud فيها)، يمكنك تفعيل واجهة برمجة التطبيقات على النحو التالي:

gcloud services enable SERVICE_NAME.googleapis.com

على سبيل المثال، يعمل هذا الأمر على تفعيل Cloud Vision API:

gcloud services enable vision.googleapis.com

يعمل هذا الأمر على تفعيل App Engine:

gcloud services enable appengine.googleapis.com

يمكنك أيضًا تفعيل واجهات برمجة تطبيقات متعددة بطلب واحد. على سبيل المثال، يعمل سطر الأوامر هذا على تفعيل Cloud Run وCloud Artifact Registry وCloud Translation API:

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

الخيار 2: من Cloud Console

يمكنك أيضًا تفعيل Vision API في "مدير واجهات برمجة التطبيقات". من Cloud Console، انتقِل إلى مدير واجهة برمجة التطبيقات واختَر المكتبة.

fb0f1d315f122d4a.png

إذا أردت تفعيل Cloud Vision API، ابدأ بإدخال "رؤية". في شريط البحث، وسيظهر أي شيء يطابق ما أدخلته حتى الآن:

2275786a24f8f204.png

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

2556f923b628e31.png

التكلفة

يمكن استخدام العديد من واجهات Google APIs بدون رسوم، إلا أنّ استخدام منتجات Google Cloud و وليست واجهات برمجة التطبيقات مجانية. عند تفعيل Cloud APIs، قد يُطلَب منك حساب فوترة نشط. ومع ذلك، من المهم ملاحظة أنّ بعض منتجات Google Cloud تعرض الحالة "مجانية دائمًا" المستوى (يوميًا/شهريًا)، التي عليك تجاوزها لتحمل رسوم الفوترة. وإلا فلن يتم تحصيل الرسوم من بطاقتك الائتمانية (أو وسيلة الفوترة المحددة).

يجب أن يرجع المستخدمون إلى معلومات التسعير لأي واجهة برمجة تطبيقات قبل تفعيلها، مع ملاحظة ما إذا كانت تشتمل على فئة مجانية، وفي حال توفّرها، ما هي. إذا كنت تُفعِّل Cloud Vision API، عليك مراجعة صفحة معلومات الأسعار. تمتلك Cloud Vision حصة مجانية، وطالما أنك لا تتجاوز حدودها بشكل إجمالي (خلال كل شهر)، يجب ألا يتم تحصيل أي رسوم منك.

تختلف الأسعار والمستويات المجانية بين Google APIs. أمثلة:

تتم فوترة منتجات Google المختلفة بشكل مختلف، لذا احرص على الرجوع إلى وثائق واجهة برمجة التطبيقات للحصول على هذه المعلومات.

ملخّص

والآن بعد أن تعرفت على كيفية تفعيل Google APIs بشكل عام، يُرجى الانتقال إلى مدير واجهة برمجة التطبيقات وتفعيل كل من خدمة Cloud Translation API وخدمة App Engine (إذا لم يسبق لك إجراء ذلك)، والخطوة الأولى لأنّ التطبيق سيستخدمها، والإجراء الثاني لأنك تنشر تطبيق App Engine. إذا كنت تفضّل تنفيذ ذلك من سطر الأوامر، عليك إصدار الأمر التالي بدلاً من ذلك:

gcloud services enable appengine.googleapis.com translate.googleapis.com

على الرغم من أن حصتها الشهرية غير مدرجة في الحساب "المجاني دائمًا" بشكل عام صفحة ملخّص المستوى، تشير صفحة أسعار Translation API إلى أنّ جميع المستخدمين يتلقّون عددًا ثابتًا من الأحرف المترجمة شهريًا. ويجب ألا يتم تحصيل أي رسوم من واجهة برمجة التطبيقات إذا بقيت أقل من هذا الحدّ. إذا كانت هناك أي رسوم أخرى ذات صلة بخدمة Google Cloud، ستتم مناقشتها في النهاية في قسم "إخلاء مساحة تخزين". .

4. الحصول على نموذج رمز التطبيق

استنسِخ الرمز في المستودع محليًا أو في Cloud Shell (باستخدام الأمر git clone)، أو نزِّل ملف ZIP من زر الرمز الأخضر كما هو موضّح في لقطة الشاشة التالية:

5cd6110c4414cf65.png

والآن بعد أن أصبح لديك كل شيء، أنشئ نسخة كاملة من المجلد للقيام بهذا البرنامج التعليمي المحدد، لأنه من المحتمل أن يتضمن حذف الملفات أو تغييرها. إذا كنت تريد إجراء عملية نشر مختلفة، يمكنك البدء من جديد عن طريق نسخ النسخة الأصلية حتى لا تضطر إلى استنساخها أو تنزيلها مرة أخرى.

5- جولة حول نموذج التطبيق

نموذج التطبيق هو مشتق بسيط من ترجمة Google يطلب من المستخدمين إدخال نص باللغة الإنجليزية وتلقّي الترجمة المماثلة لهذا النص باللغة الإسبانية. يُرجى فتح ملف main.py لنتمكّن من التعرّف على طريقة عمله. مع إغفال السطور التي تم التعليق عليها بشأن الترخيص، ستظهر لك هذه السطور في الأعلى والأسفل:

from flask import Flask, render_template, request
import google.auth
from google.cloud import translate

app = Flask(__name__)
_, PROJECT_ID = google.auth.default()
TRANSLATE = translate.TranslationServiceClient()
PARENT = 'projects/{}'.format(PROJECT_ID)
SOURCE, TARGET = ('en', 'English'), ('es', 'Spanish')

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

if __name__ == '__main__':
    import os
    app.run(debug=True, threaded=True, host='0.0.0.0',
            port=int(os.environ.get('PORT', 8080)))
  1. تتضمّن عمليات الاستيراد وظائف Flask ووحدة google.auth ومكتبة برامج Cloud Translation API.
  2. تمثّل المتغيّرات العمومية تطبيق Flask ورقم تعريف مشروع Cloud وعميل Translation API و"مسار الموقع الجغرافي" الرئيسي. لطلبات البيانات من واجهة برمجة التطبيقات Translation API واللغات المصدر والهدف. في هذه الحالة، ستكون اللغة الإنجليزية (en) والإسبانية (es)، ولكن يمكنك تغيير هذه القيم إلى رموز لغات أخرى متوافقة مع Cloud Translation API.
  3. تُستخدَم كتلة if الكبيرة في أسفل الدليل التوجيهي لتشغيل هذا التطبيق على الجهاز، وهي تستخدم خادم تطوير Flask لعرض تطبيقنا. يتوفّر هذا القسم أيضًا في البرامج التعليمية للنشر في السحابة الإلكترونية في حال عدم تضمين خادم الويب في الحاوية. يُطلب منك تفعيل تجميع الخادم في الحاوية، ولكن في حال تجاهلك هذا، يعود رمز التطبيق إلى استخدام خادم تطوير Flask. (ولا يعني ذلك حدوث مشكلة في App Engine أو Cloud Functions، لأنّ هذه الأنظمة تستند إلى مصادر، ما يعني أنّ Google Cloud توفّر خادم ويب تلقائيًا وتشغّله).

أخيرًا، في منتصف main.py، توجد الدالة translate():

@app.route('/', methods=['GET', 'POST'])
def translate(gcf_request=None):
    """
    main handler - show form and possibly previous translation
    """

    # Flask Request object passed in for Cloud Functions
    # (use gcf_request for GCF but flask.request otherwise)
    local_request = gcf_request if gcf_request else request

    # reset all variables (GET)
    text = translated = None

    # if there is data to process (POST)
    if local_request.method == 'POST':
        text = local_request.form['text']
        data = {
            'contents': [text],
            'parent': PARENT,
            'target_language_code': TARGET[0],
        }
        # handle older call for backwards-compatibility
        try:
            rsp = TRANSLATE.translate_text(request=data)
        except TypeError:
            rsp = TRANSLATE.translate_text(**data)
        translated = rsp.translations[0].translated_text

    # create context & render template
    context = {
        'orig':  {'text': text, 'lc': SOURCE},
        'trans': {'text': translated, 'lc': TARGET},
    }
    return render_template('index.html', **context)

تؤدي الوظيفة الأساسية إلى أخذ البيانات التي أدخلها المستخدم واستدعاء واجهة برمجة التطبيقات Translation API لتنفيذ المهام الصعبة. لنحلل هذا الأمر:

  1. تحقَّق لمعرفة ما إذا كانت الطلبات واردة من دوال Cloud باستخدام المتغيّر local_request. ترسل Cloud Functions في عنصر "طلب Flask" الخاص بها، في حين سيحصل جميع المستخدمين الآخرين (الذين يتم تشغيلهم محليًا أو النشر على App Engine أو Cloud Run) على كائن الطلب مباشرةً من Flask.
  2. أعِد ضبط المتغيّرات الأساسية للنموذج. هذا بشكل أساسي لطلبات GET حيث إن طلبات POST ستحتوي على بيانات تحل محلها.
  3. أما إذا كانت حالة طلب POST، فاحصل على النص لترجمته وأنشئ بنية JSON تمثّل متطلبات البيانات الوصفية لواجهة برمجة التطبيقات. بعد ذلك، يمكنك طلب واجهة برمجة التطبيقات، والعودة إلى إصدار سابق من واجهة برمجة التطبيقات إذا كان المستخدم يستخدِم مكتبة قديمة.
  4. بغض النظر عن ذلك، يجب تنسيق النتائج الفعلية (POST) أو عدم وجود بيانات (GET) في سياق النموذج وعرضها.

يوجد الجزء المرئي من التطبيق في ملف النموذج index.html. يعرض هذا الزر أي نتائج مترجَمة سابقًا (تكون فارغة في الحالات الأخرى) متبوعة بالنموذج الذي يطلب ترجمة المحتوى:

<!doctype html>
<html><head><title>My Google Translate 1990s</title><body>
<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>

6- تثبيت الحزم/التبعيات المحلية (في lib)

كما ذكرنا سابقًا، يستخدم نموذج التطبيق إطار عمل الويب المصغَّر لـ Flask ومكتبة برامج واجهة برمجة التطبيقات Google Cloud Translation API للغة Python. تثبيت pip بالإضافة إلى هذين الزوجَين من الحِزم وتحديثهما باستخدام الأمر pip (أو pip3):

pip install -t lib -r requirements.txt

بعد تشغيل التعليق أعلاه، سترى مخرجات التثبيت التي قد تبدو كما يلي:

$ pip install -t lib -r requirements.txt
DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. pip 21.0 will drop support for Python 2.7 in January 2021. More details about Python 2 support in pip can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support pip 21.0 will remove support for this functionality.
Collecting flask>=1.1.2
  Using cached Flask-1.1.4-py2.py3-none-any.whl (94 kB)
Collecting google-cloud-translate>=2.0.1
  Using cached google_cloud_translate-2.0.2-py2.py3-none-any.whl (91 kB)
Collecting click<8.0,>=5.1
  Using cached click-7.1.2-py2.py3-none-any.whl (82 kB)
Collecting Jinja2<3.0,>=2.10.1
  Using cached Jinja2-2.11.3-py2.py3-none-any.whl (125 kB)
Collecting Werkzeug<2.0,>=0.15
  Using cached Werkzeug-1.0.1-py2.py3-none-any.whl (298 kB)
Collecting itsdangerous<2.0,>=0.24
  Using cached itsdangerous-1.1.0-py2.py3-none-any.whl (16 kB)
Collecting google-api-core[grpc]<2.0.0dev,>=1.15.0
  Downloading google_api_core-1.29.0-py2.py3-none-any.whl (93 kB)
     |████████████████████████████████| 93 kB 2.1 MB/s
Collecting google-cloud-core<2.0dev,>=1.1.0
  Using cached google_cloud_core-1.6.0-py2.py3-none-any.whl (28 kB)
Collecting MarkupSafe>=0.23
  Using cached MarkupSafe-1.1.1-cp27-cp27m-macosx_10_6_intel.whl (17 kB)
Collecting protobuf>=3.12.0
  Downloading protobuf-3.17.2-cp27-cp27m-macosx_10_9_x86_64.whl (958 kB)
     |████████████████████████████████| 958 kB 21.6 MB/s
Collecting futures>=3.2.0; python_version < "3.2"
  Using cached futures-3.3.0-py2-none-any.whl (16 kB)
Collecting six>=1.13.0
  Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)
Collecting packaging>=14.3
  Using cached packaging-20.9-py2.py3-none-any.whl (40 kB)
Collecting googleapis-common-protos<2.0dev,>=1.6.0
  Using cached googleapis_common_protos-1.52.0-py2.py3-none-any.whl (100 kB)
Collecting requests<3.0.0dev,>=2.18.0
  Using cached requests-2.25.1-py2.py3-none-any.whl (61 kB)
Collecting google-auth<2.0dev,>=1.25.0
  Using cached google_auth-1.30.1-py2.py3-none-any.whl (146 kB)
Collecting pytz
  Using cached pytz-2021.1-py2.py3-none-any.whl (510 kB)
Collecting setuptools>=40.3.0
  Using cached setuptools-44.1.1-py2.py3-none-any.whl (583 kB)
Collecting grpcio<2.0dev,>=1.29.0; extra == "grpc"
  Using cached grpcio-1.38.0-cp27-cp27m-macosx_10_10_x86_64.whl (3.8 MB)
Collecting pyparsing>=2.0.2
  Using cached pyparsing-2.4.7-py2.py3-none-any.whl (67 kB)
Collecting chardet<5,>=3.0.2
  Using cached chardet-4.0.0-py2.py3-none-any.whl (178 kB)
Collecting urllib3<1.27,>=1.21.1
  Using cached urllib3-1.26.5-py2.py3-none-any.whl (138 kB)
Collecting idna<3,>=2.5
  Using cached idna-2.10-py2.py3-none-any.whl (58 kB)
Collecting certifi>=2017.4.17
  Downloading certifi-2021.5.30-py2.py3-none-any.whl (145 kB)
     |████████████████████████████████| 145 kB 61.1 MB/s
Collecting pyasn1-modules>=0.2.1
  Using cached pyasn1_modules-0.2.8-py2.py3-none-any.whl (155 kB)
Collecting rsa<4.6; python_version < "3.6"
  Using cached rsa-4.5-py2.py3-none-any.whl (36 kB)
Collecting cachetools<5.0,>=2.0.0
  Using cached cachetools-3.1.1-py2.py3-none-any.whl (11 kB)
Collecting enum34>=1.0.4; python_version < "3.4"
  Using cached enum34-1.1.10-py2-none-any.whl (11 kB)
Collecting pyasn1<0.5.0,>=0.4.6
  Using cached pyasn1-0.4.8-py2.py3-none-any.whl (77 kB)
Installing collected packages: click, MarkupSafe, Jinja2, Werkzeug, itsdangerous, flask, six, protobuf, futures, pyparsing, packaging, googleapis-common-protos, chardet, urllib3, idna, certifi, requests, pyasn1, pyasn1-modules, rsa, cachetools, setuptools, google-auth, pytz, enum34, grpcio, google-api-core, google-cloud-core, google-cloud-translate
ERROR: pip's legacy dependency resolver does not consider dependency conflicts when selecting packages. This behaviour is the source of the following dependency conflicts.
matplotlib 1.3.1 requires nose, which is not installed.
matplotlib 1.3.1 requires tornado, which is not installed.
Successfully installed Jinja2-2.11.3 MarkupSafe-1.1.1 Werkzeug-1.0.1 cachetools-3.1.1 certifi-2021.5.30 chardet-4.0.0 click-7.1.2 enum34-1.1.10 flask-1.1.4 futures-3.3.0 google-api-core-1.29.0 google-auth-1.30.1 google-cloud-core-1.6.0 google-cloud-translate-2.0.2 googleapis-common-protos-1.52.0 grpcio-1.38.0 idna-2.10 itsdangerous-1.1.0 packaging-20.9 protobuf-3.17.2 pyasn1-0.4.8 pyasn1-modules-0.2.8 pyparsing-2.4.7 pytz-2021.1 requests-2.25.1 rsa-4.5 setuptools-44.1.1 six-1.16.0 urllib3-1.26.5

7. نشر الخدمة

لنشر خدمة الترجمة في Python 2 App Engine، شغِّل الأمر التالي:

gcloud app deploy

يجب أن تظهر النتيجة على النحو التالي وتقدم بعض المطالبات للخطوات التالية:

$ gcloud app deploy
Services to deploy:

descriptor:      [/private/tmp/nebulous-serverless-python/app.yaml]
source:          [/private/tmp/nebulous-serverless-python]
target project:  [PROJECT_ID]
target service:  [default]
target version:  [20210422t161025]
target url:      [https://PROJECT_ID.appspot.com]


Do you want to continue (Y/n)?

Beginning deployment of service [default]...
╔════════════════════════════════════════════════════════════╗
╠═ Uploading 1290 files to Google Cloud Storage                       ═╣
╚════════════════════════════════════════════════════════════╝
File upload done.
Updating service [default]...done.
Setting traffic split for service [default]...done.
Deployed service [default] to [https://PROJECT_ID.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

والآن بعد أن أصبح تطبيقك متاحًا على مستوى العالم في جميع أنحاء العالم، من المفترض أن تتمكّن من الوصول إليه على عنوان URL (الذي يحتوي على رقم تعريف المشروع) الوارد في ناتج النشر:

da28f951c33a2c3d.png

يجب ترجمة أي نص لإتمام عملية الإعداد.

d911984d15dd5ef9.png

8. الخاتمة

تهانينا! لقد تعلمت كيفية تفعيل Cloud Translation API والحصول على بيانات الاعتماد اللازمة ونشر تطبيق ويب بسيط على Python 2 App Engine. يمكنك معرفة المزيد من المعلومات عن عملية النشر هذه من هذا الجدول في المستودع.

تَنظيم

تتيح لك Cloud Translation API تنفيذ عدد ثابت من الأحرف المُترجَمة شهريًا مجانًا. يشمل App Engine أيضًا حصة مجانية، وينطبق الأمر نفسه على الوظائف السحابية وتشغيل السحابة الإلكترونية. ستتحمل رسومًا في حالة تجاوز أي منهما. إذا كنت تخطّط للمتابعة إلى الدرس التطبيقي التالي حول الترميز، لن تحتاج إلى إيقاف التطبيق.

ومع ذلك، إذا لم تكن مستعدًا للانتقال إلى البرنامج التعليمي التالي أو إذا كنت قلقًا بشأن اكتشاف الإنترنت للتطبيق الذي نشرته للتو، يمكنك إيقاف تطبيق App Engine أو حذف دالتك السحابية أو إيقاف خدمة تشغيل السحابة الإلكترونية لتجنب تحمُّل الرسوم. عندما تكون مستعدًا للانتقال إلى الدرس التطبيقي التالي حول الترميز، يمكنك إعادة تفعيله. من ناحية أخرى، إذا كنت لا تريد مواصلة استخدام هذا التطبيق أو الدروس التطبيقية الأخرى حول الترميز وأردت حذف جميع البيانات بالكامل، يمكنك إيقاف مشروعك.

بالإضافة إلى ذلك، إنّ النشر على منصة حوسبة بدون خادم في Google Cloud يؤدي إلى تحمُّل تكاليف بسيطة لإنشاء المحتوى وتخزينه. تمتلك خدمة Cloud Build حصتها المجانية الخاصة، كما هي الحال في Cloud Storage. لمزيد من الشفافية، تنشئ Cloud Build صورة تطبيقك، ويتم تخزينها في Cloud Container Registry أو Artifact Registry، الذي يليه. كما يستهلك تخزين تلك الصورة بعضًا من هذه الحصة كما هو الحال مع مخرجات الشبكة عند نقل تلك الصورة إلى الخدمة. ومع ذلك، قد تكون مقيمًا في منطقة لا يتوفر بها هذا المستوى المجاني، لذا عليك الانتباه إلى استخدام مساحة التخزين لتقليل التكاليف المحتملة.

9. مراجع إضافية

في الأقسام التالية، يمكنك العثور على مواد قراءة إضافية بالإضافة إلى تمارين موصى بها لزيادة معرفتك المكتسبة من إكمال هذا البرنامج التعليمي.

دراسة إضافية

الآن بعد أن أصبحت لديك بعض الخبرة في استخدام واجهة برمجة التطبيقات Translation API، حان وقت إجراء بعض التمارين الإضافية لتطوير مهاراتك بشكل أكبر. لمتابعة مسارك التعليمي، عدّل نموذج التطبيق للقيام بما يلي:

  1. أكمِل جميع الإصدارات الأخرى من هذا الدرس التطبيقي حول الترميز للتشغيل محليًا أو للنشر على أنظمة الحوسبة الأساسية بدون خوادم في Google Cloud (يمكنك الاطّلاع على repo README).
  2. أكمل هذا البرنامج التعليمي باستخدام لغة برمجة أخرى.
  3. قم بتغيير هذا التطبيق بحيث يدعم لغات مصدر أو هدف مختلفة.
  4. ترقية هذا التطبيق لترجمة النص إلى أكثر من لغة واحدة تغيير ملف القالب لتظهر قائمة منسدلة للغات الهدف المدعومة.

مزيد من المعلومات

Google App Engine

وظائف Google Cloud

تشغيل السحابة الإلكترونية من Google

Google Cloud Buildpacks وContainer Registry و Artifact Registry

ترجمة Google Cloud وGoogle ML Kit

منتجات/صفحات Google Cloud الأخرى

بايثون وقارورة

الترخيص

هذا البرنامج التعليمي مرخّص بموجب ترخيص Creative Commons Attribution 2.0 عام، في حين أن رمز المصدر في المستودع مرخص بموجب Apache 2.