19 package org.sleuthkit.autopsy.texttranslation.translators;
21 import com.google.auth.Credentials;
22 import com.google.auth.oauth2.ServiceAccountCredentials;
23 import com.google.cloud.translate.Translate;
24 import com.google.cloud.translate.TranslateOptions;
25 import com.google.cloud.translate.Translation;
26 import java.awt.Component;
27 import java.io.FileInputStream;
28 import java.io.FileNotFoundException;
29 import java.io.IOException;
30 import java.io.InputStream;
31 import java.net.InetAddress;
32 import java.net.UnknownHostException;
33 import java.util.logging.Level;
34 import java.util.logging.Logger;
35 import org.apache.commons.lang3.StringUtils;
36 import org.openide.util.NbBundle.Messages;
37 import org.openide.util.lookup.ServiceProvider;
46 @ServiceProvider(service = TextTranslator.class)
51 private static final int MAX_PAYLOAD_SIZE = 5000;
71 String host =
"www.google.com";
74 address = InetAddress.getByName(host);
75 return address.isReachable(1500);
76 }
catch (UnknownHostException ex) {
77 logger.log(Level.WARNING,
"Unable to reach google.com due to unknown host", ex);
79 }
catch (IOException ex) {
80 logger.log(Level.WARNING,
"Unable to reach google.com due IOException", ex);
87 if (!googleIsReachable()) {
88 throw new TranslationException(
"Failure translating using GoogleTranslator: Cannot connect to Google");
91 if (googleTranslate != null) {
94 String substring =
string.trim();
98 substring = substring.replaceAll(
"(\r\n|\n)",
"<br />");
106 if (substring.length() > MAX_PAYLOAD_SIZE) {
107 substring = substring.substring(0, MAX_PAYLOAD_SIZE);
109 Translation translation
110 = googleTranslate.translate(substring);
111 String translatedString = translation.getTranslatedText();
114 translatedString = translatedString.replaceAll(
"<br />",
"\n");
119 return translatedString;
120 }
catch (Throwable ex) {
125 throw new TranslationException(
"Google Translator has not been configured, credentials need to be specified");
129 @Messages({
"GoogleTranslator.name.text=Google Translate"})
132 return Bundle.GoogleTranslator_name_text();
137 return settingsPanel;
145 InputStream credentialStream = null;
146 Credentials creds = null;
147 if (StringUtils.isBlank(settings.getCredentialPath())) {
148 logger.log(Level.INFO,
"No credentials file has been provided for Google Translator");
151 credentialStream =
new FileInputStream(settings.getCredentialPath());
152 }
catch (FileNotFoundException ex) {
153 logger.log(Level.WARNING,
"JSON file for GoogleTranslator credentials not found", ex);
156 if (credentialStream != null) {
158 creds = ServiceAccountCredentials.fromStream(credentialStream);
159 }
catch (IOException ex) {
160 logger.log(Level.WARNING,
"Error converting JSON file to Credentials object for GoogleTranslator", ex);
164 logger.log(Level.WARNING,
"Credentials were not successfully made, no translations will be available from the GoogleTranslator");
165 googleTranslate = null;
167 TranslateOptions.Builder builder = TranslateOptions.newBuilder();
168 builder.setCredentials(creds);
169 builder.setTargetLanguage(settings.getTargetLanguageCode());
170 googleTranslate = builder.build().getService();
176 settings.setTargetLanguageCode(settingsPanel.getTargetLanguageCode());
177 settings.setCredentialPath(settingsPanel.getCredentialsPath());
178 settings.saveSettings();
184 return MAX_PAYLOAD_SIZE;
static String unEscapeHtml(String toUnescape)
String translate(String string)
static boolean googleIsReachable()
Translate googleTranslate
final GoogleTranslatorSettingsPanel settingsPanel