🐛 fix(auth): Update user authentication flow to include email and phone code verification

This commit is contained in:
web@ppanel 2025-01-16 14:26:33 +07:00
parent 8775fb620e
commit 5d078fdaca
31 changed files with 552 additions and 380 deletions

View File

@ -1,24 +1,24 @@
'use client'; 'use client';
import { resetPassword, userLogin, userRegister } from '@/services/common/auth';
import { useTranslations } from 'next-intl';
import { useRouter } from 'next/navigation';
import { ReactNode, useState, useTransition } from 'react';
import { toast } from 'sonner';
import { import {
NEXT_PUBLIC_DEFAULT_USER_EMAIL, NEXT_PUBLIC_DEFAULT_USER_EMAIL,
NEXT_PUBLIC_DEFAULT_USER_PASSWORD, NEXT_PUBLIC_DEFAULT_USER_PASSWORD,
} from '@/config/constants'; } from '@/config/constants';
import { checkUser, resetPassword, userLogin, userRegister } from '@/services/common/auth';
import { getRedirectUrl, setAuthorization } from '@/utils/common'; import { getRedirectUrl, setAuthorization } from '@/utils/common';
import { useTranslations } from 'next-intl'; import LoginForm from './login-form';
import { useRouter } from 'next/navigation'; import RegisterForm from './register-form';
import { ReactNode, useState, useTransition } from 'react'; import ResetForm from './reset-form';
import { toast } from 'sonner';
import UserCheckForm from './user-check-form';
import UserLoginForm from './user-login-form';
import UserRegisterForm from './user-register-form';
import UserResetForm from './user-reset-form';
export default function UserAuthForm() { export default function EmailAuthForm() {
const t = useTranslations('auth'); const t = useTranslations('auth');
const router = useRouter(); const router = useRouter();
const [type, setType] = useState<'login' | 'register' | 'reset'>(); const [type, setType] = useState<'login' | 'register' | 'reset'>('login');
const [loading, startTransition] = useTransition(); const [loading, startTransition] = useTransition();
const [initialValues, setInitialValues] = useState<{ const [initialValues, setInitialValues] = useState<{
email?: string; email?: string;
@ -38,44 +38,35 @@ export default function UserAuthForm() {
startTransition(async () => { startTransition(async () => {
try { try {
switch (type) { switch (type) {
case 'login': case 'login': {
// eslint-disable-next-line no-case-declarations
const login = await userLogin(params); const login = await userLogin(params);
toast.success(t('login.success')); toast.success(t('login.success'));
onLogin(login.data.data?.token); onLogin(login.data.data?.token);
break; break;
case 'register': }
// eslint-disable-next-line no-case-declarations case 'register': {
const create = await userRegister(params); const create = await userRegister(params);
toast.success(t('register.success')); toast.success(t('register.success'));
onLogin(create.data.data?.token); onLogin(create.data.data?.token);
break; break;
}
case 'reset': case 'reset':
await resetPassword(params); await resetPassword(params);
toast.success(t('reset.success')); toast.success(t('reset.success'));
setType('login'); setType('login');
break; break;
default:
if (type === 'reset') break;
// eslint-disable-next-line no-case-declarations
const response = await checkUser(params);
setInitialValues({
...initialValues,
...params,
});
setType(response.data.data?.exist ? 'login' : 'register');
break;
} }
} catch (error) { } catch (error) {
/* empty */ /* empty */
} }
}); });
}; };
let UserForm: ReactNode = null; let UserForm: ReactNode = null;
switch (type) { switch (type) {
case 'login': case 'login':
UserForm = ( UserForm = (
<UserLoginForm <LoginForm
loading={loading} loading={loading}
onSubmit={handleFormSubmit} onSubmit={handleFormSubmit}
initialValues={initialValues} initialValues={initialValues}
@ -86,7 +77,7 @@ export default function UserAuthForm() {
break; break;
case 'register': case 'register':
UserForm = ( UserForm = (
<UserRegisterForm <RegisterForm
loading={loading} loading={loading}
onSubmit={handleFormSubmit} onSubmit={handleFormSubmit}
initialValues={initialValues} initialValues={initialValues}
@ -97,7 +88,7 @@ export default function UserAuthForm() {
break; break;
case 'reset': case 'reset':
UserForm = ( UserForm = (
<UserResetForm <ResetForm
loading={loading} loading={loading}
onSubmit={handleFormSubmit} onSubmit={handleFormSubmit}
initialValues={initialValues} initialValues={initialValues}
@ -106,15 +97,6 @@ export default function UserAuthForm() {
/> />
); );
break; break;
default:
UserForm = (
<UserCheckForm
loading={loading}
onSubmit={handleFormSubmit}
initialValues={initialValues}
/>
);
break;
} }
return ( return (
@ -125,34 +107,6 @@ export default function UserAuthForm() {
{t(`${type || 'check'}.description`)} {t(`${type || 'check'}.description`)}
</div> </div>
</div> </div>
{/* {!((type === 'register' && register.stop_register) || type === 'reset') && (
<>
<div className='mb-3 flex flex-wrap items-center justify-center gap-3 font-bold'>
<Button type='button' variant='outline'>
<Icon icon='uil:telegram' className='mr-2 size-5' />
Telegram
</Button>
<Button type='button' variant='outline'>
<Icon icon='uil:google' className='mr-2 size-5' />
Google
</Button>
<Button type='button' variant='outline'>
<Icon icon='uil:apple' className='mr-2 size-5' />
Apple
</Button>
</div>
<div
className={cn(
'my-14 flex h-0 items-center text-center',
'before:mr-4 before:block before:w-1/2 before:border-b-[1px]',
'after:ml-4 after:w-1/2 after:border-b-[1px]',
)}
>
<span className='text-muted-foreground w-[125px] text-sm'>{t('orWithEmail')}</span>
</div>
</>
)} */}
{UserForm} {UserForm}
</> </>
); );

View File

@ -1,6 +1,6 @@
import useGlobalStore from '@/config/use-global'; import useGlobalStore from '@/config/use-global';
import { zodResolver } from '@hookform/resolvers/zod'; import { zodResolver } from '@hookform/resolvers/zod';
import { Icon } from '@iconify/react'; import { Icon } from '@iconify/react/dist/iconify.js';
import { Button } from '@workspace/ui/components/button'; import { Button } from '@workspace/ui/components/button';
import { Form, FormControl, FormField, FormItem, FormMessage } from '@workspace/ui/components/form'; import { Form, FormControl, FormField, FormItem, FormMessage } from '@workspace/ui/components/form';
import { Input } from '@workspace/ui/components/input'; import { Input } from '@workspace/ui/components/input';
@ -8,9 +8,9 @@ import { useTranslations } from 'next-intl';
import { Dispatch, SetStateAction } from 'react'; import { Dispatch, SetStateAction } from 'react';
import { useForm } from 'react-hook-form'; import { useForm } from 'react-hook-form';
import { z } from 'zod'; import { z } from 'zod';
import CloudFlareTurnstile from './turnstile'; import CloudFlareTurnstile from '../turnstile';
export default function UserLoginForm({ export default function LoginForm({
loading, loading,
onSubmit, onSubmit,
initialValues, initialValues,
@ -21,14 +21,14 @@ export default function UserLoginForm({
onSubmit: (data: any) => void; onSubmit: (data: any) => void;
initialValues: any; initialValues: any;
setInitialValues: Dispatch<SetStateAction<any>>; setInitialValues: Dispatch<SetStateAction<any>>;
onSwitchForm: (type?: 'register' | 'reset') => void; onSwitchForm: Dispatch<SetStateAction<'register' | 'reset' | 'login'>>;
}) { }) {
const t = useTranslations('auth.login'); const t = useTranslations('auth.login');
const { common } = useGlobalStore(); const { common } = useGlobalStore();
const { verify } = common; const { verify } = common;
const formSchema = z.object({ const formSchema = z.object({
email: z.string(), email: z.string().email(t('email')),
password: z.string(), password: z.string(),
cf_token: cf_token:
verify.enable_login_verify && verify.turnstile_site_key ? z.string() : z.string().optional(), verify.enable_login_verify && verify.turnstile_site_key ? z.string() : z.string().optional(),
@ -48,7 +48,7 @@ export default function UserLoginForm({
render={({ field }) => ( render={({ field }) => (
<FormItem> <FormItem>
<FormControl> <FormControl>
<Input disabled placeholder='Enter your email...' type='email' {...field} /> <Input placeholder='Enter your email...' type='email' {...field} />
</FormControl> </FormControl>
<FormMessage /> <FormMessage />
</FormItem> </FormItem>
@ -100,10 +100,10 @@ export default function UserLoginForm({
className='p-0' className='p-0'
onClick={() => { onClick={() => {
setInitialValues(undefined); setInitialValues(undefined);
onSwitchForm(undefined); onSwitchForm('register');
}} }}
> >
{t('switchAccount')} {t('registerAccount')}
</Button> </Button>
</div> </div>
</> </>

View File

@ -1,19 +1,18 @@
import useGlobalStore from '@/config/use-global'; import useGlobalStore from '@/config/use-global';
import { sendEmailCode } from '@/services/common/common';
import { zodResolver } from '@hookform/resolvers/zod'; import { zodResolver } from '@hookform/resolvers/zod';
import { Icon } from '@iconify/react'; import { Icon } from '@iconify/react/dist/iconify.js';
import { Button } from '@workspace/ui/components/button'; import { Button } from '@workspace/ui/components/button';
import { Form, FormControl, FormField, FormItem, FormMessage } from '@workspace/ui/components/form'; import { Form, FormControl, FormField, FormItem, FormMessage } from '@workspace/ui/components/form';
import { Input } from '@workspace/ui/components/input'; import { Input } from '@workspace/ui/components/input';
import { Markdown } from '@workspace/ui/custom-components/markdown'; import { Markdown } from '@workspace/ui/custom-components/markdown';
import { useCountDown } from 'ahooks';
import { useTranslations } from 'next-intl'; import { useTranslations } from 'next-intl';
import { Dispatch, SetStateAction, useState } from 'react'; import { Dispatch, SetStateAction } from 'react';
import { useForm } from 'react-hook-form'; import { useForm } from 'react-hook-form';
import { z } from 'zod'; import { z } from 'zod';
import CloudFlareTurnstile from './turnstile'; import SendCode from '../send-code';
import CloudFlareTurnstile from '../turnstile';
export default function UserRegisterForm({ export default function RegisterForm({
loading, loading,
onSubmit, onSubmit,
initialValues, initialValues,
@ -24,33 +23,36 @@ export default function UserRegisterForm({
onSubmit: (data: any) => void; onSubmit: (data: any) => void;
initialValues: any; initialValues: any;
setInitialValues: Dispatch<SetStateAction<any>>; setInitialValues: Dispatch<SetStateAction<any>>;
onSwitchForm: (type?: 'register' | 'reset') => void; onSwitchForm: Dispatch<SetStateAction<'register' | 'reset' | 'login'>>;
}) { }) {
const t = useTranslations('auth.register'); const t = useTranslations('auth.register');
const { common } = useGlobalStore(); const { common } = useGlobalStore();
const { verify, register, invite } = common; const { verify, auth, invite } = common;
const [targetDate, setTargetDate] = useState<number>(); const handleCheckUser = async (email: string) => {
const [, { seconds }] = useCountDown({ try {
targetDate, const domain = email.split('@')[1];
onEnd: () => { const isValid =
setTargetDate(undefined); !auth.email.email_enable_verify ||
}, auth.email?.email_domain_suffix_list.split('\n').includes(domain || '');
}); return !isValid;
const handleSendCode = async () => { } catch (error) {
await sendEmailCode({ console.log('Error checking user:', error);
email: initialValues.email, return false;
type: 1, }
});
setTargetDate(Date.now() + 60000);
}; };
const formSchema = z const formSchema = z
.object({ .object({
email: z.string(), email: z
.string()
.email(t('email'))
.refine(handleCheckUser, {
message: t('whitelist'),
}),
password: z.string(), password: z.string(),
repeat_password: z.string(), repeat_password: z.string(),
code: register.enable_email_verify ? z.string() : z.string().nullish(), code: auth.email.email_enable_verify ? z.string() : z.string().nullish(),
invite: invite.forced_invite ? z.string() : z.string().nullish(), invite: invite.forced_invite ? z.string() : z.string().nullish(),
cf_token: cf_token:
verify.enable_register_verify && verify.turnstile_site_key verify.enable_register_verify && verify.turnstile_site_key
@ -66,17 +68,18 @@ export default function UserRegisterForm({
}); });
} }
}); });
const form = useForm<z.infer<typeof formSchema>>({ const form = useForm<z.infer<typeof formSchema>>({
resolver: zodResolver(formSchema), resolver: zodResolver(formSchema),
defaultValues: { defaultValues: {
...initialValues, ...initialValues,
invite: sessionStorage.getItem('invite'), invite: localStorage.getItem('invite') || '',
}, },
}); });
return ( return (
<> <>
{register.stop_register ? ( {auth.register.stop_register ? (
<Markdown>{t('message')}</Markdown> <Markdown>{t('message')}</Markdown>
) : ( ) : (
<Form {...form}> <Form {...form}>
@ -87,7 +90,7 @@ export default function UserRegisterForm({
render={({ field }) => ( render={({ field }) => (
<FormItem> <FormItem>
<FormControl> <FormControl>
<Input disabled placeholder='Enter your email...' type='email' {...field} /> <Input placeholder='Enter your email...' type='email' {...field} />
</FormControl> </FormControl>
<FormMessage /> <FormMessage />
</FormItem> </FormItem>
@ -127,7 +130,7 @@ export default function UserRegisterForm({
</FormItem> </FormItem>
)} )}
/> />
{register.enable_email_verify && ( {auth.email.email_enable_verify && (
<FormField <FormField
control={form.control} control={form.control}
name='code' name='code'
@ -142,9 +145,13 @@ export default function UserRegisterForm({
{...field} {...field}
value={field.value as string} value={field.value as string}
/> />
<Button type='button' onClick={handleSendCode} disabled={seconds > 0}> <SendCode
{seconds > 0 ? `${seconds}s` : t('get')} type='email'
</Button> params={{
...form.getValues(),
type: 1,
}}
/>
</div> </div>
</FormControl> </FormControl>
<FormMessage /> <FormMessage />
@ -159,7 +166,7 @@ export default function UserRegisterForm({
<FormItem> <FormItem>
<FormControl> <FormControl>
<Input <Input
disabled={loading} disabled={loading || !!localStorage.getItem('invite')}
placeholder={t('invite')} placeholder={t('invite')}
{...field} {...field}
value={field.value || ''} value={field.value || ''}
@ -191,13 +198,13 @@ export default function UserRegisterForm({
</Form> </Form>
)} )}
<div className='mt-4 text-right text-sm'> <div className='mt-4 text-right text-sm'>
{t('existingAccount')} {t('existingAccount')}&nbsp;
<Button <Button
variant='link' variant='link'
className='p-0' className='p-0'
onClick={() => { onClick={() => {
setInitialValues(undefined); setInitialValues(undefined);
onSwitchForm(undefined); onSwitchForm('login');
}} }}
> >
{t('switchToLogin')} {t('switchToLogin')}

View File

@ -1,18 +1,17 @@
import useGlobalStore from '@/config/use-global'; import useGlobalStore from '@/config/use-global';
import { sendEmailCode } from '@/services/common/common';
import { zodResolver } from '@hookform/resolvers/zod'; import { zodResolver } from '@hookform/resolvers/zod';
import { Icon } from '@iconify/react'; import { Icon } from '@iconify/react/dist/iconify.js';
import { Button } from '@workspace/ui/components/button'; import { Button } from '@workspace/ui/components/button';
import { Form, FormControl, FormField, FormItem, FormMessage } from '@workspace/ui/components/form'; import { Form, FormControl, FormField, FormItem, FormMessage } from '@workspace/ui/components/form';
import { Input } from '@workspace/ui/components/input'; import { Input } from '@workspace/ui/components/input';
import { useCountDown } from 'ahooks';
import { useTranslations } from 'next-intl'; import { useTranslations } from 'next-intl';
import { Dispatch, SetStateAction, useState } from 'react'; import { Dispatch, SetStateAction } from 'react';
import { useForm } from 'react-hook-form'; import { useForm } from 'react-hook-form';
import { z } from 'zod'; import { z } from 'zod';
import CloudFlareTurnstile from './turnstile'; import SendCode from '../send-code';
import CloudFlareTurnstile from '../turnstile';
export default function UserResetForm({ export default function ResetForm({
loading, loading,
onSubmit, onSubmit,
initialValues, initialValues,
@ -23,32 +22,17 @@ export default function UserResetForm({
onSubmit: (data: any) => void; onSubmit: (data: any) => void;
initialValues: any; initialValues: any;
setInitialValues: Dispatch<SetStateAction<any>>; setInitialValues: Dispatch<SetStateAction<any>>;
onSwitchForm: (type?: 'register' | 'reset') => void; onSwitchForm: Dispatch<SetStateAction<'register' | 'reset' | 'login'>>;
}) { }) {
const t = useTranslations('auth.reset'); const t = useTranslations('auth.reset');
const { common } = useGlobalStore(); const { common } = useGlobalStore();
const { verify, register } = common; const { verify, auth } = common;
const [targetDate, setTargetDate] = useState<number>();
const [, { seconds }] = useCountDown({
targetDate,
onEnd: () => {
setTargetDate(undefined);
},
});
const handleSendCode = async () => {
await sendEmailCode({
email: initialValues.email,
type: 2,
});
setTargetDate(Date.now() + 60000); // 60秒倒计时
};
const formSchema = z.object({ const formSchema = z.object({
email: z.string(), email: z.string().email(t('email')),
password: z.string(), password: z.string(),
code: register.enable_email_verify ? z.string() : z.string().nullish(), code: auth?.email?.email_enable_verify ? z.string() : z.string().nullish(),
cf_token: cf_token:
verify.enable_register_verify && verify.turnstile_site_key verify.enable_register_verify && verify.turnstile_site_key
? z.string() ? z.string()
@ -69,7 +53,7 @@ export default function UserResetForm({
render={({ field }) => ( render={({ field }) => (
<FormItem> <FormItem>
<FormControl> <FormControl>
<Input disabled placeholder='Enter your email...' type='email' {...field} /> <Input placeholder='Enter your email...' type='email' {...field} />
</FormControl> </FormControl>
<FormMessage /> <FormMessage />
</FormItem> </FormItem>
@ -93,7 +77,7 @@ export default function UserResetForm({
)} )}
/> />
{register.enable_email_verify && ( {auth?.email?.email_enable_verify && (
<FormField <FormField
control={form.control} control={form.control}
name='code' name='code'
@ -108,9 +92,13 @@ export default function UserResetForm({
{...field} {...field}
value={field.value as string} value={field.value as string}
/> />
<Button type='button' onClick={handleSendCode} disabled={seconds > 0}> <SendCode
{seconds > 0 ? `${seconds}s` : t('get')} type='email'
</Button> params={{
...form.getValues(),
type: 2,
}}
/>
</div> </div>
</FormControl> </FormControl>
<FormMessage /> <FormMessage />
@ -139,13 +127,13 @@ export default function UserResetForm({
</form> </form>
</Form> </Form>
<div className='mt-4 text-right text-sm'> <div className='mt-4 text-right text-sm'>
{t('existingAccount')} {t('existingAccount')}&nbsp;
<Button <Button
variant='link' variant='link'
className='p-0' className='p-0'
onClick={() => { onClick={() => {
setInitialValues(undefined); setInitialValues(undefined);
onSwitchForm(undefined); onSwitchForm('login');
}} }}
> >
{t('switchToLogin')} {t('switchToLogin')}

View File

@ -8,7 +8,7 @@ import LoginLottie from '@workspace/ui/lotties/login.json';
import { useTranslations } from 'next-intl'; import { useTranslations } from 'next-intl';
import Image from 'next/legacy/image'; import Image from 'next/legacy/image';
import Link from 'next/link'; import Link from 'next/link';
import UserAuthForm from './user-auth-form'; import EmailAuthForm from './email/auth-form';
export default function Page() { export default function Page() {
const t = useTranslations('auth'); const t = useTranslations('auth');
@ -45,7 +45,7 @@ export default function Page() {
<div className='lg:bg-background flex flex-col items-center rounded-2xl md:w-[600px] lg:flex-auto lg:p-10 lg:shadow'> <div className='lg:bg-background flex flex-col items-center rounded-2xl md:w-[600px] lg:flex-auto lg:p-10 lg:shadow'>
<div className='flex flex-col items-stretch justify-center md:w-[400px] lg:h-full'> <div className='flex flex-col items-stretch justify-center md:w-[400px] lg:h-full'>
<div className='flex flex-col justify-center pb-14 lg:flex-auto lg:pb-20'> <div className='flex flex-col justify-center pb-14 lg:flex-auto lg:pb-20'>
<UserAuthForm /> <EmailAuthForm />
</div> </div>
<div className='flex items-center justify-end'> <div className='flex items-center justify-end'>
{/* <div className='text-primary flex gap-5 text-sm font-semibold'> {/* <div className='text-primary flex gap-5 text-sm font-semibold'>

View File

@ -0,0 +1,65 @@
'use client';
import { sendEmailCode, sendSmsCode } from '@/services/common/common';
import { Button } from '@workspace/ui/components/button';
import { useCountDown } from 'ahooks';
import { useTranslations } from 'next-intl';
import { useState } from 'react';
interface SendCodeProps {
type: 'email' | 'phone';
params: {
email?: string;
type?: 1 | 2;
telephone_area_code?: string;
telephone?: string;
};
}
export default function SendCode({ type, params }: SendCodeProps) {
const t = useTranslations('auth');
const [targetDate, setTargetDate] = useState<number>();
const [, { seconds }] = useCountDown({
targetDate,
onEnd: () => {
setTargetDate(undefined);
},
});
const getEmailCode = async () => {
if (params.email && params.type) {
await sendEmailCode({
email: params.email,
type: params.type,
});
setTargetDate(Date.now() + 60000);
}
};
const getPhoneCode = async () => {
if (params.telephone && params.telephone_area_code) {
await sendSmsCode({
telephone: params.telephone,
telephone_area_code: params.telephone_area_code,
});
setTargetDate(Date.now() + 60000);
}
};
const handleSendCode = async () => {
if (type === 'email') {
getEmailCode();
} else {
getPhoneCode();
}
};
const disabled =
seconds > 0 ||
(type === 'email' ? !params.email : !params.telephone || !params.telephone_area_code);
return (
<Button type='button' onClick={handleSendCode} disabled={disabled}>
{seconds > 0 ? `${seconds}s` : t('get')}
</Button>
);
}

View File

@ -1,100 +0,0 @@
import { zodResolver } from '@hookform/resolvers/zod';
import { Icon } from '@iconify/react';
import { Button } from '@workspace/ui/components/button';
import { Form, FormControl, FormField, FormItem, FormMessage } from '@workspace/ui/components/form';
import { Input } from '@workspace/ui/components/input';
import { useTranslations } from 'next-intl';
import { useEffect, useRef, useState } from 'react';
import { useForm } from 'react-hook-form';
import { z } from 'zod';
interface UserCheckFormProps {
loading?: boolean;
onSubmit: (data: any) => void;
initialValues: any;
}
export default function UserCheckForm({
loading,
onSubmit,
initialValues,
}: Readonly<UserCheckFormProps>) {
const t = useTranslations('auth.check');
const formSchema = z.object({
email: z.string().email(t('email')),
});
const form = useForm<z.infer<typeof formSchema>>({
resolver: zodResolver(formSchema),
defaultValues: initialValues,
});
const [isSubmitting, setIsSubmitting] = useState(false);
const typingTimeoutRef = useRef<NodeJS.Timeout | null>(null);
const handleEmailChange = (value: string) => {
form.setValue('email', value);
if (typingTimeoutRef.current) {
clearTimeout(typingTimeoutRef.current);
}
typingTimeoutRef.current = setTimeout(async () => {
const isValid = await form.trigger('email');
if (isValid) {
setIsSubmitting(true);
form.handleSubmit(onSubmit)();
} else {
setIsSubmitting(false);
}
}, 500);
};
useEffect(() => {
if (initialValues?.email) {
handleEmailChange(initialValues.email);
}
return () => {
if (typingTimeoutRef.current) {
clearTimeout(typingTimeoutRef.current);
}
};
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
return (
<Form {...form}>
<form onSubmit={form.handleSubmit(onSubmit)} className='grid gap-6'>
<FormField
control={form.control}
name='email'
render={({ field }) => (
<FormItem>
<FormControl>
<Input
disabled={loading}
placeholder='Enter your email...'
type='email'
{...field}
onChange={(e) => handleEmailChange(e.target.value)}
/>
</FormControl>
<FormMessage />
</FormItem>
)}
/>
<Button type='submit' disabled={!isSubmitting}>
{isSubmitting ? (
<>
<Icon icon='mdi:loading' className='mr-2 size-5 animate-spin' />
{t('checking')}
</>
) : (
t('continue')
)}
</Button>
</form>
</Form>
);
}

View File

@ -93,7 +93,12 @@ export default async function RootLayout({
user = await currentUser({ user = await currentUser({
skipErrorHandler: true, skipErrorHandler: true,
Authorization, Authorization,
}).then((res) => res.data.data); }).then((res) => {
if (res.data.data?.is_admin) {
return res.data.data;
}
return undefined;
});
} catch (error) { } catch (error) {
console.log('Error fetching current user:', error); console.log('Error fetching current user:', error);
} }

View File

@ -4,20 +4,27 @@
"continue": "Pokračovat", "continue": "Pokračovat",
"description": "Zadejte svůj e-mail pro pokračování v přihlášení nebo registraci.", "description": "Zadejte svůj e-mail pro pokračování v přihlášení nebo registraci.",
"email": "Zadejte platnou e-mailovou adresu.", "email": "Zadejte platnou e-mailovou adresu.",
"title": "Přihlášení/Registrace", "title": "Přihlášení/Registrace"
"whitelist": "Doména e-mailu není na povoleném seznamu."
}, },
"get": "Získat",
"login": { "login": {
"codeLogin": "Přihlášení pomocí ověřovacího kódu",
"description": "Zadejte prosím své přihlašovací údaje pro přihlášení.", "description": "Zadejte prosím své přihlašovací údaje pro přihlášení.",
"email": "Zadejte platnou e-mailovou adresu.",
"forgotPassword": "Zapomněli jste heslo?", "forgotPassword": "Zapomněli jste heslo?",
"passwordLogin": "Přihlášení pomocí hesla",
"registerAccount": "Registrace účtu",
"success": "Přihlášení bylo úspěšné!", "success": "Přihlášení bylo úspěšné!",
"switchAccount": "Registrace/Přepnout účet",
"title": "Přihlášení" "title": "Přihlášení"
}, },
"logout": "Odhlásit se", "methods": {
"email": "E-mail",
"sms": "Telefon"
},
"orWithEmail": "nebo pomocí e-mailu", "orWithEmail": "nebo pomocí e-mailu",
"register": { "register": {
"description": "Vytvořte si nový účet, vyplňte své údaje pro registraci.", "description": "Vytvořte si nový účet, vyplňte své údaje pro registraci.",
"email": "Zadejte platnou e-mailovou adresu.",
"existingAccount": "Již máte účet?", "existingAccount": "Již máte účet?",
"get": "Získat", "get": "Získat",
"invite": "Pozvánkový kód", "invite": "Pozvánkový kód",
@ -25,15 +32,19 @@
"passwordMismatch": "Hesla se neshodují", "passwordMismatch": "Hesla se neshodují",
"success": "Registrace úspěšná, automaticky přihlášeno!", "success": "Registrace úspěšná, automaticky přihlášeno!",
"switchToLogin": "Přihlásit se/Obnovit e-mail", "switchToLogin": "Přihlásit se/Obnovit e-mail",
"title": "Registrace" "title": "Registrace",
"whitelist": "Doména e-mailu není na povoleném seznamu."
}, },
"reset": { "reset": {
"description": "Zadejte svou e-mailovou adresu pro obnovení hesla.", "description": "Zadejte svou e-mailovou adresu pro obnovení hesla.",
"email": "Zadejte prosím platnou e-mailovou adresu.",
"existingAccount": "Máte již účet?", "existingAccount": "Máte již účet?",
"get": "Získat", "get": "Získat",
"success": "Obnovení hesla bylo úspěšné, automaticky přepnuto na přihlášení!", "success": "Obnovení hesla bylo úspěšné, automaticky přepnuto na přihlášení!",
"switchToLogin": "Přihlášení/Registrace", "switchToLogin": "Přihlášení/Registrace",
"title": "Obnovení hesla" "title": "Obnovení hesla"
}, },
"tos": "Podmínky služby" "tos": "Podmínky služby",
"verifyAccount": "Ověření účtu",
"verifyAccountDesc": "Prosím, ověřte svůj účet, abyste mohli pokračovat."
} }

View File

@ -4,20 +4,27 @@
"continue": "Fortfahren", "continue": "Fortfahren",
"description": "Bitte geben Sie Ihre E-Mail-Adresse ein, um sich anzumelden oder zu registrieren.", "description": "Bitte geben Sie Ihre E-Mail-Adresse ein, um sich anzumelden oder zu registrieren.",
"email": "Bitte geben Sie eine gültige E-Mail-Adresse ein.", "email": "Bitte geben Sie eine gültige E-Mail-Adresse ein.",
"title": "Anmelden/Registrieren", "title": "Anmelden/Registrieren"
"whitelist": "Die E-Mail-Domain befindet sich nicht auf der zugelassenen Whitelist."
}, },
"get": "Holen",
"login": { "login": {
"codeLogin": "Anmeldung mit Bestätigungscode",
"description": "Bitte geben Sie Ihre Kontoinformationen ein, um sich anzumelden.", "description": "Bitte geben Sie Ihre Kontoinformationen ein, um sich anzumelden.",
"email": "Bitte geben Sie eine gültige E-Mail-Adresse ein.",
"forgotPassword": "Passwort vergessen?", "forgotPassword": "Passwort vergessen?",
"passwordLogin": "Anmeldung mit Passwort",
"registerAccount": "Konto registrieren",
"success": "Erfolgreich eingeloggt!", "success": "Erfolgreich eingeloggt!",
"switchAccount": "Registrieren/Konto wechseln",
"title": "Anmeldung" "title": "Anmeldung"
}, },
"logout": "Abmelden", "methods": {
"email": "E-Mail",
"sms": "Telefon"
},
"orWithEmail": "oder mit E-Mail", "orWithEmail": "oder mit E-Mail",
"register": { "register": {
"description": "Erstellen Sie ein neues Konto, indem Sie Ihre Informationen ausfüllen, um sich zu registrieren.", "description": "Erstellen Sie ein neues Konto, indem Sie Ihre Informationen ausfüllen, um sich zu registrieren.",
"email": "Bitte geben Sie eine gültige E-Mail-Adresse ein.",
"existingAccount": "Bereits ein Konto?", "existingAccount": "Bereits ein Konto?",
"get": "Erhalten", "get": "Erhalten",
"invite": "Einladungscode", "invite": "Einladungscode",
@ -25,15 +32,19 @@
"passwordMismatch": "Die eingegebenen Passwörter stimmen nicht überein", "passwordMismatch": "Die eingegebenen Passwörter stimmen nicht überein",
"success": "Registrierung erfolgreich, Sie sind automatisch eingeloggt!", "success": "Registrierung erfolgreich, Sie sind automatisch eingeloggt!",
"switchToLogin": "Anmelden/E-Mail zurücksetzen", "switchToLogin": "Anmelden/E-Mail zurücksetzen",
"title": "Registrieren" "title": "Registrieren",
"whitelist": "Die E-Mail-Domain befindet sich nicht in der erlaubten Whitelist."
}, },
"reset": { "reset": {
"description": "Bitte geben Sie Ihre E-Mail-Adresse ein, um das Passwort zurückzusetzen.", "description": "Bitte geben Sie Ihre E-Mail-Adresse ein, um das Passwort zurückzusetzen.",
"email": "Bitte geben Sie eine gültige E-Mail-Adresse ein.",
"existingAccount": "Bereits ein Konto?", "existingAccount": "Bereits ein Konto?",
"get": "Erhalten", "get": "Erhalten",
"success": "Passwort erfolgreich zurückgesetzt, automatisch zum Login gewechselt!", "success": "Passwort erfolgreich zurückgesetzt, automatisch zum Login gewechselt!",
"switchToLogin": "Anmelden/Registrieren", "switchToLogin": "Anmelden/Registrieren",
"title": "Passwort zurücksetzen" "title": "Passwort zurücksetzen"
}, },
"tos": "Nutzungsbedingungen" "tos": "Nutzungsbedingungen",
"verifyAccount": "Kontoverifizierung",
"verifyAccountDesc": "Bitte verifizieren Sie Ihr Konto, um fortzufahren."
} }

View File

@ -4,36 +4,47 @@
"continue": "Continue", "continue": "Continue",
"description": "Please enter your email to continue logging in or registering.", "description": "Please enter your email to continue logging in or registering.",
"email": "Please enter a valid email address.", "email": "Please enter a valid email address.",
"title": "Login/Register", "title": "Login/Register"
"whitelist": "The email domain is not in the allowed whitelist."
}, },
"get": "Get",
"login": { "login": {
"codeLogin": "Verification Code Login",
"description": "Please enter your account information to log in.", "description": "Please enter your account information to log in.",
"email": "Please enter a valid email address.",
"forgotPassword": "Forgot Password?", "forgotPassword": "Forgot Password?",
"passwordLogin": "Password Login",
"registerAccount": "Register Account",
"success": "Login successful!", "success": "Login successful!",
"switchAccount": "Register/Switch Account",
"title": "Login" "title": "Login"
}, },
"logout": "Logout", "methods": {
"email": "Email",
"sms": "Telephone"
},
"orWithEmail": "Or with Email", "orWithEmail": "Or with Email",
"register": { "register": {
"description": "Create a new account, fill in your information to register.", "description": "Create a new account, fill in your information to register.",
"email": "Please enter a valid email address.",
"existingAccount": "Already have an account?", "existingAccount": "Already have an account?",
"get": "Get", "get": "Get",
"invite": "Invitation code", "invite": "Invitation code",
"message": "#### Dear User, Hello!\n\nThank you for your attention and support. Due to adjustments in site operation strategy, we have closed the new user registration function. During this period, existing users will not be affected.\n\nWe are committed to providing you with better service and experience, so we will conduct comprehensive system optimization and feature upgrades during the registration closure. In the future, we will welcome you with better content and services.\n\nPlease follow our website and social media platforms to get the latest updates and notifications. Thank you for your understanding and support.\n\nIf you have any questions or need assistance, please feel free to contact our customer service team.\n\n**Thank you again for your support and understanding.**", "message": "#### Dear User, Hello!\n\nThank you for your attention and support. Due to adjustments in site operation strategy, we have closed the new user registration function. During this period, existing users will not be affected.\n\nWe are committed to providing you with better service and experience, so we will conduct comprehensive system optimization and feature upgrades during the registration closure. In the future, we will welcome you with better content and services.\n\nPlease follow our website and social media platforms to get the latest updates and notifications. Thank you for your understanding and support.\n\nIf you have any questions or need assistance, please feel free to contact our customer service team.\n\n**Thank you again for your support and understanding.**",
"passwordMismatch": "Passwords do not match", "passwordMismatch": "Passwords do not match",
"success": "Registration successful, automatically logged in!", "success": "Registration successful, automatically logged in!",
"switchToLogin": "Login/Reset Email", "switchToLogin": "Login",
"title": "Register" "title": "Register",
"whitelist": "The email domain is not in the allowed whitelist."
}, },
"reset": { "reset": {
"description": "Please enter your email address to reset your password.", "description": "Please enter your email address to reset your password.",
"email": "Please enter a valid email address.",
"existingAccount": "Already have an account?", "existingAccount": "Already have an account?",
"get": "Get", "get": "Get",
"success": "Password reset successful, automatically switched to login!", "success": "Password reset successful, automatically switched to login!",
"switchToLogin": "Login/Register", "switchToLogin": "Login/Register",
"title": "Reset Password" "title": "Reset Password"
}, },
"tos": "Terms of Service" "tos": "Terms of Service",
"verifyAccount": "Account Verification",
"verifyAccountDesc": " Please verify your account to continue."
} }

View File

@ -4,20 +4,27 @@
"continue": "Continuar", "continue": "Continuar",
"description": "Por favor, introduce tu correo electrónico para continuar con el inicio de sesión o registro.", "description": "Por favor, introduce tu correo electrónico para continuar con el inicio de sesión o registro.",
"email": "Por favor, introduce una dirección de correo electrónico válida.", "email": "Por favor, introduce una dirección de correo electrónico válida.",
"title": "Iniciar sesión/Registrarse", "title": "Iniciar sesión/Registrarse"
"whitelist": "El dominio del correo electrónico no está en la lista blanca permitida."
}, },
"get": "Obtener",
"login": { "login": {
"codeLogin": "Inicio de sesión con código de verificación",
"description": "Por favor, introduzca su información de cuenta para iniciar sesión.", "description": "Por favor, introduzca su información de cuenta para iniciar sesión.",
"email": "Por favor, introduce una dirección de correo electrónico válida.",
"forgotPassword": "¿Olvidó su contraseña?", "forgotPassword": "¿Olvidó su contraseña?",
"passwordLogin": "Inicio de sesión con contraseña",
"registerAccount": "Registrar cuenta",
"success": "¡Inicio de sesión exitoso!", "success": "¡Inicio de sesión exitoso!",
"switchAccount": "Registrar/Cambiar cuenta",
"title": "Iniciar sesión" "title": "Iniciar sesión"
}, },
"logout": "Cerrar sesión", "methods": {
"email": "Correo electrónico",
"sms": "Teléfono"
},
"orWithEmail": "o con correo electrónico", "orWithEmail": "o con correo electrónico",
"register": { "register": {
"description": "Crea una nueva cuenta, completa tu información para registrarte.", "description": "Crea una nueva cuenta, completa tu información para registrarte.",
"email": "Por favor, introduce una dirección de correo electrónico válida.",
"existingAccount": "¿Ya tienes una cuenta?", "existingAccount": "¿Ya tienes una cuenta?",
"get": "Obtener", "get": "Obtener",
"invite": "Código de invitación", "invite": "Código de invitación",
@ -25,15 +32,19 @@
"passwordMismatch": "Las contraseñas no coinciden", "passwordMismatch": "Las contraseñas no coinciden",
"success": "¡Registro exitoso, sesión iniciada automáticamente!", "success": "¡Registro exitoso, sesión iniciada automáticamente!",
"switchToLogin": "Iniciar sesión/restablecer correo electrónico", "switchToLogin": "Iniciar sesión/restablecer correo electrónico",
"title": "Registro" "title": "Registro",
"whitelist": "El dominio del correo electrónico no está en la lista blanca permitida."
}, },
"reset": { "reset": {
"description": "Por favor, introduzca su dirección de correo electrónico para restablecer la contraseña.", "description": "Por favor, introduzca su dirección de correo electrónico para restablecer la contraseña.",
"email": "Por favor, introduce una dirección de correo electrónico válida.",
"existingAccount": "¿Ya tienes una cuenta?", "existingAccount": "¿Ya tienes una cuenta?",
"get": "Obtener", "get": "Obtener",
"success": "¡Contraseña restablecida con éxito, se ha cambiado automáticamente a iniciar sesión!", "success": "¡Contraseña restablecida con éxito, se ha cambiado automáticamente a iniciar sesión!",
"switchToLogin": "Iniciar sesión/Registrarse", "switchToLogin": "Iniciar sesión/Registrarse",
"title": "Restablecer contraseña" "title": "Restablecer contraseña"
}, },
"tos": "Términos del servicio" "tos": "Términos del servicio",
"verifyAccount": "Verificación de Cuenta",
"verifyAccountDesc": "Por favor, verifica tu cuenta para continuar."
} }

View File

@ -4,20 +4,27 @@
"continue": "Continuar", "continue": "Continuar",
"description": "Por favor, ingresa tu correo electrónico para continuar con el inicio de sesión o registro.", "description": "Por favor, ingresa tu correo electrónico para continuar con el inicio de sesión o registro.",
"email": "Por favor, ingresa una dirección de correo electrónico válida.", "email": "Por favor, ingresa una dirección de correo electrónico válida.",
"title": "Iniciar sesión/Registrarse", "title": "Iniciar sesión/Registrarse"
"whitelist": "El dominio del correo electrónico no está en la lista blanca permitida."
}, },
"get": "Obtener",
"login": { "login": {
"codeLogin": "Inicio de sesión con código de verificación",
"description": "Por favor, ingrese su información de cuenta para iniciar sesión.", "description": "Por favor, ingrese su información de cuenta para iniciar sesión.",
"email": "Por favor, ingresa una dirección de correo electrónico válida.",
"forgotPassword": "¿Olvidó su contraseña?", "forgotPassword": "¿Olvidó su contraseña?",
"passwordLogin": "Inicio de sesión con contraseña",
"registerAccount": "Registrar cuenta",
"success": "¡Inicio de sesión exitoso!", "success": "¡Inicio de sesión exitoso!",
"switchAccount": "Registrar/Cambiar cuenta",
"title": "Iniciar sesión" "title": "Iniciar sesión"
}, },
"logout": "Cerrar sesión", "methods": {
"email": "Correo electrónico",
"sms": "Teléfono"
},
"orWithEmail": "o usa correo electrónico", "orWithEmail": "o usa correo electrónico",
"register": { "register": {
"description": "Crea una nueva cuenta, completa tu información para registrarte.", "description": "Crea una nueva cuenta, completa tu información para registrarte.",
"email": "Por favor, ingresa una dirección de correo electrónico válida.",
"existingAccount": "¿Ya tienes una cuenta?", "existingAccount": "¿Ya tienes una cuenta?",
"get": "Obtener", "get": "Obtener",
"invite": "Código de invitación", "invite": "Código de invitación",
@ -25,15 +32,19 @@
"passwordMismatch": "Las contraseñas no coinciden", "passwordMismatch": "Las contraseñas no coinciden",
"success": "¡Registro exitoso, has iniciado sesión automáticamente!", "success": "¡Registro exitoso, has iniciado sesión automáticamente!",
"switchToLogin": "Iniciar sesión/restablecer correo electrónico", "switchToLogin": "Iniciar sesión/restablecer correo electrónico",
"title": "Registro" "title": "Registro",
"whitelist": "El dominio del correo electrónico no está en la lista blanca permitida."
}, },
"reset": { "reset": {
"description": "Ingrese su dirección de correo electrónico para restablecer la contraseña.", "description": "Ingrese su dirección de correo electrónico para restablecer la contraseña.",
"email": "Por favor, ingresa una dirección de correo electrónico válida.",
"existingAccount": "¿Ya tienes una cuenta?", "existingAccount": "¿Ya tienes una cuenta?",
"get": "Obtener", "get": "Obtener",
"success": "¡Contraseña restablecida con éxito, se ha cambiado automáticamente a iniciar sesión!", "success": "¡Contraseña restablecida con éxito, se ha cambiado automáticamente a iniciar sesión!",
"switchToLogin": "Iniciar sesión/Registrarse", "switchToLogin": "Iniciar sesión/Registrarse",
"title": "Restablecer contraseña" "title": "Restablecer contraseña"
}, },
"tos": "Términos del servicio" "tos": "Términos del servicio",
"verifyAccount": "Verificación de Cuenta",
"verifyAccountDesc": "Por favor, verifica tu cuenta para continuar."
} }

View File

@ -4,20 +4,27 @@
"continue": "ادامه", "continue": "ادامه",
"description": "لطفاً برای ادامه ورود یا ثبت‌نام، ایمیل خود را وارد کنید.", "description": "لطفاً برای ادامه ورود یا ثبت‌نام، ایمیل خود را وارد کنید.",
"email": "لطفاً یک آدرس ایمیل معتبر وارد کنید.", "email": "لطفاً یک آدرس ایمیل معتبر وارد کنید.",
"title": "ورود/ثبت‌نام", "title": "ورود/ثبت‌نام"
"whitelist": "دامنه ایمیل در لیست مجاز نیست."
}, },
"get": "گرفتن",
"login": { "login": {
"codeLogin": "ورود با کد تأیید",
"description": "لطفاً اطلاعات حساب خود را برای ورود وارد کنید.", "description": "لطفاً اطلاعات حساب خود را برای ورود وارد کنید.",
"email": "لطفاً یک آدرس ایمیل معتبر وارد کنید.",
"forgotPassword": "رمز عبور را فراموش کرده‌اید؟", "forgotPassword": "رمز عبور را فراموش کرده‌اید؟",
"passwordLogin": "ورود با رمز عبور",
"registerAccount": "ثبت‌نام حساب",
"success": "ورود موفقیت‌آمیز بود!", "success": "ورود موفقیت‌آمیز بود!",
"switchAccount": "ثبت‌نام/تغییر حساب",
"title": "ورود" "title": "ورود"
}, },
"logout": "خروج", "methods": {
"email": "ایمیل",
"sms": "تلفن"
},
"orWithEmail": "یا با ایمیل", "orWithEmail": "یا با ایمیل",
"register": { "register": {
"description": "ایجاد یک حساب کاربری جدید، اطلاعات خود را برای ثبت‌نام وارد کنید.", "description": "ایجاد یک حساب کاربری جدید، اطلاعات خود را برای ثبت‌نام وارد کنید.",
"email": "لطفاً یک آدرس ایمیل معتبر وارد کنید.",
"existingAccount": "آیا قبلاً حساب کاربری دارید؟", "existingAccount": "آیا قبلاً حساب کاربری دارید؟",
"get": "دریافت", "get": "دریافت",
"invite": "کد دعوت", "invite": "کد دعوت",
@ -25,15 +32,19 @@
"passwordMismatch": "رمزهای عبور مطابقت ندارند", "passwordMismatch": "رمزهای عبور مطابقت ندارند",
"success": "ثبت‌نام موفقیت‌آمیز بود، به‌طور خودکار وارد شدید!", "success": "ثبت‌نام موفقیت‌آمیز بود، به‌طور خودکار وارد شدید!",
"switchToLogin": "ورود/بازنشانی ایمیل", "switchToLogin": "ورود/بازنشانی ایمیل",
"title": "ثبت‌نام" "title": "ثبت‌نام",
"whitelist": "دامنه ایمیل در لیست سفید مجاز نیست."
}, },
"reset": { "reset": {
"description": "لطفاً آدرس ایمیل خود را وارد کنید تا رمز عبور خود را بازنشانی کنید.", "description": "لطفاً آدرس ایمیل خود را وارد کنید تا رمز عبور خود را بازنشانی کنید.",
"email": "لطفاً یک آدرس ایمیل معتبر وارد کنید.",
"existingAccount": "آیا قبلاً حساب کاربری دارید؟", "existingAccount": "آیا قبلاً حساب کاربری دارید؟",
"get": "دریافت", "get": "دریافت",
"success": "بازنشانی رمز عبور با موفقیت انجام شد، به‌طور خودکار به صفحه ورود منتقل شدید!", "success": "بازنشانی رمز عبور با موفقیت انجام شد، به‌طور خودکار به صفحه ورود منتقل شدید!",
"switchToLogin": "ورود/ثبت‌نام", "switchToLogin": "ورود/ثبت‌نام",
"title": "بازنشانی رمز عبور" "title": "بازنشانی رمز عبور"
}, },
"tos": "شرایط خدمات" "tos": "شرایط خدمات",
"verifyAccount": "تأیید حساب",
"verifyAccountDesc": "لطفاً حساب خود را برای ادامه تأیید کنید."
} }

View File

@ -4,20 +4,27 @@
"continue": "Jatka", "continue": "Jatka",
"description": "Syötä sähköpostiosoitteesi jatkaaksesi kirjautumista tai rekisteröitymistä.", "description": "Syötä sähköpostiosoitteesi jatkaaksesi kirjautumista tai rekisteröitymistä.",
"email": "Anna kelvollinen sähköpostiosoite.", "email": "Anna kelvollinen sähköpostiosoite.",
"title": "Kirjaudu/Rekisteröidy", "title": "Kirjaudu/Rekisteröidy"
"whitelist": "Sähköpostin verkkotunnus ei ole sallitussa luettelossa."
}, },
"get": "Hanki",
"login": { "login": {
"codeLogin": "Vahvistuskoodilla kirjautuminen",
"description": "Ole hyvä ja syötä tilitietosi kirjautuaksesi sisään.", "description": "Ole hyvä ja syötä tilitietosi kirjautuaksesi sisään.",
"email": "Anna kelvollinen sähköpostiosoite.",
"forgotPassword": "Unohditko salasanasi?", "forgotPassword": "Unohditko salasanasi?",
"passwordLogin": "Salasanalla kirjautuminen",
"registerAccount": "Rekisteröi tili",
"success": "Kirjautuminen onnistui!", "success": "Kirjautuminen onnistui!",
"switchAccount": "Rekisteröidy/Vaihda tiliä",
"title": "Kirjaudu sisään" "title": "Kirjaudu sisään"
}, },
"logout": "Kirjaudu ulos", "methods": {
"email": "Sähköposti",
"sms": "Puhelin"
},
"orWithEmail": "tai käytä sähköpostia", "orWithEmail": "tai käytä sähköpostia",
"register": { "register": {
"description": "Luo uusi tili täyttämällä tietosi rekisteröityäksesi.", "description": "Luo uusi tili täyttämällä tietosi rekisteröityäksesi.",
"email": "Anna kelvollinen sähköpostiosoite.",
"existingAccount": "Onko sinulla jo tili?", "existingAccount": "Onko sinulla jo tili?",
"get": "Hanki", "get": "Hanki",
"invite": "Kutsukoodi", "invite": "Kutsukoodi",
@ -25,15 +32,19 @@
"passwordMismatch": "Salasanat eivät täsmää", "passwordMismatch": "Salasanat eivät täsmää",
"success": "Rekisteröinti onnistui, olet kirjautunut automaattisesti!", "success": "Rekisteröinti onnistui, olet kirjautunut automaattisesti!",
"switchToLogin": "Kirjaudu/sähköpostin nollaus", "switchToLogin": "Kirjaudu/sähköpostin nollaus",
"title": "Rekisteröidy" "title": "Rekisteröidy",
"whitelist": "Sähköpostidomain ei ole sallitussa luettelossa."
}, },
"reset": { "reset": {
"description": "Anna sähköpostiosoitteesi salasanan palauttamiseksi.", "description": "Anna sähköpostiosoitteesi salasanan palauttamiseksi.",
"email": "Anna kelvollinen sähköpostiosoite.",
"existingAccount": "Onko sinulla jo tili?", "existingAccount": "Onko sinulla jo tili?",
"get": "Hae", "get": "Hae",
"success": "Salasanan palautus onnistui, siirryttiin automaattisesti kirjautumiseen!", "success": "Salasanan palautus onnistui, siirryttiin automaattisesti kirjautumiseen!",
"switchToLogin": "Kirjaudu/Rekisteröidy", "switchToLogin": "Kirjaudu/Rekisteröidy",
"title": "Palauta salasana" "title": "Palauta salasana"
}, },
"tos": "Käyttöehdot" "tos": "Käyttöehdot",
"verifyAccount": "Tilin vahvistus",
"verifyAccountDesc": "Vahvista tilisi jatkaaksesi."
} }

View File

@ -4,20 +4,27 @@
"continue": "Continuer", "continue": "Continuer",
"description": "Veuillez entrer votre adresse e-mail pour continuer à vous connecter ou à vous inscrire.", "description": "Veuillez entrer votre adresse e-mail pour continuer à vous connecter ou à vous inscrire.",
"email": "Veuillez entrer une adresse e-mail valide.", "email": "Veuillez entrer une adresse e-mail valide.",
"title": "Connexion/Inscription", "title": "Connexion/Inscription"
"whitelist": "Le domaine de l'e-mail n'est pas sur la liste blanche autorisée."
}, },
"get": "Obtenir",
"login": { "login": {
"codeLogin": "Connexion par code de vérification",
"description": "Veuillez entrer vos informations de compte pour vous connecter.", "description": "Veuillez entrer vos informations de compte pour vous connecter.",
"email": "Veuillez entrer une adresse e-mail valide.",
"forgotPassword": "Mot de passe oublié ?", "forgotPassword": "Mot de passe oublié ?",
"passwordLogin": "Connexion par mot de passe",
"registerAccount": "Créer un compte",
"success": "Connexion réussie !", "success": "Connexion réussie !",
"switchAccount": "S'inscrire/Changer de compte",
"title": "Connexion" "title": "Connexion"
}, },
"logout": "Se déconnecter", "methods": {
"email": "E-mail",
"sms": "Téléphone"
},
"orWithEmail": "ou utiliser l'e-mail", "orWithEmail": "ou utiliser l'e-mail",
"register": { "register": {
"description": "Créez un nouveau compte, remplissez vos informations pour vous inscrire.", "description": "Créez un nouveau compte, remplissez vos informations pour vous inscrire.",
"email": "Veuillez entrer une adresse e-mail valide.",
"existingAccount": "Vous avez déjà un compte ?", "existingAccount": "Vous avez déjà un compte ?",
"get": "Obtenir", "get": "Obtenir",
"invite": "Code d'invitation", "invite": "Code d'invitation",
@ -25,15 +32,19 @@
"passwordMismatch": "Les mots de passe saisis ne correspondent pas", "passwordMismatch": "Les mots de passe saisis ne correspondent pas",
"success": "Inscription réussie, vous êtes maintenant connecté automatiquement !", "success": "Inscription réussie, vous êtes maintenant connecté automatiquement !",
"switchToLogin": "Connexion/Réinitialiser l'email", "switchToLogin": "Connexion/Réinitialiser l'email",
"title": "Inscription" "title": "Inscription",
"whitelist": "Le domaine de l'e-mail n'est pas dans la liste blanche autorisée."
}, },
"reset": { "reset": {
"description": "Veuillez entrer votre adresse e-mail pour réinitialiser votre mot de passe.", "description": "Veuillez entrer votre adresse e-mail pour réinitialiser votre mot de passe.",
"email": "Veuillez entrer une adresse e-mail valide.",
"existingAccount": "Vous avez déjà un compte ?", "existingAccount": "Vous avez déjà un compte ?",
"get": "Obtenir", "get": "Obtenir",
"success": "Réinitialisation du mot de passe réussie, vous êtes automatiquement connecté !", "success": "Réinitialisation du mot de passe réussie, vous êtes automatiquement connecté !",
"switchToLogin": "Connexion/Inscription", "switchToLogin": "Connexion/Inscription",
"title": "Réinitialiser le mot de passe" "title": "Réinitialiser le mot de passe"
}, },
"tos": "Conditions de service" "tos": "Conditions de service",
"verifyAccount": "Vérification du compte",
"verifyAccountDesc": "Veuillez vérifier votre compte pour continuer."
} }

View File

@ -4,20 +4,27 @@
"continue": "जारी रखें", "continue": "जारी रखें",
"description": "लॉगिन या पंजीकरण जारी रखने के लिए कृपया अपना ईमेल दर्ज करें।", "description": "लॉगिन या पंजीकरण जारी रखने के लिए कृपया अपना ईमेल दर्ज करें।",
"email": "कृपया एक मान्य ईमेल पता दर्ज करें।", "email": "कृपया एक मान्य ईमेल पता दर्ज करें।",
"title": "लॉगिन/पंजीकरण", "title": "लॉगिन/पंजीकरण"
"whitelist": "ईमेल डोमेन अनुमत श्वेतसूची में नहीं है।"
}, },
"get": "प्राप्त करें",
"login": { "login": {
"codeLogin": "सत्यापन कोड लॉगिन",
"description": "कृपया लॉगिन करने के लिए अपनी खाता जानकारी दर्ज करें।", "description": "कृपया लॉगिन करने के लिए अपनी खाता जानकारी दर्ज करें।",
"email": "कृपया एक मान्य ईमेल पता दर्ज करें।",
"forgotPassword": "पासवर्ड भूल गए?", "forgotPassword": "पासवर्ड भूल गए?",
"passwordLogin": "पासवर्ड लॉगिन",
"registerAccount": "खाता पंजीकरण",
"success": "लॉगिन सफल!", "success": "लॉगिन सफल!",
"switchAccount": "पंजीकरण/खाता बदलें",
"title": "लॉगिन" "title": "लॉगिन"
}, },
"logout": "लॉगआउट", "methods": {
"email": "ईमेल",
"sms": "टेलीफोन"
},
"orWithEmail": "या ईमेल का उपयोग करें", "orWithEmail": "या ईमेल का उपयोग करें",
"register": { "register": {
"description": "नया खाता बनाने के लिए, अपनी जानकारी भरें।", "description": "नया खाता बनाने के लिए, अपनी जानकारी भरें।",
"email": "कृपया एक मान्य ईमेल पता दर्ज करें।",
"existingAccount": "पहले से खाता है?", "existingAccount": "पहले से खाता है?",
"get": "प्राप्त करें", "get": "प्राप्त करें",
"invite": "आमंत्रण कोड", "invite": "आमंत्रण कोड",
@ -25,15 +32,19 @@
"passwordMismatch": "दोनों बार दर्ज किया गया पासवर्ड मेल नहीं खा रहा है", "passwordMismatch": "दोनों बार दर्ज किया गया पासवर्ड मेल नहीं खा रहा है",
"success": "पंजीकरण सफल, स्वचालित रूप से लॉग इन हो गया!", "success": "पंजीकरण सफल, स्वचालित रूप से लॉग इन हो गया!",
"switchToLogin": "लॉगिन/ईमेल रीसेट करें", "switchToLogin": "लॉगिन/ईमेल रीसेट करें",
"title": "पंजीकरण" "title": "पंजीकरण",
"whitelist": "ईमेल डोमेन अनुमत श्वेतसूची में नहीं है।"
}, },
"reset": { "reset": {
"description": "कृपया अपना ईमेल पता दर्ज करें ताकि पासवर्ड रीसेट किया जा सके।", "description": "कृपया अपना ईमेल पता दर्ज करें ताकि पासवर्ड रीसेट किया जा सके।",
"email": "कृपया एक मान्य ईमेल पता दर्ज करें।",
"existingAccount": "पहले से खाता है?", "existingAccount": "पहले से खाता है?",
"get": "प्राप्त करें", "get": "प्राप्त करें",
"success": "पासवर्ड रीसेट सफल, स्वचालित रूप से लॉगिन पर स्विच किया गया!", "success": "पासवर्ड रीसेट सफल, स्वचालित रूप से लॉगिन पर स्विच किया गया!",
"switchToLogin": "लॉगिन/रजिस्टर", "switchToLogin": "लॉगिन/रजिस्टर",
"title": "पासवर्ड रीसेट" "title": "पासवर्ड रीसेट"
}, },
"tos": "सेवा की शर्तें" "tos": "सेवा की शर्तें",
"verifyAccount": "खाता सत्यापन",
"verifyAccountDesc": "कृपया जारी रखने के लिए अपने खाते को सत्यापित करें।"
} }

View File

@ -4,20 +4,27 @@
"continue": "Folytatás", "continue": "Folytatás",
"description": "Kérjük, adja meg e-mail címét a bejelentkezés vagy regisztráció folytatásához.", "description": "Kérjük, adja meg e-mail címét a bejelentkezés vagy regisztráció folytatásához.",
"email": "Kérjük, adjon meg egy érvényes e-mail címet.", "email": "Kérjük, adjon meg egy érvényes e-mail címet.",
"title": "Bejelentkezés/Regisztráció", "title": "Bejelentkezés/Regisztráció"
"whitelist": "Az e-mail domain nem szerepel az engedélyezett listán."
}, },
"get": "Szerezd meg",
"login": { "login": {
"codeLogin": "Ellenőrző kódos bejelentkezés",
"description": "Kérjük, adja meg fiókadatait a bejelentkezéshez.", "description": "Kérjük, adja meg fiókadatait a bejelentkezéshez.",
"email": "Kérjük, adjon meg egy érvényes e-mail címet.",
"forgotPassword": "Elfelejtette a jelszavát?", "forgotPassword": "Elfelejtette a jelszavát?",
"passwordLogin": "Jelszavas bejelentkezés",
"registerAccount": "Fiók regisztrálása",
"success": "Sikeres bejelentkezés!", "success": "Sikeres bejelentkezés!",
"switchAccount": "Regisztráció/Fiók váltása",
"title": "Bejelentkezés" "title": "Bejelentkezés"
}, },
"logout": "Kijelentkezés", "methods": {
"email": "E-mail",
"sms": "Telefon"
},
"orWithEmail": "vagy használja az e-mailt", "orWithEmail": "vagy használja az e-mailt",
"register": { "register": {
"description": "Hozzon létre új fiókot, töltse ki adatait a regisztrációhoz.", "description": "Hozzon létre új fiókot, töltse ki adatait a regisztrációhoz.",
"email": "Kérjük, adjon meg egy érvényes e-mail címet.",
"existingAccount": "Már van fiókja?", "existingAccount": "Már van fiókja?",
"get": "Megkap", "get": "Megkap",
"invite": "Meghívókód", "invite": "Meghívókód",
@ -25,15 +32,19 @@
"passwordMismatch": "A két jelszó nem egyezik meg", "passwordMismatch": "A két jelszó nem egyezik meg",
"success": "Sikeres regisztráció, automatikusan bejelentkezett!", "success": "Sikeres regisztráció, automatikusan bejelentkezett!",
"switchToLogin": "Bejelentkezés/Jelszó visszaállítása", "switchToLogin": "Bejelentkezés/Jelszó visszaállítása",
"title": "Regisztráció" "title": "Regisztráció",
"whitelist": "Az e-mail domain nem szerepel az engedélyezett listán."
}, },
"reset": { "reset": {
"description": "Kérjük, adja meg e-mail címét a jelszó visszaállításához.", "description": "Kérjük, adja meg e-mail címét a jelszó visszaállításához.",
"email": "Kérjük, adjon meg egy érvényes e-mail címet.",
"existingAccount": "Már van fiókja?", "existingAccount": "Már van fiókja?",
"get": "Megkap", "get": "Megkap",
"success": "A jelszó visszaállítása sikeres, automatikusan átváltott a bejelentkezésre!", "success": "A jelszó visszaállítása sikeres, automatikusan átváltott a bejelentkezésre!",
"switchToLogin": "Bejelentkezés/Regisztráció", "switchToLogin": "Bejelentkezés/Regisztráció",
"title": "Jelszó visszaállítása" "title": "Jelszó visszaállítása"
}, },
"tos": "Szolgáltatási feltételek" "tos": "Szolgáltatási feltételek",
"verifyAccount": "Fiókellenőrzés",
"verifyAccountDesc": "Kérjük, igazolja fiókját a folytatáshoz."
} }

View File

@ -4,20 +4,27 @@
"continue": "続ける", "continue": "続ける",
"description": "ログインまたは登録を続行するには、メールアドレスを入力してください。", "description": "ログインまたは登録を続行するには、メールアドレスを入力してください。",
"email": "有効なメールアドレスを入力してください。", "email": "有効なメールアドレスを入力してください。",
"title": "ログイン/登録", "title": "ログイン/登録"
"whitelist": "メールドメインが許可されたホワイトリストにありません。"
}, },
"get": "取得",
"login": { "login": {
"codeLogin": "認証コードでログイン",
"description": "ログインするにはアカウント情報を入力してください。", "description": "ログインするにはアカウント情報を入力してください。",
"email": "有効なメールアドレスを入力してください。",
"forgotPassword": "パスワードをお忘れですか?", "forgotPassword": "パスワードをお忘れですか?",
"passwordLogin": "パスワードでログイン",
"registerAccount": "アカウント登録",
"success": "ログイン成功!", "success": "ログイン成功!",
"switchAccount": "登録/アカウント切り替え",
"title": "ログイン" "title": "ログイン"
}, },
"logout": "ログアウト", "methods": {
"email": "メール",
"sms": "電話"
},
"orWithEmail": "またはメールを使用", "orWithEmail": "またはメールを使用",
"register": { "register": {
"description": "新しいアカウントを作成し、情報を入力して登録してください。", "description": "新しいアカウントを作成し、情報を入力して登録してください。",
"email": "有効なメールアドレスを入力してください。",
"existingAccount": "すでにアカウントをお持ちですか?", "existingAccount": "すでにアカウントをお持ちですか?",
"get": "取得", "get": "取得",
"invite": "招待コード", "invite": "招待コード",
@ -25,15 +32,19 @@
"passwordMismatch": "パスワードが一致しません", "passwordMismatch": "パスワードが一致しません",
"success": "登録が成功しました。自動的にログインしました!", "success": "登録が成功しました。自動的にログインしました!",
"switchToLogin": "ログイン/メールリセット", "switchToLogin": "ログイン/メールリセット",
"title": "登録" "title": "登録",
"whitelist": "メールドメインが許可されたホワイトリストに含まれていません。"
}, },
"reset": { "reset": {
"description": "パスワードをリセットするには、メールアドレスを入力してください。", "description": "パスワードをリセットするには、メールアドレスを入力してください。",
"email": "有効なメールアドレスを入力してください。",
"existingAccount": "すでにアカウントをお持ちですか?", "existingAccount": "すでにアカウントをお持ちですか?",
"get": "取得", "get": "取得",
"success": "パスワードのリセットに成功しました。自動的にログインに切り替わりました!", "success": "パスワードのリセットに成功しました。自動的にログインに切り替わりました!",
"switchToLogin": "ログイン/登録", "switchToLogin": "ログイン/登録",
"title": "パスワードリセット" "title": "パスワードリセット"
}, },
"tos": "利用規約" "tos": "利用規約",
"verifyAccount": "アカウント確認",
"verifyAccountDesc": "アカウントを確認して続行してください。"
} }

View File

@ -4,20 +4,27 @@
"continue": "계속", "continue": "계속",
"description": "로그인 또는 등록을 계속하려면 이메일을 입력하세요.", "description": "로그인 또는 등록을 계속하려면 이메일을 입력하세요.",
"email": "유효한 이메일 주소를 입력하세요.", "email": "유효한 이메일 주소를 입력하세요.",
"title": "로그인/등록", "title": "로그인/등록"
"whitelist": "이메일 도메인이 허용된 화이트리스트에 없습니다."
}, },
"get": "가져오기",
"login": { "login": {
"codeLogin": "인증 코드 로그인",
"description": "계정 정보를 입력하여 로그인하세요.", "description": "계정 정보를 입력하여 로그인하세요.",
"email": "유효한 이메일 주소를 입력하세요.",
"forgotPassword": "비밀번호를 잊으셨나요?", "forgotPassword": "비밀번호를 잊으셨나요?",
"passwordLogin": "비밀번호 로그인",
"registerAccount": "계정 등록",
"success": "로그인 성공!", "success": "로그인 성공!",
"switchAccount": "가입/계정 전환",
"title": "로그인" "title": "로그인"
}, },
"logout": "로그아웃", "methods": {
"email": "이메일",
"sms": "전화"
},
"orWithEmail": "또는 이메일 사용", "orWithEmail": "또는 이메일 사용",
"register": { "register": {
"description": "새 계정을 생성하고 정보를 입력하여 등록하세요.", "description": "새 계정을 생성하고 정보를 입력하여 등록하세요.",
"email": "유효한 이메일 주소를 입력하세요.",
"existingAccount": "이미 계정이 있으신가요?", "existingAccount": "이미 계정이 있으신가요?",
"get": "받기", "get": "받기",
"invite": "초대 코드", "invite": "초대 코드",
@ -25,15 +32,19 @@
"passwordMismatch": "비밀번호가 일치하지 않습니다.", "passwordMismatch": "비밀번호가 일치하지 않습니다.",
"success": "등록 성공, 자동으로 로그인되었습니다!", "success": "등록 성공, 자동으로 로그인되었습니다!",
"switchToLogin": "로그인/이메일 재설정", "switchToLogin": "로그인/이메일 재설정",
"title": "등록" "title": "등록",
"whitelist": "이메일 도메인이 허용된 화이트리스트에 포함되어 있지 않습니다."
}, },
"reset": { "reset": {
"description": "비밀번호를 재설정하려면 이메일 주소를 입력하세요.", "description": "비밀번호를 재설정하려면 이메일 주소를 입력하세요.",
"email": "유효한 이메일 주소를 입력하세요.",
"existingAccount": "이미 계정이 있으신가요?", "existingAccount": "이미 계정이 있으신가요?",
"get": "받기", "get": "받기",
"success": "비밀번호 재설정 성공, 자동으로 로그인으로 전환되었습니다!", "success": "비밀번호 재설정 성공, 자동으로 로그인으로 전환되었습니다!",
"switchToLogin": "로그인/회원가입", "switchToLogin": "로그인/회원가입",
"title": "비밀번호 재설정" "title": "비밀번호 재설정"
}, },
"tos": "서비스 약관" "tos": "서비스 약관",
"verifyAccount": "계정 인증",
"verifyAccountDesc": "계속하려면 계정을 인증해 주세요."
} }

View File

@ -4,20 +4,27 @@
"continue": "Fortsett", "continue": "Fortsett",
"description": "Vennligst skriv inn din e-post for å fortsette med innlogging eller registrering.", "description": "Vennligst skriv inn din e-post for å fortsette med innlogging eller registrering.",
"email": "Vennligst skriv inn en gyldig e-postadresse.", "email": "Vennligst skriv inn en gyldig e-postadresse.",
"title": "Logg inn/Registrer", "title": "Logg inn/Registrer"
"whitelist": "E-postdomenet er ikke på den tillatte hvitelisten."
}, },
"get": "Få",
"login": { "login": {
"codeLogin": "Verifikasjonskodeinnlogging",
"description": "Vennligst skriv inn kontoinformasjonen din for å logge inn.", "description": "Vennligst skriv inn kontoinformasjonen din for å logge inn.",
"email": "Vennligst skriv inn en gyldig e-postadresse.",
"forgotPassword": "Glemt passord?", "forgotPassword": "Glemt passord?",
"passwordLogin": "Passordinnlogging",
"registerAccount": "Registrer konto",
"success": "Innlogging vellykket!", "success": "Innlogging vellykket!",
"switchAccount": "Registrer/bytt konto",
"title": "Logg inn" "title": "Logg inn"
}, },
"logout": "Logg ut", "methods": {
"email": "E-post",
"sms": "Telefon"
},
"orWithEmail": "eller bruk e-post", "orWithEmail": "eller bruk e-post",
"register": { "register": {
"description": "Opprett en ny konto, fyll inn informasjonen din for å registrere deg.", "description": "Opprett en ny konto, fyll inn informasjonen din for å registrere deg.",
"email": "Vennligst skriv inn en gyldig e-postadresse.",
"existingAccount": "Har du allerede en konto?", "existingAccount": "Har du allerede en konto?",
"get": "Få", "get": "Få",
"invite": "Invitasjonskode", "invite": "Invitasjonskode",
@ -25,15 +32,19 @@
"passwordMismatch": "Passordene stemmer ikke overens", "passwordMismatch": "Passordene stemmer ikke overens",
"success": "Registrering vellykket, du er nå automatisk logget inn!", "success": "Registrering vellykket, du er nå automatisk logget inn!",
"switchToLogin": "Logg inn/tilbakestill e-post", "switchToLogin": "Logg inn/tilbakestill e-post",
"title": "Registrer deg" "title": "Registrer deg",
"whitelist": "E-postdomenet er ikke i den tillatte hvitelisten."
}, },
"reset": { "reset": {
"description": "Vennligst skriv inn din e-postadresse for å tilbakestille passordet ditt.", "description": "Vennligst skriv inn din e-postadresse for å tilbakestille passordet ditt.",
"email": "Vennligst skriv inn en gyldig e-postadresse.",
"existingAccount": "Har du allerede en konto?", "existingAccount": "Har du allerede en konto?",
"get": "Hent", "get": "Hent",
"success": "Passordet er tilbakestilt, du er automatisk logget inn!", "success": "Passordet er tilbakestilt, du er automatisk logget inn!",
"switchToLogin": "Logg inn/Registrer", "switchToLogin": "Logg inn/Registrer",
"title": "Tilbakestill passord" "title": "Tilbakestill passord"
}, },
"tos": "Tjenestevilkår" "tos": "Tjenestevilkår",
"verifyAccount": "Kontobekreftelse",
"verifyAccountDesc": "Vennligst bekreft kontoen din for å fortsette."
} }

View File

@ -4,20 +4,27 @@
"continue": "Kontynuuj", "continue": "Kontynuuj",
"description": "Wprowadź swój adres e-mail, aby kontynuować logowanie lub rejestrację.", "description": "Wprowadź swój adres e-mail, aby kontynuować logowanie lub rejestrację.",
"email": "Proszę wprowadzić prawidłowy adres e-mail.", "email": "Proszę wprowadzić prawidłowy adres e-mail.",
"title": "Zaloguj się/Zarejestruj się", "title": "Zaloguj się/Zarejestruj się"
"whitelist": "Domena e-mail nie znajduje się na dozwolonej białej liście."
}, },
"get": "Pobierz",
"login": { "login": {
"codeLogin": "Logowanie za pomocą kodu weryfikacyjnego",
"description": "Proszę wprowadzić dane konta, aby się zalogować.", "description": "Proszę wprowadzić dane konta, aby się zalogować.",
"email": "Proszę wprowadzić prawidłowy adres e-mail.",
"forgotPassword": "Zapomniałeś hasła?", "forgotPassword": "Zapomniałeś hasła?",
"passwordLogin": "Logowanie za pomocą hasła",
"registerAccount": "Zarejestruj konto",
"success": "Zalogowano pomyślnie!", "success": "Zalogowano pomyślnie!",
"switchAccount": "Zarejestruj się/Zmień konto",
"title": "Logowanie" "title": "Logowanie"
}, },
"logout": "Wyloguj się", "methods": {
"email": "E-mail",
"sms": "Telefon"
},
"orWithEmail": "lub użyj e-maila", "orWithEmail": "lub użyj e-maila",
"register": { "register": {
"description": "Utwórz nowe konto, wypełnij swoje dane, aby się zarejestrować.", "description": "Utwórz nowe konto, wypełnij swoje dane, aby się zarejestrować.",
"email": "Proszę wprowadzić prawidłowy adres e-mail.",
"existingAccount": "Masz już konto?", "existingAccount": "Masz już konto?",
"get": "Pobierz", "get": "Pobierz",
"invite": "Kod zaproszenia", "invite": "Kod zaproszenia",
@ -25,15 +32,19 @@
"passwordMismatch": "Wprowadzone hasła nie są zgodne", "passwordMismatch": "Wprowadzone hasła nie są zgodne",
"success": "Rejestracja zakończona sukcesem, automatycznie zalogowano!", "success": "Rejestracja zakończona sukcesem, automatycznie zalogowano!",
"switchToLogin": "Zaloguj się/Zresetuj e-mail", "switchToLogin": "Zaloguj się/Zresetuj e-mail",
"title": "Rejestracja" "title": "Rejestracja",
"whitelist": "Domena e-mail nie znajduje się na dozwolonej liście."
}, },
"reset": { "reset": {
"description": "Wprowadź swój adres e-mail, aby zresetować hasło.", "description": "Wprowadź swój adres e-mail, aby zresetować hasło.",
"email": "Proszę wprowadzić prawidłowy adres e-mail.",
"existingAccount": "Masz już konto?", "existingAccount": "Masz już konto?",
"get": "Uzyskaj", "get": "Uzyskaj",
"success": "Hasło zostało pomyślnie zresetowane, automatycznie przełączono na logowanie!", "success": "Hasło zostało pomyślnie zresetowane, automatycznie przełączono na logowanie!",
"switchToLogin": "Zaloguj się/Zarejestruj się", "switchToLogin": "Zaloguj się/Zarejestruj się",
"title": "Zresetuj hasło" "title": "Zresetuj hasło"
}, },
"tos": "Warunki usługi" "tos": "Warunki usługi",
"verifyAccount": "Weryfikacja Konta",
"verifyAccountDesc": "Proszę zweryfikować swoje konto, aby kontynuować."
} }

View File

@ -4,20 +4,27 @@
"continue": "Continuar", "continue": "Continuar",
"description": "Por favor, insira seu e-mail para continuar com o login ou registro.", "description": "Por favor, insira seu e-mail para continuar com o login ou registro.",
"email": "Por favor, insira um endereço de e-mail válido.", "email": "Por favor, insira um endereço de e-mail válido.",
"title": "Login/Registro", "title": "Login/Registro"
"whitelist": "O domínio do e-mail não está na lista de permissões."
}, },
"get": "Obter",
"login": { "login": {
"codeLogin": "Login com Código de Verificação",
"description": "Por favor, insira suas informações de conta para fazer login.", "description": "Por favor, insira suas informações de conta para fazer login.",
"email": "Por favor, insira um endereço de e-mail válido.",
"forgotPassword": "Esqueceu a senha?", "forgotPassword": "Esqueceu a senha?",
"passwordLogin": "Login com Senha",
"registerAccount": "Registrar Conta",
"success": "Login bem-sucedido!", "success": "Login bem-sucedido!",
"switchAccount": "Registrar/Trocar de conta",
"title": "Login" "title": "Login"
}, },
"logout": "Sair", "methods": {
"email": "Email",
"sms": "Telefone"
},
"orWithEmail": "ou use o e-mail", "orWithEmail": "ou use o e-mail",
"register": { "register": {
"description": "Crie uma nova conta, preencha suas informações para se registrar.", "description": "Crie uma nova conta, preencha suas informações para se registrar.",
"email": "Por favor, insira um endereço de e-mail válido.",
"existingAccount": "Já tem uma conta?", "existingAccount": "Já tem uma conta?",
"get": "Obter", "get": "Obter",
"invite": "Código de convite", "invite": "Código de convite",
@ -25,15 +32,19 @@
"passwordMismatch": "As senhas digitadas não coincidem", "passwordMismatch": "As senhas digitadas não coincidem",
"success": "Registro bem-sucedido, login automático realizado!", "success": "Registro bem-sucedido, login automático realizado!",
"switchToLogin": "Entrar/Redefinir e-mail", "switchToLogin": "Entrar/Redefinir e-mail",
"title": "Registrar" "title": "Registrar",
"whitelist": "O domínio do e-mail não está na lista de permissões permitida."
}, },
"reset": { "reset": {
"description": "Por favor, insira seu endereço de e-mail para redefinir a senha.", "description": "Por favor, insira seu endereço de e-mail para redefinir a senha.",
"email": "Por favor, insira um endereço de e-mail válido.",
"existingAccount": "Já tem uma conta?", "existingAccount": "Já tem uma conta?",
"get": "Obter", "get": "Obter",
"success": "Senha redefinida com sucesso, você foi automaticamente redirecionado para o login!", "success": "Senha redefinida com sucesso, você foi automaticamente redirecionado para o login!",
"switchToLogin": "Entrar/Registrar", "switchToLogin": "Entrar/Registrar",
"title": "Redefinir Senha" "title": "Redefinir Senha"
}, },
"tos": "Termos de Serviço" "tos": "Termos de Serviço",
"verifyAccount": "Verificação de Conta",
"verifyAccountDesc": "Por favor, verifique sua conta para continuar."
} }

View File

@ -4,20 +4,27 @@
"continue": "Continuă", "continue": "Continuă",
"description": "Vă rugăm să introduceți adresa de e-mail pentru a continua autentificarea sau înregistrarea.", "description": "Vă rugăm să introduceți adresa de e-mail pentru a continua autentificarea sau înregistrarea.",
"email": "Vă rugăm să introduceți o adresă de e-mail validă.", "email": "Vă rugăm să introduceți o adresă de e-mail validă.",
"title": "Autentificare/Înregistrare", "title": "Autentificare/Înregistrare"
"whitelist": "Domeniul adresei de e-mail nu se află pe lista albă permisă."
}, },
"get": "Obține",
"login": { "login": {
"codeLogin": "Autentificare cu Cod de Verificare",
"description": "Vă rugăm să introduceți informațiile contului pentru a vă conecta.", "description": "Vă rugăm să introduceți informațiile contului pentru a vă conecta.",
"email": "Vă rugăm să introduceți o adresă de email validă.",
"forgotPassword": "Ați uitat parola?", "forgotPassword": "Ați uitat parola?",
"passwordLogin": "Autentificare cu Parolă",
"registerAccount": "Înregistrare Cont",
"success": "Autentificare reușită!", "success": "Autentificare reușită!",
"switchAccount": "Înregistrare/Schimbare cont",
"title": "Autentificare" "title": "Autentificare"
}, },
"logout": "Deconectare", "methods": {
"email": "Email",
"sms": "Telefon"
},
"orWithEmail": "sau folosește e-mailul", "orWithEmail": "sau folosește e-mailul",
"register": { "register": {
"description": "Creați un cont nou, completați informațiile dvs. pentru a vă înregistra.", "description": "Creați un cont nou, completați informațiile dvs. pentru a vă înregistra.",
"email": "Vă rugăm să introduceți o adresă de email validă.",
"existingAccount": "Aveți deja un cont?", "existingAccount": "Aveți deja un cont?",
"get": "Obțineți", "get": "Obțineți",
"invite": "Cod de invitație", "invite": "Cod de invitație",
@ -25,15 +32,19 @@
"passwordMismatch": "Parolele introduse nu se potrivesc", "passwordMismatch": "Parolele introduse nu se potrivesc",
"success": "Înregistrare reușită, ați fost conectat automat!", "success": "Înregistrare reușită, ați fost conectat automat!",
"switchToLogin": "Conectare/Resetare email", "switchToLogin": "Conectare/Resetare email",
"title": "Înregistrare" "title": "Înregistrare",
"whitelist": "Domeniul de email nu se află pe lista albă permisă."
}, },
"reset": { "reset": {
"description": "Introduceți adresa dvs. de e-mail pentru a reseta parola.", "description": "Introduceți adresa dvs. de e-mail pentru a reseta parola.",
"email": "Vă rugăm să introduceți o adresă de email validă.",
"existingAccount": "Aveți deja un cont?", "existingAccount": "Aveți deja un cont?",
"get": "Obțineți", "get": "Obțineți",
"success": "Parola a fost resetată cu succes, ați fost redirecționat automat la autentificare!", "success": "Parola a fost resetată cu succes, ați fost redirecționat automat la autentificare!",
"switchToLogin": "Autentificare/Înregistrare", "switchToLogin": "Autentificare/Înregistrare",
"title": "Resetați parola" "title": "Resetați parola"
}, },
"tos": "Termeni și condiții" "tos": "Termeni și condiții",
"verifyAccount": "Verificare Cont",
"verifyAccountDesc": "Vă rugăm să vă verificați contul pentru a continua."
} }

View File

@ -4,20 +4,27 @@
"continue": "Продолжить", "continue": "Продолжить",
"description": "Пожалуйста, введите ваш адрес электронной почты для продолжения входа или регистрации.", "description": "Пожалуйста, введите ваш адрес электронной почты для продолжения входа или регистрации.",
"email": "Пожалуйста, введите действительный адрес электронной почты.", "email": "Пожалуйста, введите действительный адрес электронной почты.",
"title": "Вход/Регистрация", "title": "Вход/Регистрация"
"whitelist": "Домен электронной почты не входит в разрешенный белый список."
}, },
"get": "Получить",
"login": { "login": {
"codeLogin": "Вход по коду подтверждения",
"description": "Пожалуйста, введите данные вашей учетной записи для входа.", "description": "Пожалуйста, введите данные вашей учетной записи для входа.",
"email": "Пожалуйста, введите действительный адрес электронной почты.",
"forgotPassword": "Забыли пароль?", "forgotPassword": "Забыли пароль?",
"passwordLogin": "Вход по паролю",
"registerAccount": "Регистрация аккаунта",
"success": "Вход выполнен успешно!", "success": "Вход выполнен успешно!",
"switchAccount": "Регистрация/Сменить аккаунт",
"title": "Вход" "title": "Вход"
}, },
"logout": "Выйти из системы", "methods": {
"email": "Электронная почта",
"sms": "Телефон"
},
"orWithEmail": "или с помощью электронной почты", "orWithEmail": "или с помощью электронной почты",
"register": { "register": {
"description": "Создайте новый аккаунт, заполните свои данные для регистрации.", "description": "Создайте новый аккаунт, заполните свои данные для регистрации.",
"email": "Пожалуйста, введите действительный адрес электронной почты.",
"existingAccount": "Уже есть аккаунт?", "existingAccount": "Уже есть аккаунт?",
"get": "Получить", "get": "Получить",
"invite": "Код приглашения", "invite": "Код приглашения",
@ -25,15 +32,19 @@
"passwordMismatch": "Введенные пароли не совпадают", "passwordMismatch": "Введенные пароли не совпадают",
"success": "Регистрация успешна, вы автоматически вошли в систему!", "success": "Регистрация успешна, вы автоматически вошли в систему!",
"switchToLogin": "Войти/Сбросить почту", "switchToLogin": "Войти/Сбросить почту",
"title": "Регистрация" "title": "Регистрация",
"whitelist": "Домен электронной почты не входит в разрешенный список."
}, },
"reset": { "reset": {
"description": "Пожалуйста, введите ваш адрес электронной почты, чтобы сбросить пароль.", "description": "Пожалуйста, введите ваш адрес электронной почты, чтобы сбросить пароль.",
"email": "Пожалуйста, введите действительный адрес электронной почты.",
"existingAccount": "Уже есть аккаунт?", "existingAccount": "Уже есть аккаунт?",
"get": "Получить", "get": "Получить",
"success": "Пароль успешно сброшен, автоматически переключено на вход!", "success": "Пароль успешно сброшен, автоматически переключено на вход!",
"switchToLogin": "Вход/Регистрация", "switchToLogin": "Вход/Регистрация",
"title": "Сброс пароля" "title": "Сброс пароля"
}, },
"tos": "Условия обслуживания" "tos": "Условия обслуживания",
"verifyAccount": "Подтверждение аккаунта",
"verifyAccountDesc": "Пожалуйста, подтвердите свой аккаунт, чтобы продолжить."
} }

View File

@ -4,20 +4,27 @@
"continue": "ดำเนินการต่อ", "continue": "ดำเนินการต่อ",
"description": "กรุณาใส่อีเมลของคุณเพื่อดำเนินการเข้าสู่ระบบหรือสมัครสมาชิกต่อไป", "description": "กรุณาใส่อีเมลของคุณเพื่อดำเนินการเข้าสู่ระบบหรือสมัครสมาชิกต่อไป",
"email": "กรุณาใส่ที่อยู่อีเมลที่ถูกต้อง", "email": "กรุณาใส่ที่อยู่อีเมลที่ถูกต้อง",
"title": "เข้าสู่ระบบ/สมัครสมาชิก", "title": "เข้าสู่ระบบ/สมัครสมาชิก"
"whitelist": "โดเมนอีเมลไม่อยู่ในรายชื่อที่อนุญาต"
}, },
"get": "รับ",
"login": { "login": {
"codeLogin": "เข้าสู่ระบบด้วยรหัสยืนยัน",
"description": "กรุณาใส่ข้อมูลบัญชีของคุณเพื่อเข้าสู่ระบบ", "description": "กรุณาใส่ข้อมูลบัญชีของคุณเพื่อเข้าสู่ระบบ",
"email": "กรุณาใส่ที่อยู่อีเมลที่ถูกต้อง",
"forgotPassword": "ลืมรหัสผ่าน?", "forgotPassword": "ลืมรหัสผ่าน?",
"passwordLogin": "เข้าสู่ระบบด้วยรหัสผ่าน",
"registerAccount": "ลงทะเบียนบัญชี",
"success": "เข้าสู่ระบบสำเร็จ!", "success": "เข้าสู่ระบบสำเร็จ!",
"switchAccount": "สมัคร/เปลี่ยนบัญชี",
"title": "เข้าสู่ระบบ" "title": "เข้าสู่ระบบ"
}, },
"logout": "ออกจากระบบ", "methods": {
"email": "อีเมล",
"sms": "โทรศัพท์"
},
"orWithEmail": "หรือใช้ที่อยู่อีเมล", "orWithEmail": "หรือใช้ที่อยู่อีเมล",
"register": { "register": {
"description": "สร้างบัญชีใหม่ กรอกข้อมูลของคุณเพื่อสมัครสมาชิก", "description": "สร้างบัญชีใหม่ กรอกข้อมูลของคุณเพื่อสมัครสมาชิก",
"email": "กรุณาใส่ที่อยู่อีเมลที่ถูกต้อง",
"existingAccount": "มีบัญชีอยู่แล้ว?", "existingAccount": "มีบัญชีอยู่แล้ว?",
"get": "รับ", "get": "รับ",
"invite": "รหัสเชิญ", "invite": "รหัสเชิญ",
@ -25,15 +32,19 @@
"passwordMismatch": "รหัสผ่านที่กรอกไม่ตรงกัน", "passwordMismatch": "รหัสผ่านที่กรอกไม่ตรงกัน",
"success": "สมัครสมาชิกสำเร็จ เข้าสู่ระบบอัตโนมัติแล้ว!", "success": "สมัครสมาชิกสำเร็จ เข้าสู่ระบบอัตโนมัติแล้ว!",
"switchToLogin": "เข้าสู่ระบบ/รีเซ็ตอีเมล", "switchToLogin": "เข้าสู่ระบบ/รีเซ็ตอีเมล",
"title": "สมัครสมาชิก" "title": "สมัครสมาชิก",
"whitelist": "โดเมนอีเมลนี้ไม่ได้อยู่ในรายการที่อนุญาต"
}, },
"reset": { "reset": {
"description": "กรุณาใส่ที่อยู่อีเมลของคุณเพื่อรีเซ็ตรหัสผ่าน", "description": "กรุณาใส่ที่อยู่อีเมลของคุณเพื่อรีเซ็ตรหัสผ่าน",
"email": "กรุณาใส่ที่อยู่อีเมลที่ถูกต้อง.",
"existingAccount": "มีบัญชีอยู่แล้ว?", "existingAccount": "มีบัญชีอยู่แล้ว?",
"get": "รับ", "get": "รับ",
"success": "รีเซ็ตรหัสผ่านสำเร็จ, เปลี่ยนไปที่เข้าสู่ระบบอัตโนมัติ!", "success": "รีเซ็ตรหัสผ่านสำเร็จ, เปลี่ยนไปที่เข้าสู่ระบบอัตโนมัติ!",
"switchToLogin": "เข้าสู่ระบบ/สมัครสมาชิก", "switchToLogin": "เข้าสู่ระบบ/สมัครสมาชิก",
"title": "รีเซ็ตรหัสผ่าน" "title": "รีเซ็ตรหัสผ่าน"
}, },
"tos": "ข้อกำหนดในการให้บริการ" "tos": "ข้อกำหนดในการให้บริการ",
"verifyAccount": "การยืนยันบัญชี",
"verifyAccountDesc": "กรุณายืนยันบัญชีของคุณเพื่อดำเนินการต่อ"
} }

View File

@ -4,20 +4,27 @@
"continue": "Devam et", "continue": "Devam et",
"description": "Giriş yapmak veya kaydolmak için lütfen e-posta adresinizi girin.", "description": "Giriş yapmak veya kaydolmak için lütfen e-posta adresinizi girin.",
"email": "Lütfen geçerli bir e-posta adresi girin.", "email": "Lütfen geçerli bir e-posta adresi girin.",
"title": "Giriş/Kayıt", "title": "Giriş/Kayıt"
"whitelist": "E-posta alan adı izin verilen beyaz listede değil."
}, },
"get": "Al",
"login": { "login": {
"codeLogin": "Doğrulama Kodu ile Giriş",
"description": "Lütfen giriş yapmak için hesap bilgilerinizi girin.", "description": "Lütfen giriş yapmak için hesap bilgilerinizi girin.",
"email": "Lütfen geçerli bir e-posta adresi girin.",
"forgotPassword": "Şifrenizi mi unuttunuz?", "forgotPassword": "Şifrenizi mi unuttunuz?",
"passwordLogin": "Şifre ile Giriş",
"registerAccount": "Hesap Kaydı",
"success": "Başarıyla giriş yapıldı!", "success": "Başarıyla giriş yapıldı!",
"switchAccount": "Kayıt Ol/Hesap Değiştir",
"title": "Giriş Yap" "title": "Giriş Yap"
}, },
"logout": ıkış Yap", "methods": {
"email": "E-posta",
"sms": "Telefon"
},
"orWithEmail": "veya e-posta kullan", "orWithEmail": "veya e-posta kullan",
"register": { "register": {
"description": "Yeni bir hesap oluşturun, kaydolmak için bilgilerinizi doldurun.", "description": "Yeni bir hesap oluşturun, kaydolmak için bilgilerinizi doldurun.",
"email": "Lütfen geçerli bir e-posta adresi girin.",
"existingAccount": "Zaten bir hesabınız var mı?", "existingAccount": "Zaten bir hesabınız var mı?",
"get": "Al", "get": "Al",
"invite": "Davet Kodu", "invite": "Davet Kodu",
@ -25,15 +32,19 @@
"passwordMismatch": "Girilen şifreler uyuşmuyor", "passwordMismatch": "Girilen şifreler uyuşmuyor",
"success": "Kayıt başarılı, otomatik olarak giriş yapıldı!", "success": "Kayıt başarılı, otomatik olarak giriş yapıldı!",
"switchToLogin": "Giriş/Yeni E-posta Ayarla", "switchToLogin": "Giriş/Yeni E-posta Ayarla",
"title": "Kayıt Ol" "title": "Kayıt Ol",
"whitelist": "E-posta alanı izin verilen beyaz listede değil."
}, },
"reset": { "reset": {
"description": "Şifrenizi sıfırlamak için lütfen e-posta adresinizi girin.", "description": "Şifrenizi sıfırlamak için lütfen e-posta adresinizi girin.",
"email": "Lütfen geçerli bir e-posta adresi girin.",
"existingAccount": "Zaten bir hesabınız var mı?", "existingAccount": "Zaten bir hesabınız var mı?",
"get": "Al", "get": "Al",
"success": "Şifre sıfırlama başarılı, otomatik olarak girişe geçildi!", "success": "Şifre sıfırlama başarılı, otomatik olarak girişe geçildi!",
"switchToLogin": "Giriş/Kayıt", "switchToLogin": "Giriş/Kayıt",
"title": "Şifre Sıfırla" "title": "Şifre Sıfırla"
}, },
"tos": "Hizmet Şartları" "tos": "Hizmet Şartları",
"verifyAccount": "Hesap Doğrulama",
"verifyAccountDesc": "Devam etmek için lütfen hesabınızı doğrulayın."
} }

View File

@ -4,20 +4,27 @@
"continue": "Продовжити", "continue": "Продовжити",
"description": "Будь ласка, введіть свою електронну пошту, щоб продовжити вхід або реєстрацію.", "description": "Будь ласка, введіть свою електронну пошту, щоб продовжити вхід або реєстрацію.",
"email": "Будь ласка, введіть дійсну електронну адресу.", "email": "Будь ласка, введіть дійсну електронну адресу.",
"title": "Вхід/Реєстрація", "title": "Вхід/Реєстрація"
"whitelist": "Домен електронної пошти не входить до дозволеного білого списку."
}, },
"get": "Отримати",
"login": { "login": {
"codeLogin": "Вхід за кодом підтвердження",
"description": "Будь ласка, введіть ваші облікові дані для входу.", "description": "Будь ласка, введіть ваші облікові дані для входу.",
"email": "Будь ласка, введіть дійсну електронну адресу.",
"forgotPassword": "Забули пароль?", "forgotPassword": "Забули пароль?",
"passwordLogin": "Вхід за паролем",
"registerAccount": "Зареєструвати обліковий запис",
"success": "Вхід успішний!", "success": "Вхід успішний!",
"switchAccount": "Зареєструватися/Змінити акаунт",
"title": "Вхід" "title": "Вхід"
}, },
"logout": "Вийти з системи", "methods": {
"email": "Електронна пошта",
"sms": "Телефон"
},
"orWithEmail": "або використовуйте електронну пошту", "orWithEmail": "або використовуйте електронну пошту",
"register": { "register": {
"description": "Створіть новий обліковий запис, заповніть ваші дані для реєстрації.", "description": "Створіть новий обліковий запис, заповніть ваші дані для реєстрації.",
"email": "Будь ласка, введіть дійсну електронну адресу.",
"existingAccount": "Вже маєте обліковий запис?", "existingAccount": "Вже маєте обліковий запис?",
"get": "Отримати", "get": "Отримати",
"invite": "Код запрошення", "invite": "Код запрошення",
@ -25,15 +32,19 @@
"passwordMismatch": "Паролі не співпадають", "passwordMismatch": "Паролі не співпадають",
"success": "Реєстрація успішна, автоматично увійшли!", "success": "Реєстрація успішна, автоматично увійшли!",
"switchToLogin": "Увійти/Скинути пошту", "switchToLogin": "Увійти/Скинути пошту",
"title": "Реєстрація" "title": "Реєстрація",
"whitelist": "Домен електронної пошти не входить до дозволеного списку."
}, },
"reset": { "reset": {
"description": "Будь ласка, введіть свою електронну адресу, щоб скинути пароль.", "description": "Будь ласка, введіть свою електронну адресу, щоб скинути пароль.",
"email": "Будь ласка, введіть дійсну електронну адресу.",
"existingAccount": "Вже маєте обліковий запис?", "existingAccount": "Вже маєте обліковий запис?",
"get": "Отримати", "get": "Отримати",
"success": "Пароль успішно скинуто, автоматично переключено на вхід!", "success": "Пароль успішно скинуто, автоматично переключено на вхід!",
"switchToLogin": "Вхід/Реєстрація", "switchToLogin": "Вхід/Реєстрація",
"title": "Скидання пароля" "title": "Скидання пароля"
}, },
"tos": "Умови надання послуг" "tos": "Умови надання послуг",
"verifyAccount": "Підтвердження облікового запису",
"verifyAccountDesc": "Будь ласка, підтвердіть свій обліковий запис, щоб продовжити."
} }

View File

@ -4,20 +4,27 @@
"continue": "Tiếp tục", "continue": "Tiếp tục",
"description": "Vui lòng nhập email của bạn để tiếp tục đăng nhập hoặc đăng ký.", "description": "Vui lòng nhập email của bạn để tiếp tục đăng nhập hoặc đăng ký.",
"email": "Vui lòng nhập địa chỉ email hợp lệ.", "email": "Vui lòng nhập địa chỉ email hợp lệ.",
"title": "Đăng nhập/Đăng ký", "title": "Đăng nhập/Đăng ký"
"whitelist": "Tên miền email không có trong danh sách trắng được phép."
}, },
"get": "Lấy",
"login": { "login": {
"codeLogin": "Đăng nhập bằng mã xác minh",
"description": "Vui lòng nhập thông tin tài khoản của bạn để đăng nhập.", "description": "Vui lòng nhập thông tin tài khoản của bạn để đăng nhập.",
"email": "Vui lòng nhập địa chỉ email hợp lệ.",
"forgotPassword": "Quên mật khẩu?", "forgotPassword": "Quên mật khẩu?",
"passwordLogin": "Đăng nhập bằng mật khẩu",
"registerAccount": "Đăng ký tài khoản",
"success": "Đăng nhập thành công!", "success": "Đăng nhập thành công!",
"switchAccount": "Đăng ký/Chuyển đổi tài khoản",
"title": "Đăng nhập" "title": "Đăng nhập"
}, },
"logout": "Đăng xuất", "methods": {
"email": "Email",
"sms": "Điện thoại"
},
"orWithEmail": "hoặc sử dụng email", "orWithEmail": "hoặc sử dụng email",
"register": { "register": {
"description": "Tạo tài khoản mới, điền thông tin của bạn để đăng ký.", "description": "Tạo tài khoản mới, điền thông tin của bạn để đăng ký.",
"email": "Vui lòng nhập địa chỉ email hợp lệ.",
"existingAccount": "Đã có tài khoản?", "existingAccount": "Đã có tài khoản?",
"get": "Lấy", "get": "Lấy",
"invite": "Mã mời", "invite": "Mã mời",
@ -25,15 +32,19 @@
"passwordMismatch": "Mật khẩu nhập hai lần không khớp", "passwordMismatch": "Mật khẩu nhập hai lần không khớp",
"success": "Đăng ký thành công, đã tự động đăng nhập!", "success": "Đăng ký thành công, đã tự động đăng nhập!",
"switchToLogin": "Đăng nhập/Đặt lại email", "switchToLogin": "Đăng nhập/Đặt lại email",
"title": "Đăng ký" "title": "Đăng ký",
"whitelist": "Tên miền email không nằm trong danh sách trắng được phép."
}, },
"reset": { "reset": {
"description": "Vui lòng nhập địa chỉ email của bạn để đặt lại mật khẩu.", "description": "Vui lòng nhập địa chỉ email của bạn để đặt lại mật khẩu.",
"email": "Vui lòng nhập địa chỉ email hợp lệ.",
"existingAccount": "Đã có tài khoản?", "existingAccount": "Đã có tài khoản?",
"get": "Lấy", "get": "Lấy",
"success": "Đặt lại mật khẩu thành công, đã tự động chuyển sang đăng nhập!", "success": "Đặt lại mật khẩu thành công, đã tự động chuyển sang đăng nhập!",
"switchToLogin": "Đăng nhập/Đăng ký", "switchToLogin": "Đăng nhập/Đăng ký",
"title": "Đặt lại mật khẩu" "title": "Đặt lại mật khẩu"
}, },
"tos": "Điều khoản dịch vụ" "tos": "Điều khoản dịch vụ",
"verifyAccount": "Xác minh Tài khoản",
"verifyAccountDesc": "Vui lòng xác minh tài khoản của bạn để tiếp tục."
} }

View File

@ -4,20 +4,27 @@
"continue": "继续", "continue": "继续",
"description": "请输入您的电子邮件以继续登录或注册。", "description": "请输入您的电子邮件以继续登录或注册。",
"email": "请输入有效的邮箱地址。", "email": "请输入有效的邮箱地址。",
"title": "登录/注册", "title": "登录/注册"
"whitelist": "邮箱域名不在允许的白名单中。"
}, },
"get": "获取",
"login": { "login": {
"codeLogin": "验证码登录",
"description": "请输入您的账户信息以登录。", "description": "请输入您的账户信息以登录。",
"email": "请输入有效的电子邮件地址。",
"forgotPassword": "忘记密码?", "forgotPassword": "忘记密码?",
"passwordLogin": "密码登录",
"registerAccount": "注册账户",
"success": "登录成功!", "success": "登录成功!",
"switchAccount": "注册/切换账号",
"title": "登录" "title": "登录"
}, },
"logout": "退出登录", "methods": {
"email": "电子邮件",
"sms": "电话"
},
"orWithEmail": "或使用邮箱", "orWithEmail": "或使用邮箱",
"register": { "register": {
"description": "创建新账户,填写您的信息以注册。", "description": "创建新账户,填写您的信息以注册。",
"email": "请输入有效的电子邮件地址。",
"existingAccount": "已有账户?", "existingAccount": "已有账户?",
"get": "获取", "get": "获取",
"invite": "邀请码", "invite": "邀请码",
@ -25,15 +32,19 @@
"passwordMismatch": "两次密码输入不一致", "passwordMismatch": "两次密码输入不一致",
"success": "注册成功,已自动登录!", "success": "注册成功,已自动登录!",
"switchToLogin": "登录/重置邮箱", "switchToLogin": "登录/重置邮箱",
"title": "注册" "title": "注册",
"whitelist": "电子邮件域名不在允许的白名单中。"
}, },
"reset": { "reset": {
"description": "请输入您的电子邮件地址以重置密码。", "description": "请输入您的电子邮件地址以重置密码。",
"email": "请输入有效的电子邮件地址。",
"existingAccount": "已有账户?", "existingAccount": "已有账户?",
"get": "获取", "get": "获取",
"success": "重置密码成功,已自动切换到登录!", "success": "重置密码成功,已自动切换到登录!",
"switchToLogin": "登录/注册", "switchToLogin": "登录/注册",
"title": "重置密码" "title": "重置密码"
}, },
"tos": "服务条款" "tos": "服务条款",
"verifyAccount": "账户验证",
"verifyAccountDesc": "请验证您的账户以继续。"
} }

View File

@ -4,20 +4,27 @@
"continue": "繼續", "continue": "繼續",
"description": "請輸入您的電子郵件以繼續登入或註冊。", "description": "請輸入您的電子郵件以繼續登入或註冊。",
"email": "請輸入有效的電子郵件地址。", "email": "請輸入有效的電子郵件地址。",
"title": "登入/註冊", "title": "登入/註冊"
"whitelist": "電子郵件域名不在允許的白名單中。"
}, },
"get": "獲取",
"login": { "login": {
"codeLogin": "驗證碼登入",
"description": "請輸入您的帳戶資訊以登入。", "description": "請輸入您的帳戶資訊以登入。",
"email": "請輸入有效的電郵地址。",
"forgotPassword": "忘記密碼?", "forgotPassword": "忘記密碼?",
"passwordLogin": "密碼登入",
"registerAccount": "註冊帳戶",
"success": "登入成功!", "success": "登入成功!",
"switchAccount": "註冊/切換帳號",
"title": "登入" "title": "登入"
}, },
"logout": "登出", "methods": {
"email": "電郵",
"sms": "電話"
},
"orWithEmail": "或使用電子郵件", "orWithEmail": "或使用電子郵件",
"register": { "register": {
"description": "創建新帳戶,填寫您的資訊以註冊。", "description": "創建新帳戶,填寫您的資訊以註冊。",
"email": "請輸入有效的電郵地址。",
"existingAccount": "已有帳戶?", "existingAccount": "已有帳戶?",
"get": "獲取", "get": "獲取",
"invite": "邀請碼", "invite": "邀請碼",
@ -25,15 +32,19 @@
"passwordMismatch": "兩次密碼輸入不一致", "passwordMismatch": "兩次密碼輸入不一致",
"success": "註冊成功,已自動登入!", "success": "註冊成功,已自動登入!",
"switchToLogin": "登入/重置信箱", "switchToLogin": "登入/重置信箱",
"title": "註冊" "title": "註冊",
"whitelist": "電郵域名不在允許的白名單中。"
}, },
"reset": { "reset": {
"description": "請輸入您的電子郵件地址以重設密碼。", "description": "請輸入您的電子郵件地址以重設密碼。",
"email": "請輸入有效的電郵地址。",
"existingAccount": "已有帳戶?", "existingAccount": "已有帳戶?",
"get": "獲取", "get": "獲取",
"success": "重設密碼成功,已自動切換到登入!", "success": "重設密碼成功,已自動切換到登入!",
"switchToLogin": "登入/註冊", "switchToLogin": "登入/註冊",
"title": "重設密碼" "title": "重設密碼"
}, },
"tos": "服務條款" "tos": "服務條款",
"verifyAccount": "帳戶驗證",
"verifyAccountDesc": "請驗證您的帳戶以繼續。"
} }