Files
nezha-dash-v1/src/locales/gl/translation.json
T
c59c18de17 feat: add server online history tab with date-grouped chip wall (#97)
* feat(server-detail): add online history tab

Render per-server online periods from GET /api/v1/server/:id/online-history:
summary card (current status, online rate, total in window, last active),
daily online-time bars, and the raw period list. Window selector offers
1d/7d/30d and locks options beyond the server's max_days; guests hitting
the 1d cap see a login hint. i18n keys added for all locales (zh-CN/zh-TW
translated, others fall back to English for Weblate).

* fix(online-history): keep selector pills above the sliding indicator

The active-indicator overlay sits at z-10 and intercepted clicks on the
day pills; wrap pills at z-20 like the existing PeriodSelector.

* feat(online-history): render daily online as 24h timeline with hover tooltips

每日在线卡片从整日占比进度条改为 0:00–24:00 整轴时间条:
每个在线时段按当日时刻定位为高亮分段,hover 显示起止时间与时长;
进行中时段以亮色高亮。卡片顶部新增共享刻度(0:00 / 12:00 / 24:00)。

* feat(online-history): regroup periods by day as expandable chip wall

Rework the Online tab per the chip-wall design: periods are grouped by
panel-timezone day with per-day totals, defaulting to the latest day with
"Expand more" revealing up to ten more groups per click, plus an
Online/Offline switch that derives offline chips as the window complement.

- respond to the backend panel timezone (timezone/tz_offset): dayjs 1.11
  .tz(input, zone) ignores explicit offsets, so offset-bearing timestamps
  are parsed first and converted afterwards; naive date strings keep the
  zone-parse path (panelDay)
- guests falling back automatically: a rejected days>1 request locks 7d/30d
  and retries at 1d instead of surfacing only a login prompt
- fix day-selector indicator landing on the wrong pill: useActiveIndicator
  refs are stored by index, pass the map index not the day value
- disable Node experimental webstorage in vitest workers: Node >=25 ships a
  broken global localStorage that shadows the jsdom one
- 14 locales: tabSwitch.Online + serverOnlineHistory.*

* feat(online-history): boxed summary stats with desktop/mobile layouts

* fix(online-history): align offline gaps, DST coordinates and ongoing chips

- extract pure timeline/grouping helpers into src/lib/online-history.ts
- clamp offline complements to day and window boundaries, so a gap can no
  longer run into a later day's first online session
- use wall-clock coordinates and true next-midnight boundaries on DST days
- label only the segment ending at the live session end as Ongoing
- keep group totals equal to the visible chips for cross-day sessions
- keep period chips on one line and render next-midnight as 24:00
- add regression tests for multi-day offline gaps, window_start/window_end,
  spring-forward/fall-back geometry and ongoing clipping

* style(online-history): lighten summary metrics and shorten rate bar

* feat(online-history): refine UI and unify daily history rendering

---------

Co-authored-by: Sam5440 <Sam5440@users.noreply.github.com>
Co-authored-by: hamster1963 <1410514192@qq.com>
2026-10-22 12:01:21 +08:00

157 lines
3.9 KiB
JSON

{
"nezha": "Monitoreo Nezha",
"theme": {
"light": "Claro",
"dark": "Escuro",
"system": "Sistema"
},
"overview": "Visión xeral",
"dashboard": "Panel de control",
"login": "Inciar sesión",
"online": "Activo",
"offline": "Desconectado",
"whereTheTimeIs": "Onde está a hora",
"refreshing": "Recargando",
"info": {
"websocketConnecting": "Conectando o WebSocket",
"websocketConnected": "WebSocket conectado",
"websocketDisconnected": "WebSocket desconectado",
"processing": "Procesando..."
},
"serverOverview": {
"totalServers": "Servidores totais",
"onlineServers": "Servidores en liña",
"offlineServers": "Servidores desconectados",
"totalBandwidth": "Ancho de banda total",
"speed": "Velocidade",
"network": "Rede"
},
"map": {
"Distributions": "Os servidores están distribuidos en",
"Regions": "Rexións",
"Servers": "servidores"
},
"serverCard": {
"mem": "MEM",
"stg": "STG",
"days": "Dias",
"hours": "Horas",
"upload": "Subir",
"download": "Descargar",
"system": "Sistema",
"uptime": "Tempo activo",
"totalUpload": "Subir",
"totalDownload": "Descargar"
},
"cycleTransfer": {
"used": "empregado",
"total": "total",
"nextUpdate": "próxima actualización"
},
"serviceTracker": {
"noService": "Non hai información do servizo",
"uptime": "Tempo de actividade",
"delay": "Atraso",
"daysAgo": "dias atrás",
"today": "Hoxe",
"loading": "Cargando..."
},
"serverDetail": {
"status": "Estado",
"online": "Activo",
"days": "Días",
"hours": "Horas",
"offline": "Desconectado",
"unknown": "Descoñecido",
"uptime": "Tempo activo",
"version": "Versión",
"arch": "Arch",
"mem": "Mem",
"disk": "Disco",
"region": "Rexión",
"system": "Sistema",
"upload": "Subida",
"download": "Descarga",
"lastActive": "Última vez activo",
"temperature": "Temperatura",
"bootTime": "Tempo de reinicio"
},
"serverDetailChart": {
"process": "Proceso",
"disk": "Disco",
"mem": "Mem",
"swap": "Swap",
"upload": "Subida",
"download": "Descarga"
},
"footer": {
"themeBy": "Tema por "
},
"language": {
"zh-CN": "简体中文 (Chinés simplificado)",
"zh-TW": "繁體中文 (Chinés tradicional)",
"en-US": "English (Inglés)",
"de-DE": "Deutsch (Alemán)",
"es-ES": "Español",
"ru-RU": "Русский (Ruso)",
"ta-IN": "தமிழ் (Tamil)"
},
"error": {
"pageNotFound": "Páxina non atopada",
"backToHome": "Voltar áo inicio"
},
"tabSwitch": {
"Detail": "Detalle",
"Network": "Rede",
"Online": "Online"
},
"monitor": {
"noData": "Non hai datos de monitor de servidor. Engada primeiro un monitor de servizo",
"avgDelay": "Latencia",
"monitorCount": "Servizos",
"packetLoss": "Pérdida de datos",
"clearSelections": "Limpar"
},
"pwa": {
"offlineReady": "Aplicación lista para traballar desconectada (offline)",
"newContent": "Novo contido dispoñíble",
"reload": "Actualizar"
},
"billingInfo": {
"remaining": "Restante",
"error": "erro",
"indefinite": "Indefinido",
"expired": "Expirado",
"days": "días",
"price": "Precio",
"free": "Gratis",
"usage-baseed": "Baseado no uso"
},
"TypeCommand": "Escribe un comando ou procura...",
"NoResults": "Non se atoparon resultados.",
"Servers": "Servidores",
"Shortcuts": "Atallos",
"ToggleLightMode": "Cambiar ao modo claro",
"ToggleDarkMode": "Cambiar ao modo escuro",
"ToggleSystemMode": "Cambiar ao determinado polo sistema",
"Home": "Páxina principal",
"serverOnlineHistory": {
"days1": "1d",
"days7": "7d",
"days30": "30d",
"onlineRate": "Online rate",
"totalOnline": "Online in window",
"lastActive": "Last active",
"dailyOnline": "Daily online time",
"periods": "Online periods",
"ongoing": "Ongoing",
"noData": "No online records",
"loginRequired": "This window requires login; guests can switch to 1d",
"offlinePeriods": "Offline periods",
"periodsOnline": "Online",
"periodsOffline": "Offline",
"expandMore": "Expand more",
"today": "Today"
}
}