DeepJ/src/main/java/tech/nevets/deepj/Translator.java

113 lines
4.5 KiB
Java

package tech.nevets.deepj;
import org.json.JSONArray;
import org.json.JSONObject;
import java.io.IOException;
import java.net.URI;
import java.net.URLEncoder;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
public class Translator {
//TODO TEST CLASS
public static String globalAuthKey = "null";
public static void setGlobalAuthKey(String key) {
this.globalAuthKey = key;
}
private Request request;
public Translator() {
if (globalAuthKey == null) {
System.out.println("\n[DeepJ] You are currently using the Global Auth Key Translator Constructor." +
"\n[DeepJ] If you are trying to use global auth keys, Call the method \"Translator.setGlobalAuthKey(String key)\" and then re-use this contructor." +
"\n[DeepJ] If you want to define an different authkey every time do: \"new Translator(String authKey)\"\n");
} else {
request = new request(globalAuthKey);
}
}
public Translator(@NotNull String authKey) {
if (globalAuthKey != "null") {
System.out.println("[DeepJ] Looks like you have defined a global auth key already! You can use if by just typing \"new Traslator()\"" +
"\n instead of \"new Translator(String authKey)\". NOTE: This will work but just some advice :)");
}
request = new Request(authKey);
}
public Translator(@NotNull String authKey, @NotNull boolean silence) {
if (globalAuthKey != "null" && silence == false) {
System.out.println("[DeepJ] Looks like you have defined a global auth key already! You can use if by just typing \"new Traslator()\"" +
"\n instead of \"new Translator(String authKey)\". NOTE: This will work but just some advice :)");
}
request = new Request(authKey);
}
public String translate(Language langToTranslateTo, String sourceMessage) {
String response = "Error processing request";
try {
response = request.queryAPI(langToTranslateTo, sourceMessage);
} catch (IOException | InterruptedException e) {
System.out.println(response);
e.printStackTrace();
}
String message = "Error Processing Request";
JSONObject jsonObject = new JSONObject(response);
JSONArray jsonArray = jsonObject.getJSONArray("translations");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject1 = jsonArray.getJSONObject(i);
message = jsonObject.getString("text");
}
return message;
}
protected static class Request {
private final String authKey;
public Request(String authKey) {
this.authKey = authKey;
}
public String queryAPI(Language langEnum, String message) throws IOException, InterruptedException {
String encodedAuthKey = URLEncoder.encode(authKey, StandardCharsets.UTF_8);
String encodedMessage = URLEncoder.encode(message, StandardCharsets.UTF_8);
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder().GET()
.header("Accept","*/*")
.header("Content-Type", "application/x-www-form-urlencoded")
.uri(URI.create("https://api-free.deepl.com/v2/translate?auth_key=" + encodedAuthKey + "&target_lang=" + langEnum.getApiString() + "&text=" + encodedMessage)).build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
return response.body();
}
}
public enum Language {
Bulgarian("BG"),
Czech("CS"),
Danish("DA"),
German("DE"),
Greek("EL"),
EnglishUK("EN-GB"),
EnglishUS("EN-US"),
Spanish("ES"),
Estonian("ET"),
Finish("FI"),
French("FR"),
Hungarian("HU"),
Italian("IT"),
Japanese("JA"),
Lithuanian("LT"),
Latvian("LV"),
Dutch("NL"),
Polish("PL"),
PortugueseBrazil("PT-BR"),
PortuguesePortugal("PT-PT"),
Romanian("RO"),
Russian("RU"),
Slovak("SK"),
Slovenian("SL"),
Swedish("SV"),
Chinese("ZH");
private final String apiString;
Language(String apiString) {
this.apiString = apiString;
}
public String getApiString() {
return this.apiString;
}
}
}