Google Cloud Translation v3, metni yüzden fazla dil arasında çevirir ve bir metin parçasının dilini sizin için algılayabilir. Hizmet gRPC üzerinden sunulur ve sgcWebSockets Enterprise, TsgcGRPCClient üzerine kurulu türlü bir Translation gRPC istemcisi içerir. Protocol Buffers'ı elle bir araya getirmek yerine, bir istek nesnesini doldurursunuz, bir metot çağırırsınız ve çevrilen metni doğrudan türlü bir yanıttan okursunuz. Bu yazı, nasıl çalıştığını adım adım anlatır ve paketteki demodaki gerçek Delphi kodunu gösterir.
Nasıl çalışır
gRPC, HTTP/2 üzerinde çerçevelenmiş Protocol Buffers'tır, bu nedenle Translation istemcisi sgcWebSockets HTTP/2 yığınının üzerine oturur. TLS ile 443 numaralı bağlantı noktasında translate.googleapis.com adresine yönlendirilmiş bir TsgcHTTP2Client oluşturur, onu bir TsgcGRPCClient'a atarsınız ve gRPC bileşeni mesaj çerçevelemesini, üst bilgileri ve akış işlemeyi sizin için yapar.
Translation birimi sgcGRPC_Google_Translation, v3 API'sini yansıtan türlü mesaj sınıflarını ekler: çeviri için TsgcGRPCTranslationTranslateTextRequest ve ...TranslateTextResponse, dil algılama için DetectLanguage çifti ve dilleri listelemek için GetSupportedLanguages çifti. Her istek, onu protobuf'a serileştiren bir ToBytes metodu sunar ve her yanıt, yanıtı ayrıştıran bir LoadFromBytes metodu sunar. Bu baytları gRPC istemcisinin Call metoduna iletir ve sonucu geri okursunuz.
Kimlik Doğrulama
Cloud Translation, bir Google hizmet hesabı belirteci gerektirir. Demo, bir hizmet hesabı JSON anahtarıyla (istemci e-postası, özel anahtar kimliği, özel anahtar ve proje kimliği) kimlik doğrulaması yapar ve bir Bearer belirteci elde eder; bu belirteç daha sonra her çağrıda taşınması için gRPC meta verisi olarak eklenir.
GetGRPCClient.DefaultMetadata.Clear;
GetGRPCClient.DefaultMetadata.Add('authorization', 'Bearer ' + FToken);
Belirtmeye değer bir ayrıntı: kendinden imzalı bir hizmet hesabı JWT'si hedef kitleye bağlıdır (audience-bound), bu nedenle belirtecin translate.googleapis.com tarafından kabul edilmesi için Translation uç noktasını hedeflemesi gerekir. Demo, belirteci talep etmeden önce JWT.API_Endpoint'i https://translate.googleapis.com/ olarak ayarlar.
İstemcinin kurulması
HTTP/2 taşıması ve gRPC istemcisi bir kez birbirine bağlanır. Translation hizmeti hatta (wire) protobuf bekler, bu nedenle kanal içerik türü grpcProto'dur.
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;
Metni çevirme
Çevirmek için bir TsgcGRPCTranslationTranslateTextRequest doldurun: Parent kaynak yolunu ayarlayın, Contents'e bir veya daha fazla dize ekleyin, kaynak ve hedef dil kodlarını ve MIME türünü ayarlayın. Onu ToBytes ile serileştirin ve tam nitelikli hizmet adı ve metoduyla birlikte Call'a iletin. Üst yol (parent path), v3 biçimini izler: 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;
Yanıt, bir TsgcGRPCResponse olarak geri gelir. StatusCode grpcOK olduğunda, ham Data baytlarını türlü bir yanıta yükleyin ve her çeviriyi okuyun. Her Translation, TranslatedText'i ve kaynak dil otomatik algılandığında DetectedLanguageCode'u taşır.
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;
Dili algılama
Kaynak dili bilmediğinizde, çeviriyi bir kenara bırakın ve DetectLanguage'i çağırın. Üst yol ve incelenecek Content ile bir TsgcGRPCTranslationDetectLanguageRequest oluşturun, ardından her biri bir LanguageCode ve bir Confidence değerine sahip aday dilleri geri okuyun.
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;
Algılama yanıtını ayrıştırmak, her aday için dil kodunu ve bir güven puanını verir.
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;
Desteklenen dilleri listeleme
Üçüncü işlem olan GetSupportedLanguages, hizmetin desteklediği her dili döndürür. Görünen adların hangi dilde olmasını istiyorsanız DisplayLanguageCode'u o dile ayarlayın; her giriş, kaynak veya hedef olarak kullanılıp kullanılamayacağına dair bayraklarla birlikte bir LanguageCode ve okunabilir bir DisplayName ile geri gelir.
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;
Kullanılabilirlik
Translation gRPC istemcisi, sgcWebSockets Enterprise sürümünün bir parçasıdır ve Delphi ile C++Builder genelinde Windows, macOS, Linux, iOS ve Android üzerinde çalışır. Hizmet hesabı yükleme ve üç işlemin tümünü içeren eksiksiz, çalıştırılmaya hazır bir örnek Demos\21.GRPC\12.Translation içinde yer alır ve temeldeki gRPC istemcisi gRPC Client ürün sayfasında belgelenmiştir.
Sorularınız veya geri bildirimleriniz mi var? Bize ulaşın. Kodu yazan kişilerden bir yanıt alacaksınız.
