نشر تطبيق أساسي "ترجمة 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. ‫Cloud Run (Python 2 من خلال Docker)
  7. ‫Cloud Run (Python 3 من خلال Docker)
  8. ‫Cloud Run (Python 3 من خلال Cloud Buildpacks)

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

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

المتطلبات

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

استطلاع الرأي

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

قراءة النص وإكمال التمارين قراءة النص فقط

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

مبتدئ متوسط متقن

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

مبتدئ متوسط متقدّم

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

إعداد البيئة بالسرعة التي تناسبك

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

96a9c957bc475304.pngb9a10ebdf5b5a448.pnga1e3c01a38fa61c2.png

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

3- تفعيل Translation API

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

تفعيل Cloud APIs

مقدّمة

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

الخيار 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، ابدأ بإدخال "vision" في شريط البحث، وسيظهر أي شيء يتطابق مع ما أدخلته حتى الآن:

2275786a24f8f204.png

حدِّد واجهة برمجة التطبيقات التي تريد تفعيلها وانقر على تفعيل:

2556f923b628e31.png

التكلفة

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

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

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

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

ملخّص

بعد أن تعرّفت على كيفية تفعيل واجهات Google API بشكل عام، يُرجى الانتقال إلى مدير واجهة برمجة التطبيقات وتفعيل كلّ من 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 من الزر الأخضر Code كما هو موضّح في لقطة الشاشة التالية:

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 ورقم تعريف مشروع على السحابة الإلكترونية وعميل واجهة برمجة التطبيقات ومسار الموقع الجغرافي الرئيسي لطلبات بيانات من واجهة برمجة التطبيقات واللغتَين المصدر والهدف. في هذه الحالة، تكون اللغة الإنجليزية (en) والإسبانية (es)، ولكن يمكنك تغيير هذه القيم إلى رموز لغات أخرى متوافقة مع Cloud Translation API.
  3. يتم استخدام حزمة if الكبيرة في الأسفل في البرنامج التعليمي حول تشغيل هذا التطبيق محليًا، وهي تستخدم خادم تطوير Flask لعرض تطبيقنا. يتوفّر هذا القسم أيضًا في البرامج التعليمية حول النشر على Cloud Run في حال عدم تضمين خادم الويب في الحاوية. يُطلب منك تفعيل تجميع الخادم في الحاوية، ولكن في حال تجاهلت ذلك، سيعود رمز التطبيق إلى استخدام خادم تطوير 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 Functions باستخدام المتغيّر 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. تفعيل الخدمة

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

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 والحصول على بيانات الاعتماد اللازمة ونشر تطبيق ويب بسيط على App Engine بلغة Python 2. يمكنك الاطّلاع على مزيد من المعلومات حول عملية النشر هذه من خلال هذا الجدول في المستودع.

تَنظيم

تتيح لك Cloud Translation 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، وهو المنتج الذي حلّ محلّه. يؤدي تخزين هذه الصورة إلى استهلاك جزء من هذا الحصة، وكذلك خروج البيانات من الشبكة عند نقل هذه الصورة إلى الخدمة. ومع ذلك، قد تكون مقيمًا في منطقة لا تتوفّر فيها هذه الفئة المجانية، لذا عليك الانتباه إلى سعة التخزين المطلوب استخدامها لتقليل التكاليف المحتملة.

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

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

دراسة إضافية

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

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

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

Google App Engine

‫Google Cloud Functions

‫Google Cloud Run

‫Google Cloud Buildpacks وContainer Registry وArtifact Registry

‫Google Cloud Translation وGoogle ML Kit

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

‫Python وFlask

الترخيص

يخضع هذا الدليل التوجيهي/التعليمي لترخيص المشاع الإبداعي مع نسب العمل إلى مؤلفه 2.0 Generic License، بينما يخضع الرمز المصدر في المستودع لترخيص Apache 2.