From cf5c39cfe5ea14a4182ae3d54fa10cf9963a22d6 Mon Sep 17 00:00:00 2001 From: "web@ppanel" Date: Tue, 25 Mar 2025 23:55:31 +0700 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(api):=20Add=20an=20interface?= =?UTF-8?q?=20to=20obtain=20user=20subscription=20details,=20update=20rela?= =?UTF-8?q?ted=20type=20definitions=20and=20localized=20text?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 9 +- .../app/dashboard/server/node-status.tsx | 83 +++++++------ apps/admin/app/dashboard/user/user-detail.tsx | 110 +++++++++++++++++- .../admin/components/dashboard/statistics.tsx | 29 +++-- apps/admin/locales/cs-CZ/user.json | 16 ++- apps/admin/locales/de-DE/user.json | 16 ++- apps/admin/locales/en-US/user.json | 16 ++- apps/admin/locales/es-ES/user.json | 16 ++- apps/admin/locales/es-MX/user.json | 16 ++- apps/admin/locales/fa-IR/user.json | 16 ++- apps/admin/locales/fi-FI/user.json | 16 ++- apps/admin/locales/fr-FR/user.json | 16 ++- apps/admin/locales/hi-IN/user.json | 16 ++- apps/admin/locales/hu-HU/user.json | 16 ++- apps/admin/locales/ja-JP/user.json | 16 ++- apps/admin/locales/ko-KR/user.json | 16 ++- apps/admin/locales/no-NO/user.json | 16 ++- apps/admin/locales/pl-PL/user.json | 16 ++- apps/admin/locales/pt-BR/user.json | 16 ++- apps/admin/locales/ro-RO/user.json | 16 ++- apps/admin/locales/ru-RU/user.json | 16 ++- apps/admin/locales/th-TH/user.json | 16 ++- apps/admin/locales/tr-TR/user.json | 16 ++- apps/admin/locales/uk-UA/user.json | 16 ++- apps/admin/locales/vi-VN/user.json | 16 ++- apps/admin/locales/zh-CN/user.json | 16 ++- apps/admin/locales/zh-HK/user.json | 16 ++- apps/admin/services/admin/typings.d.ts | 46 ++++++-- apps/admin/services/admin/user.ts | 18 +++ apps/admin/services/common/typings.d.ts | 23 ++-- .../user/app/(main)/(user)/subscribe/page.tsx | 2 +- .../main/product-showcase/content.tsx | 2 +- apps/user/services/common/typings.d.ts | 23 ++-- apps/user/services/user/typings.d.ts | 16 +-- 34 files changed, 606 insertions(+), 123 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d749692..4638b99 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,20 +1,19 @@ + # Changelog # [1.0.0-beta.33](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.32...v1.0.0-beta.33) (2025-03-18) - ### 🐛 Bug Fixes -* **subscribe**: Handle optional values in price and discount calculations ([5939763](https://github.com/perfect-panel/ppanel-web/commit/5939763)) +- **subscribe**: Handle optional values in price and discount calculations ([5939763](https://github.com/perfect-panel/ppanel-web/commit/5939763)) # [1.0.0-beta.32](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.31...v1.0.0-beta.32) (2025-03-17) - ### 🐛 Bug Fixes -* **forms**: Add step attribute to number inputs for better value control ([b8f4f1e](https://github.com/perfect-panel/ppanel-web/commit/b8f4f1e)) -* **locales**: Update invite code text to indicate it's optional ([6a34bfb](https://github.com/perfect-panel/ppanel-web/commit/6a34bfb)) +- **forms**: Add step attribute to number inputs for better value control ([b8f4f1e](https://github.com/perfect-panel/ppanel-web/commit/b8f4f1e)) +- **locales**: Update invite code text to indicate it's optional ([6a34bfb](https://github.com/perfect-panel/ppanel-web/commit/6a34bfb)) diff --git a/apps/admin/app/dashboard/server/node-status.tsx b/apps/admin/app/dashboard/server/node-status.tsx index 0b25664..d694fd0 100644 --- a/apps/admin/app/dashboard/server/node-status.tsx +++ b/apps/admin/app/dashboard/server/node-status.tsx @@ -1,5 +1,11 @@ 'use client'; +import { + Accordion, + AccordionContent, + AccordionItem, + AccordionTrigger, +} from '@workspace/ui/components/accordion'; import { Badge } from '@workspace/ui/components/badge'; import { Progress } from '@workspace/ui/components/progress'; import { ScrollArea } from '@workspace/ui/components/scroll-area'; @@ -11,6 +17,8 @@ import { } from '@workspace/ui/components/tooltip'; import { formatDate } from '@workspace/ui/utils'; import { useTranslations } from 'next-intl'; +import { useState } from 'react'; +import { UserSubscribeDetail } from '../user/user-detail'; export function formatPercentage(value: number): string { return `${value.toFixed(1)}%`; @@ -18,25 +26,19 @@ export function formatPercentage(value: number): string { export function NodeStatusCell({ status }: { status: API.NodeStatus }) { const t = useTranslations('server.node'); + const [openItem, setOpenItem] = useState(null); - const { - last_at, - online_users, - status: serverStatus, - } = status || { - online_users: [], - status: { - cpu: 0, - mem: 0, - disk: 0, - updated_at: 0, - }, - last_at: 0, + const { online, cpu, mem, disk, updated_at } = status || { + online: {}, + cpu: 0, + mem: 0, + disk: 0, + updated_at: 0, }; - const isOnline = last_at > 0; + const isOnline = updated_at > 0; const badgeVariant = isOnline ? 'default' : 'destructive'; const badgeText = isOnline ? t('normal') : t('abnormal'); - const onlineCount = Array.isArray(online_users) ? online_users?.length : 0; + const onlineCount = Object.keys(online).length || 0; return ( @@ -52,45 +54,56 @@ export function NodeStatusCell({ status }: { status: API.NodeStatus }) {
CPU - {formatPercentage(serverStatus?.cpu ?? 0)} + {formatPercentage(cpu ?? 0)}
- +
{t('memory')} - {formatPercentage(serverStatus?.mem ?? 0)} + {formatPercentage(mem ?? 0)}
- +
{t('disk')} - {formatPercentage(serverStatus?.disk ?? 0)} + {formatPercentage(disk ?? 0)}
- +
{isOnline && (
- {t('lastUpdated')}: {formatDate(serverStatus?.updated_at ?? 0)} + {t('lastUpdated')}: {formatDate(updated_at ?? 0)}
)} {isOnline && onlineCount > 0 && ( - -
-
-

{t('onlineUsers')}

- - {online_users.map((user, index) => ( -
- {user.ip} (UID: {user.uid}) -
- ))} -
-
-
+ + +

{t('onlineUsers')}

+ setOpenItem(value)} + > + {Object.entries(online).map(([uid, ips]) => ( + + {`[UID: ${uid}] - ${ips[0]}`} + +
    + {ips.map((ip: string) => ( +
  • {ip}
  • + ))} +
+ +
+
+ ))} +
+
)} diff --git a/apps/admin/app/dashboard/user/user-detail.tsx b/apps/admin/app/dashboard/user/user-detail.tsx index 4424fad..c092906 100644 --- a/apps/admin/app/dashboard/user/user-detail.tsx +++ b/apps/admin/app/dashboard/user/user-detail.tsx @@ -1,15 +1,121 @@ 'use client'; import { Display } from '@/components/display'; -import { getUserDetail } from '@/services/admin/user'; +import { getUserDetail, getUserSubscribeById } from '@/services/admin/user'; import { useQuery } from '@tanstack/react-query'; import { Button } from '@workspace/ui/components/button'; import { HoverCard, HoverCardContent, HoverCardTrigger } from '@workspace/ui/components/hover-card'; -import { formatDate } from '@workspace/ui/utils'; +import { formatBytes, formatDate } from '@workspace/ui/utils'; import { useTranslations } from 'next-intl'; import Link from 'next/link'; import { useState } from 'react'; +export function UserSubscribeDetail({ id, enabled }: { id: number; enabled: boolean }) { + const t = useTranslations('user'); + + const { data } = useQuery({ + enabled: id !== 0 && enabled, + queryKey: ['getUserSubscribeById', id], + queryFn: async () => { + const { data } = await getUserSubscribeById({ id }); + return data.data; + }, + }); + + if (!id) return '--'; + + const usedTraffic = data ? data.upload + data.download : 0; + const totalTraffic = data?.traffic || 0; + + return ( +
+
+

{t('subscriptionInfo')}

+
+
    +
  • + {t('subscriptionId')} + {data?.id || '--'} +
  • +
  • + {t('subscriptionName')} + {data?.subscribe?.name || '--'} +
  • +
  • + {t('token')} +
    + {data?.token || '--'} +
    +
  • +
  • + {t('trafficUsage')} + + {data + ? totalTraffic === 0 + ? `${formatBytes(usedTraffic)} / ${t('unlimited')}` + : `${formatBytes(usedTraffic)} / ${formatBytes(totalTraffic)}` + : '--'} + +
  • +
  • + {t('startTime')} + {data?.start_time ? formatDate(data.start_time) : '--'} +
  • +
  • + {t('expireTime')} + {data?.expire_time ? formatDate(data.expire_time) : '--'} +
  • +
+
+
+ +
+

+ {t('userInfo')} + {data?.user_id && ( + + )} +

+
    +
  • + {t('userId')} + {data?.user_id} +
  • +
  • + {t('balance')} + + + +
  • +
  • + {t('giftAmount')} + + + +
  • +
  • + {t('commission')} + + + +
  • +
  • + {t('createdAt')} + {data?.user?.created_at && formatDate(data?.user?.created_at)} +
  • +
+
+
+ ); +} + export function UserDetail({ id }: { id: number }) { const t = useTranslations('user'); const [shouldFetch, setShouldFetch] = useState(false); diff --git a/apps/admin/components/dashboard/statistics.tsx b/apps/admin/components/dashboard/statistics.tsx index 60aba16..0315809 100644 --- a/apps/admin/components/dashboard/statistics.tsx +++ b/apps/admin/components/dashboard/statistics.tsx @@ -1,5 +1,6 @@ 'use client'; +import { UserSubscribeDetail } from '@/app/dashboard/user/user-detail'; import { queryServerTotalData, queryTicketWaitReply } from '@/services/admin/console'; import { useQuery } from '@tanstack/react-query'; import { Card, CardContent, CardHeader, CardTitle } from '@workspace/ui/components/card'; @@ -11,6 +12,7 @@ import { SelectTrigger, SelectValue, } from '@workspace/ui/components/select'; +import { Separator } from '@workspace/ui/components/separator'; import { Tabs, TabsList, TabsTrigger } from '@workspace/ui/components/tabs'; import { Icon } from '@workspace/ui/custom-components/icon'; import { formatBytes } from '@workspace/ui/utils'; @@ -59,15 +61,13 @@ export default function Statistics() { users: { today: ServerTotal?.user_traffic_ranking_today?.map((item) => ({ - name: item.user_id, + name: item.sid, traffic: item.download + item.upload, - email: item.email, })) || [], yesterday: ServerTotal?.user_traffic_ranking_yesterday?.map((item) => ({ - name: item.user_id, + name: item.sid, traffic: item.download + item.upload, - email: item.email, })) || [], }, }; @@ -175,10 +175,6 @@ export default function Statistics() { label: t('type'), color: 'hsl(var(--muted))', }, - email: { - label: t('email'), - color: 'hsl(var(--muted))', - }, label: { color: 'hsl(var(--foreground))', }, @@ -204,13 +200,22 @@ export default function Statistics() { tickFormatter={(value, index) => String(index + 1)} /> - dataType === 'nodes' - ? `${t('nodes')}: ${label}` - : `${t('users')}: ${label}` + labelFormatter={(label, [payload]) => + dataType === 'nodes' ? ( + `${t('nodes')}: ${label}` + ) : ( + <> +
+ +
+ +
{`${t('users')}: ${label}`}
+ + ) } formatter={(value) => { return formatBytes(Number(value) || 0); diff --git a/apps/admin/locales/cs-CZ/user.json b/apps/admin/locales/cs-CZ/user.json index 944bf09..c033e76 100644 --- a/apps/admin/locales/cs-CZ/user.json +++ b/apps/admin/locales/cs-CZ/user.json @@ -1,6 +1,7 @@ { "accountEnable": "Povolení účtu", "actions": "akce", + "active": "Aktivní", "add": "Přidat", "administrator": "Administrátor", "areaCode": "Směrový kód", @@ -41,10 +42,12 @@ "email": "e-mail", "enable": "Povolit", "expireTime": "Čas vypršení", + "expired": "Vypršelo", "expiredAt": "Platnost vypršela", "failed": "Neúspěch", "giftAmount": "Částka dárku", "giftAmountPlaceholder": "Zadejte částku dárku", + "inactive": "Neaktivní", "invalidEmailFormat": "Neplatný formát e-mailu", "inviteCode": "Pozvánkový kód", "inviteCodePlaceholder": "Zadejte kód pozvánky (ponechte prázdné pro vygenerování)", @@ -63,6 +66,7 @@ "passwordPlaceholder": "Zadejte nové heslo (volitelné)", "permanent": "Trvalý", "pleaseEnterEmail": "Prosím, zadejte e-mail", + "price": "Cena", "referer": "Doporučitel", "refererId": "ID doporučitele", "refererIdPlaceholder": "Zadejte ID doporučitele", @@ -74,8 +78,12 @@ "searchIp": "Vyhledat IP adresu", "selectAuthType": "Vyberte typ ověření", "speedLimit": "Rychlostní limit", + "startTime": "Čas zahájení", + "status": "Stav", "subscription": "Předplatné", "subscriptionDetails": "Podrobnosti o předplatném", + "subscriptionId": "ID předplatného", + "subscriptionInfo": "Informace o předplatném", "subscriptionList": "Seznam předplatných", "subscriptionLogs": "Záznamy o předplatném", "subscriptionName": "Název předplatného", @@ -89,6 +97,8 @@ "tradeNotifications": "Obchodní oznámení", "trafficLimit": "Limit provozu", "trafficLogs": "Protokoly provozu", + "trafficUsage": "Využití dat", + "unknown": "Neznámé", "unlimited": "Neomezený", "unverified": "Neověřeno", "update": "Aktualizovat", @@ -98,11 +108,15 @@ "userAgent": "Uživatelský agent", "userEmail": "Uživatelský e-mail", "userEmailPlaceholder": "Zadejte e-mail uživatele", + "userId": "ID uživatele", + "userInfo": "Informace o uživateli", "userList": "Seznam uživatelů", "userLogs": "Historie přihlášení", "userName": "Identifikátor uživatele", "userOrders": "Objednávky", "userProfile": "Profil", "userSubscriptions": "Předplatné", - "verified": "Ověřeno" + "username": "Uživatelské jméno", + "verified": "Ověřeno", + "viewDetails": "Zobrazit podrobnosti" } diff --git a/apps/admin/locales/de-DE/user.json b/apps/admin/locales/de-DE/user.json index daa84a4..06b21e3 100644 --- a/apps/admin/locales/de-DE/user.json +++ b/apps/admin/locales/de-DE/user.json @@ -1,6 +1,7 @@ { "accountEnable": "Konto aktivieren", "actions": "Aktionen", + "active": "Aktiv", "add": "Hinzufügen", "administrator": "Administrator", "areaCode": "Vorwahl", @@ -41,10 +42,12 @@ "email": "E-Mail", "enable": "Aktivieren", "expireTime": "Ablaufzeit", + "expired": "Abgelaufen", "expiredAt": "Abgelaufen am", "failed": "Fehlgeschlagen", "giftAmount": "Geschenkbetrag", "giftAmountPlaceholder": "Geben Sie den Geschenkbetrag ein", + "inactive": "Inaktiv", "invalidEmailFormat": "Ungültiges E-Mail-Format", "inviteCode": "Einladungscode", "inviteCodePlaceholder": "Einladungscode eingeben (leer lassen, um zu generieren)", @@ -63,6 +66,7 @@ "passwordPlaceholder": "Neues Passwort eingeben (optional)", "permanent": "Dauerhaft", "pleaseEnterEmail": "Bitte E-Mail eingeben", + "price": "Preis", "referer": "Empfehler", "refererId": "Referenz-ID", "refererIdPlaceholder": "Geben Sie die Referenz-ID ein", @@ -74,8 +78,12 @@ "searchIp": "IP-Adresse suchen", "selectAuthType": "Authentifizierungstyp auswählen", "speedLimit": "Geschwindigkeitsbegrenzung", + "startTime": "Startzeit", + "status": "Status", "subscription": "Abonnement", "subscriptionDetails": "Abonnementdetails", + "subscriptionId": "Abonnement-ID", + "subscriptionInfo": "Abonnement-Informationen", "subscriptionList": "Abonnementsliste", "subscriptionLogs": "Abonnementprotokolle", "subscriptionName": "Abonnementname", @@ -89,6 +97,8 @@ "tradeNotifications": "Handelsbenachrichtigungen", "trafficLimit": "Verkehrslimit", "trafficLogs": "Verkehrsprotokolle", + "trafficUsage": "Datenverbrauch", + "unknown": "Unbekannt", "unlimited": "Unbegrenzt", "unverified": "Unbestätigt", "update": "Aktualisieren", @@ -98,11 +108,15 @@ "userAgent": "Benutzeragent", "userEmail": "Benutzer-E-Mail", "userEmailPlaceholder": "Benutzer-E-Mail eingeben", + "userId": "Benutzer-ID", + "userInfo": "Benutzerinformationen", "userList": "Benutzerliste", "userLogs": "Anmeldeverlauf", "userName": "Benutzerkennung", "userOrders": "Bestellungen", "userProfile": "Profil", "userSubscriptions": "Abonnements", - "verified": "Verifiziert" + "username": "Benutzername", + "verified": "Verifiziert", + "viewDetails": "Details anzeigen" } diff --git a/apps/admin/locales/en-US/user.json b/apps/admin/locales/en-US/user.json index 2026af1..3cb92f1 100644 --- a/apps/admin/locales/en-US/user.json +++ b/apps/admin/locales/en-US/user.json @@ -1,6 +1,7 @@ { "accountEnable": "Account Enable", "actions": "Actions", + "active": "Active", "add": "Add", "administrator": "Administrator", "areaCode": "Area Code", @@ -41,10 +42,12 @@ "email": "Email", "enable": "Enable", "expireTime": "Expire Time", + "expired": "Expired", "expiredAt": "Expired At", "failed": "Failed", "giftAmount": "Gift Amount", "giftAmountPlaceholder": "Enter gift amount", + "inactive": "Inactive", "invalidEmailFormat": "Invalid email format", "inviteCode": "Invite Code", "inviteCodePlaceholder": "Enter invite code (leave blank to generate)", @@ -63,6 +66,7 @@ "passwordPlaceholder": "Enter new password (optional)", "permanent": "Permanent", "pleaseEnterEmail": "Please enter email", + "price": "Price", "referer": "Referer", "refererId": "Referer ID", "refererIdPlaceholder": "Enter referer ID", @@ -74,8 +78,12 @@ "searchIp": "Search IP address", "selectAuthType": "Select auth type", "speedLimit": "Speed Limit", + "startTime": "Start Time", + "status": "Status", "subscription": "Subscription", "subscriptionDetails": "Subscription Details", + "subscriptionId": "Subscription ID", + "subscriptionInfo": "Subscription Info", "subscriptionList": "Subscription List", "subscriptionLogs": "Subscription Logs", "subscriptionName": "Subscription Name", @@ -89,6 +97,8 @@ "tradeNotifications": "Trade Notifications", "trafficLimit": "Traffic Limit", "trafficLogs": "Traffic Logs", + "trafficUsage": "Traffic Usage", + "unknown": "Unknown", "unlimited": "Unlimited", "unverified": "Unverified", "update": "Update", @@ -98,11 +108,15 @@ "userAgent": "User Agent", "userEmail": "User Email", "userEmailPlaceholder": "Enter user email", + "userId": "User ID", + "userInfo": "User Info", "userList": "User List", "userLogs": "Login History", "userName": "User Identifier", "userOrders": "Orders", "userProfile": "Profile", "userSubscriptions": "Subscriptions", - "verified": "Verified" + "username": "Username", + "verified": "Verified", + "viewDetails": "View Details" } diff --git a/apps/admin/locales/es-ES/user.json b/apps/admin/locales/es-ES/user.json index 561a182..d214bcc 100644 --- a/apps/admin/locales/es-ES/user.json +++ b/apps/admin/locales/es-ES/user.json @@ -1,6 +1,7 @@ { "accountEnable": "Habilitar cuenta", "actions": "acciones", + "active": "Activo", "add": "Agregar", "administrator": "Administrador", "areaCode": "Código de Área", @@ -41,10 +42,12 @@ "email": "correo electrónico", "enable": "Habilitar", "expireTime": "Tiempo de Expiración", + "expired": "Caducado", "expiredAt": "Fecha de vencimiento", "failed": "Fallido", "giftAmount": "Monto del Regalo", "giftAmountPlaceholder": "Ingrese el monto del regalo", + "inactive": "Inactivo", "invalidEmailFormat": "Formato de correo electrónico no válido", "inviteCode": "Código de invitación", "inviteCodePlaceholder": "Introduce el código de invitación (déjalo en blanco para generar uno)", @@ -63,6 +66,7 @@ "passwordPlaceholder": "Ingrese nueva contraseña (opcional)", "permanent": "Permanente", "pleaseEnterEmail": "Por favor, introduce el correo electrónico", + "price": "Precio", "referer": "Recomendador", "refererId": "ID del Referente", "refererIdPlaceholder": "Ingrese el ID del referente", @@ -74,8 +78,12 @@ "searchIp": "Buscar dirección IP", "selectAuthType": "Seleccionar tipo de autenticación", "speedLimit": "Límite de Velocidad", + "startTime": "Hora de Inicio", + "status": "Estado", "subscription": "Suscripción", "subscriptionDetails": "Detalles de la suscripción", + "subscriptionId": "ID de Suscripción", + "subscriptionInfo": "Información de Suscripción", "subscriptionList": "Lista de Suscripción", "subscriptionLogs": "Registros de Suscripción", "subscriptionName": "Nombre de la Suscripción", @@ -89,6 +97,8 @@ "tradeNotifications": "Notificaciones de Comercio", "trafficLimit": "Límite de Tráfico", "trafficLogs": "Registros de Tráfico", + "trafficUsage": "Uso de Tráfico", + "unknown": "Desconocido", "unlimited": "Ilimitado", "unverified": "No verificado", "update": "Actualizar", @@ -98,11 +108,15 @@ "userAgent": "Agente de Usuario", "userEmail": "Correo Electrónico del Usuario", "userEmailPlaceholder": "Introduce el correo electrónico del usuario", + "userId": "ID de Usuario", + "userInfo": "Información de Usuario", "userList": "Lista de usuarios", "userLogs": "Historial de inicio de sesión", "userName": "Identificador de Usuario", "userOrders": "Pedidos", "userProfile": "Perfil", "userSubscriptions": "Suscripciones", - "verified": "Verificado" + "username": "Nombre de Usuario", + "verified": "Verificado", + "viewDetails": "Ver Detalles" } diff --git a/apps/admin/locales/es-MX/user.json b/apps/admin/locales/es-MX/user.json index cca52b2..3d6eca4 100644 --- a/apps/admin/locales/es-MX/user.json +++ b/apps/admin/locales/es-MX/user.json @@ -1,6 +1,7 @@ { "accountEnable": "Habilitar Cuenta", "actions": "acciones", + "active": "Activo", "add": "Agregar", "administrator": "Administrador", "areaCode": "Código de Área", @@ -41,10 +42,12 @@ "email": "correo electrónico", "enable": "Habilitar", "expireTime": "Tiempo de Expiración", + "expired": "Expirado", "expiredAt": "Fecha de vencimiento", "failed": "Fallido", "giftAmount": "Monto del Regalo", "giftAmountPlaceholder": "Ingrese el monto del regalo", + "inactive": "Inactivo", "invalidEmailFormat": "Formato de correo electrónico no válido", "inviteCode": "Código de Invitación", "inviteCodePlaceholder": "Ingresa el código de invitación (déjalo en blanco para generar uno)", @@ -63,6 +66,7 @@ "passwordPlaceholder": "Ingresa nueva contraseña (opcional)", "permanent": "Permanente", "pleaseEnterEmail": "Por favor, ingresa el correo electrónico", + "price": "Precio", "referer": "Recomendador", "refererId": "ID del Referente", "refererIdPlaceholder": "Ingrese ID del referente", @@ -74,8 +78,12 @@ "searchIp": "Buscar dirección IP", "selectAuthType": "Seleccionar tipo de autenticación", "speedLimit": "Límite de Velocidad", + "startTime": "Hora de Inicio", + "status": "Estado", "subscription": "Suscripción", "subscriptionDetails": "Detalles de la Suscripción", + "subscriptionId": "ID de Suscripción", + "subscriptionInfo": "Información de Suscripción", "subscriptionList": "Lista de Suscripción", "subscriptionLogs": "Registros de Suscripción", "subscriptionName": "Nombre de la Suscripción", @@ -89,6 +97,8 @@ "tradeNotifications": "Notificaciones de Comercio", "trafficLimit": "Límite de Tráfico", "trafficLogs": "Registros de Tráfico", + "trafficUsage": "Uso de Tráfico", + "unknown": "Desconocido", "unlimited": "Ilimitado", "unverified": "No verificado", "update": "Actualizar", @@ -98,11 +108,15 @@ "userAgent": "Agente de Usuario", "userEmail": "Correo Electrónico del Usuario", "userEmailPlaceholder": "Ingresa el correo electrónico del usuario", + "userId": "ID de Usuario", + "userInfo": "Información de Usuario", "userList": "Lista de usuarios", "userLogs": "Historial de Inicio de Sesión", "userName": "Identificador de Usuario", "userOrders": "Pedidos", "userProfile": "Perfil", "userSubscriptions": "Suscripciones", - "verified": "Verificado" + "username": "Nombre de Usuario", + "verified": "Verificado", + "viewDetails": "Ver Detalles" } diff --git a/apps/admin/locales/fa-IR/user.json b/apps/admin/locales/fa-IR/user.json index 59cb1b6..56a7884 100644 --- a/apps/admin/locales/fa-IR/user.json +++ b/apps/admin/locales/fa-IR/user.json @@ -1,6 +1,7 @@ { "accountEnable": "فعال‌سازی حساب", "actions": "اقدامات", + "active": "فعال", "add": "افزودن", "administrator": "مدیر", "areaCode": "کد منطقه", @@ -41,10 +42,12 @@ "email": "ایمیل", "enable": "فعال کردن", "expireTime": "زمان انقضا", + "expired": "منقضی شده", "expiredAt": "منقضی شده در", "failed": "ناموفق", "giftAmount": "مقدار هدیه", "giftAmountPlaceholder": "مبلغ هدیه را وارد کنید", + "inactive": "غیرفعال", "invalidEmailFormat": "فرمت ایمیل نامعتبر است", "inviteCode": "کد دعوت", "inviteCodePlaceholder": "کد دعوت را وارد کنید (برای تولید خالی بگذارید)", @@ -63,6 +66,7 @@ "passwordPlaceholder": "رمز عبور جدید را وارد کنید (اختیاری)", "permanent": "دائمی", "pleaseEnterEmail": "لطفاً ایمیل خود را وارد کنید", + "price": "قیمت", "referer": "ارجاع‌دهنده", "refererId": "شناسه معرف", "refererIdPlaceholder": "شناسه معرف را وارد کنید", @@ -74,8 +78,12 @@ "searchIp": "جستجوی آدرس IP", "selectAuthType": "نوع احراز هویت را انتخاب کنید", "speedLimit": "محدودیت سرعت", + "startTime": "زمان شروع", + "status": "وضعیت", "subscription": "اشتراک", "subscriptionDetails": "جزئیات اشتراک", + "subscriptionId": "شناسه اشتراک", + "subscriptionInfo": "اطلاعات اشتراک", "subscriptionList": "لیست اشتراک", "subscriptionLogs": "گزارش‌های اشتراک", "subscriptionName": "نام اشتراک", @@ -89,6 +97,8 @@ "tradeNotifications": "اعلان‌های تجارت", "trafficLimit": "محدودیت ترافیک", "trafficLogs": "گزارش‌های ترافیک", + "trafficUsage": "استفاده از ترافیک", + "unknown": "نامشخص", "unlimited": "نامحدود", "unverified": "تأیید نشده", "update": "به‌روزرسانی", @@ -98,11 +108,15 @@ "userAgent": "عامل کاربر", "userEmail": "ایمیل کاربر", "userEmailPlaceholder": "ایمیل کاربر را وارد کنید", + "userId": "شناسه کاربر", + "userInfo": "اطلاعات کاربر", "userList": "فهرست کاربران", "userLogs": "تاریخچه ورود", "userName": "شناسه کاربر", "userOrders": "سفارش‌ها", "userProfile": "پروفایل", "userSubscriptions": "اشتراک‌ها", - "verified": "تأیید شده" + "username": "نام کاربری", + "verified": "تأیید شده", + "viewDetails": "مشاهده جزئیات" } diff --git a/apps/admin/locales/fi-FI/user.json b/apps/admin/locales/fi-FI/user.json index 4d59668..9d7ff9d 100644 --- a/apps/admin/locales/fi-FI/user.json +++ b/apps/admin/locales/fi-FI/user.json @@ -1,6 +1,7 @@ { "accountEnable": "Tilin aktivointi", "actions": "toiminnot", + "active": "Aktiivinen", "add": "Lisää", "administrator": "Ylläpitäjä", "areaCode": "Alueen koodi", @@ -41,10 +42,12 @@ "email": "sähköposti", "enable": "Ota käyttöön", "expireTime": "Vanhentumisaika", + "expired": "Vanhentunut", "expiredAt": "Vanhentunut", "failed": "Epäonnistui", "giftAmount": "Lahjan määrä", "giftAmountPlaceholder": "Syötä lahjan määrä", + "inactive": "Epäaktiivinen", "invalidEmailFormat": "Virheellinen sähköpostimuoto", "inviteCode": "Kutsukoodi", "inviteCodePlaceholder": "Syötä kutsukoodi (jätä tyhjäksi luodaksesi uuden)", @@ -63,6 +66,7 @@ "passwordPlaceholder": "Syötä uusi salasana (valinnainen)", "permanent": "Pysyvä", "pleaseEnterEmail": "Ole hyvä ja syötä sähköpostiosoite", + "price": "Hinta", "referer": "Suosittelija", "refererId": "Viittaajan ID", "refererIdPlaceholder": "Syötä suosittelijan ID", @@ -74,8 +78,12 @@ "searchIp": "Etsi IP-osoite", "selectAuthType": "Valitse todennustyyppi", "speedLimit": "Nopeusrajoitus", + "startTime": "Aloitusaika", + "status": "Tila", "subscription": "Tilaus", "subscriptionDetails": "Tilaustiedot", + "subscriptionId": "Tilauksen ID", + "subscriptionInfo": "Tilauksen tiedot", "subscriptionList": "Tilauksen lista", "subscriptionLogs": "Tilaushistoria", "subscriptionName": "Tilauksen nimi", @@ -89,6 +97,8 @@ "tradeNotifications": "Kauppailmoitukset", "trafficLimit": "Liikenteen rajoitus", "trafficLogs": "Liikennelokit", + "trafficUsage": "Liikenteen käyttö", + "unknown": "Tuntematon", "unlimited": "Rajoittamaton", "unverified": "Vahvistamaton", "update": "Päivitä", @@ -98,11 +108,15 @@ "userAgent": "Käyttäjäagentti", "userEmail": "Käyttäjän sähköposti", "userEmailPlaceholder": "Syötä käyttäjän sähköpostiosoite", + "userId": "Käyttäjän ID", + "userInfo": "Käyttäjän tiedot", "userList": "Käyttäjälista", "userLogs": "Kirjautumishistoria", "userName": "Käyttäjän tunniste", "userOrders": "Tilaukset", "userProfile": "Profiili", "userSubscriptions": "Tilaukset", - "verified": "Vahvistettu" + "username": "Käyttäjänimi", + "verified": "Vahvistettu", + "viewDetails": "Näytä tiedot" } diff --git a/apps/admin/locales/fr-FR/user.json b/apps/admin/locales/fr-FR/user.json index a92be39..b73bdf1 100644 --- a/apps/admin/locales/fr-FR/user.json +++ b/apps/admin/locales/fr-FR/user.json @@ -1,6 +1,7 @@ { "accountEnable": "Activation du compte", "actions": "actions", + "active": "Actif", "add": "Ajouter", "administrator": "Administrateur", "areaCode": "Indicatif régional", @@ -41,10 +42,12 @@ "email": "e-mail", "enable": "Activer", "expireTime": "Date d'expiration", + "expired": "Expiré", "expiredAt": "Expiré le", "failed": "Échoué", "giftAmount": "Montant du cadeau", "giftAmountPlaceholder": "Entrez le montant du cadeau", + "inactive": "Inactif", "invalidEmailFormat": "Format d'email invalide", "inviteCode": "Code d'invitation", "inviteCodePlaceholder": "Entrez le code d'invitation (laissez vide pour générer)", @@ -63,6 +66,7 @@ "passwordPlaceholder": "Entrez un nouveau mot de passe (facultatif)", "permanent": "Permanent", "pleaseEnterEmail": "Veuillez entrer votre adresse e-mail", + "price": "Prix", "referer": "Référent", "refererId": "ID du référent", "refererIdPlaceholder": "Entrez l'ID du référent", @@ -74,8 +78,12 @@ "searchIp": "Rechercher une adresse IP", "selectAuthType": "Sélectionner le type d'authentification", "speedLimit": "Limite de vitesse", + "startTime": "Date de début", + "status": "Statut", "subscription": "Abonnement", "subscriptionDetails": "Détails de l'abonnement", + "subscriptionId": "ID d'abonnement", + "subscriptionInfo": "Informations sur l'abonnement", "subscriptionList": "Liste des abonnements", "subscriptionLogs": "Journaux d'abonnement", "subscriptionName": "Nom de l'abonnement", @@ -89,6 +97,8 @@ "tradeNotifications": "Notifications de commerce", "trafficLimit": "Limite de trafic", "trafficLogs": "Journaux de trafic", + "trafficUsage": "Utilisation du trafic", + "unknown": "Inconnu", "unlimited": "Illimité", "unverified": "Non vérifié", "update": "Mettre à jour", @@ -98,11 +108,15 @@ "userAgent": "Agent utilisateur", "userEmail": "E-mail de l'utilisateur", "userEmailPlaceholder": "Entrez l'email de l'utilisateur", + "userId": "ID utilisateur", + "userInfo": "Informations sur l'utilisateur", "userList": "Liste des utilisateurs", "userLogs": "Historique des connexions", "userName": "Identifiant Utilisateur", "userOrders": "Commandes", "userProfile": "Profil", "userSubscriptions": "Abonnements", - "verified": "Vérifié" + "username": "Nom d'utilisateur", + "verified": "Vérifié", + "viewDetails": "Voir les détails" } diff --git a/apps/admin/locales/hi-IN/user.json b/apps/admin/locales/hi-IN/user.json index 9fd1d10..7e297d9 100644 --- a/apps/admin/locales/hi-IN/user.json +++ b/apps/admin/locales/hi-IN/user.json @@ -1,6 +1,7 @@ { "accountEnable": "खाता सक्षम करें", "actions": "क्रियाएँ", + "active": "सक्रिय", "add": "जोड़ें", "administrator": "प्रशासक", "areaCode": "क्षेत्र कोड", @@ -41,10 +42,12 @@ "email": "ईमेल", "enable": "सक्षम करें", "expireTime": "समाप्ति समय", + "expired": "समाप्त", "expiredAt": "समाप्ति तिथि", "failed": "असफल", "giftAmount": "उपहार राशि", "giftAmountPlaceholder": "उपहार राशि दर्ज करें", + "inactive": "निष्क्रिय", "invalidEmailFormat": "अमान्य ईमेल प्रारूप", "inviteCode": "आमंत्रण कोड", "inviteCodePlaceholder": "आमंत्रण कोड दर्ज करें (उत्पन्न करने के लिए खाली छोड़ें)", @@ -63,6 +66,7 @@ "passwordPlaceholder": "नया पासवर्ड दर्ज करें (वैकल्पिक)", "permanent": "स्थायी", "pleaseEnterEmail": "कृपया ईमेल दर्ज करें", + "price": "कीमत", "referer": "सिफारिशकर्ता", "refererId": "रेफरर आईडी", "refererIdPlaceholder": "रेफरर आईडी दर्ज करें", @@ -74,8 +78,12 @@ "searchIp": "आईपी पता खोजें", "selectAuthType": "प्रमाणीकरण प्रकार चुनें", "speedLimit": "गति सीमा", + "startTime": "शुरुआत का समय", + "status": "स्थिति", "subscription": "सदस्यता", "subscriptionDetails": "सदस्यता विवरण", + "subscriptionId": "सदस्यता आईडी", + "subscriptionInfo": "सदस्यता जानकारी", "subscriptionList": "सदस्यता सूची", "subscriptionLogs": "सदस्यता लॉग्स", "subscriptionName": "सदस्यता नाम", @@ -89,6 +97,8 @@ "tradeNotifications": "व्यापार सूचनाएं", "trafficLimit": "ट्रैफिक सीमा", "trafficLogs": "ट्रैफिक लॉग्स", + "trafficUsage": "ट्रैफ़िक उपयोग", + "unknown": "अज्ञात", "unlimited": "असीमित", "unverified": "असत्यापित", "update": "अपडेट", @@ -98,11 +108,15 @@ "userAgent": "उपयोगकर्ता एजेंट", "userEmail": "उपयोगकर्ता ईमेल", "userEmailPlaceholder": "उपयोगकर्ता ईमेल दर्ज करें", + "userId": "उपयोगकर्ता आईडी", + "userInfo": "उपयोगकर्ता जानकारी", "userList": "उपयोगकर्ता सूची", "userLogs": "लॉगिन इतिहास", "userName": "उपयोगकर्ता पहचानकर्ता", "userOrders": "ऑर्डर", "userProfile": "प्रोफ़ाइल", "userSubscriptions": "सदस्यताएँ", - "verified": "सत्यापित" + "username": "उपयोगकर्ता नाम", + "verified": "सत्यापित", + "viewDetails": "विवरण देखें" } diff --git a/apps/admin/locales/hu-HU/user.json b/apps/admin/locales/hu-HU/user.json index 0b09816..a32d461 100644 --- a/apps/admin/locales/hu-HU/user.json +++ b/apps/admin/locales/hu-HU/user.json @@ -1,6 +1,7 @@ { "accountEnable": "Fiók engedélyezése", "actions": "műveletek", + "active": "Aktív", "add": "Hozzáadás", "administrator": "Rendszergazda", "areaCode": "Körzetszám", @@ -41,10 +42,12 @@ "email": "e-mail", "enable": "Engedélyezés", "expireTime": "Lejárati idő", + "expired": "Lejárt", "expiredAt": "Lejárati dátum", "failed": "Sikertelen", "giftAmount": "Ajándék Összeg", "giftAmountPlaceholder": "Adja meg az ajándék összegét", + "inactive": "Inaktív", "invalidEmailFormat": "Érvénytelen e-mail formátum", "inviteCode": "Meghívókód", "inviteCodePlaceholder": "Adja meg a meghívó kódot (hagyja üresen a generáláshoz)", @@ -63,6 +66,7 @@ "passwordPlaceholder": "Adjon meg új jelszót (opcionális)", "permanent": "Állandó", "pleaseEnterEmail": "Kérjük, adja meg az e-mail címet", + "price": "Ár", "referer": "Ajánló", "refererId": "Hivatkozó azonosító", "refererIdPlaceholder": "Adja meg az ajánló azonosítóját", @@ -74,8 +78,12 @@ "searchIp": "IP-cím keresése", "selectAuthType": "Válassza ki az azonosítás típusát", "speedLimit": "Sebességhatár", + "startTime": "Kezdési idő", + "status": "Állapot", "subscription": "Előfizetés", "subscriptionDetails": "Előfizetési részletek", + "subscriptionId": "Előfizetés azonosítója", + "subscriptionInfo": "Előfizetés információ", "subscriptionList": "Előfizetési lista", "subscriptionLogs": "Előfizetési naplók", "subscriptionName": "Előfizetés neve", @@ -89,6 +97,8 @@ "tradeNotifications": "Kereskedelmi értesítések", "trafficLimit": "Forgalmi korlát", "trafficLogs": "Forgalmi naplók", + "trafficUsage": "Forgalmi használat", + "unknown": "Ismeretlen", "unlimited": "Korlátlan", "unverified": "Nem ellenőrzött", "update": "Frissítés", @@ -98,11 +108,15 @@ "userAgent": "Felhasználói ügynök", "userEmail": "Felhasználó e-mail", "userEmailPlaceholder": "Adja meg a felhasználó e-mail címét", + "userId": "Felhasználói azonosító", + "userInfo": "Felhasználói információ", "userList": "Felhasználói lista", "userLogs": "Bejelentkezési előzmények", "userName": "Felhasználói azonosító", "userOrders": "Rendelések", "userProfile": "Profil", "userSubscriptions": "Előfizetések", - "verified": "Ellenőrzött" + "username": "Felhasználónév", + "verified": "Ellenőrzött", + "viewDetails": "Részletek megtekintése" } diff --git a/apps/admin/locales/ja-JP/user.json b/apps/admin/locales/ja-JP/user.json index a685989..8120803 100644 --- a/apps/admin/locales/ja-JP/user.json +++ b/apps/admin/locales/ja-JP/user.json @@ -1,6 +1,7 @@ { "accountEnable": "アカウント有効化", "actions": "アクション", + "active": "アクティブ", "add": "追加", "administrator": "管理者", "areaCode": "市外局番", @@ -41,10 +42,12 @@ "email": "メールアドレス", "enable": "有効", "expireTime": "有効期限", + "expired": "期限切れ", "expiredAt": "有効期限", "failed": "失敗しました", "giftAmount": "ギフト金額", "giftAmountPlaceholder": "ギフト金額を入力してください", + "inactive": "非アクティブ", "invalidEmailFormat": "無効なメール形式です", "inviteCode": "招待コード", "inviteCodePlaceholder": "招待コードを入力してください(生成するには空白のままにしてください)", @@ -63,6 +66,7 @@ "passwordPlaceholder": "新しいパスワードを入力してください(任意)", "permanent": "永久", "pleaseEnterEmail": "メールアドレスを入力してください", + "price": "価格", "referer": "推薦者", "refererId": "リファラーID", "refererIdPlaceholder": "紹介者IDを入力してください", @@ -74,8 +78,12 @@ "searchIp": "IPアドレスを検索", "selectAuthType": "認証タイプを選択", "speedLimit": "速度制限", + "startTime": "開始時間", + "status": "ステータス", "subscription": "サブスクリプション", "subscriptionDetails": "サブスクリプションの詳細", + "subscriptionId": "サブスクリプションID", + "subscriptionInfo": "サブスクリプション情報", "subscriptionList": "購読リスト", "subscriptionLogs": "サブスクリプションログ", "subscriptionName": "サブスクリプション名", @@ -89,6 +97,8 @@ "tradeNotifications": "取引通知", "trafficLimit": "トラフィック制限", "trafficLogs": "トラフィックログ", + "trafficUsage": "トラフィック使用量", + "unknown": "不明", "unlimited": "無制限", "unverified": "未確認", "update": "更新", @@ -98,11 +108,15 @@ "userAgent": "ユーザーエージェント", "userEmail": "ユーザーのメール", "userEmailPlaceholder": "ユーザーのメールアドレスを入力してください", + "userId": "ユーザーID", + "userInfo": "ユーザー情報", "userList": "ユーザーリスト", "userLogs": "ログイン履歴", "userName": "ユーザー識別子", "userOrders": "注文", "userProfile": "プロフィール", "userSubscriptions": "サブスクリプション", - "verified": "確認済み" + "username": "ユーザー名", + "verified": "確認済み", + "viewDetails": "詳細を見る" } diff --git a/apps/admin/locales/ko-KR/user.json b/apps/admin/locales/ko-KR/user.json index 44adb18..5d1d05d 100644 --- a/apps/admin/locales/ko-KR/user.json +++ b/apps/admin/locales/ko-KR/user.json @@ -1,6 +1,7 @@ { "accountEnable": "계정 활성화", "actions": "작업", + "active": "활성", "add": "추가", "administrator": "관리자", "areaCode": "지역 코드", @@ -41,10 +42,12 @@ "email": "이메일", "enable": "사용", "expireTime": "만료 시간", + "expired": "만료됨", "expiredAt": "만료일", "failed": "실패", "giftAmount": "선물 금액", "giftAmountPlaceholder": "선물 금액 입력", + "inactive": "비활성", "invalidEmailFormat": "잘못된 이메일 형식입니다", "inviteCode": "초대 코드", "inviteCodePlaceholder": "초대 코드를 입력하세요 (생성을 원하시면 비워두세요)", @@ -63,6 +66,7 @@ "passwordPlaceholder": "새 비밀번호 입력 (선택 사항)", "permanent": "영구적인", "pleaseEnterEmail": "이메일을 입력하세요", + "price": "가격", "referer": "추천인", "refererId": "추천인 ID", "refererIdPlaceholder": "추천인 ID를 입력하세요", @@ -74,8 +78,12 @@ "searchIp": "IP 주소 검색", "selectAuthType": "인증 유형 선택", "speedLimit": "속도 제한", + "startTime": "시작 시간", + "status": "상태", "subscription": "구독", "subscriptionDetails": "구독 세부 정보", + "subscriptionId": "구독 ID", + "subscriptionInfo": "구독 정보", "subscriptionList": "구독 목록", "subscriptionLogs": "구독 로그", "subscriptionName": "구독 이름", @@ -89,6 +97,8 @@ "tradeNotifications": "거래 알림", "trafficLimit": "트래픽 제한", "trafficLogs": "트래픽 로그", + "trafficUsage": "트래픽 사용량", + "unknown": "알 수 없음", "unlimited": "무제한", "unverified": "확인되지 않음", "update": "업데이트", @@ -98,11 +108,15 @@ "userAgent": "사용자 에이전트", "userEmail": "사용자 이메일", "userEmailPlaceholder": "사용자 이메일 입력", + "userId": "사용자 ID", + "userInfo": "사용자 정보", "userList": "사용자 목록", "userLogs": "로그인 기록", "userName": "사용자 식별자", "userOrders": "주문", "userProfile": "프로필", "userSubscriptions": "구독", - "verified": "검증됨" + "username": "사용자 이름", + "verified": "검증됨", + "viewDetails": "세부 정보 보기" } diff --git a/apps/admin/locales/no-NO/user.json b/apps/admin/locales/no-NO/user.json index 928256e..100a32f 100644 --- a/apps/admin/locales/no-NO/user.json +++ b/apps/admin/locales/no-NO/user.json @@ -1,6 +1,7 @@ { "accountEnable": "Aktiver konto", "actions": "handlinger", + "active": "Aktiv", "add": "Legg til", "administrator": "Administrator", "areaCode": "Retningsnummer", @@ -41,10 +42,12 @@ "email": "e-post", "enable": "Aktiver", "expireTime": "Utløpstid", + "expired": "Utgått", "expiredAt": "Utløpt Dato", "failed": "Mislyktes", "giftAmount": "Gavebeløp", "giftAmountPlaceholder": "Skriv inn gavebeløp", + "inactive": "Inaktiv", "invalidEmailFormat": "Ugyldig e-postformat", "inviteCode": "Invitasjonskode", "inviteCodePlaceholder": "Skriv inn invitasjonskode (la stå tom for å generere)", @@ -63,6 +66,7 @@ "passwordPlaceholder": "Skriv inn nytt passord (valgfritt)", "permanent": "Permanent", "pleaseEnterEmail": "Vennligst skriv inn e-post", + "price": "Pris", "referer": "Henviser", "refererId": "Henvisnings-ID", "refererIdPlaceholder": "Skriv inn referanse-ID", @@ -74,8 +78,12 @@ "searchIp": "Søk IP-adresse", "selectAuthType": "Velg autentiseringstype", "speedLimit": "Fartsgrense", + "startTime": "Starttid", + "status": "Status", "subscription": "Abonnement", "subscriptionDetails": "Abonnementsdetaljer", + "subscriptionId": "Abonnements-ID", + "subscriptionInfo": "Abonnementsinformasjon", "subscriptionList": "Abonnementsliste", "subscriptionLogs": "Abonnementslogger", "subscriptionName": "Abonnementsnavn", @@ -89,6 +97,8 @@ "tradeNotifications": "Handelsvarsler", "trafficLimit": "Trafikkgrense", "trafficLogs": "Trafikklogger", + "trafficUsage": "Trafikkbruk", + "unknown": "Ukjent", "unlimited": "Ubegrenset", "unverified": "Ubekreftet", "update": "Oppdater", @@ -98,11 +108,15 @@ "userAgent": "Brukeragent", "userEmail": "Brukerens e-post", "userEmailPlaceholder": "Skriv inn brukers e-post", + "userId": "Bruker-ID", + "userInfo": "Brukerinfo", "userList": "Brukerliste", "userLogs": "Innloggingshistorikk", "userName": "Brukeridentifikator", "userOrders": "Bestillinger", "userProfile": "Profil", "userSubscriptions": "Abonnementer", - "verified": "Verifisert" + "username": "Brukernavn", + "verified": "Verifisert", + "viewDetails": "Vis detaljer" } diff --git a/apps/admin/locales/pl-PL/user.json b/apps/admin/locales/pl-PL/user.json index 39e99e5..30f343c 100644 --- a/apps/admin/locales/pl-PL/user.json +++ b/apps/admin/locales/pl-PL/user.json @@ -1,6 +1,7 @@ { "accountEnable": "Aktywacja konta", "actions": "działania", + "active": "Aktywny", "add": "Dodaj", "administrator": "Administrator", "areaCode": "Kod obszaru", @@ -41,10 +42,12 @@ "email": "e-mail", "enable": "Włącz", "expireTime": "Czas wygaśnięcia", + "expired": "Wygasły", "expiredAt": "Data wygaśnięcia", "failed": "Niepowodzenie", "giftAmount": "Kwota Prezentu", "giftAmountPlaceholder": "Wprowadź kwotę prezentu", + "inactive": "Nieaktywny", "invalidEmailFormat": "Nieprawidłowy format adresu e-mail", "inviteCode": "Kod zaproszenia", "inviteCodePlaceholder": "Wprowadź kod zaproszenia (pozostaw puste, aby wygenerować)", @@ -63,6 +66,7 @@ "passwordPlaceholder": "Wprowadź nowe hasło (opcjonalnie)", "permanent": "Stały", "pleaseEnterEmail": "Proszę wprowadzić adres e-mail", + "price": "Cena", "referer": "Polecający", "refererId": "Identyfikator polecającego", "refererIdPlaceholder": "Wprowadź identyfikator polecającego", @@ -74,8 +78,12 @@ "searchIp": "Wyszukaj adres IP", "selectAuthType": "Wybierz typ uwierzytelniania", "speedLimit": "Ograniczenie prędkości", + "startTime": "Czas rozpoczęcia", + "status": "Status", "subscription": "Subskrypcja", "subscriptionDetails": "Szczegóły subskrypcji", + "subscriptionId": "ID subskrypcji", + "subscriptionInfo": "Informacje o subskrypcji", "subscriptionList": "Lista subskrypcji", "subscriptionLogs": "Dzienniki subskrypcji", "subscriptionName": "Nazwa subskrypcji", @@ -89,6 +97,8 @@ "tradeNotifications": "Powiadomienia o transakcjach", "trafficLimit": "Limit ruchu", "trafficLogs": "Dzienniki Ruchu", + "trafficUsage": "Zużycie ruchu", + "unknown": "Nieznany", "unlimited": "Nieograniczony", "unverified": "Niezweryfikowane", "update": "Aktualizuj", @@ -98,11 +108,15 @@ "userAgent": "Agent użytkownika", "userEmail": "Email użytkownika", "userEmailPlaceholder": "Wprowadź adres e-mail użytkownika", + "userId": "ID użytkownika", + "userInfo": "Informacje o użytkowniku", "userList": "Lista użytkowników", "userLogs": "Historia logowania", "userName": "Identyfikator użytkownika", "userOrders": "Zamówienia", "userProfile": "Profil", "userSubscriptions": "Subskrypcje", - "verified": "Zweryfikowano" + "username": "Nazwa użytkownika", + "verified": "Zweryfikowano", + "viewDetails": "Zobacz szczegóły" } diff --git a/apps/admin/locales/pt-BR/user.json b/apps/admin/locales/pt-BR/user.json index cfdecce..0ac56f3 100644 --- a/apps/admin/locales/pt-BR/user.json +++ b/apps/admin/locales/pt-BR/user.json @@ -1,6 +1,7 @@ { "accountEnable": "Habilitar Conta", "actions": "ações", + "active": "Ativo", "add": "Adicionar", "administrator": "Administrador", "areaCode": "Código de Área", @@ -41,10 +42,12 @@ "email": "e-mail", "enable": "Habilitar", "expireTime": "Tempo de Expiração", + "expired": "Expirado", "expiredAt": "Expirado Em", "failed": "Falhou", "giftAmount": "Valor do Presente", "giftAmountPlaceholder": "Insira o valor do presente", + "inactive": "Inativo", "invalidEmailFormat": "Formato de e-mail inválido", "inviteCode": "Código de Convite", "inviteCodePlaceholder": "Digite o código de convite (deixe em branco para gerar)", @@ -63,6 +66,7 @@ "passwordPlaceholder": "Digite a nova senha (opcional)", "permanent": "Permanente", "pleaseEnterEmail": "Por favor, insira o e-mail", + "price": "Preço", "referer": "Referente", "refererId": "ID do Referente", "refererIdPlaceholder": "Digite o ID do referenciador", @@ -74,8 +78,12 @@ "searchIp": "Pesquisar endereço IP", "selectAuthType": "Selecione o tipo de autenticação", "speedLimit": "Limite de Velocidade", + "startTime": "Hora de Início", + "status": "Status", "subscription": "Assinatura", "subscriptionDetails": "Detalhes da Assinatura", + "subscriptionId": "ID da Assinatura", + "subscriptionInfo": "Informações da Assinatura", "subscriptionList": "Lista de Assinaturas", "subscriptionLogs": "Registros de Assinatura", "subscriptionName": "Nome da Assinatura", @@ -89,6 +97,8 @@ "tradeNotifications": "Notificações de Comércio", "trafficLimit": "Limite de Tráfego", "trafficLogs": "Registros de Tráfego", + "trafficUsage": "Uso de Tráfego", + "unknown": "Desconhecido", "unlimited": "Ilimitado", "unverified": "Não verificado", "update": "Atualizar", @@ -98,11 +108,15 @@ "userAgent": "Agente do Usuário", "userEmail": "E-mail do Usuário", "userEmailPlaceholder": "Digite o e-mail do usuário", + "userId": "ID do Usuário", + "userInfo": "Informações do Usuário", "userList": "Lista de Usuários", "userLogs": "Histórico de Login", "userName": "Identificador do Usuário", "userOrders": "Pedidos", "userProfile": "Perfil", "userSubscriptions": "Assinaturas", - "verified": "Verificado" + "username": "Nome de Usuário", + "verified": "Verificado", + "viewDetails": "Ver Detalhes" } diff --git a/apps/admin/locales/ro-RO/user.json b/apps/admin/locales/ro-RO/user.json index df0cb75..608c1ee 100644 --- a/apps/admin/locales/ro-RO/user.json +++ b/apps/admin/locales/ro-RO/user.json @@ -1,6 +1,7 @@ { "accountEnable": "Activare Cont", "actions": "acțiuni", + "active": "Activ", "add": "Adaugă", "administrator": "Administrator", "areaCode": "Prefix telefonic", @@ -41,10 +42,12 @@ "email": "e-mail", "enable": "Activare", "expireTime": "Timp de expirare", + "expired": "Expirat", "expiredAt": "Expiră la", "failed": "Eșuat", "giftAmount": "Sumă Cadou", "giftAmountPlaceholder": "Introduceți suma cadoului", + "inactive": "Inactiv", "invalidEmailFormat": "Format de email invalid", "inviteCode": "Cod de invitație", "inviteCodePlaceholder": "Introduceți codul de invitație (lăsați necompletat pentru a genera)", @@ -63,6 +66,7 @@ "passwordPlaceholder": "Introduceți o parolă nouă (opțional)", "permanent": "Permanent", "pleaseEnterEmail": "Vă rugăm să introduceți adresa de email", + "price": "Preț", "referer": "Referent", "refererId": "ID Referent", "refererIdPlaceholder": "Introduceți ID-ul referentului", @@ -74,8 +78,12 @@ "searchIp": "Caută adresa IP", "selectAuthType": "Selectați tipul de autentificare", "speedLimit": "Limită de viteză", + "startTime": "Timp de început", + "status": "Stare", "subscription": "Abonament", "subscriptionDetails": "Detalii abonament", + "subscriptionId": "ID Abonament", + "subscriptionInfo": "Informații Abonament", "subscriptionList": "Listă de abonamente", "subscriptionLogs": "Jurnale de abonament", "subscriptionName": "Numele Abonamentului", @@ -89,6 +97,8 @@ "tradeNotifications": "Notificări de tranzacționare", "trafficLimit": "Limită de trafic", "trafficLogs": "Jurnale de trafic", + "trafficUsage": "Utilizare Trafic", + "unknown": "Necunoscut", "unlimited": "Nelimitat", "unverified": "Neverificat", "update": "Actualizare", @@ -98,11 +108,15 @@ "userAgent": "Agent Utilizator", "userEmail": "Email utilizator", "userEmailPlaceholder": "Introduceți emailul utilizatorului", + "userId": "ID Utilizator", + "userInfo": "Informații Utilizator", "userList": "Lista utilizatorilor", "userLogs": "Istoricul autentificărilor", "userName": "Identificator Utilizator", "userOrders": "Comenzi", "userProfile": "Profil", "userSubscriptions": "Abonamente", - "verified": "Verificat" + "username": "Nume Utilizator", + "verified": "Verificat", + "viewDetails": "Vezi Detalii" } diff --git a/apps/admin/locales/ru-RU/user.json b/apps/admin/locales/ru-RU/user.json index 8ebaac8..96dcf42 100644 --- a/apps/admin/locales/ru-RU/user.json +++ b/apps/admin/locales/ru-RU/user.json @@ -1,6 +1,7 @@ { "accountEnable": "Включение аккаунта", "actions": "действия", + "active": "Активный", "add": "Добавить", "administrator": "Администратор", "areaCode": "Код региона", @@ -41,10 +42,12 @@ "email": "Электронная почта", "enable": "Включить", "expireTime": "Время истечения", + "expired": "Истекший", "expiredAt": "Срок действия истек", "failed": "Не удалось", "giftAmount": "Сумма подарка", "giftAmountPlaceholder": "Введите сумму подарка", + "inactive": "Неактивный", "invalidEmailFormat": "Неверный формат электронной почты", "inviteCode": "Код приглашения", "inviteCodePlaceholder": "Введите код приглашения (оставьте пустым для генерации)", @@ -63,6 +66,7 @@ "passwordPlaceholder": "Введите новый пароль (необязательно)", "permanent": "Постоянный", "pleaseEnterEmail": "Пожалуйста, введите адрес электронной почты", + "price": "Цена", "referer": "Реферер", "refererId": "ID реферера", "refererIdPlaceholder": "Введите ID реферера", @@ -74,8 +78,12 @@ "searchIp": "Поиск IP-адреса", "selectAuthType": "Выберите тип аутентификации", "speedLimit": "Ограничение скорости", + "startTime": "Время начала", + "status": "Статус", "subscription": "Подписка", "subscriptionDetails": "Детали подписки", + "subscriptionId": "ID подписки", + "subscriptionInfo": "Информация о подписке", "subscriptionList": "Список подписок", "subscriptionLogs": "Журналы подписки", "subscriptionName": "Название подписки", @@ -89,6 +97,8 @@ "tradeNotifications": "Уведомления о торговле", "trafficLimit": "Лимит трафика", "trafficLogs": "Журналы трафика", + "trafficUsage": "Использование трафика", + "unknown": "Неизвестно", "unlimited": "Неограниченный", "unverified": "Неподтверждено", "update": "Обновить", @@ -98,11 +108,15 @@ "userAgent": "Пользовательский агент", "userEmail": "Электронная почта пользователя", "userEmailPlaceholder": "Введите электронную почту пользователя", + "userId": "ID пользователя", + "userInfo": "Информация о пользователе", "userList": "Список пользователей", "userLogs": "История входов", "userName": "Идентификатор пользователя", "userOrders": "Заказы", "userProfile": "Профиль", "userSubscriptions": "Подписки", - "verified": "Проверено" + "username": "Имя пользователя", + "verified": "Проверено", + "viewDetails": "Просмотреть детали" } diff --git a/apps/admin/locales/th-TH/user.json b/apps/admin/locales/th-TH/user.json index 43384f6..b15780e 100644 --- a/apps/admin/locales/th-TH/user.json +++ b/apps/admin/locales/th-TH/user.json @@ -1,6 +1,7 @@ { "accountEnable": "เปิดใช้งานบัญชี", "actions": "การดำเนินการ", + "active": "ใช้งาน", "add": "เพิ่ม", "administrator": "ผู้ดูแลระบบ", "areaCode": "รหัสพื้นที่", @@ -41,10 +42,12 @@ "email": "อีเมล", "enable": "เปิดใช้งาน", "expireTime": "เวลาหมดอายุ", + "expired": "หมดอายุ", "expiredAt": "วันหมดอายุ", "failed": "ล้มเหลว", "giftAmount": "จำนวนเงินของขวัญ", "giftAmountPlaceholder": "กรอกจำนวนเงินของขวัญ", + "inactive": "ไม่ใช้งาน", "invalidEmailFormat": "รูปแบบอีเมลไม่ถูกต้อง", "inviteCode": "รหัสเชิญ", "inviteCodePlaceholder": "กรอกรหัสเชิญ (เว้นว่างไว้เพื่อสร้างใหม่)", @@ -63,6 +66,7 @@ "passwordPlaceholder": "กรุณาใส่รหัสผ่านใหม่ (ไม่บังคับ)", "permanent": "ถาวร", "pleaseEnterEmail": "กรุณาใส่อีเมล", + "price": "ราคา", "referer": "ผู้แนะนำ", "refererId": "รหัสผู้แนะนำ", "refererIdPlaceholder": "กรอก ID ผู้แนะนำ", @@ -74,8 +78,12 @@ "searchIp": "ค้นหาที่อยู่ IP", "selectAuthType": "เลือกประเภทการยืนยันตัวตน", "speedLimit": "จำกัดความเร็ว", + "startTime": "เวลาเริ่มต้น", + "status": "สถานะ", "subscription": "การสมัครสมาชิก", "subscriptionDetails": "รายละเอียดการสมัครสมาชิก", + "subscriptionId": "รหัสการสมัครสมาชิก", + "subscriptionInfo": "ข้อมูลการสมัครสมาชิก", "subscriptionList": "รายการสมัครสมาชิก", "subscriptionLogs": "บันทึกการสมัครสมาชิก", "subscriptionName": "ชื่อการสมัครสมาชิก", @@ -89,6 +97,8 @@ "tradeNotifications": "การแจ้งเตือนการซื้อขาย", "trafficLimit": "ขีดจำกัดการจราจร", "trafficLogs": "บันทึกการจราจร", + "trafficUsage": "การใช้งานข้อมูล", + "unknown": "ไม่ทราบ", "unlimited": "ไม่จำกัด", "unverified": "ยังไม่ได้รับการยืนยัน", "update": "อัปเดต", @@ -98,11 +108,15 @@ "userAgent": "ตัวแทนผู้ใช้", "userEmail": "อีเมลผู้ใช้", "userEmailPlaceholder": "กรอกอีเมลผู้ใช้", + "userId": "รหัสผู้ใช้", + "userInfo": "ข้อมูลผู้ใช้", "userList": "รายชื่อผู้ใช้", "userLogs": "ประวัติการเข้าสู่ระบบ", "userName": "ตัวระบุผู้ใช้", "userOrders": "คำสั่งซื้อ", "userProfile": "โปรไฟล์", "userSubscriptions": "การสมัครสมาชิก", - "verified": "ยืนยันแล้ว" + "username": "ชื่อผู้ใช้", + "verified": "ยืนยันแล้ว", + "viewDetails": "ดูรายละเอียด" } diff --git a/apps/admin/locales/tr-TR/user.json b/apps/admin/locales/tr-TR/user.json index 5c05c7e..bddff89 100644 --- a/apps/admin/locales/tr-TR/user.json +++ b/apps/admin/locales/tr-TR/user.json @@ -1,6 +1,7 @@ { "accountEnable": "Hesap Etkinleştir", "actions": "eylemler", + "active": "Aktif", "add": "Ekle", "administrator": "Yönetici", "areaCode": "Alan Kodu", @@ -41,10 +42,12 @@ "email": "e-posta", "enable": "etkinleştir", "expireTime": "Sona Erme Zamanı", + "expired": "Süresi Dolmuş", "expiredAt": "Son Kullanma Tarihi", "failed": "Başarısız", "giftAmount": "Hediye Miktarı", "giftAmountPlaceholder": "Hediye tutarını girin", + "inactive": "Pasif", "invalidEmailFormat": "Geçersiz e-posta formatı", "inviteCode": "Davet Kodu", "inviteCodePlaceholder": "Davet kodunu girin (oluşturmak için boş bırakın)", @@ -63,6 +66,7 @@ "passwordPlaceholder": "Yeni şifreyi girin (isteğe bağlı)", "permanent": "Kalıcı", "pleaseEnterEmail": "Lütfen e-posta adresinizi girin", + "price": "Fiyat", "referer": "Referans", "refererId": "Referans Kimliği", "refererIdPlaceholder": "Referans kimliğini girin", @@ -74,8 +78,12 @@ "searchIp": "IP adresi ara", "selectAuthType": "Kimlik doğrulama türünü seçin", "speedLimit": "Hız Sınırı", + "startTime": "Başlangıç Zamanı", + "status": "Durum", "subscription": "Abonelik", "subscriptionDetails": "Abonelik Ayrıntıları", + "subscriptionId": "Abonelik ID", + "subscriptionInfo": "Abonelik Bilgisi", "subscriptionList": "Abonelik Listesi", "subscriptionLogs": "Abonelik Kayıtları", "subscriptionName": "Abonelik Adı", @@ -89,6 +97,8 @@ "tradeNotifications": "Ticaret Bildirimleri", "trafficLimit": "Trafik Limiti", "trafficLogs": "Trafik Günlükleri", + "trafficUsage": "Trafik Kullanımı", + "unknown": "Bilinmiyor", "unlimited": "Sınırsız", "unverified": "Doğrulanmamış", "update": "Güncelle", @@ -98,11 +108,15 @@ "userAgent": "Kullanıcı Aracısı", "userEmail": "Kullanıcı E-postası", "userEmailPlaceholder": "Kullanıcı e-postasını girin", + "userId": "Kullanıcı ID", + "userInfo": "Kullanıcı Bilgisi", "userList": "Kullanıcı Listesi", "userLogs": "Giriş Geçmişi", "userName": "Kullanıcı Tanımlayıcı", "userOrders": "Siparişler", "userProfile": "Profil", "userSubscriptions": "Abonelikler", - "verified": "Doğrulandı" + "username": "Kullanıcı Adı", + "verified": "Doğrulandı", + "viewDetails": "Ayrıntıları Görüntüle" } diff --git a/apps/admin/locales/uk-UA/user.json b/apps/admin/locales/uk-UA/user.json index a5db2e3..b9434d3 100644 --- a/apps/admin/locales/uk-UA/user.json +++ b/apps/admin/locales/uk-UA/user.json @@ -1,6 +1,7 @@ { "accountEnable": "Увімкнення облікового запису", "actions": "дії", + "active": "Активний", "add": "Додати", "administrator": "Адміністратор", "areaCode": "Код регіону", @@ -41,10 +42,12 @@ "email": "електронна пошта", "enable": "Увімкнути", "expireTime": "Час закінчення", + "expired": "Закінчився", "expiredAt": "Термін дії закінчився", "failed": "Не вдалося", "giftAmount": "Сума подарунка", "giftAmountPlaceholder": "Введіть суму подарунка", + "inactive": "Неактивний", "invalidEmailFormat": "Неправильний формат електронної пошти", "inviteCode": "Код запрошення", "inviteCodePlaceholder": "Введіть код запрошення (залиште порожнім для генерації)", @@ -63,6 +66,7 @@ "passwordPlaceholder": "Введіть новий пароль (необов'язково)", "permanent": "Постійний", "pleaseEnterEmail": "Будь ласка, введіть електронну пошту", + "price": "Ціна", "referer": "Реферер", "refererId": "Ідентифікатор реферера", "refererIdPlaceholder": "Введіть ID реферера", @@ -74,8 +78,12 @@ "searchIp": "Пошук IP-адреси", "selectAuthType": "Виберіть тип автентифікації", "speedLimit": "Обмеження швидкості", + "startTime": "Час початку", + "status": "Статус", "subscription": "Підписка", "subscriptionDetails": "Деталі підписки", + "subscriptionId": "ID підписки", + "subscriptionInfo": "Інформація про підписку", "subscriptionList": "Список підписок", "subscriptionLogs": "Журнали підписки", "subscriptionName": "Назва підписки", @@ -89,6 +97,8 @@ "tradeNotifications": "Сповіщення про торгівлю", "trafficLimit": "Ліміт трафіку", "trafficLogs": "Журнали трафіку", + "trafficUsage": "Використання трафіку", + "unknown": "Невідомо", "unlimited": "Необмежено", "unverified": "Непідтверджено", "update": "Оновити", @@ -98,11 +108,15 @@ "userAgent": "Агент користувача", "userEmail": "Електронна пошта користувача", "userEmailPlaceholder": "Введіть електронну адресу користувача", + "userId": "ID користувача", + "userInfo": "Інформація про користувача", "userList": "Список користувачів", "userLogs": "Історія входів", "userName": "Ідентифікатор користувача", "userOrders": "Замовлення", "userProfile": "Профіль", "userSubscriptions": "Підписки", - "verified": "Перевірено" + "username": "Ім'я користувача", + "verified": "Перевірено", + "viewDetails": "Переглянути деталі" } diff --git a/apps/admin/locales/vi-VN/user.json b/apps/admin/locales/vi-VN/user.json index 86e1188..c6c7bc5 100644 --- a/apps/admin/locales/vi-VN/user.json +++ b/apps/admin/locales/vi-VN/user.json @@ -1,6 +1,7 @@ { "accountEnable": "Kích hoạt tài khoản", "actions": "Hành động", + "active": "Đang hoạt động", "add": "Thêm", "administrator": "Quản trị viên", "areaCode": "Mã Vùng", @@ -41,10 +42,12 @@ "email": "Email", "enable": "Kích hoạt", "expireTime": "Thời gian hết hạn", + "expired": "Đã hết hạn", "expiredAt": "Ngày hết hạn", "failed": "Thất bại", "giftAmount": "Số tiền quà tặng", "giftAmountPlaceholder": "Nhập số tiền quà tặng", + "inactive": "Không hoạt động", "invalidEmailFormat": "Định dạng email không hợp lệ", "inviteCode": "Mã Mời", "inviteCodePlaceholder": "Nhập mã mời (để trống để tạo mới)", @@ -63,6 +66,7 @@ "passwordPlaceholder": "Nhập mật khẩu mới (không bắt buộc)", "permanent": "Vĩnh viễn", "pleaseEnterEmail": "Vui lòng nhập email", + "price": "Giá", "referer": "Người giới thiệu", "refererId": "ID người giới thiệu", "refererIdPlaceholder": "Nhập mã người giới thiệu", @@ -74,8 +78,12 @@ "searchIp": "Tìm kiếm địa chỉ IP", "selectAuthType": "Chọn loại xác thực", "speedLimit": "Giới hạn tốc độ", + "startTime": "Thời gian bắt đầu", + "status": "Trạng thái", "subscription": "Đăng ký", "subscriptionDetails": "Chi Tiết Đăng Ký", + "subscriptionId": "ID đăng ký", + "subscriptionInfo": "Thông tin đăng ký", "subscriptionList": "Danh sách đăng ký", "subscriptionLogs": "Nhật ký Đăng ký", "subscriptionName": "Tên Đăng Ký", @@ -89,6 +97,8 @@ "tradeNotifications": "Thông báo Giao dịch", "trafficLimit": "Giới hạn lưu lượng", "trafficLogs": "Nhật ký lưu lượng", + "trafficUsage": "Sử dụng lưu lượng", + "unknown": "Không xác định", "unlimited": "Không giới hạn", "unverified": "Chưa được xác minh", "update": "Cập nhật", @@ -98,11 +108,15 @@ "userAgent": "Tác nhân người dùng", "userEmail": "Email Người Dùng", "userEmailPlaceholder": "Nhập email người dùng", + "userId": "ID người dùng", + "userInfo": "Thông tin người dùng", "userList": "Danh sách người dùng", "userLogs": "Lịch sử đăng nhập", "userName": "Định danh Người dùng", "userOrders": "Đơn hàng", "userProfile": "Hồ sơ", "userSubscriptions": "Đăng ký", - "verified": "Đã xác minh" + "username": "Tên người dùng", + "verified": "Đã xác minh", + "viewDetails": "Xem chi tiết" } diff --git a/apps/admin/locales/zh-CN/user.json b/apps/admin/locales/zh-CN/user.json index 873c45f..2ab01c1 100644 --- a/apps/admin/locales/zh-CN/user.json +++ b/apps/admin/locales/zh-CN/user.json @@ -1,6 +1,7 @@ { "accountEnable": "账号启用", "actions": "操作", + "active": "活跃", "add": "添加", "administrator": "管理员", "areaCode": "区号", @@ -41,10 +42,12 @@ "email": "邮箱", "enable": "启用", "expireTime": "到期时间", + "expired": "已过期", "expiredAt": "过期时间", "failed": "失败", "giftAmount": "赠送金额", "giftAmountPlaceholder": "输入赠送金额", + "inactive": "非活跃", "invalidEmailFormat": "邮箱格式不正确", "inviteCode": "邀请码", "inviteCodePlaceholder": "输入邀请码(留空自动生成)", @@ -63,6 +66,7 @@ "passwordPlaceholder": "输入新密码(选填)", "permanent": "永久", "pleaseEnterEmail": "请输入邮箱", + "price": "价格", "referer": "推荐人", "refererId": "推荐人ID", "refererIdPlaceholder": "输入推荐人ID", @@ -74,8 +78,12 @@ "searchIp": "搜索IP地址", "selectAuthType": "选择认证类型", "speedLimit": "速度限制", + "startTime": "开始时间", + "status": "状态", "subscription": "订阅", "subscriptionDetails": "订阅详情", + "subscriptionId": "订阅 ID", + "subscriptionInfo": "订阅信息", "subscriptionList": "订阅列表", "subscriptionLogs": "订阅日志", "subscriptionName": "订阅名称", @@ -89,6 +97,8 @@ "tradeNotifications": "交易通知", "trafficLimit": "流量限制", "trafficLogs": "流量日志", + "trafficUsage": "流量使用", + "unknown": "未知", "unlimited": "无限制", "unverified": "未验证", "update": "更新", @@ -98,11 +108,15 @@ "userAgent": "用户代理", "userEmail": "用户邮箱", "userEmailPlaceholder": "输入用户邮箱", + "userId": "用户 ID", + "userInfo": "用户信息", "userList": "用户列表", "userLogs": "登录历史", "userName": "用户标识", "userOrders": "订单", "userProfile": "个人资料", "userSubscriptions": "订阅", - "verified": "已验证" + "username": "用户名", + "verified": "已验证", + "viewDetails": "查看详情" } diff --git a/apps/admin/locales/zh-HK/user.json b/apps/admin/locales/zh-HK/user.json index a411660..3459038 100644 --- a/apps/admin/locales/zh-HK/user.json +++ b/apps/admin/locales/zh-HK/user.json @@ -1,6 +1,7 @@ { "accountEnable": "帳戶啟用", "actions": "操作", + "active": "活躍", "add": "新增", "administrator": "管理員", "areaCode": "地區代碼", @@ -41,10 +42,12 @@ "email": "電子郵件", "enable": "啟用", "expireTime": "到期時間", + "expired": "已過期", "expiredAt": "到期時間", "failed": "失敗", "giftAmount": "禮物金額", "giftAmountPlaceholder": "輸入禮物金額", + "inactive": "不活躍", "invalidEmailFormat": "電郵格式無效", "inviteCode": "邀請碼", "inviteCodePlaceholder": "輸入邀請碼(留空以生成)", @@ -63,6 +66,7 @@ "passwordPlaceholder": "輸入新密碼(可選)", "permanent": "永久", "pleaseEnterEmail": "請輸入電郵地址", + "price": "價格", "referer": "推薦人", "refererId": "推薦人 ID", "refererIdPlaceholder": "輸入推薦人 ID", @@ -74,8 +78,12 @@ "searchIp": "搜尋IP地址", "selectAuthType": "選擇認證類型", "speedLimit": "速度限制", + "startTime": "開始時間", + "status": "狀態", "subscription": "訂閱", "subscriptionDetails": "訂閱詳情", + "subscriptionId": "訂閱 ID", + "subscriptionInfo": "訂閱資訊", "subscriptionList": "訂閱列表", "subscriptionLogs": "訂閱日誌", "subscriptionName": "訂閱名稱", @@ -89,6 +97,8 @@ "tradeNotifications": "交易通知", "trafficLimit": "流量限制", "trafficLogs": "流量日誌", + "trafficUsage": "流量使用", + "unknown": "未知", "unlimited": "無限", "unverified": "未經驗證", "update": "更新", @@ -98,11 +108,15 @@ "userAgent": "用戶代理", "userEmail": "用戶電郵", "userEmailPlaceholder": "輸入用戶電郵", + "userId": "用戶 ID", + "userInfo": "用戶資訊", "userList": "使用者列表", "userLogs": "登入歷史", "userName": "用戶識別碼", "userOrders": "訂單", "userProfile": "個人資料", "userSubscriptions": "訂閱", - "verified": "已驗證" + "username": "用戶名", + "verified": "已驗證", + "viewDetails": "查看詳情" } diff --git a/apps/admin/services/admin/typings.d.ts b/apps/admin/services/admin/typings.d.ts index e30db02..5983650 100644 --- a/apps/admin/services/admin/typings.d.ts +++ b/apps/admin/services/admin/typings.d.ts @@ -325,6 +325,7 @@ declare namespace API { }; type CurrencyConfig = { + access_key: string; currency_unit: string; currency_symbol: string; }; @@ -774,6 +775,14 @@ declare namespace API { total: number; }; + type GetUserSubscribeByIdParams = { + id: number; + }; + + type GetUserSubscribeByIdRequest = { + id: number; + }; + type GetUserSubscribeDevicesParams = { page: number; size: number; @@ -909,9 +918,11 @@ declare namespace API { }; type NodeStatus = { - online_users: OnlineUser[]; - status: ServerStatus; - last_at: number; + online: Record; + cpu: number; + mem: number; + disk: number; + updated_at: number; }; type OnlineUser = { @@ -1223,13 +1234,6 @@ declare namespace API { updated_at: number; }; - type ServerStatus = { - cpu: number; - mem: number; - disk: number; - updated_at: number; - }; - type ServerTotalDataResponse = { online_user_ips: number; online_servers: number; @@ -1741,6 +1745,25 @@ declare namespace API { updated_at: number; }; + type UserSubscribeDetail = { + id: number; + user_id: number; + user: User; + order_id: number; + subscribe_id: number; + subscribe: Subscribe; + start_time: number; + expire_time: number; + reset_time: number; + traffic: number; + download: number; + upload: number; + token: string; + status: number; + created_at: number; + updated_at: number; + }; + type UserSubscribeLog = { id: number; user_id: number; @@ -1752,8 +1775,7 @@ declare namespace API { }; type UserTrafficData = { - user_id: number; - email: string; + sid: number; upload: number; download: number; }; diff --git a/apps/admin/services/admin/user.ts b/apps/admin/services/admin/user.ts index a50a014..2025c8e 100644 --- a/apps/admin/services/admin/user.ts +++ b/apps/admin/services/admin/user.ts @@ -291,6 +291,24 @@ export async function deleteUserSubscribe( }); } +/** Get user subcribe by id GET /v1/admin/user/subscribe/detail */ +export async function getUserSubscribeById( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.GetUserSubscribeByIdParams, + options?: { [key: string]: any }, +) { + return request( + '/v1/admin/user/subscribe/detail', + { + method: 'GET', + params: { + ...params, + }, + ...(options || {}), + }, + ); +} + /** Get user subcribe devices GET /v1/admin/user/subscribe/device */ export async function getUserSubscribeDevices( // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) diff --git a/apps/admin/services/common/typings.d.ts b/apps/admin/services/common/typings.d.ts index e1c5089..e9d6a86 100644 --- a/apps/admin/services/common/typings.d.ts +++ b/apps/admin/services/common/typings.d.ts @@ -142,7 +142,13 @@ declare namespace API { updated_at: number; }; + type Currency = { + currency_unit: string; + currency_symbol: string; + }; + type CurrencyConfig = { + access_key: string; currency_unit: string; currency_symbol: string; }; @@ -214,7 +220,7 @@ declare namespace API { verify: VeifyConfig; auth: AuthConfig; invite: InviteConfig; - currency: CurrencyConfig; + currency: Currency; subscribe: SubscribeConfig; verify_code: PubilcVerifyCodeConfig; oauth_methods: string[]; @@ -300,9 +306,11 @@ declare namespace API { }; type NodeStatus = { - online_users: OnlineUser[]; - status: ServerStatus; - last_at: number; + online: Record; + cpu: number; + mem: number; + disk: number; + updated_at: number; }; type OAthLoginRequest = { @@ -639,13 +647,6 @@ declare namespace API { updated_at: number; }; - type ServerStatus = { - cpu: number; - mem: number; - disk: number; - updated_at: number; - }; - type Shadowsocks = { method: string; port: number; diff --git a/apps/user/app/(main)/(user)/subscribe/page.tsx b/apps/user/app/(main)/(user)/subscribe/page.tsx index ff3bd9a..5011552 100644 --- a/apps/user/app/(main)/(user)/subscribe/page.tsx +++ b/apps/user/app/(main)/(user)/subscribe/page.tsx @@ -76,7 +76,7 @@ export default function Page() { return ( <> {description &&
  • {description}
  • } - {features.map( + {features?.map( ( feature: { icon: string; diff --git a/apps/user/components/main/product-showcase/content.tsx b/apps/user/components/main/product-showcase/content.tsx index 8f859a7..0258059 100644 --- a/apps/user/components/main/product-showcase/content.tsx +++ b/apps/user/components/main/product-showcase/content.tsx @@ -71,7 +71,7 @@ export function Content({ subscriptionData }: ProductShowcaseProps) { return ( <> {description &&
  • {description}
  • } - {features.map( + {features?.map( ( feature: { type: string; diff --git a/apps/user/services/common/typings.d.ts b/apps/user/services/common/typings.d.ts index e1c5089..e9d6a86 100644 --- a/apps/user/services/common/typings.d.ts +++ b/apps/user/services/common/typings.d.ts @@ -142,7 +142,13 @@ declare namespace API { updated_at: number; }; + type Currency = { + currency_unit: string; + currency_symbol: string; + }; + type CurrencyConfig = { + access_key: string; currency_unit: string; currency_symbol: string; }; @@ -214,7 +220,7 @@ declare namespace API { verify: VeifyConfig; auth: AuthConfig; invite: InviteConfig; - currency: CurrencyConfig; + currency: Currency; subscribe: SubscribeConfig; verify_code: PubilcVerifyCodeConfig; oauth_methods: string[]; @@ -300,9 +306,11 @@ declare namespace API { }; type NodeStatus = { - online_users: OnlineUser[]; - status: ServerStatus; - last_at: number; + online: Record; + cpu: number; + mem: number; + disk: number; + updated_at: number; }; type OAthLoginRequest = { @@ -639,13 +647,6 @@ declare namespace API { updated_at: number; }; - type ServerStatus = { - cpu: number; - mem: number; - disk: number; - updated_at: number; - }; - type Shadowsocks = { method: string; port: number; diff --git a/apps/user/services/user/typings.d.ts b/apps/user/services/user/typings.d.ts index 2b77d7c..ca33b82 100644 --- a/apps/user/services/user/typings.d.ts +++ b/apps/user/services/user/typings.d.ts @@ -160,6 +160,7 @@ declare namespace API { }; type CurrencyConfig = { + access_key: string; currency_unit: string; currency_symbol: string; }; @@ -331,9 +332,11 @@ declare namespace API { }; type NodeStatus = { - online_users: OnlineUser[]; - status: ServerStatus; - last_at: number; + online: Record; + cpu: number; + mem: number; + disk: number; + updated_at: number; }; type OnlineUser = { @@ -757,13 +760,6 @@ declare namespace API { updated_at: number; }; - type ServerStatus = { - cpu: number; - mem: number; - disk: number; - updated_at: number; - }; - type Shadowsocks = { method: string; port: number;