feat(profile): Update localization strings and enhance third-party account binding

This commit is contained in:
web@ppanel 2025-02-09 21:05:56 +07:00
parent 3883646566
commit 2d1effb7ab
34 changed files with 1677 additions and 526 deletions

View File

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

View File

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

View File

@ -11,77 +11,67 @@ import { useForm } from 'react-hook-form';
import { toast } from 'sonner';
import { z } from 'zod';
const FormSchema = z
.object({
password: z.string().min(6),
repeat_password: z.string(),
})
.refine((data) => data.password === data.repeat_password, {
message: 'passwordMismatch',
path: ['repeat_password'],
});
export default function ChangePassword() {
const t = useTranslations('profile.accountSettings');
const FormSchema = z
.object({
password: z.string(),
repeat_password: z.string(),
})
.superRefine(({ password, repeat_password }, ctx) => {
if (password !== repeat_password) {
ctx.addIssue({
code: z.ZodIssueCode.custom,
message: t('passwordMismatch'),
path: ['repeat_password'],
});
}
});
const form = useForm<z.infer<typeof FormSchema>>({
resolver: zodResolver(FormSchema),
});
async function onSubmit(data: z.infer<typeof FormSchema>) {
await updateUserPassword({
password: data.password,
} as API.UpdateUserPasswordRequest);
await updateUserPassword({ password: data.password });
toast.success(t('updateSuccess'));
form.setValue('password', '');
form.setValue('repeat_password', '');
form.reset();
}
return (
<Card>
<CardHeader className='bg-muted/50 flex flex-row items-start'>
<CardTitle>{t('accountSettings')}</CardTitle>
<CardHeader className='bg-muted/50'>
<CardTitle className='flex items-center justify-between'>
{t('accountSettings')}
<Button type='submit' size='sm' form='password-form'>
{t('updatePassword')}
</Button>
</CardTitle>
</CardHeader>
<CardContent className='grid gap-4 p-6 text-sm'>
<div className='grid gap-3'>
<div className='font-semibold'>{t('loginPassword')}</div>
<Form {...form}>
<form onSubmit={form.handleSubmit(onSubmit)} className='grid gap-6'>
<FormField
control={form.control}
name='password'
render={({ field }) => (
<FormItem>
<FormControl>
<Input type='password' placeholder={t('newPassword')} {...field} />
</FormControl>
<FormMessage />
</FormItem>
)}
/>
<FormField
control={form.control}
name='repeat_password'
render={({ field }) => (
<FormItem>
<FormControl>
<Input type='password' placeholder={t('repeatNewPassword')} {...field} />
</FormControl>
<FormMessage />
</FormItem>
)}
/>
<Button className='size-full' type='submit'>
{t('updatePassword')}
</Button>
</form>
</Form>
</div>
<CardContent className='p-6'>
<Form {...form}>
<form id='password-form' onSubmit={form.handleSubmit(onSubmit)} className='space-y-4'>
<FormField
control={form.control}
name='password'
render={({ field }) => (
<FormItem>
<FormControl>
<Input type='password' placeholder={t('newPassword')} {...field} />
</FormControl>
<FormMessage />
</FormItem>
)}
/>
<FormField
control={form.control}
name='repeat_password'
render={({ field }) => (
<FormItem>
<FormControl>
<Input type='password' placeholder={t('repeatNewPassword')} {...field} />
</FormControl>
<FormMessage />
</FormItem>
)}
/>
</form>
</Form>
</CardContent>
</Card>
);

View File

@ -1,137 +0,0 @@
'use client';
import useGlobalStore from '@/config/use-global';
import { updateUserNotify } from '@/services/user/user';
import { zodResolver } from '@hookform/resolvers/zod';
import { Card, CardContent, CardHeader, CardTitle } from '@workspace/ui/components/card';
import {
Form,
FormControl,
FormField,
FormItem,
FormLabel,
FormMessage,
} from '@workspace/ui/components/form';
import { Switch } from '@workspace/ui/components/switch';
import { useTranslations } from 'next-intl';
import { useForm } from 'react-hook-form';
import { toast } from 'sonner';
import { z } from 'zod';
const FormSchema = z.object({
enable_balance_notify: z.boolean(),
enable_login_notify: z.boolean(),
enable_subscribe_notify: z.boolean(),
enable_trade_notify: z.boolean(),
});
export default function NotifyEvent() {
const t = useTranslations('profile.notifyEvent');
const { user, getUserInfo } = useGlobalStore();
const form = useForm<z.infer<typeof FormSchema>>({
resolver: zodResolver(FormSchema),
defaultValues: {
enable_balance_notify: user?.enable_balance_notify,
enable_login_notify: user?.enable_login_notify,
enable_subscribe_notify: user?.enable_subscribe_notify,
enable_trade_notify: user?.enable_trade_notify,
},
});
async function onSubmit(data: z.infer<typeof FormSchema>) {
await updateUserNotify(data);
toast.success(t('updateSuccess'));
getUserInfo();
}
return (
<Card>
<CardHeader className='bg-muted/50 flex flex-row items-start'>
<CardTitle>{t('notificationEvents')}</CardTitle>
</CardHeader>
<CardContent className='grid gap-4 p-6 text-sm'>
<Form {...form}>
<form onSubmit={form.handleSubmit(onSubmit)} className='grid gap-6'>
<FormField
control={form.control}
name='enable_balance_notify'
render={({ field }) => (
<FormItem className='text-muted-foreground flex items-center justify-between'>
<FormLabel>{t('balanceChange')}</FormLabel>
<FormControl>
<Switch
checked={field.value}
onCheckedChange={(value) => {
field.onChange(value);
form.handleSubmit(onSubmit)();
}}
/>
</FormControl>
<FormMessage />
</FormItem>
)}
/>
<FormField
control={form.control}
name='enable_login_notify'
render={({ field }) => (
<FormItem className='text-muted-foreground flex items-center justify-between'>
<FormLabel>{t('login')}</FormLabel>
<FormControl>
<Switch
checked={field.value}
onCheckedChange={(value) => {
field.onChange(value);
form.handleSubmit(onSubmit)();
}}
/>
</FormControl>
<FormMessage />
</FormItem>
)}
/>
<FormField
control={form.control}
name='enable_subscribe_notify'
render={({ field }) => (
<FormItem className='text-muted-foreground flex items-center justify-between'>
<FormLabel>{t('subscribe')}</FormLabel>
<FormControl>
<Switch
checked={field.value}
onCheckedChange={(value) => {
field.onChange(value);
form.handleSubmit(onSubmit)();
}}
/>
</FormControl>
<FormMessage />
</FormItem>
)}
/>
<FormField
control={form.control}
name='enable_trade_notify'
render={({ field }) => (
<FormItem className='text-muted-foreground flex items-center justify-between'>
<FormLabel>{t('finance')}</FormLabel>
<FormControl>
<Switch
checked={field.value}
onCheckedChange={(value) => {
field.onChange(value);
form.handleSubmit(onSubmit)();
}}
/>
</FormControl>
<FormMessage />
</FormItem>
)}
/>
</form>
</Form>
</CardContent>
</Card>
);
}

View File

@ -1,19 +1,11 @@
'use client';
import useGlobalStore from '@/config/use-global';
import { bindTelegram, unbindTelegram, updateUserNotifySetting } from '@/services/user/user';
import { updateUserNotify } from '@/services/user/user';
import { zodResolver } from '@hookform/resolvers/zod';
import { Button } from '@workspace/ui/components/button';
import { Card, CardContent, CardHeader, CardTitle } from '@workspace/ui/components/card';
import {
Form,
FormControl,
FormField,
FormItem,
FormLabel,
FormMessage,
} from '@workspace/ui/components/form';
import { Input } from '@workspace/ui/components/input';
import { Form, FormControl, FormField, FormItem, FormLabel } from '@workspace/ui/components/form';
import { Switch } from '@workspace/ui/components/switch';
import { useTranslations } from 'next-intl';
import { useForm } from 'react-hook-form';
@ -24,10 +16,14 @@ const FormSchema = z.object({
telegram: z.number().nullish(),
enable_email_notify: z.boolean(),
enable_telegram_notify: z.boolean(),
enable_balance_notify: z.boolean(),
enable_login_notify: z.boolean(),
enable_subscribe_notify: z.boolean(),
enable_trade_notify: z.boolean(),
});
export default function NotifySettings() {
const t = useTranslations('profile.notify');
const t = useTranslations('profile');
const { user, getUserInfo } = useGlobalStore();
const form = useForm<z.infer<typeof FormSchema>>({
resolver: zodResolver(FormSchema),
@ -35,101 +31,58 @@ export default function NotifySettings() {
telegram: user?.telegram,
enable_email_notify: user?.enable_email_notify,
enable_telegram_notify: user?.enable_telegram_notify,
enable_balance_notify: user?.enable_balance_notify,
enable_login_notify: user?.enable_login_notify,
enable_subscribe_notify: user?.enable_subscribe_notify,
enable_trade_notify: user?.enable_trade_notify,
},
});
async function onSubmit(data: z.infer<typeof FormSchema>) {
await updateUserNotifySetting(data as API.UpdateUserNotifySettingRequet);
toast.success(t('updateSuccess'));
await updateUserNotify(data);
toast.success(t('notify.updateSuccess'));
getUserInfo();
}
return (
<Card>
<CardHeader className='bg-muted/50 flex flex-row items-start'>
<CardTitle>{t('notificationSettings')}</CardTitle>
<CardHeader className='bg-muted/50'>
<CardTitle className='flex items-center justify-between'>
{t('notify.notificationSettings')}
<Button type='submit' size='sm' form='notify-form'>
{t('notify.save')}
</Button>
</CardTitle>
</CardHeader>
<CardContent className='grid gap-4 p-6 text-sm'>
<CardContent className='grid gap-6 p-6'>
<Form {...form}>
<form onSubmit={form.handleSubmit(onSubmit)} className='grid gap-6'>
<FormField
control={form.control}
name='telegram'
render={({ field }) => (
<FormItem>
<FormLabel>{t('telegramId')}</FormLabel>
<FormControl>
<div className='flex w-full items-center space-x-2'>
<Input
type='number'
placeholder={t('telegramIdPlaceholder')}
{...field}
value={field.value ? field.value : ''}
onChange={(e) => {
field.onChange(e.target.value ? Number(e.target.value) : '');
}}
disabled
/>
<Button
size='sm'
type='button'
onClick={async () => {
if (user?.telegram) {
await unbindTelegram();
await getUserInfo();
} else {
const { data } = await bindTelegram();
if (data.data?.url) {
window.open(data.data.url, '_blank');
}
}
}}
>
{t(user?.telegram ? 'unbind' : 'bind')}
</Button>
</div>
</FormControl>
<FormMessage />
</FormItem>
)}
/>
<FormField
control={form.control}
name='enable_email_notify'
render={({ field }) => (
<FormItem className='text-muted-foreground flex items-center justify-between'>
<FormLabel>{t('emailNotification')}</FormLabel>
<FormControl>
<Switch
checked={field.value}
onCheckedChange={(value) => {
field.onChange(value);
form.handleSubmit(onSubmit)();
}}
/>
</FormControl>
<FormMessage />
</FormItem>
)}
/>
<FormField
control={form.control}
name='enable_telegram_notify'
render={({ field }) => (
<FormItem className='text-muted-foreground flex items-center justify-between'>
<FormLabel>{t('telegramNotification')}</FormLabel>
<FormControl>
<Switch
checked={field.value}
onCheckedChange={(value) => {
field.onChange(value);
form.handleSubmit(onSubmit)();
}}
/>
</FormControl>
<FormMessage />
</FormItem>
)}
/>
<form id='notify-form' onSubmit={form.handleSubmit(onSubmit)} className='space-y-4'>
<div className='space-y-4'>
{[
{ name: 'enable_email_notify', label: 'emailNotification' },
{ name: 'enable_telegram_notify', label: 'telegramNotification' },
{ name: 'enable_balance_notify', label: 'balanceChange' },
{ name: 'enable_login_notify', label: 'login' },
{ name: 'enable_subscribe_notify', label: 'subscribe' },
{ name: 'enable_trade_notify', label: 'finance' },
].map(({ name, label }) => (
<FormField
key={name}
control={form.control}
name={name as any}
render={({ field }) => (
<FormItem className='flex items-center justify-between space-x-4'>
<FormLabel className='text-muted-foreground'>
{t(`notify.${label}`)}
</FormLabel>
<FormControl>
<Switch checked={field.value} onCheckedChange={field.onChange} />
</FormControl>
</FormItem>
)}
/>
))}
</div>
</form>
</Form>
</CardContent>

View File

@ -1,12 +1,12 @@
import ChangePassword from './change-password';
import NotifyEvent from './notify-event';
import NotifySettings from './notify-settings';
import ThirdPartyAccounts from './third-party-accounts';
export default function Page() {
return (
<div className='grid gap-4 md:grid-cols-2 lg:grid-cols-3'>
<div className='flex flex-col gap-3 lg:flex-row lg:flex-wrap lg:*:flex-auto'>
<ThirdPartyAccounts />
<NotifySettings />
<NotifyEvent />
<ChangePassword />
</div>
);

View File

@ -0,0 +1,292 @@
'use client';
import SendCode from '@/app/auth/send-code';
import useGlobalStore from '@/config/use-global';
import { bindOAuth } from '@/services/user/user';
import { zodResolver } from '@hookform/resolvers/zod';
import { Button } from '@workspace/ui/components/button';
import { Card, CardContent, CardHeader, CardTitle } from '@workspace/ui/components/card';
import {
Dialog,
DialogContent,
DialogHeader,
DialogTitle,
DialogTrigger,
} from '@workspace/ui/components/dialog';
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 { Icon } from '@workspace/ui/custom-components/icon';
import { useTranslations } from 'next-intl';
import { useState } from 'react';
import { useForm } from 'react-hook-form';
import { toast } from 'sonner';
import { z } from 'zod';
function MobileBindDialog({
method,
onSuccess,
children,
}: {
method?: API.UserAuthMethod;
onSuccess: () => void;
children: React.ReactNode;
}) {
const t = useTranslations('profile.thirdParty');
const [open, setOpen] = useState(false);
const formSchema = z.object({
telephone_area_code: z.string().min(1, 'Area code is required'),
telephone: z.string().min(5, 'Phone number is required'),
telephone_code: z.string().min(4, 'Verification code is required'),
});
type MobileBindFormValues = z.infer<typeof formSchema>;
const form = useForm<MobileBindFormValues>({
resolver: zodResolver(formSchema),
defaultValues: {
// @ts-ignore
telephone_area_code: method?.area_code || '1',
telephone: method?.auth_identifier || '',
telephone_code: '',
},
});
const onSubmit = async (values: MobileBindFormValues) => {
try {
toast.success(t('bindSuccess'));
onSuccess();
setOpen(false);
} catch (error) {
toast.error(t('bindFailed'));
}
};
return (
<Dialog open={open} onOpenChange={setOpen}>
<DialogTrigger>{children}</DialogTrigger>
<DialogContent className='sm:max-w-[425px]'>
<DialogHeader>
<DialogTitle>{t('bindMobile')}</DialogTitle>
</DialogHeader>
<Form {...form}>
<form onSubmit={form.handleSubmit(onSubmit)} className='space-y-4'>
<FormField
control={form.control}
name='telephone'
render={({ field }) => (
<FormItem>
<FormControl>
<div className='flex'>
<FormField
control={form.control}
name='telephone_area_code'
render={({ field }) => (
<FormItem>
<FormControl>
<AreaCodeSelect
simple
className='w-32 rounded-r-none border-r-0'
placeholder='Area code...'
value={field.value}
onChange={(value) => {
if (value.phone) {
form.setValue('telephone_area_code', value.phone);
}
}}
/>
</FormControl>
<FormMessage />
</FormItem>
)}
/>
<Input
className='rounded-l-none'
placeholder='Enter your telephone...'
type='tel'
{...field}
/>
</div>
</FormControl>
<FormMessage />
</FormItem>
)}
/>
<FormField
control={form.control}
name='telephone_code'
render={({ field }) => (
<FormItem>
<FormControl>
<div className='flex gap-2'>
<Input placeholder='Enter code...' type='text' {...field} />
<SendCode type='phone' params={form.getValues()} />
</div>
</FormControl>
<FormMessage />
</FormItem>
)}
/>
<Button type='submit' className='w-full'>
{t('confirm')}
</Button>
</form>
</Form>
</DialogContent>
</Dialog>
);
}
export default function ThirdPartyAccounts() {
const t = useTranslations('profile.thirdParty');
const { user, getUserInfo, common } = useGlobalStore();
const { oauth_methods } = common;
const accounts = [
{
id: 'email',
icon: 'logos:mailgun-icon',
name: 'Email',
type: 'Basic',
},
{
id: 'mobile',
icon: 'mdi:telephone',
name: 'Mobile',
type: 'Basic',
},
{
id: 'telegram',
icon: 'logos:telegram',
name: 'Telegram',
type: 'OAuth',
},
{
id: 'apple',
icon: 'uil:apple',
name: 'Apple',
type: 'OAuth',
},
{
id: 'google',
icon: 'logos:google',
name: 'Google',
type: 'OAuth',
},
{
id: 'facebook',
icon: 'logos:facebook',
name: 'Facebook',
type: 'OAuth',
},
{
id: 'github',
icon: 'uil:github',
name: 'GitHub',
type: 'OAuth',
},
];
// .filter((account) => oauth_methods?.includes(account.id));
const [editValues, setEditValues] = useState<Record<string, any>>({});
const handleBasicAccountUpdate = async (account: (typeof accounts)[0], value: string) => {
if (account.id === 'email') {
// TODO: Create a new email auth or update the existing one
await getUserInfo();
toast.success(t('updateSuccess'));
}
};
const handleAccountAction = async (account: (typeof accounts)[number]) => {
const isBound = user?.auth_methods?.find(
(auth) => auth.auth_type === account.id,
)?.auth_identifier;
if (isBound) {
// unbindOAuth
// await unbindOAuth(account.id);
await getUserInfo();
} else {
const res = await bindOAuth({
method: account.id,
redirect: `${window.location.origin}/bind/${account.id}`,
});
if (res.data?.data?.url) {
window.location.href = res.data.data.url;
}
}
};
return (
<>
<Card>
<CardHeader className='bg-muted/50'>
<CardTitle>{t('title')}</CardTitle>
</CardHeader>
<CardContent className='p-6'>
<div className='space-y-4'>
{accounts.map((account) => {
const method = user?.auth_methods?.find((auth) => auth.auth_type === account.id);
const isEditing = account.id === 'email';
const currentValue = method?.auth_identifier || editValues[account.id];
const displayValue = isEditing
? currentValue
: method?.auth_identifier || t(`${account.id}.description`);
return (
<div key={account.id} className='flex w-full flex-col gap-2'>
<span className='flex gap-3 font-medium'>
<Icon icon={account.icon} className='size-6' />
{account.name}
</span>
<div className='flex items-center gap-2'>
<Input
value={displayValue}
disabled={!isEditing}
className='bg-muted flex-1 truncate'
onChange={(e) =>
isEditing &&
setEditValues((prev) => ({ ...prev, [account.id]: e.target.value }))
}
onKeyDown={(e) => {
if (e.key === 'Enter' && isEditing) {
handleBasicAccountUpdate(account, currentValue);
}
}}
/>
{account.id === 'mobile' ? (
<MobileBindDialog method={method} onSuccess={getUserInfo}>
<Button
variant={method?.auth_identifier ? 'outline' : 'default'}
className='whitespace-nowrap'
>
{t(method?.auth_identifier ? 'update' : 'bind')}
</Button>
</MobileBindDialog>
) : (
<Button
variant={method?.auth_identifier ? 'outline' : 'default'}
onClick={() =>
isEditing
? handleBasicAccountUpdate(account, currentValue)
: handleAccountAction(account)
}
className='whitespace-nowrap'
>
{t(isEditing ? 'save' : method?.auth_identifier ? 'unbind' : 'bind')}
</Button>
)}
</div>
</div>
);
})}
</div>
</CardContent>
</Card>
</>
);
}

View File

@ -28,27 +28,21 @@ export default function Page() {
const { common } = useGlobalStore();
const { site, auth, oauth_methods } = common;
const AUTH_COMPONENT_MAP = {
email: <EmailAuthForm />,
sms: <PhoneAuthForm />,
} as const;
const AUTH_METHODS = [
{
key: 'email',
enabled: auth.email.enable,
children: <EmailAuthForm />,
},
{
key: 'mobile',
enabled: auth.mobile.enable,
children: <PhoneAuthForm />,
},
].filter((method) => method.enabled);
type AuthMethod = keyof typeof AUTH_COMPONENT_MAP;
const OAUTH_METHODS = oauth_methods?.filter((method) => !['mobile', 'email'].includes(method));
const enabledAuthMethods = (Object.keys(AUTH_COMPONENT_MAP) as AuthMethod[]).filter((key) => {
const value = auth[key];
const enabledKey = `${key}_enabled` as const;
if (typeof value !== 'object' || value === null) {
return false;
}
if (!(enabledKey in value)) {
return false;
}
const isEnabled = (value as unknown as Record<typeof enabledKey, boolean>)[enabledKey];
return isEnabled;
});
return (
<main className='bg-muted/50 flex h-full min-h-screen items-center'>
<div className='flex size-full flex-auto flex-col lg:flex-row'>
@ -79,27 +73,27 @@ export default function Page() {
<div className='text-muted-foreground mb-6 text-center font-medium'>
{t('verifyAccountDesc')}
</div>
{enabledAuthMethods.length === 1
? AUTH_COMPONENT_MAP[enabledAuthMethods[0] as AuthMethod]
: enabledAuthMethods[0] && (
<Tabs defaultValue={enabledAuthMethods[0]}>
{AUTH_METHODS.length === 1
? AUTH_METHODS[0]?.children
: AUTH_METHODS[0] && (
<Tabs defaultValue={AUTH_METHODS[0].key}>
<TabsList className='mb-6 flex w-full *:flex-1'>
{enabledAuthMethods.map((method) => (
<TabsTrigger key={method} value={method}>
{t(`methods.${method}`)}
{AUTH_METHODS.map((item) => (
<TabsTrigger key={item.key} value={item.key}>
{t(`methods.${item.key}`)}
</TabsTrigger>
))}
</TabsList>
{enabledAuthMethods.map((method) => (
<TabsContent key={method} value={method}>
{AUTH_COMPONENT_MAP[method]}
{AUTH_METHODS.map((item) => (
<TabsContent key={item.key} value={item.key}>
{item.children}
</TabsContent>
))}
</Tabs>
)}
</div>
<div className='py-8'>
{oauth_methods?.length > 0 && (
{OAUTH_METHODS?.length > 0 && (
<>
<div className='after:border-border relative text-center text-sm after:absolute after:inset-0 after:top-1/2 after:z-0 after:flex after:items-center after:border-t'>
<span className='bg-background text-muted-foreground relative z-10 px-2'>
@ -107,7 +101,7 @@ export default function Page() {
</span>
</div>
<div className='mt-6 flex justify-center gap-4 *:size-12 *:p-2'>
{oauth_methods?.map((method: any) => {
{OAUTH_METHODS?.map((method: any) => {
return (
<Button
key={method}

View File

@ -0,0 +1,33 @@
'use client';
import { bindOAuthCallback } from '@/services/user/user';
import { getAllUrlParams } from '@/utils/common';
import { usePathname, useRouter } from 'next/navigation';
import { useEffect } from 'react';
interface CertificationProps {
platform: string;
children: React.ReactNode;
}
export default function Certification({ platform, children }: CertificationProps) {
const router = useRouter();
const pathname = usePathname();
useEffect(() => {
const searchParams = getAllUrlParams();
bindOAuthCallback({
method: platform,
callback: searchParams,
})
.then((res) => {
router.replace('/profile');
router.refresh();
})
.catch((error) => {
router.replace('/auth');
});
}, [pathname]);
return children;
}

View File

@ -0,0 +1,61 @@
import HyperText from '@workspace/ui/components/hyper-text';
import { OrbitingCircles } from '@workspace/ui/components/orbiting-circles';
import { Icon } from '@workspace/ui/custom-components/icon';
import { getTranslations } from 'next-intl/server';
import Certification from './certification';
export async function generateStaticParams() {
return [
{
platform: 'telegram',
},
{
platform: 'apple',
},
{
platform: 'facebook',
},
{
platform: 'google',
},
{
platform: 'github',
},
];
}
export default async function Page({
params,
}: {
params: Promise<{
platform: string;
}>;
}) {
const { platform } = await params;
const t = await getTranslations('auth');
return (
<Certification platform={platform}>
<div className='bg-background relative flex h-screen w-full flex-col items-center justify-center overflow-hidden'>
<div className='pointer-events-none flex animate-pulse flex-col items-center whitespace-pre-wrap bg-gradient-to-r from-blue-500 via-indigo-500 to-violet-500 bg-clip-text text-center font-black tracking-tight text-transparent dark:from-blue-400 dark:via-indigo-300 dark:to-violet-400'>
<HyperText className='text-xl uppercase md:text-2xl'>{platform}</HyperText>
<HyperText className='text-lg md:text-xl'>{t('authenticating')}</HyperText>
</div>
<OrbitingCircles iconSize={40} speed={0.8}>
<Icon icon='logos:telegram' className='size-12' />
<Icon icon='uil:apple' className='size-12' />
<Icon icon='logos:google-icon' className='size-12' />
<Icon icon='logos:facebook' className='size-12' />
<Icon icon='uil:github' className='size-12' />
</OrbitingCircles>
<OrbitingCircles iconSize={30} radius={100} reverse speed={0.4}>
<Icon icon='logos:telegram' className='size-10' />
<Icon icon='uil:apple' className='size-10' />
<Icon icon='logos:google-icon' className='size-10' />
<Icon icon='logos:facebook' className='size-10' />
<Icon icon='uil:github' className='size-10' />
</OrbitingCircles>
</div>
</Certification>
);
}

View File

@ -1,7 +1,6 @@
{
"accountSettings": {
"accountSettings": "Nastavení účtu",
"loginPassword": "Přihlašovací heslo",
"newPassword": "Nové heslo",
"passwordMismatch": "Hesla se neshodují",
"repeatNewPassword": "Zopakujte nové heslo",
@ -9,21 +8,64 @@
"updateSuccess": "Aktualizace úspěšná"
},
"notify": {
"balanceChange": "Změna zůstatku",
"bind": "Přejít na vazbu",
"channels": "Notifikační kanály",
"emailNotification": "E-mailové oznámení",
"finance": "Finance",
"login": "Přihlášení",
"notificationSettings": "Nastavení oznámení",
"telegramId": "Telegram ID",
"notificationTypes": "Typy notifikací",
"save": "Uložit změny",
"subscribe": "Přihlásit se",
"telegramIdPlaceholder": "Zadejte Telegram ID",
"telegramNotification": "Telegram oznámení",
"unbind": "Zrušit vazbu",
"updateSuccess": "Aktualizace byla úspěšná"
},
"notifyEvent": {
"balanceChange": "Změna zůstatku",
"finance": "Finance",
"login": "Přihlášení",
"notificationEvents": "Upozornění na události",
"subscribe": "Předplatit",
"thirdParty": {
"apple": {
"description": "Přihlásit se pomocí Apple"
},
"bind": "Připojit",
"bindFailed": "Nepodařilo se připojit",
"bindMobile": "Připojit mobil",
"bindSuccess": "Úspěšně připojeno",
"change": "Změnit",
"confirm": "Potvrdit",
"email": {
"description": "Propojte svou e-mailovou adresu",
"invalid": "Zadejte platnou e-mailovou adresu",
"placeholder": "Zadejte svou e-mailovou adresu",
"title": "Změnit e-mail"
},
"facebook": {
"description": "Přihlásit se pomocí Facebooku"
},
"github": {
"description": "Přihlásit se pomocí GitHubu"
},
"google": {
"description": "Přihlásit se pomocí Google"
},
"mobile": {
"description": "Propojte své mobilní číslo",
"invalid": "Zadejte platné mobilní číslo",
"placeholder": "Zadejte své mobilní číslo",
"title": "Změnit číslo mobilního telefonu"
},
"phone": {
"description": "Propojte své telefonní číslo",
"placeholder": "Zadejte své telefonní číslo",
"title": "Změnit telefon"
},
"save": "Uložit",
"telegram": {
"description": "Přihlásit se pomocí Telegramu"
},
"title": "Připojené účty",
"unbind": "Odpojit",
"update": "Aktualizovat",
"updateSuccess": "Aktualizace úspěšná"
}
}

View File

@ -1,7 +1,6 @@
{
"accountSettings": {
"accountSettings": "Kontoeinstellungen",
"loginPassword": "Anmeldepasswort",
"newPassword": "Neues Passwort",
"passwordMismatch": "Die Passwörter stimmen nicht überein",
"repeatNewPassword": "Neues Passwort wiederholen",
@ -9,21 +8,64 @@
"updateSuccess": "Erfolgreich aktualisiert"
},
"notify": {
"balanceChange": "Kontostandsänderung",
"bind": "Zur Bindung gehen",
"channels": "Benachrichtigungskanäle",
"emailNotification": "E-Mail-Benachrichtigung",
"finance": "Finanzen",
"login": "Anmelden",
"notificationSettings": "Benachrichtigungseinstellungen",
"telegramId": "Telegram-ID",
"notificationTypes": "Benachrichtigungstypen",
"save": "Änderungen speichern",
"subscribe": "Abonnieren",
"telegramIdPlaceholder": "Telegram-ID eingeben",
"telegramNotification": "Telegram-Benachrichtigung",
"unbind": "Lösen",
"updateSuccess": "Erfolgreich aktualisiert"
},
"notifyEvent": {
"balanceChange": "Kontostandsänderung",
"finance": "Finanzen",
"login": "Anmeldung",
"notificationEvents": "Benachrichtigungsereignisse",
"subscribe": "Abonnieren",
"updateSuccess": "Erfolgreich aktualisiert"
"thirdParty": {
"apple": {
"description": "Mit Apple anmelden"
},
"bind": "Verbinden",
"bindFailed": "Verbindung fehlgeschlagen",
"bindMobile": "Handy verbinden",
"bindSuccess": "Erfolgreich verbunden",
"change": "Ändern",
"confirm": "Bestätigen",
"email": {
"description": "Verknüpfen Sie Ihre E-Mail-Adresse",
"invalid": "Bitte geben Sie eine gültige E-Mail-Adresse ein",
"placeholder": "Geben Sie Ihre E-Mail-Adresse ein",
"title": "E-Mail ändern"
},
"facebook": {
"description": "Mit Facebook anmelden"
},
"github": {
"description": "Mit GitHub anmelden"
},
"google": {
"description": "Mit Google anmelden"
},
"mobile": {
"description": "Verknüpfen Sie Ihre Handynummer",
"invalid": "Bitte geben Sie eine gültige Handynummer ein",
"placeholder": "Geben Sie Ihre Handynummer ein",
"title": "Handynummer ändern"
},
"phone": {
"description": "Verknüpfen Sie Ihre Telefonnummer",
"placeholder": "Geben Sie Ihre Telefonnummer ein",
"title": "Telefonnummer ändern"
},
"save": "Speichern",
"telegram": {
"description": "Mit Telegram anmelden"
},
"title": "Verbundene Konten",
"unbind": "Trennen",
"update": "Aktualisieren",
"updateSuccess": "Aktualisierung erfolgreich"
}
}

View File

@ -1,7 +1,6 @@
{
"accountSettings": {
"accountSettings": "Account Settings",
"loginPassword": "Login Password",
"accountSettings": "Password Settings",
"newPassword": "New Password",
"passwordMismatch": "Passwords do not match",
"repeatNewPassword": "Repeat New Password",
@ -9,21 +8,64 @@
"updateSuccess": "Update Successful"
},
"notify": {
"balanceChange": "Balance Change",
"bind": "Go to Binding",
"channels": "Notification Channels",
"emailNotification": "Email Notification",
"finance": "Finance",
"login": "Login",
"notificationSettings": "Notification Settings",
"telegramId": "Telegram ID",
"notificationTypes": "Notification Types",
"save": "Save Changes",
"subscribe": "Subscribe",
"telegramIdPlaceholder": "Enter Telegram ID",
"telegramNotification": "Telegram Notification",
"unbind": "Unbind",
"updateSuccess": "Update Successful"
},
"notifyEvent": {
"balanceChange": "Balance Change",
"finance": "Finance",
"login": "Login",
"notificationEvents": "Notification Events",
"subscribe": "Subscribe",
"thirdParty": {
"apple": {
"description": "Sign in with Apple"
},
"bind": "Connect",
"bindFailed": "Failed to connect",
"bindMobile": "Connect Mobile",
"bindSuccess": "Successfully connected",
"change": "Change",
"confirm": "Confirm",
"email": {
"description": "Link your email address",
"invalid": "Please enter a valid email address",
"placeholder": "Enter your email address",
"title": "Change Email"
},
"facebook": {
"description": "Sign in with Facebook"
},
"github": {
"description": "Sign in with GitHub"
},
"google": {
"description": "Sign in with Google"
},
"mobile": {
"description": "Link your mobile number",
"invalid": "Please enter a valid mobile number",
"placeholder": "Enter your mobile number",
"title": "Change Mobile Number"
},
"phone": {
"description": "Link your phone number",
"placeholder": "Enter your phone number",
"title": "Change Phone"
},
"save": "Save",
"telegram": {
"description": "Sign in with Telegram"
},
"title": "Connected Accounts",
"unbind": "Disconnect",
"update": "Update",
"updateSuccess": "Update Successful"
}
}

View File

@ -1,7 +1,6 @@
{
"accountSettings": {
"accountSettings": "Configuración de la cuenta",
"loginPassword": "Contraseña de inicio de sesión",
"newPassword": "Nueva contraseña",
"passwordMismatch": "Las contraseñas no coinciden",
"repeatNewPassword": "Repetir nueva contraseña",
@ -9,21 +8,64 @@
"updateSuccess": "Actualización exitosa"
},
"notify": {
"balanceChange": "Cambio de Saldo",
"bind": "Ir a Vinculación",
"channels": "Canales de Notificación",
"emailNotification": "Notificación por correo electrónico",
"finance": "Finanzas",
"login": "Iniciar Sesión",
"notificationSettings": "Configuración de notificaciones",
"telegramId": "ID de Telegram",
"notificationTypes": "Tipos de Notificación",
"save": "Guardar Cambios",
"subscribe": "Suscribirse",
"telegramIdPlaceholder": "Ingrese ID de Telegram",
"telegramNotification": "Notificación de Telegram",
"unbind": "Desvincular",
"updateSuccess": "Actualización exitosa"
},
"notifyEvent": {
"balanceChange": "Cambio de saldo",
"finance": "Finanzas",
"login": "Iniciar sesión",
"notificationEvents": "Eventos de notificación",
"subscribe": "Suscribirse",
"updateSuccess": "Actualización exitosa"
"thirdParty": {
"apple": {
"description": "Iniciar sesión con Apple"
},
"bind": "Conectar",
"bindFailed": "Error al conectar",
"bindMobile": "Conectar móvil",
"bindSuccess": "Conectado con éxito",
"change": "Cambiar",
"confirm": "Confirmar",
"email": {
"description": "Vincula tu dirección de correo electrónico",
"invalid": "Por favor, introduce una dirección de correo electrónico válida",
"placeholder": "Introduce tu dirección de correo electrónico",
"title": "Cambiar Correo Electrónico"
},
"facebook": {
"description": "Iniciar sesión con Facebook"
},
"github": {
"description": "Iniciar sesión con GitHub"
},
"google": {
"description": "Iniciar sesión con Google"
},
"mobile": {
"description": "Vincula tu número de móvil",
"invalid": "Por favor, introduce un número de móvil válido",
"placeholder": "Introduce tu número de móvil",
"title": "Cambiar número de móvil"
},
"phone": {
"description": "Vincula tu número de teléfono",
"placeholder": "Introduce tu número de teléfono",
"title": "Cambiar Teléfono"
},
"save": "Guardar",
"telegram": {
"description": "Iniciar sesión con Telegram"
},
"title": "Cuentas Conectadas",
"unbind": "Desconectar",
"update": "Actualizar",
"updateSuccess": "Actualización Exitosa"
}
}

View File

@ -1,7 +1,6 @@
{
"accountSettings": {
"accountSettings": "Configuración de la cuenta",
"loginPassword": "Contraseña de inicio de sesión",
"newPassword": "Nueva contraseña",
"passwordMismatch": "Las contraseñas no coinciden",
"repeatNewPassword": "Repetir nueva contraseña",
@ -9,21 +8,64 @@
"updateSuccess": "Actualización exitosa"
},
"notify": {
"balanceChange": "Cambio de Saldo",
"bind": "Ir a Vinculación",
"channels": "Canales de Notificación",
"emailNotification": "Notificación por correo electrónico",
"finance": "Finanzas",
"login": "Iniciar Sesión",
"notificationSettings": "Configuración de notificaciones",
"telegramId": "ID de Telegram",
"notificationTypes": "Tipos de Notificación",
"save": "Guardar Cambios",
"subscribe": "Suscribirse",
"telegramIdPlaceholder": "Ingrese ID de Telegram",
"telegramNotification": "Notificación de Telegram",
"unbind": "Desvincular",
"updateSuccess": "Actualización exitosa"
},
"notifyEvent": {
"balanceChange": "Cambio de saldo",
"finance": "Finanzas",
"login": "Iniciar sesión",
"notificationEvents": "Eventos de notificación",
"subscribe": "Suscribirse",
"updateSuccess": "Actualización exitosa"
"thirdParty": {
"apple": {
"description": "Iniciar sesión con Apple"
},
"bind": "Conectar",
"bindFailed": "Error al conectar",
"bindMobile": "Conectar móvil",
"bindSuccess": "Conectado con éxito",
"change": "Cambiar",
"confirm": "Confirmar",
"email": {
"description": "Vincula tu dirección de correo electrónico",
"invalid": "Por favor, ingresa una dirección de correo electrónico válida",
"placeholder": "Ingresa tu dirección de correo electrónico",
"title": "Cambiar Correo Electrónico"
},
"facebook": {
"description": "Iniciar sesión con Facebook"
},
"github": {
"description": "Iniciar sesión con GitHub"
},
"google": {
"description": "Iniciar sesión con Google"
},
"mobile": {
"description": "Vincula tu número móvil",
"invalid": "Por favor, ingresa un número móvil válido",
"placeholder": "Ingresa tu número móvil",
"title": "Cambiar número de móvil"
},
"phone": {
"description": "Vincula tu número de teléfono",
"placeholder": "Ingresa tu número de teléfono",
"title": "Cambiar Teléfono"
},
"save": "Guardar",
"telegram": {
"description": "Iniciar sesión con Telegram"
},
"title": "Cuentas Conectadas",
"unbind": "Desconectar",
"update": "Actualizar",
"updateSuccess": "Actualización Exitosa"
}
}

View File

@ -1,7 +1,6 @@
{
"accountSettings": {
"accountSettings": "تنظیمات حساب",
"loginPassword": "رمز عبور ورود",
"newPassword": "رمز عبور جدید",
"passwordMismatch": "رمزهای عبور مطابقت ندارند",
"repeatNewPassword": "تکرار رمز عبور جدید",
@ -9,21 +8,64 @@
"updateSuccess": "به‌روزرسانی موفقیت‌آمیز"
},
"notify": {
"balanceChange": "تغییر موجودی",
"bind": "رفتن به اتصال",
"channels": "کانال‌های اعلان",
"emailNotification": "اعلان ایمیل",
"finance": "مالی",
"login": "ورود",
"notificationSettings": "تنظیمات اعلان",
"telegramId": "شناسه تلگرام",
"notificationTypes": "نوع‌های اعلان",
"save": "ذخیره تغییرات",
"subscribe": "اشتراک‌گذاری",
"telegramIdPlaceholder": "شناسه تلگرام را وارد کنید",
"telegramNotification": "اعلان تلگرام",
"unbind": "لغو اتصال",
"updateSuccess": "به‌روزرسانی موفقیت‌آمیز"
},
"notifyEvent": {
"balanceChange": "تغییر موجودی",
"finance": "امور مالی",
"login": "ورود",
"notificationEvents": "رویدادهای اعلان",
"subscribe": "اشتراک",
"updateSuccess": "به‌روزرسانی موفقیت‌آمیز"
"thirdParty": {
"apple": {
"description": "با اپل وارد شوید"
},
"bind": "اتصال",
"bindFailed": "اتصال ناموفق بود",
"bindMobile": "اتصال موبایل",
"bindSuccess": "اتصال با موفقیت انجام شد",
"change": "تغییر",
"confirm": "تأیید",
"email": {
"description": "ایمیل خود را لینک کنید",
"invalid": "لطفاً یک آدرس ایمیل معتبر وارد کنید",
"placeholder": "آدرس ایمیل خود را وارد کنید",
"title": "تغییر ایمیل"
},
"facebook": {
"description": "با فیسبوک وارد شوید"
},
"github": {
"description": "با گیت‌هاب وارد شوید"
},
"google": {
"description": "با گوگل وارد شوید"
},
"mobile": {
"description": "شماره موبایل خود را لینک کنید",
"invalid": "لطفاً یک شماره موبایل معتبر وارد کنید",
"placeholder": "شماره موبایل خود را وارد کنید",
"title": "تغییر شماره موبایل"
},
"phone": {
"description": "شماره تلفن خود را لینک کنید",
"placeholder": "شماره تلفن خود را وارد کنید",
"title": "تغییر شماره تلفن"
},
"save": "ذخیره",
"telegram": {
"description": "با تلگرام وارد شوید"
},
"title": "حساب‌های متصل",
"unbind": "قطع اتصال",
"update": "به‌روزرسانی",
"updateSuccess": "به‌روزرسانی با موفقیت انجام شد"
}
}

View File

@ -1,7 +1,6 @@
{
"accountSettings": {
"accountSettings": "Tiliasetukset",
"loginPassword": "Kirjautumissalasana",
"newPassword": "Uusi salasana",
"passwordMismatch": "Salasanat eivät täsmää",
"repeatNewPassword": "Toista uusi salasana",
@ -9,21 +8,64 @@
"updateSuccess": "Päivitys onnistui"
},
"notify": {
"balanceChange": "Saldo Muutos",
"bind": "Siirry sitomiseen",
"channels": "Ilmoituskanavat",
"emailNotification": "Sähköposti-ilmoitus",
"finance": "Rahoitus",
"login": "Kirjaudu",
"notificationSettings": "Ilmoitusasetukset",
"telegramId": "Telegram ID",
"notificationTypes": "Ilmoitustyypit",
"save": "Tallenna muutokset",
"subscribe": "Tilaa",
"telegramIdPlaceholder": "Syötä Telegram ID",
"telegramNotification": "Telegram-ilmoitus",
"unbind": "Poista sitominen",
"updateSuccess": "Päivitys onnistui"
},
"notifyEvent": {
"balanceChange": "Saldon muutos",
"finance": "Talous",
"login": "Kirjautuminen",
"notificationEvents": "Ilmoitustapahtumat",
"subscribe": "Tilaa",
"thirdParty": {
"apple": {
"description": "Kirjaudu sisään Applen kanssa"
},
"bind": "Yhdistä",
"bindFailed": "Yhteyden muodostaminen epäonnistui",
"bindMobile": "Yhdistä puhelin",
"bindSuccess": "Yhteys onnistui",
"change": "Vaihda",
"confirm": "Vahvista",
"email": {
"description": "Linkitä sähköpostiosoitteesi",
"invalid": "Ole hyvä ja syötä voimassa oleva sähköpostiosoite",
"placeholder": "Syötä sähköpostiosoitteesi",
"title": "Vaihda sähköposti"
},
"facebook": {
"description": "Kirjaudu sisään Facebookilla"
},
"github": {
"description": "Kirjaudu sisään GitHubilla"
},
"google": {
"description": "Kirjaudu sisään Googlella"
},
"mobile": {
"description": "Linkitä matkapuhelinnumerosi",
"invalid": "Ole hyvä ja syötä voimassa oleva matkapuhelinnumero",
"placeholder": "Syötä matkapuhelinnumerosi",
"title": "Vaihda puhelinnumero"
},
"phone": {
"description": "Linkitä puhelinnumerosi",
"placeholder": "Syötä puhelinnumerosi",
"title": "Vaihda puhelin"
},
"save": "Tallenna",
"telegram": {
"description": "Kirjaudu sisään Telegramilla"
},
"title": "Yhdistetyt tilit",
"unbind": "Irrota",
"update": "Päivitä",
"updateSuccess": "Päivitys onnistui"
}
}

View File

@ -1,7 +1,6 @@
{
"accountSettings": {
"accountSettings": "Paramètres du compte",
"loginPassword": "Mot de passe de connexion",
"newPassword": "Nouveau mot de passe",
"passwordMismatch": "Les deux mots de passe ne correspondent pas",
"repeatNewPassword": "Répéter le nouveau mot de passe",
@ -9,21 +8,64 @@
"updateSuccess": "Mise à jour réussie"
},
"notify": {
"balanceChange": "Changement de Solde",
"bind": "Aller à la liaison",
"channels": "Canaux de Notification",
"emailNotification": "Notification par e-mail",
"finance": "Finance",
"login": "Connexion",
"notificationSettings": "Paramètres de notification",
"telegramId": "ID Telegram",
"notificationTypes": "Types de Notification",
"save": "Enregistrer les Modifications",
"subscribe": "S'abonner",
"telegramIdPlaceholder": "Entrez l'ID Telegram",
"telegramNotification": "Notification Telegram",
"unbind": "Délier",
"updateSuccess": "Mise à jour réussie"
},
"notifyEvent": {
"balanceChange": "Changement de solde",
"finance": "Finance",
"login": "Connexion",
"notificationEvents": "Événements de notification",
"subscribe": "S'abonner",
"updateSuccess": "Mise à jour réussie"
"thirdParty": {
"apple": {
"description": "Connectez-vous avec Apple"
},
"bind": "Connecter",
"bindFailed": "Échec de la connexion",
"bindMobile": "Connecter le mobile",
"bindSuccess": "Connecté avec succès",
"change": "Changer",
"confirm": "Confirmer",
"email": {
"description": "Liez votre adresse email",
"invalid": "Veuillez entrer une adresse email valide",
"placeholder": "Entrez votre adresse email",
"title": "Changer d'Email"
},
"facebook": {
"description": "Connectez-vous avec Facebook"
},
"github": {
"description": "Connectez-vous avec GitHub"
},
"google": {
"description": "Connectez-vous avec Google"
},
"mobile": {
"description": "Liez votre numéro de mobile",
"invalid": "Veuillez entrer un numéro de mobile valide",
"placeholder": "Entrez votre numéro de mobile",
"title": "Changer le numéro de mobile"
},
"phone": {
"description": "Liez votre numéro de téléphone",
"placeholder": "Entrez votre numéro de téléphone",
"title": "Changer de Téléphone"
},
"save": "Enregistrer",
"telegram": {
"description": "Connectez-vous avec Telegram"
},
"title": "Comptes Connectés",
"unbind": "Déconnecter",
"update": "Mettre à jour",
"updateSuccess": "Mise à Jour Réussie"
}
}

View File

@ -1,7 +1,6 @@
{
"accountSettings": {
"accountSettings": "खाता सेटिंग्स",
"loginPassword": "लॉगिन पासवर्ड",
"newPassword": "नया पासवर्ड",
"passwordMismatch": "दोनों पासवर्ड मेल नहीं खाते",
"repeatNewPassword": "नया पासवर्ड दोहराएं",
@ -9,21 +8,64 @@
"updateSuccess": "सफलतापूर्वक अपडेट किया गया"
},
"notify": {
"balanceChange": "बैलेंस परिवर्तन",
"bind": "बाइंडिंग पर जाएं",
"channels": "सूचना चैनल",
"emailNotification": "ईमेल सूचना",
"finance": "वित्त",
"login": "लॉगिन",
"notificationSettings": "सूचना सेटिंग्स",
"telegramId": "टेलीग्राम आईडी",
"notificationTypes": "सूचना प्रकार",
"save": "परिवर्तन सहेजें",
"subscribe": "सदस्यता लें",
"telegramIdPlaceholder": "टेलीग्राम आईडी दर्ज करें",
"telegramNotification": "टेलीग्राम सूचना",
"unbind": "अनबाइंड करें",
"updateSuccess": "सफलतापूर्वक अपडेट किया गया"
},
"notifyEvent": {
"balanceChange": "बैलेंस परिवर्तन",
"finance": "वित्त",
"login": "लॉगिन",
"notificationEvents": "सूचना घटनाएँ",
"subscribe": "सदस्यता लें",
"updateSuccess": "सफलतापूर्वक अपडेट किया गया"
"thirdParty": {
"apple": {
"description": "एप्पल के साथ साइन इन करें"
},
"bind": "जोड़ें",
"bindFailed": "कनेक्ट करने में विफल",
"bindMobile": "मोबाइल कनेक्ट करें",
"bindSuccess": "सफलता से कनेक्ट किया गया",
"change": "बदलें",
"confirm": "पुष्टि करें",
"email": {
"description": "अपने ईमेल पते को लिंक करें",
"invalid": "कृपया एक मान्य ईमेल पता दर्ज करें",
"placeholder": "अपना ईमेल पता दर्ज करें",
"title": "ईमेल बदलें"
},
"facebook": {
"description": "फेसबुक के साथ साइन इन करें"
},
"github": {
"description": "गिटहब के साथ साइन इन करें"
},
"google": {
"description": "गूगल के साथ साइन इन करें"
},
"mobile": {
"description": "अपने मोबाइल नंबर को लिंक करें",
"invalid": "कृपया एक मान्य मोबाइल नंबर दर्ज करें",
"placeholder": "अपना मोबाइल नंबर दर्ज करें",
"title": "मोबाइल नंबर बदलें"
},
"phone": {
"description": "अपने फोन नंबर को लिंक करें",
"placeholder": "अपना फोन नंबर दर्ज करें",
"title": "फोन बदलें"
},
"save": "सहेजें",
"telegram": {
"description": "टेलीग्राम के साथ साइन इन करें"
},
"title": "जुड़े हुए खाते",
"unbind": "अलग करें",
"update": "अपडेट करें",
"updateSuccess": "अपडेट सफल"
}
}

View File

@ -1,7 +1,6 @@
{
"accountSettings": {
"accountSettings": "Fiókbeállítások",
"loginPassword": "Bejelentkezési jelszó",
"newPassword": "Új jelszó",
"passwordMismatch": "A két jelszó nem egyezik",
"repeatNewPassword": "Új jelszó ismétlése",
@ -9,21 +8,64 @@
"updateSuccess": "Sikeres frissítés"
},
"notify": {
"balanceChange": "Egyenleg Változás",
"bind": "Menj a kötéshez",
"channels": "Értesítési Csatornák",
"emailNotification": "E-mail értesítés",
"finance": "Pénzügy",
"login": "Bejelentkezés",
"notificationSettings": "Értesítési beállítások",
"telegramId": "Telegram azonosító",
"notificationTypes": "Értesítési Típusok",
"save": "Változtatások Mentése",
"subscribe": "Feliratkozás",
"telegramIdPlaceholder": "Adja meg a Telegram azonosítót",
"telegramNotification": "Telegram értesítés",
"unbind": "Kötés feloldása",
"updateSuccess": "Sikeres frissítés"
},
"notifyEvent": {
"balanceChange": "Egyenlegváltozás",
"finance": "Pénzügy",
"login": "Bejelentkezés",
"notificationEvents": "Értesítési események",
"subscribe": "Feliratkozás",
"updateSuccess": "Sikeres frissítés"
"thirdParty": {
"apple": {
"description": "Jelentkezz be az Apple-lal"
},
"bind": "Kapcsolódás",
"bindFailed": "A csatlakozás nem sikerült",
"bindMobile": "Mobil csatlakoztatása",
"bindSuccess": "Sikeresen csatlakozott",
"change": "Változtatás",
"confirm": "Megerősítés",
"email": {
"description": "Kapcsold össze az email címed",
"invalid": "Kérlek, adj meg egy érvényes email címet",
"placeholder": "Írd be az email címed",
"title": "Email Cím Megváltoztatása"
},
"facebook": {
"description": "Jelentkezz be a Facebookkal"
},
"github": {
"description": "Jelentkezz be a GitHub-bal"
},
"google": {
"description": "Jelentkezz be a Google-lal"
},
"mobile": {
"description": "Kapcsold össze a mobil számod",
"invalid": "Kérlek, adj meg egy érvényes mobil számot",
"placeholder": "Írd be a mobil számod",
"title": "Mobiltelefonszám megváltoztatása"
},
"phone": {
"description": "Kapcsold össze a telefonszámod",
"placeholder": "Írd be a telefonszámod",
"title": "Telefonszám Megváltoztatása"
},
"save": "Mentés",
"telegram": {
"description": "Jelentkezz be a Telegrammal"
},
"title": "Kapcsolt Fiókok",
"unbind": "Kapcsolat Megszakítása",
"update": "Frissítés",
"updateSuccess": "Frissítés Sikeres"
}
}

View File

@ -1,7 +1,6 @@
{
"accountSettings": {
"accountSettings": "アカウント設定",
"loginPassword": "ログインパスワード",
"newPassword": "新しいパスワード",
"passwordMismatch": "パスワードが一致しません",
"repeatNewPassword": "新しいパスワードを再入力",
@ -9,21 +8,64 @@
"updateSuccess": "更新成功"
},
"notify": {
"balanceChange": "残高の変更",
"bind": "バインディングに移動",
"channels": "通知チャネル",
"emailNotification": "メール通知",
"finance": "ファイナンス",
"login": "ログイン",
"notificationSettings": "通知設定",
"telegramId": "Telegram ID",
"notificationTypes": "通知タイプ",
"save": "変更を保存",
"subscribe": "購読する",
"telegramIdPlaceholder": "Telegram IDを入力",
"telegramNotification": "Telegram通知",
"unbind": "バインド解除",
"updateSuccess": "更新成功"
},
"notifyEvent": {
"balanceChange": "残高の変動",
"finance": "財務",
"login": "ログイン",
"notificationEvents": "通知イベント",
"subscribe": "購読",
"thirdParty": {
"apple": {
"description": "Appleでサインイン"
},
"bind": "接続",
"bindFailed": "接続に失敗しました",
"bindMobile": "携帯電話を接続",
"bindSuccess": "接続に成功しました",
"change": "変更",
"confirm": "確認",
"email": {
"description": "メールアドレスをリンクする",
"invalid": "有効なメールアドレスを入力してください",
"placeholder": "メールアドレスを入力してください",
"title": "メールアドレスの変更"
},
"facebook": {
"description": "Facebookでサインイン"
},
"github": {
"description": "GitHubでサインイン"
},
"google": {
"description": "Googleでサインイン"
},
"mobile": {
"description": "携帯番号をリンクする",
"invalid": "有効な携帯番号を入力してください",
"placeholder": "携帯番号を入力してください",
"title": "携帯電話番号の変更"
},
"phone": {
"description": "電話番号をリンクする",
"placeholder": "電話番号を入力してください",
"title": "電話番号の変更"
},
"save": "保存",
"telegram": {
"description": "Telegramでサインイン"
},
"title": "接続されたアカウント",
"unbind": "切断",
"update": "更新",
"updateSuccess": "更新成功"
}
}

View File

@ -1,7 +1,6 @@
{
"accountSettings": {
"accountSettings": "계정 설정",
"loginPassword": "로그인 비밀번호",
"newPassword": "새 비밀번호",
"passwordMismatch": "비밀번호가 일치하지 않습니다",
"repeatNewPassword": "새 비밀번호 반복",
@ -9,21 +8,64 @@
"updateSuccess": "업데이트 성공"
},
"notify": {
"balanceChange": "잔액 변경",
"bind": "바인딩으로 이동",
"channels": "알림 채널",
"emailNotification": "이메일 알림",
"finance": "재무",
"login": "로그인",
"notificationSettings": "알림 설정",
"telegramId": "텔레그램 ID",
"notificationTypes": "알림 유형",
"save": "변경 사항 저장",
"subscribe": "구독",
"telegramIdPlaceholder": "텔레그램 ID 입력",
"telegramNotification": "텔레그램 알림",
"unbind": "바인딩 해제",
"updateSuccess": "업데이트 성공"
},
"notifyEvent": {
"balanceChange": "잔액 변경",
"finance": "재무",
"login": "로그인",
"notificationEvents": "알림 이벤트",
"subscribe": "구독",
"thirdParty": {
"apple": {
"description": "애플로 로그인"
},
"bind": "연결",
"bindFailed": "연결 실패",
"bindMobile": "휴대폰 연결",
"bindSuccess": "연결 성공",
"change": "변경",
"confirm": "확인",
"email": {
"description": "이메일 주소를 연결하세요",
"invalid": "유효한 이메일 주소를 입력하세요",
"placeholder": "이메일 주소를 입력하세요",
"title": "이메일 변경"
},
"facebook": {
"description": "페이스북으로 로그인"
},
"github": {
"description": "깃허브로 로그인"
},
"google": {
"description": "구글로 로그인"
},
"mobile": {
"description": "휴대폰 번호를 연결하세요",
"invalid": "유효한 휴대폰 번호를 입력하세요",
"placeholder": "휴대폰 번호를 입력하세요",
"title": "휴대폰 번호 변경"
},
"phone": {
"description": "전화번호를 연결하세요",
"placeholder": "전화번호를 입력하세요",
"title": "전화번호 변경"
},
"save": "저장",
"telegram": {
"description": "텔레그램으로 로그인"
},
"title": "연결된 계정",
"unbind": "연결 해제",
"update": "업데이트",
"updateSuccess": "업데이트 성공"
}
}

View File

@ -1,7 +1,6 @@
{
"accountSettings": {
"accountSettings": "Kontoinnstillinger",
"loginPassword": "Innloggingspassord",
"newPassword": "Nytt passord",
"passwordMismatch": "Passordene stemmer ikke overens",
"repeatNewPassword": "Gjenta nytt passord",
@ -9,21 +8,64 @@
"updateSuccess": "Oppdatering vellykket"
},
"notify": {
"balanceChange": "Endring i saldo",
"bind": "Gå til binding",
"channels": "Varslingskanaler",
"emailNotification": "E-postvarsling",
"finance": "Økonomi",
"login": "Logg inn",
"notificationSettings": "Varslingsinnstillinger",
"telegramId": "Telegram-ID",
"notificationTypes": "Varslingstyper",
"save": "Lagre endringer",
"subscribe": "Abonner",
"telegramIdPlaceholder": "Skriv inn Telegram-ID",
"telegramNotification": "Telegram-varsling",
"unbind": "Løsne",
"updateSuccess": "Oppdatering vellykket"
},
"notifyEvent": {
"balanceChange": "Saldoendring",
"finance": "Finans",
"login": "Logg inn",
"notificationEvents": "Varslingshendelser",
"subscribe": "Abonner",
"thirdParty": {
"apple": {
"description": "Logg inn med Apple"
},
"bind": "Koble til",
"bindFailed": "Kobling mislyktes",
"bindMobile": "Koble mobil",
"bindSuccess": "Koblet til med suksess",
"change": "Endre",
"confirm": "Bekreft",
"email": {
"description": "Koble e-postadressen din",
"invalid": "Vennligst skriv inn en gyldig e-postadresse",
"placeholder": "Skriv inn e-postadressen din",
"title": "Endre e-post"
},
"facebook": {
"description": "Logg inn med Facebook"
},
"github": {
"description": "Logg inn med GitHub"
},
"google": {
"description": "Logg inn med Google"
},
"mobile": {
"description": "Koble mobilnummeret ditt",
"invalid": "Vennligst skriv inn et gyldig mobilnummer",
"placeholder": "Skriv inn mobilnummeret ditt",
"title": "Endre mobilnummer"
},
"phone": {
"description": "Koble telefonnummeret ditt",
"placeholder": "Skriv inn telefonnummeret ditt",
"title": "Endre telefon"
},
"save": "Lagre",
"telegram": {
"description": "Logg inn med Telegram"
},
"title": "Koblede kontoer",
"unbind": "Koble fra",
"update": "Oppdater",
"updateSuccess": "Oppdatering vellykket"
}
}

View File

@ -1,7 +1,6 @@
{
"accountSettings": {
"accountSettings": "Ustawienia konta",
"loginPassword": "Hasło do logowania",
"newPassword": "Nowe hasło",
"passwordMismatch": "Wprowadzone hasła nie są zgodne",
"repeatNewPassword": "Powtórz nowe hasło",
@ -9,21 +8,64 @@
"updateSuccess": "Aktualizacja zakończona sukcesem"
},
"notify": {
"balanceChange": "Zmiana salda",
"bind": "Przejdź do wiązania",
"channels": "Kanały powiadomień",
"emailNotification": "Powiadomienie e-mail",
"finance": "Finanse",
"login": "Zaloguj się",
"notificationSettings": "Ustawienia powiadomień",
"telegramId": "Telegram ID",
"notificationTypes": "Typy powiadomień",
"save": "Zapisz zmiany",
"subscribe": "Subskrybuj",
"telegramIdPlaceholder": "Wprowadź Telegram ID",
"telegramNotification": "Powiadomienie Telegram",
"unbind": "Odwiąż",
"updateSuccess": "Aktualizacja zakończona sukcesem"
},
"notifyEvent": {
"balanceChange": "Zmiana salda",
"finance": "Finanse",
"login": "Logowanie",
"notificationEvents": "Wydarzenia powiadomień",
"subscribe": "Subskrybuj",
"thirdParty": {
"apple": {
"description": "Zaloguj się za pomocą Apple"
},
"bind": "Połącz",
"bindFailed": "Nie udało się połączyć",
"bindMobile": "Połącz telefon komórkowy",
"bindSuccess": "Pomyślnie połączono",
"change": "Zmień",
"confirm": "Potwierdź",
"email": {
"description": "Połącz swój adres e-mail",
"invalid": "Proszę wprowadzić prawidłowy adres e-mail",
"placeholder": "Wprowadź swój adres e-mail",
"title": "Zmień adres e-mail"
},
"facebook": {
"description": "Zaloguj się za pomocą Facebooka"
},
"github": {
"description": "Zaloguj się za pomocą GitHub"
},
"google": {
"description": "Zaloguj się za pomocą Google"
},
"mobile": {
"description": "Połącz swój numer komórkowy",
"invalid": "Proszę wprowadzić prawidłowy numer komórkowy",
"placeholder": "Wprowadź swój numer komórkowy",
"title": "Zmień numer telefonu komórkowego"
},
"phone": {
"description": "Połącz swój numer telefonu",
"placeholder": "Wprowadź swój numer telefonu",
"title": "Zmień numer telefonu"
},
"save": "Zapisz",
"telegram": {
"description": "Zaloguj się za pomocą Telegramu"
},
"title": "Połączone konta",
"unbind": "Rozłącz",
"update": "Aktualizuj",
"updateSuccess": "Aktualizacja zakończona sukcesem"
}
}

View File

@ -1,7 +1,6 @@
{
"accountSettings": {
"accountSettings": "Configurações da Conta",
"loginPassword": "Senha de Login",
"newPassword": "Nova Senha",
"passwordMismatch": "As senhas digitadas não coincidem",
"repeatNewPassword": "Repita a Nova Senha",
@ -9,21 +8,64 @@
"updateSuccess": "Atualização bem-sucedida"
},
"notify": {
"balanceChange": "Mudança de Saldo",
"bind": "Ir para Vinculação",
"channels": "Canais de Notificação",
"emailNotification": "Notificação por e-mail",
"finance": "Finanças",
"login": "Login",
"notificationSettings": "Configurações de notificação",
"telegramId": "ID do Telegram",
"notificationTypes": "Tipos de Notificação",
"save": "Salvar Alterações",
"subscribe": "Inscrever-se",
"telegramIdPlaceholder": "Insira o ID do Telegram",
"telegramNotification": "Notificação do Telegram",
"unbind": "Desvincular",
"updateSuccess": "Atualização bem-sucedida"
},
"notifyEvent": {
"balanceChange": "Mudança de saldo",
"finance": "Finanças",
"login": "Login",
"notificationEvents": "Eventos de notificação",
"subscribe": "Inscrever-se",
"updateSuccess": "Atualização bem-sucedida"
"thirdParty": {
"apple": {
"description": "Faça login com Apple"
},
"bind": "Conectar",
"bindFailed": "Falha ao conectar",
"bindMobile": "Conectar Celular",
"bindSuccess": "Conectado com sucesso",
"change": "Alterar",
"confirm": "Confirmar",
"email": {
"description": "Vincule seu endereço de email",
"invalid": "Por favor, insira um endereço de email válido",
"placeholder": "Digite seu endereço de email",
"title": "Alterar Email"
},
"facebook": {
"description": "Faça login com Facebook"
},
"github": {
"description": "Faça login com GitHub"
},
"google": {
"description": "Faça login com Google"
},
"mobile": {
"description": "Vincule seu número de celular",
"invalid": "Por favor, insira um número de celular válido",
"placeholder": "Digite seu número de celular",
"title": "Alterar Número de Celular"
},
"phone": {
"description": "Vincule seu número de telefone",
"placeholder": "Digite seu número de telefone",
"title": "Alterar Telefone"
},
"save": "Salvar",
"telegram": {
"description": "Faça login com Telegram"
},
"title": "Contas Conectadas",
"unbind": "Desconectar",
"update": "Atualizar",
"updateSuccess": "Atualização Bem-Sucedida"
}
}

View File

@ -1,7 +1,6 @@
{
"accountSettings": {
"accountSettings": "Setări cont",
"loginPassword": "Parolă de autentificare",
"newPassword": "Parolă nouă",
"passwordMismatch": "Parolele introduse nu se potrivesc",
"repeatNewPassword": "Repetă parola nouă",
@ -9,21 +8,64 @@
"updateSuccess": "Actualizare reușită"
},
"notify": {
"balanceChange": "Schimbare Sold",
"bind": "Mergi la Legare",
"channels": "Canale de Notificare",
"emailNotification": "Notificare prin email",
"finance": "Finanțe",
"login": "Autentificare",
"notificationSettings": "Setări notificări",
"telegramId": "ID Telegram",
"notificationTypes": "Tipuri de Notificare",
"save": "Salvează Modificările",
"subscribe": "Abonează-te",
"telegramIdPlaceholder": "Introduceți ID-ul Telegram",
"telegramNotification": "Notificare Telegram",
"unbind": "Dezleagă",
"updateSuccess": "Actualizare reușită"
},
"notifyEvent": {
"balanceChange": "Schimbare de sold",
"finance": "Finanțe",
"login": "Autentificare",
"notificationEvents": "Evenimente de notificare",
"subscribe": "Abonare",
"updateSuccess": "Actualizare reușită"
"thirdParty": {
"apple": {
"description": "Autentificare cu Apple"
},
"bind": "Conectează",
"bindFailed": "Conectare eșuată",
"bindMobile": "Conectează mobilul",
"bindSuccess": "Conectare reușită",
"change": "Schimbă",
"confirm": "Confirmă",
"email": {
"description": "Leagă adresa ta de email",
"invalid": "Te rugăm să introduci o adresă de email validă",
"placeholder": "Introdu adresa ta de email",
"title": "Schimbă Email"
},
"facebook": {
"description": "Autentificare cu Facebook"
},
"github": {
"description": "Autentificare cu GitHub"
},
"google": {
"description": "Autentificare cu Google"
},
"mobile": {
"description": "Leagă numărul tău de mobil",
"invalid": "Te rugăm să introduci un număr de mobil valid",
"placeholder": "Introdu numărul tău de mobil",
"title": "Schimbă numărul de mobil"
},
"phone": {
"description": "Leagă numărul tău de telefon",
"placeholder": "Introdu numărul tău de telefon",
"title": "Schimbă Telefon"
},
"save": "Salvează",
"telegram": {
"description": "Autentificare cu Telegram"
},
"title": "Conturi Conectate",
"unbind": "Deconectează",
"update": "Actualizează",
"updateSuccess": "Actualizare Reușită"
}
}

View File

@ -1,7 +1,6 @@
{
"accountSettings": {
"accountSettings": "Настройки аккаунта",
"loginPassword": "Пароль для входа",
"newPassword": "Новый пароль",
"passwordMismatch": "Пароли не совпадают",
"repeatNewPassword": "Повторите новый пароль",
@ -9,21 +8,64 @@
"updateSuccess": "Успешно обновлено"
},
"notify": {
"balanceChange": "Изменение баланса",
"bind": "Перейти к привязке",
"channels": "Каналы уведомлений",
"emailNotification": "Уведомление по электронной почте",
"finance": "Финансы",
"login": "Вход",
"notificationSettings": "Настройки уведомлений",
"telegramId": "Telegram ID",
"notificationTypes": "Типы уведомлений",
"save": "Сохранить изменения",
"subscribe": "Подписаться",
"telegramIdPlaceholder": "Введите Telegram ID",
"telegramNotification": "Уведомление в Telegram",
"unbind": "Отвязать",
"updateSuccess": "Успешно обновлено"
},
"notifyEvent": {
"balanceChange": "Изменение баланса",
"finance": "Финансы",
"login": "Вход",
"notificationEvents": "События уведомлений",
"subscribe": "Подписка",
"thirdParty": {
"apple": {
"description": "Войти с помощью Apple"
},
"bind": "Подключить",
"bindFailed": "Не удалось подключить",
"bindMobile": "Подключить мобильный",
"bindSuccess": "Успешно подключено",
"change": "Изменить",
"confirm": "Подтвердить",
"email": {
"description": "Привязать ваш адрес электронной почты",
"invalid": "Пожалуйста, введите действительный адрес электронной почты",
"placeholder": "Введите ваш адрес электронной почты",
"title": "Изменить электронную почту"
},
"facebook": {
"description": "Войти с помощью Facebook"
},
"github": {
"description": "Войти с помощью GitHub"
},
"google": {
"description": "Войти с помощью Google"
},
"mobile": {
"description": "Привязать ваш мобильный номер",
"invalid": "Пожалуйста, введите действительный мобильный номер",
"placeholder": "Введите ваш мобильный номер",
"title": "Изменить номер мобильного телефона"
},
"phone": {
"description": "Привязать ваш номер телефона",
"placeholder": "Введите ваш номер телефона",
"title": "Изменить телефон"
},
"save": "Сохранить",
"telegram": {
"description": "Войти с помощью Telegram"
},
"title": "Подключенные аккаунты",
"unbind": "Отключить",
"update": "Обновить",
"updateSuccess": "Успешное обновление"
}
}

View File

@ -1,7 +1,6 @@
{
"accountSettings": {
"accountSettings": "การตั้งค่าบัญชี",
"loginPassword": "รหัสผ่านเข้าสู่ระบบ",
"newPassword": "รหัสผ่านใหม่",
"passwordMismatch": "รหัสผ่านที่ป้อนไม่ตรงกัน",
"repeatNewPassword": "กรอกรหัสผ่านใหม่อีกครั้ง",
@ -9,21 +8,64 @@
"updateSuccess": "อัปเดตสำเร็จ"
},
"notify": {
"balanceChange": "การเปลี่ยนแปลงยอดเงิน",
"bind": "ไปที่การผูก",
"channels": "ช่องทางการแจ้งเตือน",
"emailNotification": "การแจ้งเตือนทางอีเมล",
"finance": "การเงิน",
"login": "เข้าสู่ระบบ",
"notificationSettings": "การตั้งค่าการแจ้งเตือน",
"telegramId": "Telegram ID",
"notificationTypes": "ประเภทการแจ้งเตือน",
"save": "บันทึกการเปลี่ยนแปลง",
"subscribe": "สมัครสมาชิก",
"telegramIdPlaceholder": "กรอก Telegram ID",
"telegramNotification": "การแจ้งเตือนทาง Telegram",
"unbind": "ยกเลิกการผูก",
"updateSuccess": "อัปเดตสำเร็จ"
},
"notifyEvent": {
"balanceChange": "การเปลี่ยนแปลงยอดเงิน",
"finance": "การเงิน",
"login": "เข้าสู่ระบบ",
"notificationEvents": "เหตุการณ์แจ้งเตือน",
"subscribe": "สมัครสมาชิก",
"thirdParty": {
"apple": {
"description": "เข้าสู่ระบบด้วย Apple"
},
"bind": "เชื่อมต่อ",
"bindFailed": "เชื่อมต่อล้มเหลว",
"bindMobile": "เชื่อมต่อโทรศัพท์มือถือ",
"bindSuccess": "เชื่อมต่อสำเร็จ",
"change": "เปลี่ยนแปลง",
"confirm": "ยืนยัน",
"email": {
"description": "เชื่อมโยงที่อยู่อีเมลของคุณ",
"invalid": "กรุณากรอกที่อยู่อีเมลที่ถูกต้อง",
"placeholder": "กรอกที่อยู่อีเมลของคุณ",
"title": "เปลี่ยนอีเมล"
},
"facebook": {
"description": "เข้าสู่ระบบด้วย Facebook"
},
"github": {
"description": "เข้าสู่ระบบด้วย GitHub"
},
"google": {
"description": "เข้าสู่ระบบด้วย Google"
},
"mobile": {
"description": "เชื่อมโยงหมายเลขโทรศัพท์มือถือของคุณ",
"invalid": "กรุณากรอกหมายเลขโทรศัพท์มือถือที่ถูกต้อง",
"placeholder": "กรอกหมายเลขโทรศัพท์มือถือ",
"title": "เปลี่ยนหมายเลขโทรศัพท์มือถือ"
},
"phone": {
"description": "เชื่อมโยงหมายเลขโทรศัพท์ของคุณ",
"placeholder": "กรอกหมายเลขโทรศัพท์ของคุณ",
"title": "เปลี่ยนหมายเลขโทรศัพท์"
},
"save": "บันทึก",
"telegram": {
"description": "เข้าสู่ระบบด้วย Telegram"
},
"title": "บัญชีที่เชื่อมต่อ",
"unbind": "ตัดการเชื่อมต่อ",
"update": "อัปเดต",
"updateSuccess": "อัปเดตสำเร็จ"
}
}

View File

@ -1,7 +1,6 @@
{
"accountSettings": {
"accountSettings": "Hesap Ayarları",
"loginPassword": "Giriş Şifresi",
"newPassword": "Yeni Şifre",
"passwordMismatch": "Şifreler uyuşmuyor",
"repeatNewPassword": "Yeni Şifreyi Tekrarla",
@ -9,21 +8,64 @@
"updateSuccess": "Güncelleme Başarılı"
},
"notify": {
"balanceChange": "Bakiye Değişikliği",
"bind": "Bağlamaya Git",
"channels": "Bildirim Kanalları",
"emailNotification": "E-posta Bildirimi",
"finance": "Finans",
"login": "Giriş",
"notificationSettings": "Bildirim Ayarları",
"telegramId": "Telegram Kimliği",
"notificationTypes": "Bildirim Türleri",
"save": "Değişiklikleri Kaydet",
"subscribe": "Abone Ol",
"telegramIdPlaceholder": "Telegram Kimliği girin",
"telegramNotification": "Telegram Bildirimi",
"unbind": "Bağlamayı Kaldır",
"updateSuccess": "Güncelleme Başarılı"
},
"notifyEvent": {
"balanceChange": "Bakiye Değişikliği",
"finance": "Finans",
"login": "Giriş",
"notificationEvents": "Bildirim Olayları",
"subscribe": "Abone Ol",
"thirdParty": {
"apple": {
"description": "Apple ile giriş yap"
},
"bind": "Bağla",
"bindFailed": "Bağlantı kurulamadı",
"bindMobile": "Mobil Bağla",
"bindSuccess": "Bağlantı başarıyla kuruldu",
"change": "Değiştir",
"confirm": "Onayla",
"email": {
"description": "E-posta adresinizi bağlayın",
"invalid": "Lütfen geçerli bir e-posta adresi girin",
"placeholder": "E-posta adresinizi girin",
"title": "E-posta Değiştir"
},
"facebook": {
"description": "Facebook ile giriş yap"
},
"github": {
"description": "GitHub ile giriş yap"
},
"google": {
"description": "Google ile giriş yap"
},
"mobile": {
"description": "Cep telefonunuzu bağlayın",
"invalid": "Lütfen geçerli bir cep telefonu numarası girin",
"placeholder": "Cep telefonunuzu girin",
"title": "Mobil Numarayı Değiştir"
},
"phone": {
"description": "Telefon numaranızı bağlayın",
"placeholder": "Telefon numaranızı girin",
"title": "Telefon Değiştir"
},
"save": "Kaydet",
"telegram": {
"description": "Telegram ile giriş yap"
},
"title": "Bağlı Hesaplar",
"unbind": "Bağlantıyı Kes",
"update": "Güncelle",
"updateSuccess": "Güncelleme Başarılı"
}
}

View File

@ -1,7 +1,6 @@
{
"accountSettings": {
"accountSettings": "Налаштування облікового запису",
"loginPassword": "Пароль для входу",
"newPassword": "Новий пароль",
"passwordMismatch": "Паролі не співпадають",
"repeatNewPassword": "Повторіть новий пароль",
@ -9,21 +8,64 @@
"updateSuccess": "Оновлення успішне"
},
"notify": {
"balanceChange": "Зміна балансу",
"bind": "Перейти до прив'язки",
"channels": "Канали сповіщень",
"emailNotification": "Сповіщення електронною поштою",
"finance": "Фінанси",
"login": "Увійти",
"notificationSettings": "Налаштування сповіщень",
"telegramId": "Telegram ID",
"notificationTypes": "Типи сповіщень",
"save": "Зберегти зміни",
"subscribe": "Підписатися",
"telegramIdPlaceholder": "Введіть Telegram ID",
"telegramNotification": "Сповіщення Telegram",
"unbind": "Відв'язати",
"updateSuccess": "Оновлення успішне"
},
"notifyEvent": {
"balanceChange": "Зміна балансу",
"finance": "Фінанси",
"login": "Вхід",
"notificationEvents": "Події сповіщень",
"subscribe": "Підписка",
"thirdParty": {
"apple": {
"description": "Увійти через Apple"
},
"bind": "Підключити",
"bindFailed": "Не вдалося підключити",
"bindMobile": "Підключити мобільний",
"bindSuccess": "Успішно підключено",
"change": "Змінити",
"confirm": "Підтвердити",
"email": {
"description": "Прив'яжіть вашу електронну адресу",
"invalid": "Будь ласка, введіть дійсну електронну адресу",
"placeholder": "Введіть вашу електронну адресу",
"title": "Змінити електронну пошту"
},
"facebook": {
"description": "Увійти через Facebook"
},
"github": {
"description": "Увійти через GitHub"
},
"google": {
"description": "Увійти через Google"
},
"mobile": {
"description": "Прив'яжіть ваш мобільний номер",
"invalid": "Будь ласка, введіть дійсний мобільний номер",
"placeholder": "Введіть ваш мобільний номер",
"title": "Змінити номер мобільного телефону"
},
"phone": {
"description": "Прив'яжіть ваш номер телефону",
"placeholder": "Введіть ваш номер телефону",
"title": "Змінити номер телефону"
},
"save": "Зберегти",
"telegram": {
"description": "Увійти через Telegram"
},
"title": "Підключені акаунти",
"unbind": "Відключити",
"update": "Оновити",
"updateSuccess": "Оновлення успішне"
}
}

View File

@ -1,7 +1,6 @@
{
"accountSettings": {
"accountSettings": "Cài đặt tài khoản",
"loginPassword": "Mật khẩu đăng nhập",
"newPassword": "Mật khẩu mới",
"passwordMismatch": "Hai lần nhập mật khẩu không khớp",
"repeatNewPassword": "Nhập lại mật khẩu mới",
@ -9,21 +8,64 @@
"updateSuccess": "Cập nhật thành công"
},
"notify": {
"balanceChange": "Thay Đổi Số Dư",
"bind": "Đi đến Liên kết",
"channels": "Kênh Thông Báo",
"emailNotification": "Thông báo Email",
"finance": "Tài Chính",
"login": "Đăng Nhập",
"notificationSettings": "Cài đặt Thông báo",
"telegramId": "Telegram ID",
"notificationTypes": "Loại Thông Báo",
"save": "Lưu Thay Đổi",
"subscribe": "Đăng Ký",
"telegramIdPlaceholder": "Nhập Telegram ID",
"telegramNotification": "Thông báo Telegram",
"unbind": "Hủy liên kết",
"updateSuccess": "Cập nhật thành công"
},
"notifyEvent": {
"balanceChange": "Thay đổi số dư",
"finance": "Tài chính",
"login": "Đăng nhập",
"notificationEvents": "Sự kiện thông báo",
"subscribe": "Đăng ký",
"updateSuccess": "Cập nhật thành công"
"thirdParty": {
"apple": {
"description": "Đăng nhập bằng Apple"
},
"bind": "Kết Nối",
"bindFailed": "Kết nối thất bại",
"bindMobile": "Kết nối điện thoại di động",
"bindSuccess": "Kết nối thành công",
"change": "Thay Đổi",
"confirm": "Xác nhận",
"email": {
"description": "Liên kết địa chỉ email của bạn",
"invalid": "Vui lòng nhập một địa chỉ email hợp lệ",
"placeholder": "Nhập địa chỉ email của bạn",
"title": "Thay Đổi Email"
},
"facebook": {
"description": "Đăng nhập bằng Facebook"
},
"github": {
"description": "Đăng nhập bằng GitHub"
},
"google": {
"description": "Đăng nhập bằng Google"
},
"mobile": {
"description": "Liên kết số di động của bạn",
"invalid": "Vui lòng nhập một số di động hợp lệ",
"placeholder": "Nhập số di động của bạn",
"title": "Thay đổi số điện thoại di động"
},
"phone": {
"description": "Liên kết số điện thoại của bạn",
"placeholder": "Nhập số điện thoại của bạn",
"title": "Thay Đổi Số Điện Thoại"
},
"save": "Lưu",
"telegram": {
"description": "Đăng nhập bằng Telegram"
},
"title": "Tài Khoản Kết Nối",
"unbind": "Ngắt Kết Nối",
"update": "Cập nhật",
"updateSuccess": "Cập Nhật Thành Công"
}
}

View File

@ -1,29 +1,71 @@
{
"accountSettings": {
"accountSettings": "账户设置",
"loginPassword": "登录密码",
"accountSettings": "密码设置",
"newPassword": "新密码",
"passwordMismatch": "两次密码输入不一致",
"passwordMismatch": "两次密码不一致",
"repeatNewPassword": "重复新密码",
"updatePassword": "更新密码",
"updateSuccess": "更新成功"
},
"notify": {
"bind": "前往绑定",
"balanceChange": "余额变动",
"bind": "去绑定",
"channels": "通知渠道",
"emailNotification": "邮件通知",
"finance": "财务相关",
"login": "登录",
"notificationSettings": "通知设置",
"telegramId": "Telegram ID",
"notificationTypes": "通知类型",
"save": "保存更改",
"subscribe": "订阅",
"telegramIdPlaceholder": "输入 Telegram ID",
"telegramNotification": "Telegram 通知",
"unbind": "解除绑定",
"updateSuccess": "更新成功"
},
"notifyEvent": {
"balanceChange": "余额变动",
"finance": "财务",
"login": "登录",
"notificationEvents": "通知事件",
"subscribe": "订阅",
"thirdParty": {
"apple": {
"description": "使用 Apple 登录"
},
"bind": "绑定",
"bindFailed": "绑定失败",
"bindMobile": "绑定手机",
"bindSuccess": "绑定成功",
"change": "更改",
"confirm": "确认",
"email": {
"description": "绑定邮箱地址",
"invalid": "请输入有效的邮箱地址",
"placeholder": "输入邮箱地址",
"title": "更改邮箱"
},
"facebook": {
"description": "使用 Facebook 登录"
},
"github": {
"description": "使用 GitHub 登录"
},
"google": {
"description": "使用 Google 登录"
},
"mobile": {
"description": "绑定手机号",
"invalid": "请输入有效的手机号码",
"placeholder": "输入手机号",
"title": "更改手机号"
},
"phone": {
"description": "链接您的电话号码",
"placeholder": "输入您的电话号码",
"title": "更改电话"
},
"save": "保存",
"telegram": {
"description": "使用 Telegram 登录"
},
"title": "关联账号",
"unbind": "解除绑定",
"update": "更新",
"updateSuccess": "更新成功"
}
}

View File

@ -1,7 +1,6 @@
{
"accountSettings": {
"accountSettings": "帳戶設定",
"loginPassword": "登入密碼",
"newPassword": "新密碼",
"passwordMismatch": "兩次密碼輸入不一致",
"repeatNewPassword": "重複新密碼",
@ -9,21 +8,64 @@
"updateSuccess": "更新成功"
},
"notify": {
"balanceChange": "餘額變更",
"bind": "前往綁定",
"channels": "通知渠道",
"emailNotification": "郵件通知",
"finance": "財務",
"login": "登錄",
"notificationSettings": "通知設定",
"telegramId": "Telegram ID",
"notificationTypes": "通知類型",
"save": "保存更改",
"subscribe": "訂閱",
"telegramIdPlaceholder": "輸入 Telegram ID",
"telegramNotification": "Telegram 通知",
"unbind": "解除綁定",
"updateSuccess": "更新成功"
},
"notifyEvent": {
"balanceChange": "餘額變動",
"finance": "財務",
"login": "登入",
"notificationEvents": "通知事件",
"subscribe": "訂閱",
"thirdParty": {
"apple": {
"description": "使用 Apple 登錄"
},
"bind": "連接",
"bindFailed": "連接失敗",
"bindMobile": "連接手機",
"bindSuccess": "成功連接",
"change": "更改",
"confirm": "確認",
"email": {
"description": "綁定您的電子郵件地址",
"invalid": "請輸入有效的電子郵件地址",
"placeholder": "輸入您的電子郵件地址",
"title": "更改電子郵件"
},
"facebook": {
"description": "使用 Facebook 登錄"
},
"github": {
"description": "使用 GitHub 登錄"
},
"google": {
"description": "使用 Google 登錄"
},
"mobile": {
"description": "綁定您的手機號碼",
"invalid": "請輸入有效的手機號碼",
"placeholder": "輸入您的手機號碼",
"title": "更改手機號碼"
},
"phone": {
"description": "綁定您的電話號碼",
"placeholder": "輸入您的電話號碼",
"title": "更改電話"
},
"save": "保存",
"telegram": {
"description": "使用 Telegram 登錄"
},
"title": "已連接帳戶",
"unbind": "斷開連接",
"update": "更新",
"updateSuccess": "更新成功"
}
}

View File

@ -32,7 +32,6 @@ export async function appleLoginCallback(
return request<API.Response & { data?: any }>('/v1/auth/oauth/callback/apple', {
method: 'POST',
data: formData,
requestType: 'form',
...(options || {}),
});
}