8 Commits
main ... v1.1.0

Author SHA1 Message Date
headlessdev
1d02f5f237 Add m_cpu, m_gpu, m_ram, m_disk, and m_temp boolean fields to AddRequest and EditRequest interfaces 2025-05-01 19:29:33 +02:00
headlessdev
a2b9d92dd4 Bump version 2025-05-01 19:08:32 +02:00
headlessdev
109463f242 Migrations 2025-05-01 17:00:02 +02:00
headlessdev
2b9b7a5960 Add boolean fields for CPU, RAM, Disk, GPU, and Temperature in server model 2025-05-01 15:59:59 +02:00
headlessdev
9f3f1b56e2 Merge pull request #71 from maxi3390/add-spanish-language
Add spanish language
2025-05-01 12:17:30 +02:00
David Maximiliaon Sosa
b5d6b42100 Add spanish to docs 2025-04-30 22:07:22 -03:00
David Maximiliaon Sosa
275d332d23 Adding spanish to settings 2025-04-30 22:05:55 -03:00
David Maximiliaon Sosa
022465b383 [i18n] Feat: Adding spanish language 2025-04-30 19:41:46 -03:00
9 changed files with 491 additions and 22 deletions

View File

@@ -15,13 +15,17 @@ interface AddRequest {
disk: string;
monitoring: boolean;
monitoringURL: string;
m_cpu: boolean;
m_gpu: boolean;
m_ram: boolean;
m_disk: boolean;
m_temp: boolean;
}
export async function POST(request: NextRequest) {
try {
const body: AddRequest = await request.json();
const { host, hostServer, name, icon, os, ip, url, cpu, gpu, ram, disk, monitoring, monitoringURL } = body;
const { host, hostServer, name, icon, os, ip, url, cpu, gpu, ram, disk, monitoring, monitoringURL, m_cpu, m_gpu, m_ram, m_disk, m_temp } = body;
const server = await prisma.server.create({
data: {
@@ -37,7 +41,12 @@ export async function POST(request: NextRequest) {
ram,
disk,
monitoring,
monitoringURL
monitoringURL,
m_cpu,
m_gpu,
m_ram,
m_disk,
m_temp
}
});

View File

@@ -16,12 +16,17 @@ interface EditRequest {
disk: string;
monitoring: boolean;
monitoringURL: string;
m_cpu: boolean;
m_gpu: boolean;
m_ram: boolean;
m_disk: boolean;
m_temp: boolean;
}
export async function PUT(request: NextRequest) {
try {
const body: EditRequest = await request.json();
const { host, hostServer, id, name, icon, os, ip, url, cpu, gpu, ram, disk, monitoring, monitoringURL } = body;
const { host, hostServer, id, name, icon, os, ip, url, cpu, gpu, ram, disk, monitoring, monitoringURL, m_cpu, m_gpu, m_ram, m_disk, m_temp } = body;
const existingServer = await prisma.server.findUnique({ where: { id } });
if (!existingServer) {
@@ -50,7 +55,12 @@ export async function PUT(request: NextRequest) {
ram,
disk,
monitoring,
monitoringURL
monitoringURL,
m_cpu,
m_gpu,
m_ram,
m_disk,
m_temp
}
});

View File

@@ -275,19 +275,33 @@ export default function Settings() {
useEffect(() => {
const language = Cookies.get("language")
if (language === "en") {
setLanguage("english")
} else if (language === "de") {
setLanguage("german")
switch (language) {
case "de":
setLanguage("german")
break;
case "es":
setLanguage("spanish")
break;
case "en":
default:
setLanguage("english")
break;
}
}, [])
const setLanguageFunc = (value: string) => {
setLanguage(value)
if (value === "english") {
Cookies.set("language", "en")
} else if (value === "german") {
Cookies.set("language", "de")
switch (value) {
case "german":
Cookies.set("language", "de")
break;
case "spanish":
Cookies.set("language", "es")
break;
case "english":
default:
Cookies.set("language", "en")
break;
}
// Reload the page
window.location.reload()
@@ -468,6 +482,7 @@ export default function Settings() {
<SelectContent>
<SelectItem value="english">{t('Settings.LanguageSettings.English')}</SelectItem>
<SelectItem value="german">{t('Settings.LanguageSettings.German')}</SelectItem>
<SelectItem value="spanish">{t('Settings.LanguageSettings.Spanish')}</SelectItem>
</SelectContent>
</Select>
</div>
@@ -653,8 +668,8 @@ export default function Settings() {
type="text"
onChange={(e) => setNtfyToken(e.target.value)}
/>
</div>
</div>
</div>
</div>
</div>
)}
@@ -699,7 +714,7 @@ export default function Settings() {
<span className="text-xs text-muted-foreground">{t('Settings.Notifications.AddNotification.Echobell.AddMessage')}</span>
</div>
)}
</Select>
</div>
</AlertDialogDescription>
@@ -810,7 +825,7 @@ export default function Settings() {
)}
<div className="space-y-1">
<h3 className="font-medium capitalize">
{notification.name ||
{notification.name ||
t(`Settings.Notifications.AddNotification.${notification.type.charAt(0).toUpperCase() + notification.type.slice(1)}.Title`)}
</h3>
<p className="text-xs text-muted-foreground">

File diff suppressed because one or more lines are too long

View File

@@ -14,7 +14,7 @@ With the theme settings you have the choice between light and dark mode. There i
## Language Settings
![Language Setting](../assets/screenshots/settings_language.png)
To promote internationalization (also often known as i18n), you can select the language in which you want everything to be displayed within CoreControl. Currently there is the standard language “English” and the language German.
To promote internationalization (also often known as i18n), you can select the language in which you want everything to be displayed within CoreControl. Currently there is the standard language “English”, German and Spanish.
## Notification Settings
![Notification Settings](../assets/screenshots/settings_notifications.png)

424
i18n/languages/es.json Normal file
View File

@@ -0,0 +1,424 @@
{
"Common": {
"ChangeView": "Cambiar Vista",
"ListView": "Vista de Lista",
"GridView": "Vista de Cuadrícula",
"optional": "opcional",
"cancel": "Cancelar",
"add": "Añadir",
"since": "desde {date}",
"notSet": "No establecido",
"noData": "Sin datos",
"Loading": "Cargando...",
"Refresh": "Refrescar",
"Save": "Guardar",
"Server": {
"CPU": "CPU",
"GPU": "GPU",
"RAM": "RAM",
"Disk": "Disco",
"OS": "SO",
"IP": "IP",
"Host": "Host",
"Temperature": "Temperatura",
"Usage": "Uso",
"Tabs": {
"General": "General",
"Hardware": "Hardware",
"Host": "Host",
"Monitoring": "Monitoreo"
}
},
"ItemsPerPage": {
"items": "elementos",
"item": "elemento",
"4": "4 elementos",
"5": "5 elementos",
"6": "6 elementos",
"10": "10 elementos",
"15": "15 elementos",
"20": "20 elementos",
"25": "25 elementos",
"Custom": "Personalizado (1-100)"
}
},
"Server": {
"Hardware": "Hardware",
"Network": "Red",
"CurrentUsage": "Uso Actual",
"UsageHistory": "Historial de Uso",
"ResourceUsageHistory": "Historial de Uso de Recursos",
"TimeRange": {
"Select": "Seleccionar rango de tiempo",
"LastHour": "Última Hora",
"Last24Hours": "Últimas 24 Horas",
"Last7Days": "Últimos 7 Días",
"Last30Days": "Últimos 30 Días"
},
"VirtualMachines": "Máquinas Virtuales",
"VirtualMachinesDescription": "Máquinas virtuales alojadas en este servidor",
"HardwareInformation": "Información del Hardware",
"ManagementURL": "URL de Administración",
"VM": "VM",
"Physical": "Físico",
"HostedOn": "Alojado en",
"NotFound": "Servidor no encontrado",
"NotFoundDescription": "El servidor que estás buscando no se pudo encontrar."
},
"Sidebar": {
"Main Navigation": "Navegación Principal",
"Dashboard": "Panel de Control",
"My Infrastructure": "Mi Infraestructura",
"Servers": "Servidores",
"Applications": "Aplicaciones",
"Uptime": "Uptime",
"Network": "Red",
"Settings": "Ajustes",
"Logout": "Cerrar Sesión"
},
"Home": {
"TitleUnder": "Panel de control para gestionar toda tu infraestructura de servidores",
"LoginCardTitle": "Iniciar Sesión",
"LoginCardDescription": "Introduce tus credenciales para continuar",
"AuthenticationError": "Error de Autenticación",
"Email": "Correo Electrónico",
"Password": "Contraseña",
"SigninButton": "Iniciar Sesión",
"SigninButtonSigningIn": "Iniciando sesión..."
},
"Dashboard": {
"Title": "Panel de Control",
"Servers": {
"Title": "Servidores",
"Description": "Descripción general de servidores físicos y virtuales",
"PhysicalServers": "Servidores Físicos",
"VirtualServers": "Servidores Virtuales",
"ManageServers": "Gestionar Servidores"
},
"Applications": {
"Title": "Aplicaciones",
"Description": "Gestiona tus aplicaciones desplegadas",
"OnlineApplications": "Aplicaciones En Línea",
"ViewAllApplications": "Ver todas las aplicaciones"
},
"Uptime": {
"Title": "Uptime",
"Description": "Monitoriza la disponibilidad de tus servicios",
"OnlineApplications": "Aplicaciones En Línea",
"ViewUptimeMetrics": "Ver métricas de uptime"
},
"Network": {
"Title": "Red",
"Description": "Gestionar la configuración de red",
"ActiveConnections": "Conexiones Activas",
"ViewNetworkDetails": "Ver detalles de la red"
}
},
"Servers": {
"Title": "Servidores",
"MyInfrastructure": "Mi Infraestructura",
"YourServers": "Tus Servidores",
"AddServer": {
"Title": "Añadir un servidor",
"General": {
"Title": "Añadir un servidor",
"CopyServer": "Copiar servidor",
"Icon": "Icono",
"IconPlaceholder": "Seleccionar un icono",
"IconSearchPlaceholder": "Buscar iconos...",
"Preview": "Previsualizar",
"Name": "Nombre",
"OperatingSystem": "Sistema Operativo",
"OperatingSystemPlaceholder": "Seleccionar SO",
"IPAdress": "Dirección IP",
"ManagementURL": "URL de Administración",
"ManagementURLTooltip": "Enlace a una interfaz web (ej. Proxmox o Portainer) con la que se puede administrar el servidor"
},
"Host": {
"MarkAsHostServer": "Marcar como servidor anfitrión",
"SelectHostServer": "Seleccionar un servidor anfitrión",
"SelectHostServerPlaceholder": "Seleccionar un servidor anfitrión",
"NoHostServer": "Sin servidor anfitrión"
},
"Monitoring": {
"Enable": "Activar la monitorización",
"URL": "URL de Monitorización",
"SetupTitle": "Configuración Requerida del Servidor",
"SetupDescription": "Para habilitar la monitorización, necesitas instalar Glances en tu servidor. Aquí tienes un ejemplo de configuración de Docker Compose:"
}
},
"ServerCard": {
"HardwareInformation": "Información del Hardware",
"ViewDetails": "Ver Detalles",
"OpenManagementURL": "Abrir URL de Administración",
"EditServer": "Editar Servidor",
"DeleteServer": "Eliminar Servidor",
"HostedVMs": "VMs Alojadas",
"ResourceUsage": "Uso de Recursos",
"DeleteConfirmation": {
"Title": "Eliminar {name}",
"Description": "¿Estás seguro de que quieres eliminar este servidor? Esta acción no se puede deshacer.",
"Cancel": "Cancelar",
"Delete": "Eliminar"
}
},
"EditServer": {
"Title": "Editar {name}",
"Save": "Guardar",
"General": {
"Title": "General",
"Icon": "Icono",
"Name": "Nombre",
"OperatingSystem": "Sistema Operativo",
"IPAddress": "Dirección IP",
"ManagementURL": "URL de Administración"
},
"Hardware": {
"Title": "Hardware",
"CPU": "CPU",
"GPU": "GPU",
"RAM": "RAM",
"Disk": "Disco"
},
"Host": {
"Title": "Anfitrión",
"MarkAsHostServer": "Marcar como servidor anfitrión",
"CannotDisableHost": "No se puede desactivar mientras aloja VMs",
"SelectHostServer": "Seleccionar un servidor anfitrión"
},
"Monitoring": {
"Title": "Monitoreo",
"Enable": "Activar el monitoreo",
"URL": "URL de Monitoreo",
"SetupTitle": "Configuración Requerida del Servidor",
"SetupDescription": "Para habilitar el monitoreo, necesitas instalar Glances en tu servidor. Aquí tienes un ejemplo de configuración de Docker Compose:"
}
},
"Pagination": {
"Showing": "Mostrando {start}-{end} de {total} servidores",
"NoServers": "No se encontraron servidores"
},
"Search": {
"Placeholder": "Escribe para buscar..."
}
},
"Applications": {
"Title": "Tus Aplicaciones",
"Breadcrumb": {
"MyInfrastructure": "Mi Infraestructura",
"Applications": "Aplicaciones"
},
"Views": {
"ChangeView": "Cambiar vista",
"ListView": "Vista de Lista",
"GridView": "Vista de Cuadrícula",
"CompactView": "Vista Compacta"
},
"Add": {
"Title": "Añadir una aplicación",
"Name": "Nombre",
"NamePlaceholder": "ej. Portainer",
"Server": "Servidor",
"SelectServer": "Seleccionar servidor",
"Description": "Descripción",
"DescriptionPlaceholder": "Descripción de la aplicación",
"IconURL": "URL del Icono",
"IconURLPlaceholder": "https://example.com/icon.png",
"PublicURL": "URL Pública",
"PublicURLPlaceholder": "https://example.com",
"LocalURL": "URL Local",
"LocalURLPlaceholder": "http://localhost:3000",
"CustomUptimeCheck": "URL Personalizada de Comprobación de Actividad",
"CustomUptimeCheckTooltip": "Cuando está activado, esta URL reemplaza la URL Pública para las comprobaciones de monitoreo de actividad",
"UptimeCheckURL": "URL de Comprobación de Actividad",
"UptimeCheckURLPlaceholder": "https://example.com/status"
},
"Edit": {
"Title": "Editar Aplicación",
"SaveButton": "Guardar Cambios"
},
"Card": {
"Server": "Servidor",
"NoServer": "Sin servidor",
"PublicURL": "URL Pública",
"LocalURL": "URL Local",
"Icon": "Icono",
"Image": "Imagen"
},
"Messages": {
"AddServerFirst": "Primero debes añadir un servidor.",
"AddSuccess": "Aplicación añadida correctamente",
"EditSuccess": "Aplicación editada correctamente",
"DeleteSuccess": "Aplicación eliminada correctamente",
"GetError": "Error al obtener las aplicaciones",
"EditError": "Error al editar la aplicación",
"DeleteError": "Error al eliminar la aplicación",
"NumberValidation": "Por favor, introduce un número entre 1 y 100"
},
"Pagination": {
"Showing": "Mostrando {start}-{end} de {total} aplicaciones",
"NoApplications": "No se encontraron aplicaciones"
},
"Search": {
"Placeholder": "Escribe para buscar..."
}
},
"Uptime": {
"Title": "Tiempo de Actividad",
"Breadcrumb": {
"MyInfrastructure": "Mi Infraestructura",
"Uptime": "Tiempo de Actividad"
},
"TimeRange": {
"Select": "Seleccionar periodo de tiempo",
"LastHour": "Última 1 hora",
"LastDay": "Último 1 día",
"Last7Days": "Últimos 7 días",
"Last30Days": "Últimos 30 días"
},
"Status": {
"Online": "En Línea",
"Offline": "Fuera de Línea",
"NoData": "Sin datos"
},
"Messages": {
"NumberValidation": "Por favor, introduce un número entre 1 y 100",
"NoItems": "No se encontraron elementos",
"Loading": "Cargando..."
},
"Pagination": {
"Showing": "Mostrando {start}-{end} de {total} elementos"
}
},
"Network": {
"Title": "Red",
"Breadcrumb": {
"MyInfrastructure": "Mi Infraestructura",
"Network": "Red"
}
},
"Settings": {
"Title": "Ajustes",
"Breadcrumb": {
"Dashboard": "Panel de Control",
"Settings": "Ajustes"
},
"UserSettings": {
"Title": "Ajustes de Usuario",
"Description": "Gestiona aquí tus ajustes de usuario. Puedes cambiar tu correo electrónico, contraseña y otros ajustes de cuenta.",
"ChangeEmail": {
"Title": "Cambiar Correo Electrónico",
"Placeholder": "Introduce nuevo correo electrónico",
"Button": "Cambiar Correo Electrónico",
"Success": "Correo electrónico cambiado correctamente.",
"Error": "Error"
},
"ChangePassword": {
"Title": "Cambiar Contraseña",
"OldPassword": "Introduce la contraseña antigua",
"NewPassword": "Introduce la nueva contraseña",
"ConfirmPassword": "Confirma la nueva contraseña",
"Button": "Cambiar Contraseña",
"Success": "Contraseña cambiada correctamente.",
"Error": "Error",
"PasswordsDontMatch": "Las contraseñas no coinciden",
"AllFieldsRequired": "Todos los campos son obligatorios"
}
},
"ThemeSettings": {
"Title": "Ajustes del Tema",
"Description": "Selecciona un tema para la aplicación. Puedes elegir entre tema claro, oscuro o del sistema.",
"Light": "Claro",
"Dark": "Oscuro",
"System": "Sistema"
},
"LanguageSettings": {
"Title": "Ajustes de Idioma",
"Description": "Selecciona un idioma para la aplicación.",
"English": "Inglés",
"German": "Alemán"
},
"Notifications": {
"Title": "Notificaciones",
"Description": "Configura las notificaciones para recibir alertas instantáneas cuando una aplicación cambie de estado.",
"AddChannel": "Añadir Canal de Notificación",
"NoNotifications": "No hay notificaciones configuradas",
"NoNotificationsDescription": "Añade un canal de notificación para recibir alertas cuando tus aplicaciones cambien de estado.",
"AddNotification": {
"Title": "Añadir Notificación",
"Name": "Nombre de la Notificación (opcional)",
"Type": "Tipo de Notificación",
"SMTP": {
"Title": "SMTP",
"Description": "Enviar notificaciones vía SMTP",
"Host": "Servidor SMTP",
"Port": "Puerto SMTP",
"Secure": "Conexión Segura (TLS/SSL)",
"Username": "Nombre de Usuario SMTP",
"Password": "Contraseña SMTP",
"From": "Dirección de Remitente",
"To": "Dirección de Destinatario"
},
"Telegram": {
"Title": "Telegram",
"Description": "Enviar notificaciones vía Telegram",
"Token": "Token del Bot",
"ChatId": "ID del Chat"
},
"Discord": {
"Title": "Discord",
"Description": "Enviar notificaciones vía Discord",
"Webhook": "URL del Webhook"
},
"Gotify": {
"Title": "Gotify",
"Description": "Enviar notificaciones vía Gotify",
"Url": "URL de Gotify",
"Token": "Token de Gotify"
},
"Ntfy": {
"Title": "Ntfy",
"Description": "Enviar notificaciones vía Ntfy",
"Url": "URL de Ntfy",
"Token": "Token de Ntfy"
},
"Pushover": {
"Title": "Pushover",
"Description": "Enviar notificaciones vía Pushover",
"Url": "URL de Pushover",
"Token": "Token de Pushover",
"User": "Usuario de Pushover"
},
"Echobell": {
"Title": "Echobell",
"Description": "Enviar notificaciones vía Echobell",
"Url": "URL de Echobell",
"AddMessage": "Añade en Echobell el campo \"message\"."
}
},
"CustomizeText": {
"Display": "Personalizar Texto de Notificación",
"Title": "Personalizar Texto de Notificación",
"Application": "Texto de Notificación para Aplicaciones",
"Server": "Texto de Notificación para Servidores",
"Placeholders": {
"Title": "Puedes usar los siguientes marcadores de posición en el texto:",
"Server": {
"Title": "Relacionado con el servidor:",
"Name": "!name - El nombre del servidor",
"Status": "!status - El estado actual del servidor (en línea/fuera de línea)"
},
"Application": {
"Title": "Relacionado con la aplicación:",
"Name": "!name - El nombre de la aplicación",
"Url": "!url - La URL donde está alojada la aplicación",
"Status": "!status - El estado actual de la aplicación (en línea/fuera de línea)"
}
}
},
"ActiveChannels": "Canales de Notificación Activos",
"Test": "Probar",
"Delete": "Eliminar"
}
}
}

View File

@@ -1,6 +1,6 @@
{
"name": "corecontrol",
"version": "1.0.1",
"version": "1.1.0",
"private": true,
"scripts": {
"dev": "next dev --turbopack",

View File

@@ -0,0 +1,6 @@
-- AlterTable
ALTER TABLE "server" ADD COLUMN "m_cpu" BOOLEAN NOT NULL DEFAULT true,
ADD COLUMN "m_disk" BOOLEAN NOT NULL DEFAULT true,
ADD COLUMN "m_gpu" BOOLEAN NOT NULL DEFAULT true,
ADD COLUMN "m_ram" BOOLEAN NOT NULL DEFAULT true,
ADD COLUMN "m_temp" BOOLEAN NOT NULL DEFAULT true;

View File

@@ -68,6 +68,11 @@ model server {
uptime String?
gpuUsage String?
temp String?
m_cpu Boolean @default(true)
m_ram Boolean @default(true)
m_disk Boolean @default(true)
m_gpu Boolean @default(true)
m_temp Boolean @default(true)
}
model settings {