package org.dbpedia.mappings.missingbot.translate.google;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.translate.Translate;
import com.google.api.services.translate.TranslateRequestInitializer;
import com.google.api.services.translate.model.LanguagesListResponse;
import com.google.api.services.translate.model.LanguagesResource;
import com.google.api.services.translate.model.TranslationsListResponse;
import com.google.api.services.translate.model.TranslationsResource;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.*;
/**
* Created by peterr on 05.06.14.
*/
public class TranslateLabel {
/** Global instance of the HTTP transport. */
private HttpTransport httpTransport;
private Translate client;
private static final String src_lang = "en";
public TranslateLabel(String api_key, String app_name) throws IOException {
try {
httpTransport = GoogleNetHttpTransport.newTrustedTransport();
} catch (GeneralSecurityException e) {
e.printStackTrace();
}
JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
// set up global Translate instance
client = new Translate.Builder(httpTransport, JSON_FACTORY, null)
.setGoogleClientRequestInitializer(new TranslateRequestInitializer(api_key))
.setApplicationName(app_name).build();
}
public List<String> getLanguages() throws IOException {
Translate.Languages.List request = client.languages().list();
LanguagesListResponse langs = request.execute();
List<LanguagesResource> c = langs.getLanguages();
List<String> result = new ArrayList<String>();
for (LanguagesResource d : c){
result.add(d.getLanguage());
}
return result;
}
public Map<String, String> translate(List<String> labels, String lang) throws IOException {
Translate.Translations.List request = client.translations().list(labels, lang);
// set source language
request.setSource(src_lang);
TranslationsListResponse resp = request.execute();
List<TranslationsResource> res = resp.getTranslations();
Map<String, String> result = new HashMap<String, String>();
for (int i = 0; i < labels.size(); i++) {
result.put(labels.get(i), res.get(i).getTranslatedText());
}
return result;
}
public String translate(String label, String lang) throws IOException {
List<String> labels = new LinkedList<String>();
labels.add(label);
Map<String, String> res = this.translate(labels, lang);
return res.get(label);
}
}