19 package org.sleuthkit.autopsy.texttranslation.translators;
21 import com.google.gson.JsonArray;
22 import com.google.gson.JsonObject;
23 import com.google.gson.JsonParser;
25 import java.io.IOException;
26 import javax.swing.JPanel;
27 import okhttp3.MediaType;
28 import okhttp3.OkHttpClient;
29 import okhttp3.Request;
30 import okhttp3.RequestBody;
31 import okhttp3.Response;
32 import org.openide.util.NbBundle.Messages;
33 import org.openide.util.lookup.ServiceProvider;
49 private static final String BASE_URL =
"https://api.cognitive.microsofttranslator.com/translate?api-version=3.0&to=";
50 private static final int MAX_STRING_LENGTH = 5000;
54 private final OkHttpClient CLIENT =
new OkHttpClient();
72 static String getTranlatorUrl(String languageCode) {
73 return BASE_URL + languageCode;
88 MediaType mediaType = MediaType.parse(
"application/json");
90 JsonArray jsonArray =
new JsonArray();
91 JsonObject jsonObject =
new JsonObject();
92 jsonObject.addProperty(
"Text",
string);
93 jsonArray.add(jsonObject);
94 String bodyString = jsonArray.toString();
96 RequestBody body = RequestBody.create(mediaType,
98 Request request =
new Request.Builder()
99 .url(getTranlatorUrl(settings.getTargetLanguageCode())).post(body)
100 .addHeader(
"Ocp-Apim-Subscription-Key", settings.getAuthenticationKey())
101 .addHeader(
"Content-type",
"application/json").build();
102 Response response = CLIENT.newCall(request).execute();
103 return response.body().string();
108 if (settings.getAuthenticationKey() == null || settings.getAuthenticationKey().isEmpty()) {
109 throw new TranslationException(
"Bing Translator has not been configured, authentication key needs to be specified");
111 String toTranslate =
string.trim();
119 if (toTranslate.length() > MAX_STRING_LENGTH) {
120 toTranslate = toTranslate.substring(0, MAX_STRING_LENGTH);
124 String response = postTranslationRequest(toTranslate);
125 return parseJSONResponse(response);
127 throw new TranslationException(
"Exception while attempting to translate using BingTranslator", ex);
131 @Messages({
"BingTranslator.name.text=Bing Translator"})
134 return Bundle.BingTranslator_name_text();
139 public JPanel getSettingsPanel() {
140 if(settingsPanel == null) {
143 return settingsPanel;
148 settings.setAuthenticationKey(settingsPanel.getAuthenticationKey());
149 settings.setTargetLanguageCode(settingsPanel.getTargetLanguageCode());
150 settings.saveSettings();
170 JsonArray responses = JsonParser.parseString(json_text).getAsJsonArray();
172 JsonObject response0 = responses.get(0).getAsJsonObject();
173 JsonArray translations = response0.getAsJsonArray(
"translations");
174 JsonObject translation0 = translations.get(0).getAsJsonObject();
175 return translation0.get(
"text").getAsString();
176 }
catch (IllegalStateException | ClassCastException | NullPointerException | IndexOutOfBoundsException e) {
183 return MAX_STRING_LENGTH;
BingTranslatorSettingsPanel settingsPanel
String translate(String string)
String postTranslationRequest(String string)
String parseJSONResponse(String json_text)