diff --git a/src/components/LanguageSwitcher.tsx b/src/components/LanguageSwitcher.tsx index 4347ec7..243587e 100644 --- a/src/components/LanguageSwitcher.tsx +++ b/src/components/LanguageSwitcher.tsx @@ -22,6 +22,10 @@ export function LanguageSwitcher() { { name: t("language.zh-CN"), code: "zh-CN" }, { name: t("language.zh-TW"), code: "zh-TW" }, { name: t("language.en-US"), code: "en-US" }, + { name: t("language.ru-RU"), code: "ru-RU" }, + { name: t("language.es-ES"), code: "es-ES" }, + { name: t("language.de-DE"), code: "de-DE" }, + { name: t("language.ta-IN"), code: "ta-IN" }, ] return ( diff --git a/src/i18n.js b/src/i18n.js index 2a012a4..75dc158 100644 --- a/src/i18n.js +++ b/src/i18n.js @@ -1,7 +1,11 @@ import i18n from "i18next" import { initReactI18next } from "react-i18next" +import deTranslation from "./locales/de/translation.json" import enTranslation from "./locales/en/translation.json" +import esTranslation from "./locales/es/translation.json" +import ruTranslation from "./locales/ru/translation.json" +import taTranslation from "./locales/ta/translation.json" import zhCNTranslation from "./locales/zh-CN/translation.json" import zhTWTranslation from "./locales/zh-TW/translation.json" @@ -15,6 +19,18 @@ const resources = { "zh-TW": { translation: zhTWTranslation, }, + "de-DE": { + translation: deTranslation, + }, + "es-ES": { + translation: esTranslation, + }, + "ru-RU": { + translation: ruTranslation, + }, + "ta-IN": { + translation: taTranslation, + }, } const getStoredLanguage = () => { diff --git a/src/lib/utils.ts b/src/lib/utils.ts index 7618c95..0566325 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -16,7 +16,7 @@ export function formatNezhaInfo(now: number, serverInfo: NezhaServer) { process: serverInfo.state.process_count || 0, up: serverInfo.state.net_out_speed / 1024 / 1024 || 0, down: serverInfo.state.net_in_speed / 1024 / 1024 || 0, - last_active_time_string: lastActiveTime ? new Date(lastActiveTime).toLocaleString() : "", + last_active_time_string: lastActiveTime ? dayjs(lastActiveTime).format("YYYY-MM-DD HH:mm:ss") : "", online: now - lastActiveTime <= 30000, uptime: serverInfo.state.uptime || 0, version: serverInfo.host.version || null, diff --git a/src/locales/en/translation.json b/src/locales/en/translation.json index 6c06d71..c919359 100644 --- a/src/locales/en/translation.json +++ b/src/locales/en/translation.json @@ -85,7 +85,11 @@ "language": { "zh-CN": "简体中文", "zh-TW": "繁體中文", - "en-US": "English" + "en-US": "English", + "de-DE": "Deutsch", + "es-ES": "Español", + "ru-RU": "Русский", + "ta-IN": "தமிழ்" }, "theme": { "light": "Light", diff --git a/src/locales/es/translation.json b/src/locales/es/translation.json index 0967ef4..c8fccb3 100644 --- a/src/locales/es/translation.json +++ b/src/locales/es/translation.json @@ -1 +1,131 @@ -{} +{ + "serviceTracker": { + "delay": "Latencia", + "noService": "No hay datos de servicio", + "uptime": "Tiempo de actividad", + "daysAgo": "días atrás", + "today": "Hoy", + "loading": "Cargando..." + }, + "serverDetail": { + "disk": "Disco", + "region": "Región", + "system": "Sistema Operativo", + "lastActive": "Última vez activo", + "temperature": "Temperatura", + "bootTime": "Inicio del sistema", + "arch": "Arch", + "status": "Estado", + "online": "En línea", + "version": "Versión", + "offline": "Fuera de línea", + "unknown": "Desconocido", + "days": "Días", + "hours": "Horas", + "download": "Bajada", + "uptime": "Tiempo de actividad", + "mem": "Memoria", + "upload": "Subida" + }, + "serverDetailChart": { + "process": "Procesos", + "disk": "Disco", + "mem": "Memoria", + "swap": "Swap", + "upload": "Subida", + "download": "Bajada" + }, + "language": { + "en-US": "Inglés", + "zh-TW": "Chino Tradicional", + "zh-CN": "Chino simplificado" + }, + "TypeCommand": "Escriba un comando o busca...", + "Shortcuts": "Atajos", + "Home": "Inicio", + "login": "Iniciar sesión", + "online": "En línea", + "offline": "Fuerda de línea", + "whereTheTimeIs": "Hora actual", + "serverOverview": { + "totalBandwidth": "Ancho de banda total", + "speed": "Velocidad", + "network": "Red", + "onlineServers": "Servidores en línea", + "totalServers": "Total de Servidores", + "offlineServers": "Servidores fuera de línea" + }, + "map": { + "Regions": "Regiones", + "Servers": "Servidores", + "Distributions": "Servidores distribuidos en" + }, + "overview": "Descripción general", + "dashboard": "Panel", + "nezha": "Monitoreo Nezha", + "serverCard": { + "mem": "Ram", + "days": "Días", + "hours": "Horas", + "upload": "Subida", + "download": "Bajada", + "system": "Sistema operativo", + "uptime": "Tiempo de actividad", + "totalUpload": "Subida", + "totalDownload": "Bajada", + "stg": "Almacenamiento" + }, + "cycleTransfer": { + "used": "Usado", + "total": "total", + "nextUpdate": "próxima actualización" + }, + "tabSwitch": { + "Detail": "Detalle", + "Network": "Red" + }, + "monitor": { + "avgDelay": "Latencia", + "noData": "No hay datos de servidores, primero agregue un monitor de servicio", + "monitorCount": "Servicios" + }, + "error": { + "pageNotFound": "Página no encontrada", + "backToHome": "Volver al Inicio" + }, + "theme": { + "system": "Sistema", + "dark": "Oscuro", + "light": "Claro" + }, + "billingInfo": { + "remaining": "Restante", + "error": "error", + "days": "días", + "price": "Precio", + "free": "Gratis", + "indefinite": "Indedinido", + "expired": "Expirado", + "usage-baseed": "Basado en el uso" + }, + "pwa": { + "offlineReady": "Aplicacion lista para trabajar fuera de línea", + "newContent": "Nuevo contenido disponible", + "reload": "Actualizar" + }, + "info": { + "websocketConnecting": "Conexión WebSocket", + "websocketDisconnected": "WebSocket desconectado", + "websocketConnected": "WebSocket conectado", + "processing": "Procesando..." + }, + "NoResults": "No se encontraron resultados.", + "refreshing": "Actualizando", + "Servers": "Servidores", + "ToggleLightMode": "Activar el modo claro", + "ToggleDarkMode": "Activar el modo oscuro", + "ToggleSystemMode": "Activar modo del sistema", + "footer": { + "themeBy": "Tema por. " + } +} diff --git a/src/locales/ru/translation.json b/src/locales/ru/translation.json new file mode 100644 index 0000000..88bb75f --- /dev/null +++ b/src/locales/ru/translation.json @@ -0,0 +1,135 @@ +{ + "map": { + "Servers": "сервера", + "Distributions": "Серверы распределены в", + "Regions": "Регионы" + }, + "serverDetailChart": { + "disk": "Диск", + "download": "Скачивание", + "swap": "Swap", + "upload": "Загрузка", + "mem": "Mem", + "process": "Процесс" + }, + "serverCard": { + "system": "Система", + "hours": "Часов", + "uptime": "Аптайм", + "download": "Скачивание", + "mem": "MEM", + "stg": "STG", + "upload": "Загрузка", + "totalUpload": "Загружено", + "totalDownload": "Скачано", + "days": "Дней" + }, + "tabSwitch": { + "Detail": "Детали", + "Network": "Сеть" + }, + "whereTheTimeIs": "Где время", + "theme": { + "dark": "Темная тема", + "light": "Светлая тема", + "system": "Как в Системе" + }, + "login": "Логин", + "language": { + "zh-TW": "Традиционный китайский", + "zh-CN": "Упрощенный китайский", + "en-US": "Английский", + "de-DE": "Немецкий", + "ta-IN": "Тамильский", + "ru-RU": "Русский", + "es-ES": "Испанский" + }, + "overview": "Обзор", + "info": { + "websocketConnecting": "WebSocket подключение", + "websocketConnected": "WebSocket подключен", + "websocketDisconnected": "WebSocket отключен", + "processing": "Обработка..." + }, + "cycleTransfer": { + "nextUpdate": "следующее обновление", + "used": "использовано", + "total": "всего" + }, + "dashboard": "Панель", + "online": "Онлайн", + "refreshing": "Обновление", + "serverOverview": { + "totalServers": "Всего Серверов", + "totalBandwidth": "Общая пропускная способность", + "network": "Сеть", + "speed": "Скорость", + "onlineServers": "Серверы в сети", + "offlineServers": "Серверы не в сети" + }, + "serviceTracker": { + "noService": "Нет данных о сервисе", + "delay": "Задержка", + "daysAgo": "Дней назад", + "today": "Сегодня", + "uptime": "Аптайм", + "loading": "Загрузка..." + }, + "serverDetail": { + "status": "Статус", + "days": "Дней", + "hours": "Часов", + "offline": "Оффлайн", + "uptime": "Аптайм", + "arch": "Arch", + "mem": "Mem", + "disk": "Диск", + "system": "Система", + "lastActive": "Время последней активности", + "download": "Скачивание", + "unknown": "Неизвестно", + "version": "Версия", + "online": "В сети", + "region": "Регион", + "bootTime": "Время загрузки", + "upload": "Загрузка", + "temperature": "Температура" + }, + "monitor": { + "noData": "Нет данных мониторинга сервера, пожалуйста, сначала добавьте монитор службы", + "avgDelay": "Задержка", + "monitorCount": "Сервисы" + }, + "pwa": { + "newContent": "Доступен новый контент", + "reload": "Обновить", + "offlineReady": "Приложение готово работать в офлайн-режиме" + }, + "billingInfo": { + "remaining": "Осталось", + "error": "ошибка", + "indefinite": "Неопределено", + "expired": "Истекло", + "price": "Цена", + "free": "Бесплатно", + "days": "дней", + "usage-baseed": "Оплата по использованию" + }, + "TypeCommand": "Введите команду или выполните поиск...", + "Servers": "Серверы", + "ToggleLightMode": "Переключить на светлую тему", + "Home": "Главная", + "offline": "Оффлайн", + "error": { + "pageNotFound": "Страница не найдена", + "backToHome": "Вернуться на главную" + }, + "ToggleDarkMode": "Переключить на темную тему", + "Shortcuts": "Горячие клавиши", + "ToggleSystemMode": "Использовать системную тему", + "footer": { + "themeBy": "Тема от " + }, + "NoResults": "Ничего не найдено.", + "nezha": "Nezha Monitoring" +}