Soru & Cevap

Android için Yandex'in translate API'si nasıl kull ...

10.08.2014 - 08:57

Merhaba, yapacağım Android uygulamasında herhangi bir translate API'si kullanmak istiyorum. Google'ınki ücretli olduğundan Yandex kullanmak mantıklı geldi. Yandex translate API key aldım, Yandex'in bu konuyla ilgili internet sitesine de baktım ama kullanamadım bir türlü. Çeviri ile ilgili herhangi bir tecrübesi olan varsa yardım edebilir mi?

Yandex'in ilgili internet sitesi: http://api.yandex.com/translate/  

200 Görüntülenme

3 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

picture-17814-1407156806.jpg
serdarbuyukkanli
02.09.2014 - 09:14

Merhaba, şu şekilde kullanabilirsiniz:

 

TranslateAsyncTask classı:

[code]

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;

import android.os.AsyncTask;
import android.util.Log;

public class TranslateAsyncTask extends AsyncTask<String, Void, String> {
    
    TranslateCallback translateCallback;
    
    public TranslateAsyncTask(TranslateCallback translateCallback) {
        this.translateCallback = translateCallback;
    }
 
        protected void onPostExecute(String result) {
            translateCallback.onSuccess(result);
            
        }
 
 
        @Override
        protected String doInBackground(String... params) {
            String result = new String();
            try {
                result += mTranslateData(params[0],"tr","en");
            } catch (IOException e) {
                Log.e("Hata", e.getLocalizedMessage());
            }
            return result;
        }
 
        public String mTranslateData(String text,String to,String from) throws IOException {
            URL url = new URL("http://translate.google.com.tw/translate_a/t?client=t&hl="+from+"&sl="+to+"&tl=en&ie=UTF-8&oe=UTF-8&multires=1&oc=1&otf=2&ssel=0&tsel=0&sc=1&q="+ URLEncoder.encode(text, "UTF-8"));
            URLConnection urlConnection = url.openConnection();
            urlConnection.setRequestProperty("User-Agent", "Something Else");
            BufferedReader br = new BufferedReader(new InputStreamReader(
                    urlConnection.getInputStream()));
            String result = br.readLine();
            br.close();
 
 
            result = result.substring(2, result.indexOf("]]") + 1);
            StringBuilder sb = new StringBuilder();
            String[] splits = result.split("(?<!\\\\)\"");
            for (int i = 1; i < splits.length; i += 8)
                sb.append(splits[i]);
            return sb.toString().replace("\\n", "\n").replaceAll("\\\\(.)", "$1");
        }
 
 
    }
 

[/code]

 

Bu classın haricinde bir de şöyle bir interface oluşturun:

[code]

public interface TranslateCallback {
    public void onSuccess(String result);
}

 

[/code]

 

onCreate metodunda da şu şekilde çağırabilirsiniz:

 [code]

new TranslateAsyncTask(new TranslateCallback() {
                    
                    @Override
                    public void onSuccess(String result) {
                        resultTV.setText(result);
                        
                    }
                }).execute(text.getText().toString());

[/code]

resultTV kullandığım textview, text de kullandığım edittext. Bu haliyle textte yazılan stringi türkçeden ingilizceye çevirip resultTV'ye gönderiyor. Kendinize göre düzenleyip kullanabilirsiniz. Kolay gelsin.

Mahmut Karali
08.02.2016 - 12:15
Proje şeklinde paylaşırmısınız ? Derlediğim de sorunlarla karşılaşıyorum .
picture-17814-1407156806.jpg
serdarbuyukkanli
10.08.2014 - 11:52

Denedim ama çalıştıramadım. Google'ınkinin ücretli olduğunu okumuştum, bu şekilde kullanabilir miyim ya da herhangi kişisel bi key ya da onun gibi bi şey almam mı gerekir?

Ahmet Burak Demirkoparan
10.08.2014 - 11:57
Internet permissionunu verdiniz mi? Hata vs veriyor mu nasil cagiriyosunuz
picture-1372-1408467635.jpg
ahmtbrk
10.08.2014 - 10:02

[code]

public class TranslateAsyncTask extends AsyncTask<String, Void, String> {
    
    protected void onPostExecute(String result) {
        // sonucu buraya geliyor string olarak
    }

    @Override
    protected String doInBackground(String... params) {
        String result = new String();
        try {
            result += mTranslateData(params[0],"tr","en");
        } catch (IOException e) {
            Log.e("Hata", e.getLocalizedMessage());
        }
        return result;
    }
    
    public String mTranslateData(String text,String to,String from) throws IOException {
        URL url = new URL("http://translate.google.com.tw/translate_a/t?client=t&hl="+from+"&sl="+to+"&tl=en&ie=UTF-8&oe=UTF-8&multires=1&oc=1&otf=2&ssel=0&tsel=0&sc=1&q="+ URLEncoder.encode(text, "UTF-8"));
        URLConnection urlConnection = url.openConnection();
        urlConnection.setRequestProperty("User-Agent", "Something Else");
        BufferedReader br = new BufferedReader(new InputStreamReader(
                urlConnection.getInputStream()));
        String result = br.readLine();
        br.close();

        result = result.substring(2, result.indexOf("]]") + 1);
        StringBuilder sb = new StringBuilder();
        String[] splits = result.split("(?<!\\\\)\"");
        for (int i = 1; i < splits.length; i += 8)
            sb.append(splits[i]);
        return sb.toString().replace("\\n", "\n").replaceAll("\\\\(.)", "$1");
    }

}

[/code]

buyur.asynctask içerisinde doInBackground methodu içinde translate yapan methodu çağırıyorum.

ilk parametre hangi dilden

ikinci parametre ise hangi dile çevrim olacak.

senin için bu şekilde düzenledim.

iyi calısmalar.

Barış
01.09.2014 - 12:48
Rica etsem kodu biraz daha açıklar mısın? Mesela çevirisi yapılacak stringi nereye yazıyoruz? ve bir başka sınıftan bu sınıfı nasıl çalıştırırım? Teşekkürler