Translate remaining route-level English strings

- Flights-map empty/error states: 'Failed to load routes. Please try
  again.' and 'No directions found.' now use existing translation keys
  (BOARD.LOAD-FAILED + FLIGHTS-MAP.NO_DIRECTIONS_INFO).
- Flights-map feature-flag fallback '404 - Page Not Found / This
  feature is currently unavailable.' reduced to the translated
  PAGE404.HEADER string.
- Suspense fallbacks on /onlineboard, /schedule, /flights-map and
  /popular route pages now render the new SHARED.LOADING ('Загрузка…')
  instead of hardcoded 'Loading...'.
This commit is contained in:
2026-04-18 00:45:00 +03:00
parent de22fc3722
commit cd4864c82e
14 changed files with 27 additions and 17 deletions
@@ -355,7 +355,7 @@ export const FlightsMapStartPage: FC = () => {
role="alert"
data-testid="map-error"
>
Failed to load routes. Please try again.
{t("BOARD.LOAD-FAILED")}
</div>
)}
@@ -364,7 +364,7 @@ export const FlightsMapStartPage: FC = () => {
className="flights-map-start__empty"
data-testid="map-no-directions"
>
No directions found.
{t("FLIGHTS-MAP.NO_DIRECTIONS_INFO")}
</div>
)}
</div>
+2 -1
View File
@@ -378,7 +378,8 @@
"CONNECTION-LIVE": "Live",
"CONNECTION-RECONNECTING": "Reconnecting…",
"CONNECTION-OFFLINE": "Offline",
"INVALID-PARAMS": "Invalid URL parameters."
"INVALID-PARAMS": "Invalid URL parameters.",
"LOADING": "Loading…"
},
"WARNING": {
"IFLY_HIGHLIGHT": "Bitte beachten Sie:",
+2 -1
View File
@@ -405,7 +405,8 @@
"CONNECTION-LIVE": "Live",
"CONNECTION-RECONNECTING": "Reconnecting…",
"CONNECTION-OFFLINE": "Offline",
"INVALID-PARAMS": "Invalid URL parameters."
"INVALID-PARAMS": "Invalid URL parameters.",
"LOADING": "Loading…"
},
"WARNING": {
"IFLY_HIGHLIGHT": "Please note:",
+2 -1
View File
@@ -378,7 +378,8 @@
"CONNECTION-LIVE": "Live",
"CONNECTION-RECONNECTING": "Reconnecting…",
"CONNECTION-OFFLINE": "Offline",
"INVALID-PARAMS": "Invalid URL parameters."
"INVALID-PARAMS": "Invalid URL parameters.",
"LOADING": "Loading…"
},
"WARNING": {
"IFLY_HIGHLIGHT": "Nota:",
+2 -1
View File
@@ -378,7 +378,8 @@
"CONNECTION-LIVE": "Live",
"CONNECTION-RECONNECTING": "Reconnecting…",
"CONNECTION-OFFLINE": "Offline",
"INVALID-PARAMS": "Invalid URL parameters."
"INVALID-PARAMS": "Invalid URL parameters.",
"LOADING": "Loading…"
},
"WARNING": {
"IFLY_HIGHLIGHT": "Remarque:",
+2 -1
View File
@@ -378,7 +378,8 @@
"CONNECTION-LIVE": "Live",
"CONNECTION-RECONNECTING": "Reconnecting…",
"CONNECTION-OFFLINE": "Offline",
"INVALID-PARAMS": "Invalid URL parameters."
"INVALID-PARAMS": "Invalid URL parameters.",
"LOADING": "Loading…"
},
"WARNING": {
"IFLY_HIGHLIGHT": "Attenzione:",
+2 -1
View File
@@ -378,7 +378,8 @@
"CONNECTION-LIVE": "Live",
"CONNECTION-RECONNECTING": "Reconnecting…",
"CONNECTION-OFFLINE": "Offline",
"INVALID-PARAMS": "Invalid URL parameters."
"INVALID-PARAMS": "Invalid URL parameters.",
"LOADING": "Loading…"
},
"WARNING": {
"IFLY_HIGHLIGHT": "ご注意:",
+2 -1
View File
@@ -378,7 +378,8 @@
"CONNECTION-LIVE": "Live",
"CONNECTION-RECONNECTING": "Reconnecting…",
"CONNECTION-OFFLINE": "Offline",
"INVALID-PARAMS": "Invalid URL parameters."
"INVALID-PARAMS": "Invalid URL parameters.",
"LOADING": "Loading…"
},
"WARNING": {
"IFLY_HIGHLIGHT": "참고:",
+2 -1
View File
@@ -405,7 +405,8 @@
"CONNECTION-LIVE": "Онлайн",
"CONNECTION-RECONNECTING": "Соединение…",
"CONNECTION-OFFLINE": "Нет связи",
"INVALID-PARAMS": "Неверные параметры URL."
"INVALID-PARAMS": "Неверные параметры URL.",
"LOADING": "Загрузка…"
},
"SMOKE": {
"HEADING": "Страница проверки"
+2 -1
View File
@@ -378,7 +378,8 @@
"CONNECTION-LIVE": "Live",
"CONNECTION-RECONNECTING": "Reconnecting…",
"CONNECTION-OFFLINE": "Offline",
"INVALID-PARAMS": "Invalid URL parameters."
"INVALID-PARAMS": "Invalid URL parameters.",
"LOADING": "Loading…"
},
"WARNING": {
"IFLY_HIGHLIGHT": "请注意:",
+2 -3
View File
@@ -32,8 +32,7 @@ export default function FlightsMapPage(): JSX.Element {
if (!isEnabled) {
return (
<div data-testid="flights-map-disabled">
<h1>404 - Page Not Found</h1>
<p>This feature is currently unavailable.</p>
<h1>404 {t("PAGE404.HEADER")}</h1>
</div>
);
}
@@ -44,7 +43,7 @@ export default function FlightsMapPage(): JSX.Element {
return (
<>
<SeoHead {...seoProps} jsonLd={jsonLd} />
<Suspense fallback={<div aria-busy="true">Loading...</div>}>
<Suspense fallback={<div aria-busy="true">{t("SHARED.LOADING")}</div>}>
<FlightsMapStartPage />
</Suspense>
</>
+1 -1
View File
@@ -29,7 +29,7 @@ export default function OnlineBoardPage(): JSX.Element {
return (
<>
<SeoHead {...seoProps} />
<Suspense fallback={<div aria-busy="true">Loading...</div>}>
<Suspense fallback={<div aria-busy="true">{t("SHARED.LOADING")}</div>}>
<OnlineBoardStartPage />
</Suspense>
</>
+3 -1
View File
@@ -11,6 +11,7 @@
import { lazy, Suspense, useCallback } from "react";
import { useParams, useNavigate } from "@modern-js/runtime/router";
import { useTranslation } from "@/i18n/provider.js";
import type { PopularRequest } from "@/features/popular-requests/types.js";
const PopularRequestsPanel = lazy(() =>
@@ -20,6 +21,7 @@ const PopularRequestsPanel = lazy(() =>
);
export default function PopularPage(): JSX.Element {
const { t } = useTranslation();
const routeParams = useParams<{ lang: string }>();
const lang = routeParams.lang ?? "ru";
const navigate = useNavigate();
@@ -48,7 +50,7 @@ export default function PopularPage(): JSX.Element {
);
return (
<Suspense fallback={<div aria-busy="true">Loading...</div>}>
<Suspense fallback={<div aria-busy="true">{t("SHARED.LOADING")}</div>}>
<PopularRequestsPanel onRequestClick={handleRequestClick} />
</Suspense>
);
+1 -1
View File
@@ -29,7 +29,7 @@ export default function SchedulePage(): JSX.Element {
return (
<>
<SeoHead {...seoProps} />
<Suspense fallback={<div aria-busy="true">Loading...</div>}>
<Suspense fallback={<div aria-busy="true">{t("SHARED.LOADING")}</div>}>
<ScheduleStartPage />
</Suspense>
</>