Scrape google translate, allows this to work once again

This commit is contained in:
JFronny 2021-02-22 08:55:23 +01:00
parent 68be8370e8
commit b6c60c500e
12 changed files with 15089 additions and 16168 deletions

View File

@ -6,11 +6,23 @@ variables:
before_script:
- export GRADLE_USER_HOME=`pwd`/.gradle
deploy:
build_test:
stage: deploy
script: gradle --build-cache assemble
script:
- gradle --build-cache assemble
- cp build/libs/* ./
- rm *-dev.jar
- mv *.jar latest.jar
artifacts:
paths:
- build/libs
- latest.jar
only:
- master
deploy:
stage: deploy
when: manual
script:
- gradle --build-cache publishModrinth
- gradle --build-cache curseforge

View File

@ -1,6 +1,8 @@
plugins {
id 'fabric-loom' version '0.5.42'
id 'maven-publish'
id "com.modrinth.minotaur" version "1.1.0"
id "com.matthewprenger.cursegradle" version "1.4.0"
}
repositories {
@ -16,6 +18,11 @@ archivesBaseName = project.archives_base_name
version = "${project.mod_version}+${project.minecraft_version}"
group = project.maven_group
repositories {
maven { url = "https://maven.terraformersmc.com/"; name = "ModMenu" }
maven { url = "https://maven.shedaniel.me/"; name = "Cloth" }
}
dependencies {
//to change the versions see the gradle.properties file
minecraft "com.mojang:minecraft:${project.minecraft_version}"
@ -30,16 +37,11 @@ dependencies {
modCompile "com.github.vbauer:yandex-translate-api:1.4.2"
include "com.github.vbauer:yandex-translate-api:1.4.2"
modCompile "me.sargunvohra.mcmods:autoconfig1u:3.3.1"
include "me.sargunvohra.mcmods:autoconfig1u:3.3.1"
modApi ("me.shedaniel.cloth:config-2:5.0.0") {
transitive = false
}
include ("me.shedaniel.cloth:config-2:5.0.0") {
transitive = false
}
modCompile "me.sargunvohra.mcmods:autoconfig1u:3.2.0-unstable"
include "me.sargunvohra.mcmods:autoconfig1u:3.2.0-unstable"
include modApi ("me.shedaniel.cloth:cloth-config-fabric:4.11.14")
modCompile("io.github.prospector:modmenu:1.15.0+build.1")
modCompile("com.terraformersmc:modmenu:1.16.7")
}
processResources {
@ -74,23 +76,37 @@ jar {
from "LICENSE"
}
// configure the maven publication
publishing {
publications {
mavenJava(MavenPublication) {
// add all the jars that should be included when publishing to maven
artifact(remapJar) {
builtBy remapJar
}
artifact(sourcesJar) {
builtBy remapSourcesJar
}
}
}
import com.modrinth.minotaur.TaskModrinthUpload
// select the repositories you want to publish to
repositories {
// uncomment to publish to the local maven
// mavenLocal()
task publishModrinth (type: TaskModrinthUpload){
token = System.getenv("MODRINTH_API_TOKEN")
projectId = 'YnU8kpyc'
versionNumber = "${project.mod_version}"
uploadFile = remapJar
addGameVersion("${project.minecraft_version}")
addLoader('fabric')
versionName = "[${project.minecraft_version}] ${project.mod_version}"
afterEvaluate {
tasks.publishModrinth.dependsOn(remapJar)
tasks.publishModrinth.dependsOn(sourcesJar)
}
}
curseforge {
apiKey = System.getenv("CURSEFORGE_API_TOKEN") == null ? "###" : System.getenv("CURSEFORGE_API_TOKEN")
project {
id = "394823"
releaseType = 'release'
addGameVersion "Fabric"
addGameVersion "${project.minecraft_version}"
changelog = ""
mainArtifact(file("${project.buildDir}/libs/${archivesBaseName}-${version}.jar"))
mainArtifact.displayName = "[${project.minecraft_version}] ${project.mod_version}"
afterEvaluate {
uploadTask.dependsOn(remapJar)
}
}
options {
forgeGradleIntegration = false
}
}

View File

@ -2,13 +2,13 @@
org.gradle.jvmargs=-Xmx1G
# Fabric Properties
# check these on https://modmuss50.me/fabric.html
minecraft_version=1.16.2
yarn_mappings=1.16.2+build.21
loader_version=0.9.2+build.206
minecraft_version=1.16.5
yarn_mappings=1.16.5+build.4
loader_version=0.11.1
# Mod Properties
mod_version=1.0.4
mod_version=1.1.0
maven_group=io.gitlab.jfronny
archives_base_name=translater
# Dependencies
# check this on https://modmuss50.me/fabric.html
fabric_version=0.19.0+build.398-1.16
fabric_version=0.30.3+1.16

View File

@ -11,8 +11,6 @@ public class Cfg implements ConfigData {
public int rounds = 5;
@Comment("Whether to fully break the texts content by translating from the wrong language (enable for complete breaking)")
public boolean breakFully = false;
@Comment("The API key for Yandex Translate (this is REQUIRED for updating the cache, since Yandex doesn't give them out for free anymore you might want to google \"trnsl.1.1.\" to find keys on the web)")
public String key = "trnsl.1.1.20130811T164454Z.2facd8a3323b8111.e9f682063308aff12357de3c8a3260d6d6b71be7";
@Comment("The language to translate to - Leave empty for auto-detection (might break text even more)")
public String targetLanguage = "en";
@Comment("Significantly slows down the loading time but gives a visual of the progress. Values: Full, Console, None")

View File

@ -3,8 +3,7 @@ package io.gitlab.jfronny.translater;
import io.gitlab.jfronny.translater.transformer.CachingTransformer;
import io.gitlab.jfronny.translater.transformer.TransformingMap;
import io.gitlab.jfronny.translater.transformer.TranslatingTransformer;
import io.gitlab.jfronny.translater.translation.EmptyBackend;
import io.gitlab.jfronny.translater.translation.YandexTranslationBackend;
import io.gitlab.jfronny.translater.translation.WurstGoogleBackend;
import me.sargunvohra.mcmods.autoconfig1u.AutoConfig;
import me.sargunvohra.mcmods.autoconfig1u.serializer.JanksonConfigSerializer;
import net.fabricmc.api.ClientModInitializer;
@ -53,7 +52,8 @@ public class Translater implements ClientModInitializer {
public static TransformingMap getMap(Map<String, String> base) {
if (map == null) {
map = new TransformingMap(base, new CachingTransformer(new TranslatingTransformer<>(new EmptyBackend())));
map = new TransformingMap(base, new CachingTransformer(new TranslatingTransformer<>(new WurstGoogleBackend())));
//map = new TransformingMap(base, new CachingTransformer(new TranslatingTransformer<>(new EmptyBackend())));
//map = new TransformingMap(base, new CachingTransformer(new TranslatingTransformer<>(new YandexTranslationBackend())));
map.init();
}

View File

@ -20,7 +20,12 @@ public class CachingTransformer implements ITransformer {
return null;
//Transform and cache if not present
if (!cache.containsKey(str)) {
cache.put(str, transformer.transform(str));
String transformed = transformer.transform(str);
if (transformed == null) {
Translater.Warn("Very concerning, got null for non-null key " + str);
return null;
}
cache.put(str, transformed);
Save();
}
//Return cached result
@ -37,6 +42,7 @@ public class CachingTransformer implements ITransformer {
//Load cache
if (cacheFile.exists()) {
try {
Translater.Log("Loading cache");
FileInputStream inS = new FileInputStream(cacheFile);
cache.load(inS);
inS.close();
@ -44,6 +50,7 @@ public class CachingTransformer implements ITransformer {
e.printStackTrace();
}
} else {
Translater.Log("Initializing default cache");
//Save default cache if parameters are default
if (!Translater.cfg.breakFully && Translater.cfg.rounds == 5) {
try {

View File

@ -0,0 +1,97 @@
package io.gitlab.jfronny.translater.translation;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringEscapeUtils;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class GoogleService {
public enum Language {
AUTO_DETECT("AUTO_DETECT", "auto"), ARABIC("ARABIC", "ar"), CHINESE_SIMPLIFIED("CHINESE_SIMPLIFIED", "zh-CN"),
CHINESE_TRADITIONAL("CHINESE_TRADITIONAL", "zh-TW"), ENGLISH("ENGLISH", "en"), FILIPINO("FILIPINO", "tl"),
FRENCH("FRENCH", "fr"), GERMAN("GERMAN", "de"), GREEK("GREEK", "el"), INDONESIAN("INDONESIAN", "id"),
IRISH("IRISH", "ga"), ITALIAN("ITALIAN", "it"), JAPANESE("JAPANESE", "ja"), JAVANESE("JAVANESE", "jw"),
KOREAN("KOREAN", "ko"), LATIN("LATIN", "la"), POLISH("POLISH", "pl"), PORTUGUESE("PORTUGUESE", "pt"),
RUSSIAN("RUSSIAN", "ru"), SPANISH("SPANISH", "es"), SWEDISH("SWEDISH", "sv"), THAI("THAI", "th"),
VIETNAMESE("VIETNAMESE", "vi");
public final String name;
public final String value;
private Language(String name, String value) {
this.name = name;
this.value = value;
}
@Override
public String toString() {
return name;
}
}
public static String translate(String textToTranslate, String translateFrom, String translateTo) {
String pageSource = "";
try {
pageSource = getPageSource(textToTranslate, translateFrom, translateTo);
final String regex = "class=\"result-container\">([^<]*)<\\/div>";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(pageSource);
matcher.find();
String match = matcher.group(1);
if (match != null && !match.isEmpty()) {
return match;
} else {
return null;
}
} catch (Exception e) {
try {
FileUtils.writeStringToFile(new File("cum"), pageSource, StandardCharsets.UTF_8);
} catch (IOException ioException) {
ioException.printStackTrace();
}
e.printStackTrace();
return null;
}
}
private static String getPageSource(String textToTranslate, String translateFrom, String translateTo)
throws Exception {
String pageUrl = String.format("https://translate.google.com/m?hl=en&sl=%s&tl=%s&ie=UTF-8&prev=_m&q=%s",
translateFrom, translateTo, URLEncoder.encode(textToTranslate.trim(), "UTF-8"));
URL url = new URL(pageUrl);
HttpURLConnection connection = null;
BufferedReader bufferedReader = null;
StringBuilder pageSource = new StringBuilder();
try {
connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(5000);
connection.setRequestProperty("User-Agent",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");
bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
String line;
while ((line = bufferedReader.readLine()) != null) {
pageSource.append(line + System.lineSeparator());
}
String clean = pageSource.toString();
return clean;
} catch (Exception e) {
e.printStackTrace();
} finally {
if (connection != null)
connection.disconnect();
if (bufferedReader != null)
bufferedReader.close();
}
return null;
}
}

View File

@ -0,0 +1,34 @@
package io.gitlab.jfronny.translater.translation;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
public class WurstGoogleBackend implements ITranslationBackend<GoogleService.Language> {
@java.lang.Override
public String translate(String text, GoogleService.Language target, GoogleService.Language current) {
return GoogleService.translate(text, current.value, target.value);
}
@java.lang.Override
public GoogleService.Language detect(String text) {
return GoogleService.Language.AUTO_DETECT;
}
@java.lang.Override
public GoogleService.Language parseLang(String lang) {
for (GoogleService.Language value : GoogleService.Language.values()) {
if (value.value.equals(lang))
return value;
}
return null;
}
@java.lang.Override
public Collection<GoogleService.Language> getLanguages() {
List<GoogleService.Language> langs = new ArrayList<>(Arrays.asList(GoogleService.Language.values()));
langs.remove(GoogleService.Language.AUTO_DETECT);
return langs;
}
}

View File

@ -1,48 +0,0 @@
package io.gitlab.jfronny.translater.translation;
import com.github.vbauer.yta.model.Direction;
import com.github.vbauer.yta.model.Language;
import com.github.vbauer.yta.service.YTranslateApi;
import com.github.vbauer.yta.service.YTranslateApiImpl;
import io.gitlab.jfronny.translater.Translater;
import java.util.Collection;
public class YandexTranslationBackend implements ITranslationBackend<Language> {
private final YTranslateApi api;
@Override
public String translate(String text, Language target, Language current) {
return api.translationApi().translate(text, Direction.of(current, target)).text();
}
@Override
public Language detect(String text) {
Language result = api.detectionApi().detect(text).orElse(Language.EN);
if (Translater.stringInvalid(result.code())) {
Translater.Warn("Could not detect language for: " + text);
Translater.Warn("Defaulting to EN");
return Language.EN;
}
return result;
}
@Override
public Language parseLang(String lang) {
return Language.of(lang);
}
@Override
public Collection<Language> getLanguages() {
try {
return api.languageApi().all(Language.EN).languages();
} catch (Exception e) {
Translater.Warn("Failed to get languages, Is your API key valid?");
e.printStackTrace();
return Language.ALL.values();
}
}
public YandexTranslationBackend() {
api = new YTranslateApiImpl(Translater.cfg.key);
}
}

View File

@ -28,7 +28,7 @@
"depends": {
"fabricloader": ">=0.9.0+build.204",
"fabric": "*",
"minecraft": "1.16.2"
"minecraft": "*"
},
"custom": {
"modupdater": {

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff