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
+30
-3
@@ -7,8 +7,35 @@
|
||||
* flying.
|
||||
*/
|
||||
|
||||
import { t, msg } from './i18n/index.js';
|
||||
|
||||
export const NAVIGATION_AUTHORITY_EVENT = 'gev:navigation-authority-taken';
|
||||
|
||||
// The Cockpit refusal per destination noun. Nouns are English identifiers
|
||||
// from the callers ('camera', 'location', 'photo'…); a noun without its own
|
||||
// sentence falls back to the template with the noun as given.
|
||||
const COCKPIT_REFUSALS = Object.freeze({
|
||||
camera: msg('Exit cockpit to fly to a camera'),
|
||||
location: msg('Exit cockpit to fly to a location'),
|
||||
photo: msg('Exit cockpit to fly to a photo'),
|
||||
'shared view': msg('Exit cockpit to fly to a shared view'),
|
||||
target: msg('Exit cockpit to fly to a target'),
|
||||
vessel: msg('Exit cockpit to fly to a vessel'),
|
||||
fire: msg('Exit cockpit to fly to a fire'),
|
||||
route: msg('Exit cockpit to fly to a route'),
|
||||
file: msg('Exit cockpit to fly to a file'),
|
||||
scene: msg('Exit cockpit to fly to a scene'),
|
||||
// Radar, satellite and lightning fly to the layer's coverage area (their
|
||||
// «View coverage» button); the cyclone layer flies to the selected storm.
|
||||
weather: msg('Exit cockpit to view weather coverage'),
|
||||
cyclone: msg('Exit cockpit to fly to a cyclone'),
|
||||
});
|
||||
|
||||
function cockpitRefusal(noun) {
|
||||
const ready = COCKPIT_REFUSALS[noun];
|
||||
return ready ? t(ready) : t('Exit cockpit to fly to a {noun}', { noun });
|
||||
}
|
||||
|
||||
/**
|
||||
* Announce that a layer-owned camera flight is taking navigation authority.
|
||||
*
|
||||
@@ -90,7 +117,7 @@ export function runExplicitNavigation({
|
||||
} = {}) {
|
||||
if (disposed) return false;
|
||||
if (cockpitActive) {
|
||||
showToast?.(`Exit cockpit to fly to a ${noun}`);
|
||||
showToast?.(cockpitRefusal(noun));
|
||||
return false;
|
||||
}
|
||||
const generation = stamp?.();
|
||||
@@ -112,7 +139,7 @@ export function beginDeferredNavigation({
|
||||
} = {}) {
|
||||
if (disposed) return false;
|
||||
if (cockpitActive) {
|
||||
showToast?.(`Exit cockpit to fly to a ${noun}`);
|
||||
showToast?.(cockpitRefusal(noun));
|
||||
return false;
|
||||
}
|
||||
return stamp?.();
|
||||
@@ -133,7 +160,7 @@ export function reassertNavigationHandoff({
|
||||
} = {}) {
|
||||
if (disposed || generation !== currentGeneration) return false;
|
||||
if (cockpitActive) {
|
||||
showToast?.('Exit cockpit to fly to a location');
|
||||
showToast?.(cockpitRefusal('location'));
|
||||
return false;
|
||||
}
|
||||
release?.();
|
||||
|
||||
Reference in new issue
Block a user