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

1. Przegląd

Ta seria ćwiczeń z programowania (samodzielnych samouczków praktycznych) ma pomóc deweloperom w poznaniu różnych opcji wdrażania aplikacji. Z tego przewodnika 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ę z repozytorium tego samouczka można wdrożyć na co najmniej 8 różnych sposobów, wprowadzając tylko niewielkie zmiany w 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 przez Dockera)
  7. Cloud Run (Python 3 przez Dockera)
  8. Cloud Run (Python 3 za pomocą pakietów kompilacji Cloud Buildpacks)

Ten przewodnik skupia się na wdrażaniu tej aplikacji na wytłuszczonych platformach wymienionych powyżej.

Dowiesz się, jak:

Czego potrzebujesz

  • projekt Google Cloudaktywnym kontem rozliczeniowym Cloud;
  • Zainstalowany Flask do uruchamiania lokalnego lub włączona bezserwerowa platforma obliczeniowa w chmurze do wdrożeń w chmurze.
  • podstawowe umiejętności w zakresie Pythona,
  • Praktyczna znajomość podstawowych poleceń systemu operacyjnego

Ankieta

Jak zamierzasz korzystać z tego samouczka?

Przeczytaj i wykonaj ćwiczenia 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

Samodzielne konfigurowanie środowiska

  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óry nie jest używany przez interfejsy API Google. Możesz go w dowolnym momencie zaktualizować.
  • Identyfikator projektu musi być unikalny we wszystkich projektach Google Cloud i jest niezmienny (nie można go zmienić po ustawieniu). Konsola Cloud automatycznie generuje unikalny ciąg znaków. Zwykle nie musisz się nim przejmować. W większości modułów z kodem musisz odwoływać się do identyfikatora projektu (zwykle oznaczanego jako 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. Po utworzeniu projektu jest on „zamrażany”.
  • Istnieje też trzecia wartość, czyli numer projektu, którego używają niektóre interfejsy API. Więcej informacji o tych 3 wartościach znajdziesz w dokumentacji.
  1. Następnie musisz włączyć płatności w konsoli Cloud, aby korzystać z zasobów i interfejsów API Google Cloud. Ukończenie tego laboratorium nie powinno wiązać się z dużymi kosztami, a nawet z żadnymi. Aby wyłączyć zasoby i uniknąć naliczenia opłat po zakończeniu tego samouczka, postępuj zgodnie z instrukcjami „czyszczenia” 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 interfejs Cloud Translation API i usługę App Engine, postępując zgodnie z podanymi poniżej instrukcjami.

Włączanie interfejsów Cloud API

Wprowadzenie

Niezależnie od tego, którego interfejsu Google API chcesz używać w swojej aplikacji, musi on być włączony. Poniższy przykład pokazuje 2 sposoby włączania interfejsu Cloud Vision API. Gdy dowiesz się, jak włączyć jeden interfejs Cloud API, będziesz w stanie włączyć inne interfejsy API, ponieważ proces jest podobny.

Opcja 1. W Cloud Shell lub interfejsie wiersza poleceń

Włączanie interfejsów API w konsoli Cloud jest bardziej powszechne, ale niektórzy programiści wolą wykonywać wszystkie czynności w wierszu poleceń. Aby to zrobić, musisz wyszukać „nazwę usługi” interfejsu API. Wygląda na adres URL: SERVICE_NAME.googleapis.com. Znajdziesz je w tabeli obsługiwanych usług lub możesz wysłać do nich 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 gcloud narzędziem wiersza poleceń):

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

W jednym żądaniu możesz też włączyć kilka interfejsów API. Na przykład ten wiersz poleceń włącza Cloud Run, Cloud Artifact Registry i Cloud Translation API:

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

Opcja 2. Z poziomu konsoli Cloud

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ę wszystkie wyniki pasujące do wpisanego tekstu:

2275786a24f8f204.png

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

2556f923b628e31.png

Koszt

Wiele interfejsów API Google można używać bezpłatnie, ale korzystanie z usług i interfejsów API Google Cloud nie jest bezpłatne. Podczas włączania interfejsów API Google Cloud możesz zostać poproszony(-a) o podanie aktywnego konta rozliczeniowego. Warto jednak pamiętać, że niektóre usługi Google Cloud mają bezpłatny poziom (dzienny lub miesięczny), który musisz przekroczyć, aby ponieść opłaty. W przeciwnym razie Twoja karta kredytowa (lub określony instrument płatniczy) 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 jest on dostępny w ramach bezpłatnego poziomu, a jeśli tak, to w jakim zakresie. Jeśli włączasz interfejs Cloud Vision API, sprawdź informacje o cenach. Cloud Vision ma bezpłatny limit, więc jeśli w danym miesiącu nie przekroczysz go łącznie, nie poniesiesz żadnych opłat.

Ceny i bezpłatne wersje różnią się w zależności od interfejsu API Google. Przykłady:

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

Podsumowanie

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

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

Chociaż miesięczny limit nie jest wymieniony na stronie podsumowania ogólnego poziomu „Zawsze bezpłatnie”, na stronie z cennikiem interfejsu Translation API jest podana stała miesięczna liczba przetłumaczonych znaków, którą otrzymują wszyscy użytkownicy. Jeśli nie przekroczysz tego progu, nie zostaną naliczone żadne opłaty za korzystanie z interfejsu API. Wszelkie inne opłaty związane z Google Cloud zostaną omówione na końcu w sekcji „Czyszczenie”.

4. Pobieranie kodu przykładowej aplikacji

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

5cd6110c4414cf65.png

Teraz, gdy masz już wszystko, utwórz pełną kopię folderu, aby wykonać ten samouczek, ponieważ prawdopodobnie będziesz usuwać lub zmieniać pliki. Jeśli chcesz przeprowadzić inne wdrożenie, możesz zacząć od skopiowania oryginału, aby nie musieć go ponownie klonować ani pobierać.

5. Prezentacja przykładowej aplikacji

Przykładowa aplikacja to prosta pochodna Tłumacza Google, która prosi użytkowników o wpisanie tekstu w języku angielskim i wyświetla jego odpowiednik w języku hiszpańskim. Teraz otwórz plik main.py, aby zobaczyć, jak to działa. Po pominięciu wierszy z komentarzami dotyczącymi licencjonowania 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 wprowadzają funkcje Flask, moduł google.auth i bibliotekę klienta Cloud Translation API.
  2. Zmienne globalne reprezentują aplikację Flask, identyfikator projektu w chmurze, klienta interfejsu Translation API, ścieżkę nadrzędną „location path” dla wywołań interfejsu Translation API oraz języki źródłowy i docelowy. W tym przypadku są to języki angielski (en) i hiszpański (es), ale możesz zmienić te wartości na inne kody języków obsługiwanych przez Cloud Translation API.
  3. Duży blok if u dołu jest używany w samouczku dotyczącym lokalnego uruchamiania tej aplikacji – wykorzystuje on serwer deweloperski Flask do obsługi naszej aplikacji. Ta sekcja jest też dostępna w samouczkach dotyczących wdrażania w Cloud Run na wypadek, gdyby serwer WWW nie był dołączony do kontenera. Pojawi się prośba o włączenie pakowania serwera w kontenerze, ale jeśli to pominiesz, kod aplikacji wróci do korzystania z 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 funkcji main.py znajduje się najważniejsza część 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)

Główna funkcja przetwarza dane wejściowe użytkownika i wywołuje interfejs Translation API, aby wykonać większość pracy. Przyjrzyjmy się temu bliżej:

  1. Sprawdź, czy żądania pochodzą z Cloud Functions, używając zmiennej local_request. Cloud Functions wysyła własny obiekt żądania Flask, natomiast wszystkie inne (działające lokalnie lub wdrażane w App Engine lub Cloud Run) otrzymują obiekt żądania bezpośrednio z Flask.
  2. Zresetuj podstawowe zmienne formularza. Dotyczy to głównie żą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, a jeśli użytkownik korzysta ze starszej biblioteki, użyj poprzedniej wersji interfejsu API.
  4. Niezależnie od tego sformatuj rzeczywiste wyniki (POST) lub brak danych (GET) w kontekście szablonu i wyrenderuj.

Część wizualna aplikacji znajduje się w pliku szablonu index.html. Wyświetla wcześniej przetłumaczone wyniki (w przeciwnym razie jest puste), a następnie formularz z prośbą o przetłumaczenie:

<!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 (w folderze lib)

Jak wspomnieliśmy wcześniej, przykładowa aplikacja korzysta z mikroplatformy internetowej Flask i biblioteki klienta Google Cloud Translation API dla Pythona. Zainstaluj i zaktualizuj pip oraz tę parę pakietów za pomocą tego polecenia pip (lub pip3):

pip install -t lib -r requirements.txt

Po uruchomieniu powyższego polecenia zobaczysz dane wyjściowe instalacji, które mogą wyglądać mniej więcej 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 App Engine w Pythonie 2, uruchom to polecenie:

gcloud app deploy

Dane wyjściowe powinny wyglądać tak jak poniżej i zawierać kilka sugestii dotyczących kolejnych 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ć osiągalna 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 dane logowania i wdrożyć prostą aplikację internetową w App Engine w Pythonie 2. Więcej informacji o tym wdrożeniu znajdziesz w tej tabeli w repozytorium.

Czyszczenie danych

Interfejs Cloud Translation API umożliwia bezpłatne przetłumaczenie określonej liczby znaków miesięcznie. App Engine ma też bezpłatny limit, podobnie jak Cloud FunctionsCloud Run. Jeśli przekroczysz którykolwiek z tych limitów, zostaną naliczone opłaty. Jeśli planujesz przejść do następnych ćwiczeń, nie musisz zamykać aplikacji.

Jeśli nie chcesz jeszcze przechodzić do następnego samouczka lub obawiasz się, że internet odkryje właśnie wdrożoną aplikację, wyłącz aplikację App Engine, usuń funkcję w Cloud Functions lub wyłącz usługę Cloud Run, aby uniknąć naliczania opłat. Gdy zechcesz przejść do kolejnych ćwiczeń, możesz ponownie włączyć tę funkcję. Jeśli nie zamierzasz kontynuować pracy nad tą aplikacją ani innymi Codelabs i chcesz wszystko całkowicie usunąć, możesz wyłączyć projekt.

Wdrażanie na bezserwerowej platformie obliczeniowej Google Cloud wiąże się też z niewielkimi kosztami kompilacji i przechowywania. Cloud Build ma własny bezpłatny limit, podobnie jak Cloud Storage. Aby zapewnić większą przejrzystość, Cloud Build kompiluje obraz aplikacji, który jest następnie przechowywany w Cloud Container Registry lub w Artifact Registry, czyli w usłudze, która ją zastąpiła. Przechowywanie tego obrazu wykorzystuje część tego limitu, podobnie jak ruch wychodzący w sieci podczas przesyłania obrazu do usługi. Możesz jednak mieszkać w regionie, w którym nie ma takiego bezpłatnego pakietu, więc kontroluj wykorzystanie miejsca na dane, aby zminimalizować potencjalne koszty.

9. Dodatkowe materiały

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

Dodatkowe materiały

Masz już pewne doświadczenie w korzystaniu z interfejsu Translation API, więc wykonajmy kilka dodatkowych ćwiczeń, aby jeszcze bardziej rozwinąć Twoje umiejętności. Aby kontynuować ścieżkę szkoleniową, zmodyfikuj naszą przykładową aplikację w ten sposób:

  1. Wykonaj wszystkie pozostałe wersje tego laboratorium, aby uruchomić je lokalnie lub wdrożyć na bezserwerowych platformach obliczeniowych Google Cloud (patrz plik README repozytorium).
  2. Ukończ ten samouczek, korzystając z innego języka programowania.
  3. Zmień tę aplikację, aby obsługiwała inne języki źródłowe lub docelowe.
  4. Uaktualnij tę aplikację, aby można było tłumaczyć tekst na więcej niż 1 język. Zmień plik szablonu, aby zawierał 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 i strony Google Cloud

Python i Flask

Licencja

Ten samouczek jest licencjonowany na podstawie ogólnej licencji Creative Commons Uznanie autorstwa 2.0, a kod źródłowy w repozytorium jest licencjonowany na podstawie licencji Apache 2.