Translater/src/main/java/io/gitlab/jfronny/translater/YnTransformer.java

63 lines
2.5 KiB
Java

package io.gitlab.jfronny.translater;
import com.github.vbauer.yta.model.Direction;
import com.github.vbauer.yta.model.Language;
import com.github.vbauer.yta.model.Languages;
import com.github.vbauer.yta.service.YTranslateApiImpl;
import java.util.*;
public class YnTransformer extends CachingTransformer {
private static final int rounds = 10;
private static final boolean breakFully = true;
private static final String key = "trnsl.1.1.20200118T180605Z.654f2ec649458c36.107c6ad38dc02937f25e660aa1f8f4097d6561a8";
private static final YTranslateApiImpl api = new YTranslateApiImpl(key);
private static final Set<Language> languages = api.languageApi().all().languages();
private static final Random rnd = new Random();
@Override
public String getTransformed(String str) {
if (str.contains("%")) {
StringBuilder res = new StringBuilder();
boolean f = true;
for (String s : str.split("%")) {
if (!f) {
res.append(s.charAt(0)).append(Break(s.substring(1)).replace("%", ""));
} else
res.append(Break(s));
f = false;
}
return res.toString();
} else {
return Break(str);
}
}
private String Break(String str) {
try {
if (str.replace(" ", "").replace("[", "").replace("]", "").length() < 2)
return str;
Language startLang = api.detectionApi().detect(str).get();
String currentState = str;
Language currentLang = startLang;
for (int i = 0; i < rounds; i++) {
Language newLang = selectRandom();
currentState = api.translationApi().translate(currentState, Direction.of(breakFully ? selectRandom() : currentLang, newLang)).text();
currentLang = newLang;
}
currentState = api.translationApi().translate(currentState, startLang).text();
ModInit.Log("Transformed: \"" + str + "\" to: \"" + currentState + "\"");
return currentState;
} catch (Exception e) {
ModInit.Warn("Failed to break: " + str + " (" + str.length() + " characters)");
ModInit.Warn("Please report this bug with the mod containing the lang file");
throw e;
}
}
private Language selectRandom() {
return languages.stream().skip(rnd.nextInt(languages.size())).findFirst().get();
}
}