diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/html/Contributors.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/html/Contributors.java index c51efb0a2..b4d297cf0 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/html/Contributors.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/html/Contributors.java @@ -62,7 +62,8 @@ public class Contributors { new Contributor("TDJisvan", LANG), new Contributor("Vankka", CODE), new Contributor("yukieji", LANG), - new Contributor("qsefthuopq", LANG) + new Contributor("qsefthuopq", LANG), + new Contributor("Karlatemp", CODE, LANG) }; int estimatedLength = contributors.length * 40 + 50; StringBuilder html = new StringBuilder(estimatedLength); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/ResponseFactory.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/ResponseFactory.java index d6dffa028..1ced9dfc2 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/ResponseFactory.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/ResponseFactory.java @@ -175,7 +175,11 @@ public class ResponseFactory { try { String content = UnaryChain.of(getResource(fileName).asString()) .chain(theme::replaceThemeColors) - .chain(locale::replaceLanguageInJavascript) + .chain(resource -> { + if (fileName.startsWith("vendor/") || fileName.startsWith("/vendor/")) + return resource; + return locale.replaceLanguageInJavascript(resource); + }) .apply(); return Response.builder() .setMimeType(MimeType.JS) diff --git a/Plan/common/src/main/java/com/djrapitops/plan/settings/locale/TranslatedString.java b/Plan/common/src/main/java/com/djrapitops/plan/settings/locale/TranslatedString.java index c3276d6c1..d0150fefb 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/settings/locale/TranslatedString.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/settings/locale/TranslatedString.java @@ -18,6 +18,11 @@ package com.djrapitops.plan.settings.locale; import org.apache.commons.lang3.StringUtils; +import java.util.LinkedList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + /** * Utility for translating String. *

@@ -27,23 +32,100 @@ import org.apache.commons.lang3.StringUtils; * @author Rsl1122 */ class TranslatedString { + private static final Pattern LINK_MATCHER = Pattern.compile("http(s|)://[\\w.\\-_%/?$#@!()&=]+"); - private String translating; + private final List translating = new LinkedList<>(); TranslatedString(String translating) { - this.translating = translating; + final Matcher matcher = LINK_MATCHER.matcher(translating); + int start = 0; + while (matcher.find()) { + String link = translating.substring(matcher.start(), matcher.end()); + String prev = translating.substring(start, matcher.start()); + if (!prev.isEmpty()) { + this.translating.add(new Translatable(prev)); + } + start = matcher.end(); + this.translating.add(new LockedString(link)); + } + String remaining = translating.substring(start); + if (!remaining.isEmpty()) { + this.translating.add(new Translatable(remaining)); + } + } + + TranslatedString() { } public void translate(String replace, String with) { - translating = StringUtils.replace(translating, replace, with); + for (TranslatedString sub : translating) { + sub.translate(replace, with); + } } @Override public String toString() { - return translating; + StringBuilder builder = new StringBuilder(); + toString(builder); + return builder.toString(); + } + + public void toString(StringBuilder builder) { + for (TranslatedString sub : translating) { + sub.toString(builder); + } } public int length() { - return translating.length(); + int length = 0; + for (TranslatedString sub : translating) { + length += sub.length(); + } + return length; + } + + static class Translatable extends TranslatedString { + + private String translating; + + Translatable(String translating) { + this.translating = translating; + } + + public void translate(String replace, String with) { + translating = StringUtils.replace(translating, replace, with); + } + + @Override + public void toString(StringBuilder builder) { + builder.append(translating); + } + + @Override + public int length() { + return translating.length(); + } + } + + static class LockedString extends TranslatedString { + final String text; + + LockedString(String text) { + this.text = text; + } + + @Override + public void translate(String replace, String with) { + } + + @Override + public void toString(StringBuilder builder) { + builder.append(text); + } + + @Override + public int length() { + return text.length(); + } } } \ No newline at end of file diff --git a/Plan/common/src/main/resources/assets/plan/locale/locale_CN.txt b/Plan/common/src/main/resources/assets/plan/locale/locale_CN.txt index d68608c36..8af46a4ab 100644 --- a/Plan/common/src/main/resources/assets/plan/locale/locale_CN.txt +++ b/Plan/common/src/main/resources/assets/plan/locale/locale_CN.txt @@ -213,7 +213,7 @@ HTML - SIDE_SERVERS_TITLE || 服务器 HTML - SIDE_SESSIONS || 时域 HTML - SIDE_TO_MAIN_PAGE || 到主页面 HTML - TEXT_CLICK_TO_EXPAND || 点击拓展 -HTML - TEXT_CONTRIBUTORS_CODE || 码农 +HTML - TEXT_CONTRIBUTORS_CODE || 开发者 HTML - TEXT_CONTRIBUTORS_LOCALE || 译者 HTML - TEXT_CONTRIBUTORS_MONEY || 特别感谢那些在经济上支持该插件发展的人. HTML - TEXT_CONTRIBUTORS_THANKS || 另外以下 awesome people 也为该插件作出了贡献: diff --git a/Plan/common/src/main/resources/assets/plan/web/error.html b/Plan/common/src/main/resources/assets/plan/web/error.html index fdfe4d097..107c7634f 100644 --- a/Plan/common/src/main/resources/assets/plan/web/error.html +++ b/Plan/common/src/main/resources/assets/plan/web/error.html @@ -179,9 +179,7 @@ v3.0


Plan - Wiki, - Tutorials & Documentation + rel="noopener noreferrer" target="_blank"> Plan Wiki, Tutorials & Documentation Report Issues


Plan Wiki, - Tutorials & Documentation + rel="noopener noreferrer" target="_blank"> Plan Wiki, Tutorials & Documentation Report Issues


Plan - Wiki, - Tutorials & Documentation + rel="noopener noreferrer" target="_blank"> Plan Wiki, Tutorials & Documentation Report Issues


Plan - Wiki, - Tutorials & Documentation + rel="noopener noreferrer" target="_blank"> Plan Wiki, Tutorials & Documentation Report Issues


Plan - Wiki, - Tutorials & Documentation + rel="noopener noreferrer" target="_blank"> Plan Wiki, Tutorials & Documentation Report Issues