From 864f9826ccaf3269de7168dc0e88edf109eaeea0 Mon Sep 17 00:00:00 2001 From: Sergey Ponomarev Date: Mon, 20 Oct 2025 14:48:16 +0300 Subject: [PATCH 01/12] Translator: add missing imports --- src/main/java/space/dynomake/libretranslate/Translator.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/space/dynomake/libretranslate/Translator.java b/src/main/java/space/dynomake/libretranslate/Translator.java index 5ed1521..b48e584 100644 --- a/src/main/java/space/dynomake/libretranslate/Translator.java +++ b/src/main/java/space/dynomake/libretranslate/Translator.java @@ -7,8 +7,10 @@ import space.dynomake.libretranslate.type.TranslateResponse; import space.dynomake.libretranslate.util.JsonUtil; import java.io.InputStream; +import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.*; +import java.nio.charset.StandardCharsets; import java.util.Scanner; @UtilityClass From 343c3bcf804f482032b10dbe22ffef12ca362ad4 Mon Sep 17 00:00:00 2001 From: Sergey Ponomarev Date: Mon, 20 Oct 2025 14:49:33 +0300 Subject: [PATCH 02/12] Translator: add User-Agent header --- src/main/java/space/dynomake/libretranslate/Translator.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/space/dynomake/libretranslate/Translator.java b/src/main/java/space/dynomake/libretranslate/Translator.java index b48e584..64a497c 100644 --- a/src/main/java/space/dynomake/libretranslate/Translator.java +++ b/src/main/java/space/dynomake/libretranslate/Translator.java @@ -35,6 +35,7 @@ public TranslateResponse translateDetect(@NonNull String from, @NonNull String t httpConn.setRequestProperty("accept", "application/json"); httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); + httpConn.setRequestProperty("User-Agent", "Mozilla/5.0"); httpConn.setDoOutput(true); From efb4638cb042f0f808410c05ed9d578301c185dd Mon Sep 17 00:00:00 2001 From: Sergey Ponomarev Date: Mon, 20 Oct 2025 14:56:16 +0300 Subject: [PATCH 03/12] Add .gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..abc78ba --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/.gradle/ +/build/ From 2a26f04f367ff3a69d215bfd481393c16e225d29 Mon Sep 17 00:00:00 2001 From: Sergey Ponomarev Date: Mon, 20 Oct 2025 14:55:37 +0300 Subject: [PATCH 04/12] JsonUtil: add from(Reader) --- .../java/space/dynomake/libretranslate/Translator.java | 9 ++------- .../space/dynomake/libretranslate/util/JsonUtil.java | 6 ++++++ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/main/java/space/dynomake/libretranslate/Translator.java b/src/main/java/space/dynomake/libretranslate/Translator.java index 64a497c..b788edf 100644 --- a/src/main/java/space/dynomake/libretranslate/Translator.java +++ b/src/main/java/space/dynomake/libretranslate/Translator.java @@ -11,7 +11,6 @@ import java.io.OutputStreamWriter; import java.net.*; import java.nio.charset.StandardCharsets; -import java.util.Scanner; @UtilityClass public class Translator { @@ -33,7 +32,7 @@ public TranslateResponse translateDetect(@NonNull String from, @NonNull String t HttpURLConnection httpConn = (HttpURLConnection) url.openConnection(); httpConn.setRequestMethod("POST"); - httpConn.setRequestProperty("accept", "application/json"); + httpConn.setRequestProperty("Accept", "application/json"); httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); httpConn.setRequestProperty("User-Agent", "Mozilla/5.0"); @@ -52,11 +51,7 @@ public TranslateResponse translateDetect(@NonNull String from, @NonNull String t InputStream responseStream = httpConn.getInputStream(); InputStreamReader reader = new InputStreamReader(responseStream, StandardCharsets.UTF_8); - - Scanner s = new Scanner(reader).useDelimiter("\\A"); - String response = s.hasNext() ? s.next() : ""; - - return JsonUtil.from(response, TranslateResponse.class); + return JsonUtil.from(reader, TranslateResponse.class); } catch (Exception e) { if (e instanceof RuntimeException) throw (RuntimeException) e; diff --git a/src/main/java/space/dynomake/libretranslate/util/JsonUtil.java b/src/main/java/space/dynomake/libretranslate/util/JsonUtil.java index 662de44..e6f9d61 100644 --- a/src/main/java/space/dynomake/libretranslate/util/JsonUtil.java +++ b/src/main/java/space/dynomake/libretranslate/util/JsonUtil.java @@ -4,6 +4,8 @@ import lombok.NonNull; import lombok.experimental.UtilityClass; +import java.io.Reader; + @UtilityClass public class JsonUtil { @@ -17,4 +19,8 @@ public String to(@NonNull Object object) { public T from(@NonNull String s, Class tClass) { return gson.fromJson(s, tClass); } + + public T from(@NonNull Reader reader, Class tClass) { + return gson.fromJson(reader, tClass); + } } From d73ab3bb4af53a422eaad260fe011f735d499f98 Mon Sep 17 00:00:00 2001 From: Sergey Ponomarev Date: Mon, 20 Oct 2025 15:10:22 +0300 Subject: [PATCH 05/12] Translator: don't print stack trace --- src/main/java/space/dynomake/libretranslate/Translator.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/space/dynomake/libretranslate/Translator.java b/src/main/java/space/dynomake/libretranslate/Translator.java index b788edf..c4671c2 100644 --- a/src/main/java/space/dynomake/libretranslate/Translator.java +++ b/src/main/java/space/dynomake/libretranslate/Translator.java @@ -55,8 +55,6 @@ public TranslateResponse translateDetect(@NonNull String from, @NonNull String t } catch (Exception e) { if (e instanceof RuntimeException) throw (RuntimeException) e; - - e.printStackTrace(); throw new RuntimeException(e); } } From db4e49bae7dc7ab2b3897c1efa89fb947220786a Mon Sep 17 00:00:00 2001 From: Sergey Ponomarev Date: Mon, 20 Oct 2025 15:17:23 +0300 Subject: [PATCH 06/12] Translator: improve error handling --- .../dynomake/libretranslate/Translator.java | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/main/java/space/dynomake/libretranslate/Translator.java b/src/main/java/space/dynomake/libretranslate/Translator.java index c4671c2..ccfb6bb 100644 --- a/src/main/java/space/dynomake/libretranslate/Translator.java +++ b/src/main/java/space/dynomake/libretranslate/Translator.java @@ -6,6 +6,8 @@ import space.dynomake.libretranslate.exception.BadTranslatorResponseException; import space.dynomake.libretranslate.type.TranslateResponse; import space.dynomake.libretranslate.util.JsonUtil; + +import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; @@ -26,10 +28,10 @@ public String translate(@NonNull String from, @NonNull String to, @NonNull Strin } public TranslateResponse translateDetect(@NonNull String from, @NonNull String to, @NonNull String request) { + HttpURLConnection httpConn = null; try { - URL url = new URL(urlApi); - HttpURLConnection httpConn = (HttpURLConnection) url.openConnection(); + httpConn = (HttpURLConnection) url.openConnection(); httpConn.setRequestMethod("POST"); httpConn.setRequestProperty("Accept", "application/json"); @@ -45,17 +47,26 @@ public TranslateResponse translateDetect(@NonNull String from, @NonNull String t writer.close(); httpConn.getOutputStream().close(); - if (!(httpConn.getResponseCode() / 100 == 2)) - throw new BadTranslatorResponseException(httpConn.getResponseCode(), urlApi); + // Check response code before reading + int responseCode = httpConn.getResponseCode(); + if (responseCode != HttpURLConnection.HTTP_OK) { + throw new BadTranslatorResponseException(responseCode, urlApi); + } InputStream responseStream = httpConn.getInputStream(); InputStreamReader reader = new InputStreamReader(responseStream, StandardCharsets.UTF_8); return JsonUtil.from(reader, TranslateResponse.class); + } catch (IOException e) { + throw new RuntimeException("Network error during translation", e); + } catch (RuntimeException e) { + throw e; } catch (Exception e) { - if (e instanceof RuntimeException) - throw (RuntimeException) e; - throw new RuntimeException(e); + throw new RuntimeException("Translation failed", e); + } finally { + if (httpConn != null) { + httpConn.disconnect(); + } } } From c054d8126b22c1108eaefecac3edb8115e8cd207 Mon Sep 17 00:00:00 2001 From: Sergey Ponomarev Date: Mon, 20 Oct 2025 15:21:50 +0300 Subject: [PATCH 07/12] Translator: use try with close --- .../dynomake/libretranslate/Translator.java | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/main/java/space/dynomake/libretranslate/Translator.java b/src/main/java/space/dynomake/libretranslate/Translator.java index ccfb6bb..9061946 100644 --- a/src/main/java/space/dynomake/libretranslate/Translator.java +++ b/src/main/java/space/dynomake/libretranslate/Translator.java @@ -7,12 +7,15 @@ import space.dynomake.libretranslate.type.TranslateResponse; import space.dynomake.libretranslate.util.JsonUtil; +import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.*; -import java.nio.charset.StandardCharsets; + +import static java.nio.charset.StandardCharsets.UTF_8; @UtilityClass public class Translator { @@ -40,12 +43,14 @@ public TranslateResponse translateDetect(@NonNull String from, @NonNull String t httpConn.setDoOutput(true); - OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream()); - - writer.write("q=" + URLEncoder.encode(request, "UTF-8") + "&source=" + from + "&api_key=" + apiKey + "&target=" + to + "&format=text"); - writer.flush(); - writer.close(); - httpConn.getOutputStream().close(); + // Build request body + String requestBody = "q=" + URLEncoder.encode(request, "UTF-8") + "&source=" + from + "&target=" + to + "&format=text"; + // Write request + try (OutputStream outputStream = httpConn.getOutputStream(); + OutputStreamWriter writer = new OutputStreamWriter(outputStream, UTF_8)) { + writer.write(requestBody); + writer.flush(); + } // Check response code before reading int responseCode = httpConn.getResponseCode(); @@ -53,10 +58,10 @@ public TranslateResponse translateDetect(@NonNull String from, @NonNull String t throw new BadTranslatorResponseException(responseCode, urlApi); } - InputStream responseStream = httpConn.getInputStream(); - - InputStreamReader reader = new InputStreamReader(responseStream, StandardCharsets.UTF_8); - return JsonUtil.from(reader, TranslateResponse.class); + try (InputStream responseStream = httpConn.getInputStream(); + BufferedReader reader = new BufferedReader(new InputStreamReader(responseStream, UTF_8))) { + return JsonUtil.from(reader, TranslateResponse.class); + } } catch (IOException e) { throw new RuntimeException("Network error during translation", e); } catch (RuntimeException e) { From 4c734bc99675cc69b67ee933db8316bf6d60e12d Mon Sep 17 00:00:00 2001 From: Sergey Ponomarev Date: Mon, 20 Oct 2025 15:30:35 +0300 Subject: [PATCH 08/12] Translator: disable cache and add timeouts By default, the HTTP client has a zero timeout, which means wait forever. --- .../java/space/dynomake/libretranslate/Translator.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/space/dynomake/libretranslate/Translator.java b/src/main/java/space/dynomake/libretranslate/Translator.java index 9061946..33deef8 100644 --- a/src/main/java/space/dynomake/libretranslate/Translator.java +++ b/src/main/java/space/dynomake/libretranslate/Translator.java @@ -26,6 +26,12 @@ public class Translator { @Setter private String apiKey = "unknown"; + @Setter + private static int connectTimeout = 5000; // 5 seconds + + @Setter + private static int readTimeout = 5000; + public String translate(@NonNull String from, @NonNull String to, @NonNull String request) { return translateDetect(from, to, request).getTranslatedText(); } @@ -35,6 +41,9 @@ public TranslateResponse translateDetect(@NonNull String from, @NonNull String t try { URL url = new URL(urlApi); httpConn = (HttpURLConnection) url.openConnection(); + httpConn.setConnectTimeout(connectTimeout); + httpConn.setReadTimeout(readTimeout); + httpConn.setUseCaches(false); httpConn.setRequestMethod("POST"); httpConn.setRequestProperty("Accept", "application/json"); From fbdb8e3ca97a75421aaebd3c3b6e973872b9c00b Mon Sep 17 00:00:00 2001 From: Sergey Ponomarev Date: Mon, 20 Oct 2025 15:36:56 +0300 Subject: [PATCH 09/12] Add list of known API providers --- .../space/dynomake/libretranslate/ApiProviders.java | 11 +++++++++++ .../space/dynomake/libretranslate/Translator.java | 4 +++- 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 src/main/java/space/dynomake/libretranslate/ApiProviders.java diff --git a/src/main/java/space/dynomake/libretranslate/ApiProviders.java b/src/main/java/space/dynomake/libretranslate/ApiProviders.java new file mode 100644 index 0000000..c5dc79a --- /dev/null +++ b/src/main/java/space/dynomake/libretranslate/ApiProviders.java @@ -0,0 +1,11 @@ +package space.dynomake.libretranslate; + +public class ApiProviders { + public static final String API_URL_FEDILAB = "https://translate.fedilab.app/translate"; + public static final String API_URL_LIBRETRANSLATE = "https://libretranslate.com/translate"; + + public static final String[] API_URLS = new String[]{ + API_URL_FEDILAB, + API_URL_LIBRETRANSLATE + }; +} diff --git a/src/main/java/space/dynomake/libretranslate/Translator.java b/src/main/java/space/dynomake/libretranslate/Translator.java index 33deef8..632d69e 100644 --- a/src/main/java/space/dynomake/libretranslate/Translator.java +++ b/src/main/java/space/dynomake/libretranslate/Translator.java @@ -16,12 +16,14 @@ import java.net.*; import static java.nio.charset.StandardCharsets.UTF_8; +import static space.dynomake.libretranslate.ApiProviders.API_URL_FEDILAB; @UtilityClass public class Translator { + @Setter - private String urlApi = "https://translate.fedilab.app/translate"; + private String urlApi = API_URL_FEDILAB; @Setter private String apiKey = "unknown"; From a5b86cf9c86a864adaeccbab27b219f81a6bc263 Mon Sep 17 00:00:00 2001 From: Sergey Ponomarev Date: Mon, 20 Oct 2025 15:39:20 +0300 Subject: [PATCH 10/12] Language enum: put NONE at the beginning --- src/main/java/space/dynomake/libretranslate/Language.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/space/dynomake/libretranslate/Language.java b/src/main/java/space/dynomake/libretranslate/Language.java index de51a1a..5e1dbc9 100644 --- a/src/main/java/space/dynomake/libretranslate/Language.java +++ b/src/main/java/space/dynomake/libretranslate/Language.java @@ -12,6 +12,7 @@ @FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true) public enum Language { + NONE("none"), RUSSIAN("ru"), ENGLISH("en"), ARABIC("ar"), @@ -41,8 +42,7 @@ public enum Language { SPANISH("es"), SWEDISH("sv"), TURKISH("tr"), - UKRAINIAN("uk"), - NONE("none") + UKRAINIAN("uk") ; String code; From bdf73d53882a9432852a87006b5878b1dee7bee0 Mon Sep 17 00:00:00 2001 From: Sergey Ponomarev Date: Mon, 20 Oct 2025 17:12:25 +0300 Subject: [PATCH 11/12] Language enum: add Name and missing enums --- .../dynomake/libretranslate/Language.java | 88 ++++++++++++------- 1 file changed, 57 insertions(+), 31 deletions(-) diff --git a/src/main/java/space/dynomake/libretranslate/Language.java b/src/main/java/space/dynomake/libretranslate/Language.java index 5e1dbc9..3a6e664 100644 --- a/src/main/java/space/dynomake/libretranslate/Language.java +++ b/src/main/java/space/dynomake/libretranslate/Language.java @@ -12,40 +12,66 @@ @FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true) public enum Language { - NONE("none"), - RUSSIAN("ru"), - ENGLISH("en"), - ARABIC("ar"), - AZERBAIJANI("az"), - CATALAN("ca"), - CHINESE("zh"), - CZECH("cs"), - DANISH("da"), - DUTCH("nl"), - ESPERANTO("eo"), - FINNISH("fi"), - FRENCH("fr"), - GERMAN("de"), - GREEK("el"), - HEBREW("he"), - HINDI("hi"), - HUNGARIAN("hu"), - INDONESIAN("id"), - IRISH("ga"), - ITALIAN("it"), - JAPANESE("ja"), - KOREAN("ko"), - PERSIAN("fa"), - POLISH("pl"), - PORTUGUESE("pt"), - SLOVAK("sk"), - SPANISH("es"), - SWEDISH("sv"), - TURKISH("tr"), - UKRAINIAN("uk") + NONE("none", "No translation"), + + ENGLISH("en", "English"), + ALBANIAN("sq", "Albanian"), + ARABIC("ar", "Arabic"), + AZERBAIJANI("az", "Azerbaijani"), + BASQUE("eu", "Basque"), + BENGALI("bn", "Bengali"), + BULGARIAN("bg", "Bulgarian"), + CATALAN("ca", "Catalan"), + CHINESE("zh-Hans", "Chinese"), + CHINESE_TRADITIONAL("zh-Hant", "Chinese (traditional)"), + CZECH("cs", "Czech"), + DANISH("da", "Danish"), + DUTCH("nl", "Dutch"), + ESPERANTO("eo", "Esperanto"), + ESTONIAN("et", "Estonian"), + FINNISH("fi", "Finnish"), + FRENCH("fr", "French"), + GALICIAN("gl", "Galician"), + GERMAN("de", "German"), + GREEK("el", "Greek"), + HEBREW("he", "Hebrew"), + HINDI("hi", "Hindi"), + HUNGARIAN("hu", "Hungarian"), + INDONESIAN("id", "Indonesian"), + IRISH("ga", "Irish"), + ITALIAN("it", "Italian"), + JAPANESE("ja", "Japanese"), + KABYLE("kab", "Kabyle"), + KOREAN("ko", "Korean"), + KYRGYZ("ky", "Kyrgyz"), + LATVIAN("lv", "Latvian"), + LITHUANIAN("lt", "Lithuanian"), + MALAY("ms", "Malay"), + NORWEGIAN("nb", "Norwegian"), + PERSIAN("fa", "Persian"), + POLISH("pl", "Polish"), + PORTUGUESE("pt", "Portuguese"), + PORTUGUESE_BRAZIL("pt-BR", "Portuguese (Brazil)"), + ROMANIAN("ro", "Romanian"), + RUSSIAN("ru", "Russian"), + SLOVAK("sk", "Slovak"), + SLOVENIAN("sl", "Slovenian"), + SPANISH("es", "Spanish"), + SWEDISH("sv", "Swedish"), + TAGALOG("tl", "Tagalog"), + THAI("th", "Thai"), + TURKISH("tr", "Turkish"), + UKRANIAN("uk", "Ukranian"), + URDU("ur", "Urdu"), ; String code; + String name; + + @Override + public String toString() { + return name; + } public static Language fromCode(String code) { return Arrays.stream(Language.values()) From 559e6438243da2657997a5ae09fe473e6787b3d6 Mon Sep 17 00:00:00 2001 From: Sergey Ponomarev Date: Mon, 20 Oct 2025 17:21:47 +0300 Subject: [PATCH 12/12] Get list of supported languages --- .../dynomake/libretranslate/Translator.java | 53 +++++++++++++++++++ .../libretranslate/type/LanguageTargets.java | 19 +++++++ .../type/TranslateResponse.java | 3 ++ .../space/dynomake/libretranslate/Test.java | 10 +++- 4 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 src/main/java/space/dynomake/libretranslate/type/LanguageTargets.java diff --git a/src/main/java/space/dynomake/libretranslate/Translator.java b/src/main/java/space/dynomake/libretranslate/Translator.java index 632d69e..abee63b 100644 --- a/src/main/java/space/dynomake/libretranslate/Translator.java +++ b/src/main/java/space/dynomake/libretranslate/Translator.java @@ -4,6 +4,7 @@ import lombok.Setter; import lombok.experimental.UtilityClass; import space.dynomake.libretranslate.exception.BadTranslatorResponseException; +import space.dynomake.libretranslate.type.LanguageTargets; import space.dynomake.libretranslate.type.TranslateResponse; import space.dynomake.libretranslate.util.JsonUtil; @@ -99,4 +100,56 @@ public String translate(@NonNull Language to, @NonNull String request) { if (to == Language.NONE) return request; return translate("auto", to.getCode(), request); } + + + /** + * Get supported languages for translation + * @param displayLanguage specify language for Name field. E.g. when "ru" then en lang Name will be "английский" + * @return an array of languages and target languages to which they can be translated + */ + public LanguageTargets[] supportedLanguages(String displayLanguage) { + HttpURLConnection httpConn = null; + try { + String languagesApi = getApiBaseUrl() + "/languages"; + URL url = new URL(languagesApi); + httpConn = (HttpURLConnection) url.openConnection(); + httpConn.setConnectTimeout(connectTimeout); + httpConn.setReadTimeout(readTimeout); + httpConn.setUseCaches(false); + httpConn.setRequestMethod("GET"); + + if (displayLanguage != null) { + httpConn.setRequestProperty("Accept-Language", displayLanguage); + } + httpConn.setRequestProperty("Accept", "application/json"); + httpConn.setRequestProperty("User-Agent", "Mozilla/5.0"); + + + // Check response code before reading + int responseCode = httpConn.getResponseCode(); + if (responseCode != HttpURLConnection.HTTP_OK) { + throw new BadTranslatorResponseException(responseCode, languagesApi); + } + + try (InputStream responseStream = httpConn.getInputStream(); + BufferedReader reader = new BufferedReader(new InputStreamReader(responseStream, UTF_8))) { + return JsonUtil.from(reader, LanguageTargets[].class); + } + } catch (IOException e) { + throw new RuntimeException("Network error during translation", e); + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new RuntimeException("Translation failed", e); + } finally { + if (httpConn != null) { + httpConn.disconnect(); + } + } + } + + private String getApiBaseUrl() { + return urlApi.substring(0, urlApi.length() - "/translate".length()); + } + } diff --git a/src/main/java/space/dynomake/libretranslate/type/LanguageTargets.java b/src/main/java/space/dynomake/libretranslate/type/LanguageTargets.java new file mode 100644 index 0000000..967e7a0 --- /dev/null +++ b/src/main/java/space/dynomake/libretranslate/type/LanguageTargets.java @@ -0,0 +1,19 @@ +package space.dynomake.libretranslate.type; + +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.ToString; +import lombok.experimental.FieldDefaults; + +import java.util.List; + +@ToString +@Getter +@AllArgsConstructor +@FieldDefaults(level = AccessLevel.PRIVATE) +public class LanguageTargets { + String code; + String name; + List targets; +} diff --git a/src/main/java/space/dynomake/libretranslate/type/TranslateResponse.java b/src/main/java/space/dynomake/libretranslate/type/TranslateResponse.java index 46d0c8f..b13dfdd 100644 --- a/src/main/java/space/dynomake/libretranslate/type/TranslateResponse.java +++ b/src/main/java/space/dynomake/libretranslate/type/TranslateResponse.java @@ -3,8 +3,10 @@ import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; +import lombok.ToString; import lombok.experimental.FieldDefaults; +@ToString @Getter @AllArgsConstructor @FieldDefaults(level = AccessLevel.PRIVATE) @@ -13,6 +15,7 @@ public class TranslateResponse { DetectedLanguage detectedLanguage; + @ToString @Getter @AllArgsConstructor @FieldDefaults(level = AccessLevel.PRIVATE) diff --git a/src/test/java/space/dynomake/libretranslate/Test.java b/src/test/java/space/dynomake/libretranslate/Test.java index d8e18a6..7dba0e9 100644 --- a/src/test/java/space/dynomake/libretranslate/Test.java +++ b/src/test/java/space/dynomake/libretranslate/Test.java @@ -1,9 +1,17 @@ package space.dynomake.libretranslate; +import space.dynomake.libretranslate.type.LanguageTargets; + +import static java.util.Arrays.asList; + public class Test { public static void main(String[] args) { - System.out.println(Translator.translate(Language.ENGLISH, "Для примера, переведем текст с русского на английский и выведем в консоль:")); + String translated = Translator.translate(Language.ENGLISH, "Для примера, переведем текст с русского на английский и выведем в консоль:"); + System.out.println(translated); + // Print a list of supported languages for translation + LanguageTargets[] supportedLanguages = Translator.supportedLanguages("en"); + System.out.println(asList(supportedLanguages)); } }