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;
24 import com.squareup.okhttp.MediaType;
25 import com.squareup.okhttp.OkHttpClient;
26 import com.squareup.okhttp.Request;
27 import com.squareup.okhttp.RequestBody;
28 import com.squareup.okhttp.Response;
29 import java.awt.Component;
30 import java.io.IOException;
31 import org.openide.util.NbBundle.Messages;
32 import org.openide.util.lookup.ServiceProvider;
46 private static final String BASE_URL =
"https://api.cognitive.microsofttranslator.com/translate?api-version=3.0&to=";
47 private static final int MAX_STRING_LENGTH = 5000;
51 private final OkHttpClient CLIENT =
new OkHttpClient();
69 static String getTranlatorUrl(String languageCode) {
70 return BASE_URL + languageCode;
85 MediaType mediaType = MediaType.parse(
"application/json");
87 JsonArray jsonArray =
new JsonArray();
88 JsonObject jsonObject =
new JsonObject();
89 jsonObject.addProperty(
"Text",
string);
90 jsonArray.add(jsonObject);
91 String bodyString = jsonArray.toString();
93 RequestBody body = RequestBody.create(mediaType,
95 Request request =
new Request.Builder()
96 .url(getTranlatorUrl(settings.getTargetLanguageCode())).post(body)
97 .addHeader(
"Ocp-Apim-Subscription-Key", settings.getAuthenticationKey())
98 .addHeader(
"Content-type",
"application/json").build();
99 Response response = CLIENT.newCall(request).execute();
100 return response.body().string();
105 if (settings.getAuthenticationKey() == null || settings.getAuthenticationKey().isEmpty()) {
106 throw new TranslationException(
"Bing Translator has not been configured, authentication key needs to be specified");
108 String toTranslate =
string.trim();
116 if (toTranslate.length() > MAX_STRING_LENGTH) {
117 toTranslate = toTranslate.substring(0, MAX_STRING_LENGTH);
121 String response = postTranslationRequest(toTranslate);
122 return parseJSONResponse(response);
124 throw new TranslationException(
"Exception while attempting to translate using BingTranslator", ex);
128 @Messages({
"BingTranslator.name.text=Bing Translator"})
131 return Bundle.BingTranslator_name_text();
136 return settingsPanel;
141 settings.setAuthenticationKey(settingsPanel.getAuthenticationKey());
142 settings.setTargetLanguageCode(settingsPanel.getTargetLanguageCode());
143 settings.saveSettings();
162 JsonParser parser =
new JsonParser();
164 JsonArray responses = parser.parse(json_text).getAsJsonArray();
166 JsonObject response0 = responses.get(0).getAsJsonObject();
167 JsonArray translations = response0.getAsJsonArray(
"translations");
168 JsonObject translation0 = translations.get(0).getAsJsonObject();
169 return translation0.get(
"text").getAsString();
170 }
catch (IllegalStateException | ClassCastException | NullPointerException | IndexOutOfBoundsException e) {
177 return MAX_STRING_LENGTH;
final BingTranslatorSettingsPanel settingsPanel
String translate(String string)
String postTranslationRequest(String string)
String parseJSONResponse(String json_text)