![]() |
|
Yandex Translate - Baskı Önizleme +- Delphi Can (https://www.delphican.com) +-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3) +--- Forum: Mobil Platform - FireMonkey (FMX) (https://www.delphican.com/forumdisplay.php?fid=7) +--- Konu Başlığı: Yandex Translate (/showthread.php?tid=2722) Sayfalar:
1
2
|
Yandex Translate - narkotik - 09-10-2018 Merhaba ; Fmx ve Vcl için kullanabileceğiniz, translate fonksiyonunu paylaşmak istiyorum. Yandex mail açarak api key alabilirsiniz. unit TranslateFmx;
{-------------------------------------------
S.B FMX Yandex Translate
--------------------------------------------}
interface
uses SysUtils, FMX.Forms, System.Classes, System.Net.HttpClientComponent, Xml.XMLDoc, StrUtils;
type
TYandexLanguages=
(Afrikaans,Albanian,Arabic,Basque,Belarusian,Bulgarian,Catalan,Chinese,Chinese_Traditional,
Croatian,Czech,Danish,Dutch,English,Estonian,Filipino,Finnish,French,Galician,German,Greek,
Haitian_Creole,Hebrew,Hindi,Hungarian,Icelandic,Indonesian,Irish,Italian,Japanese,Latvian,
Lithuanian,Macedonian,Malay,Maltese,Norwegian,Persian,Polish,Portuguese,Romanian,Russian,
Serbian,Slovak,Slovenian,Spanish,Swahili,Swedish,Thai,Turkish,Ukrainian,Vietnamese,Welsh,Yiddish);
function mobTranslate(fParent:TForm;const Value:String;SourceLanguage,TargetLanguage:TYandexLanguages):String;
var
GlobalValue : String;
const
YandexLanguagesArr : array[TYandexLanguages] of string =
( 'af','sq','ar','eu','be','bg','ca','zh-CN','zh-TW','hr','cs','da','nl','en','et','tl','fi','fr','gl',
'de','el','ht','iw','hi','hu','is','id','ga','it','ja','lv','lt','mk','ms','mt','no','fa','pl','pt',
'ro','ru','sr','sk','sl','es','sw','sv','th','tr','uk','vi','cy','yi');
ApiKey = 'Api Key Yazılacak....';
implementation
function mobTranslate(fParent:TForm;const Value:String;SourceLanguage,TargetLanguage:TYandexLanguages):String;
var
xNetHTTP : TNetHTTPClient;
xMemoryStream : TMemoryStream;
XmlDoc : TXMLDocument;
xOutList : TStringList;
xUrl : String;
xSource,xTarget : String;
begin
Result := '';
xSource := YandexLanguagesArr[SourceLanguage];
xTarget := YandexLanguagesArr[TargetLanguage];
xUrl := '';
xUrl := Concat(xUrl,'https://translate.yandex.net/api/v1.5/tr/translate?key=',ApiKey);
xUrl := Concat(xUrl,'&lang=',xSource,'-',xTarget,'&text=');
xUrl := Concat(xUrl,UTF8Encode(Value));
xNetHTTP := TNetHTTPClient.Create(fParent);
xMemoryStream := TMemoryStream.Create;
xOutList := TStringList.Create;
XmlDoc := TXMLDocument.Create(fParent);
try
xNetHTTP.Get(xUrl,xMemoryStream);
xMemoryStream.Position := 0;
xOutList.LoadFromStream(xMemoryStream);
result := UTF8ToWideString(xOutList.Text);
XmlDoc.XML.Text := Result;
XmlDoc.Active := True;
Result := IfThen(XmlDoc.DocumentElement.ChildNodes.Count = 0 , 'Hata!' + sLineBreak + Result,XmlDoc.DocumentElement.ChildNodes['text'].Text);
finally
FreeAndNil(XmlDoc);
FreeAndNil(xOutList);
FreeAndNil(xMemoryStream);
FreeAndNil(xNetHTTP);
end;
end;
end.
Yandex Translate - klavye - 10-10-2018 Teşekkürler. Yandex Translate - ozcanm - 10-10-2018 Paylaşım için teşekkürler. Hocam düzeltme yapmak gerekiyor olabilir mi?
uses SysUtils, System.Classes, System.Net.HttpClientComponent, Xml.XMLDoc,
{$IFDEF ANDROID}
FMX.Forms,
{$ENDIF}
{$IF DEFINED(MSWINDOWS)}
Vcl.Forms,
{$ENDIF}
StrUtils;
Yandex Translate - uparlayan - 10-10-2018 Bu fonksiyonu bir nesneye dönüştürseniz, fonksiyon içindeki nesneleri create / destroy maliyetinden kurtarsanız kullandığınız yerdeki verim / randıman artar Yandex Translate - uparlayan - 10-10-2018 UTF8Encode(Value) yerine TURLEncoding sınıfının Encode(Value) fonksiyonunu kullanabilirsiniz. Yandex Translate - ozcanm - 10-10-2018 JSON kullanım örneğide aşağıdaki gibidir. Functionda yer alan dil parametresi hangi dile çevirileceğini işaret etmektedir. Çevirisi yapılacak dil ise otomatik alğılacaktır. Çevirisi yapılacak dil bilgisi biliniyor ise ingilizce - Türkçe için "en-tr" parametresinin girilmesi gerekiyor. Teknik dönküman;
uses
JSON,REST.Client,Data.Bind.Components,Data.Bind.ObjectScope,IpPeerClient;
{IpPeerClient eklemediğiniz zaman aşağıdaki uyarı mesajını alabilirsiniz!
IPProcs is not defined. make sure IPPeerCommon (or an alternative IP Imperlementation unit ) is the uses clause. }
function YandexCeviri(ApiKey,Metin,dil:string):string;
var
pJson : TJSONObject;
Sonuc : TJSONArray;
vRESTClient : TRESTClient;
vRESTRequest : TRESTRequest;
vRESTResponse : TRESTResponse;
Begin
vRESTClient :=TRESTClient.Create(nil);
vRESTRequest :=TRESTRequest.Create(nil);
vRESTResponse :=TRESTResponse.Create(nil);
Try
vRESTClient.BaseURL :='https://translate.yandex.net/api/v1.5/tr.json/translate';
vRESTRequest.Client :=vRESTClient;
vRESTRequest.Response :=vRESTResponse;
vRESTResponse.ContentType :='application/json';
vRESTRequest.AddParameter('key',ApiKey);
vRESTRequest.AddParameter('text',Metin);
vRESTRequest.AddParameter('lang',Dil);
vRESTRequest.Execute;
pJson := TJsonObject(TJSONObject.ParseJSONValue(TEncoding.UTF8.GetBytes(vRESTResponse.Content),0));
Sonuc := TJSONArray(pJson.Get('text').JsonValue);
Result := Sonuc.Items[0].Value;
Finally
pJson.Free;
FreeAndNil(vRESTClient);
FreeAndNil(vRESTRequest);
FreeAndNil(vRESTResponse);
End;
End;
Kullanımı; procedure TForm1.Button1Click(Sender: TObject); begin Memo1.Text:=YandexCeviri(Edit1.Text,'Hello World!','tr'); end; Cvp: Yandex Translate - narkotik - 10-10-2018 (10-10-2018, Saat: 10:45)uparlayan Adlı Kullanıcıdan Alıntı: Bu fonksiyonu bir nesneye dönüştürseniz, fonksiyon içindeki nesneleri create / destroy maliyetinden kurtarsanız kullandığınız yerdeki verim / randıman artar Mantıklı olurdu, zamandan kazanmak icin ben bu sekilde yaptım. (10-10-2018, Saat: 13:57)Cyber Adlı Kullanıcıdan Alıntı: JSON kullanım örneğide aşağıdaki gibidir. Katkilariniz için teşekkürler (10-10-2018, Saat: 10:31)Cyber Adlı Kullanıcıdan Alıntı: Paylaşım için teşekkürler.Vclde derlemek icin direktifleri eklemek gerekli, kullaniminiz dogru Cvp: Yandex Translate - edo - 10-10-2018 (10-10-2018, Saat: 10:31)Cyber Adlı Kullanıcıdan Alıntı: Paylaşım için teşekkürler. uses SysUtils, System.Classes, System.Net.HttpClientComponent, Xml.XMLDoc, Forms, StrUtils;şeklinde sorun çıkarmaması lazım. Bu özellik/notasyonun bildiğim kadarıyla geliş amacı zaten Vcl ve Fmx uyumlu kütüphane linklerinde sorun yaşamamak olması lazım. Yandex Translate - uparlayan - 10-10-2018 mobTranslate(fParent:TForm;..... yerine mobTranslate(fParent:TComponent;..... şeklinde bir düzenleme yapılırsa Vcl.Forms veya Fmx.Forms'a gerek kalmaz. Cvp: Yandex Translate - ozcanm - 10-10-2018 (10-10-2018, Saat: 16:53)edo Adlı Kullanıcıdan Alıntı:(10-10-2018, Saat: 10:31)Cyber Adlı Kullanıcıdan Alıntı: Paylaşım için teşekkürler. Hocam, Community Edition sürümü kullanıyorum. Yeni bir "Multi-Device Application" oluşturup ilgili uniti projeye dahil edersek burada FMX yada VCL belirtmemizi istiyor. ![]()
|