Witam. Potrzebuję do swojego programu tłumacza słów - słów nie całych zdań. Znacie może jakieś darmowe gotowe do tego api / klasy / biblioteki ? Zależy mi na kilku najpopularniejszych językach no i + polski ;] - może jest jakiś popularny plikowy format w którym mogłabym ściągnąć i zaimportować kilka słowników?
korzystając z internetu napisałam sobie coś takiego:
import org.apache.commons.io.IOUtils;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
enum Language {
PL ("pl"),
EN ("en"),
ES ("es"),
FR ("fr"),
PT ("pl"),
DE ("de");
private final String languageName;
private Language(String languageName) {
this.languageName = languageName;
}
@Override
public String toString() {
return languageName;
}
}
public class Translator {
private final String engineURL = "http://api.mymemory.translated.net/get?q=";
private String text;
private Language from, to;
public Translator(Language from, Language to) {
this.to = to;
this.from = from;
}
private URL prepareURL() throws UnsupportedEncodingException, MalformedURLException {
String restUrl = engineURL + URLEncoder.encode(text,"UTF-8") +
"&langpair="+from.toString()+"|"+to.toString();
return new URL(restUrl);
}
public String execute(String text) throws IOException {
this.text = text;
HttpURLConnection conn = null;
String translatedText = "";
try {
URL url = prepareURL();
conn = (HttpURLConnection) url.openConnection();
if(conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
conn.disconnect();
return "";
}
String page = IOUtils.toString(conn.getInputStream());
JSONObject obj = new JSONObject(page);
translatedText = obj.getJSONObject("responseData").getString("translatedText");
} catch (UnsupportedEncodingException | MalformedURLException uee) {
uee.printStackTrace();
} catch (JSONException | IOException je) {
je.printStackTrace();
System.out.println(je.getMessage());
} finally {
if(conn != null)
conn.disconnect();
}
return translatedText;
}
}
no ale, troszkę za wolno tłumaczy, ma jakieś limity i źle działa jeżeli jest słabe połączenie (sytuacja zasymulowana w ostatnich 4 linijkach, ale to akurat mały problem, bo mogę zrobić żeby wgl rezygnował z tłumaczenia jeżeli ma to zająć np. >2sec).
niezdecydowany