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
+27
-6
@@ -1047,19 +1047,40 @@ export function displaySceneTitle(scene) {
|
||||
const builtin = SCENE_RECIPES.find((recipe) => recipe.id === scene?.id);
|
||||
if (builtin?.title && scene.title === builtin.title) return t(builtin.title);
|
||||
const title = scene?.title || '';
|
||||
const numbered = /^Scene (\d+)$/.exec(title);
|
||||
return numbered ? t('Scene {n}', { n: Number(numbered[1]) }) : title;
|
||||
// Only the generated "Scene N" localizes; an operator-typed "Scene 007"
|
||||
// keeps its digits, so the number stays a string (no Number() round trip).
|
||||
const numbered = /^Scene ([1-9]\d*)$/.exec(title);
|
||||
return numbered ? t('Scene {n}', { n: numbered[1] }) : title;
|
||||
}
|
||||
|
||||
/**
|
||||
* Display title for a shot: built-in titles and the numbered "Shot N"
|
||||
* fallback localize; any other title shows as stored.
|
||||
*
|
||||
* With the shot itself, a built-in title localizes only when the shot came
|
||||
* from a recipe (`sourcePackId`), so an operator-typed title that happens to
|
||||
* match a built-in one is never masked by the catalog. Without it, provenance
|
||||
* is unknown and the title alone decides, as before.
|
||||
* @param {string} title
|
||||
* @param {{sourcePackId?: string}} [shot]
|
||||
* @param {{id?: string}} [scene] The shot's scene, for projects saved before
|
||||
* shots recorded their source pack.
|
||||
* @returns {string}
|
||||
*/
|
||||
export function displayShotTitle(title) {
|
||||
export function displayShotTitle(title, shot = undefined, scene = undefined) {
|
||||
const text = typeof title === 'string' ? title : '';
|
||||
if (BUILTIN_SHOT_TITLES.has(text)) return t(text);
|
||||
const numbered = /^Shot (\d+)$/.exec(text);
|
||||
return numbered ? t('Shot {n}', { n: Number(numbered[1]) }) : text;
|
||||
const fromRecipe = shot
|
||||
? Boolean(shot.sourcePackId) || recipeDeclaresShotTitle(scene?.id, text)
|
||||
: true;
|
||||
if (fromRecipe && BUILTIN_SHOT_TITLES.has(text)) return t(text);
|
||||
const numbered = /^Shot ([1-9]\d*)$/.exec(text);
|
||||
return numbered ? t('Shot {n}', { n: numbered[1] }) : text;
|
||||
}
|
||||
|
||||
/** Whether the built-in recipe behind a scene declares a shot with this title. */
|
||||
function recipeDeclaresShotTitle(sceneId, title) {
|
||||
const recipe = sceneId ? getSceneRecipeById(sceneId) : null;
|
||||
return Boolean(
|
||||
recipe?.cameraPath?.some((keyframe) => keyframe?.title === title),
|
||||
);
|
||||
}
|
||||
Reference in new issue
Block a user