diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/mutators/ActivityIndex.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/mutators/ActivityIndex.java index 889696084..663973c3f 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/mutators/ActivityIndex.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/mutators/ActivityIndex.java @@ -20,6 +20,8 @@ import com.djrapitops.plan.delivery.domain.container.DataContainer; import com.djrapitops.plan.delivery.domain.keys.PlayerKeys; import com.djrapitops.plan.delivery.formatting.Formatter; import com.djrapitops.plan.gathering.domain.Session; +import com.djrapitops.plan.settings.locale.Locale; +import com.djrapitops.plan.settings.locale.lang.HtmlLang; import com.djrapitops.plugin.api.TimeAmount; import java.util.List; @@ -86,8 +88,27 @@ public class ActivityIndex { this.date = date; } - public static String[] getGroups() { - return new String[]{"Very Active", "Active", "Regular", "Irregular", "Inactive"}; + public static String[] getDefaultGroups() { + return getGroups(null); + } + + public static String[] getGroups(Locale locale) { + if (locale == null) { + return new String[]{ + HtmlLang.INDEX_VERY_ACTIVE.getDefault(), + HtmlLang.INDEX_ACTIVE.getDefault(), + HtmlLang.INDEX_REGULAR.getDefault(), + HtmlLang.INDEX_IRREGULAR.getDefault(), + HtmlLang.INDEX_INACTIVE.getDefault() + }; + } + return new String[]{ + locale.get(HtmlLang.INDEX_VERY_ACTIVE).toString(), + locale.get(HtmlLang.INDEX_ACTIVE).toString(), + locale.get(HtmlLang.INDEX_REGULAR).toString(), + locale.get(HtmlLang.INDEX_IRREGULAR).toString(), + locale.get(HtmlLang.INDEX_INACTIVE).toString() + }; } private double calculate(DataContainer container) { diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/JSONFactory.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/JSONFactory.java index 74875870a..654b64326 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/JSONFactory.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/JSONFactory.java @@ -34,6 +34,8 @@ import com.djrapitops.plan.identification.ServerInfo; import com.djrapitops.plan.settings.config.PlanConfig; import com.djrapitops.plan.settings.config.paths.DisplaySettings; import com.djrapitops.plan.settings.config.paths.TimeSettings; +import com.djrapitops.plan.settings.locale.Locale; +import com.djrapitops.plan.settings.locale.lang.HtmlLang; import com.djrapitops.plan.storage.database.DBSystem; import com.djrapitops.plan.storage.database.Database; import com.djrapitops.plan.storage.database.queries.analysis.PlayerCountQueries; @@ -54,6 +56,7 @@ import java.util.concurrent.TimeUnit; public class JSONFactory { private final PlanConfig config; + private final Locale locale; private final DBSystem dbSystem; private final ServerInfo serverInfo; private final Graphs graphs; @@ -62,12 +65,14 @@ public class JSONFactory { @Inject public JSONFactory( PlanConfig config, + Locale locale, DBSystem dbSystem, ServerInfo serverInfo, Graphs graphs, Formatters formatters ) { this.config = config; + this.locale = locale; this.dbSystem = dbSystem; this.serverInfo = serverInfo; this.graphs = graphs; @@ -85,7 +90,7 @@ public class JSONFactory { database.query(new ServerTablePlayersQuery(serverUUID, System.currentTimeMillis(), playtimeThreshold, xMostRecentPlayers)), database.query(new ExtensionServerPlayerDataTableQuery(serverUUID, xMostRecentPlayers)), openPlayerLinksInNewTab, - formatters + formatters, locale ).toJSONString(); } @@ -100,7 +105,7 @@ public class JSONFactory { database.query(new NetworkTablePlayersQuery(System.currentTimeMillis(), playtimeThreshold, xMostRecentPlayers)), Collections.emptyMap(), openPlayerLinksInNewTab, - formatters + formatters, locale ).toJSONString(); } @@ -200,7 +205,7 @@ public class JSONFactory { server.put("unique_players", uniquePlayerCounts.getOrDefault(serverUUID, 0)); TPSMutator tpsWeek = tpsMonth.filterDataBetween(weekAgo, now); double averageTPS = tpsWeek.averageTPS(); - server.put("avg_tps", averageTPS != -1 ? decimals.apply(averageTPS) : "No data"); + server.put("avg_tps", averageTPS != -1 ? decimals.apply(averageTPS) : locale.get(HtmlLang.UNIT_NO_DATA).toString()); server.put("low_tps_spikes", tpsWeek.lowTpsSpikeCount(config.getNumber(DisplaySettings.GRAPH_TPS_THRESHOLD_MED))); server.put("downtime", timeAmount.apply(tpsWeek.serverDownTime())); @@ -208,7 +213,7 @@ public class JSONFactory { server.put("online", online.isPresent() ? online.get().getDate() >= now - TimeUnit.MINUTES.toMillis(3L) ? online.get().getPlayers() : "Possibly offline" - : "No data"); + : locale.get(HtmlLang.UNIT_NO_DATA).toString()); servers.add(server); }); return servers; diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/PerformanceJSONParser.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/PerformanceJSONParser.java index 9dc166ac9..02640aeb8 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/PerformanceJSONParser.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/PerformanceJSONParser.java @@ -22,6 +22,9 @@ import com.djrapitops.plan.delivery.formatting.Formatters; import com.djrapitops.plan.gathering.domain.TPS; import com.djrapitops.plan.settings.config.PlanConfig; import com.djrapitops.plan.settings.config.paths.DisplaySettings; +import com.djrapitops.plan.settings.locale.Locale; +import com.djrapitops.plan.settings.locale.lang.GenericLang; +import com.djrapitops.plan.settings.locale.lang.HtmlLang; import com.djrapitops.plan.storage.database.DBSystem; import com.djrapitops.plan.storage.database.Database; import com.djrapitops.plan.storage.database.queries.objects.TPSQueries; @@ -43,6 +46,7 @@ import java.util.concurrent.TimeUnit; public class PerformanceJSONParser implements ServerTabJSONParser> { private final PlanConfig config; + private final Locale locale; private final DBSystem dbSystem; private final Formatter decimals; @@ -52,10 +56,12 @@ public class PerformanceJSONParser implements ServerTabJSONParser createInsightsMap(List tpsData) { @@ -140,7 +150,7 @@ public class PerformanceJSONParser implements ServerTabJSONParser worldTimesPerServer = PerServerMutator.forContainer(player).worldTimesPerServer(); - List> serverAccordion = new ServerAccordion(player, serverNames, graphs, year, timeAmount).asMaps(); + List> serverAccordion = new ServerAccordion(player, serverNames, graphs, year, timeAmount, locale.get(GenericLang.UNKNOWN).toString()).asMaps(); List kills = player.getValue(PlayerKeys.PLAYER_KILLS).orElse(Collections.emptyList()); List deaths = player.getValue(PlayerKeys.PLAYER_DEATHS_KILLS).orElse(Collections.emptyList()); @@ -178,7 +182,7 @@ public class PlayerJSONParser { int worstPing = ping.max(); int bestPing = ping.min(); - String unavailable = "Unavailable"; + String unavailable = locale.get(GenericLang.UNAVAILABLE).toString(); info.put("average_ping", averagePing != -1.0 ? decimals.apply(averagePing) + " ms" : unavailable); info.put("worst_ping", worstPing != -1.0 ? worstPing + " ms" : unavailable); info.put("best_ping", bestPing != -1.0 ? bestPing + " ms" : unavailable); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/PlayersTableJSONParser.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/PlayersTableJSONParser.java index 9d3d54ad0..ce13fd312 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/PlayersTableJSONParser.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/PlayersTableJSONParser.java @@ -26,6 +26,8 @@ import com.djrapitops.plan.delivery.rendering.html.icon.Icon; import com.djrapitops.plan.extension.FormatType; import com.djrapitops.plan.extension.icon.Color; import com.djrapitops.plan.extension.implementation.results.*; +import com.djrapitops.plan.settings.locale.Locale; +import com.djrapitops.plan.settings.locale.lang.HtmlLang; import java.util.*; @@ -41,6 +43,7 @@ public class PlayersTableJSONParser { private final List players; private final List extensionDescriptives; private final Map extensionData; + private final Locale locale; private final boolean openPlayerPageInNewTab; @@ -49,17 +52,17 @@ public class PlayersTableJSONParser { private Formatter decimalFormatter; public PlayersTableJSONParser( - // Data List players, Map extensionData, // Settings boolean openPlayerPageInNewTab, - // Formatters - Formatters formatters + Formatters formatters, + Locale locale ) { // Data this.players = players; this.extensionData = extensionData; + this.locale = locale; extensionDescriptives = new ArrayList<>(); addExtensionDescriptives(extensionData); @@ -132,7 +135,7 @@ public class PlayersTableJSONParser { ActivityIndex activityIndex = player.getCurrentActivityIndex().orElseGet(() -> new ActivityIndex(0.0, 0)); boolean isBanned = player.isBanned(); String activityString = activityIndex.getFormattedValue(decimalFormatter) - + (isBanned ? " (Banned)" : " (" + activityIndex.getGroup() + ")"); + + (isBanned ? " (" + locale.get(HtmlLang.LABEL_BANNED) + ")" : " (" + activityIndex.getGroup() + ")"); String geolocation = player.getGeolocation().orElse("-"); @@ -190,13 +193,13 @@ public class PlayersTableJSONParser { // Is the data for the column formatted columnHeaders - .append(makeColumnHeader(Icon.called("user") + " Name", "name")).append(',') - .append(makeFColumnHeader(Icon.called("check") + " Activity Index", "index")).append(',') - .append(makeFColumnHeader(Icon.called("clock").of(Family.REGULAR) + " Playtime", "playtime")).append(',') - .append(makeColumnHeader(Icon.called("calendar-plus").of(Family.REGULAR) + " Sessions", "sessions")).append(',') - .append(makeFColumnHeader(Icon.called("user-plus") + " Registered", "registered")).append(',') - .append(makeFColumnHeader(Icon.called("calendar-check").of(Family.REGULAR) + " Last Seen", "seen")).append(',') - .append(makeColumnHeader(Icon.called("globe") + " Geolocation", "geolocation")); + .append(makeColumnHeader(Icon.called("user") + " " + locale.get(HtmlLang.LABEL_NAME), "name")).append(',') + .append(makeFColumnHeader(Icon.called("check") + " " + locale.get(HtmlLang.LABEL_ACTIVITY_INDEX), "index")).append(',') + .append(makeFColumnHeader(Icon.called("clock").of(Family.REGULAR) + " " + locale.get(HtmlLang.LABEL_PLAYTIME), "playtime")).append(',') + .append(makeColumnHeader(Icon.called("calendar-plus").of(Family.REGULAR) + " " + locale.get(HtmlLang.SIDE_SESSIONS), "sessions")).append(',') + .append(makeFColumnHeader(Icon.called("user-plus") + " " + locale.get(HtmlLang.LABEL_REGISTERED), "registered")).append(',') + .append(makeFColumnHeader(Icon.called("calendar-check").of(Family.REGULAR) + " " + locale.get(HtmlLang.LABEL_LAST_SEEN), "seen")).append(',') + .append(makeColumnHeader(Icon.called("globe") + " " + locale.get(HtmlLang.TITLE_COUNTRY), "geolocation")); appendExtensionHeaders(columnHeaders); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/html/structure/ServerAccordion.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/ServerAccordion.java similarity index 94% rename from Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/html/structure/ServerAccordion.java rename to Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/ServerAccordion.java index bfca1976e..ca8b22bdb 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/html/structure/ServerAccordion.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/ServerAccordion.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public License * along with Plan. If not, see . */ -package com.djrapitops.plan.delivery.rendering.html.structure; +package com.djrapitops.plan.delivery.rendering.json; import com.djrapitops.plan.delivery.domain.container.DataContainer; import com.djrapitops.plan.delivery.domain.container.PerServerContainer; @@ -30,7 +30,7 @@ import com.djrapitops.plan.gathering.domain.WorldTimes; import java.util.*; /** - * HTML utility class for creating a Server Accordion. + * Utility for creating JSON for Server Accordion * * @author Rsl1122 */ @@ -38,6 +38,7 @@ public class ServerAccordion { private final Map serverNames; private final PerServerContainer perServer; + private final String unknown; private final Graphs graphs; private final Formatter year; @@ -47,7 +48,8 @@ public class ServerAccordion { PlayerContainer container, Map serverNames, Graphs graphs, Formatter year, - Formatter timeAmount + Formatter timeAmount, + String unknown ) { this.graphs = graphs; this.year = year; @@ -56,6 +58,7 @@ public class ServerAccordion { this.serverNames = serverNames; perServer = container.getValue(PlayerKeys.PER_SERVER) .orElse(new PerServerContainer()); + this.unknown = unknown; } public List> asMaps() { @@ -66,7 +69,7 @@ public class ServerAccordion { DataContainer perServer = entry.getValue(); Map server = new HashMap<>(); - String serverName = serverNames.getOrDefault(serverUUID, "Unknown"); + String serverName = serverNames.getOrDefault(serverUUID, unknown); WorldTimes worldTimes = perServer.getValue(PerServerKeys.WORLD_TIMES).orElse(new WorldTimes()); SessionsMutator sessionsMutator = SessionsMutator.forContainer(perServer); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/ServerOverviewJSONParser.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/ServerOverviewJSONParser.java index 16a64a457..d4fe2acb3 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/ServerOverviewJSONParser.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/ServerOverviewJSONParser.java @@ -26,6 +26,8 @@ import com.djrapitops.plan.identification.ServerInfo; import com.djrapitops.plan.settings.config.PlanConfig; import com.djrapitops.plan.settings.config.paths.DisplaySettings; import com.djrapitops.plan.settings.config.paths.TimeSettings; +import com.djrapitops.plan.settings.locale.Locale; +import com.djrapitops.plan.settings.locale.lang.GenericLang; import com.djrapitops.plan.storage.database.DBSystem; import com.djrapitops.plan.storage.database.Database; import com.djrapitops.plan.storage.database.queries.ServerAggregateQueries; @@ -49,24 +51,27 @@ import java.util.concurrent.TimeUnit; public class ServerOverviewJSONParser implements ServerTabJSONParser> { private final Formatter day; - private PlanConfig config; - private DBSystem dbSystem; - private ServerInfo serverInfo; + private final PlanConfig config; + private final Locale locale; + private final DBSystem dbSystem; + private final ServerInfo serverInfo; - private Formatter timeAmount; - private Formatter decimals; - private Formatter percentage; - private Formatter year; + private final Formatter timeAmount; + private final Formatter decimals; + private final Formatter percentage; + private final Formatter year; private final TimeZone timeZone; @Inject public ServerOverviewJSONParser( PlanConfig config, + Locale locale, DBSystem dbSystem, ServerInfo serverInfo, Formatters formatters ) { this.config = config; + this.locale = locale; this.dbSystem = dbSystem; this.serverInfo = serverInfo; @@ -105,7 +110,7 @@ public class ServerOverviewJSONParser implements ServerTabJSONParser createWeeksMap(UUID serverUUID) { diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/graphs/pie/ActivityPie.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/graphs/pie/ActivityPie.java index 2971ade7c..de0000e4e 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/graphs/pie/ActivityPie.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/graphs/pie/ActivityPie.java @@ -30,22 +30,22 @@ import java.util.Map; */ public class ActivityPie extends Pie { - ActivityPie(Map activityData, String[] colors) { - super(turnToSlices(activityData, colors)); + ActivityPie(Map activityData, String[] colors, String[] groups) { + super(turnToSlices(activityData, colors, groups)); } - private static List turnToSlices(Map activityData, String[] colors) { + private static List turnToSlices(Map activityData, String[] colors, String[] groups) { int maxCol = colors.length; + String[] defaultGroups = ActivityIndex.getDefaultGroups(); List slices = new ArrayList<>(); int i = 0; - for (String group : ActivityIndex.getGroups()) { - int num = activityData.getOrDefault(group, 0); + for (int j = 0; j < groups.length; j++) { + int num = activityData.getOrDefault(defaultGroups[j], 0); - slices.add(new PieSlice(group, num, colors[i % maxCol], false)); + slices.add(new PieSlice(groups[j], num, colors[i % maxCol], false)); i++; } - return slices; } } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/graphs/pie/PieGraphFactory.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/graphs/pie/PieGraphFactory.java index 431d23d12..8b9aa4049 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/graphs/pie/PieGraphFactory.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/graphs/pie/PieGraphFactory.java @@ -16,11 +16,14 @@ */ package com.djrapitops.plan.delivery.rendering.json.graphs.pie; +import com.djrapitops.plan.delivery.domain.mutators.ActivityIndex; import com.djrapitops.plan.gathering.domain.GMTimes; import com.djrapitops.plan.gathering.domain.WorldTimes; import com.djrapitops.plan.settings.config.PlanConfig; import com.djrapitops.plan.settings.config.WorldAliasSettings; import com.djrapitops.plan.settings.config.paths.DisplaySettings; +import com.djrapitops.plan.settings.locale.Locale; +import com.djrapitops.plan.settings.locale.lang.GenericLang; import com.djrapitops.plan.settings.theme.Theme; import com.djrapitops.plan.settings.theme.ThemeVal; @@ -38,24 +41,27 @@ import java.util.UUID; public class PieGraphFactory { private final PlanConfig config; + private final Locale locale; private final Theme theme; @Inject public PieGraphFactory( PlanConfig config, + Locale locale, Theme theme ) { this.config = config; + this.locale = locale; this.theme = theme; } public Pie activityPie(Map activityData) { String[] colors = theme.getPieColors(ThemeVal.GRAPH_ACTIVITY_PIE); - return new ActivityPie(activityData, colors); + return new ActivityPie(activityData, colors, ActivityIndex.getGroups(locale)); } public Pie serverPreferencePie(Map serverNames, Map serverWorldTimes) { - return new ServerPreferencePie(serverNames, serverWorldTimes); + return new ServerPreferencePie(serverNames, serverWorldTimes, locale.get(GenericLang.UNKNOWN).toString()); } public Pie serverPreferencePie(Map serverPlaytimes) { diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/graphs/pie/ServerPreferencePie.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/graphs/pie/ServerPreferencePie.java index dbc9aa2cd..7e2811dce 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/graphs/pie/ServerPreferencePie.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/graphs/pie/ServerPreferencePie.java @@ -25,22 +25,22 @@ import java.util.UUID; public class ServerPreferencePie extends Pie { - ServerPreferencePie(Map serverNames, Map serverWorldTimes) { - super(turnToSlices(serverNames, serverWorldTimes)); + ServerPreferencePie(Map serverNames, Map serverWorldTimes, String unknown) { + super(turnToSlices(serverNames, serverWorldTimes, unknown)); } ServerPreferencePie(Map serverPlaytimes) { super(turnToSlices(serverPlaytimes)); } - private static List turnToSlices(Map serverNames, Map serverWorldTimes) { + private static List turnToSlices(Map serverNames, Map serverWorldTimes, String unknown) { List slices = new ArrayList<>(); for (Map.Entry server : serverWorldTimes.entrySet()) { UUID serverUUID = server.getKey(); WorldTimes worldTimes = server.getValue(); - String serverName = serverNames.getOrDefault(serverUUID, "Unknown"); + String serverName = serverNames.getOrDefault(serverUUID, unknown); long num = worldTimes.getTotal(); slices.add(new PieSlice(serverName, num)); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/graphs/stack/ActivityStackGraph.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/graphs/stack/ActivityStackGraph.java index 43167840e..50af0994a 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/graphs/stack/ActivityStackGraph.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/graphs/stack/ActivityStackGraph.java @@ -20,7 +20,9 @@ import com.djrapitops.plan.delivery.domain.DateMap; import com.djrapitops.plan.delivery.domain.mutators.ActivityIndex; import com.djrapitops.plan.delivery.formatting.Formatter; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Map; /** * Stack Graph that represents evolution of the PlayerBase in terms of ActivityIndex Groups. @@ -30,12 +32,8 @@ import java.util.*; */ class ActivityStackGraph extends StackGraph { - ActivityStackGraph(TreeMap>> activityData, String[] colors, Formatter dayFormatter) { - super(getLabels(activityData.navigableKeySet(), dayFormatter), getDataSets(activityData, colors)); - } - - ActivityStackGraph(DateMap> activityData, String[] colors, Formatter dayFormatter) { - super(getLabels(activityData.navigableKeySet(), dayFormatter), getDataSets(activityData, colors)); + ActivityStackGraph(DateMap> activityData, String[] colors, Formatter dayFormatter, String[] groups) { + super(getLabels(activityData.navigableKeySet(), dayFormatter), getDataSets(activityData, colors, groups)); } private static String[] getLabels(Collection dates, Formatter dayFormatter) { @@ -55,27 +53,13 @@ class ActivityStackGraph extends StackGraph { return dataSets; } - private static StackDataSet[] getDataSets(TreeMap>> activityData, String[] colors) { - String[] groups = ActivityIndex.getGroups(); - StackDataSet[] dataSets = initializeDataSet(groups, colors); - - for (Map> data : activityData.values()) { - for (int j = 0; j < groups.length; j++) { - Set players = data.get(groups[j]); - dataSets[j].add(players != null ? players.size() : 0); - } - } - - return dataSets; - } - - private static StackDataSet[] getDataSets(DateMap> activityData, String[] colors) { - String[] groups = ActivityIndex.getGroups(); + private static StackDataSet[] getDataSets(DateMap> activityData, String[] colors, String[] groups) { StackDataSet[] dataSets = initializeDataSet(groups, colors); + String[] defaultGroups = ActivityIndex.getDefaultGroups(); for (Map data : activityData.values()) { for (int j = 0; j < groups.length; j++) { - dataSets[j].add((double) data.getOrDefault(groups[j], 0)); + dataSets[j].add((double) data.getOrDefault(defaultGroups[j], 0)); } } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/graphs/stack/StackGraphFactory.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/graphs/stack/StackGraphFactory.java index a9b7a9829..ecf947c69 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/graphs/stack/StackGraphFactory.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/graphs/stack/StackGraphFactory.java @@ -17,8 +17,10 @@ package com.djrapitops.plan.delivery.rendering.json.graphs.stack; import com.djrapitops.plan.delivery.domain.DateMap; +import com.djrapitops.plan.delivery.domain.mutators.ActivityIndex; import com.djrapitops.plan.delivery.formatting.Formatter; import com.djrapitops.plan.delivery.formatting.Formatters; +import com.djrapitops.plan.settings.locale.Locale; import com.djrapitops.plan.settings.theme.Theme; import com.djrapitops.plan.settings.theme.ThemeVal; @@ -34,20 +36,23 @@ import java.util.Map; @Singleton public class StackGraphFactory { + private final Locale locale; private final Theme theme; private final Formatter dayFormatter; @Inject public StackGraphFactory( + Locale locale, Formatters formatters, Theme theme ) { + this.locale = locale; this.theme = theme; this.dayFormatter = formatters.dayLong(); } public StackGraph activityStackGraph(DateMap> activityData) { String[] colors = theme.getPieColors(ThemeVal.GRAPH_ACTIVITY_PIE); - return new ActivityStackGraph(activityData, colors, dayFormatter); + return new ActivityStackGraph(activityData, colors, dayFormatter, ActivityIndex.getGroups(locale)); } } \ No newline at end of file diff --git a/Plan/common/src/main/java/com/djrapitops/plan/settings/config/WorldAliasSettings.java b/Plan/common/src/main/java/com/djrapitops/plan/settings/config/WorldAliasSettings.java index e13a91aad..40fdf2514 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/settings/config/WorldAliasSettings.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/settings/config/WorldAliasSettings.java @@ -24,6 +24,9 @@ import com.djrapitops.plan.gathering.domain.Session; import com.djrapitops.plan.gathering.domain.WorldTimes; import com.djrapitops.plan.processing.Processing; import com.djrapitops.plan.settings.config.paths.DisplaySettings; +import com.djrapitops.plan.settings.locale.Locale; +import com.djrapitops.plan.settings.locale.lang.GenericLang; +import com.djrapitops.plan.settings.locale.lang.HtmlLang; import com.djrapitops.plugin.logging.L; import com.djrapitops.plugin.logging.error.ErrorHandler; import com.djrapitops.plugin.utilities.Verify; @@ -47,17 +50,20 @@ public class WorldAliasSettings { private final Lazy config; private final Supplier> percentageFormatter; + private final Locale locale; private final Processing processing; private final ErrorHandler errorHandler; @Inject public WorldAliasSettings( Lazy config, + Locale locale, Lazy formatters, Processing processing, ErrorHandler errorHandler ) { this.config = config; + this.locale = locale; this.processing = processing; this.errorHandler = errorHandler; @@ -153,13 +159,13 @@ public class WorldAliasSettings { ConfigNode aliases = getAliasSection(); if (!session.supports(SessionKeys.WORLD_TIMES)) { - return "No World Time Data"; + return locale.get(HtmlLang.UNIT_NO_DATA).toString(); } WorldTimes worldTimes = session.getValue(SessionKeys.WORLD_TIMES).orElse(new WorldTimes()); if (!session.supports(SessionKeys.END)) { return worldTimes.getCurrentWorld() .map(currentWorld -> "Current: " + (aliases.contains(currentWorld) ? aliases.getString(currentWorld) : currentWorld)) - .orElse("Current: Unavailable"); + .orElse("Current: " + locale.get(GenericLang.UNAVAILABLE)); } Map playtimePerAlias = getPlaytimePerAlias(worldTimes); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/settings/locale/lang/GenericLang.java b/Plan/common/src/main/java/com/djrapitops/plan/settings/locale/lang/GenericLang.java index bef4c2d2f..8e05e53fb 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/settings/locale/lang/GenericLang.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/settings/locale/lang/GenericLang.java @@ -25,6 +25,7 @@ public enum GenericLang implements Lang { YES("Positive", "Yes"), NO("Negative", "No"), UNKNOWN("Unknown", "Unknown"), + UNAVAILABLE("Unavailable", "Unavailable"), TODAY("Today", "'Today'"), YESTERDAY("Yesterday", "'Yesterday'"); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/settings/locale/lang/HtmlLang.java b/Plan/common/src/main/java/com/djrapitops/plan/settings/locale/lang/HtmlLang.java index a3ca0b500..1e0353db1 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/settings/locale/lang/HtmlLang.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/settings/locale/lang/HtmlLang.java @@ -177,6 +177,7 @@ public enum HtmlLang implements Lang { LABEL_REGISTERED("Registered"), TITLE_TITLE_PLAYER_PUNCHCARD("Punchcard"), TITLE_ALL_TIME("All Time"), + LABEL_NAME("Name"), // ---------------------------------- // OLD // ---------------------------------- 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 099e86199..8665cb56c 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 @@ -1,343 +1,344 @@ -Cmd - Click Me || 请点击此处 -Cmd - Link || §7 •§2 链接:§f -Cmd Disable - Disabled || §a现已禁用计划系统。您仍可使用 /planbungee reload 重启插件。 -Cmd FAIL - Database not open || §c数据库状态为 ${0} - 请稍后再试. -Cmd FAIL - Invalid Username || §c[数据统计] 此玩家不存在。 -Cmd FAIL - No Feature || §e请设置要禁用的功能!(当前支持 ${0}) -Cmd FAIL - No Permission || §c[数据统计] 您没有所需权限。 -Cmd FAIL - Require only one Argument || §c[数据统计] 命令需要一个参数。 -Cmd FAIL - Requires Arguments || §c[数据统计] 命令缺少参数。${0} -Cmd FAIL - Unknown Username || §c[数据统计] 未在数据库中找到此玩家。 -Cmd FAIL - WebUser does not exists || §c用户不存在! -Cmd FAIL - WebUser exists || §c用户已存在! -Cmd Header - Analysis || §f»§2 玩家统计 - 统计结果 -Cmd Header - Info || §f»§2 玩家统计 - 信息 -Cmd Header - Inspect || §f»§2 玩家统计 - 检视结果: -Cmd Header - Network || > §2网络页面 -Cmd Header - Players || > §2玩家 -Cmd Header - Search || §f»§2 玩家统计 - 搜索结果: -Cmd Header - Servers || > §2服务器 -Cmd Header - Web Users || > §2${0} 个网页用户 -Cmd Info - Bungee Connection || §2已连接至Bungee:§f${0} -Cmd Info - Database || §2可用数据库:§f${0} -Cmd Info - Reload Complete || §a成功重载插件 -Cmd Info - Reload Failed || §c重载插件时发生错误,建议重新启动服务器。 -Cmd Info - Update || §2更新可用:§f${0} -Cmd Info - Version || §2版本:§f${0} -Cmd Notify - No WebUser || 您可能还没有网页账户,请输入 /plan register <密码> -Cmd Notify - WebUser register || 已注册新用户:'${0}' 权限级别:${1} -Cmd Qinspect - Activity Index || §2活跃指数:§f${0} | ${1} -Cmd Qinspect - Deaths || §2死亡数:§f${0} -Cmd Qinspect - Geolocation || §2从 §f${0} 登录 -Cmd Qinspect - Last Seen || §2最后在线:§f${0} -Cmd Qinspect - Longest Session || §2最长在线时间:§f${0} -Cmd Qinspect - Mob Kills || §2怪物击杀数:§f${0} -Cmd Qinspect - Player Kills || §2玩家击杀数:§f${0} -Cmd Qinspect - Playtime || §2游玩时间:§f${0} -Cmd Qinspect - Registered || §2注册时间:§f${0} -Cmd Qinspect - Times Kicked || §2踢出次数:§f${0} -Cmd SUCCESS - Feature disabled || §a已在下次插件重载前暂时禁用 '${0}'。 -Cmd SUCCESS - WebUser register || §a已成功添加新用户(${0})!您可以在以下链接中查看Web面板。 -Cmd WARN - Database not open || §e数据库状态为 ${0} - 可能需要花费更多的时间.. -Cmd Web - Permission Levels || >\§70:访问所有页面\§71:访问 '/players' 及所有玩家页\§72:访问用户名与网页用户名一致的玩家页\§73+:无权限 -Command Help - /plan analyze || 查看服务器分析 -Command Help - /plan dev || 开发模式命令 -Command Help - /plan help || 查看命令列表。 -Command Help - /plan info || 查看计划版本 -Command Help - /plan inspect || 检视玩家数据 -Command Help - /plan manage || 数据库管理命令 -Command Help - /plan manage backup || 备份数据库至 .db 文件 -Command Help - /plan manage clear || 从数据库中清空所有数据 -Command Help - /plan manage disable || 暂时禁用功能 -Command Help - /plan manage export || 手动导出 -Command Help - /plan manage hotswap || 热插拔数据库并重启插件 -Command Help - /plan manage import || 从插件中导入数据 -Command Help - /plan manage move || 在数据库间移动数据 -Command Help - /plan manage raw || 查看玩家数据的raw JSON -Command Help - /plan manage remove || 从活跃数据库中移除玩家数据 -Command Help - /plan manage restore || 恢复数据库 -Command Help - /plan manage uninstalled || 在数据库中将一个服务器标记为未安装. -Command Help - /plan network || 查看网络页面 -Command Help - /plan players || 列出所有已缓存玩家名单 -Command Help - /plan qinspect || 在游戏内检视玩家数据 -Command Help - /plan register || 注册网页用户 -Command Help - /plan reload || 重新启动插件(重载配置) -Command Help - /plan search || 搜索玩家 -Command Help - /plan servers || 列出数据库中的服务器 -Command Help - /plan web check || 检查网页用户的权限级别。 -Command Help - /plan web delete || 删除网页用户 -Command Help - /plan web level || 权限级别信息 -Command Help - /plan web list || 列出网页用户 -Command Help - /plan webuser || 管理网页用户 -Command Help - /planbungee disable || 暂时禁用插件 -Database - Apply Patch || 正在应用更新:${0}··· -Database - Patches Applied || 已成功应用所有数据库补丁。 -Database - Patches Applied Already || 已应用所有数据库补丁。 -Database MySQL - Launch Options Error || 启动参数出错,正使用默认参数(${0}) -Database Notify - Clean || 移除了 ${0} 位用户的数据。 -Database Notify - SQLite No WAL || 此服务器版本不支持 SQLite WAL 模式,正使用默认模式。这可能会影响性能。 -Disable || 已禁用插件。 -Disable - Processing || 正在处理未处理的关键任务。(${0}) -Disable - Processing Complete || 处理完毕。 -Disable - Unsaved Session Save || 保存未完成的时域中.. -Disable - WebServer || 正在关闭网页服务器··· -Enable || 已启用插件。 -Enable - Database || ${0}-已建立数据库连接。 -Enable - Notify Empty IP || server.properties 中的 IP 为空且未使用替代 IP。这将会导致地址出错! -Enable - Notify Geolocations disabled || 已关闭地理位置收集。(Data.Geolocations: false) -Enable - Notify Geolocations Internet Required || 插件需要在首次运行时访问互联网以下载 GeoLite2 地理位置数据库。 -Enable - Notify Webserver disabled || 未初始化网页服务器。(WebServer.DisableWebServer: true) -Enable - WebServer || 正在初始化网页服务器··· -Enable FAIL - Database || ${0}-连接数据库失败:${1} -Enable FAIL - Database Patch || 数据库补丁失败,插件必须被禁用。请汇报此问题 -Enable FAIL - GeoDB Write || 保存已下载的 GeoLite2 地理位置数据库时发生问题 -Enable FAIL - WebServer (Proxy) || 网页服务器未初始化 -Enable FAIL - Wrong Database Type || ${0} 此数据类型不存在。 -HTML - COMPARING_15_DAYS || 比较15天前 -HTML - COMPARING_60_DAYS || 比较30天前 -HTML - COMPARING_7_DAYS || 比较7天前 -HTML - DATABASE_NOT_OPEN || 数据库未开放, 请输入 /plan info 查看数据库状态 -HTML - ERROR || 认证时发生错误 -HTML - INDEX_ACTIVE || 活跃 -HTML - INDEX_INACTIVE || 不活跃 -HTML - INDEX_IRREGULAR || 偶尔上线 -HTML - INDEX_REGULAR || 经常上线 -HTML - INDEX_VERY_ACTIVE || 非常活跃 -HTML - LABEL_1ST_WEAPON || 最致命的PVP武器 -HTML - LABEL_2ND_WEAPON || 更致命的武器 -HTML - LABEL_3RD_WEAPON || 致命的PvP武器 -HTML - LABEL_ACTIVITY_INDEX || 活跃指数 -HTML - LABEL_AFK || AFK -HTML - LABEL_AFK_TIME || 挂机时间 -HTML - LABEL_AVG || 平均 -HTML - LABEL_AVG_KDR || 平均击杀比 -HTML - LABEL_AVG_MOB_KDR || 平均怪物击杀比 -HTML - LABEL_AVG_PLAYTIME || 平均游戏时间 -HTML - LABEL_AVG_SESSION_LENGTH || 平均时域长度 -HTML - LABEL_AVG_TPS || 平均TPS -HTML - LABEL_BANNED || 已封禁 -HTML - LABEL_BEST_PEAK || 所有时间峰值 -HTML - LABEL_DEATHS || 死亡数 -HTML - LABEL_DOWNTIME || 停机时间 -HTML - LABEL_DURING_LOW_TPS || TPS Spikes: -HTML - LABEL_ENTITIES || 实体数 -HTML - LABEL_FAVORITE_SERVER || 喜爱的服务器 -HTML - LABEL_FIRST_SESSION_LENGTH || 第一个时域的长度 -HTML - LABEL_FREE_DISK_SPACE || 剩余磁盘空间 -HTML - LABEL_INACTIVE || 未激活 -HTML - LABEL_LAST_PEAK || 上次峰值 -HTML - LABEL_LAST_SEEN || 最后在线 -HTML - LABEL_LOADED_CHUNKS || 已加载的区块 -HTML - LABEL_LOADED_ENTITIES || 已加载的实体 -HTML - LABEL_LONE_JOINS || Lone joins -HTML - LABEL_LONE_NEW_JOINS || Lone newbie joins -HTML - LABEL_LONGEST_SESSION || 最长时域 -HTML - LABEL_LOW_TPS || 最低TPS Spikes -HTML - LABEL_MOB_DEATHS || 被怪物击杀数 -HTML - LABEL_MOB_KDR || 怪物击杀比 -HTML - LABEL_MOB_KILLS || 怪物击杀数 -HTML - LABEL_MOST_ACTIVE_GAMEMODE || 最常用的游戏模式 -HTML - LABEL_NEW || 新 -HTML - LABEL_NEW_PLAYERS || 新玩家 -HTML - LABEL_NICKNAME || 昵称 -HTML - LABEL_ONLINE_FIRST_JOIN || 第一次加入服务器的在线玩家 -HTML - LABEL_OPERATOR || 管理员 -HTML - LABEL_PER_PLAYER || / 玩家 -HTML - LABEL_PER_REGULAR_PLAYER || / 普通玩家 -HTML - LABEL_PLAYER_DEATHS || 被玩家击杀数 -HTML - LABEL_PLAYER_KILLS || 玩家击杀数 -HTML - LABEL_PLAYERS_ONLINE || 在线玩家 -HTML - LABEL_PLAYTIME || 游玩时间 -HTML - LABEL_REGISTERED || 已注册 -HTML - LABEL_REGISTERED_PLAYERS || 已注册的玩家 -HTML - LABEL_REGULAR || Regular -HTML - LABEL_REGULAR_PLAYERS || 普通玩家 -HTML - LABEL_RETENTION || 新玩家留坑率 -HTML - LABEL_SERVER_DOWNTIME || 关服时间 -HTML - LABEL_SERVER_OCCUPIED || 开服时间 -HTML - LABEL_SESSION_ENDED || 时域之末 -HTML - LABEL_SESSION_LENGTH || 时域长度 -HTML - LABEL_SESSION_MEDIAN || 平均时域 -HTML - LABEL_TIMES_KICKED || 被踢次数 -HTML - LABEL_TOTAL_PLAYERS || 总玩家数 -HTML - LABEL_TOTAL_PLAYTIME || 总游戏时间 -HTML - LABEL_UNIQUE_PLAYERS || 普通玩家 -HTML - LINK_BACK_NETWORK || 网络页面 -HTML - LINK_BACK_SERVER || 服务器页面 -HTML - LINK_CHANGELOG || 查看更新日志 -HTML - LINK_DISCORD || Discord支持 -HTML - LINK_DOWNLOAD || 下载 -HTML - LINK_ISSUES || 提问 -HTML - LINK_NIGHT_MODE || 夜晚模式 -HTML - LINK_QUICK_VIEW || 快速检索 -HTML - LINK_SERVER_ANALYSIS || 服务器分析 -HTML - LINK_WIKI || Plan Wiki,教程 & 文档 -HTML - LOCAL_MACHINE || 本机 -HTML - NAV_PLUGINS || 插件 -HTML - NEW_CALENDAR || 新: -HTML - NO_KILLS || 无击杀数 -HTML - OFFLINE || 离线 -HTML - ONLINE || 在线 -HTML - PER_DAY || / 天 -HTML - PLAYERS_TEXT || 玩家 -HTML - SIDE_GEOLOCATIONS || 地理位置 -HTML - SIDE_INFORMATION || 信息 -HTML - SIDE_NETWORK_OVERVIEW || 网络预览 -HTML - SIDE_OVERVIEW || 预览 -HTML - SIDE_PERFORMANCE || 性能 -HTML - SIDE_PLAYER_LIST || 玩家列表 -HTML - SIDE_PLAYERBASE || Playerbase -HTML - SIDE_PLAYERBASE_OVERVIEW || Playerbase预览 -HTML - SIDE_PLUGINS || 插件 -HTML - SIDE_PVP_PVE || PvP & PvE -HTML - SIDE_SERVERS || 服务器 -HTML - SIDE_SERVERS_TITLE || 服务器 -HTML - SIDE_SESSIONS || 时域 -HTML - SIDE_TO_MAIN_PAGE || 到主页面 -HTML - TEXT_CLICK_TO_EXPAND || 点击拓展 -HTML - TEXT_CONTRIBUTORS_CODE || 码农 -HTML - TEXT_CONTRIBUTORS_LOCALE || 译者 -HTML - TEXT_CONTRIBUTORS_MONEY || 特别感谢那些在经济上支持该插件发展的人. -HTML - TEXT_CONTRIBUTORS_THANKS || 另外以下 awesome people 也为该插件作出了贡献: -HTML - TEXT_DEV_VERSION || 该版本为开发版本. -HTML - TEXT_DEVELOPED_BY || 的开发者为 -HTML - TEXT_LICENSED_UNDER || is developed and licensed under -HTML - TEXT_METRICS || bStats Metrics -HTML - TEXT_NO_EXTENSION_DATA || 没有拓展数据 -HTML - TEXT_NO_LOW_TPS || No low tps spikes -HTML - TEXT_PLUGIN_INFORMATION || 插件信息 -HTML - TEXT_VERSION || 有新版本的插件可用. -HTML - TITLE_30_DAYS || 30 天 -HTML - TITLE_30_DAYS_AGO || 30 天前 -HTML - TITLE_ALL || 全部 -HTML - TITLE_ALL_TIME || 所有时间 -HTML - TITLE_AS_NUMBERS || 作为数字 -HTML - TITLE_AVG_PING || 平均延迟 -HTML - TITLE_BEST_PING || 最低延迟 -HTML - TITLE_CALENDAR || 日历 -HTML - TITLE_CONNECTION_INFO || 连接信息 -HTML - TITLE_COUNTRY || 国家 -HTML - TITLE_CPU_RAM || CPU & RAM -HTML - TITLE_CURRENT_PLAYERBASE || 当前玩家 -HTML - TITLE_DISK || 磁盘空间 -HTML - TITLE_GRAPH_DAY_BY_DAY || Day by Day -HTML - TITLE_GRAPH_NETWORK_ONLINE_ACTIVITY || Network Online Activity -HTML - TITLE_GRAPH_PUNCHCARD || 打卡签到30天 -HTML - TITLE_INSIGHTS || Insights30天 -HTML - TITLE_IS_AVAILABLE || 可用 -HTML - TITLE_LAST_24_HOURS || 过去 24 小时 -HTML - TITLE_LAST_30_DAYS || 过去 30 天 -HTML - TITLE_LAST_7_DAYS || 过去 7 天 -HTML - TITLE_LAST_CONNECTED || 最后连接 -HTML - TITLE_LENGTH || 长度 -HTML - TITLE_MOST_PLAYED_WORLD || 最多玩家的世界 -HTML - TITLE_NETWORK || 服务器网络 -HTML - TITLE_NETWORK_AS_NUMBERS || Network as Numbers -HTML - TITLE_NOW || 现在 -HTML - TITLE_ONLINE_ACTIVITY || 在线活动 -HTML - TITLE_ONLINE_ACTIVITY_AS_NUMBERS || Online Activity as Numbers -HTML - TITLE_ONLINE_ACTIVITY_OVERVIEW || Online Activity Overview -HTML - TITLE_PERFORMANCE_AS_NUMBERS || Performance as Numbers -HTML - TITLE_PING || 延迟 -HTML - TITLE_PLAYER || 玩家 -HTML - TITLE_PLAYER_OVERVIEW || 玩家预览 -HTML - TITLE_PLAYERBASE_DEVELOPMENT || 玩家发展 -HTML - TITLE_PVP_DEATHS || 最近的PVP死亡 -HTML - TITLE_PVP_KILLS || 最近的PVP击杀 -HTML - TITLE_PVP_PVE_NUMBERS || PvP & PvE as Numbers -HTML - TITLE_RECENT_KILLS || 最近击杀 -HTML - TITLE_RECENT_SESSIONS || 最近时域 -HTML - TITLE_SEEN_NICKNAMES || 可视昵称 -HTML - TITLE_SERVER || 服务器 -HTML - TITLE_SERVER_AS_NUMBERS || Server as Numbers -HTML - TITLE_SERVER_OVERVIEW || 服务器预览 -HTML - TITLE_SERVER_PLAYTIME || 服务器游戏时间 -HTML - TITLE_SERVER_PLAYTIME_30 || 服务器30天的游戏时间 -HTML - TITLE_SESSION_START || 开始的时域 -HTML - TITLE_THEME_SELECT || 选择主题 -HTML - TITLE_TITLE_PLAYER_PUNCHCARD || Punchcard -HTML - TITLE_TPS || TPS -HTML - TITLE_TREND || 趋势 -HTML - TITLE_TRENDS || 30天趋势 -HTML - TITLE_VERSION || 版本 -HTML - TITLE_WEEK_COMPARISON || 每周对比 -HTML - TITLE_WORLD || 加载世界 -HTML - TITLE_WORLD_PLAYTIME || 世界游玩时间 -HTML - TITLE_WORST_PING || 最高延迟 -HTML - TOTAL_ACTIVE_TEXT || 总活跃玩家 -HTML - TOTAL_AFK || 总挂机玩家 -HTML - TOTAL_PLAYERS || 总玩家 -HTML - UNIQUE_CALENDAR || 普通玩家: -HTML - UNIT_NO_DATA || 没有数据 -HTML - UNIT_THE_PLAYERS || 玩家 -HTML - USER_AND_PASS_NOT_SPECIFIED || 未指定用户名与密码 -HTML - USER_DOES_NOT_EXIST || 用户不存在 -HTML - USER_PASS_MISMATCH || 用户名与密码不匹配 -HTML - WITH || 与 -HTML ERRORS - ACCESS_DENIED_403 || 拒绝访问 -HTML ERRORS - AUTH_FAIL_TIPS_401 || - 确保您已使用 /plan register 注册用户
- 检查用户名与密码是否正确
- 用户名与密码区分大小写

若您忘记了密码,请让工作人员删除您的旧密码并重新注册。 -HTML ERRORS - AUTHENTICATION_FAILED_401 || 认证失败。 -HTML ERRORS - FORBIDDEN_403 || 禁止访问 -HTML ERRORS - NO_SERVERS_404 || 无可执行此请求的在线服务器。 -HTML ERRORS - NOT_FOUND_404 || 未找到 -HTML ERRORS - NOT_PLAYED_404 || 玩家从未在此服务器上游玩过。 -HTML ERRORS - PAGE_NOT_FOUND_404 || 页面不存在。 -HTML ERRORS - UNAUTHORIZED_401 || 未认证 -HTML ERRORS - UNKNOWN_PAGE_404 || 请确保您正通过命令所给出的链接访问,示例:

/player/玩家名
/server/服务器名

-HTML ERRORS - UUID_404 || 未在数据库中找到玩家的 UUID。 -In Depth Help - /plan ? || §2/plan - 主命令\§f 用于访问所有子命令及帮助\§7 /plan - 列出子命令\§7 /plan <子命令> ? - 详细帮助 -In Depth Help - /plan analyze ? || §2分析命令\§f 用于刷新分析缓存及访问结果页面\§7 /plan status 可用于在网页在线时检查分析状态fen.\§7 别名:analyze, analyse, analysis, a -In Depth Help - /plan inspect ? || §2检视命令\§f 用于获取用户检视页链接。\§7 个人检视页可通过输入 /plan inspect 访问\§7 别名:/plan <名称> -In Depth Help - /plan manage ? || §2管理命令\§f 用于管理插件数据库。\§7 别名:/plan m\§7 /plan m - Auflistung der Unterbefehle\§7 /plan m <子命令> ? - 详细帮助 -In Depth Help - /plan manage backup ? || > §2备份命令\ 用于建立新 SQLite 数据库(.db 文件)并包含当前在计划插件文件夹中所有的活跃数据库内容。 -In Depth Help - /plan manage clear ? || §2管理清除命令\§f 用于清除活跃数据库中的所有数据。\§7 插件在清理完毕后应被重载。\§7 别名:/plan pl -In Depth Help - /plan manage disable ? || > §2关闭子命令\ Can disable parts of the plugin until next reload.\ Accepted arguments:\ §2kickcount §fDisables kick counts in case /kickall is used on shutdown macro. -In Depth Help - /plan manage export ? || > §2导出子命令\ Trigger export to result folders.\ Accepted Arguments:\ §2list §fList possible arguments.\ §2players §fExport /players, /player pages + /player/raw json depending on config values.\ §2server_json §fExport /server/raw JSON if enabled in config. -In Depth Help - /plan manage import ? || §2管理导入命令\§f 用于从其它来源导入数据\§7 在导入过程中将禁用数据分析。 -In Depth Help - /plan manage move ? || > §2移动指令\ 将数据从 SQLite 移动至 MySQL,反之亦然。\ 目标数据库将在转移前被清除。 -In Depth Help - /plan manage raw ? || > §2Raw数据子命令\ Displays link to raw JSON data page.\ Not available if Plan webserver is not enabled. -In Depth Help - /plan manage remove ? || §2管理移除命令\§f 用于从活跃数据库中移除用户数据。 -In Depth Help - /plan manage restore ? || > §2恢复命令\ 从先前备份的 SQLite 数据库中恢复数据(.db 文件)\ 您也可以从其他服务器中恢复 database.db 到 MySQL。\ 目标数据库将在传输前被清除。 -In Depth Help - /plan manage uninstalled ? || > §2卸载服务器的子命令\ 在数据库中将一个服务器视为未安装。\ Can not mark the server the command is being used on as uninstalled.\ 将会影响连接系统。 -In Depth Help - /plan network ? || > §2网络命令\ 显示到网络页的链接。\ 若不在群组网络上,此页面将显示为服务器页面。 -In Depth Help - /plan players ? || > §2玩家命令\ 显示到玩家页的链接。 -In Depth Help - /plan qinspect ? || §2快速检视命令\§f 用于获取游戏内关于检视的信息。\§7 相比检视网页有着更少的信息。\§7 别名:/plan qi -In Depth Help - /plan reload ? || > §2重载命令\ 使用 onDisable 与 onEnable 重新载入插件。\ §b不支持运行时热切换插件 -In Depth Help - /plan search ? || §2搜索命令\§f 用于获取匹配特定参数的玩家名列表。\§7 示例:/plan search 123 - 搜索名称中包含 123 的所有玩家。 -In Depth Help - /plan servers ? || > §2服务器命令\ 显示数据库中的计划服务器列表。\ 可用于调试在网络上数据库注册的问题。 -In Depth Help - /plan web ? || < §2网页用户管理命令。\ §2/plan web §f列出子命令\ §2/plan web <子命令> ? §f详细帮助 -In Depth Help - /plan web register ? || > §2注册命令\ 注册一位新的网页用户。\ 为其他用户注册需要 plan.webmanage 权限。\ 密码通过使用随机密码盐的 PBKDF2 哈希方法加密(重复 64000 次 SHA1)。 -In Depth Help - /planbungee disable ? || > §2禁用命令\ 在 PlanBungee 上运行 onDisable。\ 插件之后需要运行 /planbungee reload 以重新启用。\ §b不支持运行时热切换插件 -Manage - Confirm Overwrite || 数据库 ${0} 中的数据将被覆盖! -Manage - Confirm Removal || 数据库 ${0} 中的数据将被移除! -Manage - Fail || > §c[数据统计] 处理数据时发生错误! ${0} -Manage - Fail File not found || > §c[数据统计] 备份文件不存在! ${0} -Manage - Fail Incorrect Database || > §c'${0}' 不是一个支持的数据库。 -Manage - Fail No Exporter || §e导出器 '${0}' 不存在 -Manage - Fail No Importer || §e导入器 '${0}' 不存在 -Manage - Fail No Server || 找不到这个服务器. -Manage - Fail Same Database || > §c[数据统计] 无法移动至相同的数据库! -Manage - Fail Same server || 无法将服务器标记为未安装 (你已在该服务器) -Manage - Fail, Confirmation || > §c[数据统计] 请添加 -a 以确认执行!${0} -Manage - List Importers || 导入器: -Manage - Remind HotSwap || §e[数据统计] 请切换至新数据库并重载插件(/plan m hotswap ${0}) -Manage - Start || »§7 正在处理数据... -Manage - Success || §f» §2 成功! -Negative || 否 -Positive || 是 -Today || '今天' -Unknown || 未知 -Version - DEV || 这是开发版本。 -Version - Latest || 您正使用最新版本。 -Version - New || 有新版本(${0})可用 ${1} -Version - New (old) || 新版本在 ${0} 可用 -Version FAIL - Read info (old) || 无法检查最新版本号 -Version FAIL - Read versions.txt || 无法从 Github/versions.txt 加载版本信息 -Web User Listing || §2${0} §7:§f${1} -WebServer - Notify HTTP || 网页服务器:无证书 -> 正使用 HTTP 服务器提供可视化效果。 -WebServer - Notify HTTP User Auth || 网页服务器:已禁用用户认证!(HTTP 方式不安全) -WebServer - Notify no Cert file || 网页服务器:未找到证书密钥存储文件:${0} -WebServer FAIL - Port Bind || 未成功初始化网页服务器。端口(${0})是否被占用? -WebServer FAIL - SSL Context || 网页服务器:SSL 环境初始化失败。 -WebServer FAIL - Store Load || 网页服务器:SSL 证书载入失败。 -Yesterday || '昨天' \ No newline at end of file +Cmd - Click Me || 请点击此处 +Cmd - Link || §7 •§2 链接:§f +Cmd Disable - Disabled || §a现已禁用计划系统。您仍可使用 /planbungee reload 重启插件。 +Cmd FAIL - Database not open || §c数据库状态为 ${0} - 请稍后再试. +Cmd FAIL - Invalid Username || §c[数据统计] 此玩家不存在。 +Cmd FAIL - No Feature || §e请设置要禁用的功能!(当前支持 ${0}) +Cmd FAIL - No Permission || §c[数据统计] 您没有所需权限。 +Cmd FAIL - Require only one Argument || §c[数据统计] 命令需要一个参数。 +Cmd FAIL - Requires Arguments || §c[数据统计] 命令缺少参数。${0} +Cmd FAIL - Unknown Username || §c[数据统计] 未在数据库中找到此玩家。 +Cmd FAIL - WebUser does not exists || §c用户不存在! +Cmd FAIL - WebUser exists || §c用户已存在! +Cmd Header - Analysis || §f»§2 玩家统计 - 统计结果 +Cmd Header - Info || §f»§2 玩家统计 - 信息 +Cmd Header - Inspect || §f»§2 玩家统计 - 检视结果: +Cmd Header - Network || > §2网络页面 +Cmd Header - Players || > §2玩家 +Cmd Header - Search || §f»§2 玩家统计 - 搜索结果: +Cmd Header - Servers || > §2服务器 +Cmd Header - Web Users || > §2${0} 个网页用户 +Cmd Info - Bungee Connection || §2已连接至Bungee:§f${0} +Cmd Info - Database || §2可用数据库:§f${0} +Cmd Info - Reload Complete || §a成功重载插件 +Cmd Info - Reload Failed || §c重载插件时发生错误,建议重新启动服务器。 +Cmd Info - Update || §2更新可用:§f${0} +Cmd Info - Version || §2版本:§f${0} +Cmd Notify - No WebUser || 您可能还没有网页账户,请输入 /plan register <密码> +Cmd Notify - WebUser register || 已注册新用户:'${0}' 权限级别:${1} +Cmd Qinspect - Activity Index || §2活跃指数:§f${0} | ${1} +Cmd Qinspect - Deaths || §2死亡数:§f${0} +Cmd Qinspect - Geolocation || §2从 §f${0} 登录 +Cmd Qinspect - Last Seen || §2最后在线:§f${0} +Cmd Qinspect - Longest Session || §2最长在线时间:§f${0} +Cmd Qinspect - Mob Kills || §2怪物击杀数:§f${0} +Cmd Qinspect - Player Kills || §2玩家击杀数:§f${0} +Cmd Qinspect - Playtime || §2游玩时间:§f${0} +Cmd Qinspect - Registered || §2注册时间:§f${0} +Cmd Qinspect - Times Kicked || §2踢出次数:§f${0} +Cmd SUCCESS - Feature disabled || §a已在下次插件重载前暂时禁用 '${0}'。 +Cmd SUCCESS - WebUser register || §a已成功添加新用户(${0})!您可以在以下链接中查看Web面板。 +Cmd WARN - Database not open || §e数据库状态为 ${0} - 可能需要花费更多的时间.. +Cmd Web - Permission Levels || >\§70:访问所有页面\§71:访问 '/players' 及所有玩家页\§72:访问用户名与网页用户名一致的玩家页\§73+:无权限 +Command Help - /plan analyze || 查看服务器分析 +Command Help - /plan dev || 开发模式命令 +Command Help - /plan help || 查看命令列表。 +Command Help - /plan info || 查看计划版本 +Command Help - /plan inspect || 检视玩家数据 +Command Help - /plan manage || 数据库管理命令 +Command Help - /plan manage backup || 备份数据库至 .db 文件 +Command Help - /plan manage clear || 从数据库中清空所有数据 +Command Help - /plan manage disable || 暂时禁用功能 +Command Help - /plan manage export || 手动导出 +Command Help - /plan manage hotswap || 热插拔数据库并重启插件 +Command Help - /plan manage import || 从插件中导入数据 +Command Help - /plan manage move || 在数据库间移动数据 +Command Help - /plan manage raw || 查看玩家数据的raw JSON +Command Help - /plan manage remove || 从活跃数据库中移除玩家数据 +Command Help - /plan manage restore || 恢复数据库 +Command Help - /plan manage uninstalled || 在数据库中将一个服务器标记为未安装. +Command Help - /plan network || 查看网络页面 +Command Help - /plan players || 列出所有已缓存玩家名单 +Command Help - /plan qinspect || 在游戏内检视玩家数据 +Command Help - /plan register || 注册网页用户 +Command Help - /plan reload || 重新启动插件(重载配置) +Command Help - /plan search || 搜索玩家 +Command Help - /plan servers || 列出数据库中的服务器 +Command Help - /plan web check || 检查网页用户的权限级别。 +Command Help - /plan web delete || 删除网页用户 +Command Help - /plan web level || 权限级别信息 +Command Help - /plan web list || 列出网页用户 +Command Help - /plan webuser || 管理网页用户 +Command Help - /planbungee disable || 暂时禁用插件 +Database - Apply Patch || 正在应用更新:${0}··· +Database - Patches Applied || 已成功应用所有数据库补丁。 +Database - Patches Applied Already || 已应用所有数据库补丁。 +Database MySQL - Launch Options Error || 启动参数出错,正使用默认参数(${0}) +Database Notify - Clean || 移除了 ${0} 位用户的数据。 +Database Notify - SQLite No WAL || 此服务器版本不支持 SQLite WAL 模式,正使用默认模式。这可能会影响性能。 +Disable || 已禁用插件。 +Disable - Processing || 正在处理未处理的关键任务。(${0}) +Disable - Processing Complete || 处理完毕。 +Disable - Unsaved Session Save || 保存未完成的时域中.. +Disable - WebServer || 正在关闭网页服务器··· +Enable || 已启用插件。 +Enable - Database || ${0}-已建立数据库连接。 +Enable - Notify Empty IP || server.properties 中的 IP 为空且未使用替代 IP。这将会导致地址出错! +Enable - Notify Geolocations disabled || 已关闭地理位置收集。(Data.Geolocations: false) +Enable - Notify Geolocations Internet Required || 插件需要在首次运行时访问互联网以下载 GeoLite2 地理位置数据库。 +Enable - Notify Webserver disabled || 未初始化网页服务器。(WebServer.DisableWebServer: true) +Enable - WebServer || 正在初始化网页服务器··· +Enable FAIL - Database || ${0}-连接数据库失败:${1} +Enable FAIL - Database Patch || 数据库补丁失败,插件必须被禁用。请汇报此问题 +Enable FAIL - GeoDB Write || 保存已下载的 GeoLite2 地理位置数据库时发生问题 +Enable FAIL - WebServer (Proxy) || 网页服务器未初始化 +Enable FAIL - Wrong Database Type || ${0} 此数据类型不存在。 +HTML - COMPARING_15_DAYS || 比较15天前 +HTML - COMPARING_60_DAYS || 比较30天前 +HTML - COMPARING_7_DAYS || 比较7天前 +HTML - DATABASE_NOT_OPEN || 数据库未开放, 请输入 /plan info 查看数据库状态 +HTML - ERROR || 认证时发生错误 +HTML - INDEX_ACTIVE || 活跃 +HTML - INDEX_INACTIVE || 不活跃 +HTML - INDEX_IRREGULAR || 偶尔上线 +HTML - INDEX_REGULAR || 经常上线 +HTML - INDEX_VERY_ACTIVE || 非常活跃 +HTML - LABEL_1ST_WEAPON || 最致命的PVP武器 +HTML - LABEL_2ND_WEAPON || 更致命的武器 +HTML - LABEL_3RD_WEAPON || 致命的PvP武器 +HTML - LABEL_ACTIVITY_INDEX || 活跃指数 +HTML - LABEL_AFK || AFK +HTML - LABEL_AFK_TIME || 挂机时间 +HTML - LABEL_AVG || 平均 +HTML - LABEL_AVG_KDR || 平均击杀比 +HTML - LABEL_AVG_MOB_KDR || 平均怪物击杀比 +HTML - LABEL_AVG_PLAYTIME || 平均游戏时间 +HTML - LABEL_AVG_SESSION_LENGTH || 平均时域长度 +HTML - LABEL_AVG_TPS || 平均TPS +HTML - LABEL_BANNED || 已封禁 +HTML - LABEL_BEST_PEAK || 所有时间峰值 +HTML - LABEL_DEATHS || 死亡数 +HTML - LABEL_DOWNTIME || 停机时间 +HTML - LABEL_DURING_LOW_TPS || TPS Spikes: +HTML - LABEL_ENTITIES || 实体数 +HTML - LABEL_FAVORITE_SERVER || 喜爱的服务器 +HTML - LABEL_FIRST_SESSION_LENGTH || 第一个时域的长度 +HTML - LABEL_FREE_DISK_SPACE || 剩余磁盘空间 +HTML - LABEL_INACTIVE || 未激活 +HTML - LABEL_LAST_PEAK || 上次峰值 +HTML - LABEL_LAST_SEEN || 最后在线 +HTML - LABEL_LOADED_CHUNKS || 已加载的区块 +HTML - LABEL_LOADED_ENTITIES || 已加载的实体 +HTML - LABEL_LONE_JOINS || Lone joins +HTML - LABEL_LONE_NEW_JOINS || Lone newbie joins +HTML - LABEL_LONGEST_SESSION || 最长时域 +HTML - LABEL_LOW_TPS || 最低TPS Spikes +HTML - LABEL_MOB_DEATHS || 被怪物击杀数 +HTML - LABEL_MOB_KDR || 怪物击杀比 +HTML - LABEL_MOB_KILLS || 怪物击杀数 +HTML - LABEL_MOST_ACTIVE_GAMEMODE || 最常用的游戏模式 +HTML - LABEL_NEW || 新 +HTML - LABEL_NEW_PLAYERS || 新玩家 +HTML - LABEL_NICKNAME || 昵称 +HTML - LABEL_ONLINE_FIRST_JOIN || 第一次加入服务器的在线玩家 +HTML - LABEL_OPERATOR || 管理员 +HTML - LABEL_PER_PLAYER || / 玩家 +HTML - LABEL_PER_REGULAR_PLAYER || / 普通玩家 +HTML - LABEL_PLAYER_DEATHS || 被玩家击杀数 +HTML - LABEL_PLAYER_KILLS || 玩家击杀数 +HTML - LABEL_PLAYERS_ONLINE || 在线玩家 +HTML - LABEL_PLAYTIME || 游玩时间 +HTML - LABEL_REGISTERED || 已注册 +HTML - LABEL_REGISTERED_PLAYERS || 已注册的玩家 +HTML - LABEL_REGULAR || Regular +HTML - LABEL_REGULAR_PLAYERS || 普通玩家 +HTML - LABEL_RETENTION || 新玩家留坑率 +HTML - LABEL_SERVER_DOWNTIME || 关服时间 +HTML - LABEL_SERVER_OCCUPIED || 开服时间 +HTML - LABEL_SESSION_ENDED || 时域之末 +HTML - LABEL_SESSION_LENGTH || 时域长度 +HTML - LABEL_SESSION_MEDIAN || 平均时域 +HTML - LABEL_TIMES_KICKED || 被踢次数 +HTML - LABEL_TOTAL_PLAYERS || 总玩家数 +HTML - LABEL_TOTAL_PLAYTIME || 总游戏时间 +HTML - LABEL_UNIQUE_PLAYERS || 普通玩家 +HTML - LINK_BACK_NETWORK || 网络页面 +HTML - LINK_BACK_SERVER || 服务器页面 +HTML - LINK_CHANGELOG || 查看更新日志 +HTML - LINK_DISCORD || Discord支持 +HTML - LINK_DOWNLOAD || 下载 +HTML - LINK_ISSUES || 提问 +HTML - LINK_NIGHT_MODE || 夜晚模式 +HTML - LINK_QUICK_VIEW || 快速检索 +HTML - LINK_SERVER_ANALYSIS || 服务器分析 +HTML - LINK_WIKI || Plan Wiki,教程 & 文档 +HTML - LOCAL_MACHINE || 本机 +HTML - NAV_PLUGINS || 插件 +HTML - NEW_CALENDAR || 新: +HTML - NO_KILLS || 无击杀数 +HTML - OFFLINE || 离线 +HTML - ONLINE || 在线 +HTML - PER_DAY || / 天 +HTML - PLAYERS_TEXT || 玩家 +HTML - SIDE_GEOLOCATIONS || 地理位置 +HTML - SIDE_INFORMATION || 信息 +HTML - SIDE_NETWORK_OVERVIEW || 网络预览 +HTML - SIDE_OVERVIEW || 预览 +HTML - SIDE_PERFORMANCE || 性能 +HTML - SIDE_PLAYER_LIST || 玩家列表 +HTML - SIDE_PLAYERBASE || Playerbase +HTML - SIDE_PLAYERBASE_OVERVIEW || Playerbase预览 +HTML - SIDE_PLUGINS || 插件 +HTML - SIDE_PVP_PVE || PvP & PvE +HTML - SIDE_SERVERS || 服务器 +HTML - SIDE_SERVERS_TITLE || 服务器 +HTML - SIDE_SESSIONS || 时域 +HTML - SIDE_TO_MAIN_PAGE || 到主页面 +HTML - TEXT_CLICK_TO_EXPAND || 点击拓展 +HTML - TEXT_CONTRIBUTORS_CODE || 码农 +HTML - TEXT_CONTRIBUTORS_LOCALE || 译者 +HTML - TEXT_CONTRIBUTORS_MONEY || 特别感谢那些在经济上支持该插件发展的人. +HTML - TEXT_CONTRIBUTORS_THANKS || 另外以下 awesome people 也为该插件作出了贡献: +HTML - TEXT_DEV_VERSION || 该版本为开发版本. +HTML - TEXT_DEVELOPED_BY || 的开发者为 +HTML - TEXT_LICENSED_UNDER || is developed and licensed under +HTML - TEXT_METRICS || bStats Metrics +HTML - TEXT_NO_EXTENSION_DATA || 没有拓展数据 +HTML - TEXT_NO_LOW_TPS || No low tps spikes +HTML - TEXT_PLUGIN_INFORMATION || 插件信息 +HTML - TEXT_VERSION || 有新版本的插件可用. +HTML - TITLE_30_DAYS || 30 天 +HTML - TITLE_30_DAYS_AGO || 30 天前 +HTML - TITLE_ALL || 全部 +HTML - TITLE_ALL_TIME || 所有时间 +HTML - TITLE_AS_NUMBERS || 作为数字 +HTML - TITLE_AVG_PING || 平均延迟 +HTML - TITLE_BEST_PING || 最低延迟 +HTML - TITLE_CALENDAR || 日历 +HTML - TITLE_CONNECTION_INFO || 连接信息 +HTML - TITLE_COUNTRY || 国家 +HTML - TITLE_CPU_RAM || CPU & RAM +HTML - TITLE_CURRENT_PLAYERBASE || 当前玩家 +HTML - TITLE_DISK || 磁盘空间 +HTML - TITLE_GRAPH_DAY_BY_DAY || Day by Day +HTML - TITLE_GRAPH_NETWORK_ONLINE_ACTIVITY || Network Online Activity +HTML - TITLE_GRAPH_PUNCHCARD || 打卡签到30天 +HTML - TITLE_INSIGHTS || Insights30天 +HTML - TITLE_IS_AVAILABLE || 可用 +HTML - TITLE_LAST_24_HOURS || 过去 24 小时 +HTML - TITLE_LAST_30_DAYS || 过去 30 天 +HTML - TITLE_LAST_7_DAYS || 过去 7 天 +HTML - TITLE_LAST_CONNECTED || 最后连接 +HTML - TITLE_LENGTH || 长度 +HTML - TITLE_MOST_PLAYED_WORLD || 最多玩家的世界 +HTML - TITLE_NETWORK || 服务器网络 +HTML - TITLE_NETWORK_AS_NUMBERS || Network as Numbers +HTML - TITLE_NOW || 现在 +HTML - TITLE_ONLINE_ACTIVITY || 在线活动 +HTML - TITLE_ONLINE_ACTIVITY_AS_NUMBERS || Online Activity as Numbers +HTML - TITLE_ONLINE_ACTIVITY_OVERVIEW || Online Activity Overview +HTML - TITLE_PERFORMANCE_AS_NUMBERS || Performance as Numbers +HTML - TITLE_PING || 延迟 +HTML - TITLE_PLAYER || 玩家 +HTML - TITLE_PLAYER_OVERVIEW || 玩家预览 +HTML - TITLE_PLAYERBASE_DEVELOPMENT || 玩家发展 +HTML - TITLE_PVP_DEATHS || 最近的PVP死亡 +HTML - TITLE_PVP_KILLS || 最近的PVP击杀 +HTML - TITLE_PVP_PVE_NUMBERS || PvP & PvE as Numbers +HTML - TITLE_RECENT_KILLS || 最近击杀 +HTML - TITLE_RECENT_SESSIONS || 最近时域 +HTML - TITLE_SEEN_NICKNAMES || 可视昵称 +HTML - TITLE_SERVER || 服务器 +HTML - TITLE_SERVER_AS_NUMBERS || Server as Numbers +HTML - TITLE_SERVER_OVERVIEW || 服务器预览 +HTML - TITLE_SERVER_PLAYTIME || 服务器游戏时间 +HTML - TITLE_SERVER_PLAYTIME_30 || 服务器30天的游戏时间 +HTML - TITLE_SESSION_START || 开始的时域 +HTML - TITLE_THEME_SELECT || 选择主题 +HTML - TITLE_TITLE_PLAYER_PUNCHCARD || Punchcard +HTML - TITLE_TPS || TPS +HTML - TITLE_TREND || 趋势 +HTML - TITLE_TRENDS || 30天趋势 +HTML - TITLE_VERSION || 版本 +HTML - TITLE_WEEK_COMPARISON || 每周对比 +HTML - TITLE_WORLD || 加载世界 +HTML - TITLE_WORLD_PLAYTIME || 世界游玩时间 +HTML - TITLE_WORST_PING || 最高延迟 +HTML - TOTAL_ACTIVE_TEXT || 总活跃玩家 +HTML - TOTAL_AFK || 总挂机玩家 +HTML - TOTAL_PLAYERS || 总玩家 +HTML - UNIQUE_CALENDAR || 普通玩家: +HTML - UNIT_NO_DATA || 没有数据 +HTML - UNIT_THE_PLAYERS || 玩家 +HTML - USER_AND_PASS_NOT_SPECIFIED || 未指定用户名与密码 +HTML - USER_DOES_NOT_EXIST || 用户不存在 +HTML - USER_PASS_MISMATCH || 用户名与密码不匹配 +HTML - WITH || 与 +HTML ERRORS - ACCESS_DENIED_403 || 拒绝访问 +HTML ERRORS - AUTH_FAIL_TIPS_401 || - 确保您已使用 /plan register 注册用户
- 检查用户名与密码是否正确
- 用户名与密码区分大小写

若您忘记了密码,请让工作人员删除您的旧密码并重新注册。 +HTML ERRORS - AUTHENTICATION_FAILED_401 || 认证失败。 +HTML ERRORS - FORBIDDEN_403 || 禁止访问 +HTML ERRORS - NO_SERVERS_404 || 无可执行此请求的在线服务器。 +HTML ERRORS - NOT_FOUND_404 || 未找到 +HTML ERRORS - NOT_PLAYED_404 || 玩家从未在此服务器上游玩过。 +HTML ERRORS - PAGE_NOT_FOUND_404 || 页面不存在。 +HTML ERRORS - UNAUTHORIZED_401 || 未认证 +HTML ERRORS - UNKNOWN_PAGE_404 || 请确保您正通过命令所给出的链接访问,示例:

/player/玩家名
/server/服务器名

+HTML ERRORS - UUID_404 || 未在数据库中找到玩家的 UUID。 +In Depth Help - /plan ? || §2/plan - 主命令\§f 用于访问所有子命令及帮助\§7 /plan - 列出子命令\§7 /plan <子命令> ? - 详细帮助 +In Depth Help - /plan analyze ? || §2分析命令\§f 用于刷新分析缓存及访问结果页面\§7 /plan status 可用于在网页在线时检查分析状态fen.\§7 别名:analyze, analyse, analysis, a +In Depth Help - /plan inspect ? || §2检视命令\§f 用于获取用户检视页链接。\§7 个人检视页可通过输入 /plan inspect 访问\§7 别名:/plan <名称> +In Depth Help - /plan manage ? || §2管理命令\§f 用于管理插件数据库。\§7 别名:/plan m\§7 /plan m - Auflistung der Unterbefehle\§7 /plan m <子命令> ? - 详细帮助 +In Depth Help - /plan manage backup ? || > §2备份命令\ 用于建立新 SQLite 数据库(.db 文件)并包含当前在计划插件文件夹中所有的活跃数据库内容。 +In Depth Help - /plan manage clear ? || §2管理清除命令\§f 用于清除活跃数据库中的所有数据。\§7 插件在清理完毕后应被重载。\§7 别名:/plan pl +In Depth Help - /plan manage disable ? || > §2关闭子命令\ Can disable parts of the plugin until next reload.\ Accepted arguments:\ §2kickcount §fDisables kick counts in case /kickall is used on shutdown macro. +In Depth Help - /plan manage export ? || > §2导出子命令\ Trigger export to result folders.\ Accepted Arguments:\ §2list §fList possible arguments.\ §2players §fExport /players, /player pages + /player/raw json depending on config values.\ §2server_json §fExport /server/raw JSON if enabled in config. +In Depth Help - /plan manage import ? || §2管理导入命令\§f 用于从其它来源导入数据\§7 在导入过程中将禁用数据分析。 +In Depth Help - /plan manage move ? || > §2移动指令\ 将数据从 SQLite 移动至 MySQL,反之亦然。\ 目标数据库将在转移前被清除。 +In Depth Help - /plan manage raw ? || > §2Raw数据子命令\ Displays link to raw JSON data page.\ Not available if Plan webserver is not enabled. +In Depth Help - /plan manage remove ? || §2管理移除命令\§f 用于从活跃数据库中移除用户数据。 +In Depth Help - /plan manage restore ? || > §2恢复命令\ 从先前备份的 SQLite 数据库中恢复数据(.db 文件)\ 您也可以从其他服务器中恢复 database.db 到 MySQL。\ 目标数据库将在传输前被清除。 +In Depth Help - /plan manage uninstalled ? || > §2卸载服务器的子命令\ 在数据库中将一个服务器视为未安装。\ Can not mark the server the command is being used on as uninstalled.\ 将会影响连接系统。 +In Depth Help - /plan network ? || > §2网络命令\ 显示到网络页的链接。\ 若不在群组网络上,此页面将显示为服务器页面。 +In Depth Help - /plan players ? || > §2玩家命令\ 显示到玩家页的链接。 +In Depth Help - /plan qinspect ? || §2快速检视命令\§f 用于获取游戏内关于检视的信息。\§7 相比检视网页有着更少的信息。\§7 别名:/plan qi +In Depth Help - /plan reload ? || > §2重载命令\ 使用 onDisable 与 onEnable 重新载入插件。\ §b不支持运行时热切换插件 +In Depth Help - /plan search ? || §2搜索命令\§f 用于获取匹配特定参数的玩家名列表。\§7 示例:/plan search 123 - 搜索名称中包含 123 的所有玩家。 +In Depth Help - /plan servers ? || > §2服务器命令\ 显示数据库中的计划服务器列表。\ 可用于调试在网络上数据库注册的问题。 +In Depth Help - /plan web ? || < §2网页用户管理命令。\ §2/plan web §f列出子命令\ §2/plan web <子命令> ? §f详细帮助 +In Depth Help - /plan web register ? || > §2注册命令\ 注册一位新的网页用户。\ 为其他用户注册需要 plan.webmanage 权限。\ 密码通过使用随机密码盐的 PBKDF2 哈希方法加密(重复 64000 次 SHA1)。 +In Depth Help - /planbungee disable ? || > §2禁用命令\ 在 PlanBungee 上运行 onDisable。\ 插件之后需要运行 /planbungee reload 以重新启用。\ §b不支持运行时热切换插件 +Manage - Confirm Overwrite || 数据库 ${0} 中的数据将被覆盖! +Manage - Confirm Removal || 数据库 ${0} 中的数据将被移除! +Manage - Fail || > §c[数据统计] 处理数据时发生错误! ${0} +Manage - Fail File not found || > §c[数据统计] 备份文件不存在! ${0} +Manage - Fail Incorrect Database || > §c'${0}' 不是一个支持的数据库。 +Manage - Fail No Exporter || §e导出器 '${0}' 不存在 +Manage - Fail No Importer || §e导入器 '${0}' 不存在 +Manage - Fail No Server || 找不到这个服务器. +Manage - Fail Same Database || > §c[数据统计] 无法移动至相同的数据库! +Manage - Fail Same server || 无法将服务器标记为未安装 (你已在该服务器) +Manage - Fail, Confirmation || > §c[数据统计] 请添加 -a 以确认执行!${0} +Manage - List Importers || 导入器: +Manage - Remind HotSwap || §e[数据统计] 请切换至新数据库并重载插件(/plan m hotswap ${0}) +Manage - Start || »§7 正在处理数据... +Manage - Success || §f» §2 成功! +Negative || 否 +Positive || 是 +Today || '今天' +Unknown || 未知 +Version - DEV || 这是开发版本。 +Version - Latest || 您正使用最新版本。 +Version - New || 有新版本(${0})可用 ${1} +Version - New (old) || 新版本在 ${0} 可用 +Version FAIL - Read info (old) || 无法检查最新版本号 +Version FAIL - Read versions.txt || 无法从 Github/versions.txt 加载版本信息 +Web User Listing || §2${0} §7:§f${1} +WebServer - Notify HTTP || 网页服务器:无证书 -> 正使用 HTTP 服务器提供可视化效果。 +WebServer - Notify HTTP User Auth || 网页服务器:已禁用用户认证!(HTTP 方式不安全) +WebServer - Notify no Cert file || 网页服务器:未找到证书密钥存储文件:${0} +WebServer FAIL - Port Bind || 未成功初始化网页服务器。端口(${0})是否被占用? +WebServer FAIL - SSL Context || 网页服务器:SSL 环境初始化失败。 +WebServer FAIL - Store Load || 网页服务器:SSL 证书载入失败。 +Yesterday || '昨天' +HTML - LABEL_NAME || 名称 \ No newline at end of file diff --git a/Plan/common/src/main/resources/assets/plan/locale/locale_DE.txt b/Plan/common/src/main/resources/assets/plan/locale/locale_DE.txt index 7e79e0dc9..f61e000f0 100644 --- a/Plan/common/src/main/resources/assets/plan/locale/locale_DE.txt +++ b/Plan/common/src/main/resources/assets/plan/locale/locale_DE.txt @@ -341,3 +341,4 @@ WebServer FAIL - Port Bind || WebServer wurde nicht erfolgr WebServer FAIL - SSL Context || WebServer: SSL Context Initialisierung fehlgeschlagen. WebServer FAIL - Store Load || WebServer: SSL Zertifikat konnte nicht geladen werden. Yesterday || 'Gestern' +HTML - LABEL_NAME || Name \ No newline at end of file diff --git a/Plan/common/src/main/resources/assets/plan/locale/locale_EN.txt b/Plan/common/src/main/resources/assets/plan/locale/locale_EN.txt index d30aa1c87..d8e02d403 100644 --- a/Plan/common/src/main/resources/assets/plan/locale/locale_EN.txt +++ b/Plan/common/src/main/resources/assets/plan/locale/locale_EN.txt @@ -341,3 +341,4 @@ WebServer FAIL - Port Bind || WebServer was not initialized WebServer FAIL - SSL Context || WebServer: SSL Context Initialization Failed. WebServer FAIL - Store Load || WebServer: SSL Certificate loading Failed. Yesterday || 'Yesterday' +HTML - LABEL_NAME || Name \ No newline at end of file diff --git a/Plan/common/src/main/resources/assets/plan/locale/locale_FI.txt b/Plan/common/src/main/resources/assets/plan/locale/locale_FI.txt index 2c85ff596..c51f7e5a6 100644 --- a/Plan/common/src/main/resources/assets/plan/locale/locale_FI.txt +++ b/Plan/common/src/main/resources/assets/plan/locale/locale_FI.txt @@ -341,3 +341,4 @@ WebServer FAIL - Port Bind || Web Palvelin ei käynnistynyt WebServer FAIL - SSL Context || Web Palvelin: SSL Kontekstin käynnistys ei onnistunut. WebServer FAIL - Store Load || Web Palvelin: SSL Sertifikaatin lataus ei onnistunut. Yesterday || 'Eilen' +HTML - LABEL_NAME || Nimi \ No newline at end of file diff --git a/Plan/common/src/main/resources/assets/plan/locale/locale_JA.txt b/Plan/common/src/main/resources/assets/plan/locale/locale_JA.txt index 3338d1859..5bd1577b3 100644 --- a/Plan/common/src/main/resources/assets/plan/locale/locale_JA.txt +++ b/Plan/common/src/main/resources/assets/plan/locale/locale_JA.txt @@ -341,3 +341,4 @@ WebServer FAIL - Port Bind || Webサーバーの初期化 WebServer FAIL - SSL Context || Webサーバー: SSLコンテキストの初期化に失敗しました。 WebServer FAIL - Store Load || Webサーバー: SSL証明書のロードに失敗しました Yesterday || '昨日' +HTML - LABEL_NAME || 名前 \ No newline at end of file diff --git a/Plan/common/src/main/resources/assets/plan/locale/locale_PT_BR.txt b/Plan/common/src/main/resources/assets/plan/locale/locale_PT_BR.txt index d1f687357..d2c6409ba 100644 --- a/Plan/common/src/main/resources/assets/plan/locale/locale_PT_BR.txt +++ b/Plan/common/src/main/resources/assets/plan/locale/locale_PT_BR.txt @@ -341,3 +341,4 @@ WebServer FAIL - Port Bind || O servidor web não foi inici WebServer FAIL - SSL Context || Servidor Web: Falha ao inicializar certificado SSL. WebServer FAIL - Store Load || Servidor Web: Falha ao carregar certificado SSL. Yesterday || 'Ontem' +HTML - LABEL_NAME || Nome \ No newline at end of file diff --git a/Plan/common/src/main/resources/assets/plan/web/js/graphs.js b/Plan/common/src/main/resources/assets/plan/web/js/graphs.js index fe5c08938..3f4100f14 100644 --- a/Plan/common/src/main/resources/assets/plan/web/js/graphs.js +++ b/Plan/common/src/main/resources/assets/plan/web/js/graphs.js @@ -57,7 +57,7 @@ function diskChart(id, series) { yAxis: { labels: { formatter: function () { - return this.value + ' Mb'; + return this.value + ' MB'; } }, softMax: 2, @@ -317,7 +317,7 @@ function resourceChart(id, cpuSeries, ramSeries, playersOnlineSeries) { }, { labels: { formatter: function () { - return this.value + ' Mb'; + return this.value + ' MB'; } } }], diff --git a/Plan/common/src/main/resources/assets/plan/web/js/pingTable.js b/Plan/common/src/main/resources/assets/plan/web/js/pingTable.js index fcf26bb1b..9ec78e052 100644 --- a/Plan/common/src/main/resources/assets/plan/web/js/pingTable.js +++ b/Plan/common/src/main/resources/assets/plan/web/js/pingTable.js @@ -9,7 +9,7 @@ function loadPingTable(json, error) { var countries = json; if (!countries.length) { - pingTable.append('No Ping Data---'); + pingTable.append('No Data---'); return; } diff --git a/Plan/common/src/main/resources/assets/plan/web/js/player-values.js b/Plan/common/src/main/resources/assets/plan/web/js/player-values.js index 105db0948..9e34fbe24 100644 --- a/Plan/common/src/main/resources/assets/plan/web/js/player-values.js +++ b/Plan/common/src/main/resources/assets/plan/web/js/player-values.js @@ -154,7 +154,7 @@ function loadServerAccordion(json, error) { var servers = json.servers; if (!servers.length) { - serverTable.append('No Sessions---') + serverTable.append('No Data---') } var serversHtml = ''; diff --git a/Plan/common/src/main/resources/assets/plan/web/js/sessionAccordion.js b/Plan/common/src/main/resources/assets/plan/web/js/sessionAccordion.js index ed38a682f..7484c33f1 100644 --- a/Plan/common/src/main/resources/assets/plan/web/js/sessionAccordion.js +++ b/Plan/common/src/main/resources/assets/plan/web/js/sessionAccordion.js @@ -9,7 +9,7 @@ function loadSessionAccordion(json, error) { var sessions = json.sessions; if (!sessions.length) { - sessionTable.append('No Sessions---'); + sessionTable.append('No Data---'); return; } diff --git a/Plan/common/src/main/resources/assets/plan/web/server.html b/Plan/common/src/main/resources/assets/plan/web/server.html index da5bce37b..924487383 100644 --- a/Plan/common/src/main/resources/assets/plan/web/server.html +++ b/Plan/common/src/main/resources/assets/plan/web/server.html @@ -1348,13 +1348,13 @@ newPlayers: 'New Players', tps: 'TPS', cpu: 'CPU Usage (%)', - ram: 'RAM Usage (Mb)', + ram: 'RAM Usage (MB)', entities: 'Loaded Entities', chunks: 'Loaded Chunks', maxPing: 'Worst Ping', minPing: 'Best Ping', avgPing: 'Average Ping', - disk: 'Free Disk Space (Mb)' + disk: 'Free Disk Space (MB)' }, tooltip: { twoDecimals: {