feat(api): Add an interface to obtain user subscription details, update related type definitions and localized text

This commit is contained in:
web@ppanel 2025-03-25 23:55:31 +07:00
parent 383638f702
commit cf5c39cfe5
34 changed files with 606 additions and 123 deletions

View File

@ -1,20 +1,19 @@
<a name="readme-top"></a>
# 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))
<a name="readme-top"></a>

View File

@ -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<string | null>(null);
const {
last_at,
online_users,
status: serverStatus,
} = status || {
online_users: [],
status: {
const { online, cpu, mem, disk, updated_at } = status || {
online: {},
cpu: 0,
mem: 0,
disk: 0,
updated_at: 0,
},
last_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 (
<TooltipProvider>
@ -52,45 +54,56 @@ export function NodeStatusCell({ status }: { status: API.NodeStatus }) {
<div className='flex flex-col space-y-1'>
<div className='flex justify-between'>
<span>CPU</span>
<span>{formatPercentage(serverStatus?.cpu ?? 0)}</span>
<span>{formatPercentage(cpu ?? 0)}</span>
</div>
<Progress value={serverStatus?.cpu ?? 0} className='h-2' max={100} />
<Progress value={cpu ?? 0} className='h-2' max={100} />
</div>
<div className='flex flex-col space-y-1'>
<div className='flex justify-between'>
<span>{t('memory')}</span>
<span>{formatPercentage(serverStatus?.mem ?? 0)}</span>
<span>{formatPercentage(mem ?? 0)}</span>
</div>
<Progress value={serverStatus?.mem ?? 0} className='h-2' max={100} />
<Progress value={mem ?? 0} className='h-2' max={100} />
</div>
<div className='flex flex-col space-y-1'>
<div className='flex justify-between'>
<span>{t('disk')}</span>
<span>{formatPercentage(serverStatus?.disk ?? 0)}</span>
<span>{formatPercentage(disk ?? 0)}</span>
</div>
<Progress value={serverStatus?.disk ?? 0} className='h-2' max={100} />
<Progress value={disk ?? 0} className='h-2' max={100} />
</div>
{isOnline && (
<div>
{t('lastUpdated')}: {formatDate(serverStatus?.updated_at ?? 0)}
{t('lastUpdated')}: {formatDate(updated_at ?? 0)}
</div>
)}
</div>
</TooltipTrigger>
{isOnline && onlineCount > 0 && (
<TooltipContent className='bg-muted text-foreground w-80'>
<div className='space-y-4'>
<div className='space-y-2'>
<h4 className='text-sm font-semibold'>{t('onlineUsers')}</h4>
<ScrollArea className='h-[400px] rounded-md border p-2'>
{online_users.map((user, index) => (
<div key={user.uid} className='py-1 text-xs'>
{user.ip} (UID: {user.uid})
</div>
<TooltipContent className='bg-card text-foreground w-96'>
<ScrollArea className='h-[540px] rounded-md border px-4 py-2'>
<h4 className='py-1 text-sm font-semibold'>{t('onlineUsers')}</h4>
<Accordion
type='single'
collapsible
className='w-full'
onValueChange={(value) => setOpenItem(value)}
>
{Object.entries(online).map(([uid, ips]) => (
<AccordionItem key={uid} value={uid}>
<AccordionTrigger>{`[UID: ${uid}] - ${ips[0]}`}</AccordionTrigger>
<AccordionContent>
<ul>
{ips.map((ip: string) => (
<li key={ip}>{ip}</li>
))}
</ul>
<UserSubscribeDetail id={Number(uid)} enabled={openItem === uid} />
</AccordionContent>
</AccordionItem>
))}
</Accordion>
</ScrollArea>
</div>
</div>
</TooltipContent>
)}
</Tooltip>

View File

@ -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 (
<div className='space-y-4'>
<div>
<h3 className='mb-2 text-sm font-medium'>{t('subscriptionInfo')}</h3>
<div className='bg-muted/30 rounded-lg p-3'>
<ul className='grid gap-3'>
<li className='flex items-center justify-between font-semibold'>
<span className='text-muted-foreground'>{t('subscriptionId')}</span>
<span>{data?.id || '--'}</span>
</li>
<li className='flex items-center justify-between'>
<span className='text-muted-foreground'>{t('subscriptionName')}</span>
<span>{data?.subscribe?.name || '--'}</span>
</li>
<li className='flex items-center justify-between'>
<span className='text-muted-foreground'>{t('token')}</span>
<div className='font-mono text-xs' title={data?.token || ''}>
{data?.token || '--'}
</div>
</li>
<li className='flex items-center justify-between'>
<span className='text-muted-foreground'>{t('trafficUsage')}</span>
<span>
{data
? totalTraffic === 0
? `${formatBytes(usedTraffic)} / ${t('unlimited')}`
: `${formatBytes(usedTraffic)} / ${formatBytes(totalTraffic)}`
: '--'}
</span>
</li>
<li className='flex items-center justify-between'>
<span className='text-muted-foreground'>{t('startTime')}</span>
<span>{data?.start_time ? formatDate(data.start_time) : '--'}</span>
</li>
<li className='flex items-center justify-between'>
<span className='text-muted-foreground'>{t('expireTime')}</span>
<span>{data?.expire_time ? formatDate(data.expire_time) : '--'}</span>
</li>
</ul>
</div>
</div>
<div>
<h3 className='mb-2 text-sm font-medium'>
{t('userInfo')}
{data?.user_id && (
<Button
variant='link'
size='sm'
className='text-primary ml-2 h-auto p-0 text-xs'
asChild
>
<Link href={`/dashboard/user/${data.user_id}`}>{t('viewDetails')}</Link>
</Button>
)}
</h3>
<ul className='grid gap-3'>
<li className='flex items-center justify-between font-semibold'>
<span className='text-muted-foreground'>{t('userId')}</span>
<span>{data?.user_id}</span>
</li>
<li className='flex items-center justify-between font-semibold'>
<span className='text-muted-foreground'>{t('balance')}</span>
<span>
<Display type='currency' value={data?.user.balance} />
</span>
</li>
<li className='flex items-center justify-between'>
<span className='text-muted-foreground'>{t('giftAmount')}</span>
<span>
<Display type='currency' value={data?.user?.gift_amount} />
</span>
</li>
<li className='flex items-center justify-between'>
<span className='text-muted-foreground'>{t('commission')}</span>
<span>
<Display type='currency' value={data?.user?.commission} />
</span>
</li>
<li className='flex items-center justify-between'>
<span className='text-muted-foreground'>{t('createdAt')}</span>
<span>{data?.user?.created_at && formatDate(data?.user?.created_at)}</span>
</li>
</ul>
</div>
</div>
);
}
export function UserDetail({ id }: { id: number }) {
const t = useTranslations('user');
const [shouldFetch, setShouldFetch] = useState(false);

View File

@ -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)}
/>
<ChartTooltip
trigger='hover'
content={
<ChartTooltipContent
label={true}
labelFormatter={(label) =>
dataType === 'nodes'
? `${t('nodes')}: ${label}`
: `${t('users')}: ${label}`
labelFormatter={(label, [payload]) =>
dataType === 'nodes' ? (
`${t('nodes')}: ${label}`
) : (
<>
<div className='w-80'>
<UserSubscribeDetail id={payload?.payload.name} enabled={true} />
</div>
<Separator className='my-2' />
<div>{`${t('users')}: ${label}`}</div>
</>
)
}
formatter={(value) => {
return formatBytes(Number(value) || 0);

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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": "مشاهده جزئیات"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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": "विवरण देखें"
}

View File

@ -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"
}

View File

@ -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": "詳細を見る"
}

View File

@ -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": "세부 정보 보기"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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": "Просмотреть детали"
}

View File

@ -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": "ดูรายละเอียด"
}

View File

@ -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"
}

View File

@ -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": "Переглянути деталі"
}

View File

@ -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"
}

View File

@ -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": "查看详情"
}

View File

@ -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": "查看詳情"
}

View File

@ -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<string, any>;
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;
};

View File

@ -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<API.Response & { data?: API.UserSubscribeDetail }>(
'/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默认没有生成对象)

View File

@ -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<string, any>;
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;

View File

@ -76,7 +76,7 @@ export default function Page() {
return (
<>
{description && <li className='text-muted-foreground'>{description}</li>}
{features.map(
{features?.map(
(
feature: {
icon: string;

View File

@ -71,7 +71,7 @@ export function Content({ subscriptionData }: ProductShowcaseProps) {
return (
<>
{description && <li className='text-muted-foreground'>{description}</li>}
{features.map(
{features?.map(
(
feature: {
type: string;

View File

@ -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<string, any>;
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;

View File

@ -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<string, any>;
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;