fix: translation service update
Some checks are pending
Build & Test / Build LoChat (push) Waiting to run
Some checks are pending
Build & Test / Build LoChat (push) Waiting to run
This commit is contained in:
parent
260986ff11
commit
097bd0d83e
1 changed files with 18 additions and 0 deletions
|
|
@ -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();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue