♻️ refactor: Refactoring and adding multiple features

This commit is contained in:
web 2025-08-05 06:42:39 -07:00
parent 48415e9a30
commit 65c9b9f64f
106 changed files with 6893 additions and 4604 deletions

View File

@ -51,7 +51,7 @@ const formSchema = z.object({
type FormSchema = z.infer<typeof formSchema>;
export default function ConfigForm() {
const t = useTranslations('subscribe.app');
const t = useTranslations('product.app');
const [open, setOpen] = useState(false);
const [loading, setLoading] = useState(false);

View File

@ -80,7 +80,7 @@ interface FormProps<T> {
export default function SubscribeAppForm<
T extends API.CreateApplicationRequest | API.UpdateApplicationRequest,
>({ trigger, title, loading, initialValues, onSubmit }: FormProps<T>) {
const t = useTranslations('subscribe.app');
const t = useTranslations('product.app');
const [open, setOpen] = useState(false);
type FormSchema = z.infer<typeof formSchema>;

View File

@ -17,7 +17,7 @@ import ConfigForm from './config';
import SubscribeAppForm from './form';
export default function SubscribeApp() {
const t = useTranslations('subscribe.app');
const t = useTranslations('product.app');
const [loading, setLoading] = useState(false);
const ref = useRef<ProTableActions>(null);

View File

@ -0,0 +1,480 @@
'use client';
import { zodResolver } from '@hookform/resolvers/zod';
import { Button } from '@workspace/ui/components/button';
import {
Form,
FormControl,
FormDescription,
FormField,
FormItem,
FormLabel,
FormMessage,
} from '@workspace/ui/components/form';
import { Input } from '@workspace/ui/components/input';
import { ScrollArea } from '@workspace/ui/components/scroll-area';
import {
Select,
SelectContent,
SelectItem,
SelectTrigger,
SelectValue,
} from '@workspace/ui/components/select';
import {
Sheet,
SheetContent,
SheetFooter,
SheetHeader,
SheetTitle,
SheetTrigger,
} from '@workspace/ui/components/sheet';
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@workspace/ui/components/tabs';
import { Textarea } from '@workspace/ui/components/textarea';
import { MarkdownEditor } from '@workspace/ui/custom-components/editor';
import { EnhancedInput } from '@workspace/ui/custom-components/enhanced-input';
import { Icon } from '@workspace/ui/custom-components/icon';
import { useEffect, useState } from 'react';
import { useForm } from 'react-hook-form';
import { toast } from 'sonner';
import { z } from 'zod';
const emailBroadcastSchema = z.object({
subject: z.string().min(1, 'Email subject cannot be empty'),
content: z.string().min(1, 'Email content cannot be empty'),
// Send settings
additional_emails: z
.string()
.optional()
.refine(
(value) => {
if (!value || value.trim() === '') return true;
const emails = value.split('\n').filter((email) => email.trim() !== '');
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
return emails.every((email) => emailRegex.test(email.trim()));
},
{
message: 'Please enter valid email addresses, one per line',
},
),
// Send time settings
scheduled_time: z.string().optional(),
user_filters: z.object({
subscription_status: z.string().optional(),
registration_date_from: z.string().optional(),
registration_date_to: z.string().optional(),
user_groups: z.array(z.string()).default([]),
}),
rate_limit: z.object({
email_interval_seconds: z
.number()
.min(1, 'Email interval (seconds) cannot be less than 1')
.default(1),
daily_limit: z.number().min(1, 'Daily limit must be at least 1').default(1000),
}),
});
type EmailBroadcastFormData = z.infer<typeof emailBroadcastSchema>;
export default function EmailBroadcastForm() {
const [open, setOpen] = useState(false);
const [loading, setLoading] = useState(false);
const [estimatedRecipients, setEstimatedRecipients] = useState<{
users: number;
additional: number;
total: number;
}>({ users: 0, additional: 0, total: 0 });
const form = useForm<EmailBroadcastFormData>({
resolver: zodResolver(emailBroadcastSchema),
defaultValues: {
subject: '',
content: '',
additional_emails: '',
scheduled_time: '',
user_filters: {
subscription_status: 'all',
registration_date_from: '',
registration_date_to: '',
user_groups: [],
},
rate_limit: {
email_interval_seconds: 1,
daily_limit: 1000,
},
},
});
// Calculate recipient count
const calculateRecipients = () => {
const formData = form.getValues();
// Simulate user data statistics (should call API in real implementation)
let userCount = 0;
const sendingScope = formData.user_filters.subscription_status;
if (sendingScope === 'skip') {
// Send only to additional emails
userCount = 0;
} else {
let baseCount = 1500;
if (sendingScope === 'active') {
baseCount = Math.floor(baseCount * 0.3); // 30% active subscription users
} else if (sendingScope === 'expired') {
baseCount = Math.floor(baseCount * 0.2); // 20% expired subscription users
} else if (sendingScope === 'none') {
baseCount = Math.floor(baseCount * 0.5); // 50% no subscription users
}
// If 'all' or empty, keep baseCount unchanged (all platform users)
// Date filter impact (simplified calculation)
if (
formData.user_filters.registration_date_from ||
formData.user_filters.registration_date_to
) {
baseCount = Math.floor(baseCount * 0.7); // Estimate about 70% after date filtering
}
userCount = baseCount;
}
// Calculate additional email count
const additionalEmails = formData.additional_emails || '';
const additionalCount = additionalEmails
.split('\n')
.filter((email: string) => email.trim() !== '').length;
const total = userCount + additionalCount;
setEstimatedRecipients({
users: userCount,
additional: additionalCount,
total,
});
};
// Listen to form changes
const watchedValues = form.watch();
// Use useEffect to respond to form changes
useEffect(() => {
calculateRecipients();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [
watchedValues.user_filters?.subscription_status,
watchedValues.user_filters?.registration_date_from,
watchedValues.user_filters?.registration_date_to,
watchedValues.additional_emails,
]);
const onSubmit = async (data: EmailBroadcastFormData) => {
setLoading(true);
try {
// Validate scheduled send time
if (data.scheduled_time && data.scheduled_time.trim() !== '') {
const scheduledDate = new Date(data.scheduled_time);
const now = new Date();
if (scheduledDate <= now) {
toast.error('Scheduled send time must be later than current time');
return;
}
}
// Simulate API call
await new Promise((resolve) => setTimeout(resolve, 1000));
console.log('Email broadcast data:', data);
if (!data.scheduled_time || data.scheduled_time.trim() === '') {
toast.success('Email sent successfully');
} else {
toast.success('Email added to scheduled send queue');
}
form.reset();
setOpen(false);
} catch (error) {
toast.error('Send failed, please try again');
} finally {
setLoading(false);
}
};
return (
<Sheet open={open} onOpenChange={setOpen}>
<SheetTrigger asChild>
<div className='flex cursor-pointer items-center justify-between transition-colors'>
<div className='flex items-center gap-3'>
<div className='bg-primary/10 flex h-10 w-10 items-center justify-center rounded-lg'>
<Icon icon='mdi:email-send' className='text-primary h-5 w-5' />
</div>
<div className='flex-1'>
<p className='font-medium'>Email Broadcast</p>
<p className='text-muted-foreground text-sm'>Create new email broadcast campaign</p>
</div>
</div>
<Icon icon='mdi:chevron-right' className='size-6' />
</div>
</SheetTrigger>
<SheetContent className='w-[700px] max-w-full md:max-w-screen-lg'>
<SheetHeader>
<SheetTitle>Create Email Broadcast</SheetTitle>
</SheetHeader>
<ScrollArea className='-mx-6 h-[calc(100dvh-48px-36px-36px-env(safe-area-inset-top))] px-6'>
<Form {...form}>
<form
id='broadcast-form'
onSubmit={form.handleSubmit(onSubmit)}
className='space-y-2 pt-4'
>
<Tabs defaultValue='content' className='space-y-2'>
<TabsList className='grid w-full grid-cols-2'>
<TabsTrigger value='content'>Email Content</TabsTrigger>
<TabsTrigger value='settings'>Send Settings</TabsTrigger>
</TabsList>
{/* Email Content Tab */}
<TabsContent value='content' className='space-y-2'>
<FormField
control={form.control}
name='subject'
render={({ field }) => (
<FormItem>
<FormLabel>Email Subject</FormLabel>
<FormControl>
<Input placeholder='Please enter email subject' {...field} />
</FormControl>
<FormMessage />
</FormItem>
)}
/>
<FormField
control={form.control}
name='content'
render={({ field }) => (
<FormItem>
<FormLabel>Email Content</FormLabel>
<FormControl>
<MarkdownEditor
value={field.value}
onChange={(value) => {
form.setValue(field.name, value || '');
}}
/>
</FormControl>
<FormDescription>
Use Markdown editor to write email content with preview functionality
</FormDescription>
<FormMessage />
</FormItem>
)}
/>
</TabsContent>
{/* Send Settings Tab */}
<TabsContent value='settings' className='space-y-2'>
{/* Send scope and estimated recipients */}
<div className='grid grid-cols-2 items-center gap-4'>
<FormField
control={form.control}
name='user_filters.subscription_status'
render={({ field }) => (
<FormItem>
<FormLabel>Send Scope</FormLabel>
<Select onValueChange={field.onChange} value={field.value || 'all'}>
<FormControl>
<SelectTrigger>
<SelectValue placeholder='Select send scope' />
</SelectTrigger>
</FormControl>
<SelectContent>
<SelectItem value='all'>All platform users</SelectItem>
<SelectItem value='active'>Active subscription users only</SelectItem>
<SelectItem value='expired'>
Expired subscription users only
</SelectItem>
<SelectItem value='none'>No subscription users only</SelectItem>
<SelectItem value='skip'>
Additional emails only (skip platform users)
</SelectItem>
</SelectContent>
</Select>
<FormDescription>
Choose the user scope for email sending. Select &ldquo;Additional emails
only&rdquo; to send only to the email addresses filled below
</FormDescription>
</FormItem>
)}
/>
{/* Estimated recipients info */}
<div className='flex justify-end'>
<div className='border-l-primary bg-primary/10 border-l-4 px-4 py-3 text-sm'>
<span className='text-muted-foreground'>Estimated recipients: </span>
<span className='text-primary text-lg font-medium'>
{estimatedRecipients.total}
</span>
<span className='text-muted-foreground ml-2 text-xs'>
(users: {estimatedRecipients.users}, additional:{' '}
{estimatedRecipients.additional})
</span>
</div>
</div>
</div>
<div className='grid grid-cols-2 gap-4'>
<FormField
control={form.control}
name='user_filters.registration_date_from'
render={({ field }) => (
<FormItem>
<FormLabel>Registration Start Date</FormLabel>
<FormControl>
<EnhancedInput
type='datetime-local'
disabled={form.watch('user_filters.subscription_status') === 'skip'}
value={field.value}
onValueChange={field.onChange}
/>
</FormControl>
<FormDescription>
Include users registered on or after this date
</FormDescription>
</FormItem>
)}
/>
<FormField
control={form.control}
name='user_filters.registration_date_to'
render={({ field }) => (
<FormItem>
<FormLabel>Registration End Date</FormLabel>
<FormControl>
<EnhancedInput
type='datetime-local'
disabled={form.watch('user_filters.subscription_status') === 'skip'}
value={field.value}
onValueChange={field.onChange}
/>
</FormControl>
<FormDescription>
Include users registered on or before this date
</FormDescription>
</FormItem>
)}
/>
</div>
{/* Additional recipients */}
<FormField
control={form.control}
name='additional_emails'
render={({ field }) => (
<FormItem>
<FormLabel>Additional Recipient Emails</FormLabel>
<FormControl>
<Textarea
placeholder={`Please enter additional recipient emails, one per line, for example:\nexample1@domain.com\nexample2@domain.com\nexample3@domain.com`}
className='min-h-[120px] font-mono text-sm'
{...field}
/>
</FormControl>
<FormDescription>
These emails will receive the email additionally, not affected by the user
filter conditions above
</FormDescription>
<FormMessage />
</FormItem>
)}
/>
{/* Send time settings */}
<FormField
control={form.control}
name='scheduled_time'
render={({ field }) => (
<FormItem>
<FormLabel>Scheduled Send</FormLabel>
<FormControl>
<EnhancedInput
type='datetime-local'
placeholder='Leave empty for immediate send'
value={field.value}
onValueChange={field.onChange}
/>
</FormControl>
<FormDescription>
Select send time, leave empty for immediate send
</FormDescription>
<FormMessage />
</FormItem>
)}
/>
{/* Send rate control */}
<div className='grid grid-cols-2 gap-4'>
<FormField
control={form.control}
name='rate_limit.email_interval_seconds'
render={({ field }) => (
<FormItem>
<FormLabel>Email Interval (seconds)</FormLabel>
<FormControl>
<Input
type='number'
min={0}
step={0.1}
placeholder='1'
{...field}
onChange={(e) => field.onChange(parseFloat(e.target.value) || 1)}
/>
</FormControl>
<FormDescription>Interval time between each email</FormDescription>
<FormMessage />
</FormItem>
)}
/>
<FormField
control={form.control}
name='rate_limit.daily_limit'
render={({ field }) => (
<FormItem>
<FormLabel>Daily Send Limit</FormLabel>
<FormControl>
<Input
type='number'
min={1}
placeholder='1000'
{...field}
onChange={(e) => field.onChange(parseInt(e.target.value) || 1000)}
/>
</FormControl>
<FormDescription>
Maximum number of emails to send per day
</FormDescription>
<FormMessage />
</FormItem>
)}
/>
</div>
</TabsContent>
</Tabs>
</form>
</Form>
</ScrollArea>
<SheetFooter className='flex flex-row items-center justify-end gap-2 pt-3'>
<Button variant='outline' onClick={() => setOpen(false)}>
Cancel
</Button>
<Button type='submit' form='broadcast-form' disabled={loading}>
{loading && <Icon icon='mdi:loading' className='mr-2 h-4 w-4 animate-spin' />}
{loading
? 'Processing...'
: !form.watch('scheduled_time') || form.watch('scheduled_time')?.trim() === ''
? 'Send Now'
: 'Schedule Send'}
</Button>
</SheetFooter>
</SheetContent>
</Sheet>
);
}

View File

@ -0,0 +1,225 @@
'use client';
import { ProTable, ProTableActions } from '@/components/pro-table';
import { Badge } from '@workspace/ui/components/badge';
import { Button } from '@workspace/ui/components/button';
import { ScrollArea } from '@workspace/ui/components/scroll-area';
import {
Sheet,
SheetContent,
SheetHeader,
SheetTitle,
SheetTrigger,
} from '@workspace/ui/components/sheet';
import { Icon } from '@workspace/ui/custom-components/icon';
import { formatDate } from '@workspace/ui/utils';
import { useTranslations } from 'next-intl';
import { useRef, useState } from 'react';
interface EmailLog extends Record<string, unknown> {
id: number;
subject: string;
recipient_email: string;
status: 'pending' | 'sent' | 'failed';
sent_at?: string;
error_message?: string;
broadcast_id: number;
}
interface GetEmailLogsParams extends Record<string, unknown> {
page: number;
size: number;
status?: string;
search?: string;
}
// Mock API function
const getEmailLogs = async (params: GetEmailLogsParams) => {
// Simulate API call
await new Promise((resolve) => setTimeout(resolve, 500));
// Mock data
const mockData: EmailLog[] = [
{
id: 1,
subject: 'New Feature Release Notification',
recipient_email: 'user1@example.com',
status: 'sent',
sent_at: '2024-01-15T10:05:00Z',
broadcast_id: 1,
},
{
id: 2,
subject: 'New Feature Release Notification',
recipient_email: 'user2@example.com',
status: 'sent',
sent_at: '2024-01-15T10:05:30Z',
broadcast_id: 1,
},
{
id: 3,
subject: 'New Feature Release Notification',
recipient_email: 'user3@example.com',
status: 'failed',
error_message: 'Invalid email address',
broadcast_id: 1,
},
{
id: 4,
subject: 'System Maintenance Notice',
recipient_email: 'user4@example.com',
status: 'sent',
sent_at: '2024-01-14T15:35:00Z',
broadcast_id: 2,
},
{
id: 5,
subject: 'System Maintenance Notice',
recipient_email: 'user5@example.com',
status: 'pending',
broadcast_id: 2,
},
];
return {
data: {
data: {
list: mockData,
total: mockData.length,
},
},
};
};
export default function BroadcastLogsTable() {
const t = useTranslations('marketing');
const [open, setOpen] = useState(false);
const ref = useRef<ProTableActions>(null);
const getStatusBadge = (status: string) => {
const statusMap = {
pending: { variant: 'secondary' as const, label: 'Pending' },
sent: { variant: 'default' as const, label: 'Sent' },
failed: { variant: 'destructive' as const, label: 'Failed' },
};
const statusInfo = statusMap[status as keyof typeof statusMap] || statusMap.pending;
return <Badge variant={statusInfo.variant}>{statusInfo.label}</Badge>;
};
return (
<Sheet open={open} onOpenChange={setOpen}>
<SheetTrigger asChild>
<div className='flex cursor-pointer items-center justify-between transition-colors'>
<div className='flex items-center gap-3'>
<div className='bg-primary/10 flex h-10 w-10 items-center justify-center rounded-lg'>
<Icon icon='mdi:email-newsletter' className='text-primary h-5 w-5' />
</div>
<div className='flex-1'>
<p className='font-medium'>Broadcast Logs</p>
<p className='text-muted-foreground text-sm'>
View email send records and detailed status
</p>
</div>
</div>
<Icon icon='mdi:chevron-right' className='size-6' />
</div>
</SheetTrigger>
<SheetContent className='w-[90vw] max-w-full md:max-w-screen-xl'>
<SheetHeader>
<SheetTitle>Broadcast Logs</SheetTitle>
</SheetHeader>
<ScrollArea className='-mx-6 h-[calc(100dvh-48px-36px-env(safe-area-inset-top))] px-6'>
<div className='pt-4'>
<ProTable<EmailLog, GetEmailLogsParams>
action={ref}
columns={[
{
accessorKey: 'id',
header: 'ID',
size: 80,
},
{
accessorKey: 'subject',
header: 'Subject',
size: 200,
cell: ({ row }) => (
<div
className='max-w-[200px] truncate'
title={row.getValue('subject') as string}
>
{row.getValue('subject') as string}
</div>
),
},
{
accessorKey: 'recipient_email',
header: 'Recipient Email',
size: 200,
},
{
accessorKey: 'status',
header: 'Status',
size: 100,
cell: ({ row }) => getStatusBadge(row.getValue('status') as string),
},
{
accessorKey: 'sent_at',
header: 'Sent At',
size: 150,
cell: ({ row }) => {
const sentAt = row.getValue('sent_at') as string;
return sentAt ? formatDate(new Date(sentAt)) : '--';
},
},
{
accessorKey: 'error_message',
header: 'Error Message',
size: 200,
cell: ({ row }) => {
const error = row.getValue('error_message') as string;
return error ? <span className='text-sm text-red-600'>{error}</span> : '--';
},
},
]}
request={async (pagination, filter) => {
const { data } = await getEmailLogs({
...pagination,
...filter,
});
return {
list: data.data?.list || [],
total: data.data?.total || 0,
};
}}
params={[
{
key: 'status',
placeholder: 'Status',
options: [
{ label: 'Pending', value: 'pending' },
{ label: 'Sent', value: 'sent' },
{ label: 'Failed', value: 'failed' },
],
},
{
key: 'search',
placeholder: 'Recipient Email',
},
]}
actions={{
render: (row) => {
return [
<Button key='view' variant='outline' size='sm'>
View
</Button>,
];
},
}}
/>
</div>
</ScrollArea>
</SheetContent>
</Sheet>
);
}

View File

@ -0,0 +1,41 @@
'use client';
import { Table, TableBody, TableCell, TableRow } from '@workspace/ui/components/table';
import { useTranslations } from 'next-intl';
import EmailBroadcastForm from './email/broadcast-form';
import BroadcastLogsTable from './email/logs-table';
export default function MarketingPage() {
const t = useTranslations('marketing');
const formSections = [
{
title: 'Email Marketing',
forms: [{ component: EmailBroadcastForm }, { component: BroadcastLogsTable }],
},
];
return (
<div className='space-y-8'>
{formSections.map((section, sectionIndex) => (
<div key={sectionIndex}>
<h2 className='mb-4 text-lg font-semibold'>{section.title}</h2>
<Table>
<TableBody>
{section.forms.map((form, formIndex) => {
const FormComponent = form.component;
return (
<TableRow key={formIndex}>
<TableCell>
<FormComponent />
</TableCell>
</TableRow>
);
})}
</TableBody>
</Table>
</div>
))}
</div>
);
}

View File

@ -44,7 +44,7 @@ export default function GroupForm<T extends Record<string, any>>({
trigger,
title,
}: GroupFormProps<T>) {
const t = useTranslations('subscribe');
const t = useTranslations('product');
const [open, setOpen] = useState(false);
const form = useForm({

View File

@ -17,7 +17,7 @@ import { toast } from 'sonner';
import GroupForm from './form';
const GroupTable = () => {
const t = useTranslations('subscribe');
const t = useTranslations('product');
const [loading, setLoading] = useState(false);
const ref = useRef<ProTableActions>(null);

View File

@ -0,0 +1,25 @@
import { getTranslations } from 'next-intl/server';
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@workspace/ui/components/tabs';
import GroupTable from './group/table';
import SubscribeTable from './subscribe-table';
export default async function Page() {
const t = await getTranslations('product');
return (
<Tabs defaultValue='subscribe'>
<TabsList>
<TabsTrigger value='subscribe'>{t('tabs.subscribe')}</TabsTrigger>
<TabsTrigger value='group'>{t('tabs.subscribeGroup')}</TabsTrigger>
</TabsList>
<TabsContent value='subscribe'>
<SubscribeTable />
</TabsContent>
<TabsContent value='group'>
<GroupTable />
</TabsContent>
</Tabs>
);
}

View File

@ -79,7 +79,7 @@ export default function SubscribeForm<T extends Record<string, any>>({
trigger,
title,
}: Readonly<SubscribeFormProps<T>>) {
const t = useTranslations('subscribe');
const t = useTranslations('product');
const [open, setOpen] = useState(false);
const updateTimeoutRef = useRef<NodeJS.Timeout | null>(null);

View File

@ -22,7 +22,7 @@ import { toast } from 'sonner';
import SubscribeForm from './subscribe-form';
export default function SubscribeTable() {
const t = useTranslations('subscribe');
const t = useTranslations('product');
const [loading, setLoading] = useState(false);
const { data: groups } = useQuery({
queryKey: ['getSubscribeGroupList', 'all'],

View File

@ -1,240 +0,0 @@
'use client';
import { createRuleGroup } from '@/services/admin/server';
import { Button } from '@workspace/ui/components/button';
import {
Dialog,
DialogContent,
DialogDescription,
DialogFooter,
DialogHeader,
DialogTitle,
} from '@workspace/ui/components/dialog';
import { Label } from '@workspace/ui/components/label';
import { Progress } from '@workspace/ui/components/progress';
import { Textarea } from '@workspace/ui/components/textarea';
import { Icon } from '@workspace/ui/custom-components/icon';
import yaml from 'js-yaml';
import { useTranslations } from 'next-intl';
import { useRef, useState } from 'react';
import { toast } from 'sonner';
interface ImportYamlRulesProps {
onImportSuccess?: () => void;
}
interface RuleGroup {
name: string;
rules: string[];
}
export default function ImportYamlRules({ onImportSuccess }: ImportYamlRulesProps) {
const t = useTranslations('rules');
const [open, setOpen] = useState(false);
const [loading, setLoading] = useState(false);
const [yamlContent, setYamlContent] = useState('');
const [importProgress, setImportProgress] = useState(0);
const [importTotal, setImportTotal] = useState(0);
const [analyzing, setAnalyzing] = useState(false);
const fileInputRef = useRef<HTMLInputElement>(null);
const handleFileUpload = (e: React.ChangeEvent<HTMLInputElement>) => {
const file = e.target.files?.[0];
if (!file) return;
const reader = new FileReader();
reader.onload = (event) => {
const content = event.target?.result as string;
setYamlContent(content);
setOpen(true);
};
reader.readAsText(file);
e.target.value = '';
};
const processRule = (rule: string): { policyGroup: string; cleanRule: string } | null => {
const parts = rule.split(',');
if (parts.length === 1) {
return null;
}
let policyGroup = 'default';
let cleanRule = rule;
if (parts.length >= 3) {
const thirdPart = parts[2]?.trim();
if (thirdPart) {
policyGroup = thirdPart;
}
}
cleanRule = parts.slice(0, 2).join(',');
return { policyGroup, cleanRule };
};
const parseRulesIntoGroups = (rules: string[]): Record<string, string[]> => {
const groups: Record<string, string[]> = {};
for (const rule of rules) {
if (!rule.trim()) continue;
const result = processRule(rule);
if (result === null) continue;
const { policyGroup, cleanRule } = result;
if (!groups[policyGroup]) {
groups[policyGroup] = [];
}
// 不插入 MATCH 规则,只用于标识默认规则组
if (!rule.trim().startsWith('MATCH,')) {
groups[policyGroup].push(cleanRule);
}
}
return groups;
};
const checkIfDefaultRule = (originalRules: string[], groupName: string): boolean => {
return originalRules.some((rule) => {
const trimmedRule = rule.trim();
if (!trimmedRule.startsWith('MATCH,')) return false;
// 检查 MATCH 规则是否属于当前组
const parts = trimmedRule.split(',');
if (parts.length >= 3) {
const ruleGroup = parts[2]?.trim();
return ruleGroup === groupName;
}
return groupName === 'default';
});
};
const handleImport = async () => {
if (!yamlContent) {
toast.error(t('pleaseUploadFile'));
return;
}
setLoading(true);
setAnalyzing(true);
try {
const parsedYaml = yaml.load(yamlContent) as any;
if (!parsedYaml || !parsedYaml.rules) {
throw new Error(t('invalidYamlFormat'));
}
let allRules: string[] = [];
if (Array.isArray(parsedYaml.rules)) {
allRules = parsedYaml.rules.filter((rule: string) => rule.trim());
}
if (allRules.length === 0) {
throw new Error(t('noValidRules'));
}
const ruleGroups = parseRulesIntoGroups(allRules);
const groups = Object.entries(ruleGroups).map(([name, rules]) => ({
name,
rules,
}));
setImportTotal(groups.length);
setAnalyzing(false);
for (let i = 0; i < groups.length; i++) {
const group = groups[i];
if (!group?.name || !group?.rules.length) continue;
const isDefault = checkIfDefaultRule(allRules, group.name);
await createRuleGroup({
name: group.name,
rules: group?.rules.join('\n'),
enable: false,
tags: [],
icon: '',
type: 'default',
default: isDefault,
});
setImportProgress(i + 1);
}
toast.success(t('importSuccess'));
setOpen(false);
setYamlContent('');
setImportProgress(0);
setImportTotal(0);
onImportSuccess?.();
} catch (error) {
console.error('Import error:', error);
toast.error(error instanceof Error ? error.message : t('importFailed'));
} finally {
setLoading(false);
setAnalyzing(false);
}
};
return (
<>
<input
ref={fileInputRef}
type='file'
accept='.yml,.yaml'
style={{ display: 'none' }}
onChange={handleFileUpload}
/>
<Button variant='default' onClick={() => fileInputRef.current?.click()}>
{t('import')}
</Button>
<Dialog open={open} onOpenChange={setOpen}>
<DialogContent className='sm:max-w-[500px]'>
<DialogHeader>
<DialogTitle>{t('importYamlRules')}</DialogTitle>
<DialogDescription>{t('importYamlDescription')}</DialogDescription>
</DialogHeader>
<div className='grid gap-4 py-4'>
{yamlContent && (
<div className='grid gap-2'>
<Label htmlFor='preview'>{t('preview')}</Label>
<Textarea
id='preview'
value={yamlContent}
readOnly
rows={10}
className='font-mono text-xs'
/>
</div>
)}
{importTotal > 0 && (
<div className='grid gap-2'>
<div className='flex justify-between text-sm'>
<span>{analyzing ? t('analyzing') : t('importing')}</span>
<span>
{importProgress} / {importTotal}
</span>
</div>
<Progress value={(importProgress / importTotal) * 100} />
</div>
)}
</div>
<DialogFooter>
<Button variant='outline' onClick={() => setOpen(false)} disabled={loading}>
{t('cancel')}
</Button>
<Button onClick={handleImport} disabled={loading || !yamlContent}>
{loading && <Icon icon='mdi:loading' className='mr-2 animate-spin' />}
{t('import')}
</Button>
</DialogFooter>
</DialogContent>
</Dialog>
</>
);
}

View File

@ -1,244 +0,0 @@
'use client';
import { ProTable, ProTableActions } from '@/components/pro-table';
import {
createRuleGroup,
deleteRuleGroup,
getRuleGroupList,
updateRuleGroup,
} from '@/services/admin/server';
import { Badge } from '@workspace/ui/components/badge';
import { Button } from '@workspace/ui/components/button';
import { Switch } from '@workspace/ui/components/switch';
import { ConfirmButton } from '@workspace/ui/custom-components/confirm-button';
import { formatDate } from '@workspace/ui/utils';
import { useTranslations } from 'next-intl';
import Image from 'next/legacy/image';
import Link from 'next/link';
import { useRef, useState } from 'react';
import { toast } from 'sonner';
import ImportYamlRules from './import-yaml-rules';
import RuleForm from './rule-form';
export default function Page() {
const t = useTranslations('rules');
const [loading, setLoading] = useState(false);
const ref = useRef<ProTableActions>(null);
return (
<ProTable<API.ServerRuleGroup, { query: string }>
action={ref}
header={{
toolbar: (
<div className='flex gap-2'>
<Button variant='default' asChild>
<Link href='/template/rules.yml' target='_blank' download>
{t('downloadTemplate')}
</Link>
</Button>
<ImportYamlRules onImportSuccess={() => ref.current?.refresh()} />
<RuleForm<API.CreateRuleGroupRequest>
trigger={t('create')}
title={t('createRule')}
loading={loading}
onSubmit={async (values) => {
setLoading(true);
try {
await createRuleGroup({
name: values.name,
rules: values.rules || '',
enable: false,
tags: values.tags || [],
icon: values.icon || '',
type: values.type || 'default',
default: false,
});
toast.success(t('createSuccess'));
ref.current?.refresh();
setLoading(false);
return true;
} catch (error) {
setLoading(false);
return false;
}
}}
/>
</div>
),
}}
params={[
{
key: 'search',
placeholder: t('searchRule'),
},
]}
request={async (pagination, filters) => {
const { data } = await getRuleGroupList({
...pagination,
...filters,
});
return {
list: data.data?.list || [],
total: data.data?.total || 0,
};
}}
columns={[
{
accessorKey: 'enable',
header: t('enable'),
cell: ({ row }) => {
return (
<Switch
defaultChecked={row.getValue('enable')}
onCheckedChange={async (checked) => {
await updateRuleGroup({
...row.original,
enable: checked,
} as API.UpdateRuleGroupRequest);
ref.current?.refresh();
}}
/>
);
},
},
{
accessorKey: 'default',
header: t('defaultRule'),
cell: ({ row }) => (
<Switch
defaultChecked={row.original.default}
onCheckedChange={async (checked) => {
await updateRuleGroup({
...row.original,
default: checked,
} as API.UpdateRuleGroupRequest);
ref.current?.refresh();
}}
/>
),
},
{
accessorKey: 'type',
header: t('type'),
cell: ({ row }) => {
const type = row.original.type || 'default';
if (type === 'default') {
return <Badge variant='default'>{t('default')}</Badge>;
}
if (type === 'reject') {
return <Badge variant='destructive'>{t('reject')}</Badge>;
}
if (type === 'direct') {
return <Badge variant='secondary'>{t('direct')}</Badge>;
}
return <Badge variant='default'>{t('default')}</Badge>;
},
},
{
accessorKey: 'name',
header: t('name'),
cell: ({ row }) => (
<div className='flex items-center gap-2'>
{row.original.icon && (
<Image
src={row.original.icon}
alt={row.original.name}
className='h-6 w-6 rounded-md'
width={24}
height={24}
/>
)}
<span>{row.original.name}</span>
</div>
),
},
{
accessorKey: 'tags',
header: t('tags'),
cell: ({ row }) => {
const tags = row.original.tags.filter((item) => item) || [];
if (!tags.length) return '--';
return (
<>
{tags.map((tag) => (
<Badge key={tag} variant='outline' className='mr-1'>
{tag}
</Badge>
))}
</>
);
},
},
{
accessorKey: 'created_at',
header: t('createdAt'),
cell: ({ row }) => formatDate(row.original.created_at),
},
]}
actions={{
render: (row) => [
<RuleForm<API.UpdateRuleGroupRequest>
key='edit'
trigger={t('edit')}
title={t('editRule')}
loading={loading}
initialValues={row}
onSubmit={async (values) => {
setLoading(true);
try {
await updateRuleGroup({
id: row.id,
name: values.name,
tags: values.tags,
rules: values.rules,
enable: row.enable,
icon: values.icon,
type: values.type,
default: row.default,
});
toast.success(t('updateSuccess'));
ref.current?.refresh();
setLoading(false);
return true;
} catch (error) {
setLoading(false);
return false;
}
}}
/>,
<ConfirmButton
key='delete'
trigger={<Button variant='destructive'>{t('delete')}</Button>}
title={t('confirmDelete')}
description={t('deleteWarning')}
onConfirm={async () => {
await deleteRuleGroup({ id: row.id });
toast.success(t('deleteSuccess'));
ref.current?.refresh();
}}
cancelText={t('cancel')}
confirmText={t('confirm')}
/>,
],
batchRender: (rows) => [
<ConfirmButton
key='delete'
trigger={<Button variant='destructive'>{t('delete')}</Button>}
title={t('confirmDelete')}
description={t('deleteWarning')}
onConfirm={async () => {
for (const row of rows) {
await deleteRuleGroup({ id: row.id });
}
toast.success(t('deleteSuccess'));
ref.current?.reset();
ref.current?.refresh();
}}
cancelText={t('cancel')}
confirmText={t('confirm')}
/>,
],
}}
/>
);
}

View File

@ -1,266 +0,0 @@
'use client';
import { getNodeTagList } from '@/services/admin/server';
import { zodResolver } from '@hookform/resolvers/zod';
import { useQuery } from '@tanstack/react-query';
import { Button } from '@workspace/ui/components/button';
import {
Form,
FormControl,
FormField,
FormItem,
FormLabel,
FormMessage,
} from '@workspace/ui/components/form';
import { ScrollArea } from '@workspace/ui/components/scroll-area';
import {
Select,
SelectContent,
SelectItem,
SelectTrigger,
SelectValue,
} from '@workspace/ui/components/select';
import {
Sheet,
SheetContent,
SheetFooter,
SheetHeader,
SheetTitle,
SheetTrigger,
} from '@workspace/ui/components/sheet';
import { Textarea } from '@workspace/ui/components/textarea';
import { Combobox } from '@workspace/ui/custom-components/combobox';
import { EnhancedInput } from '@workspace/ui/custom-components/enhanced-input';
import { Icon } from '@workspace/ui/custom-components/icon';
import { UploadImage } from '@workspace/ui/custom-components/upload-image';
import { useTranslations } from 'next-intl';
import { useEffect, useState } from 'react';
import { useForm } from 'react-hook-form';
import { z } from 'zod';
const formSchema = z.object({
name: z.string().min(1, { message: '请输入规则名称' }),
tags: z.array(z.string()).default([]),
rules: z.string().default(''),
icon: z.string().default(''),
type: z.string().default('default'),
});
interface RuleFormProps<T> {
onSubmit: (data: T) => Promise<boolean> | boolean;
initialValues?: T;
loading?: boolean;
trigger: string;
title: string;
}
export default function RuleForm<T extends Record<string, any>>({
onSubmit,
initialValues,
loading,
trigger,
title,
}: RuleFormProps<T>) {
const t = useTranslations('rules');
const [open, setOpen] = useState(false);
const form = useForm({
resolver: zodResolver(formSchema),
defaultValues: {
...initialValues,
} as any,
});
useEffect(() => {
if (initialValues) {
form.reset(initialValues);
}
}, [form, initialValues]);
async function handleSubmit(data: { [x: string]: any }) {
const bool = await onSubmit(data as T);
if (bool) setOpen(false);
}
const { data: tags } = useQuery({
queryKey: ['getNodeTagList'],
queryFn: async () => {
const { data } = await getNodeTagList();
return data.data?.tags || [];
},
});
return (
<Sheet open={open} onOpenChange={setOpen}>
<SheetTrigger asChild>
<Button
onClick={() => {
form.reset();
setOpen(true);
}}
>
{trigger}
</Button>
</SheetTrigger>
<SheetContent className='w-[500px] max-w-full md:max-w-screen-md'>
<SheetHeader>
<SheetTitle>{title}</SheetTitle>
</SheetHeader>
<ScrollArea className='-mx-6 h-[calc(100vh-48px-36px-36px-env(safe-area-inset-top))]'>
<Form {...form}>
<form onSubmit={form.handleSubmit(handleSubmit)} className='space-y-4 px-6 pt-4'>
<FormField
control={form.control}
name='icon'
render={({ field }) => (
<FormItem>
<FormLabel>{t('appIcon')}</FormLabel>
<FormControl>
<EnhancedInput
placeholder={t('enterIconUrl')}
value={field.value}
suffix={
<UploadImage
className='bg-muted h-9 rounded-none border-none px-2'
onChange={(value) => {
form.setValue(field.name, value as string);
}}
/>
}
onValueChange={(value) => {
form.setValue(field.name, value);
}}
/>
</FormControl>
<FormMessage />
</FormItem>
)}
/>
<FormField
control={form.control}
name='name'
render={({ field }) => (
<FormItem>
<FormLabel>{t('name')}</FormLabel>
<FormControl>
<EnhancedInput
placeholder={t('enterRuleName')}
value={field.value}
onValueChange={(value) => {
form.setValue(field.name, value);
}}
/>
</FormControl>
<FormMessage />
</FormItem>
)}
/>
<FormField
control={form.control}
name='type'
render={({ field }) => (
<FormItem>
<FormLabel>{t('type')}</FormLabel>
<FormControl>
<Select
value={field.value}
onValueChange={(value) => {
form.setValue(field.name, value);
}}
>
<SelectTrigger>
<SelectValue placeholder={t('selectType')} />
</SelectTrigger>
<SelectContent>
<SelectItem value='default'>{t('default')}</SelectItem>
<SelectItem value='reject'>{t('reject')}</SelectItem>
<SelectItem value='direct'>{t('direct')}</SelectItem>
</SelectContent>
</Select>
</FormControl>
<FormMessage />
</FormItem>
)}
/>
<FormField
control={form.control}
name='tags'
render={({ field }) => (
<FormItem>
<FormLabel>{t('tagsLabel')}</FormLabel>
<FormControl>
<Combobox<string, true>
multiple
placeholder={t('selectTags')}
value={field.value}
onChange={(value) => {
form.setValue(field.name, value);
}}
options={tags?.map((item: string) => ({
value: item,
label: item,
}))}
/>
</FormControl>
<FormMessage />
</FormItem>
)}
/>
<FormField
control={form.control}
name='rules'
render={({ field }) => (
<FormItem>
<FormLabel>{t('rulesLabel')}</FormLabel>
<FormControl>
<Textarea
placeholder={t('enterRules')}
value={field.value}
rows={10}
onChange={(e) => {
form.setValue(field.name, e.target.value);
}}
/>
</FormControl>
<div className='text-muted-foreground mt-1 text-xs'>
<pre>{t('rulesFormat')}</pre>
<div className='border-muted mt-2 space-y-1 border-l-2 pl-2'>
<p className='font-mono'>DOMAIN,example.com</p>
<p className='font-mono'>DOMAIN-SUFFIX,google.com,DIRECT</p>
<p className='font-mono'>DOMAIN-KEYWORD,amazon,REJECT</p>
<p className='font-mono'>IP-CIDR,192.168.0.0/16</p>
<p className='font-mono'>IP-CIDR6,2001:db8::/32,REJECT</p>
<p className='font-mono'>SRC-IP-CIDR,192.168.1.201/32</p>
<p className='font-mono'>GEOIP,CN,DIRECT</p>
<p className='font-mono'>GEOIP,US</p>
<p className='font-mono'>DST-PORT,80,DIRECT</p>
<p className='font-mono'>SRC-PORT,7777,REJECT</p>
<p className='font-mono'>PROCESS-NAME,telegram</p>
</div>
</div>
<FormMessage />
</FormItem>
)}
/>
</form>
</Form>
</ScrollArea>
<SheetFooter className='flex-row justify-end gap-2 pt-3'>
<Button
variant='outline'
disabled={loading}
onClick={() => {
setOpen(false);
}}
>
{t('cancel')}
</Button>
<Button disabled={loading} onClick={form.handleSubmit(handleSubmit)}>
{loading && <Icon icon='mdi:loading' className='mr-2 animate-spin' />}
{t('confirm')}
</Button>
</SheetFooter>
</SheetContent>
</Sheet>
);
}

View File

@ -0,0 +1,250 @@
'use client';
import { zodResolver } from '@hookform/resolvers/zod';
import { useQuery } from '@tanstack/react-query';
import { useTranslations } from 'next-intl';
import { useEffect, useState } from 'react';
import { useForm } from 'react-hook-form';
import { toast } from 'sonner';
import { z } from 'zod';
import { getSubscribeConfig, updateSubscribeConfig } from '@/services/admin/system';
import { Button } from '@workspace/ui/components/button';
import {
Form,
FormControl,
FormDescription,
FormField,
FormItem,
FormLabel,
FormMessage,
} from '@workspace/ui/components/form';
import { ScrollArea } from '@workspace/ui/components/scroll-area';
import {
Sheet,
SheetContent,
SheetFooter,
SheetHeader,
SheetTitle,
SheetTrigger,
} from '@workspace/ui/components/sheet';
import { Switch } from '@workspace/ui/components/switch';
import { Textarea } from '@workspace/ui/components/textarea';
import { EnhancedInput } from '@workspace/ui/custom-components/enhanced-input';
import { Icon } from '@workspace/ui/custom-components/icon';
const subscribeConfigSchema = z.object({
single_model: z.boolean().optional(),
pan_domain: z.boolean().optional(),
subscribe_path: z.string().optional(),
subscribe_domain: z.string().optional(),
restrict_user_agent: z.boolean().optional(),
user_agent_whitelist: z.string().optional(),
});
type SubscribeConfigFormData = z.infer<typeof subscribeConfigSchema>;
export default function ConfigForm() {
const t = useTranslations('subscribe');
const [open, setOpen] = useState(false);
const [loading, setLoading] = useState(false);
const { data, refetch } = useQuery({
queryKey: ['getSubscribeConfig'],
queryFn: async () => {
const { data } = await getSubscribeConfig();
return data.data;
},
enabled: open,
});
const form = useForm<SubscribeConfigFormData>({
resolver: zodResolver(subscribeConfigSchema),
defaultValues: {
single_model: false,
pan_domain: false,
subscribe_path: '',
subscribe_domain: '',
restrict_user_agent: false,
user_agent_whitelist: '',
},
});
useEffect(() => {
if (data) {
form.reset(data);
}
}, [data, form]);
async function onSubmit(values: SubscribeConfigFormData) {
setLoading(true);
try {
await updateSubscribeConfig(values as API.SubscribeConfig);
toast.success(t('config.updateSuccess'));
refetch();
setOpen(false);
} catch (error) {
toast.error(t('config.updateError'));
} finally {
setLoading(false);
}
}
return (
<Sheet open={open} onOpenChange={setOpen}>
<SheetTrigger asChild>
<div className='flex cursor-pointer items-center justify-between transition-colors'>
<div className='flex items-center gap-3'>
<div className='bg-primary/10 flex h-10 w-10 items-center justify-center rounded-lg'>
<Icon icon='mdi:cog' className='text-primary h-5 w-5' />
</div>
<div className='flex-1'>
<p className='font-medium'>{t('config.title')}</p>
<p className='text-muted-foreground text-sm'>{t('config.description')}</p>
</div>
</div>
<Icon icon='mdi:chevron-right' className='size-6' />
</div>
</SheetTrigger>
<SheetContent className='w-[600px] max-w-full md:max-w-screen-md'>
<SheetHeader>
<SheetTitle>{t('config.title')}</SheetTitle>
</SheetHeader>
<ScrollArea className='-mx-6 h-[calc(100dvh-48px-36px-36px-env(safe-area-inset-top))] px-6'>
<Form {...form}>
<form
id='subscribe-config-form'
onSubmit={form.handleSubmit(onSubmit)}
className='space-y-2 pt-4'
>
<FormField
control={form.control}
name='single_model'
render={({ field }) => (
<FormItem>
<FormLabel>{t('config.singleSubscriptionMode')}</FormLabel>
<FormControl>
<Switch
checked={field.value}
onCheckedChange={field.onChange}
className='float-end !mt-0'
/>
</FormControl>
<FormDescription>
{t('config.singleSubscriptionModeDescription')}
</FormDescription>
<FormMessage />
</FormItem>
)}
/>
<FormField
control={form.control}
name='pan_domain'
render={({ field }) => (
<FormItem>
<FormLabel>{t('config.wildcardResolution')}</FormLabel>
<FormControl>
<Switch
checked={field.value}
onCheckedChange={field.onChange}
className='float-end !mt-0'
/>
</FormControl>
<FormDescription>{t('config.wildcardResolutionDescription')}</FormDescription>
<FormMessage />
</FormItem>
)}
/>
<FormField
control={form.control}
name='subscribe_path'
render={({ field }) => (
<FormItem>
<FormLabel>{t('config.subscriptionPath')}</FormLabel>
<FormControl>
<EnhancedInput
placeholder={t('config.subscriptionPathPlaceholder')}
value={field.value}
onValueBlur={field.onChange}
/>
</FormControl>
<FormDescription>{t('config.subscriptionPathDescription')}</FormDescription>
<FormMessage />
</FormItem>
)}
/>
<FormField
control={form.control}
name='subscribe_domain'
render={({ field }) => (
<FormItem>
<FormLabel>{t('config.subscriptionDomain')}</FormLabel>
<FormControl>
<Textarea
className='h-32'
placeholder={`${t('config.subscriptionDomainPlaceholder')}\nexample.com\nwww.example.com`}
{...field}
/>
</FormControl>
<FormDescription>{t('config.subscriptionDomainDescription')}</FormDescription>
<FormMessage />
</FormItem>
)}
/>
<FormField
control={form.control}
name='restrict_user_agent'
render={({ field }) => (
<FormItem>
<FormLabel>{t('config.restrictUserAgent')}</FormLabel>
<FormControl>
<Switch
checked={field.value}
onCheckedChange={field.onChange}
className='float-end !mt-0'
/>
</FormControl>
<FormDescription>{t('config.restrictUserAgentDescription')}</FormDescription>
<FormMessage />
</FormItem>
)}
/>
<FormField
control={form.control}
name='user_agent_whitelist'
render={({ field }) => (
<FormItem>
<FormLabel>{t('config.userAgentWhitelist')}</FormLabel>
<FormControl>
<Textarea
className='h-32'
placeholder={`${t('config.userAgentWhitelistPlaceholder')}\nClashX\nClashForAndroid\nClash-verge`}
{...field}
/>
</FormControl>
<FormDescription>{t('config.userAgentWhitelistDescription')}</FormDescription>
<FormMessage />
</FormItem>
)}
/>
</form>
</Form>
</ScrollArea>
<SheetFooter className='flex-row justify-end gap-2 pt-3'>
<Button variant='outline' disabled={loading} onClick={() => setOpen(false)}>
{t('actions.cancel')}
</Button>
<Button disabled={loading} type='submit' form='subscribe-config-form'>
{loading && <Icon icon='mdi:loading' className='mr-2 animate-spin' />}
{t('actions.save')}
</Button>
</SheetFooter>
</SheetContent>
</Sheet>
);
}

View File

@ -1,30 +1,24 @@
import { getTranslations } from 'next-intl/server';
'use client';
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@workspace/ui/components/tabs';
import { Card, CardContent } from '@workspace/ui/components/card';
import { useTranslations } from 'next-intl';
import ConfigForm from './config-form';
import { ProtocolForm } from './protocol-form';
import GroupTable from './group/table';
import SubscribeConfig from './subscribe-config';
import SubscribeTable from './subscribe-table';
export default async function Page() {
const t = await getTranslations('subscribe');
export default function SubscribePage() {
const t = useTranslations('subscribe');
return (
<Tabs defaultValue='subscribe'>
<TabsList>
<TabsTrigger value='subscribe'>{t('tabs.subscribe')}</TabsTrigger>
<TabsTrigger value='group'>{t('tabs.subscribeGroup')}</TabsTrigger>
<TabsTrigger value='config'>{t('tabs.subscribeConfig')}</TabsTrigger>
</TabsList>
<TabsContent value='subscribe'>
<SubscribeTable />
</TabsContent>
<TabsContent value='group'>
<GroupTable />
</TabsContent>
<TabsContent value='config'>
<SubscribeConfig />
</TabsContent>
</Tabs>
<div className='space-y-4'>
<h2 className='text-lg font-semibold'>{t('config.title')}</h2>
<Card>
<CardContent className='p-4'>
<ConfigForm />
</CardContent>
</Card>
<h2 className='text-lg font-semibold'>{t('protocol.title')}</h2>
<ProtocolForm />
</div>
);
}

View File

@ -0,0 +1,240 @@
'use client';
import { zodResolver } from '@hookform/resolvers/zod';
import { Badge } from '@workspace/ui/components/badge';
import { Button } from '@workspace/ui/components/button';
import { Card, CardContent } from '@workspace/ui/components/card';
import {
Form,
FormControl,
FormField,
FormItem,
FormLabel,
FormMessage,
} from '@workspace/ui/components/form';
import { ScrollArea } from '@workspace/ui/components/scroll-area';
import {
Sheet,
SheetContent,
SheetFooter,
SheetHeader,
SheetTitle,
} from '@workspace/ui/components/sheet';
import { Textarea } from '@workspace/ui/components/textarea';
import { Icon } from '@workspace/ui/custom-components/icon';
import { useTranslations } from 'next-intl';
import Image from 'next/image';
import { useState } from 'react';
import { useForm } from 'react-hook-form';
import { z } from 'zod';
interface Client {
name: string;
platforms: string[];
}
const clientFormSchema = z.object({
template: z.string().optional(),
});
const clientsConfig = [
{
name: 'Hiddify',
platforms: ['Windows', 'macOS', 'Linux', 'iOS', 'Android'],
},
{
name: 'SingBox',
platforms: ['Windows', 'macOS', 'Linux', 'iOS', 'Android'],
},
{
name: 'Clash',
platforms: ['Windows', 'macOS', 'Linux', 'Android'],
},
{
name: 'V2rayN',
platforms: ['Windows', 'macOS', 'Linux'],
},
{
name: 'Stash',
platforms: ['macOS', 'iOS'],
},
{
name: 'Surge',
platforms: ['macOS', 'iOS'],
},
{
name: 'V2Box',
platforms: ['macOS', 'iOS'],
},
{
name: 'Shadowrocket',
platforms: ['iOS'],
},
{
name: 'Quantumult',
platforms: ['iOS'],
},
{
name: 'Loon',
platforms: ['iOS'],
},
{
name: 'Egern',
platforms: ['iOS'],
},
{
name: 'V2rayNG',
platforms: ['Android'],
},
{
name: 'Surfboard',
platforms: ['Android'],
},
{
name: 'Netch',
platforms: ['Windows'],
},
];
type ClientFormData = z.infer<typeof clientFormSchema>;
export function ProtocolForm() {
const t = useTranslations('subscribe');
const [selectedClient, setSelectedClient] = useState<Client | null>(null);
const [open, setOpen] = useState(false);
const [loading, setLoading] = useState(false);
const form = useForm<ClientFormData>({
resolver: zodResolver(clientFormSchema),
defaultValues: {
template: '',
},
});
const clients: Client[] = clientsConfig;
const handleClientClick = (client: Client) => {
setSelectedClient(client);
// 请求当前客户端的配置模板
// 这里可以替换为实际的API调用
// 模拟获取模板数据
const mockTemplate = `# ${client.name} 配置模板`;
form.reset({
template: mockTemplate,
});
setOpen(true);
};
const onSubmit = async (data: ClientFormData) => {
setLoading(true);
try {
// TODO: 实现保存逻辑
console.log('Save client template:', {
name: selectedClient?.name,
template: data.template,
});
// 模拟API调用
await new Promise((resolve) => setTimeout(resolve, 1000));
setOpen(false);
} catch (error) {
console.error('Failed to save client template:', error);
} finally {
setLoading(false);
}
};
return (
<div className='space-y-4'>
<div className='grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4'>
{clients.map((client) => (
<Card
key={client.name}
className='hover:bg-muted/50 cursor-pointer transition-colors'
onClick={() => handleClientClick(client)}
>
<CardContent className='p-4'>
<div className='space-y-3'>
<div className='flex items-center gap-2'>
<div className='relative h-6 w-6 flex-shrink-0'>
<Image
src={`/images/protocols/${client.name}.webp`}
alt={client.name}
width={24}
height={24}
className='object-contain'
onError={() => {
console.log(`Failed to load image for ${client.name}`);
}}
/>
</div>
<h3 className='text-base font-semibold'>{client.name}</h3>
<Icon icon='mdi:chevron-right' className='ml-auto flex-shrink-0' />
</div>
<div className='flex flex-wrap gap-1'>
{client.platforms.map((platform) => (
<Badge key={platform} variant='secondary' className='text-xs'>
{platform}
</Badge>
))}
</div>
<p className='text-muted-foreground text-sm leading-relaxed'>
{t(`protocol.clients.${client.name.toLowerCase().replace(/\s+/g, '')}.features`)}
</p>
</div>
</CardContent>
</Card>
))}
</div>
<Sheet open={open} onOpenChange={setOpen}>
<SheetContent className='w-[600px] max-w-full md:max-w-screen-md'>
<SheetHeader>
<SheetTitle>
{t('protocol.subscribeTemplate')} - {selectedClient?.name}
</SheetTitle>
</SheetHeader>
<ScrollArea className='-mx-6 h-[calc(100dvh-48px-36px-36px-env(safe-area-inset-top))] px-6'>
<Form {...form}>
<form
onSubmit={form.handleSubmit(onSubmit)}
className='space-y-4 pt-4'
id='client-template-form'
>
<FormField
control={form.control}
name='template'
render={({ field }) => (
<FormItem>
<FormLabel>{t('protocol.templateContent')}</FormLabel>
<FormControl>
<Textarea
placeholder={t('protocol.templatePlaceholder')}
value={field.value}
onChange={field.onChange}
rows={20}
className='font-mono text-sm'
/>
</FormControl>
<FormMessage />
</FormItem>
)}
/>
</form>
</Form>
</ScrollArea>
<SheetFooter className='flex-row justify-end gap-2 pt-3'>
<Button variant='outline' disabled={loading} onClick={() => setOpen(false)}>
{t('actions.cancel')}
</Button>
<Button disabled={loading} type='submit' form='client-template-form'>
{loading && <Icon icon='mdi:loading' className='mr-2 animate-spin' />}
{t('actions.saveTemplate')}
</Button>
</SheetFooter>
</SheetContent>
</Sheet>
</div>
);
}

View File

@ -1,106 +0,0 @@
'use client';
import { useQuery } from '@tanstack/react-query';
import { useTranslations } from 'next-intl';
import { toast } from 'sonner';
import { getSubscribeConfig, updateSubscribeConfig } from '@/services/admin/system';
import { Label } from '@workspace/ui/components/label';
import { Switch } from '@workspace/ui/components/switch';
import { Table, TableBody, TableCell, TableRow } from '@workspace/ui/components/table';
import { Textarea } from '@workspace/ui/components/textarea';
import { EnhancedInput } from '@workspace/ui/custom-components/enhanced-input';
export default function SubscribeConfig() {
const t = useTranslations('subscribe.config');
const { data, refetch } = useQuery({
queryKey: ['getSubscribeConfig'],
queryFn: async () => {
const { data } = await getSubscribeConfig();
return data.data;
},
});
async function updateConfig(key: string, value: unknown) {
if (data?.[key] === value) return;
try {
await updateSubscribeConfig({
...data,
[key]: value,
} as API.SubscribeConfig);
toast.success(t('updateSuccess'));
refetch();
} catch (error) {
/* empty */
}
}
return (
<Table>
<TableBody>
<TableRow>
<TableCell>
<Label>{t('singleSubscriptionMode')}</Label>
<p className='text-muted-foreground text-xs'>
{t('singleSubscriptionModeDescription')}
</p>
</TableCell>
<TableCell className='text-right'>
<Switch
checked={data?.single_model}
onCheckedChange={(checked) => {
updateConfig('single_model', checked);
}}
/>
</TableCell>
</TableRow>
<TableRow>
<TableCell>
<Label>{t('wildcardResolution')}</Label>
<p className='text-muted-foreground text-xs'>{t('wildcardResolutionDescription')}</p>
</TableCell>
<TableCell className='text-right'>
<Switch
checked={data?.pan_domain}
onCheckedChange={(checked) => {
updateConfig('pan_domain', checked);
}}
/>
</TableCell>
</TableRow>
<TableRow>
<TableCell>
<Label>{t('subscriptionPath')}</Label>
<p className='text-muted-foreground text-xs'>{t('subscriptionPathDescription')}</p>
</TableCell>
<TableCell className='flex items-center gap-2 text-right'>
<EnhancedInput
placeholder={t('subscriptionPathPlaceholder')}
value={data?.subscribe_path}
onValueBlur={(value) => updateConfig('subscribe_path', value)}
/>
</TableCell>
</TableRow>
<TableRow>
<TableCell className='align-top'>
<Label>{t('subscriptionDomain')}</Label>
<p className='text-muted-foreground text-xs'>{t('subscriptionDomainDescription')}</p>
</TableCell>
<TableCell className='text-right'>
<Textarea
className='h-52'
placeholder={`${t('subscriptionDomainPlaceholder')}\nexample.com\nwww.example.com`}
defaultValue={data?.subscribe_domain}
onBlur={(e) => {
updateConfig('subscribe_domain', e.target.value);
}}
/>
</TableCell>
</TableRow>
</TableBody>
</Table>
);
}

View File

@ -25,42 +25,46 @@ export function SidebarLeft({ ...props }: React.ComponentProps<typeof Sidebar>)
const pathname = usePathname();
return (
<Sidebar className='border-r-0' collapsible='icon' {...props}>
<SidebarHeader>
<SidebarHeader className='p-2'>
<SidebarMenu>
<SidebarMenuItem>
<SidebarMenuButton size='lg' asChild>
<SidebarMenuButton size='sm' asChild className='h-10'>
<Link href='/'>
<div className='flex aspect-square size-8 items-center justify-center rounded-lg'>
<div className='flex aspect-square size-6 items-center justify-center rounded-lg'>
<Image
src={site.site_logo || '/favicon.svg'}
alt='logo'
width={48}
height={48}
width={24}
height={24}
className='size-full'
unoptimized
/>
</div>
<div className='grid flex-1 text-left text-sm leading-tight'>
<span className='truncate font-semibold'>{site.site_name}</span>
<span className='truncate text-xs'>{site.site_desc}</span>
<span className='truncate text-xs font-semibold'>{site.site_name}</span>
<span className='truncate text-xs opacity-70'>{site.site_desc}</span>
</div>
</Link>
</SidebarMenuButton>
</SidebarMenuItem>
</SidebarMenu>
</SidebarHeader>
<SidebarContent>
<SidebarContent className='py-2'>
<SidebarMenu>
{navs.map((nav) => (
<SidebarGroup key={nav.title}>
{nav.items && <SidebarGroupLabel>{t(nav.title)}</SidebarGroupLabel>}
<SidebarGroup key={nav.title} className='py-1'>
{nav.items && (
<SidebarGroupLabel className='py-1 text-xs'>{t(nav.title)}</SidebarGroupLabel>
)}
<SidebarGroupContent>
<SidebarMenu>
{(nav.items || [nav]).map((item) => (
<SidebarMenuItem key={item.title}>
<SidebarMenuButton
asChild
size='sm'
tooltip={t(item.title)}
className='h-8'
isActive={
item.url === '/dashboard'
? pathname === item.url
@ -68,8 +72,8 @@ export function SidebarLeft({ ...props }: React.ComponentProps<typeof Sidebar>)
}
>
<Link href={item.url}>
{item.icon && <Icon icon={item.icon} />}
<span>{t(item.title)}</span>
{item.icon && <Icon icon={item.icon} className='size-4' />}
<span className='text-sm'>{t(item.title)}</span>
</Link>
</SidebarMenuButton>
</SidebarMenuItem>

View File

@ -1,42 +1,3 @@
export const AuthControl = [
{
title: 'Email',
url: '/dashboard/auth-control/email',
},
{
title: 'Phone Number',
url: '/dashboard/auth-control/phone',
},
{
title: 'Telegram',
url: '/dashboard/auth-control/telegram',
},
{
title: 'Apple',
url: '/dashboard/auth-control/apple',
},
{
title: 'Google',
url: '/dashboard/auth-control/google',
},
{
title: 'Facebook',
url: '/dashboard/auth-control/facebook',
},
// {
// title: 'Twitter',
// url: '/dashboard/auth-control/twitter',
// },
{
title: 'GitHub',
url: '/dashboard/auth-control/github',
},
{
title: 'Device',
url: '/dashboard/auth-control/device',
},
];
export const navs = [
{
title: 'Dashboard',
@ -44,7 +5,7 @@ export const navs = [
icon: 'flat-color-icons:globe',
},
{
title: 'Settings',
title: 'System Management',
items: [
{
title: 'System Config',
@ -55,7 +16,16 @@ export const navs = [
title: 'Auth Control',
url: '/dashboard/auth-control',
icon: 'flat-color-icons:lock-portrait',
items: AuthControl,
},
{
title: 'Payment Config',
url: '/dashboard/payment',
icon: 'flat-color-icons:currency-exchange',
},
{
title: 'Subscribe Config',
url: '/dashboard/subscribe',
icon: 'flat-color-icons:ruler',
},
{
title: 'ADS Config',
@ -63,9 +33,9 @@ export const navs = [
icon: 'flat-color-icons:electrical-sensor',
},
{
title: 'Payment Config',
url: '/dashboard/payment',
icon: 'flat-color-icons:currency-exchange',
title: 'System Tool',
url: '/dashboard/tool',
icon: 'flat-color-icons:info',
},
],
},
@ -77,21 +47,16 @@ export const navs = [
url: '/dashboard/server',
icon: 'flat-color-icons:data-protection',
},
{
title: 'Product Management',
url: '/dashboard/product',
icon: 'flat-color-icons:shop',
},
{
title: 'Application Management',
url: '/dashboard/application',
icon: 'flat-color-icons:touchscreen-smartphone',
},
{
title: 'Rule Management',
url: '/dashboard/rules',
icon: 'flat-color-icons:ruler',
},
{
title: 'Subscribe Management',
url: '/dashboard/subscribe',
icon: 'flat-color-icons:shop',
},
],
},
{
@ -123,6 +88,11 @@ export const navs = [
},
],
},
{
title: 'Marketing Management',
url: '/dashboard/marketing',
icon: 'flat-color-icons:bullish',
},
{
title: 'Announcement Management',
url: '/dashboard/announcement',
@ -140,11 +110,6 @@ export const navs = [
},
],
},
{
title: 'System Tool',
url: '/dashboard/tool',
icon: 'flat-color-icons:info',
},
];
export function findNavByUrl(url: string) {

View File

@ -1,32 +1,25 @@
{
"ADS Config": "Konfigurace ADS",
"Announcement Management": "Správa oznámení",
"Apple": "Apple ID",
"Application Management": "Správa aplikací",
"Auth Control": "Řízení ověřování",
"Coupon Management": "Správa kupónů",
"Dashboard": "Přístrojová deska",
"Device": "Zařízení",
"Document Management": "Správa dokumentů",
"Email": "E-mail",
"Facebook": "Facebook",
"Finance": "Finance",
"General": "Obecné",
"GitHub": "GitHub",
"Google": "Google",
"Order Management": "Správa objednávek",
"Payment Config": "Konfigurace platby",
"Phone Number": "Telefonní číslo",
"Product Management": "Správa produktů",
"Protocol Management": "Správa protokolů",
"Rule Management": "Správa pravidel",
"Server": "Server",
"Server Management": "Správa serveru",
"Settings": "Nastavení",
"Subscribe Management": "Správa předplatného",
"Subscribe Config": "Nastavení odběru",
"System Config": "Systémová konfigurace",
"System Management": "Správa systému",
"System Tool": "Systémový nástroj",
"Telegram": "Telegram",
"Ticket Management": "Správa lístků",
"Twitter": "Twitter",
"User": "Uživatel",
"User Detail": "Podrobnosti o uživateli",
"User Management": "Správa uživatelů"

View File

@ -0,0 +1,161 @@
{
"actions": "akce",
"app": {
"appDownloadURL": "URL pro stažení aplikace",
"appIcon": "Ikona aplikace",
"appList": "Seznam aplikací",
"appName": "Název aplikace",
"backupDomains": "Seznam záložních domén",
"backupDomainsDescription": "Seznam záložních domén pro řešení domén, jedna doména na řádek",
"batchDelete": "Hromadné smazání",
"cancel": "Zrušit",
"communicationKey": "Komunikační klíč",
"communicationKeyDescription": "Klíč používaný pro komunikaci klienta",
"config": "Konfigurace",
"configApp": "Konfigurace aplikace",
"confirm": "Potvrdit",
"confirmDelete": "Potvrdit smazání",
"create": "Vytvořit",
"createApp": "Vytvořit aplikaci",
"createSuccess": "Úspěšně vytvořeno",
"defaultVersion": "Výchozí",
"delete": "Smazat",
"deleteWarning": "Tuto akci nelze vrátit zpět",
"describeDescription": "Používá se k popisu aplikace, zobrazuje se v seznamu aplikací",
"description": "Popis",
"downloadLink": "Odkaz ke stažení",
"edit": "Upravit",
"editApp": "Upravit aplikaci",
"encryption": "Metoda šifrování",
"encryptionDescription": "Vyberte metodu šifrování pro komunikaci klienta. Pokud je vybrána, klient použije tuto metodu ke komunikaci se serverem",
"nameDescription": "Název aplikace, zobrazuje se v seznamu aplikací",
"platform": "Platforma",
"selectApp": "Vybrat aplikaci",
"selectAppDescription": "Vyberte aplikaci k nastavení, všechna nastavení se použijí na vybranou aplikaci",
"startupPicture": "Úvodní obrázek",
"startupPictureDescription": "Úvodní obrázek, podporuje síťové a lokální obrázky. Pro síťové obrázky zadejte úplnou URL adresu obrázku",
"startupPicturePreview": "Náhled úvodního obrázku",
"startupPictureSkip": "Čas přeskočení úvodního obrázku",
"startupPictureSkipDescription": "Doba zobrazení úvodního obrázku v sekundách, zadejte 0 pro nezobrazení",
"subscriptionProtocol": "Protokol předplatného",
"updateSuccess": "Úspěšně aktualizováno",
"version": "Verze"
},
"cancel": "Zrušit",
"config": {
"singleSubscriptionMode": "Režim jednorázového předplatného",
"singleSubscriptionModeDescription": "Když je povoleno, všechna uživatelská předplatná budou převedena na zůstatek",
"subscriptionDomain": "Doména předplatného",
"subscriptionDomainDescription": "Používá se pro předplatné; nechte prázdné pro použití domény webu",
"subscriptionDomainPlaceholder": "Zadejte doménu předplatného, jednu na řádek",
"subscriptionPath": "Cesta předplatného",
"subscriptionPathDescription": "Používá se pro předplatné; po úpravě nezapomeňte restartovat systém pro optimální výkon",
"subscriptionPathPlaceholder": "Zadejte",
"updateSuccess": "Úspěšně aktualizováno",
"wildcardResolution": "Řešení zástupných znaků",
"wildcardResolutionDescription": "Používá se pro předplatné"
},
"confirm": "Potvrdit",
"confirmDelete": "Opravdu chcete smazat?",
"copy": "Kopírovat",
"copySuccess": "Úspěšně zkopírováno",
"create": "Vytvořit",
"createSubscribe": "Vytvořit odběr",
"createSuccess": "Vytvoření úspěšné",
"delete": "smazat",
"deleteSuccess": "Úspěšně odstraněno",
"deleteWarning": "Po odstranění nelze data obnovit, prosím, postupujte opatrně.",
"deviceLimit": "Počet zařízení/ks",
"edit": "Upravit",
"editSubscribe": "Upravit odběr",
"form": {
"Day": "Den",
"Hour": "Hodina",
"Minute": "Minuta",
"Month": "Měsíc",
"NoLimit": "Bez omezení",
"Year": "Rok",
"annualReset": "Roční Reset",
"basic": "Základní",
"cancel": "Zrušit",
"confirm": "Potvrdit",
"deductionRatio": "Automatická/Manuální Konfigurace Odpočtu",
"deductionRatioDescription": "Používá se pro odpočet. Systém standardně používá automatický výpočetní algoritmus. Když je poskytnut manuální poměr, systém vypočítá proporce na základě časového a dopravního poměru, přičemž celkový součet činí 100%.",
"description": "Popis",
"deviceLimit": "Omezení zařízení",
"discount": "Sleva",
"discountDescription": "Nastavit slevu na základě jednotkové ceny",
"discountMonths": "Měsíce",
"discountPercent": "Procento slevy",
"discount_price": "Cena po slevě",
"duration": "Doba trvání (měsíce)",
"groupId": "Skupina předplatného",
"inventory": "Limit předplatného",
"monthlyReset": "Měsíční Reset",
"name": "Název",
"noLimit": "Bez omezení",
"noReset": "Žádný Reset",
"pricing": "Cenotvorba",
"purchaseWithDiscount": "Povolit Odpočet",
"purchaseWithDiscountDescription": "Povolit nebo zakázat funkci odhlášení. Po aktivaci systém provede zpracování odpočtu podle nakonfigurovaných pravidel a poměrů a zbývající hodnota bude vrácena na zůstatek.",
"quota": "Limit nákupu",
"renewalReset": "Reset při Obnovení",
"renewalResetDescription": "Resetovací cyklus při obnovení",
"replacement": "Cena za reset (za každý)",
"resetCycle": "Resetovací Cyklus",
"resetOn1st": "Reset 1. dne",
"selectResetCycle": "Vyberte prosím resetovací cyklus",
"selectSubscribeGroup": "Vyberte prosím skupinu předplatného",
"selectUnitTime": "Vyberte jednotku času",
"server": "Server",
"serverGroup": "Skupina serverů",
"servers": "Servery",
"speedLimit": "Omezení rychlosti ",
"traffic": "Přenos dat",
"unitPrice": "Jednotková cena",
"unitTime": "Jednotka času"
},
"group": {
"actions": "Akce",
"cancel": "Zrušit",
"confirm": "Potvrdit",
"confirmDelete": "Opravdu chcete smazat?",
"create": "Vytvořit",
"createSubscribeGroup": "Vytvořit novou skupinu odběrů",
"createSuccess": "Úspěšně vytvořeno",
"delete": "Smazat",
"deleteSuccess": "Úspěšně smazáno",
"deleteWarning": "Po smazání nelze data obnovit, prosím postupujte opatrně.",
"description": "Popis",
"edit": "Upravit",
"editSubscribeGroup": "Upravit skupinu odběrů",
"form": {
"cancel": "Zrušit",
"confirm": "Potvrdit",
"description": "Popis",
"name": "Název"
},
"name": "Název",
"title": "Seznam skupin odběrů",
"updateSuccess": "Úspěšně aktualizováno",
"updatedAt": "Čas aktualizace"
},
"inventory": "Limit předplatného",
"name": "název",
"quota": "Limit na nákup/čas",
"replacement": "Obnovení ceny/krát",
"sell": "Prodej",
"show": "Zobrazit",
"sold": "Počet předplatných",
"subscribe": "Předplatit",
"subscribeGroup": "Přihlásit se ke skupině",
"tabs": {
"subscribe": "Předplatit",
"subscribeApp": "Konfigurace aplikace",
"subscribeConfig": "Konfigurace předplatného",
"subscribeGroup": "Skupina předplatných"
},
"traffic": "provoz",
"unitPrice": "Jednotková cena",
"updateSuccess": "Aktualizace byla úspěšná"
}

View File

@ -1,161 +1,89 @@
{
"actions": "akce",
"app": {
"appDownloadURL": "URL pro stažení aplikace",
"appIcon": "Ikona aplikace",
"appList": "Seznam aplikací",
"appName": "Název aplikace",
"backupDomains": "Seznam záložních domén",
"backupDomainsDescription": "Seznam záložních domén pro řešení domén, jedna doména na řádek",
"batchDelete": "Hromadné smazání",
"actions": {
"cancel": "Zrušit",
"communicationKey": "Komunikační klíč",
"communicationKeyDescription": "Klíč používaný pro komunikaci klienta",
"config": "Konfigurace",
"configApp": "Konfigurace aplikace",
"confirm": "Potvrdit",
"confirmDelete": "Potvrdit smazání",
"create": "Vytvořit",
"createApp": "Vytvořit aplikaci",
"createSuccess": "Úspěšně vytvořeno",
"defaultVersion": "Výchozí",
"delete": "Smazat",
"deleteWarning": "Tuto akci nelze vrátit zpět",
"describeDescription": "Používá se k popisu aplikace, zobrazuje se v seznamu aplikací",
"description": "Popis",
"downloadLink": "Odkaz ke stažení",
"edit": "Upravit",
"editApp": "Upravit aplikaci",
"encryption": "Metoda šifrování",
"encryptionDescription": "Vyberte metodu šifrování pro komunikaci klienta. Pokud je vybrána, klient použije tuto metodu ke komunikaci se serverem",
"nameDescription": "Název aplikace, zobrazuje se v seznamu aplikací",
"platform": "Platforma",
"selectApp": "Vybrat aplikaci",
"selectAppDescription": "Vyberte aplikaci k nastavení, všechna nastavení se použijí na vybranou aplikaci",
"startupPicture": "Úvodní obrázek",
"startupPictureDescription": "Úvodní obrázek, podporuje síťové a lokální obrázky. Pro síťové obrázky zadejte úplnou URL adresu obrázku",
"startupPicturePreview": "Náhled úvodního obrázku",
"startupPictureSkip": "Čas přeskočení úvodního obrázku",
"startupPictureSkipDescription": "Doba zobrazení úvodního obrázku v sekundách, zadejte 0 pro nezobrazení",
"subscriptionProtocol": "Protokol předplatného",
"updateSuccess": "Úspěšně aktualizováno",
"version": "Verze"
"save": "Uložit",
"saveTemplate": "Uložit šablonu"
},
"cancel": "Zrušit",
"config": {
"singleSubscriptionMode": "Režim jednorázového předplatného",
"singleSubscriptionModeDescription": "Když je povoleno, všechna uživatelská předplatná budou převedena na zůstatek",
"description": "Spravujte nastavení systému předplatného",
"restrictUserAgent": "Omezení User-Agent",
"restrictUserAgentDescription": "Povolit omezení přístupu na základě User-Agent",
"singleSubscriptionMode": "Režim jednoho předplatného",
"singleSubscriptionModeDescription": "Převeďte všechna uživatelská předplatná na zůstatek účtu",
"subscriptionDomain": "Doména předplatného",
"subscriptionDomainDescription": "Používá se pro předplatné; nechte prázdné pro použití domény webu",
"subscriptionDomainDescription": "Vlastní doména pro odkazy na předplatné",
"subscriptionDomainPlaceholder": "Zadejte doménu předplatného, jednu na řádek",
"subscriptionPath": "Cesta předplatného",
"subscriptionPathDescription": "Používá se pro předplatné; po úpravě nezapomeňte restartovat systém pro optimální výkon",
"subscriptionPathPlaceholder": "Zadejte",
"updateSuccess": "Úspěšně aktualizováno",
"subscriptionPathDescription": "Vlastní cesta pro koncové body předplatného (lepší výkon po restartu systému)",
"subscriptionPathPlaceholder": "Zadejte cestu předplatného",
"title": "Konfigurace předplatného",
"updateError": "Aktualizace selhala",
"updateSuccess": "Nastavení bylo úspěšně aktualizováno",
"userAgentWhitelist": "Whitelist User-Agent",
"userAgentWhitelistDescription": "Povolené User-Agenty pro přístup k předplatnému, jeden na řádek. Vestavěné šablony jsou automaticky zahrnuty do whitelistu",
"userAgentWhitelistPlaceholder": "Zadejte povolené User-Agenty, jeden na řádek",
"wildcardResolution": "Řešení zástupných znaků",
"wildcardResolutionDescription": "Používá se pro předplatné"
"wildcardResolutionDescription": "Povolit řešení domén se zástupnými znaky pro předplatná"
},
"confirm": "Potvrdit",
"confirmDelete": "Opravdu chcete smazat?",
"copy": "Kopírovat",
"copySuccess": "Úspěšně zkopírováno",
"create": "Vytvořit",
"createSubscribe": "Vytvořit odběr",
"createSuccess": "Vytvoření úspěšné",
"delete": "smazat",
"deleteSuccess": "Úspěšně odstraněno",
"deleteWarning": "Po odstranění nelze data obnovit, prosím, postupujte opatrně.",
"deviceLimit": "Počet zařízení/ks",
"edit": "Upravit",
"editSubscribe": "Upravit odběr",
"form": {
"Day": "Den",
"Hour": "Hodina",
"Minute": "Minuta",
"Month": "Měsíc",
"NoLimit": "Bez omezení",
"Year": "Rok",
"annualReset": "Roční Reset",
"basic": "Základní",
"cancel": "Zrušit",
"confirm": "Potvrdit",
"deductionRatio": "Automatická/Manuální Konfigurace Odpočtu",
"deductionRatioDescription": "Používá se pro odpočet. Systém standardně používá automatický výpočetní algoritmus. Když je poskytnut manuální poměr, systém vypočítá proporce na základě časového a dopravního poměru, přičemž celkový součet činí 100%.",
"description": "Popis",
"deviceLimit": "Omezení zařízení",
"discount": "Sleva",
"discountDescription": "Nastavit slevu na základě jednotkové ceny",
"discountMonths": "Měsíce",
"discountPercent": "Procento slevy",
"discount_price": "Cena po slevě",
"duration": "Doba trvání (měsíce)",
"groupId": "Skupina předplatného",
"inventory": "Limit předplatného",
"monthlyReset": "Měsíční Reset",
"name": "Název",
"noLimit": "Bez omezení",
"noReset": "Žádný Reset",
"pricing": "Cenotvorba",
"purchaseWithDiscount": "Povolit Odpočet",
"purchaseWithDiscountDescription": "Povolit nebo zakázat funkci odhlášení. Po aktivaci systém provede zpracování odpočtu podle nakonfigurovaných pravidel a poměrů a zbývající hodnota bude vrácena na zůstatek.",
"quota": "Limit nákupu",
"renewalReset": "Reset při Obnovení",
"renewalResetDescription": "Resetovací cyklus při obnovení",
"replacement": "Cena za reset (za každý)",
"resetCycle": "Resetovací Cyklus",
"resetOn1st": "Reset 1. dne",
"selectResetCycle": "Vyberte prosím resetovací cyklus",
"selectSubscribeGroup": "Vyberte prosím skupinu předplatného",
"selectUnitTime": "Vyberte jednotku času",
"server": "Server",
"serverGroup": "Skupina serverů",
"servers": "Servery",
"speedLimit": "Omezení rychlosti ",
"traffic": "Přenos dat",
"unitPrice": "Jednotková cena",
"unitTime": "Jednotka času"
"description": "Nastavte nastavení předplatného a šablony klientů",
"messages": {
"noClients": "Žádné šablony klientů",
"noClientsDescription": "Žádné šablony klientů zatím nejsou nakonfigurovány. Přidejte svou první šablonu a začněte."
},
"group": {
"actions": "Akce",
"cancel": "Zrušit",
"confirm": "Potvrdit",
"confirmDelete": "Opravdu chcete smazat?",
"create": "Vytvořit",
"createSubscribeGroup": "Vytvořit novou skupinu odběrů",
"createSuccess": "Úspěšně vytvořeno",
"delete": "Smazat",
"deleteSuccess": "Úspěšně smazáno",
"deleteWarning": "Po smazání nelze data obnovit, prosím postupujte opatrně.",
"description": "Popis",
"edit": "Upravit",
"editSubscribeGroup": "Upravit skupinu odběrů",
"form": {
"cancel": "Zrušit",
"confirm": "Potvrdit",
"description": "Popis",
"name": "Název"
"protocol": {
"clients": {
"clash": {
"features": "Velký ekosystém, komplexní pravidla, aktivní komunita"
},
"egern": {
"features": "Moderní klient pro iOS, vynikající výkon"
},
"hiddify": {
"features": "Víceplatformní, komplexní protokoly, přívětivé pro začátečníky"
},
"loon": {
"features": "Pokročilý klient pro iOS, bohatá pravidla, krásné rozhraní"
},
"netch": {
"features": "Proxy klient zaměřený na hry"
},
"quantumult": {
"features": "Pokročilý klient pro iOS, flexibilní pravidla, bohaté skripty"
},
"shadowrocket": {
"features": "Klasický klient pro iOS, flexibilní konfigurace"
},
"singbox": {
"features": "Nejnovější jádro, oficiální GUI, podpora více platforem"
},
"stash": {
"features": "Moderní mobilní UI, komplexní protokoly"
},
"surfboard": {
"features": "Zdarma, aktivní vývoj, moderní rozhraní"
},
"surge": {
"features": "Prémiový nástroj pro iOS/Mac, silné funkce"
},
"v2box": {
"features": "Uživatelsky přívětivý klient V2Ray"
},
"v2rayn": {
"features": "Populární klient pro Windows, bohatý na funkce"
},
"v2rayng": {
"features": "Populární klient pro Android, lehký"
}
},
"name": "Název",
"title": "Seznam skupin odběrů",
"updateSuccess": "Úspěšně aktualizováno",
"updatedAt": "Čas aktualizace"
"description": "Spravujte šablony konfigurace předplatného pro proxy klienty",
"features": "Klíčové vlastnosti",
"platforms": "Platformy",
"subscribeTemplate": "Konfigurace šablony předplatného",
"templateContent": "Obsah šablony",
"templatePlaceholder": "Zadejte šablonu konfigurace klienta...",
"title": "Šablony předplatného klienta"
},
"inventory": "Limit předplatného",
"name": "název",
"quota": "Limit na nákup/čas",
"replacement": "Obnovení ceny/krát",
"sell": "Prodej",
"show": "Zobrazit",
"sold": "Počet předplatných",
"subscribe": "Předplatit",
"subscribeGroup": "Přihlásit se ke skupině",
"tabs": {
"subscribe": "Předplatit",
"subscribeApp": "Konfigurace aplikace",
"subscribeConfig": "Konfigurace předplatného",
"subscribeGroup": "Skupina předplatných"
},
"traffic": "provoz",
"unitPrice": "Jednotková cena",
"updateSuccess": "Aktualizace byla úspěšná"
"title": "Správa předplatného"
}

View File

@ -1,32 +1,25 @@
{
"ADS Config": "ADS-Konfiguration",
"Announcement Management": "Ankündigungsverwaltung",
"Apple": "Apple-ID",
"Application Management": "Anwendungsverwaltung",
"Auth Control": "Authentifizierungskontrolle",
"Coupon Management": "Gutscheinverwaltung",
"Dashboard": "Armaturenbrett",
"Device": "Gerät",
"Document Management": "Dokumentenverwaltung",
"Email": "E-Mail",
"Facebook": "Facebook",
"Finance": "Finanzen",
"General": "Allgemein",
"GitHub": "GitHub",
"Google": "Google",
"Order Management": "Bestellverwaltung",
"Payment Config": "Zahlungskonfiguration",
"Phone Number": "Telefonnummer",
"Product Management": "Produktmanagement",
"Protocol Management": "Protokollverwaltung",
"Rule Management": "Regelverwaltung",
"Server": "Dienst",
"Server Management": "Serververwaltung",
"Settings": "Einstellungen",
"Subscribe Management": "Abonnementverwaltung",
"Subscribe Config": "Abonnieren-Konfiguration",
"System Config": "Systemkonfiguration",
"System Management": "Systemverwaltung",
"System Tool": "Systemwerkzeug",
"Telegram": "Telegram",
"Ticket Management": "Ticketverwaltung",
"Twitter": "Twitter",
"User": "Benutzer",
"User Detail": "Benutzerdetails",
"User Management": "Benutzerverwaltung"

View File

@ -0,0 +1,160 @@
{
"actions": "Aktionen",
"app": {
"appDownloadURL": "App-Download-URL",
"appIcon": "App-Symbol",
"appList": "App-Liste",
"appName": "App-Name",
"backupDomains": "Liste der Backup-Domains",
"backupDomainsDescription": "Liste der Backup-Domains für die Domain-Auflösung, eine Domain pro Zeile",
"batchDelete": "Stapel löschen",
"cancel": "Abbrechen",
"communicationKey": "Kommunikationsschlüssel",
"communicationKeyDescription": "Schlüssel, der für die Kommunikation mit dem Client verwendet wird",
"config": "Konfiguration",
"configApp": "App-Konfiguration",
"confirm": "Bestätigen",
"confirmDelete": "Löschen bestätigen",
"create": "Erstellen",
"createApp": "App erstellen",
"createSuccess": "Erfolgreich erstellt",
"defaultVersion": "Standard",
"delete": "Löschen",
"deleteWarning": "Diese Aktion kann nicht rückgängig gemacht werden",
"describeDescription": "Wird verwendet, um die Anwendung zu beschreiben, wird in der App-Liste angezeigt",
"description": "Beschreibung",
"downloadLink": "Download-Link",
"edit": "Bearbeiten",
"editApp": "App bearbeiten",
"encryption": "Verschlüsselungsmethode",
"encryptionDescription": "Wählen Sie die Verschlüsselungsmethode für die Kommunikation mit dem Client. Wenn ausgewählt, wird der Client diese Methode verwenden, um mit dem Server zu kommunizieren.",
"nameDescription": "Anwendungsname, wird in der App-Liste angezeigt",
"platform": "Plattform",
"selectApp": "App auswählen",
"selectAppDescription": "Wählen Sie die App aus, die konfiguriert werden soll. Alle Einstellungen gelten für die ausgewählte App.",
"startupPicture": "Startbild",
"startupPictureDescription": "Startbild, unterstützt Netzwerk- und lokale Bilder. Für Netzwerkbilder bitte die vollständige Bild-URL eingeben",
"startupPicturePreview": "Vorschau des Startbildes",
"startupPictureSkip": "Überspringzeit des Startbildes",
"startupPictureSkipDescription": "Anzeigedauer des Startbildes in Sekunden, 0 eingeben, um nicht anzuzeigen",
"subscriptionProtocol": "Abonnementprotokoll",
"updateSuccess": "Erfolgreich aktualisiert",
"version": "Version"
},
"cancel": "Abbrechen",
"config": {
"singleSubscriptionMode": "Einzelabonnement-Modus",
"subscriptionDomain": "Abonnement-Domain",
"subscriptionDomainDescription": "Wird für Abonnements verwendet; leer lassen, um die Site-Domain zu verwenden",
"subscriptionDomainPlaceholder": "Abonnement-Domain eingeben, eine pro Zeile",
"subscriptionPath": "Abonnement-Pfad",
"subscriptionPathDescription": "Wird für Abonnements verwendet; starten Sie das System nach der Änderung neu, um die optimale Leistung zu gewährleisten",
"subscriptionPathPlaceholder": "Eingeben",
"updateSuccess": "Erfolgreich aktualisiert",
"wildcardResolution": "Wildcard-Auflösung",
"wildcardResolutionDescription": "Wird für Abonnements verwendet"
},
"confirm": "Bestätigen",
"confirmDelete": "Möchten Sie wirklich löschen?",
"copy": "Kopieren",
"copySuccess": "Erfolgreich kopiert",
"create": "Erstellen",
"createSubscribe": "Neues Abonnement erstellen",
"createSuccess": "Erstellung erfolgreich",
"delete": "Löschen",
"deleteSuccess": "Erfolgreich gelöscht",
"deleteWarning": "Nach dem Löschen können die Daten nicht wiederhergestellt werden. Bitte gehen Sie vorsichtig vor.",
"deviceLimit": "Geräteanzahl/Stück",
"edit": "Bearbeiten",
"editSubscribe": "Abonnement bearbeiten",
"form": {
"Day": "Tag",
"Hour": "Stunde",
"Minute": "Minute",
"Month": "Monat",
"NoLimit": "Kein Limit",
"Year": "Jahr",
"annualReset": "Jährliches Zurücksetzen",
"basic": "Grundlegend",
"cancel": "Abbrechen",
"confirm": "Bestätigen",
"deductionRatio": "Automatische/Manuelle Abzugskonfiguration",
"deductionRatioDescription": "Wird für Abzüge verwendet. Standardmäßig verwendet das System einen automatischen Berechnungsalgorithmus. Wenn ein manueller Prozentsatz angegeben wird, berechnet das System die Anteile basierend auf dem Zeit- und Verkehrsverhältnis, wobei sichergestellt wird, dass die Summe 100% ergibt.",
"description": "Beschreibung",
"deviceLimit": "Gerätebeschränkung",
"discount": "Rabatt",
"discountDescription": "Rabatt basierend auf Einzelpreis",
"discountMonths": "Monate",
"discountPercent": "Rabattprozentsatz",
"discount_price": "Rabattpreis",
"duration": "Dauer (Monate)",
"groupId": "Abonnementgruppe",
"inventory": "Abonnementslimit",
"monthlyReset": "Monatliches Zurücksetzen",
"name": "Name",
"noLimit": "Keine Begrenzung",
"noReset": "Kein Zurücksetzen",
"pricing": "Preisgestaltung",
"purchaseWithDiscount": "Abzug erlauben",
"purchaseWithDiscountDescription": "Aktivieren oder deaktivieren Sie die Abmeldefunktion. Nach der Aktivierung führt das System die Abzugsverarbeitung gemäß den konfigurierten Regeln und Anteilen durch, und der verbleibende Wert wird dem Guthaben gutgeschrieben.",
"quota": "Kaufbeschränkung",
"renewalReset": "Zurücksetzen bei Erneuerung",
"renewalResetDescription": "Zurücksetzungszyklus bei Erneuerung",
"replacement": "Ersatzpreis (pro Mal)",
"resetCycle": "Zurücksetzungszyklus",
"resetOn1st": "Zurücksetzen am 1.",
"selectResetCycle": "Bitte wählen Sie einen Zurücksetzungszyklus",
"selectSubscribeGroup": "Bitte Abonnementgruppe auswählen",
"selectUnitTime": "Bitte wählen Sie eine Zeiteinheit",
"server": "Dienst",
"serverGroup": "Dienstgruppe",
"servers": "Server",
"speedLimit": "Geschwindigkeitsbegrenzung ",
"traffic": "Datenvolumen",
"unitPrice": "Einheitspreis",
"unitTime": "Zeiteinheit"
},
"group": {
"actions": "Aktionen",
"cancel": "Abbrechen",
"confirm": "Bestätigen",
"confirmDelete": "Löschen bestätigen?",
"create": "Erstellen",
"createSubscribeGroup": "Neue Abonnementgruppe erstellen",
"createSuccess": "Erstellung erfolgreich",
"delete": "Löschen",
"deleteSuccess": "Erfolgreich gelöscht",
"deleteWarning": "Nach dem Löschen können die Daten nicht wiederhergestellt werden, bitte vorsichtig vorgehen.",
"description": "Beschreibung",
"edit": "Bearbeiten",
"editSubscribeGroup": "Abonnementgruppe bearbeiten",
"form": {
"cancel": "Abbrechen",
"confirm": "Bestätigen",
"description": "Beschreibung",
"name": "Name"
},
"name": "Name",
"title": "Liste der Abonnementgruppen",
"updateSuccess": "Erfolgreich aktualisiert",
"updatedAt": "Aktualisierungszeit"
},
"inventory": "Abonnementslimit",
"name": "Name",
"quota": "Kaufbeschränkung/pro Einkauf",
"replacement": "Preis pro Zurücksetzung",
"sell": "Verkauf",
"show": "Anzeigen",
"sold": "Abonnentenzahl",
"subscribe": "Abonnieren",
"subscribeGroup": "Gruppe abonnieren",
"tabs": {
"subscribe": "Abonnieren",
"subscribeApp": "App-Konfiguration",
"subscribeConfig": "Abonnement-Konfiguration",
"subscribeGroup": "Abonnieren Gruppe"
},
"traffic": "Verkehr",
"unitPrice": "Stückpreis",
"updateSuccess": "Aktualisierung erfolgreich"
}

View File

@ -1,161 +1,89 @@
{
"actions": "Aktionen",
"app": {
"appDownloadURL": "App-Download-URL",
"appIcon": "App-Symbol",
"appList": "App-Liste",
"appName": "App-Name",
"backupDomains": "Liste der Backup-Domains",
"backupDomainsDescription": "Liste der Backup-Domains für die Domain-Auflösung, eine Domain pro Zeile",
"batchDelete": "Stapel löschen",
"actions": {
"cancel": "Abbrechen",
"communicationKey": "Kommunikationsschlüssel",
"communicationKeyDescription": "Schlüssel, der für die Kommunikation mit dem Client verwendet wird",
"config": "Konfiguration",
"configApp": "App-Konfiguration",
"confirm": "Bestätigen",
"confirmDelete": "Löschen bestätigen",
"create": "Erstellen",
"createApp": "App erstellen",
"createSuccess": "Erfolgreich erstellt",
"defaultVersion": "Standard",
"delete": "Löschen",
"deleteWarning": "Diese Aktion kann nicht rückgängig gemacht werden",
"describeDescription": "Wird verwendet, um die Anwendung zu beschreiben, wird in der App-Liste angezeigt",
"description": "Beschreibung",
"downloadLink": "Download-Link",
"edit": "Bearbeiten",
"editApp": "App bearbeiten",
"encryption": "Verschlüsselungsmethode",
"encryptionDescription": "Wählen Sie die Verschlüsselungsmethode für die Kommunikation mit dem Client. Wenn ausgewählt, wird der Client diese Methode verwenden, um mit dem Server zu kommunizieren.",
"nameDescription": "Anwendungsname, wird in der App-Liste angezeigt",
"platform": "Plattform",
"selectApp": "App auswählen",
"selectAppDescription": "Wählen Sie die App aus, die konfiguriert werden soll. Alle Einstellungen gelten für die ausgewählte App.",
"startupPicture": "Startbild",
"startupPictureDescription": "Startbild, unterstützt Netzwerk- und lokale Bilder. Für Netzwerkbilder bitte die vollständige Bild-URL eingeben",
"startupPicturePreview": "Vorschau des Startbildes",
"startupPictureSkip": "Überspringzeit des Startbildes",
"startupPictureSkipDescription": "Anzeigedauer des Startbildes in Sekunden, 0 eingeben, um nicht anzuzeigen",
"subscriptionProtocol": "Abonnementprotokoll",
"updateSuccess": "Erfolgreich aktualisiert",
"version": "Version"
"save": "Speichern",
"saveTemplate": "Vorlage speichern"
},
"cancel": "Abbrechen",
"config": {
"singleSubscriptionMode": "Einzelabonnement-Modus",
"singleSubscriptionModeDescription": "Wenn aktiviert, werden alle Benutzerabonnements in Guthaben umgewandelt",
"description": "Verwalten Sie die Einstellungen des Abonnementsystems",
"restrictUserAgent": "Benutzer-Agent-Einschränkung",
"restrictUserAgentDescription": "Zugriffseinschränkungen basierend auf dem Benutzer-Agent aktivieren",
"singleSubscriptionMode": "Einzelnes Abonnement-Modus",
"singleSubscriptionModeDescription": "Benutzer auf ein aktives Abonnement beschränken. Bestehende Abonnements bleiben unberührt",
"subscriptionDomain": "Abonnement-Domain",
"subscriptionDomainDescription": "Wird für Abonnements verwendet; leer lassen, um die Site-Domain zu verwenden",
"subscriptionDomainPlaceholder": "Abonnement-Domain eingeben, eine pro Zeile",
"subscriptionDomainDescription": "Benutzerdefinierte Domain für Abonnement-Links",
"subscriptionDomainPlaceholder": "Geben Sie die Abonnement-Domain ein, eine pro Zeile",
"subscriptionPath": "Abonnement-Pfad",
"subscriptionPathDescription": "Wird für Abonnements verwendet; starten Sie das System nach der Änderung neu, um die optimale Leistung zu gewährleisten",
"subscriptionPathPlaceholder": "Eingeben",
"updateSuccess": "Erfolgreich aktualisiert",
"subscriptionPathDescription": "Benutzerdefinierter Pfad für Abonnement-Endpunkte (bessere Leistung nach Systemneustart)",
"subscriptionPathPlaceholder": "Geben Sie den Abonnement-Pfad ein",
"title": "Abonnementkonfiguration",
"updateError": "Aktualisierung fehlgeschlagen",
"updateSuccess": "Einstellungen erfolgreich aktualisiert",
"userAgentWhitelist": "Benutzer-Agent-Whitelist",
"userAgentWhitelistDescription": "Erlaubte Benutzer-Agents für den Abonnementzugriff, jeweils eine pro Zeile. Eingebaute Vorlagen werden automatisch in die Whitelist aufgenommen",
"userAgentWhitelistPlaceholder": "Erlaubte Benutzer-Agents eingeben, jeweils eine pro Zeile",
"wildcardResolution": "Wildcard-Auflösung",
"wildcardResolutionDescription": "Wird für Abonnements verwendet"
"wildcardResolutionDescription": "Aktivieren Sie die Wildcard-Domainauflösung für Abonnements"
},
"confirm": "Bestätigen",
"confirmDelete": "Möchten Sie wirklich löschen?",
"copy": "Kopieren",
"copySuccess": "Erfolgreich kopiert",
"create": "Erstellen",
"createSubscribe": "Neues Abonnement erstellen",
"createSuccess": "Erstellung erfolgreich",
"delete": "Löschen",
"deleteSuccess": "Erfolgreich gelöscht",
"deleteWarning": "Nach dem Löschen können die Daten nicht wiederhergestellt werden. Bitte gehen Sie vorsichtig vor.",
"deviceLimit": "Geräteanzahl/Stück",
"edit": "Bearbeiten",
"editSubscribe": "Abonnement bearbeiten",
"form": {
"Day": "Tag",
"Hour": "Stunde",
"Minute": "Minute",
"Month": "Monat",
"NoLimit": "Kein Limit",
"Year": "Jahr",
"annualReset": "Jährliches Zurücksetzen",
"basic": "Grundlegend",
"cancel": "Abbrechen",
"confirm": "Bestätigen",
"deductionRatio": "Automatische/Manuelle Abzugskonfiguration",
"deductionRatioDescription": "Wird für Abzüge verwendet. Standardmäßig verwendet das System einen automatischen Berechnungsalgorithmus. Wenn ein manueller Prozentsatz angegeben wird, berechnet das System die Anteile basierend auf dem Zeit- und Verkehrsverhältnis, wobei sichergestellt wird, dass die Summe 100% ergibt.",
"description": "Beschreibung",
"deviceLimit": "Gerätebeschränkung",
"discount": "Rabatt",
"discountDescription": "Rabatt basierend auf Einzelpreis",
"discountMonths": "Monate",
"discountPercent": "Rabattprozentsatz",
"discount_price": "Rabattpreis",
"duration": "Dauer (Monate)",
"groupId": "Abonnementgruppe",
"inventory": "Abonnementslimit",
"monthlyReset": "Monatliches Zurücksetzen",
"name": "Name",
"noLimit": "Keine Begrenzung",
"noReset": "Kein Zurücksetzen",
"pricing": "Preisgestaltung",
"purchaseWithDiscount": "Abzug erlauben",
"purchaseWithDiscountDescription": "Aktivieren oder deaktivieren Sie die Abmeldefunktion. Nach der Aktivierung führt das System die Abzugsverarbeitung gemäß den konfigurierten Regeln und Anteilen durch, und der verbleibende Wert wird dem Guthaben gutgeschrieben.",
"quota": "Kaufbeschränkung",
"renewalReset": "Zurücksetzen bei Erneuerung",
"renewalResetDescription": "Zurücksetzungszyklus bei Erneuerung",
"replacement": "Ersatzpreis (pro Mal)",
"resetCycle": "Zurücksetzungszyklus",
"resetOn1st": "Zurücksetzen am 1.",
"selectResetCycle": "Bitte wählen Sie einen Zurücksetzungszyklus",
"selectSubscribeGroup": "Bitte Abonnementgruppe auswählen",
"selectUnitTime": "Bitte wählen Sie eine Zeiteinheit",
"server": "Dienst",
"serverGroup": "Dienstgruppe",
"servers": "Server",
"speedLimit": "Geschwindigkeitsbegrenzung ",
"traffic": "Datenvolumen",
"unitPrice": "Einheitspreis",
"unitTime": "Zeiteinheit"
"description": "Konfigurieren Sie Abonnementeinstellungen und Clientvorlagen",
"messages": {
"noClients": "Keine Clientvorlagen",
"noClientsDescription": "Es sind noch keine Clientvorlagen konfiguriert. Fügen Sie Ihre erste Vorlage hinzu, um zu beginnen."
},
"group": {
"actions": "Aktionen",
"cancel": "Abbrechen",
"confirm": "Bestätigen",
"confirmDelete": "Löschen bestätigen?",
"create": "Erstellen",
"createSubscribeGroup": "Neue Abonnementgruppe erstellen",
"createSuccess": "Erstellung erfolgreich",
"delete": "Löschen",
"deleteSuccess": "Erfolgreich gelöscht",
"deleteWarning": "Nach dem Löschen können die Daten nicht wiederhergestellt werden, bitte vorsichtig vorgehen.",
"description": "Beschreibung",
"edit": "Bearbeiten",
"editSubscribeGroup": "Abonnementgruppe bearbeiten",
"form": {
"cancel": "Abbrechen",
"confirm": "Bestätigen",
"description": "Beschreibung",
"name": "Name"
"protocol": {
"clients": {
"clash": {
"features": "Großes Ökosystem, umfassende Regeln, aktive Community"
},
"egern": {
"features": "Moderner iOS-Client, hervorragende Leistung"
},
"hiddify": {
"features": "Plattformübergreifend, umfassende Protokolle, anfängerfreundlich"
},
"loon": {
"features": "Fortgeschrittener iOS-Client, reichhaltige Regeln, schönes Interface"
},
"netch": {
"features": "Gaming-fokussierter Proxy-Client"
},
"quantumult": {
"features": "Fortgeschrittener iOS-Client, flexible Regeln, reichhaltige Skripte"
},
"shadowrocket": {
"features": "Klassischer iOS-Client, flexible Konfiguration"
},
"singbox": {
"features": "Neuester Kernel, offizielle GUI, plattformübergreifende Unterstützung"
},
"stash": {
"features": "Modernes mobiles UI, umfassende Protokolle"
},
"surfboard": {
"features": "Kostenlos, aktive Entwicklung, modernes Interface"
},
"surge": {
"features": "Premium iOS/Mac-Tool, leistungsstarke Funktionen"
},
"v2box": {
"features": "Benutzerfreundlicher V2Ray-Client"
},
"v2rayn": {
"features": "Beliebter Windows-Client, funktionsreich"
},
"v2rayng": {
"features": "Beliebter Android-Client, leichtgewichtig"
}
},
"name": "Name",
"title": "Liste der Abonnementgruppen",
"updateSuccess": "Erfolgreich aktualisiert",
"updatedAt": "Aktualisierungszeit"
"description": "Verwalten Sie Konfigurationsvorlagen für Abonnements von Proxy-Clients",
"features": "Hauptmerkmale",
"platforms": "Plattformen",
"subscribeTemplate": "Konfiguration der Abonnementvorlage",
"templateContent": "Vorlageninhalt",
"templatePlaceholder": "Geben Sie die Clientkonfigurationsvorlage ein...",
"title": "Client-Abonnementvorlagen"
},
"inventory": "Abonnementslimit",
"name": "Name",
"quota": "Kaufbeschränkung/pro Einkauf",
"replacement": "Preis pro Zurücksetzung",
"sell": "Verkauf",
"show": "Anzeigen",
"sold": "Abonnentenzahl",
"subscribe": "Abonnieren",
"subscribeGroup": "Gruppe abonnieren",
"tabs": {
"subscribe": "Abonnieren",
"subscribeApp": "App-Konfiguration",
"subscribeConfig": "Abonnement-Konfiguration",
"subscribeGroup": "Abonnieren Gruppe"
},
"traffic": "Verkehr",
"unitPrice": "Stückpreis",
"updateSuccess": "Aktualisierung erfolgreich"
"title": "Abonnementverwaltung"
}

View File

@ -0,0 +1,39 @@
{
"allUsers": "All Users",
"broadcastList": "Broadcast List",
"broadcastLogs": "Broadcast Logs",
"cancel": "Cancel",
"completed": "Completed",
"confirm": "Confirm",
"confirmDelete": "Confirm Delete",
"content": "Email Content",
"create": "Create",
"createBroadcast": "Create Broadcast",
"createSuccess": "Created Successfully",
"createdAt": "Created At",
"delete": "Delete",
"deleteDescription": "This operation cannot be undone. Are you sure you want to delete?",
"deleteSuccess": "Deleted Successfully",
"edit": "Edit",
"emailBroadcast": "Email Broadcast",
"errorMessage": "Error Message",
"failCount": "Fail Count",
"failed": "Failed",
"logList": "Log List",
"marketingManagement": "Marketing Management",
"pending": "Pending",
"recipient": "Recipient",
"recipientEmail": "Recipient Email",
"recipientType": "Recipient Type",
"sendTime": "Send Time",
"sending": "Sending",
"sentAt": "Sent At",
"specificUsers": "Specific Users",
"status": "Status",
"subject": "Email Subject",
"subscribedUsers": "Subscribed Users",
"successCount": "Success Count",
"totalSent": "Total Sent",
"updateSuccess": "Updated Successfully",
"view": "View"
}

View File

@ -1,32 +1,26 @@
{
"ADS Config": "ADS Config",
"Announcement Management": "Announcement Management",
"Apple": "Apple ID",
"Application Management": "Application Management",
"Auth Control": "Auth Control",
"Coupon Management": "Coupon Management",
"Dashboard": "Dashboard",
"Device": "Device",
"Document Management": "Document Management",
"Email": "Email",
"Facebook": "Facebook",
"Finance": "Finance",
"General": "General",
"GitHub": "GitHub",
"Google": "Google",
"Marketing Management": "Marketing Management",
"Order Management": "Order Management",
"Payment Config": "Payment Config",
"Phone Number": "Phone Number",
"Product Management": "Product Management",
"Protocol Management": "Protocol Management",
"Rule Management": "Rule Management",
"Server": "Server",
"Server Management": "Server Management",
"Settings": "Settings",
"Subscribe Management": "Subscribe Management",
"Subscribe Config": "Subscribe Config",
"System Config": "System Config",
"System Management": "System Management",
"System Tool": "System Tool",
"Telegram": "Telegram",
"Ticket Management": "Ticket Management",
"Twitter": "Twitter",
"User": "User",
"User Detail": "User Detail",
"User Management": "User Management"

View File

@ -0,0 +1,146 @@
{
"actions": "Actions",
"app": {
"appDownloadURL": "App Download URL",
"appIcon": "App Icon",
"appList": "App List",
"appName": "App Name",
"backupDomains": "Backup Domain List",
"backupDomainsDescription": "Backup domain list for domain resolution, one domain per line",
"batchDelete": "Batch Delete",
"cancel": "Cancel",
"communicationKey": "Communication Key",
"communicationKeyDescription": "Key used for client communication",
"config": "Config",
"configApp": "App Configuration",
"confirm": "Confirm",
"confirmDelete": "Are you sure you want to delete?",
"create": "Create",
"createApp": "Create App",
"createSuccess": "Created successfully",
"defaultVersion": "Default",
"delete": "Delete",
"deleteWarning": "Data cannot be recovered after deletion. Please proceed with caution.",
"describeDescription": "Used to describe the application, displayed in the app list",
"description": "Description",
"downloadLink": "Download Link",
"edit": "Edit",
"editApp": "Edit App",
"encryption": "Encryption Method",
"encryptionDescription": "Choose the encryption method for client communication. If selected, the client will use this method to communicate with the server",
"nameDescription": "Application name, displayed in the app list",
"platform": "Platform",
"selectApp": "Select App",
"selectAppDescription": "Select the app to configure, all settings will apply to the selected app",
"startupPicture": "Startup Picture",
"startupPictureDescription": "Startup picture, supports network and local images. For network images, please enter the complete image URL",
"startupPicturePreview": "Startup Picture Preview",
"startupPictureSkip": "Startup Picture Skip Time",
"startupPictureSkipDescription": "Startup picture display time in seconds, enter 0 to not display",
"subscriptionProtocol": "Subscription Protocol",
"updateSuccess": "Updated successfully",
"version": "Version"
},
"cancel": "Cancel",
"confirm": "Confirm",
"confirmDelete": "Are you sure you want to delete?",
"copy": "Copy",
"copySuccess": "Copied successfully",
"create": "Create",
"createSubscribe": "Create Subscription",
"createSuccess": "Create Successful",
"delete": "Delete",
"deleteSuccess": "Delete Successful",
"deleteWarning": "Data cannot be recovered after deletion. Please proceed with caution.",
"deviceLimit": "Device Limit/Unit",
"edit": "Edit",
"editSubscribe": "Edit Subscription",
"form": {
"Day": "Day",
"Hour": "Hour",
"Minute": "Minute",
"Month": "Month",
"NoLimit": "No Limit",
"Year": "Year",
"annualReset": "Annual Reset",
"basic": "Basic",
"cancel": "Cancel",
"confirm": "Confirm",
"deductionRatio": "Automatic/Manual Deduction Configuration",
"deductionRatioDescription": "Used for deduction. By default, the system adopts an automatic calculation algorithm. When a manual ratio is provided, the system calculates proportions based on the time and traffic ratio, ensuring the total equals 100%.",
"description": "Description",
"deviceLimit": "Device Limit",
"discount": "Discount",
"discountDescription": "Set discount based on unit price",
"discountMonths": "Months",
"discountPercent": "Discount Percentage",
"discount_price": "Discount Price",
"duration": "Duration (months)",
"groupId": "Subscription Group",
"inventory": "Subscription Limit",
"monthlyReset": "Monthly Reset",
"name": "Name",
"noLimit": "No Limit",
"noReset": "No Reset",
"pricing": "Pricing",
"purchaseWithDiscount": "Allow Deduction",
"purchaseWithDiscountDescription": "Enable or disable unsubscribe functionality. After activation, the system will perform deduction processing according to the configured rules and proportions, and the remaining value will be returned to the balance",
"quota": "Purchase Limit",
"renewalReset": "Renewal Reset",
"renewalResetDescription": "Reset cycle upon renewal",
"replacement": "Reset Price (per time)",
"resetCycle": "Reset Cycle",
"resetOn1st": "Reset on the 1st",
"selectResetCycle": "Please select a reset cycle",
"selectSubscribeGroup": "Select Subscription Group",
"selectUnitTime": "Please select a unit of time",
"server": "Server",
"serverGroup": "Server Group",
"servers": "Servers",
"speedLimit": "Speed Limit ",
"traffic": "Traffic",
"unitPrice": "Unit Price",
"unitTime": "Unit Time"
},
"group": {
"actions": "Actions",
"cancel": "Cancel",
"confirm": "Confirm",
"confirmDelete": "Are you sure you want to delete?",
"create": "Create",
"createSubscribeGroup": "Create Subscription Group",
"createSuccess": "Create Successful",
"delete": "Delete",
"deleteSuccess": "Delete Successful",
"deleteWarning": "Data cannot be recovered after deletion. Please proceed with caution.",
"description": "Description",
"edit": "Edit",
"editSubscribeGroup": "Edit Subscription Group",
"form": {
"cancel": "Cancel",
"confirm": "Confirm",
"description": "Description",
"name": "Name"
},
"name": "Name",
"title": "Subscription Group List",
"updateSuccess": "Update Successful",
"updatedAt": "Updated At"
},
"inventory": "Subscription Limit",
"name": "Name",
"quota": "Purchase Limit/Time",
"replacement": "Reset Price/Time",
"sell": "Sell",
"show": "Display",
"sold": "Subscription Count",
"subscribe": "Subscribe",
"subscribeGroup": "Subscription Group",
"tabs": {
"subscribe": "Subscribe",
"subscribeGroup": "Subscription Group"
},
"traffic": "Traffic",
"unitPrice": "Unit Price",
"updateSuccess": "Update Successful"
}

View File

@ -1,161 +1,89 @@
{
"actions": "Actions",
"app": {
"appDownloadURL": "App Download URL",
"appIcon": "App Icon",
"appList": "App List",
"appName": "App Name",
"backupDomains": "Backup Domain List",
"backupDomainsDescription": "Backup domain list for domain resolution, one domain per line",
"batchDelete": "Batch Delete",
"cancel": "Cancel",
"communicationKey": "Communication Key",
"communicationKeyDescription": "Key used for client communication",
"config": "Config",
"configApp": "App Configuration",
"confirm": "Confirm",
"confirmDelete": "Are you sure you want to delete?",
"create": "Create",
"createApp": "Create App",
"createSuccess": "Created successfully",
"defaultVersion": "Default",
"delete": "Delete",
"deleteWarning": "Data cannot be recovered after deletion. Please proceed with caution.",
"describeDescription": "Used to describe the application, displayed in the app list",
"description": "Description",
"downloadLink": "Download Link",
"actions": {
"edit": "Edit",
"editApp": "Edit App",
"encryption": "Encryption Method",
"encryptionDescription": "Choose the encryption method for client communication. If selected, the client will use this method to communicate with the server",
"nameDescription": "Application name, displayed in the app list",
"platform": "Platform",
"selectApp": "Select App",
"selectAppDescription": "Select the app to configure, all settings will apply to the selected app",
"startupPicture": "Startup Picture",
"startupPictureDescription": "Startup picture, supports network and local images. For network images, please enter the complete image URL",
"startupPicturePreview": "Startup Picture Preview",
"startupPictureSkip": "Startup Picture Skip Time",
"startupPictureSkipDescription": "Startup picture display time in seconds, enter 0 to not display",
"subscriptionProtocol": "Subscription Protocol",
"updateSuccess": "Updated successfully",
"version": "Version"
"delete": "Delete",
"save": "Save",
"cancel": "Cancel",
"saveTemplate": "Save Template"
},
"cancel": "Cancel",
"config": {
"title": "Subscription Configuration",
"description": "Manage subscription system settings",
"restrictUserAgent": "User-Agent Restriction",
"restrictUserAgentDescription": "Enable access restrictions based on User-Agent",
"singleSubscriptionMode": "Single Subscription Mode",
"singleSubscriptionModeDescription": "When enabled, all user subscriptions will be converted to balance",
"singleSubscriptionModeDescription": "Limit users to one active subscription. Existing subscriptions unaffected",
"subscriptionDomain": "Subscription Domain",
"subscriptionDomainDescription": "Used for subscription; leave blank to use site domain",
"subscriptionDomainDescription": "Custom domain for subscription links",
"subscriptionDomainPlaceholder": "Enter subscription domain, one per line",
"subscriptionPath": "Subscription Path",
"subscriptionPathDescription": "Used for subscription; be sure to restart the system after modification for optimal performance",
"subscriptionPathPlaceholder": "Enter",
"updateSuccess": "Updated successfully",
"subscriptionPathDescription": "Custom path for subscription endpoints (better performance after system restart)",
"subscriptionPathPlaceholder": "Enter subscription path",
"updateError": "Update failed",
"updateSuccess": "Settings updated successfully",
"userAgentWhitelist": "User-Agent Whitelist",
"userAgentWhitelistDescription": "Allowed User-Agents for subscription access, one per line. Built-in templates are automatically included in the whitelist",
"userAgentWhitelistPlaceholder": "Enter allowed User-Agents, one per line",
"wildcardResolution": "Wildcard Resolution",
"wildcardResolutionDescription": "Used for subscription"
"wildcardResolutionDescription": "Enable wildcard domain resolution for subscriptions"
},
"confirm": "Confirm",
"confirmDelete": "Are you sure you want to delete?",
"copy": "Copy",
"copySuccess": "Copied successfully",
"create": "Create",
"createSubscribe": "Create Subscription",
"createSuccess": "Create Successful",
"delete": "Delete",
"deleteSuccess": "Delete Successful",
"deleteWarning": "Data cannot be recovered after deletion. Please proceed with caution.",
"deviceLimit": "Device Limit/Unit",
"edit": "Edit",
"editSubscribe": "Edit Subscription",
"form": {
"Day": "Day",
"Hour": "Hour",
"Minute": "Minute",
"Month": "Month",
"NoLimit": "No Limit",
"Year": "Year",
"annualReset": "Annual Reset",
"basic": "Basic",
"cancel": "Cancel",
"confirm": "Confirm",
"deductionRatio": "Automatic/Manual Deduction Configuration",
"deductionRatioDescription": "Used for deduction. By default, the system adopts an automatic calculation algorithm. When a manual ratio is provided, the system calculates proportions based on the time and traffic ratio, ensuring the total equals 100%.",
"description": "Description",
"deviceLimit": "Device Limit",
"discount": "Discount",
"discountDescription": "Set discount based on unit price",
"discountMonths": "Months",
"discountPercent": "Discount Percentage",
"discount_price": "Discount Price",
"duration": "Duration (months)",
"groupId": "Subscription Group",
"inventory": "Subscription Limit",
"monthlyReset": "Monthly Reset",
"name": "Name",
"noLimit": "No Limit",
"noReset": "No Reset",
"pricing": "Pricing",
"purchaseWithDiscount": "Allow Deduction",
"purchaseWithDiscountDescription": "Enable or disable unsubscribe functionality. After activation, the system will perform deduction processing according to the configured rules and proportions, and the remaining value will be returned to the balance",
"quota": "Purchase Limit",
"renewalReset": "Renewal Reset",
"renewalResetDescription": "Reset cycle upon renewal",
"replacement": "Reset Price (per time)",
"resetCycle": "Reset Cycle",
"resetOn1st": "Reset on the 1st",
"selectResetCycle": "Please select a reset cycle",
"selectSubscribeGroup": "Select Subscription Group",
"selectUnitTime": "Please select a unit of time",
"server": "Server",
"serverGroup": "Server Group",
"servers": "Servers",
"speedLimit": "Speed Limit ",
"traffic": "Traffic",
"unitPrice": "Unit Price",
"unitTime": "Unit Time"
"description": "Configure subscription settings and client templates",
"messages": {
"noClients": "No Client Templates",
"noClientsDescription": "No client templates configured yet. Add your first template to get started."
},
"group": {
"actions": "Actions",
"cancel": "Cancel",
"confirm": "Confirm",
"confirmDelete": "Are you sure you want to delete?",
"create": "Create",
"createSubscribeGroup": "Create Subscription Group",
"createSuccess": "Create Successful",
"delete": "Delete",
"deleteSuccess": "Delete Successful",
"deleteWarning": "Data cannot be recovered after deletion. Please proceed with caution.",
"description": "Description",
"edit": "Edit",
"editSubscribeGroup": "Edit Subscription Group",
"form": {
"cancel": "Cancel",
"confirm": "Confirm",
"description": "Description",
"name": "Name"
},
"name": "Name",
"title": "Subscription Group List",
"updateSuccess": "Update Successful",
"updatedAt": "Updated At"
"protocol": {
"title": "Client Subscription Templates",
"description": "Manage subscription configuration templates for proxy clients",
"subscribeTemplate": "Subscription Template Configuration",
"templateContent": "Template Content",
"templatePlaceholder": "Enter client configuration template...",
"platforms": "Platforms",
"features": "Key Features",
"clients": {
"clash": {
"features": "Large ecosystem, comprehensive rules, active community"
},
"hiddify": {
"features": "Multi-platform, comprehensive protocols, beginner-friendly"
},
"singbox": {
"features": "Latest kernel, official GUI, multi-platform support"
},
"stash": {
"features": "Modern mobile UI, comprehensive protocols"
},
"surge": {
"features": "Premium iOS/Mac tool, powerful features"
},
"quantumult": {
"features": "iOS advanced client, flexible rules, rich scripts"
},
"shadowrocket": {
"features": "Classic iOS client, flexible configuration"
},
"surfboard": {
"features": "Free, active development, modern interface"
},
"v2box": {
"features": "User-friendly V2Ray client"
},
"v2rayn": {
"features": "Popular Windows client, feature-rich"
},
"v2rayng": {
"features": "Popular Android client, lightweight"
},
"netch": {
"features": "Gaming-focused proxy client"
},
"loon": {
"features": "iOS advanced client, rich rules, beautiful interface"
},
"egern": {
"features": "Modern iOS client, excellent performance"
}
}
},
"inventory": "Subscription Limit",
"name": "Name",
"quota": "Purchase Limit/Time",
"replacement": "Reset Price/Time",
"sell": "Sell",
"show": "Display",
"sold": "Subscription Count",
"subscribe": "Subscribe",
"subscribeGroup": "Subscription Group",
"tabs": {
"subscribe": "Subscribe",
"subscribeApp": "App Configuration",
"subscribeConfig": "Subscription Configuration",
"subscribeGroup": "Subscription Group"
},
"traffic": "Traffic",
"unitPrice": "Unit Price",
"updateSuccess": "Update Successful"
"title": "Subscription Management"
}

View File

@ -1,32 +1,25 @@
{
"ADS Config": "Configuración de ADS",
"Announcement Management": "Gestión de Anuncios",
"Apple": "ID de Apple",
"Application Management": "Gestión de Aplicaciones",
"Auth Control": "Control de Autenticación",
"Coupon Management": "Gestión de Cupones",
"Dashboard": "Tablero",
"Device": "Dispositivo",
"Document Management": "Gestión de Documentos",
"Email": "Correo electrónico",
"Facebook": "Facebook",
"Finance": "Finanzas",
"General": "General",
"GitHub": "GitHub",
"Google": "Google",
"Order Management": "Gestión de Pedidos",
"Payment Config": "Configuración de Pago",
"Phone Number": "Número de Teléfono",
"Product Management": "Gestión de Productos",
"Protocol Management": "Gestión de Protocolos",
"Rule Management": "Gestión de Reglas",
"Server": "Servidor",
"Server Management": "Gestión de Servidores",
"Settings": "Configuración",
"Subscribe Management": "Gestión de Suscripciones",
"Subscribe Config": "Configuración de Suscripción",
"System Config": "Configuración del sistema",
"System Management": "Gestión del Sistema",
"System Tool": "Herramienta del sistema",
"Telegram": "Telegram",
"Ticket Management": "Gestión de Tickets",
"Twitter": "Twitter",
"User": "Usuario",
"User Detail": "Detalle del Usuario",
"User Management": "Gestión de Usuarios"

View File

@ -0,0 +1,161 @@
{
"actions": "acciones",
"app": {
"appDownloadURL": "URL de Descarga de la App",
"appIcon": "Icono de la App",
"appList": "Lista de Aplicaciones",
"appName": "Nombre de la App",
"backupDomains": "Lista de Dominios de Respaldo",
"backupDomainsDescription": "Lista de dominios de respaldo para la resolución de dominios, un dominio por línea",
"batchDelete": "Eliminar en Lote",
"cancel": "Cancelar",
"communicationKey": "Clave de comunicación",
"communicationKeyDescription": "Clave utilizada para la comunicación del cliente",
"config": "Configuración",
"configApp": "Configuración de la Aplicación",
"confirm": "Confirmar",
"confirmDelete": "Confirmar Eliminación",
"create": "Crear",
"createApp": "Crear App",
"createSuccess": "Creado con éxito",
"defaultVersion": "Versión Predeterminada",
"delete": "Eliminar",
"deleteWarning": "Esta acción no se puede deshacer",
"describeDescription": "Se utiliza para describir la aplicación, se muestra en la lista de aplicaciones",
"description": "Descripción",
"downloadLink": "Enlace de Descarga",
"edit": "Editar",
"editApp": "Editar App",
"encryption": "Método de encriptación",
"encryptionDescription": "Elija el método de encriptación para la comunicación del cliente. Si se selecciona, el cliente utilizará este método para comunicarse con el servidor",
"nameDescription": "Nombre de la aplicación, se muestra en la lista de aplicaciones",
"platform": "Plataforma",
"selectApp": "Seleccionar aplicación",
"selectAppDescription": "Seleccione la aplicación para configurar, todos los ajustes se aplicarán a la aplicación seleccionada",
"startupPicture": "Imagen de Inicio",
"startupPictureDescription": "Imagen de inicio, admite imágenes de red y locales. Para imágenes de red, ingrese la URL completa de la imagen",
"startupPicturePreview": "Vista Previa de la Imagen de Inicio",
"startupPictureSkip": "Tiempo de Salto de la Imagen de Inicio",
"startupPictureSkipDescription": "Tiempo de visualización de la imagen de inicio en segundos, ingrese 0 para no mostrar",
"subscriptionProtocol": "Protocolo de Suscripción",
"updateSuccess": "Actualizado con éxito",
"version": "Versión"
},
"cancel": "Cancelar",
"config": {
"singleSubscriptionMode": "Modo de Suscripción Única",
"singleSubscriptionModeDescription": "Cuando está habilitado, todas las suscripciones de usuario se convertirán en saldo",
"subscriptionDomain": "Dominio de Suscripción",
"subscriptionDomainDescription": "Usado para suscripción; dejar en blanco para usar el dominio del sitio",
"subscriptionDomainPlaceholder": "Ingrese el dominio de suscripción, uno por línea",
"subscriptionPath": "Ruta de Suscripción",
"subscriptionPathDescription": "Usado para suscripción; asegúrese de reiniciar el sistema después de la modificación para un rendimiento óptimo",
"subscriptionPathPlaceholder": "Ingrese",
"updateSuccess": "Actualizado con éxito",
"wildcardResolution": "Resolución de Comodín",
"wildcardResolutionDescription": "Usado para suscripción"
},
"confirm": "Confirmar",
"confirmDelete": "¿Estás seguro de que deseas eliminar?",
"copy": "Copiar",
"copySuccess": "Copiado con éxito",
"create": "Crear",
"createSubscribe": "Crear suscripción",
"createSuccess": "Creación exitosa",
"delete": "eliminar",
"deleteSuccess": "Eliminación exitosa",
"deleteWarning": "Después de eliminar, los datos no se podrán recuperar. Proceda con precaución.",
"deviceLimit": "Número de dispositivos/unidad",
"edit": "editar",
"editSubscribe": "Editar suscripción",
"form": {
"Day": "Día",
"Hour": "Hora",
"Minute": "Minuto",
"Month": "Mes",
"NoLimit": "Sin Límite",
"Year": "Año",
"annualReset": "Reinicio Anual",
"basic": "Básico",
"cancel": "Cancelar",
"confirm": "Confirmar",
"deductionRatio": "Configuración de Deducción Automática/Manual",
"deductionRatioDescription": "Utilizado para deducciones. Por defecto, el sistema adopta un algoritmo de cálculo automático. Cuando se proporciona un ratio manual, el sistema calcula proporciones basadas en el tiempo y el ratio de tráfico, asegurando que el total sea igual al 100%.",
"description": "Descripción",
"deviceLimit": "Límite de dispositivos",
"discount": "Descuento",
"discountDescription": "Descuento basado en el precio unitario",
"discountMonths": "Meses",
"discountPercent": "Porcentaje de descuento",
"discount_price": "Precio con descuento",
"duration": "Duración (meses)",
"groupId": "Grupo de Suscripción",
"inventory": "Límite de suscripción",
"monthlyReset": "Reinicio Mensual",
"name": "Nombre",
"noLimit": "Sin límite",
"noReset": "Sin Reinicio",
"pricing": "Precios",
"purchaseWithDiscount": "Permitir Deducción",
"purchaseWithDiscountDescription": "Habilitar o deshabilitar la funcionalidad de cancelación de suscripción. Después de la activación, el sistema realizará el procesamiento de deducción según las reglas y proporciones configuradas, y el valor restante se devolverá al saldo",
"quota": "Cantidad de compra limitada",
"renewalReset": "Reinicio por Renovación",
"renewalResetDescription": "Reiniciar ciclo al renovar",
"replacement": "Precio de reposición (cada vez)",
"resetCycle": "Ciclo de Reinicio",
"resetOn1st": "Reiniciar el día 1",
"selectResetCycle": "Por favor, seleccione un ciclo de reinicio",
"selectSubscribeGroup": "Por favor, seleccione un grupo de suscripción",
"selectUnitTime": "Por favor, seleccione la unidad de tiempo",
"server": "Servidor",
"serverGroup": "Grupo de servidores",
"servers": "Servidores",
"speedLimit": "Límite de velocidad ",
"traffic": "Tráfico",
"unitPrice": "Precio unitario",
"unitTime": "Unidad de tiempo"
},
"group": {
"actions": "Acciones",
"cancel": "Cancelar",
"confirm": "Confirmar",
"confirmDelete": "¿Confirmar eliminación?",
"create": "Crear",
"createSubscribeGroup": "Crear nuevo grupo de suscripción",
"createSuccess": "Creación exitosa",
"delete": "Eliminar",
"deleteSuccess": "Eliminación exitosa",
"deleteWarning": "Los datos no se pueden recuperar después de la eliminación, por favor opere con precaución.",
"description": "Descripción",
"edit": "Editar",
"editSubscribeGroup": "Editar grupo de suscripción",
"form": {
"cancel": "Cancelar",
"confirm": "Confirmar",
"description": "Descripción",
"name": "Nombre"
},
"name": "Nombre",
"title": "Lista de grupos de suscripción",
"updateSuccess": "Actualización exitosa",
"updatedAt": "Fecha de actualización"
},
"inventory": "Límite de suscripción",
"name": "Nombre",
"quota": "Límite de compra/vez",
"replacement": "Restablecer precio/vez",
"sell": "Venta",
"show": "Mostrar",
"sold": "Conteo de Suscripciones",
"subscribe": "Suscribirse",
"subscribeGroup": "Suscribirse al grupo",
"tabs": {
"subscribe": "Suscribirse",
"subscribeApp": "Configuración de la aplicación",
"subscribeConfig": "Configuración de suscripción",
"subscribeGroup": "Grupo de suscripción"
},
"traffic": "tráfico",
"unitPrice": "Precio Unitario",
"updateSuccess": "Actualización exitosa"
}

View File

@ -1,161 +1,89 @@
{
"actions": "acciones",
"app": {
"appDownloadURL": "URL de Descarga de la App",
"appIcon": "Icono de la App",
"appList": "Lista de Aplicaciones",
"appName": "Nombre de la App",
"backupDomains": "Lista de Dominios de Respaldo",
"backupDomainsDescription": "Lista de dominios de respaldo para la resolución de dominios, un dominio por línea",
"batchDelete": "Eliminar en Lote",
"actions": {
"cancel": "Cancelar",
"communicationKey": "Clave de comunicación",
"communicationKeyDescription": "Clave utilizada para la comunicación del cliente",
"config": "Configuración",
"configApp": "Configuración de la Aplicación",
"confirm": "Confirmar",
"confirmDelete": "Confirmar Eliminación",
"create": "Crear",
"createApp": "Crear App",
"createSuccess": "Creado con éxito",
"defaultVersion": "Versión Predeterminada",
"delete": "Eliminar",
"deleteWarning": "Esta acción no se puede deshacer",
"describeDescription": "Se utiliza para describir la aplicación, se muestra en la lista de aplicaciones",
"description": "Descripción",
"downloadLink": "Enlace de Descarga",
"edit": "Editar",
"editApp": "Editar App",
"encryption": "Método de encriptación",
"encryptionDescription": "Elija el método de encriptación para la comunicación del cliente. Si se selecciona, el cliente utilizará este método para comunicarse con el servidor",
"nameDescription": "Nombre de la aplicación, se muestra en la lista de aplicaciones",
"platform": "Plataforma",
"selectApp": "Seleccionar aplicación",
"selectAppDescription": "Seleccione la aplicación para configurar, todos los ajustes se aplicarán a la aplicación seleccionada",
"startupPicture": "Imagen de Inicio",
"startupPictureDescription": "Imagen de inicio, admite imágenes de red y locales. Para imágenes de red, ingrese la URL completa de la imagen",
"startupPicturePreview": "Vista Previa de la Imagen de Inicio",
"startupPictureSkip": "Tiempo de Salto de la Imagen de Inicio",
"startupPictureSkipDescription": "Tiempo de visualización de la imagen de inicio en segundos, ingrese 0 para no mostrar",
"subscriptionProtocol": "Protocolo de Suscripción",
"updateSuccess": "Actualizado con éxito",
"version": "Versión"
"save": "Guardar",
"saveTemplate": "Guardar Plantilla"
},
"cancel": "Cancelar",
"config": {
"description": "Gestionar la configuración del sistema de suscripciones",
"restrictUserAgent": "Restricción de User-Agent",
"restrictUserAgentDescription": "Habilitar restricciones de acceso basadas en User-Agent",
"singleSubscriptionMode": "Modo de Suscripción Única",
"singleSubscriptionModeDescription": "Cuando está habilitado, todas las suscripciones de usuario se convertirán en saldo",
"singleSubscriptionModeDescription": "Limitar a los usuarios a una única suscripción activa. Las suscripciones existentes no se verán afectadas.",
"subscriptionDomain": "Dominio de Suscripción",
"subscriptionDomainDescription": "Usado para suscripción; dejar en blanco para usar el dominio del sitio",
"subscriptionDomainDescription": "Dominio personalizado para enlaces de suscripción",
"subscriptionDomainPlaceholder": "Ingrese el dominio de suscripción, uno por línea",
"subscriptionPath": "Ruta de Suscripción",
"subscriptionPathDescription": "Usado para suscripción; asegúrese de reiniciar el sistema después de la modificación para un rendimiento óptimo",
"subscriptionPathPlaceholder": "Ingrese",
"updateSuccess": "Actualizado con éxito",
"wildcardResolution": "Resolución de Comodín",
"wildcardResolutionDescription": "Usado para suscripción"
"subscriptionPathDescription": "Ruta personalizada para los puntos finales de suscripción (mejor rendimiento después del reinicio del sistema)",
"subscriptionPathPlaceholder": "Ingrese la ruta de suscripción",
"title": "Configuración de Suscripciones",
"updateError": "Error al actualizar",
"updateSuccess": "Configuraciones actualizadas con éxito",
"userAgentWhitelist": "Lista Blanca de User-Agent",
"userAgentWhitelistDescription": "User-Agents permitidos para acceder a las suscripciones, uno por línea. Las plantillas integradas se incluyen automáticamente en la lista blanca",
"userAgentWhitelistPlaceholder": "Ingrese los User-Agents permitidos, uno por línea",
"wildcardResolution": "Resolución de Comodines",
"wildcardResolutionDescription": "Habilitar la resolución de dominio comodín para suscripciones"
},
"confirm": "Confirmar",
"confirmDelete": "¿Estás seguro de que deseas eliminar?",
"copy": "Copiar",
"copySuccess": "Copiado con éxito",
"create": "Crear",
"createSubscribe": "Crear suscripción",
"createSuccess": "Creación exitosa",
"delete": "eliminar",
"deleteSuccess": "Eliminación exitosa",
"deleteWarning": "Después de eliminar, los datos no se podrán recuperar. Proceda con precaución.",
"deviceLimit": "Número de dispositivos/unidad",
"edit": "editar",
"editSubscribe": "Editar suscripción",
"form": {
"Day": "Día",
"Hour": "Hora",
"Minute": "Minuto",
"Month": "Mes",
"NoLimit": "Sin Límite",
"Year": "Año",
"annualReset": "Reinicio Anual",
"basic": "Básico",
"cancel": "Cancelar",
"confirm": "Confirmar",
"deductionRatio": "Configuración de Deducción Automática/Manual",
"deductionRatioDescription": "Utilizado para deducciones. Por defecto, el sistema adopta un algoritmo de cálculo automático. Cuando se proporciona un ratio manual, el sistema calcula proporciones basadas en el tiempo y el ratio de tráfico, asegurando que el total sea igual al 100%.",
"description": "Descripción",
"deviceLimit": "Límite de dispositivos",
"discount": "Descuento",
"discountDescription": "Descuento basado en el precio unitario",
"discountMonths": "Meses",
"discountPercent": "Porcentaje de descuento",
"discount_price": "Precio con descuento",
"duration": "Duración (meses)",
"groupId": "Grupo de Suscripción",
"inventory": "Límite de suscripción",
"monthlyReset": "Reinicio Mensual",
"name": "Nombre",
"noLimit": "Sin límite",
"noReset": "Sin Reinicio",
"pricing": "Precios",
"purchaseWithDiscount": "Permitir Deducción",
"purchaseWithDiscountDescription": "Habilitar o deshabilitar la funcionalidad de cancelación de suscripción. Después de la activación, el sistema realizará el procesamiento de deducción según las reglas y proporciones configuradas, y el valor restante se devolverá al saldo",
"quota": "Cantidad de compra limitada",
"renewalReset": "Reinicio por Renovación",
"renewalResetDescription": "Reiniciar ciclo al renovar",
"replacement": "Precio de reposición (cada vez)",
"resetCycle": "Ciclo de Reinicio",
"resetOn1st": "Reiniciar el día 1",
"selectResetCycle": "Por favor, seleccione un ciclo de reinicio",
"selectSubscribeGroup": "Por favor, seleccione un grupo de suscripción",
"selectUnitTime": "Por favor, seleccione la unidad de tiempo",
"server": "Servidor",
"serverGroup": "Grupo de servidores",
"servers": "Servidores",
"speedLimit": "Límite de velocidad ",
"traffic": "Tráfico",
"unitPrice": "Precio unitario",
"unitTime": "Unidad de tiempo"
"description": "Configurar ajustes de suscripción y plantillas de cliente",
"messages": {
"noClients": "No hay Plantillas de Cliente",
"noClientsDescription": "Aún no se han configurado plantillas de cliente. Agregue su primera plantilla para comenzar."
},
"group": {
"actions": "Acciones",
"cancel": "Cancelar",
"confirm": "Confirmar",
"confirmDelete": "¿Confirmar eliminación?",
"create": "Crear",
"createSubscribeGroup": "Crear nuevo grupo de suscripción",
"createSuccess": "Creación exitosa",
"delete": "Eliminar",
"deleteSuccess": "Eliminación exitosa",
"deleteWarning": "Los datos no se pueden recuperar después de la eliminación, por favor opere con precaución.",
"description": "Descripción",
"edit": "Editar",
"editSubscribeGroup": "Editar grupo de suscripción",
"form": {
"cancel": "Cancelar",
"confirm": "Confirmar",
"description": "Descripción",
"name": "Nombre"
"protocol": {
"clients": {
"clash": {
"features": "Gran ecosistema, reglas completas, comunidad activa"
},
"egern": {
"features": "Cliente moderno para iOS, excelente rendimiento"
},
"hiddify": {
"features": "Multiplataforma, protocolos completos, fácil de usar"
},
"loon": {
"features": "Cliente avanzado para iOS, reglas ricas, interfaz hermosa"
},
"netch": {
"features": "Cliente proxy enfocado en juegos"
},
"quantumult": {
"features": "Cliente avanzado para iOS, reglas flexibles, scripts ricos"
},
"shadowrocket": {
"features": "Cliente clásico para iOS, configuración flexible"
},
"singbox": {
"features": "Último núcleo, GUI oficial, soporte multiplataforma"
},
"stash": {
"features": "Interfaz móvil moderna, protocolos completos"
},
"surfboard": {
"features": "Gratis, desarrollo activo, interfaz moderna"
},
"surge": {
"features": "Herramienta premium para iOS/Mac, características potentes"
},
"v2box": {
"features": "Cliente V2Ray fácil de usar"
},
"v2rayn": {
"features": "Cliente popular para Windows, rico en características"
},
"v2rayng": {
"features": "Cliente popular para Android, ligero"
}
},
"name": "Nombre",
"title": "Lista de grupos de suscripción",
"updateSuccess": "Actualización exitosa",
"updatedAt": "Fecha de actualización"
"description": "Gestionar plantillas de configuración de suscripción para clientes proxy",
"features": "Características Clave",
"platforms": "Plataformas",
"subscribeTemplate": "Configuración de Plantilla de Suscripción",
"templateContent": "Contenido de la Plantilla",
"templatePlaceholder": "Ingrese la plantilla de configuración del cliente...",
"title": "Plantillas de Suscripción de Cliente"
},
"inventory": "Límite de suscripción",
"name": "Nombre",
"quota": "Límite de compra/vez",
"replacement": "Restablecer precio/vez",
"sell": "Venta",
"show": "Mostrar",
"sold": "Conteo de Suscripciones",
"subscribe": "Suscribirse",
"subscribeGroup": "Suscribirse al grupo",
"tabs": {
"subscribe": "Suscribirse",
"subscribeApp": "Configuración de la aplicación",
"subscribeConfig": "Configuración de suscripción",
"subscribeGroup": "Grupo de suscripción"
},
"traffic": "tráfico",
"unitPrice": "Precio Unitario",
"updateSuccess": "Actualización exitosa"
"title": "Gestión de Suscripciones"
}

View File

@ -1,32 +1,25 @@
{
"ADS Config": "Configuración de ADS",
"Announcement Management": "Gestión de Anuncios",
"Apple": "ID de Apple",
"Application Management": "Gestión de Aplicaciones",
"Auth Control": "Control de Autenticación",
"Coupon Management": "Gestión de Cupones",
"Dashboard": "Tablero",
"Device": "Dispositivo",
"Document Management": "Gestión de Documentos",
"Email": "Correo electrónico",
"Facebook": "Facebook",
"Finance": "Finanzas",
"General": "General",
"GitHub": "GitHub",
"Google": "Google",
"Order Management": "Gestión de Pedidos",
"Payment Config": "Configuración de Pago",
"Phone Number": "Número de Teléfono",
"Product Management": "Gestión de Productos",
"Protocol Management": "Gestión de Protocolos",
"Rule Management": "Gestión de Reglas",
"Server": "Servidor",
"Server Management": "Gestión de Servidores",
"Settings": "Configuración",
"Subscribe Management": "Gestión de Suscripciones",
"Subscribe Config": "Configuración de Suscripción",
"System Config": "Configuración del Sistema",
"System Management": "Gestión del Sistema",
"System Tool": "Herramienta del sistema",
"Telegram": "Telegram",
"Ticket Management": "Gestión de Tickets",
"Twitter": "Twitter",
"User": "Usuario",
"User Detail": "Detalle del Usuario",
"User Management": "Gestión de Usuarios"

View File

@ -0,0 +1,160 @@
{
"actions": "acciones",
"app": {
"appDownloadURL": "URL de Descarga de la App",
"appIcon": "Ícono de la App",
"appList": "Lista de Aplicaciones",
"appName": "Nombre de la App",
"backupDomains": "Lista de Dominios de Respaldo",
"backupDomainsDescription": "Lista de dominios de respaldo para la resolución de dominios, un dominio por línea",
"batchDelete": "Eliminar en Lote",
"cancel": "Cancelar",
"communicationKey": "Clave de Comunicación",
"communicationKeyDescription": "Clave utilizada para la comunicación con el cliente",
"config": "Configuración",
"configApp": "Configuración de la Aplicación",
"confirm": "Confirmar",
"confirmDelete": "Confirmar Eliminación",
"create": "Crear",
"createApp": "Crear App",
"createSuccess": "Creado exitosamente",
"defaultVersion": "Versión Predeterminada",
"delete": "Eliminar",
"deleteWarning": "Esta acción no se puede deshacer",
"describeDescription": "Se utiliza para describir la aplicación, se muestra en la lista de aplicaciones",
"description": "Descripción",
"downloadLink": "Enlace de Descarga",
"edit": "Editar",
"editApp": "Editar App",
"encryption": "Método de Cifrado",
"encryptionDescription": "Elige el método de cifrado para la comunicación con el cliente. Si se selecciona, el cliente usará este método para comunicarse con el servidor",
"nameDescription": "Nombre de la aplicación, se muestra en la lista de aplicaciones",
"platform": "Plataforma",
"selectApp": "Seleccionar Aplicación",
"selectAppDescription": "Selecciona la aplicación para configurar, todos los ajustes se aplicarán a la aplicación seleccionada",
"startupPicture": "Imagen de Inicio",
"startupPictureDescription": "Imagen de inicio, admite imágenes de red y locales. Para imágenes de red, ingrese la URL completa de la imagen",
"startupPicturePreview": "Vista Previa de la Imagen de Inicio",
"startupPictureSkip": "Tiempo de Salto de la Imagen de Inicio",
"startupPictureSkipDescription": "Tiempo de visualización de la imagen de inicio en segundos, ingrese 0 para no mostrar",
"subscriptionProtocol": "Protocolo de Suscripción",
"updateSuccess": "Actualizado exitosamente",
"version": "Versión"
},
"cancel": "Cancelar",
"config": {
"singleSubscriptionMode": "Modo de Suscripción Única",
"subscriptionDomain": "Dominio de Suscripción",
"subscriptionDomainDescription": "Usado para suscripción; deje en blanco para usar el dominio del sitio",
"subscriptionDomainPlaceholder": "Ingrese el dominio de suscripción, uno por línea",
"subscriptionPath": "Ruta de Suscripción",
"subscriptionPathDescription": "Usado para suscripción; asegúrese de reiniciar el sistema después de la modificación para un rendimiento óptimo",
"subscriptionPathPlaceholder": "Ingrese",
"updateSuccess": "Actualizado con éxito",
"wildcardResolution": "Resolución de Comodín",
"wildcardResolutionDescription": "Usado para suscripción"
},
"confirm": "Confirmar",
"confirmDelete": "¿Estás seguro de que deseas eliminar?",
"copy": "Copiar",
"copySuccess": "Copiado exitosamente",
"create": "Crear",
"createSubscribe": "Crear suscripción",
"createSuccess": "Creación exitosa",
"delete": "Eliminar",
"deleteSuccess": "Eliminación exitosa",
"deleteWarning": "Después de eliminar, los datos no se podrán recuperar. Proceda con precaución.",
"deviceLimit": "Número de dispositivos/unidad",
"edit": "editar",
"editSubscribe": "Editar suscripción",
"form": {
"Day": "Día",
"Hour": "Hora",
"Minute": "Minuto",
"Month": "Mes",
"NoLimit": "Sin Límite",
"Year": "Año",
"annualReset": "Reinicio Anual",
"basic": "Básico",
"cancel": "Cancelar",
"confirm": "Confirmar",
"deductionRatio": "Configuración de Deducción Automática/Manual",
"deductionRatioDescription": "Utilizado para deducciones. Por defecto, el sistema adopta un algoritmo de cálculo automático. Cuando se proporciona un ratio manual, el sistema calcula proporciones basadas en el tiempo y el ratio de tráfico, asegurando que el total sea igual al 100%.",
"description": "Descripción",
"deviceLimit": "Límite de dispositivos",
"discount": "Descuento",
"discountDescription": "Descuento basado en el precio unitario",
"discountMonths": "Meses",
"discountPercent": "Porcentaje de descuento",
"discount_price": "Precio con descuento",
"duration": "Duración (meses)",
"groupId": "Grupo de Suscripción",
"inventory": "Límite de Suscripción",
"monthlyReset": "Reinicio Mensual",
"name": "Nombre",
"noLimit": "Sin límite",
"noReset": "Sin Reinicio",
"pricing": "Precios",
"purchaseWithDiscount": "Permitir Deducción",
"purchaseWithDiscountDescription": "Habilitar o deshabilitar la funcionalidad de cancelación de suscripción. Después de la activación, el sistema realizará el procesamiento de deducción según las reglas y proporciones configuradas, y el valor restante se devolverá al saldo",
"quota": "Cantidad máxima de compra",
"renewalReset": "Reinicio por Renovación",
"renewalResetDescription": "Reiniciar ciclo al renovar",
"replacement": "Precio de reposición (cada vez)",
"resetCycle": "Ciclo de Reinicio",
"resetOn1st": "Reiniciar el día 1",
"selectResetCycle": "Por favor, seleccione un ciclo de reinicio",
"selectSubscribeGroup": "Por favor seleccione un grupo de suscripción",
"selectUnitTime": "Por favor seleccione la unidad de tiempo",
"server": "Servidor",
"serverGroup": "Grupo de servidores",
"servers": "Servidores",
"speedLimit": "Límite de velocidad ",
"traffic": "Tráfico",
"unitPrice": "Precio unitario",
"unitTime": "Unidad de tiempo"
},
"group": {
"actions": "Acciones",
"cancel": "Cancelar",
"confirm": "Confirmar",
"confirmDelete": "¿Confirmar eliminación?",
"create": "Crear",
"createSubscribeGroup": "Crear nuevo grupo de suscripción",
"createSuccess": "Creación exitosa",
"delete": "Eliminar",
"deleteSuccess": "Eliminación exitosa",
"deleteWarning": "Los datos no se pueden recuperar después de la eliminación, por favor opere con precaución.",
"description": "Descripción",
"edit": "Editar",
"editSubscribeGroup": "Editar grupo de suscripción",
"form": {
"cancel": "Cancelar",
"confirm": "Confirmar",
"description": "Descripción",
"name": "Nombre"
},
"name": "Nombre",
"title": "Lista de grupos de suscripción",
"updateSuccess": "Actualización exitosa",
"updatedAt": "Fecha de actualización"
},
"inventory": "Límite de Suscripción",
"name": "Nombre",
"quota": "Límite de compra/vez",
"replacement": "Restablecer precio/vez",
"sell": "venta",
"show": "Mostrar",
"sold": "Conteo de Suscripciones",
"subscribe": "Suscribirse",
"subscribeGroup": "Suscribirse al grupo",
"tabs": {
"subscribe": "Suscribirse",
"subscribeApp": "Configuración de la App",
"subscribeConfig": "Configuración de Suscripción",
"subscribeGroup": "Grupo de suscripción"
},
"traffic": "tráfico",
"unitPrice": "Precio Unitario",
"updateSuccess": "Actualización exitosa"
}

View File

@ -1,161 +1,89 @@
{
"actions": "acciones",
"app": {
"appDownloadURL": "URL de Descarga de la App",
"appIcon": "Ícono de la App",
"appList": "Lista de Aplicaciones",
"appName": "Nombre de la App",
"backupDomains": "Lista de Dominios de Respaldo",
"backupDomainsDescription": "Lista de dominios de respaldo para la resolución de dominios, un dominio por línea",
"batchDelete": "Eliminar en Lote",
"actions": {
"cancel": "Cancelar",
"communicationKey": "Clave de Comunicación",
"communicationKeyDescription": "Clave utilizada para la comunicación con el cliente",
"config": "Configuración",
"configApp": "Configuración de la Aplicación",
"confirm": "Confirmar",
"confirmDelete": "Confirmar Eliminación",
"create": "Crear",
"createApp": "Crear App",
"createSuccess": "Creado exitosamente",
"defaultVersion": "Versión Predeterminada",
"delete": "Eliminar",
"deleteWarning": "Esta acción no se puede deshacer",
"describeDescription": "Se utiliza para describir la aplicación, se muestra en la lista de aplicaciones",
"description": "Descripción",
"downloadLink": "Enlace de Descarga",
"edit": "Editar",
"editApp": "Editar App",
"encryption": "Método de Cifrado",
"encryptionDescription": "Elige el método de cifrado para la comunicación con el cliente. Si se selecciona, el cliente usará este método para comunicarse con el servidor",
"nameDescription": "Nombre de la aplicación, se muestra en la lista de aplicaciones",
"platform": "Plataforma",
"selectApp": "Seleccionar Aplicación",
"selectAppDescription": "Selecciona la aplicación para configurar, todos los ajustes se aplicarán a la aplicación seleccionada",
"startupPicture": "Imagen de Inicio",
"startupPictureDescription": "Imagen de inicio, admite imágenes de red y locales. Para imágenes de red, ingrese la URL completa de la imagen",
"startupPicturePreview": "Vista Previa de la Imagen de Inicio",
"startupPictureSkip": "Tiempo de Salto de la Imagen de Inicio",
"startupPictureSkipDescription": "Tiempo de visualización de la imagen de inicio en segundos, ingrese 0 para no mostrar",
"subscriptionProtocol": "Protocolo de Suscripción",
"updateSuccess": "Actualizado exitosamente",
"version": "Versión"
"save": "Guardar",
"saveTemplate": "Guardar Plantilla"
},
"cancel": "Cancelar",
"config": {
"description": "Gestionar la configuración del sistema de suscripciones",
"restrictUserAgent": "Restricción de User-Agent",
"restrictUserAgentDescription": "Habilitar restricciones de acceso basadas en User-Agent",
"singleSubscriptionMode": "Modo de Suscripción Única",
"singleSubscriptionModeDescription": "Cuando está habilitado, todas las suscripciones de usuarios se convertirán en saldo",
"singleSubscriptionModeDescription": "Limitar a los usuarios a una suscripción activa. Las suscripciones existentes no se ven afectadas",
"subscriptionDomain": "Dominio de Suscripción",
"subscriptionDomainDescription": "Usado para suscripción; deje en blanco para usar el dominio del sitio",
"subscriptionDomainPlaceholder": "Ingrese el dominio de suscripción, uno por línea",
"subscriptionDomainDescription": "Dominio personalizado para enlaces de suscripción",
"subscriptionDomainPlaceholder": "Ingresa el dominio de suscripción, uno por línea",
"subscriptionPath": "Ruta de Suscripción",
"subscriptionPathDescription": "Usado para suscripción; asegúrese de reiniciar el sistema después de la modificación para un rendimiento óptimo",
"subscriptionPathPlaceholder": "Ingrese",
"updateSuccess": "Actualizado con éxito",
"subscriptionPathDescription": "Ruta personalizada para los puntos finales de suscripción (mejor rendimiento después del reinicio del sistema)",
"subscriptionPathPlaceholder": "Ingresa la ruta de suscripción",
"title": "Configuración de Suscripción",
"updateError": "Error al actualizar",
"updateSuccess": "Configuraciones actualizadas con éxito",
"userAgentWhitelist": "Lista blanca de User-Agent",
"userAgentWhitelistDescription": "User-Agents permitidos para acceso a la suscripción, uno por línea. Las plantillas integradas se incluyen automáticamente en la lista blanca",
"userAgentWhitelistPlaceholder": "Ingresa los User-Agents permitidos, uno por línea",
"wildcardResolution": "Resolución de Comodín",
"wildcardResolutionDescription": "Usado para suscripción"
"wildcardResolutionDescription": "Habilitar la resolución de dominio comodín para suscripciones"
},
"confirm": "Confirmar",
"confirmDelete": "¿Estás seguro de que deseas eliminar?",
"copy": "Copiar",
"copySuccess": "Copiado exitosamente",
"create": "Crear",
"createSubscribe": "Crear suscripción",
"createSuccess": "Creación exitosa",
"delete": "Eliminar",
"deleteSuccess": "Eliminación exitosa",
"deleteWarning": "Después de eliminar, los datos no se podrán recuperar. Proceda con precaución.",
"deviceLimit": "Número de dispositivos/unidad",
"edit": "editar",
"editSubscribe": "Editar suscripción",
"form": {
"Day": "Día",
"Hour": "Hora",
"Minute": "Minuto",
"Month": "Mes",
"NoLimit": "Sin Límite",
"Year": "Año",
"annualReset": "Reinicio Anual",
"basic": "Básico",
"cancel": "Cancelar",
"confirm": "Confirmar",
"deductionRatio": "Configuración de Deducción Automática/Manual",
"deductionRatioDescription": "Utilizado para deducciones. Por defecto, el sistema adopta un algoritmo de cálculo automático. Cuando se proporciona un ratio manual, el sistema calcula proporciones basadas en el tiempo y el ratio de tráfico, asegurando que el total sea igual al 100%.",
"description": "Descripción",
"deviceLimit": "Límite de dispositivos",
"discount": "Descuento",
"discountDescription": "Descuento basado en el precio unitario",
"discountMonths": "Meses",
"discountPercent": "Porcentaje de descuento",
"discount_price": "Precio con descuento",
"duration": "Duración (meses)",
"groupId": "Grupo de Suscripción",
"inventory": "Límite de Suscripción",
"monthlyReset": "Reinicio Mensual",
"name": "Nombre",
"noLimit": "Sin límite",
"noReset": "Sin Reinicio",
"pricing": "Precios",
"purchaseWithDiscount": "Permitir Deducción",
"purchaseWithDiscountDescription": "Habilitar o deshabilitar la funcionalidad de cancelación de suscripción. Después de la activación, el sistema realizará el procesamiento de deducción según las reglas y proporciones configuradas, y el valor restante se devolverá al saldo",
"quota": "Cantidad máxima de compra",
"renewalReset": "Reinicio por Renovación",
"renewalResetDescription": "Reiniciar ciclo al renovar",
"replacement": "Precio de reposición (cada vez)",
"resetCycle": "Ciclo de Reinicio",
"resetOn1st": "Reiniciar el día 1",
"selectResetCycle": "Por favor, seleccione un ciclo de reinicio",
"selectSubscribeGroup": "Por favor seleccione un grupo de suscripción",
"selectUnitTime": "Por favor seleccione la unidad de tiempo",
"server": "Servidor",
"serverGroup": "Grupo de servidores",
"servers": "Servidores",
"speedLimit": "Límite de velocidad ",
"traffic": "Tráfico",
"unitPrice": "Precio unitario",
"unitTime": "Unidad de tiempo"
"description": "Configurar ajustes de suscripción y plantillas de cliente",
"messages": {
"noClients": "Sin Plantillas de Cliente",
"noClientsDescription": "Aún no hay plantillas de cliente configuradas. Agrega tu primera plantilla para comenzar."
},
"group": {
"actions": "Acciones",
"cancel": "Cancelar",
"confirm": "Confirmar",
"confirmDelete": "¿Confirmar eliminación?",
"create": "Crear",
"createSubscribeGroup": "Crear nuevo grupo de suscripción",
"createSuccess": "Creación exitosa",
"delete": "Eliminar",
"deleteSuccess": "Eliminación exitosa",
"deleteWarning": "Los datos no se pueden recuperar después de la eliminación, por favor opere con precaución.",
"description": "Descripción",
"edit": "Editar",
"editSubscribeGroup": "Editar grupo de suscripción",
"form": {
"cancel": "Cancelar",
"confirm": "Confirmar",
"description": "Descripción",
"name": "Nombre"
"protocol": {
"clients": {
"clash": {
"features": "Gran ecosistema, reglas completas, comunidad activa"
},
"egern": {
"features": "Cliente moderno para iOS, excelente rendimiento"
},
"hiddify": {
"features": "Multiplataforma, protocolos completos, amigable para principiantes"
},
"loon": {
"features": "Cliente avanzado para iOS, reglas ricas, interfaz hermosa"
},
"netch": {
"features": "Cliente proxy enfocado en juegos"
},
"quantumult": {
"features": "Cliente avanzado para iOS, reglas flexibles, scripts ricos"
},
"shadowrocket": {
"features": "Cliente clásico para iOS, configuración flexible"
},
"singbox": {
"features": "Último núcleo, GUI oficial, soporte multiplataforma"
},
"stash": {
"features": "Interfaz móvil moderna, protocolos completos"
},
"surfboard": {
"features": "Gratis, desarrollo activo, interfaz moderna"
},
"surge": {
"features": "Herramienta premium para iOS/Mac, características poderosas"
},
"v2box": {
"features": "Cliente V2Ray fácil de usar"
},
"v2rayn": {
"features": "Cliente popular para Windows, rico en características"
},
"v2rayng": {
"features": "Cliente popular para Android, ligero"
}
},
"name": "Nombre",
"title": "Lista de grupos de suscripción",
"updateSuccess": "Actualización exitosa",
"updatedAt": "Fecha de actualización"
"description": "Gestionar plantillas de configuración de suscripción para clientes proxy",
"features": "Características Clave",
"platforms": "Plataformas",
"subscribeTemplate": "Configuración de Plantilla de Suscripción",
"templateContent": "Contenido de la Plantilla",
"templatePlaceholder": "Ingresa la plantilla de configuración del cliente...",
"title": "Plantillas de Suscripción de Cliente"
},
"inventory": "Límite de Suscripción",
"name": "Nombre",
"quota": "Límite de compra/vez",
"replacement": "Restablecer precio/vez",
"sell": "venta",
"show": "Mostrar",
"sold": "Conteo de Suscripciones",
"subscribe": "Suscribirse",
"subscribeGroup": "Suscribirse al grupo",
"tabs": {
"subscribe": "Suscribirse",
"subscribeApp": "Configuración de la App",
"subscribeConfig": "Configuración de Suscripción",
"subscribeGroup": "Grupo de suscripción"
},
"traffic": "tráfico",
"unitPrice": "Precio Unitario",
"updateSuccess": "Actualización exitosa"
"title": "Gestión de Suscripciones"
}

View File

@ -1,32 +1,25 @@
{
"ADS Config": "تنظیمات ADS",
"Announcement Management": "مدیریت اطلاعیه‌ها",
"Apple": "شناسه اپل",
"Application Management": "مدیریت برنامه",
"Auth Control": "کنترل احراز هویت",
"Coupon Management": "مدیریت کوپن",
"Dashboard": "داشبورد",
"Device": "دستگاه",
"Document Management": "مدیریت اسناد",
"Email": "ایمیل",
"Facebook": "فیس‌بوک",
"Finance": "امور مالی",
"General": "عمومی",
"GitHub": "گیت‌هاب",
"Google": "گوگل",
"Order Management": "مدیریت سفارش",
"Payment Config": "پیکربندی پرداخت",
"Phone Number": "شماره تلفن",
"Product Management": "مدیریت محصول",
"Protocol Management": "مدیریت پروتکل",
"Rule Management": "مدیریت قوانین",
"Server": "سرور",
"Server Management": "مدیریت سرور",
"Settings": "تنظیمات",
"Subscribe Management": "مدیریت اشتراک",
"Subscribe Config": "تنظیمات اشتراک",
"System Config": "پیکربندی سیستم",
"System Management": "مدیریت سیستم",
"System Tool": "ابزار سیستم",
"Telegram": "تلگرام",
"Ticket Management": "مدیریت بلیط",
"Twitter": "توییتر",
"User": "کاربر",
"User Detail": "جزئیات کاربر",
"User Management": "مدیریت کاربران"

View File

@ -0,0 +1,160 @@
{
"actions": "اقدامات",
"app": {
"appDownloadURL": "آدرس دانلود اپلیکیشن",
"appIcon": "آیکون اپلیکیشن",
"appList": "لیست برنامه‌ها",
"appName": "نام اپلیکیشن",
"backupDomains": "لیست دامنه‌های پشتیبان",
"backupDomainsDescription": "لیست دامنه‌های پشتیبان برای حل دامنه، هر دامنه در یک خط",
"batchDelete": "حذف گروهی",
"cancel": "لغو",
"communicationKey": "کلید ارتباطی",
"communicationKeyDescription": "کلیدی که برای ارتباط با مشتری استفاده می‌شود",
"config": "پیکربندی",
"configApp": "پیکربندی برنامه",
"confirm": "تأیید",
"confirmDelete": "تأیید حذف",
"create": "ایجاد",
"createApp": "ایجاد اپلیکیشن",
"createSuccess": "با موفقیت ایجاد شد",
"defaultVersion": "پیش‌فرض",
"delete": "حذف",
"deleteWarning": "این عمل قابل بازگشت نیست",
"describeDescription": "برای توصیف برنامه استفاده می‌شود، در لیست برنامه‌ها نمایش داده می‌شود",
"description": "توضیحات",
"downloadLink": "لینک دانلود",
"edit": "ویرایش",
"editApp": "ویرایش اپلیکیشن",
"encryption": "روش رمزنگاری",
"encryptionDescription": "روش رمزنگاری برای ارتباط با مشتری را انتخاب کنید. در صورت انتخاب، مشتری از این روش برای ارتباط با سرور استفاده خواهد کرد",
"nameDescription": "نام برنامه، در لیست برنامه‌ها نمایش داده می‌شود",
"platform": "پلتفرم",
"selectApp": "انتخاب برنامه",
"selectAppDescription": "برنامه‌ای را برای پیکربندی انتخاب کنید، تمام تنظیمات به برنامه انتخاب شده اعمال خواهد شد",
"startupPicture": "تصویر شروع",
"startupPictureDescription": "تصویر شروع، از تصاویر شبکه و محلی پشتیبانی می‌کند. برای تصاویر شبکه، لطفاً آدرس کامل تصویر را وارد کنید",
"startupPicturePreview": "پیش‌نمایش تصویر شروع",
"startupPictureSkip": "زمان عبور از تصویر شروع",
"startupPictureSkipDescription": "زمان نمایش تصویر شروع به ثانیه، برای عدم نمایش 0 وارد کنید",
"subscriptionProtocol": "پروتکل اشتراک",
"updateSuccess": "با موفقیت به‌روزرسانی شد",
"version": "نسخه"
},
"cancel": "لغو",
"config": {
"singleSubscriptionMode": "حالت اشتراک تکی",
"subscriptionDomain": "دامنه اشتراک",
"subscriptionDomainDescription": "برای اشتراک استفاده می‌شود؛ برای استفاده از دامنه سایت، خالی بگذارید",
"subscriptionDomainPlaceholder": "دامنه اشتراک را وارد کنید، هر خط یک دامنه",
"subscriptionPath": "مسیر اشتراک",
"subscriptionPathDescription": "برای اشتراک استفاده می‌شود؛ حتماً پس از تغییر، سیستم را برای عملکرد بهینه راه‌اندازی مجدد کنید",
"subscriptionPathPlaceholder": "وارد کنید",
"updateSuccess": "به‌روزرسانی با موفقیت انجام شد",
"wildcardResolution": "حل و فصل کاراکترهای جایگزین",
"wildcardResolutionDescription": "برای اشتراک استفاده می‌شود"
},
"confirm": "تأیید",
"confirmDelete": "آیا مطمئن هستید که می‌خواهید حذف کنید؟",
"copy": "کپی",
"copySuccess": "با موفقیت کپی شد",
"create": "ایجاد",
"createSubscribe": "ایجاد اشتراک",
"createSuccess": "ایجاد با موفقیت انجام شد",
"delete": "حذف",
"deleteSuccess": "حذف با موفقیت انجام شد",
"deleteWarning": "پس از حذف، داده‌ها قابل بازیابی نیستند. لطفاً با احتیاط ادامه دهید.",
"deviceLimit": "محدودیت دستگاه/واحد",
"edit": "ویرایش",
"editSubscribe": "ویرایش اشتراک",
"form": {
"Day": "روز",
"Hour": "ساعت",
"Minute": "دقیقه",
"Month": "ماه",
"NoLimit": "بدون محدودیت",
"Year": "سال",
"annualReset": "بازنشانی سالانه",
"basic": "پایه",
"cancel": "لغو",
"confirm": "تأیید",
"deductionRatio": "پیکربندی کسر خودکار/دستی",
"deductionRatioDescription": "برای کسر استفاده می‌شود. به طور پیش‌فرض، سیستم از یک الگوریتم محاسبه خودکار استفاده می‌کند. هنگامی که نسبت دستی ارائه می‌شود، سیستم نسبت‌ها را بر اساس زمان و نسبت ترافیک محاسبه می‌کند و اطمینان حاصل می‌کند که مجموع به ۱۰۰٪ می‌رسد.",
"description": "توضیحات",
"deviceLimit": "محدودیت دستگاه",
"discount": "تخفیف",
"discountDescription": "تعیین تخفیف بر اساس قیمت واحد",
"discountMonths": "ماه‌ها",
"discountPercent": "درصد تخفیف",
"discount_price": "قیمت تخفیف",
"duration": "مدت زمان (ماه‌ها)",
"groupId": "گروه اشتراک",
"inventory": "محدودیت اشتراک",
"monthlyReset": "بازنشانی ماهانه",
"name": "نام",
"noLimit": "بدون محدودیت",
"noReset": "بدون بازنشانی",
"pricing": "قیمت‌گذاری",
"purchaseWithDiscount": "اجازه کسر",
"purchaseWithDiscountDescription": "فعال یا غیرفعال کردن قابلیت لغو اشتراک. پس از فعال‌سازی، سیستم بر اساس قوانین و نسبت‌های تنظیم‌شده، پردازش کسر را انجام می‌دهد و مقدار باقی‌مانده به موجودی بازگردانده می‌شود.",
"quota": "محدودیت خرید",
"renewalReset": "بازنشانی تمدید",
"renewalResetDescription": "بازنشانی چرخه در زمان تمدید",
"replacement": "تنظیم مجدد قیمت (هر بار)",
"resetCycle": "چرخه بازنشانی",
"resetOn1st": "بازنشانی در روز اول",
"selectResetCycle": "لطفاً یک چرخه بازنشانی انتخاب کنید",
"selectSubscribeGroup": "گروه اشتراک را انتخاب کنید",
"selectUnitTime": "لطفاً واحد زمان را انتخاب کنید",
"server": "سرور",
"serverGroup": "گروه سرور",
"servers": "سرورها",
"speedLimit": "محدودیت سرعت (مگابیت بر ثانیه)",
"traffic": "ترافیک",
"unitPrice": "قیمت واحد",
"unitTime": "واحد زمان"
},
"group": {
"actions": "اقدامات",
"cancel": "لغو",
"confirm": "تأیید",
"confirmDelete": "آیا مطمئن هستید که می‌خواهید حذف کنید؟",
"create": "ایجاد",
"createSubscribeGroup": "ایجاد گروه اشتراک",
"createSuccess": "ایجاد با موفقیت انجام شد",
"delete": "حذف",
"deleteSuccess": "حذف با موفقیت انجام شد",
"deleteWarning": "پس از حذف، داده‌ها قابل بازیابی نیستند. لطفاً با احتیاط ادامه دهید.",
"description": "توضیحات",
"edit": "ویرایش",
"editSubscribeGroup": "ویرایش گروه اشتراک",
"form": {
"cancel": "لغو",
"confirm": "تأیید",
"description": "توضیحات",
"name": "نام"
},
"name": "نام",
"title": "فهرست گروه‌های اشتراک",
"updateSuccess": "به‌روزرسانی با موفقیت انجام شد",
"updatedAt": "به‌روزرسانی در"
},
"inventory": "محدودیت اشتراک",
"name": "نام",
"quota": "محدودیت خرید/زمان",
"replacement": "تنظیم مجدد قیمت/زمان",
"sell": "فروش",
"show": "نمایش",
"sold": "تعداد اشتراک",
"subscribe": "اشتراک",
"subscribeGroup": "گروه اشتراک",
"tabs": {
"subscribe": "اشتراک",
"subscribeApp": "پیکربندی اپلیکیشن",
"subscribeConfig": "پیکربندی اشتراک",
"subscribeGroup": "گروه اشتراک"
},
"traffic": "ترافیک",
"unitPrice": "قیمت واحد",
"updateSuccess": "به‌روزرسانی با موفقیت انجام شد"
}

View File

@ -1,161 +1,89 @@
{
"actions": "اقدامات",
"app": {
"appDownloadURL": "آدرس دانلود اپلیکیشن",
"appIcon": "آیکون اپلیکیشن",
"appList": "لیست برنامه‌ها",
"appName": "نام اپلیکیشن",
"backupDomains": "لیست دامنه‌های پشتیبان",
"backupDomainsDescription": "لیست دامنه‌های پشتیبان برای حل دامنه، هر دامنه در یک خط",
"batchDelete": "حذف گروهی",
"actions": {
"cancel": "لغو",
"communicationKey": "کلید ارتباطی",
"communicationKeyDescription": "کلیدی که برای ارتباط با مشتری استفاده می‌شود",
"config": "پیکربندی",
"configApp": "پیکربندی برنامه",
"confirm": "تأیید",
"confirmDelete": "تأیید حذف",
"create": "ایجاد",
"createApp": "ایجاد اپلیکیشن",
"createSuccess": "با موفقیت ایجاد شد",
"defaultVersion": "پیش‌فرض",
"delete": "حذف",
"deleteWarning": "این عمل قابل بازگشت نیست",
"describeDescription": "برای توصیف برنامه استفاده می‌شود، در لیست برنامه‌ها نمایش داده می‌شود",
"description": "توضیحات",
"downloadLink": "لینک دانلود",
"edit": "ویرایش",
"editApp": "ویرایش اپلیکیشن",
"encryption": "روش رمزنگاری",
"encryptionDescription": "روش رمزنگاری برای ارتباط با مشتری را انتخاب کنید. در صورت انتخاب، مشتری از این روش برای ارتباط با سرور استفاده خواهد کرد",
"nameDescription": "نام برنامه، در لیست برنامه‌ها نمایش داده می‌شود",
"platform": "پلتفرم",
"selectApp": "انتخاب برنامه",
"selectAppDescription": "برنامه‌ای را برای پیکربندی انتخاب کنید، تمام تنظیمات به برنامه انتخاب شده اعمال خواهد شد",
"startupPicture": "تصویر شروع",
"startupPictureDescription": "تصویر شروع، از تصاویر شبکه و محلی پشتیبانی می‌کند. برای تصاویر شبکه، لطفاً آدرس کامل تصویر را وارد کنید",
"startupPicturePreview": "پیش‌نمایش تصویر شروع",
"startupPictureSkip": "زمان عبور از تصویر شروع",
"startupPictureSkipDescription": "زمان نمایش تصویر شروع به ثانیه، برای عدم نمایش 0 وارد کنید",
"subscriptionProtocol": "پروتکل اشتراک",
"updateSuccess": "با موفقیت به‌روزرسانی شد",
"version": "نسخه"
"save": "ذخیره",
"saveTemplate": "ذخیره الگو"
},
"cancel": "لغو",
"config": {
"singleSubscriptionMode": "حالت اشتراک تکی",
"singleSubscriptionModeDescription": "هنگامی که فعال شود، تمام اشتراک‌های کاربر به موجودی تبدیل می‌شوند",
"description": "مدیریت تنظیمات سیستم اشتراک",
"restrictUserAgent": "محدودیت User-Agent",
"restrictUserAgentDescription": "فعال‌سازی محدودیت‌های دسترسی بر اساس User-Agent",
"singleSubscriptionMode": "حالت اشتراک تک",
"singleSubscriptionModeDescription": "محدود کردن کاربران به یک اشتراک فعال. اشتراک‌های موجود تحت تأثیر قرار نمی‌گیرند",
"subscriptionDomain": "دامنه اشتراک",
"subscriptionDomainDescription": "برای اشتراک استفاده می‌شود؛ برای استفاده از دامنه سایت، خالی بگذارید",
"subscriptionDomainPlaceholder": "دامنه اشتراک را وارد کنید، هر خط یک دامنه",
"subscriptionDomainDescription": "دامنه سفارشی برای لینک‌های اشتراک",
"subscriptionDomainPlaceholder": "دامنه اشتراک را وارد کنید، هر کدام در یک خط",
"subscriptionPath": "مسیر اشتراک",
"subscriptionPathDescription": "برای اشتراک استفاده می‌شود؛ حتماً پس از تغییر، سیستم را برای عملکرد بهینه راه‌اندازی مجدد کنید",
"subscriptionPathPlaceholder": "وارد کنید",
"updateSuccess": "به‌روزرسانی با موفقیت انجام شد",
"wildcardResolution": "حل و فصل کاراکترهای جایگزین",
"wildcardResolutionDescription": "برای اشتراک استفاده می‌شود"
"subscriptionPathDescription": "مسیر سفارشی برای نقاط پایانی اشتراک (عملکرد بهتر پس از راه‌اندازی مجدد سیستم)",
"subscriptionPathPlaceholder": "مسیر اشتراک را وارد کنید",
"title": "پیکربندی اشتراک",
"updateError": "به‌روزرسانی ناموفق بود",
"updateSuccess": "تنظیمات با موفقیت به‌روزرسانی شد",
"userAgentWhitelist": "فهرست سفید User-Agent",
"userAgentWhitelistDescription": "User-Agent های مجاز برای دسترسی به اشتراک، هر کدام در یک خط. الگوهای داخلی به‌طور خودکار در فهرست سفید گنجانده می‌شوند",
"userAgentWhitelistPlaceholder": "User-Agent های مجاز را وارد کنید، هر کدام در یک خط",
"wildcardResolution": "حل دامنه‌های wildcard",
"wildcardResolutionDescription": "فعال‌سازی حل دامنه wildcard برای اشتراک‌ها"
},
"confirm": "تأیید",
"confirmDelete": "آیا مطمئن هستید که می‌خواهید حذف کنید؟",
"copy": "کپی",
"copySuccess": "با موفقیت کپی شد",
"create": "ایجاد",
"createSubscribe": "ایجاد اشتراک",
"createSuccess": "ایجاد با موفقیت انجام شد",
"delete": "حذف",
"deleteSuccess": "حذف با موفقیت انجام شد",
"deleteWarning": "پس از حذف، داده‌ها قابل بازیابی نیستند. لطفاً با احتیاط ادامه دهید.",
"deviceLimit": "محدودیت دستگاه/واحد",
"edit": "ویرایش",
"editSubscribe": "ویرایش اشتراک",
"form": {
"Day": "روز",
"Hour": "ساعت",
"Minute": "دقیقه",
"Month": "ماه",
"NoLimit": "بدون محدودیت",
"Year": "سال",
"annualReset": "بازنشانی سالانه",
"basic": "پایه",
"cancel": "لغو",
"confirm": "تأیید",
"deductionRatio": "پیکربندی کسر خودکار/دستی",
"deductionRatioDescription": "برای کسر استفاده می‌شود. به طور پیش‌فرض، سیستم از یک الگوریتم محاسبه خودکار استفاده می‌کند. هنگامی که نسبت دستی ارائه می‌شود، سیستم نسبت‌ها را بر اساس زمان و نسبت ترافیک محاسبه می‌کند و اطمینان حاصل می‌کند که مجموع به ۱۰۰٪ می‌رسد.",
"description": "توضیحات",
"deviceLimit": "محدودیت دستگاه",
"discount": "تخفیف",
"discountDescription": "تعیین تخفیف بر اساس قیمت واحد",
"discountMonths": "ماه‌ها",
"discountPercent": "درصد تخفیف",
"discount_price": "قیمت تخفیف",
"duration": "مدت زمان (ماه‌ها)",
"groupId": "گروه اشتراک",
"inventory": "محدودیت اشتراک",
"monthlyReset": "بازنشانی ماهانه",
"name": "نام",
"noLimit": "بدون محدودیت",
"noReset": "بدون بازنشانی",
"pricing": "قیمت‌گذاری",
"purchaseWithDiscount": "اجازه کسر",
"purchaseWithDiscountDescription": "فعال یا غیرفعال کردن قابلیت لغو اشتراک. پس از فعال‌سازی، سیستم بر اساس قوانین و نسبت‌های تنظیم‌شده، پردازش کسر را انجام می‌دهد و مقدار باقی‌مانده به موجودی بازگردانده می‌شود.",
"quota": "محدودیت خرید",
"renewalReset": "بازنشانی تمدید",
"renewalResetDescription": "بازنشانی چرخه در زمان تمدید",
"replacement": "تنظیم مجدد قیمت (هر بار)",
"resetCycle": "چرخه بازنشانی",
"resetOn1st": "بازنشانی در روز اول",
"selectResetCycle": "لطفاً یک چرخه بازنشانی انتخاب کنید",
"selectSubscribeGroup": "گروه اشتراک را انتخاب کنید",
"selectUnitTime": "لطفاً واحد زمان را انتخاب کنید",
"server": "سرور",
"serverGroup": "گروه سرور",
"servers": "سرورها",
"speedLimit": "محدودیت سرعت (مگابیت بر ثانیه)",
"traffic": "ترافیک",
"unitPrice": "قیمت واحد",
"unitTime": "واحد زمان"
"description": "تنظیمات اشتراک و الگوهای مشتری را پیکربندی کنید",
"messages": {
"noClients": "هیچ الگوی مشتری وجود ندارد",
"noClientsDescription": "هنوز هیچ الگوی مشتری پیکربندی نشده است. اولین الگوی خود را برای شروع اضافه کنید."
},
"group": {
"actions": "اقدامات",
"cancel": "لغو",
"confirm": "تأیید",
"confirmDelete": "آیا مطمئن هستید که می‌خواهید حذف کنید؟",
"create": "ایجاد",
"createSubscribeGroup": "ایجاد گروه اشتراک",
"createSuccess": "ایجاد با موفقیت انجام شد",
"delete": "حذف",
"deleteSuccess": "حذف با موفقیت انجام شد",
"deleteWarning": "پس از حذف، داده‌ها قابل بازیابی نیستند. لطفاً با احتیاط ادامه دهید.",
"description": "توضیحات",
"edit": "ویرایش",
"editSubscribeGroup": "ویرایش گروه اشتراک",
"form": {
"cancel": "لغو",
"confirm": "تأیید",
"description": "توضیحات",
"name": "نام"
"protocol": {
"clients": {
"clash": {
"features": "اکوسیستم بزرگ، قوانین جامع، جامعه فعال"
},
"egern": {
"features": "مشتری مدرن iOS، عملکرد عالی"
},
"hiddify": {
"features": "چندپلتفرمی، پروتکل‌های جامع، مناسب برای مبتدیان"
},
"loon": {
"features": "مشتری پیشرفته iOS، قوانین غنی، رابط زیبا"
},
"netch": {
"features": "مشتری پروکسی متمرکز بر بازی"
},
"quantumult": {
"features": "مشتری پیشرفته iOS، قوانین انعطاف‌پذیر، اسکریپت‌های غنی"
},
"shadowrocket": {
"features": "مشتری کلاسیک iOS، پیکربندی انعطاف‌پذیر"
},
"singbox": {
"features": "هسته جدید، رابط کاربری رسمی، پشتیبانی چندپلتفرمی"
},
"stash": {
"features": "رابط کاربری مدرن موبایل، پروتکل‌های جامع"
},
"surfboard": {
"features": "رایگان، توسعه فعال، رابط مدرن"
},
"surge": {
"features": "ابزار پریمیوم iOS/Mac، ویژگی‌های قدرتمند"
},
"v2box": {
"features": "مشتری کاربرپسند V2Ray"
},
"v2rayn": {
"features": "مشتری محبوب ویندوز، پر از ویژگی"
},
"v2rayng": {
"features": "مشتری محبوب اندروید، سبک"
}
},
"name": "نام",
"title": "فهرست گروه‌های اشتراک",
"updateSuccess": "به‌روزرسانی با موفقیت انجام شد",
"updatedAt": "به‌روزرسانی در"
"description": "مدیریت الگوهای پیکربندی اشتراک برای مشتریان پروکسی",
"features": "ویژگی‌های کلیدی",
"platforms": "پلتفرم‌ها",
"subscribeTemplate": "پیکربندی الگوی اشتراک",
"templateContent": "محتوای الگو",
"templatePlaceholder": "الگوی پیکربندی مشتری را وارد کنید...",
"title": "الگوهای اشتراک مشتری"
},
"inventory": "محدودیت اشتراک",
"name": "نام",
"quota": "محدودیت خرید/زمان",
"replacement": "تنظیم مجدد قیمت/زمان",
"sell": "فروش",
"show": "نمایش",
"sold": "تعداد اشتراک",
"subscribe": "اشتراک",
"subscribeGroup": "گروه اشتراک",
"tabs": {
"subscribe": "اشتراک",
"subscribeApp": "پیکربندی اپلیکیشن",
"subscribeConfig": "پیکربندی اشتراک",
"subscribeGroup": "گروه اشتراک"
},
"traffic": "ترافیک",
"unitPrice": "قیمت واحد",
"updateSuccess": "به‌روزرسانی با موفقیت انجام شد"
"title": "مدیریت اشتراک"
}

View File

@ -1,32 +1,25 @@
{
"ADS Config": "ADS-asetukset",
"Announcement Management": "Ilmoitusten hallinta",
"Apple": "Apple ID",
"Application Management": "Sovellushallinta",
"Auth Control": "Todennuksen hallinta",
"Coupon Management": "Kuponkien hallinta",
"Dashboard": "Kojelauta",
"Device": "Laite",
"Document Management": "Asiakirjojen hallinta",
"Email": "Sähköposti",
"Facebook": "Facebook",
"Finance": "Rahoitus",
"General": "Yleinen",
"GitHub": "GitHub",
"Google": "Google",
"Order Management": "Tilausten hallinta",
"Payment Config": "Maksukonfiguraatio",
"Phone Number": "Puhelinnumero",
"Product Management": "Tuotteen hallinta",
"Protocol Management": "Protokollan hallinta",
"Rule Management": "Sääntöhallinta",
"Server": "Palvelu",
"Server Management": "Palvelimen hallinta",
"Settings": "Asetukset",
"Subscribe Management": "Tilauksen hallinta",
"Subscribe Config": "Tilauksen asetukset",
"System Config": "Järjestelmän asetukset",
"System Management": "Järjestelmän hallinta",
"System Tool": "Järjestelmätyökalu",
"Telegram": "Telegram",
"Ticket Management": "Lipputoiminta",
"Twitter": "Twitter",
"User": "Käyttäjä",
"User Detail": "Käyttäjän tiedot",
"User Management": "Käyttäjien hallinta"

View File

@ -0,0 +1,160 @@
{
"actions": "toiminnot",
"app": {
"appDownloadURL": "Sovelluksen lataus-URL",
"appIcon": "Sovelluksen kuvake",
"appList": "Sovellusluettelo",
"appName": "Sovelluksen nimi",
"backupDomains": "Varmuuskopiodomainien luettelo",
"backupDomainsDescription": "Varmuuskopiodomainien luettelo domainin resoluutiota varten, yksi domain per rivi",
"batchDelete": "Poista erä",
"cancel": "Peruuta",
"communicationKey": "Viestintäavain",
"communicationKeyDescription": "Avain, jota käytetään asiakasviestintään",
"config": "Asetukset",
"configApp": "Sovelluksen asetukset",
"confirm": "Vahvista",
"confirmDelete": "Vahvista poisto",
"create": "Luo",
"createApp": "Luo sovellus",
"createSuccess": "Luotu onnistuneesti",
"defaultVersion": "Oletus",
"delete": "Poista",
"deleteWarning": "Tätä toimintoa ei voi peruuttaa",
"describeDescription": "Käytetään sovelluksen kuvaamiseen, näytetään sovellusluettelossa",
"description": "Kuvaus",
"downloadLink": "Latauslinkki",
"edit": "Muokkaa",
"editApp": "Muokkaa sovellusta",
"encryption": "Salausmenetelmä",
"encryptionDescription": "Valitse salausmenetelmä asiakasviestintään. Jos valittu, asiakas käyttää tätä menetelmää kommunikoidessaan palvelimen kanssa",
"nameDescription": "Sovelluksen nimi, näytetään sovellusluettelossa",
"platform": "Alusta",
"selectApp": "Valitse Sovellus",
"selectAppDescription": "Valitse sovellus, jota haluat konfiguroida. Kaikki asetukset koskevat valittua sovellusta",
"startupPicture": "Käynnistyskuva",
"startupPictureDescription": "Käynnistyskuva, tukee verkko- ja paikallisia kuvia. Verkkokuville, syötä täydellinen kuvan URL-osoite",
"startupPicturePreview": "Käynnistyskuvan esikatselu",
"startupPictureSkip": "Käynnistyskuvan ohitusaika",
"startupPictureSkipDescription": "Käynnistyskuvan näyttöaika sekunteina, syötä 0, jos ei näytetä",
"subscriptionProtocol": "Tilausprotokolla",
"updateSuccess": "Päivitetty onnistuneesti",
"version": "Versio"
},
"cancel": "Peruuta",
"config": {
"singleSubscriptionMode": "Yhden tilauksen tila",
"subscriptionDomain": "Tilausalue",
"subscriptionDomainDescription": "Käytetään tilaukseen; jätä tyhjäksi käyttääksesi sivuston verkkotunnusta",
"subscriptionDomainPlaceholder": "Syötä tilausalue, yksi per rivi",
"subscriptionPath": "Tilauspolku",
"subscriptionPathDescription": "Käytetään tilaukseen; varmista, että käynnistät järjestelmän uudelleen muutoksen jälkeen parhaan suorituskyvyn saavuttamiseksi",
"subscriptionPathPlaceholder": "Syötä",
"updateSuccess": "Päivitys onnistui",
"wildcardResolution": "Yleismerkkien ratkaisu",
"wildcardResolutionDescription": "Käytetään tilaukseen"
},
"confirm": "Vahvista",
"confirmDelete": "Haluatko varmasti poistaa?",
"copy": "Kopioi",
"copySuccess": "Kopioitu onnistuneesti",
"create": "Luo",
"createSubscribe": "Luo uusi tilaus",
"createSuccess": "Luonti onnistui",
"delete": "poista",
"deleteSuccess": "Poisto onnistui",
"deleteWarning": "Poiston jälkeen tietoja ei voi palauttaa, ole varovainen.",
"deviceLimit": "Laitemäärä/kpl",
"edit": "muokkaa",
"editSubscribe": "Muokkaa tilausta",
"form": {
"Day": "Päivä",
"Hour": "Tunti",
"Minute": "Minuutti",
"Month": "Kuukausi",
"NoLimit": "Ei rajoitusta",
"Year": "Vuosi",
"annualReset": "Vuosittainen Nollaus",
"basic": "Perus",
"cancel": "Peruuta",
"confirm": "Vahvista",
"deductionRatio": "Automaattinen/Manuaalinen Vähennyskonfiguraatio",
"deductionRatioDescription": "Käytetään vähennyksiin. Oletuksena järjestelmä käyttää automaattista laskenta-algoritmia. Kun manuaalinen suhde on annettu, järjestelmä laskee osuudet ajan ja liikenteen suhteen perusteella varmistaen, että kokonaismäärä on 100%.",
"description": "Kuvaus",
"deviceLimit": "Laiterajoitus",
"discount": "Alennus",
"discountDescription": "Aseta alennus yksikköhinnan perusteella",
"discountMonths": "Kuukautta",
"discountPercent": "Alennusprosentti",
"discount_price": "Alennettu hinta",
"duration": "Kesto (kuukautta)",
"groupId": "Tilausryhmä",
"inventory": "Tilausraja",
"monthlyReset": "Kuukausittainen Nollaus",
"name": "Nimi",
"noLimit": "Ei rajoitusta",
"noReset": "Ei Nollausta",
"pricing": "Hinnoittelu",
"purchaseWithDiscount": "Salli Vähennys",
"purchaseWithDiscountDescription": "Ota käyttöön tai poista käytöstä peruutustoiminto. Aktivoinnin jälkeen järjestelmä suorittaa vähennyskäsittelyn määritettyjen sääntöjen ja osuuksien mukaisesti, ja jäljelle jäävä arvo palautetaan saldolle.",
"quota": "Ostorajoitus",
"renewalReset": "Uusimisen Nollaus",
"renewalResetDescription": "Nollaa jakso uusimisen yhteydessä",
"replacement": "Uudelleenhinnan asetus (kerta)",
"resetCycle": "Nollausjakso",
"resetOn1st": "Nollaus 1. päivänä",
"selectResetCycle": "Valitse nollausjakso",
"selectSubscribeGroup": "Valitse tilausryhmä",
"selectUnitTime": "Valitse aikayksikkö",
"server": "Palvelin",
"serverGroup": "Palvelinryhmä",
"servers": "Palvelimet",
"speedLimit": "Nopeusrajoitus ",
"traffic": "Liikenne",
"unitPrice": "Yksikköhinta",
"unitTime": "Aikayksikkö"
},
"group": {
"actions": "Toiminnot",
"cancel": "Peruuta",
"confirm": "Vahvista",
"confirmDelete": "Haluatko varmasti poistaa?",
"create": "Luo",
"createSubscribeGroup": "Luo uusi tilausryhmä",
"createSuccess": "Luonti onnistui",
"delete": "Poista",
"deleteSuccess": "Poisto onnistui",
"deleteWarning": "Poiston jälkeen tietoja ei voi palauttaa, ole varovainen.",
"description": "Kuvaus",
"edit": "Muokkaa",
"editSubscribeGroup": "Muokkaa tilausryhmää",
"form": {
"cancel": "Peruuta",
"confirm": "Vahvista",
"description": "Kuvaus",
"name": "Nimi"
},
"name": "Nimi",
"title": "Tilausryhmien lista",
"updateSuccess": "Päivitys onnistui",
"updatedAt": "Päivitetty"
},
"inventory": "Tilausraja",
"name": "Nimi",
"quota": "Ostorajoitus/kerta",
"replacement": "Nollaa hinta/kerta",
"sell": "myydä",
"show": "Näytä",
"sold": "Tilausmäärä",
"subscribe": "Tilaa",
"subscribeGroup": "Tilaa ryhmä",
"tabs": {
"subscribe": "Tilaa",
"subscribeApp": "Sovelluksen asetukset",
"subscribeConfig": "Tilausasetukset",
"subscribeGroup": "Tilaa ryhmä"
},
"traffic": "liikenne",
"unitPrice": "Yksikköhinta",
"updateSuccess": "Päivitys onnistui"
}

View File

@ -1,161 +1,89 @@
{
"actions": "toiminnot",
"app": {
"appDownloadURL": "Sovelluksen lataus-URL",
"appIcon": "Sovelluksen kuvake",
"appList": "Sovellusluettelo",
"appName": "Sovelluksen nimi",
"backupDomains": "Varmuuskopiodomainien luettelo",
"backupDomainsDescription": "Varmuuskopiodomainien luettelo domainin resoluutiota varten, yksi domain per rivi",
"batchDelete": "Poista erä",
"actions": {
"cancel": "Peruuta",
"communicationKey": "Viestintäavain",
"communicationKeyDescription": "Avain, jota käytetään asiakasviestintään",
"config": "Asetukset",
"configApp": "Sovelluksen asetukset",
"confirm": "Vahvista",
"confirmDelete": "Vahvista poisto",
"create": "Luo",
"createApp": "Luo sovellus",
"createSuccess": "Luotu onnistuneesti",
"defaultVersion": "Oletus",
"delete": "Poista",
"deleteWarning": "Tätä toimintoa ei voi peruuttaa",
"describeDescription": "Käytetään sovelluksen kuvaamiseen, näytetään sovellusluettelossa",
"description": "Kuvaus",
"downloadLink": "Latauslinkki",
"edit": "Muokkaa",
"editApp": "Muokkaa sovellusta",
"encryption": "Salausmenetelmä",
"encryptionDescription": "Valitse salausmenetelmä asiakasviestintään. Jos valittu, asiakas käyttää tätä menetelmää kommunikoidessaan palvelimen kanssa",
"nameDescription": "Sovelluksen nimi, näytetään sovellusluettelossa",
"platform": "Alusta",
"selectApp": "Valitse Sovellus",
"selectAppDescription": "Valitse sovellus, jota haluat konfiguroida. Kaikki asetukset koskevat valittua sovellusta",
"startupPicture": "Käynnistyskuva",
"startupPictureDescription": "Käynnistyskuva, tukee verkko- ja paikallisia kuvia. Verkkokuville, syötä täydellinen kuvan URL-osoite",
"startupPicturePreview": "Käynnistyskuvan esikatselu",
"startupPictureSkip": "Käynnistyskuvan ohitusaika",
"startupPictureSkipDescription": "Käynnistyskuvan näyttöaika sekunteina, syötä 0, jos ei näytetä",
"subscriptionProtocol": "Tilausprotokolla",
"updateSuccess": "Päivitetty onnistuneesti",
"version": "Versio"
"save": "Tallenna",
"saveTemplate": "Tallenna Malli"
},
"cancel": "Peruuta",
"config": {
"singleSubscriptionMode": "Yhden tilauksen tila",
"singleSubscriptionModeDescription": "Kun tämä on käytössä, kaikki käyttäjätilaukset muunnetaan saldoksi",
"subscriptionDomain": "Tilausalue",
"subscriptionDomainDescription": "Käytetään tilaukseen; jätä tyhjäksi käyttääksesi sivuston verkkotunnusta",
"subscriptionDomainPlaceholder": "Syötä tilausalue, yksi per rivi",
"subscriptionPath": "Tilauspolku",
"subscriptionPathDescription": "Käytetään tilaukseen; varmista, että käynnistät järjestelmän uudelleen muutoksen jälkeen parhaan suorituskyvyn saavuttamiseksi",
"subscriptionPathPlaceholder": "Syötä",
"updateSuccess": "Päivitys onnistui",
"wildcardResolution": "Yleismerkkien ratkaisu",
"wildcardResolutionDescription": "Käytetään tilaukseen"
"description": "Hallitse tilausjärjestelmän asetuksia",
"restrictUserAgent": "Käyttäjä-agentin rajoitus",
"restrictUserAgentDescription": "Ota käyttöön pääsyn rajoitukset käyttäjä-agentin perusteella",
"singleSubscriptionMode": "Yksittäinen Tilausmode",
"singleSubscriptionModeDescription": "Muunna kaikki käyttäjien tilaukset tilitaseeksi",
"subscriptionDomain": "Tilauksen Verkkotunnus",
"subscriptionDomainDescription": "Mukautettu verkkotunnus tilauslinkeille",
"subscriptionDomainPlaceholder": "Syötä tilauksen verkkotunnus, yksi per rivi",
"subscriptionPath": "Tilauksen Polku",
"subscriptionPathDescription": "Mukautettu polku tilauspisteille (parempi suorituskyky järjestelmän uudelleenkäynnistyksen jälkeen)",
"subscriptionPathPlaceholder": "Syötä tilauksen polku",
"title": "Tilauksen Konfigurointi",
"updateError": "Päivitys epäonnistui",
"updateSuccess": "Asetukset päivitettiin onnistuneesti",
"userAgentWhitelist": "Käyttäjä-agentin valkoinen lista",
"userAgentWhitelistDescription": "Sallitut käyttäjä-agentit tilauspääsyyn, yksi per rivi. Oletusmallit sisältyvät automaattisesti valkoiseen listaan",
"userAgentWhitelistPlaceholder": "Syötä sallitut käyttäjä-agentit, yksi per rivi",
"wildcardResolution": "Wildcard Ratkaisu",
"wildcardResolutionDescription": "Ota käyttöön wildcard-verkkotunnuksen ratkaisu tilauksille"
},
"confirm": "Vahvista",
"confirmDelete": "Haluatko varmasti poistaa?",
"copy": "Kopioi",
"copySuccess": "Kopioitu onnistuneesti",
"create": "Luo",
"createSubscribe": "Luo uusi tilaus",
"createSuccess": "Luonti onnistui",
"delete": "poista",
"deleteSuccess": "Poisto onnistui",
"deleteWarning": "Poiston jälkeen tietoja ei voi palauttaa, ole varovainen.",
"deviceLimit": "Laitemäärä/kpl",
"edit": "muokkaa",
"editSubscribe": "Muokkaa tilausta",
"form": {
"Day": "Päivä",
"Hour": "Tunti",
"Minute": "Minuutti",
"Month": "Kuukausi",
"NoLimit": "Ei rajoitusta",
"Year": "Vuosi",
"annualReset": "Vuosittainen Nollaus",
"basic": "Perus",
"cancel": "Peruuta",
"confirm": "Vahvista",
"deductionRatio": "Automaattinen/Manuaalinen Vähennyskonfiguraatio",
"deductionRatioDescription": "Käytetään vähennyksiin. Oletuksena järjestelmä käyttää automaattista laskenta-algoritmia. Kun manuaalinen suhde on annettu, järjestelmä laskee osuudet ajan ja liikenteen suhteen perusteella varmistaen, että kokonaismäärä on 100%.",
"description": "Kuvaus",
"deviceLimit": "Laiterajoitus",
"discount": "Alennus",
"discountDescription": "Aseta alennus yksikköhinnan perusteella",
"discountMonths": "Kuukautta",
"discountPercent": "Alennusprosentti",
"discount_price": "Alennettu hinta",
"duration": "Kesto (kuukautta)",
"groupId": "Tilausryhmä",
"inventory": "Tilausraja",
"monthlyReset": "Kuukausittainen Nollaus",
"name": "Nimi",
"noLimit": "Ei rajoitusta",
"noReset": "Ei Nollausta",
"pricing": "Hinnoittelu",
"purchaseWithDiscount": "Salli Vähennys",
"purchaseWithDiscountDescription": "Ota käyttöön tai poista käytöstä peruutustoiminto. Aktivoinnin jälkeen järjestelmä suorittaa vähennyskäsittelyn määritettyjen sääntöjen ja osuuksien mukaisesti, ja jäljelle jäävä arvo palautetaan saldolle.",
"quota": "Ostorajoitus",
"renewalReset": "Uusimisen Nollaus",
"renewalResetDescription": "Nollaa jakso uusimisen yhteydessä",
"replacement": "Uudelleenhinnan asetus (kerta)",
"resetCycle": "Nollausjakso",
"resetOn1st": "Nollaus 1. päivänä",
"selectResetCycle": "Valitse nollausjakso",
"selectSubscribeGroup": "Valitse tilausryhmä",
"selectUnitTime": "Valitse aikayksikkö",
"server": "Palvelin",
"serverGroup": "Palvelinryhmä",
"servers": "Palvelimet",
"speedLimit": "Nopeusrajoitus ",
"traffic": "Liikenne",
"unitPrice": "Yksikköhinta",
"unitTime": "Aikayksikkö"
"description": "Määritä tilausasetukset ja asiakasmallit",
"messages": {
"noClients": "Ei Asiakasmalleja",
"noClientsDescription": "Asiakasmalleja ei ole vielä määritetty. Lisää ensimmäinen mallisi aloittaaksesi."
},
"group": {
"actions": "Toiminnot",
"cancel": "Peruuta",
"confirm": "Vahvista",
"confirmDelete": "Haluatko varmasti poistaa?",
"create": "Luo",
"createSubscribeGroup": "Luo uusi tilausryhmä",
"createSuccess": "Luonti onnistui",
"delete": "Poista",
"deleteSuccess": "Poisto onnistui",
"deleteWarning": "Poiston jälkeen tietoja ei voi palauttaa, ole varovainen.",
"description": "Kuvaus",
"edit": "Muokkaa",
"editSubscribeGroup": "Muokkaa tilausryhmää",
"form": {
"cancel": "Peruuta",
"confirm": "Vahvista",
"description": "Kuvaus",
"name": "Nimi"
"protocol": {
"clients": {
"clash": {
"features": "Laaja ekosysteemi, kattavat säännöt, aktiivinen yhteisö"
},
"egern": {
"features": "Moderni iOS asiakas, erinomainen suorituskyky"
},
"hiddify": {
"features": "Monialustainen, kattavat protokollat, aloittelijaystävällinen"
},
"loon": {
"features": "iOS edistynyt asiakas, runsaat säännöt, kaunis käyttöliittymä"
},
"netch": {
"features": "Pelaamiseen keskittyvä proxy-asiakas"
},
"quantumult": {
"features": "iOS edistynyt asiakas, joustavat säännöt, runsaat skriptit"
},
"shadowrocket": {
"features": "Klassinen iOS asiakas, joustava konfigurointi"
},
"singbox": {
"features": "Uusin ydin, virallinen GUI, monialustatuki"
},
"stash": {
"features": "Moderni mobiili UI, kattavat protokollat"
},
"surfboard": {
"features": "Ilmainen, aktiivinen kehitys, moderni käyttöliittymä"
},
"surge": {
"features": "Premium iOS/Mac työkalu, tehokkaat ominaisuudet"
},
"v2box": {
"features": "Käyttäjäystävällinen V2Ray asiakas"
},
"v2rayn": {
"features": "Suosittu Windows asiakas, ominaisuusrikas"
},
"v2rayng": {
"features": "Suosittu Android asiakas, kevyt"
}
},
"name": "Nimi",
"title": "Tilausryhmien lista",
"updateSuccess": "Päivitys onnistui",
"updatedAt": "Päivitetty"
"description": "Hallitse tilauskonfiguraatiomalleja proxy-asiakkaille",
"features": "Keskeiset Ominaisuudet",
"platforms": "Alustat",
"subscribeTemplate": "Tilauksen Mallin Konfigurointi",
"templateContent": "Malli Sisältö",
"templatePlaceholder": "Syötä asiakaskonfiguraatiomalli...",
"title": "Asiakkaan Tilausmallit"
},
"inventory": "Tilausraja",
"name": "Nimi",
"quota": "Ostorajoitus/kerta",
"replacement": "Nollaa hinta/kerta",
"sell": "myydä",
"show": "Näytä",
"sold": "Tilausmäärä",
"subscribe": "Tilaa",
"subscribeGroup": "Tilaa ryhmä",
"tabs": {
"subscribe": "Tilaa",
"subscribeApp": "Sovelluksen asetukset",
"subscribeConfig": "Tilausasetukset",
"subscribeGroup": "Tilaa ryhmä"
},
"traffic": "liikenne",
"unitPrice": "Yksikköhinta",
"updateSuccess": "Päivitys onnistui"
"title": "Tilauksen Hallinta"
}

View File

@ -1,32 +1,25 @@
{
"ADS Config": "Configuration ADS",
"Announcement Management": "Gestion des annonces",
"Apple": "Identifiant Apple",
"Application Management": "Gestion des applications",
"Auth Control": "Contrôle d'authentification",
"Coupon Management": "Gestion des coupons",
"Dashboard": "Tableau de bord",
"Device": "Appareil",
"Document Management": "Gestion des documents",
"Email": "E-mail",
"Facebook": "Facebook",
"Finance": "Finance",
"General": "Général",
"GitHub": "GitHub",
"Google": "Google",
"Order Management": "Gestion des commandes",
"Payment Config": "Configuration de paiement",
"Phone Number": "Numéro de téléphone",
"Product Management": "Gestion de produit",
"Protocol Management": "Gestion de protocole",
"Rule Management": "Gestion des règles",
"Server": "Serveur",
"Server Management": "Gestion des services",
"Settings": "Paramètres",
"Subscribe Management": "Gestion des abonnements",
"Subscribe Config": "Configuration d'abonnement",
"System Config": "Configuration du système",
"System Management": "Gestion du système",
"System Tool": "Outil Système",
"Telegram": "Telegram",
"Ticket Management": "Gestion des billets",
"Twitter": "Twitter",
"User": "Utilisateur",
"User Detail": "Détail de l'utilisateur",
"User Management": "Gestion des utilisateurs"

View File

@ -0,0 +1,160 @@
{
"actions": "actions",
"app": {
"appDownloadURL": "URL de téléchargement de l'application",
"appIcon": "Icône de l'application",
"appList": "Liste des applications",
"appName": "Nom de l'application",
"backupDomains": "Liste des domaines de sauvegarde",
"backupDomainsDescription": "Liste des domaines de sauvegarde pour la résolution de domaine, un domaine par ligne",
"batchDelete": "Suppression par lot",
"cancel": "Annuler",
"communicationKey": "Clé de communication",
"communicationKeyDescription": "Clé utilisée pour la communication client",
"config": "Configuration",
"configApp": "Configuration de l'application",
"confirm": "Confirmer",
"confirmDelete": "Confirmer la suppression",
"create": "Créer",
"createApp": "Créer une application",
"createSuccess": "Créé avec succès",
"defaultVersion": "Par défaut",
"delete": "Supprimer",
"deleteWarning": "Cette action est irréversible",
"describeDescription": "Utilisé pour décrire l'application, affiché dans la liste des applications",
"description": "Description",
"downloadLink": "Lien de téléchargement",
"edit": "Modifier",
"editApp": "Modifier l'application",
"encryption": "Méthode de chiffrement",
"encryptionDescription": "Choisissez la méthode de chiffrement pour la communication client. Si elle est sélectionnée, le client utilisera cette méthode pour communiquer avec le serveur",
"nameDescription": "Nom de l'application, affiché dans la liste des applications",
"platform": "Plateforme",
"selectApp": "Sélectionner l'application",
"selectAppDescription": "Sélectionnez l'application à configurer, tous les paramètres s'appliqueront à l'application sélectionnée",
"startupPicture": "Image de démarrage",
"startupPictureDescription": "Image de démarrage, prend en charge les images réseau et locales. Pour les images réseau, veuillez entrer l'URL complète de l'image",
"startupPicturePreview": "Aperçu de l'image de démarrage",
"startupPictureSkip": "Temps de saut de l'image de démarrage",
"startupPictureSkipDescription": "Temps d'affichage de l'image de démarrage en secondes, entrez 0 pour ne pas afficher",
"subscriptionProtocol": "Protocole d'abonnement",
"updateSuccess": "Mis à jour avec succès",
"version": "Version"
},
"cancel": "Annuler",
"config": {
"singleSubscriptionMode": "Mode d'abonnement unique",
"subscriptionDomain": "Domaine d'abonnement",
"subscriptionDomainDescription": "Utilisé pour l'abonnement ; laissez vide pour utiliser le domaine du site",
"subscriptionDomainPlaceholder": "Entrez le domaine d'abonnement, un par ligne",
"subscriptionPath": "Chemin d'abonnement",
"subscriptionPathDescription": "Utilisé pour l'abonnement ; assurez-vous de redémarrer le système après modification pour des performances optimales",
"subscriptionPathPlaceholder": "Entrez",
"updateSuccess": "Mise à jour réussie",
"wildcardResolution": "Résolution générique",
"wildcardResolutionDescription": "Utilisé pour l'abonnement"
},
"confirm": "Confirmer",
"confirmDelete": "Êtes-vous sûr de vouloir supprimer ?",
"copy": "Copier",
"copySuccess": "Copié avec succès",
"create": "Créer",
"createSubscribe": "Créer un abonnement",
"createSuccess": "Création réussie",
"delete": "Supprimer",
"deleteSuccess": "Suppression réussie",
"deleteWarning": "Une fois supprimées, les données ne peuvent pas être récupérées. Veuillez procéder avec prudence.",
"deviceLimit": "Nombre d'appareils",
"edit": "Éditer",
"editSubscribe": "Modifier l'abonnement",
"form": {
"Day": "Jour",
"Hour": "Heure",
"Minute": "Minute",
"Month": "Mois",
"NoLimit": "Pas de limite",
"Year": "Année",
"annualReset": "Réinitialisation Annuelle",
"basic": "Basique",
"cancel": "Annuler",
"confirm": "Confirmer",
"deductionRatio": "Configuration de Déduction Automatique/Manuelle",
"deductionRatioDescription": "Utilisé pour la déduction. Par défaut, le système adopte un algorithme de calcul automatique. Lorsqu'un ratio manuel est fourni, le système calcule les proportions en fonction du temps et du ratio de trafic, en veillant à ce que le total soit égal à 100%.",
"description": "Description",
"deviceLimit": "Limite d'appareils",
"discount": "Remise",
"discountDescription": "Remise basée sur le prix unitaire",
"discountMonths": "mois",
"discountPercent": "Pourcentage de remise",
"discount_price": "Prix remisé",
"duration": "Durée (mois)",
"groupId": "Groupe d'abonnement",
"inventory": "Limite d'abonnement",
"monthlyReset": "Réinitialisation Mensuelle",
"name": "Nom",
"noLimit": "Illimité",
"noReset": "Pas de Réinitialisation",
"pricing": "Tarification",
"purchaseWithDiscount": "Autoriser la Déduction",
"purchaseWithDiscountDescription": "Activer ou désactiver la fonctionnalité de désabonnement. Après activation, le système effectuera un traitement de déduction selon les règles et proportions configurées, et la valeur restante sera retournée au solde.",
"quota": "Quantité d'achat limitée",
"renewalReset": "Réinitialisation au Renouvellement",
"renewalResetDescription": "Réinitialiser le cycle lors du renouvellement",
"replacement": "Prix de réinitialisation (par fois)",
"resetCycle": "Cycle de Réinitialisation",
"resetOn1st": "Réinitialisation le 1er",
"selectResetCycle": "Veuillez sélectionner un cycle de réinitialisation",
"selectSubscribeGroup": "Veuillez sélectionner un groupe d'abonnement",
"selectUnitTime": "Veuillez sélectionner l'unité de temps",
"server": "Serveur",
"serverGroup": "Groupe de serveurs",
"servers": "Serveurs",
"speedLimit": "Limite de vitesse ",
"traffic": "Trafic",
"unitPrice": "Prix unitaire",
"unitTime": "Unité de temps"
},
"group": {
"actions": "Actions",
"cancel": "Annuler",
"confirm": "Confirmer",
"confirmDelete": "Êtes-vous sûr de vouloir supprimer ?",
"create": "Créer",
"createSubscribeGroup": "Créer un groupe d'abonnement",
"createSuccess": "Création réussie",
"delete": "Supprimer",
"deleteSuccess": "Suppression réussie",
"deleteWarning": "Les données ne peuvent pas être récupérées après suppression, veuillez procéder avec prudence.",
"description": "Description",
"edit": "Éditer",
"editSubscribeGroup": "Éditer le groupe d'abonnement",
"form": {
"cancel": "Annuler",
"confirm": "Confirmer",
"description": "Description",
"name": "Nom"
},
"name": "Nom",
"title": "Liste des groupes d'abonnement",
"updateSuccess": "Mise à jour réussie",
"updatedAt": "Date de mise à jour"
},
"inventory": "Limite d'abonnement",
"name": "Nom",
"quota": "Limite d'achat/par fois",
"replacement": "Réinitialiser le prix/par fois",
"sell": "Vente",
"show": "Afficher",
"sold": "Nombre d'abonnements",
"subscribe": "S'abonner",
"subscribeGroup": "S'abonner au groupe",
"tabs": {
"subscribe": "S'abonner",
"subscribeApp": "Configuration de l'application",
"subscribeConfig": "Configuration de l'abonnement",
"subscribeGroup": "Groupe d'abonnement"
},
"traffic": "trafic",
"unitPrice": "Prix unitaire",
"updateSuccess": "Mise à jour réussie"
}

View File

@ -1,161 +1,89 @@
{
"actions": "actions",
"app": {
"appDownloadURL": "URL de téléchargement de l'application",
"appIcon": "Icône de l'application",
"appList": "Liste des applications",
"appName": "Nom de l'application",
"backupDomains": "Liste des domaines de sauvegarde",
"backupDomainsDescription": "Liste des domaines de sauvegarde pour la résolution de domaine, un domaine par ligne",
"batchDelete": "Suppression par lot",
"actions": {
"cancel": "Annuler",
"communicationKey": "Clé de communication",
"communicationKeyDescription": "Clé utilisée pour la communication client",
"config": "Configuration",
"configApp": "Configuration de l'application",
"confirm": "Confirmer",
"confirmDelete": "Confirmer la suppression",
"create": "Créer",
"createApp": "Créer une application",
"createSuccess": "Créé avec succès",
"defaultVersion": "Par défaut",
"delete": "Supprimer",
"deleteWarning": "Cette action est irréversible",
"describeDescription": "Utilisé pour décrire l'application, affiché dans la liste des applications",
"description": "Description",
"downloadLink": "Lien de téléchargement",
"edit": "Modifier",
"editApp": "Modifier l'application",
"encryption": "Méthode de chiffrement",
"encryptionDescription": "Choisissez la méthode de chiffrement pour la communication client. Si elle est sélectionnée, le client utilisera cette méthode pour communiquer avec le serveur",
"nameDescription": "Nom de l'application, affiché dans la liste des applications",
"platform": "Plateforme",
"selectApp": "Sélectionner l'application",
"selectAppDescription": "Sélectionnez l'application à configurer, tous les paramètres s'appliqueront à l'application sélectionnée",
"startupPicture": "Image de démarrage",
"startupPictureDescription": "Image de démarrage, prend en charge les images réseau et locales. Pour les images réseau, veuillez entrer l'URL complète de l'image",
"startupPicturePreview": "Aperçu de l'image de démarrage",
"startupPictureSkip": "Temps de saut de l'image de démarrage",
"startupPictureSkipDescription": "Temps d'affichage de l'image de démarrage en secondes, entrez 0 pour ne pas afficher",
"subscriptionProtocol": "Protocole d'abonnement",
"updateSuccess": "Mis à jour avec succès",
"version": "Version"
"save": "Enregistrer",
"saveTemplate": "Enregistrer le modèle"
},
"cancel": "Annuler",
"config": {
"description": "Gérer les paramètres du système d'abonnement",
"restrictUserAgent": "Restriction de l'User-Agent",
"restrictUserAgentDescription": "Activer les restrictions d'accès basées sur l'User-Agent",
"singleSubscriptionMode": "Mode d'abonnement unique",
"singleSubscriptionModeDescription": "Lorsqu'il est activé, tous les abonnements des utilisateurs seront convertis en solde",
"singleSubscriptionModeDescription": "Limiter les utilisateurs à une seule souscription active. Les souscriptions existantes ne sont pas affectées",
"subscriptionDomain": "Domaine d'abonnement",
"subscriptionDomainDescription": "Utilisé pour l'abonnement ; laissez vide pour utiliser le domaine du site",
"subscriptionDomainDescription": "Domaine personnalisé pour les liens d'abonnement",
"subscriptionDomainPlaceholder": "Entrez le domaine d'abonnement, un par ligne",
"subscriptionPath": "Chemin d'abonnement",
"subscriptionPathDescription": "Utilisé pour l'abonnement ; assurez-vous de redémarrer le système après modification pour des performances optimales",
"subscriptionPathPlaceholder": "Entrez",
"updateSuccess": "Mise à jour réussie",
"wildcardResolution": "Résolution générique",
"wildcardResolutionDescription": "Utilisé pour l'abonnement"
"subscriptionPathDescription": "Chemin personnalisé pour les points de terminaison d'abonnement (meilleure performance après le redémarrage du système)",
"subscriptionPathPlaceholder": "Entrez le chemin d'abonnement",
"title": "Configuration de l'abonnement",
"updateError": "Échec de la mise à jour",
"updateSuccess": "Paramètres mis à jour avec succès",
"userAgentWhitelist": "Liste blanche des User-Agents",
"userAgentWhitelistDescription": "User-Agents autorisés pour l'accès à la souscription, un par ligne. Les modèles intégrés sont automatiquement inclus dans la liste blanche",
"userAgentWhitelistPlaceholder": "Entrez les User-Agents autorisés, un par ligne",
"wildcardResolution": "Résolution de wildcard",
"wildcardResolutionDescription": "Activer la résolution de domaine wildcard pour les abonnements"
},
"confirm": "Confirmer",
"confirmDelete": "Êtes-vous sûr de vouloir supprimer ?",
"copy": "Copier",
"copySuccess": "Copié avec succès",
"create": "Créer",
"createSubscribe": "Créer un abonnement",
"createSuccess": "Création réussie",
"delete": "Supprimer",
"deleteSuccess": "Suppression réussie",
"deleteWarning": "Une fois supprimées, les données ne peuvent pas être récupérées. Veuillez procéder avec prudence.",
"deviceLimit": "Nombre d'appareils",
"edit": "Éditer",
"editSubscribe": "Modifier l'abonnement",
"form": {
"Day": "Jour",
"Hour": "Heure",
"Minute": "Minute",
"Month": "Mois",
"NoLimit": "Pas de limite",
"Year": "Année",
"annualReset": "Réinitialisation Annuelle",
"basic": "Basique",
"cancel": "Annuler",
"confirm": "Confirmer",
"deductionRatio": "Configuration de Déduction Automatique/Manuelle",
"deductionRatioDescription": "Utilisé pour la déduction. Par défaut, le système adopte un algorithme de calcul automatique. Lorsqu'un ratio manuel est fourni, le système calcule les proportions en fonction du temps et du ratio de trafic, en veillant à ce que le total soit égal à 100%.",
"description": "Description",
"deviceLimit": "Limite d'appareils",
"discount": "Remise",
"discountDescription": "Remise basée sur le prix unitaire",
"discountMonths": "mois",
"discountPercent": "Pourcentage de remise",
"discount_price": "Prix remisé",
"duration": "Durée (mois)",
"groupId": "Groupe d'abonnement",
"inventory": "Limite d'abonnement",
"monthlyReset": "Réinitialisation Mensuelle",
"name": "Nom",
"noLimit": "Illimité",
"noReset": "Pas de Réinitialisation",
"pricing": "Tarification",
"purchaseWithDiscount": "Autoriser la Déduction",
"purchaseWithDiscountDescription": "Activer ou désactiver la fonctionnalité de désabonnement. Après activation, le système effectuera un traitement de déduction selon les règles et proportions configurées, et la valeur restante sera retournée au solde.",
"quota": "Quantité d'achat limitée",
"renewalReset": "Réinitialisation au Renouvellement",
"renewalResetDescription": "Réinitialiser le cycle lors du renouvellement",
"replacement": "Prix de réinitialisation (par fois)",
"resetCycle": "Cycle de Réinitialisation",
"resetOn1st": "Réinitialisation le 1er",
"selectResetCycle": "Veuillez sélectionner un cycle de réinitialisation",
"selectSubscribeGroup": "Veuillez sélectionner un groupe d'abonnement",
"selectUnitTime": "Veuillez sélectionner l'unité de temps",
"server": "Serveur",
"serverGroup": "Groupe de serveurs",
"servers": "Serveurs",
"speedLimit": "Limite de vitesse ",
"traffic": "Trafic",
"unitPrice": "Prix unitaire",
"unitTime": "Unité de temps"
"description": "Configurer les paramètres d'abonnement et les modèles de client",
"messages": {
"noClients": "Aucun modèle de client",
"noClientsDescription": "Aucun modèle de client configuré pour le moment. Ajoutez votre premier modèle pour commencer."
},
"group": {
"actions": "Actions",
"cancel": "Annuler",
"confirm": "Confirmer",
"confirmDelete": "Êtes-vous sûr de vouloir supprimer ?",
"create": "Créer",
"createSubscribeGroup": "Créer un groupe d'abonnement",
"createSuccess": "Création réussie",
"delete": "Supprimer",
"deleteSuccess": "Suppression réussie",
"deleteWarning": "Les données ne peuvent pas être récupérées après suppression, veuillez procéder avec prudence.",
"description": "Description",
"edit": "Éditer",
"editSubscribeGroup": "Éditer le groupe d'abonnement",
"form": {
"cancel": "Annuler",
"confirm": "Confirmer",
"description": "Description",
"name": "Nom"
"protocol": {
"clients": {
"clash": {
"features": "Écosystème vaste, règles complètes, communauté active"
},
"egern": {
"features": "Client iOS moderne, excellente performance"
},
"hiddify": {
"features": "Multi-plateforme, protocoles complets, convivial pour les débutants"
},
"loon": {
"features": "Client avancé iOS, règles riches, interface magnifique"
},
"netch": {
"features": "Client proxy axé sur le jeu"
},
"quantumult": {
"features": "Client avancé iOS, règles flexibles, scripts riches"
},
"shadowrocket": {
"features": "Client classique iOS, configuration flexible"
},
"singbox": {
"features": "Noyau le plus récent, interface graphique officielle, support multi-plateforme"
},
"stash": {
"features": "Interface mobile moderne, protocoles complets"
},
"surfboard": {
"features": "Gratuit, développement actif, interface moderne"
},
"surge": {
"features": "Outil premium iOS/Mac, fonctionnalités puissantes"
},
"v2box": {
"features": "Client V2Ray convivial"
},
"v2rayn": {
"features": "Client Windows populaire, riche en fonctionnalités"
},
"v2rayng": {
"features": "Client Android populaire, léger"
}
},
"name": "Nom",
"title": "Liste des groupes d'abonnement",
"updateSuccess": "Mise à jour réussie",
"updatedAt": "Date de mise à jour"
"description": "Gérer les modèles de configuration d'abonnement pour les clients proxy",
"features": "Fonctionnalités clés",
"platforms": "Plateformes",
"subscribeTemplate": "Configuration du modèle d'abonnement",
"templateContent": "Contenu du modèle",
"templatePlaceholder": "Entrez le modèle de configuration du client...",
"title": "Modèles d'abonnement des clients"
},
"inventory": "Limite d'abonnement",
"name": "Nom",
"quota": "Limite d'achat/par fois",
"replacement": "Réinitialiser le prix/par fois",
"sell": "Vente",
"show": "Afficher",
"sold": "Nombre d'abonnements",
"subscribe": "S'abonner",
"subscribeGroup": "S'abonner au groupe",
"tabs": {
"subscribe": "S'abonner",
"subscribeApp": "Configuration de l'application",
"subscribeConfig": "Configuration de l'abonnement",
"subscribeGroup": "Groupe d'abonnement"
},
"traffic": "trafic",
"unitPrice": "Prix unitaire",
"updateSuccess": "Mise à jour réussie"
"title": "Gestion des abonnements"
}

View File

@ -1,32 +1,25 @@
{
"ADS Config": "एडीएस कॉन्फ़िग",
"Announcement Management": "घोषणा प्रबंधन",
"Apple": "एप्पल आईडी",
"Application Management": "ऐप्लिकेशन प्रबंधन",
"Auth Control": "प्रमाणिकरण नियंत्रण",
"Coupon Management": "कूपन प्रबंधन",
"Dashboard": "डैशबोर्ड",
"Device": "डिवाइस",
"Document Management": "दस्तावेज़ प्रबंधन",
"Email": "ईमेल",
"Facebook": "फेसबुक",
"Finance": "वित्त",
"General": "सामान्य",
"GitHub": "GitHub",
"Google": "गूगल",
"Order Management": "ऑर्डर प्रबंधन",
"Payment Config": "भुगतान कॉन्फ़िगरेशन",
"Phone Number": "फ़ोन नंबर",
"Product Management": "उत्पाद प्रबंधन",
"Protocol Management": "प्रोटोकॉल प्रबंधन",
"Rule Management": "नियम प्रबंधन",
"Server": "सर्वर",
"Server Management": "सर्वर प्रबंधन",
"Settings": "सेटिंग्स",
"Subscribe Management": "सदस्यता प्रबंधन",
"Subscribe Config": "सदस्यता कॉन्फ़िगरेशन",
"System Config": "सिस्टम कॉन्फ़िगरेशन",
"System Management": "सिस्टम प्रबंधन",
"System Tool": "सिस्टम उपकरण",
"Telegram": "टेलीग्राम",
"Ticket Management": "टिकट प्रबंधन",
"Twitter": "ट्विटर",
"User": "उपयोगकर्ता",
"User Detail": "उपयोगकर्ता विवरण",
"User Management": "उपयोगकर्ता प्रबंधन"

View File

@ -0,0 +1,160 @@
{
"actions": "क्रियाएँ",
"app": {
"appDownloadURL": "ऐप डाउनलोड URL",
"appIcon": "ऐप आइकन",
"appList": "ऐप सूची",
"appName": "ऐप का नाम",
"backupDomains": "बैकअप डोमेन सूची",
"backupDomainsDescription": "डोमेन समाधान के लिए बैकअप डोमेन सूची, प्रत्येक पंक्ति में एक डोमेन",
"batchDelete": "बैच हटाएं",
"cancel": "रद्द करें",
"communicationKey": "संचार कुंजी",
"communicationKeyDescription": "क्लाइंट संचार के लिए उपयोग की जाने वाली कुंजी",
"config": "कॉन्फ़िग",
"configApp": "ऐप कॉन्फ़िगरेशन",
"confirm": "पुष्टि करें",
"confirmDelete": "हटाने की पुष्टि करें",
"create": "बनाएं",
"createApp": "ऐप बनाएं",
"createSuccess": "सफलतापूर्वक बनाया गया",
"defaultVersion": "डिफ़ॉल्ट",
"delete": "हटाएं",
"deleteWarning": "यह क्रिया पूर्ववत नहीं की जा सकती",
"describeDescription": "एप्लिकेशन का वर्णन करने के लिए उपयोग किया जाता है, ऐप सूची में प्रदर्शित",
"description": "विवरण",
"downloadLink": "डाउनलोड लिंक",
"edit": "संपादित करें",
"editApp": "ऐप संपादित करें",
"encryption": "एन्क्रिप्शन विधि",
"encryptionDescription": "क्लाइंट संचार के लिए एन्क्रिप्शन विधि चुनें। यदि चुना गया, तो क्लाइंट इस विधि का उपयोग सर्वर के साथ संचार करने के लिए करेगा",
"nameDescription": "एप्लिकेशन का नाम, ऐप सूची में प्रदर्शित",
"platform": "प्लेटफ़ॉर्म",
"selectApp": "ऐप चुनें",
"selectAppDescription": "कॉन्फ़िगर करने के लिए ऐप चुनें, सभी सेटिंग्स चयनित ऐप पर लागू होंगी",
"startupPicture": "स्टार्टअप चित्र",
"startupPictureDescription": "स्टार्टअप चित्र, नेटवर्क और स्थानीय छवियों का समर्थन करता है। नेटवर्क छवियों के लिए, कृपया पूरी छवि URL दर्ज करें",
"startupPicturePreview": "स्टार्टअप चित्र पूर्वावलोकन",
"startupPictureSkip": "स्टार्टअप चित्र छोड़ने का समय",
"startupPictureSkipDescription": "स्टार्टअप चित्र प्रदर्शन समय सेकंड में, प्रदर्शित न करने के लिए 0 दर्ज करें",
"subscriptionProtocol": "सदस्यता प्रोटोकॉल",
"updateSuccess": "सफलतापूर्वक अपडेट किया गया",
"version": "संस्करण"
},
"cancel": "रद्द करें",
"config": {
"singleSubscriptionMode": "एकल सदस्यता मोड",
"subscriptionDomain": "सदस्यता डोमेन",
"subscriptionDomainDescription": "सदस्यता के लिए उपयोग किया जाता है; साइट डोमेन का उपयोग करने के लिए खाली छोड़ दें",
"subscriptionDomainPlaceholder": "सदस्यता डोमेन दर्ज करें, एक प्रति पंक्ति",
"subscriptionPath": "सदस्यता पथ",
"subscriptionPathDescription": "सदस्यता के लिए उपयोग किया जाता है; इष्टतम प्रदर्शन के लिए संशोधन के बाद सिस्टम को पुनः आरंभ करना सुनिश्चित करें",
"subscriptionPathPlaceholder": "दर्ज करें",
"updateSuccess": "सफलता से अपडेट किया गया",
"wildcardResolution": "वाइल्डकार्ड समाधान",
"wildcardResolutionDescription": "सदस्यता के लिए उपयोग किया जाता है"
},
"confirm": "पुष्टि करें",
"confirmDelete": "क्या आप वाकई हटाना चाहते हैं?",
"copy": "कॉपी",
"copySuccess": "सफलतापूर्वक कॉपी किया गया",
"create": "सृजन",
"createSubscribe": "नई सदस्यता बनाएं",
"createSuccess": "सृजन सफल",
"delete": "हटाएं",
"deleteSuccess": "हटाने में सफलता",
"deleteWarning": "हटाने के बाद डेटा पुनः प्राप्त नहीं किया जा सकता है, कृपया सावधानीपूर्वक कार्य करें।",
"deviceLimit": "उपकरण संख्या/यूनिट",
"edit": "संपादित करें",
"editSubscribe": "संपादन सदस्यता",
"form": {
"Day": "दिन",
"Hour": "घंटा",
"Minute": "मिनट",
"Month": "महीना",
"NoLimit": "कोई सीमा नहीं",
"Year": "वर्ष",
"annualReset": "वार्षिक रीसेट",
"basic": "मूल",
"cancel": "रद्द करें",
"confirm": "पुष्टि करें",
"deductionRatio": "स्वचालित/मैनुअल कटौती कॉन्फ़िगरेशन",
"deductionRatioDescription": "कटौती के लिए उपयोग किया जाता है। डिफ़ॉल्ट रूप से, सिस्टम एक स्वचालित गणना एल्गोरिदम अपनाता है। जब एक मैनुअल अनुपात प्रदान किया जाता है, तो सिस्टम समय और ट्रैफ़िक अनुपात के आधार पर अनुपात की गणना करता है, यह सुनिश्चित करते हुए कि कुल 100% के बराबर हो।",
"description": "विवरण",
"deviceLimit": "उपकरण सीमा",
"discount": "छूट",
"discountDescription": "इकाई मूल्य के आधार पर छूट सेट करें",
"discountMonths": "महीने",
"discountPercent": "छूट प्रतिशत",
"discount_price": "छूट मूल्य",
"duration": "अवधि (महीने)",
"groupId": "सदस्यता समूह",
"inventory": "सदस्यता सीमा",
"monthlyReset": "मासिक रीसेट",
"name": "नाम",
"noLimit": "कोई सीमा नहीं",
"noReset": "कोई रीसेट नहीं",
"pricing": "मूल्य निर्धारण",
"purchaseWithDiscount": "कटौती की अनुमति दें",
"purchaseWithDiscountDescription": "अनसब्सक्राइब कार्यक्षमता को सक्षम या अक्षम करें। सक्रियण के बाद, सिस्टम कॉन्फ़िगर किए गए नियमों और अनुपातों के अनुसार कटौती प्रसंस्करण करेगा, और शेष मूल्य को बैलेंस में वापस कर दिया जाएगा।",
"quota": "खरीद सीमा",
"renewalReset": "नवीनीकरण रीसेट",
"renewalResetDescription": "नवीनीकरण पर रीसेट चक्र",
"replacement": "पुनःस्थापना मूल्य (प्रति बार)",
"resetCycle": "रीसेट चक्र",
"resetOn1st": "1 तारीख को रीसेट",
"selectResetCycle": "कृपया एक रीसेट चक्र चुनें",
"selectSubscribeGroup": "कृपया सदस्यता समूह चुनें",
"selectUnitTime": "कृपया इकाई समय चुनें",
"server": "सर्वर",
"serverGroup": "सर्वर समूह",
"servers": "सर्वर",
"speedLimit": "गति सीमा ",
"traffic": "ट्रैफिक",
"unitPrice": "इकाई मूल्य",
"unitTime": "इकाई समय"
},
"group": {
"actions": "क्रियाएँ",
"cancel": "रद्द करें",
"confirm": "पुष्टि करें",
"confirmDelete": "क्या आप वाकई हटाना चाहते हैं?",
"create": "बनाएँ",
"createSubscribeGroup": "नई सदस्यता समूह बनाएं",
"createSuccess": "सफलतापूर्वक बनाया गया",
"delete": "हटाएँ",
"deleteSuccess": "सफलतापूर्वक हटाया गया",
"deleteWarning": "हटाने के बाद डेटा पुनः प्राप्त नहीं किया जा सकता, कृपया सावधानीपूर्वक कार्य करें।",
"description": "विवरण",
"edit": "संपादित करें",
"editSubscribeGroup": "सदस्यता समूह संपादित करें",
"form": {
"cancel": "रद्द करें",
"confirm": "पुष्टि करें",
"description": "विवरण",
"name": "नाम"
},
"name": "नाम",
"title": "सदस्यता समूह सूची",
"updateSuccess": "सफलतापूर्वक अपडेट किया गया",
"updatedAt": "अपडेट का समय"
},
"inventory": "सदस्यता सीमा",
"name": "नाम",
"quota": "प्रति खरीद सीमा",
"replacement": "मूल्य/प्रति बार रीसेट करें",
"sell": "बिक्री",
"show": "दिखाएं",
"sold": "सदस्यता गणना",
"subscribe": "सदस्यता लें",
"subscribeGroup": "सदस्यता समूह",
"tabs": {
"subscribe": "सदस्यता लें",
"subscribeApp": "ऐप कॉन्फ़िगरेशन",
"subscribeConfig": "सदस्यता कॉन्फ़िगरेशन",
"subscribeGroup": "समूह सदस्यता"
},
"traffic": "ट्रैफिक",
"unitPrice": "इकाई मूल्य",
"updateSuccess": "अपडेट सफल"
}

View File

@ -1,161 +1,89 @@
{
"actions": "क्रियाएँ",
"app": {
"appDownloadURL": "ऐप डाउनलोड URL",
"appIcon": "ऐप आइकन",
"appList": "ऐप सूची",
"appName": "ऐप का नाम",
"backupDomains": "बैकअप डोमेन सूची",
"backupDomainsDescription": "डोमेन समाधान के लिए बैकअप डोमेन सूची, प्रत्येक पंक्ति में एक डोमेन",
"batchDelete": "बैच हटाएं",
"actions": {
"cancel": "रद्द करें",
"communicationKey": "संचार कुंजी",
"communicationKeyDescription": "क्लाइंट संचार के लिए उपयोग की जाने वाली कुंजी",
"config": "कॉन्फ़िग",
"configApp": "ऐप कॉन्फ़िगरेशन",
"confirm": "पुष्टि करें",
"confirmDelete": "हटाने की पुष्टि करें",
"create": "बनाएं",
"createApp": "ऐप बनाएं",
"createSuccess": "सफलतापूर्वक बनाया गया",
"defaultVersion": "डिफ़ॉल्ट",
"delete": "हटाएं",
"deleteWarning": "यह क्रिया पूर्ववत नहीं की जा सकती",
"describeDescription": "एप्लिकेशन का वर्णन करने के लिए उपयोग किया जाता है, ऐप सूची में प्रदर्शित",
"description": "विवरण",
"downloadLink": "डाउनलोड लिंक",
"edit": "संपादित करें",
"editApp": "ऐप संपादित करें",
"encryption": "एन्क्रिप्शन विधि",
"encryptionDescription": "क्लाइंट संचार के लिए एन्क्रिप्शन विधि चुनें। यदि चुना गया, तो क्लाइंट इस विधि का उपयोग सर्वर के साथ संचार करने के लिए करेगा",
"nameDescription": "एप्लिकेशन का नाम, ऐप सूची में प्रदर्शित",
"platform": "प्लेटफ़ॉर्म",
"selectApp": "ऐप चुनें",
"selectAppDescription": "कॉन्फ़िगर करने के लिए ऐप चुनें, सभी सेटिंग्स चयनित ऐप पर लागू होंगी",
"startupPicture": "स्टार्टअप चित्र",
"startupPictureDescription": "स्टार्टअप चित्र, नेटवर्क और स्थानीय छवियों का समर्थन करता है। नेटवर्क छवियों के लिए, कृपया पूरी छवि URL दर्ज करें",
"startupPicturePreview": "स्टार्टअप चित्र पूर्वावलोकन",
"startupPictureSkip": "स्टार्टअप चित्र छोड़ने का समय",
"startupPictureSkipDescription": "स्टार्टअप चित्र प्रदर्शन समय सेकंड में, प्रदर्शित न करने के लिए 0 दर्ज करें",
"subscriptionProtocol": "सदस्यता प्रोटोकॉल",
"updateSuccess": "सफलतापूर्वक अपडेट किया गया",
"version": "संस्करण"
"save": "सहेजें",
"saveTemplate": "टेम्पलेट सहेजें"
},
"cancel": "रद्द करें",
"config": {
"description": "सदस्यता प्रणाली सेटिंग्स प्रबंधित करें",
"restrictUserAgent": "यूजर-एजेंट प्रतिबंध",
"restrictUserAgentDescription": "यूजर-एजेंट के आधार पर पहुंच प्रतिबंध सक्षम करें",
"singleSubscriptionMode": "एकल सदस्यता मोड",
"singleSubscriptionModeDescription": "सक्रिय होने पर, सभी उपयोगकर्ता सदस्यताएँ शेष में परिवर्तित हो जाएँगी",
"singleSubscriptionModeDescription": "उपयोगकर्ताओं को एक सक्रिय सदस्यता तक सीमित करें। मौजूदा सदस्यताओं पर कोई प्रभाव नहीं",
"subscriptionDomain": "सदस्यता डोमेन",
"subscriptionDomainDescription": "सदस्यता के लिए उपयोग किया जाता है; साइट डोमेन का उपयोग करने के लिए खाली छोड़ दें",
"subscriptionDomainDescription": "सदस्यता लिंक के लिए कस्टम डोमेन",
"subscriptionDomainPlaceholder": "सदस्यता डोमेन दर्ज करें, एक प्रति पंक्ति",
"subscriptionPath": "सदस्यता पथ",
"subscriptionPathDescription": "सदस्यता के लिए उपयोग किया जाता है; इष्टतम प्रदर्शन के लिए संशोधन के बाद सिस्टम को पुनः आरंभ करना सुनिश्चित करें",
"subscriptionPathPlaceholder": "दर्ज करें",
"updateSuccess": "सफलता से अपडेट किया गया",
"subscriptionPathDescription": "सदस्यता अंत बिंदुओं के लिए कस्टम पथ (सिस्टम पुनरारंभ के बाद बेहतर प्रदर्शन)",
"subscriptionPathPlaceholder": "सदस्यता पथ दर्ज करें",
"title": "सदस्यता कॉन्फ़िगरेशन",
"updateError": "अपडेट विफल",
"updateSuccess": "सेटिंग्स सफलतापूर्वक अपडेट की गईं",
"userAgentWhitelist": "यूजर-एजेंट श्वेतसूची",
"userAgentWhitelistDescription": "सदस्यता पहुंच के लिए अनुमत यूजर-एजेंट, प्रत्येक पंक्ति में एक। अंतर्निहित टेम्पलेट स्वचालित रूप से श्वेतसूची में शामिल होते हैं",
"userAgentWhitelistPlaceholder": "अनुमत यूजर-एजेंट दर्ज करें, प्रत्येक पंक्ति में एक",
"wildcardResolution": "वाइल्डकार्ड समाधान",
"wildcardResolutionDescription": "सदस्यता के लिए उपयोग किया जाता है"
"wildcardResolutionDescription": "सदस्यताओं के लिए वाइल्डकार्ड डोमेन समाधान सक्षम करें"
},
"confirm": "पुष्टि करें",
"confirmDelete": "क्या आप वाकई हटाना चाहते हैं?",
"copy": "कॉपी",
"copySuccess": "सफलतापूर्वक कॉपी किया गया",
"create": "सृजन",
"createSubscribe": "नई सदस्यता बनाएं",
"createSuccess": "सृजन सफल",
"delete": "हटाएं",
"deleteSuccess": "हटाने में सफलता",
"deleteWarning": "हटाने के बाद डेटा पुनः प्राप्त नहीं किया जा सकता है, कृपया सावधानीपूर्वक कार्य करें।",
"deviceLimit": "उपकरण संख्या/यूनिट",
"edit": "संपादित करें",
"editSubscribe": "संपादन सदस्यता",
"form": {
"Day": "दिन",
"Hour": "घंटा",
"Minute": "मिनट",
"Month": "महीना",
"NoLimit": "कोई सीमा नहीं",
"Year": "वर्ष",
"annualReset": "वार्षिक रीसेट",
"basic": "मूल",
"cancel": "रद्द करें",
"confirm": "पुष्टि करें",
"deductionRatio": "स्वचालित/मैनुअल कटौती कॉन्फ़िगरेशन",
"deductionRatioDescription": "कटौती के लिए उपयोग किया जाता है। डिफ़ॉल्ट रूप से, सिस्टम एक स्वचालित गणना एल्गोरिदम अपनाता है। जब एक मैनुअल अनुपात प्रदान किया जाता है, तो सिस्टम समय और ट्रैफ़िक अनुपात के आधार पर अनुपात की गणना करता है, यह सुनिश्चित करते हुए कि कुल 100% के बराबर हो।",
"description": "विवरण",
"deviceLimit": "उपकरण सीमा",
"discount": "छूट",
"discountDescription": "इकाई मूल्य के आधार पर छूट सेट करें",
"discountMonths": "महीने",
"discountPercent": "छूट प्रतिशत",
"discount_price": "छूट मूल्य",
"duration": "अवधि (महीने)",
"groupId": "सदस्यता समूह",
"inventory": "सदस्यता सीमा",
"monthlyReset": "मासिक रीसेट",
"name": "नाम",
"noLimit": "कोई सीमा नहीं",
"noReset": "कोई रीसेट नहीं",
"pricing": "मूल्य निर्धारण",
"purchaseWithDiscount": "कटौती की अनुमति दें",
"purchaseWithDiscountDescription": "अनसब्सक्राइब कार्यक्षमता को सक्षम या अक्षम करें। सक्रियण के बाद, सिस्टम कॉन्फ़िगर किए गए नियमों और अनुपातों के अनुसार कटौती प्रसंस्करण करेगा, और शेष मूल्य को बैलेंस में वापस कर दिया जाएगा।",
"quota": "खरीद सीमा",
"renewalReset": "नवीनीकरण रीसेट",
"renewalResetDescription": "नवीनीकरण पर रीसेट चक्र",
"replacement": "पुनःस्थापना मूल्य (प्रति बार)",
"resetCycle": "रीसेट चक्र",
"resetOn1st": "1 तारीख को रीसेट",
"selectResetCycle": "कृपया एक रीसेट चक्र चुनें",
"selectSubscribeGroup": "कृपया सदस्यता समूह चुनें",
"selectUnitTime": "कृपया इकाई समय चुनें",
"server": "सर्वर",
"serverGroup": "सर्वर समूह",
"servers": "सर्वर",
"speedLimit": "गति सीमा ",
"traffic": "ट्रैफिक",
"unitPrice": "इकाई मूल्य",
"unitTime": "इकाई समय"
"description": "सदस्यता सेटिंग्स और क्लाइंट टेम्पलेट्स कॉन्फ़िगर करें",
"messages": {
"noClients": "कोई क्लाइंट टेम्पलेट नहीं",
"noClientsDescription": "अभी तक कोई क्लाइंट टेम्पलेट कॉन्फ़िगर नहीं किया गया है। शुरू करने के लिए अपना पहला टेम्पलेट जोड़ें।"
},
"group": {
"actions": "क्रियाएँ",
"cancel": "रद्द करें",
"confirm": "पुष्टि करें",
"confirmDelete": "क्या आप वाकई हटाना चाहते हैं?",
"create": "बनाएँ",
"createSubscribeGroup": "नई सदस्यता समूह बनाएं",
"createSuccess": "सफलतापूर्वक बनाया गया",
"delete": "हटाएँ",
"deleteSuccess": "सफलतापूर्वक हटाया गया",
"deleteWarning": "हटाने के बाद डेटा पुनः प्राप्त नहीं किया जा सकता, कृपया सावधानीपूर्वक कार्य करें।",
"description": "विवरण",
"edit": "संपादित करें",
"editSubscribeGroup": "सदस्यता समूह संपादित करें",
"form": {
"cancel": "रद्द करें",
"confirm": "पुष्टि करें",
"description": "विवरण",
"name": "नाम"
"protocol": {
"clients": {
"clash": {
"features": "बड़ा पारिस्थितिकी तंत्र, व्यापक नियम, सक्रिय समुदाय"
},
"egern": {
"features": "आधुनिक iOS क्लाइंट, उत्कृष्ट प्रदर्शन"
},
"hiddify": {
"features": "बहु-प्लेटफ़ॉर्म, व्यापक प्रोटोकॉल, शुरुआती के लिए अनुकूल"
},
"loon": {
"features": "iOS उन्नत क्लाइंट, समृद्ध नियम, सुंदर इंटरफ़ेस"
},
"netch": {
"features": "गेमिंग-केंद्रित प्रॉक्सी क्लाइंट"
},
"quantumult": {
"features": "iOS उन्नत क्लाइंट, लचीले नियम, समृद्ध स्क्रिप्ट"
},
"shadowrocket": {
"features": "क्लासिक iOS क्लाइंट, लचीली कॉन्फ़िगरेशन"
},
"singbox": {
"features": "नवीनतम कर्नेल, आधिकारिक GUI, बहु-प्लेटफ़ॉर्म समर्थन"
},
"stash": {
"features": "आधुनिक मोबाइल UI, व्यापक प्रोटोकॉल"
},
"surfboard": {
"features": "मुफ्त, सक्रिय विकास, आधुनिक इंटरफ़ेस"
},
"surge": {
"features": "प्रीमियम iOS/Mac उपकरण, शक्तिशाली विशेषताएँ"
},
"v2box": {
"features": "उपयोगकर्ता-अनुकूल V2Ray क्लाइंट"
},
"v2rayn": {
"features": "लोकप्रिय Windows क्लाइंट, विशेषताओं से भरपूर"
},
"v2rayng": {
"features": "लोकप्रिय Android क्लाइंट, हल्का"
}
},
"name": "नाम",
"title": "सदस्यता समूह सूची",
"updateSuccess": "सफलतापूर्वक अपडेट किया गया",
"updatedAt": "अपडेट का समय"
"description": "प्रॉक्सी क्लाइंट्स के लिए सदस्यता कॉन्फ़िगरेशन टेम्पलेट्स प्रबंधित करें",
"features": "मुख्य विशेषताएँ",
"platforms": "प्लेटफ़ॉर्म",
"subscribeTemplate": "सदस्यता टेम्पलेट कॉन्फ़िगरेशन",
"templateContent": "टेम्पलेट सामग्री",
"templatePlaceholder": "क्लाइंट कॉन्फ़िगरेशन टेम्पलेट दर्ज करें...",
"title": "क्लाइंट सदस्यता टेम्पलेट्स"
},
"inventory": "सदस्यता सीमा",
"name": "नाम",
"quota": "प्रति खरीद सीमा",
"replacement": "मूल्य/प्रति बार रीसेट करें",
"sell": "बिक्री",
"show": "दिखाएं",
"sold": "सदस्यता गणना",
"subscribe": "सदस्यता लें",
"subscribeGroup": "सदस्यता समूह",
"tabs": {
"subscribe": "सदस्यता लें",
"subscribeApp": "ऐप कॉन्फ़िगरेशन",
"subscribeConfig": "सदस्यता कॉन्फ़िगरेशन",
"subscribeGroup": "समूह सदस्यता"
},
"traffic": "ट्रैफिक",
"unitPrice": "इकाई मूल्य",
"updateSuccess": "अपडेट सफल"
"title": "सदस्यता प्रबंधन"
}

View File

@ -1,32 +1,25 @@
{
"ADS Config": "ADS konfiguráció",
"Announcement Management": "Hirdetménykezelés",
"Apple": "Apple ID",
"Application Management": "Alkalmazáskezelés",
"Auth Control": "Hitelesítési vezérlés",
"Coupon Management": "Kuponkezelés",
"Dashboard": "Irányítópult",
"Device": "Eszköz",
"Document Management": "Dokumentumkezelés",
"Email": "E-mail",
"Facebook": "Facebook",
"Finance": "Pénzügy",
"General": "Általános",
"GitHub": "GitHub",
"Google": "Google",
"Order Management": "Rendeléskezelés",
"Payment Config": "Fizetési beállítások",
"Phone Number": "Telefonszám",
"Product Management": "Termékmenedzsment",
"Protocol Management": "Protokollkezelés",
"Rule Management": "Szabálykezelés",
"Server": "Szolgáltatás",
"Server Management": "Szerverkezelés",
"Settings": "Beállítások",
"Subscribe Management": "Előfizetés kezelése",
"Subscribe Config": "Előfizetés Beállítás",
"System Config": "Rendszerkonfiguráció",
"System Management": "Rendszerkezelés",
"System Tool": "Rendszereszköz",
"Telegram": "Telegram",
"Ticket Management": "Jegykezelés",
"Twitter": "Twitter",
"User": "Felhasználó",
"User Detail": "Felhasználói részletek",
"User Management": "Felhasználókezelés"

View File

@ -0,0 +1,160 @@
{
"actions": "műveletek",
"app": {
"appDownloadURL": "Alkalmazás letöltési URL",
"appIcon": "Alkalmazás ikon",
"appList": "Alkalmazáslista",
"appName": "Alkalmazás neve",
"backupDomains": "Biztonsági tartománylista",
"backupDomainsDescription": "Biztonsági tartománylista a tartomány feloldásához, soronként egy tartomány",
"batchDelete": "Csoportos törlés",
"cancel": "Mégse",
"communicationKey": "Kommunikációs kulcs",
"communicationKeyDescription": "Kulcs az ügyfélkommunikációhoz",
"config": "Beállítás",
"configApp": "Alkalmazás beállítása",
"confirm": "Megerősítés",
"confirmDelete": "Törlés megerősítése",
"create": "Létrehozás",
"createApp": "Alkalmazás létrehozása",
"createSuccess": "Sikeresen létrehozva",
"defaultVersion": "Alapértelmezett",
"delete": "Törlés",
"deleteWarning": "Ez a művelet nem vonható vissza",
"describeDescription": "Az alkalmazás leírására szolgál, megjelenik az alkalmazáslistában",
"description": "Leírás",
"downloadLink": "Letöltési hivatkozás",
"edit": "Szerkesztés",
"editApp": "Alkalmazás szerkesztése",
"encryption": "Titkosítási módszer",
"encryptionDescription": "Válassza ki az ügyfélkommunikáció titkosítási módszerét. Ha kiválasztja, az ügyfél ezt a módszert fogja használni a szerverrel való kommunikációhoz",
"nameDescription": "Alkalmazás neve, megjelenik az alkalmazáslistában",
"platform": "Platform",
"selectApp": "Alkalmazás kiválasztása",
"selectAppDescription": "Válassza ki a konfigurálandó alkalmazást, az összes beállítás az adott alkalmazásra vonatkozik",
"startupPicture": "Indító kép",
"startupPictureDescription": "Indító kép, támogatja a hálózati és helyi képeket. Hálózati képek esetén kérjük, adja meg a teljes kép URL-jét",
"startupPicturePreview": "Indító kép előnézete",
"startupPictureSkip": "Indító kép kihagyási ideje",
"startupPictureSkipDescription": "Indító kép megjelenítési ideje másodpercben, 0 megadása esetén nem jelenik meg",
"subscriptionProtocol": "Előfizetési protokoll",
"updateSuccess": "Sikeresen frissítve",
"version": "Verzió"
},
"cancel": "Mégse",
"config": {
"singleSubscriptionMode": "Egyszeri Előfizetési Mód",
"subscriptionDomain": "Előfizetési Tartomány",
"subscriptionDomainDescription": "Előfizetéshez használatos; hagyja üresen a webhely tartományának használatához",
"subscriptionDomainPlaceholder": "Adja meg az előfizetési tartományt, soronként egyet",
"subscriptionPath": "Előfizetési Útvonal",
"subscriptionPathDescription": "Előfizetéshez használatos; a módosítás után feltétlenül indítsa újra a rendszert az optimális teljesítmény érdekében",
"subscriptionPathPlaceholder": "Adja meg",
"updateSuccess": "Sikeresen frissítve",
"wildcardResolution": "Joker Feloldás",
"wildcardResolutionDescription": "Előfizetéshez használatos"
},
"confirm": "Megerősítés",
"confirmDelete": "Biztosan törölni szeretné?",
"copy": "Másolás",
"copySuccess": "Sikeresen másolva",
"create": "Létrehozás",
"createSubscribe": "Új előfizetés létrehozása",
"createSuccess": "Sikeres létrehozás",
"delete": "törlés",
"deleteSuccess": "Sikeres törlés",
"deleteWarning": "A törlés után az adatok nem állíthatók vissza, kérjük, járjon el körültekintően.",
"deviceLimit": "Eszközök száma/db",
"edit": "szerkesztés",
"editSubscribe": "Előfizetés szerkesztése",
"form": {
"Day": "Nap",
"Hour": "Óra",
"Minute": "Perc",
"Month": "Hónap",
"NoLimit": "Nincs korlátozás",
"Year": "Év",
"annualReset": "Éves Visszaállítás",
"basic": "Alap",
"cancel": "Mégse",
"confirm": "Megerősít",
"deductionRatio": "Automatikus/Kézi Levonási Beállítás",
"deductionRatioDescription": "Levonáshoz használatos. Alapértelmezés szerint a rendszer automatikus számítási algoritmust alkalmaz. Amikor kézi arányt adnak meg, a rendszer az idő és forgalom arány alapján számítja ki az arányokat, biztosítva, hogy az összeg 100% legyen.",
"description": "Leírás",
"deviceLimit": "Eszközkorlát",
"discount": "Kedvezmény",
"discountDescription": "Kedvezmény az egységár alapján",
"discountMonths": "Hónap",
"discountPercent": "Kedvezmény százalék",
"discount_price": "Kedvezményes ár",
"duration": "Időtartam (hónap)",
"groupId": "Előfizetési csoport",
"inventory": "Előfizetési korlát",
"monthlyReset": "Havi Visszaállítás",
"name": "Név",
"noLimit": "Korlátlan",
"noReset": "Nincs Visszaállítás",
"pricing": "Árazás",
"purchaseWithDiscount": "Levonás Engedélyezése",
"purchaseWithDiscountDescription": "Leiratkozási funkció engedélyezése vagy letiltása. Aktiválás után a rendszer a beállított szabályok és arányok szerint végzi el a levonási feldolgozást, és a fennmaradó értéket visszatéríti az egyenlegre.",
"quota": "Vásárlási korlát",
"renewalReset": "Megújítási Visszaállítás",
"renewalResetDescription": "Visszaállítási ciklus megújításkor",
"replacement": "Csere ára (alkalmanként)",
"resetCycle": "Visszaállítási Ciklus",
"resetOn1st": "Visszaállítás 1-jén",
"selectResetCycle": "Kérjük, válasszon visszaállítási ciklust",
"selectSubscribeGroup": "Kérjük, válassza ki az előfizetési csoportot",
"selectUnitTime": "Kérjük, válassza ki az időegységet",
"server": "Szolgáltatás",
"serverGroup": "Szolgáltatáscsoport",
"servers": "Szerverek",
"speedLimit": "Sebességkorlát ",
"traffic": "Forgalom",
"unitPrice": "Egységár",
"unitTime": "Időegység"
},
"group": {
"actions": "Műveletek",
"cancel": "Mégse",
"confirm": "Megerősít",
"confirmDelete": "Biztosan törölni szeretné?",
"create": "Létrehozás",
"createSubscribeGroup": "Új előfizetési csoport létrehozása",
"createSuccess": "Sikeres létrehozás",
"delete": "Törlés",
"deleteSuccess": "Sikeres törlés",
"deleteWarning": "A törlés után az adatok nem állíthatók vissza, kérjük, legyen óvatos.",
"description": "Leírás",
"edit": "Szerkesztés",
"editSubscribeGroup": "Előfizetési csoport szerkesztése",
"form": {
"cancel": "Mégse",
"confirm": "Megerősít",
"description": "Leírás",
"name": "Név"
},
"name": "Név",
"title": "Előfizetési csoportok listája",
"updateSuccess": "Sikeres frissítés",
"updatedAt": "Frissítés ideje"
},
"inventory": "Előfizetési korlát",
"name": "Név",
"quota": "Vásárlási korlát/alkalom",
"replacement": "Ár visszaállítása/alkalom",
"sell": "eladás",
"show": "Megjelenítés",
"sold": "Előfizetések száma",
"subscribe": "Feliratkozás",
"subscribeGroup": "Feliratkozási csoport",
"tabs": {
"subscribe": "Feliratkozás",
"subscribeApp": "Alkalmazás konfiguráció",
"subscribeConfig": "Előfizetés konfiguráció",
"subscribeGroup": "Feliratkozási csoport"
},
"traffic": "forgalom",
"unitPrice": "Egységár",
"updateSuccess": "Sikeres frissítés"
}

View File

@ -1,161 +1,89 @@
{
"actions": "műveletek",
"app": {
"appDownloadURL": "Alkalmazás letöltési URL",
"appIcon": "Alkalmazás ikon",
"appList": "Alkalmazáslista",
"appName": "Alkalmazás neve",
"backupDomains": "Biztonsági tartománylista",
"backupDomainsDescription": "Biztonsági tartománylista a tartomány feloldásához, soronként egy tartomány",
"batchDelete": "Csoportos törlés",
"actions": {
"cancel": "Mégse",
"communicationKey": "Kommunikációs kulcs",
"communicationKeyDescription": "Kulcs az ügyfélkommunikációhoz",
"config": "Beállítás",
"configApp": "Alkalmazás beállítása",
"confirm": "Megerősítés",
"confirmDelete": "Törlés megerősítése",
"create": "Létrehozás",
"createApp": "Alkalmazás létrehozása",
"createSuccess": "Sikeresen létrehozva",
"defaultVersion": "Alapértelmezett",
"delete": "Törlés",
"deleteWarning": "Ez a művelet nem vonható vissza",
"describeDescription": "Az alkalmazás leírására szolgál, megjelenik az alkalmazáslistában",
"description": "Leírás",
"downloadLink": "Letöltési hivatkozás",
"edit": "Szerkesztés",
"editApp": "Alkalmazás szerkesztése",
"encryption": "Titkosítási módszer",
"encryptionDescription": "Válassza ki az ügyfélkommunikáció titkosítási módszerét. Ha kiválasztja, az ügyfél ezt a módszert fogja használni a szerverrel való kommunikációhoz",
"nameDescription": "Alkalmazás neve, megjelenik az alkalmazáslistában",
"platform": "Platform",
"selectApp": "Alkalmazás kiválasztása",
"selectAppDescription": "Válassza ki a konfigurálandó alkalmazást, az összes beállítás az adott alkalmazásra vonatkozik",
"startupPicture": "Indító kép",
"startupPictureDescription": "Indító kép, támogatja a hálózati és helyi képeket. Hálózati képek esetén kérjük, adja meg a teljes kép URL-jét",
"startupPicturePreview": "Indító kép előnézete",
"startupPictureSkip": "Indító kép kihagyási ideje",
"startupPictureSkipDescription": "Indító kép megjelenítési ideje másodpercben, 0 megadása esetén nem jelenik meg",
"subscriptionProtocol": "Előfizetési protokoll",
"updateSuccess": "Sikeresen frissítve",
"version": "Verzió"
"save": "Mentés",
"saveTemplate": "Sablon mentése"
},
"cancel": "Mégse",
"config": {
"description": "Az előfizetési rendszer beállításainak kezelése",
"restrictUserAgent": "Felhasználói ügynök korlátozás",
"restrictUserAgentDescription": "Hozzáférési korlátozások engedélyezése a felhasználói ügynök alapján",
"singleSubscriptionMode": "Egyszeri Előfizetési Mód",
"singleSubscriptionModeDescription": "Ha engedélyezve van, az összes felhasználói előfizetés egyenlegre lesz átváltva",
"subscriptionDomain": "Előfizetési Tartomány",
"subscriptionDomainDescription": "Előfizetéshez használatos; hagyja üresen a webhely tartományának használatához",
"subscriptionDomainPlaceholder": "Adja meg az előfizetési tartományt, soronként egyet",
"singleSubscriptionModeDescription": "A felhasználókat egy aktív előfizetésre korlátozza. A meglévő előfizetések nincsenek hatással",
"subscriptionDomain": "Előfizetési Domain",
"subscriptionDomainDescription": "Egyedi domain az előfizetési linkekhez",
"subscriptionDomainPlaceholder": "Írja be az előfizetési domaint, soronként egyet",
"subscriptionPath": "Előfizetési Útvonal",
"subscriptionPathDescription": "Előfizetéshez használatos; a módosítás után feltétlenül indítsa újra a rendszert az optimális teljesítmény érdekében",
"subscriptionPathPlaceholder": "Adja meg",
"updateSuccess": "Sikeresen frissítve",
"wildcardResolution": "Joker Feloldás",
"wildcardResolutionDescription": "Előfizetéshez használatos"
"subscriptionPathDescription": "Egyedi útvonal az előfizetési végpontokhoz (jobb teljesítmény a rendszer újraindítása után)",
"subscriptionPathPlaceholder": "Írja be az előfizetési útvonalat",
"title": "Előfizetés Beállítások",
"updateError": "A frissítés meghiúsult",
"updateSuccess": "A beállítások sikeresen frissítve",
"userAgentWhitelist": "Felhasználói ügynök fehérlista",
"userAgentWhitelistDescription": "Engedélyezett felhasználói ügynökök az előfizetési hozzáféréshez, soronként egy. A beépített sablonok automatikusan bekerülnek a fehérlistába",
"userAgentWhitelistPlaceholder": "Írja be az engedélyezett felhasználói ügynököket, soronként egy",
"wildcardResolution": "Wildcard Feloldás",
"wildcardResolutionDescription": "Engedélyezze a wildcard domain feloldást az előfizetésekhez"
},
"confirm": "Megerősítés",
"confirmDelete": "Biztosan törölni szeretné?",
"copy": "Másolás",
"copySuccess": "Sikeresen másolva",
"create": "Létrehozás",
"createSubscribe": "Új előfizetés létrehozása",
"createSuccess": "Sikeres létrehozás",
"delete": "törlés",
"deleteSuccess": "Sikeres törlés",
"deleteWarning": "A törlés után az adatok nem állíthatók vissza, kérjük, járjon el körültekintően.",
"deviceLimit": "Eszközök száma/db",
"edit": "szerkesztés",
"editSubscribe": "Előfizetés szerkesztése",
"form": {
"Day": "Nap",
"Hour": "Óra",
"Minute": "Perc",
"Month": "Hónap",
"NoLimit": "Nincs korlátozás",
"Year": "Év",
"annualReset": "Éves Visszaállítás",
"basic": "Alap",
"cancel": "Mégse",
"confirm": "Megerősít",
"deductionRatio": "Automatikus/Kézi Levonási Beállítás",
"deductionRatioDescription": "Levonáshoz használatos. Alapértelmezés szerint a rendszer automatikus számítási algoritmust alkalmaz. Amikor kézi arányt adnak meg, a rendszer az idő és forgalom arány alapján számítja ki az arányokat, biztosítva, hogy az összeg 100% legyen.",
"description": "Leírás",
"deviceLimit": "Eszközkorlát",
"discount": "Kedvezmény",
"discountDescription": "Kedvezmény az egységár alapján",
"discountMonths": "Hónap",
"discountPercent": "Kedvezmény százalék",
"discount_price": "Kedvezményes ár",
"duration": "Időtartam (hónap)",
"groupId": "Előfizetési csoport",
"inventory": "Előfizetési korlát",
"monthlyReset": "Havi Visszaállítás",
"name": "Név",
"noLimit": "Korlátlan",
"noReset": "Nincs Visszaállítás",
"pricing": "Árazás",
"purchaseWithDiscount": "Levonás Engedélyezése",
"purchaseWithDiscountDescription": "Leiratkozási funkció engedélyezése vagy letiltása. Aktiválás után a rendszer a beállított szabályok és arányok szerint végzi el a levonási feldolgozást, és a fennmaradó értéket visszatéríti az egyenlegre.",
"quota": "Vásárlási korlát",
"renewalReset": "Megújítási Visszaállítás",
"renewalResetDescription": "Visszaállítási ciklus megújításkor",
"replacement": "Csere ára (alkalmanként)",
"resetCycle": "Visszaállítási Ciklus",
"resetOn1st": "Visszaállítás 1-jén",
"selectResetCycle": "Kérjük, válasszon visszaállítási ciklust",
"selectSubscribeGroup": "Kérjük, válassza ki az előfizetési csoportot",
"selectUnitTime": "Kérjük, válassza ki az időegységet",
"server": "Szolgáltatás",
"serverGroup": "Szolgáltatáscsoport",
"servers": "Szerverek",
"speedLimit": "Sebességkorlát ",
"traffic": "Forgalom",
"unitPrice": "Egységár",
"unitTime": "Időegység"
"description": "Előfizetési beállítások és kliens sablonok konfigurálása",
"messages": {
"noClients": "Nincs Kliens Sablon",
"noClientsDescription": "Még nincs konfigurálva kliens sablon. Adja hozzá az első sablont a kezdéshez."
},
"group": {
"actions": "Műveletek",
"cancel": "Mégse",
"confirm": "Megerősít",
"confirmDelete": "Biztosan törölni szeretné?",
"create": "Létrehozás",
"createSubscribeGroup": "Új előfizetési csoport létrehozása",
"createSuccess": "Sikeres létrehozás",
"delete": "Törlés",
"deleteSuccess": "Sikeres törlés",
"deleteWarning": "A törlés után az adatok nem állíthatók vissza, kérjük, legyen óvatos.",
"description": "Leírás",
"edit": "Szerkesztés",
"editSubscribeGroup": "Előfizetési csoport szerkesztése",
"form": {
"cancel": "Mégse",
"confirm": "Megerősít",
"description": "Leírás",
"name": "Név"
"protocol": {
"clients": {
"clash": {
"features": "Nagy ökoszisztéma, átfogó szabályok, aktív közösség"
},
"egern": {
"features": "Modern iOS kliens, kiváló teljesítmény"
},
"hiddify": {
"features": "Többplatformos, átfogó protokollok, kezdőbarát"
},
"loon": {
"features": "iOS fejlett kliens, gazdag szabályok, szép felület"
},
"netch": {
"features": "Játékra fókuszáló proxy kliens"
},
"quantumult": {
"features": "iOS fejlett kliens, rugalmas szabályok, gazdag szkriptek"
},
"shadowrocket": {
"features": "Klasszikus iOS kliens, rugalmas konfiguráció"
},
"singbox": {
"features": "Legújabb kernel, hivatalos GUI, többplatformos támogatás"
},
"stash": {
"features": "Modern mobil UI, átfogó protokollok"
},
"surfboard": {
"features": "Ingyenes, aktív fejlesztés, modern felület"
},
"surge": {
"features": "Prémium iOS/Mac eszköz, erőteljes funkciók"
},
"v2box": {
"features": "Felhasználóbarát V2Ray kliens"
},
"v2rayn": {
"features": "Népszerű Windows kliens, funkciógazdag"
},
"v2rayng": {
"features": "Népszerű Android kliens, könnyű súlyú"
}
},
"name": "Név",
"title": "Előfizetési csoportok listája",
"updateSuccess": "Sikeres frissítés",
"updatedAt": "Frissítés ideje"
"description": "Az előfizetési konfigurációs sablonok kezelése proxy kliensek számára",
"features": "Főbb Jellemzők",
"platforms": "Platformok",
"subscribeTemplate": "Előfizetési Sablon Beállítása",
"templateContent": "Sablon Tartalom",
"templatePlaceholder": "Írja be a kliens konfigurációs sablont...",
"title": "Kliens Előfizetési Sablonok"
},
"inventory": "Előfizetési korlát",
"name": "Név",
"quota": "Vásárlási korlát/alkalom",
"replacement": "Ár visszaállítása/alkalom",
"sell": "eladás",
"show": "Megjelenítés",
"sold": "Előfizetések száma",
"subscribe": "Feliratkozás",
"subscribeGroup": "Feliratkozási csoport",
"tabs": {
"subscribe": "Feliratkozás",
"subscribeApp": "Alkalmazás konfiguráció",
"subscribeConfig": "Előfizetés konfiguráció",
"subscribeGroup": "Feliratkozási csoport"
},
"traffic": "forgalom",
"unitPrice": "Egységár",
"updateSuccess": "Sikeres frissítés"
"title": "Előfizetés Kezelés"
}

View File

@ -1,32 +1,25 @@
{
"ADS Config": "ADS設定",
"Announcement Management": "お知らせ管理",
"Apple": "Apple ID",
"Application Management": "アプリケーション管理",
"Auth Control": "認証管理",
"Coupon Management": "クーポン管理",
"Dashboard": "ダッシュボード",
"Device": "デバイス",
"Document Management": "ドキュメント管理",
"Email": "メール",
"Facebook": "Facebook",
"Finance": "財務",
"General": "一般",
"GitHub": "GitHub",
"Google": "Google",
"Order Management": "注文管理",
"Payment Config": "支払い設定",
"Phone Number": "電話番号",
"Product Management": "プロダクトマネジメント",
"Protocol Management": "プロトコル管理",
"Rule Management": "ルール管理",
"Server": "サーバー",
"Server Management": "サーバー管理",
"Settings": "設定",
"Subscribe Management": "サブスクリプション管理",
"Subscribe Config": "サブスクリプション設定",
"System Config": "システム構成",
"System Management": "システム管理",
"System Tool": "システムツール",
"Telegram": "テレグラム",
"Ticket Management": "チケット管理",
"Twitter": "Twitter",
"User": "ユーザー",
"User Detail": "ユーザー詳細",
"User Management": "ユーザー管理"

View File

@ -0,0 +1,160 @@
{
"actions": "アクション",
"app": {
"appDownloadURL": "アプリダウンロードURL",
"appIcon": "アプリアイコン",
"appList": "アプリリスト",
"appName": "アプリ名",
"backupDomains": "バックアップドメインリスト",
"backupDomainsDescription": "ドメイン解決のためのバックアップドメインリスト、1行に1つのドメイン",
"batchDelete": "一括削除",
"cancel": "キャンセル",
"communicationKey": "通信キー",
"communicationKeyDescription": "クライアント通信に使用されるキー",
"config": "設定",
"configApp": "アプリ設定",
"confirm": "確認",
"confirmDelete": "削除を確認",
"create": "作成",
"createApp": "アプリ作成",
"createSuccess": "作成に成功しました",
"defaultVersion": "デフォルト",
"delete": "削除",
"deleteWarning": "この操作は元に戻せません",
"describeDescription": "アプリケーションを説明するために使用され、アプリリストに表示されます",
"description": "説明",
"downloadLink": "ダウンロードリンク",
"edit": "編集",
"editApp": "アプリ編集",
"encryption": "暗号化方式",
"encryptionDescription": "クライアント通信の暗号化方式を選択してください。選択された場合、クライアントはこの方式を使用してサーバーと通信します",
"nameDescription": "アプリケーション名、アプリリストに表示されます",
"platform": "プラットフォーム",
"selectApp": "アプリを選択",
"selectAppDescription": "設定するアプリを選択してください。すべての設定は選択したアプリに適用されます",
"startupPicture": "スタートアップ画像",
"startupPictureDescription": "スタートアップ画像、ネットワークおよびローカル画像をサポートします。ネットワーク画像の場合は、完全な画像URLを入力してください",
"startupPicturePreview": "スタートアップ画像プレビュー",
"startupPictureSkip": "スタートアップ画像スキップ時間",
"startupPictureSkipDescription": "スタートアップ画像の表示時間、表示しない場合は0を入力",
"subscriptionProtocol": "サブスクリプションプロトコル",
"updateSuccess": "更新に成功しました",
"version": "バージョン"
},
"cancel": "キャンセル",
"config": {
"singleSubscriptionMode": "シングルサブスクリプションモード",
"subscriptionDomain": "サブスクリプションドメイン",
"subscriptionDomainDescription": "サブスクリプションに使用します。サイトドメインを使用する場合は空白のままにしてください",
"subscriptionDomainPlaceholder": "サブスクリプションドメインを入力してください。1行に1つずつ",
"subscriptionPath": "サブスクリプションパス",
"subscriptionPathDescription": "サブスクリプションに使用します。最適なパフォーマンスのために、変更後は必ずシステムを再起動してください",
"subscriptionPathPlaceholder": "入力してください",
"updateSuccess": "更新が成功しました",
"wildcardResolution": "ワイルドカード解決",
"wildcardResolutionDescription": "サブスクリプションに使用します"
},
"confirm": "確認",
"confirmDelete": "削除してもよろしいですか?",
"copy": "コピー",
"copySuccess": "コピーしました",
"create": "作成",
"createSubscribe": "新規購読",
"createSuccess": "作成に成功しました",
"delete": "削除",
"deleteSuccess": "削除に成功しました",
"deleteWarning": "削除後、データは復元できませんので、慎重に操作してください。",
"deviceLimit": "デバイス数/台",
"edit": "編集",
"editSubscribe": "サブスクリプションを編集",
"form": {
"Day": "日",
"Hour": "時",
"Minute": "分",
"Month": "月",
"NoLimit": "制限なし",
"Year": "年",
"annualReset": "毎年リセット",
"basic": "基本",
"cancel": "キャンセル",
"confirm": "確認",
"deductionRatio": "自動/手動控除設定",
"deductionRatioDescription": "控除に使用されます。デフォルトでは、システムは自動計算アルゴリズムを採用します。手動比率が提供されると、システムは時間とトラフィックの比率に基づいて割合を計算し、合計が100%になるようにします。",
"description": "説明",
"deviceLimit": "デバイス制限",
"discount": "割引",
"discountDescription": "単価に基づく割引設定",
"discountMonths": "月",
"discountPercent": "割引率",
"discount_price": "割引価格",
"duration": "期間(月)",
"groupId": "サブスクリプショングループ",
"inventory": "サブスクリプション制限",
"monthlyReset": "毎月リセット",
"name": "名称",
"noLimit": "無制限",
"noReset": "リセットなし",
"pricing": "価格設定",
"purchaseWithDiscount": "控除を許可",
"purchaseWithDiscountDescription": "購読解除機能を有効または無効にします。有効化後、システムは設定されたルールと割合に従って控除処理を行い、残りの金額を残高に返金します。",
"quota": "購入制限数",
"renewalReset": "更新時リセット",
"renewalResetDescription": "更新時にリセットサイクル",
"replacement": "リセット価格(毎回)",
"resetCycle": "リセットサイクル",
"resetOn1st": "1日にリセット",
"selectResetCycle": "リセットサイクルを選択してください",
"selectSubscribeGroup": "サブスクリプショングループを選択してください",
"selectUnitTime": "単位時間を選択してください",
"server": "サーバー",
"serverGroup": "サーバーグループ",
"servers": "サーバー",
"speedLimit": "速度制限",
"traffic": "トラフィック",
"unitPrice": "単価",
"unitTime": "単位時間"
},
"group": {
"actions": "操作",
"cancel": "キャンセル",
"confirm": "確認",
"confirmDelete": "削除してもよろしいですか?",
"create": "作成",
"createSubscribeGroup": "新しい購読グループを作成",
"createSuccess": "作成成功",
"delete": "削除",
"deleteSuccess": "削除成功",
"deleteWarning": "削除後はデータを復元できませんので、慎重に操作してください。",
"description": "説明",
"edit": "編集",
"editSubscribeGroup": "購読グループを編集",
"form": {
"cancel": "キャンセル",
"confirm": "確認",
"description": "説明",
"name": "名前"
},
"name": "名前",
"title": "購読グループ一覧",
"updateSuccess": "更新成功",
"updatedAt": "更新日時"
},
"inventory": "サブスクリプションの制限",
"name": "名前",
"quota": "購入制限/回",
"replacement": "リセット価格/回",
"sell": "販売",
"show": "表示",
"sold": "サブスクリプション数",
"subscribe": "購読",
"subscribeGroup": "グループを購読する",
"tabs": {
"subscribe": "購読",
"subscribeApp": "アプリ設定",
"subscribeConfig": "サブスクリプション設定",
"subscribeGroup": "購読グループ"
},
"traffic": "トラフィック",
"unitPrice": "単価",
"updateSuccess": "更新が成功しました"
}

View File

@ -1,161 +1,89 @@
{
"actions": "アクション",
"app": {
"appDownloadURL": "アプリダウンロードURL",
"appIcon": "アプリアイコン",
"appList": "アプリリスト",
"appName": "アプリ名",
"backupDomains": "バックアップドメインリスト",
"backupDomainsDescription": "ドメイン解決のためのバックアップドメインリスト、1行に1つのドメイン",
"batchDelete": "一括削除",
"actions": {
"cancel": "キャンセル",
"communicationKey": "通信キー",
"communicationKeyDescription": "クライアント通信に使用されるキー",
"config": "設定",
"configApp": "アプリ設定",
"confirm": "確認",
"confirmDelete": "削除を確認",
"create": "作成",
"createApp": "アプリ作成",
"createSuccess": "作成に成功しました",
"defaultVersion": "デフォルト",
"delete": "削除",
"deleteWarning": "この操作は元に戻せません",
"describeDescription": "アプリケーションを説明するために使用され、アプリリストに表示されます",
"description": "説明",
"downloadLink": "ダウンロードリンク",
"edit": "編集",
"editApp": "アプリ編集",
"encryption": "暗号化方式",
"encryptionDescription": "クライアント通信の暗号化方式を選択してください。選択された場合、クライアントはこの方式を使用してサーバーと通信します",
"nameDescription": "アプリケーション名、アプリリストに表示されます",
"platform": "プラットフォーム",
"selectApp": "アプリを選択",
"selectAppDescription": "設定するアプリを選択してください。すべての設定は選択したアプリに適用されます",
"startupPicture": "スタートアップ画像",
"startupPictureDescription": "スタートアップ画像、ネットワークおよびローカル画像をサポートします。ネットワーク画像の場合は、完全な画像URLを入力してください",
"startupPicturePreview": "スタートアップ画像プレビュー",
"startupPictureSkip": "スタートアップ画像スキップ時間",
"startupPictureSkipDescription": "スタートアップ画像の表示時間、表示しない場合は0を入力",
"subscriptionProtocol": "サブスクリプションプロトコル",
"updateSuccess": "更新に成功しました",
"version": "バージョン"
"save": "保存",
"saveTemplate": "テンプレートを保存"
},
"cancel": "キャンセル",
"config": {
"singleSubscriptionMode": "シングルサブスクリプションモード",
"singleSubscriptionModeDescription": "有効にすると、すべてのユーザーサブスクリプションがバランスに変換されます",
"description": "サブスクリプションシステムの設定を管理",
"restrictUserAgent": "ユーザーエージェント制限",
"restrictUserAgentDescription": "ユーザーエージェントに基づくアクセス制限を有効にします",
"singleSubscriptionMode": "単一サブスクリプションモード",
"singleSubscriptionModeDescription": "ユーザーを1つのアクティブなサブスクリプションに制限します。既存のサブスクリプションには影響しません",
"subscriptionDomain": "サブスクリプションドメイン",
"subscriptionDomainDescription": "サブスクリプションに使用します。サイトドメインを使用する場合は空白のままにしてください",
"subscriptionDomainPlaceholder": "サブスクリプションドメインを入力してください。1行に1つずつ",
"subscriptionDomainDescription": "サブスクリプションリンク用のカスタムドメイン",
"subscriptionDomainPlaceholder": "サブスクリプションドメインを入力してください1行につき1つ",
"subscriptionPath": "サブスクリプションパス",
"subscriptionPathDescription": "サブスクリプションに使用します。最適なパフォーマンスのために、変更後は必ずシステムを再起動してください",
"subscriptionPathPlaceholder": "入力してください",
"updateSuccess": "更新が成功しました",
"subscriptionPathDescription": "サブスクリプションエンドポイント用のカスタムパス(システム再起動後のパフォーマンス向上)",
"subscriptionPathPlaceholder": "サブスクリプションパスを入力してください",
"title": "サブスクリプション設定",
"updateError": "更新に失敗しました",
"updateSuccess": "設定が正常に更新されました",
"userAgentWhitelist": "ユーザーエージェントホワイトリスト",
"userAgentWhitelistDescription": "サブスクリプションアクセスのために許可されたユーザーエージェント。1行につき1つ。組み込みテンプレートは自動的にホワイトリストに含まれます",
"userAgentWhitelistPlaceholder": "許可されたユーザーエージェントを入力してください。1行につき1つ",
"wildcardResolution": "ワイルドカード解決",
"wildcardResolutionDescription": "サブスクリプションに使用します"
"wildcardResolutionDescription": "サブスクリプション用のワイルドカードドメイン解決を有効にす"
},
"confirm": "確認",
"confirmDelete": "削除してもよろしいですか?",
"copy": "コピー",
"copySuccess": "コピーしました",
"create": "作成",
"createSubscribe": "新規購読",
"createSuccess": "作成に成功しました",
"delete": "削除",
"deleteSuccess": "削除に成功しました",
"deleteWarning": "削除後、データは復元できませんので、慎重に操作してください。",
"deviceLimit": "デバイス数/台",
"edit": "編集",
"editSubscribe": "サブスクリプションを編集",
"form": {
"Day": "日",
"Hour": "時",
"Minute": "分",
"Month": "月",
"NoLimit": "制限なし",
"Year": "年",
"annualReset": "毎年リセット",
"basic": "基本",
"cancel": "キャンセル",
"confirm": "確認",
"deductionRatio": "自動/手動控除設定",
"deductionRatioDescription": "控除に使用されます。デフォルトでは、システムは自動計算アルゴリズムを採用します。手動比率が提供されると、システムは時間とトラフィックの比率に基づいて割合を計算し、合計が100%になるようにします。",
"description": "説明",
"deviceLimit": "デバイス制限",
"discount": "割引",
"discountDescription": "単価に基づく割引設定",
"discountMonths": "月",
"discountPercent": "割引率",
"discount_price": "割引価格",
"duration": "期間(月)",
"groupId": "サブスクリプショングループ",
"inventory": "サブスクリプション制限",
"monthlyReset": "毎月リセット",
"name": "名称",
"noLimit": "無制限",
"noReset": "リセットなし",
"pricing": "価格設定",
"purchaseWithDiscount": "控除を許可",
"purchaseWithDiscountDescription": "購読解除機能を有効または無効にします。有効化後、システムは設定されたルールと割合に従って控除処理を行い、残りの金額を残高に返金します。",
"quota": "購入制限数",
"renewalReset": "更新時リセット",
"renewalResetDescription": "更新時にリセットサイクル",
"replacement": "リセット価格(毎回)",
"resetCycle": "リセットサイクル",
"resetOn1st": "1日にリセット",
"selectResetCycle": "リセットサイクルを選択してください",
"selectSubscribeGroup": "サブスクリプショングループを選択してください",
"selectUnitTime": "単位時間を選択してください",
"server": "サーバー",
"serverGroup": "サーバーグループ",
"servers": "サーバー",
"speedLimit": "速度制限",
"traffic": "トラフィック",
"unitPrice": "単価",
"unitTime": "単位時間"
"description": "サブスクリプション設定とクライアントテンプレートを構成",
"messages": {
"noClients": "クライアントテンプレートがありません",
"noClientsDescription": "まだクライアントテンプレートが設定されていません。最初のテンプレートを追加して始めましょう。"
},
"group": {
"actions": "操作",
"cancel": "キャンセル",
"confirm": "確認",
"confirmDelete": "削除してもよろしいですか?",
"create": "作成",
"createSubscribeGroup": "新しい購読グループを作成",
"createSuccess": "作成成功",
"delete": "削除",
"deleteSuccess": "削除成功",
"deleteWarning": "削除後はデータを復元できませんので、慎重に操作してください。",
"description": "説明",
"edit": "編集",
"editSubscribeGroup": "購読グループを編集",
"form": {
"cancel": "キャンセル",
"confirm": "確認",
"description": "説明",
"name": "名前"
"protocol": {
"clients": {
"clash": {
"features": "大規模なエコシステム、包括的なルール、活発なコミュニティ"
},
"egern": {
"features": "モダンなiOSクライアント、優れたパフォーマンス"
},
"hiddify": {
"features": "マルチプラットフォーム、包括的なプロトコル、初心者に優しい"
},
"loon": {
"features": "iOSの高度なクライアント、豊富なルール、美しいインターフェース"
},
"netch": {
"features": "ゲーム向けプロキシクライアント"
},
"quantumult": {
"features": "iOSの高度なクライアント、柔軟なルール、豊富なスクリプト"
},
"shadowrocket": {
"features": "クラシックなiOSクライアント、柔軟な設定"
},
"singbox": {
"features": "最新のカーネル、公式GUI、マルチプラットフォームサポート"
},
"stash": {
"features": "モダンなモバイルUI、包括的なプロトコル"
},
"surfboard": {
"features": "無料、アクティブな開発、モダンなインターフェース"
},
"surge": {
"features": "プレミアムiOS/Macツール、強力な機能"
},
"v2box": {
"features": "ユーザーフレンドリーなV2Rayクライアント"
},
"v2rayn": {
"features": "人気のWindowsクライアント、機能豊富"
},
"v2rayng": {
"features": "人気のAndroidクライアント、軽量"
}
},
"name": "名前",
"title": "購読グループ一覧",
"updateSuccess": "更新成功",
"updatedAt": "更新日時"
"description": "プロキシクライアントのサブスクリプション設定テンプレートを管理",
"features": "主な機能",
"platforms": "プラットフォーム",
"subscribeTemplate": "サブスクリプションテンプレート設定",
"templateContent": "テンプレート内容",
"templatePlaceholder": "クライアント設定テンプレートを入力してください...",
"title": "クライアントサブスクリプションテンプレート"
},
"inventory": "サブスクリプションの制限",
"name": "名前",
"quota": "購入制限/回",
"replacement": "リセット価格/回",
"sell": "販売",
"show": "表示",
"sold": "サブスクリプション数",
"subscribe": "購読",
"subscribeGroup": "グループを購読する",
"tabs": {
"subscribe": "購読",
"subscribeApp": "アプリ設定",
"subscribeConfig": "サブスクリプション設定",
"subscribeGroup": "購読グループ"
},
"traffic": "トラフィック",
"unitPrice": "単価",
"updateSuccess": "更新が成功しました"
"title": "サブスクリプション管理"
}

View File

@ -1,32 +1,25 @@
{
"ADS Config": "ADS 구성",
"Announcement Management": "공지 관리",
"Apple": "Apple ID",
"Application Management": "애플리케이션 관리",
"Auth Control": "인증 제어",
"Coupon Management": "쿠폰 관리",
"Dashboard": "대시보드",
"Device": "장치",
"Document Management": "문서 관리",
"Email": "이메일",
"Facebook": "Facebook",
"Finance": "재무",
"General": "일반",
"GitHub": "GitHub",
"Google": "Google",
"Order Management": "주문 관리",
"Payment Config": "결제 구성",
"Phone Number": "전화번호",
"Product Management": "제품 관리",
"Protocol Management": "프로토콜 관리",
"Rule Management": "규칙 관리",
"Server": "서버",
"Server Management": "서버 관리",
"Settings": "설정",
"Subscribe Management": "구독 관리",
"Subscribe Config": "구독 설정",
"System Config": "시스템 구성",
"System Management": "시스템 관리",
"System Tool": "시스템 도구",
"Telegram": "텔레그램",
"Ticket Management": "티켓 관리",
"Twitter": "트위터",
"User": "사용자",
"User Detail": "사용자 세부 정보",
"User Management": "사용자 관리"

View File

@ -0,0 +1,160 @@
{
"actions": "작업",
"app": {
"appDownloadURL": "앱 다운로드 URL",
"appIcon": "앱 아이콘",
"appList": "앱 목록",
"appName": "앱 이름",
"backupDomains": "백업 도메인 목록",
"backupDomainsDescription": "도메인 해석을 위한 백업 도메인 목록, 한 줄에 하나의 도메인",
"batchDelete": "일괄 삭제",
"cancel": "취소",
"communicationKey": "통신 키",
"communicationKeyDescription": "클라이언트 통신에 사용되는 키",
"config": "설정",
"configApp": "앱 설정",
"confirm": "확인",
"confirmDelete": "삭제 확인",
"create": "생성",
"createApp": "앱 생성",
"createSuccess": "성공적으로 생성되었습니다",
"defaultVersion": "기본",
"delete": "삭제",
"deleteWarning": "이 작업은 되돌릴 수 없습니다",
"describeDescription": "애플리케이션을 설명하는 데 사용되며, 앱 목록에 표시됩니다",
"description": "설명",
"downloadLink": "다운로드 링크",
"edit": "편집",
"editApp": "앱 편집",
"encryption": "암호화 방법",
"encryptionDescription": "클라이언트 통신을 위한 암호화 방법을 선택하세요. 선택하면 클라이언트는 이 방법을 사용하여 서버와 통신합니다.",
"nameDescription": "애플리케이션 이름, 앱 목록에 표시됩니다",
"platform": "플랫폼",
"selectApp": "앱 선택",
"selectAppDescription": "구성할 앱을 선택하세요. 모든 설정은 선택한 앱에 적용됩니다.",
"startupPicture": "시작 화면",
"startupPictureDescription": "시작 화면, 네트워크 및 로컬 이미지를 지원합니다. 네트워크 이미지를 사용할 경우, 전체 이미지 URL을 입력하세요",
"startupPicturePreview": "시작 화면 미리보기",
"startupPictureSkip": "시작 화면 건너뛰기 시간",
"startupPictureSkipDescription": "시작 화면 표시 시간(초), 0을 입력하면 표시되지 않습니다",
"subscriptionProtocol": "구독 프로토콜",
"updateSuccess": "성공적으로 업데이트되었습니다",
"version": "버전"
},
"cancel": "취소",
"config": {
"singleSubscriptionMode": "단일 구독 모드",
"subscriptionDomain": "구독 도메인",
"subscriptionDomainDescription": "구독에 사용됩니다; 사이트 도메인을 사용하려면 비워 두세요",
"subscriptionDomainPlaceholder": "구독 도메인을 입력하세요, 한 줄에 하나씩",
"subscriptionPath": "구독 경로",
"subscriptionPathDescription": "구독에 사용됩니다; 최적의 성능을 위해 수정 후 시스템을 재시작하세요",
"subscriptionPathPlaceholder": "입력하세요",
"updateSuccess": "성공적으로 업데이트되었습니다",
"wildcardResolution": "와일드카드 해상도",
"wildcardResolutionDescription": "구독에 사용됩니다"
},
"confirm": "확인",
"confirmDelete": "삭제하시겠습니까?",
"copy": "복사",
"copySuccess": "성공적으로 복사되었습니다",
"create": "생성",
"createSubscribe": "새 구독 생성",
"createSuccess": "생성 성공",
"delete": "삭제",
"deleteSuccess": "삭제 성공",
"deleteWarning": "삭제 후 데이터는 복구할 수 없으니 신중하게 진행하세요.",
"deviceLimit": "장치 수/대",
"edit": "편집",
"editSubscribe": "구독 편집",
"form": {
"Day": "일",
"Hour": "시",
"Minute": "분",
"Month": "월",
"NoLimit": "제한 없음",
"Year": "년",
"annualReset": "연간 초기화",
"basic": "기본",
"cancel": "취소",
"confirm": "확인",
"deductionRatio": "자동/수동 공제 설정",
"deductionRatioDescription": "공제에 사용됩니다. 기본적으로 시스템은 자동 계산 알고리즘을 채택합니다. 수동 비율이 제공되면 시스템은 시간 및 트래픽 비율에 따라 비율을 계산하여 총합이 100%가 되도록 합니다.",
"description": "설명",
"deviceLimit": "기기 제한",
"discount": "할인",
"discountDescription": "단가 기준으로 할인 설정",
"discountMonths": "개월",
"discountPercent": "할인율",
"discount_price": "할인가",
"duration": "기간 (개월)",
"groupId": "구독 그룹",
"inventory": "구독 한도",
"monthlyReset": "월별 초기화",
"name": "이름",
"noLimit": "무제한",
"noReset": "초기화 없음",
"pricing": "가격",
"purchaseWithDiscount": "공제 허용",
"purchaseWithDiscountDescription": "구독 취소 기능을 활성화하거나 비활성화합니다. 활성화 후, 시스템은 설정된 규칙과 비율에 따라 공제 처리를 수행하며, 남은 가치는 잔액으로 반환됩니다.",
"quota": "구매 한도",
"renewalReset": "갱신 초기화",
"renewalResetDescription": "갱신 시 초기화 주기",
"replacement": "재설정 가격 (매회)",
"resetCycle": "초기화 주기",
"resetOn1st": "매월 1일 초기화",
"selectResetCycle": "초기화 주기를 선택하세요",
"selectSubscribeGroup": "구독 그룹을 선택하세요",
"selectUnitTime": "단위 시간을 선택하세요",
"server": "서버",
"serverGroup": "서버 그룹",
"servers": "서버",
"speedLimit": "속도 제한 ",
"traffic": "트래픽",
"unitPrice": "단가",
"unitTime": "단위 시간"
},
"group": {
"actions": "작업",
"cancel": "취소",
"confirm": "확인",
"confirmDelete": "삭제하시겠습니까?",
"create": "생성",
"createSubscribeGroup": "새 구독 그룹 생성",
"createSuccess": "생성 성공",
"delete": "삭제",
"deleteSuccess": "삭제 성공",
"deleteWarning": "삭제 후 데이터는 복구할 수 없습니다. 신중하게 진행하세요.",
"description": "설명",
"edit": "편집",
"editSubscribeGroup": "구독 그룹 편집",
"form": {
"cancel": "취소",
"confirm": "확인",
"description": "설명",
"name": "이름"
},
"name": "이름",
"title": "구독 그룹 목록",
"updateSuccess": "업데이트 성공",
"updatedAt": "업데이트 시간"
},
"inventory": "구독 한도",
"name": "이름",
"quota": "구매 제한/회",
"replacement": "가격 재설정/회",
"sell": "판매",
"show": "표시",
"sold": "구독 수",
"subscribe": "구독",
"subscribeGroup": "구독 그룹",
"tabs": {
"subscribe": "구독",
"subscribeApp": "앱 구성",
"subscribeConfig": "구독 구성",
"subscribeGroup": "구독 그룹"
},
"traffic": "트래픽",
"unitPrice": "단가",
"updateSuccess": "업데이트 성공"
}

View File

@ -1,161 +1,89 @@
{
"actions": "작업",
"app": {
"appDownloadURL": "앱 다운로드 URL",
"appIcon": "앱 아이콘",
"appList": "앱 목록",
"appName": "앱 이름",
"backupDomains": "백업 도메인 목록",
"backupDomainsDescription": "도메인 해석을 위한 백업 도메인 목록, 한 줄에 하나의 도메인",
"batchDelete": "일괄 삭제",
"actions": {
"cancel": "취소",
"communicationKey": "통신 키",
"communicationKeyDescription": "클라이언트 통신에 사용되는 키",
"config": "설정",
"configApp": "앱 설정",
"confirm": "확인",
"confirmDelete": "삭제 확인",
"create": "생성",
"createApp": "앱 생성",
"createSuccess": "성공적으로 생성되었습니다",
"defaultVersion": "기본",
"delete": "삭제",
"deleteWarning": "이 작업은 되돌릴 수 없습니다",
"describeDescription": "애플리케이션을 설명하는 데 사용되며, 앱 목록에 표시됩니다",
"description": "설명",
"downloadLink": "다운로드 링크",
"edit": "편집",
"editApp": "앱 편집",
"encryption": "암호화 방법",
"encryptionDescription": "클라이언트 통신을 위한 암호화 방법을 선택하세요. 선택하면 클라이언트는 이 방법을 사용하여 서버와 통신합니다.",
"nameDescription": "애플리케이션 이름, 앱 목록에 표시됩니다",
"platform": "플랫폼",
"selectApp": "앱 선택",
"selectAppDescription": "구성할 앱을 선택하세요. 모든 설정은 선택한 앱에 적용됩니다.",
"startupPicture": "시작 화면",
"startupPictureDescription": "시작 화면, 네트워크 및 로컬 이미지를 지원합니다. 네트워크 이미지를 사용할 경우, 전체 이미지 URL을 입력하세요",
"startupPicturePreview": "시작 화면 미리보기",
"startupPictureSkip": "시작 화면 건너뛰기 시간",
"startupPictureSkipDescription": "시작 화면 표시 시간(초), 0을 입력하면 표시되지 않습니다",
"subscriptionProtocol": "구독 프로토콜",
"updateSuccess": "성공적으로 업데이트되었습니다",
"version": "버전"
"save": "저장",
"saveTemplate": "템플릿 저장"
},
"cancel": "취소",
"config": {
"description": "구독 시스템 설정 관리",
"restrictUserAgent": "사용자 에이전트 제한",
"restrictUserAgentDescription": "사용자 에이전트를 기반으로 한 접근 제한 활성화",
"singleSubscriptionMode": "단일 구독 모드",
"singleSubscriptionModeDescription": "활성화되면 모든 사용자 구독이 잔액으로 전환됩니다",
"singleSubscriptionModeDescription": "사용자를 하나의 활성 구독으로 제한합니다. 기존 구독에는 영향을 미치지 않습니다",
"subscriptionDomain": "구독 도메인",
"subscriptionDomainDescription": "구독에 사용됩니다; 사이트 도메인을 사용하려면 비워 두세요",
"subscriptionDomainDescription": "구독 링크를 위한 사용자 지정 도메인",
"subscriptionDomainPlaceholder": "구독 도메인을 입력하세요, 한 줄에 하나씩",
"subscriptionPath": "구독 경로",
"subscriptionPathDescription": "구독에 사용됩니다; 최적의 성능을 위해 수정 후 시스템을 재시작하세요",
"subscriptionPathPlaceholder": "입력하세요",
"updateSuccess": "성공적으로 업데이트되었습니다",
"subscriptionPathDescription": "구독 엔드포인트를 위한 사용자 지정 경로 (시스템 재시작 후 성능 향상)",
"subscriptionPathPlaceholder": "구독 경로를 입력하세요",
"title": "구독 설정",
"updateError": "업데이트 실패",
"updateSuccess": "설정이 성공적으로 업데이트되었습니다",
"userAgentWhitelist": "사용자 에이전트 허용 목록",
"userAgentWhitelistDescription": "구독 접근을 위한 허용된 사용자 에이전트, 한 줄에 하나씩 입력합니다. 내장 템플릿은 자동으로 허용 목록에 포함됩니다",
"userAgentWhitelistPlaceholder": "허용된 사용자 에이전트를 입력하세요, 한 줄에 하나씩",
"wildcardResolution": "와일드카드 해상도",
"wildcardResolutionDescription": "구독에 사용됩니다"
"wildcardResolutionDescription": "구독을 위한 와일드카드 도메인 해상도 활성화"
},
"confirm": "확인",
"confirmDelete": "삭제하시겠습니까?",
"copy": "복사",
"copySuccess": "성공적으로 복사되었습니다",
"create": "생성",
"createSubscribe": "새 구독 생성",
"createSuccess": "생성 성공",
"delete": "삭제",
"deleteSuccess": "삭제 성공",
"deleteWarning": "삭제 후 데이터는 복구할 수 없으니 신중하게 진행하세요.",
"deviceLimit": "장치 수/대",
"edit": "편집",
"editSubscribe": "구독 편집",
"form": {
"Day": "일",
"Hour": "시",
"Minute": "분",
"Month": "월",
"NoLimit": "제한 없음",
"Year": "년",
"annualReset": "연간 초기화",
"basic": "기본",
"cancel": "취소",
"confirm": "확인",
"deductionRatio": "자동/수동 공제 설정",
"deductionRatioDescription": "공제에 사용됩니다. 기본적으로 시스템은 자동 계산 알고리즘을 채택합니다. 수동 비율이 제공되면 시스템은 시간 및 트래픽 비율에 따라 비율을 계산하여 총합이 100%가 되도록 합니다.",
"description": "설명",
"deviceLimit": "기기 제한",
"discount": "할인",
"discountDescription": "단가 기준으로 할인 설정",
"discountMonths": "개월",
"discountPercent": "할인율",
"discount_price": "할인가",
"duration": "기간 (개월)",
"groupId": "구독 그룹",
"inventory": "구독 한도",
"monthlyReset": "월별 초기화",
"name": "이름",
"noLimit": "무제한",
"noReset": "초기화 없음",
"pricing": "가격",
"purchaseWithDiscount": "공제 허용",
"purchaseWithDiscountDescription": "구독 취소 기능을 활성화하거나 비활성화합니다. 활성화 후, 시스템은 설정된 규칙과 비율에 따라 공제 처리를 수행하며, 남은 가치는 잔액으로 반환됩니다.",
"quota": "구매 한도",
"renewalReset": "갱신 초기화",
"renewalResetDescription": "갱신 시 초기화 주기",
"replacement": "재설정 가격 (매회)",
"resetCycle": "초기화 주기",
"resetOn1st": "매월 1일 초기화",
"selectResetCycle": "초기화 주기를 선택하세요",
"selectSubscribeGroup": "구독 그룹을 선택하세요",
"selectUnitTime": "단위 시간을 선택하세요",
"server": "서버",
"serverGroup": "서버 그룹",
"servers": "서버",
"speedLimit": "속도 제한 ",
"traffic": "트래픽",
"unitPrice": "단가",
"unitTime": "단위 시간"
"description": "구독 설정 및 클라이언트 템플릿 구성",
"messages": {
"noClients": "클라이언트 템플릿 없음",
"noClientsDescription": "아직 구성된 클라이언트 템플릿이 없습니다. 첫 번째 템플릿을 추가하여 시작하세요."
},
"group": {
"actions": "작업",
"cancel": "취소",
"confirm": "확인",
"confirmDelete": "삭제하시겠습니까?",
"create": "생성",
"createSubscribeGroup": "새 구독 그룹 생성",
"createSuccess": "생성 성공",
"delete": "삭제",
"deleteSuccess": "삭제 성공",
"deleteWarning": "삭제 후 데이터는 복구할 수 없습니다. 신중하게 진행하세요.",
"description": "설명",
"edit": "편집",
"editSubscribeGroup": "구독 그룹 편집",
"form": {
"cancel": "취소",
"confirm": "확인",
"description": "설명",
"name": "이름"
"protocol": {
"clients": {
"clash": {
"features": "대규모 생태계, 포괄적인 규칙, 활발한 커뮤니티"
},
"egern": {
"features": "현대적인 iOS 클라이언트, 뛰어난 성능"
},
"hiddify": {
"features": "다중 플랫폼, 포괄적인 프로토콜, 초보자 친화적"
},
"loon": {
"features": "iOS 고급 클라이언트, 풍부한 규칙, 아름다운 인터페이스"
},
"netch": {
"features": "게임 중심의 프록시 클라이언트"
},
"quantumult": {
"features": "iOS 고급 클라이언트, 유연한 규칙, 풍부한 스크립트"
},
"shadowrocket": {
"features": "클래식 iOS 클라이언트, 유연한 구성"
},
"singbox": {
"features": "최신 커널, 공식 GUI, 다중 플랫폼 지원"
},
"stash": {
"features": "현대적인 모바일 UI, 포괄적인 프로토콜"
},
"surfboard": {
"features": "무료, 활발한 개발, 현대적인 인터페이스"
},
"surge": {
"features": "프리미엄 iOS/Mac 도구, 강력한 기능"
},
"v2box": {
"features": "사용자 친화적인 V2Ray 클라이언트"
},
"v2rayn": {
"features": "인기 있는 Windows 클라이언트, 기능이 풍부함"
},
"v2rayng": {
"features": "인기 있는 Android 클라이언트, 경량"
}
},
"name": "이름",
"title": "구독 그룹 목록",
"updateSuccess": "업데이트 성공",
"updatedAt": "업데이트 시간"
"description": "프록시 클라이언트를 위한 구독 구성 템플릿 관리",
"features": "주요 기능",
"platforms": "플랫폼",
"subscribeTemplate": "구독 템플릿 구성",
"templateContent": "템플릿 내용",
"templatePlaceholder": "클라이언트 구성 템플릿을 입력하세요...",
"title": "클라이언트 구독 템플릿"
},
"inventory": "구독 한도",
"name": "이름",
"quota": "구매 제한/회",
"replacement": "가격 재설정/회",
"sell": "판매",
"show": "표시",
"sold": "구독 수",
"subscribe": "구독",
"subscribeGroup": "구독 그룹",
"tabs": {
"subscribe": "구독",
"subscribeApp": "앱 구성",
"subscribeConfig": "구독 구성",
"subscribeGroup": "구독 그룹"
},
"traffic": "트래픽",
"unitPrice": "단가",
"updateSuccess": "업데이트 성공"
"title": "구독 관리"
}

View File

@ -1,32 +1,25 @@
{
"ADS Config": "ADS-konfigurasjon",
"Announcement Management": "Kunngjøringsadministrasjon",
"Apple": "Apple-ID",
"Application Management": "Applikasjonsadministrasjon",
"Auth Control": "Autentiseringskontroll",
"Coupon Management": "Kupongadministrasjon",
"Dashboard": "Dashbord",
"Device": "Enhet",
"Document Management": "Dokumenthåndtering",
"Email": "E-post",
"Facebook": "Facebook",
"Finance": "Finans",
"General": "Generell",
"GitHub": "GitHub",
"Google": "Google",
"Order Management": "Bestillingsadministrasjon",
"Payment Config": "Betalingskonfigurasjon",
"Phone Number": "Telefonnummer",
"Product Management": "Produktledelse",
"Protocol Management": "Protokolladministrasjon",
"Rule Management": "Regeladministrasjon",
"Server": "Tjeneste",
"Server Management": "Serveradministrasjon",
"Settings": "Innstillinger",
"Subscribe Management": "Abonnementsadministrasjon",
"Subscribe Config": "Abonnementsinnstillinger",
"System Config": "Systemkonfigurasjon",
"System Management": "Systemadministrasjon",
"System Tool": "Systemverktøy",
"Telegram": "Telegram",
"Ticket Management": "Billettadministrasjon",
"Twitter": "Twitter",
"User": "Bruker",
"User Detail": "Brukerdetaljer",
"User Management": "Brukeradministrasjon"

View File

@ -0,0 +1,160 @@
{
"actions": "handlinger",
"app": {
"appDownloadURL": "App Nedlastings-URL",
"appIcon": "App-ikon",
"appList": "Appliste",
"appName": "App-navn",
"backupDomains": "Sikkerhetskopidomener",
"backupDomainsDescription": "Liste over sikkerhetskopidomener for domeneresolusjon, ett domene per linje",
"batchDelete": "Slett i gruppe",
"cancel": "Avbryt",
"communicationKey": "Kommunikasjonsnøkkel",
"communicationKeyDescription": "Nøkkel brukt for klientkommunikasjon",
"config": "Konfigurasjon",
"configApp": "Appkonfigurasjon",
"confirm": "Bekreft",
"confirmDelete": "Bekreft sletting",
"create": "Opprett",
"createApp": "Opprett app",
"createSuccess": "Opprettet vellykket",
"defaultVersion": "Standard",
"delete": "Slett",
"deleteWarning": "Denne handlingen kan ikke angres",
"describeDescription": "Brukes til å beskrive applikasjonen, vises i applisten",
"description": "Beskrivelse",
"downloadLink": "Nedlastingslenke",
"edit": "Rediger",
"editApp": "Rediger app",
"encryption": "Krypteringsmetode",
"encryptionDescription": "Velg krypteringsmetoden for klientkommunikasjon. Hvis valgt, vil klienten bruke denne metoden for å kommunisere med serveren",
"nameDescription": "Applikasjonsnavn, vises i applisten",
"platform": "Plattform",
"selectApp": "Velg App",
"selectAppDescription": "Velg appen du vil konfigurere, alle innstillinger vil gjelde for den valgte appen",
"startupPicture": "Oppstartsbilde",
"startupPictureDescription": "Oppstartsbilde, støtter nettverks- og lokale bilder. For nettverksbilder, vennligst skriv inn den fullstendige bilde-URLen",
"startupPicturePreview": "Forhåndsvisning av oppstartsbilde",
"startupPictureSkip": "Tid for å hoppe over oppstartsbilde",
"startupPictureSkipDescription": "Visningstid for oppstartsbilde i sekunder, skriv inn 0 for å ikke vise",
"subscriptionProtocol": "Abonnementsprotokoll",
"updateSuccess": "Oppdatert vellykket",
"version": "Versjon"
},
"cancel": "Avbryt",
"config": {
"singleSubscriptionMode": "Enkelt Abonnementsmodus",
"subscriptionDomain": "Abonnementsdomene",
"subscriptionDomainDescription": "Brukes for abonnement; la stå tomt for å bruke nettstedets domene",
"subscriptionDomainPlaceholder": "Skriv inn abonnementsdomene, ett per linje",
"subscriptionPath": "Abonnementssti",
"subscriptionPathDescription": "Brukes for abonnement; sørg for å starte systemet på nytt etter endring for optimal ytelse",
"subscriptionPathPlaceholder": "Skriv inn",
"updateSuccess": "Oppdatering vellykket",
"wildcardResolution": "Jokertegnoppløsning",
"wildcardResolutionDescription": "Brukes for abonnement"
},
"confirm": "Bekreft",
"confirmDelete": "Er du sikker på at du vil slette?",
"copy": "Kopier",
"copySuccess": "Kopiert vellykket",
"create": "Opprett",
"createSubscribe": "Opprett abonnement",
"createSuccess": "Opprettelse vellykket",
"delete": "slett",
"deleteSuccess": "Sletting vellykket",
"deleteWarning": "Data kan ikke gjenopprettes etter sletting, vennligst vær forsiktig.",
"deviceLimit": "Enheter/antall",
"edit": "rediger",
"editSubscribe": "Rediger abonnement",
"form": {
"Day": "Dag",
"Hour": "Time",
"Minute": "Minutt",
"Month": "Måned",
"NoLimit": "Ingen grense",
"Year": "År",
"annualReset": "Årlig Tilbakestilling",
"basic": "Grunnleggende",
"cancel": "Avbryt",
"confirm": "Bekreft",
"deductionRatio": "Automatisk/Manuell Fradragskonfigurasjon",
"deductionRatioDescription": "Brukes for fradrag. Som standard benytter systemet en automatisk beregningsalgoritme. Når en manuell andel er oppgitt, beregner systemet proporsjoner basert på tids- og trafikkforhold, og sikrer at totalen utgjør 100%.",
"description": "Beskrivelse",
"deviceLimit": "Enhetsbegrensning",
"discount": "Rabatt",
"discountDescription": "Sett rabatt basert på enhetspris",
"discountMonths": "Måneder",
"discountPercent": "Rabattprosent",
"discount_price": "Rabattert pris",
"duration": "Varighet (måneder)",
"groupId": "Abonnementsgruppe",
"inventory": "Abonnementsgrense",
"monthlyReset": "Månedlig Tilbakestilling",
"name": "Navn",
"noLimit": "Ubegrenset",
"noReset": "Ingen Tilbakestilling",
"pricing": "Prissetting",
"purchaseWithDiscount": "Tillat Fradrag",
"purchaseWithDiscountDescription": "Aktiver eller deaktiver funksjonaliteten for avmelding. Etter aktivering vil systemet utføre fradragsbehandling i henhold til de konfigurerte reglene og proporsjonene, og den gjenværende verdien vil bli returnert til saldoen",
"quota": "Kjøpskvote",
"renewalReset": "Fornyelsestilbakestilling",
"renewalResetDescription": "Tilbakestill syklus ved fornyelse",
"replacement": "Erstatningspris (per gang)",
"resetCycle": "Tilbakestill Syklus",
"resetOn1st": "Tilbakestill den 1.",
"selectResetCycle": "Vennligst velg en tilbakestillingssyklus",
"selectSubscribeGroup": "Vennligst velg abonnementsgruppe",
"selectUnitTime": "Vennligst velg enhetstid",
"server": "Tjeneste",
"serverGroup": "Tjenestegruppe",
"servers": "Servere",
"speedLimit": "Hastighetsbegrensning ",
"traffic": "Trafikk",
"unitPrice": "Enhetspris",
"unitTime": "Enhetstid"
},
"group": {
"actions": "Handlinger",
"cancel": "Avbryt",
"confirm": "Bekreft",
"confirmDelete": "Er du sikker på at du vil slette?",
"create": "Opprett",
"createSubscribeGroup": "Opprett ny abonnementsgruppe",
"createSuccess": "Opprettelse vellykket",
"delete": "Slett",
"deleteSuccess": "Sletting vellykket",
"deleteWarning": "Data kan ikke gjenopprettes etter sletting, vær forsiktig.",
"description": "Beskrivelse",
"edit": "Rediger",
"editSubscribeGroup": "Rediger abonnementsgruppe",
"form": {
"cancel": "Avbryt",
"confirm": "Bekreft",
"description": "Beskrivelse",
"name": "Navn"
},
"name": "Navn",
"title": "Liste over abonnementsgrupper",
"updateSuccess": "Oppdatering vellykket",
"updatedAt": "Oppdatert"
},
"inventory": "Abonnementsgrense",
"name": "Navn",
"quota": "Kjøpsgrense/gang",
"replacement": "Tilbakestill pris/gang",
"sell": "Salg",
"show": "Vis",
"sold": "Abonnementsantall",
"subscribe": "Abonner",
"subscribeGroup": "Abonner på gruppe",
"tabs": {
"subscribe": "Abonner",
"subscribeApp": "App-konfigurasjon",
"subscribeConfig": "Abonnementskonfigurasjon",
"subscribeGroup": "Abonner gruppe"
},
"traffic": "trafikk",
"unitPrice": "Enhetspris",
"updateSuccess": "Oppdatering vellykket"
}

View File

@ -1,161 +1,89 @@
{
"actions": "handlinger",
"app": {
"appDownloadURL": "App Nedlastings-URL",
"appIcon": "App-ikon",
"appList": "Appliste",
"appName": "App-navn",
"backupDomains": "Sikkerhetskopidomener",
"backupDomainsDescription": "Liste over sikkerhetskopidomener for domeneresolusjon, ett domene per linje",
"batchDelete": "Slett i gruppe",
"actions": {
"cancel": "Avbryt",
"communicationKey": "Kommunikasjonsnøkkel",
"communicationKeyDescription": "Nøkkel brukt for klientkommunikasjon",
"config": "Konfigurasjon",
"configApp": "Appkonfigurasjon",
"confirm": "Bekreft",
"confirmDelete": "Bekreft sletting",
"create": "Opprett",
"createApp": "Opprett app",
"createSuccess": "Opprettet vellykket",
"defaultVersion": "Standard",
"delete": "Slett",
"deleteWarning": "Denne handlingen kan ikke angres",
"describeDescription": "Brukes til å beskrive applikasjonen, vises i applisten",
"description": "Beskrivelse",
"downloadLink": "Nedlastingslenke",
"edit": "Rediger",
"editApp": "Rediger app",
"encryption": "Krypteringsmetode",
"encryptionDescription": "Velg krypteringsmetoden for klientkommunikasjon. Hvis valgt, vil klienten bruke denne metoden for å kommunisere med serveren",
"nameDescription": "Applikasjonsnavn, vises i applisten",
"platform": "Plattform",
"selectApp": "Velg App",
"selectAppDescription": "Velg appen du vil konfigurere, alle innstillinger vil gjelde for den valgte appen",
"startupPicture": "Oppstartsbilde",
"startupPictureDescription": "Oppstartsbilde, støtter nettverks- og lokale bilder. For nettverksbilder, vennligst skriv inn den fullstendige bilde-URLen",
"startupPicturePreview": "Forhåndsvisning av oppstartsbilde",
"startupPictureSkip": "Tid for å hoppe over oppstartsbilde",
"startupPictureSkipDescription": "Visningstid for oppstartsbilde i sekunder, skriv inn 0 for å ikke vise",
"subscriptionProtocol": "Abonnementsprotokoll",
"updateSuccess": "Oppdatert vellykket",
"version": "Versjon"
"save": "Lagre",
"saveTemplate": "Lagre Mal"
},
"cancel": "Avbryt",
"config": {
"description": "Administrer innstillinger for abonnementsystemet",
"restrictUserAgent": "Bruker-Agent Restriksjon",
"restrictUserAgentDescription": "Aktiver tilgangsrestriksjoner basert på Bruker-Agent",
"singleSubscriptionMode": "Enkelt Abonnementsmodus",
"singleSubscriptionModeDescription": "Når aktivert, vil alle brukerabonnementer bli konvertert til saldo",
"singleSubscriptionModeDescription": "Begrens brukere til ett aktivt abonnement. Eksisterende abonnementer påvirkes ikke",
"subscriptionDomain": "Abonnementsdomene",
"subscriptionDomainDescription": "Brukes for abonnement; la stå tomt for å bruke nettstedets domene",
"subscriptionDomainDescription": "Egendefinert domene for abonnementslenker",
"subscriptionDomainPlaceholder": "Skriv inn abonnementsdomene, ett per linje",
"subscriptionPath": "Abonnementssti",
"subscriptionPathDescription": "Brukes for abonnement; sørg for å starte systemet på nytt etter endring for optimal ytelse",
"subscriptionPathPlaceholder": "Skriv inn",
"updateSuccess": "Oppdatering vellykket",
"wildcardResolution": "Jokertegnoppløsning",
"wildcardResolutionDescription": "Brukes for abonnement"
"subscriptionPath": "Abonnementsbane",
"subscriptionPathDescription": "Egendefinert bane for abonnementsendepunkter (bedre ytelse etter systemrestart)",
"subscriptionPathPlaceholder": "Skriv inn abonnementsbane",
"title": "Abonnementsinnstillinger",
"updateError": "Oppdatering feilet",
"updateSuccess": "Innstillinger oppdatert",
"userAgentWhitelist": "Bruker-Agent Hviteliste",
"userAgentWhitelistDescription": "Tillatte Bruker-Agenter for abonnementstilgang, én per linje. Innebygde maler inkluderes automatisk i hvitelisten",
"userAgentWhitelistPlaceholder": "Skriv inn tillatte Bruker-Agenter, én per linje",
"wildcardResolution": "Wildcard-oppløsning",
"wildcardResolutionDescription": "Aktiver wildcard-domeneoppløsning for abonnementer"
},
"confirm": "Bekreft",
"confirmDelete": "Er du sikker på at du vil slette?",
"copy": "Kopier",
"copySuccess": "Kopiert vellykket",
"create": "Opprett",
"createSubscribe": "Opprett abonnement",
"createSuccess": "Opprettelse vellykket",
"delete": "slett",
"deleteSuccess": "Sletting vellykket",
"deleteWarning": "Data kan ikke gjenopprettes etter sletting, vennligst vær forsiktig.",
"deviceLimit": "Enheter/antall",
"edit": "rediger",
"editSubscribe": "Rediger abonnement",
"form": {
"Day": "Dag",
"Hour": "Time",
"Minute": "Minutt",
"Month": "Måned",
"NoLimit": "Ingen grense",
"Year": "År",
"annualReset": "Årlig Tilbakestilling",
"basic": "Grunnleggende",
"cancel": "Avbryt",
"confirm": "Bekreft",
"deductionRatio": "Automatisk/Manuell Fradragskonfigurasjon",
"deductionRatioDescription": "Brukes for fradrag. Som standard benytter systemet en automatisk beregningsalgoritme. Når en manuell andel er oppgitt, beregner systemet proporsjoner basert på tids- og trafikkforhold, og sikrer at totalen utgjør 100%.",
"description": "Beskrivelse",
"deviceLimit": "Enhetsbegrensning",
"discount": "Rabatt",
"discountDescription": "Sett rabatt basert på enhetspris",
"discountMonths": "Måneder",
"discountPercent": "Rabattprosent",
"discount_price": "Rabattert pris",
"duration": "Varighet (måneder)",
"groupId": "Abonnementsgruppe",
"inventory": "Abonnementsgrense",
"monthlyReset": "Månedlig Tilbakestilling",
"name": "Navn",
"noLimit": "Ubegrenset",
"noReset": "Ingen Tilbakestilling",
"pricing": "Prissetting",
"purchaseWithDiscount": "Tillat Fradrag",
"purchaseWithDiscountDescription": "Aktiver eller deaktiver funksjonaliteten for avmelding. Etter aktivering vil systemet utføre fradragsbehandling i henhold til de konfigurerte reglene og proporsjonene, og den gjenværende verdien vil bli returnert til saldoen",
"quota": "Kjøpskvote",
"renewalReset": "Fornyelsestilbakestilling",
"renewalResetDescription": "Tilbakestill syklus ved fornyelse",
"replacement": "Erstatningspris (per gang)",
"resetCycle": "Tilbakestill Syklus",
"resetOn1st": "Tilbakestill den 1.",
"selectResetCycle": "Vennligst velg en tilbakestillingssyklus",
"selectSubscribeGroup": "Vennligst velg abonnementsgruppe",
"selectUnitTime": "Vennligst velg enhetstid",
"server": "Tjeneste",
"serverGroup": "Tjenestegruppe",
"servers": "Servere",
"speedLimit": "Hastighetsbegrensning ",
"traffic": "Trafikk",
"unitPrice": "Enhetspris",
"unitTime": "Enhetstid"
"description": "Konfigurer abonnementsinnstillinger og klientmaler",
"messages": {
"noClients": "Ingen Klientmaler",
"noClientsDescription": "Ingen klientmaler er konfigurert ennå. Legg til din første mal for å komme i gang."
},
"group": {
"actions": "Handlinger",
"cancel": "Avbryt",
"confirm": "Bekreft",
"confirmDelete": "Er du sikker på at du vil slette?",
"create": "Opprett",
"createSubscribeGroup": "Opprett ny abonnementsgruppe",
"createSuccess": "Opprettelse vellykket",
"delete": "Slett",
"deleteSuccess": "Sletting vellykket",
"deleteWarning": "Data kan ikke gjenopprettes etter sletting, vær forsiktig.",
"description": "Beskrivelse",
"edit": "Rediger",
"editSubscribeGroup": "Rediger abonnementsgruppe",
"form": {
"cancel": "Avbryt",
"confirm": "Bekreft",
"description": "Beskrivelse",
"name": "Navn"
"protocol": {
"clients": {
"clash": {
"features": "Stort økosystem, omfattende regler, aktivt fellesskap"
},
"egern": {
"features": "Moderne iOS-klient, utmerket ytelse"
},
"hiddify": {
"features": "Flere plattformer, omfattende protokoller, nybegynnervennlig"
},
"loon": {
"features": "Avansert iOS-klient, rike regler, vakkert grensesnitt"
},
"netch": {
"features": "Spillfokusert proxy-klient"
},
"quantumult": {
"features": "Avansert iOS-klient, fleksible regler, rike skript"
},
"shadowrocket": {
"features": "Klassisk iOS-klient, fleksibel konfigurasjon"
},
"singbox": {
"features": "Nyeste kjerne, offisiell GUI, støtte for flere plattformer"
},
"stash": {
"features": "Moderne mobilgrensesnitt, omfattende protokoller"
},
"surfboard": {
"features": "Gratis, aktiv utvikling, moderne grensesnitt"
},
"surge": {
"features": "Premium iOS/Mac-verktøy, kraftige funksjoner"
},
"v2box": {
"features": "Brukervennlig V2Ray-klient"
},
"v2rayn": {
"features": "Populær Windows-klient, funksjonsrik"
},
"v2rayng": {
"features": "Populær Android-klient, lettvekts"
}
},
"name": "Navn",
"title": "Liste over abonnementsgrupper",
"updateSuccess": "Oppdatering vellykket",
"updatedAt": "Oppdatert"
"description": "Administrer abonnementsmaler for proxy-klienter",
"features": "Nøkkelfunksjoner",
"platforms": "Plattformer",
"subscribeTemplate": "Abonnementsmal Konfigurasjon",
"templateContent": "Malinnhold",
"templatePlaceholder": "Skriv inn klientkonfigurasjonsmal...",
"title": "Klient Abonnementsmaler"
},
"inventory": "Abonnementsgrense",
"name": "Navn",
"quota": "Kjøpsgrense/gang",
"replacement": "Tilbakestill pris/gang",
"sell": "Salg",
"show": "Vis",
"sold": "Abonnementsantall",
"subscribe": "Abonner",
"subscribeGroup": "Abonner på gruppe",
"tabs": {
"subscribe": "Abonner",
"subscribeApp": "App-konfigurasjon",
"subscribeConfig": "Abonnementskonfigurasjon",
"subscribeGroup": "Abonner gruppe"
},
"traffic": "trafikk",
"unitPrice": "Enhetspris",
"updateSuccess": "Oppdatering vellykket"
"title": "Abonnementsadministrasjon"
}

View File

@ -1,32 +1,25 @@
{
"ADS Config": "Konfiguracja ADS",
"Announcement Management": "Zarządzanie ogłoszeniami",
"Apple": "Identyfikator Apple",
"Application Management": "Zarządzanie aplikacjami",
"Auth Control": "Kontrola autoryzacji",
"Coupon Management": "Zarządzanie kuponami",
"Dashboard": "Pulpit",
"Device": "Urządzenie",
"Document Management": "Zarządzanie dokumentami",
"Email": "E-mail",
"Facebook": "Facebook",
"Finance": "Finanse",
"General": "Ogólne",
"GitHub": "GitHub",
"Google": "Google",
"Order Management": "Zarządzanie zamówieniami",
"Payment Config": "Konfiguracja płatności",
"Phone Number": "Numer telefonu",
"Product Management": "Zarządzanie Produktem",
"Protocol Management": "Zarządzanie Protokołem",
"Rule Management": "Zarządzanie regułami",
"Server": "Serwer",
"Server Management": "Zarządzanie serwerem",
"Settings": "Ustawienia",
"Subscribe Management": "Zarządzanie subskrypcjami",
"Subscribe Config": "Konfiguracja subskrypcji",
"System Config": "Konfiguracja systemu",
"System Management": "Zarządzanie systemem",
"System Tool": "Narzędzie systemowe",
"Telegram": "Telegram",
"Ticket Management": "Zarządzanie zgłoszeniami",
"Twitter": "Twitter",
"User": "Użytkownik",
"User Detail": "Szczegóły użytkownika",
"User Management": "Zarządzanie użytkownikami"

View File

@ -0,0 +1,160 @@
{
"actions": "działania",
"app": {
"appDownloadURL": "URL pobierania aplikacji",
"appIcon": "Ikona aplikacji",
"appList": "Lista aplikacji",
"appName": "Nazwa aplikacji",
"backupDomains": "Lista domen zapasowych",
"backupDomainsDescription": "Lista domen zapasowych do rozwiązywania domen, jedna domena na linię",
"batchDelete": "Usuń zbiorczo",
"cancel": "Anuluj",
"communicationKey": "Klucz komunikacyjny",
"communicationKeyDescription": "Klucz używany do komunikacji z klientem",
"config": "Konfiguracja",
"configApp": "Konfiguracja aplikacji",
"confirm": "Potwierdź",
"confirmDelete": "Potwierdź usunięcie",
"create": "Utwórz",
"createApp": "Utwórz aplikację",
"createSuccess": "Utworzono pomyślnie",
"defaultVersion": "Domyślna",
"delete": "Usuń",
"deleteWarning": "Tej operacji nie można cofnąć",
"describeDescription": "Służy do opisu aplikacji, wyświetlany na liście aplikacji",
"description": "Opis",
"downloadLink": "Link do pobrania",
"edit": "Edytuj",
"editApp": "Edytuj aplikację",
"encryption": "Metoda szyfrowania",
"encryptionDescription": "Wybierz metodę szyfrowania dla komunikacji z klientem. Jeśli zostanie wybrana, klient będzie używał tej metody do komunikacji z serwerem",
"nameDescription": "Nazwa aplikacji, wyświetlana na liście aplikacji",
"platform": "Platforma",
"selectApp": "Wybierz aplikację",
"selectAppDescription": "Wybierz aplikację do skonfigurowania, wszystkie ustawienia będą dotyczyć wybranej aplikacji",
"startupPicture": "Obraz startowy",
"startupPictureDescription": "Obraz startowy, obsługuje obrazy sieciowe i lokalne. Dla obrazów sieciowych, proszę wprowadzić pełny URL obrazu",
"startupPicturePreview": "Podgląd obrazu startowego",
"startupPictureSkip": "Czas pominięcia obrazu startowego",
"startupPictureSkipDescription": "Czas wyświetlania obrazu startowego w sekundach, wprowadź 0, aby nie wyświetlać",
"subscriptionProtocol": "Protokół subskrypcji",
"updateSuccess": "Zaktualizowano pomyślnie",
"version": "Wersja"
},
"cancel": "Anuluj",
"config": {
"singleSubscriptionMode": "Tryb pojedynczej subskrypcji",
"subscriptionDomain": "Domena subskrypcji",
"subscriptionDomainDescription": "Używane do subskrypcji; pozostaw puste, aby użyć domeny witryny",
"subscriptionDomainPlaceholder": "Wprowadź domenę subskrypcji, jedna na linię",
"subscriptionPath": "Ścieżka subskrypcji",
"subscriptionPathDescription": "Używane do subskrypcji; upewnij się, że zrestartujesz system po modyfikacji dla optymalnej wydajności",
"subscriptionPathPlaceholder": "Wprowadź",
"updateSuccess": "Zaktualizowano pomyślnie",
"wildcardResolution": "Rozwiązanie wieloznaczne",
"wildcardResolutionDescription": "Używane do subskrypcji"
},
"confirm": "Potwierdź",
"confirmDelete": "Czy na pewno chcesz usunąć?",
"copy": "Kopiuj",
"copySuccess": "Skopiowano pomyślnie",
"create": "Utwórz",
"createSubscribe": "Utwórz subskrypcję",
"createSuccess": "Utworzono pomyślnie",
"delete": "usuń",
"deleteSuccess": "Usunięto pomyślnie",
"deleteWarning": "Po usunięciu danych nie można ich odzyskać, proszę postępować ostrożnie.",
"deviceLimit": "Liczba urządzeń/szt.",
"edit": "edytuj",
"editSubscribe": "Edytuj subskrypcję",
"form": {
"Day": "Dzień",
"Hour": "Godzina",
"Minute": "Minuta",
"Month": "Miesiąc",
"NoLimit": "Bez ograniczeń",
"Year": "Rok",
"annualReset": "Roczny Reset",
"basic": "Podstawowy",
"cancel": "Anuluj",
"confirm": "Potwierdź",
"deductionRatio": "Automatyczna/Ręczna Konfiguracja Potrąceń",
"deductionRatioDescription": "Używane do potrąceń. Domyślnie system stosuje automatyczny algorytm obliczeniowy. Gdy podany jest ręczny współczynnik, system oblicza proporcje na podstawie czasu i ruchu, zapewniając, że suma wynosi 100%.",
"description": "Opis",
"deviceLimit": "Limit urządzeń",
"discount": "Zniżka",
"discountDescription": "Ustaw zniżkę na podstawie ceny jednostkowej",
"discountMonths": "miesiące",
"discountPercent": "Procent zniżki",
"discount_price": "Cena po zniżce",
"duration": "Czas trwania (miesiące)",
"groupId": "Grupa subskrypcyjna",
"inventory": "Limit subskrypcji",
"monthlyReset": "Miesięczny Reset",
"name": "Nazwa",
"noLimit": "Bez ograniczeń",
"noReset": "Brak Resetu",
"pricing": "Cennik",
"purchaseWithDiscount": "Zezwól na Potrącenie",
"purchaseWithDiscountDescription": "Włącz lub wyłącz funkcję rezygnacji z subskrypcji. Po aktywacji system przeprowadzi proces odliczenia zgodnie z skonfigurowanymi zasadami i proporcjami, a pozostała wartość zostanie zwrócona na saldo",
"quota": "Limit zakupu",
"renewalReset": "Reset przy Odnowieniu",
"renewalResetDescription": "Reset cyklu przy odnowieniu",
"replacement": "Cena wymiany (za każdym razem)",
"resetCycle": "Cykl Resetowania",
"resetOn1st": "Reset 1-go",
"selectResetCycle": "Proszę wybrać cykl resetowania",
"selectSubscribeGroup": "Wybierz grupę subskrypcji",
"selectUnitTime": "Proszę wybrać jednostkę czasu",
"server": "Serwer",
"serverGroup": "Grupa serwerów",
"servers": "Serwery",
"speedLimit": "Limit prędkości ",
"traffic": "Ruch",
"unitPrice": "Cena jednostkowa",
"unitTime": "Jednostka czasu"
},
"group": {
"actions": "Działania",
"cancel": "Anuluj",
"confirm": "Potwierdź",
"confirmDelete": "Czy na pewno chcesz usunąć?",
"create": "Utwórz",
"createSubscribeGroup": "Utwórz nową grupę subskrypcji",
"createSuccess": "Utworzono pomyślnie",
"delete": "Usuń",
"deleteSuccess": "Usunięto pomyślnie",
"deleteWarning": "Po usunięciu danych nie można ich odzyskać, proszę postępować ostrożnie.",
"description": "Opis",
"edit": "Edytuj",
"editSubscribeGroup": "Edytuj grupę subskrypcji",
"form": {
"cancel": "Anuluj",
"confirm": "Potwierdź",
"description": "Opis",
"name": "Nazwa"
},
"name": "Nazwa",
"title": "Lista grup subskrypcji",
"updateSuccess": "Zaktualizowano pomyślnie",
"updatedAt": "Czas aktualizacji"
},
"inventory": "Limit subskrypcji",
"name": "Nazwa",
"quota": "Limit zakupu/raz",
"replacement": "Zresetuj cenę/raz",
"sell": "Sprzedaż",
"show": "Pokaż",
"sold": "Liczba subskrypcji",
"subscribe": "Subskrybuj",
"subscribeGroup": "Subskrybuj grupę",
"tabs": {
"subscribe": "Subskrybuj",
"subscribeApp": "Konfiguracja aplikacji",
"subscribeConfig": "Konfiguracja subskrypcji",
"subscribeGroup": "Grupa subskrypcji"
},
"traffic": "ruch",
"unitPrice": "Cena jednostkowa",
"updateSuccess": "Aktualizacja zakończona pomyślnie"
}

View File

@ -1,161 +1,89 @@
{
"actions": "działania",
"app": {
"appDownloadURL": "URL pobierania aplikacji",
"appIcon": "Ikona aplikacji",
"appList": "Lista aplikacji",
"appName": "Nazwa aplikacji",
"backupDomains": "Lista domen zapasowych",
"backupDomainsDescription": "Lista domen zapasowych do rozwiązywania domen, jedna domena na linię",
"batchDelete": "Usuń zbiorczo",
"actions": {
"cancel": "Anuluj",
"communicationKey": "Klucz komunikacyjny",
"communicationKeyDescription": "Klucz używany do komunikacji z klientem",
"config": "Konfiguracja",
"configApp": "Konfiguracja aplikacji",
"confirm": "Potwierdź",
"confirmDelete": "Potwierdź usunięcie",
"create": "Utwórz",
"createApp": "Utwórz aplikację",
"createSuccess": "Utworzono pomyślnie",
"defaultVersion": "Domyślna",
"delete": "Usuń",
"deleteWarning": "Tej operacji nie można cofnąć",
"describeDescription": "Służy do opisu aplikacji, wyświetlany na liście aplikacji",
"description": "Opis",
"downloadLink": "Link do pobrania",
"edit": "Edytuj",
"editApp": "Edytuj aplikację",
"encryption": "Metoda szyfrowania",
"encryptionDescription": "Wybierz metodę szyfrowania dla komunikacji z klientem. Jeśli zostanie wybrana, klient będzie używał tej metody do komunikacji z serwerem",
"nameDescription": "Nazwa aplikacji, wyświetlana na liście aplikacji",
"platform": "Platforma",
"selectApp": "Wybierz aplikację",
"selectAppDescription": "Wybierz aplikację do skonfigurowania, wszystkie ustawienia będą dotyczyć wybranej aplikacji",
"startupPicture": "Obraz startowy",
"startupPictureDescription": "Obraz startowy, obsługuje obrazy sieciowe i lokalne. Dla obrazów sieciowych, proszę wprowadzić pełny URL obrazu",
"startupPicturePreview": "Podgląd obrazu startowego",
"startupPictureSkip": "Czas pominięcia obrazu startowego",
"startupPictureSkipDescription": "Czas wyświetlania obrazu startowego w sekundach, wprowadź 0, aby nie wyświetlać",
"subscriptionProtocol": "Protokół subskrypcji",
"updateSuccess": "Zaktualizowano pomyślnie",
"version": "Wersja"
"save": "Zapisz",
"saveTemplate": "Zapisz Szablon"
},
"cancel": "Anuluj",
"config": {
"singleSubscriptionMode": "Tryb pojedynczej subskrypcji",
"singleSubscriptionModeDescription": "Po włączeniu wszystkie subskrypcje użytkowników zostaną przekształcone na saldo",
"subscriptionDomain": "Domena subskrypcji",
"subscriptionDomainDescription": "Używane do subskrypcji; pozostaw puste, aby użyć domeny witryny",
"subscriptionDomainPlaceholder": "Wprowadź domenę subskrypcji, jedna na linię",
"subscriptionPath": "Ścieżka subskrypcji",
"subscriptionPathDescription": "Używane do subskrypcji; upewnij się, że zrestartujesz system po modyfikacji dla optymalnej wydajności",
"subscriptionPathPlaceholder": "Wprowadź",
"updateSuccess": "Zaktualizowano pomyślnie",
"wildcardResolution": "Rozwiązanie wieloznaczne",
"wildcardResolutionDescription": "Używane do subskrypcji"
"description": "Zarządzaj ustawieniami systemu subskrypcyjnego",
"restrictUserAgent": "Ograniczenie User-Agent",
"restrictUserAgentDescription": "Włącz ograniczenia dostępu na podstawie User-Agent",
"singleSubscriptionMode": "Tryb Pojedynczej Subskrypcji",
"singleSubscriptionModeDescription": "Przekształć wszystkie subskrypcje użytkowników w saldo konta",
"subscriptionDomain": "Domena Subskrypcyjna",
"subscriptionDomainDescription": "Niestandardowa domena dla linków subskrypcyjnych",
"subscriptionDomainPlaceholder": "Wprowadź domenę subskrypcyjną, jedna na linię",
"subscriptionPath": "Ścieżka Subskrypcyjna",
"subscriptionPathDescription": "Niestandardowa ścieżka dla punktów końcowych subskrypcji (lepsza wydajność po restarcie systemu)",
"subscriptionPathPlaceholder": "Wprowadź ścieżkę subskrypcyjną",
"title": "Konfiguracja Subskrypcji",
"updateError": "Aktualizacja nie powiodła się",
"updateSuccess": "Ustawienia zaktualizowane pomyślnie",
"userAgentWhitelist": "Biała lista User-Agent",
"userAgentWhitelistDescription": "Dozwolone User-Agents do dostępu subskrypcyjnego, jeden na linię. Wbudowane szablony są automatycznie dodawane do białej listy",
"userAgentWhitelistPlaceholder": "Wprowadź dozwolone User-Agents, jeden na linię",
"wildcardResolution": "Rozwiązywanie Dzikich Znaków",
"wildcardResolutionDescription": "Włącz rozwiązywanie dzikich znaków dla subskrypcji"
},
"confirm": "Potwierdź",
"confirmDelete": "Czy na pewno chcesz usunąć?",
"copy": "Kopiuj",
"copySuccess": "Skopiowano pomyślnie",
"create": "Utwórz",
"createSubscribe": "Utwórz subskrypcję",
"createSuccess": "Utworzono pomyślnie",
"delete": "usuń",
"deleteSuccess": "Usunięto pomyślnie",
"deleteWarning": "Po usunięciu danych nie można ich odzyskać, proszę postępować ostrożnie.",
"deviceLimit": "Liczba urządzeń/szt.",
"edit": "edytuj",
"editSubscribe": "Edytuj subskrypcję",
"form": {
"Day": "Dzień",
"Hour": "Godzina",
"Minute": "Minuta",
"Month": "Miesiąc",
"NoLimit": "Bez ograniczeń",
"Year": "Rok",
"annualReset": "Roczny Reset",
"basic": "Podstawowy",
"cancel": "Anuluj",
"confirm": "Potwierdź",
"deductionRatio": "Automatyczna/Ręczna Konfiguracja Potrąceń",
"deductionRatioDescription": "Używane do potrąceń. Domyślnie system stosuje automatyczny algorytm obliczeniowy. Gdy podany jest ręczny współczynnik, system oblicza proporcje na podstawie czasu i ruchu, zapewniając, że suma wynosi 100%.",
"description": "Opis",
"deviceLimit": "Limit urządzeń",
"discount": "Zniżka",
"discountDescription": "Ustaw zniżkę na podstawie ceny jednostkowej",
"discountMonths": "miesiące",
"discountPercent": "Procent zniżki",
"discount_price": "Cena po zniżce",
"duration": "Czas trwania (miesiące)",
"groupId": "Grupa subskrypcyjna",
"inventory": "Limit subskrypcji",
"monthlyReset": "Miesięczny Reset",
"name": "Nazwa",
"noLimit": "Bez ograniczeń",
"noReset": "Brak Resetu",
"pricing": "Cennik",
"purchaseWithDiscount": "Zezwól na Potrącenie",
"purchaseWithDiscountDescription": "Włącz lub wyłącz funkcję rezygnacji z subskrypcji. Po aktywacji system przeprowadzi proces odliczenia zgodnie z skonfigurowanymi zasadami i proporcjami, a pozostała wartość zostanie zwrócona na saldo",
"quota": "Limit zakupu",
"renewalReset": "Reset przy Odnowieniu",
"renewalResetDescription": "Reset cyklu przy odnowieniu",
"replacement": "Cena wymiany (za każdym razem)",
"resetCycle": "Cykl Resetowania",
"resetOn1st": "Reset 1-go",
"selectResetCycle": "Proszę wybrać cykl resetowania",
"selectSubscribeGroup": "Wybierz grupę subskrypcji",
"selectUnitTime": "Proszę wybrać jednostkę czasu",
"server": "Serwer",
"serverGroup": "Grupa serwerów",
"servers": "Serwery",
"speedLimit": "Limit prędkości ",
"traffic": "Ruch",
"unitPrice": "Cena jednostkowa",
"unitTime": "Jednostka czasu"
"description": "Skonfiguruj ustawienia subskrypcji i szablony klientów",
"messages": {
"noClients": "Brak Szablonów Klientów",
"noClientsDescription": "Brak skonfigurowanych szablonów klientów. Dodaj swój pierwszy szablon, aby rozpocząć."
},
"group": {
"actions": "Działania",
"cancel": "Anuluj",
"confirm": "Potwierdź",
"confirmDelete": "Czy na pewno chcesz usunąć?",
"create": "Utwórz",
"createSubscribeGroup": "Utwórz nową grupę subskrypcji",
"createSuccess": "Utworzono pomyślnie",
"delete": "Usuń",
"deleteSuccess": "Usunięto pomyślnie",
"deleteWarning": "Po usunięciu danych nie można ich odzyskać, proszę postępować ostrożnie.",
"description": "Opis",
"edit": "Edytuj",
"editSubscribeGroup": "Edytuj grupę subskrypcji",
"form": {
"cancel": "Anuluj",
"confirm": "Potwierdź",
"description": "Opis",
"name": "Nazwa"
"protocol": {
"clients": {
"clash": {
"features": "Duży ekosystem, kompleksowe zasady, aktywna społeczność"
},
"egern": {
"features": "Nowoczesny klient iOS, doskonała wydajność"
},
"hiddify": {
"features": "Wieloplatformowy, kompleksowe protokoły, przyjazny dla początkujących"
},
"loon": {
"features": "Zaawansowany klient iOS, bogate zasady, piękny interfejs"
},
"netch": {
"features": "Klient proxy skoncentrowany na grach"
},
"quantumult": {
"features": "Zaawansowany klient iOS, elastyczne zasady, bogate skrypty"
},
"shadowrocket": {
"features": "Klasyczny klient iOS, elastyczna konfiguracja"
},
"singbox": {
"features": "Najnowsze jądro, oficjalny interfejs GUI, wsparcie dla wielu platform"
},
"stash": {
"features": "Nowoczesny interfejs mobilny, kompleksowe protokoły"
},
"surfboard": {
"features": "Darmowy, aktywny rozwój, nowoczesny interfejs"
},
"surge": {
"features": "Premium narzędzie iOS/Mac, potężne funkcje"
},
"v2box": {
"features": "Przyjazny dla użytkownika klient V2Ray"
},
"v2rayn": {
"features": "Popularny klient Windows, bogaty w funkcje"
},
"v2rayng": {
"features": "Popularny klient Android, lekki"
}
},
"name": "Nazwa",
"title": "Lista grup subskrypcji",
"updateSuccess": "Zaktualizowano pomyślnie",
"updatedAt": "Czas aktualizacji"
"description": "Zarządzaj szablonami konfiguracji subskrypcji dla klientów proxy",
"features": "Kluczowe Funkcje",
"platforms": "Platformy",
"subscribeTemplate": "Konfiguracja Szablonu Subskrypcji",
"templateContent": "Zawartość Szablonu",
"templatePlaceholder": "Wprowadź szablon konfiguracji klienta...",
"title": "Szablony Subskrypcji Klientów"
},
"inventory": "Limit subskrypcji",
"name": "Nazwa",
"quota": "Limit zakupu/raz",
"replacement": "Zresetuj cenę/raz",
"sell": "Sprzedaż",
"show": "Pokaż",
"sold": "Liczba subskrypcji",
"subscribe": "Subskrybuj",
"subscribeGroup": "Subskrybuj grupę",
"tabs": {
"subscribe": "Subskrybuj",
"subscribeApp": "Konfiguracja aplikacji",
"subscribeConfig": "Konfiguracja subskrypcji",
"subscribeGroup": "Grupa subskrypcji"
},
"traffic": "ruch",
"unitPrice": "Cena jednostkowa",
"updateSuccess": "Aktualizacja zakończona pomyślnie"
"title": "Zarządzanie Subskrypcjami"
}

View File

@ -1,32 +1,25 @@
{
"ADS Config": "Configuração ADS",
"Announcement Management": "Gerenciamento de Anúncios",
"Apple": "ID Apple",
"Application Management": "Gerenciamento de Aplicativos",
"Auth Control": "Controle de Autenticação",
"Coupon Management": "Gerenciamento de Cupons",
"Dashboard": "Painel de Controle",
"Device": "Dispositivo",
"Document Management": "Gerenciamento de Documentos",
"Email": "E-mail",
"Facebook": "Facebook",
"Finance": "Finanças",
"General": "Geral",
"GitHub": "GitHub",
"Google": "Google",
"Order Management": "Gerenciamento de Pedidos",
"Payment Config": "Configuração de Pagamento",
"Phone Number": "Número de Telefone",
"Product Management": "Gestão de Produtos",
"Protocol Management": "Gestão de Protocolos",
"Rule Management": "Gerenciamento de Regras",
"Server": "Servidor",
"Server Management": "Gerenciamento de Servidor",
"Settings": "Configurações",
"Subscribe Management": "Gerenciamento de Assinaturas",
"Subscribe Config": "Configuração de Assinatura",
"System Config": "Configuração do Sistema",
"System Management": "Gerenciamento de Sistema",
"System Tool": "Ferramenta do Sistema",
"Telegram": "Telegram",
"Ticket Management": "Gerenciamento de Chamados",
"Twitter": "Twitter",
"User": "Usuário",
"User Detail": "Detalhes do Usuário",
"User Management": "Gerenciamento de Usuários"

View File

@ -0,0 +1,160 @@
{
"actions": "ações",
"app": {
"appDownloadURL": "URL de Download do App",
"appIcon": "Ícone do App",
"appList": "Lista de Apps",
"appName": "Nome do App",
"backupDomains": "Lista de Domínios de Backup",
"backupDomainsDescription": "Lista de domínios de backup para resolução de domínios, um domínio por linha",
"batchDelete": "Excluir em Lote",
"cancel": "Cancelar",
"communicationKey": "Chave de Comunicação",
"communicationKeyDescription": "Chave usada para comunicação com o cliente",
"config": "Configuração",
"configApp": "Configuração do App",
"confirm": "Confirmar",
"confirmDelete": "Confirmar Exclusão",
"create": "Criar",
"createApp": "Criar App",
"createSuccess": "Criado com sucesso",
"defaultVersion": "Padrão",
"delete": "Excluir",
"deleteWarning": "Esta ação não pode ser desfeita",
"describeDescription": "Usado para descrever o aplicativo, exibido na lista de apps",
"description": "Descrição",
"downloadLink": "Link para Download",
"edit": "Editar",
"editApp": "Editar App",
"encryption": "Método de Criptografia",
"encryptionDescription": "Escolha o método de criptografia para comunicação com o cliente. Se selecionado, o cliente usará este método para se comunicar com o servidor",
"nameDescription": "Nome do aplicativo, exibido na lista de apps",
"platform": "Plataforma",
"selectApp": "Selecionar Aplicativo",
"selectAppDescription": "Selecione o aplicativo para configurar, todas as configurações serão aplicadas ao aplicativo selecionado",
"startupPicture": "Imagem de Inicialização",
"startupPictureDescription": "Imagem de inicialização, suporta imagens de rede e locais. Para imagens de rede, por favor insira a URL completa da imagem",
"startupPicturePreview": "Pré-visualização da Imagem de Inicialização",
"startupPictureSkip": "Tempo de Pular Imagem de Inicialização",
"startupPictureSkipDescription": "Tempo de exibição da imagem de inicialização em segundos, insira 0 para não exibir",
"subscriptionProtocol": "Protocolo de Assinatura",
"updateSuccess": "Atualizado com sucesso",
"version": "Versão"
},
"cancel": "Cancelar",
"config": {
"singleSubscriptionMode": "Modo de Assinatura Única",
"subscriptionDomain": "Domínio de Assinatura",
"subscriptionDomainDescription": "Usado para assinatura; deixe em branco para usar o domínio do site",
"subscriptionDomainPlaceholder": "Insira o domínio de assinatura, um por linha",
"subscriptionPath": "Caminho de Assinatura",
"subscriptionPathDescription": "Usado para assinatura; certifique-se de reiniciar o sistema após a modificação para um desempenho ideal",
"subscriptionPathPlaceholder": "Insira",
"updateSuccess": "Atualizado com sucesso",
"wildcardResolution": "Resolução de Curinga",
"wildcardResolutionDescription": "Usado para assinatura"
},
"confirm": "confirmar",
"confirmDelete": "Tem certeza de que deseja excluir?",
"copy": "Copiar",
"copySuccess": "Copiado com sucesso",
"create": "criar",
"createSubscribe": "Criar Assinatura",
"createSuccess": "Criação bem-sucedida",
"delete": "Excluir",
"deleteSuccess": "Exclusão bem-sucedida",
"deleteWarning": "Após a exclusão, os dados não poderão ser recuperados. Proceda com cautela.",
"deviceLimit": "Número de dispositivos/unidade",
"edit": "editar",
"editSubscribe": "Editar Assinatura",
"form": {
"Day": "Dia",
"Hour": "Hora",
"Minute": "Minuto",
"Month": "Mês",
"NoLimit": "Sem Limite",
"Year": "Ano",
"annualReset": "Reinicialização Anual",
"basic": "Básico",
"cancel": "Cancelar",
"confirm": "Confirmar",
"deductionRatio": "Configuração de Dedução Automática/Manual",
"deductionRatioDescription": "Usado para dedução. Por padrão, o sistema adota um algoritmo de cálculo automático. Quando uma proporção manual é fornecida, o sistema calcula proporções com base no tempo e na proporção de tráfego, garantindo que o total seja igual a 100%.",
"description": "Descrição",
"deviceLimit": "Limite de dispositivos",
"discount": "Desconto",
"discountDescription": "Definir desconto com base no preço unitário",
"discountMonths": "Meses",
"discountPercent": "Percentual de desconto",
"discount_price": "Preço com desconto",
"duration": "Duração (meses)",
"groupId": "Grupo de Assinatura",
"inventory": "Limite de Assinatura",
"monthlyReset": "Reinicialização Mensal",
"name": "Nome",
"noLimit": "Sem limite",
"noReset": "Sem Reinicialização",
"pricing": "Preços",
"purchaseWithDiscount": "Permitir Dedução",
"purchaseWithDiscountDescription": "Ative ou desative a funcionalidade de cancelamento de inscrição. Após a ativação, o sistema realizará o processamento de dedução de acordo com as regras e proporções configuradas, e o valor restante será retornado ao saldo",
"quota": "Quantidade limitada",
"renewalReset": "Reinicialização na Renovação",
"renewalResetDescription": "Reiniciar ciclo ao renovar",
"replacement": "Preço de reposição (cada vez)",
"resetCycle": "Ciclo de Reinicialização",
"resetOn1st": "Reiniciar no dia 1",
"selectResetCycle": "Por favor, selecione um ciclo de reinicialização",
"selectSubscribeGroup": "Por favor, selecione o grupo de assinatura",
"selectUnitTime": "Por favor, selecione a unidade de tempo",
"server": "Servidor",
"serverGroup": "Grupo de servidores",
"servers": "Servidores",
"speedLimit": "Limite de velocidade ",
"traffic": "Tráfego",
"unitPrice": "Preço unitário",
"unitTime": "Unidade de tempo"
},
"group": {
"actions": "Ações",
"cancel": "Cancelar",
"confirm": "Confirmar",
"confirmDelete": "Tem certeza de que deseja excluir?",
"create": "Criar",
"createSubscribeGroup": "Criar Novo Grupo de Assinatura",
"createSuccess": "Criado com sucesso",
"delete": "Excluir",
"deleteSuccess": "Excluído com sucesso",
"deleteWarning": "Os dados não poderão ser recuperados após a exclusão, por favor, proceda com cautela.",
"description": "Descrição",
"edit": "Editar",
"editSubscribeGroup": "Editar Grupo de Assinatura",
"form": {
"cancel": "Cancelar",
"confirm": "Confirmar",
"description": "Descrição",
"name": "Nome"
},
"name": "Nome",
"title": "Lista de Grupos de Assinatura",
"updateSuccess": "Atualizado com sucesso",
"updatedAt": "Atualizado em"
},
"inventory": "Limite de Assinatura",
"name": "nome",
"quota": "Limite de compra/vez",
"replacement": "Redefinir preço/vez",
"sell": "venda",
"show": "Exibir",
"sold": "Contagem de Assinaturas",
"subscribe": "Inscrever-se",
"subscribeGroup": "Inscrever-se no grupo",
"tabs": {
"subscribe": "Inscrever-se",
"subscribeApp": "Configuração do Aplicativo",
"subscribeConfig": "Configuração de Assinatura",
"subscribeGroup": "Grupo de Inscrição"
},
"traffic": "tráfego",
"unitPrice": "Preço Unitário",
"updateSuccess": "Atualização bem-sucedida"
}

View File

@ -1,161 +1,89 @@
{
"actions": "ações",
"app": {
"appDownloadURL": "URL de Download do App",
"appIcon": "Ícone do App",
"appList": "Lista de Apps",
"appName": "Nome do App",
"backupDomains": "Lista de Domínios de Backup",
"backupDomainsDescription": "Lista de domínios de backup para resolução de domínios, um domínio por linha",
"batchDelete": "Excluir em Lote",
"actions": {
"cancel": "Cancelar",
"communicationKey": "Chave de Comunicação",
"communicationKeyDescription": "Chave usada para comunicação com o cliente",
"config": "Configuração",
"configApp": "Configuração do App",
"confirm": "Confirmar",
"confirmDelete": "Confirmar Exclusão",
"create": "Criar",
"createApp": "Criar App",
"createSuccess": "Criado com sucesso",
"defaultVersion": "Padrão",
"delete": "Excluir",
"deleteWarning": "Esta ação não pode ser desfeita",
"describeDescription": "Usado para descrever o aplicativo, exibido na lista de apps",
"description": "Descrição",
"downloadLink": "Link para Download",
"edit": "Editar",
"editApp": "Editar App",
"encryption": "Método de Criptografia",
"encryptionDescription": "Escolha o método de criptografia para comunicação com o cliente. Se selecionado, o cliente usará este método para se comunicar com o servidor",
"nameDescription": "Nome do aplicativo, exibido na lista de apps",
"platform": "Plataforma",
"selectApp": "Selecionar Aplicativo",
"selectAppDescription": "Selecione o aplicativo para configurar, todas as configurações serão aplicadas ao aplicativo selecionado",
"startupPicture": "Imagem de Inicialização",
"startupPictureDescription": "Imagem de inicialização, suporta imagens de rede e locais. Para imagens de rede, por favor insira a URL completa da imagem",
"startupPicturePreview": "Pré-visualização da Imagem de Inicialização",
"startupPictureSkip": "Tempo de Pular Imagem de Inicialização",
"startupPictureSkipDescription": "Tempo de exibição da imagem de inicialização em segundos, insira 0 para não exibir",
"subscriptionProtocol": "Protocolo de Assinatura",
"updateSuccess": "Atualizado com sucesso",
"version": "Versão"
"save": "Salvar",
"saveTemplate": "Salvar Modelo"
},
"cancel": "Cancelar",
"config": {
"description": "Gerenciar configurações do sistema de assinatura",
"restrictUserAgent": "Restrição de User-Agent",
"restrictUserAgentDescription": "Ativar restrições de acesso com base no User-Agent",
"singleSubscriptionMode": "Modo de Assinatura Única",
"singleSubscriptionModeDescription": "Quando ativado, todas as assinaturas de usuários serão convertidas para saldo",
"singleSubscriptionModeDescription": "Limitar usuários a uma assinatura ativa. Assinaturas existentes não são afetadas",
"subscriptionDomain": "Domínio de Assinatura",
"subscriptionDomainDescription": "Usado para assinatura; deixe em branco para usar o domínio do site",
"subscriptionDomainPlaceholder": "Insira o domínio de assinatura, um por linha",
"subscriptionDomainDescription": "Domínio personalizado para links de assinatura",
"subscriptionDomainPlaceholder": "Digite o domínio de assinatura, um por linha",
"subscriptionPath": "Caminho de Assinatura",
"subscriptionPathDescription": "Usado para assinatura; certifique-se de reiniciar o sistema após a modificação para um desempenho ideal",
"subscriptionPathPlaceholder": "Insira",
"updateSuccess": "Atualizado com sucesso",
"subscriptionPathDescription": "Caminho personalizado para endpoints de assinatura (melhor desempenho após reinício do sistema)",
"subscriptionPathPlaceholder": "Digite o caminho de assinatura",
"title": "Configuração de Assinatura",
"updateError": "Falha na atualização",
"updateSuccess": "Configurações atualizadas com sucesso",
"userAgentWhitelist": "Lista Branca de User-Agent",
"userAgentWhitelistDescription": "User-Agents permitidos para acesso à assinatura, um por linha. Modelos embutidos são automaticamente incluídos na lista branca",
"userAgentWhitelistPlaceholder": "Insira os User-Agents permitidos, um por linha",
"wildcardResolution": "Resolução de Curinga",
"wildcardResolutionDescription": "Usado para assinatura"
"wildcardResolutionDescription": "Ativar resolução de domínio curinga para assinaturas"
},
"confirm": "confirmar",
"confirmDelete": "Tem certeza de que deseja excluir?",
"copy": "Copiar",
"copySuccess": "Copiado com sucesso",
"create": "criar",
"createSubscribe": "Criar Assinatura",
"createSuccess": "Criação bem-sucedida",
"delete": "Excluir",
"deleteSuccess": "Exclusão bem-sucedida",
"deleteWarning": "Após a exclusão, os dados não poderão ser recuperados. Proceda com cautela.",
"deviceLimit": "Número de dispositivos/unidade",
"edit": "editar",
"editSubscribe": "Editar Assinatura",
"form": {
"Day": "Dia",
"Hour": "Hora",
"Minute": "Minuto",
"Month": "Mês",
"NoLimit": "Sem Limite",
"Year": "Ano",
"annualReset": "Reinicialização Anual",
"basic": "Básico",
"cancel": "Cancelar",
"confirm": "Confirmar",
"deductionRatio": "Configuração de Dedução Automática/Manual",
"deductionRatioDescription": "Usado para dedução. Por padrão, o sistema adota um algoritmo de cálculo automático. Quando uma proporção manual é fornecida, o sistema calcula proporções com base no tempo e na proporção de tráfego, garantindo que o total seja igual a 100%.",
"description": "Descrição",
"deviceLimit": "Limite de dispositivos",
"discount": "Desconto",
"discountDescription": "Definir desconto com base no preço unitário",
"discountMonths": "Meses",
"discountPercent": "Percentual de desconto",
"discount_price": "Preço com desconto",
"duration": "Duração (meses)",
"groupId": "Grupo de Assinatura",
"inventory": "Limite de Assinatura",
"monthlyReset": "Reinicialização Mensal",
"name": "Nome",
"noLimit": "Sem limite",
"noReset": "Sem Reinicialização",
"pricing": "Preços",
"purchaseWithDiscount": "Permitir Dedução",
"purchaseWithDiscountDescription": "Ative ou desative a funcionalidade de cancelamento de inscrição. Após a ativação, o sistema realizará o processamento de dedução de acordo com as regras e proporções configuradas, e o valor restante será retornado ao saldo",
"quota": "Quantidade limitada",
"renewalReset": "Reinicialização na Renovação",
"renewalResetDescription": "Reiniciar ciclo ao renovar",
"replacement": "Preço de reposição (cada vez)",
"resetCycle": "Ciclo de Reinicialização",
"resetOn1st": "Reiniciar no dia 1",
"selectResetCycle": "Por favor, selecione um ciclo de reinicialização",
"selectSubscribeGroup": "Por favor, selecione o grupo de assinatura",
"selectUnitTime": "Por favor, selecione a unidade de tempo",
"server": "Servidor",
"serverGroup": "Grupo de servidores",
"servers": "Servidores",
"speedLimit": "Limite de velocidade ",
"traffic": "Tráfego",
"unitPrice": "Preço unitário",
"unitTime": "Unidade de tempo"
"description": "Configurar configurações de assinatura e modelos de cliente",
"messages": {
"noClients": "Sem Modelos de Cliente",
"noClientsDescription": "Nenhum modelo de cliente configurado ainda. Adicione seu primeiro modelo para começar."
},
"group": {
"actions": "Ações",
"cancel": "Cancelar",
"confirm": "Confirmar",
"confirmDelete": "Tem certeza de que deseja excluir?",
"create": "Criar",
"createSubscribeGroup": "Criar Novo Grupo de Assinatura",
"createSuccess": "Criado com sucesso",
"delete": "Excluir",
"deleteSuccess": "Excluído com sucesso",
"deleteWarning": "Os dados não poderão ser recuperados após a exclusão, por favor, proceda com cautela.",
"description": "Descrição",
"edit": "Editar",
"editSubscribeGroup": "Editar Grupo de Assinatura",
"form": {
"cancel": "Cancelar",
"confirm": "Confirmar",
"description": "Descrição",
"name": "Nome"
"protocol": {
"clients": {
"clash": {
"features": "Grande ecossistema, regras abrangentes, comunidade ativa"
},
"egern": {
"features": "Cliente moderno para iOS, excelente desempenho"
},
"hiddify": {
"features": "Multiplataforma, protocolos abrangentes, amigável para iniciantes"
},
"loon": {
"features": "Cliente avançado para iOS, regras ricas, interface bonita"
},
"netch": {
"features": "Cliente proxy focado em jogos"
},
"quantumult": {
"features": "Cliente avançado para iOS, regras flexíveis, scripts ricos"
},
"shadowrocket": {
"features": "Cliente clássico para iOS, configuração flexível"
},
"singbox": {
"features": "Kernel mais recente, GUI oficial, suporte multiplataforma"
},
"stash": {
"features": "Interface móvel moderna, protocolos abrangentes"
},
"surfboard": {
"features": "Gratuito, desenvolvimento ativo, interface moderna"
},
"surge": {
"features": "Ferramenta premium para iOS/Mac, recursos poderosos"
},
"v2box": {
"features": "Cliente V2Ray amigável ao usuário"
},
"v2rayn": {
"features": "Cliente popular para Windows, rico em recursos"
},
"v2rayng": {
"features": "Cliente popular para Android, leve"
}
},
"name": "Nome",
"title": "Lista de Grupos de Assinatura",
"updateSuccess": "Atualizado com sucesso",
"updatedAt": "Atualizado em"
"description": "Gerenciar modelos de configuração de assinatura para clientes proxy",
"features": "Principais Recursos",
"platforms": "Plataformas",
"subscribeTemplate": "Configuração de Modelo de Assinatura",
"templateContent": "Conteúdo do Modelo",
"templatePlaceholder": "Digite o modelo de configuração do cliente...",
"title": "Modelos de Assinatura de Cliente"
},
"inventory": "Limite de Assinatura",
"name": "nome",
"quota": "Limite de compra/vez",
"replacement": "Redefinir preço/vez",
"sell": "venda",
"show": "Exibir",
"sold": "Contagem de Assinaturas",
"subscribe": "Inscrever-se",
"subscribeGroup": "Inscrever-se no grupo",
"tabs": {
"subscribe": "Inscrever-se",
"subscribeApp": "Configuração do Aplicativo",
"subscribeConfig": "Configuração de Assinatura",
"subscribeGroup": "Grupo de Inscrição"
},
"traffic": "tráfego",
"unitPrice": "Preço Unitário",
"updateSuccess": "Atualização bem-sucedida"
"title": "Gerenciamento de Assinaturas"
}

View File

@ -18,8 +18,7 @@ export default getRequestConfig(async () => {
'ads': (await import(`./${locale}/ads.json`)).default,
'payment': (await import(`./${locale}/payment.json`)).default,
'server': (await import(`./${locale}/server.json`)).default,
'subscribe': (await import(`./${locale}/subscribe.json`)).default,
'rules': (await import(`./${locale}/rules.json`)).default,
'product': (await import(`./${locale}/product.json`)).default,
'order': (await import(`./${locale}/order.json`)).default,
'coupon': (await import(`./${locale}/coupon.json`)).default,
'user': (await import(`./${locale}/user.json`)).default,
@ -28,6 +27,8 @@ export default getRequestConfig(async () => {
'document': (await import(`./${locale}/document.json`)).default,
'tool': (await import(`./${locale}/tool.json`)).default,
'index': (await import(`./${locale}/index.json`)).default,
'subscribe': (await import(`./${locale}/subscribe.json`)).default,
'marketing': (await import(`./${locale}/marketing.json`)).default,
};
return {

View File

@ -1,32 +1,25 @@
{
"ADS Config": "Configurație ADS",
"Announcement Management": "Managementul Anunțurilor",
"Apple": "ID Apple",
"Application Management": "Gestionarea aplicațiilor",
"Auth Control": "Control Autentificare",
"Coupon Management": "Managementul Cuponului",
"Dashboard": "Tablou de bord",
"Device": "Dispozitiv",
"Document Management": "Managementul documentelor",
"Email": "E-mail",
"Facebook": "Facebook",
"Finance": "Finanțe",
"General": "General",
"GitHub": "GitHub",
"Google": "Google",
"Order Management": "Gestionarea comenzilor",
"Payment Config": "Configurație Plată",
"Phone Number": "Număr de telefon",
"Product Management": "Gestionarea Produselor",
"Protocol Management": "Gestionarea Protocolului",
"Rule Management": "Gestionarea regulilor",
"Server": "Serviciu",
"Server Management": "Managementul serverului",
"Settings": "Setări",
"Subscribe Management": "Gestionarea abonamentelor",
"Subscribe Config": "Configurație Abonare",
"System Config": "Configurația sistemului",
"System Management": "Gestionarea sistemului",
"System Tool": "Instrumente de sistem",
"Telegram": "Telegram",
"Ticket Management": "Gestionarea Biletelor",
"Twitter": "Twitter",
"User": "Utilizator",
"User Detail": "Detalii Utilizator",
"User Management": "Gestionarea Utilizatorilor"

View File

@ -0,0 +1,160 @@
{
"actions": "acțiuni",
"app": {
"appDownloadURL": "URL Descărcare Aplicație",
"appIcon": "Iconiță Aplicație",
"appList": "Listă de aplicații",
"appName": "Nume Aplicație",
"backupDomains": "Listă de domenii de rezervă",
"backupDomainsDescription": "Listă de domenii de rezervă pentru rezolvarea domeniilor, un domeniu pe linie",
"batchDelete": "Ștergere în Lot",
"cancel": "Anulează",
"communicationKey": "Cheie de comunicare",
"communicationKeyDescription": "Cheie utilizată pentru comunicarea cu clientul",
"config": "Configurație",
"configApp": "Configurația aplicației",
"confirm": "Confirmă",
"confirmDelete": "Confirmă Ștergerea",
"create": "Creează",
"createApp": "Creează Aplicație",
"createSuccess": "Creat cu succes",
"defaultVersion": "Implicit",
"delete": "Șterge",
"deleteWarning": "Această acțiune nu poate fi anulată",
"describeDescription": "Folosit pentru a descrie aplicația, afișat în lista de aplicații",
"description": "Descriere",
"downloadLink": "Link de descărcare",
"edit": "Editează",
"editApp": "Editează Aplicație",
"encryption": "Metodă de criptare",
"encryptionDescription": "Alegeți metoda de criptare pentru comunicarea cu clientul. Dacă este selectată, clientul va folosi această metodă pentru a comunica cu serverul",
"nameDescription": "Numele aplicației, afișat în lista de aplicații",
"platform": "Platformă",
"selectApp": "Selectați aplicația",
"selectAppDescription": "Selectați aplicația pentru configurare, toate setările se vor aplica aplicației selectate",
"startupPicture": "Imagine de pornire",
"startupPictureDescription": "Imagine de pornire, suportă imagini de rețea și locale. Pentru imagini de rețea, vă rugăm să introduceți URL-ul complet al imaginii",
"startupPicturePreview": "Previzualizare imagine de pornire",
"startupPictureSkip": "Timp de omitere imagine de pornire",
"startupPictureSkipDescription": "Timpul de afișare a imaginii de pornire în secunde, introduceți 0 pentru a nu afișa",
"subscriptionProtocol": "Protocol de Abonament",
"updateSuccess": "Actualizat cu succes",
"version": "Versiune"
},
"cancel": "Anulează",
"config": {
"singleSubscriptionMode": "Modul Abonament Unic",
"subscriptionDomain": "Domeniu Abonament",
"subscriptionDomainDescription": "Folosit pentru abonament; lăsați necompletat pentru a folosi domeniul site-ului",
"subscriptionDomainPlaceholder": "Introduceți domeniul abonamentului, unul pe linie",
"subscriptionPath": "Calea Abonamentului",
"subscriptionPathDescription": "Folosit pentru abonament; asigurați-vă că reporniți sistemul după modificare pentru performanțe optime",
"subscriptionPathPlaceholder": "Introduceți",
"updateSuccess": "Actualizat cu succes",
"wildcardResolution": "Rezoluție Wildcard",
"wildcardResolutionDescription": "Folosit pentru abonament"
},
"confirm": "Confirmare",
"confirmDelete": "Sigur doriți să ștergeți?",
"copy": "Copiază",
"copySuccess": "Copiat cu succes",
"create": "crea",
"createSubscribe": "Creează abonament",
"createSuccess": "Creare reușită",
"delete": "șterge",
"deleteSuccess": "Ștergere reușită",
"deleteWarning": "După ștergere, datele nu pot fi recuperate, vă rugăm să acționați cu prudență.",
"deviceLimit": "Număr de dispozitive",
"edit": "editează",
"editSubscribe": "Editează abonamentul",
"form": {
"Day": "Zi",
"Hour": "Oră",
"Minute": "Minut",
"Month": "Lună",
"NoLimit": "Fără limită",
"Year": "An",
"annualReset": "Resetare Anuală",
"basic": "De Bază",
"cancel": "Anulează",
"confirm": "Confirmă",
"deductionRatio": "Configurare Deducere Automată/Manuală",
"deductionRatioDescription": "Utilizat pentru deducere. În mod implicit, sistemul adoptă un algoritm de calcul automat. Când se furnizează un raport manual, sistemul calculează proporțiile pe baza timpului și a raportului de trafic, asigurându-se că totalul este egal cu 100%.",
"description": "Descriere",
"deviceLimit": "Limită dispozitive",
"discount": "Reducere",
"discountDescription": "Reducere bazată pe preț unitar",
"discountMonths": "luni",
"discountPercent": "Procent reducere",
"discount_price": "Preț redus",
"duration": "Durată (luni)",
"groupId": "Grup de Abonament",
"inventory": "Limit de Abonament",
"monthlyReset": "Resetare Lunară",
"name": "Nume",
"noLimit": "Fără limită",
"noReset": "Fără Resetare",
"pricing": "Prețuri",
"purchaseWithDiscount": "Permite Deducerea",
"purchaseWithDiscountDescription": "Activează sau dezactivează funcționalitatea de dezabonare. După activare, sistemul va efectua procesarea deducerilor conform regulilor și proporțiilor configurate, iar valoarea rămasă va fi returnată în sold.",
"quota": "Limită de achiziție",
"renewalReset": "Resetare la Reînnoire",
"renewalResetDescription": "Resetează ciclul la reînnoire",
"replacement": "Preț de înlocuire (per dată)",
"resetCycle": "Ciclu de Resetare",
"resetOn1st": "Resetare pe 1",
"selectResetCycle": "Vă rugăm să selectați un ciclu de resetare",
"selectSubscribeGroup": "Vă rugăm să selectați grupul de abonament",
"selectUnitTime": "Vă rugăm să selectați unitatea de timp",
"server": "Server",
"serverGroup": "Grup server",
"servers": "Servere",
"speedLimit": "Limită de viteză ",
"traffic": "Trafic",
"unitPrice": "Preț unitar",
"unitTime": "Unitate de timp"
},
"group": {
"actions": "Acțiuni",
"cancel": "Anulează",
"confirm": "Confirmă",
"confirmDelete": "Sigur doriți să ștergeți?",
"create": "Creează",
"createSubscribeGroup": "Creează un grup de abonamente",
"createSuccess": "Creat cu succes",
"delete": "Șterge",
"deleteSuccess": "Șters cu succes",
"deleteWarning": "După ștergere, datele nu pot fi recuperate, vă rugăm să acționați cu prudență.",
"description": "Descriere",
"edit": "Editează",
"editSubscribeGroup": "Editează grupul de abonamente",
"form": {
"cancel": "Anulează",
"confirm": "Confirmă",
"description": "Descriere",
"name": "Nume"
},
"name": "Nume",
"title": "Lista grupurilor de abonamente",
"updateSuccess": "Actualizat cu succes",
"updatedAt": "Data actualizării"
},
"inventory": "Limită de abonament",
"name": "Nume",
"quota": "Limită de achiziție/pe tranzacție",
"replacement": "Resetare preț/pe utilizare",
"sell": "Vânzare",
"show": "Afișare",
"sold": "Număr de abonamente",
"subscribe": "Abonare",
"subscribeGroup": "Abonare grup",
"tabs": {
"subscribe": "Abonare",
"subscribeApp": "Configurare Aplicație",
"subscribeConfig": "Configurare Abonament",
"subscribeGroup": "Grup de abonare"
},
"traffic": "trafic",
"unitPrice": "Preț unitar",
"updateSuccess": "Actualizare reușită"
}

View File

@ -1,161 +1,89 @@
{
"actions": "acțiuni",
"app": {
"appDownloadURL": "URL Descărcare Aplicație",
"appIcon": "Iconiță Aplicație",
"appList": "Listă de aplicații",
"appName": "Nume Aplicație",
"backupDomains": "Listă de domenii de rezervă",
"backupDomainsDescription": "Listă de domenii de rezervă pentru rezolvarea domeniilor, un domeniu pe linie",
"batchDelete": "Ștergere în Lot",
"actions": {
"cancel": "Anulează",
"communicationKey": "Cheie de comunicare",
"communicationKeyDescription": "Cheie utilizată pentru comunicarea cu clientul",
"config": "Configurație",
"configApp": "Configurația aplicației",
"confirm": "Confirmă",
"confirmDelete": "Confirmă Ștergerea",
"create": "Creează",
"createApp": "Creează Aplicație",
"createSuccess": "Creat cu succes",
"defaultVersion": "Implicit",
"delete": "Șterge",
"deleteWarning": "Această acțiune nu poate fi anulată",
"describeDescription": "Folosit pentru a descrie aplicația, afișat în lista de aplicații",
"description": "Descriere",
"downloadLink": "Link de descărcare",
"edit": "Editează",
"editApp": "Editează Aplicație",
"encryption": "Metodă de criptare",
"encryptionDescription": "Alegeți metoda de criptare pentru comunicarea cu clientul. Dacă este selectată, clientul va folosi această metodă pentru a comunica cu serverul",
"nameDescription": "Numele aplicației, afișat în lista de aplicații",
"platform": "Platformă",
"selectApp": "Selectați aplicația",
"selectAppDescription": "Selectați aplicația pentru configurare, toate setările se vor aplica aplicației selectate",
"startupPicture": "Imagine de pornire",
"startupPictureDescription": "Imagine de pornire, suportă imagini de rețea și locale. Pentru imagini de rețea, vă rugăm să introduceți URL-ul complet al imaginii",
"startupPicturePreview": "Previzualizare imagine de pornire",
"startupPictureSkip": "Timp de omitere imagine de pornire",
"startupPictureSkipDescription": "Timpul de afișare a imaginii de pornire în secunde, introduceți 0 pentru a nu afișa",
"subscriptionProtocol": "Protocol de Abonament",
"updateSuccess": "Actualizat cu succes",
"version": "Versiune"
"save": "Salvează",
"saveTemplate": "Salvează Șablon"
},
"cancel": "Anulează",
"config": {
"singleSubscriptionMode": "Modul Abonament Unic",
"singleSubscriptionModeDescription": "Când este activat, toate abonamentele utilizatorilor vor fi convertite în sold",
"description": "Gestionează setările sistemului de abonamente",
"restrictUserAgent": "Restricție User-Agent",
"restrictUserAgentDescription": "Activează restricții de acces bazate pe User-Agent",
"singleSubscriptionMode": "Mod Abonament Unic",
"singleSubscriptionModeDescription": "Limitează utilizatorii la o singură subscripție activă. Subscripțiile existente nu sunt afectate",
"subscriptionDomain": "Domeniu Abonament",
"subscriptionDomainDescription": "Folosit pentru abonament; lăsați necompletat pentru a folosi domeniul site-ului",
"subscriptionDomainPlaceholder": "Introduceți domeniul abonamentului, unul pe linie",
"subscriptionPath": "Calea Abonamentului",
"subscriptionPathDescription": "Folosit pentru abonament; asigurați-vă că reporniți sistemul după modificare pentru performanțe optime",
"subscriptionPathPlaceholder": "Introduceți",
"updateSuccess": "Actualizat cu succes",
"wildcardResolution": "Rezoluție Wildcard",
"wildcardResolutionDescription": "Folosit pentru abonament"
"subscriptionDomainDescription": "Domeniu personalizat pentru linkurile de abonament",
"subscriptionDomainPlaceholder": "Introdu domeniul de abonament, câte unul pe linie",
"subscriptionPath": "Cale Abonament",
"subscriptionPathDescription": "Cale personalizată pentru punctele finale de abonament (performanță mai bună după repornirea sistemului)",
"subscriptionPathPlaceholder": "Introdu calea de abonament",
"title": "Configurare Abonament",
"updateError": "Actualizarea a eșuat",
"updateSuccess": "Setările au fost actualizate cu succes",
"userAgentWhitelist": "Lista albă User-Agent",
"userAgentWhitelistDescription": "User-Agent-uri permise pentru accesul la subscripție, câte unul pe linie. Șabloanele încorporate sunt incluse automat în lista albă",
"userAgentWhitelistPlaceholder": "Introdu User-Agent-uri permise, câte unul pe linie",
"wildcardResolution": "Rezolvare Wildcard",
"wildcardResolutionDescription": "Activează rezolvarea domeniului wildcard pentru abonamente"
},
"confirm": "Confirmare",
"confirmDelete": "Sigur doriți să ștergeți?",
"copy": "Copiază",
"copySuccess": "Copiat cu succes",
"create": "crea",
"createSubscribe": "Creează abonament",
"createSuccess": "Creare reușită",
"delete": "șterge",
"deleteSuccess": "Ștergere reușită",
"deleteWarning": "După ștergere, datele nu pot fi recuperate, vă rugăm să acționați cu prudență.",
"deviceLimit": "Număr de dispozitive",
"edit": "editează",
"editSubscribe": "Editează abonamentul",
"form": {
"Day": "Zi",
"Hour": "Oră",
"Minute": "Minut",
"Month": "Lună",
"NoLimit": "Fără limită",
"Year": "An",
"annualReset": "Resetare Anuală",
"basic": "De Bază",
"cancel": "Anulează",
"confirm": "Confirmă",
"deductionRatio": "Configurare Deducere Automată/Manuală",
"deductionRatioDescription": "Utilizat pentru deducere. În mod implicit, sistemul adoptă un algoritm de calcul automat. Când se furnizează un raport manual, sistemul calculează proporțiile pe baza timpului și a raportului de trafic, asigurându-se că totalul este egal cu 100%.",
"description": "Descriere",
"deviceLimit": "Limită dispozitive",
"discount": "Reducere",
"discountDescription": "Reducere bazată pe preț unitar",
"discountMonths": "luni",
"discountPercent": "Procent reducere",
"discount_price": "Preț redus",
"duration": "Durată (luni)",
"groupId": "Grup de Abonament",
"inventory": "Limit de Abonament",
"monthlyReset": "Resetare Lunară",
"name": "Nume",
"noLimit": "Fără limită",
"noReset": "Fără Resetare",
"pricing": "Prețuri",
"purchaseWithDiscount": "Permite Deducerea",
"purchaseWithDiscountDescription": "Activează sau dezactivează funcționalitatea de dezabonare. După activare, sistemul va efectua procesarea deducerilor conform regulilor și proporțiilor configurate, iar valoarea rămasă va fi returnată în sold.",
"quota": "Limită de achiziție",
"renewalReset": "Resetare la Reînnoire",
"renewalResetDescription": "Resetează ciclul la reînnoire",
"replacement": "Preț de înlocuire (per dată)",
"resetCycle": "Ciclu de Resetare",
"resetOn1st": "Resetare pe 1",
"selectResetCycle": "Vă rugăm să selectați un ciclu de resetare",
"selectSubscribeGroup": "Vă rugăm să selectați grupul de abonament",
"selectUnitTime": "Vă rugăm să selectați unitatea de timp",
"server": "Server",
"serverGroup": "Grup server",
"servers": "Servere",
"speedLimit": "Limită de viteză ",
"traffic": "Trafic",
"unitPrice": "Preț unitar",
"unitTime": "Unitate de timp"
"description": "Configurează setările de abonament și șabloanele clientului",
"messages": {
"noClients": "Niciun Șablon Client",
"noClientsDescription": "Nu sunt configurate încă șabloane pentru clienți. Adaugă primul tău șablon pentru a începe."
},
"group": {
"actions": "Acțiuni",
"cancel": "Anulează",
"confirm": "Confirmă",
"confirmDelete": "Sigur doriți să ștergeți?",
"create": "Creează",
"createSubscribeGroup": "Creează un grup de abonamente",
"createSuccess": "Creat cu succes",
"delete": "Șterge",
"deleteSuccess": "Șters cu succes",
"deleteWarning": "După ștergere, datele nu pot fi recuperate, vă rugăm să acționați cu prudență.",
"description": "Descriere",
"edit": "Editează",
"editSubscribeGroup": "Editează grupul de abonamente",
"form": {
"cancel": "Anulează",
"confirm": "Confirmă",
"description": "Descriere",
"name": "Nume"
"protocol": {
"clients": {
"clash": {
"features": "Ecosistem mare, reguli cuprinzătoare, comunitate activă"
},
"egern": {
"features": "Client modern pentru iOS, performanță excelentă"
},
"hiddify": {
"features": "Multi-platformă, protocoale cuprinzătoare, prietenos pentru începători"
},
"loon": {
"features": "Client avansat pentru iOS, reguli bogate, interfață frumoasă"
},
"netch": {
"features": "Client proxy axat pe gaming"
},
"quantumult": {
"features": "Client avansat pentru iOS, reguli flexibile, scripturi bogate"
},
"shadowrocket": {
"features": "Client clasic pentru iOS, configurare flexibilă"
},
"singbox": {
"features": "Kernelul cel mai recent, GUI oficial, suport multi-platformă"
},
"stash": {
"features": "UI modern pentru mobil, protocoale cuprinzătoare"
},
"surfboard": {
"features": "Gratuit, dezvoltare activă, interfață modernă"
},
"surge": {
"features": "Instrument premium pentru iOS/Mac, caracteristici puternice"
},
"v2box": {
"features": "Client V2Ray prietenos cu utilizatorul"
},
"v2rayn": {
"features": "Client popular pentru Windows, bogat în caracteristici"
},
"v2rayng": {
"features": "Client popular pentru Android, ușor"
}
},
"name": "Nume",
"title": "Lista grupurilor de abonamente",
"updateSuccess": "Actualizat cu succes",
"updatedAt": "Data actualizării"
"description": "Gestionează șabloanele de configurare a abonamentului pentru clienții proxy",
"features": "Caracteristici Cheie",
"platforms": "Platforme",
"subscribeTemplate": "Configurare Șablon Abonament",
"templateContent": "Conținut Șablon",
"templatePlaceholder": "Introdu șablonul de configurare a clientului...",
"title": "Șabloane de Abonament pentru Clienți"
},
"inventory": "Limită de abonament",
"name": "Nume",
"quota": "Limită de achiziție/pe tranzacție",
"replacement": "Resetare preț/pe utilizare",
"sell": "Vânzare",
"show": "Afișare",
"sold": "Număr de abonamente",
"subscribe": "Abonare",
"subscribeGroup": "Abonare grup",
"tabs": {
"subscribe": "Abonare",
"subscribeApp": "Configurare Aplicație",
"subscribeConfig": "Configurare Abonament",
"subscribeGroup": "Grup de abonare"
},
"traffic": "trafic",
"unitPrice": "Preț unitar",
"updateSuccess": "Actualizare reușită"
"title": "Gestionarea Abonamentelor"
}

View File

@ -1,32 +1,25 @@
{
"ADS Config": "Конфигурация ADS",
"Announcement Management": "Управление объявлениями",
"Apple": "Apple ID",
"Application Management": "Управление приложениями",
"Auth Control": "Управление аутентификацией",
"Coupon Management": "Управление купонами",
"Dashboard": "Панель управления",
"Device": "Устройство",
"Document Management": "Управление документами",
"Email": "Электронная почта",
"Facebook": "Facebook",
"Finance": "Финансы",
"General": "Общий",
"GitHub": "GitHub",
"Google": "Google",
"Order Management": "Управление заказами",
"Payment Config": "Настройки оплаты",
"Phone Number": "Номер телефона",
"Product Management": "Управление продуктом",
"Protocol Management": "Управление протоколом",
"Rule Management": "Управление правилами",
"Server": "Сервер",
"Server Management": "Управление сервером",
"Settings": "Настройки",
"Subscribe Management": "Управление подписками",
"Subscribe Config": "Настройки подписки",
"System Config": "Системная конфигурация",
"System Management": "Управление системой",
"System Tool": "Системные инструменты",
"Telegram": "Телеграм",
"Ticket Management": "Управление заявками",
"Twitter": "Твиттер",
"User": "Пользователь",
"User Detail": "Детали пользователя",
"User Management": "Управление пользователями"

View File

@ -0,0 +1,160 @@
{
"actions": "действия",
"app": {
"appDownloadURL": "URL загрузки приложения",
"appIcon": "Иконка приложения",
"appList": "Список приложений",
"appName": "Название приложения",
"backupDomains": "Список резервных доменов",
"backupDomainsDescription": "Список резервных доменов для разрешения доменов, по одному домену на строку",
"batchDelete": "Удалить пакетно",
"cancel": "Отмена",
"communicationKey": "Ключ связи",
"communicationKeyDescription": "Ключ, используемый для связи с клиентом",
"config": "Конфигурация",
"configApp": "Конфигурация приложения",
"confirm": "Подтвердить",
"confirmDelete": "Подтвердить удаление",
"create": "Создать",
"createApp": "Создать приложение",
"createSuccess": "Успешно создано",
"defaultVersion": "По умолчанию",
"delete": "Удалить",
"deleteWarning": "Это действие необратимо",
"describeDescription": "Используется для описания приложения, отображается в списке приложений",
"description": "Описание",
"downloadLink": "Ссылка для загрузки",
"edit": "Редактировать",
"editApp": "Редактировать приложение",
"encryption": "Метод шифрования",
"encryptionDescription": "Выберите метод шифрования для связи с клиентом. Если выбран, клиент будет использовать этот метод для связи с сервером",
"nameDescription": "Название приложения, отображается в списке приложений",
"platform": "Платформа",
"selectApp": "Выбрать приложение",
"selectAppDescription": "Выберите приложение для настройки, все параметры будут применены к выбранному приложению",
"startupPicture": "Стартовое изображение",
"startupPictureDescription": "Стартовое изображение, поддерживает сетевые и локальные изображения. Для сетевых изображений введите полный URL изображения",
"startupPicturePreview": "Предварительный просмотр стартового изображения",
"startupPictureSkip": "Время пропуска стартового изображения",
"startupPictureSkipDescription": "Время отображения стартового изображения в секундах, введите 0, чтобы не отображать",
"subscriptionProtocol": "Протокол подписки",
"updateSuccess": "Успешно обновлено",
"version": "Версия"
},
"cancel": "Отмена",
"config": {
"singleSubscriptionMode": "Режим единой подписки",
"subscriptionDomain": "Домен подписки",
"subscriptionDomainDescription": "Используется для подписки; оставьте пустым, чтобы использовать домен сайта",
"subscriptionDomainPlaceholder": "Введите домен подписки, по одному на строку",
"subscriptionPath": "Путь подписки",
"subscriptionPathDescription": "Используется для подписки; обязательно перезапустите систему после изменения для оптимальной производительности",
"subscriptionPathPlaceholder": "Введите",
"updateSuccess": "Успешно обновлено",
"wildcardResolution": "Разрешение подстановочных знаков",
"wildcardResolutionDescription": "Используется для подписки"
},
"confirm": "Подтвердить",
"confirmDelete": "Вы уверены, что хотите удалить?",
"copy": "Копировать",
"copySuccess": "Успешно скопировано",
"create": "Создать",
"createSubscribe": "Создать подписку",
"createSuccess": "Создание успешно",
"delete": "Удалить",
"deleteSuccess": "Удаление успешно",
"deleteWarning": "После удаления данные не могут быть восстановлены, пожалуйста, действуйте осторожно.",
"deviceLimit": "Количество устройств/шт",
"edit": "редактировать",
"editSubscribe": "Редактировать подписку",
"form": {
"Day": "День",
"Hour": "Час",
"Minute": "Минута",
"Month": "Месяц",
"NoLimit": "Без ограничений",
"Year": "Год",
"annualReset": "Ежегодный Сброс",
"basic": "Основной",
"cancel": "Отмена",
"confirm": "Подтвердить",
"deductionRatio": "Автоматическая/Ручная Конфигурация Вычетов",
"deductionRatioDescription": "Используется для вычетов. По умолчанию система использует алгоритм автоматического расчета. Когда предоставляется ручное соотношение, система рассчитывает пропорции на основе времени и трафика, обеспечивая, чтобы сумма составляла 100%.",
"description": "Описание",
"deviceLimit": "Ограничение устройств",
"discount": "Скидка",
"discountDescription": "Установить скидку на основе цены за единицу",
"discountMonths": "месяцев",
"discountPercent": "Процент скидки",
"discount_price": "Цена со скидкой",
"duration": "Продолжительность (месяцы)",
"groupId": "Группа подписки",
"inventory": "Лимит подписки",
"monthlyReset": "Ежемесячный Сброс",
"name": "Название",
"noLimit": "Без ограничений",
"noReset": "Без Сброса",
"pricing": "Цены",
"purchaseWithDiscount": "Разрешить Вычет",
"purchaseWithDiscountDescription": "Включить или отключить функцию отписки. После активации система выполнит обработку вычетов в соответствии с настроенными правилами и пропорциями, а оставшаяся сумма будет возвращена на баланс",
"quota": "Лимит покупки",
"renewalReset": "Сброс при Обновлении",
"renewalResetDescription": "Сброс цикла при обновлении",
"replacement": "Цена замены (за раз)",
"resetCycle": "Цикл Сброса",
"resetOn1st": "Сброс 1-го числа",
"selectResetCycle": "Пожалуйста, выберите цикл сброса",
"selectSubscribeGroup": "Пожалуйста, выберите группу подписки",
"selectUnitTime": "Пожалуйста, выберите единицу времени",
"server": "Сервер",
"serverGroup": "Группа серверов",
"servers": "Серверы",
"speedLimit": "Ограничение скорости",
"traffic": "Трафик",
"unitPrice": "Цена за единицу",
"unitTime": "Единица времени"
},
"group": {
"actions": "Действия",
"cancel": "Отмена",
"confirm": "Подтвердить",
"confirmDelete": "Вы уверены, что хотите удалить?",
"create": "Создать",
"createSubscribeGroup": "Создать новую группу подписок",
"createSuccess": "Успешно создано",
"delete": "Удалить",
"deleteSuccess": "Успешно удалено",
"deleteWarning": "После удаления данные не могут быть восстановлены, пожалуйста, будьте осторожны.",
"description": "Описание",
"edit": "Редактировать",
"editSubscribeGroup": "Редактировать группу подписок",
"form": {
"cancel": "Отмена",
"confirm": "Подтвердить",
"description": "Описание",
"name": "Название"
},
"name": "Название",
"title": "Список групп подписок",
"updateSuccess": "Успешно обновлено",
"updatedAt": "Время обновления"
},
"inventory": "Лимит подписки",
"name": "название",
"quota": "Лимит/раз",
"replacement": "Сбросить цену/раз",
"sell": "Продажа",
"show": "Показать",
"sold": "Количество подписок",
"subscribe": "Подписаться",
"subscribeGroup": "Подписаться на группу",
"tabs": {
"subscribe": "Подписаться",
"subscribeApp": "Конфигурация приложения",
"subscribeConfig": "Конфигурация подписки",
"subscribeGroup": "Группа подписок"
},
"traffic": "трафик",
"unitPrice": "Цена за единицу",
"updateSuccess": "Обновление успешно"
}

View File

@ -1,161 +1,89 @@
{
"actions": "действия",
"app": {
"appDownloadURL": "URL загрузки приложения",
"appIcon": "Иконка приложения",
"appList": "Список приложений",
"appName": "Название приложения",
"backupDomains": "Список резервных доменов",
"backupDomainsDescription": "Список резервных доменов для разрешения доменов, по одному домену на строку",
"batchDelete": "Удалить пакетно",
"cancel": "Отмена",
"communicationKey": "Ключ связи",
"communicationKeyDescription": "Ключ, используемый для связи с клиентом",
"config": "Конфигурация",
"configApp": "Конфигурация приложения",
"confirm": "Подтвердить",
"confirmDelete": "Подтвердить удаление",
"create": "Создать",
"createApp": "Создать приложение",
"createSuccess": "Успешно создано",
"defaultVersion": "По умолчанию",
"actions": {
"cancel": "Отменить",
"delete": "Удалить",
"deleteWarning": "Это действие необратимо",
"describeDescription": "Используется для описания приложения, отображается в списке приложений",
"description": "Описание",
"downloadLink": "Ссылка для загрузки",
"edit": "Редактировать",
"editApp": "Редактировать приложение",
"encryption": "Метод шифрования",
"encryptionDescription": "Выберите метод шифрования для связи с клиентом. Если выбран, клиент будет использовать этот метод для связи с сервером",
"nameDescription": "Название приложения, отображается в списке приложений",
"platform": "Платформа",
"selectApp": "Выбрать приложение",
"selectAppDescription": "Выберите приложение для настройки, все параметры будут применены к выбранному приложению",
"startupPicture": "Стартовое изображение",
"startupPictureDescription": "Стартовое изображение, поддерживает сетевые и локальные изображения. Для сетевых изображений введите полный URL изображения",
"startupPicturePreview": "Предварительный просмотр стартового изображения",
"startupPictureSkip": "Время пропуска стартового изображения",
"startupPictureSkipDescription": "Время отображения стартового изображения в секундах, введите 0, чтобы не отображать",
"subscriptionProtocol": "Протокол подписки",
"updateSuccess": "Успешно обновлено",
"version": "Версия"
"save": "Сохранить",
"saveTemplate": "Сохранить Шаблон"
},
"cancel": "Отмена",
"config": {
"singleSubscriptionMode": "Режим единой подписки",
"singleSubscriptionModeDescription": "Когда включено, все пользовательские подписки будут преобразованы в баланс",
"subscriptionDomain": "Домен подписки",
"subscriptionDomainDescription": "Используется для подписки; оставьте пустым, чтобы использовать домен сайта",
"description": "Управление настройками системы подписки",
"restrictUserAgent": "Ограничение User-Agent",
"restrictUserAgentDescription": "Включить ограничения доступа на основе User-Agent",
"singleSubscriptionMode": "Режим Единой Подписки",
"singleSubscriptionModeDescription": "Ограничить пользователей одной активной подпиской. Существующие подписки не затрагиваются",
"subscriptionDomain": "Домен Подписки",
"subscriptionDomainDescription": "Пользовательский домен для ссылок на подписку",
"subscriptionDomainPlaceholder": "Введите домен подписки, по одному на строку",
"subscriptionPath": "Путь подписки",
"subscriptionPathDescription": "Используется для подписки; обязательно перезапустите систему после изменения для оптимальной производительности",
"subscriptionPathPlaceholder": "Введите",
"updateSuccess": "Успешно обновлено",
"wildcardResolution": "Разрешение подстановочных знаков",
"wildcardResolutionDescription": "Используется для подписки"
"subscriptionPath": "Путь Подписки",
"subscriptionPathDescription": "Пользовательский путь для конечных точек подписки (лучшее выполнение после перезапуска системы)",
"subscriptionPathPlaceholder": "Введите путь подписки",
"title": "Настройки Подписки",
"updateError": "Ошибка обновления",
"updateSuccess": "Настройки успешно обновлены",
"userAgentWhitelist": "Белый список User-Agent",
"userAgentWhitelistDescription": "Разрешенные User-Agent для доступа к подписке, по одному на строку. Встроенные шаблоны автоматически включаются в белый список",
"userAgentWhitelistPlaceholder": "Введите разрешенные User-Agent, по одному на строку",
"wildcardResolution": "Разрешение Подстановочных Знаков",
"wildcardResolutionDescription": "Включить разрешение подстановочных доменов для подписок"
},
"confirm": "Подтвердить",
"confirmDelete": "Вы уверены, что хотите удалить?",
"copy": "Копировать",
"copySuccess": "Успешно скопировано",
"create": "Создать",
"createSubscribe": "Создать подписку",
"createSuccess": "Создание успешно",
"delete": "Удалить",
"deleteSuccess": "Удаление успешно",
"deleteWarning": "После удаления данные не могут быть восстановлены, пожалуйста, действуйте осторожно.",
"deviceLimit": "Количество устройств/шт",
"edit": "редактировать",
"editSubscribe": "Редактировать подписку",
"form": {
"Day": "День",
"Hour": "Час",
"Minute": "Минута",
"Month": "Месяц",
"NoLimit": "Без ограничений",
"Year": "Год",
"annualReset": "Ежегодный Сброс",
"basic": "Основной",
"cancel": "Отмена",
"confirm": "Подтвердить",
"deductionRatio": "Автоматическая/Ручная Конфигурация Вычетов",
"deductionRatioDescription": "Используется для вычетов. По умолчанию система использует алгоритм автоматического расчета. Когда предоставляется ручное соотношение, система рассчитывает пропорции на основе времени и трафика, обеспечивая, чтобы сумма составляла 100%.",
"description": "Описание",
"deviceLimit": "Ограничение устройств",
"discount": "Скидка",
"discountDescription": "Установить скидку на основе цены за единицу",
"discountMonths": "месяцев",
"discountPercent": "Процент скидки",
"discount_price": "Цена со скидкой",
"duration": "Продолжительность (месяцы)",
"groupId": "Группа подписки",
"inventory": "Лимит подписки",
"monthlyReset": "Ежемесячный Сброс",
"name": "Название",
"noLimit": "Без ограничений",
"noReset": "Без Сброса",
"pricing": "Цены",
"purchaseWithDiscount": "Разрешить Вычет",
"purchaseWithDiscountDescription": "Включить или отключить функцию отписки. После активации система выполнит обработку вычетов в соответствии с настроенными правилами и пропорциями, а оставшаяся сумма будет возвращена на баланс",
"quota": "Лимит покупки",
"renewalReset": "Сброс при Обновлении",
"renewalResetDescription": "Сброс цикла при обновлении",
"replacement": "Цена замены (за раз)",
"resetCycle": "Цикл Сброса",
"resetOn1st": "Сброс 1-го числа",
"selectResetCycle": "Пожалуйста, выберите цикл сброса",
"selectSubscribeGroup": "Пожалуйста, выберите группу подписки",
"selectUnitTime": "Пожалуйста, выберите единицу времени",
"server": "Сервер",
"serverGroup": "Группа серверов",
"servers": "Серверы",
"speedLimit": "Ограничение скорости",
"traffic": "Трафик",
"unitPrice": "Цена за единицу",
"unitTime": "Единица времени"
"description": "Настройка параметров подписки и шаблонов клиентов",
"messages": {
"noClients": "Нет Шаблонов Клиентов",
"noClientsDescription": "Шаблоны клиентов еще не настроены. Добавьте свой первый шаблон, чтобы начать."
},
"group": {
"actions": "Действия",
"cancel": "Отмена",
"confirm": "Подтвердить",
"confirmDelete": "Вы уверены, что хотите удалить?",
"create": "Создать",
"createSubscribeGroup": "Создать новую группу подписок",
"createSuccess": "Успешно создано",
"delete": "Удалить",
"deleteSuccess": "Успешно удалено",
"deleteWarning": "После удаления данные не могут быть восстановлены, пожалуйста, будьте осторожны.",
"description": "Описание",
"edit": "Редактировать",
"editSubscribeGroup": "Редактировать группу подписок",
"form": {
"cancel": "Отмена",
"confirm": "Подтвердить",
"description": "Описание",
"name": "Название"
"protocol": {
"clients": {
"clash": {
"features": "Большая экосистема, обширные правила, активное сообщество"
},
"egern": {
"features": "Современный клиент для iOS, отличная производительность"
},
"hiddify": {
"features": "Мультиплатформенный, обширные протоколы, дружелюбный к новичкам"
},
"loon": {
"features": "Расширенный клиент для iOS, богатые правила, красивый интерфейс"
},
"netch": {
"features": "Прокси-клиент, ориентированный на игры"
},
"quantumult": {
"features": "Расширенный клиент для iOS, гибкие правила, богатые скрипты"
},
"shadowrocket": {
"features": "Классический клиент для iOS, гибкая конфигурация"
},
"singbox": {
"features": "Последнее ядро, официальный GUI, поддержка нескольких платформ"
},
"stash": {
"features": "Современный мобильный интерфейс, обширные протоколы"
},
"surfboard": {
"features": "Бесплатный, активная разработка, современный интерфейс"
},
"surge": {
"features": "Премиум инструмент для iOS/Mac, мощные функции"
},
"v2box": {
"features": "Удобный клиент V2Ray"
},
"v2rayn": {
"features": "Популярный клиент для Windows, богатый функциями"
},
"v2rayng": {
"features": "Популярный клиент для Android, легковесный"
}
},
"name": "Название",
"title": "Список групп подписок",
"updateSuccess": "Успешно обновлено",
"updatedAt": "Время обновления"
"description": "Управление шаблонами конфигурации подписки для прокси-клиентов",
"features": "Ключевые Особенности",
"platforms": "Платформы",
"subscribeTemplate": "Конфигурация Шаблона Подписки",
"templateContent": "Содержимое Шаблона",
"templatePlaceholder": "Введите шаблон конфигурации клиента...",
"title": "Шаблоны Подписки Клиентов"
},
"inventory": "Лимит подписки",
"name": "название",
"quota": "Лимит/раз",
"replacement": "Сбросить цену/раз",
"sell": "Продажа",
"show": "Показать",
"sold": "Количество подписок",
"subscribe": "Подписаться",
"subscribeGroup": "Подписаться на группу",
"tabs": {
"subscribe": "Подписаться",
"subscribeApp": "Конфигурация приложения",
"subscribeConfig": "Конфигурация подписки",
"subscribeGroup": "Группа подписок"
},
"traffic": "трафик",
"unitPrice": "Цена за единицу",
"updateSuccess": "Обновление успешно"
"title": "Управление Подписками"
}

View File

@ -1,32 +1,25 @@
{
"ADS Config": "การตั้งค่า ADS",
"Announcement Management": "การจัดการประกาศ",
"Apple": "Apple ID",
"Application Management": "การจัดการแอปพลิเคชัน",
"Auth Control": "การควบคุมการยืนยันตัวตน",
"Coupon Management": "การจัดการคูปอง",
"Dashboard": "แดชบอร์ด",
"Device": "อุปกรณ์",
"Document Management": "การจัดการเอกสาร",
"Email": "อีเมล",
"Facebook": "Facebook",
"Finance": "การเงิน",
"General": "ทั่วไป",
"GitHub": "GitHub",
"Google": "Google",
"Order Management": "การจัดการคำสั่งซื้อ",
"Payment Config": "การตั้งค่าการชำระเงิน",
"Phone Number": "หมายเลขโทรศัพท์",
"Product Management": "การจัดการผลิตภัณฑ์",
"Protocol Management": "การจัดการโปรโตคอล",
"Rule Management": "การจัดการกฎ",
"Server": "เซิร์ฟเวอร์",
"Server Management": "การจัดการเซิร์ฟเวอร์",
"Settings": "การตั้งค่า",
"Subscribe Management": "การจัดการการสมัครสมาชิก",
"Subscribe Config": "การตั้งค่าการสมัครสมาชิก",
"System Config": "การกำหนดค่าระบบ",
"System Management": "การจัดการระบบ",
"System Tool": "เครื่องมือระบบ",
"Telegram": "เทเลแกรม",
"Ticket Management": "การจัดการตั๋ว",
"Twitter": "ทวิตเตอร์",
"User": "ผู้ใช้",
"User Detail": "รายละเอียดผู้ใช้",
"User Management": "การจัดการผู้ใช้"

View File

@ -0,0 +1,160 @@
{
"actions": "การดำเนินการ",
"app": {
"appDownloadURL": "URL ดาวน์โหลดแอป",
"appIcon": "ไอคอนแอป",
"appList": "รายการแอป",
"appName": "ชื่อแอป",
"backupDomains": "รายการโดเมนสำรอง",
"backupDomainsDescription": "รายการโดเมนสำรองสำหรับการแก้ไขโดเมน หนึ่งโดเมนต่อบรรทัด",
"batchDelete": "ลบเป็นกลุ่ม",
"cancel": "ยกเลิก",
"communicationKey": "คีย์การสื่อสาร",
"communicationKeyDescription": "คีย์ที่ใช้สำหรับการสื่อสารกับลูกค้า",
"config": "การตั้งค่า",
"configApp": "การตั้งค่าแอป",
"confirm": "ยืนยัน",
"confirmDelete": "ยืนยันการลบ",
"create": "สร้าง",
"createApp": "สร้างแอป",
"createSuccess": "สร้างสำเร็จ",
"defaultVersion": "ค่าเริ่มต้น",
"delete": "ลบ",
"deleteWarning": "การกระทำนี้ไม่สามารถย้อนกลับได้",
"describeDescription": "ใช้เพื่ออธิบายแอปพลิเคชัน แสดงในรายการแอป",
"description": "คำอธิบาย",
"downloadLink": "ลิงก์ดาวน์โหลด",
"edit": "แก้ไข",
"editApp": "แก้ไขแอป",
"encryption": "วิธีการเข้ารหัส",
"encryptionDescription": "เลือกวิธีการเข้ารหัสสำหรับการสื่อสารกับลูกค้า หากเลือกแล้ว ลูกค้าจะใช้วิธีนี้ในการสื่อสารกับเซิร์ฟเวอร์",
"nameDescription": "ชื่อแอปพลิเคชัน แสดงในรายการแอป",
"platform": "แพลตฟอร์ม",
"selectApp": "เลือกแอป",
"selectAppDescription": "เลือกแอปเพื่อกำหนดค่า การตั้งค่าทั้งหมดจะใช้กับแอปที่เลือก",
"startupPicture": "ภาพเริ่มต้น",
"startupPictureDescription": "ภาพเริ่มต้น รองรับภาพจากเครือข่ายและภาพในเครื่อง สำหรับภาพจากเครือข่าย กรุณาใส่ URL ของภาพให้ครบถ้วน",
"startupPicturePreview": "ดูตัวอย่างภาพเริ่มต้น",
"startupPictureSkip": "เวลาข้ามภาพเริ่มต้น",
"startupPictureSkipDescription": "เวลาแสดงภาพเริ่มต้นเป็นวินาที ใส่ 0 เพื่อไม่แสดง",
"subscriptionProtocol": "โปรโตคอลการสมัครสมาชิก",
"updateSuccess": "อัปเดตสำเร็จ",
"version": "เวอร์ชัน"
},
"cancel": "ยกเลิก",
"config": {
"singleSubscriptionMode": "โหมดการสมัครสมาชิกเดี่ยว",
"subscriptionDomain": "โดเมนการสมัครสมาชิก",
"subscriptionDomainDescription": "ใช้สำหรับการสมัครสมาชิก; ปล่อยว่างไว้เพื่อใช้โดเมนของเว็บไซต์",
"subscriptionDomainPlaceholder": "กรอกโดเมนการสมัครสมาชิก หนึ่งบรรทัดต่อหนึ่งโดเมน",
"subscriptionPath": "เส้นทางการสมัครสมาชิก",
"subscriptionPathDescription": "ใช้สำหรับการสมัครสมาชิก; อย่าลืมรีสตาร์ทระบบหลังจากการแก้ไขเพื่อประสิทธิภาพที่ดีที่สุด",
"subscriptionPathPlaceholder": "กรอก",
"updateSuccess": "อัปเดตสำเร็จ",
"wildcardResolution": "การแก้ไขไวลด์การ์ด",
"wildcardResolutionDescription": "ใช้สำหรับการสมัครสมาชิก"
},
"confirm": "ยืนยัน",
"confirmDelete": "คุณแน่ใจหรือว่าต้องการลบ?",
"copy": "คัดลอก",
"copySuccess": "คัดลอกสำเร็จ",
"create": "สร้าง",
"createSubscribe": "สร้างการสมัครสมาชิกใหม่",
"createSuccess": "สร้างสำเร็จ",
"delete": "ลบ",
"deleteSuccess": "ลบสำเร็จ",
"deleteWarning": "หลังจากลบแล้วข้อมูลจะไม่สามารถกู้คืนได้ โปรดดำเนินการด้วยความระมัดระวัง",
"deviceLimit": "จำนวนอุปกรณ์/เครื่อง",
"edit": "แก้ไข",
"editSubscribe": "แก้ไขการสมัครสมาชิก",
"form": {
"Day": "วัน",
"Hour": "ชั่วโมง",
"Minute": "นาที",
"Month": "เดือน",
"NoLimit": "ไม่จำกัด",
"Year": "ปี",
"annualReset": "รีเซ็ตทุกปี",
"basic": "พื้นฐาน",
"cancel": "ยกเลิก",
"confirm": "ยืนยัน",
"deductionRatio": "การตั้งค่าการหักอัตโนมัติ/ด้วยตนเอง",
"deductionRatioDescription": "ใช้สำหรับการหัก โดยค่าเริ่มต้น ระบบจะใช้วิธีการคำนวณอัตโนมัติ เมื่อมีการกำหนดอัตราส่วนด้วยตนเอง ระบบจะคำนวณสัดส่วนตามเวลาและอัตราการใช้งาน เพื่อให้มั่นใจว่ายอดรวมเท่ากับ 100%",
"description": "คำอธิบาย",
"deviceLimit": "จำกัดอุปกรณ์",
"discount": "ส่วนลด",
"discountDescription": "ตั้งค่าส่วนลดตามราคาต่อหน่วย",
"discountMonths": "เดือน",
"discountPercent": "เปอร์เซ็นต์ส่วนลด",
"discount_price": "ราคาหลังหักส่วนลด",
"duration": "ระยะเวลา (เดือน)",
"groupId": "กลุ่มการสมัครสมาชิก",
"inventory": "ขีดจำกัดการสมัครสมาชิก",
"monthlyReset": "รีเซ็ตทุกเดือน",
"name": "ชื่อ",
"noLimit": "ไม่จำกัด",
"noReset": "ไม่รีเซ็ต",
"pricing": "การตั้งราคา",
"purchaseWithDiscount": "อนุญาตให้หัก",
"purchaseWithDiscountDescription": "เปิดหรือปิดการทำงานของฟังก์ชันยกเลิกการสมัคร หลังจากเปิดใช้งาน ระบบจะดำเนินการหักเงินตามกฎและสัดส่วนที่กำหนดไว้ และมูลค่าที่เหลือจะถูกคืนไปยังยอดคงเหลือ",
"quota": "จำนวนจำกัดการซื้อ",
"renewalReset": "รีเซ็ตเมื่อมีการต่ออายุ",
"renewalResetDescription": "รีเซ็ตรอบเมื่อมีการต่ออายุ",
"replacement": "ราคารีเซ็ต (ต่อครั้ง)",
"resetCycle": "รอบการรีเซ็ต",
"resetOn1st": "รีเซ็ตในวันที่ 1",
"selectResetCycle": "กรุณาเลือกรอบการรีเซ็ต",
"selectSubscribeGroup": "กรุณาเลือกกลุ่มการสมัครสมาชิก",
"selectUnitTime": "กรุณาเลือกหน่วยเวลา",
"server": "เซิร์ฟเวอร์",
"serverGroup": "กลุ่มเซิร์ฟเวอร์",
"servers": "เซิร์ฟเวอร์",
"speedLimit": "จำกัดความเร็ว ",
"traffic": "ปริมาณข้อมูล",
"unitPrice": "ราคาต่อหน่วย",
"unitTime": "หน่วยเวลา"
},
"group": {
"actions": "การดำเนินการ",
"cancel": "ยกเลิก",
"confirm": "ยืนยัน",
"confirmDelete": "ยืนยันการลบหรือไม่?",
"create": "สร้าง",
"createSubscribeGroup": "สร้างกลุ่มการสมัครใหม่",
"createSuccess": "สร้างสำเร็จ",
"delete": "ลบ",
"deleteSuccess": "ลบสำเร็จ",
"deleteWarning": "ข้อมูลจะไม่สามารถกู้คืนได้หลังจากลบ โปรดดำเนินการด้วยความระมัดระวัง",
"description": "คำอธิบาย",
"edit": "แก้ไข",
"editSubscribeGroup": "แก้ไขกลุ่มการสมัคร",
"form": {
"cancel": "ยกเลิก",
"confirm": "ยืนยัน",
"description": "คำอธิบาย",
"name": "ชื่อ"
},
"name": "ชื่อ",
"title": "รายการกลุ่มการสมัคร",
"updateSuccess": "อัปเดตสำเร็จ",
"updatedAt": "เวลาอัปเดต"
},
"inventory": "ขีดจำกัดการสมัครสมาชิก",
"name": "ชื่อ",
"quota": "จำกัดการซื้อ/ครั้ง",
"replacement": "รีเซ็ตราคา/ครั้ง",
"sell": "ขาย",
"show": "แสดง",
"sold": "จำนวนการสมัครสมาชิก",
"subscribe": "สมัครสมาชิก",
"subscribeGroup": "สมัครกลุ่ม",
"tabs": {
"subscribe": "สมัครสมาชิก",
"subscribeApp": "การกำหนดค่าแอป",
"subscribeConfig": "การกำหนดค่าการสมัครสมาชิก",
"subscribeGroup": "กลุ่มสมัครสมาชิก"
},
"traffic": "การจราจร",
"unitPrice": "ราคาต่อหน่วย",
"updateSuccess": "อัปเดตสำเร็จ"
}

View File

@ -1,161 +1,89 @@
{
"actions": "การดำเนินการ",
"app": {
"appDownloadURL": "URL ดาวน์โหลดแอป",
"appIcon": "ไอคอนแอป",
"appList": "รายการแอป",
"appName": "ชื่อแอป",
"backupDomains": "รายการโดเมนสำรอง",
"backupDomainsDescription": "รายการโดเมนสำรองสำหรับการแก้ไขโดเมน หนึ่งโดเมนต่อบรรทัด",
"batchDelete": "ลบเป็นกลุ่ม",
"actions": {
"cancel": "ยกเลิก",
"communicationKey": "คีย์การสื่อสาร",
"communicationKeyDescription": "คีย์ที่ใช้สำหรับการสื่อสารกับลูกค้า",
"config": "การตั้งค่า",
"configApp": "การตั้งค่าแอป",
"confirm": "ยืนยัน",
"confirmDelete": "ยืนยันการลบ",
"create": "สร้าง",
"createApp": "สร้างแอป",
"createSuccess": "สร้างสำเร็จ",
"defaultVersion": "ค่าเริ่มต้น",
"delete": "ลบ",
"deleteWarning": "การกระทำนี้ไม่สามารถย้อนกลับได้",
"describeDescription": "ใช้เพื่ออธิบายแอปพลิเคชัน แสดงในรายการแอป",
"description": "คำอธิบาย",
"downloadLink": "ลิงก์ดาวน์โหลด",
"edit": "แก้ไข",
"editApp": "แก้ไขแอป",
"encryption": "วิธีการเข้ารหัส",
"encryptionDescription": "เลือกวิธีการเข้ารหัสสำหรับการสื่อสารกับลูกค้า หากเลือกแล้ว ลูกค้าจะใช้วิธีนี้ในการสื่อสารกับเซิร์ฟเวอร์",
"nameDescription": "ชื่อแอปพลิเคชัน แสดงในรายการแอป",
"platform": "แพลตฟอร์ม",
"selectApp": "เลือกแอป",
"selectAppDescription": "เลือกแอปเพื่อกำหนดค่า การตั้งค่าทั้งหมดจะใช้กับแอปที่เลือก",
"startupPicture": "ภาพเริ่มต้น",
"startupPictureDescription": "ภาพเริ่มต้น รองรับภาพจากเครือข่ายและภาพในเครื่อง สำหรับภาพจากเครือข่าย กรุณาใส่ URL ของภาพให้ครบถ้วน",
"startupPicturePreview": "ดูตัวอย่างภาพเริ่มต้น",
"startupPictureSkip": "เวลาข้ามภาพเริ่มต้น",
"startupPictureSkipDescription": "เวลาแสดงภาพเริ่มต้นเป็นวินาที ใส่ 0 เพื่อไม่แสดง",
"subscriptionProtocol": "โปรโตคอลการสมัครสมาชิก",
"updateSuccess": "อัปเดตสำเร็จ",
"version": "เวอร์ชัน"
"save": "บันทึก",
"saveTemplate": "บันทึกเทมเพลต"
},
"cancel": "ยกเลิก",
"config": {
"singleSubscriptionMode": "โหมดการสมัครสมาชิกเดี่ยว",
"singleSubscriptionModeDescription": "เมื่อเปิดใช้งาน การสมัครสมาชิกทั้งหมดของผู้ใช้จะถูกแปลงเป็นยอดคงเหลือ",
"description": "จัดการการตั้งค่าระบบการสมัครสมาชิก",
"restrictUserAgent": "การจำกัด User-Agent",
"restrictUserAgentDescription": "เปิดใช้งานการจำกัดการเข้าถึงตาม User-Agent",
"singleSubscriptionMode": "โหมดการสมัครสมาชิกเดียว",
"singleSubscriptionModeDescription": "จำกัดผู้ใช้ให้มีการสมัครสมาชิกที่ใช้งานอยู่เพียงหนึ่งรายการ การสมัครสมาชิกที่มีอยู่ไม่ถูกกระทบ",
"subscriptionDomain": "โดเมนการสมัครสมาชิก",
"subscriptionDomainDescription": "ใช้สำหรับการสมัครสมาชิก; ปล่อยว่างไว้เพื่อใช้โดเมนของเว็บไซต์",
"subscriptionDomainPlaceholder": "กรอกโดเมนการสมัครสมาชิก หนึ่งบรรทัดต่อหนึ่งโดเมน",
"subscriptionDomainDescription": "โดเมนที่กำหนดเองสำหรับลิงก์การสมัครสมาชิก",
"subscriptionDomainPlaceholder": "กรอกโดเมนการสมัครสมาชิก, หนึ่งต่อบรรทัด",
"subscriptionPath": "เส้นทางการสมัครสมาชิก",
"subscriptionPathDescription": "ใช้สำหรับการสมัครสมาชิก; อย่าลืมรีสตาร์ทระบบหลังจากการแก้ไขเพื่อประสิทธิภาพที่ดีที่สุด",
"subscriptionPathPlaceholder": "กรอก",
"updateSuccess": "อัปเดตสำเร็จ",
"wildcardResolution": "การแก้ไขไวลด์การ์ด",
"wildcardResolutionDescription": "ใช้สำหรับการสมัครสมาชิก"
"subscriptionPathDescription": "เส้นทางที่กำหนดเองสำหรับจุดสิ้นสุดการสมัครสมาชิก (ประสิทธิภาพดีขึ้นหลังจากการรีสตาร์ทระบบ)",
"subscriptionPathPlaceholder": "กรอกเส้นทางการสมัครสมาชิก",
"title": "การตั้งค่าการสมัครสมาชิก",
"updateError": "การอัปเดตล้มเหลว",
"updateSuccess": "อัปเดตการตั้งค่าเรียบร้อยแล้ว",
"userAgentWhitelist": "รายการอนุญาต User-Agent",
"userAgentWhitelistDescription": "User-Agent ที่อนุญาตสำหรับการเข้าถึงการสมัครสมาชิก หนึ่งรายการต่อบรรทัด เทมเพลตที่มีอยู่จะถูกเพิ่มโดยอัตโนมัติในรายการอนุญาต",
"userAgentWhitelistPlaceholder": "กรอก User-Agent ที่อนุญาต หนึ่งรายการต่อบรรทัด",
"wildcardResolution": "การแก้ไขโดเมนแบบไวลด์การ์ด",
"wildcardResolutionDescription": "เปิดใช้งานการแก้ไขโดเมนแบบไวลด์การ์ดสำหรับการสมัครสมาชิก"
},
"confirm": "ยืนยัน",
"confirmDelete": "คุณแน่ใจหรือว่าต้องการลบ?",
"copy": "คัดลอก",
"copySuccess": "คัดลอกสำเร็จ",
"create": "สร้าง",
"createSubscribe": "สร้างการสมัครสมาชิกใหม่",
"createSuccess": "สร้างสำเร็จ",
"delete": "ลบ",
"deleteSuccess": "ลบสำเร็จ",
"deleteWarning": "หลังจากลบแล้วข้อมูลจะไม่สามารถกู้คืนได้ โปรดดำเนินการด้วยความระมัดระวัง",
"deviceLimit": "จำนวนอุปกรณ์/เครื่อง",
"edit": "แก้ไข",
"editSubscribe": "แก้ไขการสมัครสมาชิก",
"form": {
"Day": "วัน",
"Hour": "ชั่วโมง",
"Minute": "นาที",
"Month": "เดือน",
"NoLimit": "ไม่จำกัด",
"Year": "ปี",
"annualReset": "รีเซ็ตทุกปี",
"basic": "พื้นฐาน",
"cancel": "ยกเลิก",
"confirm": "ยืนยัน",
"deductionRatio": "การตั้งค่าการหักอัตโนมัติ/ด้วยตนเอง",
"deductionRatioDescription": "ใช้สำหรับการหัก โดยค่าเริ่มต้น ระบบจะใช้วิธีการคำนวณอัตโนมัติ เมื่อมีการกำหนดอัตราส่วนด้วยตนเอง ระบบจะคำนวณสัดส่วนตามเวลาและอัตราการใช้งาน เพื่อให้มั่นใจว่ายอดรวมเท่ากับ 100%",
"description": "คำอธิบาย",
"deviceLimit": "จำกัดอุปกรณ์",
"discount": "ส่วนลด",
"discountDescription": "ตั้งค่าส่วนลดตามราคาต่อหน่วย",
"discountMonths": "เดือน",
"discountPercent": "เปอร์เซ็นต์ส่วนลด",
"discount_price": "ราคาหลังหักส่วนลด",
"duration": "ระยะเวลา (เดือน)",
"groupId": "กลุ่มการสมัครสมาชิก",
"inventory": "ขีดจำกัดการสมัครสมาชิก",
"monthlyReset": "รีเซ็ตทุกเดือน",
"name": "ชื่อ",
"noLimit": "ไม่จำกัด",
"noReset": "ไม่รีเซ็ต",
"pricing": "การตั้งราคา",
"purchaseWithDiscount": "อนุญาตให้หัก",
"purchaseWithDiscountDescription": "เปิดหรือปิดการทำงานของฟังก์ชันยกเลิกการสมัคร หลังจากเปิดใช้งาน ระบบจะดำเนินการหักเงินตามกฎและสัดส่วนที่กำหนดไว้ และมูลค่าที่เหลือจะถูกคืนไปยังยอดคงเหลือ",
"quota": "จำนวนจำกัดการซื้อ",
"renewalReset": "รีเซ็ตเมื่อมีการต่ออายุ",
"renewalResetDescription": "รีเซ็ตรอบเมื่อมีการต่ออายุ",
"replacement": "ราคารีเซ็ต (ต่อครั้ง)",
"resetCycle": "รอบการรีเซ็ต",
"resetOn1st": "รีเซ็ตในวันที่ 1",
"selectResetCycle": "กรุณาเลือกรอบการรีเซ็ต",
"selectSubscribeGroup": "กรุณาเลือกกลุ่มการสมัครสมาชิก",
"selectUnitTime": "กรุณาเลือกหน่วยเวลา",
"server": "เซิร์ฟเวอร์",
"serverGroup": "กลุ่มเซิร์ฟเวอร์",
"servers": "เซิร์ฟเวอร์",
"speedLimit": "จำกัดความเร็ว ",
"traffic": "ปริมาณข้อมูล",
"unitPrice": "ราคาต่อหน่วย",
"unitTime": "หน่วยเวลา"
"description": "กำหนดค่าการตั้งค่าการสมัครสมาชิกและเทมเพลตของลูกค้า",
"messages": {
"noClients": "ไม่มีเทมเพลตลูกค้า",
"noClientsDescription": "ยังไม่มีการกำหนดเทมเพลตลูกค้า เพิ่มเทมเพลตแรกของคุณเพื่อเริ่มต้น"
},
"group": {
"actions": "การดำเนินการ",
"cancel": "ยกเลิก",
"confirm": "ยืนยัน",
"confirmDelete": "ยืนยันการลบหรือไม่?",
"create": "สร้าง",
"createSubscribeGroup": "สร้างกลุ่มการสมัครใหม่",
"createSuccess": "สร้างสำเร็จ",
"delete": "ลบ",
"deleteSuccess": "ลบสำเร็จ",
"deleteWarning": "ข้อมูลจะไม่สามารถกู้คืนได้หลังจากลบ โปรดดำเนินการด้วยความระมัดระวัง",
"description": "คำอธิบาย",
"edit": "แก้ไข",
"editSubscribeGroup": "แก้ไขกลุ่มการสมัคร",
"form": {
"cancel": "ยกเลิก",
"confirm": "ยืนยัน",
"description": "คำอธิบาย",
"name": "ชื่อ"
"protocol": {
"clients": {
"clash": {
"features": "ระบบนิเวศขนาดใหญ่, กฎที่ครอบคลุม, ชุมชนที่กระตือรือร้น"
},
"egern": {
"features": "ลูกค้า iOS ที่ทันสมัย, ประสิทธิภาพยอดเยี่ยม"
},
"hiddify": {
"features": "หลายแพลตฟอร์ม, โปรโตคอลที่ครอบคลุม, เหมาะสำหรับผู้เริ่มต้น"
},
"loon": {
"features": "ลูกค้าขั้นสูงสำหรับ iOS, กฎที่หลากหลาย, อินเทอร์เฟซที่สวยงาม"
},
"netch": {
"features": "ลูกค้าพร็อกซีที่มุ่งเน้นการเล่นเกม"
},
"quantumult": {
"features": "ลูกค้าขั้นสูงสำหรับ iOS, กฎที่ยืดหยุ่น, สคริปต์ที่หลากหลาย"
},
"shadowrocket": {
"features": "ลูกค้า iOS คลาสสิก, การกำหนดค่าที่ยืดหยุ่น"
},
"singbox": {
"features": "เคอร์เนลล่าสุด, GUI อย่างเป็นทางการ, รองรับหลายแพลตฟอร์ม"
},
"stash": {
"features": "UI มือถือที่ทันสมัย, โปรโตคอลที่ครอบคลุม"
},
"surfboard": {
"features": "ฟรี, การพัฒนาที่กระตือรือร้น, อินเทอร์เฟซที่ทันสมัย"
},
"surge": {
"features": "เครื่องมือ iOS/Mac ระดับพรีเมียม, คุณสมบัติที่ทรงพลัง"
},
"v2box": {
"features": "ลูกค้า V2Ray ที่ใช้งานง่าย"
},
"v2rayn": {
"features": "ลูกค้าที่ได้รับความนิยมสำหรับ Windows, ฟีเจอร์มากมาย"
},
"v2rayng": {
"features": "ลูกค้าที่ได้รับความนิยมสำหรับ Android, น้ำหนักเบา"
}
},
"name": "ชื่อ",
"title": "รายการกลุ่มการสมัคร",
"updateSuccess": "อัปเดตสำเร็จ",
"updatedAt": "เวลาอัปเดต"
"description": "จัดการเทมเพลตการกำหนดค่าการสมัครสมาชิกสำหรับลูกค้าพร็อกซี",
"features": "คุณสมบัติหลัก",
"platforms": "แพลตฟอร์ม",
"subscribeTemplate": "การกำหนดค่าเทมเพลตการสมัครสมาชิก",
"templateContent": "เนื้อหาเทมเพลต",
"templatePlaceholder": "กรอกเทมเพลตการกำหนดค่าลูกค้า...",
"title": "เทมเพลตการสมัครสมาชิกของลูกค้า"
},
"inventory": "ขีดจำกัดการสมัครสมาชิก",
"name": "ชื่อ",
"quota": "จำกัดการซื้อ/ครั้ง",
"replacement": "รีเซ็ตราคา/ครั้ง",
"sell": "ขาย",
"show": "แสดง",
"sold": "จำนวนการสมัครสมาชิก",
"subscribe": "สมัครสมาชิก",
"subscribeGroup": "สมัครกลุ่ม",
"tabs": {
"subscribe": "สมัครสมาชิก",
"subscribeApp": "การกำหนดค่าแอป",
"subscribeConfig": "การกำหนดค่าการสมัครสมาชิก",
"subscribeGroup": "กลุ่มสมัครสมาชิก"
},
"traffic": "การจราจร",
"unitPrice": "ราคาต่อหน่วย",
"updateSuccess": "อัปเดตสำเร็จ"
"title": "การจัดการการสมัครสมาชิก"
}

View File

@ -1,32 +1,25 @@
{
"ADS Config": "ADS Yapılandırması",
"Announcement Management": "Duyuru Yönetimi",
"Apple": "Apple Kimliği",
"Application Management": "Uygulama Yönetimi",
"Auth Control": "Yetki Kontrolü",
"Coupon Management": "Kupon Yönetimi",
"Dashboard": "Gösterge Paneli",
"Device": "Cihaz",
"Document Management": "Belge Yönetimi",
"Email": "E-posta",
"Facebook": "Facebook",
"Finance": "Finans",
"General": "Genel",
"GitHub": "GitHub",
"Google": "Google",
"Order Management": "Sipariş Yönetimi",
"Payment Config": "Ödeme Yapılandırması",
"Phone Number": "Telefon Numarası",
"Product Management": "Ürün Yönetimi",
"Protocol Management": "Protokol Yönetimi",
"Rule Management": "Kural Yönetimi",
"Server": "Sunucu",
"Server Management": "Sunucu Yönetimi",
"Settings": "Ayarlar",
"Subscribe Management": "Abonelik Yönetimi",
"Subscribe Config": "Abone Ayarları",
"System Config": "Sistem Yapılandırması",
"System Management": "Sistem Yönetimi",
"System Tool": "Sistem Aracı",
"Telegram": "Telegram",
"Ticket Management": "Bilet Yönetimi",
"Twitter": "Twitter",
"User": "Kullanıcı",
"User Detail": "Kullanıcı Detayı",
"User Management": "Kullanıcı Yönetimi"

View File

@ -0,0 +1,160 @@
{
"actions": "eylemler",
"app": {
"appDownloadURL": "Uygulama İndirme URL'si",
"appIcon": "Uygulama Simgesi",
"appList": "Uygulama Listesi",
"appName": "Uygulama Adı",
"backupDomains": "Yedek Alan Adı Listesi",
"backupDomainsDescription": "Alan adı çözümlemesi için yedek alan adı listesi, her satıra bir alan adı",
"batchDelete": "Toplu Sil",
"cancel": "İptal",
"communicationKey": "İletişim Anahtarı",
"communicationKeyDescription": "Müşteri iletişimi için kullanılan anahtar",
"config": "Yapılandırma",
"configApp": "Uygulama Yapılandırması",
"confirm": "Onayla",
"confirmDelete": "Silme İşlemini Onayla",
"create": "Oluştur",
"createApp": "Uygulama Oluştur",
"createSuccess": "Başarıyla oluşturuldu",
"defaultVersion": "Varsayılan",
"delete": "Sil",
"deleteWarning": "Bu işlem geri alınamaz",
"describeDescription": "Uygulamayı tanımlamak için kullanılır, uygulama listesinde görüntülenir",
"description": "Açıklama",
"downloadLink": "İndirme Bağlantısı",
"edit": "Düzenle",
"editApp": "Uygulamayı Düzenle",
"encryption": "Şifreleme Yöntemi",
"encryptionDescription": "Müşteri iletişimi için şifreleme yöntemini seçin. Seçildiğinde, müşteri bu yöntemi sunucu ile iletişim kurmak için kullanacaktır",
"nameDescription": "Uygulama adı, uygulama listesinde görüntülenir",
"platform": "Platform",
"selectApp": "Uygulama Seç",
"selectAppDescription": "Yapılandırmak için uygulamayı seçin, tüm ayarlar seçilen uygulamaya uygulanacaktır",
"startupPicture": "Başlangıç Resmi",
"startupPictureDescription": "Başlangıç resmi, ağ ve yerel resimleri destekler. Ağ resimleri için lütfen tam resim URL'sini girin",
"startupPicturePreview": "Başlangıç Resmi Önizlemesi",
"startupPictureSkip": "Başlangıç Resmi Atla Süresi",
"startupPictureSkipDescription": "Başlangıç resminin görüntülenme süresi saniye cinsinden, görüntülenmemesi için 0 girin",
"subscriptionProtocol": "Abonelik Protokolü",
"updateSuccess": "Başarıyla güncellendi",
"version": "Sürüm"
},
"cancel": "İptal",
"config": {
"singleSubscriptionMode": "Tek Abonelik Modu",
"subscriptionDomain": "Abonelik Alanı",
"subscriptionDomainDescription": "Abonelik için kullanılır; site alan adını kullanmak için boş bırakın",
"subscriptionDomainPlaceholder": "Abonelik alan adını girin, her satıra bir tane",
"subscriptionPath": "Abonelik Yolu",
"subscriptionPathDescription": "Abonelik için kullanılır; en iyi performans için değişiklikten sonra sistemi yeniden başlattığınızdan emin olun",
"subscriptionPathPlaceholder": "Giriniz",
"updateSuccess": "Başarıyla güncellendi",
"wildcardResolution": "Genel Çözümleme",
"wildcardResolutionDescription": "Abonelik için kullanılır"
},
"confirm": "Onayla",
"confirmDelete": "Silmek istediğinizden emin misiniz?",
"copy": "Kopyala",
"copySuccess": "Başarıyla kopyalandı",
"create": "oluştur",
"createSubscribe": "Yeni Abonelik Oluştur",
"createSuccess": "Başarıyla oluşturuldu",
"delete": "sil",
"deleteSuccess": "Başarıyla silindi",
"deleteWarning": "Sildikten sonra veriler kurtarılamaz, lütfen dikkatli olun.",
"deviceLimit": "Cihaz sayısı/adet",
"edit": "düzenle",
"editSubscribe": "Aboneliği Düzenle",
"form": {
"Day": "Gün",
"Hour": "Saat",
"Minute": "Dakika",
"Month": "Ay",
"NoLimit": "Sınırsız",
"Year": "Yıl",
"annualReset": "Yıllık Sıfırlama",
"basic": "Temel",
"cancel": "İptal",
"confirm": "Onayla",
"deductionRatio": "Otomatik/Manuel Kesinti Yapılandırması",
"deductionRatioDescription": "Kesinti için kullanılır. Varsayılan olarak, sistem otomatik hesaplama algoritmasını benimser. Manuel bir oran sağlandığında, sistem zaman ve trafik oranına göre hesaplamalar yapar ve toplamın %100 olmasını sağlar.",
"description": "Açıklama",
"deviceLimit": "Cihaz Sınırı",
"discount": "İndirim",
"discountDescription": "Birim fiyatına göre indirim ayarla",
"discountMonths": "Ay",
"discountPercent": "İndirim Yüzdesi",
"discount_price": "İndirimli Fiyat",
"duration": "Süre (ay)",
"groupId": "Abonelik Grubu",
"inventory": "Abonelik Limiti",
"monthlyReset": "Aylık Sıfırlama",
"name": "Ad",
"noLimit": "Sınırsız",
"noReset": "Sıfırlama Yok",
"pricing": "Fiyatlandırma",
"purchaseWithDiscount": "Kesintiye İzin Ver",
"purchaseWithDiscountDescription": "Abonelikten çıkma işlevini etkinleştir veya devre dışı bırak. Etkinleştirildikten sonra, sistem yapılandırılmış kurallar ve oranlara göre kesinti işlemi yapacak ve kalan değer bakiyeye iade edilecektir.",
"quota": "Satın Alma Limiti",
"renewalReset": "Yenileme Sıfırlaması",
"renewalResetDescription": "Yenileme üzerine sıfırlama döngüsü",
"replacement": "Yenileme Ücreti (her seferinde)",
"resetCycle": "Sıfırlama Döngüsü",
"resetOn1st": "1'inde Sıfırla",
"selectResetCycle": "Lütfen bir sıfırlama döngüsü seçin",
"selectSubscribeGroup": "Abonelik Grubunu Seçiniz",
"selectUnitTime": "Lütfen birim zamanı seçin",
"server": "Sunucu",
"serverGroup": "Sunucu Grubu",
"servers": "Sunucular",
"speedLimit": "Hız Sınırı ",
"traffic": "Trafik",
"unitPrice": "Birim fiyatı",
"unitTime": "Birim zamanı"
},
"group": {
"actions": "Eylemler",
"cancel": "İptal",
"confirm": "Onayla",
"confirmDelete": "Silmek istediğinizden emin misiniz?",
"create": "Oluştur",
"createSubscribeGroup": "Yeni Abonelik Grubu Oluştur",
"createSuccess": "Başarıyla oluşturuldu",
"delete": "Sil",
"deleteSuccess": "Başarıyla silindi",
"deleteWarning": "Sildikten sonra veriler geri alınamaz, lütfen dikkatli olun.",
"description": "Açıklama",
"edit": "Düzenle",
"editSubscribeGroup": "Abonelik Grubunu Düzenle",
"form": {
"cancel": "İptal",
"confirm": "Onayla",
"description": "Açıklama",
"name": "Ad"
},
"name": "Ad",
"title": "Abonelik Grubu Listesi",
"updateSuccess": "Başarıyla güncellendi",
"updatedAt": "Güncellenme Zamanı"
},
"inventory": "Abonelik Limiti",
"name": "isim",
"quota": "Kota/satın alma",
"replacement": "Fiyatı sıfırla/kez",
"sell": "satış",
"show": "Göster",
"sold": "Abonelik Sayısı",
"subscribe": "Abone Ol",
"subscribeGroup": "Gruba Abone Ol",
"tabs": {
"subscribe": "Abone Ol",
"subscribeApp": "Uygulama Yapılandırması",
"subscribeConfig": "Abonelik Yapılandırması",
"subscribeGroup": "Abone Grubu"
},
"traffic": "trafik",
"unitPrice": "Birim Fiyatı",
"updateSuccess": "Güncelleme başarılı"
}

View File

@ -1,161 +1,89 @@
{
"actions": "eylemler",
"app": {
"appDownloadURL": "Uygulama İndirme URL'si",
"appIcon": "Uygulama Simgesi",
"appList": "Uygulama Listesi",
"appName": "Uygulama Adı",
"backupDomains": "Yedek Alan Adı Listesi",
"backupDomainsDescription": "Alan adı çözümlemesi için yedek alan adı listesi, her satıra bir alan adı",
"batchDelete": "Toplu Sil",
"actions": {
"cancel": "İptal",
"communicationKey": "İletişim Anahtarı",
"communicationKeyDescription": "Müşteri iletişimi için kullanılan anahtar",
"config": "Yapılandırma",
"configApp": "Uygulama Yapılandırması",
"confirm": "Onayla",
"confirmDelete": "Silme İşlemini Onayla",
"create": "Oluştur",
"createApp": "Uygulama Oluştur",
"createSuccess": "Başarıyla oluşturuldu",
"defaultVersion": "Varsayılan",
"delete": "Sil",
"deleteWarning": "Bu işlem geri alınamaz",
"describeDescription": "Uygulamayı tanımlamak için kullanılır, uygulama listesinde görüntülenir",
"description": "Açıklama",
"downloadLink": "İndirme Bağlantısı",
"edit": "Düzenle",
"editApp": "Uygulamayı Düzenle",
"encryption": "Şifreleme Yöntemi",
"encryptionDescription": "Müşteri iletişimi için şifreleme yöntemini seçin. Seçildiğinde, müşteri bu yöntemi sunucu ile iletişim kurmak için kullanacaktır",
"nameDescription": "Uygulama adı, uygulama listesinde görüntülenir",
"platform": "Platform",
"selectApp": "Uygulama Seç",
"selectAppDescription": "Yapılandırmak için uygulamayı seçin, tüm ayarlar seçilen uygulamaya uygulanacaktır",
"startupPicture": "Başlangıç Resmi",
"startupPictureDescription": "Başlangıç resmi, ağ ve yerel resimleri destekler. Ağ resimleri için lütfen tam resim URL'sini girin",
"startupPicturePreview": "Başlangıç Resmi Önizlemesi",
"startupPictureSkip": "Başlangıç Resmi Atla Süresi",
"startupPictureSkipDescription": "Başlangıç resminin görüntülenme süresi saniye cinsinden, görüntülenmemesi için 0 girin",
"subscriptionProtocol": "Abonelik Protokolü",
"updateSuccess": "Başarıyla güncellendi",
"version": "Sürüm"
"save": "Kaydet",
"saveTemplate": "Şablonu Kaydet"
},
"cancel": "İptal",
"config": {
"description": "Abonelik sistemi ayarlarını yönetin",
"restrictUserAgent": "Kullanıcı Aracısı Kısıtlaması",
"restrictUserAgentDescription": "Kullanıcı Aracısına dayalı erişim kısıtlamalarını etkinleştir",
"singleSubscriptionMode": "Tek Abonelik Modu",
"singleSubscriptionModeDescription": "Etkinleştirildiğinde, tüm kullanıcı abonelikleri bakiyeye dönüştürülecektir",
"singleSubscriptionModeDescription": "Kullanıcıları bir aktif abonelikle sınırlayın. Mevcut abonelikler etkilenmez",
"subscriptionDomain": "Abonelik Alanı",
"subscriptionDomainDescription": "Abonelik için kullanılır; site alan adını kullanmak için boş bırakın",
"subscriptionDomainPlaceholder": "Abonelik alan adını girin, her satıra bir tane",
"subscriptionDomainDescription": "Abonelik bağlantıları için özel alan",
"subscriptionDomainPlaceholder": "Abonelik alanını girin, her satıra bir tane",
"subscriptionPath": "Abonelik Yolu",
"subscriptionPathDescription": "Abonelik için kullanılır; en iyi performans için değişiklikten sonra sistemi yeniden başlattığınızdan emin olun",
"subscriptionPathPlaceholder": "Giriniz",
"updateSuccess": "Başarıyla güncellendi",
"wildcardResolution": "Genel Çözümleme",
"wildcardResolutionDescription": "Abonelik için kullanılır"
"subscriptionPathDescription": "Abonelik uç noktaları için özel yol (sistem yeniden başlatıldığında daha iyi performans)",
"subscriptionPathPlaceholder": "Abonelik yolunu girin",
"title": "Abonelik Yapılandırması",
"updateError": "Güncelleme başarısız oldu",
"updateSuccess": "Ayarlar başarıyla güncellendi",
"userAgentWhitelist": "Kullanıcı Aracısı Beyaz Listesi",
"userAgentWhitelistDescription": "Abonelik erişimi için izin verilen Kullanıcı Aracıları, her biri bir satıra. Yerleşik şablonlar otomatik olarak beyaz listeye dahil edilir",
"userAgentWhitelistPlaceholder": "İzin verilen Kullanıcı Aracılarını girin, her biri bir satıra",
"wildcardResolution": "Wildcard Çözümü",
"wildcardResolutionDescription": "Abonelikler için wildcard alan çözümlemesini etkinleştir"
},
"confirm": "Onayla",
"confirmDelete": "Silmek istediğinizden emin misiniz?",
"copy": "Kopyala",
"copySuccess": "Başarıyla kopyalandı",
"create": "oluştur",
"createSubscribe": "Yeni Abonelik Oluştur",
"createSuccess": "Başarıyla oluşturuldu",
"delete": "sil",
"deleteSuccess": "Başarıyla silindi",
"deleteWarning": "Sildikten sonra veriler kurtarılamaz, lütfen dikkatli olun.",
"deviceLimit": "Cihaz sayısı/adet",
"edit": "düzenle",
"editSubscribe": "Aboneliği Düzenle",
"form": {
"Day": "Gün",
"Hour": "Saat",
"Minute": "Dakika",
"Month": "Ay",
"NoLimit": "Sınırsız",
"Year": "Yıl",
"annualReset": "Yıllık Sıfırlama",
"basic": "Temel",
"cancel": "İptal",
"confirm": "Onayla",
"deductionRatio": "Otomatik/Manuel Kesinti Yapılandırması",
"deductionRatioDescription": "Kesinti için kullanılır. Varsayılan olarak, sistem otomatik hesaplama algoritmasını benimser. Manuel bir oran sağlandığında, sistem zaman ve trafik oranına göre hesaplamalar yapar ve toplamın %100 olmasını sağlar.",
"description": "Açıklama",
"deviceLimit": "Cihaz Sınırı",
"discount": "İndirim",
"discountDescription": "Birim fiyatına göre indirim ayarla",
"discountMonths": "Ay",
"discountPercent": "İndirim Yüzdesi",
"discount_price": "İndirimli Fiyat",
"duration": "Süre (ay)",
"groupId": "Abonelik Grubu",
"inventory": "Abonelik Limiti",
"monthlyReset": "Aylık Sıfırlama",
"name": "Ad",
"noLimit": "Sınırsız",
"noReset": "Sıfırlama Yok",
"pricing": "Fiyatlandırma",
"purchaseWithDiscount": "Kesintiye İzin Ver",
"purchaseWithDiscountDescription": "Abonelikten çıkma işlevini etkinleştir veya devre dışı bırak. Etkinleştirildikten sonra, sistem yapılandırılmış kurallar ve oranlara göre kesinti işlemi yapacak ve kalan değer bakiyeye iade edilecektir.",
"quota": "Satın Alma Limiti",
"renewalReset": "Yenileme Sıfırlaması",
"renewalResetDescription": "Yenileme üzerine sıfırlama döngüsü",
"replacement": "Yenileme Ücreti (her seferinde)",
"resetCycle": "Sıfırlama Döngüsü",
"resetOn1st": "1'inde Sıfırla",
"selectResetCycle": "Lütfen bir sıfırlama döngüsü seçin",
"selectSubscribeGroup": "Abonelik Grubunu Seçiniz",
"selectUnitTime": "Lütfen birim zamanı seçin",
"server": "Sunucu",
"serverGroup": "Sunucu Grubu",
"servers": "Sunucular",
"speedLimit": "Hız Sınırı ",
"traffic": "Trafik",
"unitPrice": "Birim fiyatı",
"unitTime": "Birim zamanı"
"description": "Abonelik ayarlarını ve istemci şablonlarını yapılandırın",
"messages": {
"noClients": "İstemci Şablonu Yok",
"noClientsDescription": "Henüz yapılandırılmış istemci şablonu yok. Başlamak için ilk şablonunuzu ekleyin."
},
"group": {
"actions": "Eylemler",
"cancel": "İptal",
"confirm": "Onayla",
"confirmDelete": "Silmek istediğinizden emin misiniz?",
"create": "Oluştur",
"createSubscribeGroup": "Yeni Abonelik Grubu Oluştur",
"createSuccess": "Başarıyla oluşturuldu",
"delete": "Sil",
"deleteSuccess": "Başarıyla silindi",
"deleteWarning": "Sildikten sonra veriler geri alınamaz, lütfen dikkatli olun.",
"description": "Açıklama",
"edit": "Düzenle",
"editSubscribeGroup": "Abonelik Grubunu Düzenle",
"form": {
"cancel": "İptal",
"confirm": "Onayla",
"description": "Açıklama",
"name": "Ad"
"protocol": {
"clients": {
"clash": {
"features": "Geniş ekosistem, kapsamlı kurallar, aktif topluluk"
},
"egern": {
"features": "Modern iOS istemcisi, mükemmel performans"
},
"hiddify": {
"features": "Çoklu platform, kapsamlı protokoller, başlangıç dostu"
},
"loon": {
"features": "iOS gelişmiş istemcisi, zengin kurallar, güzel arayüz"
},
"netch": {
"features": "Oyun odaklı proxy istemcisi"
},
"quantumult": {
"features": "iOS gelişmiş istemcisi, esnek kurallar, zengin betikler"
},
"shadowrocket": {
"features": "Klasik iOS istemcisi, esnek yapılandırma"
},
"singbox": {
"features": "En son çekirdek, resmi GUI, çoklu platform desteği"
},
"stash": {
"features": "Modern mobil arayüz, kapsamlı protokoller"
},
"surfboard": {
"features": "Ücretsiz, aktif geliştirme, modern arayüz"
},
"surge": {
"features": "Premium iOS/Mac aracı, güçlü özellikler"
},
"v2box": {
"features": "Kullanıcı dostu V2Ray istemcisi"
},
"v2rayn": {
"features": "Popüler Windows istemcisi, özellik zengini"
},
"v2rayng": {
"features": "Popüler Android istemcisi, hafif"
}
},
"name": "Ad",
"title": "Abonelik Grubu Listesi",
"updateSuccess": "Başarıyla güncellendi",
"updatedAt": "Güncellenme Zamanı"
"description": "Proxy istemcileri için abonelik yapılandırma şablonlarını yönetin",
"features": "Ana Özellikler",
"platforms": "Platformlar",
"subscribeTemplate": "Abonelik Şablonu Yapılandırması",
"templateContent": "Şablon İçeriği",
"templatePlaceholder": "İstemci yapılandırma şablonunu girin...",
"title": "İstemci Abonelik Şablonları"
},
"inventory": "Abonelik Limiti",
"name": "isim",
"quota": "Kota/satın alma",
"replacement": "Fiyatı sıfırla/kez",
"sell": "satış",
"show": "Göster",
"sold": "Abonelik Sayısı",
"subscribe": "Abone Ol",
"subscribeGroup": "Gruba Abone Ol",
"tabs": {
"subscribe": "Abone Ol",
"subscribeApp": "Uygulama Yapılandırması",
"subscribeConfig": "Abonelik Yapılandırması",
"subscribeGroup": "Abone Grubu"
},
"traffic": "trafik",
"unitPrice": "Birim Fiyatı",
"updateSuccess": "Güncelleme başarılı"
"title": "Abonelik Yönetimi"
}

View File

@ -1,32 +1,25 @@
{
"ADS Config": "Конфігурація ADS",
"Announcement Management": "Управління оголошеннями",
"Apple": "Apple ID",
"Application Management": "Управління додатками",
"Auth Control": "Контроль автентифікації",
"Coupon Management": "Управління купонами",
"Dashboard": "Панель приладів",
"Device": "Пристрій",
"Document Management": "Управління документами",
"Email": "Електронна пошта",
"Facebook": "Facebook",
"Finance": "Фінанси",
"General": "Загальні",
"GitHub": "GitHub",
"Google": "Google",
"Order Management": "Управління замовленнями",
"Payment Config": "Налаштування оплати",
"Phone Number": "Номер телефону",
"Product Management": "Управління продуктом",
"Protocol Management": "Управління протоколом",
"Rule Management": "Управління правилами",
"Server": "Сервер",
"Server Management": "Управління сервером",
"Settings": "Налаштування",
"Subscribe Management": "Управління підписками",
"Subscribe Config": "Конфігурація підписки",
"System Config": "Системна конфігурація",
"System Management": "Управління системою",
"System Tool": "Системний інструмент",
"Telegram": "Телеграм",
"Ticket Management": "Управління заявками",
"Twitter": "Твіттер",
"User": "Користувач",
"User Detail": "Деталі користувача",
"User Management": "Управління користувачами"

View File

@ -0,0 +1,160 @@
{
"actions": "дії",
"app": {
"appDownloadURL": "URL завантаження додатку",
"appIcon": "Іконка додатку",
"appList": "Список додатків",
"appName": "Назва додатку",
"backupDomains": "Список резервних доменів",
"backupDomainsDescription": "Список резервних доменів для вирішення доменів, один домен на рядок",
"batchDelete": "Пакетне видалення",
"cancel": "Скасувати",
"communicationKey": "Ключ зв'язку",
"communicationKeyDescription": "Ключ, що використовується для зв'язку з клієнтом",
"config": "Конфігурація",
"configApp": "Конфігурація додатка",
"confirm": "Підтвердити",
"confirmDelete": "Підтвердити видалення",
"create": "Створити",
"createApp": "Створити додаток",
"createSuccess": "Успішно створено",
"defaultVersion": "За замовчуванням",
"delete": "Видалити",
"deleteWarning": "Цю дію не можна скасувати",
"describeDescription": "Використовується для опису додатка, відображається у списку додатків",
"description": "Опис",
"downloadLink": "Посилання для завантаження",
"edit": "Редагувати",
"editApp": "Редагувати додаток",
"encryption": "Метод шифрування",
"encryptionDescription": "Виберіть метод шифрування для зв'язку з клієнтом. Якщо вибрано, клієнт використовуватиме цей метод для зв'язку з сервером",
"nameDescription": "Назва додатка, відображається у списку додатків",
"platform": "Платформа",
"selectApp": "Виберіть додаток",
"selectAppDescription": "Виберіть додаток для налаштування, всі параметри будуть застосовані до вибраного додатка",
"startupPicture": "Зображення при запуску",
"startupPictureDescription": "Зображення при запуску, підтримуються мережеві та локальні зображення. Для мережевих зображень, будь ласка, введіть повну URL-адресу зображення",
"startupPicturePreview": "Попередній перегляд зображення при запуску",
"startupPictureSkip": "Час пропуску зображення при запуску",
"startupPictureSkipDescription": "Час відображення зображення при запуску в секундах, введіть 0, щоб не відображати",
"subscriptionProtocol": "Протокол підписки",
"updateSuccess": "Успішно оновлено",
"version": "Версія"
},
"cancel": "Скасувати",
"config": {
"singleSubscriptionMode": "Режим Однієї Підписки",
"subscriptionDomain": "Домен Підписки",
"subscriptionDomainDescription": "Використовується для підписки; залиште порожнім, щоб використовувати домен сайту",
"subscriptionDomainPlaceholder": "Введіть домен підписки, один на рядок",
"subscriptionPath": "Шлях Підписки",
"subscriptionPathDescription": "Використовується для підписки; обов'язково перезапустіть систему після зміни для оптимальної продуктивності",
"subscriptionPathPlaceholder": "Введіть",
"updateSuccess": "Оновлено успішно",
"wildcardResolution": "Розв'язання Маски",
"wildcardResolutionDescription": "Використовується для підписки"
},
"confirm": "Підтвердити",
"confirmDelete": "Ви впевнені, що хочете видалити?",
"copy": "Копіювати",
"copySuccess": "Успішно скопійовано",
"create": "створити",
"createSubscribe": "Створити підписку",
"createSuccess": "Створено успішно",
"delete": "видалити",
"deleteSuccess": "Видалення успішне",
"deleteWarning": "Після видалення дані не можуть бути відновлені, будь ласка, дійте обережно.",
"deviceLimit": "Кількість пристроїв/одиниць",
"edit": "редагувати",
"editSubscribe": "Редагувати підписку",
"form": {
"Day": "День",
"Hour": "Година",
"Minute": "Хвилина",
"Month": "Місяць",
"NoLimit": "Без обмежень",
"Year": "Рік",
"annualReset": "Щорічне Скидання",
"basic": "Основний",
"cancel": "Скасувати",
"confirm": "Підтвердити",
"deductionRatio": "Автоматична/Ручна Конфігурація Вирахувань",
"deductionRatioDescription": "Використовується для вирахувань. За замовчуванням система використовує автоматичний алгоритм розрахунку. Коли надається ручне співвідношення, система розраховує пропорції на основі часу та трафіку, забезпечуючи загальну суму в 100%.",
"description": "Опис",
"deviceLimit": "Обмеження пристроїв",
"discount": "Знижка",
"discountDescription": "Встановити знижку на основі одиничної ціни",
"discountMonths": "місяці",
"discountPercent": "Відсоток знижки",
"discount_price": "Ціна зі знижкою",
"duration": "Тривалість (місяці)",
"groupId": "Група підписки",
"inventory": "Ліміт підписки",
"monthlyReset": "Щомісячне Скидання",
"name": "Назва",
"noLimit": "Без обмежень",
"noReset": "Без Скидання",
"pricing": "Ціноутворення",
"purchaseWithDiscount": "Дозволити Вирахування",
"purchaseWithDiscountDescription": "Увімкніть або вимкніть функцію відписки. Після активації система виконає обробку відрахувань згідно з налаштованими правилами та пропорціями, а залишкова вартість буде повернена на баланс",
"quota": "Ліміт покупки",
"renewalReset": "Скидання при Поновленні",
"renewalResetDescription": "Скидання циклу при поновленні",
"replacement": "Ціна заміни (за раз)",
"resetCycle": "Цикл Скидання",
"resetOn1st": "Скидання 1-го числа",
"selectResetCycle": "Будь ласка, виберіть цикл скидання",
"selectSubscribeGroup": "Будь ласка, виберіть групу підписки",
"selectUnitTime": "Будь ласка, виберіть одиницю часу",
"server": "Сервер",
"serverGroup": "Група серверів",
"servers": "Сервери",
"speedLimit": "Обмеження швидкості",
"traffic": "Трафік",
"unitPrice": "Ціна за одиницю",
"unitTime": "Одиниця часу"
},
"group": {
"actions": "Дії",
"cancel": "Скасувати",
"confirm": "Підтвердити",
"confirmDelete": "Ви впевнені, що хочете видалити?",
"create": "Створити",
"createSubscribeGroup": "Створити нову групу підписки",
"createSuccess": "Успішно створено",
"delete": "Видалити",
"deleteSuccess": "Успішно видалено",
"deleteWarning": "Після видалення дані не можуть бути відновлені, будь ласка, будьте обережні.",
"description": "Опис",
"edit": "Редагувати",
"editSubscribeGroup": "Редагувати групу підписки",
"form": {
"cancel": "Скасувати",
"confirm": "Підтвердити",
"description": "Опис",
"name": "Назва"
},
"name": "Назва",
"title": "Список груп підписки",
"updateSuccess": "Успішно оновлено",
"updatedAt": "Час оновлення"
},
"inventory": "Ліміт підписки",
"name": "Назва",
"quota": "Обмеження на покупку/раз",
"replacement": "Скидання ціни/раз",
"sell": "продаж",
"show": "Показати",
"sold": "Кількість підписок",
"subscribe": "Підписатися",
"subscribeGroup": "Підписатися на групу",
"tabs": {
"subscribe": "Підписатися",
"subscribeApp": "Конфігурація додатку",
"subscribeConfig": "Конфігурація підписки",
"subscribeGroup": "Група підписок"
},
"traffic": "Трафік",
"unitPrice": "Ціна за одиницю",
"updateSuccess": "Оновлення успішне"
}

View File

@ -1,161 +1,89 @@
{
"actions": "дії",
"app": {
"appDownloadURL": "URL завантаження додатку",
"appIcon": "Іконка додатку",
"appList": "Список додатків",
"appName": "Назва додатку",
"backupDomains": "Список резервних доменів",
"backupDomainsDescription": "Список резервних доменів для вирішення доменів, один домен на рядок",
"batchDelete": "Пакетне видалення",
"actions": {
"cancel": "Скасувати",
"communicationKey": "Ключ зв'язку",
"communicationKeyDescription": "Ключ, що використовується для зв'язку з клієнтом",
"config": "Конфігурація",
"configApp": "Конфігурація додатка",
"confirm": "Підтвердити",
"confirmDelete": "Підтвердити видалення",
"create": "Створити",
"createApp": "Створити додаток",
"createSuccess": "Успішно створено",
"defaultVersion": "За замовчуванням",
"delete": "Видалити",
"deleteWarning": "Цю дію не можна скасувати",
"describeDescription": "Використовується для опису додатка, відображається у списку додатків",
"description": "Опис",
"downloadLink": "Посилання для завантаження",
"edit": "Редагувати",
"editApp": "Редагувати додаток",
"encryption": "Метод шифрування",
"encryptionDescription": "Виберіть метод шифрування для зв'язку з клієнтом. Якщо вибрано, клієнт використовуватиме цей метод для зв'язку з сервером",
"nameDescription": "Назва додатка, відображається у списку додатків",
"platform": "Платформа",
"selectApp": "Виберіть додаток",
"selectAppDescription": "Виберіть додаток для налаштування, всі параметри будуть застосовані до вибраного додатка",
"startupPicture": "Зображення при запуску",
"startupPictureDescription": "Зображення при запуску, підтримуються мережеві та локальні зображення. Для мережевих зображень, будь ласка, введіть повну URL-адресу зображення",
"startupPicturePreview": "Попередній перегляд зображення при запуску",
"startupPictureSkip": "Час пропуску зображення при запуску",
"startupPictureSkipDescription": "Час відображення зображення при запуску в секундах, введіть 0, щоб не відображати",
"subscriptionProtocol": "Протокол підписки",
"updateSuccess": "Успішно оновлено",
"version": "Версія"
"save": "Зберегти",
"saveTemplate": "Зберегти Шаблон"
},
"cancel": "Скасувати",
"config": {
"singleSubscriptionMode": "Режим Однієї Підписки",
"singleSubscriptionModeDescription": "Коли увімкнено, всі підписки користувачів будуть перетворені на баланс",
"description": "Керування налаштуваннями системи підписки",
"restrictUserAgent": "Обмеження User-Agent",
"restrictUserAgentDescription": "Увімкнути обмеження доступу на основі User-Agent",
"singleSubscriptionMode": "Режим Одиничної Підписки",
"singleSubscriptionModeDescription": "Обмежити користувачів до однієї активної підписки. Існуючі підписки не підлягають змінам",
"subscriptionDomain": "Домен Підписки",
"subscriptionDomainDescription": "Використовується для підписки; залиште порожнім, щоб використовувати домен сайту",
"subscriptionDomainPlaceholder": "Введіть домен підписки, один на рядок",
"subscriptionDomainDescription": "Користувацький домен для посилань на підписки",
"subscriptionDomainPlaceholder": "Введіть домен підписки, по одному в рядку",
"subscriptionPath": "Шлях Підписки",
"subscriptionPathDescription": "Використовується для підписки; обов'язково перезапустіть систему після зміни для оптимальної продуктивності",
"subscriptionPathPlaceholder": "Введіть",
"updateSuccess": "Оновлено успішно",
"wildcardResolution": "Розв'язання Маски",
"wildcardResolutionDescription": "Використовується для підписки"
"subscriptionPathDescription": "Користувацький шлях для кінцевих точок підписки (краща продуктивність після перезавантаження системи)",
"subscriptionPathPlaceholder": "Введіть шлях підписки",
"title": "Налаштування Підписки",
"updateError": "Не вдалося оновити",
"updateSuccess": "Налаштування успішно оновлено",
"userAgentWhitelist": "Список дозволених User-Agent",
"userAgentWhitelistDescription": "Дозволені User-Agent для доступу до підписки, по одному в рядку. Вбудовані шаблони автоматично включаються до списку дозволених",
"userAgentWhitelistPlaceholder": "Введіть дозволені User-Agent, по одному в рядку",
"wildcardResolution": "Розв'язання Доменів з Підстановкою",
"wildcardResolutionDescription": "Увімкнути розв'язання доменів з підстановкою для підписок"
},
"confirm": "Підтвердити",
"confirmDelete": "Ви впевнені, що хочете видалити?",
"copy": "Копіювати",
"copySuccess": "Успішно скопійовано",
"create": "створити",
"createSubscribe": "Створити підписку",
"createSuccess": "Створено успішно",
"delete": "видалити",
"deleteSuccess": "Видалення успішне",
"deleteWarning": "Після видалення дані не можуть бути відновлені, будь ласка, дійте обережно.",
"deviceLimit": "Кількість пристроїв/одиниць",
"edit": "редагувати",
"editSubscribe": "Редагувати підписку",
"form": {
"Day": "День",
"Hour": "Година",
"Minute": "Хвилина",
"Month": "Місяць",
"NoLimit": "Без обмежень",
"Year": "Рік",
"annualReset": "Щорічне Скидання",
"basic": "Основний",
"cancel": "Скасувати",
"confirm": "Підтвердити",
"deductionRatio": "Автоматична/Ручна Конфігурація Вирахувань",
"deductionRatioDescription": "Використовується для вирахувань. За замовчуванням система використовує автоматичний алгоритм розрахунку. Коли надається ручне співвідношення, система розраховує пропорції на основі часу та трафіку, забезпечуючи загальну суму в 100%.",
"description": "Опис",
"deviceLimit": "Обмеження пристроїв",
"discount": "Знижка",
"discountDescription": "Встановити знижку на основі одиничної ціни",
"discountMonths": "місяці",
"discountPercent": "Відсоток знижки",
"discount_price": "Ціна зі знижкою",
"duration": "Тривалість (місяці)",
"groupId": "Група підписки",
"inventory": "Ліміт підписки",
"monthlyReset": "Щомісячне Скидання",
"name": "Назва",
"noLimit": "Без обмежень",
"noReset": "Без Скидання",
"pricing": "Ціноутворення",
"purchaseWithDiscount": "Дозволити Вирахування",
"purchaseWithDiscountDescription": "Увімкніть або вимкніть функцію відписки. Після активації система виконає обробку відрахувань згідно з налаштованими правилами та пропорціями, а залишкова вартість буде повернена на баланс",
"quota": "Ліміт покупки",
"renewalReset": "Скидання при Поновленні",
"renewalResetDescription": "Скидання циклу при поновленні",
"replacement": "Ціна заміни (за раз)",
"resetCycle": "Цикл Скидання",
"resetOn1st": "Скидання 1-го числа",
"selectResetCycle": "Будь ласка, виберіть цикл скидання",
"selectSubscribeGroup": "Будь ласка, виберіть групу підписки",
"selectUnitTime": "Будь ласка, виберіть одиницю часу",
"server": "Сервер",
"serverGroup": "Група серверів",
"servers": "Сервери",
"speedLimit": "Обмеження швидкості",
"traffic": "Трафік",
"unitPrice": "Ціна за одиницю",
"unitTime": "Одиниця часу"
"description": "Налаштуйте параметри підписки та шаблони клієнтів",
"messages": {
"noClients": "Немає Шаблонів Клієнтів",
"noClientsDescription": "Шаблони клієнтів ще не налаштовані. Додайте свій перший шаблон, щоб почати."
},
"group": {
"actions": "Дії",
"cancel": "Скасувати",
"confirm": "Підтвердити",
"confirmDelete": "Ви впевнені, що хочете видалити?",
"create": "Створити",
"createSubscribeGroup": "Створити нову групу підписки",
"createSuccess": "Успішно створено",
"delete": "Видалити",
"deleteSuccess": "Успішно видалено",
"deleteWarning": "Після видалення дані не можуть бути відновлені, будь ласка, будьте обережні.",
"description": "Опис",
"edit": "Редагувати",
"editSubscribeGroup": "Редагувати групу підписки",
"form": {
"cancel": "Скасувати",
"confirm": "Підтвердити",
"description": "Опис",
"name": "Назва"
"protocol": {
"clients": {
"clash": {
"features": "Велика екосистема, всебічні правила, активна спільнота"
},
"egern": {
"features": "Сучасний клієнт для iOS, відмінна продуктивність"
},
"hiddify": {
"features": "Багатоплатформенний, всебічні протоколи, дружній до початківців"
},
"loon": {
"features": "Розширений клієнт для iOS, багаті правила, красивий інтерфейс"
},
"netch": {
"features": "Клієнт проксі, орієнтований на ігри"
},
"quantumult": {
"features": "Розширений клієнт для iOS, гнучкі правила, багаті скрипти"
},
"shadowrocket": {
"features": "Класичний клієнт для iOS, гнучка конфігурація"
},
"singbox": {
"features": "Останнє ядро, офіційний GUI, підтримка багатьох платформ"
},
"stash": {
"features": "Сучасний мобільний інтерфейс, всебічні протоколи"
},
"surfboard": {
"features": "Безкоштовний, активна розробка, сучасний інтерфейс"
},
"surge": {
"features": "Преміум інструмент для iOS/Mac, потужні функції"
},
"v2box": {
"features": "Зручний клієнт V2Ray"
},
"v2rayn": {
"features": "Популярний клієнт для Windows, багатий на функції"
},
"v2rayng": {
"features": "Популярний клієнт для Android, легкий"
}
},
"name": "Назва",
"title": "Список груп підписки",
"updateSuccess": "Успішно оновлено",
"updatedAt": "Час оновлення"
"description": "Керування шаблонами конфігурації підписки для проксі-клієнтів",
"features": "Ключові Особливості",
"platforms": "Платформи",
"subscribeTemplate": "Конфігурація Шаблону Підписки",
"templateContent": "Зміст Шаблону",
"templatePlaceholder": "Введіть шаблон конфігурації клієнта...",
"title": "Шаблони Підписки Клієнтів"
},
"inventory": "Ліміт підписки",
"name": "Назва",
"quota": "Обмеження на покупку/раз",
"replacement": "Скидання ціни/раз",
"sell": "продаж",
"show": "Показати",
"sold": "Кількість підписок",
"subscribe": "Підписатися",
"subscribeGroup": "Підписатися на групу",
"tabs": {
"subscribe": "Підписатися",
"subscribeApp": "Конфігурація додатку",
"subscribeConfig": "Конфігурація підписки",
"subscribeGroup": "Група підписок"
},
"traffic": "Трафік",
"unitPrice": "Ціна за одиницю",
"updateSuccess": "Оновлення успішне"
"title": "Управління Підписками"
}

View File

@ -1,32 +1,25 @@
{
"ADS Config": "Cấu hình ADS",
"Announcement Management": "Quản lý Thông báo",
"Apple": "ID Apple",
"Application Management": "Quản lý Ứng dụng",
"Auth Control": "Kiểm Soát Xác Thực",
"Coupon Management": "Quản lý phiếu giảm giá",
"Dashboard": "Bảng điều khiển",
"Device": "Thiết bị",
"Document Management": "Quản lý tài liệu",
"Email": "Email",
"Facebook": "Facebook",
"Finance": "Tài chính",
"General": "Chung",
"GitHub": "GitHub",
"Google": "Google",
"Order Management": "Quản lý đơn hàng",
"Payment Config": "Cấu hình thanh toán",
"Phone Number": "Số Điện Thoại",
"Product Management": "Quản lý sản phẩm",
"Protocol Management": "Quản lý Giao thức",
"Rule Management": "Quản lý Quy tắc",
"Server": "Dịch vụ",
"Server Management": "Quản lý máy chủ",
"Settings": "Cài đặt",
"Subscribe Management": "Quản lý đăng ký",
"Subscribe Config": "Cấu hình Đăng ký",
"System Config": "Cấu hình hệ thống",
"System Management": "Quản lý Hệ thống",
"System Tool": "Công Cụ Hệ Thống",
"Telegram": "Telegram",
"Ticket Management": "Quản lý phiếu hỗ trợ",
"Twitter": "Twitter",
"User": "Người dùng",
"User Detail": "Chi Tiết Người Dùng",
"User Management": "Quản lý người dùng"

View File

@ -0,0 +1,160 @@
{
"actions": "Hành động",
"app": {
"appDownloadURL": "URL Tải Ứng Dụng",
"appIcon": "Biểu Tượng Ứng Dụng",
"appList": "Danh sách ứng dụng",
"appName": "Tên Ứng Dụng",
"backupDomains": "Danh sách miền dự phòng",
"backupDomainsDescription": "Danh sách miền dự phòng cho việc phân giải miền, mỗi dòng một miền",
"batchDelete": "Xóa Hàng Loạt",
"cancel": "Hủy",
"communicationKey": "Khóa Giao Tiếp",
"communicationKeyDescription": "Khóa được sử dụng cho giao tiếp với khách hàng",
"config": "Cấu hình",
"configApp": "Cấu hình ứng dụng",
"confirm": "Xác Nhận",
"confirmDelete": "Xác Nhận Xóa",
"create": "Tạo mới",
"createApp": "Tạo Ứng Dụng",
"createSuccess": "Tạo thành công",
"defaultVersion": "Mặc định",
"delete": "Xóa",
"deleteWarning": "Hành động này không thể hoàn tác",
"describeDescription": "Dùng để mô tả ứng dụng, hiển thị trong danh sách ứng dụng",
"description": "Mô tả",
"downloadLink": "Liên kết tải về",
"edit": "Chỉnh Sửa",
"editApp": "Chỉnh Sửa Ứng Dụng",
"encryption": "Phương Pháp Mã Hóa",
"encryptionDescription": "Chọn phương pháp mã hóa cho giao tiếp với khách hàng. Nếu được chọn, khách hàng sẽ sử dụng phương pháp này để giao tiếp với máy chủ",
"nameDescription": "Tên ứng dụng, hiển thị trong danh sách ứng dụng",
"platform": "Nền Tảng",
"selectApp": "Chọn Ứng Dụng",
"selectAppDescription": "Chọn ứng dụng để cấu hình, tất cả các cài đặt sẽ áp dụng cho ứng dụng đã chọn",
"startupPicture": "Hình ảnh khởi động",
"startupPictureDescription": "Hình ảnh khởi động, hỗ trợ hình ảnh mạng và cục bộ. Đối với hình ảnh mạng, vui lòng nhập URL hình ảnh đầy đủ",
"startupPicturePreview": "Xem trước hình ảnh khởi động",
"startupPictureSkip": "Thời gian bỏ qua hình ảnh khởi động",
"startupPictureSkipDescription": "Thời gian hiển thị hình ảnh khởi động tính bằng giây, nhập 0 để không hiển thị",
"subscriptionProtocol": "Giao Thức Đăng Ký",
"updateSuccess": "Cập nhật thành công",
"version": "Phiên bản"
},
"cancel": "Hủy",
"config": {
"singleSubscriptionMode": "Chế Độ Đăng Ký Đơn",
"subscriptionDomain": "Miền Đăng Ký",
"subscriptionDomainDescription": "Dùng cho đăng ký; để trống để sử dụng miền của trang",
"subscriptionDomainPlaceholder": "Nhập miền đăng ký, mỗi dòng một miền",
"subscriptionPath": "Đường Dẫn Đăng Ký",
"subscriptionPathDescription": "Dùng cho đăng ký; hãy chắc chắn khởi động lại hệ thống sau khi sửa đổi để có hiệu suất tối ưu",
"subscriptionPathPlaceholder": "Nhập",
"updateSuccess": "Cập nhật thành công",
"wildcardResolution": "Giải Quyết Ký Tự Đại Diện",
"wildcardResolutionDescription": "Dùng cho đăng ký"
},
"confirm": "Xác nhận",
"confirmDelete": "Bạn có chắc chắn muốn xóa không?",
"copy": "Sao chép",
"copySuccess": "Sao chép thành công",
"create": "Tạo",
"createSubscribe": "Tạo đăng ký mới",
"createSuccess": "Tạo thành công",
"delete": "xóa",
"deleteSuccess": "Xóa thành công",
"deleteWarning": "Sau khi xóa, dữ liệu không thể khôi phục, vui lòng thao tác cẩn thận.",
"deviceLimit": "Số lượng thiết bị",
"edit": "Chỉnh sửa",
"editSubscribe": "Chỉnh sửa đăng ký",
"form": {
"Day": "Ngày",
"Hour": "Giờ",
"Minute": "Phút",
"Month": "Tháng",
"NoLimit": "Không Giới Hạn",
"Year": "Năm",
"annualReset": "Đặt Lại Hàng Năm",
"basic": "Cơ Bản",
"cancel": "Hủy",
"confirm": "Xác nhận",
"deductionRatio": "Cấu Hình Khấu Trừ Tự Động/Thủ Công",
"deductionRatioDescription": "Được sử dụng cho khấu trừ. Mặc định, hệ thống áp dụng thuật toán tính toán tự động. Khi có tỷ lệ thủ công, hệ thống sẽ tính toán tỷ lệ dựa trên thời gian và lưu lượng, đảm bảo tổng bằng 100%.",
"description": "Mô tả",
"deviceLimit": "Giới hạn thiết bị",
"discount": "Giảm giá",
"discountDescription": "Thiết lập giảm giá dựa trên đơn giá",
"discountMonths": "tháng",
"discountPercent": "Phần trăm giảm giá",
"discount_price": "Giá sau giảm",
"duration": "Thời gian (tháng)",
"groupId": "Nhóm Đăng Ký",
"inventory": "Giới Hạn Đăng Ký",
"monthlyReset": "Đặt Lại Hàng Tháng",
"name": "Tên",
"noLimit": "Không giới hạn",
"noReset": "Không Đặt Lại",
"pricing": "Giá Cả",
"purchaseWithDiscount": "Cho Phép Khấu Trừ",
"purchaseWithDiscountDescription": "Bật hoặc tắt chức năng hủy đăng ký. Sau khi kích hoạt, hệ thống sẽ thực hiện xử lý khấu trừ theo các quy tắc và tỷ lệ đã cấu hình, và giá trị còn lại sẽ được trả về số dư",
"quota": "Số lượng mua giới hạn",
"renewalReset": "Đặt Lại Khi Gia Hạn",
"renewalResetDescription": "Đặt lại chu kỳ khi gia hạn",
"replacement": "Giá thay thế (mỗi lần)",
"resetCycle": "Chu Kỳ Đặt Lại",
"resetOn1st": "Đặt Lại vào Ngày 1",
"selectResetCycle": "Vui lòng chọn một chu kỳ đặt lại",
"selectSubscribeGroup": "Vui lòng chọn nhóm đăng ký",
"selectUnitTime": "Vui lòng chọn đơn vị thời gian",
"server": "Dịch vụ",
"serverGroup": "Nhóm dịch vụ",
"servers": "Máy Chủ",
"speedLimit": "Giới hạn tốc độ ",
"traffic": "Lưu lượng",
"unitPrice": "Đơn giá",
"unitTime": "Đơn vị thời gian"
},
"group": {
"actions": "Hành động",
"cancel": "Hủy bỏ",
"confirm": "Xác nhận",
"confirmDelete": "Bạn có chắc chắn muốn xóa không?",
"create": "Tạo mới",
"createSubscribeGroup": "Tạo nhóm đăng ký mới",
"createSuccess": "Tạo thành công",
"delete": "Xóa",
"deleteSuccess": "Xóa thành công",
"deleteWarning": "Dữ liệu không thể khôi phục sau khi xóa, hãy cẩn thận.",
"description": "Mô tả",
"edit": "Chỉnh sửa",
"editSubscribeGroup": "Chỉnh sửa nhóm đăng ký",
"form": {
"cancel": "Hủy bỏ",
"confirm": "Xác nhận",
"description": "Mô tả",
"name": "Tên"
},
"name": "Tên",
"title": "Danh sách nhóm đăng ký",
"updateSuccess": "Cập nhật thành công",
"updatedAt": "Thời gian cập nhật"
},
"inventory": "Giới Hạn Đăng Ký",
"name": "Tên",
"quota": "Giới hạn mua/lần",
"replacement": "Đặt lại giá/lần",
"sell": "Bán hàng",
"show": "Hiển thị",
"sold": "Số lượng đăng ký",
"subscribe": "Đăng ký",
"subscribeGroup": "Nhóm đăng ký",
"tabs": {
"subscribe": "Đăng ký",
"subscribeApp": "Cấu Hình Ứng Dụng",
"subscribeConfig": "Cấu Hình Đăng Ký",
"subscribeGroup": "Nhóm đăng ký"
},
"traffic": "lưu lượng",
"unitPrice": "Đơn giá",
"updateSuccess": "Cập nhật thành công"
}

View File

@ -1,161 +1,89 @@
{
"actions": "Hành động",
"app": {
"appDownloadURL": "URL Tải Ứng Dụng",
"appIcon": "Biểu Tượng Ứng Dụng",
"appList": "Danh sách ứng dụng",
"appName": "Tên Ứng Dụng",
"backupDomains": "Danh sách miền dự phòng",
"backupDomainsDescription": "Danh sách miền dự phòng cho việc phân giải miền, mỗi dòng một miền",
"batchDelete": "Xóa Hàng Loạt",
"actions": {
"cancel": "Hủy",
"communicationKey": "Khóa Giao Tiếp",
"communicationKeyDescription": "Khóa được sử dụng cho giao tiếp với khách hàng",
"config": "Cấu hình",
"configApp": "Cấu hình ứng dụng",
"confirm": "Xác Nhận",
"confirmDelete": "Xác Nhận Xóa",
"create": "Tạo mới",
"createApp": "Tạo Ứng Dụng",
"createSuccess": "Tạo thành công",
"defaultVersion": "Mặc định",
"delete": "Xóa",
"deleteWarning": "Hành động này không thể hoàn tác",
"describeDescription": "Dùng để mô tả ứng dụng, hiển thị trong danh sách ứng dụng",
"description": "Mô tả",
"downloadLink": "Liên kết tải về",
"edit": "Chỉnh Sửa",
"editApp": "Chỉnh Sửa Ứng Dụng",
"encryption": "Phương Pháp Mã Hóa",
"encryptionDescription": "Chọn phương pháp mã hóa cho giao tiếp với khách hàng. Nếu được chọn, khách hàng sẽ sử dụng phương pháp này để giao tiếp với máy chủ",
"nameDescription": "Tên ứng dụng, hiển thị trong danh sách ứng dụng",
"platform": "Nền Tảng",
"selectApp": "Chọn Ứng Dụng",
"selectAppDescription": "Chọn ứng dụng để cấu hình, tất cả các cài đặt sẽ áp dụng cho ứng dụng đã chọn",
"startupPicture": "Hình ảnh khởi động",
"startupPictureDescription": "Hình ảnh khởi động, hỗ trợ hình ảnh mạng và cục bộ. Đối với hình ảnh mạng, vui lòng nhập URL hình ảnh đầy đủ",
"startupPicturePreview": "Xem trước hình ảnh khởi động",
"startupPictureSkip": "Thời gian bỏ qua hình ảnh khởi động",
"startupPictureSkipDescription": "Thời gian hiển thị hình ảnh khởi động tính bằng giây, nhập 0 để không hiển thị",
"subscriptionProtocol": "Giao Thức Đăng Ký",
"updateSuccess": "Cập nhật thành công",
"version": "Phiên bản"
},
"cancel": "Hủy",
"config": {
"singleSubscriptionMode": "Chế Độ Đăng Ký Đơn",
"singleSubscriptionModeDescription": "Khi được kích hoạt, tất cả các đăng ký của người dùng sẽ được chuyển đổi thành số dư",
"subscriptionDomain": "Miền Đăng Ký",
"subscriptionDomainDescription": "Dùng cho đăng ký; để trống để sử dụng miền của trang",
"subscriptionDomainPlaceholder": "Nhập miền đăng ký, mỗi dòng một miền",
"subscriptionPath": "Đường Dẫn Đăng Ký",
"subscriptionPathDescription": "Dùng cho đăng ký; hãy chắc chắn khởi động lại hệ thống sau khi sửa đổi để có hiệu suất tối ưu",
"subscriptionPathPlaceholder": "Nhập",
"updateSuccess": "Cập nhật thành công",
"wildcardResolution": "Giải Quyết Ký Tự Đại Diện",
"wildcardResolutionDescription": "Dùng cho đăng ký"
},
"confirm": "Xác nhận",
"confirmDelete": "Bạn có chắc chắn muốn xóa không?",
"copy": "Sao chép",
"copySuccess": "Sao chép thành công",
"create": "Tạo",
"createSubscribe": "Tạo đăng ký mới",
"createSuccess": "Tạo thành công",
"delete": "xóa",
"deleteSuccess": "Xóa thành công",
"deleteWarning": "Sau khi xóa, dữ liệu không thể khôi phục, vui lòng thao tác cẩn thận.",
"deviceLimit": "Số lượng thiết bị",
"edit": "Chỉnh sửa",
"editSubscribe": "Chỉnh sửa đăng ký",
"form": {
"Day": "Ngày",
"Hour": "Giờ",
"Minute": "Phút",
"Month": "Tháng",
"NoLimit": "Không Giới Hạn",
"Year": "Năm",
"annualReset": "Đặt Lại Hàng Năm",
"basic": "Cơ Bản",
"cancel": "Hủy",
"confirm": "Xác nhận",
"deductionRatio": "Cấu Hình Khấu Trừ Tự Động/Thủ Công",
"deductionRatioDescription": "Được sử dụng cho khấu trừ. Mặc định, hệ thống áp dụng thuật toán tính toán tự động. Khi có tỷ lệ thủ công, hệ thống sẽ tính toán tỷ lệ dựa trên thời gian và lưu lượng, đảm bảo tổng bằng 100%.",
"description": "Mô tả",
"deviceLimit": "Giới hạn thiết bị",
"discount": "Giảm giá",
"discountDescription": "Thiết lập giảm giá dựa trên đơn giá",
"discountMonths": "tháng",
"discountPercent": "Phần trăm giảm giá",
"discount_price": "Giá sau giảm",
"duration": "Thời gian (tháng)",
"groupId": "Nhóm Đăng Ký",
"inventory": "Giới Hạn Đăng Ký",
"monthlyReset": "Đặt Lại Hàng Tháng",
"name": "Tên",
"noLimit": "Không giới hạn",
"noReset": "Không Đặt Lại",
"pricing": "Giá Cả",
"purchaseWithDiscount": "Cho Phép Khấu Trừ",
"purchaseWithDiscountDescription": "Bật hoặc tắt chức năng hủy đăng ký. Sau khi kích hoạt, hệ thống sẽ thực hiện xử lý khấu trừ theo các quy tắc và tỷ lệ đã cấu hình, và giá trị còn lại sẽ được trả về số dư",
"quota": "Số lượng mua giới hạn",
"renewalReset": "Đặt Lại Khi Gia Hạn",
"renewalResetDescription": "Đặt lại chu kỳ khi gia hạn",
"replacement": "Giá thay thế (mỗi lần)",
"resetCycle": "Chu Kỳ Đặt Lại",
"resetOn1st": "Đặt Lại vào Ngày 1",
"selectResetCycle": "Vui lòng chọn một chu kỳ đặt lại",
"selectSubscribeGroup": "Vui lòng chọn nhóm đăng ký",
"selectUnitTime": "Vui lòng chọn đơn vị thời gian",
"server": "Dịch vụ",
"serverGroup": "Nhóm dịch vụ",
"servers": "Máy Chủ",
"speedLimit": "Giới hạn tốc độ ",
"traffic": "Lưu lượng",
"unitPrice": "Đơn giá",
"unitTime": "Đơn vị thời gian"
},
"group": {
"actions": "Hành động",
"cancel": "Hủy bỏ",
"confirm": "Xác nhận",
"confirmDelete": "Bạn có chắc chắn muốn xóa không?",
"create": "Tạo mới",
"createSubscribeGroup": "Tạo nhóm đăng ký mới",
"createSuccess": "Tạo thành công",
"delete": "Xóa",
"deleteSuccess": "Xóa thành công",
"deleteWarning": "Dữ liệu không thể khôi phục sau khi xóa, hãy cẩn thận.",
"description": "Mô tả",
"edit": "Chỉnh sửa",
"editSubscribeGroup": "Chỉnh sửa nhóm đăng ký",
"form": {
"cancel": "Hủy bỏ",
"confirm": "Xác nhận",
"description": "Mô tả",
"name": "Tên"
"save": "Lưu",
"saveTemplate": "Lưu Mẫu"
},
"config": {
"description": "Quản lý cài đặt hệ thống đăng ký",
"restrictUserAgent": "Hạn chế User-Agent",
"restrictUserAgentDescription": "Bật hạn chế truy cập dựa trên User-Agent",
"singleSubscriptionMode": "Chế Độ Đăng Ký Đơn",
"singleSubscriptionModeDescription": "Giới hạn người dùng chỉ có một đăng ký hoạt động. Các đăng ký hiện có không bị ảnh hưởng",
"subscriptionDomain": "Miền Đăng Ký",
"subscriptionDomainDescription": "Miền tùy chỉnh cho các liên kết đăng ký",
"subscriptionDomainPlaceholder": "Nhập miền đăng ký, mỗi miền một dòng",
"subscriptionPath": "Đường Dẫn Đăng Ký",
"subscriptionPathDescription": "Đường dẫn tùy chỉnh cho các điểm cuối đăng ký (hiệu suất tốt hơn sau khi khởi động lại hệ thống)",
"subscriptionPathPlaceholder": "Nhập đường dẫn đăng ký",
"title": "Cấu Hình Đăng Ký",
"updateError": "Cập nhật không thành công",
"updateSuccess": "Cài đặt đã được cập nhật thành công",
"userAgentWhitelist": "Danh sách trắng User-Agent",
"userAgentWhitelistDescription": "Các User-Agent được phép truy cập đăng ký, mỗi dòng một User-Agent. Các mẫu tích hợp sẽ tự động được bao gồm trong danh sách trắng",
"userAgentWhitelistPlaceholder": "Nhập User-Agent được phép, mỗi dòng một User-Agent",
"wildcardResolution": "Giải Quyết Wildcard",
"wildcardResolutionDescription": "Bật giải quyết miền wildcard cho các đăng ký"
},
"description": "Cấu hình cài đặt đăng ký và mẫu khách hàng",
"messages": {
"noClients": "Không Có Mẫu Khách Hàng",
"noClientsDescription": "Chưa có mẫu khách hàng nào được cấu hình. Thêm mẫu đầu tiên của bạn để bắt đầu."
},
"protocol": {
"clients": {
"clash": {
"features": "Hệ sinh thái lớn, quy tắc toàn diện, cộng đồng năng động"
},
"egern": {
"features": "Khách hàng iOS hiện đại, hiệu suất xuất sắc"
},
"hiddify": {
"features": "Đa nền tảng, giao thức toàn diện, thân thiện với người mới"
},
"loon": {
"features": "Khách hàng nâng cao cho iOS, quy tắc phong phú, giao diện đẹp"
},
"netch": {
"features": "Khách hàng proxy tập trung vào game"
},
"quantumult": {
"features": "Khách hàng nâng cao cho iOS, quy tắc linh hoạt, kịch bản phong phú"
},
"shadowrocket": {
"features": "Khách hàng iOS cổ điển, cấu hình linh hoạt"
},
"singbox": {
"features": "Nhân mới nhất, GUI chính thức, hỗ trợ đa nền tảng"
},
"stash": {
"features": "Giao diện di động hiện đại, giao thức toàn diện"
},
"surfboard": {
"features": "Miễn phí, phát triển tích cực, giao diện hiện đại"
},
"surge": {
"features": "Công cụ cao cấp cho iOS/Mac, tính năng mạnh mẽ"
},
"v2box": {
"features": "Khách hàng V2Ray thân thiện với người dùng"
},
"v2rayn": {
"features": "Khách hàng Windows phổ biến, nhiều tính năng"
},
"v2rayng": {
"features": "Khách hàng Android phổ biến, nhẹ"
}
},
"name": "Tên",
"title": "Danh sách nhóm đăng ký",
"updateSuccess": "Cập nhật thành công",
"updatedAt": "Thời gian cập nhật"
"description": "Quản lý các mẫu cấu hình đăng ký cho khách hàng proxy",
"features": "Tính Năng Chính",
"platforms": "Nền Tảng",
"subscribeTemplate": "Cấu Hình Mẫu Đăng Ký",
"templateContent": "Nội Dung Mẫu",
"templatePlaceholder": "Nhập mẫu cấu hình khách hàng...",
"title": "Mẫu Đăng Ký Khách Hàng"
},
"inventory": "Giới Hạn Đăng Ký",
"name": "Tên",
"quota": "Giới hạn mua/lần",
"replacement": "Đặt lại giá/lần",
"sell": "Bán hàng",
"show": "Hiển thị",
"sold": "Số lượng đăng ký",
"subscribe": "Đăng ký",
"subscribeGroup": "Nhóm đăng ký",
"tabs": {
"subscribe": "Đăng ký",
"subscribeApp": "Cấu Hình Ứng Dụng",
"subscribeConfig": "Cấu Hình Đăng Ký",
"subscribeGroup": "Nhóm đăng ký"
},
"traffic": "lưu lượng",
"unitPrice": "Đơn giá",
"updateSuccess": "Cập nhật thành công"
"title": "Quản Lý Đăng Ký"
}

View File

@ -0,0 +1,39 @@
{
"allUsers": "所有用户",
"broadcastList": "群发列表",
"broadcastLogs": "群发日志",
"cancel": "取消",
"completed": "已完成",
"confirm": "确认",
"confirmDelete": "确认删除",
"content": "邮件内容",
"create": "创建",
"createBroadcast": "创建群发",
"createSuccess": "创建成功",
"createdAt": "创建时间",
"delete": "删除",
"deleteDescription": "此操作无法撤销,确定要删除吗?",
"deleteSuccess": "删除成功",
"edit": "编辑",
"emailBroadcast": "邮件群发",
"errorMessage": "错误信息",
"failCount": "失败数量",
"failed": "发送失败",
"logList": "日志列表",
"marketingManagement": "营销管理",
"pending": "待发送",
"recipient": "收件人",
"recipientEmail": "收件人邮箱",
"recipientType": "收件人类型",
"sendTime": "发送时间",
"sending": "发送中",
"sentAt": "发送时间",
"specificUsers": "指定用户",
"status": "状态",
"subject": "邮件主题",
"subscribedUsers": "订阅用户",
"successCount": "成功数量",
"totalSent": "总发送数",
"updateSuccess": "更新成功",
"view": "查看"
}

View File

@ -1,32 +1,26 @@
{
"ADS Config": "ADS配置",
"Announcement Management": "公告管理",
"Apple": "Apple ID",
"Application Management": "应用管理",
"Auth Control": "认证控制",
"Coupon Management": "优惠券管理",
"Dashboard": "仪表盘",
"Device": "设备",
"Document Management": "文档管理",
"Email": "邮件",
"Facebook": "Facebook",
"Finance": "财务",
"General": "通用",
"GitHub": "GitHub",
"Google": "Google",
"Marketing Management": "营销管理",
"Order Management": "订单管理",
"Payment Config": "支付配置",
"Phone Number": "手机号",
"Product Management": "产品管理",
"Protocol Management": "协议管理",
"Rule Management": "规则管理",
"Server": "服务",
"Server Management": "服务管理",
"Settings": "设置",
"Subscribe Management": "订阅管理",
"Subscribe Config": "订阅配置",
"System Config": "系统配置",
"System Management": "系统管理",
"System Tool": "系统工具",
"Telegram": "Telegram",
"Ticket Management": "工单管理",
"Twitter": "Twitter",
"User": "用户",
"User Detail": "用户详情",
"User Management": "用户管理"

View File

@ -0,0 +1,148 @@
{
"actions": "操作",
"app": {
"appDownloadURL": "应用下载链接",
"appIcon": "应用图标",
"appList": "应用列表",
"appName": "应用名称",
"backupDomains": "备用域名列表",
"backupDomainsDescription": "用于域名解析的备用域名列表,每行一个域名",
"batchDelete": "批量删除",
"cancel": "取消",
"communicationKey": "通信密钥",
"communicationKeyDescription": "用于客户端通信的密钥",
"config": "配置",
"configApp": "应用配置",
"confirm": "确认",
"confirmDelete": "确认删除",
"create": "创建",
"createApp": "创建应用",
"createSuccess": "创建成功",
"defaultVersion": "默认",
"delete": "删除",
"deleteWarning": "此操作无法撤销",
"describeDescription": "用于描述应用程序,显示在应用列表中",
"description": "描述",
"downloadLink": "下载链接",
"edit": "编辑",
"editApp": "编辑应用",
"encryption": "加密方法",
"encryptionDescription": "选择用于客户端通信的加密方法。如果选择,客户端将使用此方法与服务器通信",
"nameDescription": "应用程序名称,显示在应用列表中",
"platform": "平台",
"selectApp": "选择应用",
"selectAppDescription": "选择要配置的应用,所有设置将应用于所选应用",
"startupPicture": "启动图片",
"startupPictureDescription": "启动图片支持网络和本地图片。对于网络图片请输入完整的图片URL",
"startupPicturePreview": "启动图片预览",
"startupPictureSkip": "启动图片跳过时间",
"startupPictureSkipDescription": "启动图片显示时间输入0表示不显示",
"subscriptionProtocol": "订阅协议",
"updateSuccess": "更新成功",
"version": "版本"
},
"cancel": "取消",
"confirm": "确认",
"confirmDelete": "确定删除吗?",
"copy": "复制",
"copySuccess": "复制成功",
"create": "创建",
"createSubscribe": "新建订阅",
"createSuccess": "创建成功",
"delete": "删除",
"deleteSuccess": "删除成功",
"deleteWarning": "删除后数据无法恢复,请谨慎操作。",
"deviceLimit": "设备数/台",
"edit": "编辑",
"editSubscribe": "编辑订阅",
"form": {
"Day": "天",
"Hour": "时",
"Minute": "分",
"Month": "月",
"NoLimit": "无限制",
"Year": "年",
"annualReset": "按年重置",
"basic": "基础",
"cancel": "取消",
"confirm": "确认",
"deductionRatio": "自动/手动抵扣配置",
"deductionRatioDescription": "用于抵扣默认采用自动计算算法。当手动填写比例时系统将根据时间和流量的占比以总和为100%进行按比例分配。",
"description": "描述",
"deviceLimit": "设备限制",
"discount": "折扣",
"discountDescription": "基于单价设置折扣",
"discountMonths": "月",
"discountPercent": "折扣比",
"discount_price": "折扣价格",
"duration": "时长(月)",
"groupId": "订阅组",
"inventory": "订阅限制",
"monthlyReset": "按月重置",
"name": "名称",
"noLimit": "无限制",
"noReset": "不重置",
"pricing": "定价",
"purchaseWithDiscount": "允许抵扣",
"purchaseWithDiscountDescription": "启用或禁用退订功能。激活后,系统将根据配置的规则和比例进行扣除处理,剩余价值将返回到余额中",
"quota": "限购数量",
"renewalReset": "续费重置",
"renewalResetDescription": "续费时重置周期",
"replacement": "重置价格(每次)",
"resetCycle": "重置周期",
"resetOn1st": "1号重置",
"selectResetCycle": "请选择重置周期",
"selectSubscribeGroup": "请选择订阅组",
"selectUnitTime": "请选择单位时间",
"server": "服务",
"serverGroup": "服务组",
"servers": "服务",
"speedLimit": "速度限制",
"traffic": "流量",
"unitPrice": "单价",
"unitTime": "单位时间"
},
"group": {
"actions": "操作",
"cancel": "取消",
"confirm": "确认",
"confirmDelete": "确定删除吗?",
"create": "创建",
"createSubscribeGroup": "新建订阅组",
"createSuccess": "创建成功",
"delete": "删除",
"deleteSuccess": "删除成功",
"deleteWarning": "删除后数据无法恢复,请谨慎操作。",
"description": "描述",
"edit": "编辑",
"editSubscribeGroup": "编辑订阅组",
"form": {
"cancel": "取消",
"confirm": "确认",
"description": "描述",
"name": "名称"
},
"name": "名称",
"title": "订阅组列表",
"updateSuccess": "更新成功",
"updatedAt": "更新时间"
},
"inventory": "订阅限制",
"name": "名称",
"quota": "限购/次",
"replacement": "重置价格/次",
"sell": "销售",
"show": "显示",
"sold": "订阅数量",
"subscribe": "订阅",
"subscribeGroup": "订阅组",
"tabs": {
"subscribe": "订阅",
"subscribeApp": "应用配置",
"subscribeConfig": "订阅配置",
"subscribeGroup": "订阅组"
},
"traffic": "流量",
"unitPrice": "单价",
"updateSuccess": "更新成功"
}

View File

@ -1,161 +1,89 @@
{
"actions": "操作",
"app": {
"appDownloadURL": "应用下载链接",
"appIcon": "应用图标",
"appList": "应用列表",
"appName": "应用名称",
"backupDomains": "备用域名列表",
"backupDomainsDescription": "用于域名解析的备用域名列表,每行一个域名",
"batchDelete": "批量删除",
"actions": {
"cancel": "取消",
"communicationKey": "通信密钥",
"communicationKeyDescription": "用于客户端通信的密钥",
"config": "配置",
"configApp": "应用配置",
"confirm": "确认",
"confirmDelete": "确认删除",
"create": "创建",
"createApp": "创建应用",
"createSuccess": "创建成功",
"defaultVersion": "默认",
"delete": "删除",
"deleteWarning": "此操作无法撤销",
"describeDescription": "用于描述应用程序,显示在应用列表中",
"description": "描述",
"downloadLink": "下载链接",
"edit": "编辑",
"editApp": "编辑应用",
"encryption": "加密方法",
"encryptionDescription": "选择用于客户端通信的加密方法。如果选择,客户端将使用此方法与服务器通信",
"nameDescription": "应用程序名称,显示在应用列表中",
"platform": "平台",
"selectApp": "选择应用",
"selectAppDescription": "选择要配置的应用,所有设置将应用于所选应用",
"startupPicture": "启动图片",
"startupPictureDescription": "启动图片支持网络和本地图片。对于网络图片请输入完整的图片URL",
"startupPicturePreview": "启动图片预览",
"startupPictureSkip": "启动图片跳过时间",
"startupPictureSkipDescription": "启动图片显示时间输入0表示不显示",
"subscriptionProtocol": "订阅协议",
"updateSuccess": "更新成功",
"version": "版本"
"save": "保存",
"saveTemplate": "保存模板"
},
"cancel": "取消",
"config": {
"description": "管理订阅系统的相关配置",
"restrictUserAgent": "用户代理限制",
"restrictUserAgentDescription": "根据用户代理启用访问限制",
"singleSubscriptionMode": "单一订阅模式",
"singleSubscriptionModeDescription": "启用后,所有用户订阅将转换为余额",
"singleSubscriptionModeDescription": "限制用户只能拥有一个有效的订阅。现有订阅不受影响",
"subscriptionDomain": "订阅域名",
"subscriptionDomainDescription": "用于订阅;留空则使用站点域名",
"subscriptionDomainDescription": "自定义订阅链接域名",
"subscriptionDomainPlaceholder": "输入订阅域名,每行一个",
"subscriptionPath": "订阅路径",
"subscriptionPathDescription": "用于订阅;修改后请务必重启系统以获得最佳性能",
"subscriptionPathPlaceholder": "输入",
"updateSuccess": "更新成功",
"subscriptionPathDescription": "自定义订阅端点路径(重启系统后性能更佳)",
"subscriptionPathPlaceholder": "输入订阅路径",
"title": "订阅配置",
"updateError": "更新失败",
"updateSuccess": "设置更新成功",
"userAgentWhitelist": "用户代理白名单",
"userAgentWhitelistDescription": "允许的用户代理用于订阅访问,每行一个。内置模板会自动包含在白名单中",
"userAgentWhitelistPlaceholder": "输入允许的用户代理,每行一个",
"wildcardResolution": "通配符解析",
"wildcardResolutionDescription": "用于订阅"
"wildcardResolutionDescription": "用订阅域名的通配符解析"
},
"confirm": "确认",
"confirmDelete": "确定删除吗?",
"copy": "复制",
"copySuccess": "复制成功",
"create": "创建",
"createSubscribe": "新建订阅",
"createSuccess": "创建成功",
"delete": "删除",
"deleteSuccess": "删除成功",
"deleteWarning": "删除后数据无法恢复,请谨慎操作。",
"deviceLimit": "设备数/台",
"edit": "编辑",
"editSubscribe": "编辑订阅",
"form": {
"Day": "天",
"Hour": "时",
"Minute": "分",
"Month": "月",
"NoLimit": "无限制",
"Year": "年",
"annualReset": "按年重置",
"basic": "基础",
"cancel": "取消",
"confirm": "确认",
"deductionRatio": "自动/手动抵扣配置",
"deductionRatioDescription": "用于抵扣默认采用自动计算算法。当手动填写比例时系统将根据时间和流量的占比以总和为100%进行按比例分配。",
"description": "描述",
"deviceLimit": "设备限制",
"discount": "折扣",
"discountDescription": "基于单价设置折扣",
"discountMonths": "月",
"discountPercent": "折扣比",
"discount_price": "折扣价格",
"duration": "时长(月)",
"groupId": "订阅组",
"inventory": "订阅限制",
"monthlyReset": "按月重置",
"name": "名称",
"noLimit": "无限制",
"noReset": "不重置",
"pricing": "定价",
"purchaseWithDiscount": "允许抵扣",
"purchaseWithDiscountDescription": "启用或禁用退订功能。激活后,系统将根据配置的规则和比例进行扣除处理,剩余价值将返回到余额中",
"quota": "限购数量",
"renewalReset": "续费重置",
"renewalResetDescription": "续费时重置周期",
"replacement": "重置价格(每次)",
"resetCycle": "重置周期",
"resetOn1st": "1号重置",
"selectResetCycle": "请选择重置周期",
"selectSubscribeGroup": "请选择订阅组",
"selectUnitTime": "请选择单位时间",
"server": "服务",
"serverGroup": "服务组",
"servers": "服务",
"speedLimit": "速度限制",
"traffic": "流量",
"unitPrice": "单价",
"unitTime": "单位时间"
"description": "配置订阅设置和客户端模板",
"messages": {
"noClients": "暂无客户端模板",
"noClientsDescription": "还没有配置任何客户端模板,请添加第一个模板开始使用。"
},
"group": {
"actions": "操作",
"cancel": "取消",
"confirm": "确认",
"confirmDelete": "确定删除吗?",
"create": "创建",
"createSubscribeGroup": "新建订阅组",
"createSuccess": "创建成功",
"delete": "删除",
"deleteSuccess": "删除成功",
"deleteWarning": "删除后数据无法恢复,请谨慎操作。",
"description": "描述",
"edit": "编辑",
"editSubscribeGroup": "编辑订阅组",
"form": {
"cancel": "取消",
"confirm": "确认",
"description": "描述",
"name": "名称"
"protocol": {
"clients": {
"clash": {
"features": "生态丰富,规则完善,社区活跃"
},
"egern": {
"features": "现代化 iOS 客户端,性能优异"
},
"hiddify": {
"features": "全平台支持,协议全面,新手友好"
},
"loon": {
"features": "iOS 高级客户端,规则丰富,界面美观"
},
"netch": {
"features": "游戏专用代理客户端"
},
"quantumult": {
"features": "iOS 高级客户端,规则灵活,脚本丰富"
},
"shadowrocket": {
"features": "经典 iOS 客户端,配置灵活"
},
"singbox": {
"features": "最新内核,官方图形界面,多平台支持"
},
"stash": {
"features": "现代移动端界面,协议全面"
},
"surfboard": {
"features": "免费开源,持续更新,界面现代"
},
"surge": {
"features": "iOS/Mac 专业工具,功能强大"
},
"v2box": {
"features": "用户友好的 V2Ray 客户端"
},
"v2rayn": {
"features": "热门 Windows 客户端,功能丰富"
},
"v2rayng": {
"features": "热门 Android 客户端,轻量级"
}
},
"name": "名称",
"title": "订阅组列表",
"updateSuccess": "更新成功",
"updatedAt": "更新时间"
"description": "管理代理客户端的订阅配置模板",
"features": "主要特点",
"platforms": "支持平台",
"subscribeTemplate": "订阅模板配置",
"templateContent": "模板内容",
"templatePlaceholder": "输入客户端配置模板...",
"title": "客户端订阅模板"
},
"inventory": "订阅限制",
"name": "名称",
"quota": "限购/次",
"replacement": "重置价格/次",
"sell": "销售",
"show": "显示",
"sold": "订阅数量",
"subscribe": "订阅",
"subscribeGroup": "订阅组",
"tabs": {
"subscribe": "订阅",
"subscribeApp": "应用配置",
"subscribeConfig": "订阅配置",
"subscribeGroup": "订阅组"
},
"traffic": "流量",
"unitPrice": "单价",
"updateSuccess": "更新成功"
"title": "订阅管理"
}

View File

@ -1,32 +1,25 @@
{
"ADS Config": "ADS 配置",
"Announcement Management": "公告管理",
"Apple": "Apple ID",
"Application Management": "應用程式管理",
"Auth Control": "身份驗證控制",
"Coupon Management": "優惠券管理",
"Dashboard": "儀表板",
"Device": "裝置",
"Document Management": "文件管理",
"Email": "電郵",
"Facebook": "Facebook",
"Finance": "財務",
"General": "一般",
"GitHub": "GitHub",
"Google": "Google",
"Order Management": "訂單管理",
"Payment Config": "支付配置",
"Phone Number": "電話號碼",
"Product Management": "產品管理",
"Protocol Management": "協議管理",
"Rule Management": "規則管理",
"Server": "服務",
"Server Management": "服務管理",
"Settings": "設定",
"Subscribe Management": "訂閱管理",
"Subscribe Config": "訂閱配置",
"System Config": "系統配置",
"System Management": "系統管理",
"System Tool": "系統工具",
"Telegram": "Telegram",
"Ticket Management": "工單管理",
"Twitter": "Twitter",
"User": "使用者",
"User Detail": "用戶詳情",
"User Management": "使用者管理"

View File

@ -0,0 +1,161 @@
{
"actions": "操作",
"app": {
"appDownloadURL": "應用程式下載網址",
"appIcon": "應用程式圖示",
"appList": "應用程式列表",
"appName": "應用程式名稱",
"backupDomains": "備用域名列表",
"backupDomainsDescription": "用於域名解析的備用域名列表,每行一個域名",
"batchDelete": "批量刪除",
"cancel": "取消",
"communicationKey": "通訊密鑰",
"communicationKeyDescription": "用於客戶端通訊的密鑰",
"config": "配置",
"configApp": "應用程式配置",
"confirm": "確認",
"confirmDelete": "確認刪除",
"create": "創建",
"createApp": "創建應用程式",
"createSuccess": "創建成功",
"defaultVersion": "默認",
"delete": "刪除",
"deleteWarning": "此操作無法撤銷",
"describeDescription": "用於描述應用程式,顯示在應用程式列表中",
"description": "描述",
"downloadLink": "下載連結",
"edit": "編輯",
"editApp": "編輯應用程式",
"encryption": "加密方法",
"encryptionDescription": "選擇客戶端通訊的加密方法。如果選擇,客戶端將使用此方法與伺服器通訊",
"nameDescription": "應用程式名稱,顯示在應用程式列表中",
"platform": "平台",
"selectApp": "選擇應用程式",
"selectAppDescription": "選擇要配置的應用程式,所有設定將應用於所選的應用程式",
"startupPicture": "啟動圖片",
"startupPictureDescription": "啟動圖片支持網絡和本地圖片。對於網絡圖片請輸入完整的圖片URL",
"startupPicturePreview": "啟動圖片預覽",
"startupPictureSkip": "啟動圖片跳過時間",
"startupPictureSkipDescription": "啟動圖片顯示時間輸入0表示不顯示",
"subscriptionProtocol": "訂閱協議",
"updateSuccess": "更新成功",
"version": "版本"
},
"cancel": "取消",
"config": {
"singleSubscriptionMode": "單一訂閱模式",
"singleSubscriptionModeDescription": "啟用後,所有用戶訂閱將轉換為餘額",
"subscriptionDomain": "訂閱域名",
"subscriptionDomainDescription": "用於訂閱;留空則使用網站域名",
"subscriptionDomainPlaceholder": "輸入訂閱域名,每行一個",
"subscriptionPath": "訂閱路徑",
"subscriptionPathDescription": "用於訂閱;修改後請務必重啟系統以獲得最佳性能",
"subscriptionPathPlaceholder": "輸入",
"updateSuccess": "更新成功",
"wildcardResolution": "通配符解析",
"wildcardResolutionDescription": "用於訂閱"
},
"confirm": "確認",
"confirmDelete": "確定刪除嗎?",
"copy": "複製",
"copySuccess": "複製成功",
"create": "建立",
"createSubscribe": "新增訂閱",
"createSuccess": "建立成功",
"delete": "刪除",
"deleteSuccess": "刪除成功",
"deleteWarning": "刪除後資料無法恢復,請謹慎操作。",
"deviceLimit": "設備數/台",
"edit": "編輯",
"editSubscribe": "編輯訂閱",
"form": {
"Day": "日",
"Hour": "小時",
"Minute": "分鐘",
"Month": "月",
"NoLimit": "無限制",
"Year": "年",
"annualReset": "每年重置",
"basic": "基本",
"cancel": "取消",
"confirm": "確認",
"deductionRatio": "自動/手動扣減配置",
"deductionRatioDescription": "用於扣減。系統默認採用自動計算算法。當提供手動比例時系統根據時間和流量比例計算確保總和為100%。",
"description": "描述",
"deviceLimit": "設備限制",
"discount": "折扣",
"discountDescription": "基於單價設定折扣",
"discountMonths": "月",
"discountPercent": "折扣比",
"discount_price": "折扣價格",
"duration": "時長(月)",
"groupId": "訂閱組別",
"inventory": "訂閱限制",
"monthlyReset": "每月重置",
"name": "名稱",
"noLimit": "無限制",
"noReset": "不重置",
"pricing": "定價",
"purchaseWithDiscount": "允許扣減",
"purchaseWithDiscountDescription": "啟用或停用取消訂閱功能。啟用後,系統將根據配置的規則和比例進行扣減處理,剩餘的價值將返回到餘額中",
"quota": "限購數量",
"renewalReset": "續訂重置",
"renewalResetDescription": "續訂時重置週期",
"replacement": "重置價格(每次)",
"resetCycle": "重置週期",
"resetOn1st": "每月1日重置",
"selectResetCycle": "請選擇重置週期",
"selectSubscribeGroup": "請選擇訂閱組",
"selectUnitTime": "請選擇單位時間",
"server": "服務",
"serverGroup": "服務組",
"servers": "伺服器",
"speedLimit": "速度限制",
"traffic": "流量",
"unitPrice": "單價",
"unitTime": "單位時間"
},
"group": {
"actions": "操作",
"cancel": "取消",
"confirm": "確認",
"confirmDelete": "確定刪除嗎?",
"create": "建立",
"createSubscribeGroup": "新建訂閱組",
"createSuccess": "建立成功",
"delete": "刪除",
"deleteSuccess": "刪除成功",
"deleteWarning": "刪除後資料無法恢復,請謹慎操作。",
"description": "描述",
"edit": "編輯",
"editSubscribeGroup": "編輯訂閱組",
"form": {
"cancel": "取消",
"confirm": "確認",
"description": "描述",
"name": "名稱"
},
"name": "名稱",
"title": "訂閱組列表",
"updateSuccess": "更新成功",
"updatedAt": "更新時間"
},
"inventory": "訂閱限制",
"name": "名稱",
"quota": "限購/次",
"replacement": "重置價格/次",
"sell": "銷售",
"show": "顯示",
"sold": "訂閱數量",
"subscribe": "訂閱",
"subscribeGroup": "訂閱組",
"tabs": {
"subscribe": "訂閱",
"subscribeApp": "應用程式配置",
"subscribeConfig": "訂閱配置",
"subscribeGroup": "訂閱組"
},
"traffic": "流量",
"unitPrice": "單價",
"updateSuccess": "更新成功"
}

View File

@ -1,161 +1,89 @@
{
"actions": "操作",
"app": {
"appDownloadURL": "應用程式下載網址",
"appIcon": "應用程式圖示",
"appList": "應用程式列表",
"appName": "應用程式名稱",
"backupDomains": "備用域名列表",
"backupDomainsDescription": "用於域名解析的備用域名列表,每行一個域名",
"batchDelete": "批量刪除",
"actions": {
"cancel": "取消",
"communicationKey": "通訊密鑰",
"communicationKeyDescription": "用於客戶端通訊的密鑰",
"config": "配置",
"configApp": "應用程式配置",
"confirm": "確認",
"confirmDelete": "確認刪除",
"create": "創建",
"createApp": "創建應用程式",
"createSuccess": "創建成功",
"defaultVersion": "默認",
"delete": "刪除",
"deleteWarning": "此操作無法撤銷",
"describeDescription": "用於描述應用程式,顯示在應用程式列表中",
"description": "描述",
"downloadLink": "下載連結",
"edit": "編輯",
"editApp": "編輯應用程式",
"encryption": "加密方法",
"encryptionDescription": "選擇客戶端通訊的加密方法。如果選擇,客戶端將使用此方法與伺服器通訊",
"nameDescription": "應用程式名稱,顯示在應用程式列表中",
"platform": "平台",
"selectApp": "選擇應用程式",
"selectAppDescription": "選擇要配置的應用程式,所有設定將應用於所選的應用程式",
"startupPicture": "啟動圖片",
"startupPictureDescription": "啟動圖片支持網絡和本地圖片。對於網絡圖片請輸入完整的圖片URL",
"startupPicturePreview": "啟動圖片預覽",
"startupPictureSkip": "啟動圖片跳過時間",
"startupPictureSkipDescription": "啟動圖片顯示時間輸入0表示不顯示",
"subscriptionProtocol": "訂閱協議",
"updateSuccess": "更新成功",
"version": "版本"
"save": "保存",
"saveTemplate": "保存模板"
},
"cancel": "取消",
"config": {
"description": "管理訂閱系統設置",
"restrictUserAgent": "用戶代理限制",
"restrictUserAgentDescription": "根據用戶代理啟用訪問限制",
"singleSubscriptionMode": "單一訂閱模式",
"singleSubscriptionModeDescription": "啟用後,所有用戶訂閱將轉換為餘額",
"singleSubscriptionModeDescription": "將所有用戶訂閱轉換為賬戶餘額",
"subscriptionDomain": "訂閱域名",
"subscriptionDomainDescription": "用於訂閱;留空則使用網站域名",
"subscriptionDomainDescription": "訂閱鏈接的自定義域名",
"subscriptionDomainPlaceholder": "輸入訂閱域名,每行一個",
"subscriptionPath": "訂閱路徑",
"subscriptionPathDescription": "用於訂閱;修改後請務必重啟系統以獲得最佳性能",
"subscriptionPathPlaceholder": "輸入",
"updateSuccess": "更新成功",
"subscriptionPathDescription": "訂閱端點的自定義路徑(系統重啟後性能更佳)",
"subscriptionPathPlaceholder": "輸入訂閱路徑",
"title": "訂閱配置",
"updateError": "更新失敗",
"updateSuccess": "設置更新成功",
"userAgentWhitelist": "用戶代理白名單",
"userAgentWhitelistDescription": "訂閱訪問的允許用戶代理,每行一個。內置模板會自動包含在白名單中",
"userAgentWhitelistPlaceholder": "輸入允許的用戶代理,每行一個",
"wildcardResolution": "通配符解析",
"wildcardResolutionDescription": "用於訂閱"
"wildcardResolutionDescription": "用訂閱的通配符域名解析"
},
"confirm": "確認",
"confirmDelete": "確定刪除嗎?",
"copy": "複製",
"copySuccess": "複製成功",
"create": "建立",
"createSubscribe": "新增訂閱",
"createSuccess": "建立成功",
"delete": "刪除",
"deleteSuccess": "刪除成功",
"deleteWarning": "刪除後資料無法恢復,請謹慎操作。",
"deviceLimit": "設備數/台",
"edit": "編輯",
"editSubscribe": "編輯訂閱",
"form": {
"Day": "日",
"Hour": "小時",
"Minute": "分鐘",
"Month": "月",
"NoLimit": "無限制",
"Year": "年",
"annualReset": "每年重置",
"basic": "基本",
"cancel": "取消",
"confirm": "確認",
"deductionRatio": "自動/手動扣減配置",
"deductionRatioDescription": "用於扣減。系統默認採用自動計算算法。當提供手動比例時系統根據時間和流量比例計算確保總和為100%。",
"description": "描述",
"deviceLimit": "設備限制",
"discount": "折扣",
"discountDescription": "基於單價設定折扣",
"discountMonths": "月",
"discountPercent": "折扣比",
"discount_price": "折扣價格",
"duration": "時長(月)",
"groupId": "訂閱組別",
"inventory": "訂閱限制",
"monthlyReset": "每月重置",
"name": "名稱",
"noLimit": "無限制",
"noReset": "不重置",
"pricing": "定價",
"purchaseWithDiscount": "允許扣減",
"purchaseWithDiscountDescription": "啟用或停用取消訂閱功能。啟用後,系統將根據配置的規則和比例進行扣減處理,剩餘的價值將返回到餘額中",
"quota": "限購數量",
"renewalReset": "續訂重置",
"renewalResetDescription": "續訂時重置週期",
"replacement": "重置價格(每次)",
"resetCycle": "重置週期",
"resetOn1st": "每月1日重置",
"selectResetCycle": "請選擇重置週期",
"selectSubscribeGroup": "請選擇訂閱組",
"selectUnitTime": "請選擇單位時間",
"server": "服務",
"serverGroup": "服務組",
"servers": "伺服器",
"speedLimit": "速度限制",
"traffic": "流量",
"unitPrice": "單價",
"unitTime": "單位時間"
"description": "配置訂閱設置和客戶端模板",
"messages": {
"noClients": "沒有客戶端模板",
"noClientsDescription": "尚未配置客戶端模板。添加您的第一個模板以開始。"
},
"group": {
"actions": "操作",
"cancel": "取消",
"confirm": "確認",
"confirmDelete": "確定刪除嗎?",
"create": "建立",
"createSubscribeGroup": "新建訂閱組",
"createSuccess": "建立成功",
"delete": "刪除",
"deleteSuccess": "刪除成功",
"deleteWarning": "刪除後資料無法恢復,請謹慎操作。",
"description": "描述",
"edit": "編輯",
"editSubscribeGroup": "編輯訂閱組",
"form": {
"cancel": "取消",
"confirm": "確認",
"description": "描述",
"name": "名稱"
"protocol": {
"clients": {
"clash": {
"features": "龐大的生態系統,全面的規則,活躍的社區"
},
"egern": {
"features": "現代iOS客戶端卓越的性能"
},
"hiddify": {
"features": "多平台,全面的協議,適合初學者"
},
"loon": {
"features": "iOS高級客戶端豐富的規則美觀的界面"
},
"netch": {
"features": "以遊戲為重點的代理客戶端"
},
"quantumult": {
"features": "iOS高級客戶端靈活的規則豐富的腳本"
},
"shadowrocket": {
"features": "經典iOS客戶端靈活的配置"
},
"singbox": {
"features": "最新內核官方GUI多平台支持"
},
"stash": {
"features": "現代移動UI全面的協議"
},
"surfboard": {
"features": "免費,活躍開發,現代界面"
},
"surge": {
"features": "高級iOS/Mac工具強大的功能"
},
"v2box": {
"features": "用戶友好的V2Ray客戶端"
},
"v2rayn": {
"features": "流行的Windows客戶端功能豐富"
},
"v2rayng": {
"features": "流行的Android客戶端輕量級"
}
},
"name": "名稱",
"title": "訂閱組列表",
"updateSuccess": "更新成功",
"updatedAt": "更新時間"
"description": "管理代理客戶端的訂閱配置模板",
"features": "主要特點",
"platforms": "平台",
"subscribeTemplate": "訂閱模板配置",
"templateContent": "模板內容",
"templatePlaceholder": "輸入客戶端配置模板...",
"title": "客戶端訂閱模板"
},
"inventory": "訂閱限制",
"name": "名稱",
"quota": "限購/次",
"replacement": "重置價格/次",
"sell": "銷售",
"show": "顯示",
"sold": "訂閱數量",
"subscribe": "訂閱",
"subscribeGroup": "訂閱組",
"tabs": {
"subscribe": "訂閱",
"subscribeApp": "應用程式配置",
"subscribeConfig": "訂閱配置",
"subscribeGroup": "訂閱組"
},
"traffic": "流量",
"unitPrice": "單價",
"updateSuccess": "更新成功"
"title": "訂閱管理"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Some files were not shown because too many files have changed in this diff Show More