✨ feat(marketing): Add marketing management features and localization updates
This commit is contained in:
parent
47d19d1b44
commit
ec3133e0c8
@ -1,5 +1,6 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
|
import { createBatchSendEmailTask, getPreSendEmailCount } from '@/services/admin/marketing';
|
||||||
import { zodResolver } from '@hookform/resolvers/zod';
|
import { zodResolver } from '@hookform/resolvers/zod';
|
||||||
import { Button } from '@workspace/ui/components/button';
|
import { Button } from '@workspace/ui/components/button';
|
||||||
import {
|
import {
|
||||||
@ -33,49 +34,42 @@ import { Textarea } from '@workspace/ui/components/textarea';
|
|||||||
import { MarkdownEditor } from '@workspace/ui/custom-components/editor';
|
import { MarkdownEditor } from '@workspace/ui/custom-components/editor';
|
||||||
import { EnhancedInput } from '@workspace/ui/custom-components/enhanced-input';
|
import { EnhancedInput } from '@workspace/ui/custom-components/enhanced-input';
|
||||||
import { Icon } from '@workspace/ui/custom-components/icon';
|
import { Icon } from '@workspace/ui/custom-components/icon';
|
||||||
|
import { useTranslations } from 'next-intl';
|
||||||
import { useEffect, useState } from 'react';
|
import { useEffect, useState } from 'react';
|
||||||
import { useForm } from 'react-hook-form';
|
import { useForm } from 'react-hook-form';
|
||||||
import { toast } from 'sonner';
|
import { toast } from 'sonner';
|
||||||
import { z } from 'zod';
|
import { z } from 'zod';
|
||||||
|
|
||||||
const emailBroadcastSchema = z.object({
|
|
||||||
subject: z.string().min(1, 'Email subject cannot be empty'),
|
|
||||||
content: z.string().min(1, 'Email content cannot be empty'),
|
|
||||||
// Send settings
|
|
||||||
additional_emails: z
|
|
||||||
.string()
|
|
||||||
.optional()
|
|
||||||
.refine(
|
|
||||||
(value) => {
|
|
||||||
if (!value || value.trim() === '') return true;
|
|
||||||
const emails = value.split('\n').filter((email) => email.trim() !== '');
|
|
||||||
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
||||||
return emails.every((email) => emailRegex.test(email.trim()));
|
|
||||||
},
|
|
||||||
{
|
|
||||||
message: 'Please enter valid email addresses, one per line',
|
|
||||||
},
|
|
||||||
),
|
|
||||||
// Send time settings
|
|
||||||
scheduled_time: z.string().optional(),
|
|
||||||
user_filters: z.object({
|
|
||||||
subscription_status: z.string().optional(),
|
|
||||||
registration_date_from: z.string().optional(),
|
|
||||||
registration_date_to: z.string().optional(),
|
|
||||||
user_groups: z.array(z.string()).default([]),
|
|
||||||
}),
|
|
||||||
rate_limit: z.object({
|
|
||||||
email_interval_seconds: z
|
|
||||||
.number()
|
|
||||||
.min(1, 'Email interval (seconds) cannot be less than 1')
|
|
||||||
.default(1),
|
|
||||||
daily_limit: z.number().min(1, 'Daily limit must be at least 1').default(1000),
|
|
||||||
}),
|
|
||||||
});
|
|
||||||
|
|
||||||
type EmailBroadcastFormData = z.infer<typeof emailBroadcastSchema>;
|
|
||||||
|
|
||||||
export default function EmailBroadcastForm() {
|
export default function EmailBroadcastForm() {
|
||||||
|
const t = useTranslations('marketing');
|
||||||
|
|
||||||
|
// Define schema with internationalized error messages
|
||||||
|
const emailBroadcastSchema = z.object({
|
||||||
|
subject: z.string().min(1, t('subject') + ' ' + t('cannotBeEmpty')),
|
||||||
|
content: z.string().min(1, t('content') + ' ' + t('cannotBeEmpty')),
|
||||||
|
scope: z.string().default('all'),
|
||||||
|
register_start_time: z.string().optional(),
|
||||||
|
register_end_time: z.string().optional(),
|
||||||
|
additional: z
|
||||||
|
.string()
|
||||||
|
.optional()
|
||||||
|
.refine(
|
||||||
|
(value) => {
|
||||||
|
if (!value || value.trim() === '') return true;
|
||||||
|
const emails = value.split('\n').filter((email) => email.trim() !== '');
|
||||||
|
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
||||||
|
return emails.every((email) => emailRegex.test(email.trim()));
|
||||||
|
},
|
||||||
|
{
|
||||||
|
message: t('pleaseEnterValidEmailAddresses'),
|
||||||
|
},
|
||||||
|
),
|
||||||
|
scheduled: z.string().optional(),
|
||||||
|
interval: z.number().min(0.1, t('emailIntervalMinimum')).optional(),
|
||||||
|
limit: z.number().min(1, t('dailyLimit')).optional(),
|
||||||
|
});
|
||||||
|
|
||||||
|
type EmailBroadcastFormData = z.infer<typeof emailBroadcastSchema>;
|
||||||
const [open, setOpen] = useState(false);
|
const [open, setOpen] = useState(false);
|
||||||
const [loading, setLoading] = useState(false);
|
const [loading, setLoading] = useState(false);
|
||||||
const [estimatedRecipients, setEstimatedRecipients] = useState<{
|
const [estimatedRecipients, setEstimatedRecipients] = useState<{
|
||||||
@ -89,68 +83,71 @@ export default function EmailBroadcastForm() {
|
|||||||
defaultValues: {
|
defaultValues: {
|
||||||
subject: '',
|
subject: '',
|
||||||
content: '',
|
content: '',
|
||||||
additional_emails: '',
|
scope: 'all',
|
||||||
scheduled_time: '',
|
register_start_time: '',
|
||||||
user_filters: {
|
register_end_time: '',
|
||||||
subscription_status: 'all',
|
additional: '',
|
||||||
registration_date_from: '',
|
scheduled: '',
|
||||||
registration_date_to: '',
|
interval: 1,
|
||||||
user_groups: [],
|
limit: 1000,
|
||||||
},
|
|
||||||
rate_limit: {
|
|
||||||
email_interval_seconds: 1,
|
|
||||||
daily_limit: 1000,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
// Calculate recipient count
|
// Calculate recipient count
|
||||||
const calculateRecipients = () => {
|
const calculateRecipients = async () => {
|
||||||
const formData = form.getValues();
|
const formData = form.getValues();
|
||||||
|
|
||||||
// Simulate user data statistics (should call API in real implementation)
|
try {
|
||||||
let userCount = 0;
|
// Call API to get actual recipient count
|
||||||
|
const scope = formData.scope || 'all';
|
||||||
|
|
||||||
const sendingScope = formData.user_filters.subscription_status;
|
// Convert dates to timestamps if they exist
|
||||||
if (sendingScope === 'skip') {
|
let register_start_time: number = 0;
|
||||||
// Send only to additional emails
|
let register_end_time: number = 0;
|
||||||
userCount = 0;
|
|
||||||
} else {
|
|
||||||
let baseCount = 1500;
|
|
||||||
|
|
||||||
if (sendingScope === 'active') {
|
if (formData.register_start_time) {
|
||||||
baseCount = Math.floor(baseCount * 0.3); // 30% active subscription users
|
register_start_time = Math.floor(new Date(formData.register_start_time).getTime());
|
||||||
} else if (sendingScope === 'expired') {
|
|
||||||
baseCount = Math.floor(baseCount * 0.2); // 20% expired subscription users
|
|
||||||
} else if (sendingScope === 'none') {
|
|
||||||
baseCount = Math.floor(baseCount * 0.5); // 50% no subscription users
|
|
||||||
}
|
|
||||||
// If 'all' or empty, keep baseCount unchanged (all platform users)
|
|
||||||
|
|
||||||
// Date filter impact (simplified calculation)
|
|
||||||
if (
|
|
||||||
formData.user_filters.registration_date_from ||
|
|
||||||
formData.user_filters.registration_date_to
|
|
||||||
) {
|
|
||||||
baseCount = Math.floor(baseCount * 0.7); // Estimate about 70% after date filtering
|
|
||||||
}
|
}
|
||||||
|
|
||||||
userCount = baseCount;
|
if (formData.register_end_time) {
|
||||||
|
register_end_time = Math.floor(new Date(formData.register_end_time).getTime());
|
||||||
|
}
|
||||||
|
|
||||||
|
const response = await getPreSendEmailCount({
|
||||||
|
scope,
|
||||||
|
register_start_time,
|
||||||
|
register_end_time,
|
||||||
|
});
|
||||||
|
|
||||||
|
const userCount = response.data?.data?.count || 0;
|
||||||
|
|
||||||
|
// Calculate additional email count
|
||||||
|
const additionalEmails = formData.additional || '';
|
||||||
|
const additionalCount = additionalEmails
|
||||||
|
.split('\n')
|
||||||
|
.filter((email: string) => email.trim() !== '').length;
|
||||||
|
|
||||||
|
const total = userCount + additionalCount;
|
||||||
|
|
||||||
|
setEstimatedRecipients({
|
||||||
|
users: userCount,
|
||||||
|
additional: additionalCount,
|
||||||
|
total,
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Failed to get recipient count:', error);
|
||||||
|
// Set to 0 if API fails, don't use fallback simulation
|
||||||
|
const additionalEmails = formData.additional || '';
|
||||||
|
const additionalCount = additionalEmails
|
||||||
|
.split('\n')
|
||||||
|
.filter((email: string) => email.trim() !== '').length;
|
||||||
|
|
||||||
|
setEstimatedRecipients({
|
||||||
|
users: 0,
|
||||||
|
additional: additionalCount,
|
||||||
|
total: additionalCount,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Calculate additional email count
|
|
||||||
const additionalEmails = formData.additional_emails || '';
|
|
||||||
const additionalCount = additionalEmails
|
|
||||||
.split('\n')
|
|
||||||
.filter((email: string) => email.trim() !== '').length;
|
|
||||||
|
|
||||||
const total = userCount + additionalCount;
|
|
||||||
|
|
||||||
setEstimatedRecipients({
|
|
||||||
users: userCount,
|
|
||||||
additional: additionalCount,
|
|
||||||
total,
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Listen to form changes
|
// Listen to form changes
|
||||||
@ -158,42 +155,72 @@ export default function EmailBroadcastForm() {
|
|||||||
|
|
||||||
// Use useEffect to respond to form changes
|
// Use useEffect to respond to form changes
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
calculateRecipients();
|
const debounceTimer = setTimeout(() => {
|
||||||
|
calculateRecipients();
|
||||||
|
}, 500); // Add debounce to avoid too frequent API calls
|
||||||
|
|
||||||
|
return () => clearTimeout(debounceTimer);
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
}, [
|
}, [
|
||||||
watchedValues.user_filters?.subscription_status,
|
watchedValues.scope,
|
||||||
watchedValues.user_filters?.registration_date_from,
|
watchedValues.register_start_time,
|
||||||
watchedValues.user_filters?.registration_date_to,
|
watchedValues.register_end_time,
|
||||||
watchedValues.additional_emails,
|
watchedValues.additional,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const onSubmit = async (data: EmailBroadcastFormData) => {
|
const onSubmit = async (data: EmailBroadcastFormData) => {
|
||||||
setLoading(true);
|
setLoading(true);
|
||||||
try {
|
try {
|
||||||
// Validate scheduled send time
|
// Validate scheduled send time
|
||||||
if (data.scheduled_time && data.scheduled_time.trim() !== '') {
|
let scheduled: number | undefined;
|
||||||
const scheduledDate = new Date(data.scheduled_time);
|
if (data.scheduled && data.scheduled.trim() !== '') {
|
||||||
|
const scheduledDate = new Date(data.scheduled);
|
||||||
const now = new Date();
|
const now = new Date();
|
||||||
if (scheduledDate <= now) {
|
if (scheduledDate <= now) {
|
||||||
toast.error('Scheduled send time must be later than current time');
|
toast.error(t('scheduledSendTimeMustBeLater'));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
scheduled = Math.floor(scheduledDate.getTime());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Simulate API call
|
let register_start_time: number = 0;
|
||||||
await new Promise((resolve) => setTimeout(resolve, 1000));
|
let register_end_time: number = 0;
|
||||||
console.log('Email broadcast data:', data);
|
|
||||||
|
|
||||||
if (!data.scheduled_time || data.scheduled_time.trim() === '') {
|
if (data.register_start_time) {
|
||||||
toast.success('Email sent successfully');
|
register_start_time = Math.floor(new Date(data.register_start_time).getTime());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.register_end_time) {
|
||||||
|
register_end_time = Math.floor(new Date(data.register_end_time).getTime());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prepare API request data
|
||||||
|
const requestData: API.CreateBatchSendEmailTaskRequest = {
|
||||||
|
subject: data.subject,
|
||||||
|
content: data.content,
|
||||||
|
scope: data.scope,
|
||||||
|
register_start_time,
|
||||||
|
register_end_time,
|
||||||
|
additional: data.additional || undefined,
|
||||||
|
scheduled,
|
||||||
|
interval: data.interval ? data.interval * 1000 : undefined, // Convert seconds to milliseconds
|
||||||
|
limit: data.limit,
|
||||||
|
};
|
||||||
|
|
||||||
|
// Call API to create batch send email task
|
||||||
|
await createBatchSendEmailTask(requestData);
|
||||||
|
|
||||||
|
if (!data.scheduled || data.scheduled.trim() === '') {
|
||||||
|
toast.success(t('emailBroadcastTaskCreatedSuccessfully'));
|
||||||
} else {
|
} else {
|
||||||
toast.success('Email added to scheduled send queue');
|
toast.success(t('emailAddedToScheduledQueue'));
|
||||||
}
|
}
|
||||||
|
|
||||||
form.reset();
|
form.reset();
|
||||||
setOpen(false);
|
setOpen(false);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
toast.error('Send failed, please try again');
|
console.error('Email broadcast failed:', error);
|
||||||
|
toast.error(t('sendFailed'));
|
||||||
} finally {
|
} finally {
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
}
|
}
|
||||||
@ -208,8 +235,10 @@ export default function EmailBroadcastForm() {
|
|||||||
<Icon icon='mdi:email-send' className='text-primary h-5 w-5' />
|
<Icon icon='mdi:email-send' className='text-primary h-5 w-5' />
|
||||||
</div>
|
</div>
|
||||||
<div className='flex-1'>
|
<div className='flex-1'>
|
||||||
<p className='font-medium'>Email Broadcast</p>
|
<p className='font-medium'>{t('emailBroadcast')}</p>
|
||||||
<p className='text-muted-foreground text-sm'>Create new email broadcast campaign</p>
|
<p className='text-muted-foreground text-sm'>
|
||||||
|
{t('createNewEmailBroadcastCampaign')}
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<Icon icon='mdi:chevron-right' className='size-6' />
|
<Icon icon='mdi:chevron-right' className='size-6' />
|
||||||
@ -217,7 +246,7 @@ export default function EmailBroadcastForm() {
|
|||||||
</SheetTrigger>
|
</SheetTrigger>
|
||||||
<SheetContent className='w-[700px] max-w-full md:max-w-screen-lg'>
|
<SheetContent className='w-[700px] max-w-full md:max-w-screen-lg'>
|
||||||
<SheetHeader>
|
<SheetHeader>
|
||||||
<SheetTitle>Create Email Broadcast</SheetTitle>
|
<SheetTitle>{t('createBroadcast')}</SheetTitle>
|
||||||
</SheetHeader>
|
</SheetHeader>
|
||||||
<ScrollArea className='-mx-6 h-[calc(100dvh-48px-36px-36px-env(safe-area-inset-top))] px-6'>
|
<ScrollArea className='-mx-6 h-[calc(100dvh-48px-36px-36px-env(safe-area-inset-top))] px-6'>
|
||||||
<Form {...form}>
|
<Form {...form}>
|
||||||
@ -228,8 +257,8 @@ export default function EmailBroadcastForm() {
|
|||||||
>
|
>
|
||||||
<Tabs defaultValue='content' className='space-y-2'>
|
<Tabs defaultValue='content' className='space-y-2'>
|
||||||
<TabsList className='grid w-full grid-cols-2'>
|
<TabsList className='grid w-full grid-cols-2'>
|
||||||
<TabsTrigger value='content'>Email Content</TabsTrigger>
|
<TabsTrigger value='content'>{t('content')}</TabsTrigger>
|
||||||
<TabsTrigger value='settings'>Send Settings</TabsTrigger>
|
<TabsTrigger value='settings'>{t('sendSettings')}</TabsTrigger>
|
||||||
</TabsList>
|
</TabsList>
|
||||||
{/* Email Content Tab */}
|
{/* Email Content Tab */}
|
||||||
<TabsContent value='content' className='space-y-2'>
|
<TabsContent value='content' className='space-y-2'>
|
||||||
@ -238,9 +267,12 @@ export default function EmailBroadcastForm() {
|
|||||||
name='subject'
|
name='subject'
|
||||||
render={({ field }) => (
|
render={({ field }) => (
|
||||||
<FormItem>
|
<FormItem>
|
||||||
<FormLabel>Email Subject</FormLabel>
|
<FormLabel>{t('subject')}</FormLabel>
|
||||||
<FormControl>
|
<FormControl>
|
||||||
<Input placeholder='Please enter email subject' {...field} />
|
<Input
|
||||||
|
placeholder={`${t('pleaseEnter')} ${t('subject').toLowerCase()}`}
|
||||||
|
{...field}
|
||||||
|
/>
|
||||||
</FormControl>
|
</FormControl>
|
||||||
<FormMessage />
|
<FormMessage />
|
||||||
</FormItem>
|
</FormItem>
|
||||||
@ -252,7 +284,7 @@ export default function EmailBroadcastForm() {
|
|||||||
name='content'
|
name='content'
|
||||||
render={({ field }) => (
|
render={({ field }) => (
|
||||||
<FormItem>
|
<FormItem>
|
||||||
<FormLabel>Email Content</FormLabel>
|
<FormLabel>{t('content')}</FormLabel>
|
||||||
<FormControl>
|
<FormControl>
|
||||||
<MarkdownEditor
|
<MarkdownEditor
|
||||||
value={field.value}
|
value={field.value}
|
||||||
@ -261,9 +293,7 @@ export default function EmailBroadcastForm() {
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</FormControl>
|
</FormControl>
|
||||||
<FormDescription>
|
<FormDescription>{t('useMarkdownEditor')}</FormDescription>
|
||||||
Use Markdown editor to write email content with preview functionality
|
|
||||||
</FormDescription>
|
|
||||||
<FormMessage />
|
<FormMessage />
|
||||||
</FormItem>
|
</FormItem>
|
||||||
)}
|
)}
|
||||||
@ -276,32 +306,27 @@ export default function EmailBroadcastForm() {
|
|||||||
<div className='grid grid-cols-2 items-center gap-4'>
|
<div className='grid grid-cols-2 items-center gap-4'>
|
||||||
<FormField
|
<FormField
|
||||||
control={form.control}
|
control={form.control}
|
||||||
name='user_filters.subscription_status'
|
name='scope'
|
||||||
render={({ field }) => (
|
render={({ field }) => (
|
||||||
<FormItem>
|
<FormItem>
|
||||||
<FormLabel>Send Scope</FormLabel>
|
<FormLabel>{t('sendScope')}</FormLabel>
|
||||||
<Select onValueChange={field.onChange} value={field.value || 'all'}>
|
<Select onValueChange={field.onChange} value={field.value || 'all'}>
|
||||||
<FormControl>
|
<FormControl>
|
||||||
<SelectTrigger>
|
<SelectTrigger>
|
||||||
<SelectValue placeholder='Select send scope' />
|
<SelectValue placeholder={t('selectSendScope')} />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
</FormControl>
|
</FormControl>
|
||||||
<SelectContent>
|
<SelectContent>
|
||||||
<SelectItem value='all'>All platform users</SelectItem>
|
<SelectItem value='all'>{t('allUsers')}</SelectItem>
|
||||||
<SelectItem value='active'>Active subscription users only</SelectItem>
|
<SelectItem value='active'>{t('subscribedUsersOnly')}</SelectItem>
|
||||||
<SelectItem value='expired'>
|
<SelectItem value='expired'>
|
||||||
Expired subscription users only
|
{t('expiredSubscriptionUsersOnly')}
|
||||||
</SelectItem>
|
|
||||||
<SelectItem value='none'>No subscription users only</SelectItem>
|
|
||||||
<SelectItem value='skip'>
|
|
||||||
Additional emails only (skip platform users)
|
|
||||||
</SelectItem>
|
</SelectItem>
|
||||||
|
<SelectItem value='none'>{t('noSubscriptionUsersOnly')}</SelectItem>
|
||||||
|
<SelectItem value='skip'>{t('specificUsersOnly')}</SelectItem>
|
||||||
</SelectContent>
|
</SelectContent>
|
||||||
</Select>
|
</Select>
|
||||||
<FormDescription>
|
<FormDescription>{t('sendScopeDescription')}</FormDescription>
|
||||||
Choose the user scope for email sending. Select “Additional emails
|
|
||||||
only” to send only to the email addresses filled below
|
|
||||||
</FormDescription>
|
|
||||||
</FormItem>
|
</FormItem>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
@ -309,12 +334,12 @@ export default function EmailBroadcastForm() {
|
|||||||
{/* Estimated recipients info */}
|
{/* Estimated recipients info */}
|
||||||
<div className='flex justify-end'>
|
<div className='flex justify-end'>
|
||||||
<div className='border-l-primary bg-primary/10 border-l-4 px-4 py-3 text-sm'>
|
<div className='border-l-primary bg-primary/10 border-l-4 px-4 py-3 text-sm'>
|
||||||
<span className='text-muted-foreground'>Estimated recipients: </span>
|
<span className='text-muted-foreground'>{t('estimatedRecipients')}: </span>
|
||||||
<span className='text-primary text-lg font-medium'>
|
<span className='text-primary text-lg font-medium'>
|
||||||
{estimatedRecipients.total}
|
{estimatedRecipients.total}
|
||||||
</span>
|
</span>
|
||||||
<span className='text-muted-foreground ml-2 text-xs'>
|
<span className='text-muted-foreground ml-2 text-xs'>
|
||||||
(users: {estimatedRecipients.users}, additional:{' '}
|
({t('users')}: {estimatedRecipients.users}, {t('additional')}:{' '}
|
||||||
{estimatedRecipients.additional})
|
{estimatedRecipients.additional})
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
@ -324,41 +349,37 @@ export default function EmailBroadcastForm() {
|
|||||||
<div className='grid grid-cols-2 gap-4'>
|
<div className='grid grid-cols-2 gap-4'>
|
||||||
<FormField
|
<FormField
|
||||||
control={form.control}
|
control={form.control}
|
||||||
name='user_filters.registration_date_from'
|
name='register_start_time'
|
||||||
render={({ field }) => (
|
render={({ field }) => (
|
||||||
<FormItem>
|
<FormItem>
|
||||||
<FormLabel>Registration Start Date</FormLabel>
|
<FormLabel>{t('registrationStartDate')}</FormLabel>
|
||||||
<FormControl>
|
<FormControl>
|
||||||
<EnhancedInput
|
<EnhancedInput
|
||||||
type='datetime-local'
|
type='datetime-local'
|
||||||
disabled={form.watch('user_filters.subscription_status') === 'skip'}
|
disabled={form.watch('scope') === 'skip'}
|
||||||
value={field.value}
|
value={field.value}
|
||||||
onValueChange={field.onChange}
|
onValueChange={field.onChange}
|
||||||
/>
|
/>
|
||||||
</FormControl>
|
</FormControl>
|
||||||
<FormDescription>
|
<FormDescription>{t('includeUsersRegisteredAfter')}</FormDescription>
|
||||||
Include users registered on or after this date
|
|
||||||
</FormDescription>
|
|
||||||
</FormItem>
|
</FormItem>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
<FormField
|
<FormField
|
||||||
control={form.control}
|
control={form.control}
|
||||||
name='user_filters.registration_date_to'
|
name='register_end_time'
|
||||||
render={({ field }) => (
|
render={({ field }) => (
|
||||||
<FormItem>
|
<FormItem>
|
||||||
<FormLabel>Registration End Date</FormLabel>
|
<FormLabel>{t('registrationEndDate')}</FormLabel>
|
||||||
<FormControl>
|
<FormControl>
|
||||||
<EnhancedInput
|
<EnhancedInput
|
||||||
type='datetime-local'
|
type='datetime-local'
|
||||||
disabled={form.watch('user_filters.subscription_status') === 'skip'}
|
disabled={form.watch('scope') === 'skip'}
|
||||||
value={field.value}
|
value={field.value}
|
||||||
onValueChange={field.onChange}
|
onValueChange={field.onChange}
|
||||||
/>
|
/>
|
||||||
</FormControl>
|
</FormControl>
|
||||||
<FormDescription>
|
<FormDescription>{t('includeUsersRegisteredBefore')}</FormDescription>
|
||||||
Include users registered on or before this date
|
|
||||||
</FormDescription>
|
|
||||||
</FormItem>
|
</FormItem>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
@ -367,21 +388,18 @@ export default function EmailBroadcastForm() {
|
|||||||
{/* Additional recipients */}
|
{/* Additional recipients */}
|
||||||
<FormField
|
<FormField
|
||||||
control={form.control}
|
control={form.control}
|
||||||
name='additional_emails'
|
name='additional'
|
||||||
render={({ field }) => (
|
render={({ field }) => (
|
||||||
<FormItem>
|
<FormItem>
|
||||||
<FormLabel>Additional Recipient Emails</FormLabel>
|
<FormLabel>{t('additionalRecipientEmails')}</FormLabel>
|
||||||
<FormControl>
|
<FormControl>
|
||||||
<Textarea
|
<Textarea
|
||||||
placeholder={`Please enter additional recipient emails, one per line, for example:\nexample1@domain.com\nexample2@domain.com\nexample3@domain.com`}
|
placeholder={`${t('pleaseEnter')}${t('additionalRecipientEmails').toLowerCase()},${t('onePerLine')},for example:\nexample1@domain.com\nexample2@domain.com\nexample3@domain.com`}
|
||||||
className='min-h-[120px] font-mono text-sm'
|
className='min-h-[120px] font-mono text-sm'
|
||||||
{...field}
|
{...field}
|
||||||
/>
|
/>
|
||||||
</FormControl>
|
</FormControl>
|
||||||
<FormDescription>
|
<FormDescription>{t('additionalRecipientsDescription')}</FormDescription>
|
||||||
These emails will receive the email additionally, not affected by the user
|
|
||||||
filter conditions above
|
|
||||||
</FormDescription>
|
|
||||||
<FormMessage />
|
<FormMessage />
|
||||||
</FormItem>
|
</FormItem>
|
||||||
)}
|
)}
|
||||||
@ -390,21 +408,19 @@ export default function EmailBroadcastForm() {
|
|||||||
{/* Send time settings */}
|
{/* Send time settings */}
|
||||||
<FormField
|
<FormField
|
||||||
control={form.control}
|
control={form.control}
|
||||||
name='scheduled_time'
|
name='scheduled'
|
||||||
render={({ field }) => (
|
render={({ field }) => (
|
||||||
<FormItem>
|
<FormItem>
|
||||||
<FormLabel>Scheduled Send</FormLabel>
|
<FormLabel>{t('scheduledSend')}</FormLabel>
|
||||||
<FormControl>
|
<FormControl>
|
||||||
<EnhancedInput
|
<EnhancedInput
|
||||||
type='datetime-local'
|
type='datetime-local'
|
||||||
placeholder='Leave empty for immediate send'
|
placeholder={t('leaveEmptyForImmediateSend')}
|
||||||
value={field.value}
|
value={field.value}
|
||||||
onValueChange={field.onChange}
|
onValueChange={field.onChange}
|
||||||
/>
|
/>
|
||||||
</FormControl>
|
</FormControl>
|
||||||
<FormDescription>
|
<FormDescription>{t('selectSendTime')}</FormDescription>
|
||||||
Select send time, leave empty for immediate send
|
|
||||||
</FormDescription>
|
|
||||||
<FormMessage />
|
<FormMessage />
|
||||||
</FormItem>
|
</FormItem>
|
||||||
)}
|
)}
|
||||||
@ -414,43 +430,42 @@ export default function EmailBroadcastForm() {
|
|||||||
<div className='grid grid-cols-2 gap-4'>
|
<div className='grid grid-cols-2 gap-4'>
|
||||||
<FormField
|
<FormField
|
||||||
control={form.control}
|
control={form.control}
|
||||||
name='rate_limit.email_interval_seconds'
|
name='interval'
|
||||||
render={({ field }) => (
|
render={({ field }) => (
|
||||||
<FormItem>
|
<FormItem>
|
||||||
<FormLabel>Email Interval (seconds)</FormLabel>
|
<FormLabel>{t('emailInterval')}</FormLabel>
|
||||||
<FormControl>
|
<FormControl>
|
||||||
<Input
|
<Input
|
||||||
type='number'
|
type='number'
|
||||||
min={0}
|
min={1}
|
||||||
step={0.1}
|
step={0.1}
|
||||||
placeholder='1'
|
placeholder='1'
|
||||||
{...field}
|
{...field}
|
||||||
onChange={(e) => field.onChange(parseFloat(e.target.value) || 1)}
|
onChange={(e) => field.onChange(parseFloat(e.target.value) || 1)}
|
||||||
/>
|
/>
|
||||||
</FormControl>
|
</FormControl>
|
||||||
<FormDescription>Interval time between each email</FormDescription>
|
<FormDescription>{t('intervalTimeBetweenEmails')}</FormDescription>
|
||||||
<FormMessage />
|
<FormMessage />
|
||||||
</FormItem>
|
</FormItem>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
<FormField
|
<FormField
|
||||||
control={form.control}
|
control={form.control}
|
||||||
name='rate_limit.daily_limit'
|
name='limit'
|
||||||
render={({ field }) => (
|
render={({ field }) => (
|
||||||
<FormItem>
|
<FormItem>
|
||||||
<FormLabel>Daily Send Limit</FormLabel>
|
<FormLabel>{t('dailySendLimit')}</FormLabel>
|
||||||
<FormControl>
|
<FormControl>
|
||||||
<Input
|
<Input
|
||||||
type='number'
|
type='number'
|
||||||
min={1}
|
min={1}
|
||||||
|
step={1}
|
||||||
placeholder='1000'
|
placeholder='1000'
|
||||||
{...field}
|
{...field}
|
||||||
onChange={(e) => field.onChange(parseInt(e.target.value) || 1000)}
|
onChange={(e) => field.onChange(parseInt(e.target.value) || 1000)}
|
||||||
/>
|
/>
|
||||||
</FormControl>
|
</FormControl>
|
||||||
<FormDescription>
|
<FormDescription>{t('maximumNumberPerDay')}</FormDescription>
|
||||||
Maximum number of emails to send per day
|
|
||||||
</FormDescription>
|
|
||||||
<FormMessage />
|
<FormMessage />
|
||||||
</FormItem>
|
</FormItem>
|
||||||
)}
|
)}
|
||||||
@ -463,15 +478,15 @@ export default function EmailBroadcastForm() {
|
|||||||
</ScrollArea>
|
</ScrollArea>
|
||||||
<SheetFooter className='flex flex-row items-center justify-end gap-2 pt-3'>
|
<SheetFooter className='flex flex-row items-center justify-end gap-2 pt-3'>
|
||||||
<Button variant='outline' onClick={() => setOpen(false)}>
|
<Button variant='outline' onClick={() => setOpen(false)}>
|
||||||
Cancel
|
{t('cancel')}
|
||||||
</Button>
|
</Button>
|
||||||
<Button type='submit' form='broadcast-form' disabled={loading}>
|
<Button type='submit' form='broadcast-form' disabled={loading}>
|
||||||
{loading && <Icon icon='mdi:loading' className='mr-2 h-4 w-4 animate-spin' />}
|
{loading && <Icon icon='mdi:loading' className='mr-2 h-4 w-4 animate-spin' />}
|
||||||
{loading
|
{loading
|
||||||
? 'Processing...'
|
? t('processing')
|
||||||
: !form.watch('scheduled_time') || form.watch('scheduled_time')?.trim() === ''
|
: !form.watch('scheduled') || form.watch('scheduled')?.trim() === ''
|
||||||
? 'Send Now'
|
? t('sendNow')
|
||||||
: 'Schedule Send'}
|
: t('scheduleSend')}
|
||||||
</Button>
|
</Button>
|
||||||
</SheetFooter>
|
</SheetFooter>
|
||||||
</SheetContent>
|
</SheetContent>
|
||||||
|
|||||||
@ -1,225 +0,0 @@
|
|||||||
'use client';
|
|
||||||
|
|
||||||
import { ProTable, ProTableActions } from '@/components/pro-table';
|
|
||||||
import { Badge } from '@workspace/ui/components/badge';
|
|
||||||
import { Button } from '@workspace/ui/components/button';
|
|
||||||
import { ScrollArea } from '@workspace/ui/components/scroll-area';
|
|
||||||
import {
|
|
||||||
Sheet,
|
|
||||||
SheetContent,
|
|
||||||
SheetHeader,
|
|
||||||
SheetTitle,
|
|
||||||
SheetTrigger,
|
|
||||||
} from '@workspace/ui/components/sheet';
|
|
||||||
import { Icon } from '@workspace/ui/custom-components/icon';
|
|
||||||
import { formatDate } from '@workspace/ui/utils';
|
|
||||||
import { useTranslations } from 'next-intl';
|
|
||||||
import { useRef, useState } from 'react';
|
|
||||||
|
|
||||||
interface EmailLog extends Record<string, unknown> {
|
|
||||||
id: number;
|
|
||||||
subject: string;
|
|
||||||
recipient_email: string;
|
|
||||||
status: 'pending' | 'sent' | 'failed';
|
|
||||||
sent_at?: string;
|
|
||||||
error_message?: string;
|
|
||||||
broadcast_id: number;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface GetEmailLogsParams extends Record<string, unknown> {
|
|
||||||
page: number;
|
|
||||||
size: number;
|
|
||||||
status?: string;
|
|
||||||
search?: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Mock API function
|
|
||||||
const getEmailLogs = async (params: GetEmailLogsParams) => {
|
|
||||||
// Simulate API call
|
|
||||||
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
||||||
|
|
||||||
// Mock data
|
|
||||||
const mockData: EmailLog[] = [
|
|
||||||
{
|
|
||||||
id: 1,
|
|
||||||
subject: 'New Feature Release Notification',
|
|
||||||
recipient_email: 'user1@example.com',
|
|
||||||
status: 'sent',
|
|
||||||
sent_at: '2024-01-15T10:05:00Z',
|
|
||||||
broadcast_id: 1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 2,
|
|
||||||
subject: 'New Feature Release Notification',
|
|
||||||
recipient_email: 'user2@example.com',
|
|
||||||
status: 'sent',
|
|
||||||
sent_at: '2024-01-15T10:05:30Z',
|
|
||||||
broadcast_id: 1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 3,
|
|
||||||
subject: 'New Feature Release Notification',
|
|
||||||
recipient_email: 'user3@example.com',
|
|
||||||
status: 'failed',
|
|
||||||
error_message: 'Invalid email address',
|
|
||||||
broadcast_id: 1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 4,
|
|
||||||
subject: 'System Maintenance Notice',
|
|
||||||
recipient_email: 'user4@example.com',
|
|
||||||
status: 'sent',
|
|
||||||
sent_at: '2024-01-14T15:35:00Z',
|
|
||||||
broadcast_id: 2,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 5,
|
|
||||||
subject: 'System Maintenance Notice',
|
|
||||||
recipient_email: 'user5@example.com',
|
|
||||||
status: 'pending',
|
|
||||||
broadcast_id: 2,
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
return {
|
|
||||||
data: {
|
|
||||||
data: {
|
|
||||||
list: mockData,
|
|
||||||
total: mockData.length,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
export default function BroadcastLogsTable() {
|
|
||||||
const t = useTranslations('marketing');
|
|
||||||
const [open, setOpen] = useState(false);
|
|
||||||
const ref = useRef<ProTableActions>(null);
|
|
||||||
|
|
||||||
const getStatusBadge = (status: string) => {
|
|
||||||
const statusMap = {
|
|
||||||
pending: { variant: 'secondary' as const, label: 'Pending' },
|
|
||||||
sent: { variant: 'default' as const, label: 'Sent' },
|
|
||||||
failed: { variant: 'destructive' as const, label: 'Failed' },
|
|
||||||
};
|
|
||||||
|
|
||||||
const statusInfo = statusMap[status as keyof typeof statusMap] || statusMap.pending;
|
|
||||||
return <Badge variant={statusInfo.variant}>{statusInfo.label}</Badge>;
|
|
||||||
};
|
|
||||||
|
|
||||||
return (
|
|
||||||
<Sheet open={open} onOpenChange={setOpen}>
|
|
||||||
<SheetTrigger asChild>
|
|
||||||
<div className='flex cursor-pointer items-center justify-between transition-colors'>
|
|
||||||
<div className='flex items-center gap-3'>
|
|
||||||
<div className='bg-primary/10 flex h-10 w-10 items-center justify-center rounded-lg'>
|
|
||||||
<Icon icon='mdi:email-newsletter' className='text-primary h-5 w-5' />
|
|
||||||
</div>
|
|
||||||
<div className='flex-1'>
|
|
||||||
<p className='font-medium'>Broadcast Logs</p>
|
|
||||||
<p className='text-muted-foreground text-sm'>
|
|
||||||
View email send records and detailed status
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<Icon icon='mdi:chevron-right' className='size-6' />
|
|
||||||
</div>
|
|
||||||
</SheetTrigger>
|
|
||||||
<SheetContent className='w-[90vw] max-w-full md:max-w-screen-xl'>
|
|
||||||
<SheetHeader>
|
|
||||||
<SheetTitle>Broadcast Logs</SheetTitle>
|
|
||||||
</SheetHeader>
|
|
||||||
<ScrollArea className='-mx-6 h-[calc(100dvh-48px-36px-env(safe-area-inset-top))] px-6'>
|
|
||||||
<div className='pt-4'>
|
|
||||||
<ProTable<EmailLog, GetEmailLogsParams>
|
|
||||||
action={ref}
|
|
||||||
columns={[
|
|
||||||
{
|
|
||||||
accessorKey: 'id',
|
|
||||||
header: 'ID',
|
|
||||||
size: 80,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
accessorKey: 'subject',
|
|
||||||
header: 'Subject',
|
|
||||||
size: 200,
|
|
||||||
cell: ({ row }) => (
|
|
||||||
<div
|
|
||||||
className='max-w-[200px] truncate'
|
|
||||||
title={row.getValue('subject') as string}
|
|
||||||
>
|
|
||||||
{row.getValue('subject') as string}
|
|
||||||
</div>
|
|
||||||
),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
accessorKey: 'recipient_email',
|
|
||||||
header: 'Recipient Email',
|
|
||||||
size: 200,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
accessorKey: 'status',
|
|
||||||
header: 'Status',
|
|
||||||
size: 100,
|
|
||||||
cell: ({ row }) => getStatusBadge(row.getValue('status') as string),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
accessorKey: 'sent_at',
|
|
||||||
header: 'Sent At',
|
|
||||||
size: 150,
|
|
||||||
cell: ({ row }) => {
|
|
||||||
const sentAt = row.getValue('sent_at') as string;
|
|
||||||
return sentAt ? formatDate(new Date(sentAt)) : '--';
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
accessorKey: 'error_message',
|
|
||||||
header: 'Error Message',
|
|
||||||
size: 200,
|
|
||||||
cell: ({ row }) => {
|
|
||||||
const error = row.getValue('error_message') as string;
|
|
||||||
return error ? <span className='text-sm text-red-600'>{error}</span> : '--';
|
|
||||||
},
|
|
||||||
},
|
|
||||||
]}
|
|
||||||
request={async (pagination, filter) => {
|
|
||||||
const { data } = await getEmailLogs({
|
|
||||||
...pagination,
|
|
||||||
...filter,
|
|
||||||
});
|
|
||||||
return {
|
|
||||||
list: data.data?.list || [],
|
|
||||||
total: data.data?.total || 0,
|
|
||||||
};
|
|
||||||
}}
|
|
||||||
params={[
|
|
||||||
{
|
|
||||||
key: 'status',
|
|
||||||
placeholder: 'Status',
|
|
||||||
options: [
|
|
||||||
{ label: 'Pending', value: 'pending' },
|
|
||||||
{ label: 'Sent', value: 'sent' },
|
|
||||||
{ label: 'Failed', value: 'failed' },
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: 'search',
|
|
||||||
placeholder: 'Recipient Email',
|
|
||||||
},
|
|
||||||
]}
|
|
||||||
actions={{
|
|
||||||
render: (row) => {
|
|
||||||
return [
|
|
||||||
<Button key='view' variant='outline' size='sm'>
|
|
||||||
View
|
|
||||||
</Button>,
|
|
||||||
];
|
|
||||||
},
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</ScrollArea>
|
|
||||||
</SheetContent>
|
|
||||||
</Sheet>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
302
apps/admin/app/dashboard/marketing/email/task-manager.tsx
Normal file
302
apps/admin/app/dashboard/marketing/email/task-manager.tsx
Normal file
@ -0,0 +1,302 @@
|
|||||||
|
'use client';
|
||||||
|
|
||||||
|
import { ProTable } from '@/components/pro-table';
|
||||||
|
import {
|
||||||
|
getBatchSendEmailTaskList,
|
||||||
|
getBatchSendEmailTaskStatus,
|
||||||
|
stopBatchSendEmailTask,
|
||||||
|
} from '@/services/admin/marketing';
|
||||||
|
import { Badge } from '@workspace/ui/components/badge';
|
||||||
|
import { Button } from '@workspace/ui/components/button';
|
||||||
|
import {
|
||||||
|
Dialog,
|
||||||
|
DialogContent,
|
||||||
|
DialogHeader,
|
||||||
|
DialogTitle,
|
||||||
|
DialogTrigger,
|
||||||
|
} from '@workspace/ui/components/dialog';
|
||||||
|
import { ScrollArea } from '@workspace/ui/components/scroll-area';
|
||||||
|
import {
|
||||||
|
Sheet,
|
||||||
|
SheetContent,
|
||||||
|
SheetHeader,
|
||||||
|
SheetTitle,
|
||||||
|
SheetTrigger,
|
||||||
|
} from '@workspace/ui/components/sheet';
|
||||||
|
import { Icon } from '@workspace/ui/custom-components/icon';
|
||||||
|
import { formatDate } from '@workspace/ui/utils';
|
||||||
|
import { useTranslations } from 'next-intl';
|
||||||
|
import { useState } from 'react';
|
||||||
|
import { toast } from 'sonner';
|
||||||
|
|
||||||
|
export default function EmailTaskManager() {
|
||||||
|
const t = useTranslations('marketing');
|
||||||
|
const [refreshing, setRefreshing] = useState<Record<number, boolean>>({});
|
||||||
|
const [selectedTask, setSelectedTask] = useState<API.BatchSendEmailTask | null>(null);
|
||||||
|
|
||||||
|
// Get task status
|
||||||
|
const refreshTaskStatus = async (taskId: number) => {
|
||||||
|
setRefreshing((prev) => ({ ...prev, [taskId]: true }));
|
||||||
|
try {
|
||||||
|
const response = await getBatchSendEmailTaskStatus({
|
||||||
|
id: taskId,
|
||||||
|
});
|
||||||
|
|
||||||
|
const taskStatus = response.data?.data;
|
||||||
|
if (taskStatus) {
|
||||||
|
// Just show success message, ProTable will auto-refresh
|
||||||
|
toast.success(t('taskStatusRefreshed'));
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Failed to refresh task status:', error);
|
||||||
|
toast.error(t('failedToRefreshTaskStatus'));
|
||||||
|
} finally {
|
||||||
|
setRefreshing((prev) => ({ ...prev, [taskId]: false }));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Stop task
|
||||||
|
const stopTask = async (taskId: number) => {
|
||||||
|
try {
|
||||||
|
await stopBatchSendEmailTask({
|
||||||
|
id: taskId,
|
||||||
|
});
|
||||||
|
|
||||||
|
toast.success(t('taskStoppedSuccessfully'));
|
||||||
|
await refreshTaskStatus(taskId);
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Failed to stop task:', error);
|
||||||
|
toast.error(t('failedToStopTask'));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const getStatusBadge = (status: number) => {
|
||||||
|
const statusConfig = {
|
||||||
|
0: { label: t('notStarted'), variant: 'secondary' as const },
|
||||||
|
1: { label: t('inProgress'), variant: 'default' as const },
|
||||||
|
2: { label: t('completed'), variant: 'default' as const },
|
||||||
|
};
|
||||||
|
|
||||||
|
const config = statusConfig[status as keyof typeof statusConfig] || {
|
||||||
|
label: `${t('status')} ${status}`,
|
||||||
|
variant: 'secondary' as const,
|
||||||
|
};
|
||||||
|
|
||||||
|
return <Badge variant={config.variant}>{config.label}</Badge>;
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Sheet>
|
||||||
|
<SheetTrigger asChild>
|
||||||
|
<div className='flex cursor-pointer items-center justify-between transition-colors'>
|
||||||
|
<div className='flex items-center gap-3'>
|
||||||
|
<div className='bg-primary/10 flex h-10 w-10 items-center justify-center rounded-lg'>
|
||||||
|
<Icon icon='mdi:email-multiple' className='text-primary h-5 w-5' />
|
||||||
|
</div>
|
||||||
|
<div className='flex-1'>
|
||||||
|
<p className='font-medium'>{t('emailTaskManager')}</p>
|
||||||
|
<p className='text-muted-foreground text-sm'>
|
||||||
|
{t('viewAndManageEmailBroadcastTasks')}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<Icon icon='mdi:chevron-right' className='size-6' />
|
||||||
|
</div>
|
||||||
|
</SheetTrigger>
|
||||||
|
<SheetContent className='w-[1000px] max-w-full md:max-w-screen-lg'>
|
||||||
|
<SheetHeader>
|
||||||
|
<SheetTitle>{t('emailBroadcastTasks')}</SheetTitle>
|
||||||
|
</SheetHeader>
|
||||||
|
<ScrollArea className='-mx-6 h-[calc(100dvh-48px-36px-env(safe-area-inset-top))] px-6'>
|
||||||
|
<div className='mt-4 space-y-4'>
|
||||||
|
<ProTable<API.BatchSendEmailTask, API.GetBatchSendEmailTaskListParams>
|
||||||
|
columns={[
|
||||||
|
{
|
||||||
|
accessorKey: 'subject',
|
||||||
|
header: t('subject'),
|
||||||
|
size: 200,
|
||||||
|
cell: ({ row }) => (
|
||||||
|
<div
|
||||||
|
className='max-w-[200px] truncate font-medium'
|
||||||
|
title={row.getValue('subject') as string}
|
||||||
|
>
|
||||||
|
{row.getValue('subject') as string}
|
||||||
|
</div>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
accessorKey: 'scope',
|
||||||
|
header: t('recipientType'),
|
||||||
|
size: 120,
|
||||||
|
cell: ({ row }) => {
|
||||||
|
const scope = row.getValue('scope') as string;
|
||||||
|
const scopeLabels = {
|
||||||
|
all: t('allUsers'),
|
||||||
|
active: t('subscribedUsers'),
|
||||||
|
expired: t('expiredUsers'),
|
||||||
|
none: t('nonSubscribers'),
|
||||||
|
skip: t('specificUsers'),
|
||||||
|
};
|
||||||
|
return scopeLabels[scope as keyof typeof scopeLabels] || scope;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
accessorKey: 'status',
|
||||||
|
header: t('status'),
|
||||||
|
size: 100,
|
||||||
|
cell: ({ row }) => getStatusBadge(row.getValue('status') as number),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
accessorKey: 'progress',
|
||||||
|
header: t('progress'),
|
||||||
|
size: 150,
|
||||||
|
cell: ({ row }) => {
|
||||||
|
const task = row.original as API.BatchSendEmailTask;
|
||||||
|
const progress = task.total > 0 ? (task.current / task.total) * 100 : 0;
|
||||||
|
return (
|
||||||
|
<div className='space-y-1'>
|
||||||
|
<div className='flex justify-between text-sm'>
|
||||||
|
<span>
|
||||||
|
{task.current} / {task.total}
|
||||||
|
</span>
|
||||||
|
<span>{progress.toFixed(1)}%</span>
|
||||||
|
</div>
|
||||||
|
<div className='bg-muted h-2 overflow-hidden rounded-full'>
|
||||||
|
<div
|
||||||
|
className='bg-primary h-full transition-all duration-300'
|
||||||
|
style={{ width: `${progress}%` }}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
accessorKey: 'created_at',
|
||||||
|
header: t('createdAt'),
|
||||||
|
size: 150,
|
||||||
|
cell: ({ row }) => {
|
||||||
|
const createdAt = row.getValue('created_at') as number;
|
||||||
|
return formatDate(createdAt);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
accessorKey: 'scheduled',
|
||||||
|
header: t('sendTime'),
|
||||||
|
size: 150,
|
||||||
|
cell: ({ row }) => {
|
||||||
|
const scheduled = row.getValue('scheduled') as number;
|
||||||
|
return scheduled && scheduled > 0 ? formatDate(scheduled) : '--';
|
||||||
|
},
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
request={async (pagination, filters) => {
|
||||||
|
const response = await getBatchSendEmailTaskList({
|
||||||
|
...filters,
|
||||||
|
page: pagination.page,
|
||||||
|
size: pagination.size,
|
||||||
|
});
|
||||||
|
return {
|
||||||
|
list: response.data?.data?.list || [],
|
||||||
|
total: response.data?.data?.total || 0,
|
||||||
|
};
|
||||||
|
}}
|
||||||
|
params={[
|
||||||
|
{
|
||||||
|
key: 'status',
|
||||||
|
placeholder: t('status'),
|
||||||
|
options: [
|
||||||
|
{ label: t('notStarted'), value: '0' },
|
||||||
|
{ label: t('inProgress'), value: '1' },
|
||||||
|
{ label: t('completed'), value: '2' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'scope',
|
||||||
|
placeholder: t('sendScope'),
|
||||||
|
options: [
|
||||||
|
{ label: t('allUsers'), value: 'all' },
|
||||||
|
{ label: t('subscribedUsers'), value: 'active' },
|
||||||
|
{ label: t('expiredUsers'), value: 'expired' },
|
||||||
|
{ label: t('nonSubscribers'), value: 'none' },
|
||||||
|
{ label: t('specificUsers'), value: 'skip' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
actions={{
|
||||||
|
render: (row) => {
|
||||||
|
return [
|
||||||
|
<Dialog key='view-content'>
|
||||||
|
<DialogTrigger asChild>
|
||||||
|
<Button
|
||||||
|
variant='outline'
|
||||||
|
size='icon'
|
||||||
|
onClick={() => setSelectedTask(row as API.BatchSendEmailTask)}
|
||||||
|
>
|
||||||
|
<Icon icon='mdi:eye' />
|
||||||
|
</Button>
|
||||||
|
</DialogTrigger>
|
||||||
|
<DialogContent className='max-h-[80vh] max-w-4xl'>
|
||||||
|
<DialogHeader>
|
||||||
|
<DialogTitle>{t('emailContent')}</DialogTitle>
|
||||||
|
</DialogHeader>
|
||||||
|
<ScrollArea className='h-[60vh] pr-4'>
|
||||||
|
{selectedTask && (
|
||||||
|
<div className='space-y-4'>
|
||||||
|
<div>
|
||||||
|
<h4 className='text-muted-foreground mb-2 text-sm font-medium'>
|
||||||
|
{t('subject')}
|
||||||
|
</h4>
|
||||||
|
<p className='font-medium'>{selectedTask.subject}</p>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h4 className='text-muted-foreground mb-2 text-sm font-medium'>
|
||||||
|
{t('content')}
|
||||||
|
</h4>
|
||||||
|
<div
|
||||||
|
className='prose prose-sm max-w-none'
|
||||||
|
dangerouslySetInnerHTML={{ __html: selectedTask.content }}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
{selectedTask.additional && (
|
||||||
|
<div>
|
||||||
|
<h4 className='text-muted-foreground mb-2 text-sm font-medium'>
|
||||||
|
{t('additionalRecipients')}
|
||||||
|
</h4>
|
||||||
|
<p className='text-sm'>{selectedTask.additional}</p>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</ScrollArea>
|
||||||
|
</DialogContent>
|
||||||
|
</Dialog>,
|
||||||
|
<Button
|
||||||
|
key='refresh'
|
||||||
|
variant='outline'
|
||||||
|
size='icon'
|
||||||
|
onClick={() => refreshTaskStatus(row.id)}
|
||||||
|
disabled={refreshing[row.id]}
|
||||||
|
>
|
||||||
|
{refreshing[row.id] && (
|
||||||
|
<Icon icon='mdi:loading' className='mr-2 h-3 w-3 animate-spin' />
|
||||||
|
)}
|
||||||
|
<Icon icon='mdi:refresh' className='h-3 w-3' />
|
||||||
|
</Button>,
|
||||||
|
...([0, 1].includes(row.status)
|
||||||
|
? [
|
||||||
|
<Button key='stop' variant='destructive' onClick={() => stopTask(row.id)}>
|
||||||
|
{t('stop')}
|
||||||
|
</Button>,
|
||||||
|
]
|
||||||
|
: []),
|
||||||
|
];
|
||||||
|
},
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</ScrollArea>
|
||||||
|
</SheetContent>
|
||||||
|
</Sheet>
|
||||||
|
);
|
||||||
|
}
|
||||||
@ -3,15 +3,15 @@
|
|||||||
import { Table, TableBody, TableCell, TableRow } from '@workspace/ui/components/table';
|
import { Table, TableBody, TableCell, TableRow } from '@workspace/ui/components/table';
|
||||||
import { useTranslations } from 'next-intl';
|
import { useTranslations } from 'next-intl';
|
||||||
import EmailBroadcastForm from './email/broadcast-form';
|
import EmailBroadcastForm from './email/broadcast-form';
|
||||||
import BroadcastLogsTable from './email/logs-table';
|
import EmailTaskManager from './email/task-manager';
|
||||||
|
|
||||||
export default function MarketingPage() {
|
export default function MarketingPage() {
|
||||||
const t = useTranslations('marketing');
|
const t = useTranslations('marketing');
|
||||||
|
|
||||||
const formSections = [
|
const formSections = [
|
||||||
{
|
{
|
||||||
title: 'Email Marketing',
|
title: t('emailMarketing'),
|
||||||
forms: [{ component: EmailBroadcastForm }, { component: BroadcastLogsTable }],
|
forms: [{ component: EmailBroadcastForm }, { component: EmailTaskManager }],
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
97
apps/admin/locales/cs-CZ/marketing.json
Normal file
97
apps/admin/locales/cs-CZ/marketing.json
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
{
|
||||||
|
"additional": "Další",
|
||||||
|
"additionalRecipientEmails": "Další e-mailové adresy příjemců",
|
||||||
|
"additionalRecipients": "Další příjemci",
|
||||||
|
"additionalRecipientsDescription": "Tyto e-maily obdrží vysílání kromě uživatelského filtru výše",
|
||||||
|
"allUsers": "Všichni uživatelé",
|
||||||
|
"broadcastList": "Seznam vysílání",
|
||||||
|
"broadcastLogs": "Záznamy vysílání",
|
||||||
|
"cancel": "Zrušit",
|
||||||
|
"cannotBeEmpty": "nemůže být prázdné",
|
||||||
|
"completed": "Dokončeno",
|
||||||
|
"confirm": "Potvrdit",
|
||||||
|
"confirmDelete": "Potvrdit smazání",
|
||||||
|
"content": "Obsah e-mailu",
|
||||||
|
"create": "Vytvořit",
|
||||||
|
"createBroadcast": "Vytvořit vysílání",
|
||||||
|
"createNewEmailBroadcastCampaign": "Vytvořit novou kampaň e-mailového vysílání",
|
||||||
|
"createSuccess": "Úspěšně vytvořeno",
|
||||||
|
"createdAt": "Vytvořeno dne",
|
||||||
|
"dailyLimit": "Denní limit musí být alespoň 1",
|
||||||
|
"dailySendLimit": "Denní limit odeslání",
|
||||||
|
"delete": "Smazat",
|
||||||
|
"deleteDescription": "Tuto operaci nelze vrátit zpět. Opravdu chcete smazat?",
|
||||||
|
"deleteSuccess": "Úspěšně smazáno",
|
||||||
|
"edit": "Upravit",
|
||||||
|
"emailAddedToScheduledQueue": "E-mail přidán do naplánované fronty odeslání",
|
||||||
|
"emailBroadcast": "E-mailové vysílání",
|
||||||
|
"emailBroadcastTaskCreatedSuccessfully": "Úkol e-mailového vysílání byl úspěšně vytvořen",
|
||||||
|
"emailBroadcastTasks": "Úkoly e-mailového vysílání",
|
||||||
|
"emailContent": "Obsah e-mailu",
|
||||||
|
"emailInterval": "Interval e-mailu (sekundy)",
|
||||||
|
"emailIntervalMinimum": "Interval e-mailu musí být alespoň 0,1 sekundy",
|
||||||
|
"emailMarketing": "E-mailový marketing",
|
||||||
|
"emailTaskManager": "Správce úkolů e-mailu",
|
||||||
|
"errorMessage": "Zpráva o chybě",
|
||||||
|
"estimatedRecipients": "Odhadovaný počet příjemců",
|
||||||
|
"expiredSubscriptionUsersOnly": "Pouze uživatelé s vypršeným předplatným",
|
||||||
|
"expiredUsers": "Uživatelé s vypršeným předplatným",
|
||||||
|
"failCount": "Počet neúspěchů",
|
||||||
|
"failed": "Neúspěšně",
|
||||||
|
"failedToRefreshTaskStatus": "Nepodařilo se obnovit stav úkolu",
|
||||||
|
"failedToStopTask": "Nepodařilo se zastavit úkol",
|
||||||
|
"inProgress": "Probíhá",
|
||||||
|
"includeUsersRegisteredAfter": "Zahrnout uživatele registrované po tomto datu",
|
||||||
|
"includeUsersRegisteredBefore": "Zahrnout uživatele registrované před tímto datem",
|
||||||
|
"intervalTimeBetweenEmails": "Časový interval mezi jednotlivými e-maily",
|
||||||
|
"leaveEmptyForImmediateSend": "Nechte prázdné pro okamžité odeslání",
|
||||||
|
"logList": "Seznam záznamů",
|
||||||
|
"marketingManagement": "Správa marketingu",
|
||||||
|
"maximumNumberPerDay": "Maximální počet e-mailů k odeslání za den",
|
||||||
|
"noSubscriptionUsersOnly": "Pouze uživatelé bez předplatného",
|
||||||
|
"nonSubscribers": "Nepředplatitelé",
|
||||||
|
"notStarted": "Nebylo zahájeno",
|
||||||
|
"onePerLine": "jeden na řádek",
|
||||||
|
"only": "pouze",
|
||||||
|
"pending": "Čeká se",
|
||||||
|
"pleaseEnter": "Prosím zadejte",
|
||||||
|
"pleaseEnterValidEmailAddresses": "Prosím zadejte platné e-mailové adresy, jednu na řádek",
|
||||||
|
"processing": "Zpracovává se...",
|
||||||
|
"progress": "Pokrok",
|
||||||
|
"recipient": "Příjemce",
|
||||||
|
"recipientEmail": "E-mail příjemce",
|
||||||
|
"recipientType": "Typ příjemce",
|
||||||
|
"registrationEndDate": "Datum ukončení registrace",
|
||||||
|
"registrationStartDate": "Datum zahájení registrace",
|
||||||
|
"scheduleSend": "Naplánovat odeslání",
|
||||||
|
"scheduledSend": "Naplánované odeslání",
|
||||||
|
"scheduledSendTimeMustBeLater": "Čas naplánovaného odeslání musí být pozdější než aktuální čas",
|
||||||
|
"selectSendScope": "Vyberte rozsah odeslání",
|
||||||
|
"selectSendTime": "Vyberte čas odeslání, nechte prázdné pro okamžité odeslání",
|
||||||
|
"sendFailed": "Odeslání selhalo, zkuste to prosím znovu",
|
||||||
|
"sendNow": "Odeslat nyní",
|
||||||
|
"sendScope": "Rozsah odeslání",
|
||||||
|
"sendScopeDescription": "Vyberte uživatelský rozsah pro odesílání e-mailů. Vyberte \"Pouze další e-maily\" pro odeslání pouze na e-mailové adresy vyplněné níže",
|
||||||
|
"sendSettings": "Nastavení odeslání",
|
||||||
|
"sendTime": "Čas odeslání",
|
||||||
|
"sending": "Odesílání",
|
||||||
|
"sentAt": "Odesláno dne",
|
||||||
|
"specificUsers": "Specifičtí uživatelé",
|
||||||
|
"specificUsersOnly": "Pouze další e-maily (přeskočit uživatele platformy)",
|
||||||
|
"status": "Stav",
|
||||||
|
"stop": "Zastavit",
|
||||||
|
"stopped": "Zastaveno",
|
||||||
|
"subject": "Předmět e-mailu",
|
||||||
|
"subscribedUsers": "Přihlášení uživatelé",
|
||||||
|
"subscribedUsersOnly": "Pouze přihlášení uživatelé",
|
||||||
|
"successCount": "Počet úspěchů",
|
||||||
|
"taskStatusRefreshed": "Stav úkolu obnoven",
|
||||||
|
"taskStoppedSuccessfully": "Úkol úspěšně zastaven",
|
||||||
|
"totalSent": "Celkem odesláno",
|
||||||
|
"updateSuccess": "Úspěšně aktualizováno",
|
||||||
|
"useMarkdownEditor": "Použijte editor Markdown pro psaní obsahu e-mailu s funkcí náhledu",
|
||||||
|
"users": "uživatelé",
|
||||||
|
"view": "Zobrazit",
|
||||||
|
"viewAndManageEmailBroadcastTasks": "Zobrazit a spravovat úkoly e-mailového vysílání",
|
||||||
|
"viewContent": "Zobrazit obsah"
|
||||||
|
}
|
||||||
@ -7,6 +7,7 @@
|
|||||||
"Dashboard": "Přístrojová deska",
|
"Dashboard": "Přístrojová deska",
|
||||||
"Document Management": "Správa dokumentů",
|
"Document Management": "Správa dokumentů",
|
||||||
"Finance": "Finance",
|
"Finance": "Finance",
|
||||||
|
"Marketing Management": "Řízení marketingu",
|
||||||
"Order Management": "Správa objednávek",
|
"Order Management": "Správa objednávek",
|
||||||
"Payment Config": "Konfigurace platby",
|
"Payment Config": "Konfigurace platby",
|
||||||
"Product Management": "Správa produktů",
|
"Product Management": "Správa produktů",
|
||||||
|
|||||||
97
apps/admin/locales/de-DE/marketing.json
Normal file
97
apps/admin/locales/de-DE/marketing.json
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
{
|
||||||
|
"additional": "Zusätzlich",
|
||||||
|
"additionalRecipientEmails": "Zusätzliche Empfänger-E-Mails",
|
||||||
|
"additionalRecipients": "Zusätzliche Empfänger",
|
||||||
|
"additionalRecipientsDescription": "Diese E-Mails erhalten die Übertragung zusätzlich zu dem oben genannten Benutzerfilter",
|
||||||
|
"allUsers": "Alle Benutzer",
|
||||||
|
"broadcastList": "Übertragungsliste",
|
||||||
|
"broadcastLogs": "Übertragungsprotokolle",
|
||||||
|
"cancel": "Abbrechen",
|
||||||
|
"cannotBeEmpty": "darf nicht leer sein",
|
||||||
|
"completed": "Abgeschlossen",
|
||||||
|
"confirm": "Bestätigen",
|
||||||
|
"confirmDelete": "Löschen bestätigen",
|
||||||
|
"content": "E-Mail-Inhalt",
|
||||||
|
"create": "Erstellen",
|
||||||
|
"createBroadcast": "Übertragung erstellen",
|
||||||
|
"createNewEmailBroadcastCampaign": "Neue E-Mail-Übertragungskampagne erstellen",
|
||||||
|
"createSuccess": "Erfolgreich erstellt",
|
||||||
|
"createdAt": "Erstellt am",
|
||||||
|
"dailyLimit": "Tägliches Limit muss mindestens 1 betragen",
|
||||||
|
"dailySendLimit": "Tägliches Sendelimit",
|
||||||
|
"delete": "Löschen",
|
||||||
|
"deleteDescription": "Dieser Vorgang kann nicht rückgängig gemacht werden. Sind Sie sicher, dass Sie löschen möchten?",
|
||||||
|
"deleteSuccess": "Erfolgreich gelöscht",
|
||||||
|
"edit": "Bearbeiten",
|
||||||
|
"emailAddedToScheduledQueue": "E-Mail zur geplanten Sendewarteschlange hinzugefügt",
|
||||||
|
"emailBroadcast": "E-Mail-Übertragung",
|
||||||
|
"emailBroadcastTaskCreatedSuccessfully": "E-Mail-Übertragungsaufgabe erfolgreich erstellt",
|
||||||
|
"emailBroadcastTasks": "E-Mail-Übertragungsaufgaben",
|
||||||
|
"emailContent": "E-Mail-Inhalt",
|
||||||
|
"emailInterval": "E-Mail-Intervall (Sekunden)",
|
||||||
|
"emailIntervalMinimum": "E-Mail-Intervall muss mindestens 0,1 Sekunden betragen",
|
||||||
|
"emailMarketing": "E-Mail-Marketing",
|
||||||
|
"emailTaskManager": "E-Mail-Aufgabenmanager",
|
||||||
|
"errorMessage": "Fehlermeldung",
|
||||||
|
"estimatedRecipients": "Geschätzte Empfänger",
|
||||||
|
"expiredSubscriptionUsersOnly": "Nur abgelaufene Abonnenten",
|
||||||
|
"expiredUsers": "Abgelaufene Benutzer",
|
||||||
|
"failCount": "Fehleranzahl",
|
||||||
|
"failed": "Fehlgeschlagen",
|
||||||
|
"failedToRefreshTaskStatus": "Aktualisierung des Aufgabenstatus fehlgeschlagen",
|
||||||
|
"failedToStopTask": "Beenden der Aufgabe fehlgeschlagen",
|
||||||
|
"inProgress": "In Bearbeitung",
|
||||||
|
"includeUsersRegisteredAfter": "Benutzer einbeziehen, die nach diesem Datum registriert sind",
|
||||||
|
"includeUsersRegisteredBefore": "Benutzer einbeziehen, die vor diesem Datum registriert sind",
|
||||||
|
"intervalTimeBetweenEmails": "Intervallzeit zwischen jeder E-Mail",
|
||||||
|
"leaveEmptyForImmediateSend": "Leer lassen für sofortige Sendung",
|
||||||
|
"logList": "Protokollliste",
|
||||||
|
"marketingManagement": "Marketing-Management",
|
||||||
|
"maximumNumberPerDay": "Maximale Anzahl von E-Mails, die pro Tag gesendet werden dürfen",
|
||||||
|
"noSubscriptionUsersOnly": "Nur keine Abonnenten",
|
||||||
|
"nonSubscribers": "Nicht-Abonnenten",
|
||||||
|
"notStarted": "Nicht gestartet",
|
||||||
|
"onePerLine": "eine pro Zeile",
|
||||||
|
"only": "nur",
|
||||||
|
"pending": "Ausstehend",
|
||||||
|
"pleaseEnter": "Bitte eingeben",
|
||||||
|
"pleaseEnterValidEmailAddresses": "Bitte geben Sie gültige E-Mail-Adressen ein, eine pro Zeile",
|
||||||
|
"processing": "Verarbeitung...",
|
||||||
|
"progress": "Fortschritt",
|
||||||
|
"recipient": "Empfänger",
|
||||||
|
"recipientEmail": "Empfänger-E-Mail",
|
||||||
|
"recipientType": "Empfängertyp",
|
||||||
|
"registrationEndDate": "Registrierungsenddatum",
|
||||||
|
"registrationStartDate": "Registrierungsstartdatum",
|
||||||
|
"scheduleSend": "Sendung planen",
|
||||||
|
"scheduledSend": "Geplante Sendung",
|
||||||
|
"scheduledSendTimeMustBeLater": "Die geplante Sendezeit muss später als die aktuelle Zeit sein",
|
||||||
|
"selectSendScope": "Sendeumfang auswählen",
|
||||||
|
"selectSendTime": "Sendezeit auswählen, leer lassen für sofortige Sendung",
|
||||||
|
"sendFailed": "Sendung fehlgeschlagen, bitte erneut versuchen",
|
||||||
|
"sendNow": "Jetzt senden",
|
||||||
|
"sendScope": "Sendeumfang",
|
||||||
|
"sendScopeDescription": "Wählen Sie den Benutzerumfang für den E-Mail-Versand. Wählen Sie \"Nur zusätzliche E-Mails\", um nur an die unten ausgefüllten E-Mail-Adressen zu senden",
|
||||||
|
"sendSettings": "Sendeinstellungen",
|
||||||
|
"sendTime": "Sendezeit",
|
||||||
|
"sending": "Senden",
|
||||||
|
"sentAt": "Gesendet am",
|
||||||
|
"specificUsers": "Spezifische Benutzer",
|
||||||
|
"specificUsersOnly": "Nur zusätzliche E-Mails (Plattformbenutzer überspringen)",
|
||||||
|
"status": "Status",
|
||||||
|
"stop": "Stoppen",
|
||||||
|
"stopped": "Gestoppt",
|
||||||
|
"subject": "E-Mail-Betreff",
|
||||||
|
"subscribedUsers": "Abonnierte Benutzer",
|
||||||
|
"subscribedUsersOnly": "Nur abonnierte Benutzer",
|
||||||
|
"successCount": "Erfolgsanzahl",
|
||||||
|
"taskStatusRefreshed": "Aufgabenstatus aktualisiert",
|
||||||
|
"taskStoppedSuccessfully": "Aufgabe erfolgreich gestoppt",
|
||||||
|
"totalSent": "Insgesamt gesendet",
|
||||||
|
"updateSuccess": "Erfolgreich aktualisiert",
|
||||||
|
"useMarkdownEditor": "Markdown-Editor verwenden, um E-Mail-Inhalte mit Vorschaufunktion zu schreiben",
|
||||||
|
"users": "Benutzer",
|
||||||
|
"view": "Anzeigen",
|
||||||
|
"viewAndManageEmailBroadcastTasks": "E-Mail-Übertragungsaufgaben anzeigen und verwalten",
|
||||||
|
"viewContent": "Inhalt anzeigen"
|
||||||
|
}
|
||||||
@ -7,6 +7,7 @@
|
|||||||
"Dashboard": "Armaturenbrett",
|
"Dashboard": "Armaturenbrett",
|
||||||
"Document Management": "Dokumentenverwaltung",
|
"Document Management": "Dokumentenverwaltung",
|
||||||
"Finance": "Finanzen",
|
"Finance": "Finanzen",
|
||||||
|
"Marketing Management": "Marketingmanagement",
|
||||||
"Order Management": "Bestellverwaltung",
|
"Order Management": "Bestellverwaltung",
|
||||||
"Payment Config": "Zahlungskonfiguration",
|
"Payment Config": "Zahlungskonfiguration",
|
||||||
"Product Management": "Produktmanagement",
|
"Product Management": "Produktmanagement",
|
||||||
|
|||||||
@ -1,39 +1,97 @@
|
|||||||
{
|
{
|
||||||
|
"additional": "Additional",
|
||||||
|
"additionalRecipientEmails": "Additional recipient emails",
|
||||||
|
"additionalRecipients": "Additional Recipients",
|
||||||
|
"additionalRecipientsDescription": "These emails will receive the broadcast in addition to the user filter above",
|
||||||
"allUsers": "All Users",
|
"allUsers": "All Users",
|
||||||
"broadcastList": "Broadcast List",
|
"broadcastList": "Broadcast List",
|
||||||
"broadcastLogs": "Broadcast Logs",
|
"broadcastLogs": "Broadcast Logs",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
|
"cannotBeEmpty": "cannot be empty",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
"confirm": "Confirm",
|
"confirm": "Confirm",
|
||||||
"confirmDelete": "Confirm Delete",
|
"confirmDelete": "Confirm Delete",
|
||||||
"content": "Email Content",
|
"content": "Email Content",
|
||||||
"create": "Create",
|
"create": "Create",
|
||||||
"createBroadcast": "Create Broadcast",
|
"createBroadcast": "Create Broadcast",
|
||||||
|
"createNewEmailBroadcastCampaign": "Create new email broadcast campaign",
|
||||||
"createSuccess": "Created Successfully",
|
"createSuccess": "Created Successfully",
|
||||||
"createdAt": "Created At",
|
"createdAt": "Created At",
|
||||||
|
"dailyLimit": "Daily limit must be at least 1",
|
||||||
|
"dailySendLimit": "Daily Send Limit",
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"deleteDescription": "This operation cannot be undone. Are you sure you want to delete?",
|
"deleteDescription": "This operation cannot be undone. Are you sure you want to delete?",
|
||||||
"deleteSuccess": "Deleted Successfully",
|
"deleteSuccess": "Deleted Successfully",
|
||||||
"edit": "Edit",
|
"edit": "Edit",
|
||||||
|
"emailAddedToScheduledQueue": "Email added to scheduled send queue",
|
||||||
"emailBroadcast": "Email Broadcast",
|
"emailBroadcast": "Email Broadcast",
|
||||||
|
"emailBroadcastTaskCreatedSuccessfully": "Email broadcast task created successfully",
|
||||||
|
"emailBroadcastTasks": "Email Broadcast Tasks",
|
||||||
|
"emailContent": "Email Content",
|
||||||
|
"emailInterval": "Email Interval (seconds)",
|
||||||
|
"emailIntervalMinimum": "Email interval must be at least 0.1 seconds",
|
||||||
|
"emailMarketing": "Email Marketing",
|
||||||
|
"emailTaskManager": "Email Task Manager",
|
||||||
"errorMessage": "Error Message",
|
"errorMessage": "Error Message",
|
||||||
|
"estimatedRecipients": "Estimated recipients",
|
||||||
|
"expiredSubscriptionUsersOnly": "Expired subscription users only",
|
||||||
|
"expiredUsers": "Expired Users",
|
||||||
"failCount": "Fail Count",
|
"failCount": "Fail Count",
|
||||||
"failed": "Failed",
|
"failed": "Failed",
|
||||||
|
"failedToRefreshTaskStatus": "Failed to refresh task status",
|
||||||
|
"failedToStopTask": "Failed to stop task",
|
||||||
|
"inProgress": "In Progress",
|
||||||
|
"includeUsersRegisteredAfter": "Include users registered on or after this date",
|
||||||
|
"includeUsersRegisteredBefore": "Include users registered on or before this date",
|
||||||
|
"intervalTimeBetweenEmails": "Interval time between each email",
|
||||||
|
"leaveEmptyForImmediateSend": "Leave empty for immediate send",
|
||||||
"logList": "Log List",
|
"logList": "Log List",
|
||||||
"marketingManagement": "Marketing Management",
|
"marketingManagement": "Marketing Management",
|
||||||
|
"maximumNumberPerDay": "Maximum number of emails to send per day",
|
||||||
|
"noSubscriptionUsersOnly": "No subscription users only",
|
||||||
|
"nonSubscribers": "Non-subscribers",
|
||||||
|
"notStarted": "Not Started",
|
||||||
|
"onePerLine": "one per line",
|
||||||
|
"only": "only",
|
||||||
"pending": "Pending",
|
"pending": "Pending",
|
||||||
|
"pleaseEnter": "Please enter",
|
||||||
|
"pleaseEnterValidEmailAddresses": "Please enter valid email addresses, one per line",
|
||||||
|
"processing": "Processing...",
|
||||||
|
"progress": "Progress",
|
||||||
"recipient": "Recipient",
|
"recipient": "Recipient",
|
||||||
"recipientEmail": "Recipient Email",
|
"recipientEmail": "Recipient Email",
|
||||||
"recipientType": "Recipient Type",
|
"recipientType": "Recipient Type",
|
||||||
|
"registrationEndDate": "Registration End Date",
|
||||||
|
"registrationStartDate": "Registration Start Date",
|
||||||
|
"scheduleSend": "Schedule Send",
|
||||||
|
"scheduledSend": "Scheduled Send",
|
||||||
|
"scheduledSendTimeMustBeLater": "Scheduled send time must be later than current time",
|
||||||
|
"selectSendScope": "Select send scope",
|
||||||
|
"selectSendTime": "Select send time, leave empty for immediate send",
|
||||||
|
"sendFailed": "Send failed, please try again",
|
||||||
|
"sendNow": "Send Now",
|
||||||
|
"sendScope": "Send Scope",
|
||||||
|
"sendScopeDescription": "Choose the user scope for email sending. Select \"Additional emails only\" to send only to the email addresses filled below",
|
||||||
|
"sendSettings": "Send Settings",
|
||||||
"sendTime": "Send Time",
|
"sendTime": "Send Time",
|
||||||
"sending": "Sending",
|
"sending": "Sending",
|
||||||
"sentAt": "Sent At",
|
"sentAt": "Sent At",
|
||||||
"specificUsers": "Specific Users",
|
"specificUsers": "Specific Users",
|
||||||
|
"specificUsersOnly": "Additional emails only (skip platform users)",
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
|
"stop": "Stop",
|
||||||
|
"stopped": "Stopped",
|
||||||
"subject": "Email Subject",
|
"subject": "Email Subject",
|
||||||
"subscribedUsers": "Subscribed Users",
|
"subscribedUsers": "Subscribed Users",
|
||||||
|
"subscribedUsersOnly": "Subscribed users only",
|
||||||
"successCount": "Success Count",
|
"successCount": "Success Count",
|
||||||
|
"taskStatusRefreshed": "Task status refreshed",
|
||||||
|
"taskStoppedSuccessfully": "Task stopped successfully",
|
||||||
"totalSent": "Total Sent",
|
"totalSent": "Total Sent",
|
||||||
"updateSuccess": "Updated Successfully",
|
"updateSuccess": "Updated Successfully",
|
||||||
"view": "View"
|
"useMarkdownEditor": "Use Markdown editor to write email content with preview functionality",
|
||||||
|
"users": "users",
|
||||||
|
"view": "View",
|
||||||
|
"viewAndManageEmailBroadcastTasks": "View and manage email broadcast tasks",
|
||||||
|
"viewContent": "View Content"
|
||||||
}
|
}
|
||||||
|
|||||||
97
apps/admin/locales/es-ES/marketing.json
Normal file
97
apps/admin/locales/es-ES/marketing.json
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
{
|
||||||
|
"additional": "Adicional",
|
||||||
|
"additionalRecipientEmails": "Correos electrónicos de destinatarios adicionales",
|
||||||
|
"additionalRecipients": "Destinatarios adicionales",
|
||||||
|
"additionalRecipientsDescription": "Estos correos electrónicos recibirán la transmisión además del filtro de usuario anterior",
|
||||||
|
"allUsers": "Todos los usuarios",
|
||||||
|
"broadcastList": "Lista de difusión",
|
||||||
|
"broadcastLogs": "Registros de difusión",
|
||||||
|
"cancel": "Cancelar",
|
||||||
|
"cannotBeEmpty": "no puede estar vacío",
|
||||||
|
"completed": "Completado",
|
||||||
|
"confirm": "Confirmar",
|
||||||
|
"confirmDelete": "Confirmar eliminación",
|
||||||
|
"content": "Contenido del correo electrónico",
|
||||||
|
"create": "Crear",
|
||||||
|
"createBroadcast": "Crear difusión",
|
||||||
|
"createNewEmailBroadcastCampaign": "Crear nueva campaña de difusión por correo electrónico",
|
||||||
|
"createSuccess": "Creado con éxito",
|
||||||
|
"createdAt": "Creado en",
|
||||||
|
"dailyLimit": "El límite diario debe ser al menos 1",
|
||||||
|
"dailySendLimit": "Límite de envío diario",
|
||||||
|
"delete": "Eliminar",
|
||||||
|
"deleteDescription": "Esta operación no se puede deshacer. ¿Está seguro de que desea eliminar?",
|
||||||
|
"deleteSuccess": "Eliminado con éxito",
|
||||||
|
"edit": "Editar",
|
||||||
|
"emailAddedToScheduledQueue": "Correo electrónico añadido a la cola de envío programado",
|
||||||
|
"emailBroadcast": "Difusión por correo electrónico",
|
||||||
|
"emailBroadcastTaskCreatedSuccessfully": "Tarea de difusión por correo electrónico creada con éxito",
|
||||||
|
"emailBroadcastTasks": "Tareas de difusión por correo electrónico",
|
||||||
|
"emailContent": "Contenido del correo electrónico",
|
||||||
|
"emailInterval": "Intervalo de correo electrónico (segundos)",
|
||||||
|
"emailIntervalMinimum": "El intervalo de correo electrónico debe ser al menos 0.1 segundos",
|
||||||
|
"emailMarketing": "Marketing por correo electrónico",
|
||||||
|
"emailTaskManager": "Administrador de tareas de correo electrónico",
|
||||||
|
"errorMessage": "Mensaje de error",
|
||||||
|
"estimatedRecipients": "Destinatarios estimados",
|
||||||
|
"expiredSubscriptionUsersOnly": "Solo usuarios con suscripción expirada",
|
||||||
|
"expiredUsers": "Usuarios expirados",
|
||||||
|
"failCount": "Conteo de fallos",
|
||||||
|
"failed": "Fallido",
|
||||||
|
"failedToRefreshTaskStatus": "Error al actualizar el estado de la tarea",
|
||||||
|
"failedToStopTask": "Error al detener la tarea",
|
||||||
|
"inProgress": "En progreso",
|
||||||
|
"includeUsersRegisteredAfter": "Incluir usuarios registrados en o después de esta fecha",
|
||||||
|
"includeUsersRegisteredBefore": "Incluir usuarios registrados en o antes de esta fecha",
|
||||||
|
"intervalTimeBetweenEmails": "Tiempo de intervalo entre cada correo electrónico",
|
||||||
|
"leaveEmptyForImmediateSend": "Dejar vacío para envío inmediato",
|
||||||
|
"logList": "Lista de registros",
|
||||||
|
"marketingManagement": "Gestión de marketing",
|
||||||
|
"maximumNumberPerDay": "Número máximo de correos electrónicos a enviar por día",
|
||||||
|
"noSubscriptionUsersOnly": "Solo usuarios sin suscripción",
|
||||||
|
"nonSubscribers": "No suscriptores",
|
||||||
|
"notStarted": "No iniciado",
|
||||||
|
"onePerLine": "uno por línea",
|
||||||
|
"only": "solo",
|
||||||
|
"pending": "Pendiente",
|
||||||
|
"pleaseEnter": "Por favor ingrese",
|
||||||
|
"pleaseEnterValidEmailAddresses": "Por favor ingrese direcciones de correo electrónico válidas, una por línea",
|
||||||
|
"processing": "Procesando...",
|
||||||
|
"progress": "Progreso",
|
||||||
|
"recipient": "Destinatario",
|
||||||
|
"recipientEmail": "Correo electrónico del destinatario",
|
||||||
|
"recipientType": "Tipo de destinatario",
|
||||||
|
"registrationEndDate": "Fecha de finalización de registro",
|
||||||
|
"registrationStartDate": "Fecha de inicio de registro",
|
||||||
|
"scheduleSend": "Programar envío",
|
||||||
|
"scheduledSend": "Envío programado",
|
||||||
|
"scheduledSendTimeMustBeLater": "La hora de envío programado debe ser posterior a la hora actual",
|
||||||
|
"selectSendScope": "Seleccionar alcance de envío",
|
||||||
|
"selectSendTime": "Seleccionar hora de envío, dejar vacío para envío inmediato",
|
||||||
|
"sendFailed": "Envío fallido, por favor intente de nuevo",
|
||||||
|
"sendNow": "Enviar ahora",
|
||||||
|
"sendScope": "Alcance de envío",
|
||||||
|
"sendScopeDescription": "Elija el alcance de usuarios para el envío de correos electrónicos. Seleccione \"Solo correos electrónicos adicionales\" para enviar solo a las direcciones de correo electrónico completadas a continuación",
|
||||||
|
"sendSettings": "Configuraciones de envío",
|
||||||
|
"sendTime": "Hora de envío",
|
||||||
|
"sending": "Enviando",
|
||||||
|
"sentAt": "Enviado en",
|
||||||
|
"specificUsers": "Usuarios específicos",
|
||||||
|
"specificUsersOnly": "Solo correos electrónicos adicionales (omitir usuarios de la plataforma)",
|
||||||
|
"status": "Estado",
|
||||||
|
"stop": "Detener",
|
||||||
|
"stopped": "Detenido",
|
||||||
|
"subject": "Asunto del correo electrónico",
|
||||||
|
"subscribedUsers": "Usuarios suscritos",
|
||||||
|
"subscribedUsersOnly": "Solo usuarios suscritos",
|
||||||
|
"successCount": "Conteo de éxitos",
|
||||||
|
"taskStatusRefreshed": "Estado de la tarea actualizado",
|
||||||
|
"taskStoppedSuccessfully": "Tarea detenida con éxito",
|
||||||
|
"totalSent": "Total enviado",
|
||||||
|
"updateSuccess": "Actualizado con éxito",
|
||||||
|
"useMarkdownEditor": "Utilice el editor Markdown para escribir el contenido del correo electrónico con funcionalidad de vista previa",
|
||||||
|
"users": "usuarios",
|
||||||
|
"view": "Ver",
|
||||||
|
"viewAndManageEmailBroadcastTasks": "Ver y gestionar tareas de difusión por correo electrónico",
|
||||||
|
"viewContent": "Ver contenido"
|
||||||
|
}
|
||||||
@ -7,6 +7,7 @@
|
|||||||
"Dashboard": "Tablero",
|
"Dashboard": "Tablero",
|
||||||
"Document Management": "Gestión de Documentos",
|
"Document Management": "Gestión de Documentos",
|
||||||
"Finance": "Finanzas",
|
"Finance": "Finanzas",
|
||||||
|
"Marketing Management": "Gestión de Marketing",
|
||||||
"Order Management": "Gestión de Pedidos",
|
"Order Management": "Gestión de Pedidos",
|
||||||
"Payment Config": "Configuración de Pago",
|
"Payment Config": "Configuración de Pago",
|
||||||
"Product Management": "Gestión de Productos",
|
"Product Management": "Gestión de Productos",
|
||||||
|
|||||||
97
apps/admin/locales/es-MX/marketing.json
Normal file
97
apps/admin/locales/es-MX/marketing.json
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
{
|
||||||
|
"additional": "Adicional",
|
||||||
|
"additionalRecipientEmails": "Correos electrónicos de destinatarios adicionales",
|
||||||
|
"additionalRecipients": "Destinatarios Adicionales",
|
||||||
|
"additionalRecipientsDescription": "Estos correos electrónicos recibirán la transmisión además del filtro de usuario anterior",
|
||||||
|
"allUsers": "Todos los Usuarios",
|
||||||
|
"broadcastList": "Lista de Transmisión",
|
||||||
|
"broadcastLogs": "Registros de Transmisión",
|
||||||
|
"cancel": "Cancelar",
|
||||||
|
"cannotBeEmpty": "no puede estar vacío",
|
||||||
|
"completed": "Completado",
|
||||||
|
"confirm": "Confirmar",
|
||||||
|
"confirmDelete": "Confirmar Eliminación",
|
||||||
|
"content": "Contenido del Correo Electrónico",
|
||||||
|
"create": "Crear",
|
||||||
|
"createBroadcast": "Crear Transmisión",
|
||||||
|
"createNewEmailBroadcastCampaign": "Crear nueva campaña de transmisión de correo electrónico",
|
||||||
|
"createSuccess": "Creado Exitosamente",
|
||||||
|
"createdAt": "Creado En",
|
||||||
|
"dailyLimit": "El límite diario debe ser al menos 1",
|
||||||
|
"dailySendLimit": "Límite de Envío Diario",
|
||||||
|
"delete": "Eliminar",
|
||||||
|
"deleteDescription": "Esta operación no se puede deshacer. ¿Está seguro de que desea eliminar?",
|
||||||
|
"deleteSuccess": "Eliminado Exitosamente",
|
||||||
|
"edit": "Editar",
|
||||||
|
"emailAddedToScheduledQueue": "Correo electrónico agregado a la cola de envío programado",
|
||||||
|
"emailBroadcast": "Transmisión de Correo Electrónico",
|
||||||
|
"emailBroadcastTaskCreatedSuccessfully": "Tarea de transmisión de correo electrónico creada exitosamente",
|
||||||
|
"emailBroadcastTasks": "Tareas de Transmisión de Correo Electrónico",
|
||||||
|
"emailContent": "Contenido del Correo Electrónico",
|
||||||
|
"emailInterval": "Intervalo de Correo Electrónico (segundos)",
|
||||||
|
"emailIntervalMinimum": "El intervalo de correo electrónico debe ser al menos 0.1 segundos",
|
||||||
|
"emailMarketing": "Marketing por Correo Electrónico",
|
||||||
|
"emailTaskManager": "Administrador de Tareas de Correo Electrónico",
|
||||||
|
"errorMessage": "Mensaje de Error",
|
||||||
|
"estimatedRecipients": "Destinatarios Estimados",
|
||||||
|
"expiredSubscriptionUsersOnly": "Solo usuarios con suscripción expirada",
|
||||||
|
"expiredUsers": "Usuarios Expirados",
|
||||||
|
"failCount": "Conteo de Fallos",
|
||||||
|
"failed": "Fallido",
|
||||||
|
"failedToRefreshTaskStatus": "Error al actualizar el estado de la tarea",
|
||||||
|
"failedToStopTask": "Error al detener la tarea",
|
||||||
|
"inProgress": "En Progreso",
|
||||||
|
"includeUsersRegisteredAfter": "Incluir usuarios registrados en o después de esta fecha",
|
||||||
|
"includeUsersRegisteredBefore": "Incluir usuarios registrados en o antes de esta fecha",
|
||||||
|
"intervalTimeBetweenEmails": "Tiempo de intervalo entre cada correo electrónico",
|
||||||
|
"leaveEmptyForImmediateSend": "Deje vacío para envío inmediato",
|
||||||
|
"logList": "Lista de Registros",
|
||||||
|
"marketingManagement": "Gestión de Marketing",
|
||||||
|
"maximumNumberPerDay": "Número máximo de correos electrónicos a enviar por día",
|
||||||
|
"noSubscriptionUsersOnly": "Solo usuarios sin suscripción",
|
||||||
|
"nonSubscribers": "No suscriptores",
|
||||||
|
"notStarted": "No Iniciado",
|
||||||
|
"onePerLine": "uno por línea",
|
||||||
|
"only": "solo",
|
||||||
|
"pending": "Pendiente",
|
||||||
|
"pleaseEnter": "Por favor ingrese",
|
||||||
|
"pleaseEnterValidEmailAddresses": "Por favor ingrese direcciones de correo electrónico válidas, una por línea",
|
||||||
|
"processing": "Procesando...",
|
||||||
|
"progress": "Progreso",
|
||||||
|
"recipient": "Destinatario",
|
||||||
|
"recipientEmail": "Correo Electrónico del Destinatario",
|
||||||
|
"recipientType": "Tipo de Destinatario",
|
||||||
|
"registrationEndDate": "Fecha de Fin de Registro",
|
||||||
|
"registrationStartDate": "Fecha de Inicio de Registro",
|
||||||
|
"scheduleSend": "Programar Envío",
|
||||||
|
"scheduledSend": "Envío Programado",
|
||||||
|
"scheduledSendTimeMustBeLater": "La hora de envío programado debe ser posterior a la hora actual",
|
||||||
|
"selectSendScope": "Seleccionar alcance de envío",
|
||||||
|
"selectSendTime": "Seleccionar hora de envío, dejar vacío para envío inmediato",
|
||||||
|
"sendFailed": "Envío fallido, por favor intente de nuevo",
|
||||||
|
"sendNow": "Enviar Ahora",
|
||||||
|
"sendScope": "Alcance de Envío",
|
||||||
|
"sendScopeDescription": "Elija el alcance de usuario para el envío de correos electrónicos. Seleccione \"Solo correos electrónicos adicionales\" para enviar solo a las direcciones de correo electrónico completadas a continuación",
|
||||||
|
"sendSettings": "Configuraciones de Envío",
|
||||||
|
"sendTime": "Hora de Envío",
|
||||||
|
"sending": "Enviando",
|
||||||
|
"sentAt": "Enviado En",
|
||||||
|
"specificUsers": "Usuarios Específicos",
|
||||||
|
"specificUsersOnly": "Solo correos electrónicos adicionales (omitir usuarios de la plataforma)",
|
||||||
|
"status": "Estado",
|
||||||
|
"stop": "Detener",
|
||||||
|
"stopped": "Detenido",
|
||||||
|
"subject": "Asunto del Correo Electrónico",
|
||||||
|
"subscribedUsers": "Usuarios Suscritos",
|
||||||
|
"subscribedUsersOnly": "Solo usuarios suscritos",
|
||||||
|
"successCount": "Conteo de Éxitos",
|
||||||
|
"taskStatusRefreshed": "Estado de la tarea actualizado",
|
||||||
|
"taskStoppedSuccessfully": "Tarea detenida exitosamente",
|
||||||
|
"totalSent": "Total Enviado",
|
||||||
|
"updateSuccess": "Actualizado Exitosamente",
|
||||||
|
"useMarkdownEditor": "Utilice el editor Markdown para escribir contenido de correo electrónico con funcionalidad de vista previa",
|
||||||
|
"users": "usuarios",
|
||||||
|
"view": "Ver",
|
||||||
|
"viewAndManageEmailBroadcastTasks": "Ver y gestionar tareas de transmisión de correo electrónico",
|
||||||
|
"viewContent": "Ver Contenido"
|
||||||
|
}
|
||||||
@ -7,6 +7,7 @@
|
|||||||
"Dashboard": "Tablero",
|
"Dashboard": "Tablero",
|
||||||
"Document Management": "Gestión de Documentos",
|
"Document Management": "Gestión de Documentos",
|
||||||
"Finance": "Finanzas",
|
"Finance": "Finanzas",
|
||||||
|
"Marketing Management": "Gestión de Marketing",
|
||||||
"Order Management": "Gestión de Pedidos",
|
"Order Management": "Gestión de Pedidos",
|
||||||
"Payment Config": "Configuración de Pago",
|
"Payment Config": "Configuración de Pago",
|
||||||
"Product Management": "Gestión de Productos",
|
"Product Management": "Gestión de Productos",
|
||||||
|
|||||||
97
apps/admin/locales/fa-IR/marketing.json
Normal file
97
apps/admin/locales/fa-IR/marketing.json
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
{
|
||||||
|
"additional": "اضافی",
|
||||||
|
"additionalRecipientEmails": "ایمیلهای اضافی گیرندگان",
|
||||||
|
"additionalRecipients": "گیرندگان اضافی",
|
||||||
|
"additionalRecipientsDescription": "این ایمیلها به همراه فیلتر کاربر بالا، پخش را دریافت خواهند کرد",
|
||||||
|
"allUsers": "تمام کاربران",
|
||||||
|
"broadcastList": "لیست پخش",
|
||||||
|
"broadcastLogs": "گزارشهای پخش",
|
||||||
|
"cancel": "لغو",
|
||||||
|
"cannotBeEmpty": "نمیتواند خالی باشد",
|
||||||
|
"completed": "تکمیل شده",
|
||||||
|
"confirm": "تأیید",
|
||||||
|
"confirmDelete": "تأیید حذف",
|
||||||
|
"content": "محتوای ایمیل",
|
||||||
|
"create": "ایجاد",
|
||||||
|
"createBroadcast": "ایجاد پخش",
|
||||||
|
"createNewEmailBroadcastCampaign": "ایجاد کمپین جدید پخش ایمیل",
|
||||||
|
"createSuccess": "با موفقیت ایجاد شد",
|
||||||
|
"createdAt": "تاریخ ایجاد",
|
||||||
|
"dailyLimit": "حداکثر روزانه باید حداقل ۱ باشد",
|
||||||
|
"dailySendLimit": "حداکثر ارسال روزانه",
|
||||||
|
"delete": "حذف",
|
||||||
|
"deleteDescription": "این عملیات قابل بازگشت نیست. آیا مطمئن هستید که میخواهید حذف کنید؟",
|
||||||
|
"deleteSuccess": "با موفقیت حذف شد",
|
||||||
|
"edit": "ویرایش",
|
||||||
|
"emailAddedToScheduledQueue": "ایمیل به صف ارسال زمانبندی شده اضافه شد",
|
||||||
|
"emailBroadcast": "پخش ایمیل",
|
||||||
|
"emailBroadcastTaskCreatedSuccessfully": "وظیفه پخش ایمیل با موفقیت ایجاد شد",
|
||||||
|
"emailBroadcastTasks": "وظایف پخش ایمیل",
|
||||||
|
"emailContent": "محتوای ایمیل",
|
||||||
|
"emailInterval": "فاصله زمانی ایمیل (ثانیه)",
|
||||||
|
"emailIntervalMinimum": "فاصله زمانی ایمیل باید حداقل ۰.۱ ثانیه باشد",
|
||||||
|
"emailMarketing": "بازاریابی ایمیلی",
|
||||||
|
"emailTaskManager": "مدیر وظایف ایمیل",
|
||||||
|
"errorMessage": "پیام خطا",
|
||||||
|
"estimatedRecipients": "گیرندگان تخمینی",
|
||||||
|
"expiredSubscriptionUsersOnly": "فقط کاربران با اشتراک منقضی شده",
|
||||||
|
"expiredUsers": "کاربران منقضی شده",
|
||||||
|
"failCount": "تعداد شکستها",
|
||||||
|
"failed": "شکست خورده",
|
||||||
|
"failedToRefreshTaskStatus": "عدم توانایی در بهروزرسانی وضعیت وظیفه",
|
||||||
|
"failedToStopTask": "عدم توانایی در متوقف کردن وظیفه",
|
||||||
|
"inProgress": "در حال انجام",
|
||||||
|
"includeUsersRegisteredAfter": "شامل کاربران ثبتنام شده در یا بعد از این تاریخ",
|
||||||
|
"includeUsersRegisteredBefore": "شامل کاربران ثبتنام شده در یا قبل از این تاریخ",
|
||||||
|
"intervalTimeBetweenEmails": "فاصله زمانی بین هر ایمیل",
|
||||||
|
"leaveEmptyForImmediateSend": "برای ارسال فوری خالی بگذارید",
|
||||||
|
"logList": "لیست گزارشها",
|
||||||
|
"marketingManagement": "مدیریت بازاریابی",
|
||||||
|
"maximumNumberPerDay": "حداکثر تعداد ایمیلها برای ارسال در روز",
|
||||||
|
"noSubscriptionUsersOnly": "فقط کاربران بدون اشتراک",
|
||||||
|
"nonSubscribers": "غیر مشترکین",
|
||||||
|
"notStarted": "شروع نشده",
|
||||||
|
"onePerLine": "یکی در هر خط",
|
||||||
|
"only": "فقط",
|
||||||
|
"pending": "در انتظار",
|
||||||
|
"pleaseEnter": "لطفاً وارد کنید",
|
||||||
|
"pleaseEnterValidEmailAddresses": "لطفاً آدرسهای ایمیل معتبر را وارد کنید، یکی در هر خط",
|
||||||
|
"processing": "در حال پردازش...",
|
||||||
|
"progress": "پیشرفت",
|
||||||
|
"recipient": "گیرنده",
|
||||||
|
"recipientEmail": "ایمیل گیرنده",
|
||||||
|
"recipientType": "نوع گیرنده",
|
||||||
|
"registrationEndDate": "تاریخ پایان ثبتنام",
|
||||||
|
"registrationStartDate": "تاریخ شروع ثبتنام",
|
||||||
|
"scheduleSend": "زمانبندی ارسال",
|
||||||
|
"scheduledSend": "ارسال زمانبندی شده",
|
||||||
|
"scheduledSendTimeMustBeLater": "زمان ارسال زمانبندی شده باید بعد از زمان کنونی باشد",
|
||||||
|
"selectSendScope": "دامنه ارسال را انتخاب کنید",
|
||||||
|
"selectSendTime": "زمان ارسال را انتخاب کنید، برای ارسال فوری خالی بگذارید",
|
||||||
|
"sendFailed": "ارسال ناموفق بود، لطفاً دوباره تلاش کنید",
|
||||||
|
"sendNow": "اکنون ارسال کنید",
|
||||||
|
"sendScope": "دامنه ارسال",
|
||||||
|
"sendScopeDescription": "دامنه کاربری برای ارسال ایمیل را انتخاب کنید. برای ارسال فقط به آدرسهای ایمیل پر شده در زیر، \"فقط ایمیلهای اضافی\" را انتخاب کنید",
|
||||||
|
"sendSettings": "تنظیمات ارسال",
|
||||||
|
"sendTime": "زمان ارسال",
|
||||||
|
"sending": "در حال ارسال",
|
||||||
|
"sentAt": "در تاریخ ارسال شد",
|
||||||
|
"specificUsers": "کاربران خاص",
|
||||||
|
"specificUsersOnly": "فقط ایمیلهای اضافی (کاربران پلتفرم را نادیده بگیرید)",
|
||||||
|
"status": "وضعیت",
|
||||||
|
"stop": "متوقف کردن",
|
||||||
|
"stopped": "متوقف شده",
|
||||||
|
"subject": "موضوع ایمیل",
|
||||||
|
"subscribedUsers": "کاربران مشترک",
|
||||||
|
"subscribedUsersOnly": "فقط کاربران مشترک",
|
||||||
|
"successCount": "تعداد موفقیتها",
|
||||||
|
"taskStatusRefreshed": "وضعیت وظیفه بهروزرسانی شد",
|
||||||
|
"taskStoppedSuccessfully": "وظیفه با موفقیت متوقف شد",
|
||||||
|
"totalSent": "مجموع ارسال شده",
|
||||||
|
"updateSuccess": "با موفقیت بهروزرسانی شد",
|
||||||
|
"useMarkdownEditor": "از ویرایشگر Markdown برای نوشتن محتوای ایمیل با قابلیت پیشنمایش استفاده کنید",
|
||||||
|
"users": "کاربران",
|
||||||
|
"view": "مشاهده",
|
||||||
|
"viewAndManageEmailBroadcastTasks": "مشاهده و مدیریت وظایف پخش ایمیل",
|
||||||
|
"viewContent": "مشاهده محتوا"
|
||||||
|
}
|
||||||
@ -7,6 +7,7 @@
|
|||||||
"Dashboard": "داشبورد",
|
"Dashboard": "داشبورد",
|
||||||
"Document Management": "مدیریت اسناد",
|
"Document Management": "مدیریت اسناد",
|
||||||
"Finance": "امور مالی",
|
"Finance": "امور مالی",
|
||||||
|
"Marketing Management": "مدیریت بازاریابی",
|
||||||
"Order Management": "مدیریت سفارش",
|
"Order Management": "مدیریت سفارش",
|
||||||
"Payment Config": "پیکربندی پرداخت",
|
"Payment Config": "پیکربندی پرداخت",
|
||||||
"Product Management": "مدیریت محصول",
|
"Product Management": "مدیریت محصول",
|
||||||
|
|||||||
97
apps/admin/locales/fi-FI/marketing.json
Normal file
97
apps/admin/locales/fi-FI/marketing.json
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
{
|
||||||
|
"additional": "Lisä",
|
||||||
|
"additionalRecipientEmails": "Lisä vastaanottaja sähköpostit",
|
||||||
|
"additionalRecipients": "Lisä vastaanottajat",
|
||||||
|
"additionalRecipientsDescription": "Nämä sähköpostit saavat lähetyksen lisäksi yllä olevaan käyttäjäsuodattimeen",
|
||||||
|
"allUsers": "Kaikki käyttäjät",
|
||||||
|
"broadcastList": "Lähetyslista",
|
||||||
|
"broadcastLogs": "Lähetyspäiväkirjat",
|
||||||
|
"cancel": "Peruuta",
|
||||||
|
"cannotBeEmpty": "ei voi olla tyhjää",
|
||||||
|
"completed": "Valmis",
|
||||||
|
"confirm": "Vahvista",
|
||||||
|
"confirmDelete": "Vahvista poisto",
|
||||||
|
"content": "Sähköpostin sisältö",
|
||||||
|
"create": "Luo",
|
||||||
|
"createBroadcast": "Luo lähetys",
|
||||||
|
"createNewEmailBroadcastCampaign": "Luo uusi sähköpostilähetyskampanja",
|
||||||
|
"createSuccess": "Luotiin onnistuneesti",
|
||||||
|
"createdAt": "Luotu",
|
||||||
|
"dailyLimit": "Päivittäinen raja on oltava vähintään 1",
|
||||||
|
"dailySendLimit": "Päivittäinen lähetysraja",
|
||||||
|
"delete": "Poista",
|
||||||
|
"deleteDescription": "Tätä toimintoa ei voi peruuttaa. Oletko varma, että haluat poistaa?",
|
||||||
|
"deleteSuccess": "Poistettu onnistuneesti",
|
||||||
|
"edit": "Muokkaa",
|
||||||
|
"emailAddedToScheduledQueue": "Sähköposti lisätty aikataulutettujen lähetyksien jonoon",
|
||||||
|
"emailBroadcast": "Sähköpostilähetys",
|
||||||
|
"emailBroadcastTaskCreatedSuccessfully": "Sähköpostilähetystehtävä luotiin onnistuneesti",
|
||||||
|
"emailBroadcastTasks": "Sähköpostilähetystehtävät",
|
||||||
|
"emailContent": "Sähköpostin sisältö",
|
||||||
|
"emailInterval": "Sähköpostiväli (sekunteina)",
|
||||||
|
"emailIntervalMinimum": "Sähköpostivälin on oltava vähintään 0,1 sekuntia",
|
||||||
|
"emailMarketing": "Sähköpostimarkkinointi",
|
||||||
|
"emailTaskManager": "Sähköpostitehtävien hallinta",
|
||||||
|
"errorMessage": "Virheviesti",
|
||||||
|
"estimatedRecipients": "Arvioidut vastaanottajat",
|
||||||
|
"expiredSubscriptionUsersOnly": "Vain vanhentuneen tilauksen käyttäjät",
|
||||||
|
"expiredUsers": "Vanhentuneet käyttäjät",
|
||||||
|
"failCount": "Epäonnistumisten määrä",
|
||||||
|
"failed": "Epäonnistui",
|
||||||
|
"failedToRefreshTaskStatus": "Tehtävän tilan päivittäminen epäonnistui",
|
||||||
|
"failedToStopTask": "Tehtävän pysäyttäminen epäonnistui",
|
||||||
|
"inProgress": "Käynnissä",
|
||||||
|
"includeUsersRegisteredAfter": "Sisällytä käyttäjät, jotka on rekisteröity tämän päivämäärän jälkeen",
|
||||||
|
"includeUsersRegisteredBefore": "Sisällytä käyttäjät, jotka on rekisteröity tämän päivämäärän ennen",
|
||||||
|
"intervalTimeBetweenEmails": "Väli sähköpostien välillä",
|
||||||
|
"leaveEmptyForImmediateSend": "Jätä tyhjäksi välittömäksi lähetykseksi",
|
||||||
|
"logList": "Päiväkirjalista",
|
||||||
|
"marketingManagement": "Markkinoinnin hallinta",
|
||||||
|
"maximumNumberPerDay": "Suurin määrä sähköposteja lähetettäväksi päivässä",
|
||||||
|
"noSubscriptionUsersOnly": "Vain ei-tilauksen käyttäjät",
|
||||||
|
"nonSubscribers": "Ei-tilaajat",
|
||||||
|
"notStarted": "Ei aloitettu",
|
||||||
|
"onePerLine": "yksi per rivi",
|
||||||
|
"only": "vain",
|
||||||
|
"pending": "Odottaa",
|
||||||
|
"pleaseEnter": "Ole hyvä ja syötä",
|
||||||
|
"pleaseEnterValidEmailAddresses": "Ole hyvä ja syötä voimassa olevat sähköpostiosoitteet, yksi per rivi",
|
||||||
|
"processing": "Käsitellään...",
|
||||||
|
"progress": "Edistyminen",
|
||||||
|
"recipient": "Vastaanottaja",
|
||||||
|
"recipientEmail": "Vastaanottajan sähköposti",
|
||||||
|
"recipientType": "Vastaanottajan tyyppi",
|
||||||
|
"registrationEndDate": "Rekisteröinnin päättymispäivämäärä",
|
||||||
|
"registrationStartDate": "Rekisteröinnin aloituspäivämäärä",
|
||||||
|
"scheduleSend": "Aikatauluta lähetys",
|
||||||
|
"scheduledSend": "Aikataulutettu lähetys",
|
||||||
|
"scheduledSendTimeMustBeLater": "Aikataulutetun lähetyksen ajan on oltava myöhemmin kuin nykyinen aika",
|
||||||
|
"selectSendScope": "Valitse lähetyksen laajuus",
|
||||||
|
"selectSendTime": "Valitse lähetysaika, jätä tyhjäksi välittömäksi lähetykseksi",
|
||||||
|
"sendFailed": "Lähetys epäonnistui, yritä uudelleen",
|
||||||
|
"sendNow": "Lähetä nyt",
|
||||||
|
"sendScope": "Lähetyksen laajuus",
|
||||||
|
"sendScopeDescription": "Valitse käyttäjälaajuus sähköpostin lähettämiseen. Valitse \"Vain lisäsähköpostit\" lähettääksesi vain alla täytettyihin sähköpostiosoitteisiin",
|
||||||
|
"sendSettings": "Lähetyksen asetukset",
|
||||||
|
"sendTime": "Lähetysaika",
|
||||||
|
"sending": "Lähetetään",
|
||||||
|
"sentAt": "Lähetetty",
|
||||||
|
"specificUsers": "Erityiset käyttäjät",
|
||||||
|
"specificUsersOnly": "Vain lisäsähköpostit (ohita alustan käyttäjät)",
|
||||||
|
"status": "Tila",
|
||||||
|
"stop": "Pysäytä",
|
||||||
|
"stopped": "Pysäytetty",
|
||||||
|
"subject": "Sähköpostin aihe",
|
||||||
|
"subscribedUsers": "Tilatut käyttäjät",
|
||||||
|
"subscribedUsersOnly": "Vain tilatut käyttäjät",
|
||||||
|
"successCount": "Onnistumisten määrä",
|
||||||
|
"taskStatusRefreshed": "Tehtävän tila päivitetty",
|
||||||
|
"taskStoppedSuccessfully": "Tehtävä pysäytetty onnistuneesti",
|
||||||
|
"totalSent": "Yhteensä lähetetty",
|
||||||
|
"updateSuccess": "Päivitetty onnistuneesti",
|
||||||
|
"useMarkdownEditor": "Käytä Markdown-editoria sähköpostin sisällön kirjoittamiseen esikatselutoiminnolla",
|
||||||
|
"users": "käyttäjät",
|
||||||
|
"view": "Näytä",
|
||||||
|
"viewAndManageEmailBroadcastTasks": "Näytä ja hallitse sähköpostilähetystehtäviä",
|
||||||
|
"viewContent": "Näytä sisältö"
|
||||||
|
}
|
||||||
@ -7,6 +7,7 @@
|
|||||||
"Dashboard": "Kojelauta",
|
"Dashboard": "Kojelauta",
|
||||||
"Document Management": "Asiakirjojen hallinta",
|
"Document Management": "Asiakirjojen hallinta",
|
||||||
"Finance": "Rahoitus",
|
"Finance": "Rahoitus",
|
||||||
|
"Marketing Management": "Markkinoinnin Hallinta",
|
||||||
"Order Management": "Tilausten hallinta",
|
"Order Management": "Tilausten hallinta",
|
||||||
"Payment Config": "Maksukonfiguraatio",
|
"Payment Config": "Maksukonfiguraatio",
|
||||||
"Product Management": "Tuotteen hallinta",
|
"Product Management": "Tuotteen hallinta",
|
||||||
|
|||||||
97
apps/admin/locales/fr-FR/marketing.json
Normal file
97
apps/admin/locales/fr-FR/marketing.json
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
{
|
||||||
|
"additional": "Supplémentaire",
|
||||||
|
"additionalRecipientEmails": "Emails supplémentaires des destinataires",
|
||||||
|
"additionalRecipients": "Destinataires supplémentaires",
|
||||||
|
"additionalRecipientsDescription": "Ces emails recevront la diffusion en plus du filtre utilisateur ci-dessus",
|
||||||
|
"allUsers": "Tous les utilisateurs",
|
||||||
|
"broadcastList": "Liste de diffusion",
|
||||||
|
"broadcastLogs": "Journaux de diffusion",
|
||||||
|
"cancel": "Annuler",
|
||||||
|
"cannotBeEmpty": "ne peut pas être vide",
|
||||||
|
"completed": "Terminé",
|
||||||
|
"confirm": "Confirmer",
|
||||||
|
"confirmDelete": "Confirmer la suppression",
|
||||||
|
"content": "Contenu de l'email",
|
||||||
|
"create": "Créer",
|
||||||
|
"createBroadcast": "Créer une diffusion",
|
||||||
|
"createNewEmailBroadcastCampaign": "Créer une nouvelle campagne de diffusion par email",
|
||||||
|
"createSuccess": "Créé avec succès",
|
||||||
|
"createdAt": "Créé le",
|
||||||
|
"dailyLimit": "La limite quotidienne doit être d'au moins 1",
|
||||||
|
"dailySendLimit": "Limite d'envoi quotidienne",
|
||||||
|
"delete": "Supprimer",
|
||||||
|
"deleteDescription": "Cette opération ne peut pas être annulée. Êtes-vous sûr de vouloir supprimer ?",
|
||||||
|
"deleteSuccess": "Supprimé avec succès",
|
||||||
|
"edit": "Modifier",
|
||||||
|
"emailAddedToScheduledQueue": "Email ajouté à la file d'envoi programmée",
|
||||||
|
"emailBroadcast": "Diffusion par email",
|
||||||
|
"emailBroadcastTaskCreatedSuccessfully": "Tâche de diffusion par email créée avec succès",
|
||||||
|
"emailBroadcastTasks": "Tâches de diffusion par email",
|
||||||
|
"emailContent": "Contenu de l'email",
|
||||||
|
"emailInterval": "Intervalle d'envoi des emails (secondes)",
|
||||||
|
"emailIntervalMinimum": "L'intervalle d'email doit être d'au moins 0,1 seconde",
|
||||||
|
"emailMarketing": "Marketing par email",
|
||||||
|
"emailTaskManager": "Gestionnaire de tâches d'email",
|
||||||
|
"errorMessage": "Message d'erreur",
|
||||||
|
"estimatedRecipients": "Destinataires estimés",
|
||||||
|
"expiredSubscriptionUsersOnly": "Utilisateurs avec abonnement expiré uniquement",
|
||||||
|
"expiredUsers": "Utilisateurs expirés",
|
||||||
|
"failCount": "Nombre d'échecs",
|
||||||
|
"failed": "Échoué",
|
||||||
|
"failedToRefreshTaskStatus": "Échec de la mise à jour du statut de la tâche",
|
||||||
|
"failedToStopTask": "Échec de l'arrêt de la tâche",
|
||||||
|
"inProgress": "En cours",
|
||||||
|
"includeUsersRegisteredAfter": "Inclure les utilisateurs enregistrés à partir de cette date",
|
||||||
|
"includeUsersRegisteredBefore": "Inclure les utilisateurs enregistrés avant cette date",
|
||||||
|
"intervalTimeBetweenEmails": "Temps d'intervalle entre chaque email",
|
||||||
|
"leaveEmptyForImmediateSend": "Laissez vide pour un envoi immédiat",
|
||||||
|
"logList": "Liste des journaux",
|
||||||
|
"marketingManagement": "Gestion du marketing",
|
||||||
|
"maximumNumberPerDay": "Nombre maximum d'emails à envoyer par jour",
|
||||||
|
"noSubscriptionUsersOnly": "Aucun utilisateur avec abonnement uniquement",
|
||||||
|
"nonSubscribers": "Non-abonnés",
|
||||||
|
"notStarted": "Non commencé",
|
||||||
|
"onePerLine": "un par ligne",
|
||||||
|
"only": "uniquement",
|
||||||
|
"pending": "En attente",
|
||||||
|
"pleaseEnter": "Veuillez entrer",
|
||||||
|
"pleaseEnterValidEmailAddresses": "Veuillez entrer des adresses email valides, une par ligne",
|
||||||
|
"processing": "Traitement...",
|
||||||
|
"progress": "Progrès",
|
||||||
|
"recipient": "Destinataire",
|
||||||
|
"recipientEmail": "Email du destinataire",
|
||||||
|
"recipientType": "Type de destinataire",
|
||||||
|
"registrationEndDate": "Date de fin d'inscription",
|
||||||
|
"registrationStartDate": "Date de début d'inscription",
|
||||||
|
"scheduleSend": "Planifier l'envoi",
|
||||||
|
"scheduledSend": "Envoi programmé",
|
||||||
|
"scheduledSendTimeMustBeLater": "L'heure d'envoi programmée doit être ultérieure à l'heure actuelle",
|
||||||
|
"selectSendScope": "Sélectionner le champ d'envoi",
|
||||||
|
"selectSendTime": "Sélectionner l'heure d'envoi, laissez vide pour un envoi immédiat",
|
||||||
|
"sendFailed": "Échec de l'envoi, veuillez réessayer",
|
||||||
|
"sendNow": "Envoyer maintenant",
|
||||||
|
"sendScope": "Champ d'envoi",
|
||||||
|
"sendScopeDescription": "Choisissez le champ d'utilisateurs pour l'envoi d'emails. Sélectionnez \"Emails supplémentaires uniquement\" pour envoyer uniquement aux adresses email remplies ci-dessous",
|
||||||
|
"sendSettings": "Paramètres d'envoi",
|
||||||
|
"sendTime": "Heure d'envoi",
|
||||||
|
"sending": "Envoi en cours",
|
||||||
|
"sentAt": "Envoyé le",
|
||||||
|
"specificUsers": "Utilisateurs spécifiques",
|
||||||
|
"specificUsersOnly": "Emails supplémentaires uniquement (ignorer les utilisateurs de la plateforme)",
|
||||||
|
"status": "Statut",
|
||||||
|
"stop": "Arrêter",
|
||||||
|
"stopped": "Arrêté",
|
||||||
|
"subject": "Objet de l'email",
|
||||||
|
"subscribedUsers": "Utilisateurs abonnés",
|
||||||
|
"subscribedUsersOnly": "Utilisateurs abonnés uniquement",
|
||||||
|
"successCount": "Nombre de succès",
|
||||||
|
"taskStatusRefreshed": "Statut de la tâche mis à jour",
|
||||||
|
"taskStoppedSuccessfully": "Tâche arrêtée avec succès",
|
||||||
|
"totalSent": "Total envoyé",
|
||||||
|
"updateSuccess": "Mis à jour avec succès",
|
||||||
|
"useMarkdownEditor": "Utilisez l'éditeur Markdown pour rédiger le contenu de l'email avec une fonctionnalité d'aperçu",
|
||||||
|
"users": "utilisateurs",
|
||||||
|
"view": "Voir",
|
||||||
|
"viewAndManageEmailBroadcastTasks": "Voir et gérer les tâches de diffusion par email",
|
||||||
|
"viewContent": "Voir le contenu"
|
||||||
|
}
|
||||||
@ -7,6 +7,7 @@
|
|||||||
"Dashboard": "Tableau de bord",
|
"Dashboard": "Tableau de bord",
|
||||||
"Document Management": "Gestion des documents",
|
"Document Management": "Gestion des documents",
|
||||||
"Finance": "Finance",
|
"Finance": "Finance",
|
||||||
|
"Marketing Management": "Gestion du marketing",
|
||||||
"Order Management": "Gestion des commandes",
|
"Order Management": "Gestion des commandes",
|
||||||
"Payment Config": "Configuration de paiement",
|
"Payment Config": "Configuration de paiement",
|
||||||
"Product Management": "Gestion de produit",
|
"Product Management": "Gestion de produit",
|
||||||
|
|||||||
97
apps/admin/locales/hi-IN/marketing.json
Normal file
97
apps/admin/locales/hi-IN/marketing.json
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
{
|
||||||
|
"additional": "अतिरिक्त",
|
||||||
|
"additionalRecipientEmails": "अतिरिक्त प्राप्तकर्ता ईमेल",
|
||||||
|
"additionalRecipients": "अतिरिक्त प्राप्तकर्ता",
|
||||||
|
"additionalRecipientsDescription": "ये ईमेल उपरोक्त उपयोगकर्ता फ़िल्टर के अलावा प्रसारण प्राप्त करेंगे",
|
||||||
|
"allUsers": "सभी उपयोगकर्ता",
|
||||||
|
"broadcastList": "प्रसारण सूची",
|
||||||
|
"broadcastLogs": "प्रसारण लॉग",
|
||||||
|
"cancel": "रद्द करें",
|
||||||
|
"cannotBeEmpty": "खाली नहीं हो सकता",
|
||||||
|
"completed": "पूर्ण",
|
||||||
|
"confirm": "पुष्टि करें",
|
||||||
|
"confirmDelete": "हटाने की पुष्टि करें",
|
||||||
|
"content": "ईमेल सामग्री",
|
||||||
|
"create": "बनाएँ",
|
||||||
|
"createBroadcast": "प्रसारण बनाएँ",
|
||||||
|
"createNewEmailBroadcastCampaign": "नई ईमेल प्रसारण अभियान बनाएँ",
|
||||||
|
"createSuccess": "सफलता से बनाया गया",
|
||||||
|
"createdAt": "बनाया गया",
|
||||||
|
"dailyLimit": "दैनिक सीमा कम से कम 1 होनी चाहिए",
|
||||||
|
"dailySendLimit": "दैनिक भेजने की सीमा",
|
||||||
|
"delete": "हटाएँ",
|
||||||
|
"deleteDescription": "यह क्रिया पूर्ववत नहीं की जा सकती। क्या आप वास्तव में हटाना चाहते हैं?",
|
||||||
|
"deleteSuccess": "सफलता से हटाया गया",
|
||||||
|
"edit": "संपादित करें",
|
||||||
|
"emailAddedToScheduledQueue": "ईमेल अनुसूचित भेजने की कतार में जोड़ा गया",
|
||||||
|
"emailBroadcast": "ईमेल प्रसारण",
|
||||||
|
"emailBroadcastTaskCreatedSuccessfully": "ईमेल प्रसारण कार्य सफलतापूर्वक बनाया गया",
|
||||||
|
"emailBroadcastTasks": "ईमेल प्रसारण कार्य",
|
||||||
|
"emailContent": "ईमेल सामग्री",
|
||||||
|
"emailInterval": "ईमेल अंतराल (सेकंड)",
|
||||||
|
"emailIntervalMinimum": "ईमेल अंतराल कम से कम 0.1 सेकंड होना चाहिए",
|
||||||
|
"emailMarketing": "ईमेल विपणन",
|
||||||
|
"emailTaskManager": "ईमेल कार्य प्रबंधक",
|
||||||
|
"errorMessage": "त्रुटि संदेश",
|
||||||
|
"estimatedRecipients": "अनुमानित प्राप्तकर्ता",
|
||||||
|
"expiredSubscriptionUsersOnly": "केवल समाप्त सदस्यता वाले उपयोगकर्ता",
|
||||||
|
"expiredUsers": "समाप्त उपयोगकर्ता",
|
||||||
|
"failCount": "विफलता की संख्या",
|
||||||
|
"failed": "विफल",
|
||||||
|
"failedToRefreshTaskStatus": "कार्य स्थिति को ताज़ा करने में विफल",
|
||||||
|
"failedToStopTask": "कार्य को रोकने में विफल",
|
||||||
|
"inProgress": "प्रगति पर",
|
||||||
|
"includeUsersRegisteredAfter": "इस तिथि के बाद पंजीकृत उपयोगकर्ताओं को शामिल करें",
|
||||||
|
"includeUsersRegisteredBefore": "इस तिथि से पहले पंजीकृत उपयोगकर्ताओं को शामिल करें",
|
||||||
|
"intervalTimeBetweenEmails": "प्रत्येक ईमेल के बीच का अंतराल समय",
|
||||||
|
"leaveEmptyForImmediateSend": "तत्काल भेजने के लिए खाली छोड़ें",
|
||||||
|
"logList": "लॉग सूची",
|
||||||
|
"marketingManagement": "विपणन प्रबंधन",
|
||||||
|
"maximumNumberPerDay": "प्रति दिन भेजने के लिए अधिकतम ईमेल की संख्या",
|
||||||
|
"noSubscriptionUsersOnly": "केवल कोई सदस्यता वाले उपयोगकर्ता",
|
||||||
|
"nonSubscribers": "गैर-सदस्य",
|
||||||
|
"notStarted": "शुरू नहीं हुआ",
|
||||||
|
"onePerLine": "एक प्रति पंक्ति",
|
||||||
|
"only": "केवल",
|
||||||
|
"pending": "लंबित",
|
||||||
|
"pleaseEnter": "कृपया दर्ज करें",
|
||||||
|
"pleaseEnterValidEmailAddresses": "कृपया मान्य ईमेल पते दर्ज करें, एक प्रति पंक्ति",
|
||||||
|
"processing": "प्रसंस्करण...",
|
||||||
|
"progress": "प्रगति",
|
||||||
|
"recipient": "प्राप्तकर्ता",
|
||||||
|
"recipientEmail": "प्राप्तकर्ता ईमेल",
|
||||||
|
"recipientType": "प्राप्तकर्ता प्रकार",
|
||||||
|
"registrationEndDate": "पंजीकरण समाप्ति तिथि",
|
||||||
|
"registrationStartDate": "पंजीकरण प्रारंभ तिथि",
|
||||||
|
"scheduleSend": "भेजने का कार्यक्रम",
|
||||||
|
"scheduledSend": "अनुसूचित भेजें",
|
||||||
|
"scheduledSendTimeMustBeLater": "अनुसूचित भेजने का समय वर्तमान समय से बाद में होना चाहिए",
|
||||||
|
"selectSendScope": "भेजने के दायरे का चयन करें",
|
||||||
|
"selectSendTime": "भेजने का समय चुनें, तत्काल भेजने के लिए खाली छोड़ें",
|
||||||
|
"sendFailed": "भेजने में विफल, कृपया पुनः प्रयास करें",
|
||||||
|
"sendNow": "अब भेजें",
|
||||||
|
"sendScope": "भेजने का दायरा",
|
||||||
|
"sendScopeDescription": "ईमेल भेजने के लिए उपयोगकर्ता दायरा चुनें। केवल नीचे भरे गए ईमेल पते पर भेजने के लिए \"अतिरिक्त ईमेल केवल\" चुनें",
|
||||||
|
"sendSettings": "भेजने की सेटिंग्स",
|
||||||
|
"sendTime": "भेजने का समय",
|
||||||
|
"sending": "भेजना",
|
||||||
|
"sentAt": "भेजा गया",
|
||||||
|
"specificUsers": "विशिष्ट उपयोगकर्ता",
|
||||||
|
"specificUsersOnly": "केवल अतिरिक्त ईमेल (प्लेटफ़ॉर्म उपयोगकर्ताओं को छोड़कर)",
|
||||||
|
"status": "स्थिति",
|
||||||
|
"stop": "रोकें",
|
||||||
|
"stopped": "रुका हुआ",
|
||||||
|
"subject": "ईमेल विषय",
|
||||||
|
"subscribedUsers": "सदस्यता प्राप्त उपयोगकर्ता",
|
||||||
|
"subscribedUsersOnly": "केवल सदस्यता प्राप्त उपयोगकर्ता",
|
||||||
|
"successCount": "सफलता की संख्या",
|
||||||
|
"taskStatusRefreshed": "कार्य स्थिति को ताज़ा किया गया",
|
||||||
|
"taskStoppedSuccessfully": "कार्य सफलतापूर्वक रोका गया",
|
||||||
|
"totalSent": "कुल भेजा गया",
|
||||||
|
"updateSuccess": "सफलता से अपडेट किया गया",
|
||||||
|
"useMarkdownEditor": "ईमेल सामग्री लिखने के लिए मार्कडाउन संपादक का उपयोग करें जिसमें पूर्वावलोकन कार्यक्षमता है",
|
||||||
|
"users": "उपयोगकर्ता",
|
||||||
|
"view": "देखें",
|
||||||
|
"viewAndManageEmailBroadcastTasks": "ईमेल प्रसारण कार्यों को देखें और प्रबंधित करें",
|
||||||
|
"viewContent": "सामग्री देखें"
|
||||||
|
}
|
||||||
@ -7,6 +7,7 @@
|
|||||||
"Dashboard": "डैशबोर्ड",
|
"Dashboard": "डैशबोर्ड",
|
||||||
"Document Management": "दस्तावेज़ प्रबंधन",
|
"Document Management": "दस्तावेज़ प्रबंधन",
|
||||||
"Finance": "वित्त",
|
"Finance": "वित्त",
|
||||||
|
"Marketing Management": "मार्केटिंग प्रबंधन",
|
||||||
"Order Management": "ऑर्डर प्रबंधन",
|
"Order Management": "ऑर्डर प्रबंधन",
|
||||||
"Payment Config": "भुगतान कॉन्फ़िगरेशन",
|
"Payment Config": "भुगतान कॉन्फ़िगरेशन",
|
||||||
"Product Management": "उत्पाद प्रबंधन",
|
"Product Management": "उत्पाद प्रबंधन",
|
||||||
|
|||||||
97
apps/admin/locales/hu-HU/marketing.json
Normal file
97
apps/admin/locales/hu-HU/marketing.json
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
{
|
||||||
|
"additional": "További",
|
||||||
|
"additionalRecipientEmails": "További címzett e-mailek",
|
||||||
|
"additionalRecipients": "További címzettek",
|
||||||
|
"additionalRecipientsDescription": "Ezek az e-mailek a fenti felhasználói szűrőn kívül is megkapják a közvetítést",
|
||||||
|
"allUsers": "Minden felhasználó",
|
||||||
|
"broadcastList": "Közvetítési lista",
|
||||||
|
"broadcastLogs": "Közvetítési naplók",
|
||||||
|
"cancel": "Mégse",
|
||||||
|
"cannotBeEmpty": "nem lehet üres",
|
||||||
|
"completed": "Befejezve",
|
||||||
|
"confirm": "Megerősít",
|
||||||
|
"confirmDelete": "Törlés megerősítése",
|
||||||
|
"content": "E-mail tartalom",
|
||||||
|
"create": "Létrehoz",
|
||||||
|
"createBroadcast": "Közvetítés létrehozása",
|
||||||
|
"createNewEmailBroadcastCampaign": "Új e-mail közvetítési kampány létrehozása",
|
||||||
|
"createSuccess": "Sikeresen létrehozva",
|
||||||
|
"createdAt": "Létrehozva",
|
||||||
|
"dailyLimit": "A napi limitnek legalább 1-nek kell lennie",
|
||||||
|
"dailySendLimit": "Napi küldési limit",
|
||||||
|
"delete": "Törlés",
|
||||||
|
"deleteDescription": "Ez a művelet nem vonható vissza. Biztosan törölni szeretné?",
|
||||||
|
"deleteSuccess": "Sikeresen törölve",
|
||||||
|
"edit": "Szerkeszt",
|
||||||
|
"emailAddedToScheduledQueue": "E-mail hozzáadva a tervezett küldési sorhoz",
|
||||||
|
"emailBroadcast": "E-mail közvetítés",
|
||||||
|
"emailBroadcastTaskCreatedSuccessfully": "E-mail közvetítési feladat sikeresen létrehozva",
|
||||||
|
"emailBroadcastTasks": "E-mail közvetítési feladatok",
|
||||||
|
"emailContent": "E-mail tartalom",
|
||||||
|
"emailInterval": "E-mail intervallum (másodperc)",
|
||||||
|
"emailIntervalMinimum": "Az e-mail intervallumnak legalább 0,1 másodpercesnek kell lennie",
|
||||||
|
"emailMarketing": "E-mail marketing",
|
||||||
|
"emailTaskManager": "E-mail feladatkezelő",
|
||||||
|
"errorMessage": "Hibaüzenet",
|
||||||
|
"estimatedRecipients": "Becsült címzettek",
|
||||||
|
"expiredSubscriptionUsersOnly": "Csak lejárt előfizetésű felhasználók",
|
||||||
|
"expiredUsers": "Lejárt felhasználók",
|
||||||
|
"failCount": "Hibák száma",
|
||||||
|
"failed": "Sikertelen",
|
||||||
|
"failedToRefreshTaskStatus": "A feladat állapotának frissítése sikertelen",
|
||||||
|
"failedToStopTask": "A feladat leállítása sikertelen",
|
||||||
|
"inProgress": "Folyamatban",
|
||||||
|
"includeUsersRegisteredAfter": "Felhasználók, akik ezen a napon vagy azt követően regisztráltak",
|
||||||
|
"includeUsersRegisteredBefore": "Felhasználók, akik ezen a napon vagy azt megelőzően regisztráltak",
|
||||||
|
"intervalTimeBetweenEmails": "Időintervallum az egyes e-mailek között",
|
||||||
|
"leaveEmptyForImmediateSend": "Hagyja üresen az azonnali küldéshez",
|
||||||
|
"logList": "Napló lista",
|
||||||
|
"marketingManagement": "Marketing menedzsment",
|
||||||
|
"maximumNumberPerDay": "Maximum e-mailek száma naponta",
|
||||||
|
"noSubscriptionUsersOnly": "Csak előfizetéssel nem rendelkező felhasználók",
|
||||||
|
"nonSubscribers": "Nem előfizetők",
|
||||||
|
"notStarted": "Nem indult el",
|
||||||
|
"onePerLine": "egy sorban",
|
||||||
|
"only": "csak",
|
||||||
|
"pending": "Függőben",
|
||||||
|
"pleaseEnter": "Kérjük, adja meg",
|
||||||
|
"pleaseEnterValidEmailAddresses": "Kérjük, adjon meg érvényes e-mail címeket, egy sorban",
|
||||||
|
"processing": "Feldolgozás...",
|
||||||
|
"progress": "Haladás",
|
||||||
|
"recipient": "Címzett",
|
||||||
|
"recipientEmail": "Címzett e-mail",
|
||||||
|
"recipientType": "Címzett típusa",
|
||||||
|
"registrationEndDate": "Regisztrációs végdátum",
|
||||||
|
"registrationStartDate": "Regisztrációs kezdődátum",
|
||||||
|
"scheduleSend": "Küldés ütemezése",
|
||||||
|
"scheduledSend": "Ütemezett küldés",
|
||||||
|
"scheduledSendTimeMustBeLater": "Az ütemezett küldési időnek később kell lennie, mint a jelenlegi idő",
|
||||||
|
"selectSendScope": "Küldési terjedelem kiválasztása",
|
||||||
|
"selectSendTime": "Küldési idő kiválasztása, hagyja üresen az azonnali küldéshez",
|
||||||
|
"sendFailed": "A küldés sikertelen, kérjük, próbálja újra",
|
||||||
|
"sendNow": "Küldés most",
|
||||||
|
"sendScope": "Küldési terjedelem",
|
||||||
|
"sendScopeDescription": "Válassza ki a felhasználói terjedelmet az e-mail küldéséhez. Válassza a \"Csak további e-mailek\" lehetőséget, ha csak az alább megadott e-mail címekre szeretne küldeni",
|
||||||
|
"sendSettings": "Küldési beállítások",
|
||||||
|
"sendTime": "Küldési idő",
|
||||||
|
"sending": "Küldés alatt",
|
||||||
|
"sentAt": "Küldve",
|
||||||
|
"specificUsers": "Különleges felhasználók",
|
||||||
|
"specificUsersOnly": "Csak további e-mailek (platform felhasználók kihagyása)",
|
||||||
|
"status": "Állapot",
|
||||||
|
"stop": "Megállít",
|
||||||
|
"stopped": "Megállítva",
|
||||||
|
"subject": "E-mail téma",
|
||||||
|
"subscribedUsers": "Előfizetett felhasználók",
|
||||||
|
"subscribedUsersOnly": "Csak előfizetett felhasználók",
|
||||||
|
"successCount": "Sikeres küldések száma",
|
||||||
|
"taskStatusRefreshed": "Feladat állapota frissítve",
|
||||||
|
"taskStoppedSuccessfully": "Feladat sikeresen leállítva",
|
||||||
|
"totalSent": "Összes küldve",
|
||||||
|
"updateSuccess": "Sikeresen frissítve",
|
||||||
|
"useMarkdownEditor": "Használja a Markdown szerkesztőt az e-mail tartalom írásához előnézeti funkcióval",
|
||||||
|
"users": "felhasználók",
|
||||||
|
"view": "Megtekintés",
|
||||||
|
"viewAndManageEmailBroadcastTasks": "E-mail közvetítési feladatok megtekintése és kezelése",
|
||||||
|
"viewContent": "Tartalom megtekintése"
|
||||||
|
}
|
||||||
@ -7,6 +7,7 @@
|
|||||||
"Dashboard": "Irányítópult",
|
"Dashboard": "Irányítópult",
|
||||||
"Document Management": "Dokumentumkezelés",
|
"Document Management": "Dokumentumkezelés",
|
||||||
"Finance": "Pénzügy",
|
"Finance": "Pénzügy",
|
||||||
|
"Marketing Management": "Marketing Menedzsment",
|
||||||
"Order Management": "Rendeléskezelés",
|
"Order Management": "Rendeléskezelés",
|
||||||
"Payment Config": "Fizetési beállítások",
|
"Payment Config": "Fizetési beállítások",
|
||||||
"Product Management": "Termékmenedzsment",
|
"Product Management": "Termékmenedzsment",
|
||||||
|
|||||||
97
apps/admin/locales/ja-JP/marketing.json
Normal file
97
apps/admin/locales/ja-JP/marketing.json
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
{
|
||||||
|
"additional": "追加",
|
||||||
|
"additionalRecipientEmails": "追加の受信者メール",
|
||||||
|
"additionalRecipients": "追加の受信者",
|
||||||
|
"additionalRecipientsDescription": "これらのメールは、上記のユーザーフィルターに加えて放送を受信します",
|
||||||
|
"allUsers": "すべてのユーザー",
|
||||||
|
"broadcastList": "放送リスト",
|
||||||
|
"broadcastLogs": "放送ログ",
|
||||||
|
"cancel": "キャンセル",
|
||||||
|
"cannotBeEmpty": "空にすることはできません",
|
||||||
|
"completed": "完了",
|
||||||
|
"confirm": "確認",
|
||||||
|
"confirmDelete": "削除を確認",
|
||||||
|
"content": "メール内容",
|
||||||
|
"create": "作成",
|
||||||
|
"createBroadcast": "放送を作成",
|
||||||
|
"createNewEmailBroadcastCampaign": "新しいメール放送キャンペーンを作成",
|
||||||
|
"createSuccess": "作成に成功しました",
|
||||||
|
"createdAt": "作成日時",
|
||||||
|
"dailyLimit": "1以上のデイリーログが必要です",
|
||||||
|
"dailySendLimit": "デイリー送信制限",
|
||||||
|
"delete": "削除",
|
||||||
|
"deleteDescription": "この操作は元に戻せません。本当に削除しますか?",
|
||||||
|
"deleteSuccess": "削除に成功しました",
|
||||||
|
"edit": "編集",
|
||||||
|
"emailAddedToScheduledQueue": "メールがスケジュール送信キューに追加されました",
|
||||||
|
"emailBroadcast": "メール放送",
|
||||||
|
"emailBroadcastTaskCreatedSuccessfully": "メール放送タスクが正常に作成されました",
|
||||||
|
"emailBroadcastTasks": "メール放送タスク",
|
||||||
|
"emailContent": "メール内容",
|
||||||
|
"emailInterval": "メール間隔(秒)",
|
||||||
|
"emailIntervalMinimum": "メール間隔は0.1秒以上でなければなりません",
|
||||||
|
"emailMarketing": "メールマーケティング",
|
||||||
|
"emailTaskManager": "メールタスクマネージャー",
|
||||||
|
"errorMessage": "エラーメッセージ",
|
||||||
|
"estimatedRecipients": "推定受信者",
|
||||||
|
"expiredSubscriptionUsersOnly": "期限切れのサブスクリプションユーザーのみ",
|
||||||
|
"expiredUsers": "期限切れのユーザー",
|
||||||
|
"failCount": "失敗数",
|
||||||
|
"failed": "失敗",
|
||||||
|
"failedToRefreshTaskStatus": "タスクステータスの更新に失敗しました",
|
||||||
|
"failedToStopTask": "タスクの停止に失敗しました",
|
||||||
|
"inProgress": "進行中",
|
||||||
|
"includeUsersRegisteredAfter": "この日以降に登録されたユーザーを含める",
|
||||||
|
"includeUsersRegisteredBefore": "この日以前に登録されたユーザーを含める",
|
||||||
|
"intervalTimeBetweenEmails": "各メール間の間隔時間",
|
||||||
|
"leaveEmptyForImmediateSend": "即時送信のために空白のままにする",
|
||||||
|
"logList": "ログリスト",
|
||||||
|
"marketingManagement": "マーケティング管理",
|
||||||
|
"maximumNumberPerDay": "1日に送信できるメールの最大数",
|
||||||
|
"noSubscriptionUsersOnly": "サブスクリプションのないユーザーのみ",
|
||||||
|
"nonSubscribers": "非購読者",
|
||||||
|
"notStarted": "未開始",
|
||||||
|
"onePerLine": "1行に1つ",
|
||||||
|
"only": "のみ",
|
||||||
|
"pending": "保留中",
|
||||||
|
"pleaseEnter": "入力してください",
|
||||||
|
"pleaseEnterValidEmailAddresses": "有効なメールアドレスを入力してください(1行に1つ)",
|
||||||
|
"processing": "処理中...",
|
||||||
|
"progress": "進捗",
|
||||||
|
"recipient": "受信者",
|
||||||
|
"recipientEmail": "受信者メール",
|
||||||
|
"recipientType": "受信者タイプ",
|
||||||
|
"registrationEndDate": "登録終了日",
|
||||||
|
"registrationStartDate": "登録開始日",
|
||||||
|
"scheduleSend": "送信スケジュール",
|
||||||
|
"scheduledSend": "スケジュール送信",
|
||||||
|
"scheduledSendTimeMustBeLater": "スケジュール送信時間は現在の時間よりも遅くなければなりません",
|
||||||
|
"selectSendScope": "送信範囲を選択",
|
||||||
|
"selectSendTime": "送信時間を選択、即時送信のために空白のままにする",
|
||||||
|
"sendFailed": "送信に失敗しました。再試行してください",
|
||||||
|
"sendNow": "今すぐ送信",
|
||||||
|
"sendScope": "送信範囲",
|
||||||
|
"sendScopeDescription": "メール送信のユーザー範囲を選択します。「追加のメールのみ」を選択すると、下に入力されたメールアドレスのみに送信されます",
|
||||||
|
"sendSettings": "送信設定",
|
||||||
|
"sendTime": "送信時間",
|
||||||
|
"sending": "送信中",
|
||||||
|
"sentAt": "送信日時",
|
||||||
|
"specificUsers": "特定のユーザー",
|
||||||
|
"specificUsersOnly": "追加のメールのみ(プラットフォームユーザーをスキップ)",
|
||||||
|
"status": "ステータス",
|
||||||
|
"stop": "停止",
|
||||||
|
"stopped": "停止しました",
|
||||||
|
"subject": "メール件名",
|
||||||
|
"subscribedUsers": "購読ユーザー",
|
||||||
|
"subscribedUsersOnly": "購読ユーザーのみ",
|
||||||
|
"successCount": "成功数",
|
||||||
|
"taskStatusRefreshed": "タスクステータスが更新されました",
|
||||||
|
"taskStoppedSuccessfully": "タスクが正常に停止しました",
|
||||||
|
"totalSent": "合計送信数",
|
||||||
|
"updateSuccess": "更新に成功しました",
|
||||||
|
"useMarkdownEditor": "プレビュー機能を使ってメール内容を書くためにMarkdownエディタを使用",
|
||||||
|
"users": "ユーザー",
|
||||||
|
"view": "表示",
|
||||||
|
"viewAndManageEmailBroadcastTasks": "メール放送タスクを表示および管理",
|
||||||
|
"viewContent": "内容を表示"
|
||||||
|
}
|
||||||
@ -7,6 +7,7 @@
|
|||||||
"Dashboard": "ダッシュボード",
|
"Dashboard": "ダッシュボード",
|
||||||
"Document Management": "ドキュメント管理",
|
"Document Management": "ドキュメント管理",
|
||||||
"Finance": "財務",
|
"Finance": "財務",
|
||||||
|
"Marketing Management": "マーケティングマネジメント",
|
||||||
"Order Management": "注文管理",
|
"Order Management": "注文管理",
|
||||||
"Payment Config": "支払い設定",
|
"Payment Config": "支払い設定",
|
||||||
"Product Management": "プロダクトマネジメント",
|
"Product Management": "プロダクトマネジメント",
|
||||||
|
|||||||
97
apps/admin/locales/ko-KR/marketing.json
Normal file
97
apps/admin/locales/ko-KR/marketing.json
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
{
|
||||||
|
"additional": "추가",
|
||||||
|
"additionalRecipientEmails": "추가 수신자 이메일",
|
||||||
|
"additionalRecipients": "추가 수신자",
|
||||||
|
"additionalRecipientsDescription": "이 이메일은 위의 사용자 필터 외에 방송을 수신합니다.",
|
||||||
|
"allUsers": "모든 사용자",
|
||||||
|
"broadcastList": "방송 목록",
|
||||||
|
"broadcastLogs": "방송 로그",
|
||||||
|
"cancel": "취소",
|
||||||
|
"cannotBeEmpty": "비어 있을 수 없습니다",
|
||||||
|
"completed": "완료",
|
||||||
|
"confirm": "확인",
|
||||||
|
"confirmDelete": "삭제 확인",
|
||||||
|
"content": "이메일 내용",
|
||||||
|
"create": "생성",
|
||||||
|
"createBroadcast": "방송 생성",
|
||||||
|
"createNewEmailBroadcastCampaign": "새 이메일 방송 캠페인 생성",
|
||||||
|
"createSuccess": "성공적으로 생성됨",
|
||||||
|
"createdAt": "생성일",
|
||||||
|
"dailyLimit": "일일 한도는 최소 1 이상이어야 합니다",
|
||||||
|
"dailySendLimit": "일일 발송 한도",
|
||||||
|
"delete": "삭제",
|
||||||
|
"deleteDescription": "이 작업은 취소할 수 없습니다. 정말로 삭제하시겠습니까?",
|
||||||
|
"deleteSuccess": "성공적으로 삭제됨",
|
||||||
|
"edit": "편집",
|
||||||
|
"emailAddedToScheduledQueue": "이메일이 예약 발송 대기열에 추가됨",
|
||||||
|
"emailBroadcast": "이메일 방송",
|
||||||
|
"emailBroadcastTaskCreatedSuccessfully": "이메일 방송 작업이 성공적으로 생성됨",
|
||||||
|
"emailBroadcastTasks": "이메일 방송 작업",
|
||||||
|
"emailContent": "이메일 내용",
|
||||||
|
"emailInterval": "이메일 간격 (초)",
|
||||||
|
"emailIntervalMinimum": "이메일 간격은 최소 0.1초 이상이어야 합니다",
|
||||||
|
"emailMarketing": "이메일 마케팅",
|
||||||
|
"emailTaskManager": "이메일 작업 관리자",
|
||||||
|
"errorMessage": "오류 메시지",
|
||||||
|
"estimatedRecipients": "예상 수신자",
|
||||||
|
"expiredSubscriptionUsersOnly": "만료된 구독 사용자만",
|
||||||
|
"expiredUsers": "만료된 사용자",
|
||||||
|
"failCount": "실패 수",
|
||||||
|
"failed": "실패",
|
||||||
|
"failedToRefreshTaskStatus": "작업 상태를 새로 고치는 데 실패했습니다",
|
||||||
|
"failedToStopTask": "작업 중지에 실패했습니다",
|
||||||
|
"inProgress": "진행 중",
|
||||||
|
"includeUsersRegisteredAfter": "이 날짜 이후에 등록된 사용자 포함",
|
||||||
|
"includeUsersRegisteredBefore": "이 날짜 이전에 등록된 사용자 포함",
|
||||||
|
"intervalTimeBetweenEmails": "각 이메일 간의 간격 시간",
|
||||||
|
"leaveEmptyForImmediateSend": "즉시 발송을 위해 비워 두세요",
|
||||||
|
"logList": "로그 목록",
|
||||||
|
"marketingManagement": "마케팅 관리",
|
||||||
|
"maximumNumberPerDay": "하루에 보낼 수 있는 최대 이메일 수",
|
||||||
|
"noSubscriptionUsersOnly": "구독 없는 사용자만",
|
||||||
|
"nonSubscribers": "비구독자",
|
||||||
|
"notStarted": "시작되지 않음",
|
||||||
|
"onePerLine": "한 줄에 하나",
|
||||||
|
"only": "오직",
|
||||||
|
"pending": "대기 중",
|
||||||
|
"pleaseEnter": "입력해 주세요",
|
||||||
|
"pleaseEnterValidEmailAddresses": "유효한 이메일 주소를 입력해 주세요, 한 줄에 하나씩",
|
||||||
|
"processing": "처리 중...",
|
||||||
|
"progress": "진행 상황",
|
||||||
|
"recipient": "수신자",
|
||||||
|
"recipientEmail": "수신자 이메일",
|
||||||
|
"recipientType": "수신자 유형",
|
||||||
|
"registrationEndDate": "등록 종료 날짜",
|
||||||
|
"registrationStartDate": "등록 시작 날짜",
|
||||||
|
"scheduleSend": "예약 발송",
|
||||||
|
"scheduledSend": "예약 발송",
|
||||||
|
"scheduledSendTimeMustBeLater": "예약 발송 시간은 현재 시간 이후여야 합니다",
|
||||||
|
"selectSendScope": "발송 범위 선택",
|
||||||
|
"selectSendTime": "발송 시간 선택, 즉시 발송을 위해 비워 두세요",
|
||||||
|
"sendFailed": "발송 실패, 다시 시도해 주세요",
|
||||||
|
"sendNow": "지금 발송",
|
||||||
|
"sendScope": "발송 범위",
|
||||||
|
"sendScopeDescription": "이메일 발송을 위한 사용자 범위를 선택하세요. 아래에 입력된 이메일 주소로만 발송하려면 '추가 이메일만'을 선택하세요.",
|
||||||
|
"sendSettings": "발송 설정",
|
||||||
|
"sendTime": "발송 시간",
|
||||||
|
"sending": "발송 중",
|
||||||
|
"sentAt": "발송일",
|
||||||
|
"specificUsers": "특정 사용자",
|
||||||
|
"specificUsersOnly": "추가 이메일만 (플랫폼 사용자 제외)",
|
||||||
|
"status": "상태",
|
||||||
|
"stop": "중지",
|
||||||
|
"stopped": "중지됨",
|
||||||
|
"subject": "이메일 제목",
|
||||||
|
"subscribedUsers": "구독한 사용자",
|
||||||
|
"subscribedUsersOnly": "구독한 사용자만",
|
||||||
|
"successCount": "성공 수",
|
||||||
|
"taskStatusRefreshed": "작업 상태가 새로 고쳐졌습니다",
|
||||||
|
"taskStoppedSuccessfully": "작업이 성공적으로 중지되었습니다",
|
||||||
|
"totalSent": "총 발송 수",
|
||||||
|
"updateSuccess": "성공적으로 업데이트됨",
|
||||||
|
"useMarkdownEditor": "미리보기 기능이 있는 Markdown 편집기를 사용하여 이메일 내용을 작성하세요",
|
||||||
|
"users": "사용자",
|
||||||
|
"view": "보기",
|
||||||
|
"viewAndManageEmailBroadcastTasks": "이메일 방송 작업 보기 및 관리",
|
||||||
|
"viewContent": "내용 보기"
|
||||||
|
}
|
||||||
@ -7,6 +7,7 @@
|
|||||||
"Dashboard": "대시보드",
|
"Dashboard": "대시보드",
|
||||||
"Document Management": "문서 관리",
|
"Document Management": "문서 관리",
|
||||||
"Finance": "재무",
|
"Finance": "재무",
|
||||||
|
"Marketing Management": "마케팅 관리",
|
||||||
"Order Management": "주문 관리",
|
"Order Management": "주문 관리",
|
||||||
"Payment Config": "결제 구성",
|
"Payment Config": "결제 구성",
|
||||||
"Product Management": "제품 관리",
|
"Product Management": "제품 관리",
|
||||||
|
|||||||
97
apps/admin/locales/no-NO/marketing.json
Normal file
97
apps/admin/locales/no-NO/marketing.json
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
{
|
||||||
|
"additional": "Tillegg",
|
||||||
|
"additionalRecipientEmails": "Ytterligere mottaker-e-poster",
|
||||||
|
"additionalRecipients": "Ytterligere mottakere",
|
||||||
|
"additionalRecipientsDescription": "Disse e-postene vil motta sendingen i tillegg til brukerfilteret ovenfor",
|
||||||
|
"allUsers": "Alle brukere",
|
||||||
|
"broadcastList": "Sende liste",
|
||||||
|
"broadcastLogs": "Sende logger",
|
||||||
|
"cancel": "Avbryt",
|
||||||
|
"cannotBeEmpty": "kan ikke være tom",
|
||||||
|
"completed": "Fullført",
|
||||||
|
"confirm": "Bekreft",
|
||||||
|
"confirmDelete": "Bekreft sletting",
|
||||||
|
"content": "E-postinnhold",
|
||||||
|
"create": "Opprett",
|
||||||
|
"createBroadcast": "Opprett sending",
|
||||||
|
"createNewEmailBroadcastCampaign": "Opprett ny e-postsending kampanje",
|
||||||
|
"createSuccess": "Opprettet med suksess",
|
||||||
|
"createdAt": "Opprettet den",
|
||||||
|
"dailyLimit": "Daglig grense må være minst 1",
|
||||||
|
"dailySendLimit": "Daglig sendingsgrense",
|
||||||
|
"delete": "Slett",
|
||||||
|
"deleteDescription": "Denne operasjonen kan ikke angres. Er du sikker på at du vil slette?",
|
||||||
|
"deleteSuccess": "Slettet med suksess",
|
||||||
|
"edit": "Rediger",
|
||||||
|
"emailAddedToScheduledQueue": "E-post lagt til i planlagt sendekø",
|
||||||
|
"emailBroadcast": "E-postsending",
|
||||||
|
"emailBroadcastTaskCreatedSuccessfully": "E-postsending oppgave opprettet med suksess",
|
||||||
|
"emailBroadcastTasks": "E-postsending oppgaver",
|
||||||
|
"emailContent": "E-postinnhold",
|
||||||
|
"emailInterval": "E-postintervall (sekunder)",
|
||||||
|
"emailIntervalMinimum": "E-postintervall må være minst 0,1 sekunder",
|
||||||
|
"emailMarketing": "E-postmarkedsføring",
|
||||||
|
"emailTaskManager": "E-postoppgavebehandler",
|
||||||
|
"errorMessage": "Feilmelding",
|
||||||
|
"estimatedRecipients": "Estimert antall mottakere",
|
||||||
|
"expiredSubscriptionUsersOnly": "Kun brukere med utløpt abonnement",
|
||||||
|
"expiredUsers": "Utløpte brukere",
|
||||||
|
"failCount": "Feilantall",
|
||||||
|
"failed": "Feilet",
|
||||||
|
"failedToRefreshTaskStatus": "Feilet å oppdatere oppgave-status",
|
||||||
|
"failedToStopTask": "Feilet å stoppe oppgave",
|
||||||
|
"inProgress": "Pågår",
|
||||||
|
"includeUsersRegisteredAfter": "Inkluder brukere registrert på eller etter denne datoen",
|
||||||
|
"includeUsersRegisteredBefore": "Inkluder brukere registrert på eller før denne datoen",
|
||||||
|
"intervalTimeBetweenEmails": "Intervall tid mellom hver e-post",
|
||||||
|
"leaveEmptyForImmediateSend": "La stå tomt for umiddelbar sending",
|
||||||
|
"logList": "Loggliste",
|
||||||
|
"marketingManagement": "Markedsføringsledelse",
|
||||||
|
"maximumNumberPerDay": "Maksimalt antall e-poster som kan sendes per dag",
|
||||||
|
"noSubscriptionUsersOnly": "Kun brukere uten abonnement",
|
||||||
|
"nonSubscribers": "Ikke-abonnenter",
|
||||||
|
"notStarted": "Ikke startet",
|
||||||
|
"onePerLine": "en per linje",
|
||||||
|
"only": "kun",
|
||||||
|
"pending": "Venter",
|
||||||
|
"pleaseEnter": "Vennligst skriv inn",
|
||||||
|
"pleaseEnterValidEmailAddresses": "Vennligst skriv inn gyldige e-postadresser, en per linje",
|
||||||
|
"processing": "Behandler...",
|
||||||
|
"progress": "Fremdrift",
|
||||||
|
"recipient": "Mottaker",
|
||||||
|
"recipientEmail": "Mottakerens e-post",
|
||||||
|
"recipientType": "Mottakertype",
|
||||||
|
"registrationEndDate": "Registreringssluttdato",
|
||||||
|
"registrationStartDate": "Registreringsstartdato",
|
||||||
|
"scheduleSend": "Planlegg sending",
|
||||||
|
"scheduledSend": "Planlagt sending",
|
||||||
|
"scheduledSendTimeMustBeLater": "Planlagt sendetid må være senere enn nåværende tid",
|
||||||
|
"selectSendScope": "Velg sendingsomfang",
|
||||||
|
"selectSendTime": "Velg sendetid, la stå tomt for umiddelbar sending",
|
||||||
|
"sendFailed": "Sending feilet, vennligst prøv igjen",
|
||||||
|
"sendNow": "Send nå",
|
||||||
|
"sendScope": "Sendingsomfang",
|
||||||
|
"sendScopeDescription": "Velg brukeromfang for e-postsending. Velg \"Kun ytterligere e-poster\" for å sende kun til e-postadressene fylt ut nedenfor",
|
||||||
|
"sendSettings": "Sendingsinnstillinger",
|
||||||
|
"sendTime": "Sendetid",
|
||||||
|
"sending": "Sender",
|
||||||
|
"sentAt": "Sendt den",
|
||||||
|
"specificUsers": "Spesifikke brukere",
|
||||||
|
"specificUsersOnly": "Kun ytterligere e-poster (hopp over plattformbrukere)",
|
||||||
|
"status": "Status",
|
||||||
|
"stop": "Stopp",
|
||||||
|
"stopped": "Stoppet",
|
||||||
|
"subject": "E-postemne",
|
||||||
|
"subscribedUsers": "Abonnerte brukere",
|
||||||
|
"subscribedUsersOnly": "Kun abonnenter",
|
||||||
|
"successCount": "Suksessantall",
|
||||||
|
"taskStatusRefreshed": "Oppgave-status oppdatert",
|
||||||
|
"taskStoppedSuccessfully": "Oppgave stoppet med suksess",
|
||||||
|
"totalSent": "Totalt sendt",
|
||||||
|
"updateSuccess": "Oppdatert med suksess",
|
||||||
|
"useMarkdownEditor": "Bruk Markdown-editor for å skrive e-postinnhold med forhåndsvisningsfunksjonalitet",
|
||||||
|
"users": "brukere",
|
||||||
|
"view": "Vis",
|
||||||
|
"viewAndManageEmailBroadcastTasks": "Vis og administrer e-postsending oppgaver",
|
||||||
|
"viewContent": "Vis innhold"
|
||||||
|
}
|
||||||
@ -7,6 +7,7 @@
|
|||||||
"Dashboard": "Dashbord",
|
"Dashboard": "Dashbord",
|
||||||
"Document Management": "Dokumenthåndtering",
|
"Document Management": "Dokumenthåndtering",
|
||||||
"Finance": "Finans",
|
"Finance": "Finans",
|
||||||
|
"Marketing Management": "Markedsføringsledelse",
|
||||||
"Order Management": "Bestillingsadministrasjon",
|
"Order Management": "Bestillingsadministrasjon",
|
||||||
"Payment Config": "Betalingskonfigurasjon",
|
"Payment Config": "Betalingskonfigurasjon",
|
||||||
"Product Management": "Produktledelse",
|
"Product Management": "Produktledelse",
|
||||||
|
|||||||
97
apps/admin/locales/pl-PL/marketing.json
Normal file
97
apps/admin/locales/pl-PL/marketing.json
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
{
|
||||||
|
"additional": "Dodatkowe",
|
||||||
|
"additionalRecipientEmails": "Dodatkowe adresy e-mail odbiorców",
|
||||||
|
"additionalRecipients": "Dodatkowi odbiorcy",
|
||||||
|
"additionalRecipientsDescription": "Te adresy e-mail otrzymają transmisję oprócz filtru użytkownika powyżej",
|
||||||
|
"allUsers": "Wszyscy użytkownicy",
|
||||||
|
"broadcastList": "Lista transmisji",
|
||||||
|
"broadcastLogs": "Dzienniki transmisji",
|
||||||
|
"cancel": "Anuluj",
|
||||||
|
"cannotBeEmpty": "nie może być puste",
|
||||||
|
"completed": "Zakończone",
|
||||||
|
"confirm": "Potwierdź",
|
||||||
|
"confirmDelete": "Potwierdź usunięcie",
|
||||||
|
"content": "Treść e-maila",
|
||||||
|
"create": "Utwórz",
|
||||||
|
"createBroadcast": "Utwórz transmisję",
|
||||||
|
"createNewEmailBroadcastCampaign": "Utwórz nową kampanię e-mailową",
|
||||||
|
"createSuccess": "Utworzono pomyślnie",
|
||||||
|
"createdAt": "Utworzono",
|
||||||
|
"dailyLimit": "Dzienny limit musi wynosić co najmniej 1",
|
||||||
|
"dailySendLimit": "Dzienny limit wysyłki",
|
||||||
|
"delete": "Usuń",
|
||||||
|
"deleteDescription": "Ta operacja nie może być cofnięta. Czy na pewno chcesz usunąć?",
|
||||||
|
"deleteSuccess": "Usunięto pomyślnie",
|
||||||
|
"edit": "Edytuj",
|
||||||
|
"emailAddedToScheduledQueue": "E-mail dodany do kolejki wysyłki",
|
||||||
|
"emailBroadcast": "Transmisja e-mailowa",
|
||||||
|
"emailBroadcastTaskCreatedSuccessfully": "Zadanie transmisji e-mailowej utworzone pomyślnie",
|
||||||
|
"emailBroadcastTasks": "Zadania transmisji e-mailowej",
|
||||||
|
"emailContent": "Treść e-maila",
|
||||||
|
"emailInterval": "Interwał e-mailowy (sekundy)",
|
||||||
|
"emailIntervalMinimum": "Interwał e-mailowy musi wynosić co najmniej 0,1 sekundy",
|
||||||
|
"emailMarketing": "Marketing e-mailowy",
|
||||||
|
"emailTaskManager": "Menadżer zadań e-mailowych",
|
||||||
|
"errorMessage": "Wiadomość o błędzie",
|
||||||
|
"estimatedRecipients": "Szacunkowa liczba odbiorców",
|
||||||
|
"expiredSubscriptionUsersOnly": "Tylko użytkownicy z wygasłymi subskrypcjami",
|
||||||
|
"expiredUsers": "Wygasłe konta",
|
||||||
|
"failCount": "Liczba niepowodzeń",
|
||||||
|
"failed": "Niepowodzenie",
|
||||||
|
"failedToRefreshTaskStatus": "Nie udało się odświeżyć statusu zadania",
|
||||||
|
"failedToStopTask": "Nie udało się zatrzymać zadania",
|
||||||
|
"inProgress": "W trakcie",
|
||||||
|
"includeUsersRegisteredAfter": "Uwzględnij użytkowników zarejestrowanych po tej dacie",
|
||||||
|
"includeUsersRegisteredBefore": "Uwzględnij użytkowników zarejestrowanych przed tą datą",
|
||||||
|
"intervalTimeBetweenEmails": "Czas interwału między każdym e-mailem",
|
||||||
|
"leaveEmptyForImmediateSend": "Pozostaw puste, aby wysłać natychmiast",
|
||||||
|
"logList": "Lista dzienników",
|
||||||
|
"marketingManagement": "Zarządzanie marketingiem",
|
||||||
|
"maximumNumberPerDay": "Maksymalna liczba e-maili do wysłania dziennie",
|
||||||
|
"noSubscriptionUsersOnly": "Tylko użytkownicy bez subskrypcji",
|
||||||
|
"nonSubscribers": "Nie subskrybenci",
|
||||||
|
"notStarted": "Nie rozpoczęto",
|
||||||
|
"onePerLine": "jeden w linii",
|
||||||
|
"only": "tylko",
|
||||||
|
"pending": "Oczekujące",
|
||||||
|
"pleaseEnter": "Proszę wprowadzić",
|
||||||
|
"pleaseEnterValidEmailAddresses": "Proszę wprowadzić poprawne adresy e-mail, jeden w linii",
|
||||||
|
"processing": "Przetwarzanie...",
|
||||||
|
"progress": "Postęp",
|
||||||
|
"recipient": "Odbiorca",
|
||||||
|
"recipientEmail": "Adres e-mail odbiorcy",
|
||||||
|
"recipientType": "Typ odbiorcy",
|
||||||
|
"registrationEndDate": "Data zakończenia rejestracji",
|
||||||
|
"registrationStartDate": "Data rozpoczęcia rejestracji",
|
||||||
|
"scheduleSend": "Zaplanuj wysyłkę",
|
||||||
|
"scheduledSend": "Zaplanuj wysyłkę",
|
||||||
|
"scheduledSendTimeMustBeLater": "Czas zaplanowanej wysyłki musi być późniejszy niż obecny czas",
|
||||||
|
"selectSendScope": "Wybierz zakres wysyłki",
|
||||||
|
"selectSendTime": "Wybierz czas wysyłki, pozostaw puste dla natychmiastowej wysyłki",
|
||||||
|
"sendFailed": "Wysyłka nie powiodła się, spróbuj ponownie",
|
||||||
|
"sendNow": "Wyślij teraz",
|
||||||
|
"sendScope": "Zakres wysyłki",
|
||||||
|
"sendScopeDescription": "Wybierz zakres użytkowników do wysyłki e-maili. Wybierz \"Tylko dodatkowe e-maile\", aby wysłać tylko na adresy e-mail wypełnione poniżej",
|
||||||
|
"sendSettings": "Ustawienia wysyłki",
|
||||||
|
"sendTime": "Czas wysyłki",
|
||||||
|
"sending": "Wysyłanie",
|
||||||
|
"sentAt": "Wysłano",
|
||||||
|
"specificUsers": "Specyficzni użytkownicy",
|
||||||
|
"specificUsersOnly": "Tylko dodatkowe e-maile (pomiń użytkowników platformy)",
|
||||||
|
"status": "Status",
|
||||||
|
"stop": "Zatrzymaj",
|
||||||
|
"stopped": "Zatrzymano",
|
||||||
|
"subject": "Temat e-maila",
|
||||||
|
"subscribedUsers": "Subskrybowani użytkownicy",
|
||||||
|
"subscribedUsersOnly": "Tylko subskrybowani użytkownicy",
|
||||||
|
"successCount": "Liczba sukcesów",
|
||||||
|
"taskStatusRefreshed": "Status zadania odświeżony",
|
||||||
|
"taskStoppedSuccessfully": "Zadanie zatrzymane pomyślnie",
|
||||||
|
"totalSent": "Łącznie wysłano",
|
||||||
|
"updateSuccess": "Zaktualizowano pomyślnie",
|
||||||
|
"useMarkdownEditor": "Użyj edytora Markdown do pisania treści e-maila z funkcjonalnością podglądu",
|
||||||
|
"users": "użytkownicy",
|
||||||
|
"view": "Widok",
|
||||||
|
"viewAndManageEmailBroadcastTasks": "Wyświetl i zarządzaj zadaniami transmisji e-mailowej",
|
||||||
|
"viewContent": "Wyświetl treść"
|
||||||
|
}
|
||||||
@ -7,6 +7,7 @@
|
|||||||
"Dashboard": "Pulpit",
|
"Dashboard": "Pulpit",
|
||||||
"Document Management": "Zarządzanie dokumentami",
|
"Document Management": "Zarządzanie dokumentami",
|
||||||
"Finance": "Finanse",
|
"Finance": "Finanse",
|
||||||
|
"Marketing Management": "Zarządzanie Marketingiem",
|
||||||
"Order Management": "Zarządzanie zamówieniami",
|
"Order Management": "Zarządzanie zamówieniami",
|
||||||
"Payment Config": "Konfiguracja płatności",
|
"Payment Config": "Konfiguracja płatności",
|
||||||
"Product Management": "Zarządzanie Produktem",
|
"Product Management": "Zarządzanie Produktem",
|
||||||
|
|||||||
97
apps/admin/locales/pt-BR/marketing.json
Normal file
97
apps/admin/locales/pt-BR/marketing.json
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
{
|
||||||
|
"additional": "Adicional",
|
||||||
|
"additionalRecipientEmails": "Emails de destinatários adicionais",
|
||||||
|
"additionalRecipients": "Destinatários Adicionais",
|
||||||
|
"additionalRecipientsDescription": "Esses emails receberão a transmissão além do filtro de usuário acima",
|
||||||
|
"allUsers": "Todos os Usuários",
|
||||||
|
"broadcastList": "Lista de Transmissão",
|
||||||
|
"broadcastLogs": "Registros de Transmissão",
|
||||||
|
"cancel": "Cancelar",
|
||||||
|
"cannotBeEmpty": "não pode estar vazio",
|
||||||
|
"completed": "Concluído",
|
||||||
|
"confirm": "Confirmar",
|
||||||
|
"confirmDelete": "Confirmar Exclusão",
|
||||||
|
"content": "Conteúdo do Email",
|
||||||
|
"create": "Criar",
|
||||||
|
"createBroadcast": "Criar Transmissão",
|
||||||
|
"createNewEmailBroadcastCampaign": "Criar nova campanha de transmissão de email",
|
||||||
|
"createSuccess": "Criado com Sucesso",
|
||||||
|
"createdAt": "Criado Em",
|
||||||
|
"dailyLimit": "O limite diário deve ser pelo menos 1",
|
||||||
|
"dailySendLimit": "Limite de Envio Diário",
|
||||||
|
"delete": "Excluir",
|
||||||
|
"deleteDescription": "Esta operação não pode ser desfeita. Você tem certeza de que deseja excluir?",
|
||||||
|
"deleteSuccess": "Excluído com Sucesso",
|
||||||
|
"edit": "Editar",
|
||||||
|
"emailAddedToScheduledQueue": "Email adicionado à fila de envio programado",
|
||||||
|
"emailBroadcast": "Transmissão de Email",
|
||||||
|
"emailBroadcastTaskCreatedSuccessfully": "Tarefa de transmissão de email criada com sucesso",
|
||||||
|
"emailBroadcastTasks": "Tarefas de Transmissão de Email",
|
||||||
|
"emailContent": "Conteúdo do Email",
|
||||||
|
"emailInterval": "Intervalo de Email (segundos)",
|
||||||
|
"emailIntervalMinimum": "O intervalo de email deve ser de pelo menos 0,1 segundos",
|
||||||
|
"emailMarketing": "Marketing por Email",
|
||||||
|
"emailTaskManager": "Gerenciador de Tarefas de Email",
|
||||||
|
"errorMessage": "Mensagem de Erro",
|
||||||
|
"estimatedRecipients": "Destinatários Estimados",
|
||||||
|
"expiredSubscriptionUsersOnly": "Apenas usuários com assinatura expirada",
|
||||||
|
"expiredUsers": "Usuários Expirados",
|
||||||
|
"failCount": "Contagem de Falhas",
|
||||||
|
"failed": "Falhou",
|
||||||
|
"failedToRefreshTaskStatus": "Falha ao atualizar o status da tarefa",
|
||||||
|
"failedToStopTask": "Falha ao parar a tarefa",
|
||||||
|
"inProgress": "Em Andamento",
|
||||||
|
"includeUsersRegisteredAfter": "Incluir usuários registrados a partir desta data",
|
||||||
|
"includeUsersRegisteredBefore": "Incluir usuários registrados até esta data",
|
||||||
|
"intervalTimeBetweenEmails": "Tempo de intervalo entre cada email",
|
||||||
|
"leaveEmptyForImmediateSend": "Deixe vazio para envio imediato",
|
||||||
|
"logList": "Lista de Registros",
|
||||||
|
"marketingManagement": "Gestão de Marketing",
|
||||||
|
"maximumNumberPerDay": "Número máximo de emails a serem enviados por dia",
|
||||||
|
"noSubscriptionUsersOnly": "Apenas usuários sem assinatura",
|
||||||
|
"nonSubscribers": "Não assinantes",
|
||||||
|
"notStarted": "Não Iniciado",
|
||||||
|
"onePerLine": "um por linha",
|
||||||
|
"only": "apenas",
|
||||||
|
"pending": "Pendente",
|
||||||
|
"pleaseEnter": "Por favor, insira",
|
||||||
|
"pleaseEnterValidEmailAddresses": "Por favor, insira endereços de email válidos, um por linha",
|
||||||
|
"processing": "Processando...",
|
||||||
|
"progress": "Progresso",
|
||||||
|
"recipient": "Destinatário",
|
||||||
|
"recipientEmail": "Email do Destinatário",
|
||||||
|
"recipientType": "Tipo de Destinatário",
|
||||||
|
"registrationEndDate": "Data de Fim da Inscrição",
|
||||||
|
"registrationStartDate": "Data de Início da Inscrição",
|
||||||
|
"scheduleSend": "Agendar Envio",
|
||||||
|
"scheduledSend": "Envio Programado",
|
||||||
|
"scheduledSendTimeMustBeLater": "O horário de envio programado deve ser posterior ao horário atual",
|
||||||
|
"selectSendScope": "Selecionar escopo de envio",
|
||||||
|
"selectSendTime": "Selecionar horário de envio, deixe vazio para envio imediato",
|
||||||
|
"sendFailed": "Envio falhou, por favor tente novamente",
|
||||||
|
"sendNow": "Enviar Agora",
|
||||||
|
"sendScope": "Escopo de Envio",
|
||||||
|
"sendScopeDescription": "Escolha o escopo de usuários para envio de email. Selecione \"Apenas emails adicionais\" para enviar apenas para os endereços de email preenchidos abaixo",
|
||||||
|
"sendSettings": "Configurações de Envio",
|
||||||
|
"sendTime": "Horário de Envio",
|
||||||
|
"sending": "Enviando",
|
||||||
|
"sentAt": "Enviado Em",
|
||||||
|
"specificUsers": "Usuários Específicos",
|
||||||
|
"specificUsersOnly": "Apenas emails adicionais (pular usuários da plataforma)",
|
||||||
|
"status": "Status",
|
||||||
|
"stop": "Parar",
|
||||||
|
"stopped": "Parado",
|
||||||
|
"subject": "Assunto do Email",
|
||||||
|
"subscribedUsers": "Usuários Inscritos",
|
||||||
|
"subscribedUsersOnly": "Apenas usuários inscritos",
|
||||||
|
"successCount": "Contagem de Sucessos",
|
||||||
|
"taskStatusRefreshed": "Status da tarefa atualizado",
|
||||||
|
"taskStoppedSuccessfully": "Tarefa parada com sucesso",
|
||||||
|
"totalSent": "Total Enviado",
|
||||||
|
"updateSuccess": "Atualizado com Sucesso",
|
||||||
|
"useMarkdownEditor": "Use o editor Markdown para escrever o conteúdo do email com funcionalidade de visualização",
|
||||||
|
"users": "usuários",
|
||||||
|
"view": "Visualizar",
|
||||||
|
"viewAndManageEmailBroadcastTasks": "Visualizar e gerenciar tarefas de transmissão de email",
|
||||||
|
"viewContent": "Visualizar Conteúdo"
|
||||||
|
}
|
||||||
@ -7,6 +7,7 @@
|
|||||||
"Dashboard": "Painel de Controle",
|
"Dashboard": "Painel de Controle",
|
||||||
"Document Management": "Gerenciamento de Documentos",
|
"Document Management": "Gerenciamento de Documentos",
|
||||||
"Finance": "Finanças",
|
"Finance": "Finanças",
|
||||||
|
"Marketing Management": "Gestão de Marketing",
|
||||||
"Order Management": "Gerenciamento de Pedidos",
|
"Order Management": "Gerenciamento de Pedidos",
|
||||||
"Payment Config": "Configuração de Pagamento",
|
"Payment Config": "Configuração de Pagamento",
|
||||||
"Product Management": "Gestão de Produtos",
|
"Product Management": "Gestão de Produtos",
|
||||||
|
|||||||
97
apps/admin/locales/ro-RO/marketing.json
Normal file
97
apps/admin/locales/ro-RO/marketing.json
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
{
|
||||||
|
"additional": "Aditional",
|
||||||
|
"additionalRecipientEmails": "Emailuri suplimentare pentru destinatari",
|
||||||
|
"additionalRecipients": "Destinatari suplimentari",
|
||||||
|
"additionalRecipientsDescription": "Aceste emailuri vor primi difuzarea în plus față de filtrul utilizatorului de mai sus",
|
||||||
|
"allUsers": "Toți utilizatorii",
|
||||||
|
"broadcastList": "Lista de difuzare",
|
||||||
|
"broadcastLogs": "Jurnalele de difuzare",
|
||||||
|
"cancel": "Anulează",
|
||||||
|
"cannotBeEmpty": "nu poate fi gol",
|
||||||
|
"completed": "Finalizat",
|
||||||
|
"confirm": "Confirmă",
|
||||||
|
"confirmDelete": "Confirmă ștergerea",
|
||||||
|
"content": "Conținutul emailului",
|
||||||
|
"create": "Creează",
|
||||||
|
"createBroadcast": "Creează difuzare",
|
||||||
|
"createNewEmailBroadcastCampaign": "Creează o nouă campanie de difuzare prin email",
|
||||||
|
"createSuccess": "Creat cu succes",
|
||||||
|
"createdAt": "Creat la",
|
||||||
|
"dailyLimit": "Limita zilnică trebuie să fie de cel puțin 1",
|
||||||
|
"dailySendLimit": "Limita de trimitere zilnică",
|
||||||
|
"delete": "Șterge",
|
||||||
|
"deleteDescription": "Această operațiune nu poate fi anulată. Ești sigur că vrei să ștergi?",
|
||||||
|
"deleteSuccess": "Șters cu succes",
|
||||||
|
"edit": "Editează",
|
||||||
|
"emailAddedToScheduledQueue": "Email adăugat în coada de trimitere programată",
|
||||||
|
"emailBroadcast": "Difuzare prin email",
|
||||||
|
"emailBroadcastTaskCreatedSuccessfully": "Sarcina de difuzare prin email a fost creată cu succes",
|
||||||
|
"emailBroadcastTasks": "Sarcini de difuzare prin email",
|
||||||
|
"emailContent": "Conținutul emailului",
|
||||||
|
"emailInterval": "Interval email (secunde)",
|
||||||
|
"emailIntervalMinimum": "Intervalul emailului trebuie să fie de cel puțin 0.1 secunde",
|
||||||
|
"emailMarketing": "Marketing prin email",
|
||||||
|
"emailTaskManager": "Manager de sarcini email",
|
||||||
|
"errorMessage": "Mesaj de eroare",
|
||||||
|
"estimatedRecipients": "Destinatari estimați",
|
||||||
|
"expiredSubscriptionUsersOnly": "Numai utilizatorii cu abonamente expirate",
|
||||||
|
"expiredUsers": "Utilizatori expirați",
|
||||||
|
"failCount": "Numărul de eșecuri",
|
||||||
|
"failed": "Eșuat",
|
||||||
|
"failedToRefreshTaskStatus": "Eșec la actualizarea stării sarcinii",
|
||||||
|
"failedToStopTask": "Eșec la oprirea sarcinii",
|
||||||
|
"inProgress": "În desfășurare",
|
||||||
|
"includeUsersRegisteredAfter": "Include utilizatorii înregistrați la sau după această dată",
|
||||||
|
"includeUsersRegisteredBefore": "Include utilizatorii înregistrați la sau înainte de această dată",
|
||||||
|
"intervalTimeBetweenEmails": "Timpul de interval între fiecare email",
|
||||||
|
"leaveEmptyForImmediateSend": "Lasă gol pentru trimitere imediată",
|
||||||
|
"logList": "Lista de jurnale",
|
||||||
|
"marketingManagement": "Managementul marketingului",
|
||||||
|
"maximumNumberPerDay": "Numărul maxim de emailuri de trimis pe zi",
|
||||||
|
"noSubscriptionUsersOnly": "Numai utilizatorii fără abonamente",
|
||||||
|
"nonSubscribers": "Non-abonați",
|
||||||
|
"notStarted": "Nu a început",
|
||||||
|
"onePerLine": "unul pe linie",
|
||||||
|
"only": "doar",
|
||||||
|
"pending": "În așteptare",
|
||||||
|
"pleaseEnter": "Te rugăm să introduci",
|
||||||
|
"pleaseEnterValidEmailAddresses": "Te rugăm să introduci adrese de email valide, unul pe linie",
|
||||||
|
"processing": "Se procesează...",
|
||||||
|
"progress": "Progres",
|
||||||
|
"recipient": "Destinatar",
|
||||||
|
"recipientEmail": "Emailul destinatarului",
|
||||||
|
"recipientType": "Tipul destinatarului",
|
||||||
|
"registrationEndDate": "Data de încheiere a înregistrării",
|
||||||
|
"registrationStartDate": "Data de început a înregistrării",
|
||||||
|
"scheduleSend": "Programează trimiterea",
|
||||||
|
"scheduledSend": "Trimitere programată",
|
||||||
|
"scheduledSendTimeMustBeLater": "Timpul de trimitere programată trebuie să fie mai târziu decât timpul curent",
|
||||||
|
"selectSendScope": "Selectează domeniul de trimitere",
|
||||||
|
"selectSendTime": "Selectează timpul de trimitere, lasă gol pentru trimitere imediată",
|
||||||
|
"sendFailed": "Trimiterea a eșuat, te rugăm să încerci din nou",
|
||||||
|
"sendNow": "Trimite acum",
|
||||||
|
"sendScope": "Domeniul de trimitere",
|
||||||
|
"sendScopeDescription": "Alege domeniul utilizatorilor pentru trimiterea emailului. Selectează \"Numai emailuri suplimentare\" pentru a trimite doar la adresele de email completate mai jos",
|
||||||
|
"sendSettings": "Setările de trimitere",
|
||||||
|
"sendTime": "Timpul de trimitere",
|
||||||
|
"sending": "Se trimite",
|
||||||
|
"sentAt": "Trimis la",
|
||||||
|
"specificUsers": "Utilizatori specifici",
|
||||||
|
"specificUsersOnly": "Numai emailuri suplimentare (sari utilizatorii platformei)",
|
||||||
|
"status": "Stare",
|
||||||
|
"stop": "Oprește",
|
||||||
|
"stopped": "Oprit",
|
||||||
|
"subject": "Subiectul emailului",
|
||||||
|
"subscribedUsers": "Utilizatori abonați",
|
||||||
|
"subscribedUsersOnly": "Numai utilizatorii abonați",
|
||||||
|
"successCount": "Numărul de succes",
|
||||||
|
"taskStatusRefreshed": "Starea sarcinii a fost actualizată",
|
||||||
|
"taskStoppedSuccessfully": "Sarcina a fost oprită cu succes",
|
||||||
|
"totalSent": "Total trimis",
|
||||||
|
"updateSuccess": "Actualizat cu succes",
|
||||||
|
"useMarkdownEditor": "Folosește editorul Markdown pentru a scrie conținutul emailului cu funcționalitate de previzualizare",
|
||||||
|
"users": "utilizatori",
|
||||||
|
"view": "Vizualizează",
|
||||||
|
"viewAndManageEmailBroadcastTasks": "Vizualizează și gestionează sarcinile de difuzare prin email",
|
||||||
|
"viewContent": "Vizualizează conținutul"
|
||||||
|
}
|
||||||
@ -7,6 +7,7 @@
|
|||||||
"Dashboard": "Tablou de bord",
|
"Dashboard": "Tablou de bord",
|
||||||
"Document Management": "Managementul documentelor",
|
"Document Management": "Managementul documentelor",
|
||||||
"Finance": "Finanțe",
|
"Finance": "Finanțe",
|
||||||
|
"Marketing Management": "Managementul Marketingului",
|
||||||
"Order Management": "Gestionarea comenzilor",
|
"Order Management": "Gestionarea comenzilor",
|
||||||
"Payment Config": "Configurație Plată",
|
"Payment Config": "Configurație Plată",
|
||||||
"Product Management": "Gestionarea Produselor",
|
"Product Management": "Gestionarea Produselor",
|
||||||
|
|||||||
97
apps/admin/locales/ru-RU/marketing.json
Normal file
97
apps/admin/locales/ru-RU/marketing.json
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
{
|
||||||
|
"additional": "Дополнительно",
|
||||||
|
"additionalRecipientEmails": "Дополнительные адреса электронной почты получателей",
|
||||||
|
"additionalRecipients": "Дополнительные получатели",
|
||||||
|
"additionalRecipientsDescription": "Эти адреса электронной почты получат рассылку в дополнение к фильтру пользователей выше",
|
||||||
|
"allUsers": "Все пользователи",
|
||||||
|
"broadcastList": "Список рассылки",
|
||||||
|
"broadcastLogs": "Журналы рассылки",
|
||||||
|
"cancel": "Отмена",
|
||||||
|
"cannotBeEmpty": "не может быть пустым",
|
||||||
|
"completed": "Завершено",
|
||||||
|
"confirm": "Подтвердить",
|
||||||
|
"confirmDelete": "Подтвердить удаление",
|
||||||
|
"content": "Содержимое электронной почты",
|
||||||
|
"create": "Создать",
|
||||||
|
"createBroadcast": "Создать рассылку",
|
||||||
|
"createNewEmailBroadcastCampaign": "Создать новую кампанию по рассылке электронной почты",
|
||||||
|
"createSuccess": "Успешно создано",
|
||||||
|
"createdAt": "Создано в",
|
||||||
|
"dailyLimit": "Ежедневный лимит должен быть не менее 1",
|
||||||
|
"dailySendLimit": "Ежедневный лимит отправки",
|
||||||
|
"delete": "Удалить",
|
||||||
|
"deleteDescription": "Это действие нельзя отменить. Вы уверены, что хотите удалить?",
|
||||||
|
"deleteSuccess": "Успешно удалено",
|
||||||
|
"edit": "Редактировать",
|
||||||
|
"emailAddedToScheduledQueue": "Электронная почта добавлена в очередь запланированной отправки",
|
||||||
|
"emailBroadcast": "Рассылка электронной почты",
|
||||||
|
"emailBroadcastTaskCreatedSuccessfully": "Задача рассылки электронной почты успешно создана",
|
||||||
|
"emailBroadcastTasks": "Задачи рассылки электронной почты",
|
||||||
|
"emailContent": "Содержимое электронной почты",
|
||||||
|
"emailInterval": "Интервал отправки электронной почты (секунды)",
|
||||||
|
"emailIntervalMinimum": "Интервал отправки электронной почты должен быть не менее 0,1 секунды",
|
||||||
|
"emailMarketing": "Email-маркетинг",
|
||||||
|
"emailTaskManager": "Менеджер задач электронной почты",
|
||||||
|
"errorMessage": "Сообщение об ошибке",
|
||||||
|
"estimatedRecipients": "Ориентировочное количество получателей",
|
||||||
|
"expiredSubscriptionUsersOnly": "Только пользователи с истекшей подпиской",
|
||||||
|
"expiredUsers": "Истекшие пользователи",
|
||||||
|
"failCount": "Количество неудач",
|
||||||
|
"failed": "Не удалось",
|
||||||
|
"failedToRefreshTaskStatus": "Не удалось обновить статус задачи",
|
||||||
|
"failedToStopTask": "Не удалось остановить задачу",
|
||||||
|
"inProgress": "В процессе",
|
||||||
|
"includeUsersRegisteredAfter": "Включить пользователей, зарегистрированных после этой даты",
|
||||||
|
"includeUsersRegisteredBefore": "Включить пользователей, зарегистрированных до этой даты",
|
||||||
|
"intervalTimeBetweenEmails": "Интервал времени между каждой электронной почтой",
|
||||||
|
"leaveEmptyForImmediateSend": "Оставьте пустым для немедленной отправки",
|
||||||
|
"logList": "Список журналов",
|
||||||
|
"marketingManagement": "Управление маркетингом",
|
||||||
|
"maximumNumberPerDay": "Максимальное количество электронных писем для отправки в день",
|
||||||
|
"noSubscriptionUsersOnly": "Только пользователи без подписки",
|
||||||
|
"nonSubscribers": "Несубскрипционные пользователи",
|
||||||
|
"notStarted": "Не начато",
|
||||||
|
"onePerLine": "по одному в строке",
|
||||||
|
"only": "только",
|
||||||
|
"pending": "В ожидании",
|
||||||
|
"pleaseEnter": "Пожалуйста, введите",
|
||||||
|
"pleaseEnterValidEmailAddresses": "Пожалуйста, введите действительные адреса электронной почты, по одному в строке",
|
||||||
|
"processing": "Обработка...",
|
||||||
|
"progress": "Прогресс",
|
||||||
|
"recipient": "Получатель",
|
||||||
|
"recipientEmail": "Электронная почта получателя",
|
||||||
|
"recipientType": "Тип получателя",
|
||||||
|
"registrationEndDate": "Дата окончания регистрации",
|
||||||
|
"registrationStartDate": "Дата начала регистрации",
|
||||||
|
"scheduleSend": "Запланировать отправку",
|
||||||
|
"scheduledSend": "Запланированная отправка",
|
||||||
|
"scheduledSendTimeMustBeLater": "Время запланированной отправки должно быть позже текущего времени",
|
||||||
|
"selectSendScope": "Выберите область отправки",
|
||||||
|
"selectSendTime": "Выберите время отправки, оставьте пустым для немедленной отправки",
|
||||||
|
"sendFailed": "Отправка не удалась, пожалуйста, попробуйте снова",
|
||||||
|
"sendNow": "Отправить сейчас",
|
||||||
|
"sendScope": "Область отправки",
|
||||||
|
"sendScopeDescription": "Выберите область пользователей для отправки электронной почты. Выберите \"Только дополнительные адреса электронной почты\", чтобы отправить только на указанные ниже адреса",
|
||||||
|
"sendSettings": "Настройки отправки",
|
||||||
|
"sendTime": "Время отправки",
|
||||||
|
"sending": "Отправка",
|
||||||
|
"sentAt": "Отправлено в",
|
||||||
|
"specificUsers": "Конкретные пользователи",
|
||||||
|
"specificUsersOnly": "Только дополнительные адреса электронной почты (пропустить пользователей платформы)",
|
||||||
|
"status": "Статус",
|
||||||
|
"stop": "Остановить",
|
||||||
|
"stopped": "Остановлено",
|
||||||
|
"subject": "Тема электронной почты",
|
||||||
|
"subscribedUsers": "Подписанные пользователи",
|
||||||
|
"subscribedUsersOnly": "Только подписанные пользователи",
|
||||||
|
"successCount": "Количество успешных отправок",
|
||||||
|
"taskStatusRefreshed": "Статус задачи обновлен",
|
||||||
|
"taskStoppedSuccessfully": "Задача успешно остановлена",
|
||||||
|
"totalSent": "Всего отправлено",
|
||||||
|
"updateSuccess": "Успешно обновлено",
|
||||||
|
"useMarkdownEditor": "Используйте редактор Markdown для написания содержимого электронной почты с функцией предварительного просмотра",
|
||||||
|
"users": "пользователи",
|
||||||
|
"view": "Просмотр",
|
||||||
|
"viewAndManageEmailBroadcastTasks": "Просмотреть и управлять задачами рассылки электронной почты",
|
||||||
|
"viewContent": "Просмотреть содержимое"
|
||||||
|
}
|
||||||
@ -7,6 +7,7 @@
|
|||||||
"Dashboard": "Панель управления",
|
"Dashboard": "Панель управления",
|
||||||
"Document Management": "Управление документами",
|
"Document Management": "Управление документами",
|
||||||
"Finance": "Финансы",
|
"Finance": "Финансы",
|
||||||
|
"Marketing Management": "Управление маркетингом",
|
||||||
"Order Management": "Управление заказами",
|
"Order Management": "Управление заказами",
|
||||||
"Payment Config": "Настройки оплаты",
|
"Payment Config": "Настройки оплаты",
|
||||||
"Product Management": "Управление продуктом",
|
"Product Management": "Управление продуктом",
|
||||||
|
|||||||
97
apps/admin/locales/th-TH/marketing.json
Normal file
97
apps/admin/locales/th-TH/marketing.json
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
{
|
||||||
|
"additional": "เพิ่มเติม",
|
||||||
|
"additionalRecipientEmails": "อีเมลผู้รับเพิ่มเติม",
|
||||||
|
"additionalRecipients": "ผู้รับเพิ่มเติม",
|
||||||
|
"additionalRecipientsDescription": "อีเมลเหล่านี้จะได้รับการส่งต่อในนอกเหนือจากผู้ใช้ที่กรองข้างต้น",
|
||||||
|
"allUsers": "ผู้ใช้ทั้งหมด",
|
||||||
|
"broadcastList": "รายการส่ง",
|
||||||
|
"broadcastLogs": "บันทึกการส่ง",
|
||||||
|
"cancel": "ยกเลิก",
|
||||||
|
"cannotBeEmpty": "ไม่สามารถเว้นว่างได้",
|
||||||
|
"completed": "เสร็จสิ้น",
|
||||||
|
"confirm": "ยืนยัน",
|
||||||
|
"confirmDelete": "ยืนยันการลบ",
|
||||||
|
"content": "เนื้อหาอีเมล",
|
||||||
|
"create": "สร้าง",
|
||||||
|
"createBroadcast": "สร้างการส่ง",
|
||||||
|
"createNewEmailBroadcastCampaign": "สร้างแคมเปญการส่งอีเมลใหม่",
|
||||||
|
"createSuccess": "สร้างสำเร็จ",
|
||||||
|
"createdAt": "สร้างเมื่อ",
|
||||||
|
"dailyLimit": "จำนวนสูงสุดต่อวันต้องไม่น้อยกว่า 1",
|
||||||
|
"dailySendLimit": "จำนวนการส่งต่อวัน",
|
||||||
|
"delete": "ลบ",
|
||||||
|
"deleteDescription": "การดำเนินการนี้ไม่สามารถย้อนกลับได้ คุณแน่ใจหรือไม่ว่าต้องการลบ?",
|
||||||
|
"deleteSuccess": "ลบสำเร็จ",
|
||||||
|
"edit": "แก้ไข",
|
||||||
|
"emailAddedToScheduledQueue": "อีเมลถูกเพิ่มไปยังคิวการส่งที่กำหนด",
|
||||||
|
"emailBroadcast": "การส่งอีเมล",
|
||||||
|
"emailBroadcastTaskCreatedSuccessfully": "สร้างงานการส่งอีเมลสำเร็จ",
|
||||||
|
"emailBroadcastTasks": "งานการส่งอีเมล",
|
||||||
|
"emailContent": "เนื้อหาอีเมล",
|
||||||
|
"emailInterval": "ช่วงเวลาการส่งอีเมล (วินาที)",
|
||||||
|
"emailIntervalMinimum": "ช่วงเวลาการส่งอีเมลต้องไม่น้อยกว่า 0.1 วินาที",
|
||||||
|
"emailMarketing": "การตลาดทางอีเมล",
|
||||||
|
"emailTaskManager": "ผู้จัดการงานอีเมล",
|
||||||
|
"errorMessage": "ข้อความผิดพลาด",
|
||||||
|
"estimatedRecipients": "จำนวนผู้รับที่ประมาณการ",
|
||||||
|
"expiredSubscriptionUsersOnly": "เฉพาะผู้ใช้ที่หมดอายุการสมัคร",
|
||||||
|
"expiredUsers": "ผู้ใช้ที่หมดอายุ",
|
||||||
|
"failCount": "จำนวนที่ล้มเหลว",
|
||||||
|
"failed": "ล้มเหลว",
|
||||||
|
"failedToRefreshTaskStatus": "ไม่สามารถรีเฟรชสถานะงานได้",
|
||||||
|
"failedToStopTask": "ไม่สามารถหยุดงานได้",
|
||||||
|
"inProgress": "กำลังดำเนินการ",
|
||||||
|
"includeUsersRegisteredAfter": "รวมผู้ที่ลงทะเบียนตั้งแต่วันที่นี้",
|
||||||
|
"includeUsersRegisteredBefore": "รวมผู้ที่ลงทะเบียนก่อนวันที่นี้",
|
||||||
|
"intervalTimeBetweenEmails": "ช่วงเวลาระหว่างการส่งอีเมลแต่ละฉบับ",
|
||||||
|
"leaveEmptyForImmediateSend": "เว้นว่างไว้เพื่อส่งทันที",
|
||||||
|
"logList": "รายการบันทึก",
|
||||||
|
"marketingManagement": "การจัดการการตลาด",
|
||||||
|
"maximumNumberPerDay": "จำนวนสูงสุดของอีเมลที่ส่งต่อวัน",
|
||||||
|
"noSubscriptionUsersOnly": "เฉพาะผู้ใช้ที่ไม่มีการสมัคร",
|
||||||
|
"nonSubscribers": "ผู้ที่ไม่ได้สมัคร",
|
||||||
|
"notStarted": "ยังไม่เริ่ม",
|
||||||
|
"onePerLine": "หนึ่งต่อบรรทัด",
|
||||||
|
"only": "เท่านั้น",
|
||||||
|
"pending": "รอดำเนินการ",
|
||||||
|
"pleaseEnter": "กรุณาใส่",
|
||||||
|
"pleaseEnterValidEmailAddresses": "กรุณาใส่อีเมลที่ถูกต้อง หนึ่งต่อบรรทัด",
|
||||||
|
"processing": "กำลังประมวลผล...",
|
||||||
|
"progress": "ความก้าวหน้า",
|
||||||
|
"recipient": "ผู้รับ",
|
||||||
|
"recipientEmail": "อีเมลผู้รับ",
|
||||||
|
"recipientType": "ประเภทผู้รับ",
|
||||||
|
"registrationEndDate": "วันที่สิ้นสุดการลงทะเบียน",
|
||||||
|
"registrationStartDate": "วันที่เริ่มต้นการลงทะเบียน",
|
||||||
|
"scheduleSend": "กำหนดการส่ง",
|
||||||
|
"scheduledSend": "การส่งที่กำหนด",
|
||||||
|
"scheduledSendTimeMustBeLater": "เวลาการส่งที่กำหนดต้องอยู่หลังเวลาปัจจุบัน",
|
||||||
|
"selectSendScope": "เลือกขอบเขตการส่ง",
|
||||||
|
"selectSendTime": "เลือกเวลาการส่ง เว้นว่างไว้เพื่อส่งทันที",
|
||||||
|
"sendFailed": "การส่งล้มเหลว กรุณาลองอีกครั้ง",
|
||||||
|
"sendNow": "ส่งตอนนี้",
|
||||||
|
"sendScope": "ขอบเขตการส่ง",
|
||||||
|
"sendScopeDescription": "เลือกขอบเขตผู้ใช้สำหรับการส่งอีเมล เลือก \"อีเมลเพิ่มเติมเท่านั้น\" เพื่อส่งเฉพาะที่อยู่อีเมลที่กรอกด้านล่าง",
|
||||||
|
"sendSettings": "การตั้งค่าการส่ง",
|
||||||
|
"sendTime": "เวลาการส่ง",
|
||||||
|
"sending": "กำลังส่ง",
|
||||||
|
"sentAt": "ส่งเมื่อ",
|
||||||
|
"specificUsers": "ผู้ใช้เฉพาะ",
|
||||||
|
"specificUsersOnly": "อีเมลเพิ่มเติมเท่านั้น (ข้ามผู้ใช้แพลตฟอร์ม)",
|
||||||
|
"status": "สถานะ",
|
||||||
|
"stop": "หยุด",
|
||||||
|
"stopped": "หยุดแล้ว",
|
||||||
|
"subject": "หัวข้ออีเมล",
|
||||||
|
"subscribedUsers": "ผู้ใช้ที่สมัคร",
|
||||||
|
"subscribedUsersOnly": "เฉพาะผู้ใช้ที่สมัคร",
|
||||||
|
"successCount": "จำนวนที่สำเร็จ",
|
||||||
|
"taskStatusRefreshed": "สถานะงานถูกรีเฟรช",
|
||||||
|
"taskStoppedSuccessfully": "หยุดงานสำเร็จ",
|
||||||
|
"totalSent": "จำนวนที่ส่งทั้งหมด",
|
||||||
|
"updateSuccess": "อัปเดตสำเร็จ",
|
||||||
|
"useMarkdownEditor": "ใช้ตัวแก้ไข Markdown เพื่อเขียนเนื้อหาอีเมลพร้อมฟังก์ชันการแสดงตัวอย่าง",
|
||||||
|
"users": "ผู้ใช้",
|
||||||
|
"view": "ดู",
|
||||||
|
"viewAndManageEmailBroadcastTasks": "ดูและจัดการงานการส่งอีเมล",
|
||||||
|
"viewContent": "ดูเนื้อหา"
|
||||||
|
}
|
||||||
@ -7,6 +7,7 @@
|
|||||||
"Dashboard": "แดชบอร์ด",
|
"Dashboard": "แดชบอร์ด",
|
||||||
"Document Management": "การจัดการเอกสาร",
|
"Document Management": "การจัดการเอกสาร",
|
||||||
"Finance": "การเงิน",
|
"Finance": "การเงิน",
|
||||||
|
"Marketing Management": "การจัดการการตลาด",
|
||||||
"Order Management": "การจัดการคำสั่งซื้อ",
|
"Order Management": "การจัดการคำสั่งซื้อ",
|
||||||
"Payment Config": "การตั้งค่าการชำระเงิน",
|
"Payment Config": "การตั้งค่าการชำระเงิน",
|
||||||
"Product Management": "การจัดการผลิตภัณฑ์",
|
"Product Management": "การจัดการผลิตภัณฑ์",
|
||||||
|
|||||||
97
apps/admin/locales/tr-TR/marketing.json
Normal file
97
apps/admin/locales/tr-TR/marketing.json
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
{
|
||||||
|
"additional": "Ek",
|
||||||
|
"additionalRecipientEmails": "Ek alıcı e-postaları",
|
||||||
|
"additionalRecipients": "Ek Alıcılar",
|
||||||
|
"additionalRecipientsDescription": "Bu e-postalar, yukarıdaki kullanıcı filtresine ek olarak yayını alacak",
|
||||||
|
"allUsers": "Tüm Kullanıcılar",
|
||||||
|
"broadcastList": "Yayın Listesi",
|
||||||
|
"broadcastLogs": "Yayın Kayıtları",
|
||||||
|
"cancel": "İptal",
|
||||||
|
"cannotBeEmpty": "boş olamaz",
|
||||||
|
"completed": "Tamamlandı",
|
||||||
|
"confirm": "Onayla",
|
||||||
|
"confirmDelete": "Silme işlemini onayla",
|
||||||
|
"content": "E-posta İçeriği",
|
||||||
|
"create": "Oluştur",
|
||||||
|
"createBroadcast": "Yayın Oluştur",
|
||||||
|
"createNewEmailBroadcastCampaign": "Yeni e-posta yayını kampanyası oluştur",
|
||||||
|
"createSuccess": "Başarıyla Oluşturuldu",
|
||||||
|
"createdAt": "Oluşturulma Tarihi",
|
||||||
|
"dailyLimit": "Günlük limit en az 1 olmalıdır",
|
||||||
|
"dailySendLimit": "Günlük Gönderim Limiti",
|
||||||
|
"delete": "Sil",
|
||||||
|
"deleteDescription": "Bu işlem geri alınamaz. Silmek istediğinize emin misiniz?",
|
||||||
|
"deleteSuccess": "Başarıyla Silindi",
|
||||||
|
"edit": "Düzenle",
|
||||||
|
"emailAddedToScheduledQueue": "E-posta planlı gönderim kuyruğuna eklendi",
|
||||||
|
"emailBroadcast": "E-posta Yayını",
|
||||||
|
"emailBroadcastTaskCreatedSuccessfully": "E-posta yayını görevi başarıyla oluşturuldu",
|
||||||
|
"emailBroadcastTasks": "E-posta Yayını Görevleri",
|
||||||
|
"emailContent": "E-posta İçeriği",
|
||||||
|
"emailInterval": "E-posta Aralığı (saniye)",
|
||||||
|
"emailIntervalMinimum": "E-posta aralığı en az 0.1 saniye olmalıdır",
|
||||||
|
"emailMarketing": "E-posta Pazarlama",
|
||||||
|
"emailTaskManager": "E-posta Görev Yöneticisi",
|
||||||
|
"errorMessage": "Hata Mesajı",
|
||||||
|
"estimatedRecipients": "Tahmini alıcılar",
|
||||||
|
"expiredSubscriptionUsersOnly": "Süresi dolmuş abonelik kullanıcıları yalnızca",
|
||||||
|
"expiredUsers": "Süresi Dolmuş Kullanıcılar",
|
||||||
|
"failCount": "Başarısız Sayısı",
|
||||||
|
"failed": "Başarısız",
|
||||||
|
"failedToRefreshTaskStatus": "Görev durumunu yenilemede başarısız",
|
||||||
|
"failedToStopTask": "Görevi durdurmada başarısız",
|
||||||
|
"inProgress": "Devam Ediyor",
|
||||||
|
"includeUsersRegisteredAfter": "Bu tarihten sonra kayıtlı kullanıcıları dahil et",
|
||||||
|
"includeUsersRegisteredBefore": "Bu tarihten önce kayıtlı kullanıcıları dahil et",
|
||||||
|
"intervalTimeBetweenEmails": "Her e-posta arasındaki aralık süresi",
|
||||||
|
"leaveEmptyForImmediateSend": "Anında gönderim için boş bırakın",
|
||||||
|
"logList": "Kayıt Listesi",
|
||||||
|
"marketingManagement": "Pazarlama Yönetimi",
|
||||||
|
"maximumNumberPerDay": "Günlük gönderilecek maksimum e-posta sayısı",
|
||||||
|
"noSubscriptionUsersOnly": "Aboneliği olmayan kullanıcılar yalnızca",
|
||||||
|
"nonSubscribers": "Abone Olmayanlar",
|
||||||
|
"notStarted": "Başlamadı",
|
||||||
|
"onePerLine": "bir satıra bir",
|
||||||
|
"only": "sadece",
|
||||||
|
"pending": "Beklemede",
|
||||||
|
"pleaseEnter": "Lütfen girin",
|
||||||
|
"pleaseEnterValidEmailAddresses": "Lütfen geçerli e-posta adreslerini girin, her biri bir satıra",
|
||||||
|
"processing": "İşleniyor...",
|
||||||
|
"progress": "İlerleme",
|
||||||
|
"recipient": "Alıcı",
|
||||||
|
"recipientEmail": "Alıcı E-postası",
|
||||||
|
"recipientType": "Alıcı Türü",
|
||||||
|
"registrationEndDate": "Kayıt Bitiş Tarihi",
|
||||||
|
"registrationStartDate": "Kayıt Başlangıç Tarihi",
|
||||||
|
"scheduleSend": "Gönderimi Planla",
|
||||||
|
"scheduledSend": "Planlı Gönderim",
|
||||||
|
"scheduledSendTimeMustBeLater": "Planlı gönderim zamanı mevcut zamandan sonra olmalıdır",
|
||||||
|
"selectSendScope": "Gönderim kapsamını seçin",
|
||||||
|
"selectSendTime": "Gönderim zamanını seçin, anında gönderim için boş bırakın",
|
||||||
|
"sendFailed": "Gönderim başarısız, lütfen tekrar deneyin",
|
||||||
|
"sendNow": "Şimdi Gönder",
|
||||||
|
"sendScope": "Gönderim Kapsamı",
|
||||||
|
"sendScopeDescription": "E-posta gönderimi için kullanıcı kapsamını seçin. Aşağıda doldurulan e-posta adreslerine yalnızca \"Ek e-postalar\" seçeneğini seçerek gönderin",
|
||||||
|
"sendSettings": "Gönderim Ayarları",
|
||||||
|
"sendTime": "Gönderim Zamanı",
|
||||||
|
"sending": "Gönderiliyor",
|
||||||
|
"sentAt": "Gönderildiği Tarih",
|
||||||
|
"specificUsers": "Belirli Kullanıcılar",
|
||||||
|
"specificUsersOnly": "Yalnızca ek e-postalar (platform kullanıcılarını atla)",
|
||||||
|
"status": "Durum",
|
||||||
|
"stop": "Durdur",
|
||||||
|
"stopped": "Durduruldu",
|
||||||
|
"subject": "E-posta Konusu",
|
||||||
|
"subscribedUsers": "Abone Olmuş Kullanıcılar",
|
||||||
|
"subscribedUsersOnly": "Yalnızca abone olmuş kullanıcılar",
|
||||||
|
"successCount": "Başarı Sayısı",
|
||||||
|
"taskStatusRefreshed": "Görev durumu yenilendi",
|
||||||
|
"taskStoppedSuccessfully": "Görev başarıyla durduruldu",
|
||||||
|
"totalSent": "Toplam Gönderilen",
|
||||||
|
"updateSuccess": "Başarıyla Güncellendi",
|
||||||
|
"useMarkdownEditor": "Önizleme işlevi ile e-posta içeriği yazmak için Markdown editörünü kullanın",
|
||||||
|
"users": "kullanıcılar",
|
||||||
|
"view": "Görüntüle",
|
||||||
|
"viewAndManageEmailBroadcastTasks": "E-posta yayını görevlerini görüntüle ve yönet",
|
||||||
|
"viewContent": "İçeriği Görüntüle"
|
||||||
|
}
|
||||||
@ -7,6 +7,7 @@
|
|||||||
"Dashboard": "Gösterge Paneli",
|
"Dashboard": "Gösterge Paneli",
|
||||||
"Document Management": "Belge Yönetimi",
|
"Document Management": "Belge Yönetimi",
|
||||||
"Finance": "Finans",
|
"Finance": "Finans",
|
||||||
|
"Marketing Management": "Pazarlama Yönetimi",
|
||||||
"Order Management": "Sipariş Yönetimi",
|
"Order Management": "Sipariş Yönetimi",
|
||||||
"Payment Config": "Ödeme Yapılandırması",
|
"Payment Config": "Ödeme Yapılandırması",
|
||||||
"Product Management": "Ürün Yönetimi",
|
"Product Management": "Ürün Yönetimi",
|
||||||
|
|||||||
97
apps/admin/locales/uk-UA/marketing.json
Normal file
97
apps/admin/locales/uk-UA/marketing.json
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
{
|
||||||
|
"additional": "Додатково",
|
||||||
|
"additionalRecipientEmails": "Додаткові електронні адреси отримувачів",
|
||||||
|
"additionalRecipients": "Додаткові отримувачі",
|
||||||
|
"additionalRecipientsDescription": "Ці електронні адреси отримають розсилку на додаток до фільтру користувачів вище",
|
||||||
|
"allUsers": "Усі користувачі",
|
||||||
|
"broadcastList": "Список розсилки",
|
||||||
|
"broadcastLogs": "Журнали розсилки",
|
||||||
|
"cancel": "Скасувати",
|
||||||
|
"cannotBeEmpty": "не може бути порожнім",
|
||||||
|
"completed": "Завершено",
|
||||||
|
"confirm": "Підтвердити",
|
||||||
|
"confirmDelete": "Підтвердити видалення",
|
||||||
|
"content": "Зміст електронного листа",
|
||||||
|
"create": "Створити",
|
||||||
|
"createBroadcast": "Створити розсилку",
|
||||||
|
"createNewEmailBroadcastCampaign": "Створити нову кампанію електронної розсилки",
|
||||||
|
"createSuccess": "Успішно створено",
|
||||||
|
"createdAt": "Створено о",
|
||||||
|
"dailyLimit": "Щоденний ліміт повинен бути не менше 1",
|
||||||
|
"dailySendLimit": "Щоденній ліміт відправки",
|
||||||
|
"delete": "Видалити",
|
||||||
|
"deleteDescription": "Цю операцію не можна скасувати. Ви впевнені, що хочете видалити?",
|
||||||
|
"deleteSuccess": "Успішно видалено",
|
||||||
|
"edit": "Редагувати",
|
||||||
|
"emailAddedToScheduledQueue": "Електронний лист додано до черги запланованих відправлень",
|
||||||
|
"emailBroadcast": "Електронна розсилка",
|
||||||
|
"emailBroadcastTaskCreatedSuccessfully": "Завдання електронної розсилки успішно створено",
|
||||||
|
"emailBroadcastTasks": "Завдання електронної розсилки",
|
||||||
|
"emailContent": "Зміст електронного листа",
|
||||||
|
"emailInterval": "Інтервал електронних листів (секунди)",
|
||||||
|
"emailIntervalMinimum": "Інтервал електронних листів повинен бути не менше 0.1 секунди",
|
||||||
|
"emailMarketing": "Email-маркетинг",
|
||||||
|
"emailTaskManager": "Менеджер завдань електронної пошти",
|
||||||
|
"errorMessage": "Повідомлення про помилку",
|
||||||
|
"estimatedRecipients": "Орієнтовна кількість отримувачів",
|
||||||
|
"expiredSubscriptionUsersOnly": "Тільки користувачі з закінченими підписками",
|
||||||
|
"expiredUsers": "Користувачі з закінченими підписками",
|
||||||
|
"failCount": "Кількість невдач",
|
||||||
|
"failed": "Не вдалося",
|
||||||
|
"failedToRefreshTaskStatus": "Не вдалося оновити статус завдання",
|
||||||
|
"failedToStopTask": "Не вдалося зупинити завдання",
|
||||||
|
"inProgress": "В процесі",
|
||||||
|
"includeUsersRegisteredAfter": "Включити користувачів, зареєстрованих після цієї дати",
|
||||||
|
"includeUsersRegisteredBefore": "Включити користувачів, зареєстрованих до цієї дати",
|
||||||
|
"intervalTimeBetweenEmails": "Часовий інтервал між кожним електронним листом",
|
||||||
|
"leaveEmptyForImmediateSend": "Залиште порожнім для миттєвого відправлення",
|
||||||
|
"logList": "Список журналів",
|
||||||
|
"marketingManagement": "Управління маркетингом",
|
||||||
|
"maximumNumberPerDay": "Максимальна кількість електронних листів для відправки на день",
|
||||||
|
"noSubscriptionUsersOnly": "Тільки користувачі без підписки",
|
||||||
|
"nonSubscribers": "Не підписники",
|
||||||
|
"notStarted": "Не розпочато",
|
||||||
|
"onePerLine": "один на рядок",
|
||||||
|
"only": "тільки",
|
||||||
|
"pending": "В очікуванні",
|
||||||
|
"pleaseEnter": "Будь ласка, введіть",
|
||||||
|
"pleaseEnterValidEmailAddresses": "Будь ласка, введіть дійсні електронні адреси, по одному на рядок",
|
||||||
|
"processing": "Обробка...",
|
||||||
|
"progress": "Прогрес",
|
||||||
|
"recipient": "Отримувач",
|
||||||
|
"recipientEmail": "Електронна адреса отримувача",
|
||||||
|
"recipientType": "Тип отримувача",
|
||||||
|
"registrationEndDate": "Дата закінчення реєстрації",
|
||||||
|
"registrationStartDate": "Дата початку реєстрації",
|
||||||
|
"scheduleSend": "Запланувати відправлення",
|
||||||
|
"scheduledSend": "Заплановане відправлення",
|
||||||
|
"scheduledSendTimeMustBeLater": "Час запланованого відправлення повинен бути пізніше за поточний час",
|
||||||
|
"selectSendScope": "Виберіть обсяг відправлення",
|
||||||
|
"selectSendTime": "Виберіть час відправлення, залиште порожнім для миттєвого відправлення",
|
||||||
|
"sendFailed": "Відправка не вдалася, будь ласка, спробуйте ще раз",
|
||||||
|
"sendNow": "Відправити зараз",
|
||||||
|
"sendScope": "Обсяг відправлення",
|
||||||
|
"sendScopeDescription": "Виберіть обсяг користувачів для відправки електронної пошти. Виберіть \"Тільки додаткові електронні адреси\", щоб відправити лише на електронні адреси, заповнені нижче",
|
||||||
|
"sendSettings": "Налаштування відправлення",
|
||||||
|
"sendTime": "Час відправлення",
|
||||||
|
"sending": "Відправка",
|
||||||
|
"sentAt": "Відправлено о",
|
||||||
|
"specificUsers": "Конкретні користувачі",
|
||||||
|
"specificUsersOnly": "Тільки додаткові електронні адреси (пропустити користувачів платформи)",
|
||||||
|
"status": "Статус",
|
||||||
|
"stop": "Зупинити",
|
||||||
|
"stopped": "Зупинено",
|
||||||
|
"subject": "Тема електронного листа",
|
||||||
|
"subscribedUsers": "Підписані користувачі",
|
||||||
|
"subscribedUsersOnly": "Тільки підписані користувачі",
|
||||||
|
"successCount": "Кількість успішних відправлень",
|
||||||
|
"taskStatusRefreshed": "Статус завдання оновлено",
|
||||||
|
"taskStoppedSuccessfully": "Завдання успішно зупинено",
|
||||||
|
"totalSent": "Всього відправлено",
|
||||||
|
"updateSuccess": "Успішно оновлено",
|
||||||
|
"useMarkdownEditor": "Використовуйте редактор Markdown для написання змісту електронного листа з функцією попереднього перегляду",
|
||||||
|
"users": "користувачі",
|
||||||
|
"view": "Переглянути",
|
||||||
|
"viewAndManageEmailBroadcastTasks": "Переглянути та керувати завданнями електронної розсилки",
|
||||||
|
"viewContent": "Переглянути зміст"
|
||||||
|
}
|
||||||
@ -7,6 +7,7 @@
|
|||||||
"Dashboard": "Панель приладів",
|
"Dashboard": "Панель приладів",
|
||||||
"Document Management": "Управління документами",
|
"Document Management": "Управління документами",
|
||||||
"Finance": "Фінанси",
|
"Finance": "Фінанси",
|
||||||
|
"Marketing Management": "Управління маркетингом",
|
||||||
"Order Management": "Управління замовленнями",
|
"Order Management": "Управління замовленнями",
|
||||||
"Payment Config": "Налаштування оплати",
|
"Payment Config": "Налаштування оплати",
|
||||||
"Product Management": "Управління продуктом",
|
"Product Management": "Управління продуктом",
|
||||||
|
|||||||
97
apps/admin/locales/vi-VN/marketing.json
Normal file
97
apps/admin/locales/vi-VN/marketing.json
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
{
|
||||||
|
"additional": "Thêm",
|
||||||
|
"additionalRecipientEmails": "Email người nhận bổ sung",
|
||||||
|
"additionalRecipients": "Người nhận bổ sung",
|
||||||
|
"additionalRecipientsDescription": "Những email này sẽ nhận bản phát sóng ngoài bộ lọc người dùng ở trên",
|
||||||
|
"allUsers": "Tất cả người dùng",
|
||||||
|
"broadcastList": "Danh sách phát sóng",
|
||||||
|
"broadcastLogs": "Nhật ký phát sóng",
|
||||||
|
"cancel": "Hủy",
|
||||||
|
"cannotBeEmpty": "không được để trống",
|
||||||
|
"completed": "Đã hoàn thành",
|
||||||
|
"confirm": "Xác nhận",
|
||||||
|
"confirmDelete": "Xác nhận xóa",
|
||||||
|
"content": "Nội dung email",
|
||||||
|
"create": "Tạo",
|
||||||
|
"createBroadcast": "Tạo phát sóng",
|
||||||
|
"createNewEmailBroadcastCampaign": "Tạo chiến dịch phát sóng email mới",
|
||||||
|
"createSuccess": "Tạo thành công",
|
||||||
|
"createdAt": "Được tạo vào",
|
||||||
|
"dailyLimit": "Giới hạn hàng ngày phải ít nhất 1",
|
||||||
|
"dailySendLimit": "Giới hạn gửi hàng ngày",
|
||||||
|
"delete": "Xóa",
|
||||||
|
"deleteDescription": "Hành động này không thể hoàn tác. Bạn có chắc chắn muốn xóa không?",
|
||||||
|
"deleteSuccess": "Xóa thành công",
|
||||||
|
"edit": "Chỉnh sửa",
|
||||||
|
"emailAddedToScheduledQueue": "Email đã được thêm vào hàng đợi gửi theo lịch",
|
||||||
|
"emailBroadcast": "Phát sóng email",
|
||||||
|
"emailBroadcastTaskCreatedSuccessfully": "Nhiệm vụ phát sóng email đã được tạo thành công",
|
||||||
|
"emailBroadcastTasks": "Nhiệm vụ phát sóng email",
|
||||||
|
"emailContent": "Nội dung email",
|
||||||
|
"emailInterval": "Khoảng thời gian giữa các email (giây)",
|
||||||
|
"emailIntervalMinimum": "Khoảng thời gian email phải ít nhất 0.1 giây",
|
||||||
|
"emailMarketing": "Tiếp thị qua email",
|
||||||
|
"emailTaskManager": "Quản lý nhiệm vụ email",
|
||||||
|
"errorMessage": "Thông báo lỗi",
|
||||||
|
"estimatedRecipients": "Số lượng người nhận ước tính",
|
||||||
|
"expiredSubscriptionUsersOnly": "Chỉ người dùng có đăng ký hết hạn",
|
||||||
|
"expiredUsers": "Người dùng hết hạn",
|
||||||
|
"failCount": "Số lần thất bại",
|
||||||
|
"failed": "Thất bại",
|
||||||
|
"failedToRefreshTaskStatus": "Không thể làm mới trạng thái nhiệm vụ",
|
||||||
|
"failedToStopTask": "Không thể dừng nhiệm vụ",
|
||||||
|
"inProgress": "Đang tiến hành",
|
||||||
|
"includeUsersRegisteredAfter": "Bao gồm người dùng đã đăng ký sau ngày này",
|
||||||
|
"includeUsersRegisteredBefore": "Bao gồm người dùng đã đăng ký trước ngày này",
|
||||||
|
"intervalTimeBetweenEmails": "Thời gian giữa mỗi email",
|
||||||
|
"leaveEmptyForImmediateSend": "Để trống để gửi ngay lập tức",
|
||||||
|
"logList": "Danh sách nhật ký",
|
||||||
|
"marketingManagement": "Quản lý tiếp thị",
|
||||||
|
"maximumNumberPerDay": "Số lượng email tối đa gửi mỗi ngày",
|
||||||
|
"noSubscriptionUsersOnly": "Chỉ người dùng không có đăng ký",
|
||||||
|
"nonSubscribers": "Người không đăng ký",
|
||||||
|
"notStarted": "Chưa bắt đầu",
|
||||||
|
"onePerLine": "một trên mỗi dòng",
|
||||||
|
"only": "chỉ",
|
||||||
|
"pending": "Đang chờ",
|
||||||
|
"pleaseEnter": "Vui lòng nhập",
|
||||||
|
"pleaseEnterValidEmailAddresses": "Vui lòng nhập địa chỉ email hợp lệ, một địa chỉ trên mỗi dòng",
|
||||||
|
"processing": "Đang xử lý...",
|
||||||
|
"progress": "Tiến độ",
|
||||||
|
"recipient": "Người nhận",
|
||||||
|
"recipientEmail": "Email người nhận",
|
||||||
|
"recipientType": "Loại người nhận",
|
||||||
|
"registrationEndDate": "Ngày kết thúc đăng ký",
|
||||||
|
"registrationStartDate": "Ngày bắt đầu đăng ký",
|
||||||
|
"scheduleSend": "Lên lịch gửi",
|
||||||
|
"scheduledSend": "Gửi theo lịch",
|
||||||
|
"scheduledSendTimeMustBeLater": "Thời gian gửi theo lịch phải muộn hơn thời gian hiện tại",
|
||||||
|
"selectSendScope": "Chọn phạm vi gửi",
|
||||||
|
"selectSendTime": "Chọn thời gian gửi, để trống để gửi ngay lập tức",
|
||||||
|
"sendFailed": "Gửi thất bại, vui lòng thử lại",
|
||||||
|
"sendNow": "Gửi ngay",
|
||||||
|
"sendScope": "Phạm vi gửi",
|
||||||
|
"sendScopeDescription": "Chọn phạm vi người dùng để gửi email. Chọn \"Chỉ email bổ sung\" để gửi chỉ đến các địa chỉ email được điền bên dưới",
|
||||||
|
"sendSettings": "Cài đặt gửi",
|
||||||
|
"sendTime": "Thời gian gửi",
|
||||||
|
"sending": "Đang gửi",
|
||||||
|
"sentAt": "Đã gửi vào",
|
||||||
|
"specificUsers": "Người dùng cụ thể",
|
||||||
|
"specificUsersOnly": "Chỉ email bổ sung (bỏ qua người dùng nền tảng)",
|
||||||
|
"status": "Trạng thái",
|
||||||
|
"stop": "Dừng",
|
||||||
|
"stopped": "Đã dừng",
|
||||||
|
"subject": "Chủ đề email",
|
||||||
|
"subscribedUsers": "Người dùng đã đăng ký",
|
||||||
|
"subscribedUsersOnly": "Chỉ người dùng đã đăng ký",
|
||||||
|
"successCount": "Số lần thành công",
|
||||||
|
"taskStatusRefreshed": "Trạng thái nhiệm vụ đã được làm mới",
|
||||||
|
"taskStoppedSuccessfully": "Nhiệm vụ đã dừng thành công",
|
||||||
|
"totalSent": "Tổng số đã gửi",
|
||||||
|
"updateSuccess": "Cập nhật thành công",
|
||||||
|
"useMarkdownEditor": "Sử dụng trình soạn thảo Markdown để viết nội dung email với chức năng xem trước",
|
||||||
|
"users": "người dùng",
|
||||||
|
"view": "Xem",
|
||||||
|
"viewAndManageEmailBroadcastTasks": "Xem và quản lý các nhiệm vụ phát sóng email",
|
||||||
|
"viewContent": "Xem nội dung"
|
||||||
|
}
|
||||||
@ -7,6 +7,7 @@
|
|||||||
"Dashboard": "Bảng điều khiển",
|
"Dashboard": "Bảng điều khiển",
|
||||||
"Document Management": "Quản lý tài liệu",
|
"Document Management": "Quản lý tài liệu",
|
||||||
"Finance": "Tài chính",
|
"Finance": "Tài chính",
|
||||||
|
"Marketing Management": "Quản lý Tiếp thị",
|
||||||
"Order Management": "Quản lý đơn hàng",
|
"Order Management": "Quản lý đơn hàng",
|
||||||
"Payment Config": "Cấu hình thanh toán",
|
"Payment Config": "Cấu hình thanh toán",
|
||||||
"Product Management": "Quản lý sản phẩm",
|
"Product Management": "Quản lý sản phẩm",
|
||||||
|
|||||||
@ -1,39 +1,97 @@
|
|||||||
{
|
{
|
||||||
|
"additional": "额外",
|
||||||
|
"additionalRecipientEmails": "额外收件人邮箱",
|
||||||
|
"additionalRecipients": "额外收件人",
|
||||||
|
"additionalRecipientsDescription": "这些邮箱将额外收到邮件,不受上述用户筛选条件影响",
|
||||||
"allUsers": "所有用户",
|
"allUsers": "所有用户",
|
||||||
"broadcastList": "群发列表",
|
"broadcastList": "群发列表",
|
||||||
"broadcastLogs": "群发日志",
|
"broadcastLogs": "群发日志",
|
||||||
"cancel": "取消",
|
"cancel": "取消",
|
||||||
|
"cannotBeEmpty": "不能为空",
|
||||||
"completed": "已完成",
|
"completed": "已完成",
|
||||||
"confirm": "确认",
|
"confirm": "确认",
|
||||||
"confirmDelete": "确认删除",
|
"confirmDelete": "确认删除",
|
||||||
"content": "邮件内容",
|
"content": "邮件内容",
|
||||||
"create": "创建",
|
"create": "创建",
|
||||||
"createBroadcast": "创建群发",
|
"createBroadcast": "创建群发",
|
||||||
|
"createNewEmailBroadcastCampaign": "创建新的邮件群发活动",
|
||||||
"createSuccess": "创建成功",
|
"createSuccess": "创建成功",
|
||||||
"createdAt": "创建时间",
|
"createdAt": "创建时间",
|
||||||
|
"dailyLimit": "每日限制必须至少为1",
|
||||||
|
"dailySendLimit": "每日发送限制",
|
||||||
"delete": "删除",
|
"delete": "删除",
|
||||||
"deleteDescription": "此操作无法撤销,确定要删除吗?",
|
"deleteDescription": "此操作无法撤销,确定要删除吗?",
|
||||||
"deleteSuccess": "删除成功",
|
"deleteSuccess": "删除成功",
|
||||||
"edit": "编辑",
|
"edit": "编辑",
|
||||||
|
"emailAddedToScheduledQueue": "邮件已添加到定时发送队列",
|
||||||
"emailBroadcast": "邮件群发",
|
"emailBroadcast": "邮件群发",
|
||||||
|
"emailBroadcastTaskCreatedSuccessfully": "邮件群发任务创建成功",
|
||||||
|
"emailBroadcastTasks": "邮件群发任务",
|
||||||
|
"emailContent": "邮件内容",
|
||||||
|
"emailInterval": "邮件间隔(秒)",
|
||||||
|
"emailIntervalMinimum": "邮件间隔必须至少为0.1秒",
|
||||||
|
"emailMarketing": "邮件营销",
|
||||||
|
"emailTaskManager": "邮件任务管理",
|
||||||
"errorMessage": "错误信息",
|
"errorMessage": "错误信息",
|
||||||
|
"estimatedRecipients": "预估收件人",
|
||||||
|
"expiredSubscriptionUsersOnly": "仅过期订阅用户",
|
||||||
|
"expiredUsers": "过期用户",
|
||||||
"failCount": "失败数量",
|
"failCount": "失败数量",
|
||||||
"failed": "发送失败",
|
"failed": "发送失败",
|
||||||
|
"failedToRefreshTaskStatus": "刷新任务状态失败",
|
||||||
|
"failedToStopTask": "停止任务失败",
|
||||||
|
"inProgress": "进行中",
|
||||||
|
"includeUsersRegisteredAfter": "包含在此日期当天或之后注册的用户",
|
||||||
|
"includeUsersRegisteredBefore": "包含在此日期当天或之前注册的用户",
|
||||||
|
"intervalTimeBetweenEmails": "每封邮件之间的间隔时间",
|
||||||
|
"leaveEmptyForImmediateSend": "留空表示立即发送",
|
||||||
"logList": "日志列表",
|
"logList": "日志列表",
|
||||||
"marketingManagement": "营销管理",
|
"marketingManagement": "营销管理",
|
||||||
|
"maximumNumberPerDay": "每天发送邮件的最大数量",
|
||||||
|
"noSubscriptionUsersOnly": "仅无订阅用户",
|
||||||
|
"nonSubscribers": "非订阅用户",
|
||||||
|
"notStarted": "未开始",
|
||||||
|
"onePerLine": "每行一个",
|
||||||
|
"only": "仅",
|
||||||
"pending": "待发送",
|
"pending": "待发送",
|
||||||
|
"pleaseEnter": "请输入",
|
||||||
|
"pleaseEnterValidEmailAddresses": "请输入有效的邮箱地址,每行一个",
|
||||||
|
"processing": "处理中...",
|
||||||
|
"progress": "进度",
|
||||||
"recipient": "收件人",
|
"recipient": "收件人",
|
||||||
"recipientEmail": "收件人邮箱",
|
"recipientEmail": "收件人邮箱",
|
||||||
"recipientType": "收件人类型",
|
"recipientType": "收件人类型",
|
||||||
|
"registrationEndDate": "注册结束日期",
|
||||||
|
"registrationStartDate": "注册开始日期",
|
||||||
|
"scheduleSend": "定时发送",
|
||||||
|
"scheduledSend": "定时发送",
|
||||||
|
"scheduledSendTimeMustBeLater": "定时发送时间必须晚于当前时间",
|
||||||
|
"selectSendScope": "选择发送范围",
|
||||||
|
"selectSendTime": "选择发送时间,留空表示立即发送",
|
||||||
|
"sendFailed": "发送失败,请重试",
|
||||||
|
"sendNow": "立即发送",
|
||||||
|
"sendScope": "发送范围",
|
||||||
|
"sendScopeDescription": "选择邮件发送的用户范围。选择\"仅额外邮箱\"将只发送给下方填写的邮箱地址",
|
||||||
|
"sendSettings": "发送设置",
|
||||||
"sendTime": "发送时间",
|
"sendTime": "发送时间",
|
||||||
"sending": "发送中",
|
"sending": "发送中",
|
||||||
"sentAt": "发送时间",
|
"sentAt": "发送时间",
|
||||||
"specificUsers": "指定用户",
|
"specificUsers": "指定用户",
|
||||||
|
"specificUsersOnly": "仅额外邮箱(跳过平台用户)",
|
||||||
"status": "状态",
|
"status": "状态",
|
||||||
|
"stop": "停止",
|
||||||
|
"stopped": "已停止",
|
||||||
"subject": "邮件主题",
|
"subject": "邮件主题",
|
||||||
"subscribedUsers": "订阅用户",
|
"subscribedUsers": "订阅用户",
|
||||||
|
"subscribedUsersOnly": "仅订阅用户",
|
||||||
"successCount": "成功数量",
|
"successCount": "成功数量",
|
||||||
|
"taskStatusRefreshed": "任务状态已刷新",
|
||||||
|
"taskStoppedSuccessfully": "任务停止成功",
|
||||||
"totalSent": "总发送数",
|
"totalSent": "总发送数",
|
||||||
"updateSuccess": "更新成功",
|
"updateSuccess": "更新成功",
|
||||||
"view": "查看"
|
"useMarkdownEditor": "使用Markdown编辑器编写邮件内容,支持预览功能",
|
||||||
|
"users": "用户",
|
||||||
|
"view": "查看",
|
||||||
|
"viewAndManageEmailBroadcastTasks": "查看和管理邮件群发任务",
|
||||||
|
"viewContent": "查看内容"
|
||||||
}
|
}
|
||||||
|
|||||||
97
apps/admin/locales/zh-HK/marketing.json
Normal file
97
apps/admin/locales/zh-HK/marketing.json
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
{
|
||||||
|
"additional": "附加",
|
||||||
|
"additionalRecipientEmails": "附加收件人電郵",
|
||||||
|
"additionalRecipients": "附加收件人",
|
||||||
|
"additionalRecipientsDescription": "這些電郵將在上述用戶篩選之外接收廣播",
|
||||||
|
"allUsers": "所有用戶",
|
||||||
|
"broadcastList": "廣播列表",
|
||||||
|
"broadcastLogs": "廣播日誌",
|
||||||
|
"cancel": "取消",
|
||||||
|
"cannotBeEmpty": "不能為空",
|
||||||
|
"completed": "已完成",
|
||||||
|
"confirm": "確認",
|
||||||
|
"confirmDelete": "確認刪除",
|
||||||
|
"content": "電郵內容",
|
||||||
|
"create": "創建",
|
||||||
|
"createBroadcast": "創建廣播",
|
||||||
|
"createNewEmailBroadcastCampaign": "創建新的電郵廣播活動",
|
||||||
|
"createSuccess": "創建成功",
|
||||||
|
"createdAt": "創建於",
|
||||||
|
"dailyLimit": "每日限額必須至少為 1",
|
||||||
|
"dailySendLimit": "每日發送限額",
|
||||||
|
"delete": "刪除",
|
||||||
|
"deleteDescription": "此操作無法撤銷。你確定要刪除嗎?",
|
||||||
|
"deleteSuccess": "刪除成功",
|
||||||
|
"edit": "編輯",
|
||||||
|
"emailAddedToScheduledQueue": "電郵已添加到預定發送隊列",
|
||||||
|
"emailBroadcast": "電郵廣播",
|
||||||
|
"emailBroadcastTaskCreatedSuccessfully": "電郵廣播任務創建成功",
|
||||||
|
"emailBroadcastTasks": "電郵廣播任務",
|
||||||
|
"emailContent": "電郵內容",
|
||||||
|
"emailInterval": "電郵間隔(秒)",
|
||||||
|
"emailIntervalMinimum": "電郵間隔必須至少為 0.1 秒",
|
||||||
|
"emailMarketing": "電郵營銷",
|
||||||
|
"emailTaskManager": "電郵任務管理器",
|
||||||
|
"errorMessage": "錯誤信息",
|
||||||
|
"estimatedRecipients": "預估收件人",
|
||||||
|
"expiredSubscriptionUsersOnly": "僅限過期訂閱用戶",
|
||||||
|
"expiredUsers": "過期用戶",
|
||||||
|
"failCount": "失敗次數",
|
||||||
|
"failed": "失敗",
|
||||||
|
"failedToRefreshTaskStatus": "無法刷新任務狀態",
|
||||||
|
"failedToStopTask": "無法停止任務",
|
||||||
|
"inProgress": "進行中",
|
||||||
|
"includeUsersRegisteredAfter": "包括在此日期之後註冊的用戶",
|
||||||
|
"includeUsersRegisteredBefore": "包括在此日期之前註冊的用戶",
|
||||||
|
"intervalTimeBetweenEmails": "每封電郵之間的間隔時間",
|
||||||
|
"leaveEmptyForImmediateSend": "留空以立即發送",
|
||||||
|
"logList": "日誌列表",
|
||||||
|
"marketingManagement": "營銷管理",
|
||||||
|
"maximumNumberPerDay": "每日最多發送電郵數量",
|
||||||
|
"noSubscriptionUsersOnly": "僅限無訂閱用戶",
|
||||||
|
"nonSubscribers": "非訂閱者",
|
||||||
|
"notStarted": "尚未開始",
|
||||||
|
"onePerLine": "每行一個",
|
||||||
|
"only": "僅限",
|
||||||
|
"pending": "待處理",
|
||||||
|
"pleaseEnter": "請輸入",
|
||||||
|
"pleaseEnterValidEmailAddresses": "請輸入有效的電郵地址,每行一個",
|
||||||
|
"processing": "處理中...",
|
||||||
|
"progress": "進度",
|
||||||
|
"recipient": "收件人",
|
||||||
|
"recipientEmail": "收件人電郵",
|
||||||
|
"recipientType": "收件人類型",
|
||||||
|
"registrationEndDate": "註冊結束日期",
|
||||||
|
"registrationStartDate": "註冊開始日期",
|
||||||
|
"scheduleSend": "預定發送",
|
||||||
|
"scheduledSend": "預定發送",
|
||||||
|
"scheduledSendTimeMustBeLater": "預定發送時間必須晚於當前時間",
|
||||||
|
"selectSendScope": "選擇發送範圍",
|
||||||
|
"selectSendTime": "選擇發送時間,留空以立即發送",
|
||||||
|
"sendFailed": "發送失敗,請重試",
|
||||||
|
"sendNow": "立即發送",
|
||||||
|
"sendScope": "發送範圍",
|
||||||
|
"sendScopeDescription": "選擇電郵發送的用戶範圍。選擇「僅限附加電郵」以僅發送到下面填寫的電郵地址",
|
||||||
|
"sendSettings": "發送設置",
|
||||||
|
"sendTime": "發送時間",
|
||||||
|
"sending": "發送中",
|
||||||
|
"sentAt": "發送於",
|
||||||
|
"specificUsers": "特定用戶",
|
||||||
|
"specificUsersOnly": "僅限附加電郵(跳過平台用戶)",
|
||||||
|
"status": "狀態",
|
||||||
|
"stop": "停止",
|
||||||
|
"stopped": "已停止",
|
||||||
|
"subject": "電郵主題",
|
||||||
|
"subscribedUsers": "已訂閱用戶",
|
||||||
|
"subscribedUsersOnly": "僅限已訂閱用戶",
|
||||||
|
"successCount": "成功次數",
|
||||||
|
"taskStatusRefreshed": "任務狀態已刷新",
|
||||||
|
"taskStoppedSuccessfully": "任務已成功停止",
|
||||||
|
"totalSent": "總發送數量",
|
||||||
|
"updateSuccess": "更新成功",
|
||||||
|
"useMarkdownEditor": "使用 Markdown 編輯器撰寫電郵內容並提供預覽功能",
|
||||||
|
"users": "用戶",
|
||||||
|
"view": "查看",
|
||||||
|
"viewAndManageEmailBroadcastTasks": "查看和管理電郵廣播任務",
|
||||||
|
"viewContent": "查看內容"
|
||||||
|
}
|
||||||
@ -7,6 +7,7 @@
|
|||||||
"Dashboard": "儀表板",
|
"Dashboard": "儀表板",
|
||||||
"Document Management": "文件管理",
|
"Document Management": "文件管理",
|
||||||
"Finance": "財務",
|
"Finance": "財務",
|
||||||
|
"Marketing Management": "市場營銷管理",
|
||||||
"Order Management": "訂單管理",
|
"Order Management": "訂單管理",
|
||||||
"Payment Config": "支付配置",
|
"Payment Config": "支付配置",
|
||||||
"Product Management": "產品管理",
|
"Product Management": "產品管理",
|
||||||
|
|||||||
69
apps/admin/services/admin/application.ts
Normal file
69
apps/admin/services/admin/application.ts
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
// @ts-ignore
|
||||||
|
|
||||||
|
import request from '@/utils/request';
|
||||||
|
|
||||||
|
/** Create subscribe application POST /v1/admin/application/ */
|
||||||
|
export async function createSubscribeApplication(
|
||||||
|
body: API.CreateSubscribeApplicationRequest,
|
||||||
|
options?: { [key: string]: any },
|
||||||
|
) {
|
||||||
|
return request<API.Response & { data?: API.SubscribeApplication }>('/v1/admin/application/', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
},
|
||||||
|
data: body,
|
||||||
|
...(options || {}),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Update subscribe application PUT /v1/admin/application/subscribe_application */
|
||||||
|
export async function updateSubscribeApplication(
|
||||||
|
body: API.UpdateSubscribeApplicationRequest,
|
||||||
|
options?: { [key: string]: any },
|
||||||
|
) {
|
||||||
|
return request<API.Response & { data?: API.SubscribeApplication }>(
|
||||||
|
'/v1/admin/application/subscribe_application',
|
||||||
|
{
|
||||||
|
method: 'PUT',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
},
|
||||||
|
data: body,
|
||||||
|
...(options || {}),
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Delete subscribe application DELETE /v1/admin/application/subscribe_application */
|
||||||
|
export async function deleteSubscribeApplication(
|
||||||
|
body: API.DeleteSubscribeApplicationRequest,
|
||||||
|
options?: { [key: string]: any },
|
||||||
|
) {
|
||||||
|
return request<API.Response & { data?: any }>('/v1/admin/application/subscribe_application', {
|
||||||
|
method: 'DELETE',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
},
|
||||||
|
data: body,
|
||||||
|
...(options || {}),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get subscribe application list GET /v1/admin/application/subscribe_application_list */
|
||||||
|
export async function getSubscribeApplicationList(
|
||||||
|
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
|
||||||
|
params: API.GetSubscribeApplicationListParams,
|
||||||
|
options?: { [key: string]: any },
|
||||||
|
) {
|
||||||
|
return request<API.Response & { data?: API.GetSubscribeApplicationListResponse }>(
|
||||||
|
'/v1/admin/application/subscribe_application_list',
|
||||||
|
{
|
||||||
|
method: 'GET',
|
||||||
|
params: {
|
||||||
|
...params,
|
||||||
|
},
|
||||||
|
...(options || {}),
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
@ -1,14 +1,16 @@
|
|||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
|
|
||||||
// API 更新时间:
|
// API 更新时间:
|
||||||
// API 唯一标识:
|
// API 唯一标识:
|
||||||
import * as ads from './ads';
|
import * as ads from './ads';
|
||||||
import * as announcement from './announcement';
|
import * as announcement from './announcement';
|
||||||
|
import * as application from './application';
|
||||||
import * as authMethod from './authMethod';
|
import * as authMethod from './authMethod';
|
||||||
import * as console from './console';
|
import * as console from './console';
|
||||||
import * as coupon from './coupon';
|
import * as coupon from './coupon';
|
||||||
import * as document from './document';
|
import * as document from './document';
|
||||||
import * as log from './log';
|
import * as log from './log';
|
||||||
|
import * as marketing from './marketing';
|
||||||
import * as order from './order';
|
import * as order from './order';
|
||||||
import * as payment from './payment';
|
import * as payment from './payment';
|
||||||
import * as server from './server';
|
import * as server from './server';
|
||||||
@ -20,11 +22,13 @@ import * as user from './user';
|
|||||||
export default {
|
export default {
|
||||||
ads,
|
ads,
|
||||||
announcement,
|
announcement,
|
||||||
|
application,
|
||||||
authMethod,
|
authMethod,
|
||||||
console,
|
console,
|
||||||
coupon,
|
coupon,
|
||||||
document,
|
document,
|
||||||
log,
|
log,
|
||||||
|
marketing,
|
||||||
order,
|
order,
|
||||||
payment,
|
payment,
|
||||||
server,
|
server,
|
||||||
|
|||||||
87
apps/admin/services/admin/marketing.ts
Normal file
87
apps/admin/services/admin/marketing.ts
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
// @ts-ignore
|
||||||
|
/* eslint-disable */
|
||||||
|
import request from '@/utils/request';
|
||||||
|
|
||||||
|
/** Get batch send email task list GET /v1/admin/marketing/email/batch/list */
|
||||||
|
export async function getBatchSendEmailTaskList(
|
||||||
|
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
|
||||||
|
params: API.GetBatchSendEmailTaskListParams,
|
||||||
|
options?: { [key: string]: any },
|
||||||
|
) {
|
||||||
|
return request<API.Response & { data?: API.GetBatchSendEmailTaskListResponse }>(
|
||||||
|
'/v1/admin/marketing/email/batch/list',
|
||||||
|
{
|
||||||
|
method: 'GET',
|
||||||
|
params: {
|
||||||
|
...params,
|
||||||
|
},
|
||||||
|
...(options || {}),
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get pre-send email count POST /v1/admin/marketing/email/batch/pre-send-count */
|
||||||
|
export async function getPreSendEmailCount(
|
||||||
|
body: API.GetPreSendEmailCountRequest,
|
||||||
|
options?: { [key: string]: any },
|
||||||
|
) {
|
||||||
|
return request<API.Response & { data?: API.GetPreSendEmailCountResponse }>(
|
||||||
|
'/v1/admin/marketing/email/batch/pre-send-count',
|
||||||
|
{
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
},
|
||||||
|
data: body,
|
||||||
|
...(options || {}),
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Create a batch send email task POST /v1/admin/marketing/email/batch/send */
|
||||||
|
export async function createBatchSendEmailTask(
|
||||||
|
body: API.CreateBatchSendEmailTaskRequest,
|
||||||
|
options?: { [key: string]: any },
|
||||||
|
) {
|
||||||
|
return request<API.Response & { data?: any }>('/v1/admin/marketing/email/batch/send', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
},
|
||||||
|
data: body,
|
||||||
|
...(options || {}),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get batch send email task status POST /v1/admin/marketing/email/batch/status */
|
||||||
|
export async function getBatchSendEmailTaskStatus(
|
||||||
|
body: API.GetBatchSendEmailTaskStatusRequest,
|
||||||
|
options?: { [key: string]: any },
|
||||||
|
) {
|
||||||
|
return request<API.Response & { data?: API.GetBatchSendEmailTaskStatusResponse }>(
|
||||||
|
'/v1/admin/marketing/email/batch/status',
|
||||||
|
{
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
},
|
||||||
|
data: body,
|
||||||
|
...(options || {}),
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Stop a batch send email task POST /v1/admin/marketing/email/batch/stop */
|
||||||
|
export async function stopBatchSendEmailTask(
|
||||||
|
body: API.StopBatchSendEmailTaskRequest,
|
||||||
|
options?: { [key: string]: any },
|
||||||
|
) {
|
||||||
|
return request<API.Response & { data?: any }>('/v1/admin/marketing/email/batch/stop', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
},
|
||||||
|
data: body,
|
||||||
|
...(options || {}),
|
||||||
|
});
|
||||||
|
}
|
||||||
135
apps/admin/services/admin/typings.d.ts
vendored
135
apps/admin/services/admin/typings.d.ts
vendored
@ -155,6 +155,26 @@ declare namespace API {
|
|||||||
ids: number[];
|
ids: number[];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type BatchSendEmailTask = {
|
||||||
|
id: number;
|
||||||
|
subject: string;
|
||||||
|
content: string;
|
||||||
|
recipients: string;
|
||||||
|
scope: string;
|
||||||
|
register_start_time: number;
|
||||||
|
register_end_time: number;
|
||||||
|
additional: string;
|
||||||
|
scheduled: number;
|
||||||
|
interval: number;
|
||||||
|
limit: number;
|
||||||
|
status: number;
|
||||||
|
errors: string;
|
||||||
|
total: number;
|
||||||
|
current: number;
|
||||||
|
created_at: number;
|
||||||
|
updated_at: number;
|
||||||
|
};
|
||||||
|
|
||||||
type CheckoutOrderRequest = {
|
type CheckoutOrderRequest = {
|
||||||
orderNo: string;
|
orderNo: string;
|
||||||
returnUrl?: string;
|
returnUrl?: string;
|
||||||
@ -220,6 +240,18 @@ declare namespace API {
|
|||||||
application_id: number;
|
application_id: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type CreateBatchSendEmailTaskRequest = {
|
||||||
|
subject: string;
|
||||||
|
content: string;
|
||||||
|
scope: string;
|
||||||
|
register_start_time?: number;
|
||||||
|
register_end_time?: number;
|
||||||
|
additional?: string;
|
||||||
|
scheduled?: number;
|
||||||
|
interval?: number;
|
||||||
|
limit?: number;
|
||||||
|
};
|
||||||
|
|
||||||
type CreateCouponRequest = {
|
type CreateCouponRequest = {
|
||||||
name: string;
|
name: string;
|
||||||
code?: string;
|
code?: string;
|
||||||
@ -303,6 +335,18 @@ declare namespace API {
|
|||||||
enable: boolean;
|
enable: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type CreateSubscribeApplicationRequest = {
|
||||||
|
name: string;
|
||||||
|
description?: string;
|
||||||
|
icon?: string;
|
||||||
|
user_agent: string;
|
||||||
|
is_default: boolean;
|
||||||
|
proxy_template: string;
|
||||||
|
template: string;
|
||||||
|
output_format: string;
|
||||||
|
download_link?: string;
|
||||||
|
};
|
||||||
|
|
||||||
type CreateSubscribeGroupRequest = {
|
type CreateSubscribeGroupRequest = {
|
||||||
name: string;
|
name: string;
|
||||||
description: string;
|
description: string;
|
||||||
@ -412,6 +456,10 @@ declare namespace API {
|
|||||||
id: number;
|
id: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type DeleteSubscribeApplicationRequest = {
|
||||||
|
id: number;
|
||||||
|
};
|
||||||
|
|
||||||
type DeleteSubscribeGroupRequest = {
|
type DeleteSubscribeGroupRequest = {
|
||||||
id: number;
|
id: number;
|
||||||
};
|
};
|
||||||
@ -550,6 +598,36 @@ declare namespace API {
|
|||||||
list: PaymentMethod[];
|
list: PaymentMethod[];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type GetBatchSendEmailTaskListParams = {
|
||||||
|
page: number;
|
||||||
|
size: number;
|
||||||
|
scope?: string;
|
||||||
|
status?: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
type GetBatchSendEmailTaskListRequest = {
|
||||||
|
page: number;
|
||||||
|
size: number;
|
||||||
|
scope?: string;
|
||||||
|
status?: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
type GetBatchSendEmailTaskListResponse = {
|
||||||
|
total: number;
|
||||||
|
list: BatchSendEmailTask[];
|
||||||
|
};
|
||||||
|
|
||||||
|
type GetBatchSendEmailTaskStatusRequest = {
|
||||||
|
id: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
type GetBatchSendEmailTaskStatusResponse = {
|
||||||
|
status: number;
|
||||||
|
current: number;
|
||||||
|
total: number;
|
||||||
|
errors: string;
|
||||||
|
};
|
||||||
|
|
||||||
type GetCouponListParams = {
|
type GetCouponListParams = {
|
||||||
page: number;
|
page: number;
|
||||||
size: number;
|
size: number;
|
||||||
@ -709,11 +787,36 @@ declare namespace API {
|
|||||||
list: PaymentMethodDetail[];
|
list: PaymentMethodDetail[];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type GetPreSendEmailCountRequest = {
|
||||||
|
scope: string;
|
||||||
|
register_start_time?: number;
|
||||||
|
register_end_time?: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
type GetPreSendEmailCountResponse = {
|
||||||
|
count: number;
|
||||||
|
};
|
||||||
|
|
||||||
type GetRuleGroupResponse = {
|
type GetRuleGroupResponse = {
|
||||||
total: number;
|
total: number;
|
||||||
list: ServerRuleGroup[];
|
list: ServerRuleGroup[];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type GetSubscribeApplicationListParams = {
|
||||||
|
page: number;
|
||||||
|
size: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
type GetSubscribeApplicationListRequest = {
|
||||||
|
page: number;
|
||||||
|
size: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
type GetSubscribeApplicationListResponse = {
|
||||||
|
total: number;
|
||||||
|
list: SubscribeApplication[];
|
||||||
|
};
|
||||||
|
|
||||||
type GetSubscribeDetailsParams = {
|
type GetSubscribeDetailsParams = {
|
||||||
id: number;
|
id: number;
|
||||||
};
|
};
|
||||||
@ -1347,6 +1450,10 @@ declare namespace API {
|
|||||||
sort: number;
|
sort: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type StopBatchSendEmailTaskRequest = {
|
||||||
|
id: number;
|
||||||
|
};
|
||||||
|
|
||||||
type StripePayment = {
|
type StripePayment = {
|
||||||
method: string;
|
method: string;
|
||||||
client_secret: string;
|
client_secret: string;
|
||||||
@ -1380,6 +1487,21 @@ declare namespace API {
|
|||||||
updated_at: number;
|
updated_at: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type SubscribeApplication = {
|
||||||
|
id: number;
|
||||||
|
name: string;
|
||||||
|
description?: string;
|
||||||
|
icon?: string;
|
||||||
|
user_agent: string;
|
||||||
|
is_default: boolean;
|
||||||
|
proxy_template: string;
|
||||||
|
template: string;
|
||||||
|
output_format: string;
|
||||||
|
download_link?: string;
|
||||||
|
created_at: number;
|
||||||
|
updated_at: number;
|
||||||
|
};
|
||||||
|
|
||||||
type SubscribeConfig = {
|
type SubscribeConfig = {
|
||||||
single_model: boolean;
|
single_model: boolean;
|
||||||
subscribe_path: string;
|
subscribe_path: string;
|
||||||
@ -1641,6 +1763,19 @@ declare namespace API {
|
|||||||
enable: boolean;
|
enable: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type UpdateSubscribeApplicationRequest = {
|
||||||
|
id: number;
|
||||||
|
name: string;
|
||||||
|
description?: string;
|
||||||
|
icon?: string;
|
||||||
|
user_agent: string;
|
||||||
|
is_default: boolean;
|
||||||
|
proxy_template: string;
|
||||||
|
template: string;
|
||||||
|
output_format: string;
|
||||||
|
download_link?: string;
|
||||||
|
};
|
||||||
|
|
||||||
type UpdateSubscribeGroupRequest = {
|
type UpdateSubscribeGroupRequest = {
|
||||||
id: number;
|
id: number;
|
||||||
name: string;
|
name: string;
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
|
|
||||||
// API 更新时间:
|
// API 更新时间:
|
||||||
// API 唯一标识:
|
// API 唯一标识:
|
||||||
import * as auth from './auth';
|
import * as auth from './auth';
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user