[{"text_idx": "#000000", "text": "Google ofertas la API de Google Translation kun uzokostita kostostrukturo kiel parto de sia Google Cloud. Ekzistas ankau\u0306 nedokumentita API uzebla sen s\u0302losilo , sed kiu rifuzas funkcii post nur kelkaj petoj. Kiam vi uzas la retejan tradukan funkcion de Google Chrome, rimarkeblas, ke pag\u0302oj povas esti tradukitaj tre bonkvalite sen rimarkinda limigo."}, {"text_idx": "#000001", "text": "S\u0302ajne la altnivela nmt-modelo jam estas uzata c\u0302i tie. Sed kiun API Google Chrome uzas interne por traduki la enhavon kaj c\u0302u c\u0302i tiu API ankau\u0306 povas esti traktita rekte - ec\u0302 c\u0302e la servila flanko? Por analizi retan trafikon, iloj kiel Wireshark au\u0306 Telerik Fiddler , kiuj ankau\u0306 povas analizi c\u0302ifritan trafikon, estas rekomendindaj. Sed Chrome ec\u0302 liveras la petojn, kiujn g\u0302i sendas por la pag\u0302a traduko senpage: Ili facile videblas per Chrome DevTools:"}, {"text_idx": "#000002", "text": "Se vi efektivigas tradukon, tiam kaptu la decidan POST-peton al per \"Kopii> Kopii kiel cURL (bash)\" kaj plenumi g\u0302in per ilo kiel Pos\u0302tisto , ekzemple, vi povas sendi la peton denove senprobleme.:"}, {"text_idx": "#000003", "text": "La signifo de la URL-parametroj ankau\u0306 estas plejparte evidenta:"}, {"text_idx": "#000004", "text": "Iuj petaj titoloj ankau\u0306 estas agorditaj - sed c\u0302i tiuj plejparte povas esti ignorataj. Post permane malelektado de c\u0302iuj kaplinioj, inkluzive de tiuj de la uzanto-agento , koda problemo estas malkovrita kiam vi enigas specialajn signojn (c\u0302i tie kiam tradukas \" Saluton Mondo \"):"}, {"text_idx": "#000005", "text": "Se vi reaktivigas la uzantan agenton (tio g\u0302enerale ne damag\u0302as), la API liveras koditajn signojn UTF-8:"}, {"text_idx": "#000006", "text": "C\u0302u ni jam estas tie kaj c\u0302u ni havas c\u0302iujn informojn por uzi c\u0302i tiun API ekster Google Chrome? Se vi s\u0302ang\u0302as la tradukindan c\u0302enon (datuma kampo q de la POST-peto) de, ekzemple, \"Saluton mondo\" al \"Saluton mondo ! \u201c, Ni ricevas erarmesag\u0302on:"}, {"text_idx": "#000007", "text": "Ni nun tradukas c\u0302i tiun modifitan denove ene de Google Chrome per la retejo-traduko-funkcio kaj trovas, ke krom la parametro q , la parametro tk ankau\u0306 s\u0302ang\u0302ig\u0302is (c\u0302iuj aliaj parametroj restis samaj):"}, {"text_idx": "#000008", "text": "Evidente, g\u0302i estas signo, kiu dependas de la c\u0302eno, kies strukturo ne facile videblas. Kiam vi komencas la retejan tradukon, la jenaj dosieroj estas s\u0302arg\u0302itaj:"}, {"text_idx": "#000009", "text": "1 CSS-dosiero: translateelement.css4 grafikaj\u0302oj: translate_24dp.png (2x), gen204 (2x)2 JS-dosieroj: main_de.js , element_main.js"}, {"text_idx": "#000010", "text": "Nun ni povas elpurigi la kodon ( CORS unue devas esti aktivigita sur la loka servilo). La koncerna koda sekcio por generi la j\u0302etonon s\u0302ajnas esti kas\u0302ita en la dosiero element_main.js en c\u0302i tiu sekcio:"}, {"text_idx": "#000011", "text": "C\u0302i tie la teksto estas hakita kun la helpo de iuj pecs\u0302ang\u0302oj . Sed bedau\u0306rinde ankorau\u0306 mankas al ni unu peco de la enigmo: Krom la argumento a (kiu estas la tradukota teksto), alia argumento b estas transdonita al la funkcio Bp () - speco de semo, kiu s\u0302ajnas s\u0302ang\u0302ig\u0302i de tempo al tempo kaj kiu ankau\u0306 inkluzivas fluas en hakadon. Sed de kie li venas? Se ni saltas al la funkcio alvoko de Bp () , ni trovas la sekvan kodosekcion:"}, {"text_idx": "#000012", "text": "La funkcio Hq antau\u0306e estas deklarita jene:"}, {"text_idx": "#000013", "text": "La Deobfuscater lasis iom da rubo c\u0302i tie; Post kiam ni anstatau\u0306igis String.fromCharCode ('...') per la respektivaj signokordoj , forigu la malnovig\u0302intan a () kaj kunmetu la funkciojn nomas [c (), c ()] , la rezulto estas:"}, {"text_idx": "#000014", "text": "La funkcio yq estas antau\u0306e difinita kiel:"}, {"text_idx": "#000015", "text": "La semo s\u0302ajnas esti en la tutmonda objekto google.translate._const._ctkk , kiu haveblas dum rultempo. Sed kie g\u0302i estas metita? En la alia antau\u0306e s\u0302arg\u0302ita JS-dosiero main_de.js, almenau\u0306 g\u0302i ankau\u0306 haveblas komence. Ni aldonas jenon komence:"}, {"text_idx": "#000016", "text": "En la konzolo ni efektive ricevas la nunan semon:"}, {"text_idx": "#000018", "text": "La variablo kun la URL estas malfacile difinita en la sama dosiero:"}, {"text_idx": "#000019", "text": "Se ni nun ekzamenas la dosieron element.js pli atente (post malfokusigi g\u0302in denove), ni trovas la malfacilan eniron c._ctkk - la google.translate- objekto ankau\u0306 estas agordita lau\u0306e kaj la s\u0302arg\u0302o de c\u0302iuj koncernaj aktivaj\u0302oj (kiujn ni jam malkovris antau\u0306e) ekas:"}, {"text_idx": "#000021", "text": "La s\u0302losilo estas generita en google_apis / google_api_keys.cc de imita valoro:"}, {"text_idx": "#000022", "text": "Tamen testo montras, ke la API-vokoj funkcias same sen c\u0302i tiu s\u0302losila parametro. Se vi eksperimentas kun la API, vi ricevos la statan kodon 200 se vi sukcesos. Se vi tiam renkontas limon, vi reakiras la statan kodon 411 kun la mesag\u0302o \" POST-petoj postulas enhavan longan kapon \". Tial estas konsilinde enmeti c\u0302i tiun kaplinion (kiu au\u0306tomate estas agordita kiel portempa kaplinio en Pos\u0302tisto)."}, {"text_idx": "#000023", "text": "La revenformato de la tradukitaj c\u0302enoj estas nekutima kiam estas pluraj frazoj en unu peto. La unuopaj frazoj estas enfermitaj per la i- / b-HTML-etikedoj:"}, {"text_idx": "#000024", "text": "Ankau\u0306 Google Chrome ne sendas la tutan HTML al la API, sed konservas atributajn valorojn kiel href en la peto (kaj anstatau\u0306e starigas indicojn por ke la etikedoj estu poste atribuitaj al la klienta flanko):"}, {"text_idx": "#000025", "text": "Se vi s\u0302ang\u0302as la valoron de la kliento POST- kliento de te_lib (Google Chrome) c\u0302e retapo ( retejo de Google Translation ), vi ricevas la finan tradukitan c\u0302enon:"}, {"text_idx": "#000026", "text": "La problemo estas, ke vi multe pli ofte ekhavas rapidecon-limigon ol per te_lib (por komparo: per retapo c\u0302i tio atingig\u0302as post 40 000 signoj, kun te_lib ne ekzistas tarifo-limigo). Do ni devas rigardi pli proksime kiel Chrome analizas la rezulton. Ni trovos g\u0302in c\u0302i tie en element_main.js:"}, {"text_idx": "#000027", "text": "Jen la rezultoj de komenca testo, kiu estis farita sur kvin malsamaj sistemoj kun malsamaj bendolarg\u0302oj kaj IP-adresoj:"}, {"text_idx": "#000028", "text": "Noto: C\u0302i tiu bloga afis\u0302o kun c\u0302iuj skriptoj estis verkita nur por testaj celoj. Ne uzu la skriptoj por produktivaj uzo, anstatau\u0306 labori kun la oficiala Google Tradukado API ."}, {"text_idx": "#000030", "text": "GitHubTwitterPinboardPinterestYouTubeButikvaroSpotifyDribbbleLinkedInXingPGPValidigo de markado de W3CGugla Lumturo"}]