From 0130e02ffdc05361eb9291ccda0e4b7b69fc442b Mon Sep 17 00:00:00 2001 From: "web@ppanel" Date: Thu, 27 Feb 2025 13:40:57 +0700 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20chore(merge):=20Add=20advertisin?= =?UTF-8?q?g=20module=20and=20device=20settings?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 17 +- apps/admin/app/dashboard/ads/ads-form.tsx | 299 ++++++++++++++++++ apps/admin/app/dashboard/ads/page.tsx | 162 ++++++++++ .../dashboard/auth-control/device/page.tsx | 86 +++++ apps/admin/config/navs.ts | 7 +- apps/admin/locales/cs-CZ/ads.json | 40 +++ apps/admin/locales/cs-CZ/device.json | 12 +- apps/admin/locales/cs-CZ/menu.json | 1 + apps/admin/locales/de-DE/ads.json | 40 +++ apps/admin/locales/de-DE/device.json | 12 +- apps/admin/locales/de-DE/menu.json | 1 + apps/admin/locales/en-US/ads.json | 40 +++ apps/admin/locales/en-US/device.json | 12 +- apps/admin/locales/en-US/menu.json | 1 + apps/admin/locales/es-ES/ads.json | 40 +++ apps/admin/locales/es-ES/device.json | 12 +- apps/admin/locales/es-ES/menu.json | 1 + apps/admin/locales/es-MX/ads.json | 40 +++ apps/admin/locales/es-MX/device.json | 12 +- apps/admin/locales/es-MX/menu.json | 1 + apps/admin/locales/fa-IR/ads.json | 40 +++ apps/admin/locales/fa-IR/device.json | 12 +- apps/admin/locales/fa-IR/menu.json | 1 + apps/admin/locales/fi-FI/ads.json | 40 +++ apps/admin/locales/fi-FI/device.json | 12 +- apps/admin/locales/fi-FI/menu.json | 1 + apps/admin/locales/fr-FR/ads.json | 40 +++ apps/admin/locales/fr-FR/device.json | 12 +- apps/admin/locales/fr-FR/menu.json | 1 + apps/admin/locales/hi-IN/ads.json | 40 +++ apps/admin/locales/hi-IN/device.json | 12 +- apps/admin/locales/hi-IN/menu.json | 1 + apps/admin/locales/hu-HU/ads.json | 40 +++ apps/admin/locales/hu-HU/device.json | 12 +- apps/admin/locales/hu-HU/menu.json | 1 + apps/admin/locales/ja-JP/ads.json | 40 +++ apps/admin/locales/ja-JP/device.json | 12 +- apps/admin/locales/ja-JP/menu.json | 1 + apps/admin/locales/ko-KR/ads.json | 40 +++ apps/admin/locales/ko-KR/device.json | 12 +- apps/admin/locales/ko-KR/menu.json | 1 + apps/admin/locales/no-NO/ads.json | 40 +++ apps/admin/locales/no-NO/device.json | 12 +- apps/admin/locales/no-NO/menu.json | 1 + apps/admin/locales/pl-PL/ads.json | 40 +++ apps/admin/locales/pl-PL/device.json | 12 +- apps/admin/locales/pl-PL/menu.json | 1 + apps/admin/locales/pt-BR/ads.json | 40 +++ apps/admin/locales/pt-BR/device.json | 12 +- apps/admin/locales/pt-BR/menu.json | 1 + apps/admin/locales/request.ts | 1 + apps/admin/locales/ro-RO/ads.json | 40 +++ apps/admin/locales/ro-RO/device.json | 12 +- apps/admin/locales/ro-RO/menu.json | 1 + apps/admin/locales/ru-RU/ads.json | 40 +++ apps/admin/locales/ru-RU/device.json | 12 +- apps/admin/locales/ru-RU/menu.json | 1 + apps/admin/locales/th-TH/ads.json | 40 +++ apps/admin/locales/th-TH/device.json | 12 +- apps/admin/locales/th-TH/menu.json | 1 + apps/admin/locales/tr-TR/ads.json | 40 +++ apps/admin/locales/tr-TR/device.json | 12 +- apps/admin/locales/tr-TR/menu.json | 1 + apps/admin/locales/uk-UA/ads.json | 40 +++ apps/admin/locales/uk-UA/device.json | 12 +- apps/admin/locales/uk-UA/menu.json | 1 + apps/admin/locales/vi-VN/ads.json | 40 +++ apps/admin/locales/vi-VN/device.json | 12 +- apps/admin/locales/vi-VN/menu.json | 1 + apps/admin/locales/zh-CN/ads.json | 40 +++ apps/admin/locales/zh-CN/device.json | 12 +- apps/admin/locales/zh-CN/menu.json | 1 + apps/admin/locales/zh-HK/ads.json | 40 +++ apps/admin/locales/zh-HK/device.json | 12 +- apps/admin/locales/zh-HK/menu.json | 1 + apps/admin/services/admin/ads.ts | 69 ++++ apps/admin/services/admin/index.ts | 4 +- apps/admin/services/admin/typings.d.ts | 182 +++++++++++ apps/admin/services/common/index.ts | 2 +- apps/admin/services/common/oauth.ts | 1 + apps/admin/services/common/typings.d.ts | 128 ++++++++ apps/user/services/common/index.ts | 2 +- apps/user/services/common/oauth.ts | 1 + apps/user/services/common/typings.d.ts | 128 ++++++++ apps/user/services/user/typings.d.ts | 14 + .../src/custom-components/enhanced-input.tsx | 2 +- 86 files changed, 2286 insertions(+), 38 deletions(-) create mode 100644 apps/admin/app/dashboard/ads/ads-form.tsx create mode 100644 apps/admin/app/dashboard/ads/page.tsx create mode 100644 apps/admin/locales/cs-CZ/ads.json create mode 100644 apps/admin/locales/de-DE/ads.json create mode 100644 apps/admin/locales/en-US/ads.json create mode 100644 apps/admin/locales/es-ES/ads.json create mode 100644 apps/admin/locales/es-MX/ads.json create mode 100644 apps/admin/locales/fa-IR/ads.json create mode 100644 apps/admin/locales/fi-FI/ads.json create mode 100644 apps/admin/locales/fr-FR/ads.json create mode 100644 apps/admin/locales/hi-IN/ads.json create mode 100644 apps/admin/locales/hu-HU/ads.json create mode 100644 apps/admin/locales/ja-JP/ads.json create mode 100644 apps/admin/locales/ko-KR/ads.json create mode 100644 apps/admin/locales/no-NO/ads.json create mode 100644 apps/admin/locales/pl-PL/ads.json create mode 100644 apps/admin/locales/pt-BR/ads.json create mode 100644 apps/admin/locales/ro-RO/ads.json create mode 100644 apps/admin/locales/ru-RU/ads.json create mode 100644 apps/admin/locales/th-TH/ads.json create mode 100644 apps/admin/locales/tr-TR/ads.json create mode 100644 apps/admin/locales/uk-UA/ads.json create mode 100644 apps/admin/locales/vi-VN/ads.json create mode 100644 apps/admin/locales/zh-CN/ads.json create mode 100644 apps/admin/locales/zh-HK/ads.json create mode 100644 apps/admin/services/admin/ads.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index ab05e3d..11122fc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,33 +1,30 @@ + # 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) - ### 🐛 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) - ### 🐛 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) - ### ✨ 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 -* **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)) -* **table**: Update privacy policy tab translation key and remove unnecessary requestType from OAuth callback ([14b3af5](https://github.com/perfect-panel/ppanel-web/commit/14b3af5)) +- **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)) +- **table**: Update privacy policy tab translation key and remove unnecessary requestType from OAuth callback ([14b3af5](https://github.com/perfect-panel/ppanel-web/commit/14b3af5)) diff --git a/apps/admin/app/dashboard/ads/ads-form.tsx b/apps/admin/app/dashboard/ads/ads-form.tsx new file mode 100644 index 0000000..2fc5716 --- /dev/null +++ b/apps/admin/app/dashboard/ads/ads-form.tsx @@ -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 { + onSubmit: (data: T) => Promise | boolean; + initialValues?: T; + loading?: boolean; + trigger: string; + title: string; +} + +export default function AdsForm>({ + onSubmit, + initialValues, + loading, + trigger, + title, +}: AdsFormProps) { + 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 ( + ( + + {t('form.content')} + + { + form.setValue('content', value); + }} + /> + + + + )} + /> + ); + }; + + async function handleSubmit(data: { [x: string]: any }) { + const bool = await onSubmit(data as T); + if (bool) setOpen(false); + } + + return ( + + + + + + + {title} + + +
+ + ( + + {t('form.title')} + + { + form.setValue(field.name, value); + }} + /> + + + + )} + /> + + ( + + {t('form.type')} + + { + form.setValue(field.name, value); + }} + className='flex gap-4' + > + + + + + {t('form.typeImage')} + + + + + + {t('form.typeVideo')} + + + + + + )} + /> + + {renderContentField()} + + ( + + {t('form.description')} + + { + form.setValue(field.name, value); + }} + /> + + + + )} + /> + + ( + + {t('form.targetUrl')} + + { + form.setValue(field.name, value); + }} + /> + + + + )} + /> + + ( + + {t('form.startTime')} + + { + 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', ''); + } + }} + /> + + + + )} + /> + + { + return ( + + {t('form.endTime')} + + { + const timestamp = value ? new Date(value).getTime() : 0; + if (!startTime || timestamp < startTime) return; + form.setValue(field.name, timestamp); + }} + /> + + + + ); + }} + /> + + +
+ + + + +
+
+ ); +} diff --git a/apps/admin/app/dashboard/ads/page.tsx b/apps/admin/app/dashboard/ads/page.tsx new file mode 100644 index 0000000..6f20cde --- /dev/null +++ b/apps/admin/app/dashboard/ads/page.tsx @@ -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(null); + + return ( + > + action={ref} + header={{ + toolbar: ( + + 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 ( + { + 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 {type}; + }, + }, + { + 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) => [ + + 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; + } + }} + />, + {t('delete')}} + 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')} + />, + ], + }} + /> + ); +} diff --git a/apps/admin/app/dashboard/auth-control/device/page.tsx b/apps/admin/app/dashboard/auth-control/device/page.tsx index 80ef357..c509ac5 100644 --- a/apps/admin/app/dashboard/auth-control/device/page.tsx +++ b/apps/admin/app/dashboard/auth-control/device/page.tsx @@ -5,7 +5,10 @@ import { useQuery } from '@tanstack/react-query'; import { Label } from '@workspace/ui/components/label'; import { Switch } from '@workspace/ui/components/switch'; import { Table, TableBody, TableCell, TableRow } from '@workspace/ui/components/table'; +import { EnhancedInput } from '@workspace/ui/custom-components/enhanced-input'; +import { DicesIcon } from 'lucide-react'; import { useTranslations } from 'next-intl'; +import { uid } from 'radash'; import { toast } from 'sonner'; export default function Page() { @@ -49,6 +52,89 @@ export default function Page() { /> + + + +

{t('showAdsDescription')}

+
+ + { + updateConfig('config', { + ...data?.config, + show_ads: checked, + }); + }} + /> + +
+ + + +

{t('blockVirtualMachineDescription')}

+
+ + { + updateConfig('config', { + ...data?.config, + only_real_device: checked, + }); + }} + /> + +
+ + + +

{t('enableSecurityDescription')}

+
+ + { + updateConfig('config', { + ...data?.config, + enable_security: checked, + }); + }} + /> + +
+ + + +

{t('communicationKeyDescription')}

+
+ + { + updateConfig('config', { + ...data?.config, + security_secret: value, + }); + }} + suffix={ +
+ { + 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' + /> +
+ } + /> +
+
); diff --git a/apps/admin/config/navs.ts b/apps/admin/config/navs.ts index 1570cfb..c0f5be7 100644 --- a/apps/admin/config/navs.ts +++ b/apps/admin/config/navs.ts @@ -61,6 +61,11 @@ export const navs = [ icon: 'flat-color-icons:lock-portrait', items: AuthControl, }, + { + title: 'ADS Config', + url: '/dashboard/ads', + icon: 'flat-color-icons:electrical-sensor', + }, { title: 'Payment Config', url: '/dashboard/payment', @@ -115,7 +120,7 @@ export const navs = [ { title: 'Announcement Management', url: '/dashboard/announcement', - icon: 'flat-color-icons:news', + icon: 'flat-color-icons:advertising', }, { title: 'Ticket Management', diff --git a/apps/admin/locales/cs-CZ/ads.json b/apps/admin/locales/cs-CZ/ads.json new file mode 100644 index 0000000..4f10445 --- /dev/null +++ b/apps/admin/locales/cs-CZ/ads.json @@ -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" +} diff --git a/apps/admin/locales/cs-CZ/device.json b/apps/admin/locales/cs-CZ/device.json index da5df10..4e1cee6 100644 --- a/apps/admin/locales/cs-CZ/device.json +++ b/apps/admin/locales/cs-CZ/device.json @@ -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", - "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" } diff --git a/apps/admin/locales/cs-CZ/menu.json b/apps/admin/locales/cs-CZ/menu.json index 831fca5..35073be 100644 --- a/apps/admin/locales/cs-CZ/menu.json +++ b/apps/admin/locales/cs-CZ/menu.json @@ -1,4 +1,5 @@ { + "ADS Config": "Konfigurace ADS", "Announcement Management": "Správa oznámení", "Apple": "Apple ID", "Auth Control": "Řízení ověřování", diff --git a/apps/admin/locales/de-DE/ads.json b/apps/admin/locales/de-DE/ads.json new file mode 100644 index 0000000..c01b17a --- /dev/null +++ b/apps/admin/locales/de-DE/ads.json @@ -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" +} diff --git a/apps/admin/locales/de-DE/device.json b/apps/admin/locales/de-DE/device.json index 6afc54b..58df6d0 100644 --- a/apps/admin/locales/de-DE/device.json +++ b/apps/admin/locales/de-DE/device.json @@ -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", - "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." } diff --git a/apps/admin/locales/de-DE/menu.json b/apps/admin/locales/de-DE/menu.json index 211825d..26079d0 100644 --- a/apps/admin/locales/de-DE/menu.json +++ b/apps/admin/locales/de-DE/menu.json @@ -1,4 +1,5 @@ { + "ADS Config": "ADS-Konfiguration", "Announcement Management": "Ankündigungsverwaltung", "Apple": "Apple-ID", "Auth Control": "Authentifizierungskontrolle", diff --git a/apps/admin/locales/en-US/ads.json b/apps/admin/locales/en-US/ads.json new file mode 100644 index 0000000..e9e1c28 --- /dev/null +++ b/apps/admin/locales/en-US/ads.json @@ -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" +} diff --git a/apps/admin/locales/en-US/device.json b/apps/admin/locales/en-US/device.json index 07966bc..00fa0d2 100644 --- a/apps/admin/locales/en-US/device.json +++ b/apps/admin/locales/en-US/device.json @@ -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", - "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" } diff --git a/apps/admin/locales/en-US/menu.json b/apps/admin/locales/en-US/menu.json index c72690d..01bcc86 100644 --- a/apps/admin/locales/en-US/menu.json +++ b/apps/admin/locales/en-US/menu.json @@ -1,4 +1,5 @@ { + "ADS Config": "ADS Config", "Announcement Management": "Announcement Management", "Apple": "Apple ID", "Auth Control": "Auth Control", diff --git a/apps/admin/locales/es-ES/ads.json b/apps/admin/locales/es-ES/ads.json new file mode 100644 index 0000000..73ab21e --- /dev/null +++ b/apps/admin/locales/es-ES/ads.json @@ -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" +} diff --git a/apps/admin/locales/es-ES/device.json b/apps/admin/locales/es-ES/device.json index 4fec193..561a1d0 100644 --- a/apps/admin/locales/es-ES/device.json +++ b/apps/admin/locales/es-ES/device.json @@ -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", - "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" } diff --git a/apps/admin/locales/es-ES/menu.json b/apps/admin/locales/es-ES/menu.json index 233dd34..663f8bf 100644 --- a/apps/admin/locales/es-ES/menu.json +++ b/apps/admin/locales/es-ES/menu.json @@ -1,4 +1,5 @@ { + "ADS Config": "Configuración de ADS", "Announcement Management": "Gestión de Anuncios", "Apple": "ID de Apple", "Auth Control": "Control de Autenticación", diff --git a/apps/admin/locales/es-MX/ads.json b/apps/admin/locales/es-MX/ads.json new file mode 100644 index 0000000..8a5de22 --- /dev/null +++ b/apps/admin/locales/es-MX/ads.json @@ -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" +} diff --git a/apps/admin/locales/es-MX/device.json b/apps/admin/locales/es-MX/device.json index 85e0c19..58e83e3 100644 --- a/apps/admin/locales/es-MX/device.json +++ b/apps/admin/locales/es-MX/device.json @@ -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", - "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" } diff --git a/apps/admin/locales/es-MX/menu.json b/apps/admin/locales/es-MX/menu.json index 6bdf850..1914b1e 100644 --- a/apps/admin/locales/es-MX/menu.json +++ b/apps/admin/locales/es-MX/menu.json @@ -1,4 +1,5 @@ { + "ADS Config": "Configuración de ADS", "Announcement Management": "Gestión de Anuncios", "Apple": "ID de Apple", "Auth Control": "Control de Autenticación", diff --git a/apps/admin/locales/fa-IR/ads.json b/apps/admin/locales/fa-IR/ads.json new file mode 100644 index 0000000..fc7dbc4 --- /dev/null +++ b/apps/admin/locales/fa-IR/ads.json @@ -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": "مدت اعتبار" +} diff --git a/apps/admin/locales/fa-IR/device.json b/apps/admin/locales/fa-IR/device.json index ef435a5..45cc7b9 100644 --- a/apps/admin/locales/fa-IR/device.json +++ b/apps/admin/locales/fa-IR/device.json @@ -1,4 +1,14 @@ { + "blockVirtualMachine": "مسدود کردن ماشین مجازی", + "blockVirtualMachineDescription": "هنگامی که فعال باشد، دستگاه‌ها از اجرای ماشین‌های مجازی یا شبیه‌سازها جلوگیری خواهند شد", + "communicationKey": "کلید ارتباطی", + "communicationKeyDescription": "کلید ارتباطی برای ارتباط امن بین دستگاه‌ها و سرورها استفاده می‌شود", "enable": "فعال کردن", - "enableDescription": "پس از فعال‌سازی، شناسه‌های دستگاه‌های مختلف مانند IMEI/IDFA/IDFV/AndroidID/آدرس مک برای ورود و ثبت‌نام پشتیبانی می‌شوند" + "enableDescription": "پس از فعال‌سازی، شناسه‌های دستگاه‌های مختلف مانند IMEI/IDFA/IDFV/AndroidID/آدرس مک برای ورود و ثبت‌نام پشتیبانی می‌شوند", + "enableSecurity": "فعال‌سازی رمزنگاری ارتباطات", + "enableSecurityDescription": "هنگامی که فعال باشد، ارتباط بین دستگاه‌ها و سرورها رمزنگاری خواهد شد", + "saveFailed": "ذخیره‌سازی ناموفق بود", + "saveSuccess": "ذخیره‌سازی با موفقیت انجام شد", + "showAds": "نمایش تبلیغات", + "showAdsDescription": "هنگامی که فعال باشد، تبلیغات بر روی دستگاه‌ها نمایش داده خواهد شد" } diff --git a/apps/admin/locales/fa-IR/menu.json b/apps/admin/locales/fa-IR/menu.json index 56ccfce..daabfd3 100644 --- a/apps/admin/locales/fa-IR/menu.json +++ b/apps/admin/locales/fa-IR/menu.json @@ -1,4 +1,5 @@ { + "ADS Config": "تنظیمات ADS", "Announcement Management": "مدیریت اطلاعیه‌ها", "Apple": "شناسه اپل", "Auth Control": "کنترل احراز هویت", diff --git a/apps/admin/locales/fi-FI/ads.json b/apps/admin/locales/fi-FI/ads.json new file mode 100644 index 0000000..91ca6d2 --- /dev/null +++ b/apps/admin/locales/fi-FI/ads.json @@ -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" +} diff --git a/apps/admin/locales/fi-FI/device.json b/apps/admin/locales/fi-FI/device.json index f51457e..18f9c09 100644 --- a/apps/admin/locales/fi-FI/device.json +++ b/apps/admin/locales/fi-FI/device.json @@ -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", - "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" } diff --git a/apps/admin/locales/fi-FI/menu.json b/apps/admin/locales/fi-FI/menu.json index f302526..b210f20 100644 --- a/apps/admin/locales/fi-FI/menu.json +++ b/apps/admin/locales/fi-FI/menu.json @@ -1,4 +1,5 @@ { + "ADS Config": "ADS-asetukset", "Announcement Management": "Ilmoitusten hallinta", "Apple": "Apple ID", "Auth Control": "Todennuksen hallinta", diff --git a/apps/admin/locales/fr-FR/ads.json b/apps/admin/locales/fr-FR/ads.json new file mode 100644 index 0000000..ed5f095 --- /dev/null +++ b/apps/admin/locales/fr-FR/ads.json @@ -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é" +} diff --git a/apps/admin/locales/fr-FR/device.json b/apps/admin/locales/fr-FR/device.json index 4e82655..dc9587e 100644 --- a/apps/admin/locales/fr-FR/device.json +++ b/apps/admin/locales/fr-FR/device.json @@ -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", - "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" } diff --git a/apps/admin/locales/fr-FR/menu.json b/apps/admin/locales/fr-FR/menu.json index 0543974..235db8f 100644 --- a/apps/admin/locales/fr-FR/menu.json +++ b/apps/admin/locales/fr-FR/menu.json @@ -1,4 +1,5 @@ { + "ADS Config": "Configuration ADS", "Announcement Management": "Gestion des annonces", "Apple": "Identifiant Apple", "Auth Control": "Contrôle d'authentification", diff --git a/apps/admin/locales/hi-IN/ads.json b/apps/admin/locales/hi-IN/ads.json new file mode 100644 index 0000000..661713b --- /dev/null +++ b/apps/admin/locales/hi-IN/ads.json @@ -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": "वैधता अवधि" +} diff --git a/apps/admin/locales/hi-IN/device.json b/apps/admin/locales/hi-IN/device.json index c91e801..bcdde86 100644 --- a/apps/admin/locales/hi-IN/device.json +++ b/apps/admin/locales/hi-IN/device.json @@ -1,4 +1,14 @@ { + "blockVirtualMachine": "वर्चुअल मशीन को ब्लॉक करें", + "blockVirtualMachineDescription": "जब सक्षम किया जाता है, तो उपकरणों को वर्चुअल मशीनों या एमुलेटर्स पर चलने से रोका जाएगा", + "communicationKey": "संचार कुंजी", + "communicationKeyDescription": "संचार कुंजी का उपयोग उपकरणों और सर्वरों के बीच सुरक्षित संचार के लिए किया जाता है", "enable": "सक्रिय करें", - "enableDescription": "सक्रिय करने के बाद, लॉगिन और पंजीकरण के लिए IMEI/IDFA/IDFV/AndroidID/Mac पता जैसे कई डिवाइस पहचानकर्ताओं का समर्थन किया जाता है" + "enableDescription": "सक्रिय करने के बाद, लॉगिन और पंजीकरण के लिए IMEI/IDFA/IDFV/AndroidID/Mac पता जैसे कई डिवाइस पहचानकर्ताओं का समर्थन किया जाता है", + "enableSecurity": "संचार एन्क्रिप्शन सक्षम करें", + "enableSecurityDescription": "जब सक्षम किया जाता है, तो उपकरणों और सर्वरों के बीच का संचार एन्क्रिप्ट किया जाएगा", + "saveFailed": "सहेजना विफल", + "saveSuccess": "सहेजना सफल", + "showAds": "विज्ञापन दिखाएँ", + "showAdsDescription": "जब सक्षम किया जाता है, तो उपकरणों पर विज्ञापन प्रदर्शित किए जाएंगे" } diff --git a/apps/admin/locales/hi-IN/menu.json b/apps/admin/locales/hi-IN/menu.json index 95fc5a4..dc1ea51 100644 --- a/apps/admin/locales/hi-IN/menu.json +++ b/apps/admin/locales/hi-IN/menu.json @@ -1,4 +1,5 @@ { + "ADS Config": "एडीएस कॉन्फ़िग", "Announcement Management": "घोषणा प्रबंधन", "Apple": "एप्पल आईडी", "Auth Control": "प्रमाणिकरण नियंत्रण", diff --git a/apps/admin/locales/hu-HU/ads.json b/apps/admin/locales/hu-HU/ads.json new file mode 100644 index 0000000..3d9fc9d --- /dev/null +++ b/apps/admin/locales/hu-HU/ads.json @@ -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" +} diff --git a/apps/admin/locales/hu-HU/device.json b/apps/admin/locales/hu-HU/device.json index 3ec4a20..06a4f15 100644 --- a/apps/admin/locales/hu-HU/device.json +++ b/apps/admin/locales/hu-HU/device.json @@ -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", - "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" } diff --git a/apps/admin/locales/hu-HU/menu.json b/apps/admin/locales/hu-HU/menu.json index 30fe715..9756e30 100644 --- a/apps/admin/locales/hu-HU/menu.json +++ b/apps/admin/locales/hu-HU/menu.json @@ -1,4 +1,5 @@ { + "ADS Config": "ADS konfiguráció", "Announcement Management": "Hirdetménykezelés", "Apple": "Apple ID", "Auth Control": "Hitelesítési vezérlés", diff --git a/apps/admin/locales/ja-JP/ads.json b/apps/admin/locales/ja-JP/ads.json new file mode 100644 index 0000000..7e7e526 --- /dev/null +++ b/apps/admin/locales/ja-JP/ads.json @@ -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": "有効期限" +} diff --git a/apps/admin/locales/ja-JP/device.json b/apps/admin/locales/ja-JP/device.json index 3c415a6..256e1a9 100644 --- a/apps/admin/locales/ja-JP/device.json +++ b/apps/admin/locales/ja-JP/device.json @@ -1,4 +1,14 @@ { + "blockVirtualMachine": "仮想マシンをブロック", + "blockVirtualMachineDescription": "有効にすると、デバイスは仮想マシンやエミュレーター上での実行が禁止されます", + "communicationKey": "通信キー", + "communicationKeyDescription": "通信キーは、デバイスとサーバー間の安全な通信に使用されます", "enable": "有効化", - "enableDescription": "有効化後、ログインおよび登録のために、IMEI/IDFA/IDFV/AndroidID/Macアドレスなどの複数のデバイス識別子がサポートされます。" + "enableDescription": "有効化後、ログインおよび登録のために、IMEI/IDFA/IDFV/AndroidID/Macアドレスなどの複数のデバイス識別子がサポートされます。", + "enableSecurity": "通信暗号化を有効にする", + "enableSecurityDescription": "有効にすると、デバイスとサーバー間の通信が暗号化されます", + "saveFailed": "保存に失敗しました", + "saveSuccess": "保存に成功しました", + "showAds": "広告を表示", + "showAdsDescription": "有効にすると、デバイスに広告が表示されます" } diff --git a/apps/admin/locales/ja-JP/menu.json b/apps/admin/locales/ja-JP/menu.json index 2486f6f..29f9fcb 100644 --- a/apps/admin/locales/ja-JP/menu.json +++ b/apps/admin/locales/ja-JP/menu.json @@ -1,4 +1,5 @@ { + "ADS Config": "ADS設定", "Announcement Management": "お知らせ管理", "Apple": "Apple ID", "Auth Control": "認証管理", diff --git a/apps/admin/locales/ko-KR/ads.json b/apps/admin/locales/ko-KR/ads.json new file mode 100644 index 0000000..654138a --- /dev/null +++ b/apps/admin/locales/ko-KR/ads.json @@ -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": "유효 기간" +} diff --git a/apps/admin/locales/ko-KR/device.json b/apps/admin/locales/ko-KR/device.json index 52c5a73..a18b703 100644 --- a/apps/admin/locales/ko-KR/device.json +++ b/apps/admin/locales/ko-KR/device.json @@ -1,4 +1,14 @@ { + "blockVirtualMachine": "가상 머신 차단", + "blockVirtualMachineDescription": "활성화되면, 장치가 가상 머신이나 에뮬레이터에서 실행되는 것을 방지합니다.", + "communicationKey": "통신 키", + "communicationKeyDescription": "통신 키는 장치와 서버 간의 안전한 통신을 위해 사용됩니다.", "enable": "활성화", - "enableDescription": "활성화 후 IMEI/IDFA/IDFV/AndroidID/Mac 주소와 같은 여러 장치 식별자를 사용하여 로그인 및 등록할 수 있습니다." + "enableDescription": "활성화 후 IMEI/IDFA/IDFV/AndroidID/Mac 주소와 같은 여러 장치 식별자를 사용하여 로그인 및 등록할 수 있습니다.", + "enableSecurity": "통신 암호화 활성화", + "enableSecurityDescription": "활성화되면, 장치와 서버 간의 통신이 암호화됩니다.", + "saveFailed": "저장 실패", + "saveSuccess": "저장 성공", + "showAds": "광고 표시", + "showAdsDescription": "활성화되면, 장치에 광고가 표시됩니다." } diff --git a/apps/admin/locales/ko-KR/menu.json b/apps/admin/locales/ko-KR/menu.json index 6a283e5..3c3549e 100644 --- a/apps/admin/locales/ko-KR/menu.json +++ b/apps/admin/locales/ko-KR/menu.json @@ -1,4 +1,5 @@ { + "ADS Config": "ADS 구성", "Announcement Management": "공지 관리", "Apple": "Apple ID", "Auth Control": "인증 제어", diff --git a/apps/admin/locales/no-NO/ads.json b/apps/admin/locales/no-NO/ads.json new file mode 100644 index 0000000..58d8b73 --- /dev/null +++ b/apps/admin/locales/no-NO/ads.json @@ -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" +} diff --git a/apps/admin/locales/no-NO/device.json b/apps/admin/locales/no-NO/device.json index 6f41c30..ccc96ed 100644 --- a/apps/admin/locales/no-NO/device.json +++ b/apps/admin/locales/no-NO/device.json @@ -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", - "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" } diff --git a/apps/admin/locales/no-NO/menu.json b/apps/admin/locales/no-NO/menu.json index 88f4c73..50955ca 100644 --- a/apps/admin/locales/no-NO/menu.json +++ b/apps/admin/locales/no-NO/menu.json @@ -1,4 +1,5 @@ { + "ADS Config": "ADS-konfigurasjon", "Announcement Management": "Kunngjøringsadministrasjon", "Apple": "Apple-ID", "Auth Control": "Autentiseringskontroll", diff --git a/apps/admin/locales/pl-PL/ads.json b/apps/admin/locales/pl-PL/ads.json new file mode 100644 index 0000000..ab40e1f --- /dev/null +++ b/apps/admin/locales/pl-PL/ads.json @@ -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" +} diff --git a/apps/admin/locales/pl-PL/device.json b/apps/admin/locales/pl-PL/device.json index de448b8..30a8aee 100644 --- a/apps/admin/locales/pl-PL/device.json +++ b/apps/admin/locales/pl-PL/device.json @@ -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", - "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" } diff --git a/apps/admin/locales/pl-PL/menu.json b/apps/admin/locales/pl-PL/menu.json index e331539..4b9f42f 100644 --- a/apps/admin/locales/pl-PL/menu.json +++ b/apps/admin/locales/pl-PL/menu.json @@ -1,4 +1,5 @@ { + "ADS Config": "Konfiguracja ADS", "Announcement Management": "Zarządzanie ogłoszeniami", "Apple": "Identyfikator Apple", "Auth Control": "Kontrola autoryzacji", diff --git a/apps/admin/locales/pt-BR/ads.json b/apps/admin/locales/pt-BR/ads.json new file mode 100644 index 0000000..bc5ab4c --- /dev/null +++ b/apps/admin/locales/pt-BR/ads.json @@ -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" +} diff --git a/apps/admin/locales/pt-BR/device.json b/apps/admin/locales/pt-BR/device.json index 3e6f470..8bb1cc8 100644 --- a/apps/admin/locales/pt-BR/device.json +++ b/apps/admin/locales/pt-BR/device.json @@ -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", - "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" } diff --git a/apps/admin/locales/pt-BR/menu.json b/apps/admin/locales/pt-BR/menu.json index feb0c1b..ae48950 100644 --- a/apps/admin/locales/pt-BR/menu.json +++ b/apps/admin/locales/pt-BR/menu.json @@ -1,4 +1,5 @@ { + "ADS Config": "Configuração ADS", "Announcement Management": "Gerenciamento de Anúncios", "Apple": "ID Apple", "Auth Control": "Controle de Autenticação", diff --git a/apps/admin/locales/request.ts b/apps/admin/locales/request.ts index 51e4274..2201bb2 100644 --- a/apps/admin/locales/request.ts +++ b/apps/admin/locales/request.ts @@ -23,6 +23,7 @@ export default getRequestConfig(async () => { 'facebook': (await import(`./${locale}/facebook.json`)).default, 'github': (await import(`./${locale}/github.json`)).default, 'device': (await import(`./${locale}/device.json`)).default, + 'ads': (await import(`./${locale}/ads.json`)).default, 'payment': (await import(`./${locale}/payment.json`)).default, 'server': (await import(`./${locale}/server.json`)).default, 'subscribe': (await import(`./${locale}/subscribe.json`)).default, diff --git a/apps/admin/locales/ro-RO/ads.json b/apps/admin/locales/ro-RO/ads.json new file mode 100644 index 0000000..fcd3c47 --- /dev/null +++ b/apps/admin/locales/ro-RO/ads.json @@ -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" +} diff --git a/apps/admin/locales/ro-RO/device.json b/apps/admin/locales/ro-RO/device.json index 5c592bf..b1f1a40 100644 --- a/apps/admin/locales/ro-RO/device.json +++ b/apps/admin/locales/ro-RO/device.json @@ -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", - "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" } diff --git a/apps/admin/locales/ro-RO/menu.json b/apps/admin/locales/ro-RO/menu.json index 67783f8..3dc2fa7 100644 --- a/apps/admin/locales/ro-RO/menu.json +++ b/apps/admin/locales/ro-RO/menu.json @@ -1,4 +1,5 @@ { + "ADS Config": "Configurație ADS", "Announcement Management": "Managementul Anunțurilor", "Apple": "ID Apple", "Auth Control": "Control Autentificare", diff --git a/apps/admin/locales/ru-RU/ads.json b/apps/admin/locales/ru-RU/ads.json new file mode 100644 index 0000000..ce7e4cb --- /dev/null +++ b/apps/admin/locales/ru-RU/ads.json @@ -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": "Срок действия" +} diff --git a/apps/admin/locales/ru-RU/device.json b/apps/admin/locales/ru-RU/device.json index e0a9e41..d12f891 100644 --- a/apps/admin/locales/ru-RU/device.json +++ b/apps/admin/locales/ru-RU/device.json @@ -1,4 +1,14 @@ { + "blockVirtualMachine": "Блокировать виртуальную машину", + "blockVirtualMachineDescription": "При включении устройства не смогут работать на виртуальных машинах или эмуляторах", + "communicationKey": "Ключ связи", + "communicationKeyDescription": "Ключ связи используется для безопасной связи между устройствами и серверами", "enable": "Включить", - "enableDescription": "После включения поддерживаются несколько идентификаторов устройств, таких как IMEI/IDFA/IDFV/AndroidID/Mac-адрес для входа и регистрации" + "enableDescription": "После включения поддерживаются несколько идентификаторов устройств, таких как IMEI/IDFA/IDFV/AndroidID/Mac-адрес для входа и регистрации", + "enableSecurity": "Включить шифрование связи", + "enableSecurityDescription": "При включении связь между устройствами и серверами будет зашифрована", + "saveFailed": "Не удалось сохранить", + "saveSuccess": "Сохранение успешно", + "showAds": "Показать рекламу", + "showAdsDescription": "При включении реклама будет отображаться на устройствах" } diff --git a/apps/admin/locales/ru-RU/menu.json b/apps/admin/locales/ru-RU/menu.json index 7470645..63375e1 100644 --- a/apps/admin/locales/ru-RU/menu.json +++ b/apps/admin/locales/ru-RU/menu.json @@ -1,4 +1,5 @@ { + "ADS Config": "Конфигурация ADS", "Announcement Management": "Управление объявлениями", "Apple": "Apple ID", "Auth Control": "Управление аутентификацией", diff --git a/apps/admin/locales/th-TH/ads.json b/apps/admin/locales/th-TH/ads.json new file mode 100644 index 0000000..801c829 --- /dev/null +++ b/apps/admin/locales/th-TH/ads.json @@ -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": "ระยะเวลาที่ใช้ได้" +} diff --git a/apps/admin/locales/th-TH/device.json b/apps/admin/locales/th-TH/device.json index b35ae11..35498b9 100644 --- a/apps/admin/locales/th-TH/device.json +++ b/apps/admin/locales/th-TH/device.json @@ -1,4 +1,14 @@ { + "blockVirtualMachine": "บล็อกเครื่องเสมือน", + "blockVirtualMachineDescription": "เมื่อเปิดใช้งาน อุปกรณ์จะไม่สามารถทำงานบนเครื่องเสมือนหรืออีมูเลเตอร์ได้", + "communicationKey": "กุญแจการสื่อสาร", + "communicationKeyDescription": "กุญแจการสื่อสารใช้สำหรับการสื่อสารที่ปลอดภัยระหว่างอุปกรณ์และเซิร์ฟเวอร์", "enable": "เปิดใช้งาน", - "enableDescription": "หลังจากเปิดใช้งาน จะรองรับการเข้าสู่ระบบและการลงทะเบียนด้วยตัวระบุอุปกรณ์หลายตัว เช่น IMEI/IDFA/IDFV/AndroidID/ที่อยู่ Mac" + "enableDescription": "หลังจากเปิดใช้งาน จะรองรับการเข้าสู่ระบบและการลงทะเบียนด้วยตัวระบุอุปกรณ์หลายตัว เช่น IMEI/IDFA/IDFV/AndroidID/ที่อยู่ Mac", + "enableSecurity": "เปิดใช้งานการเข้ารหัสการสื่อสาร", + "enableSecurityDescription": "เมื่อเปิดใช้งาน การสื่อสารระหว่างอุปกรณ์และเซิร์ฟเวอร์จะถูกเข้ารหัส", + "saveFailed": "การบันทึกล้มเหลว", + "saveSuccess": "การบันทึกสำเร็จ", + "showAds": "แสดงโฆษณา", + "showAdsDescription": "เมื่อเปิดใช้งาน โฆษณาจะถูกแสดงบนอุปกรณ์" } diff --git a/apps/admin/locales/th-TH/menu.json b/apps/admin/locales/th-TH/menu.json index 8585c4f..be08c70 100644 --- a/apps/admin/locales/th-TH/menu.json +++ b/apps/admin/locales/th-TH/menu.json @@ -1,4 +1,5 @@ { + "ADS Config": "การตั้งค่า ADS", "Announcement Management": "การจัดการประกาศ", "Apple": "Apple ID", "Auth Control": "การควบคุมการยืนยันตัวตน", diff --git a/apps/admin/locales/tr-TR/ads.json b/apps/admin/locales/tr-TR/ads.json new file mode 100644 index 0000000..7bf495c --- /dev/null +++ b/apps/admin/locales/tr-TR/ads.json @@ -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" +} diff --git a/apps/admin/locales/tr-TR/device.json b/apps/admin/locales/tr-TR/device.json index d4e361c..703c157 100644 --- a/apps/admin/locales/tr-TR/device.json +++ b/apps/admin/locales/tr-TR/device.json @@ -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", - "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" } diff --git a/apps/admin/locales/tr-TR/menu.json b/apps/admin/locales/tr-TR/menu.json index 6fc47b5..2b58ebe 100644 --- a/apps/admin/locales/tr-TR/menu.json +++ b/apps/admin/locales/tr-TR/menu.json @@ -1,4 +1,5 @@ { + "ADS Config": "ADS Yapılandırması", "Announcement Management": "Duyuru Yönetimi", "Apple": "Apple Kimliği", "Auth Control": "Yetki Kontrolü", diff --git a/apps/admin/locales/uk-UA/ads.json b/apps/admin/locales/uk-UA/ads.json new file mode 100644 index 0000000..511070a --- /dev/null +++ b/apps/admin/locales/uk-UA/ads.json @@ -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": "Термін дії" +} diff --git a/apps/admin/locales/uk-UA/device.json b/apps/admin/locales/uk-UA/device.json index 16f7b40..c526635 100644 --- a/apps/admin/locales/uk-UA/device.json +++ b/apps/admin/locales/uk-UA/device.json @@ -1,4 +1,14 @@ { + "blockVirtualMachine": "Блокувати віртуальну машину", + "blockVirtualMachineDescription": "При увімкненні пристрої не зможуть працювати на віртуальних машинах або емуляторах", + "communicationKey": "Ключ зв'язку", + "communicationKeyDescription": "Ключ зв'язку використовується для безпечного зв'язку між пристроями та серверами", "enable": "Увімкнути", - "enableDescription": "Після увімкнення підтримуються кілька ідентифікаторів пристроїв, таких як IMEI/IDFA/IDFV/AndroidID/Mac-адреса для входу та реєстрації" + "enableDescription": "Після увімкнення підтримуються кілька ідентифікаторів пристроїв, таких як IMEI/IDFA/IDFV/AndroidID/Mac-адреса для входу та реєстрації", + "enableSecurity": "Увімкнути шифрування зв'язку", + "enableSecurityDescription": "При увімкненні зв'язок між пристроями та серверами буде зашифровано", + "saveFailed": "Не вдалося зберегти", + "saveSuccess": "Збережено успішно", + "showAds": "Показувати рекламу", + "showAdsDescription": "При увімкненні на пристроях буде відображатися реклама" } diff --git a/apps/admin/locales/uk-UA/menu.json b/apps/admin/locales/uk-UA/menu.json index 66e3774..316d5a4 100644 --- a/apps/admin/locales/uk-UA/menu.json +++ b/apps/admin/locales/uk-UA/menu.json @@ -1,4 +1,5 @@ { + "ADS Config": "Конфігурація ADS", "Announcement Management": "Управління оголошеннями", "Apple": "Apple ID", "Auth Control": "Контроль автентифікації", diff --git a/apps/admin/locales/vi-VN/ads.json b/apps/admin/locales/vi-VN/ads.json new file mode 100644 index 0000000..2643340 --- /dev/null +++ b/apps/admin/locales/vi-VN/ads.json @@ -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" +} diff --git a/apps/admin/locales/vi-VN/device.json b/apps/admin/locales/vi-VN/device.json index d2b9d30..60d99f9 100644 --- a/apps/admin/locales/vi-VN/device.json +++ b/apps/admin/locales/vi-VN/device.json @@ -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", - "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ị" } diff --git a/apps/admin/locales/vi-VN/menu.json b/apps/admin/locales/vi-VN/menu.json index f6c2dc9..2bfb2d4 100644 --- a/apps/admin/locales/vi-VN/menu.json +++ b/apps/admin/locales/vi-VN/menu.json @@ -1,4 +1,5 @@ { + "ADS Config": "Cấu hình ADS", "Announcement Management": "Quản lý Thông báo", "Apple": "ID Apple", "Auth Control": "Kiểm Soát Xác Thực", diff --git a/apps/admin/locales/zh-CN/ads.json b/apps/admin/locales/zh-CN/ads.json new file mode 100644 index 0000000..808833e --- /dev/null +++ b/apps/admin/locales/zh-CN/ads.json @@ -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": "有效期" +} diff --git a/apps/admin/locales/zh-CN/device.json b/apps/admin/locales/zh-CN/device.json index 60256a4..f8182c8 100644 --- a/apps/admin/locales/zh-CN/device.json +++ b/apps/admin/locales/zh-CN/device.json @@ -1,4 +1,14 @@ { + "blockVirtualMachine": "阻止虚拟机", + "blockVirtualMachineDescription": "启用后,将阻止设备在虚拟机或模拟器上运行", + "communicationKey": "通信密钥", + "communicationKeyDescription": "通信密钥用于设备与服务器之间的安全通信", "enable": "启用", - "enableDescription": "启用后,支持使用多个设备标识符,如 IMEI/IDFA/IDFV/AndroidID/Mac 地址进行登录和注册" + "enableDescription": "启用后,支持使用多个设备标识符,如 IMEI/IDFA/IDFV/AndroidID/Mac 地址进行登录和注册", + "enableSecurity": "启用通信加密", + "enableSecurityDescription": "启用后,设备与服务器之间的通信将被加密", + "saveFailed": "保存失败", + "saveSuccess": "保存成功", + "showAds": "显示广告", + "showAdsDescription": "启用后,设备上将显示广告" } diff --git a/apps/admin/locales/zh-CN/menu.json b/apps/admin/locales/zh-CN/menu.json index f37a550..f3f1152 100644 --- a/apps/admin/locales/zh-CN/menu.json +++ b/apps/admin/locales/zh-CN/menu.json @@ -1,4 +1,5 @@ { + "ADS Config": "ADS配置", "Announcement Management": "公告管理", "Apple": "Apple ID", "Auth Control": "认证控制", diff --git a/apps/admin/locales/zh-HK/ads.json b/apps/admin/locales/zh-HK/ads.json new file mode 100644 index 0000000..6842bf7 --- /dev/null +++ b/apps/admin/locales/zh-HK/ads.json @@ -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": "有效期" +} diff --git a/apps/admin/locales/zh-HK/device.json b/apps/admin/locales/zh-HK/device.json index d188fe1..ebfe5ae 100644 --- a/apps/admin/locales/zh-HK/device.json +++ b/apps/admin/locales/zh-HK/device.json @@ -1,4 +1,14 @@ { + "blockVirtualMachine": "阻止虛擬機", + "blockVirtualMachineDescription": "啟用後,設備將無法在虛擬機或模擬器上運行", + "communicationKey": "通訊密鑰", + "communicationKeyDescription": "通訊密鑰用於設備與伺服器之間的安全通訊", "enable": "啟用", - "enableDescription": "啟用後,支持多個設備識別碼,例如 IMEI/IDFA/IDFV/AndroidID/Mac 地址,用於登錄和註冊" + "enableDescription": "啟用後,支持多個設備識別碼,例如 IMEI/IDFA/IDFV/AndroidID/Mac 地址,用於登錄和註冊", + "enableSecurity": "啟用通訊加密", + "enableSecurityDescription": "啟用後,設備與伺服器之間的通訊將被加密", + "saveFailed": "保存失敗", + "saveSuccess": "保存成功", + "showAds": "顯示廣告", + "showAdsDescription": "啟用後,設備上將顯示廣告" } diff --git a/apps/admin/locales/zh-HK/menu.json b/apps/admin/locales/zh-HK/menu.json index 5d7127b..230f1ba 100644 --- a/apps/admin/locales/zh-HK/menu.json +++ b/apps/admin/locales/zh-HK/menu.json @@ -1,4 +1,5 @@ { + "ADS Config": "ADS 配置", "Announcement Management": "公告管理", "Apple": "Apple ID", "Auth Control": "身份驗證控制", diff --git a/apps/admin/services/admin/ads.ts b/apps/admin/services/admin/ads.ts new file mode 100644 index 0000000..2cca7d2 --- /dev/null +++ b/apps/admin/services/admin/ads.ts @@ -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('/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('/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('/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('/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('/v1/admin/ads/list', { + method: 'GET', + params: { + ...params, + }, + ...(options || {}), + }); +} diff --git a/apps/admin/services/admin/index.ts b/apps/admin/services/admin/index.ts index 1ca3f9e..37cdd29 100644 --- a/apps/admin/services/admin/index.ts +++ b/apps/admin/services/admin/index.ts @@ -1,7 +1,8 @@ // @ts-ignore - + // API 更新时间: // API 唯一标识: +import * as ads from './ads'; import * as announcement from './announcement'; import * as authMethod from './authMethod'; import * as console from './console'; @@ -17,6 +18,7 @@ import * as ticket from './ticket'; import * as tool from './tool'; import * as user from './user'; export default { + ads, announcement, authMethod, console, diff --git a/apps/admin/services/admin/typings.d.ts b/apps/admin/services/admin/typings.d.ts index cc2c921..565e79d 100644 --- a/apps/admin/services/admin/typings.d.ts +++ b/apps/admin/services/admin/typings.d.ts @@ -1,4 +1,18 @@ 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 = { app_id: string; private_key: string; @@ -106,6 +120,21 @@ declare namespace API { ids: number[]; }; + type CheckoutOrderRequest = { + orderNo: string; + returnUrl?: string; + }; + + type CheckoutOrderResponse = { + type: string; + checkout_url?: string; + stripe?: StripePayment; + }; + + type CloseOrderRequest = { + orderNo: string; + }; + type Coupon = { id: number; name: string; @@ -123,6 +152,17 @@ declare namespace API { 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 = { title: string; content: string; @@ -280,6 +320,10 @@ declare namespace API { currency_symbol: string; }; + type DeleteAdsRequest = { + id: number; + }; + type DeleteAnnouncementRequest = { id: number; }; @@ -369,6 +413,33 @@ declare namespace API { 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 = { list: PaymentConfig[]; }; @@ -416,6 +487,10 @@ declare namespace API { list: AuthMethodConfig[]; }; + type GetAvailablePaymentMethodsResponse = { + list: PaymentConfig[]; + }; + type GetCouponListParams = { page: number; size: number; @@ -879,6 +954,20 @@ declare namespace API { 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 = { privacy_policy: string; }; @@ -894,6 +983,61 @@ declare namespace API { 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 = { stop_register: boolean; enable_trial: boolean; @@ -905,6 +1049,26 @@ declare namespace API { 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 = { /** 状态码 */ code?: number; @@ -1030,6 +1194,12 @@ declare namespace API { payment: string; }; + type StripePayment = { + method: string; + client_secret: string; + publishable_key: string; + }; + type Subscribe = { id: number; name: string; @@ -1183,6 +1353,18 @@ declare namespace API { 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 = { id: number; name: string; diff --git a/apps/admin/services/common/index.ts b/apps/admin/services/common/index.ts index 73b3bda..61ba129 100644 --- a/apps/admin/services/common/index.ts +++ b/apps/admin/services/common/index.ts @@ -1,5 +1,5 @@ // @ts-ignore - + // API 更新时间: // API 唯一标识: import * as auth from './auth'; diff --git a/apps/admin/services/common/oauth.ts b/apps/admin/services/common/oauth.ts index 17e493f..ff6a4c0 100644 --- a/apps/admin/services/common/oauth.ts +++ b/apps/admin/services/common/oauth.ts @@ -32,6 +32,7 @@ export async function appleLoginCallback( return request('/v1/auth/oauth/callback/apple', { method: 'POST', data: formData, + requestType: 'form', ...(options || {}), }); } diff --git a/apps/admin/services/common/typings.d.ts b/apps/admin/services/common/typings.d.ts index eca8fca..566eeb9 100644 --- a/apps/admin/services/common/typings.d.ts +++ b/apps/admin/services/common/typings.d.ts @@ -1,4 +1,18 @@ 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 = { id: number; title: string; @@ -76,6 +90,17 @@ declare namespace API { enabled: boolean; }; + type CheckoutOrderRequest = { + orderNo: string; + returnUrl?: string; + }; + + type CheckoutOrderResponse = { + type: string; + checkout_url?: string; + stripe?: StripePayment; + }; + type CheckUserParams = { email: string; }; @@ -92,6 +117,10 @@ declare namespace API { telephone: string; }; + type CloseOrderRequest = { + orderNo: string; + }; + type Coupon = { id: number; name: string; @@ -145,6 +174,10 @@ declare namespace API { applications: ApplicationResponseInfo[]; }; + type GetAvailablePaymentMethodsResponse = { + list: PaymentConfig[]; + }; + type GetGlobalConfigResponse = { site: SiteConfig; verify: VeifyConfig; @@ -309,6 +342,20 @@ declare namespace API { 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 = { privacy_policy: string; }; @@ -324,6 +371,61 @@ declare namespace API { 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 = { stop_register: boolean; enable_trial: boolean; @@ -335,6 +437,17 @@ declare namespace API { ip_register_limit_duration: number; }; + type RenewalOrderRequest = { + user_subscribe_id: number; + quantity: number; + payment: string; + coupon?: string; + }; + + type RenewalOrderResponse = { + order_no: string; + }; + type ResetPasswordRequest = { email: string; password: string; @@ -342,6 +455,15 @@ declare namespace API { cf_token?: string; }; + type ResetTrafficOrderRequest = { + user_subscribe_id: number; + payment: string; + }; + + type ResetTrafficOrderResponse = { + order_no: string; + }; + type Response = { /** 状态码 */ code?: number; @@ -444,6 +566,12 @@ declare namespace API { sort: number; }; + type StripePayment = { + method: string; + client_secret: string; + publishable_key: string; + }; + type Subscribe = { id: number; name: string; diff --git a/apps/user/services/common/index.ts b/apps/user/services/common/index.ts index 73b3bda..61ba129 100644 --- a/apps/user/services/common/index.ts +++ b/apps/user/services/common/index.ts @@ -1,5 +1,5 @@ // @ts-ignore - + // API 更新时间: // API 唯一标识: import * as auth from './auth'; diff --git a/apps/user/services/common/oauth.ts b/apps/user/services/common/oauth.ts index 17e493f..ff6a4c0 100644 --- a/apps/user/services/common/oauth.ts +++ b/apps/user/services/common/oauth.ts @@ -32,6 +32,7 @@ export async function appleLoginCallback( return request('/v1/auth/oauth/callback/apple', { method: 'POST', data: formData, + requestType: 'form', ...(options || {}), }); } diff --git a/apps/user/services/common/typings.d.ts b/apps/user/services/common/typings.d.ts index eca8fca..566eeb9 100644 --- a/apps/user/services/common/typings.d.ts +++ b/apps/user/services/common/typings.d.ts @@ -1,4 +1,18 @@ 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 = { id: number; title: string; @@ -76,6 +90,17 @@ declare namespace API { enabled: boolean; }; + type CheckoutOrderRequest = { + orderNo: string; + returnUrl?: string; + }; + + type CheckoutOrderResponse = { + type: string; + checkout_url?: string; + stripe?: StripePayment; + }; + type CheckUserParams = { email: string; }; @@ -92,6 +117,10 @@ declare namespace API { telephone: string; }; + type CloseOrderRequest = { + orderNo: string; + }; + type Coupon = { id: number; name: string; @@ -145,6 +174,10 @@ declare namespace API { applications: ApplicationResponseInfo[]; }; + type GetAvailablePaymentMethodsResponse = { + list: PaymentConfig[]; + }; + type GetGlobalConfigResponse = { site: SiteConfig; verify: VeifyConfig; @@ -309,6 +342,20 @@ declare namespace API { 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 = { privacy_policy: string; }; @@ -324,6 +371,61 @@ declare namespace API { 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 = { stop_register: boolean; enable_trial: boolean; @@ -335,6 +437,17 @@ declare namespace API { ip_register_limit_duration: number; }; + type RenewalOrderRequest = { + user_subscribe_id: number; + quantity: number; + payment: string; + coupon?: string; + }; + + type RenewalOrderResponse = { + order_no: string; + }; + type ResetPasswordRequest = { email: string; password: string; @@ -342,6 +455,15 @@ declare namespace API { cf_token?: string; }; + type ResetTrafficOrderRequest = { + user_subscribe_id: number; + payment: string; + }; + + type ResetTrafficOrderResponse = { + order_no: string; + }; + type Response = { /** 状态码 */ code?: number; @@ -444,6 +566,12 @@ declare namespace API { sort: number; }; + type StripePayment = { + method: string; + client_secret: string; + publishable_key: string; + }; + type Subscribe = { id: number; name: string; diff --git a/apps/user/services/user/typings.d.ts b/apps/user/services/user/typings.d.ts index 215938b..06e50d6 100644 --- a/apps/user/services/user/typings.d.ts +++ b/apps/user/services/user/typings.d.ts @@ -1,4 +1,18 @@ 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 = { id: number; title: string; diff --git a/packages/ui/src/custom-components/enhanced-input.tsx b/packages/ui/src/custom-components/enhanced-input.tsx index ccb37f3..cd44de2 100644 --- a/packages/ui/src/custom-components/enhanced-input.tsx +++ b/packages/ui/src/custom-components/enhanced-input.tsx @@ -97,7 +97,7 @@ export function EnhancedInput({