fix(i18n): wording, dates and directions from the cross-model review

Two other models reviewed the ru and es review PDFs. What held up:

- Directions: Russian reads "держитесь левее" at a fork and "займите
  левую полосу" for a lane, Spanish "toma el carril izquierdo". Forks and
  lanes get their own direction words; English is unchanged.
- Weather timestamps read "13.10 19:04 UTC" / "13/10 19:04 UTC" instead
  of "10-13", which read as a range. English keeps "10-13".
- Cockpit coordinates write the hemisphere out in Russian ("30,312° с.
  ш."): a lone «С» after a degree sign read as Celsius.
- A layer whose source joins several providers shows each name in the UI
  language ("Mapillary · Google Просмотр улиц").
- Vessel speed uses the locale's decimal separator.
- Layer names no longer hyphenate into two-letter pieces ("es-paciales").
- Catalog: wrong meanings (cyclone centre, STREAMING, credited source,
  "DE OÍDAS"), calques ("Пацифика", "Активная погода", "Прочитать вид",
  "referrer", worker), Russian "щёлкните по …", shorter Spanish labels
  that were cut (voice status, PREAJUSTES, search placeholder) and one
  term per concept.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
German KhokhlovandClaude Opus 5.5 committed 2026-10-14 17:31:42 +04:00
1 parent 005b4dc9dc
commit eed05721f2
13 files changed
+278 -134

No files matched your search

+60 -42
View File
@@ -47,7 +47,7 @@
"Return UI controls": "Volver a mostrar los controles de la interfaz",
"EXIT CLEAN VIEW": "SALIR DE VISTA LIMPIA",
"Expand Visual Presets": "Expandir Preajustes visuales",
"VISUAL PRESETS": "PREAJUSTES VISUALES",
"VISUAL PRESETS": "PREAJUSTES",
"Pin visual presets": "Fijar Preajustes visuales",
"Keep visual presets open": "Mantener abiertos los Preajustes visuales",
"Show the globe without a visual filter.": "Muestra el globo sin filtro visual.",
@@ -83,7 +83,7 @@
"Detection label allocation": "Asignación de etiquetas de detección",
"Elastic": "Elástica",
"Weighted": "Ponderada",
"Fade": "Desvanecido",
"Fade": "Desvanecimiento",
"Detection fade distance": "Distancia de desvanecimiento de detección",
"World-overlay fade distance outside the keyhole as a percentage of its radius": "Distancia de desvanecimiento de la superposición del mundo fuera del ojo de cerradura, como porcentaje de su radio",
"Outside": "Exterior",
@@ -112,8 +112,8 @@
"Keep location tray open": "Mantener abierta la bandeja de ubicación",
"📍 Location: --": "📍 Ubicación: --",
"Landmark: --": "Punto de interés: --",
"Search any location": "Buscar cualquier ubicación",
"Search any location...": "Buscar cualquier ubicación...",
"Search any location": "Buscar un lugar",
"Search any location...": "Buscar un lugar…",
"LEVEL": "NIVEL",
"Estimated destination direction": "Dirección estimada del destino",
"DEST ---°": "DEST ---°",
@@ -412,7 +412,7 @@
"CCTV camera": "Cámara CCTV",
"FOCUS": "ENFOCAR",
"COVERAGE OFF": "COBERTURA DESACTIVADA",
"AUTO HOP OFF": "SALTO AUTOMÁTICO: NO",
"AUTO HOP OFF": "SALTO AUTO: NO",
"PROJECTION ON": "PROYECCIÓN ACTIVADA",
"CALIBRATION": "CALIBRACIÓN",
"ADJUST": "AJUSTAR",
@@ -473,7 +473,7 @@
"Submarine Cables": "Cables submarinos",
"FIRMS Active Fires": "Incendios activos FIRMS",
"just now": "justo ahora",
"{count}s ago": "hace {count}s",
"{count}s ago": "hace {count} s",
"{count}m ago": "hace {count} min",
"{count}h ago": "hace {count} h",
"never": "sin actualizar",
@@ -521,7 +521,7 @@
"awaiting first AIS position…": "esperando la primera posición AIS…",
"CCTV ON": "CCTV ACTIVADO",
"COVERAGE ON": "COBERTURA ACTIVADA",
"AUTO HOP ON": "SALTO AUTOMÁTICO: SÍ",
"AUTO HOP ON": "SALTO AUTO: SÍ",
"PROJECTION OFF": "PROYECCIÓN DESACTIVADA",
"ADJUST ON": "AJUSTE ACTIVADO",
"{count} CAMERAS STANDING BY · NO CAMERA SELECTED · CLICK A CAMERA TO ACTIVATE": "{count} CÁMARAS EN ESPERA · NINGUNA CÁMARA SELECCIONADA · CLIC EN UNA CÁMARA PARA ACTIVARLA",
@@ -540,7 +540,7 @@
"SRC {value}": "SRC {value}",
"{value} CONTEXT": "CONTEXTO {value}",
"News": "Noticias",
"Talk": "Tertulia",
"Talk": "Radio hablada",
"Weather / Emergency": "Clima / Emergencias",
"Public Safety": "Seguridad pública",
"Aviation / Marine": "Aviación / Marina",
@@ -698,7 +698,7 @@
"SELECT A FLIGHT, VESSEL, OR MAPPED INSTALLATION": "SELECCIONA UN VUELO, BUQUE U INSTALACIÓN MAPEADA",
"ENABLE TO LOAD OBSERVED / MAPPED PROXIMITY": "ACTIVA PARA CARGAR PROXIMIDAD OBSERVADA / MAPEADA",
"Global Context navigation": "Navegación del Contexto global",
"PREVIOUS": "ANTERIOR",
"PREVIOUS": "ANT.",
"Open-source mapped/observed context. Missing broadcasts, unloaded map areas, or unmapped sites are not evidence of absence.": "Contexto mapeado/observado de fuentes abiertas. Las transmisiones ausentes, las zonas del mapa sin cargar o los sitios sin mapear no son evidencia de ausencia.",
"Unavailable": "No disponible",
"Focus {label}": "Enfocar {label}",
@@ -815,7 +815,7 @@
"{tier} applies next session": "{tier} se aplica en la próxima sesión",
"Voice model tier — applies next session": "Nivel del modelo de voz — se aplica en la próxima sesión",
"Estimated session cost": "Costo estimado de la sesión",
"Voice control — activate to toggle voice; hold Space to speak": "Control de voz — actívalo para conectar o cortar la voz; mantén pulsado Space para hablar",
"Voice control — activate to toggle voice; hold Space to speak": "Control de voz — púlsalo para activar o desactivar la voz; mantén pulsado Space para hablar",
"Cannot capture shot: camera not ready": "No se puede capturar el plano: la cámara no está lista",
"Shot {n}": "Plano {n}",
"Captured: {scene} / {shot}": "Capturado: {scene} / {shot}",
@@ -981,12 +981,12 @@
"Could not place the shape: {error}": "No se pudo colocar la forma: {error}",
"{owner} is using the pointer — close it first.": "{owner} está usando el puntero — ciérralo primero.",
"{label} · Detailed outline unavailable": "{label} · Contorno detallado no disponible",
"Witness source": "Fuente testigo",
"Witness source": "Testimonio de testigo",
"{provider} · EMBEDDED SOURCE": "{provider} · FUENTE INSERTADA",
"OPEN ORIGINAL ↗": "ABRIR ORIGINAL ↗",
"{provider} media: {source}": "Contenido de {provider}: {source}",
"{provider} · PROVIDER CONTROLS": "{provider} · CONTROLES NATIVOS",
"YOUTUBE {state} · OPEN ORIGINAL": "YOUTUBE {state} · ABRE EL ORIGINAL",
"YOUTUBE {state} · OPEN ORIGINAL": "YOUTUBE {state} · ABRIR ORIGINAL",
"Facebook player API did not initialize.": "La API del reproductor de Facebook no se inicializó.",
"Facebook player API could not load.": "No se pudo cargar la API del reproductor de Facebook.",
"Facebook player API timed out.": "La API del reproductor de Facebook agotó el tiempo de espera.",
@@ -1006,7 +1006,7 @@
"Facebook embed unavailable": "Inserción de Facebook no disponible",
"AUTOPLAY BLOCKED · USE PROVIDER CONTROLS": "REPRODUCCIÓN AUTOMÁTICA BLOQUEADA · USA LOS CONTROLES DEL PROVEEDOR",
"Embedded {provider} media for {source}": "Contenido de {provider} insertado para {source}",
"witness source": "fuente testigo",
"witness source": "testimonio de testigo",
"Rasuwagadhi witness": "Testigo de Rasuwagadhi",
"Open original source for {source}; capture time unverified": "Abrir la fuente original de {source}; hora de captura sin verificar",
"Historical reference and post-event image divider": "Divisor entre la imagen de referencia histórica y la posterior al evento",
@@ -1100,8 +1100,8 @@
"NEPAL · 26 AUG 2026": "NEPAL · 26 AGO 2026",
"USGS INITIAL REPORT": "INFORME INICIAL DEL USGS",
"26 AUG 2026 · 08:37 NPT": "26 AGO 2026 · 08:37 NPT",
"28.2710° N · 85.5150° E": "28.2710° N · 85.5150° E",
"INITIAL M4.4 · RECLASSIFIED M5.2 LANDSLIDE": "INICIAL M4.4 · RECLASIFICADO COMO DESLIZAMIENTO M5.2",
"28.2710° N · 85.5150° E": "28,2710° N · 85,5150° E",
"INITIAL M4.4 · RECLASSIFIED M5.2 LANDSLIDE": "INICIAL M4,4 · RECLASIFICADO COMO DESLIZAMIENTO M5,2",
"USGS EVENT us7000tbwb · OPEN SOURCE": "EVENTO USGS us7000tbwb · ABRIR FUENTE",
"flight": "vuelo",
"military flight": "vuelo militar",
@@ -1177,7 +1177,7 @@
"Official advisory ↗": "Aviso oficial ↗",
"Active NHC and CPHC cyclone advisories": "Avisos de ciclones activos del NHC y el CPHC",
"Wind unavailable": "Viento no disponible",
"Advisory center / forecast track": "Centro del aviso / trayectoria pronosticada",
"Advisory center / forecast track": "Centro del ciclón según el aviso / trayectoria pronosticada",
"Center-track uncertainty cone": "Cono de incertidumbre de la trayectoria del centro",
"Select a storm on the map, or choose a storm in the list to select it and move the camera. Click empty map space to clear the selection. NOAA NHC/CPHC advisory context. The cone describes forecast center-track uncertainty, not storm size or the full hazard area. Forecast point labels are source lead hours, not times computed from advisory issuance. Geometry follows the surface; height is not weather altitude. Consult the official advisory.": "Selecciona un ciclón en el mapa, o elige uno en la lista para seleccionarlo y mover la cámara. Haz clic en un espacio vacío del mapa para borrar la selección. Contexto de avisos NOAA NHC/CPHC. El cono describe la incertidumbre de la trayectoria pronosticada del centro, no el tamaño del ciclón ni toda el área de peligro. Las etiquetas de los puntos de pronóstico son horas de anticipación de la fuente, no horas calculadas a partir de la emisión del aviso. La geometría sigue la superficie; la altura no es altitud meteorológica. Consulta el aviso oficial.",
"Directions": "Indicaciones",
@@ -1196,7 +1196,7 @@
"Fly the camera along the route": "Volar con la cámara a lo largo de la ruta",
"Place A and B first": "Coloca primero A y B",
"Remove the route and both markers": "Eliminar la ruta y ambos marcadores",
"press Escape twice to leave Draw": "pulsa Escape dos veces para salir de Dibujo",
"press Escape twice to leave Draw": "pulsa Esc dos veces para salir de Dibujo",
"{name} is active — turn {name} off, then set {endpoint}": "{name} está activo — desactiva {name} y luego fija {endpoint}",
"{name} is active — {leave}, then set {endpoint}": "{name} está activo — {leave} y luego fija {endpoint}",
"Only the first {count} turns of this route are shown": "Solo se muestran los primeros {count} giros de esta ruta",
@@ -1266,7 +1266,7 @@
"60°S–60°N · typically 2–3 h delayed": "60°S–60°N · normalmente con 2–3 h de retraso",
"North America · infrared imagery": "Norteamérica · imágenes infrarrojas",
"Reduced motion · history playback unavailable": "Movimiento reducido · reproducción del historial no disponible",
"Reduced motion · manual history available": "Movimiento reducido · historial manual disponible",
"Reduced motion · manual history available": "Movimiento reducido · puedes recorrer el historial a mano",
"Rain radar · US": "Radar de lluvia · EE. UU.",
"Lightning density · 15 min": "Densidad de rayos · 15 min",
"Satellite clouds": "Nubes por satélite",
@@ -1353,7 +1353,7 @@
"Seeked: {scene} / {shot}": "Saltado a: {scene} / {shot}",
"Scene transition limit reached — load a shot to reset": "Límite de transiciones de escena alcanzado — carga un plano para restablecer",
"Export failed: {error}": "La exportación falló: {error}",
"Imported {file}": "Importado {file}",
"Imported {file}": "Importado: {file}",
"Import failed: {error}": "La importación falló: {error}",
"Import failed (could not read JSON file)": "La importación falló (no se pudo leer el archivo JSON)",
"Layers refused: {layers}": "Capas rechazadas: {layers}",
@@ -1433,7 +1433,7 @@
"No FM signal found": "No se encontró ninguna señal FM",
"Seek stopped": "Búsqueda detenida",
"Browser location is unavailable": "La ubicación del navegador no está disponible",
"Receiver location was not granted": "No se concedió la ubicación del receptor",
"Receiver location was not granted": "No se concedió permiso para la ubicación del receptor",
"RTL-SDR disconnected": "RTL-SDR desconectado",
"No RTL-SDR device selected": "No hay ningún dispositivo RTL-SDR seleccionado",
"WebUSB requires desktop Chrome or Edge on localhost/HTTPS": "WebUSB requiere Chrome o Edge de escritorio en localhost/HTTPS",
@@ -1443,7 +1443,7 @@
"Receiving broadcast FM": "Recibiendo FM de radiodifusión",
"Connect an RTL-SDR to begin.": "Conecta un RTL-SDR para empezar.",
"WebUSB is unavailable in this browser": "WebUSB no está disponible en este navegador",
"SDR decoder worker failed": "El worker del decodificador SDR falló",
"SDR decoder worker failed": "Falló el proceso del decodificador SDR",
"WebUSB requires desktop Chrome or Edge": "WebUSB requiere Chrome o Edge de escritorio",
"Waiting for an RTL-SDR device…": "Esperando un dispositivo RTL-SDR…",
"Browser audio is suspended; press Connect again to resume it": "El audio del navegador está suspendido; pulsa Conectar de nuevo para reanudarlo",
@@ -1468,9 +1468,9 @@
"Weather": "Clima",
"LOCATED": "UBICADO",
"LOCATE": "UBICAR",
"IDLE": "INACTIVO",
"IDLE": "EN ESPERA",
"TUNING": "SINTONIZANDO",
"STREAMING": "TRANSMITIENDO",
"STREAMING": "RECIBIENDO",
"UNSUPPORTED": "NO COMPATIBLE",
"waiting for IQ": "esperando IQ",
"{count} messages": {
@@ -1488,9 +1488,9 @@
"audio signal --": "señal de audio --",
"audio {state}": "audio {state}",
"{count} HEARD": {
"one": "{count} OÍDA",
"many": "{count} DE OÍDAS",
"other": "{count} OÍDAS"
"one": "CAPTADAS: {count}",
"many": "CAPTADAS: {count}",
"other": "CAPTADAS: {count}"
},
"DISCONNECT": "DESCONECTAR",
"CONNECT": "CONECTAR",
@@ -1513,7 +1513,7 @@
"Imagery days, newest first · arrows move, S or A and B pin": "Días de imágenes, el más reciente primero · las flechas mueven, S o A y B fijan",
"On the map": "En el mapa",
"Mode": "Modo",
"Imagery on Esri · Google 3D returns when cleared": "Imágenes sobre Esri · Google 3D vuelve al borrarlas",
"Imagery on Esri · Google 3D returns when cleared": "Imágenes sobre Esri · BORRAR devuelve Google 3D",
"Imagery opacity": "Opacidad de las imágenes",
"SWAP": "INVERTIR",
"VS BASEMAP": "VS MAPA BASE",
@@ -1644,7 +1644,7 @@
"POSITIONED": "POSICIONADAS",
"SDR VOL": "VOL. SDR",
"LOCAL RTL-SDR": "RTL-SDR LOCAL",
"Cyber sonar contact scanner": "Escáner sonar de contactos Ciber",
"Cyber sonar contact scanner": "Escáner de contactos del sonar Ciber",
"Sonar ring count": "Número de anillos del sonar",
"Sonar ring range": "Alcance de los anillos del sonar",
"Sonar intensity": "Intensidad del sonar",
@@ -1669,7 +1669,7 @@
"{detail} · Does not follow history": "{detail} · No sigue el historial",
"Forecast · valid {valid}": "Pronóstico · válido {valid}",
"{time} · {minutes} min ago": "{time} · hace {minutes} min",
"Active weather": "Clima activo",
"Active weather": "Capas meteorológicas activas",
"MINI": "MINI",
"STD": "EST.",
"standard": "estándar",
@@ -1679,7 +1679,7 @@
"USD cost and the API spend cap are unavailable for this auth mode.": "El costo en USD y el límite de gasto de la API no están disponibles con este modo de autenticación.",
"Usage is incomplete because a response was still in flight when the session ended.": "El uso está incompleto porque una respuesta seguía en curso cuando terminó la sesión.",
"Toggle voice control": "Alternar el control de voz",
"Activate to toggle voice": "Activa para conectar o cortar la voz",
"Activate to toggle voice": "Pulsa para activar o desactivar la voz",
"Voice active": "Voz activa",
"Voice could not be started.": "No se pudo iniciar la voz.",
"degraded": "degradado",
@@ -1749,7 +1749,7 @@
"Mark {targets}": "Marcar {targets}",
"Fly to {place}": "Volar a {place}",
"Nearest aircraft to {place}": "Aeronaves más cercanas a {place}",
"Read the view": "Leer la vista",
"Read the view": "Consultar la vista",
"Check view state": "Comprobar el estado de la vista",
"Frame {target}": "Encuadrar {target}",
"Finding places": "Buscando lugares",
@@ -1759,7 +1759,7 @@
"Turning on layer": "Activando capa",
"Loading aircraft": "Cargando aeronaves",
"Picking nearest": "Eligiendo la más cercana",
"Working": "Trabajando",
"Working": "Procesando",
"{value} feet": "{value} pies",
"nominal": "nominal",
"Source: {label}": "Fuente: {label}",
@@ -1884,11 +1884,11 @@
"At the roundabout, continue onto {road}": "En la rotonda, continúa por {road}",
"Exit the roundabout": "Sal de la rotonda",
"Exit the roundabout onto {road}": "Sal de la rotonda hacia {road}",
"Use the {direction} lane": "Usa el carril {direction}",
"Use the {direction} lane onto {road}": "Usa el carril {direction} hacia {road}",
"Use the {direction} lane": "Toma el carril {direction}",
"Use the {direction} lane onto {road}": "Toma el carril {direction} hacia {road}",
"voice|OFF": "APAG.",
"voice|CONNECTING": "CONECT.",
"voice|LISTENING": "ESCUCHO",
"voice|CONNECTING": "CONEX…",
"voice|LISTENING": "OYENDO",
"voice|EXECUTING": "ACCIÓN",
"voice|ERROR": "ERROR",
"MIC": "MIC",
@@ -1897,7 +1897,7 @@
"Outline traced": "Contorno trazado",
"Outline unavailable": "Contorno no disponible",
"in progress": "en curso",
"done": "listo",
"done": "hecho",
"failed": "falló",
"cancelled": "cancelado",
"view band|STREET": "CALLE",
@@ -1967,7 +1967,7 @@
"Flood footage": "Imágenes de la inundación",
"Compilation and casualty claims": "Recopilación y afirmaciones sobre víctimas",
"SOURCE GEOCONFIRMED · WORLD-PINNED": "FUENTE GEOCONFIRMADA · FIJADA EN EL MAPA",
"SOURCE CREDITED · LOCATION UNRESOLVED": "FUENTE ACREDITADA · UBICACIÓN SIN RESOLVER",
"SOURCE CREDITED · LOCATION UNRESOLVED": "AUTORÍA INDICADA · UBICACIÓN SIN DETERMINAR",
"REFERENCE ONLY · CLAIMS UNVERIFIED": "SOLO REFERENCIA · AFIRMACIONES SIN VERIFICAR",
"SOURCE GEOCONFIRMED": "FUENTE GEOCONFIRMADA",
"2021 historical reference versus 2026 post-event imagery; changes are cumulative and include the July 2025 Rasuwagadhi flood. Schematic downstream progression, not modeled arrival time; not an official hazard model.": "Referencia histórica de 2021 frente a imágenes posteriores al evento de 2026; los cambios son acumulativos e incluyen la inundación de Rasuwagadhi de julio de 2025. Avance esquemático aguas abajo, no un tiempo de llegada modelado; no es un modelo oficial de peligro.",
@@ -2025,7 +2025,7 @@
"Selected Space Mission": "Misión espacial seleccionada",
"{duration}s + {hold}s": "{duration} s + {hold} s",
"Configured Source": "Fuente configurada",
"subject": "sujeto",
"subject": "objetivo",
"{value}m": "{value} m",
"Google 3D tiles unavailable — check the key's API restrictions, quota, or network": "Teselas de Google 3D no disponibles: revisa las restricciones de API de la clave, la cuota o la red",
"Needs {envVars} — add it in Provider Settings — or a Cesium ion token for the ion-hosted route": "Necesita {envVars} — se añade en Ajustes de proveedores — o un token de Cesium ion para la ruta alojada en ion",
@@ -2041,7 +2041,7 @@
"zoom in to a street to open {name}": "acércate a una calle para abrir {name}",
"Google Street View": "Google Street View",
"GOOGLE STREET VIEW": "GOOGLE STREET VIEW",
"Google refused GOOGLE_MAPS_API_KEY for Street View — check that the Maps JavaScript API is enabled for it and this site is an allowed referrer": "Google rechazó GOOGLE_MAPS_API_KEY para Street View — comprueba que la clave tenga habilitada la API Maps JavaScript y que este sitio figure entre sus referentes HTTP permitidos",
"Google refused GOOGLE_MAPS_API_KEY for Street View — check that the Maps JavaScript API is enabled for it and this site is an allowed referrer": "Google rechazó GOOGLE_MAPS_API_KEY para Street View — comprueba que la clave tenga habilitada la API Maps JavaScript y que este sitio figure entre sus referentes HTTP (sitios web) permitidos",
"Street View did not answer — check the network, and that the Maps JavaScript API is enabled for GOOGLE_MAPS_API_KEY": "Street View no respondió — comprueba la red y que la API Maps JavaScript esté habilitada para GOOGLE_MAPS_API_KEY",
"click a street to open Street View": "haz clic en una calle para abrir Street View",
" or ": " o ",
@@ -2050,7 +2050,7 @@
"Zoom in to a street to open {names} here": "Acércate a una calle para abrir {names} aquí",
"radio tag|All": "Todas",
"Alternative": "Alternativa",
"Ambient": "Ambiental",
"Ambient": "Ambient",
"Blues": "Blues",
"Classical": "Clásica",
"Country": "Country",
@@ -2082,5 +2082,23 @@
"mapped matches within {km} km of the subject": "coincidencias mapeadas a menos de {km} km del objetivo",
"none mapped within {km} km; not a complete 250 km survey": "ninguna mapeada a menos de {km} km; no es un barrido completo de 250 km",
"mapped matches from the loaded viewport": "coincidencias mapeadas en la vista cargada",
"viewport feed is not a complete 250 km survey": "los datos de la vista no son un barrido completo de 250 km"
"viewport feed is not a complete 250 km survey": "los datos de la vista no son un barrido completo de 250 km",
"lane direction|left": "izquierdo",
"lane direction|right": "derecho",
"lane direction|slightly left": "izquierdo",
"lane direction|slightly right": "derecho",
"lane direction|sharply left": "del extremo izquierdo",
"lane direction|sharply right": "del extremo derecho",
"lane direction|straight": "central",
"{value}°N": "{value}°N",
"{value}°S": "{value}°S",
"{value}°E": "{value}°E",
"{value}°W": "{value}°W",
"fork direction|left": "a la izquierda",
"fork direction|right": "a la derecha",
"fork direction|slightly left": "ligeramente a la izquierda",
"fork direction|slightly right": "ligeramente a la derecha",
"fork direction|sharply left": "bruscamente a la izquierda",
"fork direction|sharply right": "bruscamente a la derecha",
"fork direction|straight": "recto"
}