mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-05 19:04:02 +00:00
i18n: fix review findings and polish ru/es strings
Fixes the 51 P0–P2 findings from the full review of the i18n branch and the issues found while checking every new string on screen in ru and es. - Translate errors and statuses that still reached ru/es in English: feed and tile errors, provider statuses, the ALPR chip, the traffic mode chip, voice plan step labels, fire feed values, receiver bands, scene save reasons and the Cesium attribution link. - Show preset city names in the UI language (src/ui/placeNames.js); data and everything sent to the model stay English. - Share layer names between the layer panel, HUD and voice card (src/ui/layerNames.js). - Keep long ru/es strings whole: voice card error lines, analyst titles, the voice tier status, the Nepal evidence button, the ALPR retry chip. English layout is unchanged. - Ask before a language switch drops unsaved work. - Catalog fixes: glossary terms (пуск, пресет), gender agreement and consistent "peticiones" in es, fewer calques in both languages. - Fix English text that was itself wrong (e.g. "Exit cockpit to fly to a weather", raw tool ids in voice plan steps). Catalogs: es/ru 2535 messages each, complete. Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
1 parent
8029747b7e
commit
00704ddc89
212 files changed
+9871
-909
No files matched your search
@@ -1,10 +1,12 @@
|
||||
import * as Cesium from 'cesium';
|
||||
import { t } from '../../i18n/index.js';
|
||||
import {
|
||||
vesselTypeCss,
|
||||
vesselOverlayCohortLimit,
|
||||
VESSEL_OVERLAY_SOURCE_ID,
|
||||
applyVesselOverlayPolicy,
|
||||
VESSEL_CARD_FADE_DISTANCE_M,
|
||||
VESSEL_CARD_FADE_START_RATIO,
|
||||
} from '../../data/vesselLabels.js';
|
||||
import {
|
||||
cameraPoseSignature,
|
||||
@@ -365,6 +367,7 @@ export function createRendering({
|
||||
|
||||
if (!scene || !records.length || maxLabels <= 0) {
|
||||
state.activeLabelCount = entries.length;
|
||||
state.cardedRecords = new Set();
|
||||
publishVesselOverlayEntries(entries);
|
||||
return;
|
||||
}
|
||||
@@ -402,6 +405,9 @@ export function createRendering({
|
||||
if (screen) accepted.push({ x: screen.x, y: screen.y });
|
||||
}
|
||||
const ranked = [...cells.values()].sort((a, b) => b.score - a.score);
|
||||
// Vessels with an ambient card: the card already shows name, speed and
|
||||
// course, so the detection overlay draws no label of its own under it.
|
||||
const carded = new Set();
|
||||
for (const candidate of ranked) {
|
||||
if (entries.length >= maxLabels) break;
|
||||
if (
|
||||
@@ -414,8 +420,10 @@ export function createRendering({
|
||||
continue;
|
||||
accepted.push({ x: candidate.x, y: candidate.y });
|
||||
entries.push(components.cards.buildVesselCard(candidate.record));
|
||||
if (cardFullyShown(scene, candidate.record)) carded.add(candidate.record);
|
||||
}
|
||||
state.activeLabelCount = entries.length;
|
||||
state.cardedRecords = carded;
|
||||
publishVesselOverlayEntries(entries);
|
||||
}
|
||||
|
||||
@@ -448,7 +456,10 @@ export function createRendering({
|
||||
: '';
|
||||
return {
|
||||
...card,
|
||||
accessibilityLabel: `Focus vessel ${card.title}, MMSI ${mmsi}`,
|
||||
accessibilityLabel: t('Focus vessel {name}, MMSI {mmsi}', {
|
||||
name: card.title,
|
||||
mmsi,
|
||||
}),
|
||||
activate: () => {
|
||||
const record = state.records.byMmsi.get(mmsi);
|
||||
if (!record) return false;
|
||||
@@ -465,6 +476,22 @@ export function createRendering({
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether the host paints this ambient card at full strength: inside the
|
||||
* start of its distance fade (applyVesselOverlayPolicy). Farther out the
|
||||
* card fades away and the detection label stays the vessel's only text.
|
||||
*/
|
||||
function cardFullyShown(scene, record) {
|
||||
const camera = scene.camera?.positionWC;
|
||||
const visual = getVisual(record);
|
||||
const position = visual.billboard?.position || visual.position;
|
||||
if (!camera || !position) return true;
|
||||
return (
|
||||
Cesium.Cartesian3.distance(camera, position) <
|
||||
VESSEL_CARD_FADE_DISTANCE_M * VESSEL_CARD_FADE_START_RATIO
|
||||
);
|
||||
}
|
||||
|
||||
function labelPriority(record, selected) {
|
||||
if (record === selected) return 100000;
|
||||
let score = 0;
|
||||
|
||||
Reference in new issue
Block a user