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 09c3f0781..b1ee3b201 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 @@ -158,24 +158,32 @@ public class ActivityIndex { return Math.abs(Math.log(other.value) - Math.log(value)); } - public static String getGroup(double value) { + public static HtmlLang getGroupLang(double value) { if (value >= VERY_ACTIVE) { - return HtmlLang.INDEX_VERY_ACTIVE.getDefault(); + return HtmlLang.INDEX_VERY_ACTIVE; } else if (value >= ACTIVE) { - return HtmlLang.INDEX_ACTIVE.getDefault(); + return HtmlLang.INDEX_ACTIVE; } else if (value >= REGULAR) { - return HtmlLang.INDEX_REGULAR.getDefault(); + return HtmlLang.INDEX_REGULAR; } else if (value >= IRREGULAR) { - return HtmlLang.INDEX_IRREGULAR.getDefault(); + return HtmlLang.INDEX_IRREGULAR; } else { - return HtmlLang.INDEX_INACTIVE.getDefault(); + return HtmlLang.INDEX_INACTIVE; } } + public static String getGroup(double value) { + return getGroupLang(value).getDefault(); + } + public String getGroup() { return getGroup(value); } + public String getGroupLang() { + return getGroupLang(value).getKey(); + } + public String getGroup(Locale locale) { if (value >= VERY_ACTIVE) { return locale.getString(HtmlLang.INDEX_VERY_ACTIVE); 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 099c75f9e..e6071393b 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 @@ -284,15 +284,15 @@ 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) : locale.get(HtmlLang.UNIT_NO_DATA).toString()); + server.put("avg_tps", averageTPS != -1 ? decimals.apply(averageTPS) : HtmlLang.UNIT_NO_DATA.getKey()); server.put("low_tps_spikes", tpsWeek.lowTpsSpikeCount(config.get(DisplaySettings.GRAPH_TPS_THRESHOLD_MED))); server.put("downtime", timeAmount.apply(tpsWeek.serverDownTime())); server.put("current_uptime", serverUptimeCalculator.getServerUptimeMillis(serverUUID).map(timeAmount) - .orElse(locale.getString(GenericLang.UNAVAILABLE))); + .orElse(GenericLang.UNAVAILABLE.getKey())); Optional online = tpsWeek.getLast(); - server.put("online", online.map(point -> point.getDate() >= now - TimeUnit.MINUTES.toMillis(3L) ? point.getPlayers() : "Possibly offline") - .orElse(locale.get(HtmlLang.UNIT_NO_DATA).toString())); + server.put("online", online.map(point -> point.getDate() >= now - TimeUnit.MINUTES.toMillis(3L) ? point.getPlayers() : HtmlLang.LABEL_POSSIBLY_OFFLINE.getKey()) + .orElse(HtmlLang.UNIT_NO_DATA.getKey())); servers.add(server); }); return Collections.singletonMap("servers", servers); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/PerformanceJSONCreator.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/PerformanceJSONCreator.java index b94722ba6..80b37e018 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/PerformanceJSONCreator.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/PerformanceJSONCreator.java @@ -23,7 +23,6 @@ import com.djrapitops.plan.gathering.domain.TPS; import com.djrapitops.plan.identification.ServerUUID; 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; @@ -46,7 +45,6 @@ import java.util.concurrent.TimeUnit; public class PerformanceJSONCreator implements ServerTabJSONCreator> { private final PlanConfig config; - private final Locale locale; private final DBSystem dbSystem; private final Formatter decimals; @@ -57,12 +55,10 @@ public class PerformanceJSONCreator implements ServerTabJSONCreator createInsightsMap(List tpsData) { @@ -157,7 +153,7 @@ public class PerformanceJSONCreator implements ServerTabJSONCreator createJSONAsMap(UUID playerUUID, Predicate hasPermission) { Database db = dbSystem.getDatabase(); @@ -142,7 +133,7 @@ public class PlayerJSONCreator { data.put("player_deaths", new PlayerKillMutator(deaths).toJSONAsMap(formatters)); } if (hasPermission.test(WebPermission.PAGE_PLAYER_SERVERS)) { - List> serverAccordion = new ServerAccordion(player, serverNames, graphs, year, timeAmount, locale.getString(GenericLang.UNKNOWN)).asMaps(); + List> serverAccordion = new ServerAccordion(player, serverNames, graphs, year, timeAmount, GenericLang.UNKNOWN.getKey()).asMaps(); Map worldTimesPerServer = PerServerMutator.forContainer(player).worldTimesPerServer(); String[] pieColors = theme.getPieColors(ThemeVal.GRAPH_WORLD_PIE); @@ -230,8 +221,8 @@ public class PlayerJSONCreator { info.put("longest_session_length", timeAmount.apply(sessions.toLongestSessionLength())); info.put("session_median", timeAmount.apply(sessions.toMedianSessionLength())); info.put("activity_index", decimals.apply(activityIndex.getValue())); - info.put("activity_index_group", activityIndex.getGroup()); - info.put("favorite_server", perServer.favoriteServer().map(favoriteServer -> serverNames.getOrDefault(favoriteServer, favoriteServer.toString())).orElse(locale.getString(GenericLang.UNKNOWN))); + info.put("activity_index_group", activityIndex.getGroupLang()); + info.put("favorite_server", perServer.favoriteServer().map(favoriteServer -> serverNames.getOrDefault(favoriteServer, favoriteServer.toString())).orElse(GenericLang.UNKNOWN.getKey())); info.put("latest_join_address", sessions.latestSession() .flatMap(session -> session.getExtraData(JoinAddress.class)) .map(JoinAddress::getAddress) @@ -240,7 +231,7 @@ public class PlayerJSONCreator { int worstPing = ping.max(); int bestPing = ping.min(); - String unavailable = locale.get(GenericLang.UNAVAILABLE).toString(); + String unavailable = GenericLang.UNAVAILABLE.getKey(); 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/ServerOverviewJSONCreator.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/ServerOverviewJSONCreator.java index c2aabca69..9970cdb22 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/ServerOverviewJSONCreator.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/ServerOverviewJSONCreator.java @@ -29,7 +29,6 @@ import com.djrapitops.plan.identification.ServerUUID; 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; @@ -58,7 +57,6 @@ public class ServerOverviewJSONCreator implements ServerTabJSONCreator day; private final PlanConfig config; - private final Locale locale; private final DBSystem dbSystem; private final ServerInfo serverInfo; private final ServerSensor serverSensor; @@ -72,7 +70,6 @@ public class ServerOverviewJSONCreator implements ServerTabJSONCreator serverSensor, @@ -80,7 +77,6 @@ public class ServerOverviewJSONCreator implements ServerTabJSONCreator createWeeksMap(ServerUUID serverUUID) { diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/network/NetworkOverviewJSONCreator.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/network/NetworkOverviewJSONCreator.java index 4457adff6..da01ce161 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/network/NetworkOverviewJSONCreator.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/network/NetworkOverviewJSONCreator.java @@ -27,7 +27,6 @@ import com.djrapitops.plan.identification.ServerInfo; import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.settings.config.PlanConfig; 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; @@ -53,7 +52,6 @@ public class NetworkOverviewJSONCreator implements NetworkTabJSONCreator day; private final PlanConfig config; - private final Locale locale; private final DBSystem dbSystem; private final ServerInfo serverInfo; private final ServerSensor serverSensor; @@ -64,7 +62,6 @@ public class NetworkOverviewJSONCreator implements NetworkTabJSONCreator serverSensor, @@ -72,7 +69,6 @@ public class NetworkOverviewJSONCreator implements NetworkTabJSONCreator decimals; @@ -75,13 +73,11 @@ public class NetworkPerformanceJSONResolver implements Resolver { @Inject public NetworkPerformanceJSONResolver( PlanConfig config, - Locale locale, DBSystem dbSystem, Formatters formatters, Gson gson ) { this.config = config; - this.locale = locale; this.dbSystem = dbSystem; decimals = formatters.decimals(); @@ -212,15 +208,15 @@ public class NetworkPerformanceJSONResolver implements Resolver { } private String format(double value) { - return value != -1 ? decimals.apply(value) : locale.get(GenericLang.UNAVAILABLE).toString(); + return value != -1 ? decimals.apply(value) : GenericLang.UNAVAILABLE.getKey(); } private String formatBytes(double value) { - return value != -1 ? byteSize.apply(value) : locale.get(GenericLang.UNAVAILABLE).toString(); + return value != -1 ? byteSize.apply(value) : GenericLang.UNAVAILABLE.getKey(); } private String formatPercentage(double value) { - return value != -1 ? percentage.apply(value / 100.0) : locale.get(GenericLang.UNAVAILABLE).toString(); + return value != -1 ? percentage.apply(value / 100.0) : GenericLang.UNAVAILABLE.getKey(); } } \ No newline at end of file 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 0e8263c2c..2d2e1a281 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 @@ -268,6 +268,7 @@ public enum HtmlLang implements Lang { LABEL_PROJECTION_ORTOGRAPHIC("html.label.geoProjection.ortographic", "Ortographic"), LABEL_SERVER_SELECTOR("html.label.serverSelector", "Server selector"), LABEL_APPLY("html.label.apply", "Apply"), + LABEL_POSSIBLY_OFFLINE("html.label.serverPossiblyOffline", "Possibly offline"), LABEL_TABLE_VISIBLE_COLUMNS("html.label.table.visibleColumns", "Visible columns"), LABEL_TABLE_SHOW_N_OF_M("html.label.table.showNofM", "Showing {{n}} of {{mn}} entries"), diff --git a/Plan/react/dashboard/src/components/Datapoint.js b/Plan/react/dashboard/src/components/Datapoint.js index 28b114cdd..c84b37658 100644 --- a/Plan/react/dashboard/src/components/Datapoint.js +++ b/Plan/react/dashboard/src/components/Datapoint.js @@ -1,15 +1,19 @@ import {FontAwesomeIcon as Fa} from "@fortawesome/react-fontawesome"; import React from "react"; import End from "./layout/End"; +import {useTranslation} from "react-i18next"; const Datapoint = ({icon, color, name, value, valueLabel, bold, boldTitle, title, trend}) => { + const {t} = useTranslation(); if (value === undefined && valueLabel === undefined) return <>; - const displayedValue = bold ? {value} : value; - const extraLabel = typeof valueLabel === 'string' ? ` (${valueLabel})` : ''; - const colorClass = color && color.startsWith("col-") ? color : "col-" + color; + const isTranslatable = typeof value === 'string' && (value.startsWith('html') || value.startsWith('plugin')); + const translatedValue = isTranslatable ? t(value) : value; + const displayedValue = bold ? {translatedValue} : translatedValue; + const extraLabel = typeof valueLabel === 'string' ? ` (${t(valueLabel)})` : ''; + const colorClass = color?.startsWith("col-") ? color : "col-" + color; return ( -

+

{icon && } {boldTitle ? {name} : name} {value !== undefined ? {displayedValue} {extraLabel}{trend} : ''}

diff --git a/Plan/react/dashboard/src/components/accordion/ServerAccordion.js b/Plan/react/dashboard/src/components/accordion/ServerAccordion.js index b19a86558..7cfd89682 100644 --- a/Plan/react/dashboard/src/components/accordion/ServerAccordion.js +++ b/Plan/react/dashboard/src/components/accordion/ServerAccordion.js @@ -12,9 +12,10 @@ import {baseAddress} from "../../service/backendConfiguration"; import {useAuth} from "../../hooks/authenticationHook"; const ServerHeader = ({server}) => { + const {t} = useTranslation(); return ( <> - {server.server_name} + {t(server.server_name)} {server.operator ? : ''} {server.banned ? : ''} diff --git a/Plan/react/dashboard/src/components/cards/player/ConnectionsCard.js b/Plan/react/dashboard/src/components/cards/player/ConnectionsCard.js index 157c438c9..aeb9cca9a 100644 --- a/Plan/react/dashboard/src/components/cards/player/ConnectionsCard.js +++ b/Plan/react/dashboard/src/components/cards/player/ConnectionsCard.js @@ -26,8 +26,8 @@ const ConnectionsCard = ({connections}) => { {Boolean(connections?.length) && - {connections.map((connection, i) => ( - {connection.geolocation} + {connections.map(connection => ( + {connection.geolocation.replace('Local Machine', t('html.value.localMachine'))} {connection.date} ))} } diff --git a/Plan/react/dashboard/src/components/graphs/FunctionPlotGraph.js b/Plan/react/dashboard/src/components/graphs/FunctionPlotGraph.js index 5898f5744..118df2391 100644 --- a/Plan/react/dashboard/src/components/graphs/FunctionPlotGraph.js +++ b/Plan/react/dashboard/src/components/graphs/FunctionPlotGraph.js @@ -25,6 +25,9 @@ const FunctionPlotGraph = ({ Highcharts.setOptions({lang: {noData: t('html.label.noDataToDisplay')}}) Highcharts.setOptions(graphTheming); Highcharts.chart(id, options ? options : { + chart: { + noData: t('html.label.noDataToDisplay') + }, yAxis: { plotLines: yPlotLines, plotBands: yPlotBands diff --git a/Plan/react/dashboard/src/components/graphs/GeolocationBarGraph.js b/Plan/react/dashboard/src/components/graphs/GeolocationBarGraph.js index f7eb6b0d6..f4bad55d7 100644 --- a/Plan/react/dashboard/src/components/graphs/GeolocationBarGraph.js +++ b/Plan/react/dashboard/src/components/graphs/GeolocationBarGraph.js @@ -21,7 +21,10 @@ const GeolocationBarGraph = ({series, color}) => { Accessibility(Highcharts); Highcharts.setOptions(graphTheming); Highcharts.chart("countryBarChart", { - chart: {type: 'bar'}, + chart: { + noData: t('html.label.noDataToDisplay'), + type: 'bar' + }, title: {text: ''}, xAxis: { categories: categories, diff --git a/Plan/react/dashboard/src/components/graphs/GeolocationWorldMap.js b/Plan/react/dashboard/src/components/graphs/GeolocationWorldMap.js index 691f95a41..9064b5f1c 100644 --- a/Plan/react/dashboard/src/components/graphs/GeolocationWorldMap.js +++ b/Plan/react/dashboard/src/components/graphs/GeolocationWorldMap.js @@ -1,7 +1,7 @@ import React, {useEffect} from 'react'; import {useTranslation} from "react-i18next"; import {useTheme} from "../../hooks/themeHook"; -import Highcharts from 'highcharts/highmaps.js'; +import Highcharts from 'highcharts/highmaps'; import topology from '@highcharts/map-collection/custom/world.topo.json'; import Accessibility from "highcharts/modules/accessibility"; import NoDataDisplay from "highcharts/modules/no-data-to-display"; @@ -46,6 +46,7 @@ const GeolocationWorldMap = ({series, colors, projection}) => { Highcharts.setOptions({lang: {noData: t('html.label.noDataToDisplay')}}); Highcharts.mapChart('countryWorldMap', { chart: { + noData: t('html.label.noDataToDisplay'), map: topology, animation: true }, diff --git a/Plan/react/dashboard/src/components/graphs/GroupBarGraph.js b/Plan/react/dashboard/src/components/graphs/GroupBarGraph.js index e77057713..55005ef72 100644 --- a/Plan/react/dashboard/src/components/graphs/GroupBarGraph.js +++ b/Plan/react/dashboard/src/components/graphs/GroupBarGraph.js @@ -29,7 +29,10 @@ const GroupBarGraph = ({id, groups, colors, horizontal, name}) => { Accessibility(Highcharts); Highcharts.setOptions(graphTheming); Highcharts.chart(id, { - chart: {type: horizontal ? 'bar' : 'column'}, + chart: { + noData: t('html.label.noDataToDisplay'), + type: horizontal ? 'bar' : 'column' + }, title: {text: ''}, xAxis: { categories: categories, diff --git a/Plan/react/dashboard/src/components/graphs/GroupPie.js b/Plan/react/dashboard/src/components/graphs/GroupPie.js index 818cbcf28..99a713967 100644 --- a/Plan/react/dashboard/src/components/graphs/GroupPie.js +++ b/Plan/react/dashboard/src/components/graphs/GroupPie.js @@ -31,6 +31,7 @@ const GroupPie = ({id, groups, colors, name}) => { Highcharts.setOptions(graphTheming); Highcharts.chart(id, { chart: { + noData: t('html.label.noDataToDisplay'), backgroundColor: 'transparent', plotBorderWidth: null, plotShadow: false, diff --git a/Plan/react/dashboard/src/components/graphs/JoinAddressGraph.js b/Plan/react/dashboard/src/components/graphs/JoinAddressGraph.js index 079b7c251..07c93917c 100644 --- a/Plan/react/dashboard/src/components/graphs/JoinAddressGraph.js +++ b/Plan/react/dashboard/src/components/graphs/JoinAddressGraph.js @@ -40,6 +40,7 @@ const JoinAddressGraph = ({id, data, colors, stack}) => { Highcharts.stockChart(id, { chart: { + noData: t('html.label.noDataToDisplay'), type: "column" }, rangeSelector: { diff --git a/Plan/react/dashboard/src/components/graphs/LineGraph.js b/Plan/react/dashboard/src/components/graphs/LineGraph.js index 52fd1ff5d..e4ad2d1d5 100644 --- a/Plan/react/dashboard/src/components/graphs/LineGraph.js +++ b/Plan/react/dashboard/src/components/graphs/LineGraph.js @@ -36,6 +36,9 @@ const LineGraph = ({ Highcharts.setOptions({lang: {noData: t('html.label.noDataToDisplay')}}) Highcharts.setOptions(graphTheming); setGraph(Highcharts.stockChart(id, options ? options : { + chart: { + noData: t('html.label.noDataToDisplay') + }, rangeSelector: { selected: selectedRange !== undefined ? selectedRange : 2, buttons: linegraphButtons @@ -71,7 +74,7 @@ const LineGraph = ({ onSetExtremes, setGraph, selectedRange]); useEffect(() => { - if (graph && graph.xAxis && graph.xAxis.length && extremes) { + if (graph?.xAxis?.length && extremes) { graph.xAxis[0].setExtremes(extremes.min, extremes.max); } }, [graph, extremes]); diff --git a/Plan/react/dashboard/src/components/graphs/PlayerbaseGraph.js b/Plan/react/dashboard/src/components/graphs/PlayerbaseGraph.js index 62968dc8f..cbfb90907 100644 --- a/Plan/react/dashboard/src/components/graphs/PlayerbaseGraph.js +++ b/Plan/react/dashboard/src/components/graphs/PlayerbaseGraph.js @@ -27,6 +27,7 @@ const PlayerbaseGraph = ({data}) => { Highcharts.chart(id, { chart: { + noData: t('html.label.noDataToDisplay'), type: "area" }, xAxis: { diff --git a/Plan/react/dashboard/src/components/graphs/PunchCard.js b/Plan/react/dashboard/src/components/graphs/PunchCard.js index 8b8b45ddf..f9618cbeb 100644 --- a/Plan/react/dashboard/src/components/graphs/PunchCard.js +++ b/Plan/react/dashboard/src/components/graphs/PunchCard.js @@ -18,6 +18,7 @@ const PunchCard = ({series}) => { Highcharts.setOptions(graphTheming); setTimeout(() => Highcharts.chart('punchcard', { chart: { + noData: t('html.label.noDataToDisplay'), backgroundColor: 'transparent', plotBackgroundColor: 'transparent', defaultSeriesType: 'scatter' diff --git a/Plan/react/dashboard/src/components/graphs/ServerPie.js b/Plan/react/dashboard/src/components/graphs/ServerPie.js index c13536685..59369ef13 100644 --- a/Plan/react/dashboard/src/components/graphs/ServerPie.js +++ b/Plan/react/dashboard/src/components/graphs/ServerPie.js @@ -28,6 +28,7 @@ const ServerPie = ({colors, series}) => { Highcharts.setOptions({lang: {noData: t('html.label.noDataToDisplay')}}); Highcharts.chart('server-pie', { chart: { + noData: t('html.label.noDataToDisplay'), backgroundColor: 'transparent', plotBorderWidth: null, plotShadow: false, diff --git a/Plan/react/dashboard/src/components/graphs/StackedPlayersOnlineGraph.js b/Plan/react/dashboard/src/components/graphs/StackedPlayersOnlineGraph.js index 34126034e..e8ea14ac8 100644 --- a/Plan/react/dashboard/src/components/graphs/StackedPlayersOnlineGraph.js +++ b/Plan/react/dashboard/src/components/graphs/StackedPlayersOnlineGraph.js @@ -33,6 +33,7 @@ const StackedPlayersOnlineGraph = ({data}) => { buttons: linegraphButtons }, chart: { + noData: t('html.label.noDataToDisplay'), zooming: { type: 'xy' } diff --git a/Plan/react/dashboard/src/components/graphs/WorldPie.js b/Plan/react/dashboard/src/components/graphs/WorldPie.js index 8337edd75..5a4f85efc 100644 --- a/Plan/react/dashboard/src/components/graphs/WorldPie.js +++ b/Plan/react/dashboard/src/components/graphs/WorldPie.js @@ -39,6 +39,7 @@ const WorldPie = ({id, worldSeries, gmSeries}) => { setTimeout(() => { const chart = Highcharts.chart(id, { chart: { + noData: t('html.label.noDataToDisplay'), backgroundColor: 'transparent', plotBackgroundColor: 'transparent', plotBorderWidth: null, diff --git a/Plan/react/dashboard/src/components/graphs/performance/AllPerformanceGraph.js b/Plan/react/dashboard/src/components/graphs/performance/AllPerformanceGraph.js index 5ead86f99..7e8130d1a 100644 --- a/Plan/react/dashboard/src/components/graphs/performance/AllPerformanceGraph.js +++ b/Plan/react/dashboard/src/components/graphs/performance/AllPerformanceGraph.js @@ -72,7 +72,7 @@ const AllPerformanceGraph = ({id, data, dataSeries}) => { let chartId = chartElement?.getAttribute('data-highcharts-chart'); const chart = chartId !== undefined ? Highcharts.charts[chartId] : undefined; - if (chart && chart.yAxis && chart.yAxis.length) { + if (chart?.yAxis?.length) { const newWidth = window.innerWidth chart.yAxis[0].update({labels: {enabled: newWidth >= 900}}); chart.yAxis[1].update({labels: {enabled: newWidth >= 900}}); @@ -158,6 +158,9 @@ const AllPerformanceGraph = ({id, data, dataSeries}) => { Highcharts.setOptions({lang: {noData: t('html.label.noDataToDisplay')}}) Highcharts.setOptions(graphTheming); Highcharts.stockChart(id, { + chart: { + noData: t('html.label.noDataToDisplay') + }, rangeSelector: { selected: 2, buttons: linegraphButtons diff --git a/Plan/react/dashboard/src/components/graphs/performance/CpuRamPerformanceGraph.js b/Plan/react/dashboard/src/components/graphs/performance/CpuRamPerformanceGraph.js index d25d8a689..c23a9609f 100644 --- a/Plan/react/dashboard/src/components/graphs/performance/CpuRamPerformanceGraph.js +++ b/Plan/react/dashboard/src/components/graphs/performance/CpuRamPerformanceGraph.js @@ -47,6 +47,9 @@ const CpuRamPerformanceGraph = ({id, data, dataSeries}) => { Highcharts.setOptions({lang: {noData: t('html.label.noDataToDisplay')}}) Highcharts.setOptions(graphTheming); Highcharts.stockChart(id, { + chart: { + noData: t('html.label.noDataToDisplay') + }, rangeSelector: { selected: 1, // TODO Sync range selectors state buttons: linegraphButtons diff --git a/Plan/react/dashboard/src/components/graphs/performance/DiskPerformanceGraph.js b/Plan/react/dashboard/src/components/graphs/performance/DiskPerformanceGraph.js index edb745ef8..27e012c2c 100644 --- a/Plan/react/dashboard/src/components/graphs/performance/DiskPerformanceGraph.js +++ b/Plan/react/dashboard/src/components/graphs/performance/DiskPerformanceGraph.js @@ -44,6 +44,9 @@ const DiskPerformanceGraph = ({id, data, dataSeries}) => { Highcharts.setOptions({lang: {noData: t('html.label.noDataToDisplay')}}) Highcharts.setOptions(graphTheming); Highcharts.stockChart(id, { + chart: { + noData: t('html.label.noDataToDisplay') + }, rangeSelector: { selected: 2, buttons: linegraphButtons diff --git a/Plan/react/dashboard/src/components/graphs/performance/PingGraph.js b/Plan/react/dashboard/src/components/graphs/performance/PingGraph.js index b96470dd6..279b8ab17 100644 --- a/Plan/react/dashboard/src/components/graphs/performance/PingGraph.js +++ b/Plan/react/dashboard/src/components/graphs/performance/PingGraph.js @@ -46,6 +46,9 @@ const PingGraph = ({id, data}) => { Highcharts.setOptions({lang: {noData: t('html.label.noDataToDisplay')}}) Highcharts.setOptions(graphTheming); Highcharts.stockChart(id, { + chart: { + noData: t('html.label.noDataToDisplay') + }, rangeSelector: { selected: 2, buttons: linegraphButtons diff --git a/Plan/react/dashboard/src/components/graphs/performance/TpsPerformanceGraph.js b/Plan/react/dashboard/src/components/graphs/performance/TpsPerformanceGraph.js index 7fa1f2741..fc0a2f74a 100644 --- a/Plan/react/dashboard/src/components/graphs/performance/TpsPerformanceGraph.js +++ b/Plan/react/dashboard/src/components/graphs/performance/TpsPerformanceGraph.js @@ -53,6 +53,9 @@ const TpsPerformanceGraph = ({id, data, dataSeries}) => { Highcharts.setOptions({lang: {noData: t('html.label.noDataToDisplay')}}) Highcharts.setOptions(graphTheming); Highcharts.stockChart(id, { + chart: { + noData: t('html.label.noDataToDisplay') + }, rangeSelector: { selected: 1, buttons: linegraphButtons diff --git a/Plan/react/dashboard/src/components/graphs/performance/WorldPerformanceGraph.js b/Plan/react/dashboard/src/components/graphs/performance/WorldPerformanceGraph.js index 65bef3d11..05681a963 100644 --- a/Plan/react/dashboard/src/components/graphs/performance/WorldPerformanceGraph.js +++ b/Plan/react/dashboard/src/components/graphs/performance/WorldPerformanceGraph.js @@ -47,6 +47,9 @@ const WorldPerformanceGraph = ({id, data, dataSeries}) => { Highcharts.setOptions({lang: {noData: t('html.label.noDataToDisplay')}}) Highcharts.setOptions(graphTheming); Highcharts.stockChart(id, { + chart: { + noData: t('html.label.noDataToDisplay') + }, rangeSelector: { selected: 2, buttons: linegraphButtons diff --git a/Plan/react/dashboard/src/components/table/PerformanceAsNumbersTable.js b/Plan/react/dashboard/src/components/table/PerformanceAsNumbersTable.js index 7fedd0ad6..35e7ad9e8 100644 --- a/Plan/react/dashboard/src/components/table/PerformanceAsNumbersTable.js +++ b/Plan/react/dashboard/src/components/table/PerformanceAsNumbersTable.js @@ -58,9 +58,9 @@ const PerformanceAsNumbersTable = ({data, servers}) => { ]}/> {data.tps_30d} {noTPSOnProxies}, - <>{data.tps_7d} {noTPSOnProxies}, - <>{data.tps_24h} {noTPSOnProxies} + <>{t(data.tps_30d)} {noTPSOnProxies}, + <>{t(data.tps_7d)} {noTPSOnProxies}, + <>{t(data.tps_24h)} {noTPSOnProxies} ]}/> { ]}/> {data.entities_30d} {noTPSOnProxies}, - <>{data.entities_7d} {noTPSOnProxies}, - <>{data.entities_24h} {noTPSOnProxies} + <>{t(data.entities_30d)} {noTPSOnProxies}, + <>{t(data.entities_7d)} {noTPSOnProxies}, + <>{t(data.entities_24h)} {noTPSOnProxies} ]}/> {t('html.label.averageChunks')}{' '}{data.chunks_30d === 'Unavailable' ? + text={<>{t('html.label.averageChunks')}{' '}{data.chunks_30d === 'plugin.generic.unavailable' ? : ''}} values={[ - <>{data.chunks_30d} {noTPSOnProxies}, - <>{data.chunks_7d} {noTPSOnProxies}, - <>{data.chunks_24h} {noTPSOnProxies} + <>{t(data.chunks_30d)} {noTPSOnProxies}, + <>{t(data.chunks_7d)} {noTPSOnProxies}, + <>{t(data.chunks_24h)} {noTPSOnProxies} ]}/> { {server.players} - {server.online} + {t(server.online)}