diff --git a/apps/admin/services/admin/typings.d.ts b/apps/admin/services/admin/typings.d.ts index a791812..4e704b8 100644 --- a/apps/admin/services/admin/typings.d.ts +++ b/apps/admin/services/admin/typings.d.ts @@ -261,6 +261,7 @@ declare namespace API { }; type EmailAuthticateConfig = { + email_enabled: boolean; email_enable_verify: boolean; email_enable_domain_suffix: boolean; email_domain_suffix_list: string; diff --git a/apps/admin/services/common/typings.d.ts b/apps/admin/services/common/typings.d.ts index d02abae..b111e8d 100644 --- a/apps/admin/services/common/typings.d.ts +++ b/apps/admin/services/common/typings.d.ts @@ -82,6 +82,7 @@ declare namespace API { }; type EmailAuthticateConfig = { + email_enabled: boolean; email_enable_verify: boolean; email_enable_domain_suffix: boolean; email_domain_suffix_list: string; diff --git a/apps/user/app/auth/user-auth-form.tsx b/apps/user/app/auth/email/auth-form.tsx similarity index 54% rename from apps/user/app/auth/user-auth-form.tsx rename to apps/user/app/auth/email/auth-form.tsx index 8024805..cb86585 100644 --- a/apps/user/app/auth/user-auth-form.tsx +++ b/apps/user/app/auth/email/auth-form.tsx @@ -11,15 +11,14 @@ import { NEXT_PUBLIC_DEFAULT_USER_PASSWORD, } from '@/config/constants'; import { getRedirectUrl, setAuthorization } from '@/utils/common'; -import UserCheckForm from './user-check-form'; -import UserLoginForm from './user-login-form'; -import UserRegisterForm from './user-register-form'; -import UserResetForm from './user-reset-form'; +import LoginForm from './login-form'; +import RegisterForm from './register-form'; +import ResetForm from './reset-form'; -export default function UserAuthForm() { +export default function EmailAuthForm() { const t = useTranslations('auth'); const router = useRouter(); - const [type, setType] = useState<'login' | 'register' | 'reset'>(); + const [type, setType] = useState<'login' | 'register' | 'reset'>('login'); const [loading, startTransition] = useTransition(); const [initialValues, setInitialValues] = useState<{ email?: string; @@ -56,25 +55,18 @@ export default function UserAuthForm() { toast.success(t('reset.success')); setType('login'); break; - default: { - if (type === 'reset') break; - setInitialValues({ - ...initialValues, - ...params, - }); - break; - } } } catch (error) { /* empty */ } }); }; + let UserForm: ReactNode = null; switch (type) { case 'login': UserForm = ( - ); break; - default: - UserForm = ( - - ); - break; } - return ( - <> -
-

{t(`${type || 'check'}.title`)}

-
- {t(`${type || 'check'}.description`)} -
-
- {/* {!((type === 'register' && register.stop_register) || type === 'reset') && ( - <> -
- - - -
-
- {t('orWithEmail')} -
- - )} */} - {UserForm} - - ); + return UserForm; } diff --git a/apps/user/app/auth/user-login-form.tsx b/apps/user/app/auth/email/login-form.tsx similarity index 89% rename from apps/user/app/auth/user-login-form.tsx rename to apps/user/app/auth/email/login-form.tsx index 6737419..939dd46 100644 --- a/apps/user/app/auth/user-login-form.tsx +++ b/apps/user/app/auth/email/login-form.tsx @@ -8,9 +8,9 @@ import { useTranslations } from 'next-intl'; import { Dispatch, SetStateAction } from 'react'; import { useForm } from 'react-hook-form'; import { z } from 'zod'; -import CloudFlareTurnstile from './turnstile'; +import CloudFlareTurnstile from '../turnstile'; -export default function UserLoginForm({ +export default function LoginForm({ loading, onSubmit, initialValues, @@ -21,14 +21,14 @@ export default function UserLoginForm({ onSubmit: (data: any) => void; initialValues: any; setInitialValues: Dispatch>; - onSwitchForm: (type?: 'register' | 'reset') => void; + onSwitchForm: Dispatch>; }) { const t = useTranslations('auth.login'); const { common } = useGlobalStore(); const { verify } = common; const formSchema = z.object({ - email: z.string(), + email: z.string().email(t('email')), password: z.string(), cf_token: verify.enable_login_verify && verify.turnstile_site_key ? z.string() : z.string().optional(), @@ -48,7 +48,7 @@ export default function UserLoginForm({ render={({ field }) => ( - + @@ -100,10 +100,10 @@ export default function UserLoginForm({ className='p-0' onClick={() => { setInitialValues(undefined); - onSwitchForm(undefined); + onSwitchForm('register'); }} > - {t('switchAccount')} + {t('registerAccount')} diff --git a/apps/user/app/auth/user-register-form.tsx b/apps/user/app/auth/email/register-form.tsx similarity index 79% rename from apps/user/app/auth/user-register-form.tsx rename to apps/user/app/auth/email/register-form.tsx index 13f3d65..7650a15 100644 --- a/apps/user/app/auth/user-register-form.tsx +++ b/apps/user/app/auth/email/register-form.tsx @@ -1,19 +1,18 @@ import useGlobalStore from '@/config/use-global'; -import { sendEmailCode } from '@/services/common/common'; import { zodResolver } from '@hookform/resolvers/zod'; import { Icon } from '@iconify/react/dist/iconify.js'; 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 { Markdown } from '@workspace/ui/custom-components/markdown'; -import { useCountDown } from 'ahooks'; import { useTranslations } from 'next-intl'; -import { Dispatch, SetStateAction, useState } from 'react'; +import { Dispatch, SetStateAction } from 'react'; import { useForm } from 'react-hook-form'; 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, onSubmit, initialValues, @@ -24,33 +23,36 @@ export default function UserRegisterForm({ onSubmit: (data: any) => void; initialValues: any; setInitialValues: Dispatch>; - onSwitchForm: (type?: 'register' | 'reset') => void; + onSwitchForm: Dispatch>; }) { const t = useTranslations('auth.register'); const { common } = useGlobalStore(); - const { verify, register, invite } = common; + const { verify, auth, invite } = common; - const [targetDate, setTargetDate] = useState(); - const [, { seconds }] = useCountDown({ - targetDate, - onEnd: () => { - setTargetDate(undefined); - }, - }); - const handleSendCode = async () => { - await sendEmailCode({ - email: initialValues.email, - type: 1, - }); - setTargetDate(Date.now() + 60000); + const handleCheckUser = async (email: string) => { + try { + const domain = email.split('@')[1]; + const isValid = + !auth.email.email_enable_verify || + auth.email?.email_domain_suffix_list.split('\n').includes(domain || ''); + return !isValid; + } catch (error) { + console.log('Error checking user:', error); + return false; + } }; const formSchema = z .object({ - email: z.string(), + email: z + .string() + .email(t('email')) + .refine(handleCheckUser, { + message: t('whitelist'), + }), 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(), cf_token: verify.enable_register_verify && verify.turnstile_site_key @@ -77,7 +79,7 @@ export default function UserRegisterForm({ return ( <> - {register.stop_register ? ( + {auth.register.stop_register ? ( {t('message')} ) : (
@@ -88,7 +90,7 @@ export default function UserRegisterForm({ render={({ field }) => ( - + @@ -128,7 +130,7 @@ export default function UserRegisterForm({ )} /> - {register.enable_email_verify && ( + {auth.email.email_enable_verify && ( - + @@ -192,13 +198,13 @@ export default function UserRegisterForm({ )}
- {t('existingAccount')} + {t('existingAccount')}  +
@@ -139,13 +127,13 @@ export default function UserResetForm({
- {t('existingAccount')} + {t('existingAccount')} 
-
-
+
+
- +

{t('verifyAccount')}

+
+ {t('verifyAccountDesc')} +
+ {enabledAuthMethods.length === 1 + ? AUTH_COMPONENT_MAP[enabledAuthMethods[0] as AuthMethod] + : enabledAuthMethods[0] && ( + + + {enabledAuthMethods.map((method) => ( + + {t(`methods.${method}`)} + + ))} + + {enabledAuthMethods.map((method) => ( + + {AUTH_COMPONENT_MAP[method]} + + ))} + + )}
diff --git a/apps/user/app/auth/phone/auth-form.tsx b/apps/user/app/auth/phone/auth-form.tsx new file mode 100644 index 0000000..ced8774 --- /dev/null +++ b/apps/user/app/auth/phone/auth-form.tsx @@ -0,0 +1,100 @@ +'use client'; + +import { + telephoneLogin, + telephoneResetPassword, + telephoneUserRegister, +} from '@/services/common/auth'; +import { getRedirectUrl, setAuthorization } from '@/utils/common'; +import { useTranslations } from 'next-intl'; +import { useRouter } from 'next/navigation'; +import { ReactNode, useState, useTransition } from 'react'; +import { toast } from 'sonner'; +import LoginForm from './login-form'; +import RegisterForm from './register-form'; +import ResetForm from './reset-form'; + +export default function PhoneAuthForm() { + const t = useTranslations('auth'); + const router = useRouter(); + const [type, setType] = useState<'login' | 'register' | 'reset'>('login'); + const [loading, startTransition] = useTransition(); + const [initialValues, setInitialValues] = useState({ + telephone: '', + telephone_area_code: '1', + password: '', + }); + + const handleFormSubmit = async (params: any) => { + const onLogin = async (token?: string) => { + if (!token) return; + setAuthorization(token); + router.replace(getRedirectUrl()); + router.refresh(); + }; + startTransition(async () => { + try { + switch (type) { + case 'login': { + const login = await telephoneLogin(params); + toast.success(t('login.success')); + onLogin(login.data.data?.token); + break; + } + case 'register': { + const create = await telephoneUserRegister(params); + toast.success(t('register.success')); + onLogin(create.data.data?.token); + break; + } + case 'reset': + await telephoneResetPassword(params); + toast.success(t('reset.success')); + setType('login'); + break; + } + } catch (error) { + /* empty */ + } + }); + }; + + let UserForm: ReactNode = null; + switch (type) { + case 'login': + UserForm = ( + + ); + break; + case 'register': + UserForm = ( + + ); + break; + case 'reset': + UserForm = ( + + ); + break; + } + + return UserForm; +} diff --git a/apps/user/app/auth/phone/login-form.tsx b/apps/user/app/auth/phone/login-form.tsx new file mode 100644 index 0000000..e1707e8 --- /dev/null +++ b/apps/user/app/auth/phone/login-form.tsx @@ -0,0 +1,164 @@ +import useGlobalStore from '@/config/use-global'; +import { zodResolver } from '@hookform/resolvers/zod'; +import { Icon } from '@iconify/react/dist/iconify.js'; +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 { AreaCodeSelect } from '@workspace/ui/custom-components/area-code-select'; + +import { useTranslations } from 'next-intl'; +import { Dispatch, SetStateAction, useState } from 'react'; +import { useForm } from 'react-hook-form'; +import { z } from 'zod'; +import SendCode from '../send-code'; +import CloudFlareTurnstile from '../turnstile'; + +export default function LoginForm({ + loading, + onSubmit, + initialValues, + setInitialValues, + onSwitchForm, +}: { + loading?: boolean; + onSubmit: (data: any) => void; + initialValues: any; + setInitialValues: Dispatch>; + onSwitchForm: Dispatch>; +}) { + const t = useTranslations('auth.login'); + const { common } = useGlobalStore(); + const { verify } = common; + + const formSchema = z.object({ + telephone_area_code: z.string(), + telephone: z.string(), + telephone_code: z.string().optional(), + password: z.string().optional(), + cf_token: + verify.enable_login_verify && verify.turnstile_site_key ? z.string() : z.string().optional(), + }); + const form = useForm>({ + resolver: zodResolver(formSchema), + defaultValues: initialValues, + }); + + const [mode, setMode] = useState<'password' | 'code'>('password'); + + return ( + <> +
+ + ( + + +
+ ( + + + { + if (value.phone) { + form.setValue('telephone_area_code', value.phone); + } + }} + /> + + + + )} + /> + +
+
+ +
+ )} + /> + + ( + + +
+ + {mode === 'code' && } +
+
+
+ +
+ + +
+ )} + /> + {verify.enable_login_verify && ( + ( + + + + + + + )} + /> + )} + + + +
+ + +
+ + ); +} diff --git a/apps/user/app/auth/phone/register-form.tsx b/apps/user/app/auth/phone/register-form.tsx new file mode 100644 index 0000000..fe6f0bd --- /dev/null +++ b/apps/user/app/auth/phone/register-form.tsx @@ -0,0 +1,221 @@ +import useGlobalStore from '@/config/use-global'; +import { zodResolver } from '@hookform/resolvers/zod'; +import { Icon } from '@iconify/react/dist/iconify.js'; +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 { AreaCodeSelect } from '@workspace/ui/custom-components/area-code-select'; +import { Markdown } from '@workspace/ui/custom-components/markdown'; +import { useTranslations } from 'next-intl'; +import { Dispatch, SetStateAction } from 'react'; +import { useForm } from 'react-hook-form'; +import { z } from 'zod'; +import SendCode from '../send-code'; +import CloudFlareTurnstile from '../turnstile'; + +export default function RegisterForm({ + loading, + onSubmit, + initialValues, + setInitialValues, + onSwitchForm, +}: { + loading?: boolean; + onSubmit: (data: any) => void; + initialValues: any; + setInitialValues: Dispatch>; + onSwitchForm: Dispatch>; +}) { + const t = useTranslations('auth.register'); + const { common } = useGlobalStore(); + const { verify, auth, invite } = common; + + const formSchema = z + .object({ + telephone_area_code: z.string(), + telephone: z.string(), + password: z.string(), + repeat_password: z.string(), + code: z.string(), + invite: invite.forced_invite ? z.string() : z.string().nullish(), + cf_token: + verify.enable_register_verify && verify.turnstile_site_key + ? z.string() + : z.string().nullish(), + }) + .superRefine(({ password, repeat_password }, ctx) => { + if (password !== repeat_password) { + ctx.addIssue({ + code: z.ZodIssueCode.custom, + message: t('passwordMismatch'), + path: ['repeat_password'], + }); + } + }); + + const form = useForm>({ + resolver: zodResolver(formSchema), + defaultValues: { + ...initialValues, + telephone_area_code: initialValues?.telephone_area_code || '1', + invite: localStorage.getItem('invite') || '', + }, + }); + + return ( + <> + {auth.register.stop_register ? ( + {t('message')} + ) : ( +
+ + ( + + +
+ ( + + + { + if (value.phone) { + form.setValue('telephone_area_code', value.phone); + } + }} + /> + + + + )} + /> + +
+
+ +
+ )} + /> + ( + + + + + + + )} + /> + ( + + + + + + + )} + /> + ( + + +
+ + +
+
+ +
+ )} + /> + ( + + + + + + + )} + /> + {verify.enable_register_verify && ( + ( + + + + + + + )} + /> + )} + + + + )} +
+ {t('existingAccount')}  + +
+ + ); +} diff --git a/apps/user/app/auth/phone/reset-form.tsx b/apps/user/app/auth/phone/reset-form.tsx new file mode 100644 index 0000000..7882420 --- /dev/null +++ b/apps/user/app/auth/phone/reset-form.tsx @@ -0,0 +1,169 @@ +import useGlobalStore from '@/config/use-global'; +import { zodResolver } from '@hookform/resolvers/zod'; +import { Icon } from '@iconify/react/dist/iconify.js'; +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 { AreaCodeSelect } from '@workspace/ui/custom-components/area-code-select'; +import { useTranslations } from 'next-intl'; +import { Dispatch, SetStateAction, useState } from 'react'; +import { useForm } from 'react-hook-form'; +import { z } from 'zod'; +import SendCode from '../send-code'; +import CloudFlareTurnstile from '../turnstile'; + +export default function ResetForm({ + loading, + onSubmit, + initialValues, + onSwitchForm, +}: { + loading?: boolean; + onSubmit: (data: any) => void; + initialValues: any; + setInitialValues: Dispatch>; + onSwitchForm: Dispatch>; +}) { + const t = useTranslations('auth.reset'); + + const { common } = useGlobalStore(); + const { verify, auth } = common; + + const [targetDate, setTargetDate] = useState(); + + const formSchema = z.object({ + telephone_area_code: z.string(), + telephone: z.string(), + password: z.string(), + code: auth?.email?.email_enable_verify ? z.string() : z.string().nullish(), + cf_token: + verify.enable_register_verify && verify.turnstile_site_key + ? z.string() + : z.string().nullish(), + }); + const form = useForm>({ + resolver: zodResolver(formSchema), + defaultValues: initialValues, + }); + + return ( + <> +
+ + ( + + +
+ ( + + + { + if (value.phone) { + form.setValue('telephone_area_code', value.phone); + } + }} + /> + + + + )} + /> + +
+
+ +
+ )} + /> + ( + + + + + + + )} + /> + + {auth?.email?.email_enable_verify && ( + ( + + +
+ + +
+
+ +
+ )} + /> + )} + {verify.enable_reset_password_verify && ( + ( + + + + + + + )} + /> + )} + + + +
+ {t('existingAccount')}  + +
+ + ); +} diff --git a/apps/user/app/auth/send-code.tsx b/apps/user/app/auth/send-code.tsx new file mode 100644 index 0000000..ac65256 --- /dev/null +++ b/apps/user/app/auth/send-code.tsx @@ -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(); + + 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 ( + + ); +} diff --git a/apps/user/app/auth/user-check-form.tsx b/apps/user/app/auth/user-check-form.tsx deleted file mode 100644 index 364ff25..0000000 --- a/apps/user/app/auth/user-check-form.tsx +++ /dev/null @@ -1,111 +0,0 @@ -import useGlobalStore from '@/config/use-global'; -import { checkUser } from '@/services/common/auth'; -import { zodResolver } from '@hookform/resolvers/zod'; -import { Icon } from '@iconify/react/dist/iconify.js'; -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 { Dispatch, SetStateAction, useState } from 'react'; -import { useForm } from 'react-hook-form'; -import { z } from 'zod'; - -interface UserCheckFormProps { - loading?: boolean; - onSubmit: (data: any) => Promise; - initialValues: any; - setInitialValues: Dispatch>; - setType: (type: 'login' | 'register' | 'reset') => void; -} - -export default function UserCheckForm({ - loading, - onSubmit, - initialValues, - setInitialValues, - setType, -}: Readonly) { - const t = useTranslations('auth.check'); - const { common } = useGlobalStore(); - const { register } = common; - - const handleCheckUser = async (email: string) => { - try { - const response = await checkUser({ email }); - const exist = response.data.data?.exist; - - const newType = exist ? 'login' : 'register'; - const domain = email.split('@')[1]; - const isValid = - exist || - !register.enable_email_verify || - register.email_domain_suffix_list.split('\n').includes(domain || ''); - - setInitialValues({ - ...initialValues, - email, - }); - setType(newType); - return !isValid; - } catch (error) { - console.log('Error checking user:', error); - return false; - } - }; - - const formSchema = z.object({ - email: z - .string() - .email(t('email')) - .refine(handleCheckUser, { - message: t('whitelist'), - }), - }); - - const form = useForm>({ - resolver: zodResolver(formSchema), - defaultValues: initialValues, - }); - - const [isSubmitting, setIsSubmitting] = useState(false); - - const handleSubmit = async (data: any) => { - setIsSubmitting(true); - await onSubmit(data); - setIsSubmitting(false); - }; - - return ( -
- - ( - - - - - - - )} - /> - - - - ); -} diff --git a/apps/user/config/use-global.tsx b/apps/user/config/use-global.tsx index 0c8a9d6..11181d6 100644 --- a/apps/user/config/use-global.tsx +++ b/apps/user/config/use-global.tsx @@ -27,21 +27,26 @@ export const useGlobalStore = create((set, get) => ({ enable_reset_password_verify: false, turnstile_site_key: '', }, - register: { - stop_register: false, - enable_email_verify: false, - enable_email_domain_suffix: false, - email_domain_suffix_list: '', - enable_trial: false, - enable_ip_register_limit: false, - ip_register_limit: 0, - ip_register_limit_duration: 0, + auth: { sms: { sms_enabled: false, sms_limit: 0, sms_interval: 0, sms_expire_time: 0, }, + email: { + email_enabled: false, + email_enable_verify: false, + email_enable_domain_suffix: false, + email_domain_suffix_list: '', + }, + register: { + stop_register: false, + enable_trial: false, + enable_ip_register_limit: false, + ip_register_limit: 0, + ip_register_limit_duration: 0, + }, }, invite: { forced_invite: false, diff --git a/apps/user/locales/cs-CZ/auth.json b/apps/user/locales/cs-CZ/auth.json index a5c3683..ef2bf0a 100644 --- a/apps/user/locales/cs-CZ/auth.json +++ b/apps/user/locales/cs-CZ/auth.json @@ -4,19 +4,27 @@ "continue": "Pokračovat", "description": "Zadejte svůj e-mail pro pokračování v přihlášení nebo registraci.", "email": "Zadejte platnou e-mailovou adresu.", - "title": "Přihlášení/Registrace", - "whitelist": "Doména e-mailu není na povoleném seznamu." + "title": "Přihlášení/Registrace" }, + "get": "Získat", "login": { + "codeLogin": "Přihlášení ověřovacím kódem", "description": "Zadejte prosím své přihlašovací údaje pro přihlášení.", + "email": "Zadejte platnou e-mailovou adresu.", "forgotPassword": "Zapomněli jste heslo?", + "passwordLogin": "Přihlášení heslem", + "registerAccount": "Zaregistrovat účet", "success": "Přihlášení bylo úspěšné!", - "switchAccount": "Registrace/Přepnout účet", "title": "Přihlášení" }, + "methods": { + "email": "E-mail", + "sms": "Telefon" + }, "orWithEmail": "nebo pomocí e-mailu", "register": { "description": "Vytvořte si nový účet, vyplňte své údaje pro registraci.", + "email": "Zadejte prosím platnou e-mailovou adresu.", "existingAccount": "Již máte účet?", "get": "Získat", "invite": "Pozvánkový kód", @@ -24,15 +32,19 @@ "passwordMismatch": "Hesla se neshodují", "success": "Registrace úspěšná, automaticky přihlášeni!", "switchToLogin": "Přihlásit se/Obnovit e-mail", - "title": "Registrace" + "title": "Registrace", + "whitelist": "Doména e-mailu není na povoleném seznamu." }, "reset": { "description": "Zadejte svou e-mailovou adresu pro obnovení hesla.", + "email": "Zadejte prosím platnou e-mailovou adresu.", "existingAccount": "Již máte účet?", "get": "Získat", "success": "Obnovení hesla bylo úspěšné, automaticky přepnuto na přihlášení!", "switchToLogin": "Přihlášení/Registrace", "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." } diff --git a/apps/user/locales/de-DE/auth.json b/apps/user/locales/de-DE/auth.json index f49aa1c..b05be60 100644 --- a/apps/user/locales/de-DE/auth.json +++ b/apps/user/locales/de-DE/auth.json @@ -4,19 +4,27 @@ "continue": "Fortfahren", "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.", - "title": "Anmelden/Registrieren", - "whitelist": "Die E-Mail-Domain befindet sich nicht auf der zugelassenen Whitelist." + "title": "Anmelden/Registrieren" }, + "get": "Erhalten", "login": { + "codeLogin": "Anmeldung mit Bestätigungscode", "description": "Bitte geben Sie Ihre Kontoinformationen ein, um sich anzumelden.", + "email": "Bitte geben Sie eine gültige E-Mail-Adresse ein.", "forgotPassword": "Passwort vergessen?", + "passwordLogin": "Anmeldung mit Passwort", + "registerAccount": "Konto registrieren", "success": "Erfolgreich eingeloggt!", - "switchAccount": "Registrieren/Konto wechseln", "title": "Anmeldung" }, + "methods": { + "email": "E-Mail", + "sms": "Telefon" + }, "orWithEmail": "oder mit E-Mail", "register": { "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?", "get": "Erhalten", "invite": "Einladungscode", @@ -24,15 +32,19 @@ "passwordMismatch": "Die eingegebenen Passwörter stimmen nicht überein", "success": "Registrierung erfolgreich, Sie sind automatisch eingeloggt!", "switchToLogin": "Anmelden/E-Mail zurücksetzen", - "title": "Registrieren" + "title": "Registrieren", + "whitelist": "Die E-Mail-Domain befindet sich nicht in der erlaubten Whitelist." }, "reset": { "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?", "get": "Erhalten", "success": "Passwort erfolgreich zurückgesetzt, automatisch zum Login gewechselt!", "switchToLogin": "Anmelden/Registrieren", "title": "Passwort zurücksetzen" }, - "tos": "Nutzungsbedingungen" + "tos": "Nutzungsbedingungen", + "verifyAccount": "Kontoverifizierung", + "verifyAccountDesc": "Bitte verifizieren Sie Ihr Konto, um fortzufahren." } diff --git a/apps/user/locales/en-US/auth.json b/apps/user/locales/en-US/auth.json index 4eba7ec..a6356d6 100644 --- a/apps/user/locales/en-US/auth.json +++ b/apps/user/locales/en-US/auth.json @@ -4,35 +4,47 @@ "continue": "Continue", "description": "Please enter your email to continue logging in or registering.", "email": "Please enter a valid email address.", - "title": "Login/Register", - "whitelist": "The email domain is not in the allowed whitelist." + "title": "Login/Register" }, + "get": "Get", "login": { + "codeLogin": "Verification Code Login", "description": "Please enter your account information to log in.", + "email": "Please enter a valid email address.", "forgotPassword": "Forgot Password?", + "passwordLogin": "Password Login", + "registerAccount": "Register Account", "success": "Login successful!", - "switchAccount": "Register/Switch Account", "title": "Login" }, + "methods": { + "email": "Email", + "sms": "Telephone" + }, "orWithEmail": "Or with Email", "register": { "description": "Create a new account, fill in your information to register.", + "email": "Please enter a valid email address.", "existingAccount": "Already have an account?", "get": "Get", "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.**", "passwordMismatch": "Passwords do not match", "success": "Registration successful, automatically logged in!", - "switchToLogin": "Login/Reset Email", - "title": "Register" + "switchToLogin": "Login", + "title": "Register", + "whitelist": "The email domain is not in the allowed whitelist." }, "reset": { "description": "Please enter your email address to reset your password.", + "email": "Please enter a valid email address.", "existingAccount": "Already have an account?", "get": "Get", "success": "Password reset successful, automatically switched to login!", "switchToLogin": "Login/Register", "title": "Reset Password" }, - "tos": "Terms of Service" + "tos": "Terms of Service", + "verifyAccount": "Account Verification", + "verifyAccountDesc": " Please verify your account to continue." } diff --git a/apps/user/locales/es-ES/auth.json b/apps/user/locales/es-ES/auth.json index f2f2706..70abeb5 100644 --- a/apps/user/locales/es-ES/auth.json +++ b/apps/user/locales/es-ES/auth.json @@ -4,19 +4,27 @@ "continue": "Continuar", "description": "Por favor, introduzca su correo electrónico para continuar con el inicio de sesión o el registro.", "email": "Por favor, introduzca una dirección de correo electrónico válida.", - "title": "Iniciar sesión/Registrarse", - "whitelist": "El dominio del correo electrónico no está en la lista blanca permitida." + "title": "Iniciar sesión/Registrarse" }, + "get": "Obtener", "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.", + "email": "Por favor, introduce una dirección de correo electrónico válida.", "forgotPassword": "¿Olvidó su contraseña?", + "passwordLogin": "Inicio de sesión con contraseña", + "registerAccount": "Registrar cuenta", "success": "¡Inicio de sesión exitoso!", - "switchAccount": "Registrar/Cambiar cuenta", "title": "Iniciar sesión" }, + "methods": { + "email": "Correo electrónico", + "sms": "Teléfono" + }, "orWithEmail": "o usar correo electrónico", "register": { "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?", "get": "Obtener", "invite": "Código de invitación", @@ -24,15 +32,19 @@ "passwordMismatch": "Las contraseñas no coinciden", "success": "¡Registro exitoso, has iniciado sesión automáticamente!", "switchToLogin": "Iniciar sesión/restablecer correo electrónico", - "title": "Registro" + "title": "Registro", + "whitelist": "El dominio de correo electrónico no está en la lista blanca permitida." }, "reset": { "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?", "get": "Obtener", "success": "¡Contraseña restablecida con éxito, se ha cambiado automáticamente a iniciar sesión!", "switchToLogin": "Iniciar sesión/Registrarse", "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." } diff --git a/apps/user/locales/es-MX/auth.json b/apps/user/locales/es-MX/auth.json index 199789f..2a4649e 100644 --- a/apps/user/locales/es-MX/auth.json +++ b/apps/user/locales/es-MX/auth.json @@ -4,19 +4,27 @@ "continue": "Continuar", "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.", - "title": "Iniciar sesión/Registrarse", - "whitelist": "El dominio del correo electrónico no está en la lista blanca permitida." + "title": "Iniciar sesión/Registrarse" }, + "get": "Obtener", "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.", + "email": "Por favor, ingresa una dirección de correo electrónico válida.", "forgotPassword": "¿Olvidó su contraseña?", + "passwordLogin": "Inicio de sesión con contraseña", + "registerAccount": "Registrar Cuenta", "success": "¡Inicio de sesión exitoso!", - "switchAccount": "Registrar/Cambiar cuenta", "title": "Iniciar sesión" }, + "methods": { + "email": "Correo electrónico", + "sms": "Teléfono" + }, "orWithEmail": "o usar correo electrónico", "register": { "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?", "get": "Obtener", "invite": "Código de invitación", @@ -24,15 +32,19 @@ "passwordMismatch": "Las contraseñas no coinciden", "success": "¡Registro exitoso, has iniciado sesión automáticamente!", "switchToLogin": "Iniciar sesión/restablecer correo electrónico", - "title": "Registro" + "title": "Registro", + "whitelist": "El dominio de correo electrónico no está en la lista blanca permitida." }, "reset": { "description": "Por favor, 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?", "get": "Obtener", "success": "¡Contraseña restablecida con éxito, se ha cambiado automáticamente a iniciar sesión!", "switchToLogin": "Iniciar sesión/Registrarse", "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." } diff --git a/apps/user/locales/fa-IR/auth.json b/apps/user/locales/fa-IR/auth.json index 1899268..190963f 100644 --- a/apps/user/locales/fa-IR/auth.json +++ b/apps/user/locales/fa-IR/auth.json @@ -4,19 +4,27 @@ "continue": "ادامه", "description": "لطفاً برای ادامه ورود یا ثبت‌نام، ایمیل خود را وارد کنید.", "email": "لطفاً یک آدرس ایمیل معتبر وارد کنید.", - "title": "ورود/ثبت‌نام", - "whitelist": "دامنه ایمیل در لیست مجاز نیست." + "title": "ورود/ثبت‌نام" }, + "get": "دریافت", "login": { + "codeLogin": "ورود با کد تأیید", "description": "لطفاً اطلاعات حساب خود را برای ورود وارد کنید.", + "email": "لطفاً یک آدرس ایمیل معتبر وارد کنید.", "forgotPassword": "رمز عبور را فراموش کرده‌اید؟", + "passwordLogin": "ورود با رمز عبور", + "registerAccount": "ثبت حساب کاربری", "success": "ورود موفقیت‌آمیز بود!", - "switchAccount": "ثبت‌نام/تغییر حساب", "title": "ورود" }, + "methods": { + "email": "ایمیل", + "sms": "تلفن" + }, "orWithEmail": "یا با ایمیل", "register": { "description": "ایجاد یک حساب کاربری جدید، اطلاعات خود را برای ثبت‌نام وارد کنید.", + "email": "لطفاً یک آدرس ایمیل معتبر وارد کنید.", "existingAccount": "آیا قبلاً حساب کاربری دارید؟", "get": "دریافت", "invite": "کد دعوت", @@ -24,15 +32,19 @@ "passwordMismatch": "رمزهای عبور مطابقت ندارند", "success": "ثبت‌نام موفقیت‌آمیز بود، به‌طور خودکار وارد شدید!", "switchToLogin": "ورود/بازنشانی ایمیل", - "title": "ثبت‌نام" + "title": "ثبت‌نام", + "whitelist": "دامنه ایمیل در لیست سفید مجاز نیست." }, "reset": { "description": "لطفاً آدرس ایمیل خود را وارد کنید تا رمز عبور خود را بازنشانی کنید.", + "email": "لطفاً یک آدرس ایمیل معتبر وارد کنید.", "existingAccount": "آیا قبلاً حساب کاربری دارید؟", "get": "دریافت", "success": "بازنشانی رمز عبور با موفقیت انجام شد، به‌طور خودکار به صفحه ورود منتقل شدید!", "switchToLogin": "ورود/ثبت‌نام", "title": "بازنشانی رمز عبور" }, - "tos": "شرایط خدمات" + "tos": "شرایط خدمات", + "verifyAccount": "تأیید حساب", + "verifyAccountDesc": "لطفاً حساب خود را برای ادامه تأیید کنید." } diff --git a/apps/user/locales/fi-FI/auth.json b/apps/user/locales/fi-FI/auth.json index e8f9d43..bbf21f3 100644 --- a/apps/user/locales/fi-FI/auth.json +++ b/apps/user/locales/fi-FI/auth.json @@ -4,19 +4,27 @@ "continue": "Jatka", "description": "Syötä sähköpostiosoitteesi jatkaaksesi kirjautumista tai rekisteröitymistä.", "email": "Anna kelvollinen sähköpostiosoite.", - "title": "Kirjaudu/Rekisteröidy", - "whitelist": "Sähköpostin verkkotunnus ei ole sallitussa luettelossa." + "title": "Kirjaudu/Rekisteröidy" }, + "get": "Hanki", "login": { + "codeLogin": "Vahvistuskoodilla kirjautuminen", "description": "Ole hyvä ja syötä tilitietosi kirjautuaksesi sisään.", + "email": "Anna kelvollinen sähköpostiosoite.", "forgotPassword": "Unohditko salasanasi?", + "passwordLogin": "Salasanalla kirjautuminen", + "registerAccount": "Rekisteröi tili", "success": "Kirjautuminen onnistui!", - "switchAccount": "Rekisteröidy/Vaihda tiliä", "title": "Kirjaudu sisään" }, + "methods": { + "email": "Sähköposti", + "sms": "Puhelin" + }, "orWithEmail": "tai käytä sähköpostia", "register": { "description": "Luo uusi tili täyttämällä tietosi rekisteröityäksesi.", + "email": "Anna kelvollinen sähköpostiosoite.", "existingAccount": "Onko sinulla jo tili?", "get": "Hanki", "invite": "Kutsukoodi", @@ -24,15 +32,19 @@ "passwordMismatch": "Salasanat eivät täsmää", "success": "Rekisteröinti onnistui, olet kirjautunut automaattisesti!", "switchToLogin": "Kirjaudu/sähköpostin nollaus", - "title": "Rekisteröidy" + "title": "Rekisteröidy", + "whitelist": "Sähköpostidomain ei ole sallitussa luettelossa." }, "reset": { "description": "Anna sähköpostiosoitteesi salasanan nollaamiseksi.", + "email": "Anna kelvollinen sähköpostiosoite.", "existingAccount": "Onko sinulla jo tili?", "get": "Hanki", "success": "Salasanan nollaus onnistui, siirryttiin automaattisesti kirjautumiseen!", "switchToLogin": "Kirjaudu/Rekisteröidy", "title": "Nollaa salasana" }, - "tos": "Palveluehdot" + "tos": "Palveluehdot", + "verifyAccount": "Tilin vahvistus", + "verifyAccountDesc": "Vahvista tilisi jatkaaksesi." } diff --git a/apps/user/locales/fr-FR/auth.json b/apps/user/locales/fr-FR/auth.json index d5171d7..0f83b4f 100644 --- a/apps/user/locales/fr-FR/auth.json +++ b/apps/user/locales/fr-FR/auth.json @@ -4,19 +4,27 @@ "continue": "Continuer", "description": "Veuillez entrer votre adresse e-mail pour continuer à vous connecter ou à vous inscrire.", "email": "Veuillez entrer une adresse e-mail valide.", - "title": "Connexion/Inscription", - "whitelist": "Le domaine de l'e-mail n'est pas sur la liste blanche autorisée." + "title": "Connexion/Inscription" }, + "get": "Obtenir", "login": { + "codeLogin": "Connexion par code de vérification", "description": "Veuillez entrer vos informations de compte pour vous connecter.", + "email": "Veuillez entrer une adresse e-mail valide.", "forgotPassword": "Mot de passe oublié ?", + "passwordLogin": "Connexion par mot de passe", + "registerAccount": "Créer un compte", "success": "Connexion réussie !", - "switchAccount": "S'inscrire/Changer de compte", "title": "Connexion" }, + "methods": { + "email": "E-mail", + "sms": "Téléphone" + }, "orWithEmail": "ou utiliser l'e-mail", "register": { "description": "Créez un nouveau compte, remplissez vos informations pour vous inscrire.", + "email": "Veuillez entrer une adresse email valide.", "existingAccount": "Vous avez déjà un compte ?", "get": "Obtenir", "invite": "Code d'invitation", @@ -24,15 +32,19 @@ "passwordMismatch": "Les mots de passe saisis ne correspondent pas", "success": "Inscription réussie, vous êtes connecté automatiquement !", "switchToLogin": "Connexion/Réinitialiser l'email", - "title": "Inscription" + "title": "Inscription", + "whitelist": "Le domaine de l'email n'est pas dans la liste blanche autorisée." }, "reset": { "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 ?", "get": "Obtenir", "success": "Réinitialisation du mot de passe réussie, vous êtes automatiquement connecté !", "switchToLogin": "Connexion/Inscription", "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." } diff --git a/apps/user/locales/hi-IN/auth.json b/apps/user/locales/hi-IN/auth.json index b2b042b..0535f76 100644 --- a/apps/user/locales/hi-IN/auth.json +++ b/apps/user/locales/hi-IN/auth.json @@ -4,19 +4,27 @@ "continue": "जारी रखें", "description": "लॉगिन या पंजीकरण जारी रखने के लिए कृपया अपना ईमेल दर्ज करें।", "email": "कृपया एक मान्य ईमेल पता दर्ज करें।", - "title": "लॉगिन/पंजीकरण", - "whitelist": "ईमेल डोमेन अनुमत श्वेतसूची में नहीं है।" + "title": "लॉगिन/पंजीकरण" }, + "get": "प्राप्त करें", "login": { + "codeLogin": "सत्यापन कोड लॉगिन", "description": "कृपया लॉगिन करने के लिए अपनी खाता जानकारी दर्ज करें।", + "email": "कृपया एक मान्य ईमेल पता दर्ज करें।", "forgotPassword": "पासवर्ड भूल गए?", + "passwordLogin": "पासवर्ड लॉगिन", + "registerAccount": "खाता पंजीकृत करें", "success": "लॉगिन सफल!", - "switchAccount": "पंजीकरण/खाता बदलें", "title": "लॉगिन" }, + "methods": { + "email": "ईमेल", + "sms": "टेलीफोन" + }, "orWithEmail": "या ईमेल का उपयोग करें", "register": { "description": "नया खाता बनाएं, पंजीकरण के लिए अपनी जानकारी भरें।", + "email": "कृपया एक मान्य ईमेल पता दर्ज करें।", "existingAccount": "पहले से खाता है?", "get": "प्राप्त करें", "invite": "आमंत्रण कोड", @@ -24,15 +32,19 @@ "passwordMismatch": "दोनों पासवर्ड मेल नहीं खा रहे हैं", "success": "पंजीकरण सफल, स्वचालित रूप से लॉग इन हो गया!", "switchToLogin": "लॉगिन/ईमेल रीसेट करें", - "title": "पंजीकरण" + "title": "पंजीकरण", + "whitelist": "ईमेल डोमेन अनुमत श्वेतसूची में नहीं है।" }, "reset": { "description": "कृपया अपना ईमेल पता दर्ज करें ताकि पासवर्ड रीसेट किया जा सके।", + "email": "कृपया एक मान्य ईमेल पता दर्ज करें।", "existingAccount": "पहले से खाता है?", "get": "प्राप्त करें", "success": "पासवर्ड रीसेट सफल, स्वचालित रूप से लॉगिन पर स्विच हो गया है!", "switchToLogin": "लॉगिन/रजिस्टर", "title": "पासवर्ड रीसेट" }, - "tos": "सेवा की शर्तें" + "tos": "सेवा की शर्तें", + "verifyAccount": "खाता सत्यापन", + "verifyAccountDesc": "कृपया जारी रखने के लिए अपने खाते को सत्यापित करें।" } diff --git a/apps/user/locales/hu-HU/auth.json b/apps/user/locales/hu-HU/auth.json index 2d86a9a..16ef874 100644 --- a/apps/user/locales/hu-HU/auth.json +++ b/apps/user/locales/hu-HU/auth.json @@ -4,19 +4,27 @@ "continue": "Folytatás", "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.", - "title": "Bejelentkezés/Regisztráció", - "whitelist": "Az e-mail domain nem szerepel az engedélyezett listán." + "title": "Bejelentkezés/Regisztráció" }, + "get": "Szerezd meg", "login": { + "codeLogin": "Ellenőrző kódos bejelentkezés", "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?", + "passwordLogin": "Jelszavas bejelentkezés", + "registerAccount": "Fiók regisztrálása", "success": "Sikeres bejelentkezés!", - "switchAccount": "Regisztráció/Fiók váltása", "title": "Bejelentkezés" }, + "methods": { + "email": "E-mail", + "sms": "Telefon" + }, "orWithEmail": "vagy használja az e-mailt", "register": { "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?", "get": "Megszerez", "invite": "Meghívókód", @@ -24,15 +32,19 @@ "passwordMismatch": "A két jelszó nem egyezik", "success": "Sikeres regisztráció, automatikusan bejelentkezett!", "switchToLogin": "Bejelentkezés/E-mail visszaállítása", - "title": "Regisztráció" + "title": "Regisztráció", + "whitelist": "Az e-mail domain nem szerepel az engedélyezett listán." }, "reset": { "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?", "get": "Megkap", "success": "A jelszó visszaállítása sikeres, automatikusan átváltott a bejelentkezésre!", "switchToLogin": "Bejelentkezés/Regisztráció", "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 vissza fiókját a folytatáshoz." } diff --git a/apps/user/locales/ja-JP/auth.json b/apps/user/locales/ja-JP/auth.json index 3b7b5a0..bdadb73 100644 --- a/apps/user/locales/ja-JP/auth.json +++ b/apps/user/locales/ja-JP/auth.json @@ -4,19 +4,27 @@ "continue": "続ける", "description": "ログインまたは登録を続行するには、メールアドレスを入力してください。", "email": "有効なメールアドレスを入力してください。", - "title": "ログイン/登録", - "whitelist": "メールドメインが許可されたホワイトリストにありません。" + "title": "ログイン/登録" }, + "get": "取得", "login": { + "codeLogin": "認証コードでログイン", "description": "アカウント情報を入力してログインしてください。", + "email": "有効なメールアドレスを入力してください。", "forgotPassword": "パスワードをお忘れですか?", + "passwordLogin": "パスワードでログイン", + "registerAccount": "アカウント登録", "success": "ログイン成功!", - "switchAccount": "登録/アカウント切り替え", "title": "ログイン" }, + "methods": { + "email": "メール", + "sms": "電話" + }, "orWithEmail": "またはメールを使用", "register": { "description": "新しいアカウントを作成し、情報を入力して登録してください。", + "email": "有効なメールアドレスを入力してください。", "existingAccount": "すでにアカウントをお持ちですか?", "get": "取得", "invite": "招待コード", @@ -24,15 +32,19 @@ "passwordMismatch": "パスワードが一致しません", "success": "登録成功、自動的にログインしました!", "switchToLogin": "ログイン/メールリセット", - "title": "登録" + "title": "登録", + "whitelist": "メールドメインが許可されたホワイトリストに含まれていません。" }, "reset": { "description": "パスワードをリセットするには、メールアドレスを入力してください。", + "email": "有効なメールアドレスを入力してください。", "existingAccount": "すでにアカウントをお持ちですか?", "get": "取得", "success": "パスワードのリセットに成功しました。自動的にログインに切り替わりました!", "switchToLogin": "ログイン/登録", "title": "パスワードリセット" }, - "tos": "利用規約" + "tos": "利用規約", + "verifyAccount": "アカウント確認", + "verifyAccountDesc": "アカウントを確認して続行してください。" } diff --git a/apps/user/locales/ko-KR/auth.json b/apps/user/locales/ko-KR/auth.json index fedae9c..6ccede3 100644 --- a/apps/user/locales/ko-KR/auth.json +++ b/apps/user/locales/ko-KR/auth.json @@ -4,19 +4,27 @@ "continue": "계속", "description": "로그인 또는 등록을 계속하려면 이메일을 입력하세요.", "email": "유효한 이메일 주소를 입력하세요.", - "title": "로그인/등록", - "whitelist": "이메일 도메인이 허용된 화이트리스트에 없습니다." + "title": "로그인/등록" }, + "get": "가져오기", "login": { + "codeLogin": "인증 코드 로그인", "description": "로그인하려면 계정 정보를 입력하세요.", + "email": "유효한 이메일 주소를 입력하세요.", "forgotPassword": "비밀번호를 잊으셨나요?", + "passwordLogin": "비밀번호 로그인", + "registerAccount": "계정 등록", "success": "로그인 성공!", - "switchAccount": "회원가입/계정 전환", "title": "로그인" }, + "methods": { + "email": "이메일", + "sms": "전화" + }, "orWithEmail": "또는 이메일 사용", "register": { "description": "새 계정을 생성하고 정보를 입력하여 등록하세요.", + "email": "유효한 이메일 주소를 입력해 주세요.", "existingAccount": "이미 계정이 있으신가요?", "get": "받기", "invite": "초대 코드", @@ -24,15 +32,19 @@ "passwordMismatch": "비밀번호가 일치하지 않습니다.", "success": "등록 성공, 자동으로 로그인되었습니다!", "switchToLogin": "로그인/이메일 재설정", - "title": "등록" + "title": "등록", + "whitelist": "이메일 도메인이 허용된 화이트리스트에 포함되어 있지 않습니다." }, "reset": { "description": "비밀번호를 재설정하려면 이메일 주소를 입력하세요.", + "email": "유효한 이메일 주소를 입력하세요.", "existingAccount": "이미 계정이 있으신가요?", "get": "받기", "success": "비밀번호 재설정 성공, 자동으로 로그인으로 전환되었습니다!", "switchToLogin": "로그인/회원가입", "title": "비밀번호 재설정" }, - "tos": "서비스 약관" + "tos": "서비스 약관", + "verifyAccount": "계정 확인", + "verifyAccountDesc": "계속하려면 계정을 인증해 주세요." } diff --git a/apps/user/locales/no-NO/auth.json b/apps/user/locales/no-NO/auth.json index 87160b7..0318ea9 100644 --- a/apps/user/locales/no-NO/auth.json +++ b/apps/user/locales/no-NO/auth.json @@ -4,19 +4,27 @@ "continue": "Fortsett", "description": "Vennligst skriv inn din e-post for å fortsette med innlogging eller registrering.", "email": "Vennligst skriv inn en gyldig e-postadresse.", - "title": "Logg inn/Registrer", - "whitelist": "E-postdomenet er ikke på den tillatte hvitelisten." + "title": "Logg inn/Registrer" }, + "get": "Få", "login": { + "codeLogin": "Verifikasjonskodeinnlogging", "description": "Vennligst skriv inn kontoinformasjonen din for å logge inn.", + "email": "Vennligst oppgi en gyldig e-postadresse.", "forgotPassword": "Glemt passord?", + "passwordLogin": "Passordinnlogging", + "registerAccount": "Registrer konto", "success": "Innlogging vellykket!", - "switchAccount": "Registrer/bytt konto", "title": "Logg inn" }, + "methods": { + "email": "E-post", + "sms": "Telefon" + }, "orWithEmail": "eller bruk e-post", "register": { "description": "Opprett en ny konto, fyll inn informasjonen din for å registrere deg.", + "email": "Vennligst oppgi en gyldig e-postadresse.", "existingAccount": "Har du allerede en konto?", "get": "Få", "invite": "Invitasjonskode", @@ -24,15 +32,19 @@ "passwordMismatch": "Passordene stemmer ikke overens", "success": "Registrering vellykket, du er automatisk logget inn!", "switchToLogin": "Logg inn/tilbakestill e-post", - "title": "Registrer deg" + "title": "Registrer deg", + "whitelist": "E-postdomenet er ikke i den tillatte hvitelisten." }, "reset": { "description": "Vennligst skriv inn din e-postadresse for å tilbakestille passordet.", + "email": "Vennligst skriv inn en gyldig e-postadresse.", "existingAccount": "Har du allerede en konto?", "get": "Hent", "success": "Passordet er tilbakestilt, og du er automatisk logget inn!", "switchToLogin": "Logg inn/Registrer", "title": "Tilbakestill passord" }, - "tos": "Tjenestevilkår" + "tos": "Tjenestevilkår", + "verifyAccount": "Kontobekreftelse", + "verifyAccountDesc": "Vennligst bekreft kontoen din for å fortsette." } diff --git a/apps/user/locales/pl-PL/auth.json b/apps/user/locales/pl-PL/auth.json index 8633ecc..510bba6 100644 --- a/apps/user/locales/pl-PL/auth.json +++ b/apps/user/locales/pl-PL/auth.json @@ -4,19 +4,27 @@ "continue": "Kontynuuj", "description": "Wprowadź swój adres e-mail, aby kontynuować logowanie lub rejestrację.", "email": "Proszę wprowadzić prawidłowy adres e-mail.", - "title": "Zaloguj się/Zarejestruj się", - "whitelist": "Domena e-mail nie znajduje się na dozwolonej białej liście." + "title": "Zaloguj się/Zarejestruj się" }, + "get": "Pobierz", "login": { + "codeLogin": "Logowanie za pomocą kodu weryfikacyjnego", "description": "Proszę wprowadzić dane konta, aby się zalogować.", + "email": "Proszę wprowadzić prawidłowy adres e-mail.", "forgotPassword": "Zapomniałeś hasła?", + "passwordLogin": "Logowanie za pomocą hasła", + "registerAccount": "Zarejestruj konto", "success": "Zalogowano pomyślnie!", - "switchAccount": "Zarejestruj się/Zmień konto", "title": "Logowanie" }, + "methods": { + "email": "E-mail", + "sms": "Telefon" + }, "orWithEmail": "lub użyj e-maila", "register": { "description": "Utwórz nowe konto, wypełnij swoje dane, aby się zarejestrować.", + "email": "Proszę wprowadzić prawidłowy adres e-mail.", "existingAccount": "Masz już konto?", "get": "Pobierz", "invite": "Kod zaproszenia", @@ -24,15 +32,19 @@ "passwordMismatch": "Wprowadzone hasła nie są zgodne", "success": "Rejestracja zakończona sukcesem, automatycznie zalogowano!", "switchToLogin": "Zaloguj się/Zresetuj e-mail", - "title": "Rejestracja" + "title": "Rejestracja", + "whitelist": "Domena e-mail nie znajduje się na dozwolonej liście." }, "reset": { "description": "Wprowadź swój adres e-mail, aby zresetować hasło.", + "email": "Proszę wprowadzić prawidłowy adres e-mail.", "existingAccount": "Masz już konto?", "get": "Uzyskaj", "success": "Hasło zostało pomyślnie zresetowane, automatycznie przełączono na logowanie!", "switchToLogin": "Zaloguj się/Zarejestruj się", "title": "Zresetuj hasło" }, - "tos": "Warunki usługi" + "tos": "Warunki usługi", + "verifyAccount": "Weryfikacja konta", + "verifyAccountDesc": "Proszę zweryfikować swoje konto, aby kontynuować." } diff --git a/apps/user/locales/pt-BR/auth.json b/apps/user/locales/pt-BR/auth.json index 2ee4018..4a0f7f5 100644 --- a/apps/user/locales/pt-BR/auth.json +++ b/apps/user/locales/pt-BR/auth.json @@ -4,19 +4,27 @@ "continue": "Continuar", "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.", - "title": "Login/Registro", - "whitelist": "O domínio do e-mail não está na lista de permissões." + "title": "Login/Registro" }, + "get": "Obter", "login": { + "codeLogin": "Login com Código de Verificação", "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?", + "passwordLogin": "Login com Senha", + "registerAccount": "Registrar Conta", "success": "Login bem-sucedido!", - "switchAccount": "Registrar/Trocar de conta", "title": "Login" }, + "methods": { + "email": "Email", + "sms": "Telefone" + }, "orWithEmail": "ou use o e-mail", "register": { "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?", "get": "Obter", "invite": "Código de convite", @@ -24,15 +32,19 @@ "passwordMismatch": "As senhas inseridas não coincidem", "success": "Registro bem-sucedido, login automático realizado!", "switchToLogin": "Login/Redefinir e-mail", - "title": "Registrar" + "title": "Registrar", + "whitelist": "O domínio de e-mail não está na lista de permissões permitida." }, "reset": { "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?", "get": "Obter", "success": "Senha redefinida com sucesso, você foi automaticamente redirecionado para o login!", "switchToLogin": "Entrar/Registrar", "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." } diff --git a/apps/user/locales/ro-RO/auth.json b/apps/user/locales/ro-RO/auth.json index fc15126..eae7b22 100644 --- a/apps/user/locales/ro-RO/auth.json +++ b/apps/user/locales/ro-RO/auth.json @@ -4,19 +4,27 @@ "continue": "Continuă", "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ă.", - "title": "Autentificare/Înregistrare", - "whitelist": "Domeniul adresei de e-mail nu se află pe lista albă permisă." + "title": "Autentificare/Înregistrare" }, + "get": "Obține", "login": { + "codeLogin": "Autentificare cu cod de verificare", "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?", + "passwordLogin": "Autentificare cu parolă", + "registerAccount": "Înregistrează cont", "success": "Autentificare reușită!", - "switchAccount": "Înregistrare/Schimbare cont", "title": "Autentificare" }, + "methods": { + "email": "Email", + "sms": "Telefon" + }, "orWithEmail": "sau folosește e-mailul", "register": { "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?", "get": "Obțineți", "invite": "Cod de invitație", @@ -24,15 +32,19 @@ "passwordMismatch": "Parolele introduse nu se potrivesc", "success": "Înregistrare reușită, ați fost conectat automat!", "switchToLogin": "Conectare/Resetare email", - "title": "Înregistrare" + "title": "Înregistrare", + "whitelist": "Domeniul de email nu este în lista albă permisă." }, "reset": { "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?", "get": "Obțineți", "success": "Parola a fost resetată cu succes, ați fost redirecționat automat la autentificare!", "switchToLogin": "Autentificare/Înregistrare", "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." } diff --git a/apps/user/locales/ru-RU/auth.json b/apps/user/locales/ru-RU/auth.json index a9d6e49..ff1f5d6 100644 --- a/apps/user/locales/ru-RU/auth.json +++ b/apps/user/locales/ru-RU/auth.json @@ -4,19 +4,27 @@ "continue": "Продолжить", "description": "Пожалуйста, введите ваш адрес электронной почты для продолжения входа или регистрации.", "email": "Пожалуйста, введите действительный адрес электронной почты.", - "title": "Вход/Регистрация", - "whitelist": "Домен электронной почты не входит в разрешенный белый список." + "title": "Вход/Регистрация" }, + "get": "Получить", "login": { + "codeLogin": "Вход по коду подтверждения", "description": "Пожалуйста, введите данные вашей учетной записи для входа.", + "email": "Пожалуйста, введите действительный адрес электронной почты.", "forgotPassword": "Забыли пароль?", + "passwordLogin": "Вход по паролю", + "registerAccount": "Зарегистрировать аккаунт", "success": "Вход выполнен успешно!", - "switchAccount": "Регистрация/Смена аккаунта", "title": "Вход" }, + "methods": { + "email": "Электронная почта", + "sms": "Телефон" + }, "orWithEmail": "или с помощью электронной почты", "register": { "description": "Создайте новый аккаунт, заполните свои данные для регистрации.", + "email": "Пожалуйста, введите действительный адрес электронной почты.", "existingAccount": "Уже есть аккаунт?", "get": "Получить", "invite": "Код приглашения", @@ -24,15 +32,19 @@ "passwordMismatch": "Введенные пароли не совпадают", "success": "Регистрация прошла успешно, вы автоматически вошли в систему!", "switchToLogin": "Войти/Сбросить почту", - "title": "Регистрация" + "title": "Регистрация", + "whitelist": "Домен электронной почты не входит в разрешенный белый список." }, "reset": { "description": "Пожалуйста, введите ваш адрес электронной почты, чтобы сбросить пароль.", + "email": "Пожалуйста, введите действительный адрес электронной почты.", "existingAccount": "Уже есть аккаунт?", "get": "Получить", "success": "Пароль успешно сброшен, автоматически переключено на вход!", "switchToLogin": "Вход/Регистрация", "title": "Сброс пароля" }, - "tos": "Условия обслуживания" + "tos": "Условия обслуживания", + "verifyAccount": "Подтверждение аккаунта", + "verifyAccountDesc": "Пожалуйста, подтвердите свой аккаунт, чтобы продолжить." } diff --git a/apps/user/locales/th-TH/auth.json b/apps/user/locales/th-TH/auth.json index 5d26338..d221d87 100644 --- a/apps/user/locales/th-TH/auth.json +++ b/apps/user/locales/th-TH/auth.json @@ -4,19 +4,27 @@ "continue": "ดำเนินการต่อ", "description": "กรุณาใส่อีเมลของคุณเพื่อเข้าสู่ระบบหรือสมัครสมาชิกต่อไป", "email": "กรุณาใส่ที่อยู่อีเมลที่ถูกต้อง", - "title": "เข้าสู่ระบบ/สมัครสมาชิก", - "whitelist": "โดเมนอีเมลไม่อยู่ในรายชื่อที่อนุญาต" + "title": "เข้าสู่ระบบ/สมัครสมาชิก" }, + "get": "รับ", "login": { + "codeLogin": "เข้าสู่ระบบด้วยรหัสยืนยัน", "description": "กรุณาใส่ข้อมูลบัญชีของคุณเพื่อเข้าสู่ระบบ", + "email": "กรุณาใส่ที่อยู่อีเมลที่ถูกต้อง.", "forgotPassword": "ลืมรหัสผ่าน?", + "passwordLogin": "เข้าสู่ระบบด้วยรหัสผ่าน", + "registerAccount": "ลงทะเบียนบัญชี", "success": "เข้าสู่ระบบสำเร็จ!", - "switchAccount": "ลงทะเบียน/เปลี่ยนบัญชี", "title": "เข้าสู่ระบบ" }, + "methods": { + "email": "อีเมล", + "sms": "โทรศัพท์" + }, "orWithEmail": "หรือใช้ที่อยู่อีเมล", "register": { "description": "สร้างบัญชีใหม่ กรอกข้อมูลของคุณเพื่อสมัครสมาชิก", + "email": "กรุณากรอกที่อยู่อีเมลที่ถูกต้อง", "existingAccount": "มีบัญชีอยู่แล้วหรือไม่?", "get": "รับ", "invite": "รหัสเชิญ", @@ -24,15 +32,19 @@ "passwordMismatch": "รหัสผ่านที่กรอกไม่ตรงกัน", "success": "สมัครสมาชิกสำเร็จ เข้าสู่ระบบอัตโนมัติแล้ว!", "switchToLogin": "เข้าสู่ระบบ/รีเซ็ตอีเมล", - "title": "สมัครสมาชิก" + "title": "สมัครสมาชิก", + "whitelist": "โดเมนอีเมลไม่อยู่ในรายการที่อนุญาตไว้" }, "reset": { "description": "กรุณาใส่ที่อยู่อีเมลของคุณเพื่อรีเซ็ตรหัสผ่าน", + "email": "กรุณาใส่ที่อยู่อีเมลที่ถูกต้อง.", "existingAccount": "มีบัญชีอยู่แล้ว?", "get": "รับ", "success": "รีเซ็ตรหัสผ่านสำเร็จ, เปลี่ยนไปที่เข้าสู่ระบบโดยอัตโนมัติ!", "switchToLogin": "เข้าสู่ระบบ/สมัครสมาชิก", "title": "รีเซ็ตรหัสผ่าน" }, - "tos": "ข้อกำหนดในการให้บริการ" + "tos": "ข้อกำหนดในการให้บริการ", + "verifyAccount": "การยืนยันบัญชี", + "verifyAccountDesc": "กรุณายืนยันบัญชีของคุณเพื่อดำเนินการต่อ" } diff --git a/apps/user/locales/tr-TR/auth.json b/apps/user/locales/tr-TR/auth.json index e2a20ce..8ba87dd 100644 --- a/apps/user/locales/tr-TR/auth.json +++ b/apps/user/locales/tr-TR/auth.json @@ -4,19 +4,27 @@ "continue": "Devam et", "description": "Giriş yapmak veya kaydolmak için lütfen e-posta adresinizi girin.", "email": "Lütfen geçerli bir e-posta adresi girin.", - "title": "Giriş/Kayıt", - "whitelist": "E-posta alan adı izin verilen beyaz listede değil." + "title": "Giriş/Kayıt" }, + "get": "Al", "login": { + "codeLogin": "Doğrulama Kodu ile Giriş", "description": "Lütfen giriş yapmak için hesap bilgilerinizi girin.", + "email": "Lütfen geçerli bir e-posta adresi girin.", "forgotPassword": "Şifrenizi mi unuttunuz?", + "passwordLogin": "Şifre ile Giriş", + "registerAccount": "Hesap Kaydı", "success": "Başarıyla giriş yapıldı!", - "switchAccount": "Kayıt Ol/Hesap Değiştir", "title": "Giriş Yap" }, + "methods": { + "email": "E-posta", + "sms": "Telefon" + }, "orWithEmail": "veya e-posta ile", "register": { "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ı?", "get": "Al", "invite": "Davet Kodu", @@ -24,15 +32,19 @@ "passwordMismatch": "Girilen şifreler uyuşmuyor", "success": "Kayıt başarılı, otomatik olarak giriş yapıldı!", "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": { "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ı?", "get": "Al", "success": "Şifre sıfırlama başarılı, otomatik olarak girişe geçildi!", "switchToLogin": "Giriş/Kayıt", "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." } diff --git a/apps/user/locales/uk-UA/auth.json b/apps/user/locales/uk-UA/auth.json index 805bb57..aa8a0c5 100644 --- a/apps/user/locales/uk-UA/auth.json +++ b/apps/user/locales/uk-UA/auth.json @@ -4,19 +4,27 @@ "continue": "Продовжити", "description": "Будь ласка, введіть свою електронну пошту, щоб продовжити вхід або реєстрацію.", "email": "Будь ласка, введіть дійсну електронну адресу.", - "title": "Вхід/Реєстрація", - "whitelist": "Домен електронної пошти не входить до дозволеного білого списку." + "title": "Вхід/Реєстрація" }, + "get": "Отримати", "login": { + "codeLogin": "Вхід за кодом підтвердження", "description": "Будь ласка, введіть інформацію свого облікового запису для входу.", + "email": "Будь ласка, введіть дійсну електронну адресу.", "forgotPassword": "Забули пароль?", + "passwordLogin": "Вхід за паролем", + "registerAccount": "Зареєструвати обліковий запис", "success": "Вхід успішний!", - "switchAccount": "Зареєструватися/Змінити обліковий запис", "title": "Вхід" }, + "methods": { + "email": "Електронна пошта", + "sms": "Телефон" + }, "orWithEmail": "або використовуйте електронну пошту", "register": { "description": "Створіть новий обліковий запис, заповніть ваші дані для реєстрації.", + "email": "Будь ласка, введіть дійсну електронну адресу.", "existingAccount": "Вже маєте обліковий запис?", "get": "Отримати", "invite": "Код запрошення", @@ -24,15 +32,19 @@ "passwordMismatch": "Паролі не співпадають", "success": "Реєстрація успішна, автоматично увійшли в систему!", "switchToLogin": "Увійти/Скинути пошту", - "title": "Реєстрація" + "title": "Реєстрація", + "whitelist": "Домен електронної пошти не входить до дозволеного білого списку." }, "reset": { "description": "Будь ласка, введіть свою електронну адресу для скидання пароля.", + "email": "Будь ласка, введіть дійсну електронну адресу.", "existingAccount": "Вже маєте обліковий запис?", "get": "Отримати", "success": "Пароль успішно скинуто, автоматично переключено на вхід!", "switchToLogin": "Вхід/Реєстрація", "title": "Скидання пароля" }, - "tos": "Умови надання послуг" + "tos": "Умови надання послуг", + "verifyAccount": "Підтвердження облікового запису", + "verifyAccountDesc": "Будь ласка, підтвердьте свій обліковий запис, щоб продовжити." } diff --git a/apps/user/locales/vi-VN/auth.json b/apps/user/locales/vi-VN/auth.json index f89386c..5df9b95 100644 --- a/apps/user/locales/vi-VN/auth.json +++ b/apps/user/locales/vi-VN/auth.json @@ -4,19 +4,27 @@ "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ý.", "email": "Vui lòng nhập địa chỉ email hợp lệ.", - "title": "Đăng nhập/Đăng ký", - "whitelist": "Tên miền email không có trong danh sách trắng được phép." + "title": "Đăng nhập/Đăng ký" }, + "get": "Lấy", "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.", + "email": "Vui lòng nhập địa chỉ email hợp lệ.", "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!", - "switchAccount": "Đăng ký/Chuyển đổi tài khoản", "title": "Đăng nhập" }, + "methods": { + "email": "Email", + "sms": "Điện thoại" + }, "orWithEmail": "hoặc sử dụng email", "register": { "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?", "get": "Lấy", "invite": "Mã mời", @@ -24,15 +32,19 @@ "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!", "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": { "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?", "get": "Lấy", "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ý", "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." } diff --git a/apps/user/locales/zh-CN/auth.json b/apps/user/locales/zh-CN/auth.json index f689194..655d412 100644 --- a/apps/user/locales/zh-CN/auth.json +++ b/apps/user/locales/zh-CN/auth.json @@ -4,19 +4,27 @@ "continue": "继续", "description": "请输入您的电子邮件以继续登录或注册。", "email": "请输入有效的邮箱地址。", - "title": "登录/注册", - "whitelist": "邮箱域名不在允许的白名单中。" + "title": "登录/注册" }, + "get": "获取", "login": { + "codeLogin": "验证码登录", "description": "请输入您的账户信息以登录。", + "email": "请输入有效的电子邮件地址。", "forgotPassword": "忘记密码?", + "passwordLogin": "密码登录", + "registerAccount": "注册账户", "success": "登录成功!", - "switchAccount": "注册/切换账号", "title": "登录" }, + "methods": { + "email": "电子邮件", + "sms": "电话" + }, "orWithEmail": "或使用邮箱", "register": { "description": "创建新账户,填写您的信息以注册。", + "email": "请输入有效的电子邮件地址。", "existingAccount": "已有账户?", "get": "获取", "invite": "邀请码", @@ -24,15 +32,19 @@ "passwordMismatch": "两次密码输入不一致", "success": "注册成功,已自动登录!", "switchToLogin": "登录/重置邮箱", - "title": "注册" + "title": "注册", + "whitelist": "电子邮件域名不在允许的白名单中。" }, "reset": { "description": "请输入您的电子邮件地址以重置密码。", + "email": "请输入有效的电子邮件地址。", "existingAccount": "已有账户?", "get": "获取", "success": "重置密码成功,已自动切换到登录!", "switchToLogin": "登录/注册", "title": "重置密码" }, - "tos": "服务条款" + "tos": "服务条款", + "verifyAccount": "账户验证", + "verifyAccountDesc": " 请验证您的账户以继续。" } diff --git a/apps/user/locales/zh-HK/auth.json b/apps/user/locales/zh-HK/auth.json index eadbfef..7d594b8 100644 --- a/apps/user/locales/zh-HK/auth.json +++ b/apps/user/locales/zh-HK/auth.json @@ -4,19 +4,27 @@ "continue": "繼續", "description": "請輸入您的電子郵件以繼續登入或註冊。", "email": "請輸入有效的郵箱地址。", - "title": "登入/註冊", - "whitelist": "郵箱域名不在允許的白名單中。" + "title": "登入/註冊" }, + "get": "獲取", "login": { + "codeLogin": "驗證碼登入", "description": "請輸入您的帳戶資訊以登入。", + "email": "請輸入有效的電郵地址。", "forgotPassword": "忘記密碼?", + "passwordLogin": "密碼登入", + "registerAccount": "註冊帳戶", "success": "登入成功!", - "switchAccount": "註冊/切換帳號", "title": "登入" }, + "methods": { + "email": "電郵", + "sms": "電話" + }, "orWithEmail": "或使用電子郵件", "register": { "description": "建立新帳戶,填寫您的資訊以註冊。", + "email": "請輸入有效的電郵地址。", "existingAccount": "已有帳戶?", "get": "獲取", "invite": "邀請碼", @@ -24,15 +32,19 @@ "passwordMismatch": "兩次密碼輸入不一致", "success": "註冊成功,已自動登入!", "switchToLogin": "登入/重置信箱", - "title": "註冊" + "title": "註冊", + "whitelist": "電郵域名不在允許的白名單中。" }, "reset": { "description": "請輸入您的電子郵件地址以重設密碼。", + "email": "請輸入有效的電郵地址。", "existingAccount": "已有帳戶?", "get": "獲取", "success": "重設密碼成功,已自動切換到登入!", "switchToLogin": "登入/註冊", "title": "重設密碼" }, - "tos": "服務條款" + "tos": "服務條款", + "verifyAccount": "帳戶驗證", + "verifyAccountDesc": " 請驗證您的帳戶以繼續。" } diff --git a/apps/user/services/common/typings.d.ts b/apps/user/services/common/typings.d.ts index d4b828c..b111e8d 100644 --- a/apps/user/services/common/typings.d.ts +++ b/apps/user/services/common/typings.d.ts @@ -27,6 +27,12 @@ declare namespace API { ios: Application[]; }; + type AuthConfig = { + sms: SmsAuthenticateConfig; + email: EmailAuthticateConfig; + register: RegisterConfig; + }; + type CheckUserParams = { email: string; }; @@ -75,7 +81,15 @@ declare namespace API { updated_at: number; }; + type EmailAuthticateConfig = { + email_enabled: boolean; + email_enable_verify: boolean; + email_enable_domain_suffix: boolean; + email_domain_suffix_list: string; + }; + type EmailSmtpConfig = { + email_enabled: boolean; email_smtp_host: string; email_smtp_port: number; email_smtp_user: string; @@ -85,6 +99,9 @@ declare namespace API { verify_email_template: string; maintenance_email_template: string; expiration_email_template: string; + email_enable_verify: boolean; + email_enable_domain_suffix: boolean; + email_domain_suffix_list: string; }; type Follow = { @@ -99,7 +116,7 @@ declare namespace API { type GetGlobalConfigResponse = { site: SiteConfig; verify: VeifyConfig; - register: RegisterConfig; + auth: AuthConfig; invite: InviteConfig; currency: CurrencyConfig; subscribe: SubscribeConfig; @@ -222,13 +239,9 @@ declare namespace API { type RegisterConfig = { stop_register: boolean; enable_trial: boolean; - enable_email_verify: boolean; - enable_email_domain_suffix: boolean; - email_domain_suffix_list: string; enable_ip_register_limit: boolean; ip_register_limit: number; ip_register_limit_duration: number; - sms: SmsAuthenticateConfig; }; type ResetPasswordRequest = { @@ -275,6 +288,8 @@ declare namespace API { type Server = { id: number; tags: string[]; + country: string; + city: string; name: string; server_addr: string; relay_mode: string; diff --git a/apps/user/services/user/typings.d.ts b/apps/user/services/user/typings.d.ts index 998ece5..d084fec 100644 --- a/apps/user/services/user/typings.d.ts +++ b/apps/user/services/user/typings.d.ts @@ -27,6 +27,12 @@ declare namespace API { ios: Application[]; }; + type AuthConfig = { + sms: SmsAuthenticateConfig; + email: EmailAuthticateConfig; + register: RegisterConfig; + }; + type BindTelegramResponse = { url: string; expired_at: number; @@ -98,7 +104,15 @@ declare namespace API { updated_at: number; }; + type EmailAuthticateConfig = { + email_enabled: boolean; + email_enable_verify: boolean; + email_enable_domain_suffix: boolean; + email_domain_suffix_list: string; + }; + type EmailSmtpConfig = { + email_enabled: boolean; email_smtp_host: string; email_smtp_port: number; email_smtp_user: string; @@ -108,6 +122,9 @@ declare namespace API { verify_email_template: string; maintenance_email_template: string; expiration_email_template: string; + email_enable_verify: boolean; + email_enable_domain_suffix: boolean; + email_domain_suffix_list: string; }; type Follow = { @@ -400,13 +417,9 @@ declare namespace API { type RegisterConfig = { stop_register: boolean; enable_trial: boolean; - enable_email_verify: boolean; - enable_email_domain_suffix: boolean; - email_domain_suffix_list: string; enable_ip_register_limit: boolean; ip_register_limit: number; ip_register_limit_duration: number; - sms: SmsAuthenticateConfig; }; type RenewalOrderRequest = { @@ -452,6 +465,8 @@ declare namespace API { type Server = { id: number; tags: string[]; + country: string; + city: string; name: string; server_addr: string; relay_mode: string;