Google Cloud Translation v3 tłumaczy tekst pomiędzy ponad stu językami i potrafi wykryć za Ciebie język danego fragmentu tekstu. Usługa jest udostępniona przez gRPC, a sgcWebSockets Enterprise dostarcza typowanego klienta gRPC Translation zbudowanego na TsgcGRPCClient. Zamiast ręcznie składać Protocol Buffers, wypełniasz obiekt żądania, wywołujesz jedną metodę i odczytujesz przetłumaczony tekst bezpośrednio z typowanej odpowiedzi. Ten wpis przeprowadza przez to, jak to działa, i pokazuje rzeczywisty kod Delphi z dołączonego demo.
Jak to działa
gRPC to Protocol Buffers opakowane w HTTP/2, więc klient Translation działa na stosie HTTP/2 sgcWebSockets. Tworzysz TsgcHTTP2Client wskazujący na translate.googleapis.com na porcie 443 z TLS, przypisujesz go do TsgcGRPCClient, a komponent gRPC wykonuje za Ciebie opakowywanie komunikatów, nagłówki i obsługę strumieni.
Moduł Translation sgcGRPC_Google_Translation dodaje typowane klasy komunikatów, które odzwierciedlają API v3: TsgcGRPCTranslationTranslateTextRequest i ...TranslateTextResponse do tłumaczenia, parę DetectLanguage do wykrywania języka oraz parę GetSupportedLanguages do wyświetlania języków. Każde żądanie udostępnia metodę ToBytes, która serializuje je do protobuf, a każda odpowiedź udostępnia metodę LoadFromBytes, która parsuje odpowiedź. Przekazujesz te bajty do metody Call klienta gRPC i odczytujesz wynik z powrotem.
Uwierzytelnianie
Cloud Translation wymaga tokenu konta usługi Google. Demo uwierzytelnia się za pomocą klucza JSON konta usługi (adres e-mail klienta, identyfikator klucza prywatnego, klucz prywatny i identyfikator projektu) i uzyskuje token Bearer, który jest następnie dodawany jako metadane gRPC, aby towarzyszył każdemu wywołaniu.
GetGRPCClient.DefaultMetadata.Clear;
GetGRPCClient.DefaultMetadata.Add('authorization', 'Bearer ' + FToken);
Jeden szczegół warty odnotowania: samodzielnie podpisany JWT konta usługi jest powiązany z odbiorcą, więc token musi być skierowany na punkt końcowy Translation, aby został zaakceptowany przez translate.googleapis.com. Demo ustawia JWT.API_Endpoint na https://translate.googleapis.com/ przed zażądaniem tokenu.
Konfigurowanie klienta
Transport HTTP/2 i klient gRPC są łączone raz. Usługa Translation oczekuje protobuf na łączu, więc typem zawartości kanału jest grpcProto.
uses
sgcHTTP2_Client, sgcGRPC_Types, sgcGRPC_Client,
sgcGRPC_Google_Translation;
FHTTP2Client := TsgcHTTP2Client.Create(nil);
FHTTP2Client.Host := 'translate.googleapis.com';
FHTTP2Client.Port := 443;
FHTTP2Client.TLS := True;
FGRPCClient := TsgcGRPCClient.Create(nil);
FGRPCClient.Client := FHTTP2Client;
FGRPCClient.ChannelOptions.ContentType := grpcProto;
FGRPCClient.ChannelOptions.Compression := grpcNoCompression;
Tłumaczenie tekstu
Aby przetłumaczyć, wypełnij TsgcGRPCTranslationTranslateTextRequest: ustaw ścieżkę zasobu Parent, dodaj jeden lub więcej łańcuchów do Contents, ustaw kody języka źródłowego i docelowego oraz typ MIME. Zserializuj to za pomocą ToBytes i przekaż do Call z w pełni kwalifikowaną nazwą usługi i metody. Ścieżka nadrzędna ma postać v3 projects/<project-id>/locations/global.
var
oRequest: TsgcGRPCTranslationTranslateTextRequest;
oResponse: TsgcGRPCResponse;
begin
oRequest := TsgcGRPCTranslationTranslateTextRequest.Create;
try
oRequest.Parent := 'projects/' + txtProjectId.Text + '/locations/global';
oRequest.Contents.Add(txtSourceText.Text);
oRequest.SourceLanguageCode := txtSourceLang.Text; // e.g. 'en'
oRequest.TargetLanguageCode := txtTargetLang.Text; // e.g. 'es'
oRequest.MimeType := 'text/plain';
oResponse := GetGRPCClient.Call
('google.cloud.translation.v3.TranslationService', 'TranslateText',
oRequest.ToBytes);
finally
oRequest.Free;
end;
end;
Odpowiedź wraca jako TsgcGRPCResponse. Gdy StatusCode ma wartość grpcOK, wczytaj surowe bajty Data do typowanej odpowiedzi i odczytaj każde tłumaczenie. Każde Translation zawiera TranslatedText oraz, gdy język źródłowy został automatycznie wykryty, DetectedLanguageCode.
var
oResponse: TsgcGRPCTranslationTranslateTextResponse;
i: Integer;
begin
oResponse := TsgcGRPCTranslationTranslateTextResponse.Create;
try
oResponse.LoadFromBytes(aData);
for i := 0 to oResponse.TranslationCount - 1 do
begin
DoLog('Translated: ' + oResponse.Translation(i).TranslatedText);
if oResponse.Translation(i).DetectedLanguageCode <> '' then
DoLog('Detected: ' + oResponse.Translation(i).DetectedLanguageCode);
end;
finally
oResponse.Free;
end;
end;
Wykrywanie języka
Gdy nie znasz języka źródłowego, odłóż tłumaczenie na bok i wywołaj DetectLanguage. Zbuduj TsgcGRPCTranslationDetectLanguageRequest ze ścieżką nadrzędną i zawartością Content do zbadania, a następnie odczytaj kandydujące języki, każdy z LanguageCode i wartością Confidence.
oRequest := TsgcGRPCTranslationDetectLanguageRequest.Create;
try
oRequest.Parent := GetParentPath;
oRequest.Content := txtSourceText.Text;
oRequest.MimeType := 'text/plain';
oResponse := GetGRPCClient.Call
('google.cloud.translation.v3.TranslationService', 'DetectLanguage',
oRequest.ToBytes);
finally
oRequest.Free;
end;
Parsowanie odpowiedzi wykrywania daje Ci kod języka i ocenę pewności dla każdego kandydata.
oResponse := TsgcGRPCTranslationDetectLanguageResponse.Create;
try
oResponse.LoadFromBytes(aData);
for i := 0 to oResponse.LanguageCount - 1 do
DoLog('Language: ' + oResponse.Language(i).LanguageCode +
' (confidence: ' + FloatToStr(oResponse.Language(i).Confidence) + ')');
finally
oResponse.Free;
end;
Wyświetlanie obsługiwanych języków
Trzecia operacja, GetSupportedLanguages, zwraca każdy język obsługiwany przez usługę. Ustaw DisplayLanguageCode na język, w którym chcesz otrzymać nazwy wyświetlane, a każdy wpis wraca z LanguageCode oraz czytelną dla człowieka DisplayName, wraz z flagami określającymi, czy może być używany jako źródłowy lub docelowy.
oRequest := TsgcGRPCTranslationGetSupportedLanguagesRequest.Create;
try
oRequest.Parent := GetParentPath;
oRequest.DisplayLanguageCode := 'en';
oResponse := GetGRPCClient.Call
('google.cloud.translation.v3.TranslationService',
'GetSupportedLanguages', oRequest.ToBytes);
finally
oRequest.Free;
end;
Dostępność
Klient gRPC Translation jest częścią edycji Enterprise sgcWebSockets i działa na Windows, macOS, Linux, iOS oraz Android, w Delphi i C++Builder. Kompletny, gotowy do uruchomienia przykład z wczytywaniem konta usługi i wszystkimi trzema operacjami znajduje się w Demos\21.GRPC\12.Translation, a bazowy klient gRPC jest udokumentowany na stronie produktu gRPC Client.
Pytania lub uwagi? Skontaktuj się z nami. Otrzymasz odpowiedź od osób, które napisały ten kod.
