From 8fe9477f79b7f7bff445e68a56967b232a998ae5 Mon Sep 17 00:00:00 2001 From: JFronny Date: Mon, 28 Feb 2022 18:44:18 +0100 Subject: [PATCH] libjf-translate-v1 api changes to allow new backends --- docs/libjf-translate-v0.md | 6 ---- docs/libjf-translate-v1.md | 25 ++++++++++++++++ gradle.properties | 8 ++--- .../io/gitlab/jfronny/libjf/data/Tags.java | 4 +-- .../libjf/translate/test/TestEntrypoint.java | 20 ------------- .../build.gradle | 2 +- .../translate/api}/TranslateException.java | 2 +- .../libjf/translate/api/TranslateService.java | 15 ++++++++++ .../impl/google/GoogleTranslateService.java | 29 +++++++++++++++++-- .../translate/impl/google}/Language.java | 2 +- .../impl/noop/NoopTranslateService.java | 28 ++++++++++++++++++ .../src/main/resources/fabric.mod.json | 0 .../libjf/translate/test/TestEntrypoint.java | 24 +++++++++++++++ .../src/testmod/resources/fabric.mod.json | 0 mkdocs.yml | 2 +- settings.gradle | 2 +- 16 files changed, 129 insertions(+), 40 deletions(-) delete mode 100644 docs/libjf-translate-v0.md create mode 100644 docs/libjf-translate-v1.md delete mode 100644 libjf-translate-v0/src/testmod/java/io/gitlab/jfronny/libjf/translate/test/TestEntrypoint.java rename {libjf-translate-v0 => libjf-translate-v1}/build.gradle (61%) rename {libjf-translate-v0/src/main/java/io/gitlab/jfronny/libjf/translate => libjf-translate-v1/src/main/java/io/gitlab/jfronny/libjf/translate/api}/TranslateException.java (88%) create mode 100644 libjf-translate-v1/src/main/java/io/gitlab/jfronny/libjf/translate/api/TranslateService.java rename libjf-translate-v0/src/main/java/io/gitlab/jfronny/libjf/translate/TranslateService.java => libjf-translate-v1/src/main/java/io/gitlab/jfronny/libjf/translate/impl/google/GoogleTranslateService.java (77%) rename {libjf-translate-v0/src/main/java/io/gitlab/jfronny/libjf/translate => libjf-translate-v1/src/main/java/io/gitlab/jfronny/libjf/translate/impl/google}/Language.java (96%) create mode 100644 libjf-translate-v1/src/main/java/io/gitlab/jfronny/libjf/translate/impl/noop/NoopTranslateService.java rename {libjf-translate-v0 => libjf-translate-v1}/src/main/resources/fabric.mod.json (100%) create mode 100644 libjf-translate-v1/src/testmod/java/io/gitlab/jfronny/libjf/translate/test/TestEntrypoint.java rename {libjf-translate-v0 => libjf-translate-v1}/src/testmod/resources/fabric.mod.json (100%) diff --git a/docs/libjf-translate-v0.md b/docs/libjf-translate-v0.md deleted file mode 100644 index 9e10ca5..0000000 --- a/docs/libjf-translate-v0.md +++ /dev/null @@ -1,6 +0,0 @@ -# libjf-translate-v0 -libjf-translate-v0 provides a utility class for translating strings through Google Translate. - -To translate a string, just call `TranslateService.translate("Text to translate", Language.AUTO_DETECT, Language.ENGLISH)` - -To configure languages, you can use the `Language` enum itself or `Language.byId("en")` \ No newline at end of file diff --git a/docs/libjf-translate-v1.md b/docs/libjf-translate-v1.md new file mode 100644 index 0000000..a49ed47 --- /dev/null +++ b/docs/libjf-translate-v1.md @@ -0,0 +1,25 @@ +# libjf-translate-v0 +libjf-translate-v0 provides a utility class for translating strings through Google Translate. + +To use this, first obtain a TranslateService instance. You can use `TranslateService.getConfigured()` to do so. +Please be aware that due to the nature of java generics, a workaround as seen in the example may be needed for successful compilation. +You can also directly access implementations, however, this is not recommended. +The TranslateService interface exposes all relevant functionality. + +Example: +```java +public void onInitialize() { + try { + runTest(TranslateService.getConfigured()); + } catch (Throwable e) { + LibJf.LOGGER.error("Could not verify translation validity", e); + } +} + +private void runTest(TranslateService ts) throws TranslateException { + final String source = "Cogito, ergo sum"; + final String expected = "I think, therefore I am"; + assert expected.equals(ts.translate(source, ts.detect(source), ts.parseLang("en"))); + assert expected.equals(ts.translate(source, ts.parseLang("la"), ts.parseLang("en"))); +} +``` \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 53531e1..87371e9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,8 +1,8 @@ # https://fabricmc.net/develop/ -minecraft_version=22w06a -yarn_mappings=build.8 -loader_version=0.13.1 -fabric_version=0.47.1+1.18.2 +minecraft_version=1.18.2 +yarn_mappings=build.1 +loader_version=0.13.3 +fabric_version=0.47.8+1.18.2 maven_group=io.gitlab.jfronny.libjf archive_base_name=libjf dev_only_module=libjf-devutil-v0 diff --git a/libjf-data-v0/src/main/java/io/gitlab/jfronny/libjf/data/Tags.java b/libjf-data-v0/src/main/java/io/gitlab/jfronny/libjf/data/Tags.java index 9b54213..8ed21ff 100644 --- a/libjf-data-v0/src/main/java/io/gitlab/jfronny/libjf/data/Tags.java +++ b/libjf-data-v0/src/main/java/io/gitlab/jfronny/libjf/data/Tags.java @@ -7,6 +7,6 @@ import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; public class Tags { - public static final TagKey SHULKER_ILLEGAL = TagKey.intern(Registry.ITEM_KEY, new Identifier(LibJf.MOD_ID, "shulker_boxes_illegal")); - public static final TagKey OVERPOWERED = TagKey.intern(Registry.ITEM_KEY, new Identifier(LibJf.MOD_ID, "overpowered")); + public static final TagKey SHULKER_ILLEGAL = TagKey.of(Registry.ITEM_KEY, new Identifier(LibJf.MOD_ID, "shulker_boxes_illegal")); + public static final TagKey OVERPOWERED = TagKey.of(Registry.ITEM_KEY, new Identifier(LibJf.MOD_ID, "overpowered")); } diff --git a/libjf-translate-v0/src/testmod/java/io/gitlab/jfronny/libjf/translate/test/TestEntrypoint.java b/libjf-translate-v0/src/testmod/java/io/gitlab/jfronny/libjf/translate/test/TestEntrypoint.java deleted file mode 100644 index 93b728d..0000000 --- a/libjf-translate-v0/src/testmod/java/io/gitlab/jfronny/libjf/translate/test/TestEntrypoint.java +++ /dev/null @@ -1,20 +0,0 @@ -package io.gitlab.jfronny.libjf.translate.test; - -import io.gitlab.jfronny.libjf.LibJf; -import io.gitlab.jfronny.libjf.translate.Language; -import io.gitlab.jfronny.libjf.translate.TranslateService; -import net.fabricmc.api.ModInitializer; - -public class TestEntrypoint implements ModInitializer { - @Override - public void onInitialize() { - try { - final String source = "Cogito, ergo sum"; - final String expected = "I think, therefore I am"; - assert expected.equals(TranslateService.translate(source, Language.AUTO_DETECT, Language.ENGLISH)); - assert expected.equals(TranslateService.translate(source, Language.LATIN, Language.ENGLISH)); - } catch (Throwable e) { - LibJf.LOGGER.error("Could not verify translation validity", e); - } - } -} diff --git a/libjf-translate-v0/build.gradle b/libjf-translate-v1/build.gradle similarity index 61% rename from libjf-translate-v0/build.gradle rename to libjf-translate-v1/build.gradle index cf4d933..a71f7d5 100644 --- a/libjf-translate-v0/build.gradle +++ b/libjf-translate-v1/build.gradle @@ -1,4 +1,4 @@ -archivesBaseName = "libjf-translate-v0" +archivesBaseName = "libjf-translate-v1" dependencies { moduleDependencies(project, ["libjf-base"]) diff --git a/libjf-translate-v0/src/main/java/io/gitlab/jfronny/libjf/translate/TranslateException.java b/libjf-translate-v1/src/main/java/io/gitlab/jfronny/libjf/translate/api/TranslateException.java similarity index 88% rename from libjf-translate-v0/src/main/java/io/gitlab/jfronny/libjf/translate/TranslateException.java rename to libjf-translate-v1/src/main/java/io/gitlab/jfronny/libjf/translate/api/TranslateException.java index ef21e5c..05a37ec 100644 --- a/libjf-translate-v0/src/main/java/io/gitlab/jfronny/libjf/translate/TranslateException.java +++ b/libjf-translate-v1/src/main/java/io/gitlab/jfronny/libjf/translate/api/TranslateException.java @@ -1,4 +1,4 @@ -package io.gitlab.jfronny.libjf.translate; +package io.gitlab.jfronny.libjf.translate.api; public class TranslateException extends Exception { public TranslateException() { diff --git a/libjf-translate-v1/src/main/java/io/gitlab/jfronny/libjf/translate/api/TranslateService.java b/libjf-translate-v1/src/main/java/io/gitlab/jfronny/libjf/translate/api/TranslateService.java new file mode 100644 index 0000000..b562a71 --- /dev/null +++ b/libjf-translate-v1/src/main/java/io/gitlab/jfronny/libjf/translate/api/TranslateService.java @@ -0,0 +1,15 @@ +package io.gitlab.jfronny.libjf.translate.api; + +import io.gitlab.jfronny.libjf.translate.impl.google.GoogleTranslateService; + +import java.util.List; + +public interface TranslateService { + static TranslateService getConfigured() { + return new GoogleTranslateService(); + } + String translate(String textToTranslate, T translateFrom, T translateTo) throws TranslateException; + T detect(String text) throws TranslateException; + T parseLang(String lang); + List getAvailableLanguages(); +} diff --git a/libjf-translate-v0/src/main/java/io/gitlab/jfronny/libjf/translate/TranslateService.java b/libjf-translate-v1/src/main/java/io/gitlab/jfronny/libjf/translate/impl/google/GoogleTranslateService.java similarity index 77% rename from libjf-translate-v0/src/main/java/io/gitlab/jfronny/libjf/translate/TranslateService.java rename to libjf-translate-v1/src/main/java/io/gitlab/jfronny/libjf/translate/impl/google/GoogleTranslateService.java index ae94e1c..fe3d31d 100644 --- a/libjf-translate-v0/src/main/java/io/gitlab/jfronny/libjf/translate/TranslateService.java +++ b/libjf-translate-v1/src/main/java/io/gitlab/jfronny/libjf/translate/impl/google/GoogleTranslateService.java @@ -1,5 +1,7 @@ -package io.gitlab.jfronny.libjf.translate; +package io.gitlab.jfronny.libjf.translate.impl.google; +import io.gitlab.jfronny.libjf.translate.api.TranslateException; +import io.gitlab.jfronny.libjf.translate.api.TranslateService; import org.apache.commons.lang3.StringEscapeUtils; import java.io.BufferedReader; @@ -11,13 +13,17 @@ import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -public class TranslateService { +public class GoogleTranslateService implements TranslateService { private static final Pattern TRANSLATION_RESULT = Pattern.compile("class=\"result-container\">([^<]*)", Pattern.MULTILINE); - public static String translate(String textToTranslate, Language translateFrom, Language translateTo) throws TranslateException { + @Override + public String translate(String textToTranslate, Language translateFrom, Language translateTo) throws TranslateException { if (textToTranslate == null) throw new TranslateException("textToTranslate must not be null"); String pageSource = ""; try { @@ -41,6 +47,23 @@ public class TranslateService { } } + @Override + public Language detect(String text) throws TranslateException { + return Language.AUTO_DETECT; + } + + @Override + public Language parseLang(String lang) { + return Language.byId(lang); + } + + @Override + public List getAvailableLanguages() { + List langs = new ArrayList<>(Arrays.asList(Language.values())); + langs.remove(Language.AUTO_DETECT); + return langs; + } + private static String getPageSource(String textToTranslate, String translateFrom, String translateTo) throws Exception { if (textToTranslate == null) diff --git a/libjf-translate-v0/src/main/java/io/gitlab/jfronny/libjf/translate/Language.java b/libjf-translate-v1/src/main/java/io/gitlab/jfronny/libjf/translate/impl/google/Language.java similarity index 96% rename from libjf-translate-v0/src/main/java/io/gitlab/jfronny/libjf/translate/Language.java rename to libjf-translate-v1/src/main/java/io/gitlab/jfronny/libjf/translate/impl/google/Language.java index d8e00b9..f3280bd 100644 --- a/libjf-translate-v0/src/main/java/io/gitlab/jfronny/libjf/translate/Language.java +++ b/libjf-translate-v1/src/main/java/io/gitlab/jfronny/libjf/translate/impl/google/Language.java @@ -1,4 +1,4 @@ -package io.gitlab.jfronny.libjf.translate; +package io.gitlab.jfronny.libjf.translate.impl.google; import java.util.HashMap; import java.util.Map; diff --git a/libjf-translate-v1/src/main/java/io/gitlab/jfronny/libjf/translate/impl/noop/NoopTranslateService.java b/libjf-translate-v1/src/main/java/io/gitlab/jfronny/libjf/translate/impl/noop/NoopTranslateService.java new file mode 100644 index 0000000..da9e127 --- /dev/null +++ b/libjf-translate-v1/src/main/java/io/gitlab/jfronny/libjf/translate/impl/noop/NoopTranslateService.java @@ -0,0 +1,28 @@ +package io.gitlab.jfronny.libjf.translate.impl.noop; + +import io.gitlab.jfronny.libjf.translate.api.TranslateException; +import io.gitlab.jfronny.libjf.translate.api.TranslateService; + +import java.util.List; + +public class NoopTranslateService implements TranslateService { + @Override + public String translate(String textToTranslate, Object translateFrom, Object translateTo) throws TranslateException { + return textToTranslate; + } + + @Override + public Object detect(String text) throws TranslateException { + return "none"; + } + + @Override + public Object parseLang(String lang) { + return "none"; + } + + @Override + public List getAvailableLanguages() { + return List.of("none"); + } +} diff --git a/libjf-translate-v0/src/main/resources/fabric.mod.json b/libjf-translate-v1/src/main/resources/fabric.mod.json similarity index 100% rename from libjf-translate-v0/src/main/resources/fabric.mod.json rename to libjf-translate-v1/src/main/resources/fabric.mod.json diff --git a/libjf-translate-v1/src/testmod/java/io/gitlab/jfronny/libjf/translate/test/TestEntrypoint.java b/libjf-translate-v1/src/testmod/java/io/gitlab/jfronny/libjf/translate/test/TestEntrypoint.java new file mode 100644 index 0000000..864de17 --- /dev/null +++ b/libjf-translate-v1/src/testmod/java/io/gitlab/jfronny/libjf/translate/test/TestEntrypoint.java @@ -0,0 +1,24 @@ +package io.gitlab.jfronny.libjf.translate.test; + +import io.gitlab.jfronny.libjf.LibJf; +import io.gitlab.jfronny.libjf.translate.api.TranslateService; +import io.gitlab.jfronny.libjf.translate.api.TranslateException; +import net.fabricmc.api.ModInitializer; + +public class TestEntrypoint implements ModInitializer { + @Override + public void onInitialize() { + try { + runTest(TranslateService.getConfigured()); + } catch (Throwable e) { + LibJf.LOGGER.error("Could not verify translation validity", e); + } + } + + private void runTest(TranslateService ts) throws TranslateException { + final String source = "Cogito, ergo sum"; + final String expected = "I think, therefore I am"; + assert expected.equals(ts.translate(source, ts.detect(source), ts.parseLang("en"))); + assert expected.equals(ts.translate(source, ts.parseLang("la"), ts.parseLang("en"))); + } +} diff --git a/libjf-translate-v0/src/testmod/resources/fabric.mod.json b/libjf-translate-v1/src/testmod/resources/fabric.mod.json similarity index 100% rename from libjf-translate-v0/src/testmod/resources/fabric.mod.json rename to libjf-translate-v1/src/testmod/resources/fabric.mod.json diff --git a/mkdocs.yml b/mkdocs.yml index da52510..809ee5a 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -14,6 +14,6 @@ nav: - 'libjf-devutil-v0.md' - 'libjf-data-v0.md' - 'libjf-data-manipulation-v0.md' - - 'libjf-translate-v0.md' + - 'libjf-translate-v1.md' - 'libjf-unsafe-v0.md' - 'libjf-web-v0.md' diff --git a/settings.gradle b/settings.gradle index 50e8391..cb5bc41 100644 --- a/settings.gradle +++ b/settings.gradle @@ -16,6 +16,6 @@ include 'libjf-config-v0' include 'libjf-data-v0' include 'libjf-data-manipulation-v0' include 'libjf-devutil-v0' -include 'libjf-translate-v0' +include 'libjf-translate-v1' include 'libjf-unsafe-v0' include 'libjf-web-v0' \ No newline at end of file