Wdróż podstawową wersję Tłumacza Google aplikacja w Pythonie 2 App Engine

1. Omówienie

Ta seria laboratoriów programistycznych (samodzielnych, praktycznych samouczków) ma pomóc deweloperom zrozumieć różne opcje, z których mogą korzystać podczas wdrażania aplikacji. Z tego laboratorium z kodem dowiesz się, jak korzystać z interfejsu Google Cloud Translation API w Pythonie i uruchamiać go lokalnie lub wdrażać na bezserwerowej platformie obliczeniowej w chmurze (App Engine, Cloud Functions lub Cloud Run). Przykładową aplikację znajdującą się w repozytorium tego samouczka można wdrożyć (co najmniej) na 8 sposobów za pomocą zaledwie drobnych zmian konfiguracji:

  1. Lokalny serwer Flask (Python 2)
  2. Lokalny serwer Flask (Python 3)
  3. App Engine (Python 2)
  4. App Engine (Python 3)
  5. Cloud Functions (Python 3)
  6. Cloud Run (Python 2 w Dockerze)
  7. Cloud Run (Python 3 w Dockerze)
  8. Cloud Run (Python 3 za pomocą pakietów kompilacji Cloud)

Ten warsztat dotyczy wdrażania tej aplikacji na platformy oznaczone pogrubieniem powyżej.

Dowiedz się, jak

Czego potrzebujesz

  • projekt Google Cloud z aktywnym kontem rozliczeniowym Cloud.
  • Flask zainstalowany do uruchamiania lokalnie lub bezserwerowa platforma obliczeniowa w chmurze włączona do wdrożeń w chmurze.
  • podstawowe umiejętności w Pythonie,
  • znajomość podstawowych poleceń systemu operacyjnego;

Ankieta

Jak będziesz korzystać z tego samouczka?

Przeczytaj i wykonaj ćwiczenia Tylko przeczytaj

Jak oceniasz swoje doświadczenie z Pythonem?

Początkujący Średnio zaawansowany Zaawansowany

Jak oceniasz korzystanie z usług Google Cloud?

Początkujący Średnio zaawansowany Zaawansowany

2. Konfiguracja i wymagania

Konfiguracja środowiska w samodzielnym tempie

  1. Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub użyj istniejącego. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • Nazwa projektu to wyświetlana nazwa uczestników tego projektu. Jest to ciąg znaków, którego nie używają interfejsy API Google, i który możesz zaktualizować w dowolnym momencie.
  • Identyfikator projektu musi być niepowtarzalny we wszystkich projektach Google Cloud i jest niezmienny (nie można go zmienić po jego ustawieniu). Konsole Google Cloud automatycznie generuje unikalny ciąg znaków. Zwykle nie ma znaczenia, jaki to ciąg. W większości laboratoriów z kodem musisz podać identyfikator projektu (zazwyczaj jest to PROJECT_ID). Jeśli Ci się nie podoba, wygeneruj inny losowy identyfikator lub spróbuj użyć własnego i sprawdź, czy jest dostępny. Następnie po utworzeniu projektu jest „zamrażany”.
  • Istnieje jeszcze trzecia wartość, numer projektu, której używają niektóre interfejsy API. Więcej informacji o wszystkich 3 wartościach znajdziesz w dokumentacji.
  1. Następnie musisz włączyć płatności w konsoli Cloud, aby móc korzystać z zasobów i interfejsów API usługi Cloud. Przejście przez ten moduł Codelab nie powinno wiązać się z wielkimi kosztami, jeśli w ogóle z nimi będzie. Aby wyłączyć zasoby i uniknąć opłat po zakończeniu samouczka, wykonaj instrukcje „czyszczenia” podane na końcu ćwiczenia. Nowi użytkownicy Google Cloud mogą skorzystać z bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.

3. Włączanie interfejsu Translation API

W przypadku naszej przykładowej aplikacji włączysz zamiast tego interfejs Cloud Translation API i usługę App Engine, korzystając z podobnych instrukcji podanych poniżej.

Włączanie interfejsów Cloud API

Wprowadzenie

Niezależnie od tego, którego interfejsu Google API chcesz używać w aplikacji, musisz go włączyć. Ten przykład pokazuje 2 sposoby włączania interfejsu Cloud Vision API. Gdy już się nauczysz, jak włączyć jeden interfejs Cloud API, będziesz mieć możliwość włączenia innych interfejsów API, ponieważ proces jest podobny.

Opcja 1. Z Cloud Shell lub interfejsu wiersza poleceń

Chociaż częstsze jest włączanie interfejsów API w konsoli Cloud, niektórzy deweloperzy wolą wykonywać wszystkie czynności za pomocą wiersza poleceń. W tym celu musisz sprawdzić „nazwa usługi” interfejsu API. Wygląda jak adres URL: SERVICE_NAME.googleapis.com. Znajdziesz je w tabeli obsługiwanych usług lub możesz wysłać zapytanie programowe za pomocą interfejsu Google Discovery API.

Mając te informacje, możesz włączyć interfejs API za pomocą Cloud Shell (lub lokalnego środowiska programistycznego z zainstalowanym narzędziem wiersza poleceń gcloud). Aby to zrobić, wykonaj te czynności:

gcloud services enable SERVICE_NAME.googleapis.com

Na przykład to polecenie włącza interfejs Cloud Vision API:

gcloud services enable vision.googleapis.com

To polecenie włącza App Engine:

gcloud services enable appengine.googleapis.com

Możesz też włączyć wiele interfejsów API za pomocą jednego żądania. Na przykład to polecenie włącza Cloud Run, Cloud Artifact Registry i interfejs Cloud Translation API:

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

Opcja 2. Z poziomu Cloud Console

Możesz też włączyć Vision API w Menedżerze interfejsów API. W konsoli Cloud otwórz Menedżera interfejsów API i wybierz Biblioteka.

fb0f1d315f122d4a.png

Jeśli chcesz włączyć interfejs Cloud Vision API, zacznij wpisywać „vision” na pasku wyszukiwania. Pojawi się wszystko, co pasuje do tego, co zostało do tej pory wpisane:

2275786a24f8f204.png

Wybierz interfejs API, który chcesz włączyć, i kliknij Włącz:

2556f923b628e31.png

Koszt

Chociaż wiele interfejsów API Google można używać bez opłat, nie można tego powiedzieć o produktach i interfejsach API Google Cloud. Podczas włączania interfejsów API Cloud możesz zostać poproszony o podanie aktywnego konta rozliczeniowego. Pamiętaj jednak, że niektóre usługi Google Cloud mają poziom „Zawsze bezpłatnie” (dobowy/miesięczny), który musisz przekroczyć, aby naliczać opłaty. W przeciwnym razie Twoja karta kredytowa (lub wskazany instrument rozliczeniowy) nie zostanie obciążona.

Przed włączeniem interfejsu API użytkownicy powinni zapoznać się z informacjami o cenach, zwracając szczególną uwagę na to, czy interfejs ma bezpłatny poziom dostępu i jakie są jego warunki. Jeśli włączasz interfejs Cloud Vision API, powinieneś sprawdzić informacje o cenach. Cloud Vision ma bezpłatny limit, a dopóki nie przekroczysz go łącznie (w danym miesiącu), nie powinieneś ponosić żadnych opłat.

Ceny i poziomy bezpłatnego korzystania z interfejsów API Google różnią się w zależności od interfejsu. Przykłady:

Różne usługi Google są rozliczane na różne sposoby, dlatego zapoznaj się z dokumentacją interfejsu API, aby uzyskać te informacje.

Podsumowanie

Teraz, gdy już wiesz, jak ogólnie włączyć interfejsy API Google, otwórz Menedżer interfejsów APIwłącz interfejs Cloud Translation API oraz usługę App Engine (jeśli jeszcze tego nie zrobiono). Pierwszy z nich będzie używany przez naszą aplikację, a drugi, ponieważ wdrażasz aplikację App Engine. Jeśli wolisz to zrobić z poziomu wiersza poleceń, wykonaj to polecenie:

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

Chociaż limit miesięczny nie jest wymieniony na ogólnej stronie podsumowania poziomu „Zawsze bezpłatnie”, na stronie z cenami interfejsu API Tłumacz podano, że wszyscy użytkownicy otrzymują stałą liczbę przetłumaczonych znaków miesięcznie. Jeśli nie przekroczysz tego progu, nie poniesiesz żadnych opłat za korzystanie z interfejsu API. Jeśli są jakieś inne opłaty związane z Google Cloud, zostaną omówione na końcu w sekcji „Usuwanie”.

4. Pobieranie przykładowego kodu aplikacji

Skopiuj kod z repozytorium lokalnie lub w Cloud Shell (za pomocą polecenia git clone) albo pobierz plik ZIP, klikając zielony przycisk Kod, jak pokazano na poniższym zrzucie ekranu:

5cd6110c4414cf65.png

Gdy wszystko będzie gotowe, utwórz pełną kopię folderu, aby wykonać ten samouczek, ponieważ będzie on prawdopodobnie wymagał usunięcia lub zmiany plików. Jeśli chcesz przeprowadzić inną implementację, możesz zacząć od kopiowania oryginału, aby nie trzeba było go ponownie klonować ani pobierać.

5. Prezentacja przykładowej aplikacji

Przykładowa aplikacja to prosta odmiana Tłumacza Google, która prosi użytkowników o wpisanie tekstu w języku angielskim, a następnie wyświetla jego tłumaczenie na język hiszpański. Teraz otwórz plik main.py, aby zobaczyć, jak to działa. Pomijając skomentowane wiersze dotyczące licencjonowania, na górze i na dole wygląda to tak:

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. Importy umożliwiają korzystanie z funkcji Flask, modułu google.auth i biblioteki klienta Cloud Translation API.
  2. Zmienne globalne reprezentują aplikację Flask, identyfikator projektu Cloud, klienta Translation API, nadrzędną „ścieżkę lokalizacji” dla wywołań Translation API oraz język źródłowy i docelowy. W tym przypadku są to angielski (en) i hiszpański (es), ale możesz zmienić te wartości na inne kody języków obsługiwane przez Cloud Translation API.
  3. Duży blok if na dole jest używany w tym samouczku do uruchamiania aplikacji lokalnie – korzysta z serwera deweloperskiego Flask do obsługi aplikacji. Ta sekcja jest też dostępna w samouctkach dotyczących wdrażania Cloud Run na wypadek, gdyby serwer WWW nie był zawarty w kontenerze. Pojawi się prośba o włączenie tworzenia pakietu serwera w kontenerze, ale jeśli ją przeoczysz, kod aplikacji będzie używać serwera deweloperskiego Flask. (Nie jest to problem z App Engine ani Cloud Functions, ponieważ są to platformy oparte na źródłach, co oznacza, że Google Cloud udostępnia i uruchamia domyślny serwer WWW).

W środku pliku main.py znajduje się serce aplikacji, czyli funkcja 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)

Funkcja główna pobiera dane wejściowe od użytkownika i wywołuje interfejs Translation API, aby wykonać ciężką pracę. Przeanalizujmy to:

  1. Sprawdź, czy żądania pochodzą z Cloud Functions, korzystając ze zmiennej local_request. Cloud Functions wysyła własny obiekt żądania Flask, podczas gdy wszystkie inne (uruchamiane lokalnie lub wdrażane w App Engine lub Cloud Run) otrzymają obiekt żądania bezpośrednio z Flask.
  2. Zresetuj podstawowe zmienne formularza. Dotyczy to przede wszystkim żądań GET, ponieważ żądania POST będą zawierać dane, które je zastąpią.
  3. Jeśli jest to żądanie POST, pobierz tekst do przetłumaczenia i utwórz strukturę JSON reprezentującą wymagania dotyczące metadanych interfejsu API. Następnie wywołaj interfejs API, korzystając w razie potrzeby z poprzedniej wersji interfejsu API, jeśli użytkownik używa starszej biblioteki.
  4. Niezależnie od tego, czy w ramach kontekstu szablonu i renderowania sformatujesz rzeczywiste wyniki (POST), czy nie będzie żadnych danych (GET),

Część wizualna aplikacji znajduje się w pliku szablonu index.html. Pokazuje wcześniej przetłumaczone wyniki (w przeciwnym razie puste pole) oraz formularz z prośbą o coś do przetłumaczenia:

<!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. Instalowanie lokalnych pakietów/zależności (do pliku lib)

Jak już wspomnieliśmy, przykładowa aplikacja korzysta z mikroplatformy internetowej Flask i biblioteki klienta Google Cloud Translation API w wersji dla Pythona. Zainstaluj i zaktualizuj pip oraz te 2 pakiety za pomocą polecenia pip (lub pip3):

pip install -t lib -r requirements.txt

Po wykonaniu powyższego polecenia zobaczysz dane wyjściowe instalacji, które mogą wyglądać tak:

$ 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. Wdrażanie usługi

Aby wdrożyć usługę tłumaczenia w usłudze App Engine w Pythonie 2, uruchom to polecenie:

gcloud app deploy

Dane wyjściowe powinny wyglądać tak i zawierać instrukcje dotyczące dalszych kroków:

$ 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

Teraz, gdy Twoja aplikacja jest dostępna na całym świecie, powinna być dostępna pod adresem URL (zawierającym identyfikator projektu) podanym w wyniku wdrożenia:

da28f951c33a2c3d.png

Przetłumacz coś, aby zobaczyć, jak to działa.

d911984d15dd5ef9.png

8. Podsumowanie

Gratulacje! Wiesz już, jak włączyć interfejs Cloud Translation API, uzyskać niezbędne poświadczenia tożsamości i wdrażać proste aplikacje internetowe do App Engine w Pythonie 2. Więcej informacji o tym wdrożeniu znajdziesz w tabeli w repozytorium.

Czyszczenie danych

Interfejs Cloud Translation API umożliwia bezpłatne przetłumaczenie stałej liczby znaków miesięcznie. App Engine ma też bezpłatny limit, co dotyczy również Cloud Functions i Cloud Run. W przypadku przekroczenia któregokolwiek z tych limitów zostaną naliczone opłaty. Jeśli chcesz przejść do następnego ćwiczenia, nie musisz zamykać aplikacji.

Jeśli jednak nie chcesz jeszcze przejść do następnego samouczka lub obawiasz się, że aplikacja, którą właśnie wdrożyłeś/wdrożyłaś, zostanie odkryta w internecie, wyłącz aplikację App Engine, usuń funkcję Cloud Functions lub wyłącz usługę Cloud Run, aby uniknąć opłat. Gdy będziesz gotowy/gotowa przejść do kolejnego Codelab, możesz ponownie włączyć tę funkcję. Jeśli z drugiej strony nie chcesz kontynuować pracy nad tą aplikacją ani innymi projektami w Codelab i chcesz wszystko całkowicie usunąć, możesz zamknąć projekt.

Wdrażanie na bezserwerowej platformie obliczeniowej Google Cloud wiąże się też z niewielkimi kosztami kompilacji i przechowywania. Cloud Build ma własną bezpłatną pulę, podobnie jak Cloud Storage. Aby zwiększyć przejrzystość, usługa Cloud Build kompiluje obraz aplikacji, który jest następnie przechowywany w Cloud Container Registry lub Artifact Registry, która jest następcą tej pierwszej. Przechowywanie tego obrazu zużywa część tej puli, podobnie jak przesyłanie sieciowe podczas przesyłania obrazu do usługi. Możesz jednak mieszkać w regionie, w którym nie ma bezpłatnego poziomu, więc aby zminimalizować potencjalne koszty, zwróć uwagę na wykorzystanie miejsca na dane.

9. Dodatkowe materiały

W kolejnych sekcjach znajdziesz dodatkowe materiały do czytania oraz ćwiczenia, które pomogą Ci poszerzyć wiedzę zdobytą w trakcie samouczka.

Dodatkowe badania

Masz już pewne doświadczenie w korzystaniu z interfejsu Translation API, więc wykonaj kilka dodatkowych ćwiczeń, aby doskonalić swoje umiejętności. Aby kontynuować naukę, zmodyfikuj naszą przykładową aplikację, aby wykonać te czynności:

  1. Wykonaj wszystkie inne wersje tego ćwiczenia, aby uruchomić je lokalnie lub wdrożyć na bezserwerowych platformach obliczeniowych Google Cloud (patrz README repozytorium).
  2. Przejdź przez ten samouczek, używając innego języka programowania.
  3. Zmień tę aplikację, aby obsługiwała inne języki źródłowe lub docelowe.
  4. Zaktualizuj tę aplikację, aby umożliwić tłumaczenie tekstu na więcej niż 1 język. Zmień plik szablonu, aby wyświetlić menu obsługiwanych języków docelowych.

Więcej informacji

Google App Engine

Google Cloud Functions

Google Cloud Run

Google Cloud Buildpacks, Container Registry, Artifact Registry

Google Cloud Translation i Google ML Kit

Inne usługi/strony Google Cloud

Python i Flask

Licencja

Ten samouczek jest objęty licencją Creative Commons Attribution 2.0 Generic License, a kod źródłowy w repozytorium jest objęty licencją Apache 2.