mirror of
https://github.com/perfect-panel/ppanel-web.git
synced 2026-02-15 04:41:10 -05:00
♻️ refactor: Add localization updates for log and server files across multiple languages
- Added new keys for "server", "subscribe", "detail", "pending", "sending", "sent", and "unknown" in log.json files for various languages. - Introduced a "type" object with transaction types (Recharge, Withdraw, Purchase, Refund, Reward, Commission) in log.json files for multiple languages. - Updated "traffic_ratio" to "Ratio" and added "transport" in servers.json for English localization. - Ensured consistency and accuracy in translations for all affected languages including German, English, Spanish, French, Russian, Chinese, and more.
This commit is contained in:
parent
351fffcc78
commit
2bcd4cf30c
@ -1,6 +1,8 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import { UserDetail } from '@/app/dashboard/user/user-detail';
|
import { UserDetail } from '@/app/dashboard/user/user-detail';
|
||||||
|
import { Display } from '@/components/display';
|
||||||
|
import { OrderLink } from '@/components/order-link';
|
||||||
import { ProTable } from '@/components/pro-table';
|
import { ProTable } from '@/components/pro-table';
|
||||||
import { filterBalanceLog } from '@/services/admin/log';
|
import { filterBalanceLog } from '@/services/admin/log';
|
||||||
import { formatDate } from '@/utils/common';
|
import { formatDate } from '@/utils/common';
|
||||||
@ -10,9 +12,19 @@ import { useSearchParams } from 'next/navigation';
|
|||||||
export default function BalanceLogPage() {
|
export default function BalanceLogPage() {
|
||||||
const t = useTranslations('log');
|
const t = useTranslations('log');
|
||||||
const sp = useSearchParams();
|
const sp = useSearchParams();
|
||||||
|
|
||||||
|
const today = new Date().toISOString().split('T')[0];
|
||||||
|
|
||||||
|
const getBalanceTypeText = (type: number) => {
|
||||||
|
const typeText = t(`type.${type}`);
|
||||||
|
if (typeText === `log.type.${type}`) {
|
||||||
|
return `${t('unknown')} (${type})`;
|
||||||
|
}
|
||||||
|
return typeText;
|
||||||
|
};
|
||||||
|
|
||||||
const initialFilters = {
|
const initialFilters = {
|
||||||
search: sp.get('search') || undefined,
|
date: sp.get('date') || today,
|
||||||
date: sp.get('date') || undefined,
|
|
||||||
user_id: sp.get('user_id') ? Number(sp.get('user_id')) : undefined,
|
user_id: sp.get('user_id') ? Number(sp.get('user_id')) : undefined,
|
||||||
};
|
};
|
||||||
return (
|
return (
|
||||||
@ -25,10 +37,26 @@ export default function BalanceLogPage() {
|
|||||||
header: t('column.user'),
|
header: t('column.user'),
|
||||||
cell: ({ row }) => <UserDetail id={Number(row.original.user_id)} />,
|
cell: ({ row }) => <UserDetail id={Number(row.original.user_id)} />,
|
||||||
},
|
},
|
||||||
{ accessorKey: 'amount', header: t('column.amount') },
|
{
|
||||||
{ accessorKey: 'order_id', header: t('column.orderId') },
|
accessorKey: 'amount',
|
||||||
{ accessorKey: 'balance', header: t('column.balance') },
|
header: t('column.amount'),
|
||||||
{ accessorKey: 'type', header: t('column.type') },
|
cell: ({ row }) => <Display type='currency' value={row.original.amount} />,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
accessorKey: 'order_id',
|
||||||
|
header: t('column.orderId'),
|
||||||
|
cell: ({ row }) => <OrderLink orderId={row.original.order_id} />,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
accessorKey: 'balance',
|
||||||
|
header: t('column.balance'),
|
||||||
|
cell: ({ row }) => <Display type='currency' value={row.original.balance} />,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
accessorKey: 'type',
|
||||||
|
header: t('column.type'),
|
||||||
|
cell: ({ row }) => getBalanceTypeText(row.original.type),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
accessorKey: 'timestamp',
|
accessorKey: 'timestamp',
|
||||||
header: t('column.time'),
|
header: t('column.time'),
|
||||||
@ -36,7 +64,6 @@ export default function BalanceLogPage() {
|
|||||||
},
|
},
|
||||||
]}
|
]}
|
||||||
params={[
|
params={[
|
||||||
{ key: 'search' },
|
|
||||||
{ key: 'date', type: 'date' },
|
{ key: 'date', type: 'date' },
|
||||||
{ key: 'user_id', placeholder: t('column.userId') },
|
{ key: 'user_id', placeholder: t('column.userId') },
|
||||||
]}
|
]}
|
||||||
@ -44,7 +71,6 @@ export default function BalanceLogPage() {
|
|||||||
const { data } = await filterBalanceLog({
|
const { data } = await filterBalanceLog({
|
||||||
page: pagination.page,
|
page: pagination.page,
|
||||||
size: pagination.size,
|
size: pagination.size,
|
||||||
search: filter?.search,
|
|
||||||
date: (filter as any)?.date,
|
date: (filter as any)?.date,
|
||||||
user_id: (filter as any)?.user_id,
|
user_id: (filter as any)?.user_id,
|
||||||
});
|
});
|
||||||
|
|||||||
@ -1,6 +1,8 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import { UserDetail } from '@/app/dashboard/user/user-detail';
|
import { UserDetail } from '@/app/dashboard/user/user-detail';
|
||||||
|
import { Display } from '@/components/display';
|
||||||
|
import { OrderLink } from '@/components/order-link';
|
||||||
import { ProTable } from '@/components/pro-table';
|
import { ProTable } from '@/components/pro-table';
|
||||||
import { filterCommissionLog } from '@/services/admin/log';
|
import { filterCommissionLog } from '@/services/admin/log';
|
||||||
import { formatDate } from '@/utils/common';
|
import { formatDate } from '@/utils/common';
|
||||||
@ -10,9 +12,19 @@ import { useSearchParams } from 'next/navigation';
|
|||||||
export default function CommissionLogPage() {
|
export default function CommissionLogPage() {
|
||||||
const t = useTranslations('log');
|
const t = useTranslations('log');
|
||||||
const sp = useSearchParams();
|
const sp = useSearchParams();
|
||||||
|
|
||||||
|
const today = new Date().toISOString().split('T')[0];
|
||||||
|
|
||||||
|
const getCommissionTypeText = (type: number) => {
|
||||||
|
const typeText = t(`type.${type}`);
|
||||||
|
if (typeText === `log.type.${type}`) {
|
||||||
|
return `${t('unknown')} (${type})`;
|
||||||
|
}
|
||||||
|
return typeText;
|
||||||
|
};
|
||||||
|
|
||||||
const initialFilters = {
|
const initialFilters = {
|
||||||
search: sp.get('search') || undefined,
|
date: sp.get('date') || today,
|
||||||
date: sp.get('date') || undefined,
|
|
||||||
user_id: sp.get('user_id') ? Number(sp.get('user_id')) : undefined,
|
user_id: sp.get('user_id') ? Number(sp.get('user_id')) : undefined,
|
||||||
};
|
};
|
||||||
return (
|
return (
|
||||||
@ -25,9 +37,21 @@ export default function CommissionLogPage() {
|
|||||||
header: t('column.user'),
|
header: t('column.user'),
|
||||||
cell: ({ row }) => <UserDetail id={Number(row.original.user_id)} />,
|
cell: ({ row }) => <UserDetail id={Number(row.original.user_id)} />,
|
||||||
},
|
},
|
||||||
{ accessorKey: 'amount', header: t('column.amount') },
|
{
|
||||||
{ accessorKey: 'order_no', header: t('column.orderNo') },
|
accessorKey: 'amount',
|
||||||
{ accessorKey: 'type', header: t('column.type') },
|
header: t('column.amount'),
|
||||||
|
cell: ({ row }) => <Display type='currency' value={row.original.amount} />,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
accessorKey: 'order_no',
|
||||||
|
header: t('column.orderNo'),
|
||||||
|
cell: ({ row }) => <OrderLink orderId={row.original.order_no} />,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
accessorKey: 'type',
|
||||||
|
header: t('column.type'),
|
||||||
|
cell: ({ row }) => getCommissionTypeText(row.original.type),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
accessorKey: 'timestamp',
|
accessorKey: 'timestamp',
|
||||||
header: t('column.time'),
|
header: t('column.time'),
|
||||||
@ -35,7 +59,6 @@ export default function CommissionLogPage() {
|
|||||||
},
|
},
|
||||||
]}
|
]}
|
||||||
params={[
|
params={[
|
||||||
{ key: 'search' },
|
|
||||||
{ key: 'date', type: 'date' },
|
{ key: 'date', type: 'date' },
|
||||||
{ key: 'user_id', placeholder: t('column.userId') },
|
{ key: 'user_id', placeholder: t('column.userId') },
|
||||||
]}
|
]}
|
||||||
@ -43,7 +66,6 @@ export default function CommissionLogPage() {
|
|||||||
const { data } = await filterCommissionLog({
|
const { data } = await filterCommissionLog({
|
||||||
page: pagination.page,
|
page: pagination.page,
|
||||||
size: pagination.size,
|
size: pagination.size,
|
||||||
search: filter?.search,
|
|
||||||
date: (filter as any)?.date,
|
date: (filter as any)?.date,
|
||||||
user_id: (filter as any)?.user_id,
|
user_id: (filter as any)?.user_id,
|
||||||
});
|
});
|
||||||
|
|||||||
@ -10,9 +10,12 @@ import { useSearchParams } from 'next/navigation';
|
|||||||
export default function EmailLogPage() {
|
export default function EmailLogPage() {
|
||||||
const t = useTranslations('log');
|
const t = useTranslations('log');
|
||||||
const sp = useSearchParams();
|
const sp = useSearchParams();
|
||||||
|
|
||||||
|
const today = new Date().toISOString().split('T')[0];
|
||||||
|
|
||||||
const initialFilters = {
|
const initialFilters = {
|
||||||
search: sp.get('search') || undefined,
|
search: sp.get('search') || undefined,
|
||||||
date: sp.get('date') || undefined,
|
date: sp.get('date') || today,
|
||||||
};
|
};
|
||||||
return (
|
return (
|
||||||
<ProTable<API.MessageLog, { search?: string }>
|
<ProTable<API.MessageLog, { search?: string }>
|
||||||
@ -20,11 +23,10 @@ export default function EmailLogPage() {
|
|||||||
initialFilters={initialFilters}
|
initialFilters={initialFilters}
|
||||||
columns={[
|
columns={[
|
||||||
{
|
{
|
||||||
accessorKey: 'id',
|
accessorKey: 'platform',
|
||||||
header: t('column.id'),
|
header: t('column.platform'),
|
||||||
cell: ({ row }) => <Badge>{row.getValue('id')}</Badge>,
|
cell: ({ row }) => <Badge>{row.getValue('platform')}</Badge>,
|
||||||
},
|
},
|
||||||
{ accessorKey: 'platform', header: t('column.platform') },
|
|
||||||
{ accessorKey: 'to', header: t('column.to') },
|
{ accessorKey: 'to', header: t('column.to') },
|
||||||
{ accessorKey: 'subject', header: t('column.subject') },
|
{ accessorKey: 'subject', header: t('column.subject') },
|
||||||
{
|
{
|
||||||
@ -36,7 +38,29 @@ export default function EmailLogPage() {
|
|||||||
</pre>
|
</pre>
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
{ accessorKey: 'status', header: t('column.status') },
|
{
|
||||||
|
accessorKey: 'status',
|
||||||
|
header: t('column.status'),
|
||||||
|
cell: ({ row }) => {
|
||||||
|
const status = row.original.status;
|
||||||
|
const getStatusVariant = (status: any) => {
|
||||||
|
if (status === 1) {
|
||||||
|
return 'default';
|
||||||
|
} else if (status === 0) {
|
||||||
|
return 'destructive';
|
||||||
|
}
|
||||||
|
return 'outline';
|
||||||
|
};
|
||||||
|
|
||||||
|
const getStatusText = (status: any) => {
|
||||||
|
if (status === 1) return t('sent');
|
||||||
|
if (status === 0) return t('failed');
|
||||||
|
return t('unknown');
|
||||||
|
};
|
||||||
|
|
||||||
|
return <Badge variant={getStatusVariant(status)}>{getStatusText(status)}</Badge>;
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
accessorKey: 'created_at',
|
accessorKey: 'created_at',
|
||||||
header: t('column.time'),
|
header: t('column.time'),
|
||||||
|
|||||||
@ -1,6 +1,8 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import { UserDetail } from '@/app/dashboard/user/user-detail';
|
import { UserDetail, UserSubscribeDetail } from '@/app/dashboard/user/user-detail';
|
||||||
|
import { Display } from '@/components/display';
|
||||||
|
import { OrderLink } from '@/components/order-link';
|
||||||
import { ProTable } from '@/components/pro-table';
|
import { ProTable } from '@/components/pro-table';
|
||||||
import { filterGiftLog } from '@/services/admin/log';
|
import { filterGiftLog } from '@/services/admin/log';
|
||||||
import { formatDate } from '@/utils/common';
|
import { formatDate } from '@/utils/common';
|
||||||
@ -10,9 +12,12 @@ import { useSearchParams } from 'next/navigation';
|
|||||||
export default function GiftLogPage() {
|
export default function GiftLogPage() {
|
||||||
const t = useTranslations('log');
|
const t = useTranslations('log');
|
||||||
const sp = useSearchParams();
|
const sp = useSearchParams();
|
||||||
|
|
||||||
|
// 获取今日日期作为默认值
|
||||||
|
const today = new Date().toISOString().split('T')[0];
|
||||||
|
|
||||||
const initialFilters = {
|
const initialFilters = {
|
||||||
search: sp.get('search') || undefined,
|
date: sp.get('date') || today,
|
||||||
date: sp.get('date') || undefined,
|
|
||||||
user_id: sp.get('user_id') ? Number(sp.get('user_id')) : undefined,
|
user_id: sp.get('user_id') ? Number(sp.get('user_id')) : undefined,
|
||||||
};
|
};
|
||||||
return (
|
return (
|
||||||
@ -25,10 +30,28 @@ export default function GiftLogPage() {
|
|||||||
header: t('column.user'),
|
header: t('column.user'),
|
||||||
cell: ({ row }) => <UserDetail id={Number(row.original.user_id)} />,
|
cell: ({ row }) => <UserDetail id={Number(row.original.user_id)} />,
|
||||||
},
|
},
|
||||||
{ accessorKey: 'subscribe_id', header: t('column.subscribeId') },
|
{
|
||||||
{ accessorKey: 'order_no', header: t('column.orderNo') },
|
accessorKey: 'subscribe_id',
|
||||||
{ accessorKey: 'amount', header: t('column.amount') },
|
header: t('column.subscribe'),
|
||||||
{ accessorKey: 'balance', header: t('column.balance') },
|
cell: ({ row }) => (
|
||||||
|
<UserSubscribeDetail id={Number(row.original.subscribe_id)} enabled hoverCard />
|
||||||
|
),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
accessorKey: 'order_no',
|
||||||
|
header: t('column.orderNo'),
|
||||||
|
cell: ({ row }) => <OrderLink orderId={row.original.order_no} />,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
accessorKey: 'amount',
|
||||||
|
header: t('column.amount'),
|
||||||
|
cell: ({ row }) => <Display type='currency' value={row.original.amount} />,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
accessorKey: 'balance',
|
||||||
|
header: t('column.balance'),
|
||||||
|
cell: ({ row }) => <Display type='currency' value={row.original.balance} />,
|
||||||
|
},
|
||||||
{ accessorKey: 'remark', header: t('column.remark') },
|
{ accessorKey: 'remark', header: t('column.remark') },
|
||||||
{
|
{
|
||||||
accessorKey: 'timestamp',
|
accessorKey: 'timestamp',
|
||||||
@ -37,7 +60,6 @@ export default function GiftLogPage() {
|
|||||||
},
|
},
|
||||||
]}
|
]}
|
||||||
params={[
|
params={[
|
||||||
{ key: 'search' },
|
|
||||||
{ key: 'date', type: 'date' },
|
{ key: 'date', type: 'date' },
|
||||||
{ key: 'user_id', placeholder: t('column.userId') },
|
{ key: 'user_id', placeholder: t('column.userId') },
|
||||||
]}
|
]}
|
||||||
@ -45,7 +67,6 @@ export default function GiftLogPage() {
|
|||||||
const { data } = await filterGiftLog({
|
const { data } = await filterGiftLog({
|
||||||
page: pagination.page,
|
page: pagination.page,
|
||||||
size: pagination.size,
|
size: pagination.size,
|
||||||
search: filter?.search,
|
|
||||||
date: (filter as any)?.date,
|
date: (filter as any)?.date,
|
||||||
user_id: (filter as any)?.user_id,
|
user_id: (filter as any)?.user_id,
|
||||||
});
|
});
|
||||||
|
|||||||
@ -6,19 +6,27 @@ import { ProTable } from '@/components/pro-table';
|
|||||||
import { filterLoginLog } from '@/services/admin/log';
|
import { filterLoginLog } from '@/services/admin/log';
|
||||||
import { formatDate } from '@/utils/common';
|
import { formatDate } from '@/utils/common';
|
||||||
import { Badge } from '@workspace/ui/components/badge';
|
import { Badge } from '@workspace/ui/components/badge';
|
||||||
|
import {
|
||||||
|
Tooltip,
|
||||||
|
TooltipContent,
|
||||||
|
TooltipProvider,
|
||||||
|
TooltipTrigger,
|
||||||
|
} from '@workspace/ui/components/tooltip';
|
||||||
import { useTranslations } from 'next-intl';
|
import { useTranslations } from 'next-intl';
|
||||||
import { useSearchParams } from 'next/navigation';
|
import { useSearchParams } from 'next/navigation';
|
||||||
|
|
||||||
export default function LoginLogPage() {
|
export default function LoginLogPage() {
|
||||||
const t = useTranslations('log');
|
const t = useTranslations('log');
|
||||||
const sp = useSearchParams();
|
const sp = useSearchParams();
|
||||||
|
|
||||||
|
const today = new Date().toISOString().split('T')[0];
|
||||||
|
|
||||||
const initialFilters = {
|
const initialFilters = {
|
||||||
search: sp.get('search') || undefined,
|
date: sp.get('date') || today,
|
||||||
date: sp.get('date') || undefined,
|
|
||||||
user_id: sp.get('user_id') ? Number(sp.get('user_id')) : undefined,
|
user_id: sp.get('user_id') ? Number(sp.get('user_id')) : undefined,
|
||||||
};
|
};
|
||||||
return (
|
return (
|
||||||
<ProTable<API.LoginLog, { search?: string }>
|
<ProTable<API.LoginLog, { date?: string; user_id?: number }>
|
||||||
header={{ title: t('title.login') }}
|
header={{ title: t('title.login') }}
|
||||||
initialFilters={initialFilters}
|
initialFilters={initialFilters}
|
||||||
columns={[
|
columns={[
|
||||||
@ -27,13 +35,35 @@ export default function LoginLogPage() {
|
|||||||
header: t('column.user'),
|
header: t('column.user'),
|
||||||
cell: ({ row }) => <UserDetail id={Number(row.original.user_id)} />,
|
cell: ({ row }) => <UserDetail id={Number(row.original.user_id)} />,
|
||||||
},
|
},
|
||||||
{ accessorKey: 'method', header: t('column.method') },
|
{
|
||||||
|
accessorKey: 'method',
|
||||||
|
header: t('column.method'),
|
||||||
|
cell: ({ row }) => <span className='capitalize'>{row.original.method}</span>,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
accessorKey: 'login_ip',
|
accessorKey: 'login_ip',
|
||||||
header: t('column.ip'),
|
header: t('column.ip'),
|
||||||
cell: ({ row }) => <IpLink ip={String((row.original as any).login_ip || '')} />,
|
cell: ({ row }) => <IpLink ip={String((row.original as any).login_ip || '')} />,
|
||||||
},
|
},
|
||||||
{ accessorKey: 'user_agent', header: t('column.userAgent') },
|
{
|
||||||
|
accessorKey: 'user_agent',
|
||||||
|
header: t('column.userAgent'),
|
||||||
|
cell: ({ row }) => {
|
||||||
|
const userAgent = String(row.original.user_agent || '');
|
||||||
|
return (
|
||||||
|
<TooltipProvider>
|
||||||
|
<Tooltip>
|
||||||
|
<TooltipTrigger asChild>
|
||||||
|
<div className='max-w-48 cursor-help truncate'>{userAgent}</div>
|
||||||
|
</TooltipTrigger>
|
||||||
|
<TooltipContent>
|
||||||
|
<p className='max-w-md break-words'>{userAgent}</p>
|
||||||
|
</TooltipContent>
|
||||||
|
</Tooltip>
|
||||||
|
</TooltipProvider>
|
||||||
|
);
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
accessorKey: 'success',
|
accessorKey: 'success',
|
||||||
header: t('column.success'),
|
header: t('column.success'),
|
||||||
@ -50,7 +80,6 @@ export default function LoginLogPage() {
|
|||||||
},
|
},
|
||||||
]}
|
]}
|
||||||
params={[
|
params={[
|
||||||
{ key: 'search' },
|
|
||||||
{ key: 'date', type: 'date' },
|
{ key: 'date', type: 'date' },
|
||||||
{ key: 'user_id', placeholder: t('column.userId') },
|
{ key: 'user_id', placeholder: t('column.userId') },
|
||||||
]}
|
]}
|
||||||
@ -58,7 +87,6 @@ export default function LoginLogPage() {
|
|||||||
const { data } = await filterLoginLog({
|
const { data } = await filterLoginLog({
|
||||||
page: pagination.page,
|
page: pagination.page,
|
||||||
size: pagination.size,
|
size: pagination.size,
|
||||||
search: filter?.search,
|
|
||||||
date: (filter as any)?.date,
|
date: (filter as any)?.date,
|
||||||
user_id: (filter as any)?.user_id,
|
user_id: (filter as any)?.user_id,
|
||||||
});
|
});
|
||||||
|
|||||||
@ -9,9 +9,12 @@ import { useSearchParams } from 'next/navigation';
|
|||||||
export default function MobileLogPage() {
|
export default function MobileLogPage() {
|
||||||
const t = useTranslations('log');
|
const t = useTranslations('log');
|
||||||
const sp = useSearchParams();
|
const sp = useSearchParams();
|
||||||
|
|
||||||
|
const today = new Date().toISOString().split('T')[0];
|
||||||
|
|
||||||
const initialFilters = {
|
const initialFilters = {
|
||||||
search: sp.get('search') || undefined,
|
search: sp.get('search') || undefined,
|
||||||
date: sp.get('date') || undefined,
|
date: sp.get('date') || today,
|
||||||
};
|
};
|
||||||
return (
|
return (
|
||||||
<ProTable<API.MessageLog, { search?: string }>
|
<ProTable<API.MessageLog, { search?: string }>
|
||||||
@ -19,11 +22,10 @@ export default function MobileLogPage() {
|
|||||||
initialFilters={initialFilters}
|
initialFilters={initialFilters}
|
||||||
columns={[
|
columns={[
|
||||||
{
|
{
|
||||||
accessorKey: 'id',
|
accessorKey: 'platform',
|
||||||
header: t('column.id'),
|
header: t('column.platform'),
|
||||||
cell: ({ row }) => <Badge>{row.getValue('id')}</Badge>,
|
cell: ({ row }) => <Badge>{row.getValue('platform')}</Badge>,
|
||||||
},
|
},
|
||||||
{ accessorKey: 'platform', header: t('column.platform') },
|
|
||||||
{ accessorKey: 'to', header: t('column.to') },
|
{ accessorKey: 'to', header: t('column.to') },
|
||||||
{ accessorKey: 'subject', header: t('column.subject') },
|
{ accessorKey: 'subject', header: t('column.subject') },
|
||||||
{
|
{
|
||||||
@ -35,7 +37,29 @@ export default function MobileLogPage() {
|
|||||||
</pre>
|
</pre>
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
{ accessorKey: 'status', header: t('column.status') },
|
{
|
||||||
|
accessorKey: 'status',
|
||||||
|
header: t('column.status'),
|
||||||
|
cell: ({ row }) => {
|
||||||
|
const status = row.original.status;
|
||||||
|
const getStatusVariant = (status: any) => {
|
||||||
|
if (status === 1) {
|
||||||
|
return 'default';
|
||||||
|
} else if (status === 0) {
|
||||||
|
return 'destructive';
|
||||||
|
}
|
||||||
|
return 'outline';
|
||||||
|
};
|
||||||
|
|
||||||
|
const getStatusText = (status: any) => {
|
||||||
|
if (status === 1) return t('sent');
|
||||||
|
if (status === 0) return t('failed');
|
||||||
|
return t('unknown');
|
||||||
|
};
|
||||||
|
|
||||||
|
return <Badge variant={getStatusVariant(status)}>{getStatusText(status)}</Badge>;
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
accessorKey: 'created_at',
|
accessorKey: 'created_at',
|
||||||
header: t('column.time'),
|
header: t('column.time'),
|
||||||
|
|||||||
@ -5,19 +5,27 @@ import { IpLink } from '@/components/ip-link';
|
|||||||
import { ProTable } from '@/components/pro-table';
|
import { ProTable } from '@/components/pro-table';
|
||||||
import { filterRegisterLog } from '@/services/admin/log';
|
import { filterRegisterLog } from '@/services/admin/log';
|
||||||
import { formatDate } from '@/utils/common';
|
import { formatDate } from '@/utils/common';
|
||||||
|
import {
|
||||||
|
Tooltip,
|
||||||
|
TooltipContent,
|
||||||
|
TooltipProvider,
|
||||||
|
TooltipTrigger,
|
||||||
|
} from '@workspace/ui/components/tooltip';
|
||||||
import { useTranslations } from 'next-intl';
|
import { useTranslations } from 'next-intl';
|
||||||
import { useSearchParams } from 'next/navigation';
|
import { useSearchParams } from 'next/navigation';
|
||||||
|
|
||||||
export default function RegisterLogPage() {
|
export default function RegisterLogPage() {
|
||||||
const t = useTranslations('log');
|
const t = useTranslations('log');
|
||||||
const sp = useSearchParams();
|
const sp = useSearchParams();
|
||||||
|
|
||||||
|
const today = new Date().toISOString().split('T')[0];
|
||||||
|
|
||||||
const initialFilters = {
|
const initialFilters = {
|
||||||
search: sp.get('search') || undefined,
|
date: sp.get('date') || today,
|
||||||
date: sp.get('date') || undefined,
|
|
||||||
user_id: sp.get('user_id') ? Number(sp.get('user_id')) : undefined,
|
user_id: sp.get('user_id') ? Number(sp.get('user_id')) : undefined,
|
||||||
};
|
};
|
||||||
return (
|
return (
|
||||||
<ProTable<API.RegisterLog, { search?: string }>
|
<ProTable<API.RegisterLog, { date?: string; user_id?: number }>
|
||||||
header={{ title: t('title.register') }}
|
header={{ title: t('title.register') }}
|
||||||
initialFilters={initialFilters}
|
initialFilters={initialFilters}
|
||||||
columns={[
|
columns={[
|
||||||
@ -26,14 +34,36 @@ export default function RegisterLogPage() {
|
|||||||
header: t('column.user'),
|
header: t('column.user'),
|
||||||
cell: ({ row }) => <UserDetail id={Number(row.original.user_id)} />,
|
cell: ({ row }) => <UserDetail id={Number(row.original.user_id)} />,
|
||||||
},
|
},
|
||||||
{ accessorKey: 'auth_method', header: t('column.method') },
|
{
|
||||||
|
accessorKey: 'auth_method',
|
||||||
|
header: t('column.method'),
|
||||||
|
cell: ({ row }) => <span className='capitalize'>{row.original.auth_method}</span>,
|
||||||
|
},
|
||||||
{ accessorKey: 'identifier', header: t('column.identifier') },
|
{ accessorKey: 'identifier', header: t('column.identifier') },
|
||||||
{
|
{
|
||||||
accessorKey: 'register_ip',
|
accessorKey: 'register_ip',
|
||||||
header: t('column.ip'),
|
header: t('column.ip'),
|
||||||
cell: ({ row }) => <IpLink ip={String((row.original as any).register_ip || '')} />,
|
cell: ({ row }) => <IpLink ip={String((row.original as any).register_ip || '')} />,
|
||||||
},
|
},
|
||||||
{ accessorKey: 'user_agent', header: t('column.userAgent') },
|
{
|
||||||
|
accessorKey: 'user_agent',
|
||||||
|
header: t('column.userAgent'),
|
||||||
|
cell: ({ row }) => {
|
||||||
|
const userAgent = String(row.original.user_agent || '');
|
||||||
|
return (
|
||||||
|
<TooltipProvider>
|
||||||
|
<Tooltip>
|
||||||
|
<TooltipTrigger asChild>
|
||||||
|
<div className='max-w-48 cursor-help truncate'>{userAgent}</div>
|
||||||
|
</TooltipTrigger>
|
||||||
|
<TooltipContent>
|
||||||
|
<p className='max-w-md break-words'>{userAgent}</p>
|
||||||
|
</TooltipContent>
|
||||||
|
</Tooltip>
|
||||||
|
</TooltipProvider>
|
||||||
|
);
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
accessorKey: 'timestamp',
|
accessorKey: 'timestamp',
|
||||||
header: t('column.time'),
|
header: t('column.time'),
|
||||||
@ -41,7 +71,6 @@ export default function RegisterLogPage() {
|
|||||||
},
|
},
|
||||||
]}
|
]}
|
||||||
params={[
|
params={[
|
||||||
{ key: 'search' },
|
|
||||||
{ key: 'date', type: 'date' },
|
{ key: 'date', type: 'date' },
|
||||||
{ key: 'user_id', placeholder: t('column.userId') },
|
{ key: 'user_id', placeholder: t('column.userId') },
|
||||||
]}
|
]}
|
||||||
@ -49,7 +78,6 @@ export default function RegisterLogPage() {
|
|||||||
const { data } = await filterRegisterLog({
|
const { data } = await filterRegisterLog({
|
||||||
page: pagination.page,
|
page: pagination.page,
|
||||||
size: pagination.size,
|
size: pagination.size,
|
||||||
search: filter?.search,
|
|
||||||
date: (filter as any)?.date,
|
date: (filter as any)?.date,
|
||||||
user_id: (filter as any)?.user_id,
|
user_id: (filter as any)?.user_id,
|
||||||
});
|
});
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import { UserDetail } from '@/app/dashboard/user/user-detail';
|
import { UserDetail, UserSubscribeDetail } from '@/app/dashboard/user/user-detail';
|
||||||
|
import { OrderLink } from '@/components/order-link';
|
||||||
import { ProTable } from '@/components/pro-table';
|
import { ProTable } from '@/components/pro-table';
|
||||||
import { filterResetSubscribeLog } from '@/services/admin/log';
|
import { filterResetSubscribeLog } from '@/services/admin/log';
|
||||||
import { formatDate } from '@/utils/common';
|
import { formatDate } from '@/utils/common';
|
||||||
@ -10,15 +11,17 @@ import { useSearchParams } from 'next/navigation';
|
|||||||
export default function ResetSubscribeLogPage() {
|
export default function ResetSubscribeLogPage() {
|
||||||
const t = useTranslations('log');
|
const t = useTranslations('log');
|
||||||
const sp = useSearchParams();
|
const sp = useSearchParams();
|
||||||
|
|
||||||
|
const today = new Date().toISOString().split('T')[0];
|
||||||
|
|
||||||
const initialFilters = {
|
const initialFilters = {
|
||||||
search: sp.get('search') || undefined,
|
date: sp.get('date') || today,
|
||||||
date: sp.get('date') || undefined,
|
|
||||||
user_subscribe_id: sp.get('user_subscribe_id')
|
user_subscribe_id: sp.get('user_subscribe_id')
|
||||||
? Number(sp.get('user_subscribe_id'))
|
? Number(sp.get('user_subscribe_id'))
|
||||||
: undefined,
|
: undefined,
|
||||||
};
|
};
|
||||||
return (
|
return (
|
||||||
<ProTable<API.ResetSubscribeLog, { search?: string }>
|
<ProTable<API.ResetSubscribeLog, { date?: string; user_subscribe_id?: number }>
|
||||||
header={{ title: t('title.resetSubscribe') }}
|
header={{ title: t('title.resetSubscribe') }}
|
||||||
initialFilters={initialFilters}
|
initialFilters={initialFilters}
|
||||||
columns={[
|
columns={[
|
||||||
@ -27,9 +30,19 @@ export default function ResetSubscribeLogPage() {
|
|||||||
header: t('column.user'),
|
header: t('column.user'),
|
||||||
cell: ({ row }) => <UserDetail id={Number(row.original.user_id)} />,
|
cell: ({ row }) => <UserDetail id={Number(row.original.user_id)} />,
|
||||||
},
|
},
|
||||||
{ accessorKey: 'user_subscribe_id', header: t('column.subscribeId') },
|
{
|
||||||
|
accessorKey: 'user_subscribe_id',
|
||||||
|
header: t('column.subscribeId'),
|
||||||
|
cell: ({ row }) => (
|
||||||
|
<UserSubscribeDetail id={Number(row.original.user_subscribe_id)} enabled hoverCard />
|
||||||
|
),
|
||||||
|
},
|
||||||
{ accessorKey: 'type', header: t('column.type') },
|
{ accessorKey: 'type', header: t('column.type') },
|
||||||
{ accessorKey: 'order_no', header: t('column.orderNo') },
|
{
|
||||||
|
accessorKey: 'order_no',
|
||||||
|
header: t('column.orderNo'),
|
||||||
|
cell: ({ row }) => <OrderLink orderId={row.original.order_no} />,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
accessorKey: 'timestamp',
|
accessorKey: 'timestamp',
|
||||||
header: t('column.time'),
|
header: t('column.time'),
|
||||||
@ -37,7 +50,6 @@ export default function ResetSubscribeLogPage() {
|
|||||||
},
|
},
|
||||||
]}
|
]}
|
||||||
params={[
|
params={[
|
||||||
{ key: 'search' },
|
|
||||||
{ key: 'date', type: 'date' },
|
{ key: 'date', type: 'date' },
|
||||||
{ key: 'user_subscribe_id', placeholder: t('column.subscribeId') },
|
{ key: 'user_subscribe_id', placeholder: t('column.subscribeId') },
|
||||||
]}
|
]}
|
||||||
@ -45,7 +57,6 @@ export default function ResetSubscribeLogPage() {
|
|||||||
const { data } = await filterResetSubscribeLog({
|
const { data } = await filterResetSubscribeLog({
|
||||||
page: pagination.page,
|
page: pagination.page,
|
||||||
size: pagination.size,
|
size: pagination.size,
|
||||||
search: filter?.search,
|
|
||||||
date: (filter as any)?.date,
|
date: (filter as any)?.date,
|
||||||
user_subscribe_id: (filter as any)?.user_subscribe_id,
|
user_subscribe_id: (filter as any)?.user_subscribe_id,
|
||||||
});
|
});
|
||||||
|
|||||||
@ -2,24 +2,60 @@
|
|||||||
|
|
||||||
import { ProTable } from '@/components/pro-table';
|
import { ProTable } from '@/components/pro-table';
|
||||||
import { filterServerTrafficLog } from '@/services/admin/log';
|
import { filterServerTrafficLog } from '@/services/admin/log';
|
||||||
|
import { filterServerList } from '@/services/admin/server';
|
||||||
|
import { useQuery } from '@tanstack/react-query';
|
||||||
|
import { Button } from '@workspace/ui/components/button';
|
||||||
import { formatBytes } from '@workspace/ui/utils';
|
import { formatBytes } from '@workspace/ui/utils';
|
||||||
import { useTranslations } from 'next-intl';
|
import { useTranslations } from 'next-intl';
|
||||||
|
import Link from 'next/link';
|
||||||
import { useSearchParams } from 'next/navigation';
|
import { useSearchParams } from 'next/navigation';
|
||||||
|
|
||||||
export default function ServerTrafficLogPage() {
|
export default function ServerTrafficLogPage() {
|
||||||
const t = useTranslations('log');
|
const t = useTranslations('log');
|
||||||
const sp = useSearchParams();
|
const sp = useSearchParams();
|
||||||
|
|
||||||
|
const today = new Date().toISOString().split('T')[0];
|
||||||
|
|
||||||
|
const { data: servers = [] } = useQuery({
|
||||||
|
queryKey: ['filterServerListAll'],
|
||||||
|
queryFn: async () => {
|
||||||
|
const { data } = await filterServerList({ page: 1, size: 999999999 });
|
||||||
|
return data?.data?.list || [];
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const getServerName = (id?: number) =>
|
||||||
|
id ? (servers.find((s) => s.id === id)?.name ?? `Server ${id}`) : 'Unknown';
|
||||||
|
|
||||||
const initialFilters = {
|
const initialFilters = {
|
||||||
search: sp.get('search') || undefined,
|
date: sp.get('date') || today,
|
||||||
date: sp.get('date') || undefined,
|
|
||||||
server_id: sp.get('server_id') ? Number(sp.get('server_id')) : undefined,
|
server_id: sp.get('server_id') ? Number(sp.get('server_id')) : undefined,
|
||||||
};
|
};
|
||||||
return (
|
return (
|
||||||
<ProTable<API.ServerTrafficLog, { search?: string }>
|
<ProTable<API.ServerTrafficLog, { date?: string; server_id?: number }>
|
||||||
header={{ title: t('title.serverTraffic') }}
|
header={{ title: t('title.serverTraffic') }}
|
||||||
initialFilters={initialFilters}
|
initialFilters={initialFilters}
|
||||||
|
actions={{
|
||||||
|
render: (row) => [
|
||||||
|
<Button key='detail' asChild>
|
||||||
|
<Link
|
||||||
|
href={`/dashboard/log/traffic-details?date=${row.date}&server_id=${row.server_id}`}
|
||||||
|
>
|
||||||
|
{t('detail')}
|
||||||
|
</Link>
|
||||||
|
</Button>,
|
||||||
|
],
|
||||||
|
}}
|
||||||
columns={[
|
columns={[
|
||||||
{ accessorKey: 'server_id', header: t('column.serverId') },
|
{
|
||||||
|
accessorKey: 'server_id',
|
||||||
|
header: t('column.server'),
|
||||||
|
cell: ({ row }) => (
|
||||||
|
<span>
|
||||||
|
{getServerName(row.original.server_id)} ({row.original.server_id})
|
||||||
|
</span>
|
||||||
|
),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
accessorKey: 'upload',
|
accessorKey: 'upload',
|
||||||
header: t('column.upload'),
|
header: t('column.upload'),
|
||||||
@ -38,7 +74,6 @@ export default function ServerTrafficLogPage() {
|
|||||||
{ accessorKey: 'date', header: t('column.date') },
|
{ accessorKey: 'date', header: t('column.date') },
|
||||||
]}
|
]}
|
||||||
params={[
|
params={[
|
||||||
{ key: 'search' },
|
|
||||||
{ key: 'date', type: 'date' },
|
{ key: 'date', type: 'date' },
|
||||||
{ key: 'server_id', placeholder: t('column.serverId') },
|
{ key: 'server_id', placeholder: t('column.serverId') },
|
||||||
]}
|
]}
|
||||||
@ -46,7 +81,6 @@ export default function ServerTrafficLogPage() {
|
|||||||
const { data } = await filterServerTrafficLog({
|
const { data } = await filterServerTrafficLog({
|
||||||
page: pagination.page,
|
page: pagination.page,
|
||||||
size: pagination.size,
|
size: pagination.size,
|
||||||
search: filter?.search,
|
|
||||||
date: (filter as any)?.date,
|
date: (filter as any)?.date,
|
||||||
server_id: (filter as any)?.server_id,
|
server_id: (filter as any)?.server_id,
|
||||||
});
|
});
|
||||||
|
|||||||
@ -1,34 +1,59 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import { UserDetail } from '@/app/dashboard/user/user-detail';
|
import { UserDetail, UserSubscribeDetail } from '@/app/dashboard/user/user-detail';
|
||||||
import { ProTable } from '@/components/pro-table';
|
import { ProTable } from '@/components/pro-table';
|
||||||
import { filterUserSubscribeTrafficLog } from '@/services/admin/log';
|
import { filterUserSubscribeTrafficLog } from '@/services/admin/log';
|
||||||
|
import { Button } from '@workspace/ui/components/button';
|
||||||
import { formatBytes } from '@workspace/ui/utils';
|
import { formatBytes } from '@workspace/ui/utils';
|
||||||
import { useTranslations } from 'next-intl';
|
import { useTranslations } from 'next-intl';
|
||||||
|
import Link from 'next/link';
|
||||||
import { useSearchParams } from 'next/navigation';
|
import { useSearchParams } from 'next/navigation';
|
||||||
|
|
||||||
export default function SubscribeTrafficLogPage() {
|
export default function SubscribeTrafficLogPage() {
|
||||||
const t = useTranslations('log');
|
const t = useTranslations('log');
|
||||||
const sp = useSearchParams();
|
const sp = useSearchParams();
|
||||||
|
|
||||||
|
// 获取今日日期作为默认值
|
||||||
|
const today = new Date().toISOString().split('T')[0];
|
||||||
|
|
||||||
const initialFilters = {
|
const initialFilters = {
|
||||||
search: sp.get('search') || undefined,
|
date: sp.get('date') || today,
|
||||||
date: sp.get('date') || undefined,
|
|
||||||
user_id: sp.get('user_id') ? Number(sp.get('user_id')) : undefined,
|
user_id: sp.get('user_id') ? Number(sp.get('user_id')) : undefined,
|
||||||
user_subscribe_id: sp.get('user_subscribe_id')
|
user_subscribe_id: sp.get('user_subscribe_id')
|
||||||
? Number(sp.get('user_subscribe_id'))
|
? Number(sp.get('user_subscribe_id'))
|
||||||
: undefined,
|
: undefined,
|
||||||
};
|
};
|
||||||
return (
|
return (
|
||||||
<ProTable<API.UserSubscribeTrafficLog, { search?: string }>
|
<ProTable<
|
||||||
|
API.UserSubscribeTrafficLog,
|
||||||
|
{ date?: string; user_id?: number; user_subscribe_id?: number }
|
||||||
|
>
|
||||||
header={{ title: t('title.subscribeTraffic') }}
|
header={{ title: t('title.subscribeTraffic') }}
|
||||||
initialFilters={initialFilters}
|
initialFilters={initialFilters}
|
||||||
|
actions={{
|
||||||
|
render: (row) => [
|
||||||
|
<Button key='detail' asChild>
|
||||||
|
<Link
|
||||||
|
href={`/dashboard/log/traffic-details?date=${row.date}&user_id=${row.user_id}&subscribe_id=${row.subscribe_id}`}
|
||||||
|
>
|
||||||
|
{t('detail')}
|
||||||
|
</Link>
|
||||||
|
</Button>,
|
||||||
|
],
|
||||||
|
}}
|
||||||
columns={[
|
columns={[
|
||||||
{
|
{
|
||||||
accessorKey: 'user',
|
accessorKey: 'user',
|
||||||
header: t('column.user'),
|
header: t('column.user'),
|
||||||
cell: ({ row }) => <UserDetail id={Number(row.original.user_id)} />,
|
cell: ({ row }) => <UserDetail id={Number(row.original.user_id)} />,
|
||||||
},
|
},
|
||||||
{ accessorKey: 'subscribe_id', header: t('column.subscribeId') },
|
{
|
||||||
|
accessorKey: 'subscribe_id',
|
||||||
|
header: t('column.subscribe'),
|
||||||
|
cell: ({ row }) => (
|
||||||
|
<UserSubscribeDetail id={Number(row.original.subscribe_id)} enabled hoverCard />
|
||||||
|
),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
accessorKey: 'upload',
|
accessorKey: 'upload',
|
||||||
header: t('column.upload'),
|
header: t('column.upload'),
|
||||||
@ -50,7 +75,6 @@ export default function SubscribeTrafficLogPage() {
|
|||||||
},
|
},
|
||||||
]}
|
]}
|
||||||
params={[
|
params={[
|
||||||
{ key: 'search' },
|
|
||||||
{ key: 'date', type: 'date' },
|
{ key: 'date', type: 'date' },
|
||||||
{ key: 'user_id', placeholder: t('column.userId') },
|
{ key: 'user_id', placeholder: t('column.userId') },
|
||||||
{ key: 'user_subscribe_id', placeholder: t('column.subscribeId') },
|
{ key: 'user_subscribe_id', placeholder: t('column.subscribeId') },
|
||||||
@ -59,7 +83,6 @@ export default function SubscribeTrafficLogPage() {
|
|||||||
const { data } = await filterUserSubscribeTrafficLog({
|
const { data } = await filterUserSubscribeTrafficLog({
|
||||||
page: pagination.page,
|
page: pagination.page,
|
||||||
size: pagination.size,
|
size: pagination.size,
|
||||||
search: filter?.search,
|
|
||||||
date: (filter as any)?.date,
|
date: (filter as any)?.date,
|
||||||
user_id: (filter as any)?.user_id,
|
user_id: (filter as any)?.user_id,
|
||||||
user_subscribe_id: (filter as any)?.user_subscribe_id,
|
user_subscribe_id: (filter as any)?.user_subscribe_id,
|
||||||
|
|||||||
@ -1,23 +1,31 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import { UserDetail } from '@/app/dashboard/user/user-detail';
|
import { UserDetail, UserSubscribeDetail } from '@/app/dashboard/user/user-detail';
|
||||||
import { IpLink } from '@/components/ip-link';
|
import { IpLink } from '@/components/ip-link';
|
||||||
import { ProTable } from '@/components/pro-table';
|
import { ProTable } from '@/components/pro-table';
|
||||||
import { filterSubscribeLog } from '@/services/admin/log';
|
import { filterSubscribeLog } from '@/services/admin/log';
|
||||||
import { formatDate } from '@/utils/common';
|
import { formatDate } from '@/utils/common';
|
||||||
|
import {
|
||||||
|
Tooltip,
|
||||||
|
TooltipContent,
|
||||||
|
TooltipProvider,
|
||||||
|
TooltipTrigger,
|
||||||
|
} from '@workspace/ui/components/tooltip';
|
||||||
import { useTranslations } from 'next-intl';
|
import { useTranslations } from 'next-intl';
|
||||||
import { useSearchParams } from 'next/navigation';
|
import { useSearchParams } from 'next/navigation';
|
||||||
|
|
||||||
export default function SubscribeLogPage() {
|
export default function SubscribeLogPage() {
|
||||||
const t = useTranslations('log');
|
const t = useTranslations('log');
|
||||||
const sp = useSearchParams();
|
const sp = useSearchParams();
|
||||||
|
|
||||||
|
const today = new Date().toISOString().split('T')[0];
|
||||||
|
|
||||||
const initialFilters = {
|
const initialFilters = {
|
||||||
search: sp.get('search') || undefined,
|
date: sp.get('date') || today,
|
||||||
date: sp.get('date') || undefined,
|
|
||||||
user_id: sp.get('user_id') ? Number(sp.get('user_id')) : undefined,
|
user_id: sp.get('user_id') ? Number(sp.get('user_id')) : undefined,
|
||||||
};
|
};
|
||||||
return (
|
return (
|
||||||
<ProTable<API.SubscribeLog, { search?: string }>
|
<ProTable<API.SubscribeLog, { date?: string; user_id?: number }>
|
||||||
header={{ title: t('title.subscribe') }}
|
header={{ title: t('title.subscribe') }}
|
||||||
initialFilters={initialFilters}
|
initialFilters={initialFilters}
|
||||||
columns={[
|
columns={[
|
||||||
@ -26,14 +34,37 @@ export default function SubscribeLogPage() {
|
|||||||
header: t('column.user'),
|
header: t('column.user'),
|
||||||
cell: ({ row }) => <UserDetail id={Number(row.original.user_id)} />,
|
cell: ({ row }) => <UserDetail id={Number(row.original.user_id)} />,
|
||||||
},
|
},
|
||||||
{ accessorKey: 'user_subscribe_id', header: t('column.subscribeId') },
|
{
|
||||||
{ accessorKey: 'token', header: t('column.token') },
|
accessorKey: 'user_subscribe_id',
|
||||||
|
header: t('column.subscribe'),
|
||||||
|
cell: ({ row }) => (
|
||||||
|
<UserSubscribeDetail id={Number(row.original.user_subscribe_id)} enabled hoverCard />
|
||||||
|
),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
accessorKey: 'client_ip',
|
accessorKey: 'client_ip',
|
||||||
header: t('column.ip'),
|
header: t('column.ip'),
|
||||||
cell: ({ row }) => <IpLink ip={String((row.original as any).client_ip || '')} />,
|
cell: ({ row }) => <IpLink ip={String((row.original as any).client_ip || '')} />,
|
||||||
},
|
},
|
||||||
{ accessorKey: 'user_agent', header: t('column.userAgent') },
|
{
|
||||||
|
accessorKey: 'user_agent',
|
||||||
|
header: t('column.userAgent'),
|
||||||
|
cell: ({ row }) => {
|
||||||
|
const userAgent = String(row.original.user_agent || '');
|
||||||
|
return (
|
||||||
|
<TooltipProvider>
|
||||||
|
<Tooltip>
|
||||||
|
<TooltipTrigger asChild>
|
||||||
|
<div className='max-w-48 cursor-help truncate'>{userAgent}</div>
|
||||||
|
</TooltipTrigger>
|
||||||
|
<TooltipContent>
|
||||||
|
<p className='max-w-md break-words'>{userAgent}</p>
|
||||||
|
</TooltipContent>
|
||||||
|
</Tooltip>
|
||||||
|
</TooltipProvider>
|
||||||
|
);
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
accessorKey: 'timestamp',
|
accessorKey: 'timestamp',
|
||||||
header: t('column.time'),
|
header: t('column.time'),
|
||||||
@ -41,7 +72,6 @@ export default function SubscribeLogPage() {
|
|||||||
},
|
},
|
||||||
]}
|
]}
|
||||||
params={[
|
params={[
|
||||||
{ key: 'search' },
|
|
||||||
{ key: 'date', type: 'date' },
|
{ key: 'date', type: 'date' },
|
||||||
{ key: 'user_id', placeholder: t('column.userId') },
|
{ key: 'user_id', placeholder: t('column.userId') },
|
||||||
]}
|
]}
|
||||||
@ -49,7 +79,6 @@ export default function SubscribeLogPage() {
|
|||||||
const { data } = await filterSubscribeLog({
|
const { data } = await filterSubscribeLog({
|
||||||
page: pagination.page,
|
page: pagination.page,
|
||||||
size: pagination.size,
|
size: pagination.size,
|
||||||
search: filter?.search,
|
|
||||||
date: (filter as any)?.date,
|
date: (filter as any)?.date,
|
||||||
user_id: (filter as any)?.user_id,
|
user_id: (filter as any)?.user_id,
|
||||||
});
|
});
|
||||||
|
|||||||
@ -1,9 +1,11 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import { UserDetail } from '@/app/dashboard/user/user-detail';
|
import { UserDetail, UserSubscribeDetail } from '@/app/dashboard/user/user-detail';
|
||||||
import { ProTable } from '@/components/pro-table';
|
import { ProTable } from '@/components/pro-table';
|
||||||
import { filterTrafficLogDetails } from '@/services/admin/log';
|
import { filterTrafficLogDetails } from '@/services/admin/log';
|
||||||
|
import { filterServerList } from '@/services/admin/server';
|
||||||
import { formatDate } from '@/utils/common';
|
import { formatDate } from '@/utils/common';
|
||||||
|
import { useQuery } from '@tanstack/react-query';
|
||||||
import { formatBytes } from '@workspace/ui/utils';
|
import { formatBytes } from '@workspace/ui/utils';
|
||||||
import { useTranslations } from 'next-intl';
|
import { useTranslations } from 'next-intl';
|
||||||
import { useSearchParams } from 'next/navigation';
|
import { useSearchParams } from 'next/navigation';
|
||||||
@ -11,9 +13,22 @@ import { useSearchParams } from 'next/navigation';
|
|||||||
export default function TrafficDetailsPage() {
|
export default function TrafficDetailsPage() {
|
||||||
const t = useTranslations('log');
|
const t = useTranslations('log');
|
||||||
const sp = useSearchParams();
|
const sp = useSearchParams();
|
||||||
|
|
||||||
|
const today = new Date().toISOString().split('T')[0];
|
||||||
|
|
||||||
|
const { data: servers = [] } = useQuery({
|
||||||
|
queryKey: ['filterServerListAll'],
|
||||||
|
queryFn: async () => {
|
||||||
|
const { data } = await filterServerList({ page: 1, size: 999999999 });
|
||||||
|
return data?.data?.list || [];
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const getServerName = (id?: number) =>
|
||||||
|
id ? (servers.find((s) => s.id === id)?.name ?? `Server ${id}`) : 'Unknown';
|
||||||
|
|
||||||
const initialFilters = {
|
const initialFilters = {
|
||||||
search: sp.get('search') || undefined,
|
date: sp.get('date') || today,
|
||||||
date: sp.get('date') || undefined,
|
|
||||||
server_id: sp.get('server_id') ? Number(sp.get('server_id')) : undefined,
|
server_id: sp.get('server_id') ? Number(sp.get('server_id')) : undefined,
|
||||||
user_id: sp.get('user_id') ? Number(sp.get('user_id')) : undefined,
|
user_id: sp.get('user_id') ? Number(sp.get('user_id')) : undefined,
|
||||||
subscribe_id: sp.get('subscribe_id') ? Number(sp.get('subscribe_id')) : undefined,
|
subscribe_id: sp.get('subscribe_id') ? Number(sp.get('subscribe_id')) : undefined,
|
||||||
@ -23,13 +38,27 @@ export default function TrafficDetailsPage() {
|
|||||||
header={{ title: t('title.trafficDetails') }}
|
header={{ title: t('title.trafficDetails') }}
|
||||||
initialFilters={initialFilters}
|
initialFilters={initialFilters}
|
||||||
columns={[
|
columns={[
|
||||||
{ accessorKey: 'server_id', header: t('column.serverId') },
|
{
|
||||||
|
accessorKey: 'server_id',
|
||||||
|
header: t('column.server'),
|
||||||
|
cell: ({ row }) => (
|
||||||
|
<span>
|
||||||
|
{getServerName(row.original.server_id)} ({row.original.server_id})
|
||||||
|
</span>
|
||||||
|
),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
accessorKey: 'user_id',
|
accessorKey: 'user_id',
|
||||||
header: t('column.userId'),
|
header: t('column.user'),
|
||||||
cell: ({ row }) => <UserDetail id={Number(row.original.user_id)} />,
|
cell: ({ row }) => <UserDetail id={Number(row.original.user_id)} />,
|
||||||
},
|
},
|
||||||
{ accessorKey: 'subscribe_id', header: t('column.subscribeId') },
|
{
|
||||||
|
accessorKey: 'subscribe_id',
|
||||||
|
header: t('column.subscribe'),
|
||||||
|
cell: ({ row }) => (
|
||||||
|
<UserSubscribeDetail id={Number(row.original.subscribe_id)} enabled hoverCard />
|
||||||
|
),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
accessorKey: 'upload',
|
accessorKey: 'upload',
|
||||||
header: t('column.upload'),
|
header: t('column.upload'),
|
||||||
@ -47,7 +76,6 @@ export default function TrafficDetailsPage() {
|
|||||||
},
|
},
|
||||||
]}
|
]}
|
||||||
params={[
|
params={[
|
||||||
{ key: 'search' },
|
|
||||||
{ key: 'date', type: 'date' },
|
{ key: 'date', type: 'date' },
|
||||||
{ key: 'server_id', placeholder: t('column.serverId') },
|
{ key: 'server_id', placeholder: t('column.serverId') },
|
||||||
{ key: 'user_id', placeholder: t('column.userId') },
|
{ key: 'user_id', placeholder: t('column.userId') },
|
||||||
@ -57,7 +85,6 @@ export default function TrafficDetailsPage() {
|
|||||||
const { data } = await filterTrafficLogDetails({
|
const { data } = await filterTrafficLogDetails({
|
||||||
page: pagination.page,
|
page: pagination.page,
|
||||||
size: pagination.size,
|
size: pagination.size,
|
||||||
search: (filter as any)?.search,
|
|
||||||
date: (filter as any)?.date,
|
date: (filter as any)?.date,
|
||||||
server_id: (filter as any)?.server_id,
|
server_id: (filter as any)?.server_id,
|
||||||
user_id: (filter as any)?.user_id,
|
user_id: (filter as any)?.user_id,
|
||||||
|
|||||||
@ -90,6 +90,7 @@ export default function NodeForm(props: {
|
|||||||
const serverId = form.watch('server_id');
|
const serverId = form.watch('server_id');
|
||||||
|
|
||||||
const { data } = useQuery({
|
const { data } = useQuery({
|
||||||
|
enabled: open,
|
||||||
queryKey: ['filterServerListAll'],
|
queryKey: ['filterServerListAll'],
|
||||||
queryFn: async () => {
|
queryFn: async () => {
|
||||||
const { data } = await filterServerList({ page: 1, size: 999999999 });
|
const { data } = await filterServerList({ page: 1, size: 999999999 });
|
||||||
@ -99,6 +100,7 @@ export default function NodeForm(props: {
|
|||||||
const servers: ServerRow[] = data as ServerRow[];
|
const servers: ServerRow[] = data as ServerRow[];
|
||||||
|
|
||||||
const { data: tagsData } = useQuery({
|
const { data: tagsData } = useQuery({
|
||||||
|
enabled: open,
|
||||||
queryKey: ['queryNodeTag'],
|
queryKey: ['queryNodeTag'],
|
||||||
queryFn: async () => {
|
queryFn: async () => {
|
||||||
const { data } = await queryNodeTag();
|
const { data } = await queryNodeTag();
|
||||||
|
|||||||
@ -13,7 +13,6 @@ import { Button } from '@workspace/ui/components/button';
|
|||||||
import {
|
import {
|
||||||
Drawer,
|
Drawer,
|
||||||
DrawerContent,
|
DrawerContent,
|
||||||
DrawerDescription,
|
|
||||||
DrawerFooter,
|
DrawerFooter,
|
||||||
DrawerHeader,
|
DrawerHeader,
|
||||||
DrawerTitle,
|
DrawerTitle,
|
||||||
@ -168,10 +167,22 @@ export default function Page() {
|
|||||||
<DrawerContent className='container mx-auto h-screen *:select-text'>
|
<DrawerContent className='container mx-auto h-screen *:select-text'>
|
||||||
<DrawerHeader className='border-b text-left'>
|
<DrawerHeader className='border-b text-left'>
|
||||||
<DrawerTitle>{ticket?.title}</DrawerTitle>
|
<DrawerTitle>{ticket?.title}</DrawerTitle>
|
||||||
<DrawerDescription>{ticket?.description}</DrawerDescription>
|
|
||||||
</DrawerHeader>
|
</DrawerHeader>
|
||||||
<ScrollArea className='h-full overflow-hidden' ref={scrollRef}>
|
<ScrollArea className='h-full overflow-hidden' ref={scrollRef}>
|
||||||
<div className='flex h-full flex-col gap-4 p-4'>
|
<div className='flex h-full flex-col gap-4 p-4'>
|
||||||
|
{/* 显示工单描述作为第一条用户消息 */}
|
||||||
|
{ticket?.description && (
|
||||||
|
<div className='flex items-center gap-4'>
|
||||||
|
<div className='flex flex-col gap-1'>
|
||||||
|
<p className='text-muted-foreground text-sm'>{formatDate(ticket.created_at)}</p>
|
||||||
|
<p className='bg-accent w-fit rounded-lg p-2 font-medium'>
|
||||||
|
{ticket.description}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
|
||||||
|
{/* 显示后续跟进消息 */}
|
||||||
{ticket?.follow?.map((item) => (
|
{ticket?.follow?.map((item) => (
|
||||||
<div
|
<div
|
||||||
key={item.id}
|
key={item.id}
|
||||||
|
|||||||
@ -10,7 +10,15 @@ import { formatBytes } from '@workspace/ui/utils';
|
|||||||
import { useTranslations } from 'next-intl';
|
import { useTranslations } from 'next-intl';
|
||||||
import Link from 'next/link';
|
import Link from 'next/link';
|
||||||
|
|
||||||
export function UserSubscribeDetail({ id, enabled }: { id: number; enabled: boolean }) {
|
export function UserSubscribeDetail({
|
||||||
|
id,
|
||||||
|
enabled,
|
||||||
|
hoverCard = false,
|
||||||
|
}: {
|
||||||
|
id: number;
|
||||||
|
enabled: boolean;
|
||||||
|
hoverCard?: boolean;
|
||||||
|
}) {
|
||||||
const t = useTranslations('user');
|
const t = useTranslations('user');
|
||||||
|
|
||||||
const { data } = useQuery({
|
const { data } = useQuery({
|
||||||
@ -27,7 +35,7 @@ export function UserSubscribeDetail({ id, enabled }: { id: number; enabled: bool
|
|||||||
const usedTraffic = data ? data.upload + data.download : 0;
|
const usedTraffic = data ? data.upload + data.download : 0;
|
||||||
const totalTraffic = data?.traffic || 0;
|
const totalTraffic = data?.traffic || 0;
|
||||||
|
|
||||||
return (
|
const subscribeContent = (
|
||||||
<div className='space-y-4'>
|
<div className='space-y-4'>
|
||||||
<div>
|
<div>
|
||||||
<h3 className='mb-2 text-sm font-medium'>{t('subscriptionInfo')}</h3>
|
<h3 className='mb-2 text-sm font-medium'>{t('subscriptionInfo')}</h3>
|
||||||
@ -69,42 +77,59 @@ export function UserSubscribeDetail({ id, enabled }: { id: number; enabled: bool
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
{!hoverCard && (
|
||||||
<h3 className='mb-2 text-sm font-medium'>
|
<div>
|
||||||
{t('userInfo')}
|
<h3 className='mb-2 text-sm font-medium'>
|
||||||
{/* Removed link to legacy user detail page */}
|
{t('userInfo')}
|
||||||
</h3>
|
{/* Removed link to legacy user detail page */}
|
||||||
<ul className='grid gap-3'>
|
</h3>
|
||||||
<li className='flex items-center justify-between font-semibold'>
|
<ul className='grid gap-3'>
|
||||||
<span className='text-muted-foreground'>{t('userId')}</span>
|
<li className='flex items-center justify-between font-semibold'>
|
||||||
<span>{data?.user_id}</span>
|
<span className='text-muted-foreground'>{t('userId')}</span>
|
||||||
</li>
|
<span>{data?.user_id}</span>
|
||||||
<li className='flex items-center justify-between font-semibold'>
|
</li>
|
||||||
<span className='text-muted-foreground'>{t('balance')}</span>
|
<li className='flex items-center justify-between font-semibold'>
|
||||||
<span>
|
<span className='text-muted-foreground'>{t('balance')}</span>
|
||||||
<Display type='currency' value={data?.user.balance} />
|
<span>
|
||||||
</span>
|
<Display type='currency' value={data?.user.balance} />
|
||||||
</li>
|
</span>
|
||||||
<li className='flex items-center justify-between'>
|
</li>
|
||||||
<span className='text-muted-foreground'>{t('giftAmount')}</span>
|
<li className='flex items-center justify-between'>
|
||||||
<span>
|
<span className='text-muted-foreground'>{t('giftAmount')}</span>
|
||||||
<Display type='currency' value={data?.user?.gift_amount} />
|
<span>
|
||||||
</span>
|
<Display type='currency' value={data?.user?.gift_amount} />
|
||||||
</li>
|
</span>
|
||||||
<li className='flex items-center justify-between'>
|
</li>
|
||||||
<span className='text-muted-foreground'>{t('commission')}</span>
|
<li className='flex items-center justify-between'>
|
||||||
<span>
|
<span className='text-muted-foreground'>{t('commission')}</span>
|
||||||
<Display type='currency' value={data?.user?.commission} />
|
<span>
|
||||||
</span>
|
<Display type='currency' value={data?.user?.commission} />
|
||||||
</li>
|
</span>
|
||||||
<li className='flex items-center justify-between'>
|
</li>
|
||||||
<span className='text-muted-foreground'>{t('createdAt')}</span>
|
<li className='flex items-center justify-between'>
|
||||||
<span>{data?.user?.created_at && formatDate(data?.user?.created_at)}</span>
|
<span className='text-muted-foreground'>{t('createdAt')}</span>
|
||||||
</li>
|
<span>{data?.user?.created_at && formatDate(data?.user?.created_at)}</span>
|
||||||
</ul>
|
</li>
|
||||||
</div>
|
</ul>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (hoverCard) {
|
||||||
|
return (
|
||||||
|
<HoverCard>
|
||||||
|
<HoverCardTrigger asChild>
|
||||||
|
<Button variant='link' className='p-0'>
|
||||||
|
{data?.subscribe?.name || t('loading')}
|
||||||
|
</Button>
|
||||||
|
</HoverCardTrigger>
|
||||||
|
<HoverCardContent className='w-96'>{subscribeContent}</HoverCardContent>
|
||||||
|
</HoverCard>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return subscribeContent;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function UserDetail({ id }: { id: number }) {
|
export function UserDetail({ id }: { id: number }) {
|
||||||
|
|||||||
17
apps/admin/components/order-link.tsx
Normal file
17
apps/admin/components/order-link.tsx
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
import { Button } from '@workspace/ui/components/button';
|
||||||
|
import Link from 'next/link';
|
||||||
|
|
||||||
|
interface OrderLinkProps {
|
||||||
|
orderId?: string | number;
|
||||||
|
className?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function OrderLink({ orderId, className }: OrderLinkProps) {
|
||||||
|
if (!orderId) return <span>--</span>;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Button variant='link' className={`p-0 ${className || ''}`} asChild>
|
||||||
|
<Link href={`/dashboard/order?search=${orderId}`}>{orderId}</Link>
|
||||||
|
</Button>
|
||||||
|
);
|
||||||
|
}
|
||||||
@ -15,9 +15,11 @@
|
|||||||
"platform": "Platforma",
|
"platform": "Platforma",
|
||||||
"remark": "Poznámka",
|
"remark": "Poznámka",
|
||||||
"resetAt": "Resetováno",
|
"resetAt": "Resetováno",
|
||||||
|
"server": "Server",
|
||||||
"serverId": "ID serveru",
|
"serverId": "ID serveru",
|
||||||
"status": "Stav",
|
"status": "Stav",
|
||||||
"subject": "Předmět",
|
"subject": "Předmět",
|
||||||
|
"subscribe": "Přihlásit se",
|
||||||
"subscribeId": "ID předplatného",
|
"subscribeId": "ID předplatného",
|
||||||
"success": "Úspěch",
|
"success": "Úspěch",
|
||||||
"time": "Čas",
|
"time": "Čas",
|
||||||
@ -32,7 +34,9 @@
|
|||||||
"userId": "ID uživatele"
|
"userId": "ID uživatele"
|
||||||
},
|
},
|
||||||
"datePlaceholder": "RRRR-MM-DD",
|
"datePlaceholder": "RRRR-MM-DD",
|
||||||
|
"detail": "Detail",
|
||||||
"failed": "Neúspěšné",
|
"failed": "Neúspěšné",
|
||||||
|
"pending": "Čekající",
|
||||||
"placeholder": {
|
"placeholder": {
|
||||||
"serverName": "Název serveru",
|
"serverName": "Název serveru",
|
||||||
"toOrSubject": "Komu / Předmět",
|
"toOrSubject": "Komu / Předmět",
|
||||||
@ -42,6 +46,8 @@
|
|||||||
"userIdOrOrderNoOrSubscribeId": "ID uživatele / Číslo objednávky / ID předplatného",
|
"userIdOrOrderNoOrSubscribeId": "ID uživatele / Číslo objednávky / ID předplatného",
|
||||||
"userIdOrTokenOrIpOrUa": "ID uživatele / Token / IP / UA"
|
"userIdOrTokenOrIpOrUa": "ID uživatele / Token / IP / UA"
|
||||||
},
|
},
|
||||||
|
"sending": "Odesílání",
|
||||||
|
"sent": "Odesláno",
|
||||||
"success": "Úspěch",
|
"success": "Úspěch",
|
||||||
"title": {
|
"title": {
|
||||||
"balance": "Protokol zůstatku",
|
"balance": "Protokol zůstatku",
|
||||||
@ -56,5 +62,14 @@
|
|||||||
"subscribe": "Protokol předplatného",
|
"subscribe": "Protokol předplatného",
|
||||||
"subscribeTraffic": "Protokol provozu předplatného",
|
"subscribeTraffic": "Protokol provozu předplatného",
|
||||||
"trafficDetails": "Podrobnosti o provozu"
|
"trafficDetails": "Podrobnosti o provozu"
|
||||||
}
|
},
|
||||||
|
"type": {
|
||||||
|
"1": "Dobití",
|
||||||
|
"2": "Výběr",
|
||||||
|
"3": "Nákup",
|
||||||
|
"4": "Vrácení",
|
||||||
|
"5": "Odměna",
|
||||||
|
"6": "Provize"
|
||||||
|
},
|
||||||
|
"unknown": "Neznámý"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,9 +15,11 @@
|
|||||||
"platform": "Plattform",
|
"platform": "Plattform",
|
||||||
"remark": "Bemerkung",
|
"remark": "Bemerkung",
|
||||||
"resetAt": "Zurückgesetzt Am",
|
"resetAt": "Zurückgesetzt Am",
|
||||||
|
"server": "Server",
|
||||||
"serverId": "Server-ID",
|
"serverId": "Server-ID",
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
"subject": "Betreff",
|
"subject": "Betreff",
|
||||||
|
"subscribe": "Abonnieren",
|
||||||
"subscribeId": "Abonnement-ID",
|
"subscribeId": "Abonnement-ID",
|
||||||
"success": "Erfolg",
|
"success": "Erfolg",
|
||||||
"time": "Zeit",
|
"time": "Zeit",
|
||||||
@ -32,7 +34,9 @@
|
|||||||
"userId": "Benutzer-ID"
|
"userId": "Benutzer-ID"
|
||||||
},
|
},
|
||||||
"datePlaceholder": "JJJJ-MM-TT",
|
"datePlaceholder": "JJJJ-MM-TT",
|
||||||
|
"detail": "Detail",
|
||||||
"failed": "Fehlgeschlagen",
|
"failed": "Fehlgeschlagen",
|
||||||
|
"pending": "Ausstehend",
|
||||||
"placeholder": {
|
"placeholder": {
|
||||||
"serverName": "Servername",
|
"serverName": "Servername",
|
||||||
"toOrSubject": "An / Betreff",
|
"toOrSubject": "An / Betreff",
|
||||||
@ -42,6 +46,8 @@
|
|||||||
"userIdOrOrderNoOrSubscribeId": "Benutzer-ID / Bestell-Nr. / Abonnement-ID",
|
"userIdOrOrderNoOrSubscribeId": "Benutzer-ID / Bestell-Nr. / Abonnement-ID",
|
||||||
"userIdOrTokenOrIpOrUa": "Benutzer-ID / Token / IP / UA"
|
"userIdOrTokenOrIpOrUa": "Benutzer-ID / Token / IP / UA"
|
||||||
},
|
},
|
||||||
|
"sending": "Wird gesendet",
|
||||||
|
"sent": "Gesendet",
|
||||||
"success": "Erfolg",
|
"success": "Erfolg",
|
||||||
"title": {
|
"title": {
|
||||||
"balance": "Guthabenprotokoll",
|
"balance": "Guthabenprotokoll",
|
||||||
@ -56,5 +62,14 @@
|
|||||||
"subscribe": "Abonnementprotokoll",
|
"subscribe": "Abonnementprotokoll",
|
||||||
"subscribeTraffic": "Abonnementverkehrsprotokoll",
|
"subscribeTraffic": "Abonnementverkehrsprotokoll",
|
||||||
"trafficDetails": "Verkehrsdetails"
|
"trafficDetails": "Verkehrsdetails"
|
||||||
}
|
},
|
||||||
|
"type": {
|
||||||
|
"1": "Aufladen",
|
||||||
|
"2": "Abheben",
|
||||||
|
"3": "Kauf",
|
||||||
|
"4": "Rückerstattung",
|
||||||
|
"5": "Belohnung",
|
||||||
|
"6": "Provision"
|
||||||
|
},
|
||||||
|
"unknown": "Unbekannt"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -16,6 +16,8 @@
|
|||||||
"time": "Time",
|
"time": "Time",
|
||||||
"userId": "User ID",
|
"userId": "User ID",
|
||||||
"subscribeId": "Subscribe ID",
|
"subscribeId": "Subscribe ID",
|
||||||
|
"subscribe": "Subscribe",
|
||||||
|
"server": "Server",
|
||||||
"token": "Token",
|
"token": "Token",
|
||||||
"amount": "Amount",
|
"amount": "Amount",
|
||||||
"orderId": "Order ID",
|
"orderId": "Order ID",
|
||||||
@ -32,7 +34,9 @@
|
|||||||
"identifier": "Identifier"
|
"identifier": "Identifier"
|
||||||
},
|
},
|
||||||
"datePlaceholder": "YYYY-MM-DD",
|
"datePlaceholder": "YYYY-MM-DD",
|
||||||
|
"detail": "Detail",
|
||||||
"failed": "Failed",
|
"failed": "Failed",
|
||||||
|
"pending": "Pending",
|
||||||
"placeholder": {
|
"placeholder": {
|
||||||
"toOrSubject": "To / Subject",
|
"toOrSubject": "To / Subject",
|
||||||
"userIdOrIpOrMethodOrUa": "User ID / IP / Method / UA",
|
"userIdOrIpOrMethodOrUa": "User ID / IP / Method / UA",
|
||||||
@ -42,6 +46,8 @@
|
|||||||
"userIdOrOrderNoOrSubscribeId": "User ID / Order No. / Subscribe ID",
|
"userIdOrOrderNoOrSubscribeId": "User ID / Order No. / Subscribe ID",
|
||||||
"userIdOrOrderId": "User ID / Order ID"
|
"userIdOrOrderId": "User ID / Order ID"
|
||||||
},
|
},
|
||||||
|
"sending": "Sending",
|
||||||
|
"sent": "Sent",
|
||||||
"success": "Success",
|
"success": "Success",
|
||||||
"title": {
|
"title": {
|
||||||
"email": "Email Log",
|
"email": "Email Log",
|
||||||
@ -56,5 +62,14 @@
|
|||||||
"resetSubscribe": "Reset Subscribe Log",
|
"resetSubscribe": "Reset Subscribe Log",
|
||||||
"subscribeTraffic": "Subscribe Traffic Log",
|
"subscribeTraffic": "Subscribe Traffic Log",
|
||||||
"trafficDetails": "Traffic Details"
|
"trafficDetails": "Traffic Details"
|
||||||
}
|
},
|
||||||
|
"type": {
|
||||||
|
"1": "Recharge",
|
||||||
|
"2": "Withdraw",
|
||||||
|
"3": "Purchase",
|
||||||
|
"4": "Refund",
|
||||||
|
"5": "Reward",
|
||||||
|
"6": "Commission"
|
||||||
|
},
|
||||||
|
"unknown": "Unknown"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -94,7 +94,8 @@
|
|||||||
"subscribeId": "Subscription ID",
|
"subscribeId": "Subscription ID",
|
||||||
"subscription": "Subscription",
|
"subscription": "Subscription",
|
||||||
"traffic": "Traffic",
|
"traffic": "Traffic",
|
||||||
"traffic_ratio": "Multiplier",
|
"traffic_ratio": "Ratio",
|
||||||
|
"transport": "Transport",
|
||||||
"transport_title": "Transport",
|
"transport_title": "Transport",
|
||||||
"udp_relay_mode": "UDP relay mode",
|
"udp_relay_mode": "UDP relay mode",
|
||||||
"unitSecondsShort": "S",
|
"unitSecondsShort": "S",
|
||||||
|
|||||||
@ -15,9 +15,11 @@
|
|||||||
"platform": "Plataforma",
|
"platform": "Plataforma",
|
||||||
"remark": "Observación",
|
"remark": "Observación",
|
||||||
"resetAt": "Restablecido En",
|
"resetAt": "Restablecido En",
|
||||||
|
"server": "Servidor",
|
||||||
"serverId": "ID de Servidor",
|
"serverId": "ID de Servidor",
|
||||||
"status": "Estado",
|
"status": "Estado",
|
||||||
"subject": "Asunto",
|
"subject": "Asunto",
|
||||||
|
"subscribe": "Suscribirse",
|
||||||
"subscribeId": "ID de Suscripción",
|
"subscribeId": "ID de Suscripción",
|
||||||
"success": "Éxito",
|
"success": "Éxito",
|
||||||
"time": "Tiempo",
|
"time": "Tiempo",
|
||||||
@ -32,7 +34,9 @@
|
|||||||
"userId": "ID de Usuario"
|
"userId": "ID de Usuario"
|
||||||
},
|
},
|
||||||
"datePlaceholder": "AAAA-MM-DD",
|
"datePlaceholder": "AAAA-MM-DD",
|
||||||
|
"detail": "Detalle",
|
||||||
"failed": "Fallido",
|
"failed": "Fallido",
|
||||||
|
"pending": "Pendiente",
|
||||||
"placeholder": {
|
"placeholder": {
|
||||||
"serverName": "Nombre del Servidor",
|
"serverName": "Nombre del Servidor",
|
||||||
"toOrSubject": "Para / Asunto",
|
"toOrSubject": "Para / Asunto",
|
||||||
@ -42,6 +46,8 @@
|
|||||||
"userIdOrOrderNoOrSubscribeId": "ID de Usuario / No. de Pedido / ID de Suscripción",
|
"userIdOrOrderNoOrSubscribeId": "ID de Usuario / No. de Pedido / ID de Suscripción",
|
||||||
"userIdOrTokenOrIpOrUa": "ID de Usuario / Token / IP / UA"
|
"userIdOrTokenOrIpOrUa": "ID de Usuario / Token / IP / UA"
|
||||||
},
|
},
|
||||||
|
"sending": "Enviando",
|
||||||
|
"sent": "Enviado",
|
||||||
"success": "Éxito",
|
"success": "Éxito",
|
||||||
"title": {
|
"title": {
|
||||||
"balance": "Registro de Saldo",
|
"balance": "Registro de Saldo",
|
||||||
@ -56,5 +62,14 @@
|
|||||||
"subscribe": "Registro de Suscripción",
|
"subscribe": "Registro de Suscripción",
|
||||||
"subscribeTraffic": "Registro de Tráfico de Suscripción",
|
"subscribeTraffic": "Registro de Tráfico de Suscripción",
|
||||||
"trafficDetails": "Detalles del Tráfico"
|
"trafficDetails": "Detalles del Tráfico"
|
||||||
}
|
},
|
||||||
|
"type": {
|
||||||
|
"1": "Recarga",
|
||||||
|
"2": "Retiro",
|
||||||
|
"3": "Compra",
|
||||||
|
"4": "Reembolso",
|
||||||
|
"5": "Recompensa",
|
||||||
|
"6": "Comisión"
|
||||||
|
},
|
||||||
|
"unknown": "Desconocido"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,9 +15,11 @@
|
|||||||
"platform": "Plataforma",
|
"platform": "Plataforma",
|
||||||
"remark": "Comentario",
|
"remark": "Comentario",
|
||||||
"resetAt": "Restablecido En",
|
"resetAt": "Restablecido En",
|
||||||
|
"server": "Servidor",
|
||||||
"serverId": "ID de Servidor",
|
"serverId": "ID de Servidor",
|
||||||
"status": "Estado",
|
"status": "Estado",
|
||||||
"subject": "Asunto",
|
"subject": "Asunto",
|
||||||
|
"subscribe": "Suscribirse",
|
||||||
"subscribeId": "ID de Suscripción",
|
"subscribeId": "ID de Suscripción",
|
||||||
"success": "Éxito",
|
"success": "Éxito",
|
||||||
"time": "Tiempo",
|
"time": "Tiempo",
|
||||||
@ -32,7 +34,9 @@
|
|||||||
"userId": "ID de Usuario"
|
"userId": "ID de Usuario"
|
||||||
},
|
},
|
||||||
"datePlaceholder": "AAAA-MM-DD",
|
"datePlaceholder": "AAAA-MM-DD",
|
||||||
|
"detail": "Detalle",
|
||||||
"failed": "Fallido",
|
"failed": "Fallido",
|
||||||
|
"pending": "Pendiente",
|
||||||
"placeholder": {
|
"placeholder": {
|
||||||
"serverName": "Nombre del Servidor",
|
"serverName": "Nombre del Servidor",
|
||||||
"toOrSubject": "Para / Asunto",
|
"toOrSubject": "Para / Asunto",
|
||||||
@ -42,6 +46,8 @@
|
|||||||
"userIdOrOrderNoOrSubscribeId": "ID de Usuario / No. de Orden / ID de Suscripción",
|
"userIdOrOrderNoOrSubscribeId": "ID de Usuario / No. de Orden / ID de Suscripción",
|
||||||
"userIdOrTokenOrIpOrUa": "ID de Usuario / Token / IP / UA"
|
"userIdOrTokenOrIpOrUa": "ID de Usuario / Token / IP / UA"
|
||||||
},
|
},
|
||||||
|
"sending": "Enviando",
|
||||||
|
"sent": "Enviado",
|
||||||
"success": "Éxito",
|
"success": "Éxito",
|
||||||
"title": {
|
"title": {
|
||||||
"balance": "Registro de Saldo",
|
"balance": "Registro de Saldo",
|
||||||
@ -56,5 +62,14 @@
|
|||||||
"subscribe": "Registro de Suscripción",
|
"subscribe": "Registro de Suscripción",
|
||||||
"subscribeTraffic": "Registro de Tráfico de Suscripción",
|
"subscribeTraffic": "Registro de Tráfico de Suscripción",
|
||||||
"trafficDetails": "Detalles del Tráfico"
|
"trafficDetails": "Detalles del Tráfico"
|
||||||
}
|
},
|
||||||
|
"type": {
|
||||||
|
"1": "Recarga",
|
||||||
|
"2": "Retiro",
|
||||||
|
"3": "Compra",
|
||||||
|
"4": "Reembolso",
|
||||||
|
"5": "Recompensa",
|
||||||
|
"6": "Comisión"
|
||||||
|
},
|
||||||
|
"unknown": "Desconocido"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,9 +15,11 @@
|
|||||||
"platform": "پلتفرم",
|
"platform": "پلتفرم",
|
||||||
"remark": "یادداشت",
|
"remark": "یادداشت",
|
||||||
"resetAt": "تاریخ بازنشانی",
|
"resetAt": "تاریخ بازنشانی",
|
||||||
|
"server": "سرور",
|
||||||
"serverId": "شناسه سرور",
|
"serverId": "شناسه سرور",
|
||||||
"status": "وضعیت",
|
"status": "وضعیت",
|
||||||
"subject": "موضوع",
|
"subject": "موضوع",
|
||||||
|
"subscribe": "اشتراک",
|
||||||
"subscribeId": "شناسه اشتراک",
|
"subscribeId": "شناسه اشتراک",
|
||||||
"success": "موفقیت",
|
"success": "موفقیت",
|
||||||
"time": "زمان",
|
"time": "زمان",
|
||||||
@ -32,7 +34,9 @@
|
|||||||
"userId": "شناسه کاربر"
|
"userId": "شناسه کاربر"
|
||||||
},
|
},
|
||||||
"datePlaceholder": "YYYY-MM-DD",
|
"datePlaceholder": "YYYY-MM-DD",
|
||||||
|
"detail": "جزئیات",
|
||||||
"failed": "ناموفق",
|
"failed": "ناموفق",
|
||||||
|
"pending": "در حال انتظار",
|
||||||
"placeholder": {
|
"placeholder": {
|
||||||
"serverName": "نام سرور",
|
"serverName": "نام سرور",
|
||||||
"toOrSubject": "به / موضوع",
|
"toOrSubject": "به / موضوع",
|
||||||
@ -42,6 +46,8 @@
|
|||||||
"userIdOrOrderNoOrSubscribeId": "شناسه کاربر / شماره سفارش / شناسه اشتراک",
|
"userIdOrOrderNoOrSubscribeId": "شناسه کاربر / شماره سفارش / شناسه اشتراک",
|
||||||
"userIdOrTokenOrIpOrUa": "شناسه کاربر / توکن / آیپی / UA"
|
"userIdOrTokenOrIpOrUa": "شناسه کاربر / توکن / آیپی / UA"
|
||||||
},
|
},
|
||||||
|
"sending": "در حال ارسال",
|
||||||
|
"sent": "ارسال شده",
|
||||||
"success": "موفقیت",
|
"success": "موفقیت",
|
||||||
"title": {
|
"title": {
|
||||||
"balance": "گزارش موجودی",
|
"balance": "گزارش موجودی",
|
||||||
@ -56,5 +62,14 @@
|
|||||||
"subscribe": "گزارش اشتراک",
|
"subscribe": "گزارش اشتراک",
|
||||||
"subscribeTraffic": "گزارش ترافیک اشتراک",
|
"subscribeTraffic": "گزارش ترافیک اشتراک",
|
||||||
"trafficDetails": "جزئیات ترافیک"
|
"trafficDetails": "جزئیات ترافیک"
|
||||||
}
|
},
|
||||||
|
"type": {
|
||||||
|
"1": "شارژ",
|
||||||
|
"2": "برداشت",
|
||||||
|
"3": "خرید",
|
||||||
|
"4": "بازگشت",
|
||||||
|
"5": "پاداش",
|
||||||
|
"6": "کمیسیون"
|
||||||
|
},
|
||||||
|
"unknown": "ناشناخته"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,9 +15,11 @@
|
|||||||
"platform": "Alusta",
|
"platform": "Alusta",
|
||||||
"remark": "Huomautus",
|
"remark": "Huomautus",
|
||||||
"resetAt": "Nollattu",
|
"resetAt": "Nollattu",
|
||||||
|
"server": "Palvelin",
|
||||||
"serverId": "Palvelimen ID",
|
"serverId": "Palvelimen ID",
|
||||||
"status": "Tila",
|
"status": "Tila",
|
||||||
"subject": "Aihe",
|
"subject": "Aihe",
|
||||||
|
"subscribe": "Tilaa",
|
||||||
"subscribeId": "Tilauksen ID",
|
"subscribeId": "Tilauksen ID",
|
||||||
"success": "Onnistui",
|
"success": "Onnistui",
|
||||||
"time": "Aika",
|
"time": "Aika",
|
||||||
@ -32,7 +34,9 @@
|
|||||||
"userId": "Käyttäjä ID"
|
"userId": "Käyttäjä ID"
|
||||||
},
|
},
|
||||||
"datePlaceholder": "VVVV-KK-PP",
|
"datePlaceholder": "VVVV-KK-PP",
|
||||||
|
"detail": "Yksityiskohta",
|
||||||
"failed": "Epäonnistui",
|
"failed": "Epäonnistui",
|
||||||
|
"pending": "Odottaa",
|
||||||
"placeholder": {
|
"placeholder": {
|
||||||
"serverName": "Palvelimen nimi",
|
"serverName": "Palvelimen nimi",
|
||||||
"toOrSubject": "Vastaanottaja / Aihe",
|
"toOrSubject": "Vastaanottaja / Aihe",
|
||||||
@ -42,6 +46,8 @@
|
|||||||
"userIdOrOrderNoOrSubscribeId": "Käyttäjä ID / Tilauksen nro / Tilauksen ID",
|
"userIdOrOrderNoOrSubscribeId": "Käyttäjä ID / Tilauksen nro / Tilauksen ID",
|
||||||
"userIdOrTokenOrIpOrUa": "Käyttäjä ID / Token / IP / UA"
|
"userIdOrTokenOrIpOrUa": "Käyttäjä ID / Token / IP / UA"
|
||||||
},
|
},
|
||||||
|
"sending": "Lähetetään",
|
||||||
|
"sent": "Lähetetty",
|
||||||
"success": "Onnistui",
|
"success": "Onnistui",
|
||||||
"title": {
|
"title": {
|
||||||
"balance": "Saldo Lokit",
|
"balance": "Saldo Lokit",
|
||||||
@ -56,5 +62,14 @@
|
|||||||
"subscribe": "Tilauksen Lokit",
|
"subscribe": "Tilauksen Lokit",
|
||||||
"subscribeTraffic": "Tilauksen Liikenne Lokit",
|
"subscribeTraffic": "Tilauksen Liikenne Lokit",
|
||||||
"trafficDetails": "Liikennetiedot"
|
"trafficDetails": "Liikennetiedot"
|
||||||
}
|
},
|
||||||
|
"type": {
|
||||||
|
"1": "Lataus",
|
||||||
|
"2": "Nosto",
|
||||||
|
"3": "Osto",
|
||||||
|
"4": "Hyvitys",
|
||||||
|
"5": "Palkinto",
|
||||||
|
"6": "Komissio"
|
||||||
|
},
|
||||||
|
"unknown": "Tuntematon"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,9 +15,11 @@
|
|||||||
"platform": "Plateforme",
|
"platform": "Plateforme",
|
||||||
"remark": "Remarque",
|
"remark": "Remarque",
|
||||||
"resetAt": "Réinitialisé le",
|
"resetAt": "Réinitialisé le",
|
||||||
|
"server": "Serveur",
|
||||||
"serverId": "ID de Serveur",
|
"serverId": "ID de Serveur",
|
||||||
"status": "Statut",
|
"status": "Statut",
|
||||||
"subject": "Sujet",
|
"subject": "Sujet",
|
||||||
|
"subscribe": "S'abonner",
|
||||||
"subscribeId": "ID d'Abonnement",
|
"subscribeId": "ID d'Abonnement",
|
||||||
"success": "Succès",
|
"success": "Succès",
|
||||||
"time": "Temps",
|
"time": "Temps",
|
||||||
@ -32,7 +34,9 @@
|
|||||||
"userId": "ID Utilisateur"
|
"userId": "ID Utilisateur"
|
||||||
},
|
},
|
||||||
"datePlaceholder": "AAAA-MM-JJ",
|
"datePlaceholder": "AAAA-MM-JJ",
|
||||||
|
"detail": "Détail",
|
||||||
"failed": "Échoué",
|
"failed": "Échoué",
|
||||||
|
"pending": "En attente",
|
||||||
"placeholder": {
|
"placeholder": {
|
||||||
"serverName": "Nom du Serveur",
|
"serverName": "Nom du Serveur",
|
||||||
"toOrSubject": "À / Sujet",
|
"toOrSubject": "À / Sujet",
|
||||||
@ -42,6 +46,8 @@
|
|||||||
"userIdOrOrderNoOrSubscribeId": "ID Utilisateur / Numéro de Commande / ID d'Abonnement",
|
"userIdOrOrderNoOrSubscribeId": "ID Utilisateur / Numéro de Commande / ID d'Abonnement",
|
||||||
"userIdOrTokenOrIpOrUa": "ID Utilisateur / Jeton / IP / UA"
|
"userIdOrTokenOrIpOrUa": "ID Utilisateur / Jeton / IP / UA"
|
||||||
},
|
},
|
||||||
|
"sending": "Envoi",
|
||||||
|
"sent": "Envoyé",
|
||||||
"success": "Succès",
|
"success": "Succès",
|
||||||
"title": {
|
"title": {
|
||||||
"balance": "Journal des Soldes",
|
"balance": "Journal des Soldes",
|
||||||
@ -56,5 +62,14 @@
|
|||||||
"subscribe": "Journal des Abonnements",
|
"subscribe": "Journal des Abonnements",
|
||||||
"subscribeTraffic": "Journal du Trafic d'Abonnement",
|
"subscribeTraffic": "Journal du Trafic d'Abonnement",
|
||||||
"trafficDetails": "Détails du Trafic"
|
"trafficDetails": "Détails du Trafic"
|
||||||
}
|
},
|
||||||
|
"type": {
|
||||||
|
"1": "Recharge",
|
||||||
|
"2": "Retrait",
|
||||||
|
"3": "Achat",
|
||||||
|
"4": "Remboursement",
|
||||||
|
"5": "Récompense",
|
||||||
|
"6": "Commission"
|
||||||
|
},
|
||||||
|
"unknown": "Inconnu"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,9 +15,11 @@
|
|||||||
"platform": "प्लेटफ़ॉर्म",
|
"platform": "प्लेटफ़ॉर्म",
|
||||||
"remark": "टिप्पणी",
|
"remark": "टिप्पणी",
|
||||||
"resetAt": "रीसेट तिथि",
|
"resetAt": "रीसेट तिथि",
|
||||||
|
"server": "सर्वर",
|
||||||
"serverId": "सर्वर आईडी",
|
"serverId": "सर्वर आईडी",
|
||||||
"status": "स्थिति",
|
"status": "स्थिति",
|
||||||
"subject": "विषय",
|
"subject": "विषय",
|
||||||
|
"subscribe": "सदस्यता लें",
|
||||||
"subscribeId": "सदस्यता आईडी",
|
"subscribeId": "सदस्यता आईडी",
|
||||||
"success": "सफलता",
|
"success": "सफलता",
|
||||||
"time": "समय",
|
"time": "समय",
|
||||||
@ -32,7 +34,9 @@
|
|||||||
"userId": "उपयोगकर्ता आईडी"
|
"userId": "उपयोगकर्ता आईडी"
|
||||||
},
|
},
|
||||||
"datePlaceholder": "YYYY-MM-DD",
|
"datePlaceholder": "YYYY-MM-DD",
|
||||||
|
"detail": "विवरण",
|
||||||
"failed": "असफल",
|
"failed": "असफल",
|
||||||
|
"pending": "लंबित",
|
||||||
"placeholder": {
|
"placeholder": {
|
||||||
"serverName": "सर्वर नाम",
|
"serverName": "सर्वर नाम",
|
||||||
"toOrSubject": "को / विषय",
|
"toOrSubject": "को / विषय",
|
||||||
@ -42,6 +46,8 @@
|
|||||||
"userIdOrOrderNoOrSubscribeId": "उपयोगकर्ता आईडी / आदेश संख्या / सदस्यता आईडी",
|
"userIdOrOrderNoOrSubscribeId": "उपयोगकर्ता आईडी / आदेश संख्या / सदस्यता आईडी",
|
||||||
"userIdOrTokenOrIpOrUa": "उपयोगकर्ता आईडी / टोकन / आईपी / यूए"
|
"userIdOrTokenOrIpOrUa": "उपयोगकर्ता आईडी / टोकन / आईपी / यूए"
|
||||||
},
|
},
|
||||||
|
"sending": "भेजना",
|
||||||
|
"sent": "भेजा गया",
|
||||||
"success": "सफलता",
|
"success": "सफलता",
|
||||||
"title": {
|
"title": {
|
||||||
"balance": "बैलेंस लॉग",
|
"balance": "बैलेंस लॉग",
|
||||||
@ -56,5 +62,14 @@
|
|||||||
"subscribe": "सदस्यता लॉग",
|
"subscribe": "सदस्यता लॉग",
|
||||||
"subscribeTraffic": "सदस्यता ट्रैफ़िक लॉग",
|
"subscribeTraffic": "सदस्यता ट्रैफ़िक लॉग",
|
||||||
"trafficDetails": "ट्रैफ़िक विवरण"
|
"trafficDetails": "ट्रैफ़िक विवरण"
|
||||||
}
|
},
|
||||||
|
"type": {
|
||||||
|
"1": "रिचार्ज",
|
||||||
|
"2": "निकासी",
|
||||||
|
"3": "खरीद",
|
||||||
|
"4": "वापसी",
|
||||||
|
"5": "इनाम",
|
||||||
|
"6": "आयोग"
|
||||||
|
},
|
||||||
|
"unknown": "अज्ञात"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,9 +15,11 @@
|
|||||||
"platform": "Platform",
|
"platform": "Platform",
|
||||||
"remark": "Megjegyzés",
|
"remark": "Megjegyzés",
|
||||||
"resetAt": "Visszaállítva",
|
"resetAt": "Visszaállítva",
|
||||||
|
"server": "Szerver",
|
||||||
"serverId": "Szerver azonosító",
|
"serverId": "Szerver azonosító",
|
||||||
"status": "Állapot",
|
"status": "Állapot",
|
||||||
"subject": "Tárgy",
|
"subject": "Tárgy",
|
||||||
|
"subscribe": "Feliratkozás",
|
||||||
"subscribeId": "Előfizetési azonosító",
|
"subscribeId": "Előfizetési azonosító",
|
||||||
"success": "Sikeres",
|
"success": "Sikeres",
|
||||||
"time": "Idő",
|
"time": "Idő",
|
||||||
@ -32,7 +34,9 @@
|
|||||||
"userId": "Felhasználói azonosító"
|
"userId": "Felhasználói azonosító"
|
||||||
},
|
},
|
||||||
"datePlaceholder": "YYYY-MM-DD",
|
"datePlaceholder": "YYYY-MM-DD",
|
||||||
|
"detail": "Részletek",
|
||||||
"failed": "Sikertelen",
|
"failed": "Sikertelen",
|
||||||
|
"pending": "Függő",
|
||||||
"placeholder": {
|
"placeholder": {
|
||||||
"serverName": "Szerver neve",
|
"serverName": "Szerver neve",
|
||||||
"toOrSubject": "Címzett / Tárgy",
|
"toOrSubject": "Címzett / Tárgy",
|
||||||
@ -42,6 +46,8 @@
|
|||||||
"userIdOrOrderNoOrSubscribeId": "Felhasználói azonosító / Rendelés száma / Előfizetési azonosító",
|
"userIdOrOrderNoOrSubscribeId": "Felhasználói azonosító / Rendelés száma / Előfizetési azonosító",
|
||||||
"userIdOrTokenOrIpOrUa": "Felhasználói azonosító / Token / IP / UA"
|
"userIdOrTokenOrIpOrUa": "Felhasználói azonosító / Token / IP / UA"
|
||||||
},
|
},
|
||||||
|
"sending": "Küldés alatt",
|
||||||
|
"sent": "Küldve",
|
||||||
"success": "Sikeres",
|
"success": "Sikeres",
|
||||||
"title": {
|
"title": {
|
||||||
"balance": "Egyenleg napló",
|
"balance": "Egyenleg napló",
|
||||||
@ -56,5 +62,14 @@
|
|||||||
"subscribe": "Előfizetési napló",
|
"subscribe": "Előfizetési napló",
|
||||||
"subscribeTraffic": "Előfizetési forgalom napló",
|
"subscribeTraffic": "Előfizetési forgalom napló",
|
||||||
"trafficDetails": "Forgalmi részletek"
|
"trafficDetails": "Forgalmi részletek"
|
||||||
}
|
},
|
||||||
|
"type": {
|
||||||
|
"1": "Újratöltés",
|
||||||
|
"2": "Kivét",
|
||||||
|
"3": "Vásárlás",
|
||||||
|
"4": "Visszatérítés",
|
||||||
|
"5": "Jutalom",
|
||||||
|
"6": "Jutalék"
|
||||||
|
},
|
||||||
|
"unknown": "Ismeretlen"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,9 +15,11 @@
|
|||||||
"platform": "プラットフォーム",
|
"platform": "プラットフォーム",
|
||||||
"remark": "備考",
|
"remark": "備考",
|
||||||
"resetAt": "リセット日時",
|
"resetAt": "リセット日時",
|
||||||
|
"server": "サーバー",
|
||||||
"serverId": "サーバーID",
|
"serverId": "サーバーID",
|
||||||
"status": "ステータス",
|
"status": "ステータス",
|
||||||
"subject": "件名",
|
"subject": "件名",
|
||||||
|
"subscribe": "購読",
|
||||||
"subscribeId": "サブスクリプションID",
|
"subscribeId": "サブスクリプションID",
|
||||||
"success": "成功",
|
"success": "成功",
|
||||||
"time": "時間",
|
"time": "時間",
|
||||||
@ -32,7 +34,9 @@
|
|||||||
"userId": "ユーザーID"
|
"userId": "ユーザーID"
|
||||||
},
|
},
|
||||||
"datePlaceholder": "YYYY-MM-DD",
|
"datePlaceholder": "YYYY-MM-DD",
|
||||||
|
"detail": "詳細",
|
||||||
"failed": "失敗",
|
"failed": "失敗",
|
||||||
|
"pending": "保留中",
|
||||||
"placeholder": {
|
"placeholder": {
|
||||||
"serverName": "サーバー名",
|
"serverName": "サーバー名",
|
||||||
"toOrSubject": "宛先 / 件名",
|
"toOrSubject": "宛先 / 件名",
|
||||||
@ -42,6 +46,8 @@
|
|||||||
"userIdOrOrderNoOrSubscribeId": "ユーザーID / 注文番号 / サブスクリプションID",
|
"userIdOrOrderNoOrSubscribeId": "ユーザーID / 注文番号 / サブスクリプションID",
|
||||||
"userIdOrTokenOrIpOrUa": "ユーザーID / トークン / IP / UA"
|
"userIdOrTokenOrIpOrUa": "ユーザーID / トークン / IP / UA"
|
||||||
},
|
},
|
||||||
|
"sending": "送信中",
|
||||||
|
"sent": "送信済み",
|
||||||
"success": "成功",
|
"success": "成功",
|
||||||
"title": {
|
"title": {
|
||||||
"balance": "残高ログ",
|
"balance": "残高ログ",
|
||||||
@ -56,5 +62,14 @@
|
|||||||
"subscribe": "サブスクリプションログ",
|
"subscribe": "サブスクリプションログ",
|
||||||
"subscribeTraffic": "サブスクリプショントラフィックログ",
|
"subscribeTraffic": "サブスクリプショントラフィックログ",
|
||||||
"trafficDetails": "トラフィック詳細"
|
"trafficDetails": "トラフィック詳細"
|
||||||
}
|
},
|
||||||
|
"type": {
|
||||||
|
"1": "チャージ",
|
||||||
|
"2": "引き出し",
|
||||||
|
"3": "購入",
|
||||||
|
"4": "返金",
|
||||||
|
"5": "報酬",
|
||||||
|
"6": "手数料"
|
||||||
|
},
|
||||||
|
"unknown": "不明"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,9 +15,11 @@
|
|||||||
"platform": "플랫폼",
|
"platform": "플랫폼",
|
||||||
"remark": "비고",
|
"remark": "비고",
|
||||||
"resetAt": "재설정일",
|
"resetAt": "재설정일",
|
||||||
|
"server": "서버",
|
||||||
"serverId": "서버 ID",
|
"serverId": "서버 ID",
|
||||||
"status": "상태",
|
"status": "상태",
|
||||||
"subject": "제목",
|
"subject": "제목",
|
||||||
|
"subscribe": "구독",
|
||||||
"subscribeId": "구독 ID",
|
"subscribeId": "구독 ID",
|
||||||
"success": "성공",
|
"success": "성공",
|
||||||
"time": "시간",
|
"time": "시간",
|
||||||
@ -32,7 +34,9 @@
|
|||||||
"userId": "사용자 ID"
|
"userId": "사용자 ID"
|
||||||
},
|
},
|
||||||
"datePlaceholder": "YYYY-MM-DD",
|
"datePlaceholder": "YYYY-MM-DD",
|
||||||
|
"detail": "상세",
|
||||||
"failed": "실패",
|
"failed": "실패",
|
||||||
|
"pending": "대기 중",
|
||||||
"placeholder": {
|
"placeholder": {
|
||||||
"serverName": "서버 이름",
|
"serverName": "서버 이름",
|
||||||
"toOrSubject": "받는 사람 / 제목",
|
"toOrSubject": "받는 사람 / 제목",
|
||||||
@ -42,6 +46,8 @@
|
|||||||
"userIdOrOrderNoOrSubscribeId": "사용자 ID / 주문 번호 / 구독 ID",
|
"userIdOrOrderNoOrSubscribeId": "사용자 ID / 주문 번호 / 구독 ID",
|
||||||
"userIdOrTokenOrIpOrUa": "사용자 ID / 토큰 / IP / UA"
|
"userIdOrTokenOrIpOrUa": "사용자 ID / 토큰 / IP / UA"
|
||||||
},
|
},
|
||||||
|
"sending": "전송 중",
|
||||||
|
"sent": "전송 완료",
|
||||||
"success": "성공",
|
"success": "성공",
|
||||||
"title": {
|
"title": {
|
||||||
"balance": "잔액 로그",
|
"balance": "잔액 로그",
|
||||||
@ -56,5 +62,14 @@
|
|||||||
"subscribe": "구독 로그",
|
"subscribe": "구독 로그",
|
||||||
"subscribeTraffic": "구독 트래픽 로그",
|
"subscribeTraffic": "구독 트래픽 로그",
|
||||||
"trafficDetails": "트래픽 세부정보"
|
"trafficDetails": "트래픽 세부정보"
|
||||||
}
|
},
|
||||||
|
"type": {
|
||||||
|
"1": "충전",
|
||||||
|
"2": "출금",
|
||||||
|
"3": "구매",
|
||||||
|
"4": "환불",
|
||||||
|
"5": "보상",
|
||||||
|
"6": "수수료"
|
||||||
|
},
|
||||||
|
"unknown": "알 수 없음"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,9 +15,11 @@
|
|||||||
"platform": "Plattform",
|
"platform": "Plattform",
|
||||||
"remark": "Merknad",
|
"remark": "Merknad",
|
||||||
"resetAt": "Tilbakestilt",
|
"resetAt": "Tilbakestilt",
|
||||||
|
"server": "Server",
|
||||||
"serverId": "Server-ID",
|
"serverId": "Server-ID",
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
"subject": "Emne",
|
"subject": "Emne",
|
||||||
|
"subscribe": "Abonner",
|
||||||
"subscribeId": "Abonnements-ID",
|
"subscribeId": "Abonnements-ID",
|
||||||
"success": "Suksess",
|
"success": "Suksess",
|
||||||
"time": "Tid",
|
"time": "Tid",
|
||||||
@ -32,7 +34,9 @@
|
|||||||
"userId": "Bruker-ID"
|
"userId": "Bruker-ID"
|
||||||
},
|
},
|
||||||
"datePlaceholder": "YYYY-MM-DD",
|
"datePlaceholder": "YYYY-MM-DD",
|
||||||
|
"detail": "Detalj",
|
||||||
"failed": "Feilet",
|
"failed": "Feilet",
|
||||||
|
"pending": "Venter",
|
||||||
"placeholder": {
|
"placeholder": {
|
||||||
"serverName": "Servernavn",
|
"serverName": "Servernavn",
|
||||||
"toOrSubject": "Til / Emne",
|
"toOrSubject": "Til / Emne",
|
||||||
@ -42,6 +46,8 @@
|
|||||||
"userIdOrOrderNoOrSubscribeId": "Bruker-ID / Ordre nr. / Abonnements-ID",
|
"userIdOrOrderNoOrSubscribeId": "Bruker-ID / Ordre nr. / Abonnements-ID",
|
||||||
"userIdOrTokenOrIpOrUa": "Bruker-ID / Token / IP / UA"
|
"userIdOrTokenOrIpOrUa": "Bruker-ID / Token / IP / UA"
|
||||||
},
|
},
|
||||||
|
"sending": "Sender",
|
||||||
|
"sent": "Sendt",
|
||||||
"success": "Suksess",
|
"success": "Suksess",
|
||||||
"title": {
|
"title": {
|
||||||
"balance": "Saldi-logg",
|
"balance": "Saldi-logg",
|
||||||
@ -56,5 +62,14 @@
|
|||||||
"subscribe": "Abonnementslogg",
|
"subscribe": "Abonnementslogg",
|
||||||
"subscribeTraffic": "Abonnements trafikklogg",
|
"subscribeTraffic": "Abonnements trafikklogg",
|
||||||
"trafficDetails": "Trafikkdetaljer"
|
"trafficDetails": "Trafikkdetaljer"
|
||||||
}
|
},
|
||||||
|
"type": {
|
||||||
|
"1": "Opplading",
|
||||||
|
"2": "Uttak",
|
||||||
|
"3": "Kjøp",
|
||||||
|
"4": "Refusjon",
|
||||||
|
"5": "Belønning",
|
||||||
|
"6": "Kommisjon"
|
||||||
|
},
|
||||||
|
"unknown": "Ukjent"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,9 +15,11 @@
|
|||||||
"platform": "Platforma",
|
"platform": "Platforma",
|
||||||
"remark": "Uwagi",
|
"remark": "Uwagi",
|
||||||
"resetAt": "Zresetowano",
|
"resetAt": "Zresetowano",
|
||||||
|
"server": "Serwer",
|
||||||
"serverId": "ID Serwera",
|
"serverId": "ID Serwera",
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
"subject": "Temat",
|
"subject": "Temat",
|
||||||
|
"subscribe": "Subskrybuj",
|
||||||
"subscribeId": "ID Subskrypcji",
|
"subscribeId": "ID Subskrypcji",
|
||||||
"success": "Sukces",
|
"success": "Sukces",
|
||||||
"time": "Czas",
|
"time": "Czas",
|
||||||
@ -32,7 +34,9 @@
|
|||||||
"userId": "ID Użytkownika"
|
"userId": "ID Użytkownika"
|
||||||
},
|
},
|
||||||
"datePlaceholder": "RRRR-MM-DD",
|
"datePlaceholder": "RRRR-MM-DD",
|
||||||
|
"detail": "Szczegóły",
|
||||||
"failed": "Niepowodzenie",
|
"failed": "Niepowodzenie",
|
||||||
|
"pending": "Oczekujące",
|
||||||
"placeholder": {
|
"placeholder": {
|
||||||
"serverName": "Nazwa Serwera",
|
"serverName": "Nazwa Serwera",
|
||||||
"toOrSubject": "Do / Temat",
|
"toOrSubject": "Do / Temat",
|
||||||
@ -42,6 +46,8 @@
|
|||||||
"userIdOrOrderNoOrSubscribeId": "ID Użytkownika / Nr Zamówienia / ID Subskrypcji",
|
"userIdOrOrderNoOrSubscribeId": "ID Użytkownika / Nr Zamówienia / ID Subskrypcji",
|
||||||
"userIdOrTokenOrIpOrUa": "ID Użytkownika / Token / IP / UA"
|
"userIdOrTokenOrIpOrUa": "ID Użytkownika / Token / IP / UA"
|
||||||
},
|
},
|
||||||
|
"sending": "Wysyłanie",
|
||||||
|
"sent": "Wysłane",
|
||||||
"success": "Sukces",
|
"success": "Sukces",
|
||||||
"title": {
|
"title": {
|
||||||
"balance": "Dziennik Salda",
|
"balance": "Dziennik Salda",
|
||||||
@ -56,5 +62,14 @@
|
|||||||
"subscribe": "Dziennik Subskrypcji",
|
"subscribe": "Dziennik Subskrypcji",
|
||||||
"subscribeTraffic": "Dziennik Ruchu Subskrypcyjnego",
|
"subscribeTraffic": "Dziennik Ruchu Subskrypcyjnego",
|
||||||
"trafficDetails": "Szczegóły Ruchu"
|
"trafficDetails": "Szczegóły Ruchu"
|
||||||
}
|
},
|
||||||
|
"type": {
|
||||||
|
"1": "Doładowanie",
|
||||||
|
"2": "Wypłata",
|
||||||
|
"3": "Zakup",
|
||||||
|
"4": "Zwrót",
|
||||||
|
"5": "Nagroda",
|
||||||
|
"6": "Prowizja"
|
||||||
|
},
|
||||||
|
"unknown": "Nieznane"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,9 +15,11 @@
|
|||||||
"platform": "Plataforma",
|
"platform": "Plataforma",
|
||||||
"remark": "Observação",
|
"remark": "Observação",
|
||||||
"resetAt": "Reiniciado Em",
|
"resetAt": "Reiniciado Em",
|
||||||
|
"server": "Servidor",
|
||||||
"serverId": "ID do Servidor",
|
"serverId": "ID do Servidor",
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
"subject": "Assunto",
|
"subject": "Assunto",
|
||||||
|
"subscribe": "Inscrever-se",
|
||||||
"subscribeId": "ID da Inscrição",
|
"subscribeId": "ID da Inscrição",
|
||||||
"success": "Sucesso",
|
"success": "Sucesso",
|
||||||
"time": "Tempo",
|
"time": "Tempo",
|
||||||
@ -32,7 +34,9 @@
|
|||||||
"userId": "ID do Usuário"
|
"userId": "ID do Usuário"
|
||||||
},
|
},
|
||||||
"datePlaceholder": "AAAA-MM-DD",
|
"datePlaceholder": "AAAA-MM-DD",
|
||||||
|
"detail": "Detalhe",
|
||||||
"failed": "Falhou",
|
"failed": "Falhou",
|
||||||
|
"pending": "Pendente",
|
||||||
"placeholder": {
|
"placeholder": {
|
||||||
"serverName": "Nome do Servidor",
|
"serverName": "Nome do Servidor",
|
||||||
"toOrSubject": "Para / Assunto",
|
"toOrSubject": "Para / Assunto",
|
||||||
@ -42,6 +46,8 @@
|
|||||||
"userIdOrOrderNoOrSubscribeId": "ID do Usuário / Número do Pedido / ID da Inscrição",
|
"userIdOrOrderNoOrSubscribeId": "ID do Usuário / Número do Pedido / ID da Inscrição",
|
||||||
"userIdOrTokenOrIpOrUa": "ID do Usuário / Token / IP / UA"
|
"userIdOrTokenOrIpOrUa": "ID do Usuário / Token / IP / UA"
|
||||||
},
|
},
|
||||||
|
"sending": "Enviando",
|
||||||
|
"sent": "Enviado",
|
||||||
"success": "Sucesso",
|
"success": "Sucesso",
|
||||||
"title": {
|
"title": {
|
||||||
"balance": "Registro de Saldo",
|
"balance": "Registro de Saldo",
|
||||||
@ -56,5 +62,14 @@
|
|||||||
"subscribe": "Registro de Inscrição",
|
"subscribe": "Registro de Inscrição",
|
||||||
"subscribeTraffic": "Registro de Tráfego de Inscrição",
|
"subscribeTraffic": "Registro de Tráfego de Inscrição",
|
||||||
"trafficDetails": "Detalhes do Tráfego"
|
"trafficDetails": "Detalhes do Tráfego"
|
||||||
}
|
},
|
||||||
|
"type": {
|
||||||
|
"1": "Recarga",
|
||||||
|
"2": "Retirada",
|
||||||
|
"3": "Compra",
|
||||||
|
"4": "Reembolso",
|
||||||
|
"5": "Recompensa",
|
||||||
|
"6": "Comissão"
|
||||||
|
},
|
||||||
|
"unknown": "Desconhecido"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,9 +15,11 @@
|
|||||||
"platform": "Platformă",
|
"platform": "Platformă",
|
||||||
"remark": "Observație",
|
"remark": "Observație",
|
||||||
"resetAt": "Resetat La",
|
"resetAt": "Resetat La",
|
||||||
|
"server": "Server",
|
||||||
"serverId": "ID Server",
|
"serverId": "ID Server",
|
||||||
"status": "Stare",
|
"status": "Stare",
|
||||||
"subject": "Subiect",
|
"subject": "Subiect",
|
||||||
|
"subscribe": "Abonează-te",
|
||||||
"subscribeId": "ID Abonament",
|
"subscribeId": "ID Abonament",
|
||||||
"success": "Succes",
|
"success": "Succes",
|
||||||
"time": "Timp",
|
"time": "Timp",
|
||||||
@ -32,7 +34,9 @@
|
|||||||
"userId": "ID Utilizator"
|
"userId": "ID Utilizator"
|
||||||
},
|
},
|
||||||
"datePlaceholder": "AAAA-LL-ZZ",
|
"datePlaceholder": "AAAA-LL-ZZ",
|
||||||
|
"detail": "Detaliu",
|
||||||
"failed": "Eșuat",
|
"failed": "Eșuat",
|
||||||
|
"pending": "În așteptare",
|
||||||
"placeholder": {
|
"placeholder": {
|
||||||
"serverName": "Numele Serverului",
|
"serverName": "Numele Serverului",
|
||||||
"toOrSubject": "Către / Subiect",
|
"toOrSubject": "Către / Subiect",
|
||||||
@ -42,6 +46,8 @@
|
|||||||
"userIdOrOrderNoOrSubscribeId": "ID Utilizator / Nr. Comandă / ID Abonament",
|
"userIdOrOrderNoOrSubscribeId": "ID Utilizator / Nr. Comandă / ID Abonament",
|
||||||
"userIdOrTokenOrIpOrUa": "ID Utilizator / Token / IP / UA"
|
"userIdOrTokenOrIpOrUa": "ID Utilizator / Token / IP / UA"
|
||||||
},
|
},
|
||||||
|
"sending": "Trimitere",
|
||||||
|
"sent": "Trimis",
|
||||||
"success": "Succes",
|
"success": "Succes",
|
||||||
"title": {
|
"title": {
|
||||||
"balance": "Jurnal Sold",
|
"balance": "Jurnal Sold",
|
||||||
@ -56,5 +62,14 @@
|
|||||||
"subscribe": "Jurnal Abonare",
|
"subscribe": "Jurnal Abonare",
|
||||||
"subscribeTraffic": "Jurnal Trafic Abonament",
|
"subscribeTraffic": "Jurnal Trafic Abonament",
|
||||||
"trafficDetails": "Detalii Trafic"
|
"trafficDetails": "Detalii Trafic"
|
||||||
}
|
},
|
||||||
|
"type": {
|
||||||
|
"1": "Reîncărcare",
|
||||||
|
"2": "Retragere",
|
||||||
|
"3": "Achiziție",
|
||||||
|
"4": "Rambursare",
|
||||||
|
"5": "Recompensă",
|
||||||
|
"6": "Comision"
|
||||||
|
},
|
||||||
|
"unknown": "Necunoscut"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,9 +15,11 @@
|
|||||||
"platform": "Платформа",
|
"platform": "Платформа",
|
||||||
"remark": "Примечание",
|
"remark": "Примечание",
|
||||||
"resetAt": "Сброшено",
|
"resetAt": "Сброшено",
|
||||||
|
"server": "Сервер",
|
||||||
"serverId": "ИД сервера",
|
"serverId": "ИД сервера",
|
||||||
"status": "Статус",
|
"status": "Статус",
|
||||||
"subject": "Тема",
|
"subject": "Тема",
|
||||||
|
"subscribe": "Подписаться",
|
||||||
"subscribeId": "ИД подписки",
|
"subscribeId": "ИД подписки",
|
||||||
"success": "Успех",
|
"success": "Успех",
|
||||||
"time": "Время",
|
"time": "Время",
|
||||||
@ -32,7 +34,9 @@
|
|||||||
"userId": "ИД пользователя"
|
"userId": "ИД пользователя"
|
||||||
},
|
},
|
||||||
"datePlaceholder": "ГГГГ-ММ-ДД",
|
"datePlaceholder": "ГГГГ-ММ-ДД",
|
||||||
|
"detail": "Детали",
|
||||||
"failed": "Неудача",
|
"failed": "Неудача",
|
||||||
|
"pending": "В ожидании",
|
||||||
"placeholder": {
|
"placeholder": {
|
||||||
"serverName": "Имя сервера",
|
"serverName": "Имя сервера",
|
||||||
"toOrSubject": "Кому / Тема",
|
"toOrSubject": "Кому / Тема",
|
||||||
@ -42,6 +46,8 @@
|
|||||||
"userIdOrOrderNoOrSubscribeId": "ИД пользователя / Номер заказа / ИД подписки",
|
"userIdOrOrderNoOrSubscribeId": "ИД пользователя / Номер заказа / ИД подписки",
|
||||||
"userIdOrTokenOrIpOrUa": "ИД пользователя / Токен / IP / UA"
|
"userIdOrTokenOrIpOrUa": "ИД пользователя / Токен / IP / UA"
|
||||||
},
|
},
|
||||||
|
"sending": "Отправка",
|
||||||
|
"sent": "Отправлено",
|
||||||
"success": "Успех",
|
"success": "Успех",
|
||||||
"title": {
|
"title": {
|
||||||
"balance": "Журнал баланса",
|
"balance": "Журнал баланса",
|
||||||
@ -56,5 +62,14 @@
|
|||||||
"subscribe": "Журнал подписки",
|
"subscribe": "Журнал подписки",
|
||||||
"subscribeTraffic": "Журнал трафика подписки",
|
"subscribeTraffic": "Журнал трафика подписки",
|
||||||
"trafficDetails": "Детали трафика"
|
"trafficDetails": "Детали трафика"
|
||||||
}
|
},
|
||||||
|
"type": {
|
||||||
|
"1": "Пополнение",
|
||||||
|
"2": "Вывод",
|
||||||
|
"3": "Покупка",
|
||||||
|
"4": "Возврат",
|
||||||
|
"5": "Награда",
|
||||||
|
"6": "Комиссия"
|
||||||
|
},
|
||||||
|
"unknown": "Неизвестно"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,9 +15,11 @@
|
|||||||
"platform": "แพลตฟอร์ม",
|
"platform": "แพลตฟอร์ม",
|
||||||
"remark": "หมายเหตุ",
|
"remark": "หมายเหตุ",
|
||||||
"resetAt": "รีเซ็ตเมื่อ",
|
"resetAt": "รีเซ็ตเมื่อ",
|
||||||
|
"server": "เซิร์ฟเวอร์",
|
||||||
"serverId": "รหัสเซิร์ฟเวอร์",
|
"serverId": "รหัสเซิร์ฟเวอร์",
|
||||||
"status": "สถานะ",
|
"status": "สถานะ",
|
||||||
"subject": "หัวข้อ",
|
"subject": "หัวข้อ",
|
||||||
|
"subscribe": "สมัครสมาชิก",
|
||||||
"subscribeId": "รหัสการสมัคร",
|
"subscribeId": "รหัสการสมัคร",
|
||||||
"success": "สำเร็จ",
|
"success": "สำเร็จ",
|
||||||
"time": "เวลา",
|
"time": "เวลา",
|
||||||
@ -32,7 +34,9 @@
|
|||||||
"userId": "รหัสผู้ใช้"
|
"userId": "รหัสผู้ใช้"
|
||||||
},
|
},
|
||||||
"datePlaceholder": "YYYY-MM-DD",
|
"datePlaceholder": "YYYY-MM-DD",
|
||||||
|
"detail": "รายละเอียด",
|
||||||
"failed": "ล้มเหลว",
|
"failed": "ล้มเหลว",
|
||||||
|
"pending": "รอดำเนินการ",
|
||||||
"placeholder": {
|
"placeholder": {
|
||||||
"serverName": "ชื่อเซิร์ฟเวอร์",
|
"serverName": "ชื่อเซิร์ฟเวอร์",
|
||||||
"toOrSubject": "ถึง / หัวข้อ",
|
"toOrSubject": "ถึง / หัวข้อ",
|
||||||
@ -42,6 +46,8 @@
|
|||||||
"userIdOrOrderNoOrSubscribeId": "รหัสผู้ใช้ / หมายเลขคำสั่ง / รหัสการสมัคร",
|
"userIdOrOrderNoOrSubscribeId": "รหัสผู้ใช้ / หมายเลขคำสั่ง / รหัสการสมัคร",
|
||||||
"userIdOrTokenOrIpOrUa": "รหัสผู้ใช้ / โทเค็น / IP / UA"
|
"userIdOrTokenOrIpOrUa": "รหัสผู้ใช้ / โทเค็น / IP / UA"
|
||||||
},
|
},
|
||||||
|
"sending": "กำลังส่ง",
|
||||||
|
"sent": "ส่งแล้ว",
|
||||||
"success": "สำเร็จ",
|
"success": "สำเร็จ",
|
||||||
"title": {
|
"title": {
|
||||||
"balance": "บันทึกยอดคงเหลือ",
|
"balance": "บันทึกยอดคงเหลือ",
|
||||||
@ -56,5 +62,14 @@
|
|||||||
"subscribe": "บันทึกการสมัคร",
|
"subscribe": "บันทึกการสมัคร",
|
||||||
"subscribeTraffic": "บันทึกการจราจรการสมัคร",
|
"subscribeTraffic": "บันทึกการจราจรการสมัคร",
|
||||||
"trafficDetails": "รายละเอียดการจราจร"
|
"trafficDetails": "รายละเอียดการจราจร"
|
||||||
}
|
},
|
||||||
|
"type": {
|
||||||
|
"1": "เติมเงิน",
|
||||||
|
"2": "ถอนเงิน",
|
||||||
|
"3": "ซื้อ",
|
||||||
|
"4": "คืนเงิน",
|
||||||
|
"5": "รางวัล",
|
||||||
|
"6": "ค่าคอมมิชชั่น"
|
||||||
|
},
|
||||||
|
"unknown": "ไม่ทราบ"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,9 +15,11 @@
|
|||||||
"platform": "Platform",
|
"platform": "Platform",
|
||||||
"remark": "Not",
|
"remark": "Not",
|
||||||
"resetAt": "Sıfırlama Tarihi",
|
"resetAt": "Sıfırlama Tarihi",
|
||||||
|
"server": "Sunucu",
|
||||||
"serverId": "Sunucu ID",
|
"serverId": "Sunucu ID",
|
||||||
"status": "Durum",
|
"status": "Durum",
|
||||||
"subject": "Konu",
|
"subject": "Konu",
|
||||||
|
"subscribe": "Abone Ol",
|
||||||
"subscribeId": "Abone ID",
|
"subscribeId": "Abone ID",
|
||||||
"success": "Başarılı",
|
"success": "Başarılı",
|
||||||
"time": "Zaman",
|
"time": "Zaman",
|
||||||
@ -32,7 +34,9 @@
|
|||||||
"userId": "Kullanıcı ID"
|
"userId": "Kullanıcı ID"
|
||||||
},
|
},
|
||||||
"datePlaceholder": "YYYY-AA-GG",
|
"datePlaceholder": "YYYY-AA-GG",
|
||||||
|
"detail": "Detay",
|
||||||
"failed": "Başarısız",
|
"failed": "Başarısız",
|
||||||
|
"pending": "Beklemede",
|
||||||
"placeholder": {
|
"placeholder": {
|
||||||
"serverName": "Sunucu Adı",
|
"serverName": "Sunucu Adı",
|
||||||
"toOrSubject": "Kime / Konu",
|
"toOrSubject": "Kime / Konu",
|
||||||
@ -42,6 +46,8 @@
|
|||||||
"userIdOrOrderNoOrSubscribeId": "Kullanıcı ID / Sipariş No. / Abone ID",
|
"userIdOrOrderNoOrSubscribeId": "Kullanıcı ID / Sipariş No. / Abone ID",
|
||||||
"userIdOrTokenOrIpOrUa": "Kullanıcı ID / Token / IP / UA"
|
"userIdOrTokenOrIpOrUa": "Kullanıcı ID / Token / IP / UA"
|
||||||
},
|
},
|
||||||
|
"sending": "Gönderiliyor",
|
||||||
|
"sent": "Gönderildi",
|
||||||
"success": "Başarılı",
|
"success": "Başarılı",
|
||||||
"title": {
|
"title": {
|
||||||
"balance": "Bakiye Kaydı",
|
"balance": "Bakiye Kaydı",
|
||||||
@ -56,5 +62,14 @@
|
|||||||
"subscribe": "Abone Kaydı",
|
"subscribe": "Abone Kaydı",
|
||||||
"subscribeTraffic": "Abone Trafik Kaydı",
|
"subscribeTraffic": "Abone Trafik Kaydı",
|
||||||
"trafficDetails": "Trafik Detayları"
|
"trafficDetails": "Trafik Detayları"
|
||||||
}
|
},
|
||||||
|
"type": {
|
||||||
|
"1": "Yükleme",
|
||||||
|
"2": "Çekim",
|
||||||
|
"3": "Alım",
|
||||||
|
"4": "İade",
|
||||||
|
"5": "Ödül",
|
||||||
|
"6": "Komisyon"
|
||||||
|
},
|
||||||
|
"unknown": "Bilinmiyor"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,9 +15,11 @@
|
|||||||
"platform": "Платформа",
|
"platform": "Платформа",
|
||||||
"remark": "Примітка",
|
"remark": "Примітка",
|
||||||
"resetAt": "Скинуто о",
|
"resetAt": "Скинуто о",
|
||||||
|
"server": "Сервер",
|
||||||
"serverId": "ID сервера",
|
"serverId": "ID сервера",
|
||||||
"status": "Статус",
|
"status": "Статус",
|
||||||
"subject": "Тема",
|
"subject": "Тема",
|
||||||
|
"subscribe": "Підписатися",
|
||||||
"subscribeId": "ID підписки",
|
"subscribeId": "ID підписки",
|
||||||
"success": "Успішно",
|
"success": "Успішно",
|
||||||
"time": "Час",
|
"time": "Час",
|
||||||
@ -32,7 +34,9 @@
|
|||||||
"userId": "ID користувача"
|
"userId": "ID користувача"
|
||||||
},
|
},
|
||||||
"datePlaceholder": "YYYY-MM-DD",
|
"datePlaceholder": "YYYY-MM-DD",
|
||||||
|
"detail": "Деталі",
|
||||||
"failed": "Не вдалося",
|
"failed": "Не вдалося",
|
||||||
|
"pending": "В очікуванні",
|
||||||
"placeholder": {
|
"placeholder": {
|
||||||
"serverName": "Назва сервера",
|
"serverName": "Назва сервера",
|
||||||
"toOrSubject": "Кому / Тема",
|
"toOrSubject": "Кому / Тема",
|
||||||
@ -42,6 +46,8 @@
|
|||||||
"userIdOrOrderNoOrSubscribeId": "ID користувача / Номер замовлення / ID підписки",
|
"userIdOrOrderNoOrSubscribeId": "ID користувача / Номер замовлення / ID підписки",
|
||||||
"userIdOrTokenOrIpOrUa": "ID користувача / Токен / IP / UA"
|
"userIdOrTokenOrIpOrUa": "ID користувача / Токен / IP / UA"
|
||||||
},
|
},
|
||||||
|
"sending": "Відправка",
|
||||||
|
"sent": "Відправлено",
|
||||||
"success": "Успішно",
|
"success": "Успішно",
|
||||||
"title": {
|
"title": {
|
||||||
"balance": "Журнал балансу",
|
"balance": "Журнал балансу",
|
||||||
@ -56,5 +62,14 @@
|
|||||||
"subscribe": "Журнал підписки",
|
"subscribe": "Журнал підписки",
|
||||||
"subscribeTraffic": "Журнал трафіку підписки",
|
"subscribeTraffic": "Журнал трафіку підписки",
|
||||||
"trafficDetails": "Деталі трафіку"
|
"trafficDetails": "Деталі трафіку"
|
||||||
}
|
},
|
||||||
|
"type": {
|
||||||
|
"1": "Поповнення",
|
||||||
|
"2": "Виведення",
|
||||||
|
"3": "Покупка",
|
||||||
|
"4": "Повернення",
|
||||||
|
"5": "Нагорода",
|
||||||
|
"6": "Комісія"
|
||||||
|
},
|
||||||
|
"unknown": "Невідомо"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,9 +15,11 @@
|
|||||||
"platform": "Nền tảng",
|
"platform": "Nền tảng",
|
||||||
"remark": "Ghi chú",
|
"remark": "Ghi chú",
|
||||||
"resetAt": "Đặt lại vào",
|
"resetAt": "Đặt lại vào",
|
||||||
|
"server": "Máy chủ",
|
||||||
"serverId": "ID máy chủ",
|
"serverId": "ID máy chủ",
|
||||||
"status": "Trạng thái",
|
"status": "Trạng thái",
|
||||||
"subject": "Chủ đề",
|
"subject": "Chủ đề",
|
||||||
|
"subscribe": "Đăng ký",
|
||||||
"subscribeId": "ID đăng ký",
|
"subscribeId": "ID đăng ký",
|
||||||
"success": "Thành công",
|
"success": "Thành công",
|
||||||
"time": "Thời gian",
|
"time": "Thời gian",
|
||||||
@ -32,7 +34,9 @@
|
|||||||
"userId": "ID người dùng"
|
"userId": "ID người dùng"
|
||||||
},
|
},
|
||||||
"datePlaceholder": "YYYY-MM-DD",
|
"datePlaceholder": "YYYY-MM-DD",
|
||||||
|
"detail": "Chi tiết",
|
||||||
"failed": "Thất bại",
|
"failed": "Thất bại",
|
||||||
|
"pending": "Đang chờ",
|
||||||
"placeholder": {
|
"placeholder": {
|
||||||
"serverName": "Tên máy chủ",
|
"serverName": "Tên máy chủ",
|
||||||
"toOrSubject": "Đến / Chủ đề",
|
"toOrSubject": "Đến / Chủ đề",
|
||||||
@ -42,6 +46,8 @@
|
|||||||
"userIdOrOrderNoOrSubscribeId": "ID người dùng / Số đơn hàng / ID đăng ký",
|
"userIdOrOrderNoOrSubscribeId": "ID người dùng / Số đơn hàng / ID đăng ký",
|
||||||
"userIdOrTokenOrIpOrUa": "ID người dùng / Mã thông báo / IP / UA"
|
"userIdOrTokenOrIpOrUa": "ID người dùng / Mã thông báo / IP / UA"
|
||||||
},
|
},
|
||||||
|
"sending": "Đang gửi",
|
||||||
|
"sent": "Đã gửi",
|
||||||
"success": "Thành công",
|
"success": "Thành công",
|
||||||
"title": {
|
"title": {
|
||||||
"balance": "Nhật ký Số dư",
|
"balance": "Nhật ký Số dư",
|
||||||
@ -56,5 +62,14 @@
|
|||||||
"subscribe": "Nhật ký Đăng ký",
|
"subscribe": "Nhật ký Đăng ký",
|
||||||
"subscribeTraffic": "Nhật ký Lưu lượng Đăng ký",
|
"subscribeTraffic": "Nhật ký Lưu lượng Đăng ký",
|
||||||
"trafficDetails": "Chi tiết Lưu lượng"
|
"trafficDetails": "Chi tiết Lưu lượng"
|
||||||
}
|
},
|
||||||
|
"type": {
|
||||||
|
"1": "Nạp tiền",
|
||||||
|
"2": "Rút tiền",
|
||||||
|
"3": "Mua hàng",
|
||||||
|
"4": "Hoàn tiền",
|
||||||
|
"5": "Phần thưởng",
|
||||||
|
"6": "Hoa hồng"
|
||||||
|
},
|
||||||
|
"unknown": "Không xác định"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -16,6 +16,8 @@
|
|||||||
"time": "时间",
|
"time": "时间",
|
||||||
"userId": "用户ID",
|
"userId": "用户ID",
|
||||||
"subscribeId": "订阅ID",
|
"subscribeId": "订阅ID",
|
||||||
|
"subscribe": "订阅",
|
||||||
|
"server": "服务器",
|
||||||
"token": "令牌",
|
"token": "令牌",
|
||||||
"amount": "金额",
|
"amount": "金额",
|
||||||
"orderId": "订单ID",
|
"orderId": "订单ID",
|
||||||
@ -32,7 +34,9 @@
|
|||||||
"identifier": "标识"
|
"identifier": "标识"
|
||||||
},
|
},
|
||||||
"datePlaceholder": "YYYY-MM-DD",
|
"datePlaceholder": "YYYY-MM-DD",
|
||||||
|
"detail": "详情",
|
||||||
"failed": "失败",
|
"failed": "失败",
|
||||||
|
"pending": "等待中",
|
||||||
"placeholder": {
|
"placeholder": {
|
||||||
"toOrSubject": "收件人 / 主题",
|
"toOrSubject": "收件人 / 主题",
|
||||||
"userIdOrIpOrMethodOrUa": "用户ID / IP / 方式 / UA",
|
"userIdOrIpOrMethodOrUa": "用户ID / IP / 方式 / UA",
|
||||||
@ -42,6 +46,8 @@
|
|||||||
"userIdOrOrderNoOrSubscribeId": "用户ID / 订单号 / 订阅ID",
|
"userIdOrOrderNoOrSubscribeId": "用户ID / 订单号 / 订阅ID",
|
||||||
"userIdOrOrderId": "用户ID / 订单ID"
|
"userIdOrOrderId": "用户ID / 订单ID"
|
||||||
},
|
},
|
||||||
|
"sending": "发送中",
|
||||||
|
"sent": "已发送",
|
||||||
"success": "成功",
|
"success": "成功",
|
||||||
"title": {
|
"title": {
|
||||||
"email": "邮件日志",
|
"email": "邮件日志",
|
||||||
@ -56,5 +62,14 @@
|
|||||||
"resetSubscribe": "重置订阅日志",
|
"resetSubscribe": "重置订阅日志",
|
||||||
"subscribeTraffic": "订阅流量日志",
|
"subscribeTraffic": "订阅流量日志",
|
||||||
"trafficDetails": "流量明细"
|
"trafficDetails": "流量明细"
|
||||||
}
|
},
|
||||||
|
"type": {
|
||||||
|
"1": "充值",
|
||||||
|
"2": "提取",
|
||||||
|
"3": "购买",
|
||||||
|
"4": "退款",
|
||||||
|
"5": "奖励",
|
||||||
|
"6": "佣金"
|
||||||
|
},
|
||||||
|
"unknown": "未知"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -95,6 +95,7 @@
|
|||||||
"subscription": "订阅",
|
"subscription": "订阅",
|
||||||
"traffic": "流量",
|
"traffic": "流量",
|
||||||
"traffic_ratio": "倍率",
|
"traffic_ratio": "倍率",
|
||||||
|
"transport": "传输方式",
|
||||||
"transport_title": "传输方式",
|
"transport_title": "传输方式",
|
||||||
"udp_relay_mode": "UDP 转发模式",
|
"udp_relay_mode": "UDP 转发模式",
|
||||||
"unitSecondsShort": "S",
|
"unitSecondsShort": "S",
|
||||||
|
|||||||
@ -15,9 +15,11 @@
|
|||||||
"platform": "平台",
|
"platform": "平台",
|
||||||
"remark": "備註",
|
"remark": "備註",
|
||||||
"resetAt": "重置時間",
|
"resetAt": "重置時間",
|
||||||
|
"server": "伺服器",
|
||||||
"serverId": "伺服器ID",
|
"serverId": "伺服器ID",
|
||||||
"status": "狀態",
|
"status": "狀態",
|
||||||
"subject": "主題",
|
"subject": "主題",
|
||||||
|
"subscribe": "訂閱",
|
||||||
"subscribeId": "訂閱ID",
|
"subscribeId": "訂閱ID",
|
||||||
"success": "成功",
|
"success": "成功",
|
||||||
"time": "時間",
|
"time": "時間",
|
||||||
@ -32,7 +34,9 @@
|
|||||||
"userId": "用戶ID"
|
"userId": "用戶ID"
|
||||||
},
|
},
|
||||||
"datePlaceholder": "YYYY-MM-DD",
|
"datePlaceholder": "YYYY-MM-DD",
|
||||||
|
"detail": "詳情",
|
||||||
"failed": "失敗",
|
"failed": "失敗",
|
||||||
|
"pending": "待處理",
|
||||||
"placeholder": {
|
"placeholder": {
|
||||||
"serverName": "伺服器名稱",
|
"serverName": "伺服器名稱",
|
||||||
"toOrSubject": "收件人 / 主題",
|
"toOrSubject": "收件人 / 主題",
|
||||||
@ -42,6 +46,8 @@
|
|||||||
"userIdOrOrderNoOrSubscribeId": "用戶ID / 訂單號 / 訂閱ID",
|
"userIdOrOrderNoOrSubscribeId": "用戶ID / 訂單號 / 訂閱ID",
|
||||||
"userIdOrTokenOrIpOrUa": "用戶ID / 令牌 / IP / UA"
|
"userIdOrTokenOrIpOrUa": "用戶ID / 令牌 / IP / UA"
|
||||||
},
|
},
|
||||||
|
"sending": "發送中",
|
||||||
|
"sent": "已發送",
|
||||||
"success": "成功",
|
"success": "成功",
|
||||||
"title": {
|
"title": {
|
||||||
"balance": "餘額日誌",
|
"balance": "餘額日誌",
|
||||||
@ -56,5 +62,14 @@
|
|||||||
"subscribe": "訂閱日誌",
|
"subscribe": "訂閱日誌",
|
||||||
"subscribeTraffic": "訂閱流量日誌",
|
"subscribeTraffic": "訂閱流量日誌",
|
||||||
"trafficDetails": "流量詳情"
|
"trafficDetails": "流量詳情"
|
||||||
}
|
},
|
||||||
|
"type": {
|
||||||
|
"1": "充值",
|
||||||
|
"2": "提現",
|
||||||
|
"3": "購買",
|
||||||
|
"4": "退款",
|
||||||
|
"5": "獎勵",
|
||||||
|
"6": "佣金"
|
||||||
|
},
|
||||||
|
"unknown": "未知"
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user