package io.klerch.alexa.translator.skill.translate; import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.json.gson.GsonFactory; import com.google.api.services.translate.Translate; import com.google.api.services.translate.model.TranslationsListResponse; import io.klerch.alexa.translator.skill.SkillConfig; import org.apache.commons.lang3.StringEscapeUtils; import java.io.IOException; import java.security.GeneralSecurityException; import java.util.Collections; import java.util.logging.Level; import java.util.logging.Logger; public class GoogleTranslator extends AbstractTranslator { private static Logger log = Logger.getLogger(GoogleTranslator.class.getName()); private Translate translator; public GoogleTranslator(final String locale) { super(locale, "/languages-google.yml"); try { this.translator = new Translate.Builder( GoogleNetHttpTransport.newTrustedTransport(), GsonFactory.getDefaultInstance(), null) .setApplicationName(SkillConfig.getGoogleProjectName()) .build(); } catch (final GeneralSecurityException | IOException ex) { log.log(Level.SEVERE, null, ex); } } @Override public String doTranslate(final String text, final String targetLanguageCode) { if (targetLanguageCode.equalsIgnoreCase(sourceLanguageCode)) { return text; } try { final Translate.Translations.List list = translator.new Translations().list( Collections.singletonList(text), targetLanguageCode); list.setKey(SkillConfig.getGoogleApiKey()); list.setSource(sourceLanguageCode); final TranslationsListResponse response = list.execute(); if (!response.isEmpty() && !response.getTranslations().isEmpty()) { return StringEscapeUtils.unescapeHtml4(response.getTranslations().get(0).getTranslatedText()); } } catch (IOException e) { log.severe(e.getMessage()); } return null; } }