🔧 chore(merge): Add advertising module and device settings
This commit is contained in:
parent
c2b858e3fe
commit
0130e02ffd
17
CHANGELOG.md
17
CHANGELOG.md
@ -1,33 +1,30 @@
|
|||||||
<a name="readme-top"></a>
|
<a name="readme-top"></a>
|
||||||
|
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
# [1.0.0-beta.23](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.22...v1.0.0-beta.23) (2025-02-24)
|
# [1.0.0-beta.23](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.22...v1.0.0-beta.23) (2025-02-24)
|
||||||
|
|
||||||
|
|
||||||
### 🐛 Bug Fixes
|
### 🐛 Bug Fixes
|
||||||
|
|
||||||
* **auth**: Update email verification logic to use domain suffix check ([62662bb](https://github.com/perfect-panel/ppanel-web/commit/62662bb))
|
- **auth**: Update email verification logic to use domain suffix check ([62662bb](https://github.com/perfect-panel/ppanel-web/commit/62662bb))
|
||||||
|
|
||||||
# [1.0.0-beta.22](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.21...v1.0.0-beta.22) (2025-02-23)
|
# [1.0.0-beta.22](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.21...v1.0.0-beta.22) (2025-02-23)
|
||||||
|
|
||||||
|
|
||||||
### 🐛 Bug Fixes
|
### 🐛 Bug Fixes
|
||||||
|
|
||||||
* **locales**: Removed language file import to clean up unnecessary language support ([68f6ab2](https://github.com/perfect-panel/ppanel-web/commit/68f6ab2))
|
- **locales**: Removed language file import to clean up unnecessary language support ([68f6ab2](https://github.com/perfect-panel/ppanel-web/commit/68f6ab2))
|
||||||
|
|
||||||
# [1.0.0-beta.21](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.20...v1.0.0-beta.21) (2025-02-23)
|
# [1.0.0-beta.21](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.20...v1.0.0-beta.21) (2025-02-23)
|
||||||
|
|
||||||
|
|
||||||
### ✨ Features
|
### ✨ Features
|
||||||
|
|
||||||
* **privacy-policy**: Add privacy policy related text and links ([baa68f0](https://github.com/perfect-panel/ppanel-web/commit/baa68f0))
|
- **privacy-policy**: Add privacy policy related text and links ([baa68f0](https://github.com/perfect-panel/ppanel-web/commit/baa68f0))
|
||||||
|
|
||||||
|
|
||||||
### 🐛 Bug Fixes
|
### 🐛 Bug Fixes
|
||||||
|
|
||||||
* **locales**: Removed multilingual files to clean up unnecessary language support ([5b151cd](https://github.com/perfect-panel/ppanel-web/commit/5b151cd))
|
- **locales**: Removed multilingual files to clean up unnecessary language support ([5b151cd](https://github.com/perfect-panel/ppanel-web/commit/5b151cd))
|
||||||
* **locales**: Update custom HTML description in language file, ([87381da](https://github.com/perfect-panel/ppanel-web/commit/87381da))
|
- **locales**: Update custom HTML description in language file, ([87381da](https://github.com/perfect-panel/ppanel-web/commit/87381da))
|
||||||
* **table**: Update privacy policy tab translation key and remove unnecessary requestType from OAuth callback ([14b3af5](https://github.com/perfect-panel/ppanel-web/commit/14b3af5))
|
- **table**: Update privacy policy tab translation key and remove unnecessary requestType from OAuth callback ([14b3af5](https://github.com/perfect-panel/ppanel-web/commit/14b3af5))
|
||||||
|
|
||||||
<a name="readme-top"></a>
|
<a name="readme-top"></a>
|
||||||
|
|
||||||
|
|||||||
299
apps/admin/app/dashboard/ads/ads-form.tsx
Normal file
299
apps/admin/app/dashboard/ads/ads-form.tsx
Normal file
@ -0,0 +1,299 @@
|
|||||||
|
'use client';
|
||||||
|
|
||||||
|
import { zodResolver } from '@hookform/resolvers/zod';
|
||||||
|
import { Button } from '@workspace/ui/components/button';
|
||||||
|
import {
|
||||||
|
Form,
|
||||||
|
FormControl,
|
||||||
|
FormField,
|
||||||
|
FormItem,
|
||||||
|
FormLabel,
|
||||||
|
FormMessage,
|
||||||
|
} from '@workspace/ui/components/form';
|
||||||
|
import { RadioGroup, RadioGroupItem } from '@workspace/ui/components/radio-group';
|
||||||
|
import { ScrollArea } from '@workspace/ui/components/scroll-area';
|
||||||
|
import {
|
||||||
|
Sheet,
|
||||||
|
SheetContent,
|
||||||
|
SheetFooter,
|
||||||
|
SheetHeader,
|
||||||
|
SheetTitle,
|
||||||
|
SheetTrigger,
|
||||||
|
} from '@workspace/ui/components/sheet';
|
||||||
|
import { EnhancedInput } from '@workspace/ui/custom-components/enhanced-input';
|
||||||
|
import { Icon } from '@workspace/ui/custom-components/icon';
|
||||||
|
import { useTranslations } from 'next-intl';
|
||||||
|
import { useEffect, useState } from 'react';
|
||||||
|
import { useForm } from 'react-hook-form';
|
||||||
|
import { z } from 'zod';
|
||||||
|
|
||||||
|
const formSchema = z.object({
|
||||||
|
title: z.string(),
|
||||||
|
type: z.enum(['image', 'video']),
|
||||||
|
content: z.string(),
|
||||||
|
description: z.string(),
|
||||||
|
target_url: z.string().url(),
|
||||||
|
start_time: z.number(),
|
||||||
|
end_time: z.number(),
|
||||||
|
});
|
||||||
|
|
||||||
|
interface AdsFormProps<T> {
|
||||||
|
onSubmit: (data: T) => Promise<boolean> | boolean;
|
||||||
|
initialValues?: T;
|
||||||
|
loading?: boolean;
|
||||||
|
trigger: string;
|
||||||
|
title: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function AdsForm<T extends Record<string, any>>({
|
||||||
|
onSubmit,
|
||||||
|
initialValues,
|
||||||
|
loading,
|
||||||
|
trigger,
|
||||||
|
title,
|
||||||
|
}: AdsFormProps<T>) {
|
||||||
|
const t = useTranslations('ads');
|
||||||
|
const [open, setOpen] = useState(false);
|
||||||
|
|
||||||
|
const form = useForm({
|
||||||
|
resolver: zodResolver(formSchema),
|
||||||
|
defaultValues: {
|
||||||
|
...initialValues,
|
||||||
|
} as any,
|
||||||
|
});
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
form?.reset(initialValues);
|
||||||
|
}, [form, initialValues]);
|
||||||
|
|
||||||
|
const type = form.watch('type');
|
||||||
|
const startTime = form.watch('start_time');
|
||||||
|
|
||||||
|
const renderContentField = () => {
|
||||||
|
return (
|
||||||
|
<FormField
|
||||||
|
control={form.control}
|
||||||
|
name='content'
|
||||||
|
render={({ field }) => (
|
||||||
|
<FormItem>
|
||||||
|
<FormLabel>{t('form.content')}</FormLabel>
|
||||||
|
<FormControl>
|
||||||
|
<EnhancedInput
|
||||||
|
placeholder={
|
||||||
|
type === 'image'
|
||||||
|
? 'https://example.com/image.jpg'
|
||||||
|
: 'https://example.com/video.mp4'
|
||||||
|
}
|
||||||
|
value={field.value}
|
||||||
|
onValueChange={(value) => {
|
||||||
|
form.setValue('content', value);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</FormControl>
|
||||||
|
<FormMessage />
|
||||||
|
</FormItem>
|
||||||
|
)}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
async function handleSubmit(data: { [x: string]: any }) {
|
||||||
|
const bool = await onSubmit(data as T);
|
||||||
|
if (bool) setOpen(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
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='title'
|
||||||
|
render={({ field }) => (
|
||||||
|
<FormItem>
|
||||||
|
<FormLabel>{t('form.title')}</FormLabel>
|
||||||
|
<FormControl>
|
||||||
|
<EnhancedInput
|
||||||
|
placeholder={t('form.enterTitle')}
|
||||||
|
value={field.value}
|
||||||
|
onValueChange={(value) => {
|
||||||
|
form.setValue(field.name, value);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</FormControl>
|
||||||
|
<FormMessage />
|
||||||
|
</FormItem>
|
||||||
|
)}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<FormField
|
||||||
|
control={form.control}
|
||||||
|
name='type'
|
||||||
|
render={({ field }) => (
|
||||||
|
<FormItem>
|
||||||
|
<FormLabel>{t('form.type')}</FormLabel>
|
||||||
|
<FormControl>
|
||||||
|
<RadioGroup
|
||||||
|
defaultValue={field.value}
|
||||||
|
onValueChange={(value) => {
|
||||||
|
form.setValue(field.name, value);
|
||||||
|
}}
|
||||||
|
className='flex gap-4'
|
||||||
|
>
|
||||||
|
<FormItem className='flex items-center space-x-3 space-y-0'>
|
||||||
|
<FormControl>
|
||||||
|
<RadioGroupItem value='image' />
|
||||||
|
</FormControl>
|
||||||
|
<FormLabel className='font-normal'>{t('form.typeImage')}</FormLabel>
|
||||||
|
</FormItem>
|
||||||
|
<FormItem className='flex items-center space-x-3 space-y-0'>
|
||||||
|
<FormControl>
|
||||||
|
<RadioGroupItem value='video' />
|
||||||
|
</FormControl>
|
||||||
|
<FormLabel className='font-normal'>{t('form.typeVideo')}</FormLabel>
|
||||||
|
</FormItem>
|
||||||
|
</RadioGroup>
|
||||||
|
</FormControl>
|
||||||
|
<FormMessage />
|
||||||
|
</FormItem>
|
||||||
|
)}
|
||||||
|
/>
|
||||||
|
|
||||||
|
{renderContentField()}
|
||||||
|
|
||||||
|
<FormField
|
||||||
|
control={form.control}
|
||||||
|
name='description'
|
||||||
|
render={({ field }) => (
|
||||||
|
<FormItem>
|
||||||
|
<FormLabel>{t('form.description')}</FormLabel>
|
||||||
|
<FormControl>
|
||||||
|
<EnhancedInput
|
||||||
|
placeholder={t('form.enterDescription')}
|
||||||
|
value={field.value}
|
||||||
|
onValueChange={(value) => {
|
||||||
|
form.setValue(field.name, value);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</FormControl>
|
||||||
|
<FormMessage />
|
||||||
|
</FormItem>
|
||||||
|
)}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<FormField
|
||||||
|
control={form.control}
|
||||||
|
name='target_url'
|
||||||
|
render={({ field }) => (
|
||||||
|
<FormItem>
|
||||||
|
<FormLabel>{t('form.targetUrl')}</FormLabel>
|
||||||
|
<FormControl>
|
||||||
|
<EnhancedInput
|
||||||
|
placeholder={t('form.enterTargetUrl')}
|
||||||
|
value={field.value}
|
||||||
|
onValueChange={(value) => {
|
||||||
|
form.setValue(field.name, value);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</FormControl>
|
||||||
|
<FormMessage />
|
||||||
|
</FormItem>
|
||||||
|
)}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<FormField
|
||||||
|
control={form.control}
|
||||||
|
name='start_time'
|
||||||
|
render={({ field }) => (
|
||||||
|
<FormItem>
|
||||||
|
<FormLabel>{t('form.startTime')}</FormLabel>
|
||||||
|
<FormControl>
|
||||||
|
<EnhancedInput
|
||||||
|
type='datetime-local'
|
||||||
|
placeholder={t('form.enterStartTime')}
|
||||||
|
value={field.value ? new Date(field.value).toISOString().slice(0, 16) : ''}
|
||||||
|
min={Number(new Date().toISOString().slice(0, 16))}
|
||||||
|
onValueChange={(value) => {
|
||||||
|
const timestamp = value ? new Date(value).getTime() : 0;
|
||||||
|
form.setValue(field.name, timestamp);
|
||||||
|
const endTime = form.getValues('end_time');
|
||||||
|
if (endTime && timestamp > endTime) {
|
||||||
|
form.setValue('end_time', '');
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</FormControl>
|
||||||
|
<FormMessage />
|
||||||
|
</FormItem>
|
||||||
|
)}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<FormField
|
||||||
|
control={form.control}
|
||||||
|
name='end_time'
|
||||||
|
render={({ field }) => {
|
||||||
|
return (
|
||||||
|
<FormItem>
|
||||||
|
<FormLabel>{t('form.endTime')}</FormLabel>
|
||||||
|
<FormControl>
|
||||||
|
<EnhancedInput
|
||||||
|
type='datetime-local'
|
||||||
|
placeholder={t('form.enterEndTime')}
|
||||||
|
value={
|
||||||
|
field.value ? new Date(field.value).toISOString().slice(0, 16) : ''
|
||||||
|
}
|
||||||
|
min={Number(
|
||||||
|
startTime
|
||||||
|
? new Date(startTime).toISOString().slice(0, 16)
|
||||||
|
: new Date().toISOString().slice(0, 16),
|
||||||
|
)}
|
||||||
|
disabled={!startTime}
|
||||||
|
onValueChange={(value) => {
|
||||||
|
const timestamp = value ? new Date(value).getTime() : 0;
|
||||||
|
if (!startTime || timestamp < startTime) return;
|
||||||
|
form.setValue(field.name, timestamp);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</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('form.cancel')}
|
||||||
|
</Button>
|
||||||
|
<Button disabled={loading} onClick={form.handleSubmit(handleSubmit)}>
|
||||||
|
{loading && <Icon icon='mdi:loading' className='mr-2 animate-spin' />}
|
||||||
|
{t('form.confirm')}
|
||||||
|
</Button>
|
||||||
|
</SheetFooter>
|
||||||
|
</SheetContent>
|
||||||
|
</Sheet>
|
||||||
|
);
|
||||||
|
}
|
||||||
162
apps/admin/app/dashboard/ads/page.tsx
Normal file
162
apps/admin/app/dashboard/ads/page.tsx
Normal file
@ -0,0 +1,162 @@
|
|||||||
|
'use client';
|
||||||
|
|
||||||
|
import { ProTable, ProTableActions } from '@/components/pro-table';
|
||||||
|
import { createAds, deleteAds, getAdsList, updateAds } from '@/services/admin/ads';
|
||||||
|
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 { useRef, useState } from 'react';
|
||||||
|
import { toast } from 'sonner';
|
||||||
|
import AdsForm from './ads-form';
|
||||||
|
|
||||||
|
export default function Page() {
|
||||||
|
const t = useTranslations('ads');
|
||||||
|
const [loading, setLoading] = useState(false);
|
||||||
|
const ref = useRef<ProTableActions>(null);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<ProTable<API.Ads, Record<string, unknown>>
|
||||||
|
action={ref}
|
||||||
|
header={{
|
||||||
|
toolbar: (
|
||||||
|
<AdsForm<API.CreateAdsRequest>
|
||||||
|
trigger={t('create')}
|
||||||
|
title={t('createAds')}
|
||||||
|
loading={loading}
|
||||||
|
onSubmit={async (values) => {
|
||||||
|
setLoading(true);
|
||||||
|
try {
|
||||||
|
await createAds({
|
||||||
|
...values,
|
||||||
|
status: 0,
|
||||||
|
});
|
||||||
|
toast.success(t('createSuccess'));
|
||||||
|
ref.current?.refresh();
|
||||||
|
setLoading(false);
|
||||||
|
return true;
|
||||||
|
} catch (error) {
|
||||||
|
setLoading(false);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
),
|
||||||
|
}}
|
||||||
|
params={[
|
||||||
|
{
|
||||||
|
key: 'search',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'status',
|
||||||
|
placeholder: t('status'),
|
||||||
|
options: [
|
||||||
|
{ label: t('enabled'), value: '1' },
|
||||||
|
{ label: t('disabled'), value: '0' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
request={async (pagination, filters) => {
|
||||||
|
const { data } = await getAdsList({
|
||||||
|
...pagination,
|
||||||
|
...filters,
|
||||||
|
});
|
||||||
|
return {
|
||||||
|
list: data.data?.list || [],
|
||||||
|
total: data.data?.total || 0,
|
||||||
|
};
|
||||||
|
}}
|
||||||
|
columns={[
|
||||||
|
{
|
||||||
|
accessorKey: 'status',
|
||||||
|
header: t('status'),
|
||||||
|
cell: ({ row }) => {
|
||||||
|
return (
|
||||||
|
<Switch
|
||||||
|
defaultChecked={row.getValue('status') === 1}
|
||||||
|
onCheckedChange={async (checked) => {
|
||||||
|
await updateAds({
|
||||||
|
...row.original,
|
||||||
|
status: checked ? 1 : 0,
|
||||||
|
});
|
||||||
|
ref.current?.refresh();
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
accessorKey: 'title',
|
||||||
|
header: t('title'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
accessorKey: 'type',
|
||||||
|
header: t('type'),
|
||||||
|
cell: ({ row }) => {
|
||||||
|
const type = row.original.type;
|
||||||
|
return <Badge>{type}</Badge>;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
accessorKey: 'target_url',
|
||||||
|
header: t('targetUrl'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
accessorKey: 'description',
|
||||||
|
header: t('form.description'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
accessorKey: 'period',
|
||||||
|
header: t('validityPeriod'),
|
||||||
|
cell: ({ row }) => {
|
||||||
|
const { start_time, end_time } = row.original;
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
{formatDate(start_time)} - {formatDate(end_time)}
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
actions={{
|
||||||
|
render: (row) => [
|
||||||
|
<AdsForm<API.UpdateAdsRequest>
|
||||||
|
key='edit'
|
||||||
|
trigger={t('edit')}
|
||||||
|
title={t('editAds')}
|
||||||
|
loading={loading}
|
||||||
|
initialValues={row}
|
||||||
|
onSubmit={async (values) => {
|
||||||
|
setLoading(true);
|
||||||
|
try {
|
||||||
|
await updateAds({ ...row, ...values });
|
||||||
|
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 deleteAds({ id: row.id });
|
||||||
|
toast.success(t('deleteSuccess'));
|
||||||
|
ref.current?.refresh();
|
||||||
|
}}
|
||||||
|
cancelText={t('cancel')}
|
||||||
|
confirmText={t('confirm')}
|
||||||
|
/>,
|
||||||
|
],
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
@ -5,7 +5,10 @@ import { useQuery } from '@tanstack/react-query';
|
|||||||
import { Label } from '@workspace/ui/components/label';
|
import { Label } from '@workspace/ui/components/label';
|
||||||
import { Switch } from '@workspace/ui/components/switch';
|
import { Switch } from '@workspace/ui/components/switch';
|
||||||
import { Table, TableBody, TableCell, TableRow } from '@workspace/ui/components/table';
|
import { Table, TableBody, TableCell, TableRow } from '@workspace/ui/components/table';
|
||||||
|
import { EnhancedInput } from '@workspace/ui/custom-components/enhanced-input';
|
||||||
|
import { DicesIcon } from 'lucide-react';
|
||||||
import { useTranslations } from 'next-intl';
|
import { useTranslations } from 'next-intl';
|
||||||
|
import { uid } from 'radash';
|
||||||
import { toast } from 'sonner';
|
import { toast } from 'sonner';
|
||||||
|
|
||||||
export default function Page() {
|
export default function Page() {
|
||||||
@ -49,6 +52,89 @@ export default function Page() {
|
|||||||
/>
|
/>
|
||||||
</TableCell>
|
</TableCell>
|
||||||
</TableRow>
|
</TableRow>
|
||||||
|
<TableRow>
|
||||||
|
<TableCell>
|
||||||
|
<Label>{t('showAds')}</Label>
|
||||||
|
<p className='text-muted-foreground text-xs'>{t('showAdsDescription')}</p>
|
||||||
|
</TableCell>
|
||||||
|
<TableCell className='text-right'>
|
||||||
|
<Switch
|
||||||
|
checked={data?.config?.show_ads}
|
||||||
|
onCheckedChange={(checked) => {
|
||||||
|
updateConfig('config', {
|
||||||
|
...data?.config,
|
||||||
|
show_ads: checked,
|
||||||
|
});
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</TableCell>
|
||||||
|
</TableRow>
|
||||||
|
<TableRow>
|
||||||
|
<TableCell>
|
||||||
|
<Label>{t('blockVirtualMachine')}</Label>
|
||||||
|
<p className='text-muted-foreground text-xs'>{t('blockVirtualMachineDescription')}</p>
|
||||||
|
</TableCell>
|
||||||
|
<TableCell className='text-right'>
|
||||||
|
<Switch
|
||||||
|
checked={data?.config?.only_real_device}
|
||||||
|
onCheckedChange={(checked) => {
|
||||||
|
updateConfig('config', {
|
||||||
|
...data?.config,
|
||||||
|
only_real_device: checked,
|
||||||
|
});
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</TableCell>
|
||||||
|
</TableRow>
|
||||||
|
<TableRow>
|
||||||
|
<TableCell>
|
||||||
|
<Label>{t('enableSecurity')}</Label>
|
||||||
|
<p className='text-muted-foreground text-xs'>{t('enableSecurityDescription')}</p>
|
||||||
|
</TableCell>
|
||||||
|
<TableCell className='text-right'>
|
||||||
|
<Switch
|
||||||
|
checked={data?.config?.enable_security}
|
||||||
|
onCheckedChange={(checked) => {
|
||||||
|
updateConfig('config', {
|
||||||
|
...data?.config,
|
||||||
|
enable_security: checked,
|
||||||
|
});
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</TableCell>
|
||||||
|
</TableRow>
|
||||||
|
<TableRow>
|
||||||
|
<TableCell>
|
||||||
|
<Label>{t('communicationKey')}</Label>
|
||||||
|
<p className='text-muted-foreground text-xs'>{t('communicationKeyDescription')}</p>
|
||||||
|
</TableCell>
|
||||||
|
<TableCell className='text-right'>
|
||||||
|
<EnhancedInput
|
||||||
|
value={data?.config?.security_secret}
|
||||||
|
onValueBlur={(value) => {
|
||||||
|
updateConfig('config', {
|
||||||
|
...data?.config,
|
||||||
|
security_secret: value,
|
||||||
|
});
|
||||||
|
}}
|
||||||
|
suffix={
|
||||||
|
<div className='bg-muted flex h-9 items-center text-nowrap px-3'>
|
||||||
|
<DicesIcon
|
||||||
|
onClick={() => {
|
||||||
|
const id = uid(32).toLowerCase();
|
||||||
|
const formatted = `${id.slice(0, 8)}-${id.slice(8, 12)}-${id.slice(12, 16)}-${id.slice(16, 20)}-${id.slice(20)}`;
|
||||||
|
updateConfig('config', {
|
||||||
|
...data?.config,
|
||||||
|
security_secret: formatted,
|
||||||
|
});
|
||||||
|
}}
|
||||||
|
className='cursor-pointer'
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</TableCell>
|
||||||
|
</TableRow>
|
||||||
</TableBody>
|
</TableBody>
|
||||||
</Table>
|
</Table>
|
||||||
);
|
);
|
||||||
|
|||||||
@ -61,6 +61,11 @@ export const navs = [
|
|||||||
icon: 'flat-color-icons:lock-portrait',
|
icon: 'flat-color-icons:lock-portrait',
|
||||||
items: AuthControl,
|
items: AuthControl,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
title: 'ADS Config',
|
||||||
|
url: '/dashboard/ads',
|
||||||
|
icon: 'flat-color-icons:electrical-sensor',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
title: 'Payment Config',
|
title: 'Payment Config',
|
||||||
url: '/dashboard/payment',
|
url: '/dashboard/payment',
|
||||||
@ -115,7 +120,7 @@ export const navs = [
|
|||||||
{
|
{
|
||||||
title: 'Announcement Management',
|
title: 'Announcement Management',
|
||||||
url: '/dashboard/announcement',
|
url: '/dashboard/announcement',
|
||||||
icon: 'flat-color-icons:news',
|
icon: 'flat-color-icons:advertising',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Ticket Management',
|
title: 'Ticket Management',
|
||||||
|
|||||||
40
apps/admin/locales/cs-CZ/ads.json
Normal file
40
apps/admin/locales/cs-CZ/ads.json
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"cancel": "Zrušit",
|
||||||
|
"confirm": "Potvrdit",
|
||||||
|
"confirmDelete": "Potvrdit smazání",
|
||||||
|
"create": "Vytvořit inzerát",
|
||||||
|
"createAds": "Vytvořit reklamu",
|
||||||
|
"createSuccess": "Úspěšně vytvořeno",
|
||||||
|
"delete": "Smazat",
|
||||||
|
"deleteSuccess": "Úspěšně smazáno",
|
||||||
|
"deleteWarning": "Opravdu chcete smazat tento inzerát?",
|
||||||
|
"disabled": "Deaktivováno",
|
||||||
|
"edit": "Upravit",
|
||||||
|
"editAds": "Upravit reklamu",
|
||||||
|
"enabled": "Aktivováno",
|
||||||
|
"form": {
|
||||||
|
"cancel": "Zrušit",
|
||||||
|
"confirm": "Potvrdit",
|
||||||
|
"content": "Obsah",
|
||||||
|
"description": "Popis",
|
||||||
|
"endTime": "Čas ukončení",
|
||||||
|
"enterContent": "Prosím zadejte obsah inzerátu",
|
||||||
|
"enterDescription": "Prosím zadejte popis inzerátu",
|
||||||
|
"enterEndTime": "Prosím vyberte čas ukončení",
|
||||||
|
"enterStartTime": "Prosím vyberte čas zahájení",
|
||||||
|
"enterTargetUrl": "Prosím zadejte cílovou URL",
|
||||||
|
"enterTitle": "Prosím zadejte název inzerátu",
|
||||||
|
"startTime": "Čas zahájení",
|
||||||
|
"targetUrl": "Cílová URL",
|
||||||
|
"title": "Název",
|
||||||
|
"type": "Typ inzerátu",
|
||||||
|
"typeImage": "Obrázek",
|
||||||
|
"typeVideo": "Video"
|
||||||
|
},
|
||||||
|
"status": "Stav",
|
||||||
|
"targetUrl": "Cílová URL",
|
||||||
|
"title": "Název",
|
||||||
|
"type": "Typ",
|
||||||
|
"updateSuccess": "Úspěšně aktualizováno",
|
||||||
|
"validityPeriod": "Doba platnosti"
|
||||||
|
}
|
||||||
@ -1,4 +1,14 @@
|
|||||||
{
|
{
|
||||||
|
"blockVirtualMachine": "Blokovat virtuální stroj",
|
||||||
|
"blockVirtualMachineDescription": "Pokud je povoleno, zařízení nebudou moci běžet na virtuálních strojích nebo emulátorech",
|
||||||
|
"communicationKey": "Komunikační klíč",
|
||||||
|
"communicationKeyDescription": "Komunikační klíč se používá pro bezpečnou komunikaci mezi zařízeními a servery",
|
||||||
"enable": "Povolit",
|
"enable": "Povolit",
|
||||||
"enableDescription": "Po povolení jsou podporovány různé identifikátory zařízení, jako jsou IMEI/IDFA/IDFV/AndroidID/Mac adresa pro přihlášení a registraci"
|
"enableDescription": "Po povolení jsou podporovány různé identifikátory zařízení, jako jsou IMEI/IDFA/IDFV/AndroidID/Mac adresa pro přihlášení a registraci",
|
||||||
|
"enableSecurity": "Povolit šifrování komunikace",
|
||||||
|
"enableSecurityDescription": "Pokud je povoleno, komunikace mezi zařízeními a servery bude šifrována",
|
||||||
|
"saveFailed": "Uložení se nezdařilo",
|
||||||
|
"saveSuccess": "Uložení bylo úspěšné",
|
||||||
|
"showAds": "Zobrazit reklamy",
|
||||||
|
"showAdsDescription": "Pokud je povoleno, na zařízeních se budou zobrazovat reklamy"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"ADS Config": "Konfigurace ADS",
|
||||||
"Announcement Management": "Správa oznámení",
|
"Announcement Management": "Správa oznámení",
|
||||||
"Apple": "Apple ID",
|
"Apple": "Apple ID",
|
||||||
"Auth Control": "Řízení ověřování",
|
"Auth Control": "Řízení ověřování",
|
||||||
|
|||||||
40
apps/admin/locales/de-DE/ads.json
Normal file
40
apps/admin/locales/de-DE/ads.json
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"cancel": "Abbrechen",
|
||||||
|
"confirm": "Bestätigen",
|
||||||
|
"confirmDelete": "Löschen bestätigen",
|
||||||
|
"create": "Anzeige erstellen",
|
||||||
|
"createAds": "Anzeige erstellen",
|
||||||
|
"createSuccess": "Erfolgreich erstellt",
|
||||||
|
"delete": "Löschen",
|
||||||
|
"deleteSuccess": "Erfolgreich gelöscht",
|
||||||
|
"deleteWarning": "Sind Sie sicher, dass Sie diese Anzeige löschen möchten?",
|
||||||
|
"disabled": "Deaktiviert",
|
||||||
|
"edit": "Bearbeiten",
|
||||||
|
"editAds": "Anzeige bearbeiten",
|
||||||
|
"enabled": "Aktiviert",
|
||||||
|
"form": {
|
||||||
|
"cancel": "Abbrechen",
|
||||||
|
"confirm": "Bestätigen",
|
||||||
|
"content": "Inhalt",
|
||||||
|
"description": "Beschreibung",
|
||||||
|
"endTime": "Endzeit",
|
||||||
|
"enterContent": "Bitte geben Sie den Anzeigeninhalt ein",
|
||||||
|
"enterDescription": "Bitte geben Sie die Anzeigenbeschreibung ein",
|
||||||
|
"enterEndTime": "Bitte wählen Sie die Endzeit aus",
|
||||||
|
"enterStartTime": "Bitte wählen Sie die Startzeit aus",
|
||||||
|
"enterTargetUrl": "Bitte geben Sie die Ziel-URL ein",
|
||||||
|
"enterTitle": "Bitte geben Sie den Anzeigentitel ein",
|
||||||
|
"startTime": "Startzeit",
|
||||||
|
"targetUrl": "Ziel-URL",
|
||||||
|
"title": "Titel",
|
||||||
|
"type": "Anzeigentyp",
|
||||||
|
"typeImage": "Bild",
|
||||||
|
"typeVideo": "Video"
|
||||||
|
},
|
||||||
|
"status": "Status",
|
||||||
|
"targetUrl": "Ziel-URL",
|
||||||
|
"title": "Titel",
|
||||||
|
"type": "Typ",
|
||||||
|
"updateSuccess": "Erfolgreich aktualisiert",
|
||||||
|
"validityPeriod": "Gültigkeitsdauer"
|
||||||
|
}
|
||||||
@ -1,4 +1,14 @@
|
|||||||
{
|
{
|
||||||
|
"blockVirtualMachine": "Virtuelle Maschine blockieren",
|
||||||
|
"blockVirtualMachineDescription": "Wenn aktiviert, wird verhindert, dass Geräte auf virtuellen Maschinen oder Emulatoren ausgeführt werden.",
|
||||||
|
"communicationKey": "Kommunikationsschlüssel",
|
||||||
|
"communicationKeyDescription": "Der Kommunikationsschlüssel wird für die sichere Kommunikation zwischen Geräten und Servern verwendet.",
|
||||||
"enable": "Aktivieren",
|
"enable": "Aktivieren",
|
||||||
"enableDescription": "Nach der Aktivierung werden mehrere Geräteidentifikatoren wie IMEI/IDFA/IDFV/AndroidID/Mac-Adresse für die Anmeldung und Registrierung unterstützt."
|
"enableDescription": "Nach der Aktivierung werden mehrere Geräteidentifikatoren wie IMEI/IDFA/IDFV/AndroidID/Mac-Adresse für die Anmeldung und Registrierung unterstützt.",
|
||||||
|
"enableSecurity": "Kommunikationsverschlüsselung aktivieren",
|
||||||
|
"enableSecurityDescription": "Wenn aktiviert, wird die Kommunikation zwischen Geräten und Servern verschlüsselt.",
|
||||||
|
"saveFailed": "Speichern fehlgeschlagen",
|
||||||
|
"saveSuccess": "Speichern erfolgreich",
|
||||||
|
"showAds": "Werbung anzeigen",
|
||||||
|
"showAdsDescription": "Wenn aktiviert, werden auf den Geräten Anzeigen angezeigt."
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"ADS Config": "ADS-Konfiguration",
|
||||||
"Announcement Management": "Ankündigungsverwaltung",
|
"Announcement Management": "Ankündigungsverwaltung",
|
||||||
"Apple": "Apple-ID",
|
"Apple": "Apple-ID",
|
||||||
"Auth Control": "Authentifizierungskontrolle",
|
"Auth Control": "Authentifizierungskontrolle",
|
||||||
|
|||||||
40
apps/admin/locales/en-US/ads.json
Normal file
40
apps/admin/locales/en-US/ads.json
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"cancel": "Cancel",
|
||||||
|
"confirm": "Confirm",
|
||||||
|
"confirmDelete": "Confirm Delete",
|
||||||
|
"create": "Create Ad",
|
||||||
|
"createAds": "Create Advertisement",
|
||||||
|
"createSuccess": "Successfully created",
|
||||||
|
"delete": "Delete",
|
||||||
|
"deleteSuccess": "Successfully deleted",
|
||||||
|
"deleteWarning": "Are you sure you want to delete this ad?",
|
||||||
|
"disabled": "Disabled",
|
||||||
|
"edit": "Edit",
|
||||||
|
"editAds": "Edit Advertisement",
|
||||||
|
"enabled": "Enabled",
|
||||||
|
"form": {
|
||||||
|
"cancel": "Cancel",
|
||||||
|
"confirm": "Confirm",
|
||||||
|
"content": "Content",
|
||||||
|
"description": "Description",
|
||||||
|
"endTime": "End Time",
|
||||||
|
"enterContent": "Please enter ad content",
|
||||||
|
"enterDescription": "Please enter ad description",
|
||||||
|
"enterEndTime": "Please select end time",
|
||||||
|
"enterStartTime": "Please select start time",
|
||||||
|
"enterTargetUrl": "Please enter target URL",
|
||||||
|
"enterTitle": "Please enter ad title",
|
||||||
|
"startTime": "Start Time",
|
||||||
|
"targetUrl": "Target URL",
|
||||||
|
"title": "Title",
|
||||||
|
"type": "Ad Type",
|
||||||
|
"typeImage": "Image",
|
||||||
|
"typeVideo": "Video"
|
||||||
|
},
|
||||||
|
"status": "Status",
|
||||||
|
"targetUrl": "Target URL",
|
||||||
|
"title": "Title",
|
||||||
|
"type": "Type",
|
||||||
|
"updateSuccess": "Successfully updated",
|
||||||
|
"validityPeriod": "Validity Period"
|
||||||
|
}
|
||||||
@ -1,4 +1,14 @@
|
|||||||
{
|
{
|
||||||
|
"blockVirtualMachine": "Block Virtual Machine",
|
||||||
|
"blockVirtualMachineDescription": "When enabled, devices will be prevented from running on virtual machines or emulators",
|
||||||
|
"communicationKey": "Communication Key",
|
||||||
|
"communicationKeyDescription": "Communication key is used for secure communication between devices and servers",
|
||||||
"enable": "Enable",
|
"enable": "Enable",
|
||||||
"enableDescription": "After enabling, multiple device identifiers such as IMEI/IDFA/IDFV/AndroidID/Mac address are supported for login and registration"
|
"enableDescription": "After enabling, multiple device identifiers such as IMEI/IDFA/IDFV/AndroidID/Mac address are supported for login and registration",
|
||||||
|
"enableSecurity": "Enable Communication Encryption",
|
||||||
|
"enableSecurityDescription": "When enabled, the communication between devices and servers will be encrypted",
|
||||||
|
"saveFailed": "Save failed",
|
||||||
|
"saveSuccess": "Save successful",
|
||||||
|
"showAds": "Show Advertisements",
|
||||||
|
"showAdsDescription": "When enabled, advertisements will be displayed on devices"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"ADS Config": "ADS Config",
|
||||||
"Announcement Management": "Announcement Management",
|
"Announcement Management": "Announcement Management",
|
||||||
"Apple": "Apple ID",
|
"Apple": "Apple ID",
|
||||||
"Auth Control": "Auth Control",
|
"Auth Control": "Auth Control",
|
||||||
|
|||||||
40
apps/admin/locales/es-ES/ads.json
Normal file
40
apps/admin/locales/es-ES/ads.json
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"cancel": "Cancelar",
|
||||||
|
"confirm": "Confirmar",
|
||||||
|
"confirmDelete": "Confirmar eliminación",
|
||||||
|
"create": "Crear anuncio",
|
||||||
|
"createAds": "Crear publicidad",
|
||||||
|
"createSuccess": "Creado con éxito",
|
||||||
|
"delete": "Eliminar",
|
||||||
|
"deleteSuccess": "Eliminado con éxito",
|
||||||
|
"deleteWarning": "¿Está seguro de que desea eliminar este anuncio?",
|
||||||
|
"disabled": "Deshabilitado",
|
||||||
|
"edit": "Editar",
|
||||||
|
"editAds": "Editar publicidad",
|
||||||
|
"enabled": "Habilitado",
|
||||||
|
"form": {
|
||||||
|
"cancel": "Cancelar",
|
||||||
|
"confirm": "Confirmar",
|
||||||
|
"content": "Contenido",
|
||||||
|
"description": "Descripción",
|
||||||
|
"endTime": "Hora de finalización",
|
||||||
|
"enterContent": "Por favor, introduzca el contenido del anuncio",
|
||||||
|
"enterDescription": "Por favor, introduzca la descripción del anuncio",
|
||||||
|
"enterEndTime": "Por favor, seleccione la hora de finalización",
|
||||||
|
"enterStartTime": "Por favor, seleccione la hora de inicio",
|
||||||
|
"enterTargetUrl": "Por favor, introduzca la URL de destino",
|
||||||
|
"enterTitle": "Por favor, introduzca el título del anuncio",
|
||||||
|
"startTime": "Hora de inicio",
|
||||||
|
"targetUrl": "URL de destino",
|
||||||
|
"title": "Título",
|
||||||
|
"type": "Tipo de anuncio",
|
||||||
|
"typeImage": "Imagen",
|
||||||
|
"typeVideo": "Vídeo"
|
||||||
|
},
|
||||||
|
"status": "Estado",
|
||||||
|
"targetUrl": "URL de destino",
|
||||||
|
"title": "Título",
|
||||||
|
"type": "Tipo",
|
||||||
|
"updateSuccess": "Actualizado con éxito",
|
||||||
|
"validityPeriod": "Período de validez"
|
||||||
|
}
|
||||||
@ -1,4 +1,14 @@
|
|||||||
{
|
{
|
||||||
|
"blockVirtualMachine": "Bloquear Máquina Virtual",
|
||||||
|
"blockVirtualMachineDescription": "Cuando está habilitado, se evitará que los dispositivos se ejecuten en máquinas virtuales o emuladores",
|
||||||
|
"communicationKey": "Clave de Comunicación",
|
||||||
|
"communicationKeyDescription": "La clave de comunicación se utiliza para la comunicación segura entre dispositivos y servidores",
|
||||||
"enable": "Habilitar",
|
"enable": "Habilitar",
|
||||||
"enableDescription": "Después de habilitar, se admiten múltiples identificadores de dispositivos como IMEI/IDFA/IDFV/AndroidID/dirección MAC para el inicio de sesión y el registro"
|
"enableDescription": "Después de habilitar, se admiten múltiples identificadores de dispositivos como IMEI/IDFA/IDFV/AndroidID/dirección MAC para el inicio de sesión y el registro",
|
||||||
|
"enableSecurity": "Habilitar Cifrado de Comunicación",
|
||||||
|
"enableSecurityDescription": "Cuando está habilitado, la comunicación entre dispositivos y servidores será cifrada",
|
||||||
|
"saveFailed": "Error al guardar",
|
||||||
|
"saveSuccess": "Guardado exitoso",
|
||||||
|
"showAds": "Mostrar Anuncios",
|
||||||
|
"showAdsDescription": "Cuando está habilitado, se mostrarán anuncios en los dispositivos"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"ADS Config": "Configuración de ADS",
|
||||||
"Announcement Management": "Gestión de Anuncios",
|
"Announcement Management": "Gestión de Anuncios",
|
||||||
"Apple": "ID de Apple",
|
"Apple": "ID de Apple",
|
||||||
"Auth Control": "Control de Autenticación",
|
"Auth Control": "Control de Autenticación",
|
||||||
|
|||||||
40
apps/admin/locales/es-MX/ads.json
Normal file
40
apps/admin/locales/es-MX/ads.json
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"cancel": "Cancelar",
|
||||||
|
"confirm": "Confirmar",
|
||||||
|
"confirmDelete": "Confirmar Eliminación",
|
||||||
|
"create": "Crear Anuncio",
|
||||||
|
"createAds": "Crear Publicidad",
|
||||||
|
"createSuccess": "Creado con éxito",
|
||||||
|
"delete": "Eliminar",
|
||||||
|
"deleteSuccess": "Eliminado con éxito",
|
||||||
|
"deleteWarning": "¿Está seguro de que desea eliminar este anuncio?",
|
||||||
|
"disabled": "Deshabilitado",
|
||||||
|
"edit": "Editar",
|
||||||
|
"editAds": "Editar Publicidad",
|
||||||
|
"enabled": "Habilitado",
|
||||||
|
"form": {
|
||||||
|
"cancel": "Cancelar",
|
||||||
|
"confirm": "Confirmar",
|
||||||
|
"content": "Contenido",
|
||||||
|
"description": "Descripción",
|
||||||
|
"endTime": "Hora de Finalización",
|
||||||
|
"enterContent": "Por favor ingrese el contenido del anuncio",
|
||||||
|
"enterDescription": "Por favor ingrese la descripción del anuncio",
|
||||||
|
"enterEndTime": "Por favor seleccione la hora de finalización",
|
||||||
|
"enterStartTime": "Por favor seleccione la hora de inicio",
|
||||||
|
"enterTargetUrl": "Por favor ingrese la URL de destino",
|
||||||
|
"enterTitle": "Por favor ingrese el título del anuncio",
|
||||||
|
"startTime": "Hora de Inicio",
|
||||||
|
"targetUrl": "URL de Destino",
|
||||||
|
"title": "Título",
|
||||||
|
"type": "Tipo de Anuncio",
|
||||||
|
"typeImage": "Imagen",
|
||||||
|
"typeVideo": "Video"
|
||||||
|
},
|
||||||
|
"status": "Estado",
|
||||||
|
"targetUrl": "URL de Destino",
|
||||||
|
"title": "Título",
|
||||||
|
"type": "Tipo",
|
||||||
|
"updateSuccess": "Actualizado con éxito",
|
||||||
|
"validityPeriod": "Período de Validez"
|
||||||
|
}
|
||||||
@ -1,4 +1,14 @@
|
|||||||
{
|
{
|
||||||
|
"blockVirtualMachine": "Bloquear Máquina Virtual",
|
||||||
|
"blockVirtualMachineDescription": "Cuando está habilitado, se evitará que los dispositivos se ejecuten en máquinas virtuales o emuladores",
|
||||||
|
"communicationKey": "Clave de Comunicación",
|
||||||
|
"communicationKeyDescription": "La clave de comunicación se utiliza para la comunicación segura entre dispositivos y servidores",
|
||||||
"enable": "Habilitar",
|
"enable": "Habilitar",
|
||||||
"enableDescription": "Después de habilitar, se admiten múltiples identificadores de dispositivos como IMEI/IDFA/IDFV/AndroidID/dirección Mac para iniciar sesión y registrarse"
|
"enableDescription": "Después de habilitar, se admiten múltiples identificadores de dispositivos como IMEI/IDFA/IDFV/AndroidID/dirección Mac para iniciar sesión y registrarse",
|
||||||
|
"enableSecurity": "Habilitar Cifrado de Comunicación",
|
||||||
|
"enableSecurityDescription": "Cuando está habilitado, la comunicación entre dispositivos y servidores será cifrada",
|
||||||
|
"saveFailed": "Error al guardar",
|
||||||
|
"saveSuccess": "Guardado exitoso",
|
||||||
|
"showAds": "Mostrar Anuncios",
|
||||||
|
"showAdsDescription": "Cuando está habilitado, se mostrarán anuncios en los dispositivos"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"ADS Config": "Configuración de ADS",
|
||||||
"Announcement Management": "Gestión de Anuncios",
|
"Announcement Management": "Gestión de Anuncios",
|
||||||
"Apple": "ID de Apple",
|
"Apple": "ID de Apple",
|
||||||
"Auth Control": "Control de Autenticación",
|
"Auth Control": "Control de Autenticación",
|
||||||
|
|||||||
40
apps/admin/locales/fa-IR/ads.json
Normal file
40
apps/admin/locales/fa-IR/ads.json
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"cancel": "لغو",
|
||||||
|
"confirm": "تأیید",
|
||||||
|
"confirmDelete": "تأیید حذف",
|
||||||
|
"create": "ایجاد آگهی",
|
||||||
|
"createAds": "ایجاد تبلیغ",
|
||||||
|
"createSuccess": "با موفقیت ایجاد شد",
|
||||||
|
"delete": "حذف",
|
||||||
|
"deleteSuccess": "با موفقیت حذف شد",
|
||||||
|
"deleteWarning": "آیا مطمئن هستید که میخواهید این آگهی را حذف کنید؟",
|
||||||
|
"disabled": "غیرفعال",
|
||||||
|
"edit": "ویرایش",
|
||||||
|
"editAds": "ویرایش تبلیغ",
|
||||||
|
"enabled": "فعال",
|
||||||
|
"form": {
|
||||||
|
"cancel": "لغو",
|
||||||
|
"confirm": "تأیید",
|
||||||
|
"content": "محتوا",
|
||||||
|
"description": "توضیحات",
|
||||||
|
"endTime": "زمان پایان",
|
||||||
|
"enterContent": "لطفاً محتوای آگهی را وارد کنید",
|
||||||
|
"enterDescription": "لطفاً توضیحات آگهی را وارد کنید",
|
||||||
|
"enterEndTime": "لطفاً زمان پایان را انتخاب کنید",
|
||||||
|
"enterStartTime": "لطفاً زمان شروع را انتخاب کنید",
|
||||||
|
"enterTargetUrl": "لطفاً URL هدف را وارد کنید",
|
||||||
|
"enterTitle": "لطفاً عنوان آگهی را وارد کنید",
|
||||||
|
"startTime": "زمان شروع",
|
||||||
|
"targetUrl": "URL هدف",
|
||||||
|
"title": "عنوان",
|
||||||
|
"type": "نوع آگهی",
|
||||||
|
"typeImage": "تصویر",
|
||||||
|
"typeVideo": "ویدیو"
|
||||||
|
},
|
||||||
|
"status": "وضعیت",
|
||||||
|
"targetUrl": "URL هدف",
|
||||||
|
"title": "عنوان",
|
||||||
|
"type": "نوع",
|
||||||
|
"updateSuccess": "با موفقیت بهروزرسانی شد",
|
||||||
|
"validityPeriod": "مدت اعتبار"
|
||||||
|
}
|
||||||
@ -1,4 +1,14 @@
|
|||||||
{
|
{
|
||||||
|
"blockVirtualMachine": "مسدود کردن ماشین مجازی",
|
||||||
|
"blockVirtualMachineDescription": "هنگامی که فعال باشد، دستگاهها از اجرای ماشینهای مجازی یا شبیهسازها جلوگیری خواهند شد",
|
||||||
|
"communicationKey": "کلید ارتباطی",
|
||||||
|
"communicationKeyDescription": "کلید ارتباطی برای ارتباط امن بین دستگاهها و سرورها استفاده میشود",
|
||||||
"enable": "فعال کردن",
|
"enable": "فعال کردن",
|
||||||
"enableDescription": "پس از فعالسازی، شناسههای دستگاههای مختلف مانند IMEI/IDFA/IDFV/AndroidID/آدرس مک برای ورود و ثبتنام پشتیبانی میشوند"
|
"enableDescription": "پس از فعالسازی، شناسههای دستگاههای مختلف مانند IMEI/IDFA/IDFV/AndroidID/آدرس مک برای ورود و ثبتنام پشتیبانی میشوند",
|
||||||
|
"enableSecurity": "فعالسازی رمزنگاری ارتباطات",
|
||||||
|
"enableSecurityDescription": "هنگامی که فعال باشد، ارتباط بین دستگاهها و سرورها رمزنگاری خواهد شد",
|
||||||
|
"saveFailed": "ذخیرهسازی ناموفق بود",
|
||||||
|
"saveSuccess": "ذخیرهسازی با موفقیت انجام شد",
|
||||||
|
"showAds": "نمایش تبلیغات",
|
||||||
|
"showAdsDescription": "هنگامی که فعال باشد، تبلیغات بر روی دستگاهها نمایش داده خواهد شد"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"ADS Config": "تنظیمات ADS",
|
||||||
"Announcement Management": "مدیریت اطلاعیهها",
|
"Announcement Management": "مدیریت اطلاعیهها",
|
||||||
"Apple": "شناسه اپل",
|
"Apple": "شناسه اپل",
|
||||||
"Auth Control": "کنترل احراز هویت",
|
"Auth Control": "کنترل احراز هویت",
|
||||||
|
|||||||
40
apps/admin/locales/fi-FI/ads.json
Normal file
40
apps/admin/locales/fi-FI/ads.json
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"cancel": "Peruuta",
|
||||||
|
"confirm": "Vahvista",
|
||||||
|
"confirmDelete": "Vahvista poisto",
|
||||||
|
"create": "Luo ilmoitus",
|
||||||
|
"createAds": "Luo mainos",
|
||||||
|
"createSuccess": "Luonti onnistui",
|
||||||
|
"delete": "Poista",
|
||||||
|
"deleteSuccess": "Poisto onnistui",
|
||||||
|
"deleteWarning": "Oletko varma, että haluat poistaa tämän ilmoituksen?",
|
||||||
|
"disabled": "Pois käytöstä",
|
||||||
|
"edit": "Muokkaa",
|
||||||
|
"editAds": "Muokkaa mainosta",
|
||||||
|
"enabled": "Käytössä",
|
||||||
|
"form": {
|
||||||
|
"cancel": "Peruuta",
|
||||||
|
"confirm": "Vahvista",
|
||||||
|
"content": "Sisältö",
|
||||||
|
"description": "Kuvaus",
|
||||||
|
"endTime": "Loppuaika",
|
||||||
|
"enterContent": "Ole hyvä ja syötä mainoksen sisältö",
|
||||||
|
"enterDescription": "Ole hyvä ja syötä mainoksen kuvaus",
|
||||||
|
"enterEndTime": "Ole hyvä ja valitse loppuaika",
|
||||||
|
"enterStartTime": "Ole hyvä ja valitse aloitusaika",
|
||||||
|
"enterTargetUrl": "Ole hyvä ja syötä kohde-URL",
|
||||||
|
"enterTitle": "Ole hyvä ja syötä mainoksen otsikko",
|
||||||
|
"startTime": "Aloitusaika",
|
||||||
|
"targetUrl": "Kohde-URL",
|
||||||
|
"title": "Otsikko",
|
||||||
|
"type": "Mainostyyppi",
|
||||||
|
"typeImage": "Kuva",
|
||||||
|
"typeVideo": "Video"
|
||||||
|
},
|
||||||
|
"status": "Tila",
|
||||||
|
"targetUrl": "Kohde-URL",
|
||||||
|
"title": "Otsikko",
|
||||||
|
"type": "Tyyppi",
|
||||||
|
"updateSuccess": "Päivitys onnistui",
|
||||||
|
"validityPeriod": "Voimassaoloaika"
|
||||||
|
}
|
||||||
@ -1,4 +1,14 @@
|
|||||||
{
|
{
|
||||||
|
"blockVirtualMachine": "Estä virtuaalikone",
|
||||||
|
"blockVirtualMachineDescription": "Kun tämä on käytössä, laitteiden käyttö virtuaalikoneissa tai emulaattoreissa estetään",
|
||||||
|
"communicationKey": "Viestintäavain",
|
||||||
|
"communicationKeyDescription": "Viestintäavain käytetään turvalliseen viestintään laitteiden ja palvelimien välillä",
|
||||||
"enable": "Ota käyttöön",
|
"enable": "Ota käyttöön",
|
||||||
"enableDescription": "Kun otat käyttöön, useita laiteidentifikaattoreita, kuten IMEI/IDFA/IDFV/AndroidID/Mac-osoite, tuetaan kirjautumiseen ja rekisteröitymiseen."
|
"enableDescription": "Kun otat käyttöön, useita laiteidentifikaattoreita, kuten IMEI/IDFA/IDFV/AndroidID/Mac-osoite, tuetaan kirjautumiseen ja rekisteröitymiseen.",
|
||||||
|
"enableSecurity": "Ota käyttöön viestinnän salaus",
|
||||||
|
"enableSecurityDescription": "Kun tämä on käytössä, laitteiden ja palvelimien välinen viestintä salataan",
|
||||||
|
"saveFailed": "Tallennus epäonnistui",
|
||||||
|
"saveSuccess": "Tallennus onnistui",
|
||||||
|
"showAds": "Näytä mainoksia",
|
||||||
|
"showAdsDescription": "Kun tämä on käytössä, mainoksia näytetään laitteilla"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"ADS Config": "ADS-asetukset",
|
||||||
"Announcement Management": "Ilmoitusten hallinta",
|
"Announcement Management": "Ilmoitusten hallinta",
|
||||||
"Apple": "Apple ID",
|
"Apple": "Apple ID",
|
||||||
"Auth Control": "Todennuksen hallinta",
|
"Auth Control": "Todennuksen hallinta",
|
||||||
|
|||||||
40
apps/admin/locales/fr-FR/ads.json
Normal file
40
apps/admin/locales/fr-FR/ads.json
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"cancel": "Annuler",
|
||||||
|
"confirm": "Confirmer",
|
||||||
|
"confirmDelete": "Confirmer la suppression",
|
||||||
|
"create": "Créer une annonce",
|
||||||
|
"createAds": "Créer une publicité",
|
||||||
|
"createSuccess": "Créé avec succès",
|
||||||
|
"delete": "Supprimer",
|
||||||
|
"deleteSuccess": "Supprimé avec succès",
|
||||||
|
"deleteWarning": "Êtes-vous sûr de vouloir supprimer cette annonce ?",
|
||||||
|
"disabled": "Désactivé",
|
||||||
|
"edit": "Modifier",
|
||||||
|
"editAds": "Modifier la publicité",
|
||||||
|
"enabled": "Activé",
|
||||||
|
"form": {
|
||||||
|
"cancel": "Annuler",
|
||||||
|
"confirm": "Confirmer",
|
||||||
|
"content": "Contenu",
|
||||||
|
"description": "Description",
|
||||||
|
"endTime": "Heure de fin",
|
||||||
|
"enterContent": "Veuillez entrer le contenu de l'annonce",
|
||||||
|
"enterDescription": "Veuillez entrer la description de l'annonce",
|
||||||
|
"enterEndTime": "Veuillez sélectionner l'heure de fin",
|
||||||
|
"enterStartTime": "Veuillez sélectionner l'heure de début",
|
||||||
|
"enterTargetUrl": "Veuillez entrer l'URL cible",
|
||||||
|
"enterTitle": "Veuillez entrer le titre de l'annonce",
|
||||||
|
"startTime": "Heure de début",
|
||||||
|
"targetUrl": "URL cible",
|
||||||
|
"title": "Titre",
|
||||||
|
"type": "Type d'annonce",
|
||||||
|
"typeImage": "Image",
|
||||||
|
"typeVideo": "Vidéo"
|
||||||
|
},
|
||||||
|
"status": "Statut",
|
||||||
|
"targetUrl": "URL cible",
|
||||||
|
"title": "Titre",
|
||||||
|
"type": "Type",
|
||||||
|
"updateSuccess": "Mis à jour avec succès",
|
||||||
|
"validityPeriod": "Période de validité"
|
||||||
|
}
|
||||||
@ -1,4 +1,14 @@
|
|||||||
{
|
{
|
||||||
|
"blockVirtualMachine": "Bloquer la machine virtuelle",
|
||||||
|
"blockVirtualMachineDescription": "Lorsqu'il est activé, les appareils seront empêchés de fonctionner sur des machines virtuelles ou des émulateurs",
|
||||||
|
"communicationKey": "Clé de communication",
|
||||||
|
"communicationKeyDescription": "La clé de communication est utilisée pour une communication sécurisée entre les appareils et les serveurs",
|
||||||
"enable": "Activer",
|
"enable": "Activer",
|
||||||
"enableDescription": "Après activation, plusieurs identifiants de périphériques tels que IMEI/IDFA/IDFV/AndroidID/adresse Mac sont pris en charge pour la connexion et l'enregistrement"
|
"enableDescription": "Après activation, plusieurs identifiants de périphériques tels que IMEI/IDFA/IDFV/AndroidID/adresse Mac sont pris en charge pour la connexion et l'enregistrement",
|
||||||
|
"enableSecurity": "Activer le chiffrement de la communication",
|
||||||
|
"enableSecurityDescription": "Lorsqu'il est activé, la communication entre les appareils et les serveurs sera chiffrée",
|
||||||
|
"saveFailed": "Échec de l'enregistrement",
|
||||||
|
"saveSuccess": "Enregistrement réussi",
|
||||||
|
"showAds": "Afficher les publicités",
|
||||||
|
"showAdsDescription": "Lorsqu'il est activé, des publicités seront affichées sur les appareils"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"ADS Config": "Configuration ADS",
|
||||||
"Announcement Management": "Gestion des annonces",
|
"Announcement Management": "Gestion des annonces",
|
||||||
"Apple": "Identifiant Apple",
|
"Apple": "Identifiant Apple",
|
||||||
"Auth Control": "Contrôle d'authentification",
|
"Auth Control": "Contrôle d'authentification",
|
||||||
|
|||||||
40
apps/admin/locales/hi-IN/ads.json
Normal file
40
apps/admin/locales/hi-IN/ads.json
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"cancel": "रद्द करें",
|
||||||
|
"confirm": "पुष्टि करें",
|
||||||
|
"confirmDelete": "हटाने की पुष्टि करें",
|
||||||
|
"create": "विज्ञापन बनाएं",
|
||||||
|
"createAds": "विज्ञापन बनाएं",
|
||||||
|
"createSuccess": "सफलता से बनाया गया",
|
||||||
|
"delete": "हटाएं",
|
||||||
|
"deleteSuccess": "सफलता से हटाया गया",
|
||||||
|
"deleteWarning": "क्या आप वास्तव में इस विज्ञापन को हटाना चाहते हैं?",
|
||||||
|
"disabled": "अक्षम",
|
||||||
|
"edit": "संपादित करें",
|
||||||
|
"editAds": "विज्ञापन संपादित करें",
|
||||||
|
"enabled": "सक्षम",
|
||||||
|
"form": {
|
||||||
|
"cancel": "रद्द करें",
|
||||||
|
"confirm": "पुष्टि करें",
|
||||||
|
"content": "सामग्री",
|
||||||
|
"description": "विवरण",
|
||||||
|
"endTime": "समाप्ति समय",
|
||||||
|
"enterContent": "कृपया विज्ञापन सामग्री दर्ज करें",
|
||||||
|
"enterDescription": "कृपया विज्ञापन विवरण दर्ज करें",
|
||||||
|
"enterEndTime": "कृपया समाप्ति समय चुनें",
|
||||||
|
"enterStartTime": "कृपया प्रारंभ समय चुनें",
|
||||||
|
"enterTargetUrl": "कृपया लक्षित URL दर्ज करें",
|
||||||
|
"enterTitle": "कृपया विज्ञापन शीर्षक दर्ज करें",
|
||||||
|
"startTime": "प्रारंभ समय",
|
||||||
|
"targetUrl": "लक्षित URL",
|
||||||
|
"title": "शीर्षक",
|
||||||
|
"type": "विज्ञापन प्रकार",
|
||||||
|
"typeImage": "छवि",
|
||||||
|
"typeVideo": "वीडियो"
|
||||||
|
},
|
||||||
|
"status": "स्थिति",
|
||||||
|
"targetUrl": "लक्षित URL",
|
||||||
|
"title": "शीर्षक",
|
||||||
|
"type": "प्रकार",
|
||||||
|
"updateSuccess": "सफलता से अपडेट किया गया",
|
||||||
|
"validityPeriod": "वैधता अवधि"
|
||||||
|
}
|
||||||
@ -1,4 +1,14 @@
|
|||||||
{
|
{
|
||||||
|
"blockVirtualMachine": "वर्चुअल मशीन को ब्लॉक करें",
|
||||||
|
"blockVirtualMachineDescription": "जब सक्षम किया जाता है, तो उपकरणों को वर्चुअल मशीनों या एमुलेटर्स पर चलने से रोका जाएगा",
|
||||||
|
"communicationKey": "संचार कुंजी",
|
||||||
|
"communicationKeyDescription": "संचार कुंजी का उपयोग उपकरणों और सर्वरों के बीच सुरक्षित संचार के लिए किया जाता है",
|
||||||
"enable": "सक्रिय करें",
|
"enable": "सक्रिय करें",
|
||||||
"enableDescription": "सक्रिय करने के बाद, लॉगिन और पंजीकरण के लिए IMEI/IDFA/IDFV/AndroidID/Mac पता जैसे कई डिवाइस पहचानकर्ताओं का समर्थन किया जाता है"
|
"enableDescription": "सक्रिय करने के बाद, लॉगिन और पंजीकरण के लिए IMEI/IDFA/IDFV/AndroidID/Mac पता जैसे कई डिवाइस पहचानकर्ताओं का समर्थन किया जाता है",
|
||||||
|
"enableSecurity": "संचार एन्क्रिप्शन सक्षम करें",
|
||||||
|
"enableSecurityDescription": "जब सक्षम किया जाता है, तो उपकरणों और सर्वरों के बीच का संचार एन्क्रिप्ट किया जाएगा",
|
||||||
|
"saveFailed": "सहेजना विफल",
|
||||||
|
"saveSuccess": "सहेजना सफल",
|
||||||
|
"showAds": "विज्ञापन दिखाएँ",
|
||||||
|
"showAdsDescription": "जब सक्षम किया जाता है, तो उपकरणों पर विज्ञापन प्रदर्शित किए जाएंगे"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"ADS Config": "एडीएस कॉन्फ़िग",
|
||||||
"Announcement Management": "घोषणा प्रबंधन",
|
"Announcement Management": "घोषणा प्रबंधन",
|
||||||
"Apple": "एप्पल आईडी",
|
"Apple": "एप्पल आईडी",
|
||||||
"Auth Control": "प्रमाणिकरण नियंत्रण",
|
"Auth Control": "प्रमाणिकरण नियंत्रण",
|
||||||
|
|||||||
40
apps/admin/locales/hu-HU/ads.json
Normal file
40
apps/admin/locales/hu-HU/ads.json
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"cancel": "Mégse",
|
||||||
|
"confirm": "Megerősítés",
|
||||||
|
"confirmDelete": "Törlés megerősítése",
|
||||||
|
"create": "Hirdetés létrehozása",
|
||||||
|
"createAds": "Hirdetés létrehozása",
|
||||||
|
"createSuccess": "Sikeresen létrehozva",
|
||||||
|
"delete": "Törlés",
|
||||||
|
"deleteSuccess": "Sikeresen törölve",
|
||||||
|
"deleteWarning": "Biztosan törölni szeretné ezt a hirdetést?",
|
||||||
|
"disabled": "Letiltva",
|
||||||
|
"edit": "Szerkesztés",
|
||||||
|
"editAds": "Hirdetés szerkesztése",
|
||||||
|
"enabled": "Engedélyezve",
|
||||||
|
"form": {
|
||||||
|
"cancel": "Mégse",
|
||||||
|
"confirm": "Megerősítés",
|
||||||
|
"content": "Tartalom",
|
||||||
|
"description": "Leírás",
|
||||||
|
"endTime": "Befejezési idő",
|
||||||
|
"enterContent": "Kérjük, adja meg a hirdetés tartalmát",
|
||||||
|
"enterDescription": "Kérjük, adja meg a hirdetés leírását",
|
||||||
|
"enterEndTime": "Kérjük, válassza ki a befejezési időt",
|
||||||
|
"enterStartTime": "Kérjük, válassza ki a kezdési időt",
|
||||||
|
"enterTargetUrl": "Kérjük, adja meg a cél URL-t",
|
||||||
|
"enterTitle": "Kérjük, adja meg a hirdetés címét",
|
||||||
|
"startTime": "Kezdési idő",
|
||||||
|
"targetUrl": "Cél URL",
|
||||||
|
"title": "Cím",
|
||||||
|
"type": "Hirdetés típusa",
|
||||||
|
"typeImage": "Kép",
|
||||||
|
"typeVideo": "Videó"
|
||||||
|
},
|
||||||
|
"status": "Állapot",
|
||||||
|
"targetUrl": "Cél URL",
|
||||||
|
"title": "Cím",
|
||||||
|
"type": "Típus",
|
||||||
|
"updateSuccess": "Sikeresen frissítve",
|
||||||
|
"validityPeriod": "Érvényességi időszak"
|
||||||
|
}
|
||||||
@ -1,4 +1,14 @@
|
|||||||
{
|
{
|
||||||
|
"blockVirtualMachine": "Virtuális gép blokkolása",
|
||||||
|
"blockVirtualMachineDescription": "Ha engedélyezve van, az eszközök nem fognak tudni virtuális gépeken vagy emulátorokon futni",
|
||||||
|
"communicationKey": "Kommunikációs kulcs",
|
||||||
|
"communicationKeyDescription": "A kommunikációs kulcs a biztonságos kommunikációhoz szükséges az eszközök és a szerverek között",
|
||||||
"enable": "Engedélyezés",
|
"enable": "Engedélyezés",
|
||||||
"enableDescription": "Engedélyezés után több eszközazonosító, például IMEI/IDFA/IDFV/AndroidID/Mac-cím támogatott a bejelentkezéshez és a regisztrációhoz."
|
"enableDescription": "Engedélyezés után több eszközazonosító, például IMEI/IDFA/IDFV/AndroidID/Mac-cím támogatott a bejelentkezéshez és a regisztrációhoz.",
|
||||||
|
"enableSecurity": "Kommunikációs titkosítás engedélyezése",
|
||||||
|
"enableSecurityDescription": "Ha engedélyezve van, az eszközök és a szerverek közötti kommunikáció titkosítva lesz",
|
||||||
|
"saveFailed": "Mentés sikertelen",
|
||||||
|
"saveSuccess": "Mentés sikeres",
|
||||||
|
"showAds": "Hirdetések megjelenítése",
|
||||||
|
"showAdsDescription": "Ha engedélyezve van, hirdetések fognak megjelenni az eszközökön"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"ADS Config": "ADS konfiguráció",
|
||||||
"Announcement Management": "Hirdetménykezelés",
|
"Announcement Management": "Hirdetménykezelés",
|
||||||
"Apple": "Apple ID",
|
"Apple": "Apple ID",
|
||||||
"Auth Control": "Hitelesítési vezérlés",
|
"Auth Control": "Hitelesítési vezérlés",
|
||||||
|
|||||||
40
apps/admin/locales/ja-JP/ads.json
Normal file
40
apps/admin/locales/ja-JP/ads.json
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"cancel": "キャンセル",
|
||||||
|
"confirm": "確認",
|
||||||
|
"confirmDelete": "削除を確認",
|
||||||
|
"create": "広告を作成",
|
||||||
|
"createAds": "広告を作成",
|
||||||
|
"createSuccess": "作成に成功しました",
|
||||||
|
"delete": "削除",
|
||||||
|
"deleteSuccess": "削除に成功しました",
|
||||||
|
"deleteWarning": "この広告を削除してもよろしいですか?",
|
||||||
|
"disabled": "無効",
|
||||||
|
"edit": "編集",
|
||||||
|
"editAds": "広告を編集",
|
||||||
|
"enabled": "有効",
|
||||||
|
"form": {
|
||||||
|
"cancel": "キャンセル",
|
||||||
|
"confirm": "確認",
|
||||||
|
"content": "コンテンツ",
|
||||||
|
"description": "説明",
|
||||||
|
"endTime": "終了時間",
|
||||||
|
"enterContent": "広告の内容を入力してください",
|
||||||
|
"enterDescription": "広告の説明を入力してください",
|
||||||
|
"enterEndTime": "終了時間を選択してください",
|
||||||
|
"enterStartTime": "開始時間を選択してください",
|
||||||
|
"enterTargetUrl": "ターゲットURLを入力してください",
|
||||||
|
"enterTitle": "広告のタイトルを入力してください",
|
||||||
|
"startTime": "開始時間",
|
||||||
|
"targetUrl": "ターゲットURL",
|
||||||
|
"title": "タイトル",
|
||||||
|
"type": "広告の種類",
|
||||||
|
"typeImage": "画像",
|
||||||
|
"typeVideo": "動画"
|
||||||
|
},
|
||||||
|
"status": "ステータス",
|
||||||
|
"targetUrl": "ターゲットURL",
|
||||||
|
"title": "タイトル",
|
||||||
|
"type": "種類",
|
||||||
|
"updateSuccess": "更新に成功しました",
|
||||||
|
"validityPeriod": "有効期限"
|
||||||
|
}
|
||||||
@ -1,4 +1,14 @@
|
|||||||
{
|
{
|
||||||
|
"blockVirtualMachine": "仮想マシンをブロック",
|
||||||
|
"blockVirtualMachineDescription": "有効にすると、デバイスは仮想マシンやエミュレーター上での実行が禁止されます",
|
||||||
|
"communicationKey": "通信キー",
|
||||||
|
"communicationKeyDescription": "通信キーは、デバイスとサーバー間の安全な通信に使用されます",
|
||||||
"enable": "有効化",
|
"enable": "有効化",
|
||||||
"enableDescription": "有効化後、ログインおよび登録のために、IMEI/IDFA/IDFV/AndroidID/Macアドレスなどの複数のデバイス識別子がサポートされます。"
|
"enableDescription": "有効化後、ログインおよび登録のために、IMEI/IDFA/IDFV/AndroidID/Macアドレスなどの複数のデバイス識別子がサポートされます。",
|
||||||
|
"enableSecurity": "通信暗号化を有効にする",
|
||||||
|
"enableSecurityDescription": "有効にすると、デバイスとサーバー間の通信が暗号化されます",
|
||||||
|
"saveFailed": "保存に失敗しました",
|
||||||
|
"saveSuccess": "保存に成功しました",
|
||||||
|
"showAds": "広告を表示",
|
||||||
|
"showAdsDescription": "有効にすると、デバイスに広告が表示されます"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"ADS Config": "ADS設定",
|
||||||
"Announcement Management": "お知らせ管理",
|
"Announcement Management": "お知らせ管理",
|
||||||
"Apple": "Apple ID",
|
"Apple": "Apple ID",
|
||||||
"Auth Control": "認証管理",
|
"Auth Control": "認証管理",
|
||||||
|
|||||||
40
apps/admin/locales/ko-KR/ads.json
Normal file
40
apps/admin/locales/ko-KR/ads.json
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"cancel": "취소",
|
||||||
|
"confirm": "확인",
|
||||||
|
"confirmDelete": "삭제 확인",
|
||||||
|
"create": "광고 만들기",
|
||||||
|
"createAds": "광고 생성",
|
||||||
|
"createSuccess": "성공적으로 생성되었습니다",
|
||||||
|
"delete": "삭제",
|
||||||
|
"deleteSuccess": "성공적으로 삭제되었습니다",
|
||||||
|
"deleteWarning": "이 광고를 삭제하시겠습니까?",
|
||||||
|
"disabled": "비활성화됨",
|
||||||
|
"edit": "편집",
|
||||||
|
"editAds": "광고 편집",
|
||||||
|
"enabled": "활성화됨",
|
||||||
|
"form": {
|
||||||
|
"cancel": "취소",
|
||||||
|
"confirm": "확인",
|
||||||
|
"content": "내용",
|
||||||
|
"description": "설명",
|
||||||
|
"endTime": "종료 시간",
|
||||||
|
"enterContent": "광고 내용을 입력하세요",
|
||||||
|
"enterDescription": "광고 설명을 입력하세요",
|
||||||
|
"enterEndTime": "종료 시간을 선택하세요",
|
||||||
|
"enterStartTime": "시작 시간을 선택하세요",
|
||||||
|
"enterTargetUrl": "대상 URL을 입력하세요",
|
||||||
|
"enterTitle": "광고 제목을 입력하세요",
|
||||||
|
"startTime": "시작 시간",
|
||||||
|
"targetUrl": "대상 URL",
|
||||||
|
"title": "제목",
|
||||||
|
"type": "광고 유형",
|
||||||
|
"typeImage": "이미지",
|
||||||
|
"typeVideo": "비디오"
|
||||||
|
},
|
||||||
|
"status": "상태",
|
||||||
|
"targetUrl": "대상 URL",
|
||||||
|
"title": "제목",
|
||||||
|
"type": "유형",
|
||||||
|
"updateSuccess": "성공적으로 업데이트되었습니다",
|
||||||
|
"validityPeriod": "유효 기간"
|
||||||
|
}
|
||||||
@ -1,4 +1,14 @@
|
|||||||
{
|
{
|
||||||
|
"blockVirtualMachine": "가상 머신 차단",
|
||||||
|
"blockVirtualMachineDescription": "활성화되면, 장치가 가상 머신이나 에뮬레이터에서 실행되는 것을 방지합니다.",
|
||||||
|
"communicationKey": "통신 키",
|
||||||
|
"communicationKeyDescription": "통신 키는 장치와 서버 간의 안전한 통신을 위해 사용됩니다.",
|
||||||
"enable": "활성화",
|
"enable": "활성화",
|
||||||
"enableDescription": "활성화 후 IMEI/IDFA/IDFV/AndroidID/Mac 주소와 같은 여러 장치 식별자를 사용하여 로그인 및 등록할 수 있습니다."
|
"enableDescription": "활성화 후 IMEI/IDFA/IDFV/AndroidID/Mac 주소와 같은 여러 장치 식별자를 사용하여 로그인 및 등록할 수 있습니다.",
|
||||||
|
"enableSecurity": "통신 암호화 활성화",
|
||||||
|
"enableSecurityDescription": "활성화되면, 장치와 서버 간의 통신이 암호화됩니다.",
|
||||||
|
"saveFailed": "저장 실패",
|
||||||
|
"saveSuccess": "저장 성공",
|
||||||
|
"showAds": "광고 표시",
|
||||||
|
"showAdsDescription": "활성화되면, 장치에 광고가 표시됩니다."
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"ADS Config": "ADS 구성",
|
||||||
"Announcement Management": "공지 관리",
|
"Announcement Management": "공지 관리",
|
||||||
"Apple": "Apple ID",
|
"Apple": "Apple ID",
|
||||||
"Auth Control": "인증 제어",
|
"Auth Control": "인증 제어",
|
||||||
|
|||||||
40
apps/admin/locales/no-NO/ads.json
Normal file
40
apps/admin/locales/no-NO/ads.json
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"cancel": "Avbryt",
|
||||||
|
"confirm": "Bekreft",
|
||||||
|
"confirmDelete": "Bekreft sletting",
|
||||||
|
"create": "Opprett annonse",
|
||||||
|
"createAds": "Opprett annonse",
|
||||||
|
"createSuccess": "Opprettet med suksess",
|
||||||
|
"delete": "Slett",
|
||||||
|
"deleteSuccess": "Slettet med suksess",
|
||||||
|
"deleteWarning": "Er du sikker på at du vil slette denne annonsen?",
|
||||||
|
"disabled": "Deaktivert",
|
||||||
|
"edit": "Rediger",
|
||||||
|
"editAds": "Rediger annonse",
|
||||||
|
"enabled": "Aktivert",
|
||||||
|
"form": {
|
||||||
|
"cancel": "Avbryt",
|
||||||
|
"confirm": "Bekreft",
|
||||||
|
"content": "Innhold",
|
||||||
|
"description": "Beskrivelse",
|
||||||
|
"endTime": "Sluttid",
|
||||||
|
"enterContent": "Vennligst skriv inn annonseinnhold",
|
||||||
|
"enterDescription": "Vennligst skriv inn annonsebeskrivelse",
|
||||||
|
"enterEndTime": "Vennligst velg sluttid",
|
||||||
|
"enterStartTime": "Vennligst velg starttid",
|
||||||
|
"enterTargetUrl": "Vennligst skriv inn mål-URL",
|
||||||
|
"enterTitle": "Vennligst skriv inn annonsetittel",
|
||||||
|
"startTime": "Starttid",
|
||||||
|
"targetUrl": "Mål-URL",
|
||||||
|
"title": "Tittel",
|
||||||
|
"type": "Annonsetype",
|
||||||
|
"typeImage": "Bilde",
|
||||||
|
"typeVideo": "Video"
|
||||||
|
},
|
||||||
|
"status": "Status",
|
||||||
|
"targetUrl": "Mål-URL",
|
||||||
|
"title": "Tittel",
|
||||||
|
"type": "Type",
|
||||||
|
"updateSuccess": "Oppdatert med suksess",
|
||||||
|
"validityPeriod": "Gyldighetsperiode"
|
||||||
|
}
|
||||||
@ -1,4 +1,14 @@
|
|||||||
{
|
{
|
||||||
|
"blockVirtualMachine": "Blokker virtuell maskin",
|
||||||
|
"blockVirtualMachineDescription": "Når aktivert, vil enheter bli forhindret fra å kjøre på virtuelle maskiner eller emulatorer",
|
||||||
|
"communicationKey": "Kommunikasjonsnøkkel",
|
||||||
|
"communicationKeyDescription": "Kommunikasjonsnøkkelen brukes for sikker kommunikasjon mellom enheter og servere",
|
||||||
"enable": "Aktiver",
|
"enable": "Aktiver",
|
||||||
"enableDescription": "Etter aktivering støttes flere enhetsidentifikatorer som IMEI/IDFA/IDFV/AndroidID/Mac-adresse for pålogging og registrering"
|
"enableDescription": "Etter aktivering støttes flere enhetsidentifikatorer som IMEI/IDFA/IDFV/AndroidID/Mac-adresse for pålogging og registrering",
|
||||||
|
"enableSecurity": "Aktiver kommunikasjonskryptering",
|
||||||
|
"enableSecurityDescription": "Når aktivert, vil kommunikasjonen mellom enheter og servere bli kryptert",
|
||||||
|
"saveFailed": "Lagring mislyktes",
|
||||||
|
"saveSuccess": "Lagring vellykket",
|
||||||
|
"showAds": "Vis annonser",
|
||||||
|
"showAdsDescription": "Når aktivert, vil annonser bli vist på enhetene"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"ADS Config": "ADS-konfigurasjon",
|
||||||
"Announcement Management": "Kunngjøringsadministrasjon",
|
"Announcement Management": "Kunngjøringsadministrasjon",
|
||||||
"Apple": "Apple-ID",
|
"Apple": "Apple-ID",
|
||||||
"Auth Control": "Autentiseringskontroll",
|
"Auth Control": "Autentiseringskontroll",
|
||||||
|
|||||||
40
apps/admin/locales/pl-PL/ads.json
Normal file
40
apps/admin/locales/pl-PL/ads.json
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"cancel": "Anuluj",
|
||||||
|
"confirm": "Potwierdź",
|
||||||
|
"confirmDelete": "Potwierdź usunięcie",
|
||||||
|
"create": "Utwórz reklamę",
|
||||||
|
"createAds": "Utwórz ogłoszenie",
|
||||||
|
"createSuccess": "Pomyślnie utworzono",
|
||||||
|
"delete": "Usuń",
|
||||||
|
"deleteSuccess": "Pomyślnie usunięto",
|
||||||
|
"deleteWarning": "Czy na pewno chcesz usunąć tę reklamę?",
|
||||||
|
"disabled": "Wyłączone",
|
||||||
|
"edit": "Edytuj",
|
||||||
|
"editAds": "Edytuj ogłoszenie",
|
||||||
|
"enabled": "Włączone",
|
||||||
|
"form": {
|
||||||
|
"cancel": "Anuluj",
|
||||||
|
"confirm": "Potwierdź",
|
||||||
|
"content": "Treść",
|
||||||
|
"description": "Opis",
|
||||||
|
"endTime": "Czas zakończenia",
|
||||||
|
"enterContent": "Proszę wprowadzić treść reklamy",
|
||||||
|
"enterDescription": "Proszę wprowadzić opis reklamy",
|
||||||
|
"enterEndTime": "Proszę wybrać czas zakończenia",
|
||||||
|
"enterStartTime": "Proszę wybrać czas rozpoczęcia",
|
||||||
|
"enterTargetUrl": "Proszę wprowadzić docelowy URL",
|
||||||
|
"enterTitle": "Proszę wprowadzić tytuł reklamy",
|
||||||
|
"startTime": "Czas rozpoczęcia",
|
||||||
|
"targetUrl": "Docelowy URL",
|
||||||
|
"title": "Tytuł",
|
||||||
|
"type": "Typ reklamy",
|
||||||
|
"typeImage": "Obraz",
|
||||||
|
"typeVideo": "Wideo"
|
||||||
|
},
|
||||||
|
"status": "Status",
|
||||||
|
"targetUrl": "Docelowy URL",
|
||||||
|
"title": "Tytuł",
|
||||||
|
"type": "Typ",
|
||||||
|
"updateSuccess": "Pomyślnie zaktualizowano",
|
||||||
|
"validityPeriod": "Okres ważności"
|
||||||
|
}
|
||||||
@ -1,4 +1,14 @@
|
|||||||
{
|
{
|
||||||
|
"blockVirtualMachine": "Zablokuj maszynę wirtualną",
|
||||||
|
"blockVirtualMachineDescription": "Po włączeniu urządzenia nie będą mogły działać na maszynach wirtualnych lub emulatorach",
|
||||||
|
"communicationKey": "Klucz komunikacji",
|
||||||
|
"communicationKeyDescription": "Klucz komunikacji jest używany do bezpiecznej komunikacji między urządzeniami a serwerami",
|
||||||
"enable": "Włącz",
|
"enable": "Włącz",
|
||||||
"enableDescription": "Po włączeniu obsługiwane są różne identyfikatory urządzeń, takie jak IMEI/IDFA/IDFV/AndroidID/adres MAC do logowania i rejestracji"
|
"enableDescription": "Po włączeniu obsługiwane są różne identyfikatory urządzeń, takie jak IMEI/IDFA/IDFV/AndroidID/adres MAC do logowania i rejestracji",
|
||||||
|
"enableSecurity": "Włącz szyfrowanie komunikacji",
|
||||||
|
"enableSecurityDescription": "Po włączeniu komunikacja między urządzeniami a serwerami będzie szyfrowana",
|
||||||
|
"saveFailed": "Zapis nie powiódł się",
|
||||||
|
"saveSuccess": "Zapisano pomyślnie",
|
||||||
|
"showAds": "Wyświetl reklamy",
|
||||||
|
"showAdsDescription": "Po włączeniu na urządzeniach będą wyświetlane reklamy"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"ADS Config": "Konfiguracja ADS",
|
||||||
"Announcement Management": "Zarządzanie ogłoszeniami",
|
"Announcement Management": "Zarządzanie ogłoszeniami",
|
||||||
"Apple": "Identyfikator Apple",
|
"Apple": "Identyfikator Apple",
|
||||||
"Auth Control": "Kontrola autoryzacji",
|
"Auth Control": "Kontrola autoryzacji",
|
||||||
|
|||||||
40
apps/admin/locales/pt-BR/ads.json
Normal file
40
apps/admin/locales/pt-BR/ads.json
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"cancel": "Cancelar",
|
||||||
|
"confirm": "Confirmar",
|
||||||
|
"confirmDelete": "Confirmar Exclusão",
|
||||||
|
"create": "Criar Anúncio",
|
||||||
|
"createAds": "Criar Anúncio",
|
||||||
|
"createSuccess": "Criado com sucesso",
|
||||||
|
"delete": "Excluir",
|
||||||
|
"deleteSuccess": "Excluído com sucesso",
|
||||||
|
"deleteWarning": "Você tem certeza de que deseja excluir este anúncio?",
|
||||||
|
"disabled": "Desativado",
|
||||||
|
"edit": "Editar",
|
||||||
|
"editAds": "Editar Anúncio",
|
||||||
|
"enabled": "Ativado",
|
||||||
|
"form": {
|
||||||
|
"cancel": "Cancelar",
|
||||||
|
"confirm": "Confirmar",
|
||||||
|
"content": "Conteúdo",
|
||||||
|
"description": "Descrição",
|
||||||
|
"endTime": "Hora de Término",
|
||||||
|
"enterContent": "Por favor, insira o conteúdo do anúncio",
|
||||||
|
"enterDescription": "Por favor, insira a descrição do anúncio",
|
||||||
|
"enterEndTime": "Por favor, selecione a hora de término",
|
||||||
|
"enterStartTime": "Por favor, selecione a hora de início",
|
||||||
|
"enterTargetUrl": "Por favor, insira a URL de destino",
|
||||||
|
"enterTitle": "Por favor, insira o título do anúncio",
|
||||||
|
"startTime": "Hora de Início",
|
||||||
|
"targetUrl": "URL de Destino",
|
||||||
|
"title": "Título",
|
||||||
|
"type": "Tipo de Anúncio",
|
||||||
|
"typeImage": "Imagem",
|
||||||
|
"typeVideo": "Vídeo"
|
||||||
|
},
|
||||||
|
"status": "Status",
|
||||||
|
"targetUrl": "URL de Destino",
|
||||||
|
"title": "Título",
|
||||||
|
"type": "Tipo",
|
||||||
|
"updateSuccess": "Atualizado com sucesso",
|
||||||
|
"validityPeriod": "Período de Validade"
|
||||||
|
}
|
||||||
@ -1,4 +1,14 @@
|
|||||||
{
|
{
|
||||||
|
"blockVirtualMachine": "Bloquear Máquina Virtual",
|
||||||
|
"blockVirtualMachineDescription": "Quando ativado, os dispositivos serão impedidos de rodar em máquinas virtuais ou emuladores",
|
||||||
|
"communicationKey": "Chave de Comunicação",
|
||||||
|
"communicationKeyDescription": "A chave de comunicação é usada para comunicação segura entre dispositivos e servidores",
|
||||||
"enable": "Ativar",
|
"enable": "Ativar",
|
||||||
"enableDescription": "Após a ativação, múltiplos identificadores de dispositivo, como IMEI/IDFA/IDFV/AndroidID/endereço Mac, são suportados para login e registro"
|
"enableDescription": "Após a ativação, múltiplos identificadores de dispositivo, como IMEI/IDFA/IDFV/AndroidID/endereço Mac, são suportados para login e registro",
|
||||||
|
"enableSecurity": "Ativar Criptografia de Comunicação",
|
||||||
|
"enableSecurityDescription": "Quando ativado, a comunicação entre dispositivos e servidores será criptografada",
|
||||||
|
"saveFailed": "Falha ao salvar",
|
||||||
|
"saveSuccess": "Salvo com sucesso",
|
||||||
|
"showAds": "Mostrar Anúncios",
|
||||||
|
"showAdsDescription": "Quando ativado, anúncios serão exibidos nos dispositivos"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"ADS Config": "Configuração ADS",
|
||||||
"Announcement Management": "Gerenciamento de Anúncios",
|
"Announcement Management": "Gerenciamento de Anúncios",
|
||||||
"Apple": "ID Apple",
|
"Apple": "ID Apple",
|
||||||
"Auth Control": "Controle de Autenticação",
|
"Auth Control": "Controle de Autenticação",
|
||||||
|
|||||||
@ -23,6 +23,7 @@ export default getRequestConfig(async () => {
|
|||||||
'facebook': (await import(`./${locale}/facebook.json`)).default,
|
'facebook': (await import(`./${locale}/facebook.json`)).default,
|
||||||
'github': (await import(`./${locale}/github.json`)).default,
|
'github': (await import(`./${locale}/github.json`)).default,
|
||||||
'device': (await import(`./${locale}/device.json`)).default,
|
'device': (await import(`./${locale}/device.json`)).default,
|
||||||
|
'ads': (await import(`./${locale}/ads.json`)).default,
|
||||||
'payment': (await import(`./${locale}/payment.json`)).default,
|
'payment': (await import(`./${locale}/payment.json`)).default,
|
||||||
'server': (await import(`./${locale}/server.json`)).default,
|
'server': (await import(`./${locale}/server.json`)).default,
|
||||||
'subscribe': (await import(`./${locale}/subscribe.json`)).default,
|
'subscribe': (await import(`./${locale}/subscribe.json`)).default,
|
||||||
|
|||||||
40
apps/admin/locales/ro-RO/ads.json
Normal file
40
apps/admin/locales/ro-RO/ads.json
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"cancel": "Anulează",
|
||||||
|
"confirm": "Confirmă",
|
||||||
|
"confirmDelete": "Confirmă ștergerea",
|
||||||
|
"create": "Creează anunț",
|
||||||
|
"createAds": "Creează publicitate",
|
||||||
|
"createSuccess": "Creat cu succes",
|
||||||
|
"delete": "Șterge",
|
||||||
|
"deleteSuccess": "Șters cu succes",
|
||||||
|
"deleteWarning": "Ești sigur că vrei să ștergi acest anunț?",
|
||||||
|
"disabled": "Dezactivat",
|
||||||
|
"edit": "Editează",
|
||||||
|
"editAds": "Editează publicitate",
|
||||||
|
"enabled": "Activat",
|
||||||
|
"form": {
|
||||||
|
"cancel": "Anulează",
|
||||||
|
"confirm": "Confirmă",
|
||||||
|
"content": "Conținut",
|
||||||
|
"description": "Descriere",
|
||||||
|
"endTime": "Ora de încheiere",
|
||||||
|
"enterContent": "Te rugăm să introduci conținutul anunțului",
|
||||||
|
"enterDescription": "Te rugăm să introduci descrierea anunțului",
|
||||||
|
"enterEndTime": "Te rugăm să selectezi ora de încheiere",
|
||||||
|
"enterStartTime": "Te rugăm să selectezi ora de început",
|
||||||
|
"enterTargetUrl": "Te rugăm să introduci URL-ul țintă",
|
||||||
|
"enterTitle": "Te rugăm să introduci titlul anunțului",
|
||||||
|
"startTime": "Ora de început",
|
||||||
|
"targetUrl": "URL țintă",
|
||||||
|
"title": "Titlu",
|
||||||
|
"type": "Tip anunț",
|
||||||
|
"typeImage": "Imagine",
|
||||||
|
"typeVideo": "Video"
|
||||||
|
},
|
||||||
|
"status": "Stare",
|
||||||
|
"targetUrl": "URL țintă",
|
||||||
|
"title": "Titlu",
|
||||||
|
"type": "Tip",
|
||||||
|
"updateSuccess": "Actualizat cu succes",
|
||||||
|
"validityPeriod": "Perioada de valabilitate"
|
||||||
|
}
|
||||||
@ -1,4 +1,14 @@
|
|||||||
{
|
{
|
||||||
|
"blockVirtualMachine": "Blochează Mașina Virtuală",
|
||||||
|
"blockVirtualMachineDescription": "Când este activat, dispozitivele vor fi împiedicate să ruleze pe mașini virtuale sau emulatoare",
|
||||||
|
"communicationKey": "Cheia de Comunicare",
|
||||||
|
"communicationKeyDescription": "Cheia de comunicare este utilizată pentru comunicarea securizată între dispozitive și servere",
|
||||||
"enable": "Activare",
|
"enable": "Activare",
|
||||||
"enableDescription": "După activare, sunt acceptate mai multe identificatoare de dispozitive, cum ar fi IMEI/IDFA/IDFV/AndroidID/adresa Mac pentru autentificare și înregistrare."
|
"enableDescription": "După activare, sunt acceptate mai multe identificatoare de dispozitive, cum ar fi IMEI/IDFA/IDFV/AndroidID/adresa Mac pentru autentificare și înregistrare.",
|
||||||
|
"enableSecurity": "Activează Criptarea Comunicației",
|
||||||
|
"enableSecurityDescription": "Când este activat, comunicația între dispozitive și servere va fi criptată",
|
||||||
|
"saveFailed": "Salvarea a eșuat",
|
||||||
|
"saveSuccess": "Salvarea a fost reușită",
|
||||||
|
"showAds": "Afișează Reclame",
|
||||||
|
"showAdsDescription": "Când este activat, reclamele vor fi afișate pe dispozitive"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"ADS Config": "Configurație ADS",
|
||||||
"Announcement Management": "Managementul Anunțurilor",
|
"Announcement Management": "Managementul Anunțurilor",
|
||||||
"Apple": "ID Apple",
|
"Apple": "ID Apple",
|
||||||
"Auth Control": "Control Autentificare",
|
"Auth Control": "Control Autentificare",
|
||||||
|
|||||||
40
apps/admin/locales/ru-RU/ads.json
Normal file
40
apps/admin/locales/ru-RU/ads.json
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"cancel": "Отмена",
|
||||||
|
"confirm": "Подтвердить",
|
||||||
|
"confirmDelete": "Подтвердить удаление",
|
||||||
|
"create": "Создать объявление",
|
||||||
|
"createAds": "Создать рекламу",
|
||||||
|
"createSuccess": "Успешно создано",
|
||||||
|
"delete": "Удалить",
|
||||||
|
"deleteSuccess": "Успешно удалено",
|
||||||
|
"deleteWarning": "Вы уверены, что хотите удалить это объявление?",
|
||||||
|
"disabled": "Отключено",
|
||||||
|
"edit": "Редактировать",
|
||||||
|
"editAds": "Редактировать рекламу",
|
||||||
|
"enabled": "Включено",
|
||||||
|
"form": {
|
||||||
|
"cancel": "Отмена",
|
||||||
|
"confirm": "Подтвердить",
|
||||||
|
"content": "Содержимое",
|
||||||
|
"description": "Описание",
|
||||||
|
"endTime": "Время окончания",
|
||||||
|
"enterContent": "Пожалуйста, введите содержимое объявления",
|
||||||
|
"enterDescription": "Пожалуйста, введите описание объявления",
|
||||||
|
"enterEndTime": "Пожалуйста, выберите время окончания",
|
||||||
|
"enterStartTime": "Пожалуйста, выберите время начала",
|
||||||
|
"enterTargetUrl": "Пожалуйста, введите целевой URL",
|
||||||
|
"enterTitle": "Пожалуйста, введите заголовок объявления",
|
||||||
|
"startTime": "Время начала",
|
||||||
|
"targetUrl": "Целевой URL",
|
||||||
|
"title": "Заголовок",
|
||||||
|
"type": "Тип объявления",
|
||||||
|
"typeImage": "Изображение",
|
||||||
|
"typeVideo": "Видео"
|
||||||
|
},
|
||||||
|
"status": "Статус",
|
||||||
|
"targetUrl": "Целевой URL",
|
||||||
|
"title": "Заголовок",
|
||||||
|
"type": "Тип",
|
||||||
|
"updateSuccess": "Успешно обновлено",
|
||||||
|
"validityPeriod": "Срок действия"
|
||||||
|
}
|
||||||
@ -1,4 +1,14 @@
|
|||||||
{
|
{
|
||||||
|
"blockVirtualMachine": "Блокировать виртуальную машину",
|
||||||
|
"blockVirtualMachineDescription": "При включении устройства не смогут работать на виртуальных машинах или эмуляторах",
|
||||||
|
"communicationKey": "Ключ связи",
|
||||||
|
"communicationKeyDescription": "Ключ связи используется для безопасной связи между устройствами и серверами",
|
||||||
"enable": "Включить",
|
"enable": "Включить",
|
||||||
"enableDescription": "После включения поддерживаются несколько идентификаторов устройств, таких как IMEI/IDFA/IDFV/AndroidID/Mac-адрес для входа и регистрации"
|
"enableDescription": "После включения поддерживаются несколько идентификаторов устройств, таких как IMEI/IDFA/IDFV/AndroidID/Mac-адрес для входа и регистрации",
|
||||||
|
"enableSecurity": "Включить шифрование связи",
|
||||||
|
"enableSecurityDescription": "При включении связь между устройствами и серверами будет зашифрована",
|
||||||
|
"saveFailed": "Не удалось сохранить",
|
||||||
|
"saveSuccess": "Сохранение успешно",
|
||||||
|
"showAds": "Показать рекламу",
|
||||||
|
"showAdsDescription": "При включении реклама будет отображаться на устройствах"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"ADS Config": "Конфигурация ADS",
|
||||||
"Announcement Management": "Управление объявлениями",
|
"Announcement Management": "Управление объявлениями",
|
||||||
"Apple": "Apple ID",
|
"Apple": "Apple ID",
|
||||||
"Auth Control": "Управление аутентификацией",
|
"Auth Control": "Управление аутентификацией",
|
||||||
|
|||||||
40
apps/admin/locales/th-TH/ads.json
Normal file
40
apps/admin/locales/th-TH/ads.json
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"cancel": "ยกเลิก",
|
||||||
|
"confirm": "ยืนยัน",
|
||||||
|
"confirmDelete": "ยืนยันการลบ",
|
||||||
|
"create": "สร้างโฆษณา",
|
||||||
|
"createAds": "สร้างโฆษณา",
|
||||||
|
"createSuccess": "สร้างสำเร็จ",
|
||||||
|
"delete": "ลบ",
|
||||||
|
"deleteSuccess": "ลบสำเร็จ",
|
||||||
|
"deleteWarning": "คุณแน่ใจหรือว่าต้องการลบโฆษณานี้?",
|
||||||
|
"disabled": "ปิดใช้งาน",
|
||||||
|
"edit": "แก้ไข",
|
||||||
|
"editAds": "แก้ไขโฆษณา",
|
||||||
|
"enabled": "เปิดใช้งาน",
|
||||||
|
"form": {
|
||||||
|
"cancel": "ยกเลิก",
|
||||||
|
"confirm": "ยืนยัน",
|
||||||
|
"content": "เนื้อหา",
|
||||||
|
"description": "คำอธิบาย",
|
||||||
|
"endTime": "เวลาสิ้นสุด",
|
||||||
|
"enterContent": "กรุณาใส่เนื้อหาโฆษณา",
|
||||||
|
"enterDescription": "กรุณาใส่คำอธิบายโฆษณา",
|
||||||
|
"enterEndTime": "กรุณาเลือกเวลาสิ้นสุด",
|
||||||
|
"enterStartTime": "กรุณาเลือกเวลาเริ่มต้น",
|
||||||
|
"enterTargetUrl": "กรุณาใส่ URL เป้าหมาย",
|
||||||
|
"enterTitle": "กรุณาใส่ชื่อโฆษณา",
|
||||||
|
"startTime": "เวลาเริ่มต้น",
|
||||||
|
"targetUrl": "URL เป้าหมาย",
|
||||||
|
"title": "ชื่อ",
|
||||||
|
"type": "ประเภทโฆษณา",
|
||||||
|
"typeImage": "ภาพ",
|
||||||
|
"typeVideo": "วิดีโอ"
|
||||||
|
},
|
||||||
|
"status": "สถานะ",
|
||||||
|
"targetUrl": "URL เป้าหมาย",
|
||||||
|
"title": "ชื่อ",
|
||||||
|
"type": "ประเภท",
|
||||||
|
"updateSuccess": "อัปเดตสำเร็จ",
|
||||||
|
"validityPeriod": "ระยะเวลาที่ใช้ได้"
|
||||||
|
}
|
||||||
@ -1,4 +1,14 @@
|
|||||||
{
|
{
|
||||||
|
"blockVirtualMachine": "บล็อกเครื่องเสมือน",
|
||||||
|
"blockVirtualMachineDescription": "เมื่อเปิดใช้งาน อุปกรณ์จะไม่สามารถทำงานบนเครื่องเสมือนหรืออีมูเลเตอร์ได้",
|
||||||
|
"communicationKey": "กุญแจการสื่อสาร",
|
||||||
|
"communicationKeyDescription": "กุญแจการสื่อสารใช้สำหรับการสื่อสารที่ปลอดภัยระหว่างอุปกรณ์และเซิร์ฟเวอร์",
|
||||||
"enable": "เปิดใช้งาน",
|
"enable": "เปิดใช้งาน",
|
||||||
"enableDescription": "หลังจากเปิดใช้งาน จะรองรับการเข้าสู่ระบบและการลงทะเบียนด้วยตัวระบุอุปกรณ์หลายตัว เช่น IMEI/IDFA/IDFV/AndroidID/ที่อยู่ Mac"
|
"enableDescription": "หลังจากเปิดใช้งาน จะรองรับการเข้าสู่ระบบและการลงทะเบียนด้วยตัวระบุอุปกรณ์หลายตัว เช่น IMEI/IDFA/IDFV/AndroidID/ที่อยู่ Mac",
|
||||||
|
"enableSecurity": "เปิดใช้งานการเข้ารหัสการสื่อสาร",
|
||||||
|
"enableSecurityDescription": "เมื่อเปิดใช้งาน การสื่อสารระหว่างอุปกรณ์และเซิร์ฟเวอร์จะถูกเข้ารหัส",
|
||||||
|
"saveFailed": "การบันทึกล้มเหลว",
|
||||||
|
"saveSuccess": "การบันทึกสำเร็จ",
|
||||||
|
"showAds": "แสดงโฆษณา",
|
||||||
|
"showAdsDescription": "เมื่อเปิดใช้งาน โฆษณาจะถูกแสดงบนอุปกรณ์"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"ADS Config": "การตั้งค่า ADS",
|
||||||
"Announcement Management": "การจัดการประกาศ",
|
"Announcement Management": "การจัดการประกาศ",
|
||||||
"Apple": "Apple ID",
|
"Apple": "Apple ID",
|
||||||
"Auth Control": "การควบคุมการยืนยันตัวตน",
|
"Auth Control": "การควบคุมการยืนยันตัวตน",
|
||||||
|
|||||||
40
apps/admin/locales/tr-TR/ads.json
Normal file
40
apps/admin/locales/tr-TR/ads.json
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"cancel": "İptal",
|
||||||
|
"confirm": "Onayla",
|
||||||
|
"confirmDelete": "Silmeyi Onayla",
|
||||||
|
"create": "Reklam Oluştur",
|
||||||
|
"createAds": "Reklam Oluştur",
|
||||||
|
"createSuccess": "Başarıyla oluşturuldu",
|
||||||
|
"delete": "Sil",
|
||||||
|
"deleteSuccess": "Başarıyla silindi",
|
||||||
|
"deleteWarning": "Bu reklamı silmek istediğinize emin misiniz?",
|
||||||
|
"disabled": "Devre Dışı",
|
||||||
|
"edit": "Düzenle",
|
||||||
|
"editAds": "Reklamı Düzenle",
|
||||||
|
"enabled": "Etkin",
|
||||||
|
"form": {
|
||||||
|
"cancel": "İptal",
|
||||||
|
"confirm": "Onayla",
|
||||||
|
"content": "İçerik",
|
||||||
|
"description": "Açıklama",
|
||||||
|
"endTime": "Bitiş Zamanı",
|
||||||
|
"enterContent": "Lütfen reklam içeriğini girin",
|
||||||
|
"enterDescription": "Lütfen reklam açıklamasını girin",
|
||||||
|
"enterEndTime": "Lütfen bitiş zamanını seçin",
|
||||||
|
"enterStartTime": "Lütfen başlangıç zamanını seçin",
|
||||||
|
"enterTargetUrl": "Lütfen hedef URL'yi girin",
|
||||||
|
"enterTitle": "Lütfen reklam başlığını girin",
|
||||||
|
"startTime": "Başlangıç Zamanı",
|
||||||
|
"targetUrl": "Hedef URL",
|
||||||
|
"title": "Başlık",
|
||||||
|
"type": "Reklam Türü",
|
||||||
|
"typeImage": "Görüntü",
|
||||||
|
"typeVideo": "Video"
|
||||||
|
},
|
||||||
|
"status": "Durum",
|
||||||
|
"targetUrl": "Hedef URL",
|
||||||
|
"title": "Başlık",
|
||||||
|
"type": "Tür",
|
||||||
|
"updateSuccess": "Başarıyla güncellendi",
|
||||||
|
"validityPeriod": "Geçerlilik Süresi"
|
||||||
|
}
|
||||||
@ -1,4 +1,14 @@
|
|||||||
{
|
{
|
||||||
|
"blockVirtualMachine": "Sanal Makineyi Engelle",
|
||||||
|
"blockVirtualMachineDescription": "Etkinleştirildiğinde, cihazların sanal makinelerde veya emülatörlerde çalışması engellenecektir",
|
||||||
|
"communicationKey": "İletişim Anahtarı",
|
||||||
|
"communicationKeyDescription": "İletişim anahtarı, cihazlar ve sunucular arasında güvenli iletişim için kullanılır",
|
||||||
"enable": "Etkinleştir",
|
"enable": "Etkinleştir",
|
||||||
"enableDescription": "Etkinleştirildikten sonra, giriş ve kayıt için IMEI/IDFA/IDFV/AndroidID/Mac adresi gibi birden fazla cihaz tanımlayıcısı desteklenir."
|
"enableDescription": "Etkinleştirildikten sonra, giriş ve kayıt için IMEI/IDFA/IDFV/AndroidID/Mac adresi gibi birden fazla cihaz tanımlayıcısı desteklenir.",
|
||||||
|
"enableSecurity": "İletişim Şifrelemesini Etkinleştir",
|
||||||
|
"enableSecurityDescription": "Etkinleştirildiğinde, cihazlar ve sunucular arasındaki iletişim şifrelenmiş olacaktır",
|
||||||
|
"saveFailed": "Kaydetme başarısız oldu",
|
||||||
|
"saveSuccess": "Başarıyla kaydedildi",
|
||||||
|
"showAds": "Reklamları Göster",
|
||||||
|
"showAdsDescription": "Etkinleştirildiğinde, cihazlarda reklamlar görüntülenecektir"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"ADS Config": "ADS Yapılandırması",
|
||||||
"Announcement Management": "Duyuru Yönetimi",
|
"Announcement Management": "Duyuru Yönetimi",
|
||||||
"Apple": "Apple Kimliği",
|
"Apple": "Apple Kimliği",
|
||||||
"Auth Control": "Yetki Kontrolü",
|
"Auth Control": "Yetki Kontrolü",
|
||||||
|
|||||||
40
apps/admin/locales/uk-UA/ads.json
Normal file
40
apps/admin/locales/uk-UA/ads.json
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"cancel": "Скасувати",
|
||||||
|
"confirm": "Підтвердити",
|
||||||
|
"confirmDelete": "Підтвердити видалення",
|
||||||
|
"create": "Створити оголошення",
|
||||||
|
"createAds": "Створити рекламу",
|
||||||
|
"createSuccess": "Успішно створено",
|
||||||
|
"delete": "Видалити",
|
||||||
|
"deleteSuccess": "Успішно видалено",
|
||||||
|
"deleteWarning": "Ви впевнені, що хочете видалити це оголошення?",
|
||||||
|
"disabled": "Вимкнено",
|
||||||
|
"edit": "Редагувати",
|
||||||
|
"editAds": "Редагувати рекламу",
|
||||||
|
"enabled": "Увімкнено",
|
||||||
|
"form": {
|
||||||
|
"cancel": "Скасувати",
|
||||||
|
"confirm": "Підтвердити",
|
||||||
|
"content": "Зміст",
|
||||||
|
"description": "Опис",
|
||||||
|
"endTime": "Час закінчення",
|
||||||
|
"enterContent": "Будь ласка, введіть зміст оголошення",
|
||||||
|
"enterDescription": "Будь ласка, введіть опис оголошення",
|
||||||
|
"enterEndTime": "Будь ласка, виберіть час закінчення",
|
||||||
|
"enterStartTime": "Будь ласка, виберіть час початку",
|
||||||
|
"enterTargetUrl": "Будь ласка, введіть цільовий URL",
|
||||||
|
"enterTitle": "Будь ласка, введіть заголовок оголошення",
|
||||||
|
"startTime": "Час початку",
|
||||||
|
"targetUrl": "Цільовий URL",
|
||||||
|
"title": "Заголовок",
|
||||||
|
"type": "Тип оголошення",
|
||||||
|
"typeImage": "Зображення",
|
||||||
|
"typeVideo": "Відео"
|
||||||
|
},
|
||||||
|
"status": "Статус",
|
||||||
|
"targetUrl": "Цільовий URL",
|
||||||
|
"title": "Заголовок",
|
||||||
|
"type": "Тип",
|
||||||
|
"updateSuccess": "Успішно оновлено",
|
||||||
|
"validityPeriod": "Термін дії"
|
||||||
|
}
|
||||||
@ -1,4 +1,14 @@
|
|||||||
{
|
{
|
||||||
|
"blockVirtualMachine": "Блокувати віртуальну машину",
|
||||||
|
"blockVirtualMachineDescription": "При увімкненні пристрої не зможуть працювати на віртуальних машинах або емуляторах",
|
||||||
|
"communicationKey": "Ключ зв'язку",
|
||||||
|
"communicationKeyDescription": "Ключ зв'язку використовується для безпечного зв'язку між пристроями та серверами",
|
||||||
"enable": "Увімкнути",
|
"enable": "Увімкнути",
|
||||||
"enableDescription": "Після увімкнення підтримуються кілька ідентифікаторів пристроїв, таких як IMEI/IDFA/IDFV/AndroidID/Mac-адреса для входу та реєстрації"
|
"enableDescription": "Після увімкнення підтримуються кілька ідентифікаторів пристроїв, таких як IMEI/IDFA/IDFV/AndroidID/Mac-адреса для входу та реєстрації",
|
||||||
|
"enableSecurity": "Увімкнути шифрування зв'язку",
|
||||||
|
"enableSecurityDescription": "При увімкненні зв'язок між пристроями та серверами буде зашифровано",
|
||||||
|
"saveFailed": "Не вдалося зберегти",
|
||||||
|
"saveSuccess": "Збережено успішно",
|
||||||
|
"showAds": "Показувати рекламу",
|
||||||
|
"showAdsDescription": "При увімкненні на пристроях буде відображатися реклама"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"ADS Config": "Конфігурація ADS",
|
||||||
"Announcement Management": "Управління оголошеннями",
|
"Announcement Management": "Управління оголошеннями",
|
||||||
"Apple": "Apple ID",
|
"Apple": "Apple ID",
|
||||||
"Auth Control": "Контроль автентифікації",
|
"Auth Control": "Контроль автентифікації",
|
||||||
|
|||||||
40
apps/admin/locales/vi-VN/ads.json
Normal file
40
apps/admin/locales/vi-VN/ads.json
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"cancel": "Hủy",
|
||||||
|
"confirm": "Xác nhận",
|
||||||
|
"confirmDelete": "Xác nhận xóa",
|
||||||
|
"create": "Tạo quảng cáo",
|
||||||
|
"createAds": "Tạo quảng cáo",
|
||||||
|
"createSuccess": "Tạo thành công",
|
||||||
|
"delete": "Xóa",
|
||||||
|
"deleteSuccess": "Xóa thành công",
|
||||||
|
"deleteWarning": "Bạn có chắc chắn muốn xóa quảng cáo này không?",
|
||||||
|
"disabled": "Đã tắt",
|
||||||
|
"edit": "Chỉnh sửa",
|
||||||
|
"editAds": "Chỉnh sửa quảng cáo",
|
||||||
|
"enabled": "Đã bật",
|
||||||
|
"form": {
|
||||||
|
"cancel": "Hủy",
|
||||||
|
"confirm": "Xác nhận",
|
||||||
|
"content": "Nội dung",
|
||||||
|
"description": "Mô tả",
|
||||||
|
"endTime": "Thời gian kết thúc",
|
||||||
|
"enterContent": "Vui lòng nhập nội dung quảng cáo",
|
||||||
|
"enterDescription": "Vui lòng nhập mô tả quảng cáo",
|
||||||
|
"enterEndTime": "Vui lòng chọn thời gian kết thúc",
|
||||||
|
"enterStartTime": "Vui lòng chọn thời gian bắt đầu",
|
||||||
|
"enterTargetUrl": "Vui lòng nhập URL mục tiêu",
|
||||||
|
"enterTitle": "Vui lòng nhập tiêu đề quảng cáo",
|
||||||
|
"startTime": "Thời gian bắt đầu",
|
||||||
|
"targetUrl": "URL mục tiêu",
|
||||||
|
"title": "Tiêu đề",
|
||||||
|
"type": "Loại quảng cáo",
|
||||||
|
"typeImage": "Hình ảnh",
|
||||||
|
"typeVideo": "Video"
|
||||||
|
},
|
||||||
|
"status": "Trạng thái",
|
||||||
|
"targetUrl": "URL mục tiêu",
|
||||||
|
"title": "Tiêu đề",
|
||||||
|
"type": "Loại",
|
||||||
|
"updateSuccess": "Cập nhật thành công",
|
||||||
|
"validityPeriod": "Thời gian hiệu lực"
|
||||||
|
}
|
||||||
@ -1,4 +1,14 @@
|
|||||||
{
|
{
|
||||||
|
"blockVirtualMachine": "Chặn Máy Ảo",
|
||||||
|
"blockVirtualMachineDescription": "Khi được kích hoạt, các thiết bị sẽ không thể chạy trên máy ảo hoặc trình giả lập",
|
||||||
|
"communicationKey": "Khóa Giao Tiếp",
|
||||||
|
"communicationKeyDescription": "Khóa giao tiếp được sử dụng để bảo mật giao tiếp giữa các thiết bị và máy chủ",
|
||||||
"enable": "Kích hoạt",
|
"enable": "Kích hoạt",
|
||||||
"enableDescription": "Sau khi kích hoạt, nhiều định danh thiết bị như IMEI/IDFA/IDFV/AndroidID/Địa chỉ Mac sẽ được hỗ trợ cho việc đăng nhập và đăng ký"
|
"enableDescription": "Sau khi kích hoạt, nhiều định danh thiết bị như IMEI/IDFA/IDFV/AndroidID/Địa chỉ Mac sẽ được hỗ trợ cho việc đăng nhập và đăng ký",
|
||||||
|
"enableSecurity": "Kích Hoạt Mã Hóa Giao Tiếp",
|
||||||
|
"enableSecurityDescription": "Khi được kích hoạt, giao tiếp giữa các thiết bị và máy chủ sẽ được mã hóa",
|
||||||
|
"saveFailed": "Lưu không thành công",
|
||||||
|
"saveSuccess": "Lưu thành công",
|
||||||
|
"showAds": "Hiển Thị Quảng Cáo",
|
||||||
|
"showAdsDescription": "Khi được kích hoạt, quảng cáo sẽ được hiển thị trên các thiết bị"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"ADS Config": "Cấu hình ADS",
|
||||||
"Announcement Management": "Quản lý Thông báo",
|
"Announcement Management": "Quản lý Thông báo",
|
||||||
"Apple": "ID Apple",
|
"Apple": "ID Apple",
|
||||||
"Auth Control": "Kiểm Soát Xác Thực",
|
"Auth Control": "Kiểm Soát Xác Thực",
|
||||||
|
|||||||
40
apps/admin/locales/zh-CN/ads.json
Normal file
40
apps/admin/locales/zh-CN/ads.json
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"cancel": "取消",
|
||||||
|
"confirm": "确认",
|
||||||
|
"confirmDelete": "确认删除",
|
||||||
|
"create": "创建广告",
|
||||||
|
"createAds": "创建广告",
|
||||||
|
"createSuccess": "创建成功",
|
||||||
|
"delete": "删除",
|
||||||
|
"deleteSuccess": "删除成功",
|
||||||
|
"deleteWarning": "确定要删除这条广告吗?",
|
||||||
|
"disabled": "已禁用",
|
||||||
|
"edit": "编辑",
|
||||||
|
"editAds": "编辑广告",
|
||||||
|
"enabled": "已启用",
|
||||||
|
"form": {
|
||||||
|
"cancel": "取消",
|
||||||
|
"confirm": "确认",
|
||||||
|
"content": "内容",
|
||||||
|
"description": "描述",
|
||||||
|
"endTime": "结束时间",
|
||||||
|
"enterContent": "请输入广告内容",
|
||||||
|
"enterDescription": "请输入广告描述",
|
||||||
|
"enterEndTime": "请选择结束时间",
|
||||||
|
"enterStartTime": "请选择开始时间",
|
||||||
|
"enterTargetUrl": "请输入目标链接",
|
||||||
|
"enterTitle": "请输入广告标题",
|
||||||
|
"startTime": "开始时间",
|
||||||
|
"targetUrl": "目标链接",
|
||||||
|
"title": "标题",
|
||||||
|
"type": "广告类型",
|
||||||
|
"typeImage": "图片",
|
||||||
|
"typeVideo": "视频"
|
||||||
|
},
|
||||||
|
"status": "状态",
|
||||||
|
"targetUrl": "目标链接",
|
||||||
|
"title": "标题",
|
||||||
|
"type": "类型",
|
||||||
|
"updateSuccess": "更新成功",
|
||||||
|
"validityPeriod": "有效期"
|
||||||
|
}
|
||||||
@ -1,4 +1,14 @@
|
|||||||
{
|
{
|
||||||
|
"blockVirtualMachine": "阻止虚拟机",
|
||||||
|
"blockVirtualMachineDescription": "启用后,将阻止设备在虚拟机或模拟器上运行",
|
||||||
|
"communicationKey": "通信密钥",
|
||||||
|
"communicationKeyDescription": "通信密钥用于设备与服务器之间的安全通信",
|
||||||
"enable": "启用",
|
"enable": "启用",
|
||||||
"enableDescription": "启用后,支持使用多个设备标识符,如 IMEI/IDFA/IDFV/AndroidID/Mac 地址进行登录和注册"
|
"enableDescription": "启用后,支持使用多个设备标识符,如 IMEI/IDFA/IDFV/AndroidID/Mac 地址进行登录和注册",
|
||||||
|
"enableSecurity": "启用通信加密",
|
||||||
|
"enableSecurityDescription": "启用后,设备与服务器之间的通信将被加密",
|
||||||
|
"saveFailed": "保存失败",
|
||||||
|
"saveSuccess": "保存成功",
|
||||||
|
"showAds": "显示广告",
|
||||||
|
"showAdsDescription": "启用后,设备上将显示广告"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"ADS Config": "ADS配置",
|
||||||
"Announcement Management": "公告管理",
|
"Announcement Management": "公告管理",
|
||||||
"Apple": "Apple ID",
|
"Apple": "Apple ID",
|
||||||
"Auth Control": "认证控制",
|
"Auth Control": "认证控制",
|
||||||
|
|||||||
40
apps/admin/locales/zh-HK/ads.json
Normal file
40
apps/admin/locales/zh-HK/ads.json
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"cancel": "取消",
|
||||||
|
"confirm": "確認",
|
||||||
|
"confirmDelete": "確認刪除",
|
||||||
|
"create": "創建廣告",
|
||||||
|
"createAds": "創建廣告",
|
||||||
|
"createSuccess": "成功創建",
|
||||||
|
"delete": "刪除",
|
||||||
|
"deleteSuccess": "成功刪除",
|
||||||
|
"deleteWarning": "你確定要刪除這個廣告嗎?",
|
||||||
|
"disabled": "已禁用",
|
||||||
|
"edit": "編輯",
|
||||||
|
"editAds": "編輯廣告",
|
||||||
|
"enabled": "已啟用",
|
||||||
|
"form": {
|
||||||
|
"cancel": "取消",
|
||||||
|
"confirm": "確認",
|
||||||
|
"content": "內容",
|
||||||
|
"description": "描述",
|
||||||
|
"endTime": "結束時間",
|
||||||
|
"enterContent": "請輸入廣告內容",
|
||||||
|
"enterDescription": "請輸入廣告描述",
|
||||||
|
"enterEndTime": "請選擇結束時間",
|
||||||
|
"enterStartTime": "請選擇開始時間",
|
||||||
|
"enterTargetUrl": "請輸入目標網址",
|
||||||
|
"enterTitle": "請輸入廣告標題",
|
||||||
|
"startTime": "開始時間",
|
||||||
|
"targetUrl": "目標網址",
|
||||||
|
"title": "標題",
|
||||||
|
"type": "廣告類型",
|
||||||
|
"typeImage": "圖片",
|
||||||
|
"typeVideo": "視頻"
|
||||||
|
},
|
||||||
|
"status": "狀態",
|
||||||
|
"targetUrl": "目標網址",
|
||||||
|
"title": "標題",
|
||||||
|
"type": "類型",
|
||||||
|
"updateSuccess": "成功更新",
|
||||||
|
"validityPeriod": "有效期"
|
||||||
|
}
|
||||||
@ -1,4 +1,14 @@
|
|||||||
{
|
{
|
||||||
|
"blockVirtualMachine": "阻止虛擬機",
|
||||||
|
"blockVirtualMachineDescription": "啟用後,設備將無法在虛擬機或模擬器上運行",
|
||||||
|
"communicationKey": "通訊密鑰",
|
||||||
|
"communicationKeyDescription": "通訊密鑰用於設備與伺服器之間的安全通訊",
|
||||||
"enable": "啟用",
|
"enable": "啟用",
|
||||||
"enableDescription": "啟用後,支持多個設備識別碼,例如 IMEI/IDFA/IDFV/AndroidID/Mac 地址,用於登錄和註冊"
|
"enableDescription": "啟用後,支持多個設備識別碼,例如 IMEI/IDFA/IDFV/AndroidID/Mac 地址,用於登錄和註冊",
|
||||||
|
"enableSecurity": "啟用通訊加密",
|
||||||
|
"enableSecurityDescription": "啟用後,設備與伺服器之間的通訊將被加密",
|
||||||
|
"saveFailed": "保存失敗",
|
||||||
|
"saveSuccess": "保存成功",
|
||||||
|
"showAds": "顯示廣告",
|
||||||
|
"showAdsDescription": "啟用後,設備上將顯示廣告"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"ADS Config": "ADS 配置",
|
||||||
"Announcement Management": "公告管理",
|
"Announcement Management": "公告管理",
|
||||||
"Apple": "Apple ID",
|
"Apple": "Apple ID",
|
||||||
"Auth Control": "身份驗證控制",
|
"Auth Control": "身份驗證控制",
|
||||||
|
|||||||
69
apps/admin/services/admin/ads.ts
Normal file
69
apps/admin/services/admin/ads.ts
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
// @ts-ignore
|
||||||
|
/* eslint-disable */
|
||||||
|
import request from '@/utils/request';
|
||||||
|
|
||||||
|
/** Update Ads PUT /v1/admin/ads/ */
|
||||||
|
export async function updateAds(body: API.UpdateAdsRequest, options?: { [key: string]: any }) {
|
||||||
|
return request<API.Response & { data?: any }>('/v1/admin/ads/', {
|
||||||
|
method: 'PUT',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
},
|
||||||
|
data: body,
|
||||||
|
...(options || {}),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Create Ads POST /v1/admin/ads/ */
|
||||||
|
export async function createAds(body: API.CreateAdsRequest, options?: { [key: string]: any }) {
|
||||||
|
return request<API.Response & { data?: any }>('/v1/admin/ads/', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
},
|
||||||
|
data: body,
|
||||||
|
...(options || {}),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Delete Ads DELETE /v1/admin/ads/ */
|
||||||
|
export async function deleteAds(body: API.DeleteAdsRequest, options?: { [key: string]: any }) {
|
||||||
|
return request<API.Response & { data?: any }>('/v1/admin/ads/', {
|
||||||
|
method: 'DELETE',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
},
|
||||||
|
data: body,
|
||||||
|
...(options || {}),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get Ads Detail GET /v1/admin/ads/detail */
|
||||||
|
export async function getAdsDetail(
|
||||||
|
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
|
||||||
|
params: API.GetAdsDetailParams,
|
||||||
|
options?: { [key: string]: any },
|
||||||
|
) {
|
||||||
|
return request<API.Response & { data?: API.Ads }>('/v1/admin/ads/detail', {
|
||||||
|
method: 'GET',
|
||||||
|
params: {
|
||||||
|
...params,
|
||||||
|
},
|
||||||
|
...(options || {}),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get Ads List GET /v1/admin/ads/list */
|
||||||
|
export async function getAdsList(
|
||||||
|
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
|
||||||
|
params: API.GetAdsListParams,
|
||||||
|
options?: { [key: string]: any },
|
||||||
|
) {
|
||||||
|
return request<API.Response & { data?: API.GetAdsListResponse }>('/v1/admin/ads/list', {
|
||||||
|
method: 'GET',
|
||||||
|
params: {
|
||||||
|
...params,
|
||||||
|
},
|
||||||
|
...(options || {}),
|
||||||
|
});
|
||||||
|
}
|
||||||
@ -1,7 +1,8 @@
|
|||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
|
|
||||||
// API 更新时间:
|
// API 更新时间:
|
||||||
// API 唯一标识:
|
// API 唯一标识:
|
||||||
|
import * as ads from './ads';
|
||||||
import * as announcement from './announcement';
|
import * as announcement from './announcement';
|
||||||
import * as authMethod from './authMethod';
|
import * as authMethod from './authMethod';
|
||||||
import * as console from './console';
|
import * as console from './console';
|
||||||
@ -17,6 +18,7 @@ import * as ticket from './ticket';
|
|||||||
import * as tool from './tool';
|
import * as tool from './tool';
|
||||||
import * as user from './user';
|
import * as user from './user';
|
||||||
export default {
|
export default {
|
||||||
|
ads,
|
||||||
announcement,
|
announcement,
|
||||||
authMethod,
|
authMethod,
|
||||||
console,
|
console,
|
||||||
|
|||||||
182
apps/admin/services/admin/typings.d.ts
vendored
182
apps/admin/services/admin/typings.d.ts
vendored
@ -1,4 +1,18 @@
|
|||||||
declare namespace API {
|
declare namespace API {
|
||||||
|
type Ads = {
|
||||||
|
id: number;
|
||||||
|
title: string;
|
||||||
|
type: string;
|
||||||
|
content: string;
|
||||||
|
description: string;
|
||||||
|
target_url: string;
|
||||||
|
start_time: number;
|
||||||
|
end_time: number;
|
||||||
|
status: number;
|
||||||
|
created_at: number;
|
||||||
|
updated_at: number;
|
||||||
|
};
|
||||||
|
|
||||||
type AlipayF2FConfig = {
|
type AlipayF2FConfig = {
|
||||||
app_id: string;
|
app_id: string;
|
||||||
private_key: string;
|
private_key: string;
|
||||||
@ -106,6 +120,21 @@ declare namespace API {
|
|||||||
ids: number[];
|
ids: number[];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type CheckoutOrderRequest = {
|
||||||
|
orderNo: string;
|
||||||
|
returnUrl?: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
type CheckoutOrderResponse = {
|
||||||
|
type: string;
|
||||||
|
checkout_url?: string;
|
||||||
|
stripe?: StripePayment;
|
||||||
|
};
|
||||||
|
|
||||||
|
type CloseOrderRequest = {
|
||||||
|
orderNo: string;
|
||||||
|
};
|
||||||
|
|
||||||
type Coupon = {
|
type Coupon = {
|
||||||
id: number;
|
id: number;
|
||||||
name: string;
|
name: string;
|
||||||
@ -123,6 +152,17 @@ declare namespace API {
|
|||||||
updated_at: number;
|
updated_at: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type CreateAdsRequest = {
|
||||||
|
title: string;
|
||||||
|
type: string;
|
||||||
|
content: string;
|
||||||
|
description: string;
|
||||||
|
target_url: string;
|
||||||
|
start_time: number;
|
||||||
|
end_time: number;
|
||||||
|
status: number;
|
||||||
|
};
|
||||||
|
|
||||||
type CreateAnnouncementRequest = {
|
type CreateAnnouncementRequest = {
|
||||||
title: string;
|
title: string;
|
||||||
content: string;
|
content: string;
|
||||||
@ -280,6 +320,10 @@ declare namespace API {
|
|||||||
currency_symbol: string;
|
currency_symbol: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type DeleteAdsRequest = {
|
||||||
|
id: number;
|
||||||
|
};
|
||||||
|
|
||||||
type DeleteAnnouncementRequest = {
|
type DeleteAnnouncementRequest = {
|
||||||
id: number;
|
id: number;
|
||||||
};
|
};
|
||||||
@ -369,6 +413,33 @@ declare namespace API {
|
|||||||
created_at: number;
|
created_at: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type GetAdsDetailParams = {
|
||||||
|
id: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
type GetAdsDetailRequest = {
|
||||||
|
id: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
type GetAdsListParams = {
|
||||||
|
page: number;
|
||||||
|
size: number;
|
||||||
|
status?: number;
|
||||||
|
search?: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
type GetAdsListRequest = {
|
||||||
|
page: number;
|
||||||
|
size: number;
|
||||||
|
status?: number;
|
||||||
|
search?: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
type GetAdsListResponse = {
|
||||||
|
total: number;
|
||||||
|
list: Ads[];
|
||||||
|
};
|
||||||
|
|
||||||
type GetAllPaymentConfigResponse = {
|
type GetAllPaymentConfigResponse = {
|
||||||
list: PaymentConfig[];
|
list: PaymentConfig[];
|
||||||
};
|
};
|
||||||
@ -416,6 +487,10 @@ declare namespace API {
|
|||||||
list: AuthMethodConfig[];
|
list: AuthMethodConfig[];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type GetAvailablePaymentMethodsResponse = {
|
||||||
|
list: PaymentConfig[];
|
||||||
|
};
|
||||||
|
|
||||||
type GetCouponListParams = {
|
type GetCouponListParams = {
|
||||||
page: number;
|
page: number;
|
||||||
size: number;
|
size: number;
|
||||||
@ -879,6 +954,20 @@ declare namespace API {
|
|||||||
list: PlatformInfo[];
|
list: PlatformInfo[];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type PreOrderResponse = {
|
||||||
|
price: number;
|
||||||
|
amount: number;
|
||||||
|
discount: number;
|
||||||
|
gift_amount: number;
|
||||||
|
coupon: string;
|
||||||
|
coupon_discount: number;
|
||||||
|
fee_amount: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
type PreRenewalOrderResponse = {
|
||||||
|
orderNo: string;
|
||||||
|
};
|
||||||
|
|
||||||
type PrivacyPolicyConfig = {
|
type PrivacyPolicyConfig = {
|
||||||
privacy_policy: string;
|
privacy_policy: string;
|
||||||
};
|
};
|
||||||
@ -894,6 +983,61 @@ declare namespace API {
|
|||||||
verify_code_interval: number;
|
verify_code_interval: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type PurchaseOrderRequest = {
|
||||||
|
subscribe_id: number;
|
||||||
|
quantity: number;
|
||||||
|
payment: string;
|
||||||
|
coupon?: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
type PurchaseOrderResponse = {
|
||||||
|
order_no: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
type QueryAnnouncementRequest = {
|
||||||
|
page: number;
|
||||||
|
size: number;
|
||||||
|
pinned: boolean;
|
||||||
|
popup: boolean;
|
||||||
|
};
|
||||||
|
|
||||||
|
type QueryAnnouncementResponse = {
|
||||||
|
total: number;
|
||||||
|
announcements: Announcement[];
|
||||||
|
};
|
||||||
|
|
||||||
|
type QueryDocumentDetailRequest = {
|
||||||
|
id: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
type QueryDocumentListResponse = {
|
||||||
|
total: number;
|
||||||
|
list: Document[];
|
||||||
|
};
|
||||||
|
|
||||||
|
type QueryOrderDetailRequest = {
|
||||||
|
order_no: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
type QueryOrderListRequest = {
|
||||||
|
page: number;
|
||||||
|
size: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
type QueryOrderListResponse = {
|
||||||
|
total: number;
|
||||||
|
list: OrderDetail[];
|
||||||
|
};
|
||||||
|
|
||||||
|
type RechargeOrderRequest = {
|
||||||
|
amount: number;
|
||||||
|
payment: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
type RechargeOrderResponse = {
|
||||||
|
order_no: string;
|
||||||
|
};
|
||||||
|
|
||||||
type RegisterConfig = {
|
type RegisterConfig = {
|
||||||
stop_register: boolean;
|
stop_register: boolean;
|
||||||
enable_trial: boolean;
|
enable_trial: boolean;
|
||||||
@ -905,6 +1049,26 @@ declare namespace API {
|
|||||||
ip_register_limit_duration: number;
|
ip_register_limit_duration: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type RenewalOrderRequest = {
|
||||||
|
user_subscribe_id: number;
|
||||||
|
quantity: number;
|
||||||
|
payment: string;
|
||||||
|
coupon?: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
type RenewalOrderResponse = {
|
||||||
|
order_no: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
type ResetTrafficOrderRequest = {
|
||||||
|
user_subscribe_id: number;
|
||||||
|
payment: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
type ResetTrafficOrderResponse = {
|
||||||
|
order_no: string;
|
||||||
|
};
|
||||||
|
|
||||||
type Response = {
|
type Response = {
|
||||||
/** 状态码 */
|
/** 状态码 */
|
||||||
code?: number;
|
code?: number;
|
||||||
@ -1030,6 +1194,12 @@ declare namespace API {
|
|||||||
payment: string;
|
payment: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type StripePayment = {
|
||||||
|
method: string;
|
||||||
|
client_secret: string;
|
||||||
|
publishable_key: string;
|
||||||
|
};
|
||||||
|
|
||||||
type Subscribe = {
|
type Subscribe = {
|
||||||
id: number;
|
id: number;
|
||||||
name: string;
|
name: string;
|
||||||
@ -1183,6 +1353,18 @@ declare namespace API {
|
|||||||
security_config: SecurityConfig;
|
security_config: SecurityConfig;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type UpdateAdsRequest = {
|
||||||
|
id: number;
|
||||||
|
title: string;
|
||||||
|
type: string;
|
||||||
|
content: string;
|
||||||
|
description: string;
|
||||||
|
target_url: string;
|
||||||
|
start_time: number;
|
||||||
|
end_time: number;
|
||||||
|
status: number;
|
||||||
|
};
|
||||||
|
|
||||||
type UpdateAlipayF2fRequest = {
|
type UpdateAlipayF2fRequest = {
|
||||||
id: number;
|
id: number;
|
||||||
name: string;
|
name: string;
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
|
|
||||||
// API 更新时间:
|
// API 更新时间:
|
||||||
// API 唯一标识:
|
// API 唯一标识:
|
||||||
import * as auth from './auth';
|
import * as auth from './auth';
|
||||||
|
|||||||
@ -32,6 +32,7 @@ export async function appleLoginCallback(
|
|||||||
return request<API.Response & { data?: any }>('/v1/auth/oauth/callback/apple', {
|
return request<API.Response & { data?: any }>('/v1/auth/oauth/callback/apple', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
data: formData,
|
data: formData,
|
||||||
|
requestType: 'form',
|
||||||
...(options || {}),
|
...(options || {}),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
128
apps/admin/services/common/typings.d.ts
vendored
128
apps/admin/services/common/typings.d.ts
vendored
@ -1,4 +1,18 @@
|
|||||||
declare namespace API {
|
declare namespace API {
|
||||||
|
type Ads = {
|
||||||
|
id: number;
|
||||||
|
title: string;
|
||||||
|
type: string;
|
||||||
|
content: string;
|
||||||
|
description: string;
|
||||||
|
target_url: string;
|
||||||
|
start_time: number;
|
||||||
|
end_time: number;
|
||||||
|
status: number;
|
||||||
|
created_at: number;
|
||||||
|
updated_at: number;
|
||||||
|
};
|
||||||
|
|
||||||
type Announcement = {
|
type Announcement = {
|
||||||
id: number;
|
id: number;
|
||||||
title: string;
|
title: string;
|
||||||
@ -76,6 +90,17 @@ declare namespace API {
|
|||||||
enabled: boolean;
|
enabled: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type CheckoutOrderRequest = {
|
||||||
|
orderNo: string;
|
||||||
|
returnUrl?: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
type CheckoutOrderResponse = {
|
||||||
|
type: string;
|
||||||
|
checkout_url?: string;
|
||||||
|
stripe?: StripePayment;
|
||||||
|
};
|
||||||
|
|
||||||
type CheckUserParams = {
|
type CheckUserParams = {
|
||||||
email: string;
|
email: string;
|
||||||
};
|
};
|
||||||
@ -92,6 +117,10 @@ declare namespace API {
|
|||||||
telephone: string;
|
telephone: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type CloseOrderRequest = {
|
||||||
|
orderNo: string;
|
||||||
|
};
|
||||||
|
|
||||||
type Coupon = {
|
type Coupon = {
|
||||||
id: number;
|
id: number;
|
||||||
name: string;
|
name: string;
|
||||||
@ -145,6 +174,10 @@ declare namespace API {
|
|||||||
applications: ApplicationResponseInfo[];
|
applications: ApplicationResponseInfo[];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type GetAvailablePaymentMethodsResponse = {
|
||||||
|
list: PaymentConfig[];
|
||||||
|
};
|
||||||
|
|
||||||
type GetGlobalConfigResponse = {
|
type GetGlobalConfigResponse = {
|
||||||
site: SiteConfig;
|
site: SiteConfig;
|
||||||
verify: VeifyConfig;
|
verify: VeifyConfig;
|
||||||
@ -309,6 +342,20 @@ declare namespace API {
|
|||||||
enable: boolean;
|
enable: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type PreOrderResponse = {
|
||||||
|
price: number;
|
||||||
|
amount: number;
|
||||||
|
discount: number;
|
||||||
|
gift_amount: number;
|
||||||
|
coupon: string;
|
||||||
|
coupon_discount: number;
|
||||||
|
fee_amount: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
type PreRenewalOrderResponse = {
|
||||||
|
orderNo: string;
|
||||||
|
};
|
||||||
|
|
||||||
type PrivacyPolicyConfig = {
|
type PrivacyPolicyConfig = {
|
||||||
privacy_policy: string;
|
privacy_policy: string;
|
||||||
};
|
};
|
||||||
@ -324,6 +371,61 @@ declare namespace API {
|
|||||||
verify_code_interval: number;
|
verify_code_interval: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type PurchaseOrderRequest = {
|
||||||
|
subscribe_id: number;
|
||||||
|
quantity: number;
|
||||||
|
payment: string;
|
||||||
|
coupon?: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
type PurchaseOrderResponse = {
|
||||||
|
order_no: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
type QueryAnnouncementRequest = {
|
||||||
|
page: number;
|
||||||
|
size: number;
|
||||||
|
pinned: boolean;
|
||||||
|
popup: boolean;
|
||||||
|
};
|
||||||
|
|
||||||
|
type QueryAnnouncementResponse = {
|
||||||
|
total: number;
|
||||||
|
announcements: Announcement[];
|
||||||
|
};
|
||||||
|
|
||||||
|
type QueryDocumentDetailRequest = {
|
||||||
|
id: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
type QueryDocumentListResponse = {
|
||||||
|
total: number;
|
||||||
|
list: Document[];
|
||||||
|
};
|
||||||
|
|
||||||
|
type QueryOrderDetailRequest = {
|
||||||
|
order_no: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
type QueryOrderListRequest = {
|
||||||
|
page: number;
|
||||||
|
size: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
type QueryOrderListResponse = {
|
||||||
|
total: number;
|
||||||
|
list: OrderDetail[];
|
||||||
|
};
|
||||||
|
|
||||||
|
type RechargeOrderRequest = {
|
||||||
|
amount: number;
|
||||||
|
payment: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
type RechargeOrderResponse = {
|
||||||
|
order_no: string;
|
||||||
|
};
|
||||||
|
|
||||||
type RegisterConfig = {
|
type RegisterConfig = {
|
||||||
stop_register: boolean;
|
stop_register: boolean;
|
||||||
enable_trial: boolean;
|
enable_trial: boolean;
|
||||||
@ -335,6 +437,17 @@ declare namespace API {
|
|||||||
ip_register_limit_duration: number;
|
ip_register_limit_duration: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type RenewalOrderRequest = {
|
||||||
|
user_subscribe_id: number;
|
||||||
|
quantity: number;
|
||||||
|
payment: string;
|
||||||
|
coupon?: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
type RenewalOrderResponse = {
|
||||||
|
order_no: string;
|
||||||
|
};
|
||||||
|
|
||||||
type ResetPasswordRequest = {
|
type ResetPasswordRequest = {
|
||||||
email: string;
|
email: string;
|
||||||
password: string;
|
password: string;
|
||||||
@ -342,6 +455,15 @@ declare namespace API {
|
|||||||
cf_token?: string;
|
cf_token?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type ResetTrafficOrderRequest = {
|
||||||
|
user_subscribe_id: number;
|
||||||
|
payment: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
type ResetTrafficOrderResponse = {
|
||||||
|
order_no: string;
|
||||||
|
};
|
||||||
|
|
||||||
type Response = {
|
type Response = {
|
||||||
/** 状态码 */
|
/** 状态码 */
|
||||||
code?: number;
|
code?: number;
|
||||||
@ -444,6 +566,12 @@ declare namespace API {
|
|||||||
sort: number;
|
sort: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type StripePayment = {
|
||||||
|
method: string;
|
||||||
|
client_secret: string;
|
||||||
|
publishable_key: string;
|
||||||
|
};
|
||||||
|
|
||||||
type Subscribe = {
|
type Subscribe = {
|
||||||
id: number;
|
id: number;
|
||||||
name: string;
|
name: string;
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
|
|
||||||
// API 更新时间:
|
// API 更新时间:
|
||||||
// API 唯一标识:
|
// API 唯一标识:
|
||||||
import * as auth from './auth';
|
import * as auth from './auth';
|
||||||
|
|||||||
@ -32,6 +32,7 @@ export async function appleLoginCallback(
|
|||||||
return request<API.Response & { data?: any }>('/v1/auth/oauth/callback/apple', {
|
return request<API.Response & { data?: any }>('/v1/auth/oauth/callback/apple', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
data: formData,
|
data: formData,
|
||||||
|
requestType: 'form',
|
||||||
...(options || {}),
|
...(options || {}),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
128
apps/user/services/common/typings.d.ts
vendored
128
apps/user/services/common/typings.d.ts
vendored
@ -1,4 +1,18 @@
|
|||||||
declare namespace API {
|
declare namespace API {
|
||||||
|
type Ads = {
|
||||||
|
id: number;
|
||||||
|
title: string;
|
||||||
|
type: string;
|
||||||
|
content: string;
|
||||||
|
description: string;
|
||||||
|
target_url: string;
|
||||||
|
start_time: number;
|
||||||
|
end_time: number;
|
||||||
|
status: number;
|
||||||
|
created_at: number;
|
||||||
|
updated_at: number;
|
||||||
|
};
|
||||||
|
|
||||||
type Announcement = {
|
type Announcement = {
|
||||||
id: number;
|
id: number;
|
||||||
title: string;
|
title: string;
|
||||||
@ -76,6 +90,17 @@ declare namespace API {
|
|||||||
enabled: boolean;
|
enabled: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type CheckoutOrderRequest = {
|
||||||
|
orderNo: string;
|
||||||
|
returnUrl?: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
type CheckoutOrderResponse = {
|
||||||
|
type: string;
|
||||||
|
checkout_url?: string;
|
||||||
|
stripe?: StripePayment;
|
||||||
|
};
|
||||||
|
|
||||||
type CheckUserParams = {
|
type CheckUserParams = {
|
||||||
email: string;
|
email: string;
|
||||||
};
|
};
|
||||||
@ -92,6 +117,10 @@ declare namespace API {
|
|||||||
telephone: string;
|
telephone: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type CloseOrderRequest = {
|
||||||
|
orderNo: string;
|
||||||
|
};
|
||||||
|
|
||||||
type Coupon = {
|
type Coupon = {
|
||||||
id: number;
|
id: number;
|
||||||
name: string;
|
name: string;
|
||||||
@ -145,6 +174,10 @@ declare namespace API {
|
|||||||
applications: ApplicationResponseInfo[];
|
applications: ApplicationResponseInfo[];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type GetAvailablePaymentMethodsResponse = {
|
||||||
|
list: PaymentConfig[];
|
||||||
|
};
|
||||||
|
|
||||||
type GetGlobalConfigResponse = {
|
type GetGlobalConfigResponse = {
|
||||||
site: SiteConfig;
|
site: SiteConfig;
|
||||||
verify: VeifyConfig;
|
verify: VeifyConfig;
|
||||||
@ -309,6 +342,20 @@ declare namespace API {
|
|||||||
enable: boolean;
|
enable: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type PreOrderResponse = {
|
||||||
|
price: number;
|
||||||
|
amount: number;
|
||||||
|
discount: number;
|
||||||
|
gift_amount: number;
|
||||||
|
coupon: string;
|
||||||
|
coupon_discount: number;
|
||||||
|
fee_amount: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
type PreRenewalOrderResponse = {
|
||||||
|
orderNo: string;
|
||||||
|
};
|
||||||
|
|
||||||
type PrivacyPolicyConfig = {
|
type PrivacyPolicyConfig = {
|
||||||
privacy_policy: string;
|
privacy_policy: string;
|
||||||
};
|
};
|
||||||
@ -324,6 +371,61 @@ declare namespace API {
|
|||||||
verify_code_interval: number;
|
verify_code_interval: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type PurchaseOrderRequest = {
|
||||||
|
subscribe_id: number;
|
||||||
|
quantity: number;
|
||||||
|
payment: string;
|
||||||
|
coupon?: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
type PurchaseOrderResponse = {
|
||||||
|
order_no: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
type QueryAnnouncementRequest = {
|
||||||
|
page: number;
|
||||||
|
size: number;
|
||||||
|
pinned: boolean;
|
||||||
|
popup: boolean;
|
||||||
|
};
|
||||||
|
|
||||||
|
type QueryAnnouncementResponse = {
|
||||||
|
total: number;
|
||||||
|
announcements: Announcement[];
|
||||||
|
};
|
||||||
|
|
||||||
|
type QueryDocumentDetailRequest = {
|
||||||
|
id: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
type QueryDocumentListResponse = {
|
||||||
|
total: number;
|
||||||
|
list: Document[];
|
||||||
|
};
|
||||||
|
|
||||||
|
type QueryOrderDetailRequest = {
|
||||||
|
order_no: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
type QueryOrderListRequest = {
|
||||||
|
page: number;
|
||||||
|
size: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
type QueryOrderListResponse = {
|
||||||
|
total: number;
|
||||||
|
list: OrderDetail[];
|
||||||
|
};
|
||||||
|
|
||||||
|
type RechargeOrderRequest = {
|
||||||
|
amount: number;
|
||||||
|
payment: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
type RechargeOrderResponse = {
|
||||||
|
order_no: string;
|
||||||
|
};
|
||||||
|
|
||||||
type RegisterConfig = {
|
type RegisterConfig = {
|
||||||
stop_register: boolean;
|
stop_register: boolean;
|
||||||
enable_trial: boolean;
|
enable_trial: boolean;
|
||||||
@ -335,6 +437,17 @@ declare namespace API {
|
|||||||
ip_register_limit_duration: number;
|
ip_register_limit_duration: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type RenewalOrderRequest = {
|
||||||
|
user_subscribe_id: number;
|
||||||
|
quantity: number;
|
||||||
|
payment: string;
|
||||||
|
coupon?: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
type RenewalOrderResponse = {
|
||||||
|
order_no: string;
|
||||||
|
};
|
||||||
|
|
||||||
type ResetPasswordRequest = {
|
type ResetPasswordRequest = {
|
||||||
email: string;
|
email: string;
|
||||||
password: string;
|
password: string;
|
||||||
@ -342,6 +455,15 @@ declare namespace API {
|
|||||||
cf_token?: string;
|
cf_token?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type ResetTrafficOrderRequest = {
|
||||||
|
user_subscribe_id: number;
|
||||||
|
payment: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
type ResetTrafficOrderResponse = {
|
||||||
|
order_no: string;
|
||||||
|
};
|
||||||
|
|
||||||
type Response = {
|
type Response = {
|
||||||
/** 状态码 */
|
/** 状态码 */
|
||||||
code?: number;
|
code?: number;
|
||||||
@ -444,6 +566,12 @@ declare namespace API {
|
|||||||
sort: number;
|
sort: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type StripePayment = {
|
||||||
|
method: string;
|
||||||
|
client_secret: string;
|
||||||
|
publishable_key: string;
|
||||||
|
};
|
||||||
|
|
||||||
type Subscribe = {
|
type Subscribe = {
|
||||||
id: number;
|
id: number;
|
||||||
name: string;
|
name: string;
|
||||||
|
|||||||
14
apps/user/services/user/typings.d.ts
vendored
14
apps/user/services/user/typings.d.ts
vendored
@ -1,4 +1,18 @@
|
|||||||
declare namespace API {
|
declare namespace API {
|
||||||
|
type Ads = {
|
||||||
|
id: number;
|
||||||
|
title: string;
|
||||||
|
type: string;
|
||||||
|
content: string;
|
||||||
|
description: string;
|
||||||
|
target_url: string;
|
||||||
|
start_time: number;
|
||||||
|
end_time: number;
|
||||||
|
status: number;
|
||||||
|
created_at: number;
|
||||||
|
updated_at: number;
|
||||||
|
};
|
||||||
|
|
||||||
type Announcement = {
|
type Announcement = {
|
||||||
id: number;
|
id: number;
|
||||||
title: string;
|
title: string;
|
||||||
|
|||||||
@ -97,7 +97,7 @@ export function EnhancedInput({
|
|||||||
<Input
|
<Input
|
||||||
{...props}
|
{...props}
|
||||||
value={value}
|
value={value}
|
||||||
className='rounded-none border-none'
|
className='block rounded-none border-none'
|
||||||
onChange={handleChange}
|
onChange={handleChange}
|
||||||
onBlur={handleBlur}
|
onBlur={handleBlur}
|
||||||
/>
|
/>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user