diff --git a/frontend/src/components/RegionStats/index.tsx b/frontend/src/components/RegionStats/index.tsx
index 5dac6b8..6aafa1e 100644
--- a/frontend/src/components/RegionStats/index.tsx
+++ b/frontend/src/components/RegionStats/index.tsx
@@ -1,46 +1,36 @@
-import React, { useState, useCallback } from "react";
-import { pickBy } from "lodash";
-import {
- Loader,
- Statistic,
- Pagination,
- Segment,
- Header,
- Menu,
- Table,
- Icon,
-} from "semantic-ui-react";
-import { useObservable } from "rxjs-hooks";
-import { of, from, concat, combineLatest } from "rxjs";
-import { map, switchMap, distinctUntilChanged } from "rxjs/operators";
-import { Duration, DateTime } from "luxon";
+import React, {useState, useCallback} from 'react'
+import {pickBy} from 'lodash'
+import {Loader, Statistic, Pagination, Segment, Header, Menu, Table, Icon} from 'semantic-ui-react'
+import {useObservable} from 'rxjs-hooks'
+import {of, from, concat, combineLatest} from 'rxjs'
+import {map, switchMap, distinctUntilChanged} from 'rxjs/operators'
+import {Duration, DateTime} from 'luxon'
-import api from "api";
+import api from 'api'
+import {useTranslation} from 'react-i18next'
function formatDuration(seconds) {
return (
Duration.fromMillis((seconds ?? 0) * 1000)
- .as("hours")
- .toFixed(1) + " h"
- );
+ .as('hours')
+ .toFixed(1) + ' h'
+ )
}
export default function Stats() {
- const [page, setPage] = useState(1);
- const PER_PAGE = 10;
+ const {t} = useTranslation()
+ const [page, setPage] = useState(1)
+ const PER_PAGE = 10
const stats = useObservable(
- () =>
- of(null).pipe(
- switchMap(() => concat(of(null), from(api.get("/stats/regions"))))
- ),
+ () => of(null).pipe(switchMap(() => concat(of(null), from(api.get('/stats/regions'))))),
null
- );
+ )
- const pageCount = stats ? Math.ceil(stats.length / PER_PAGE) : 1;
+ const pageCount = stats ? Math.ceil(stats.length / PER_PAGE) : 1
return (
<>
-
+
@@ -48,36 +38,36 @@ export default function Stats() {
- Region name
- Event count
+ {t('RegionStats.regionName')}
+ {t('RegionStats.eventCount')}
- {stats
- ?.slice((page - 1) * PER_PAGE, page * PER_PAGE)
- ?.map((area) => (
-
- {area.name}
- {area.overtaking_event_count}
-
- ))}
+ {stats?.slice((page - 1) * PER_PAGE, page * PER_PAGE)?.map((area) => (
+
+ {area.name}
+ {area.overtaking_event_count}
+
+ ))}
- {pageCount > 1 &&
-
-
- setPage(data.activePage as number)}
- />
-
-
- }
+ {pageCount > 1 && (
+
+
+
+ setPage(data.activePage as number)}
+ />
+
+
+
+ )}
>
- );
+ )
}
diff --git a/frontend/src/pages/MapPage/LayerSidebar.tsx b/frontend/src/pages/MapPage/LayerSidebar.tsx
index 0120bc3..7dcf698 100644
--- a/frontend/src/pages/MapPage/LayerSidebar.tsx
+++ b/frontend/src/pages/MapPage/LayerSidebar.tsx
@@ -72,12 +72,12 @@ function LayerSidebar({
onChange={() => setMapConfigFlag('obsRegions.show', !showRegions)}
/>
{showRegions && (
<>
- Color regions based on event count
+ {t('MapPage.sidebar.obsRegions.colorByEventCount')}
-
{region.properties.name || "Unnamed region"}
+
{region.properties.name || t('MapPage.regionInfo.unnamedRegion')}
@@ -17,17 +18,14 @@ export default function RegionInfo({ region, mapInfoPortal, onClose }) {
- Number of events
+ {t('MapPage.regionInfo.eventCount')}
{region.properties.overtaking_event_count ?? 0}
>
- );
+ )
return content && mapInfoPortal
- ? createPortal(
-
{content}
,
- mapInfoPortal
- )
- : null;
+ ? createPortal(
{content}
, mapInfoPortal)
+ : null
}
diff --git a/frontend/src/translations/de.yaml b/frontend/src/translations/de.yaml
index 0097b68..a0f42ff 100644
--- a/frontend/src/translations/de.yaml
+++ b/frontend/src/translations/de.yaml
@@ -158,6 +158,10 @@ MapPage:
obsEvents:
title: Überholvorgänge
+ obsRegions:
+ title: Regionen
+ colorByEventCount: Regionen eingefärbt nach Anzahl Überholungen
+
filters:
title: Filter
needsLogin: Filter sind ohne Login nicht verfügbar.
@@ -203,6 +207,10 @@ MapPage:
west: westwärts
northWest: nordwestwärts
+ regionInfo:
+ unnamedRegion: Unbenannte Region
+ eventCount: Anzahl Überholungen
+
SettingsPage:
title: Einstellungen
@@ -343,3 +351,8 @@ TrackEditor:
vorhanden bleiben.
**Nutze diese Funktion mit Bedacht und auf dein eigenes Risiko.**
+
+RegionStats:
+ title: Top-Regionen
+ regionName: Region
+ eventCount: Anzahl Überholungen
diff --git a/frontend/src/translations/en.yaml b/frontend/src/translations/en.yaml
index 15c4aeb..14de675 100644
--- a/frontend/src/translations/en.yaml
+++ b/frontend/src/translations/en.yaml
@@ -164,6 +164,10 @@ MapPage:
obsEvents:
title: Event points
+ obsRegions:
+ title: Regions
+ colorByEventCount: Color regions are based on event count
+
filters:
title: Filters
needsLogin: No filters available without login.
@@ -208,6 +212,10 @@ MapPage:
west: west bound
northWest: north-west bound
+ regionInfo:
+ unnamedRegion: Unnamed region
+ eventCount: Event count
+
SettingsPage:
title: Settings
@@ -342,3 +350,8 @@ TrackEditor:
later.
**Use at your own risk.**
+
+RegionStats:
+ title: Top regions
+ regionName: Region name
+ eventCount: Event count
diff --git a/frontend/src/translations/fr.yaml b/frontend/src/translations/fr.yaml
index 7248f70..6367382 100644
--- a/frontend/src/translations/fr.yaml
+++ b/frontend/src/translations/fr.yaml
@@ -164,6 +164,10 @@ MapPage:
obsEvents:
title: Points d'événement
+ obsRegions:
+ title: Régions
+ colorByEventCount: Couleurs des régions sont basées sur le nombre d'événements
+
filters:
title: Filtres
needsLogin: Aucun filtre disponible sans être connecté.
@@ -208,6 +212,10 @@ MapPage:
west: Ouest
northWest: Nord-Ouest
+ regionInfo:
+ unnamedRegion: Région sans nom
+ eventCount: Nombre de dépassements
+
SettingsPage:
title: Paramètres
@@ -343,3 +351,8 @@ TrackEditor:
ou les rendez anonymes plus tard.
**Utilisation à vos risques et périls.**
+
+RegionStats:
+ title: Top régions
+ regionName: Nom de la région
+ eventCount: Nombre de dépassements