From 097bd0d83ea56fd28eb21c5e07004ed8946b2f0d Mon Sep 17 00:00:00 2001 From: loki5512344 Date: Sun, 4 Oct 2026 12:47:26 +0200 Subject: [PATCH] fix: translation service update --- .../lochat/translate/TranslationService.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/main/java/com/loki/lochat/translate/TranslationService.java b/src/main/java/com/loki/lochat/translate/TranslationService.java index 264a395..d9d320d 100644 --- a/src/main/java/com/loki/lochat/translate/TranslationService.java +++ b/src/main/java/com/loki/lochat/translate/TranslationService.java @@ -118,7 +118,13 @@ public class TranslationService { private String fetchTranslation(String text, String targetLang) { try { + DETECTED.remove(); String translation = doFetch(text, targetLang); + String detected = DETECTED.get(); + if (detected != null && sameLanguage(detected, targetLang)) { + // the message is already in the viewer's language: nothing to translate + translation = text; + } putCached(text, targetLang, translation); return translation; } catch (Exception e) { @@ -127,6 +133,8 @@ public class TranslationService { } } + private static final ThreadLocal DETECTED = new ThreadLocal<>(); + private volatile long gtxBlockedUntil; private volatile long chromeBlockedUntil; @@ -160,6 +168,10 @@ public class TranslationService { throw last != null ? last : new RuntimeException("all translation endpoints are on cooldown"); } + private static boolean sameLanguage(String a, String b) { + return a.toLowerCase(Locale.ROOT).split("[-_]")[0].equals(b.toLowerCase(Locale.ROOT).split("[-_]")[0]); + } + private String get(String url) throws Exception { HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(url)) @@ -184,6 +196,9 @@ public class TranslationService { if (parts.size() > 0 && !parts.get(0).isJsonNull()) { sb.append(parts.get(0).getAsString()); } + if (parts.size() > 1 && parts.get(1).isJsonPrimitive()) { + DETECTED.set(parts.get(1).getAsString()); + } } else if (segment.isJsonPrimitive()) { sb.append(segment.getAsString()); break; @@ -198,6 +213,9 @@ public class TranslationService { /** Google response: [[["translated","original",...], ...], null, "detected-language"]. */ static String parseGoogleResponse(String body) { com.google.gson.JsonArray root = JsonParser.parseString(body).getAsJsonArray(); + if (root.size() > 2 && root.get(2).isJsonPrimitive()) { + DETECTED.set(root.get(2).getAsString()); + } StringBuilder sb = new StringBuilder(); for (com.google.gson.JsonElement segment : root.get(0).getAsJsonArray()) { com.google.gson.JsonArray parts = segment.getAsJsonArray();