🐛 fix(user): Update notification and verify code settings

This commit is contained in:
web@ppanel 2025-02-14 15:39:25 +07:00
parent e3f9ef6ebe
commit 574b043be6
112 changed files with 500 additions and 502 deletions

View File

@ -3,13 +3,15 @@
import { Invite } from './invite'; import { Invite } from './invite';
import { Register } from './register'; import { Register } from './register';
import { Verify } from './verify'; import { Verify } from './verify';
import { VerifyCode } from './verify-code';
export default function Page() { export default function Page() {
return ( return (
<div className='space-y-3'> <div className='space-y-3'>
<Register />
<Verify />
<Invite /> <Invite />
<Register />
<VerifyCode />
<Verify />
</div> </div>
); );
} }

View File

@ -0,0 +1,95 @@
'use client';
import { getVerifyCodeConfig, updateVerifyCodeConfig } from '@/services/admin/system';
import { useQuery } from '@tanstack/react-query';
import { Card, CardContent, CardHeader, CardTitle } from '@workspace/ui/components/card';
import { Label } from '@workspace/ui/components/label';
import { Table, TableBody, TableCell, TableRow } from '@workspace/ui/components/table';
import { EnhancedInput } from '@workspace/ui/custom-components/enhanced-input';
import { useTranslations } from 'next-intl';
import { toast } from 'sonner';
export function VerifyCode() {
const t = useTranslations('auth-control.verify-code');
const { data, refetch } = useQuery({
queryKey: ['getVerifyCodeConfig'],
queryFn: async () => {
const { data } = await getVerifyCodeConfig();
return data.data;
},
});
async function updateConfig(key: string, value: unknown) {
if (data?.[key] === value) return;
try {
await updateVerifyCodeConfig({
...data,
[key]: value,
} as API.VerifyCodeConfig);
toast.success(t('saveSuccess'));
refetch();
} catch (error) {
/* empty */
}
}
return (
<Card className='mb-6'>
<CardHeader>
<CardTitle>{t('verifyCodeSettings')}</CardTitle>
</CardHeader>
<CardContent>
<Table>
<TableBody>
<TableRow>
<TableCell>
<Label>{t('expireTime')}</Label>
<p className='text-muted-foreground text-xs'>{t('expireTimeDescription')}</p>
</TableCell>
<TableCell className='text-right'>
<EnhancedInput
type='number'
placeholder='5'
value={data?.verify_code_expire_time}
onValueBlur={(value) => updateConfig('verify_code_expire_time', Number(value))}
suffix={t('minute')}
/>
</TableCell>
</TableRow>
<TableRow>
<TableCell>
<Label>{t('interval')}</Label>
<p className='text-muted-foreground text-xs'>{t('intervalDescription')}</p>
</TableCell>
<TableCell className='text-right'>
<EnhancedInput
type='number'
placeholder='60'
value={data?.verify_code_interval}
onValueBlur={(value) => updateConfig('verify_code_interval', Number(value))}
suffix={t('second')}
/>
</TableCell>
</TableRow>
<TableRow>
<TableCell>
<Label>{t('dailyLimit')}</Label>
<p className='text-muted-foreground text-xs'>{t('dailyLimitDescription')}</p>
</TableCell>
<TableCell className='text-right'>
<EnhancedInput
type='number'
placeholder='15'
value={data?.verify_code_limit}
onValueBlur={(value) => updateConfig('verify_code_limit', Number(value))}
suffix={t('times')}
/>
</TableCell>
</TableRow>
</TableBody>
</Table>
</CardContent>
</Card>
);
}

View File

@ -96,71 +96,6 @@ export default function Page() {
/> />
</TableCell> </TableCell>
</TableRow> </TableRow>
<TableRow>
<TableCell>
<Label>{t('expireTime')}</Label>
<p className='text-muted-foreground text-xs'>{t('expireTimeTip')}</p>
</TableCell>
<TableCell className='text-right'>
<EnhancedInput
type='number'
min={0}
value={data?.config?.expire_time ?? 300}
onValueBlur={(value) =>
updateConfig('config', {
...data?.config,
expire_time: value,
})
}
suffix='S'
disabled={isFetching}
placeholder={t('placeholders.expireTime')}
/>
</TableCell>
</TableRow>
<TableRow>
<TableCell className='align-top'>
<Label>{t('interval')}</Label>
<p className='text-muted-foreground text-xs'>{t('intervalTip')}</p>
</TableCell>
<TableCell className='text-right'>
<EnhancedInput
type='number'
value={data?.config?.interval ?? 60}
min={0}
onValueBlur={(value) =>
updateConfig('config', {
...data?.config,
interval: value,
})
}
suffix='S'
disabled={isFetching}
placeholder={t('placeholders.interval')}
/>
</TableCell>
</TableRow>
<TableRow>
<TableCell>
<Label>{t('limit')}</Label>
<p className='text-muted-foreground text-xs'>{t('limitTip')}</p>
</TableCell>
<TableCell className='text-right'>
<EnhancedInput
type='number'
value={data?.config?.limit ?? 20}
min={0}
onValueBlur={(value) =>
updateConfig('config', {
...data?.config,
limit: value,
})
}
disabled={isFetching}
placeholder={t('placeholders.limit')}
/>
</TableCell>
</TableRow>
<TableRow> <TableRow>
<TableCell> <TableCell>
<Label>{t('whitelistValidation')}</Label> <Label>{t('whitelistValidation')}</Label>

View File

@ -35,7 +35,7 @@ function getTimeRangeData(slots: API.TimePeriod[]) {
.filter((slot) => slot.start_time && slot.end_time) .filter((slot) => slot.start_time && slot.end_time)
.flatMap((slot) => { .flatMap((slot) => {
const [startH = 0, startM = 0] = slot.start_time.split(':').map(Number); const [startH = 0, startM = 0] = slot.start_time.split(':').map(Number);
const [endH = 0, endM = 0] = slot?.end_time?.split(':').map(Number); const [endH = 0, endM = 0] = slot?.end_time.split(':').map(Number);
const start = startH * 60 + startM; const start = startH * 60 + startM;
let end = endH * 60 + endM; let end = endH * 60 + endM;
if (end < start) end += MINUTES_IN_DAY; if (end < start) end += MINUTES_IN_DAY;
@ -117,7 +117,7 @@ export default function NodeConfig() {
}, [timeSlots]); }, [timeSlots]);
const chartConfig = useMemo(() => { const chartConfig = useMemo(() => {
return chartTimeSlots.reduce( return chartTimeSlots?.reduce(
(acc, item, index) => { (acc, item, index) => {
acc[item.name] = { acc[item.name] = {
label: item.name, label: item.name,

View File

@ -12,8 +12,6 @@ import { toast } from 'sonner';
import * as z from 'zod'; import * as z from 'zod';
const notifySettingsSchema = z.object({ const notifySettingsSchema = z.object({
enable_email_notify: z.boolean(),
enable_telegram_notify: z.boolean(),
enable_balance_notify: z.boolean(), enable_balance_notify: z.boolean(),
enable_login_notify: z.boolean(), enable_login_notify: z.boolean(),
enable_subscribe_notify: z.boolean(), enable_subscribe_notify: z.boolean(),
@ -28,8 +26,6 @@ export function NotifySettingsForm({ user }: { user: API.User }) {
const form = useForm<NotifySettingsValues>({ const form = useForm<NotifySettingsValues>({
resolver: zodResolver(notifySettingsSchema), resolver: zodResolver(notifySettingsSchema),
defaultValues: { defaultValues: {
enable_email_notify: user.enable_email_notify,
enable_telegram_notify: user.enable_telegram_notify,
enable_balance_notify: user.enable_balance_notify, enable_balance_notify: user.enable_balance_notify,
enable_login_notify: user.enable_login_notify, enable_login_notify: user.enable_login_notify,
enable_subscribe_notify: user.enable_subscribe_notify, enable_subscribe_notify: user.enable_subscribe_notify,
@ -57,32 +53,6 @@ export function NotifySettingsForm({ user }: { user: API.User }) {
</CardHeader> </CardHeader>
<CardContent className='space-y-4'> <CardContent className='space-y-4'>
<div className='grid grid-cols-1 gap-4'> <div className='grid grid-cols-1 gap-4'>
<FormField
control={form.control}
name='enable_email_notify'
render={({ field }) => (
<FormItem className='flex items-center justify-between space-x-2'>
<FormLabel>{t('emailNotifications')}</FormLabel>
<FormControl>
<Switch checked={field.value} onCheckedChange={field.onChange} />
</FormControl>
</FormItem>
)}
/>
<FormField
control={form.control}
name='enable_telegram_notify'
render={({ field }) => (
<FormItem className='flex items-center justify-between space-x-2'>
<FormLabel>{t('telegramNotifications')}</FormLabel>
<FormControl>
<Switch checked={field.value} onCheckedChange={field.onChange} />
</FormControl>
</FormItem>
)}
/>
<FormField <FormField
control={form.control} control={form.control}
name='enable_balance_notify' name='enable_balance_notify'

View File

@ -37,6 +37,9 @@ export const useGlobalStore = create<GlobalStore>((set) => ({
register: { register: {
stop_register: false, stop_register: false,
enable_trial: false, enable_trial: false,
trial_subscribe: 0,
trial_time: 0,
trial_time_unit: '',
enable_ip_register_limit: false, enable_ip_register_limit: false,
ip_register_limit: 0, ip_register_limit: 0,
ip_register_limit_duration: 0, ip_register_limit_duration: 0,
@ -48,8 +51,8 @@ export const useGlobalStore = create<GlobalStore>((set) => ({
only_first_purchase: false, only_first_purchase: false,
}, },
currency: { currency: {
currency_unit: '', currency_unit: 'USD',
currency_symbol: '', currency_symbol: '$',
}, },
subscribe: { subscribe: {
single_model: false, single_model: false,
@ -57,6 +60,11 @@ export const useGlobalStore = create<GlobalStore>((set) => ({
subscribe_domain: '', subscribe_domain: '',
pan_domain: false, pan_domain: false,
}, },
verify_code: {
verify_code_expire_time: 5,
verify_code_limit: 15,
verify_code_interval: 60,
},
oauth_methods: [], oauth_methods: [],
}, },
user: undefined, user: undefined,

View File

@ -58,5 +58,18 @@
"turnstileSecretDescription": "Tajný klíč turniketu poskytovaný Cloudflare", "turnstileSecretDescription": "Tajný klíč turniketu poskytovaný Cloudflare",
"turnstileSiteKeyDescription": "Klíč pro web turniketu poskytovaný Cloudflare", "turnstileSiteKeyDescription": "Klíč pro web turniketu poskytovaný Cloudflare",
"verifySettings": "Nastavení ověření" "verifySettings": "Nastavení ověření"
},
"verify-code": {
"dailyLimit": "Denní limit",
"dailyLimitDescription": "Maximální počet ověřovacích kódů, které lze odeslat za den",
"expireTime": "Čas vypršení",
"expireTimeDescription": "Doba platnosti ověřovacího kódu (minuty)",
"interval": "Interval odesílání",
"intervalDescription": "Minimální interval mezi odesíláním ověřovacích kódů (sekundy)",
"minute": "minuty",
"saveSuccess": "Uložení úspěšné",
"second": "sekundy",
"times": "krát",
"verifyCodeSettings": "Nastavení ověřovacího kódu"
} }
} }

View File

@ -4,18 +4,9 @@
"enable": "Povolit", "enable": "Povolit",
"enableTip": "Po povolení budou povoleny funkce registrace, přihlášení, připojení a odpojení mobilního telefonu", "enableTip": "Po povolení budou povoleny funkce registrace, přihlášení, připojení a odpojení mobilního telefonu",
"endpointLabel": "Koncový bod", "endpointLabel": "Koncový bod",
"expireTime": "Čas vypršení",
"expireTimeTip": "Doba platnosti ověřovacího kódu SMS (v sekundách)",
"interval": "Interval",
"intervalTip": "Interval odesílání SMS ověřovacího kódu pro stejné telefonní číslo (v sekundách), 0 znamená bez omezení",
"limit": "Denní limit",
"limitTip": "Denní limit pro odesílání ověřovacích SMS kódů na stejné telefonní číslo, 0 znamená bez omezení",
"logs": "Protokoly", "logs": "Protokoly",
"phoneNumberLabel": "Telefonní číslo", "phoneNumberLabel": "Telefonní číslo",
"placeholders": { "placeholders": {
"expireTime": "Zadejte dobu vypršení, výchozí je 300",
"interval": "Zadejte interval, výchozí je 60",
"limit": "Zadejte denní limit, výchozí je 20",
"template": "Váš ověřovací kód je {code}, platný po dobu 5 minut", "template": "Váš ověřovací kód je {code}, platný po dobu 5 minut",
"templateCode": "Zadejte kód šablony" "templateCode": "Zadejte kód šablony"
}, },

View File

@ -39,7 +39,6 @@
"editSubscription": "Upravit předplatné", "editSubscription": "Upravit předplatné",
"editUser": "Upravit uživatele", "editUser": "Upravit uživatele",
"email": "e-mail", "email": "e-mail",
"emailNotifications": "E-mailová oznámení",
"enable": "Povolit", "enable": "Povolit",
"expireTime": "Čas vypršení", "expireTime": "Čas vypršení",
"expiredAt": "Platnost vypršela", "expiredAt": "Platnost vypršela",
@ -82,7 +81,6 @@
"subscriptionName": "Název předplatného", "subscriptionName": "Název předplatného",
"subscriptionNotifications": "Oznámení o předplatném", "subscriptionNotifications": "Oznámení o předplatném",
"success": "Úspěch", "success": "Úspěch",
"telegramNotifications": "Telegram oznámení",
"telephone": "Telefonní číslo", "telephone": "Telefonní číslo",
"telephonePlaceholder": "Zadejte telefonní číslo", "telephonePlaceholder": "Zadejte telefonní číslo",
"time": "Čas", "time": "Čas",

View File

@ -58,5 +58,18 @@
"turnstileSecretDescription": "Turnstile-Geheimschlüssel, bereitgestellt von Cloudflare", "turnstileSecretDescription": "Turnstile-Geheimschlüssel, bereitgestellt von Cloudflare",
"turnstileSiteKeyDescription": "Turnstile-Seitenschlüssel, bereitgestellt von Cloudflare", "turnstileSiteKeyDescription": "Turnstile-Seitenschlüssel, bereitgestellt von Cloudflare",
"verifySettings": "Überprüfungseinstellungen" "verifySettings": "Überprüfungseinstellungen"
},
"verify-code": {
"dailyLimit": "Tägliches Limit",
"dailyLimitDescription": "Maximale Anzahl von Bestätigungscodes, die pro Tag gesendet werden können",
"expireTime": "Ablaufzeit",
"expireTimeDescription": "Ablaufzeit des Bestätigungscodes (Minuten)",
"interval": "Sendeintervall",
"intervalDescription": "Minimales Intervall zwischen dem Versenden von Bestätigungscodes (Sekunden)",
"minute": "Minuten",
"saveSuccess": "Erfolgreich gespeichert",
"second": "Sekunden",
"times": "Mal",
"verifyCodeSettings": "Einstellungen für den Bestätigungscode"
} }
} }

View File

@ -4,18 +4,9 @@
"enable": "Aktivieren", "enable": "Aktivieren",
"enableTip": "Nach der Aktivierung werden die Funktionen zur Registrierung, Anmeldung, Bindung und Entbindung von Mobiltelefonen aktiviert", "enableTip": "Nach der Aktivierung werden die Funktionen zur Registrierung, Anmeldung, Bindung und Entbindung von Mobiltelefonen aktiviert",
"endpointLabel": "Endpunkt", "endpointLabel": "Endpunkt",
"expireTime": "Ablaufzeit",
"expireTimeTip": "Gültigkeitsdauer des SMS-Bestätigungscodes (Sekunden)",
"interval": "Intervall",
"intervalTip": "SMS-Bestätigungscode-Sendeintervall für dieselbe Telefonnummer (Sekunden), 0 bedeutet keine Begrenzung",
"limit": "Tageslimit",
"limitTip": "Tägliches Limit für das Senden von SMS-Verifizierungscodes an dieselbe Telefonnummer, 0 bedeutet kein Limit",
"logs": "Protokolle", "logs": "Protokolle",
"phoneNumberLabel": "Telefonnummer", "phoneNumberLabel": "Telefonnummer",
"placeholders": { "placeholders": {
"expireTime": "Geben Sie die Ablaufzeit ein, Standard ist 300",
"interval": "Geben Sie das Intervall ein, Standard ist 60",
"limit": "Geben Sie das tägliche Limit ein, Standard ist 20",
"template": "Ihr Bestätigungscode ist {code}, gültig für 5 Minuten", "template": "Ihr Bestätigungscode ist {code}, gültig für 5 Minuten",
"templateCode": "Geben Sie den Vorlagen-Code ein" "templateCode": "Geben Sie den Vorlagen-Code ein"
}, },

View File

@ -39,7 +39,6 @@
"editSubscription": "Abonnement bearbeiten", "editSubscription": "Abonnement bearbeiten",
"editUser": "Benutzer bearbeiten", "editUser": "Benutzer bearbeiten",
"email": "E-Mail", "email": "E-Mail",
"emailNotifications": "E-Mail-Benachrichtigungen",
"enable": "Aktivieren", "enable": "Aktivieren",
"expireTime": "Ablaufzeit", "expireTime": "Ablaufzeit",
"expiredAt": "Abgelaufen am", "expiredAt": "Abgelaufen am",
@ -82,7 +81,6 @@
"subscriptionName": "Abonnementname", "subscriptionName": "Abonnementname",
"subscriptionNotifications": "Abonnement-Benachrichtigungen", "subscriptionNotifications": "Abonnement-Benachrichtigungen",
"success": "Erfolg", "success": "Erfolg",
"telegramNotifications": "Telegram-Benachrichtigungen",
"telephone": "Telefonnummer", "telephone": "Telefonnummer",
"telephonePlaceholder": "Telefonnummer eingeben", "telephonePlaceholder": "Telefonnummer eingeben",
"time": "Zeit", "time": "Zeit",

View File

@ -58,5 +58,18 @@
"turnstileSecretDescription": "Turnstile secret key provided by Cloudflare", "turnstileSecretDescription": "Turnstile secret key provided by Cloudflare",
"turnstileSiteKeyDescription": "Turnstile site key provided by Cloudflare", "turnstileSiteKeyDescription": "Turnstile site key provided by Cloudflare",
"verifySettings": "Verify Settings" "verifySettings": "Verify Settings"
},
"verify-code": {
"dailyLimit": "Daily Limit",
"dailyLimitDescription": "Maximum number of verification codes that can be sent per day",
"expireTime": "Expire Time",
"expireTimeDescription": "Verification code expiration time (minutes)",
"interval": "Send Interval",
"intervalDescription": "Minimum interval between sending verification codes (seconds)",
"minute": "minutes",
"saveSuccess": "Save Successful",
"second": "seconds",
"times": "times",
"verifyCodeSettings": "Verification Code Settings"
} }
} }

View File

@ -4,18 +4,9 @@
"enable": "Enable", "enable": "Enable",
"enableTip": "After enabling, mobile phone registration, login, binding, and unbinding functions will be enabled", "enableTip": "After enabling, mobile phone registration, login, binding, and unbinding functions will be enabled",
"endpointLabel": "Endpoint", "endpointLabel": "Endpoint",
"expireTime": "Expire Time",
"expireTimeTip": "SMS verification code validity period (seconds)",
"interval": "Interval",
"intervalTip": "SMS verification code sending interval for the same phone number (seconds), 0 means no limit",
"limit": "Daily Limit",
"limitTip": "Daily SMS verification code sending limit for the same phone number, 0 means no limit",
"logs": "Logs", "logs": "Logs",
"phoneNumberLabel": "Phone Number", "phoneNumberLabel": "Phone Number",
"placeholders": { "placeholders": {
"expireTime": "Enter expire time, default is 300",
"interval": "Enter interval time, default is 60",
"limit": "Enter daily limit, default is 20",
"template": "Your verification code is {code}, valid for 5 minutes", "template": "Your verification code is {code}, valid for 5 minutes",
"templateCode": "Enter template code" "templateCode": "Enter template code"
}, },

View File

@ -39,7 +39,6 @@
"editSubscription": "Edit Subscription", "editSubscription": "Edit Subscription",
"editUser": "Edit User", "editUser": "Edit User",
"email": "Email", "email": "Email",
"emailNotifications": "Email Notifications",
"enable": "Enable", "enable": "Enable",
"expireTime": "Expire Time", "expireTime": "Expire Time",
"expiredAt": "Expired At", "expiredAt": "Expired At",
@ -82,7 +81,6 @@
"subscriptionName": "Subscription Name", "subscriptionName": "Subscription Name",
"subscriptionNotifications": "Subscription Notifications", "subscriptionNotifications": "Subscription Notifications",
"success": "Success", "success": "Success",
"telegramNotifications": "Telegram Notifications",
"telephone": "Phone Number", "telephone": "Phone Number",
"telephonePlaceholder": "Enter phone number", "telephonePlaceholder": "Enter phone number",
"time": "Time", "time": "Time",

View File

@ -58,5 +58,18 @@
"turnstileSecretDescription": "Clave secreta de Turnstile proporcionada por Cloudflare", "turnstileSecretDescription": "Clave secreta de Turnstile proporcionada por Cloudflare",
"turnstileSiteKeyDescription": "Clave del sitio de Turnstile proporcionada por Cloudflare", "turnstileSiteKeyDescription": "Clave del sitio de Turnstile proporcionada por Cloudflare",
"verifySettings": "Configuración de Verificación" "verifySettings": "Configuración de Verificación"
},
"verify-code": {
"dailyLimit": "Límite Diario",
"dailyLimitDescription": "Número máximo de códigos de verificación que se pueden enviar por día",
"expireTime": "Tiempo de Expiración",
"expireTimeDescription": "Tiempo de expiración del código de verificación (minutos)",
"interval": "Intervalo de Envío",
"intervalDescription": "Intervalo mínimo entre el envío de códigos de verificación (segundos)",
"minute": "minutos",
"saveSuccess": "Guardado Exitoso",
"second": "segundos",
"times": "veces",
"verifyCodeSettings": "Configuración del Código de Verificación"
} }
} }

View File

@ -4,18 +4,9 @@
"enable": "Habilitar", "enable": "Habilitar",
"enableTip": "Después de habilitar, se activarán las funciones de registro, inicio de sesión, vinculación y desvinculación del teléfono móvil", "enableTip": "Después de habilitar, se activarán las funciones de registro, inicio de sesión, vinculación y desvinculación del teléfono móvil",
"endpointLabel": "Punto final", "endpointLabel": "Punto final",
"expireTime": "Tiempo de Expiración",
"expireTimeTip": "Periodo de validez del código de verificación por SMS (segundos)",
"interval": "Intervalo",
"intervalTip": "Intervalo de envío del código de verificación por SMS para el mismo número de teléfono (segundos), 0 significa sin límite",
"limit": "Límite Diario",
"limitTip": "Límite diario de envío de códigos de verificación por SMS para el mismo número de teléfono, 0 significa sin límite",
"logs": "Registros", "logs": "Registros",
"phoneNumberLabel": "Número de Teléfono", "phoneNumberLabel": "Número de Teléfono",
"placeholders": { "placeholders": {
"expireTime": "Ingrese el tiempo de expiración, el valor predeterminado es 300",
"interval": "Ingrese el tiempo de intervalo, el valor predeterminado es 60",
"limit": "Ingrese el límite diario, el valor predeterminado es 20",
"template": "Su código de verificación es {code}, válido por 5 minutos", "template": "Su código de verificación es {code}, válido por 5 minutos",
"templateCode": "Ingrese el código de la plantilla" "templateCode": "Ingrese el código de la plantilla"
}, },

View File

@ -39,7 +39,6 @@
"editSubscription": "Editar suscripción", "editSubscription": "Editar suscripción",
"editUser": "Editar usuario", "editUser": "Editar usuario",
"email": "correo electrónico", "email": "correo electrónico",
"emailNotifications": "Notificaciones por correo electrónico",
"enable": "Habilitar", "enable": "Habilitar",
"expireTime": "Tiempo de Expiración", "expireTime": "Tiempo de Expiración",
"expiredAt": "Fecha de vencimiento", "expiredAt": "Fecha de vencimiento",
@ -82,7 +81,6 @@
"subscriptionName": "Nombre de la Suscripción", "subscriptionName": "Nombre de la Suscripción",
"subscriptionNotifications": "Notificaciones de suscripción", "subscriptionNotifications": "Notificaciones de suscripción",
"success": "Éxito", "success": "Éxito",
"telegramNotifications": "Notificaciones de Telegram",
"telephone": "Número de Teléfono", "telephone": "Número de Teléfono",
"telephonePlaceholder": "Ingrese número de teléfono", "telephonePlaceholder": "Ingrese número de teléfono",
"time": "Hora", "time": "Hora",

View File

@ -58,5 +58,18 @@
"turnstileSecretDescription": "Clave secreta de Turnstile proporcionada por Cloudflare", "turnstileSecretDescription": "Clave secreta de Turnstile proporcionada por Cloudflare",
"turnstileSiteKeyDescription": "Clave del sitio de Turnstile proporcionada por Cloudflare", "turnstileSiteKeyDescription": "Clave del sitio de Turnstile proporcionada por Cloudflare",
"verifySettings": "Configuración de Verificación" "verifySettings": "Configuración de Verificación"
},
"verify-code": {
"dailyLimit": "Límite Diario",
"dailyLimitDescription": "Número máximo de códigos de verificación que se pueden enviar por día",
"expireTime": "Tiempo de Expiración",
"expireTimeDescription": "Tiempo de expiración del código de verificación (minutos)",
"interval": "Intervalo de Envío",
"intervalDescription": "Intervalo mínimo entre el envío de códigos de verificación (segundos)",
"minute": "minutos",
"saveSuccess": "Guardado Exitoso",
"second": "segundos",
"times": "veces",
"verifyCodeSettings": "Configuración del Código de Verificación"
} }
} }

View File

@ -4,18 +4,9 @@
"enable": "Habilitar", "enable": "Habilitar",
"enableTip": "Después de habilitar, se activarán las funciones de registro, inicio de sesión, vinculación y desvinculación del teléfono móvil", "enableTip": "Después de habilitar, se activarán las funciones de registro, inicio de sesión, vinculación y desvinculación del teléfono móvil",
"endpointLabel": "Punto final", "endpointLabel": "Punto final",
"expireTime": "Tiempo de Expiración",
"expireTimeTip": "Periodo de validez del código de verificación por SMS (segundos)",
"interval": "Intervalo",
"intervalTip": "Intervalo de envío del código de verificación por SMS para el mismo número de teléfono (segundos), 0 significa sin límite",
"limit": "Límite Diario",
"limitTip": "Límite diario de envío de códigos de verificación por SMS para el mismo número de teléfono, 0 significa sin límite",
"logs": "Registros", "logs": "Registros",
"phoneNumberLabel": "Número de Teléfono", "phoneNumberLabel": "Número de Teléfono",
"placeholders": { "placeholders": {
"expireTime": "Ingrese el tiempo de expiración, el valor predeterminado es 300",
"interval": "Ingrese el tiempo de intervalo, el valor predeterminado es 60",
"limit": "Ingrese el límite diario, el valor predeterminado es 20",
"template": "Su código de verificación es {code}, válido por 5 minutos", "template": "Su código de verificación es {code}, válido por 5 minutos",
"templateCode": "Ingrese el código de la plantilla" "templateCode": "Ingrese el código de la plantilla"
}, },

View File

@ -39,7 +39,6 @@
"editSubscription": "Editar Suscripción", "editSubscription": "Editar Suscripción",
"editUser": "Editar usuario", "editUser": "Editar usuario",
"email": "correo electrónico", "email": "correo electrónico",
"emailNotifications": "Notificaciones por Correo Electrónico",
"enable": "Habilitar", "enable": "Habilitar",
"expireTime": "Tiempo de Expiración", "expireTime": "Tiempo de Expiración",
"expiredAt": "Fecha de vencimiento", "expiredAt": "Fecha de vencimiento",
@ -82,7 +81,6 @@
"subscriptionName": "Nombre de la Suscripción", "subscriptionName": "Nombre de la Suscripción",
"subscriptionNotifications": "Notificaciones de Suscripción", "subscriptionNotifications": "Notificaciones de Suscripción",
"success": "Éxito", "success": "Éxito",
"telegramNotifications": "Notificaciones de Telegram",
"telephone": "Número de Teléfono", "telephone": "Número de Teléfono",
"telephonePlaceholder": "Ingrese número de teléfono", "telephonePlaceholder": "Ingrese número de teléfono",
"time": "Hora", "time": "Hora",

View File

@ -58,5 +58,18 @@
"turnstileSecretDescription": "کلید مخفی ترنستایل ارائه شده توسط Cloudflare", "turnstileSecretDescription": "کلید مخفی ترنستایل ارائه شده توسط Cloudflare",
"turnstileSiteKeyDescription": "کلید سایت ترنستایل ارائه شده توسط Cloudflare", "turnstileSiteKeyDescription": "کلید سایت ترنستایل ارائه شده توسط Cloudflare",
"verifySettings": "تنظیمات تأیید" "verifySettings": "تنظیمات تأیید"
},
"verify-code": {
"dailyLimit": "حداکثر روزانه",
"dailyLimitDescription": "حداکثر تعداد کدهای تأیید که می‌توان در روز ارسال کرد",
"expireTime": "زمان انقضا",
"expireTimeDescription": "زمان انقضای کد تأیید (دقیقه)",
"interval": "فاصله ارسال",
"intervalDescription": "حداقل فاصله بین ارسال کدهای تأیید (ثانیه)",
"minute": "دقیقه",
"saveSuccess": "ذخیره با موفقیت",
"second": "ثانیه",
"times": "بار",
"verifyCodeSettings": "تنظیمات کد تأیید"
} }
} }

View File

@ -4,18 +4,9 @@
"enable": "فعال کردن", "enable": "فعال کردن",
"enableTip": "پس از فعال‌سازی، عملکردهای ثبت‌نام، ورود، اتصال و قطع اتصال تلفن همراه فعال خواهند شد", "enableTip": "پس از فعال‌سازی، عملکردهای ثبت‌نام، ورود، اتصال و قطع اتصال تلفن همراه فعال خواهند شد",
"endpointLabel": "نقطه پایانی", "endpointLabel": "نقطه پایانی",
"expireTime": "زمان انقضا",
"expireTimeTip": "مدت اعتبار کد تأیید پیامکی (ثانیه)",
"interval": "فاصله زمانی",
"intervalTip": "فاصله زمانی ارسال کد تأیید پیامکی برای همان شماره تلفن (ثانیه)، 0 به معنای بدون محدودیت است",
"limit": "محدودیت روزانه",
"limitTip": "محدودیت ارسال کد تأییدیه پیامکی روزانه برای همان شماره تلفن، ۰ به معنای بدون محدودیت است",
"logs": "لاگ‌ها", "logs": "لاگ‌ها",
"phoneNumberLabel": "شماره تلفن", "phoneNumberLabel": "شماره تلفن",
"placeholders": { "placeholders": {
"expireTime": "زمان انقضا را وارد کنید، پیش‌فرض ۳۰۰ است",
"interval": "زمان فاصله را وارد کنید، پیش‌فرض ۶۰ است",
"limit": "محدودیت روزانه را وارد کنید، پیش‌فرض ۲۰ است",
"template": "کد تأیید شما {code} است و به مدت ۵ دقیقه معتبر است", "template": "کد تأیید شما {code} است و به مدت ۵ دقیقه معتبر است",
"templateCode": "کد قالب را وارد کنید" "templateCode": "کد قالب را وارد کنید"
}, },

View File

@ -39,7 +39,6 @@
"editSubscription": "ویرایش اشتراک", "editSubscription": "ویرایش اشتراک",
"editUser": "ویرایش کاربر", "editUser": "ویرایش کاربر",
"email": "ایمیل", "email": "ایمیل",
"emailNotifications": "اعلان‌های ایمیل",
"enable": "فعال کردن", "enable": "فعال کردن",
"expireTime": "زمان انقضا", "expireTime": "زمان انقضا",
"expiredAt": "منقضی شده در", "expiredAt": "منقضی شده در",
@ -82,7 +81,6 @@
"subscriptionName": "نام اشتراک", "subscriptionName": "نام اشتراک",
"subscriptionNotifications": "اعلان‌های اشتراک", "subscriptionNotifications": "اعلان‌های اشتراک",
"success": "موفقیت", "success": "موفقیت",
"telegramNotifications": "اعلان‌های تلگرام",
"telephone": "شماره تلفن", "telephone": "شماره تلفن",
"telephonePlaceholder": "شماره تلفن را وارد کنید", "telephonePlaceholder": "شماره تلفن را وارد کنید",
"time": "زمان", "time": "زمان",

View File

@ -58,5 +58,18 @@
"turnstileSecretDescription": "Turnstile-salaisavain, jonka Cloudflare on toimittanut", "turnstileSecretDescription": "Turnstile-salaisavain, jonka Cloudflare on toimittanut",
"turnstileSiteKeyDescription": "Turnstile-sivuston avain, jonka Cloudflare on toimittanut", "turnstileSiteKeyDescription": "Turnstile-sivuston avain, jonka Cloudflare on toimittanut",
"verifySettings": "Vahvistusasetukset" "verifySettings": "Vahvistusasetukset"
},
"verify-code": {
"dailyLimit": "Päivittäinen raja",
"dailyLimitDescription": "Suurin määrä vahvistuskoodien lähettämistä päivässä",
"expireTime": "Voimassaoloaika",
"expireTimeDescription": "Vahvistuskoodin voimassaoloaika (minuutteina)",
"interval": "Lähetysväli",
"intervalDescription": "Minimi väli vahvistuskoodien lähettämisen välillä (sekunteina)",
"minute": "minuuttia",
"saveSuccess": "Tallennus onnistui",
"second": "sekuntia",
"times": "kertaa",
"verifyCodeSettings": "Vahvistuskoodin asetukset"
} }
} }

View File

@ -4,18 +4,9 @@
"enable": "Ota käyttöön", "enable": "Ota käyttöön",
"enableTip": "Kun otat tämän käyttöön, matkapuhelimen rekisteröinti-, kirjautumis-, sitomis- ja purkutoiminnot otetaan käyttöön", "enableTip": "Kun otat tämän käyttöön, matkapuhelimen rekisteröinti-, kirjautumis-, sitomis- ja purkutoiminnot otetaan käyttöön",
"endpointLabel": "Päätepiste", "endpointLabel": "Päätepiste",
"expireTime": "Vanhentumisaika",
"expireTimeTip": "Tekstiviestivarmennuskoodin voimassaoloaika (sekunteina)",
"interval": "Aikaväli",
"intervalTip": "Saman puhelinnumeron SMS-varmistuskoodin lähetysväli (sekunteina), 0 tarkoittaa ei rajoitusta",
"limit": "Päivittäinen raja",
"limitTip": "Päivittäinen tekstiviestivarmistuskoodin lähetysraja samalle puhelinnumerolle, 0 tarkoittaa ei rajoitusta",
"logs": "Lokit", "logs": "Lokit",
"phoneNumberLabel": "Puhelinnumero", "phoneNumberLabel": "Puhelinnumero",
"placeholders": { "placeholders": {
"expireTime": "Syötä vanhentumisaika, oletus on 300",
"interval": "Anna aikaväli, oletus on 60",
"limit": "Anna päivittäinen raja, oletus on 20",
"template": "Vahvistuskoodisi on {code}, voimassa 5 minuuttia", "template": "Vahvistuskoodisi on {code}, voimassa 5 minuuttia",
"templateCode": "Anna mallikoodi" "templateCode": "Anna mallikoodi"
}, },

View File

@ -39,7 +39,6 @@
"editSubscription": "Muokkaa tilausta", "editSubscription": "Muokkaa tilausta",
"editUser": "Muokkaa käyttäjää", "editUser": "Muokkaa käyttäjää",
"email": "sähköposti", "email": "sähköposti",
"emailNotifications": "Sähköposti-ilmoitukset",
"enable": "Ota käyttöön", "enable": "Ota käyttöön",
"expireTime": "Vanhentumisaika", "expireTime": "Vanhentumisaika",
"expiredAt": "Vanhentunut", "expiredAt": "Vanhentunut",
@ -82,7 +81,6 @@
"subscriptionName": "Tilauksen nimi", "subscriptionName": "Tilauksen nimi",
"subscriptionNotifications": "Tilausilmoitukset", "subscriptionNotifications": "Tilausilmoitukset",
"success": "Onnistuminen", "success": "Onnistuminen",
"telegramNotifications": "Telegram-ilmoitukset",
"telephone": "Puhelinnumero", "telephone": "Puhelinnumero",
"telephonePlaceholder": "Syötä puhelinnumero", "telephonePlaceholder": "Syötä puhelinnumero",
"time": "Aika", "time": "Aika",

View File

@ -58,5 +58,18 @@
"turnstileSecretDescription": "Clé secrète de tourniquet fournie par Cloudflare", "turnstileSecretDescription": "Clé secrète de tourniquet fournie par Cloudflare",
"turnstileSiteKeyDescription": "Clé de site de tourniquet fournie par Cloudflare", "turnstileSiteKeyDescription": "Clé de site de tourniquet fournie par Cloudflare",
"verifySettings": "Paramètres de vérification" "verifySettings": "Paramètres de vérification"
},
"verify-code": {
"dailyLimit": "Limite quotidienne",
"dailyLimitDescription": "Nombre maximum de codes de vérification pouvant être envoyés par jour",
"expireTime": "Temps d'expiration",
"expireTimeDescription": "Temps d'expiration du code de vérification (minutes)",
"interval": "Intervalle d'envoi",
"intervalDescription": "Intervalle minimum entre l'envoi des codes de vérification (secondes)",
"minute": "minutes",
"saveSuccess": "Enregistrement réussi",
"second": "secondes",
"times": "fois",
"verifyCodeSettings": "Paramètres du code de vérification"
} }
} }

View File

@ -4,18 +4,9 @@
"enable": "Activer", "enable": "Activer",
"enableTip": "Après activation, les fonctions d'enregistrement, de connexion, de liaison et de déliaison par téléphone mobile seront activées", "enableTip": "Après activation, les fonctions d'enregistrement, de connexion, de liaison et de déliaison par téléphone mobile seront activées",
"endpointLabel": "Point de terminaison", "endpointLabel": "Point de terminaison",
"expireTime": "Date d'expiration",
"expireTimeTip": "Période de validité du code de vérification par SMS (secondes)",
"interval": "Intervalle",
"intervalTip": "Intervalle d'envoi du code de vérification par SMS pour le même numéro de téléphone (secondes), 0 signifie aucune limite",
"limit": "Limite quotidienne",
"limitTip": "Limite quotidienne d'envoi de code de vérification par SMS pour le même numéro de téléphone, 0 signifie aucune limite",
"logs": "Journaux", "logs": "Journaux",
"phoneNumberLabel": "Numéro de téléphone", "phoneNumberLabel": "Numéro de téléphone",
"placeholders": { "placeholders": {
"expireTime": "Entrez le temps d'expiration, par défaut 300",
"interval": "Entrez le temps d'intervalle, par défaut 60",
"limit": "Entrez la limite quotidienne, par défaut 20",
"template": "Votre code de vérification est {code}, valable pendant 5 minutes", "template": "Votre code de vérification est {code}, valable pendant 5 minutes",
"templateCode": "Entrez le code du modèle" "templateCode": "Entrez le code du modèle"
}, },

View File

@ -39,7 +39,6 @@
"editSubscription": "Modifier l'abonnement", "editSubscription": "Modifier l'abonnement",
"editUser": "Modifier l'utilisateur", "editUser": "Modifier l'utilisateur",
"email": "e-mail", "email": "e-mail",
"emailNotifications": "Notifications par e-mail",
"enable": "Activer", "enable": "Activer",
"expireTime": "Date d'expiration", "expireTime": "Date d'expiration",
"expiredAt": "Expiré le", "expiredAt": "Expiré le",
@ -82,7 +81,6 @@
"subscriptionName": "Nom de l'abonnement", "subscriptionName": "Nom de l'abonnement",
"subscriptionNotifications": "Notifications d'abonnement", "subscriptionNotifications": "Notifications d'abonnement",
"success": "Succès", "success": "Succès",
"telegramNotifications": "Notifications Telegram",
"telephone": "Numéro de téléphone", "telephone": "Numéro de téléphone",
"telephonePlaceholder": "Entrez le numéro de téléphone", "telephonePlaceholder": "Entrez le numéro de téléphone",
"time": "Temps", "time": "Temps",

View File

@ -58,5 +58,18 @@
"turnstileSecretDescription": "क्लाउडफ्लेयर द्वारा प्रदान की गई टर्नस्टाइल गुप्त कुंजी", "turnstileSecretDescription": "क्लाउडफ्लेयर द्वारा प्रदान की गई टर्नस्टाइल गुप्त कुंजी",
"turnstileSiteKeyDescription": "क्लाउडफ्लेयर द्वारा प्रदान की गई टर्नस्टाइल साइट कुंजी", "turnstileSiteKeyDescription": "क्लाउडफ्लेयर द्वारा प्रदान की गई टर्नस्टाइल साइट कुंजी",
"verifySettings": "सत्यापन सेटिंग्स" "verifySettings": "सत्यापन सेटिंग्स"
},
"verify-code": {
"dailyLimit": "दैनिक सीमा",
"dailyLimitDescription": "प्रति दिन भेजे जा सकने वाले अधिकतम सत्यापन कोड की संख्या",
"expireTime": "समाप्ति समय",
"expireTimeDescription": "सत्यापन कोड की समाप्ति का समय (मिनट)",
"interval": "भेजने का अंतराल",
"intervalDescription": "सत्यापन कोड भेजने के बीच का न्यूनतम अंतराल (सेकंड)",
"minute": "मिनट",
"saveSuccess": "सफलतापूर्वक सहेजा गया",
"second": "सेकंड",
"times": "बार",
"verifyCodeSettings": "सत्यापन कोड सेटिंग्स"
} }
} }

View File

@ -4,18 +4,9 @@
"enable": "सक्षम करें", "enable": "सक्षम करें",
"enableTip": "सक्षम करने के बाद, मोबाइल फोन पंजीकरण, लॉगिन, बाइंडिंग, और अनबाइंडिंग कार्यक्षमताएँ सक्षम हो जाएँगी", "enableTip": "सक्षम करने के बाद, मोबाइल फोन पंजीकरण, लॉगिन, बाइंडिंग, और अनबाइंडिंग कार्यक्षमताएँ सक्षम हो जाएँगी",
"endpointLabel": "अंतिम बिंदु", "endpointLabel": "अंतिम बिंदु",
"expireTime": "समाप्ति समय",
"expireTimeTip": "एसएमएस सत्यापन कोड की वैधता अवधि (सेकंड)",
"interval": "अंतराल",
"intervalTip": "उसी फोन नंबर के लिए एसएमएस सत्यापन कोड भेजने का अंतराल (सेकंड में), 0 का मतलब है कोई सीमा नहीं",
"limit": "दैनिक सीमा",
"limitTip": "उसी फोन नंबर के लिए दैनिक एसएमएस सत्यापन कोड भेजने की सीमा, 0 का मतलब कोई सीमा नहीं है",
"logs": "लॉग्स", "logs": "लॉग्स",
"phoneNumberLabel": "फोन नंबर", "phoneNumberLabel": "फोन नंबर",
"placeholders": { "placeholders": {
"expireTime": "समाप्ति समय दर्ज करें, डिफ़ॉल्ट 300 है",
"interval": "अंतराल समय दर्ज करें, डिफ़ॉल्ट 60 है",
"limit": "दैनिक सीमा दर्ज करें, डिफ़ॉल्ट 20 है",
"template": "आपका सत्यापन कोड {code} है, 5 मिनट के लिए मान्य", "template": "आपका सत्यापन कोड {code} है, 5 मिनट के लिए मान्य",
"templateCode": "टेम्पलेट कोड दर्ज करें" "templateCode": "टेम्पलेट कोड दर्ज करें"
}, },

View File

@ -39,7 +39,6 @@
"editSubscription": "सदस्यता संपादित करें", "editSubscription": "सदस्यता संपादित करें",
"editUser": "उपयोगकर्ता संपादित करें", "editUser": "उपयोगकर्ता संपादित करें",
"email": "ईमेल", "email": "ईमेल",
"emailNotifications": "ईमेल सूचनाएं",
"enable": "सक्षम करें", "enable": "सक्षम करें",
"expireTime": "समाप्ति समय", "expireTime": "समाप्ति समय",
"expiredAt": "समाप्ति तिथि", "expiredAt": "समाप्ति तिथि",
@ -82,7 +81,6 @@
"subscriptionName": "सदस्यता नाम", "subscriptionName": "सदस्यता नाम",
"subscriptionNotifications": "सदस्यता सूचनाएं", "subscriptionNotifications": "सदस्यता सूचनाएं",
"success": "सफलता", "success": "सफलता",
"telegramNotifications": "टेलीग्राम सूचनाएं",
"telephone": "फ़ोन नंबर", "telephone": "फ़ोन नंबर",
"telephonePlaceholder": "फ़ोन नंबर दर्ज करें", "telephonePlaceholder": "फ़ोन नंबर दर्ज करें",
"time": "समय", "time": "समय",

View File

@ -58,5 +58,18 @@
"turnstileSecretDescription": "A Cloudflare által biztosított forgókapu titkos kulcs", "turnstileSecretDescription": "A Cloudflare által biztosított forgókapu titkos kulcs",
"turnstileSiteKeyDescription": "A Cloudflare által biztosított forgókapu webhely kulcs", "turnstileSiteKeyDescription": "A Cloudflare által biztosított forgókapu webhely kulcs",
"verifySettings": "Ellenőrzési beállítások" "verifySettings": "Ellenőrzési beállítások"
},
"verify-code": {
"dailyLimit": "Napi Korlát",
"dailyLimitDescription": "A naponta küldhető ellenőrző kódok maximális száma",
"expireTime": "Lejárati Idő",
"expireTimeDescription": "Az ellenőrző kód lejárati ideje (perc)",
"interval": "Küldési Intervallum",
"intervalDescription": "Minimum intervallum az ellenőrző kódok küldése között (másodperc)",
"minute": "perc",
"saveSuccess": "Mentés Sikeres",
"second": "másodperc",
"times": "alkalom",
"verifyCodeSettings": "Ellenőrző Kód Beállítások"
} }
} }

View File

@ -4,18 +4,9 @@
"enable": "Engedélyez", "enable": "Engedélyez",
"enableTip": "A bekapcsolás után a mobiltelefon regisztráció, bejelentkezés, kötés és oldás funkciók elérhetővé válnak", "enableTip": "A bekapcsolás után a mobiltelefon regisztráció, bejelentkezés, kötés és oldás funkciók elérhetővé válnak",
"endpointLabel": "Végpont", "endpointLabel": "Végpont",
"expireTime": "Lejárati idő",
"expireTimeTip": "Az SMS ellenőrző kód érvényességi ideje (másodpercben)",
"interval": "Intervallum",
"intervalTip": "SMS ellenőrző kód küldési intervalluma ugyanarra a telefonszámra (másodpercben), 0 azt jelenti, hogy nincs korlátozás",
"limit": "Napi limit",
"limitTip": "Napi SMS ellenőrző kód küldési limit ugyanarra a telefonszámra, 0 azt jelenti, hogy nincs korlátozás",
"logs": "Naplók", "logs": "Naplók",
"phoneNumberLabel": "Telefonszám", "phoneNumberLabel": "Telefonszám",
"placeholders": { "placeholders": {
"expireTime": "Adja meg a lejárati időt, alapértelmezett érték: 300",
"interval": "Adja meg az intervallum időt, alapértelmezett 60",
"limit": "Adja meg a napi limitet, alapértelmezett 20",
"template": "Az Ön ellenőrző kódja {code}, érvényes 5 percig", "template": "Az Ön ellenőrző kódja {code}, érvényes 5 percig",
"templateCode": "Adja meg a sablonkódot" "templateCode": "Adja meg a sablonkódot"
}, },

View File

@ -39,7 +39,6 @@
"editSubscription": "Előfizetés szerkesztése", "editSubscription": "Előfizetés szerkesztése",
"editUser": "Felhasználó szerkesztése", "editUser": "Felhasználó szerkesztése",
"email": "e-mail", "email": "e-mail",
"emailNotifications": "Email értesítések",
"enable": "Engedélyezés", "enable": "Engedélyezés",
"expireTime": "Lejárati idő", "expireTime": "Lejárati idő",
"expiredAt": "Lejárati dátum", "expiredAt": "Lejárati dátum",
@ -82,7 +81,6 @@
"subscriptionName": "Előfizetés neve", "subscriptionName": "Előfizetés neve",
"subscriptionNotifications": "Előfizetési értesítések", "subscriptionNotifications": "Előfizetési értesítések",
"success": "Siker", "success": "Siker",
"telegramNotifications": "Telegram értesítések",
"telephone": "Telefonszám", "telephone": "Telefonszám",
"telephonePlaceholder": "Adja meg a telefonszámot", "telephonePlaceholder": "Adja meg a telefonszámot",
"time": "Idő", "time": "Idő",

View File

@ -58,5 +58,18 @@
"turnstileSecretDescription": "Cloudflareが提供するターンスタイル秘密鍵", "turnstileSecretDescription": "Cloudflareが提供するターンスタイル秘密鍵",
"turnstileSiteKeyDescription": "Cloudflareが提供するターンスタイルサイトキー", "turnstileSiteKeyDescription": "Cloudflareが提供するターンスタイルサイトキー",
"verifySettings": "確認設定" "verifySettings": "確認設定"
},
"verify-code": {
"dailyLimit": "1日の制限",
"dailyLimitDescription": "1日に送信できる認証コードの最大数",
"expireTime": "有効期限",
"expireTimeDescription": "認証コードの有効期限(分)",
"interval": "送信間隔",
"intervalDescription": "認証コード送信の最小間隔(秒)",
"minute": "分",
"saveSuccess": "保存成功",
"second": "秒",
"times": "回",
"verifyCodeSettings": "認証コード設定"
} }
} }

View File

@ -4,18 +4,9 @@
"enable": "有効にする", "enable": "有効にする",
"enableTip": "有効にすると、携帯電話の登録、ログイン、バインド、アンバインド機能が有効になります", "enableTip": "有効にすると、携帯電話の登録、ログイン、バインド、アンバインド機能が有効になります",
"endpointLabel": "エンドポイント", "endpointLabel": "エンドポイント",
"expireTime": "有効期限",
"expireTimeTip": "SMS認証コードの有効期間",
"interval": "間隔",
"intervalTip": "同じ電話番号へのSMS認証コード送信間隔、0は制限なしを意味します",
"limit": "1日の制限",
"limitTip": "同一の電話番号に対する1日のSMS認証コード送信制限。0は制限なしを意味します。",
"logs": "ログ", "logs": "ログ",
"phoneNumberLabel": "電話番号", "phoneNumberLabel": "電話番号",
"placeholders": { "placeholders": {
"expireTime": "有効期限を入力してください。デフォルトは300です",
"interval": "間隔時間を入力してください。デフォルトは60です",
"limit": "1日の制限を入力してください。デフォルトは20です",
"template": "あなたの認証コードは{code}です。5分間有効です", "template": "あなたの認証コードは{code}です。5分間有効です",
"templateCode": "テンプレートコードを入力してください" "templateCode": "テンプレートコードを入力してください"
}, },

View File

@ -39,7 +39,6 @@
"editSubscription": "サブスクリプションを編集", "editSubscription": "サブスクリプションを編集",
"editUser": "ユーザー編集", "editUser": "ユーザー編集",
"email": "メールアドレス", "email": "メールアドレス",
"emailNotifications": "メール通知",
"enable": "有効", "enable": "有効",
"expireTime": "有効期限", "expireTime": "有効期限",
"expiredAt": "有効期限", "expiredAt": "有効期限",
@ -82,7 +81,6 @@
"subscriptionName": "サブスクリプション名", "subscriptionName": "サブスクリプション名",
"subscriptionNotifications": "サブスクリプション通知", "subscriptionNotifications": "サブスクリプション通知",
"success": "成功", "success": "成功",
"telegramNotifications": "Telegram通知",
"telephone": "電話番号", "telephone": "電話番号",
"telephonePlaceholder": "電話番号を入力してください", "telephonePlaceholder": "電話番号を入力してください",
"time": "時間", "time": "時間",

View File

@ -58,5 +58,18 @@
"turnstileSecretDescription": "Cloudflare에서 제공하는 턴스타일 비밀 키", "turnstileSecretDescription": "Cloudflare에서 제공하는 턴스타일 비밀 키",
"turnstileSiteKeyDescription": "Cloudflare에서 제공하는 턴스타일 사이트 키", "turnstileSiteKeyDescription": "Cloudflare에서 제공하는 턴스타일 사이트 키",
"verifySettings": "검증 설정" "verifySettings": "검증 설정"
},
"verify-code": {
"dailyLimit": "일일 한도",
"dailyLimitDescription": "하루에 보낼 수 있는 인증 코드의 최대 수",
"expireTime": "만료 시간",
"expireTimeDescription": "인증 코드 만료 시간(분)",
"interval": "전송 간격",
"intervalDescription": "인증 코드 전송 간의 최소 간격(초)",
"minute": "분",
"saveSuccess": "저장 성공",
"second": "초",
"times": "회",
"verifyCodeSettings": "인증 코드 설정"
} }
} }

View File

@ -4,18 +4,9 @@
"enable": "활성화", "enable": "활성화",
"enableTip": "활성화 후, 휴대폰 등록, 로그인, 연결 및 연결 해제 기능이 활성화됩니다", "enableTip": "활성화 후, 휴대폰 등록, 로그인, 연결 및 연결 해제 기능이 활성화됩니다",
"endpointLabel": "엔드포인트", "endpointLabel": "엔드포인트",
"expireTime": "만료 시간",
"expireTimeTip": "SMS 인증 코드 유효 기간 (초)",
"interval": "간격",
"intervalTip": "같은 전화번호로 SMS 인증 코드를 보내는 간격(초), 0은 제한 없음",
"limit": "일일 한도",
"limitTip": "동일한 전화번호에 대한 일일 SMS 인증 코드 전송 제한, 0은 제한 없음",
"logs": "로그", "logs": "로그",
"phoneNumberLabel": "전화번호", "phoneNumberLabel": "전화번호",
"placeholders": { "placeholders": {
"expireTime": "만료 시간을 입력하세요. 기본값은 300입니다",
"interval": "간격 시간을 입력하세요, 기본값은 60입니다",
"limit": "일일 제한을 입력하세요, 기본값은 20입니다",
"template": "귀하의 인증 코드는 {code}이며, 5분 동안 유효합니다", "template": "귀하의 인증 코드는 {code}이며, 5분 동안 유효합니다",
"templateCode": "템플릿 코드를 입력하세요" "templateCode": "템플릿 코드를 입력하세요"
}, },

View File

@ -39,7 +39,6 @@
"editSubscription": "구독 수정", "editSubscription": "구독 수정",
"editUser": "사용자 편집", "editUser": "사용자 편집",
"email": "이메일", "email": "이메일",
"emailNotifications": "이메일 알림",
"enable": "사용", "enable": "사용",
"expireTime": "만료 시간", "expireTime": "만료 시간",
"expiredAt": "만료일", "expiredAt": "만료일",
@ -82,7 +81,6 @@
"subscriptionName": "구독 이름", "subscriptionName": "구독 이름",
"subscriptionNotifications": "구독 알림", "subscriptionNotifications": "구독 알림",
"success": "성공", "success": "성공",
"telegramNotifications": "텔레그램 알림",
"telephone": "전화번호", "telephone": "전화번호",
"telephonePlaceholder": "전화번호 입력", "telephonePlaceholder": "전화번호 입력",
"time": "시간", "time": "시간",

View File

@ -58,5 +58,18 @@
"turnstileSecretDescription": "Turnstile hemmelig nøkkel levert av Cloudflare", "turnstileSecretDescription": "Turnstile hemmelig nøkkel levert av Cloudflare",
"turnstileSiteKeyDescription": "Turnstile nettsted nøkkel levert av Cloudflare", "turnstileSiteKeyDescription": "Turnstile nettsted nøkkel levert av Cloudflare",
"verifySettings": "Verifiseringsinnstillinger" "verifySettings": "Verifiseringsinnstillinger"
},
"verify-code": {
"dailyLimit": "Dagsgrense",
"dailyLimitDescription": "Maksimalt antall bekreftelseskoder som kan sendes per dag",
"expireTime": "Utløpstid",
"expireTimeDescription": "Utløpstid for bekreftelseskode (minutter)",
"interval": "Sendingsintervall",
"intervalDescription": "Minimum intervall mellom sending av bekreftelseskoder (sekunder)",
"minute": "minutter",
"saveSuccess": "Lagring vellykket",
"second": "sekunder",
"times": "ganger",
"verifyCodeSettings": "Innstillinger for bekreftelseskode"
} }
} }

View File

@ -4,18 +4,9 @@
"enable": "Aktiver", "enable": "Aktiver",
"enableTip": "Etter aktivering vil funksjonene for registrering, innlogging, binding og frakobling av mobiltelefon bli aktivert", "enableTip": "Etter aktivering vil funksjonene for registrering, innlogging, binding og frakobling av mobiltelefon bli aktivert",
"endpointLabel": "Endepunkt", "endpointLabel": "Endepunkt",
"expireTime": "Utløpstid",
"expireTimeTip": "Gyldighetsperiode for SMS-bekreftelseskode (sekunder)",
"interval": "Intervall",
"intervalTip": "SMS-verifiseringskode sendingsintervall for samme telefonnummer (sekunder), 0 betyr ingen begrensning",
"limit": "Daglig grense",
"limitTip": "Daglig grense for sending av SMS-verifiseringskode til samme telefonnummer, 0 betyr ingen grense",
"logs": "Logger", "logs": "Logger",
"phoneNumberLabel": "Telefonnummer", "phoneNumberLabel": "Telefonnummer",
"placeholders": { "placeholders": {
"expireTime": "Skriv inn utløpstid, standard er 300",
"interval": "Skriv inn intervalltid, standard er 60",
"limit": "Skriv inn daglig grense, standard er 20",
"template": "Din verifiseringskode er {code}, gyldig i 5 minutter", "template": "Din verifiseringskode er {code}, gyldig i 5 minutter",
"templateCode": "Skriv inn malkode" "templateCode": "Skriv inn malkode"
}, },

View File

@ -39,7 +39,6 @@
"editSubscription": "Rediger abonnement", "editSubscription": "Rediger abonnement",
"editUser": "Rediger bruker", "editUser": "Rediger bruker",
"email": "e-post", "email": "e-post",
"emailNotifications": "E-postvarsler",
"enable": "Aktiver", "enable": "Aktiver",
"expireTime": "Utløpstid", "expireTime": "Utløpstid",
"expiredAt": "Utløpt Dato", "expiredAt": "Utløpt Dato",
@ -82,7 +81,6 @@
"subscriptionName": "Abonnementsnavn", "subscriptionName": "Abonnementsnavn",
"subscriptionNotifications": "Abonnementsvarsler", "subscriptionNotifications": "Abonnementsvarsler",
"success": "Suksess", "success": "Suksess",
"telegramNotifications": "Telegramvarsler",
"telephone": "Telefonnummer", "telephone": "Telefonnummer",
"telephonePlaceholder": "Skriv inn telefonnummer", "telephonePlaceholder": "Skriv inn telefonnummer",
"time": "Tid", "time": "Tid",

View File

@ -58,5 +58,18 @@
"turnstileSecretDescription": "Sekretny klucz bramki dostarczony przez Cloudflare", "turnstileSecretDescription": "Sekretny klucz bramki dostarczony przez Cloudflare",
"turnstileSiteKeyDescription": "Klucz witryny bramki dostarczony przez Cloudflare", "turnstileSiteKeyDescription": "Klucz witryny bramki dostarczony przez Cloudflare",
"verifySettings": "Ustawienia weryfikacji" "verifySettings": "Ustawienia weryfikacji"
},
"verify-code": {
"dailyLimit": "Limit dzienny",
"dailyLimitDescription": "Maksymalna liczba kodów weryfikacyjnych, które można wysłać dziennie",
"expireTime": "Czas wygaśnięcia",
"expireTimeDescription": "Czas wygaśnięcia kodu weryfikacyjnego (minuty)",
"interval": "Interwał wysyłania",
"intervalDescription": "Minimalny interwał między wysyłaniem kodów weryfikacyjnych (sekundy)",
"minute": "minuty",
"saveSuccess": "Zapisano pomyślnie",
"second": "sekundy",
"times": "razy",
"verifyCodeSettings": "Ustawienia kodu weryfikacyjnego"
} }
} }

View File

@ -4,18 +4,9 @@
"enable": "Włącz", "enable": "Włącz",
"enableTip": "Po włączeniu zostaną aktywowane funkcje rejestracji, logowania, wiązania i odwiązywania telefonu komórkowego", "enableTip": "Po włączeniu zostaną aktywowane funkcje rejestracji, logowania, wiązania i odwiązywania telefonu komórkowego",
"endpointLabel": "Punkt końcowy", "endpointLabel": "Punkt końcowy",
"expireTime": "Czas wygaśnięcia",
"expireTimeTip": "Okres ważności kodu weryfikacyjnego SMS (sekundy)",
"interval": "Interwał",
"intervalTip": "Interwał wysyłania kodu weryfikacyjnego SMS dla tego samego numeru telefonu (w sekundach), 0 oznacza brak ograniczeń",
"limit": "Dzienne ograniczenie",
"limitTip": "Dzienny limit wysyłania kodów weryfikacyjnych SMS dla tego samego numeru telefonu, 0 oznacza brak limitu",
"logs": "Dzienniki", "logs": "Dzienniki",
"phoneNumberLabel": "Numer telefonu", "phoneNumberLabel": "Numer telefonu",
"placeholders": { "placeholders": {
"expireTime": "Wprowadź czas wygaśnięcia, domyślnie 300",
"interval": "Wprowadź czas interwału, domyślnie 60",
"limit": "Wprowadź dzienny limit, domyślnie 20",
"template": "Twój kod weryfikacyjny to {code}, ważny przez 5 minut", "template": "Twój kod weryfikacyjny to {code}, ważny przez 5 minut",
"templateCode": "Wprowadź kod szablonu" "templateCode": "Wprowadź kod szablonu"
}, },

View File

@ -39,7 +39,6 @@
"editSubscription": "Edytuj subskrypcję", "editSubscription": "Edytuj subskrypcję",
"editUser": "Edytuj użytkownika", "editUser": "Edytuj użytkownika",
"email": "e-mail", "email": "e-mail",
"emailNotifications": "Powiadomienia e-mailowe",
"enable": "Włącz", "enable": "Włącz",
"expireTime": "Czas wygaśnięcia", "expireTime": "Czas wygaśnięcia",
"expiredAt": "Data wygaśnięcia", "expiredAt": "Data wygaśnięcia",
@ -82,7 +81,6 @@
"subscriptionName": "Nazwa subskrypcji", "subscriptionName": "Nazwa subskrypcji",
"subscriptionNotifications": "Powiadomienia o subskrypcji", "subscriptionNotifications": "Powiadomienia o subskrypcji",
"success": "Sukces", "success": "Sukces",
"telegramNotifications": "Powiadomienia Telegram",
"telephone": "Numer telefonu", "telephone": "Numer telefonu",
"telephonePlaceholder": "Wprowadź numer telefonu", "telephonePlaceholder": "Wprowadź numer telefonu",
"time": "Czas", "time": "Czas",

View File

@ -58,5 +58,18 @@
"turnstileSecretDescription": "Chave secreta do Turnstile fornecida pela Cloudflare", "turnstileSecretDescription": "Chave secreta do Turnstile fornecida pela Cloudflare",
"turnstileSiteKeyDescription": "Chave do site do Turnstile fornecida pela Cloudflare", "turnstileSiteKeyDescription": "Chave do site do Turnstile fornecida pela Cloudflare",
"verifySettings": "Configurações de Verificação" "verifySettings": "Configurações de Verificação"
},
"verify-code": {
"dailyLimit": "Limite Diário",
"dailyLimitDescription": "Número máximo de códigos de verificação que podem ser enviados por dia",
"expireTime": "Tempo de Expiração",
"expireTimeDescription": "Tempo de expiração do código de verificação (minutos)",
"interval": "Intervalo de Envio",
"intervalDescription": "Intervalo mínimo entre o envio de códigos de verificação (segundos)",
"minute": "minutos",
"saveSuccess": "Salvo com Sucesso",
"second": "segundos",
"times": "vezes",
"verifyCodeSettings": "Configurações do Código de Verificação"
} }
} }

View File

@ -4,18 +4,9 @@
"enable": "Habilitar", "enable": "Habilitar",
"enableTip": "Após a ativação, as funções de registro, login, vinculação e desvinculação de telefone celular serão ativadas", "enableTip": "Após a ativação, as funções de registro, login, vinculação e desvinculação de telefone celular serão ativadas",
"endpointLabel": "Endpoint", "endpointLabel": "Endpoint",
"expireTime": "Tempo de Expiração",
"expireTimeTip": "Período de validade do código de verificação por SMS (segundos)",
"interval": "Intervalo",
"intervalTip": "Intervalo de envio do código de verificação por SMS para o mesmo número de telefone (segundos), 0 significa sem limite",
"limit": "Limite Diário",
"limitTip": "Limite diário de envio de código de verificação por SMS para o mesmo número de telefone, 0 significa sem limite",
"logs": "Registros", "logs": "Registros",
"phoneNumberLabel": "Número de Telefone", "phoneNumberLabel": "Número de Telefone",
"placeholders": { "placeholders": {
"expireTime": "Insira o tempo de expiração, o padrão é 300",
"interval": "Insira o tempo de intervalo, o padrão é 60",
"limit": "Insira o limite diário, o padrão é 20",
"template": "Seu código de verificação é {code}, válido por 5 minutos", "template": "Seu código de verificação é {code}, válido por 5 minutos",
"templateCode": "Insira o código do modelo" "templateCode": "Insira o código do modelo"
}, },

View File

@ -39,7 +39,6 @@
"editSubscription": "Editar Assinatura", "editSubscription": "Editar Assinatura",
"editUser": "Editar Usuário", "editUser": "Editar Usuário",
"email": "e-mail", "email": "e-mail",
"emailNotifications": "Notificações por Email",
"enable": "Habilitar", "enable": "Habilitar",
"expireTime": "Tempo de Expiração", "expireTime": "Tempo de Expiração",
"expiredAt": "Expirado Em", "expiredAt": "Expirado Em",
@ -82,7 +81,6 @@
"subscriptionName": "Nome da Assinatura", "subscriptionName": "Nome da Assinatura",
"subscriptionNotifications": "Notificações de Assinatura", "subscriptionNotifications": "Notificações de Assinatura",
"success": "Sucesso", "success": "Sucesso",
"telegramNotifications": "Notificações do Telegram",
"telephone": "Número de Telefone", "telephone": "Número de Telefone",
"telephonePlaceholder": "Digite o número de telefone", "telephonePlaceholder": "Digite o número de telefone",
"time": "Hora", "time": "Hora",

View File

@ -58,5 +58,18 @@
"turnstileSecretDescription": "Cheia secretă a turnstilei furnizată de Cloudflare", "turnstileSecretDescription": "Cheia secretă a turnstilei furnizată de Cloudflare",
"turnstileSiteKeyDescription": "Cheia site-ului turnstile furnizată de Cloudflare", "turnstileSiteKeyDescription": "Cheia site-ului turnstile furnizată de Cloudflare",
"verifySettings": "Setări Verificare" "verifySettings": "Setări Verificare"
},
"verify-code": {
"dailyLimit": "Limită Zilnică",
"dailyLimitDescription": "Numărul maxim de coduri de verificare care pot fi trimise pe zi",
"expireTime": "Timp de Expirare",
"expireTimeDescription": "Timpul de expirare a codului de verificare (minute)",
"interval": "Interval de Trimitere",
"intervalDescription": "Intervalul minim între trimiterea codurilor de verificare (secunde)",
"minute": "minute",
"saveSuccess": "Salvare cu Succes",
"second": "secunde",
"times": "ori",
"verifyCodeSettings": "Setări Cod de Verificare"
} }
} }

View File

@ -4,18 +4,9 @@
"enable": "Activează", "enable": "Activează",
"enableTip": "După activare, funcțiile de înregistrare, autentificare, asociere și disociere a telefonului mobil vor fi activate", "enableTip": "După activare, funcțiile de înregistrare, autentificare, asociere și disociere a telefonului mobil vor fi activate",
"endpointLabel": "Punct de acces", "endpointLabel": "Punct de acces",
"expireTime": "Timp de expirare",
"expireTimeTip": "Perioada de valabilitate a codului de verificare prin SMS (secunde)",
"interval": "Interval",
"intervalTip": "Intervalul de trimitere a codului de verificare prin SMS pentru același număr de telefon (secunde), 0 înseamnă fără limită",
"limit": "Limită zilnică",
"limitTip": "Limita zilnică de trimitere a codului de verificare prin SMS pentru același număr de telefon, 0 înseamnă fără limită",
"logs": "Jurnale", "logs": "Jurnale",
"phoneNumberLabel": "Număr de telefon", "phoneNumberLabel": "Număr de telefon",
"placeholders": { "placeholders": {
"expireTime": "Introduceți timpul de expirare, implicit este 300",
"interval": "Introduceți timpul de interval, implicit este 60",
"limit": "Introduceți limita zilnică, implicit este 20",
"template": "Codul dumneavoastră de verificare este {code}, valabil timp de 5 minute", "template": "Codul dumneavoastră de verificare este {code}, valabil timp de 5 minute",
"templateCode": "Introduceți codul șablonului" "templateCode": "Introduceți codul șablonului"
}, },

View File

@ -39,7 +39,6 @@
"editSubscription": "Editează Abonamentul", "editSubscription": "Editează Abonamentul",
"editUser": "Editare utilizator", "editUser": "Editare utilizator",
"email": "e-mail", "email": "e-mail",
"emailNotifications": "Notificări prin email",
"enable": "Activare", "enable": "Activare",
"expireTime": "Timp de expirare", "expireTime": "Timp de expirare",
"expiredAt": "Expiră la", "expiredAt": "Expiră la",
@ -82,7 +81,6 @@
"subscriptionName": "Numele Abonamentului", "subscriptionName": "Numele Abonamentului",
"subscriptionNotifications": "Notificări de abonament", "subscriptionNotifications": "Notificări de abonament",
"success": "Succes", "success": "Succes",
"telegramNotifications": "Notificări Telegram",
"telephone": "Număr de telefon", "telephone": "Număr de telefon",
"telephonePlaceholder": "Introduceți numărul de telefon", "telephonePlaceholder": "Introduceți numărul de telefon",
"time": "Timp", "time": "Timp",

View File

@ -58,5 +58,18 @@
"turnstileSecretDescription": "Секретный ключ Turnstile, предоставленный Cloudflare", "turnstileSecretDescription": "Секретный ключ Turnstile, предоставленный Cloudflare",
"turnstileSiteKeyDescription": "Ключ сайта Turnstile, предоставленный Cloudflare", "turnstileSiteKeyDescription": "Ключ сайта Turnstile, предоставленный Cloudflare",
"verifySettings": "Настройки проверки" "verifySettings": "Настройки проверки"
},
"verify-code": {
"dailyLimit": "Ежедневный лимит",
"dailyLimitDescription": "Максимальное количество кодов подтверждения, которые можно отправить за день",
"expireTime": "Время истечения",
"expireTimeDescription": "Время истечения кода подтверждения (минуты)",
"interval": "Интервал отправки",
"intervalDescription": "Минимальный интервал между отправкой кодов подтверждения (секунды)",
"minute": "минуты",
"saveSuccess": "Сохранение успешно",
"second": "секунды",
"times": "раз",
"verifyCodeSettings": "Настройки кода подтверждения"
} }
} }

View File

@ -4,18 +4,9 @@
"enable": "Включить", "enable": "Включить",
"enableTip": "После включения будут доступны функции регистрации, входа, привязки и отвязки мобильного телефона", "enableTip": "После включения будут доступны функции регистрации, входа, привязки и отвязки мобильного телефона",
"endpointLabel": "Конечная точка", "endpointLabel": "Конечная точка",
"expireTime": "Время истечения",
"expireTimeTip": "Срок действия кода подтверждения по SMS (в секундах)",
"interval": "Интервал",
"intervalTip": "Интервал отправки SMS-кода подтверждения для одного и того же номера телефона (в секундах), 0 означает отсутствие ограничений",
"limit": "Дневной лимит",
"limitTip": "Дневной лимит отправки SMS-кодов подтверждения на один и тот же номер телефона, 0 означает отсутствие лимита",
"logs": "Журналы", "logs": "Журналы",
"phoneNumberLabel": "Номер телефона", "phoneNumberLabel": "Номер телефона",
"placeholders": { "placeholders": {
"expireTime": "Введите время истечения, по умолчанию 300",
"interval": "Введите интервал времени, по умолчанию 60",
"limit": "Введите дневной лимит, по умолчанию 20",
"template": "Ваш проверочный код: {code}, действителен в течение 5 минут", "template": "Ваш проверочный код: {code}, действителен в течение 5 минут",
"templateCode": "Введите код шаблона" "templateCode": "Введите код шаблона"
}, },

View File

@ -39,7 +39,6 @@
"editSubscription": "Редактировать подписку", "editSubscription": "Редактировать подписку",
"editUser": "Редактировать пользователя", "editUser": "Редактировать пользователя",
"email": "Электронная почта", "email": "Электронная почта",
"emailNotifications": "Уведомления по электронной почте",
"enable": "Включить", "enable": "Включить",
"expireTime": "Время истечения", "expireTime": "Время истечения",
"expiredAt": "Срок действия истек", "expiredAt": "Срок действия истек",
@ -82,7 +81,6 @@
"subscriptionName": "Название подписки", "subscriptionName": "Название подписки",
"subscriptionNotifications": "Уведомления о подписке", "subscriptionNotifications": "Уведомления о подписке",
"success": "Успех", "success": "Успех",
"telegramNotifications": "Уведомления Telegram",
"telephone": "Номер телефона", "telephone": "Номер телефона",
"telephonePlaceholder": "Введите номер телефона", "telephonePlaceholder": "Введите номер телефона",
"time": "Время", "time": "Время",

View File

@ -58,5 +58,18 @@
"turnstileSecretDescription": "รหัสลับ Turnstile ที่จัดเตรียมโดย Cloudflare", "turnstileSecretDescription": "รหัสลับ Turnstile ที่จัดเตรียมโดย Cloudflare",
"turnstileSiteKeyDescription": "รหัสไซต์ Turnstile ที่จัดเตรียมโดย Cloudflare", "turnstileSiteKeyDescription": "รหัสไซต์ Turnstile ที่จัดเตรียมโดย Cloudflare",
"verifySettings": "การตั้งค่าการตรวจสอบ" "verifySettings": "การตั้งค่าการตรวจสอบ"
},
"verify-code": {
"dailyLimit": "ขีดจำกัดรายวัน",
"dailyLimitDescription": "จำนวนสูงสุดของรหัสยืนยันที่สามารถส่งได้ต่อวัน",
"expireTime": "เวลาหมดอายุ",
"expireTimeDescription": "เวลาหมดอายุของรหัสยืนยัน (นาที)",
"interval": "ช่วงเวลาส่ง",
"intervalDescription": "ช่วงเวลาขั้นต่ำระหว่างการส่งรหัสยืนยัน (วินาที)",
"minute": "นาที",
"saveSuccess": "บันทึกสำเร็จ",
"second": "วินาที",
"times": "ครั้ง",
"verifyCodeSettings": "การตั้งค่ารหัสยืนยัน"
} }
} }

View File

@ -4,18 +4,9 @@
"enable": "เปิดใช้งาน", "enable": "เปิดใช้งาน",
"enableTip": "หลังจากเปิดใช้งานแล้ว ฟังก์ชันการลงทะเบียน การเข้าสู่ระบบ การผูก และการยกเลิกการผูกโทรศัพท์มือถือจะถูกเปิดใช้งาน", "enableTip": "หลังจากเปิดใช้งานแล้ว ฟังก์ชันการลงทะเบียน การเข้าสู่ระบบ การผูก และการยกเลิกการผูกโทรศัพท์มือถือจะถูกเปิดใช้งาน",
"endpointLabel": "จุดสิ้นสุด", "endpointLabel": "จุดสิ้นสุด",
"expireTime": "เวลาหมดอายุ",
"expireTimeTip": "ระยะเวลาหมดอายุของรหัสยืนยันทาง SMS (วินาที)",
"interval": "ช่วงเวลา",
"intervalTip": "ช่วงเวลาการส่งรหัสยืนยันทาง SMS สำหรับหมายเลขโทรศัพท์เดียวกัน (วินาที), 0 หมายถึงไม่มีข้อจำกัด",
"limit": "ขีดจำกัดรายวัน",
"limitTip": "จำกัดการส่งรหัสยืนยันทาง SMS รายวันสำหรับหมายเลขโทรศัพท์เดียวกัน, 0 หมายถึงไม่จำกัด",
"logs": "บันทึก", "logs": "บันทึก",
"phoneNumberLabel": "หมายเลขโทรศัพท์", "phoneNumberLabel": "หมายเลขโทรศัพท์",
"placeholders": { "placeholders": {
"expireTime": "กรอกเวลาหมดอายุ ค่าเริ่มต้นคือ 300",
"interval": "กรอกช่วงเวลา ค่าเริ่มต้นคือ 60",
"limit": "กรอกขีดจำกัดรายวัน ค่าเริ่มต้นคือ 20",
"template": "รหัสยืนยันของคุณคือ {code} ใช้ได้ภายใน 5 นาที", "template": "รหัสยืนยันของคุณคือ {code} ใช้ได้ภายใน 5 นาที",
"templateCode": "กรอกรหัสเทมเพลต" "templateCode": "กรอกรหัสเทมเพลต"
}, },

View File

@ -39,7 +39,6 @@
"editSubscription": "แก้ไขการสมัครสมาชิก", "editSubscription": "แก้ไขการสมัครสมาชิก",
"editUser": "แก้ไขผู้ใช้", "editUser": "แก้ไขผู้ใช้",
"email": "อีเมล", "email": "อีเมล",
"emailNotifications": "การแจ้งเตือนทางอีเมล",
"enable": "เปิดใช้งาน", "enable": "เปิดใช้งาน",
"expireTime": "เวลาหมดอายุ", "expireTime": "เวลาหมดอายุ",
"expiredAt": "วันหมดอายุ", "expiredAt": "วันหมดอายุ",
@ -82,7 +81,6 @@
"subscriptionName": "ชื่อการสมัครสมาชิก", "subscriptionName": "ชื่อการสมัครสมาชิก",
"subscriptionNotifications": "การแจ้งเตือนการสมัครสมาชิก", "subscriptionNotifications": "การแจ้งเตือนการสมัครสมาชิก",
"success": "สำเร็จ", "success": "สำเร็จ",
"telegramNotifications": "การแจ้งเตือนทาง Telegram",
"telephone": "หมายเลขโทรศัพท์", "telephone": "หมายเลขโทรศัพท์",
"telephonePlaceholder": "กรอกหมายเลขโทรศัพท์", "telephonePlaceholder": "กรอกหมายเลขโทรศัพท์",
"time": "เวลา", "time": "เวลา",

View File

@ -58,5 +58,18 @@
"turnstileSecretDescription": "Cloudflare tarafından sağlanan turnstile gizli anahtarı.", "turnstileSecretDescription": "Cloudflare tarafından sağlanan turnstile gizli anahtarı.",
"turnstileSiteKeyDescription": "Cloudflare tarafından sağlanan turnstile site anahtarı.", "turnstileSiteKeyDescription": "Cloudflare tarafından sağlanan turnstile site anahtarı.",
"verifySettings": "Doğrulama Ayarları" "verifySettings": "Doğrulama Ayarları"
},
"verify-code": {
"dailyLimit": "Günlük Limit",
"dailyLimitDescription": "Günde gönderilebilecek maksimum doğrulama kodu sayısı",
"expireTime": "Son Kullanma Süresi",
"expireTimeDescription": "Doğrulama kodunun son kullanma süresi (dakika)",
"interval": "Gönderim Aralığı",
"intervalDescription": "Doğrulama kodlarının gönderimi arasındaki minimum aralık (saniye)",
"minute": "dakika",
"saveSuccess": "Başarıyla Kaydedildi",
"second": "saniye",
"times": "kez",
"verifyCodeSettings": "Doğrulama Kodu Ayarları"
} }
} }

View File

@ -4,18 +4,9 @@
"enable": "Etkinleştir", "enable": "Etkinleştir",
"enableTip": "Etkinleştirildikten sonra, cep telefonu kaydı, giriş, bağlama ve bağlantı kesme işlevleri etkinleştirilecektir", "enableTip": "Etkinleştirildikten sonra, cep telefonu kaydı, giriş, bağlama ve bağlantı kesme işlevleri etkinleştirilecektir",
"endpointLabel": "Uç Nokta", "endpointLabel": "Uç Nokta",
"expireTime": "Sona Erme Süresi",
"expireTimeTip": "SMS doğrulama kodu geçerlilik süresi (saniye)",
"interval": "Aralık",
"intervalTip": "Aynı telefon numarası için SMS doğrulama kodu gönderme aralığı (saniye), 0 sınırsız demektir",
"limit": "Günlük Limit",
"limitTip": "Aynı telefon numarası için günlük SMS doğrulama kodu gönderim limiti, 0 sınırsız demektir",
"logs": "Günlükler", "logs": "Günlükler",
"phoneNumberLabel": "Telefon Numarası", "phoneNumberLabel": "Telefon Numarası",
"placeholders": { "placeholders": {
"expireTime": "Sona erme süresini girin, varsayılan 300",
"interval": "Aralık süresini girin, varsayılan 60'tır",
"limit": "Günlük limiti girin, varsayılan 20'dir",
"template": "Doğrulama kodunuz {code}, 5 dakika geçerlidir", "template": "Doğrulama kodunuz {code}, 5 dakika geçerlidir",
"templateCode": "Şablon kodunu girin" "templateCode": "Şablon kodunu girin"
}, },

View File

@ -39,7 +39,6 @@
"editSubscription": "Aboneliği Düzenle", "editSubscription": "Aboneliği Düzenle",
"editUser": "Kullanıcıyı Düzenle", "editUser": "Kullanıcıyı Düzenle",
"email": "e-posta", "email": "e-posta",
"emailNotifications": "E-posta Bildirimleri",
"enable": "etkinleştir", "enable": "etkinleştir",
"expireTime": "Sona Erme Zamanı", "expireTime": "Sona Erme Zamanı",
"expiredAt": "Son Kullanma Tarihi", "expiredAt": "Son Kullanma Tarihi",
@ -82,7 +81,6 @@
"subscriptionName": "Abonelik Adı", "subscriptionName": "Abonelik Adı",
"subscriptionNotifications": "Abonelik Bildirimleri", "subscriptionNotifications": "Abonelik Bildirimleri",
"success": "Başarı", "success": "Başarı",
"telegramNotifications": "Telegram Bildirimleri",
"telephone": "Telefon Numarası", "telephone": "Telefon Numarası",
"telephonePlaceholder": "Telefon numarasını girin", "telephonePlaceholder": "Telefon numarasını girin",
"time": "Zaman", "time": "Zaman",

View File

@ -58,5 +58,18 @@
"turnstileSecretDescription": "Секретний ключ Turnstile, наданий Cloudflare", "turnstileSecretDescription": "Секретний ключ Turnstile, наданий Cloudflare",
"turnstileSiteKeyDescription": "Ключ сайту Turnstile, наданий Cloudflare", "turnstileSiteKeyDescription": "Ключ сайту Turnstile, наданий Cloudflare",
"verifySettings": "Налаштування перевірки" "verifySettings": "Налаштування перевірки"
},
"verify-code": {
"dailyLimit": "Щоденний ліміт",
"dailyLimitDescription": "Максимальна кількість кодів підтвердження, які можуть бути надіслані за день",
"expireTime": "Час закінчення",
"expireTimeDescription": "Час закінчення коду підтвердження (хвилини)",
"interval": "Інтервал надсилання",
"intervalDescription": "Мінімальний інтервал між надсиланням кодів підтвердження (секунди)",
"minute": "хвилин",
"saveSuccess": "Успішно збережено",
"second": "секунд",
"times": "разів",
"verifyCodeSettings": "Налаштування коду підтвердження"
} }
} }

View File

@ -4,18 +4,9 @@
"enable": "Увімкнути", "enable": "Увімкнути",
"enableTip": "Після увімкнення будуть доступні функції реєстрації, входу, прив'язки та відв'язки мобільного телефону", "enableTip": "Після увімкнення будуть доступні функції реєстрації, входу, прив'язки та відв'язки мобільного телефону",
"endpointLabel": "Кінцева точка", "endpointLabel": "Кінцева точка",
"expireTime": "Час закінчення",
"expireTimeTip": "Термін дії коду перевірки SMS (секунди)",
"interval": "Інтервал",
"intervalTip": "Інтервал відправки SMS-коду підтвердження для одного і того ж номера телефону (в секундах), 0 означає без обмежень",
"limit": "Денний ліміт",
"limitTip": "Добова межа відправлення SMS-кодів перевірки для одного і того ж номера телефону, 0 означає відсутність обмежень",
"logs": "Журнали", "logs": "Журнали",
"phoneNumberLabel": "Номер телефону", "phoneNumberLabel": "Номер телефону",
"placeholders": { "placeholders": {
"expireTime": "Введіть час закінчення, за замовчуванням 300",
"interval": "Введіть інтервал часу, за замовчуванням 60",
"limit": "Введіть денний ліміт, за замовчуванням 20",
"template": "Ваш код підтвердження {code}, дійсний протягом 5 хвилин", "template": "Ваш код підтвердження {code}, дійсний протягом 5 хвилин",
"templateCode": "Введіть код шаблону" "templateCode": "Введіть код шаблону"
}, },

View File

@ -39,7 +39,6 @@
"editSubscription": "Редагувати підписку", "editSubscription": "Редагувати підписку",
"editUser": "Редагувати користувача", "editUser": "Редагувати користувача",
"email": "електронна пошта", "email": "електронна пошта",
"emailNotifications": "Сповіщення електронною поштою",
"enable": "Увімкнути", "enable": "Увімкнути",
"expireTime": "Час закінчення", "expireTime": "Час закінчення",
"expiredAt": "Термін дії закінчився", "expiredAt": "Термін дії закінчився",
@ -82,7 +81,6 @@
"subscriptionName": "Назва підписки", "subscriptionName": "Назва підписки",
"subscriptionNotifications": "Сповіщення про підписку", "subscriptionNotifications": "Сповіщення про підписку",
"success": "Успіх", "success": "Успіх",
"telegramNotifications": "Сповіщення Telegram",
"telephone": "Номер телефону", "telephone": "Номер телефону",
"telephonePlaceholder": "Введіть номер телефону", "telephonePlaceholder": "Введіть номер телефону",
"time": "Час", "time": "Час",

View File

@ -58,5 +58,18 @@
"turnstileSecretDescription": "Khóa bí mật Turnstile được cung cấp bởi Cloudflare", "turnstileSecretDescription": "Khóa bí mật Turnstile được cung cấp bởi Cloudflare",
"turnstileSiteKeyDescription": "Khóa trang Turnstile được cung cấp bởi Cloudflare", "turnstileSiteKeyDescription": "Khóa trang Turnstile được cung cấp bởi Cloudflare",
"verifySettings": "Cài đặt Xác minh" "verifySettings": "Cài đặt Xác minh"
},
"verify-code": {
"dailyLimit": "Giới hạn hàng ngày",
"dailyLimitDescription": "Số lượng mã xác minh tối đa có thể gửi trong một ngày",
"expireTime": "Thời gian hết hạn",
"expireTimeDescription": "Thời gian hết hạn của mã xác minh (phút)",
"interval": "Khoảng thời gian gửi",
"intervalDescription": "Khoảng thời gian tối thiểu giữa các lần gửi mã xác minh (giây)",
"minute": "phút",
"saveSuccess": "Lưu thành công",
"second": "giây",
"times": "lần",
"verifyCodeSettings": "Cài đặt mã xác minh"
} }
} }

View File

@ -4,18 +4,9 @@
"enable": "Kích hoạt", "enable": "Kích hoạt",
"enableTip": "Sau khi kích hoạt, các chức năng đăng ký, đăng nhập, liên kết và hủy liên kết điện thoại di động sẽ được kích hoạt", "enableTip": "Sau khi kích hoạt, các chức năng đăng ký, đăng nhập, liên kết và hủy liên kết điện thoại di động sẽ được kích hoạt",
"endpointLabel": "Điểm cuối", "endpointLabel": "Điểm cuối",
"expireTime": "Thời Gian Hết Hạn",
"expireTimeTip": "Thời gian hiệu lực của mã xác minh SMS (giây)",
"interval": "Khoảng thời gian",
"intervalTip": "Khoảng thời gian gửi mã xác minh SMS cho cùng một số điện thoại (giây), 0 có nghĩa là không giới hạn",
"limit": "Giới hạn hàng ngày",
"limitTip": "Giới hạn gửi mã xác minh SMS hàng ngày cho cùng một số điện thoại, 0 có nghĩa là không giới hạn",
"logs": "Nhật ký", "logs": "Nhật ký",
"phoneNumberLabel": "Số Điện Thoại", "phoneNumberLabel": "Số Điện Thoại",
"placeholders": { "placeholders": {
"expireTime": "Nhập thời gian hết hạn, mặc định là 300",
"interval": "Nhập thời gian khoảng cách, mặc định là 60",
"limit": "Nhập giới hạn hàng ngày, mặc định là 20",
"template": "Mã xác minh của bạn là {code}, có hiệu lực trong 5 phút", "template": "Mã xác minh của bạn là {code}, có hiệu lực trong 5 phút",
"templateCode": "Nhập mã mẫu" "templateCode": "Nhập mã mẫu"
}, },

View File

@ -39,7 +39,6 @@
"editSubscription": "Chỉnh sửa Đăng ký", "editSubscription": "Chỉnh sửa Đăng ký",
"editUser": "Chỉnh sửa người dùng", "editUser": "Chỉnh sửa người dùng",
"email": "Email", "email": "Email",
"emailNotifications": "Thông báo qua Email",
"enable": "Kích hoạt", "enable": "Kích hoạt",
"expireTime": "Thời gian hết hạn", "expireTime": "Thời gian hết hạn",
"expiredAt": "Ngày hết hạn", "expiredAt": "Ngày hết hạn",
@ -82,7 +81,6 @@
"subscriptionName": "Tên Đăng Ký", "subscriptionName": "Tên Đăng Ký",
"subscriptionNotifications": "Thông báo Đăng ký", "subscriptionNotifications": "Thông báo Đăng ký",
"success": "Thành công", "success": "Thành công",
"telegramNotifications": "Thông báo Telegram",
"telephone": "Số điện thoại", "telephone": "Số điện thoại",
"telephonePlaceholder": "Nhập số điện thoại", "telephonePlaceholder": "Nhập số điện thoại",
"time": "Thời Gian", "time": "Thời Gian",

View File

@ -58,5 +58,18 @@
"turnstileSecretDescription": "由 Cloudflare 提供的闸机密钥", "turnstileSecretDescription": "由 Cloudflare 提供的闸机密钥",
"turnstileSiteKeyDescription": "由 Cloudflare 提供的闸机站点密钥", "turnstileSiteKeyDescription": "由 Cloudflare 提供的闸机站点密钥",
"verifySettings": "验证设置" "verifySettings": "验证设置"
},
"verify-code": {
"dailyLimit": "每日限制",
"dailyLimitDescription": "每天最多可发送的验证码数量",
"expireTime": "过期时间",
"expireTimeDescription": "验证码的有效期(分钟)",
"interval": "发送间隔",
"intervalDescription": "两次发送验证码的最小间隔时间(秒)",
"minute": "分钟",
"saveSuccess": "保存成功",
"second": "秒",
"times": "次",
"verifyCodeSettings": "验证码设置"
} }
} }

View File

@ -4,18 +4,9 @@
"enable": "启用", "enable": "启用",
"enableTip": "启用后,将启用手机注册、登录、绑定和解绑功能", "enableTip": "启用后,将启用手机注册、登录、绑定和解绑功能",
"endpointLabel": "端点", "endpointLabel": "端点",
"expireTime": "过期时间",
"expireTimeTip": "短信验证码有效期(秒)",
"interval": "间隔",
"intervalTip": "同一手机号发送短信验证码的间隔时间0表示无限制",
"limit": "每日限额",
"limitTip": "同一手机号每日短信验证码发送限制0表示无限制",
"logs": "日志", "logs": "日志",
"phoneNumberLabel": "电话号码", "phoneNumberLabel": "电话号码",
"placeholders": { "placeholders": {
"expireTime": "输入过期时间默认为300",
"interval": "输入间隔时间默认为60",
"limit": "输入每日限制默认为20",
"template": "您的验证码是{code}有效期为5分钟", "template": "您的验证码是{code}有效期为5分钟",
"templateCode": "输入模板代码" "templateCode": "输入模板代码"
}, },

View File

@ -39,7 +39,6 @@
"editSubscription": "编辑订阅", "editSubscription": "编辑订阅",
"editUser": "编辑用户", "editUser": "编辑用户",
"email": "邮箱", "email": "邮箱",
"emailNotifications": "邮件通知",
"enable": "启用", "enable": "启用",
"expireTime": "到期时间", "expireTime": "到期时间",
"expiredAt": "过期时间", "expiredAt": "过期时间",
@ -82,7 +81,6 @@
"subscriptionName": "订阅名称", "subscriptionName": "订阅名称",
"subscriptionNotifications": "订阅通知", "subscriptionNotifications": "订阅通知",
"success": "成功", "success": "成功",
"telegramNotifications": "Telegram通知",
"telephone": "手机号", "telephone": "手机号",
"telephonePlaceholder": "输入手机号", "telephonePlaceholder": "输入手机号",
"time": "时间", "time": "时间",

View File

@ -58,5 +58,18 @@
"turnstileSecretDescription": "Cloudflare 提供的轉閘密鑰", "turnstileSecretDescription": "Cloudflare 提供的轉閘密鑰",
"turnstileSiteKeyDescription": "Cloudflare 提供的轉閘網站密鑰", "turnstileSiteKeyDescription": "Cloudflare 提供的轉閘網站密鑰",
"verifySettings": "驗證設置" "verifySettings": "驗證設置"
},
"verify-code": {
"dailyLimit": "每日限制",
"dailyLimitDescription": "每天可以發送的最大驗證碼數量",
"expireTime": "過期時間",
"expireTimeDescription": "驗證碼過期時間(分鐘)",
"interval": "發送間隔",
"intervalDescription": "發送驗證碼的最小間隔(秒)",
"minute": "分鐘",
"saveSuccess": "保存成功",
"second": "秒",
"times": "次",
"verifyCodeSettings": "驗證碼設置"
} }
} }

View File

@ -4,18 +4,9 @@
"enable": "啟用", "enable": "啟用",
"enableTip": "啟用後,將啟用手機註冊、登入、綁定和解綁功能", "enableTip": "啟用後,將啟用手機註冊、登入、綁定和解綁功能",
"endpointLabel": "端點", "endpointLabel": "端點",
"expireTime": "到期時間",
"expireTimeTip": "SMS 驗證碼有效期(秒)",
"interval": "間隔",
"intervalTip": "相同電話號碼的短信驗證碼發送間隔0 表示無限制",
"limit": "每日限額",
"limitTip": "同一電話號碼每日發送SMS驗證碼的限制0表示無限制",
"logs": "日誌", "logs": "日誌",
"phoneNumberLabel": "電話號碼", "phoneNumberLabel": "電話號碼",
"placeholders": { "placeholders": {
"expireTime": "輸入過期時間預設為300",
"interval": "輸入間隔時間默認為60",
"limit": "輸入每日限制默認為20",
"template": "您的驗證碼是{code}有效期為5分鐘", "template": "您的驗證碼是{code}有效期為5分鐘",
"templateCode": "輸入模板代碼" "templateCode": "輸入模板代碼"
}, },

View File

@ -39,7 +39,6 @@
"editSubscription": "編輯訂閱", "editSubscription": "編輯訂閱",
"editUser": "編輯使用者", "editUser": "編輯使用者",
"email": "電子郵件", "email": "電子郵件",
"emailNotifications": "電郵通知",
"enable": "啟用", "enable": "啟用",
"expireTime": "到期時間", "expireTime": "到期時間",
"expiredAt": "到期時間", "expiredAt": "到期時間",
@ -82,7 +81,6 @@
"subscriptionName": "訂閱名稱", "subscriptionName": "訂閱名稱",
"subscriptionNotifications": "訂閱通知", "subscriptionNotifications": "訂閱通知",
"success": "成功", "success": "成功",
"telegramNotifications": "Telegram 通知",
"telephone": "電話號碼", "telephone": "電話號碼",
"telephonePlaceholder": "輸入電話號碼", "telephonePlaceholder": "輸入電話號碼",
"time": "時間", "time": "時間",

View File

@ -1,5 +1,5 @@
// @ts-ignore // @ts-ignore
// API 更新时间: // API 更新时间:
// API 唯一标识: // API 唯一标识:
import * as announcement from './announcement'; import * as announcement from './announcement';

View File

@ -323,6 +323,32 @@ export async function updateTosConfig(body: API.TosConfig, options?: { [key: str
}); });
} }
/** Get Verify Code Config GET /v1/admin/system/verify_code_config */
export async function getVerifyCodeConfig(options?: { [key: string]: any }) {
return request<API.Response & { data?: API.VerifyCodeConfig }>(
'/v1/admin/system/verify_code_config',
{
method: 'GET',
...(options || {}),
},
);
}
/** Update Verify Code Config PUT /v1/admin/system/verify_code_config */
export async function updateVerifyCodeConfig(
body: API.VerifyCodeConfig,
options?: { [key: string]: any },
) {
return request<API.Response & { data?: any }>('/v1/admin/system/verify_code_config', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || {}),
});
}
/** Get verify config GET /v1/admin/system/verify_config */ /** Get verify config GET /v1/admin/system/verify_config */
export async function getVerifyConfig(options?: { [key: string]: any }) { export async function getVerifyConfig(options?: { [key: string]: any }) {
return request<API.Response & { data?: API.VerifyConfig }>('/v1/admin/system/verify_config', { return request<API.Response & { data?: API.VerifyConfig }>('/v1/admin/system/verify_config', {

View File

@ -1362,8 +1362,6 @@ declare namespace API {
type UpdateUserNotifySettingRequest = { type UpdateUserNotifySettingRequest = {
user_id: number; user_id: number;
enable_email_notify: boolean;
enable_telegram_notify: boolean;
enable_balance_notify: boolean; enable_balance_notify: boolean;
enable_login_notify: boolean; enable_login_notify: boolean;
enable_subscribe_notify: boolean; enable_subscribe_notify: boolean;
@ -1390,9 +1388,6 @@ declare namespace API {
referer_id: number; referer_id: number;
enable: boolean; enable: boolean;
is_admin?: boolean; is_admin?: boolean;
valid_email: boolean;
enable_email_notify: boolean;
enable_telegram_notify: boolean;
enable_balance_notify: boolean; enable_balance_notify: boolean;
enable_login_notify: boolean; enable_login_notify: boolean;
enable_subscribe_notify: boolean; enable_subscribe_notify: boolean;
@ -1497,6 +1492,12 @@ declare namespace API {
download: number; download: number;
}; };
type VerifyCodeConfig = {
verify_code_expire_time: number;
verify_code_limit: number;
verify_code_interval: number;
};
type VerifyConfig = { type VerifyConfig = {
turnstile_site_key: string; turnstile_site_key: string;
turnstile_secret: string; turnstile_secret: string;

View File

@ -1,5 +1,5 @@
// @ts-ignore // @ts-ignore
// API 更新时间: // API 更新时间:
// API 唯一标识: // API 唯一标识:
import * as auth from './auth'; import * as auth from './auth';

View File

@ -152,6 +152,7 @@ declare namespace API {
invite: InviteConfig; invite: InviteConfig;
currency: CurrencyConfig; currency: CurrencyConfig;
subscribe: SubscribeConfig; subscribe: SubscribeConfig;
verify_code: VerifyCodeConfig;
oauth_methods: string[]; oauth_methods: string[];
}; };
@ -579,9 +580,6 @@ declare namespace API {
referer_id: number; referer_id: number;
enable: boolean; enable: boolean;
is_admin?: boolean; is_admin?: boolean;
valid_email: boolean;
enable_email_notify: boolean;
enable_telegram_notify: boolean;
enable_balance_notify: boolean; enable_balance_notify: boolean;
enable_login_notify: boolean; enable_login_notify: boolean;
enable_subscribe_notify: boolean; enable_subscribe_notify: boolean;
@ -686,6 +684,12 @@ declare namespace API {
enable_reset_password_verify: boolean; enable_reset_password_verify: boolean;
}; };
type VerifyCodeConfig = {
verify_code_expire_time: number;
verify_code_limit: number;
verify_code_interval: number;
};
type VerifyConfig = { type VerifyConfig = {
turnstile_site_key: string; turnstile_site_key: string;
turnstile_secret: string; turnstile_secret: string;

View File

@ -13,9 +13,6 @@ import { toast } from 'sonner';
import { z } from 'zod'; import { z } from 'zod';
const FormSchema = z.object({ const FormSchema = z.object({
telegram: z.number().nullish(),
enable_email_notify: z.boolean(),
enable_telegram_notify: z.boolean(),
enable_balance_notify: z.boolean(), enable_balance_notify: z.boolean(),
enable_login_notify: z.boolean(), enable_login_notify: z.boolean(),
enable_subscribe_notify: z.boolean(), enable_subscribe_notify: z.boolean(),
@ -28,9 +25,6 @@ export default function NotifySettings() {
const form = useForm<z.infer<typeof FormSchema>>({ const form = useForm<z.infer<typeof FormSchema>>({
resolver: zodResolver(FormSchema), resolver: zodResolver(FormSchema),
defaultValues: { defaultValues: {
telegram: user?.telegram,
enable_email_notify: user?.enable_email_notify,
enable_telegram_notify: user?.enable_telegram_notify,
enable_balance_notify: user?.enable_balance_notify, enable_balance_notify: user?.enable_balance_notify,
enable_login_notify: user?.enable_login_notify, enable_login_notify: user?.enable_login_notify,
enable_subscribe_notify: user?.enable_subscribe_notify, enable_subscribe_notify: user?.enable_subscribe_notify,
@ -59,8 +53,6 @@ export default function NotifySettings() {
<form id='notify-form' onSubmit={form.handleSubmit(onSubmit)} className='space-y-4'> <form id='notify-form' onSubmit={form.handleSubmit(onSubmit)} className='space-y-4'>
<div className='space-y-4'> <div className='space-y-4'>
{[ {[
{ name: 'enable_email_notify', label: 'emailNotification' },
{ name: 'enable_telegram_notify', label: 'telegramNotification' },
{ name: 'enable_balance_notify', label: 'balanceChange' }, { name: 'enable_balance_notify', label: 'balanceChange' },
{ name: 'enable_login_notify', label: 'login' }, { name: 'enable_login_notify', label: 'login' },
{ name: 'enable_subscribe_notify', label: 'subscribe' }, { name: 'enable_subscribe_notify', label: 'subscribe' },

View File

@ -1,10 +1,11 @@
'use client'; 'use client';
import useGlobalStore from '@/config/use-global';
import { sendEmailCode, sendSmsCode } from '@/services/common/common'; import { sendEmailCode, sendSmsCode } from '@/services/common/common';
import { Button } from '@workspace/ui/components/button'; import { Button } from '@workspace/ui/components/button';
import { useCountDown } from 'ahooks'; import { useCountDown } from 'ahooks';
import { useTranslations } from 'next-intl'; import { useTranslations } from 'next-intl';
import { useState } from 'react'; import { useEffect, useState } from 'react';
interface SendCodeProps { interface SendCodeProps {
type: 'email' | 'phone'; type: 'email' | 'phone';
@ -17,22 +18,43 @@ interface SendCodeProps {
} }
export default function SendCode({ type, params }: SendCodeProps) { export default function SendCode({ type, params }: SendCodeProps) {
const t = useTranslations('auth'); const t = useTranslations('auth');
const { common } = useGlobalStore();
const { verify_code_interval } = common.verify_code;
const [targetDate, setTargetDate] = useState<number>(); const [targetDate, setTargetDate] = useState<number>();
useEffect(() => {
const storedEndTime = localStorage.getItem(`verify_code_${type}`);
if (storedEndTime) {
const endTime = parseInt(storedEndTime);
if (endTime > Date.now()) {
setTargetDate(endTime);
} else {
localStorage.removeItem(`verify_code_${type}`);
}
}
}, [type]);
const [, { seconds }] = useCountDown({ const [, { seconds }] = useCountDown({
targetDate, targetDate,
onEnd: () => { onEnd: () => {
setTargetDate(undefined); setTargetDate(undefined);
localStorage.removeItem(`verify_code_${type}`);
}, },
}); });
const setCodeTimer = () => {
const endTime = Date.now() + verify_code_interval * 1000;
setTargetDate(endTime);
localStorage.setItem(`verify_code_${type}`, endTime.toString());
};
const getEmailCode = async () => { const getEmailCode = async () => {
if (params.email && params.type) { if (params.email && params.type) {
await sendEmailCode({ await sendEmailCode({
email: params.email, email: params.email,
type: params.type, type: params.type,
}); });
setTargetDate(Date.now() + 60000); setCodeTimer();
} }
}; };
@ -43,7 +65,7 @@ export default function SendCode({ type, params }: SendCodeProps) {
telephone_area_code: params.telephone_area_code, telephone_area_code: params.telephone_area_code,
type: params.type, type: params.type,
}); });
setTargetDate(Date.now() + 60000); setCodeTimer();
} }
}; };

View File

@ -84,7 +84,7 @@ export default function Purchase({ subscribe, setSubscribe }: Readonly<PurchaseP
console.log(error); console.log(error);
} }
}); });
}, [params, router]); }, [params, router, getUserInfo]);
return ( return (
<Dialog <Dialog

View File

@ -92,7 +92,7 @@ export default function Renewal({ id, subscribe }: Readonly<RenewalProps>) {
console.log(error); console.log(error);
} }
}); });
}, [params, router]); }, [params, router, getUserInfo]);
return ( return (
<Dialog open={open} onOpenChange={setOpen}> <Dialog open={open} onOpenChange={setOpen}>

View File

@ -43,6 +43,9 @@ export const useGlobalStore = create<GlobalStore>((set, get) => ({
register: { register: {
stop_register: false, stop_register: false,
enable_trial: false, enable_trial: false,
trial_subscribe: 0,
trial_time: 0,
trial_time_unit: '',
enable_ip_register_limit: false, enable_ip_register_limit: false,
ip_register_limit: 0, ip_register_limit: 0,
ip_register_limit_duration: 0, ip_register_limit_duration: 0,
@ -63,6 +66,11 @@ export const useGlobalStore = create<GlobalStore>((set, get) => ({
subscribe_domain: '', subscribe_domain: '',
pan_domain: false, pan_domain: false,
}, },
verify_code: {
verify_code_expire_time: 5,
verify_code_limit: 15,
verify_code_interval: 60,
},
oauth_methods: [], oauth_methods: [],
}, },
user: undefined, user: undefined,

View File

@ -9,18 +9,13 @@
}, },
"notify": { "notify": {
"balanceChange": "Změna zůstatku", "balanceChange": "Změna zůstatku",
"bind": "Přejít na vazbu",
"channels": "Notifikační kanály", "channels": "Notifikační kanály",
"emailNotification": "E-mailové oznámení",
"finance": "Finance", "finance": "Finance",
"login": "Přihlášení", "login": "Přihlášení",
"notificationSettings": "Nastavení oznámení", "notificationSettings": "Nastavení oznámení",
"notificationTypes": "Typy notifikací", "notificationTypes": "Typy notifikací",
"save": "Uložit změny", "save": "Uložit změny",
"subscribe": "Přihlásit se", "subscribe": "Přihlásit se",
"telegramIdPlaceholder": "Zadejte Telegram ID",
"telegramNotification": "Telegram oznámení",
"unbind": "Zrušit vazbu",
"updateSuccess": "Aktualizace byla úspěšná" "updateSuccess": "Aktualizace byla úspěšná"
}, },
"thirdParty": { "thirdParty": {

View File

@ -9,18 +9,13 @@
}, },
"notify": { "notify": {
"balanceChange": "Kontostandsänderung", "balanceChange": "Kontostandsänderung",
"bind": "Zur Bindung gehen",
"channels": "Benachrichtigungskanäle", "channels": "Benachrichtigungskanäle",
"emailNotification": "E-Mail-Benachrichtigung",
"finance": "Finanzen", "finance": "Finanzen",
"login": "Anmelden", "login": "Anmelden",
"notificationSettings": "Benachrichtigungseinstellungen", "notificationSettings": "Benachrichtigungseinstellungen",
"notificationTypes": "Benachrichtigungstypen", "notificationTypes": "Benachrichtigungstypen",
"save": "Änderungen speichern", "save": "Änderungen speichern",
"subscribe": "Abonnieren", "subscribe": "Abonnieren",
"telegramIdPlaceholder": "Telegram-ID eingeben",
"telegramNotification": "Telegram-Benachrichtigung",
"unbind": "Lösen",
"updateSuccess": "Erfolgreich aktualisiert" "updateSuccess": "Erfolgreich aktualisiert"
}, },
"thirdParty": { "thirdParty": {

View File

@ -9,18 +9,13 @@
}, },
"notify": { "notify": {
"balanceChange": "Balance Change", "balanceChange": "Balance Change",
"bind": "Go to Binding",
"channels": "Notification Channels", "channels": "Notification Channels",
"emailNotification": "Email Notification",
"finance": "Finance", "finance": "Finance",
"login": "Login", "login": "Login",
"notificationSettings": "Notification Settings", "notificationSettings": "Notification Settings",
"notificationTypes": "Notification Types", "notificationTypes": "Notification Types",
"save": "Save Changes", "save": "Save Changes",
"subscribe": "Subscribe", "subscribe": "Subscribe",
"telegramIdPlaceholder": "Enter Telegram ID",
"telegramNotification": "Telegram Notification",
"unbind": "Unbind",
"updateSuccess": "Update Successful" "updateSuccess": "Update Successful"
}, },
"thirdParty": { "thirdParty": {

View File

@ -9,18 +9,13 @@
}, },
"notify": { "notify": {
"balanceChange": "Cambio de Saldo", "balanceChange": "Cambio de Saldo",
"bind": "Ir a Vinculación",
"channels": "Canales de Notificación", "channels": "Canales de Notificación",
"emailNotification": "Notificación por correo electrónico",
"finance": "Finanzas", "finance": "Finanzas",
"login": "Iniciar Sesión", "login": "Iniciar Sesión",
"notificationSettings": "Configuración de notificaciones", "notificationSettings": "Configuración de notificaciones",
"notificationTypes": "Tipos de Notificación", "notificationTypes": "Tipos de Notificación",
"save": "Guardar Cambios", "save": "Guardar Cambios",
"subscribe": "Suscribirse", "subscribe": "Suscribirse",
"telegramIdPlaceholder": "Ingrese ID de Telegram",
"telegramNotification": "Notificación de Telegram",
"unbind": "Desvincular",
"updateSuccess": "Actualización exitosa" "updateSuccess": "Actualización exitosa"
}, },
"thirdParty": { "thirdParty": {

View File

@ -9,18 +9,13 @@
}, },
"notify": { "notify": {
"balanceChange": "Cambio de Saldo", "balanceChange": "Cambio de Saldo",
"bind": "Ir a Vinculación",
"channels": "Canales de Notificación", "channels": "Canales de Notificación",
"emailNotification": "Notificación por correo electrónico",
"finance": "Finanzas", "finance": "Finanzas",
"login": "Iniciar Sesión", "login": "Iniciar Sesión",
"notificationSettings": "Configuración de notificaciones", "notificationSettings": "Configuración de notificaciones",
"notificationTypes": "Tipos de Notificación", "notificationTypes": "Tipos de Notificación",
"save": "Guardar Cambios", "save": "Guardar Cambios",
"subscribe": "Suscribirse", "subscribe": "Suscribirse",
"telegramIdPlaceholder": "Ingrese ID de Telegram",
"telegramNotification": "Notificación de Telegram",
"unbind": "Desvincular",
"updateSuccess": "Actualización exitosa" "updateSuccess": "Actualización exitosa"
}, },
"thirdParty": { "thirdParty": {

View File

@ -9,18 +9,13 @@
}, },
"notify": { "notify": {
"balanceChange": "تغییر موجودی", "balanceChange": "تغییر موجودی",
"bind": "رفتن به اتصال",
"channels": "کانال‌های اعلان", "channels": "کانال‌های اعلان",
"emailNotification": "اعلان ایمیل",
"finance": "مالی", "finance": "مالی",
"login": "ورود", "login": "ورود",
"notificationSettings": "تنظیمات اعلان", "notificationSettings": "تنظیمات اعلان",
"notificationTypes": "نوع‌های اعلان", "notificationTypes": "نوع‌های اعلان",
"save": "ذخیره تغییرات", "save": "ذخیره تغییرات",
"subscribe": "اشتراک‌گذاری", "subscribe": "اشتراک‌گذاری",
"telegramIdPlaceholder": "شناسه تلگرام را وارد کنید",
"telegramNotification": "اعلان تلگرام",
"unbind": "لغو اتصال",
"updateSuccess": "به‌روزرسانی موفقیت‌آمیز" "updateSuccess": "به‌روزرسانی موفقیت‌آمیز"
}, },
"thirdParty": { "thirdParty": {

View File

@ -9,18 +9,13 @@
}, },
"notify": { "notify": {
"balanceChange": "Saldo Muutos", "balanceChange": "Saldo Muutos",
"bind": "Siirry sitomiseen",
"channels": "Ilmoituskanavat", "channels": "Ilmoituskanavat",
"emailNotification": "Sähköposti-ilmoitus",
"finance": "Rahoitus", "finance": "Rahoitus",
"login": "Kirjaudu", "login": "Kirjaudu",
"notificationSettings": "Ilmoitusasetukset", "notificationSettings": "Ilmoitusasetukset",
"notificationTypes": "Ilmoitustyypit", "notificationTypes": "Ilmoitustyypit",
"save": "Tallenna muutokset", "save": "Tallenna muutokset",
"subscribe": "Tilaa", "subscribe": "Tilaa",
"telegramIdPlaceholder": "Syötä Telegram ID",
"telegramNotification": "Telegram-ilmoitus",
"unbind": "Poista sitominen",
"updateSuccess": "Päivitys onnistui" "updateSuccess": "Päivitys onnistui"
}, },
"thirdParty": { "thirdParty": {

View File

@ -9,18 +9,13 @@
}, },
"notify": { "notify": {
"balanceChange": "Changement de Solde", "balanceChange": "Changement de Solde",
"bind": "Aller à la liaison",
"channels": "Canaux de Notification", "channels": "Canaux de Notification",
"emailNotification": "Notification par e-mail",
"finance": "Finance", "finance": "Finance",
"login": "Connexion", "login": "Connexion",
"notificationSettings": "Paramètres de notification", "notificationSettings": "Paramètres de notification",
"notificationTypes": "Types de Notification", "notificationTypes": "Types de Notification",
"save": "Enregistrer les Modifications", "save": "Enregistrer les Modifications",
"subscribe": "S'abonner", "subscribe": "S'abonner",
"telegramIdPlaceholder": "Entrez l'ID Telegram",
"telegramNotification": "Notification Telegram",
"unbind": "Délier",
"updateSuccess": "Mise à jour réussie" "updateSuccess": "Mise à jour réussie"
}, },
"thirdParty": { "thirdParty": {

View File

@ -9,18 +9,13 @@
}, },
"notify": { "notify": {
"balanceChange": "बैलेंस परिवर्तन", "balanceChange": "बैलेंस परिवर्तन",
"bind": "बाइंडिंग पर जाएं",
"channels": "सूचना चैनल", "channels": "सूचना चैनल",
"emailNotification": "ईमेल सूचना",
"finance": "वित्त", "finance": "वित्त",
"login": "लॉगिन", "login": "लॉगिन",
"notificationSettings": "सूचना सेटिंग्स", "notificationSettings": "सूचना सेटिंग्स",
"notificationTypes": "सूचना प्रकार", "notificationTypes": "सूचना प्रकार",
"save": "परिवर्तन सहेजें", "save": "परिवर्तन सहेजें",
"subscribe": "सदस्यता लें", "subscribe": "सदस्यता लें",
"telegramIdPlaceholder": "टेलीग्राम आईडी दर्ज करें",
"telegramNotification": "टेलीग्राम सूचना",
"unbind": "अनबाइंड करें",
"updateSuccess": "सफलतापूर्वक अपडेट किया गया" "updateSuccess": "सफलतापूर्वक अपडेट किया गया"
}, },
"thirdParty": { "thirdParty": {

View File

@ -9,18 +9,13 @@
}, },
"notify": { "notify": {
"balanceChange": "Egyenleg Változás", "balanceChange": "Egyenleg Változás",
"bind": "Menj a kötéshez",
"channels": "Értesítési Csatornák", "channels": "Értesítési Csatornák",
"emailNotification": "E-mail értesítés",
"finance": "Pénzügy", "finance": "Pénzügy",
"login": "Bejelentkezés", "login": "Bejelentkezés",
"notificationSettings": "Értesítési beállítások", "notificationSettings": "Értesítési beállítások",
"notificationTypes": "Értesítési Típusok", "notificationTypes": "Értesítési Típusok",
"save": "Változtatások Mentése", "save": "Változtatások Mentése",
"subscribe": "Feliratkozás", "subscribe": "Feliratkozás",
"telegramIdPlaceholder": "Adja meg a Telegram azonosítót",
"telegramNotification": "Telegram értesítés",
"unbind": "Kötés feloldása",
"updateSuccess": "Sikeres frissítés" "updateSuccess": "Sikeres frissítés"
}, },
"thirdParty": { "thirdParty": {

View File

@ -9,18 +9,13 @@
}, },
"notify": { "notify": {
"balanceChange": "残高の変更", "balanceChange": "残高の変更",
"bind": "バインディングに移動",
"channels": "通知チャネル", "channels": "通知チャネル",
"emailNotification": "メール通知",
"finance": "ファイナンス", "finance": "ファイナンス",
"login": "ログイン", "login": "ログイン",
"notificationSettings": "通知設定", "notificationSettings": "通知設定",
"notificationTypes": "通知タイプ", "notificationTypes": "通知タイプ",
"save": "変更を保存", "save": "変更を保存",
"subscribe": "購読する", "subscribe": "購読する",
"telegramIdPlaceholder": "Telegram IDを入力",
"telegramNotification": "Telegram通知",
"unbind": "バインド解除",
"updateSuccess": "更新成功" "updateSuccess": "更新成功"
}, },
"thirdParty": { "thirdParty": {

View File

@ -9,18 +9,13 @@
}, },
"notify": { "notify": {
"balanceChange": "잔액 변경", "balanceChange": "잔액 변경",
"bind": "바인딩으로 이동",
"channels": "알림 채널", "channels": "알림 채널",
"emailNotification": "이메일 알림",
"finance": "재무", "finance": "재무",
"login": "로그인", "login": "로그인",
"notificationSettings": "알림 설정", "notificationSettings": "알림 설정",
"notificationTypes": "알림 유형", "notificationTypes": "알림 유형",
"save": "변경 사항 저장", "save": "변경 사항 저장",
"subscribe": "구독", "subscribe": "구독",
"telegramIdPlaceholder": "텔레그램 ID 입력",
"telegramNotification": "텔레그램 알림",
"unbind": "바인딩 해제",
"updateSuccess": "업데이트 성공" "updateSuccess": "업데이트 성공"
}, },
"thirdParty": { "thirdParty": {

View File

@ -9,18 +9,13 @@
}, },
"notify": { "notify": {
"balanceChange": "Endring i saldo", "balanceChange": "Endring i saldo",
"bind": "Gå til binding",
"channels": "Varslingskanaler", "channels": "Varslingskanaler",
"emailNotification": "E-postvarsling",
"finance": "Økonomi", "finance": "Økonomi",
"login": "Logg inn", "login": "Logg inn",
"notificationSettings": "Varslingsinnstillinger", "notificationSettings": "Varslingsinnstillinger",
"notificationTypes": "Varslingstyper", "notificationTypes": "Varslingstyper",
"save": "Lagre endringer", "save": "Lagre endringer",
"subscribe": "Abonner", "subscribe": "Abonner",
"telegramIdPlaceholder": "Skriv inn Telegram-ID",
"telegramNotification": "Telegram-varsling",
"unbind": "Løsne",
"updateSuccess": "Oppdatering vellykket" "updateSuccess": "Oppdatering vellykket"
}, },
"thirdParty": { "thirdParty": {

View File

@ -9,18 +9,13 @@
}, },
"notify": { "notify": {
"balanceChange": "Zmiana salda", "balanceChange": "Zmiana salda",
"bind": "Przejdź do wiązania",
"channels": "Kanały powiadomień", "channels": "Kanały powiadomień",
"emailNotification": "Powiadomienie e-mail",
"finance": "Finanse", "finance": "Finanse",
"login": "Zaloguj się", "login": "Zaloguj się",
"notificationSettings": "Ustawienia powiadomień", "notificationSettings": "Ustawienia powiadomień",
"notificationTypes": "Typy powiadomień", "notificationTypes": "Typy powiadomień",
"save": "Zapisz zmiany", "save": "Zapisz zmiany",
"subscribe": "Subskrybuj", "subscribe": "Subskrybuj",
"telegramIdPlaceholder": "Wprowadź Telegram ID",
"telegramNotification": "Powiadomienie Telegram",
"unbind": "Odwiąż",
"updateSuccess": "Aktualizacja zakończona sukcesem" "updateSuccess": "Aktualizacja zakończona sukcesem"
}, },
"thirdParty": { "thirdParty": {

View File

@ -9,18 +9,13 @@
}, },
"notify": { "notify": {
"balanceChange": "Mudança de Saldo", "balanceChange": "Mudança de Saldo",
"bind": "Ir para Vinculação",
"channels": "Canais de Notificação", "channels": "Canais de Notificação",
"emailNotification": "Notificação por e-mail",
"finance": "Finanças", "finance": "Finanças",
"login": "Login", "login": "Login",
"notificationSettings": "Configurações de notificação", "notificationSettings": "Configurações de notificação",
"notificationTypes": "Tipos de Notificação", "notificationTypes": "Tipos de Notificação",
"save": "Salvar Alterações", "save": "Salvar Alterações",
"subscribe": "Inscrever-se", "subscribe": "Inscrever-se",
"telegramIdPlaceholder": "Insira o ID do Telegram",
"telegramNotification": "Notificação do Telegram",
"unbind": "Desvincular",
"updateSuccess": "Atualização bem-sucedida" "updateSuccess": "Atualização bem-sucedida"
}, },
"thirdParty": { "thirdParty": {

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