Merge origin/main: GNSS integrity, geo file import and cockpit emergencies meet i18n

Conflicts resolved by keeping both sides: the Events group gains
gnss-integrity with a translated label, the cockpit aircraft line shows
main's transponder emergency through a localized formatter (cockpitMath.js
stays i18n-free, like the Context scope line), and the boundary lists keep
both the i18n modules and main's new data modules.

Main's new UI is translated into es and ru: the GNSS Integrity row, legend
and notes; geo file import (button, hints, list actions, every import
error, with numbers passed as placeholders); transponder status names.
Also formats kartaview/viewer.js so format:check passes.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
German KhokhlovandClaude Opus 5.5 committed 2026-10-15 16:55:45 +04:00
commit 8029747b7e
88 files changed
+11991 -137

No files matched your search

+86 -1
View File
@@ -2123,5 +2123,90 @@
"fire confidence|low": "baja",
"age|<1h": "<1 h",
"age|{count}h": "{count} h",
"age|{count}d": "{count} d"
"age|{count}d": "{count} d",
"General emergency": "Emergencia general",
"Unlawful interference": "Interferencia ilícita",
"Radio failure": "Fallo de radio",
"Downed aircraft": "Aeronave siniestrada",
"Minimum fuel": "Combustible mínimo",
"Lifeguard (medical priority)": "Lifeguard (prioridad médica)",
"That file is not valid JSON.": "Ese archivo no es un JSON válido.",
"That JSON file is not GeoJSON.": "Ese archivo JSON no es GeoJSON.",
"That FeatureCollection has no features list.": "Esa FeatureCollection no tiene lista de features.",
"Every GeoJSON feature must have type Feature.": "Cada elemento GeoJSON debe tener el tipo Feature.",
"That GeoJSON has invalid geometries.": "Ese GeoJSON tiene geometrías no válidas.",
"That GeoJSON contains an unsupported geometry.": "Ese GeoJSON contiene una geometría no admitida.",
"That GeoJSON has invalid coordinates.": "Ese GeoJSON tiene coordenadas no válidas.",
"That file creates more than {limit} map objects (the limit).": "Ese archivo crea más de {limit} objetos en el mapa (el límite).",
"That file has more than {limit} style definitions and image links after cleanup (the limit).": "Tras la limpieza, ese archivo tiene más de {limit} definiciones de estilo y enlaces a imágenes (el límite).",
"That file has more than {limit} features (the limit).": "Ese archivo tiene más de {limit} elementos (el límite).",
"That file has more than {limit} points (the limit) across {features} features.": "Ese archivo tiene más de {limit} puntos (el límite) en {features} elementos.",
"That file has more than {limit} points (the limit).": "Ese archivo tiene más de {limit} puntos (el límite).",
"That KMZ unpacks to more than the import limit.": "Al descomprimirse, ese KMZ supera el límite de importación.",
"That KMZ is damaged and could not be unpacked.": "Ese KMZ está dañado y no se pudo descomprimir.",
"That KMZ is not a readable zip archive.": "Ese KMZ no es un archivo zip legible.",
"That KMZ uses a zip format this import does not read.": "Ese KMZ usa un formato zip que esta importación no lee.",
"That KMZ is encrypted.": "Ese KMZ está cifrado.",
"That KMZ uses a compression method this import does not read.": "Ese KMZ usa un método de compresión que esta importación no lee.",
"That KML has invalid geometry bounds.": "Ese KML tiene límites de geometría no válidos.",
"That KML has invalid coordinates.": "Ese KML tiene coordenadas no válidas.",
"That GPX file has no <gpx> document.": "Ese archivo GPX no tiene documento <gpx>.",
"That {format} file is not valid XML.": "Ese archivo {format} no es un XML válido.",
"That file has an unreadable image or exceeds the 16-megapixel image limit.": "Ese archivo tiene una imagen ilegible o supera el límite de imagen de 16 megapíxeles.",
"That KML could not be read.": "No se pudo leer ese KML.",
"That file has invalid point coordinates.": "Ese archivo tiene coordenadas de puntos no válidas.",
"Ground heights are not available for that file. Try again when the map has loaded.": "Las alturas del terreno no están disponibles para ese archivo. Vuelve a intentarlo cuando el mapa haya cargado.",
"That file took too long to read.": "La lectura de ese archivo tardó demasiado.",
"Nothing to import.": "No hay nada que importar.",
"That file is larger than {size} MiB.": "Ese archivo pesa más de {size} MiB.",
"Only GeoJSON, KML, KMZ and GPX files can be imported.": "Solo se pueden importar archivos GeoJSON, KML, KMZ y GPX.",
"That file has nothing to draw.": "Ese archivo no tiene nada que dibujar.",
"That KMZ holds no KML document.": "Ese KMZ no contiene ningún documento KML.",
"That {format} file could not be read.": "No se pudo leer ese archivo {format}.",
"That file has {count} map objects; the limit is {limit}.": "Ese archivo tiene {count} objetos en el mapa; el límite es {limit}.",
"Ground heights could not be read. Try that file again.": "No se pudieron leer las alturas del terreno. Vuelve a intentarlo con ese archivo.",
"That file has invalid point graphics.": "Ese archivo tiene gráficos de puntos no válidos.",
"Low-accuracy score < 2%": "Índice de baja precisión < 2%",
"Low-accuracy score 2–10%": "Índice de baja precisión 2–10%",
"Low-accuracy score > 10%": "Índice de baja precisión > 10%",
"GNSS integrity source unavailable": "Fuente de integridad GNSS no disponible",
"Regional sample · 250 nm radius · cells from visited views over 30 min": "Muestra regional · radio de 250 NM · celdas de las vistas visitadas en 30 min",
"Retrying automatically at {time} UTC": "Reintento automático a las {time} UTC",
"Retrying automatically after provider cooldown": "Reintento automático tras la pausa del proveedor",
"Updates automatically after pan or zoom and once a minute. The public feed covers a 250-nautical-mile circle around the view centre; zooming out does not make it a worldwide snapshot. Blank cells are outside sampled coverage or have insufficient observations.": "Se actualiza automáticamente al desplazar o hacer zoom y una vez por minuto. El feed público cubre un círculo de 250 millas náuticas alrededor del centro de la vista; alejarte no lo convierte en una instantánea mundial. Las celdas vacías están fuera de la cobertura muestreada o no tienen observaciones suficientes.",
"Low-accuracy score = 100 × max(0, bad − 1) / total: one aircraft is discounted, so this is not the raw share. Cells need {aircraft} aircraft over {minutes} minutes. Navigation-integrity anomalies are not a detection of jamming or spoofing.": "Índice de baja precisión = 100 × max(0, malas − 1) / total: se descuenta una aeronave, así que no es la proporción bruta. Cada celda necesita {aircraft} aeronaves en {minutes} minutos. Las anomalías de integridad de navegación no son una detección de interferencias ni de suplantación.",
"SQUAWK {code} · {status}": "SQUAWK {code} · {status}",
"ADS-B PRIORITY · {status}": "ADS-B PRIORIDAD · {status}",
"ADS-B EMERGENCY · {status}": "ADS-B EMERGENCIA · {status}",
"{aircraftClass} · {emergency} · {feedState}": "{aircraftClass} · {emergency} · {feedState}",
"Ground heights could not be refreshed. Try the file again when the map has loaded.": "No se pudieron actualizar las alturas del terreno. Vuelve a intentarlo con el archivo cuando el mapa haya cargado.",
"{count} map objects": {
"one": "{count} objeto en el mapa",
"many": "{count} de objetos en el mapa",
"other": "{count} objetos en el mapa"
},
", drawn with its own styles": ", dibujado con sus propios estilos",
"Hide {name}": "Ocultar {name}",
"Show {name}": "Mostrar {name}",
"Fly to {name}": "Volar a {name}",
"Remove {name}": "Quitar {name}",
"At most {count} files at once — remove one first.": "Como máximo {count} archivos a la vez: quita uno primero.",
"Reading {name}…": "Leyendo {name}…",
"That file could not be read.": "No se pudo leer ese archivo.",
"Added {count} files.": {
"one": "Se añadió {count} archivo.",
"many": "Se añadieron {count} de archivos.",
"other": "Se añadieron {count} archivos."
},
"{count} files could not be added ({name}: {error})": {
"one": "No se pudo añadir {count} archivo ({name}: {error})",
"many": "No se pudieron añadir {count} de archivos ({name}: {error})",
"other": "No se pudieron añadir {count} archivos ({name}: {error})"
},
"Some KML content was left out.": "Se omitió parte del contenido KML.",
"GNSS Integrity": "Integridad GNSS",
"Show your own GeoJSON, KML, KMZ or GPX files on the globe (or drop them onto it). File bytes stay on this device; overlays can appear in map screenshots shared with voice.": "Muestra en el globo tus propios archivos GeoJSON, KML, KMZ o GPX (o suéltalos sobre él). Los archivos no salen de este dispositivo; las capas pueden aparecer en capturas del mapa compartidas con la voz.",
"Import": "Importar",
"Choose GeoJSON, KML, KMZ or GPX files": "Elige archivos GeoJSON, KML, KMZ o GPX",
"Imported files": "Archivos importados"
}
+89 -1
View File
@@ -2156,5 +2156,93 @@
"fire confidence|low": "низкая",
"age|<1h": "<1 ч",
"age|{count}h": "{count} ч",
"age|{count}d": "{count} д"
"age|{count}d": "{count} д",
"General emergency": "Общая авария",
"Unlawful interference": "Незаконное вмешательство",
"Radio failure": "Отказ радиосвязи",
"Downed aircraft": "Вынужденная посадка",
"Minimum fuel": "Минимум топлива",
"Lifeguard (medical priority)": "Санитарный рейс (медицинский приоритет)",
"That file is not valid JSON.": "Этот файл — некорректный JSON.",
"That JSON file is not GeoJSON.": "Этот файл JSON не является GeoJSON.",
"That FeatureCollection has no features list.": "В этой FeatureCollection нет списка features.",
"Every GeoJSON feature must have type Feature.": "У каждого объекта GeoJSON должен быть тип Feature.",
"That GeoJSON has invalid geometries.": "В этом GeoJSON некорректные геометрии.",
"That GeoJSON contains an unsupported geometry.": "В этом GeoJSON есть неподдерживаемая геометрия.",
"That GeoJSON has invalid coordinates.": "В этом GeoJSON некорректные координаты.",
"That file creates more than {limit} map objects (the limit).": "Файл создаёт больше объектов на карте, чем позволяет лимит: {limit}.",
"That file has more than {limit} style definitions and image links after cleanup (the limit).": "После очистки в файле больше стилей и ссылок на изображения, чем позволяет лимит: {limit}.",
"That file has more than {limit} features (the limit).": "В файле больше объектов, чем позволяет лимит: {limit}.",
"That file has more than {limit} points (the limit) across {features} features.": "В файле больше точек, чем позволяет лимит: {limit} (объектов: {features}).",
"That file has more than {limit} points (the limit).": "В файле больше точек, чем позволяет лимит: {limit}.",
"That KMZ unpacks to more than the import limit.": "После распаковки этот KMZ превышает лимит импорта.",
"That KMZ is damaged and could not be unpacked.": "Этот KMZ повреждён, распаковать его не удалось.",
"That KMZ is not a readable zip archive.": "Этот KMZ — не читаемый zip-архив.",
"That KMZ uses a zip format this import does not read.": "Этот KMZ использует формат zip, который импорт не читает.",
"That KMZ is encrypted.": "Этот KMZ зашифрован.",
"That KMZ uses a compression method this import does not read.": "Этот KMZ использует метод сжатия, который импорт не читает.",
"That KML has invalid geometry bounds.": "В этом KML некорректные границы геометрии.",
"That KML has invalid coordinates.": "В этом KML некорректные координаты.",
"That GPX file has no <gpx> document.": "В этом файле GPX нет документа <gpx>.",
"That {format} file is not valid XML.": "Этот файл {format} — некорректный XML.",
"That file has an unreadable image or exceeds the 16-megapixel image limit.": "В файле есть нечитаемое изображение или изображение больше лимита в 16 мегапикселей.",
"That KML could not be read.": "Не удалось прочитать этот KML.",
"That file has invalid point coordinates.": "В файле некорректные координаты точек.",
"Ground heights are not available for that file. Try again when the map has loaded.": "Высоты рельефа для этого файла недоступны. Попробуйте ещё раз, когда карта загрузится.",
"That file took too long to read.": "Файл читался слишком долго.",
"Nothing to import.": "Нечего импортировать.",
"That file is larger than {size} MiB.": "Файл больше {size} МиБ.",
"Only GeoJSON, KML, KMZ and GPX files can be imported.": "Импортировать можно только файлы GeoJSON, KML, KMZ и GPX.",
"That file has nothing to draw.": "В файле нечего показать на карте.",
"That KMZ holds no KML document.": "В этом KMZ нет документа KML.",
"That {format} file could not be read.": "Не удалось прочитать этот файл {format}.",
"That file has {count} map objects; the limit is {limit}.": "Объектов на карте в файле: {count}; лимит: {limit}.",
"Ground heights could not be read. Try that file again.": "Не удалось получить высоты рельефа. Попробуйте импортировать файл ещё раз.",
"That file has invalid point graphics.": "В файле некорректное оформление точек.",
"Low-accuracy score < 2%": "Доля неточных < 2%",
"Low-accuracy score 2–10%": "Доля неточных 2–10%",
"Low-accuracy score > 10%": "Доля неточных > 10%",
"GNSS integrity source unavailable": "Источник целостности GNSS недоступен",
"Regional sample · 250 nm radius · cells from visited views over 30 min": "Региональная выборка · радиус 250 мор. миль · ячейки из просмотренных видов за 30 мин",
"Retrying automatically at {time} UTC": "Автоматический повтор в {time} UTC",
"Retrying automatically after provider cooldown": "Автоматический повтор после паузы провайдера",
"Updates automatically after pan or zoom and once a minute. The public feed covers a 250-nautical-mile circle around the view centre; zooming out does not make it a worldwide snapshot. Blank cells are outside sampled coverage or have insufficient observations.": "Обновляется автоматически после сдвига или масштабирования карты и раз в минуту. Публичный поток данных охватывает круг радиусом 250 морских миль вокруг центра вида; при отдалении карта не становится снимком всего мира. Пустые ячейки — вне охвата выборки или с недостаточным числом наблюдений.",
"Low-accuracy score = 100 × max(0, bad − 1) / total: one aircraft is discounted, so this is not the raw share. Cells need {aircraft} aircraft over {minutes} minutes. Navigation-integrity anomalies are not a detection of jamming or spoofing.": "Доля неточных = 100 × max(0, неточные − 1) / всего: один самолёт не учитывается, поэтому это не прямая доля. Для ячейки нужно самолётов: {aircraft} за {minutes} мин. Аномалии целостности навигации — не обнаружение глушения или подмены сигнала.",
"SQUAWK {code} · {status}": "СКВОК {code} · {status}",
"ADS-B PRIORITY · {status}": "ADS-B ПРИОРИТЕТ · {status}",
"ADS-B EMERGENCY · {status}": "ADS-B АВАРИЯ · {status}",
"{aircraftClass} · {emergency} · {feedState}": "{aircraftClass} · {emergency} · {feedState}",
"Ground heights could not be refreshed. Try the file again when the map has loaded.": "Не удалось обновить высоты рельефа. Попробуйте импортировать файл ещё раз, когда карта загрузится.",
"{count} map objects": {
"one": "{count} объект на карте",
"few": "{count} объекта на карте",
"many": "{count} объектов на карте",
"other": "{count} объекта на карте"
},
", drawn with its own styles": ", со своими стилями",
"Hide {name}": "Скрыть: {name}",
"Show {name}": "Показать: {name}",
"Fly to {name}": "Перелёт: {name}",
"Remove {name}": "Удалить: {name}",
"At most {count} files at once — remove one first.": "Не больше {count} файлов одновременно — сначала удалите один.",
"Reading {name}…": "Чтение: {name}…",
"That file could not be read.": "Не удалось прочитать этот файл.",
"Added {count} files.": {
"one": "Добавлен {count} файл.",
"few": "Добавлено {count} файла.",
"many": "Добавлено {count} файлов.",
"other": "Добавлено {count} файла."
},
"{count} files could not be added ({name}: {error})": {
"one": "Не удалось добавить {count} файл ({name}: {error})",
"few": "Не удалось добавить {count} файла ({name}: {error})",
"many": "Не удалось добавить {count} файлов ({name}: {error})",
"other": "Не удалось добавить {count} файла ({name}: {error})"
},
"Some KML content was left out.": "Часть содержимого KML пропущена.",
"GNSS Integrity": "Целостность GNSS",
"Show your own GeoJSON, KML, KMZ or GPX files on the globe (or drop them onto it). File bytes stay on this device; overlays can appear in map screenshots shared with voice.": "Показать на глобусе свои файлы GeoJSON, KML, KMZ или GPX (или перетащите их на глобус). Содержимое файлов остаётся на этом устройстве; наложения могут попасть в снимки карты, которые передаются голосовому ассистенту.",
"Import": "Импорт",
"Choose GeoJSON, KML, KMZ or GPX files": "Выберите файлы GeoJSON, KML, KMZ или GPX",
"Imported files": "Импортированные файлы"
}
+1
View File
@@ -75,6 +75,7 @@
"SE",
"SECTOR {lat} {lon}",
"SIG",
"SQUAWK {code} · {status}",
"SRC {value}",
"SSE",
"STD",