-
where the time is
+
{t("whereTheTimeIs")}
{mouted ? (
{timeString}
) : (
diff --git a/src/components/ServerCard.tsx b/src/components/ServerCard.tsx
index 5b66d8f..e10571b 100644
--- a/src/components/ServerCard.tsx
+++ b/src/components/ServerCard.tsx
@@ -5,8 +5,10 @@ import { cn, formatNezhaInfo } from "@/lib/utils";
import { NezhaAPI } from "@/types/nezha-api";
import { Card } from "./ui/card";
import { useNavigate } from "react-router-dom";
+import { useTranslation } from "react-i18next";
export default function ServerCard({ serverInfo }: { serverInfo: NezhaAPI }) {
+ const { t } = useTranslation();
const navigate = useNavigate();
const { name, country_code, online, cpu, up, down, mem, stg } =
formatNezhaInfo(serverInfo);
@@ -55,21 +57,27 @@ export default function ServerCard({ serverInfo }: { serverInfo: NezhaAPI }) {
-
{"Upload"}
+
+ {t("serverCard.upload")}
+
{up >= 1024
? `${(up / 1024).toFixed(2)}G/s`
@@ -77,7 +85,9 @@ export default function ServerCard({ serverInfo }: { serverInfo: NezhaAPI }) {
-
{"Download"}
+
+ {t("serverCard.download")}
+
{down >= 1024
? `${(down / 1024).toFixed(2)}G/s`
diff --git a/src/components/ServerDetailOverview.tsx b/src/components/ServerDetailOverview.tsx
index d4f0818..adb0edc 100644
--- a/src/components/ServerDetailOverview.tsx
+++ b/src/components/ServerDetailOverview.tsx
@@ -7,18 +7,18 @@ import { useWebSocketContext } from "@/hooks/use-websocket-context";
import { cn, formatBytes, formatNezhaInfo } from "@/lib/utils";
import { NezhaAPIResponse } from "@/types/nezha-api";
import { useNavigate, useParams } from "react-router-dom";
+import { useTranslation } from "react-i18next";
export default function ServerDetailOverview() {
+ const { t } = useTranslation();
const navigate = useNavigate();
const { id } = useParams();
const { lastMessage, readyState } = useWebSocketContext();
- // 检查连接状态
if (readyState !== 1) {
return
;
}
- // 解析消息
const nezhaWsData = lastMessage
? (JSON.parse(lastMessage.data) as NezhaAPIResponse)
: null;
@@ -48,7 +48,9 @@ export default function ServerDetailOverview() {
- {"Status"}
+
+ {t("serverDetail.status")}
+
- {online ? "Online" : "Offline"}
+ {online ? t("serverDetail.online") : t("serverDetail.offline")}
@@ -66,7 +68,9 @@ export default function ServerDetailOverview() {
- {"Uptime"}
+
+ {t("serverDetail.uptime")}
+
{" "}
{online ? (uptime / 86400).toFixed(0) : "N/A"} {"Days"}{" "}
@@ -77,23 +81,33 @@ export default function ServerDetailOverview() {
- {"Version"}
- {version || "Unknown"}
+
+ {t("serverDetail.version")}
+
+
+ {version || t("serverDetail.unknown")}{" "}
+
- {"Arch"}
- {server.host.arch || "Unknown"}
+
+ {t("serverDetail.arch")}
+
+
+ {server.host.arch || t("serverDetail.unknown")}{" "}
+
- {"Mem"}
+
+ {t("serverDetail.mem")}
+
{formatBytes(server.host.mem_total)}
@@ -103,7 +117,9 @@ export default function ServerDetailOverview() {
- {"Disk"}
+
+ {t("serverDetail.disk")}
+
{formatBytes(server.host.disk_total)}
@@ -113,10 +129,13 @@ export default function ServerDetailOverview() {
- {"Region"}
+
+ {t("serverDetail.region")}
+
- {server.host.country_code?.toUpperCase() || "Unknown"}
+ {server.host.country_code?.toUpperCase() ||
+ t("serverDetail.unknown")}
{server.host.country_code && (
- {"System"}
+
+ {t("serverDetail.system")}
+
{server.host.platform ? (
{" "}
- {server.host.platform || "Unknown"} -{" "}
+ {server.host.platform || t("serverDetail.unknown")} -{" "}
{server.host.platform_version}{" "}
) : (
- Unknown
+ {t("serverDetail.unknown")}
)}
@@ -153,7 +174,7 @@ export default function ServerDetailOverview() {
{server.host.cpu ? (
{server.host.cpu}
) : (
- Unknown
+ {t("serverDetail.unknown")}
)}
diff --git a/src/components/ServerOverview.tsx b/src/components/ServerOverview.tsx
index dce620f..35e4b53 100644
--- a/src/components/ServerOverview.tsx
+++ b/src/components/ServerOverview.tsx
@@ -1,5 +1,6 @@
import { Card, CardContent } from "@/components/ui/card";
import { cn, formatBytes } from "@/lib/utils";
+import { useTranslation } from "react-i18next";
type ServerOverviewProps = {
online: number;
@@ -16,6 +17,8 @@ export default function ServerOverview({
up,
down,
}: ServerOverviewProps) {
+ const { t } = useTranslation();
+
return (
<>
@@ -23,7 +26,7 @@ export default function ServerOverview({
- {"Total servers"}
+ {t("serverOverview.totalServers")}
@@ -42,7 +45,7 @@ export default function ServerOverview({
- {"Online servers"}
+ {t("serverOverview.onlineServers")}
@@ -63,7 +66,7 @@ export default function ServerOverview({
- {"Offline servers"}
+ {t("serverOverview.offlineServers")}
@@ -83,7 +86,7 @@ export default function ServerOverview({
- {"Total bandwidth"}
+ {t("serverOverview.totalBandwidth")}
diff --git a/src/locales/en/translation.json b/src/locales/en/translation.json
index e21e3cc..0d74718 100644
--- a/src/locales/en/translation.json
+++ b/src/locales/en/translation.json
@@ -1,5 +1,35 @@
{
+ "nezha": "Nezha Monitoring",
"overview": "Overview",
+ "whereTheTimeIs": "Where the time is",
+ "serverOverview": {
+ "totalServers": "Total Servers",
+ "onlineServers": "Online Servers",
+ "offlineServers": "Offline Servers",
+ "totalBandwidth": "Total Bandwidth"
+ },
+ "serverCard": {
+ "mem": "MEM",
+ "stg": "STG",
+ "upload": "Upload",
+ "download": "Download"
+ },
+ "serverDetail": {
+ "status": "Status",
+ "online": "Online",
+ "offline": "Offline",
+ "unknown": "Unknown",
+ "uptime": "Uptime",
+ "version": "Version",
+ "arch": "Arch",
+ "mem": "Mem",
+ "disk": "Disk",
+ "region": "Region",
+ "system": "System"
+ },
+ "footer": {
+ "themeBy": "Theme by "
+ },
"language": {
"zh-CN": "简体中文",
"zh-TW": "繁體中文",
diff --git a/src/locales/zh-CN/translation.json b/src/locales/zh-CN/translation.json
index 6f9cf3a..2d6e9e0 100644
--- a/src/locales/zh-CN/translation.json
+++ b/src/locales/zh-CN/translation.json
@@ -1,5 +1,35 @@
{
+ "nezha": "哪吒监控",
"overview": "概览",
+ "whereTheTimeIs": "当前时间",
+ "serverOverview": {
+ "totalServers": "服务器总数",
+ "onlineServers": "在线服务器",
+ "offlineServers": "离线服务器",
+ "totalBandwidth": "总流量"
+ },
+ "serverCard": {
+ "mem": "内存",
+ "stg": "存储",
+ "upload": "上传",
+ "download": "下载"
+ },
+ "serverDetail": {
+ "status": "状态",
+ "online": "在线",
+ "offline": "离线",
+ "unknown": "未知",
+ "uptime": "运行时间",
+ "version": "版本",
+ "arch": "架构",
+ "mem": "内存",
+ "disk": "磁盘",
+ "region": "区域",
+ "system": "系统"
+ },
+ "footer": {
+ "themeBy": "主题-"
+ },
"language": {
"zh-CN": "简体中文",
"zh-TW": "繁體中文",
diff --git a/src/locales/zh-TW/translation.json b/src/locales/zh-TW/translation.json
index cd21860..0d4b1f4 100644
--- a/src/locales/zh-TW/translation.json
+++ b/src/locales/zh-TW/translation.json
@@ -1,5 +1,35 @@
{
+ "nezha": "哪吒監控",
"overview": "概覽",
+ "whereTheTimeIs": "目前時間",
+ "serverOverview": {
+ "totalServers": "總服務器",
+ "onlineServers": "線上服務器",
+ "offlineServers": "離線服務器",
+ "totalBandwidth": "總帶寬"
+ },
+ "serverCard": {
+ "mem": "內存",
+ "stg": "存儲",
+ "upload": "上傳",
+ "download": "下載"
+ },
+ "serverDetail": {
+ "status": "狀態",
+ "online": "線上",
+ "offline": "離線",
+ "unknown": "未知",
+ "uptime": "運行時間",
+ "version": "版本",
+ "arch": "架構",
+ "mem": "內存",
+ "disk": "磁盤",
+ "region": "地區",
+ "system": "系統"
+ },
+ "footer": {
+ "themeBy": "主題-"
+ },
"language": {
"zh-CN": "简体中文",
"zh-TW": "繁體中文",
@@ -8,6 +38,6 @@
"theme": {
"light": "亮色",
"dark": "暗色",
- "system": "跟随系統"
+ "system": "跟隨系統"
}
}
diff --git a/src/pages/Server.tsx b/src/pages/Server.tsx
index c76bc4b..9b65e14 100644
--- a/src/pages/Server.tsx
+++ b/src/pages/Server.tsx
@@ -17,10 +17,8 @@ export default function Servers() {
});
const { lastMessage, readyState } = useWebSocketContext();
- // 添加分组状态
const [currentGroup, setCurrentGroup] = useState("All");
- // 获取所有分组名称
const groupTabs = [
"All",
...(groupData?.data?.map((item: ServerGroup) => item.group.name) || []),
@@ -32,7 +30,6 @@ export default function Servers() {
}
}, [readyState]);
- // 检查连接状态
if (readyState !== 1) {
return (
@@ -41,7 +38,6 @@ export default function Servers() {
);
}
- // 解析消息
const nezhaWsData = lastMessage
? (JSON.parse(lastMessage.data) as NezhaAPIResponse)
: null;
@@ -54,7 +50,6 @@ export default function Servers() {
);
}
- // 计算所有服务器的统计数据(用于 Overview)
const totalServers = nezhaWsData?.servers?.length || 0;
const onlineServers =
nezhaWsData?.servers?.filter((server) => formatNezhaInfo(server).online)
@@ -73,7 +68,6 @@ export default function Servers() {
0,
) || 0;
- // 根据当前选中的分组筛选服务器(用于显示列表)
const filteredServers =
nezhaWsData?.servers?.filter((server) => {
if (currentGroup === "All") return true;