fix: translation service update
Some checks are pending
Build & Test / Build LoChat (push) Waiting to run

This commit is contained in:
loki5512344 2026-10-04 12:47:26 +02:00
parent 260986ff11
commit 097bd0d83e
Signed by: boba
GPG key ID: 253067914055423B

View file

@ -118,7 +118,13 @@ public class TranslationService {
private String fetchTranslation(String text, String targetLang) { private String fetchTranslation(String text, String targetLang) {
try { try {
DETECTED.remove();
String translation = doFetch(text, targetLang); 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); putCached(text, targetLang, translation);
return translation; return translation;
} catch (Exception e) { } catch (Exception e) {
@ -127,6 +133,8 @@ public class TranslationService {
} }
} }
private static final ThreadLocal<String> DETECTED = new ThreadLocal<>();
private volatile long gtxBlockedUntil; private volatile long gtxBlockedUntil;
private volatile long chromeBlockedUntil; private volatile long chromeBlockedUntil;
@ -160,6 +168,10 @@ public class TranslationService {
throw last != null ? last : new RuntimeException("all translation endpoints are on cooldown"); 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 { private String get(String url) throws Exception {
HttpRequest request = HttpRequest.newBuilder() HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url)) .uri(URI.create(url))
@ -184,6 +196,9 @@ public class TranslationService {
if (parts.size() > 0 && !parts.get(0).isJsonNull()) { if (parts.size() > 0 && !parts.get(0).isJsonNull()) {
sb.append(parts.get(0).getAsString()); sb.append(parts.get(0).getAsString());
} }
if (parts.size() > 1 && parts.get(1).isJsonPrimitive()) {
DETECTED.set(parts.get(1).getAsString());
}
} else if (segment.isJsonPrimitive()) { } else if (segment.isJsonPrimitive()) {
sb.append(segment.getAsString()); sb.append(segment.getAsString());
break; break;
@ -198,6 +213,9 @@ public class TranslationService {
/** Google response: [[["translated","original",...], ...], null, "detected-language"]. */ /** Google response: [[["translated","original",...], ...], null, "detected-language"]. */
static String parseGoogleResponse(String body) { static String parseGoogleResponse(String body) {
com.google.gson.JsonArray root = JsonParser.parseString(body).getAsJsonArray(); 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(); StringBuilder sb = new StringBuilder();
for (com.google.gson.JsonElement segment : root.get(0).getAsJsonArray()) { for (com.google.gson.JsonElement segment : root.get(0).getAsJsonArray()) {
com.google.gson.JsonArray parts = segment.getAsJsonArray(); com.google.gson.JsonArray parts = segment.getAsJsonArray();