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 // @ts-ignore
// API 更新时间: // API 更新时间:
// API 唯一标识: // API 唯一标识:
import * as announcement from './announcement'; import * as announcement from './announcement';

View File

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

View File

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

View File

@ -1,12 +1,12 @@
import ChangePassword from './change-password'; import ChangePassword from './change-password';
import NotifyEvent from './notify-event';
import NotifySettings from './notify-settings'; import NotifySettings from './notify-settings';
import ThirdPartyAccounts from './third-party-accounts';
export default function Page() { export default function Page() {
return ( 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 /> <NotifySettings />
<NotifyEvent />
<ChangePassword /> <ChangePassword />
</div> </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 { common } = useGlobalStore();
const { site, auth, oauth_methods } = common; const { site, auth, oauth_methods } = common;
const AUTH_COMPONENT_MAP = { const AUTH_METHODS = [
email: <EmailAuthForm />, {
sms: <PhoneAuthForm />, key: 'email',
} as const; 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 ( return (
<main className='bg-muted/50 flex h-full min-h-screen items-center'> <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'> <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'> <div className='text-muted-foreground mb-6 text-center font-medium'>
{t('verifyAccountDesc')} {t('verifyAccountDesc')}
</div> </div>
{enabledAuthMethods.length === 1 {AUTH_METHODS.length === 1
? AUTH_COMPONENT_MAP[enabledAuthMethods[0] as AuthMethod] ? AUTH_METHODS[0]?.children
: enabledAuthMethods[0] && ( : AUTH_METHODS[0] && (
<Tabs defaultValue={enabledAuthMethods[0]}> <Tabs defaultValue={AUTH_METHODS[0].key}>
<TabsList className='mb-6 flex w-full *:flex-1'> <TabsList className='mb-6 flex w-full *:flex-1'>
{enabledAuthMethods.map((method) => ( {AUTH_METHODS.map((item) => (
<TabsTrigger key={method} value={method}> <TabsTrigger key={item.key} value={item.key}>
{t(`methods.${method}`)} {t(`methods.${item.key}`)}
</TabsTrigger> </TabsTrigger>
))} ))}
</TabsList> </TabsList>
{enabledAuthMethods.map((method) => ( {AUTH_METHODS.map((item) => (
<TabsContent key={method} value={method}> <TabsContent key={item.key} value={item.key}>
{AUTH_COMPONENT_MAP[method]} {item.children}
</TabsContent> </TabsContent>
))} ))}
</Tabs> </Tabs>
)} )}
</div> </div>
<div className='py-8'> <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'> <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'> <span className='bg-background text-muted-foreground relative z-10 px-2'>
@ -107,7 +101,7 @@ export default function Page() {
</span> </span>
</div> </div>
<div className='mt-6 flex justify-center gap-4 *:size-12 *:p-2'> <div className='mt-6 flex justify-center gap-4 *:size-12 *:p-2'>
{oauth_methods?.map((method: any) => { {OAUTH_METHODS?.map((method: any) => {
return ( return (
<Button <Button
key={method} 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": {
"accountSettings": "Nastavení účtu", "accountSettings": "Nastavení účtu",
"loginPassword": "Přihlašovací heslo",
"newPassword": "Nové heslo", "newPassword": "Nové heslo",
"passwordMismatch": "Hesla se neshodují", "passwordMismatch": "Hesla se neshodují",
"repeatNewPassword": "Zopakujte nové heslo", "repeatNewPassword": "Zopakujte nové heslo",
@ -9,21 +8,64 @@
"updateSuccess": "Aktualizace úspěšná" "updateSuccess": "Aktualizace úspěšná"
}, },
"notify": { "notify": {
"balanceChange": "Změna zůstatku",
"bind": "Přejít na vazbu", "bind": "Přejít na vazbu",
"channels": "Notifikační kanály",
"emailNotification": "E-mailové oznámení", "emailNotification": "E-mailové oznámení",
"finance": "Finance",
"login": "Přihlášení",
"notificationSettings": "Nastavení oznámení", "notificationSettings": "Nastavení oznámení",
"telegramId": "Telegram ID", "notificationTypes": "Typy notifikací",
"save": "Uložit změny",
"subscribe": "Přihlásit se",
"telegramIdPlaceholder": "Zadejte Telegram ID", "telegramIdPlaceholder": "Zadejte Telegram ID",
"telegramNotification": "Telegram oznámení", "telegramNotification": "Telegram oznámení",
"unbind": "Zrušit vazbu", "unbind": "Zrušit vazbu",
"updateSuccess": "Aktualizace byla úspěšná" "updateSuccess": "Aktualizace byla úspěšná"
}, },
"notifyEvent": { "thirdParty": {
"balanceChange": "Změna zůstatku", "apple": {
"finance": "Finance", "description": "Přihlásit se pomocí Apple"
"login": "Přihlášení", },
"notificationEvents": "Upozornění na události", "bind": "Připojit",
"subscribe": "Předplatit", "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á" "updateSuccess": "Aktualizace úspěšná"
} }
} }

View File

@ -1,7 +1,6 @@
{ {
"accountSettings": { "accountSettings": {
"accountSettings": "Kontoeinstellungen", "accountSettings": "Kontoeinstellungen",
"loginPassword": "Anmeldepasswort",
"newPassword": "Neues Passwort", "newPassword": "Neues Passwort",
"passwordMismatch": "Die Passwörter stimmen nicht überein", "passwordMismatch": "Die Passwörter stimmen nicht überein",
"repeatNewPassword": "Neues Passwort wiederholen", "repeatNewPassword": "Neues Passwort wiederholen",
@ -9,21 +8,64 @@
"updateSuccess": "Erfolgreich aktualisiert" "updateSuccess": "Erfolgreich aktualisiert"
}, },
"notify": { "notify": {
"balanceChange": "Kontostandsänderung",
"bind": "Zur Bindung gehen", "bind": "Zur Bindung gehen",
"channels": "Benachrichtigungskanäle",
"emailNotification": "E-Mail-Benachrichtigung", "emailNotification": "E-Mail-Benachrichtigung",
"finance": "Finanzen",
"login": "Anmelden",
"notificationSettings": "Benachrichtigungseinstellungen", "notificationSettings": "Benachrichtigungseinstellungen",
"telegramId": "Telegram-ID", "notificationTypes": "Benachrichtigungstypen",
"save": "Änderungen speichern",
"subscribe": "Abonnieren",
"telegramIdPlaceholder": "Telegram-ID eingeben", "telegramIdPlaceholder": "Telegram-ID eingeben",
"telegramNotification": "Telegram-Benachrichtigung", "telegramNotification": "Telegram-Benachrichtigung",
"unbind": "Lösen", "unbind": "Lösen",
"updateSuccess": "Erfolgreich aktualisiert" "updateSuccess": "Erfolgreich aktualisiert"
}, },
"notifyEvent": { "thirdParty": {
"balanceChange": "Kontostandsänderung", "apple": {
"finance": "Finanzen", "description": "Mit Apple anmelden"
"login": "Anmeldung", },
"notificationEvents": "Benachrichtigungsereignisse", "bind": "Verbinden",
"subscribe": "Abonnieren", "bindFailed": "Verbindung fehlgeschlagen",
"updateSuccess": "Erfolgreich aktualisiert" "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": {
"accountSettings": "Account Settings", "accountSettings": "Password Settings",
"loginPassword": "Login Password",
"newPassword": "New Password", "newPassword": "New Password",
"passwordMismatch": "Passwords do not match", "passwordMismatch": "Passwords do not match",
"repeatNewPassword": "Repeat New Password", "repeatNewPassword": "Repeat New Password",
@ -9,21 +8,64 @@
"updateSuccess": "Update Successful" "updateSuccess": "Update Successful"
}, },
"notify": { "notify": {
"balanceChange": "Balance Change",
"bind": "Go to Binding", "bind": "Go to Binding",
"channels": "Notification Channels",
"emailNotification": "Email Notification", "emailNotification": "Email Notification",
"finance": "Finance",
"login": "Login",
"notificationSettings": "Notification Settings", "notificationSettings": "Notification Settings",
"telegramId": "Telegram ID", "notificationTypes": "Notification Types",
"save": "Save Changes",
"subscribe": "Subscribe",
"telegramIdPlaceholder": "Enter Telegram ID", "telegramIdPlaceholder": "Enter Telegram ID",
"telegramNotification": "Telegram Notification", "telegramNotification": "Telegram Notification",
"unbind": "Unbind", "unbind": "Unbind",
"updateSuccess": "Update Successful" "updateSuccess": "Update Successful"
}, },
"notifyEvent": { "thirdParty": {
"balanceChange": "Balance Change", "apple": {
"finance": "Finance", "description": "Sign in with Apple"
"login": "Login", },
"notificationEvents": "Notification Events", "bind": "Connect",
"subscribe": "Subscribe", "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" "updateSuccess": "Update Successful"
} }
} }

View File

@ -1,7 +1,6 @@
{ {
"accountSettings": { "accountSettings": {
"accountSettings": "Configuración de la cuenta", "accountSettings": "Configuración de la cuenta",
"loginPassword": "Contraseña de inicio de sesión",
"newPassword": "Nueva contraseña", "newPassword": "Nueva contraseña",
"passwordMismatch": "Las contraseñas no coinciden", "passwordMismatch": "Las contraseñas no coinciden",
"repeatNewPassword": "Repetir nueva contraseña", "repeatNewPassword": "Repetir nueva contraseña",
@ -9,21 +8,64 @@
"updateSuccess": "Actualización exitosa" "updateSuccess": "Actualización exitosa"
}, },
"notify": { "notify": {
"balanceChange": "Cambio de Saldo",
"bind": "Ir a Vinculación", "bind": "Ir a Vinculación",
"channels": "Canales de Notificación",
"emailNotification": "Notificación por correo electrónico", "emailNotification": "Notificación por correo electrónico",
"finance": "Finanzas",
"login": "Iniciar Sesión",
"notificationSettings": "Configuración de notificaciones", "notificationSettings": "Configuración de notificaciones",
"telegramId": "ID de Telegram", "notificationTypes": "Tipos de Notificación",
"save": "Guardar Cambios",
"subscribe": "Suscribirse",
"telegramIdPlaceholder": "Ingrese ID de Telegram", "telegramIdPlaceholder": "Ingrese ID de Telegram",
"telegramNotification": "Notificación de Telegram", "telegramNotification": "Notificación de Telegram",
"unbind": "Desvincular", "unbind": "Desvincular",
"updateSuccess": "Actualización exitosa" "updateSuccess": "Actualización exitosa"
}, },
"notifyEvent": { "thirdParty": {
"balanceChange": "Cambio de saldo", "apple": {
"finance": "Finanzas", "description": "Iniciar sesión con Apple"
"login": "Iniciar sesión", },
"notificationEvents": "Eventos de notificación", "bind": "Conectar",
"subscribe": "Suscribirse", "bindFailed": "Error al conectar",
"updateSuccess": "Actualización exitosa" "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": {
"accountSettings": "Configuración de la cuenta", "accountSettings": "Configuración de la cuenta",
"loginPassword": "Contraseña de inicio de sesión",
"newPassword": "Nueva contraseña", "newPassword": "Nueva contraseña",
"passwordMismatch": "Las contraseñas no coinciden", "passwordMismatch": "Las contraseñas no coinciden",
"repeatNewPassword": "Repetir nueva contraseña", "repeatNewPassword": "Repetir nueva contraseña",
@ -9,21 +8,64 @@
"updateSuccess": "Actualización exitosa" "updateSuccess": "Actualización exitosa"
}, },
"notify": { "notify": {
"balanceChange": "Cambio de Saldo",
"bind": "Ir a Vinculación", "bind": "Ir a Vinculación",
"channels": "Canales de Notificación",
"emailNotification": "Notificación por correo electrónico", "emailNotification": "Notificación por correo electrónico",
"finance": "Finanzas",
"login": "Iniciar Sesión",
"notificationSettings": "Configuración de notificaciones", "notificationSettings": "Configuración de notificaciones",
"telegramId": "ID de Telegram", "notificationTypes": "Tipos de Notificación",
"save": "Guardar Cambios",
"subscribe": "Suscribirse",
"telegramIdPlaceholder": "Ingrese ID de Telegram", "telegramIdPlaceholder": "Ingrese ID de Telegram",
"telegramNotification": "Notificación de Telegram", "telegramNotification": "Notificación de Telegram",
"unbind": "Desvincular", "unbind": "Desvincular",
"updateSuccess": "Actualización exitosa" "updateSuccess": "Actualización exitosa"
}, },
"notifyEvent": { "thirdParty": {
"balanceChange": "Cambio de saldo", "apple": {
"finance": "Finanzas", "description": "Iniciar sesión con Apple"
"login": "Iniciar sesión", },
"notificationEvents": "Eventos de notificación", "bind": "Conectar",
"subscribe": "Suscribirse", "bindFailed": "Error al conectar",
"updateSuccess": "Actualización exitosa" "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": {
"accountSettings": "تنظیمات حساب", "accountSettings": "تنظیمات حساب",
"loginPassword": "رمز عبور ورود",
"newPassword": "رمز عبور جدید", "newPassword": "رمز عبور جدید",
"passwordMismatch": "رمزهای عبور مطابقت ندارند", "passwordMismatch": "رمزهای عبور مطابقت ندارند",
"repeatNewPassword": "تکرار رمز عبور جدید", "repeatNewPassword": "تکرار رمز عبور جدید",
@ -9,21 +8,64 @@
"updateSuccess": "به‌روزرسانی موفقیت‌آمیز" "updateSuccess": "به‌روزرسانی موفقیت‌آمیز"
}, },
"notify": { "notify": {
"balanceChange": "تغییر موجودی",
"bind": "رفتن به اتصال", "bind": "رفتن به اتصال",
"channels": "کانال‌های اعلان",
"emailNotification": "اعلان ایمیل", "emailNotification": "اعلان ایمیل",
"finance": "مالی",
"login": "ورود",
"notificationSettings": "تنظیمات اعلان", "notificationSettings": "تنظیمات اعلان",
"telegramId": "شناسه تلگرام", "notificationTypes": "نوع‌های اعلان",
"save": "ذخیره تغییرات",
"subscribe": "اشتراک‌گذاری",
"telegramIdPlaceholder": "شناسه تلگرام را وارد کنید", "telegramIdPlaceholder": "شناسه تلگرام را وارد کنید",
"telegramNotification": "اعلان تلگرام", "telegramNotification": "اعلان تلگرام",
"unbind": "لغو اتصال", "unbind": "لغو اتصال",
"updateSuccess": "به‌روزرسانی موفقیت‌آمیز" "updateSuccess": "به‌روزرسانی موفقیت‌آمیز"
}, },
"notifyEvent": { "thirdParty": {
"balanceChange": "تغییر موجودی", "apple": {
"finance": "امور مالی", "description": "با اپل وارد شوید"
"login": "ورود", },
"notificationEvents": "رویدادهای اعلان", "bind": "اتصال",
"subscribe": "اشتراک", "bindFailed": "اتصال ناموفق بود",
"updateSuccess": "به‌روزرسانی موفقیت‌آمیز" "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": {
"accountSettings": "Tiliasetukset", "accountSettings": "Tiliasetukset",
"loginPassword": "Kirjautumissalasana",
"newPassword": "Uusi salasana", "newPassword": "Uusi salasana",
"passwordMismatch": "Salasanat eivät täsmää", "passwordMismatch": "Salasanat eivät täsmää",
"repeatNewPassword": "Toista uusi salasana", "repeatNewPassword": "Toista uusi salasana",
@ -9,21 +8,64 @@
"updateSuccess": "Päivitys onnistui" "updateSuccess": "Päivitys onnistui"
}, },
"notify": { "notify": {
"balanceChange": "Saldo Muutos",
"bind": "Siirry sitomiseen", "bind": "Siirry sitomiseen",
"channels": "Ilmoituskanavat",
"emailNotification": "Sähköposti-ilmoitus", "emailNotification": "Sähköposti-ilmoitus",
"finance": "Rahoitus",
"login": "Kirjaudu",
"notificationSettings": "Ilmoitusasetukset", "notificationSettings": "Ilmoitusasetukset",
"telegramId": "Telegram ID", "notificationTypes": "Ilmoitustyypit",
"save": "Tallenna muutokset",
"subscribe": "Tilaa",
"telegramIdPlaceholder": "Syötä Telegram ID", "telegramIdPlaceholder": "Syötä Telegram ID",
"telegramNotification": "Telegram-ilmoitus", "telegramNotification": "Telegram-ilmoitus",
"unbind": "Poista sitominen", "unbind": "Poista sitominen",
"updateSuccess": "Päivitys onnistui" "updateSuccess": "Päivitys onnistui"
}, },
"notifyEvent": { "thirdParty": {
"balanceChange": "Saldon muutos", "apple": {
"finance": "Talous", "description": "Kirjaudu sisään Applen kanssa"
"login": "Kirjautuminen", },
"notificationEvents": "Ilmoitustapahtumat", "bind": "Yhdistä",
"subscribe": "Tilaa", "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" "updateSuccess": "Päivitys onnistui"
} }
} }

View File

@ -1,7 +1,6 @@
{ {
"accountSettings": { "accountSettings": {
"accountSettings": "Paramètres du compte", "accountSettings": "Paramètres du compte",
"loginPassword": "Mot de passe de connexion",
"newPassword": "Nouveau mot de passe", "newPassword": "Nouveau mot de passe",
"passwordMismatch": "Les deux mots de passe ne correspondent pas", "passwordMismatch": "Les deux mots de passe ne correspondent pas",
"repeatNewPassword": "Répéter le nouveau mot de passe", "repeatNewPassword": "Répéter le nouveau mot de passe",
@ -9,21 +8,64 @@
"updateSuccess": "Mise à jour réussie" "updateSuccess": "Mise à jour réussie"
}, },
"notify": { "notify": {
"balanceChange": "Changement de Solde",
"bind": "Aller à la liaison", "bind": "Aller à la liaison",
"channels": "Canaux de Notification",
"emailNotification": "Notification par e-mail", "emailNotification": "Notification par e-mail",
"finance": "Finance",
"login": "Connexion",
"notificationSettings": "Paramètres de notification", "notificationSettings": "Paramètres de notification",
"telegramId": "ID Telegram", "notificationTypes": "Types de Notification",
"save": "Enregistrer les Modifications",
"subscribe": "S'abonner",
"telegramIdPlaceholder": "Entrez l'ID Telegram", "telegramIdPlaceholder": "Entrez l'ID Telegram",
"telegramNotification": "Notification Telegram", "telegramNotification": "Notification Telegram",
"unbind": "Délier", "unbind": "Délier",
"updateSuccess": "Mise à jour réussie" "updateSuccess": "Mise à jour réussie"
}, },
"notifyEvent": { "thirdParty": {
"balanceChange": "Changement de solde", "apple": {
"finance": "Finance", "description": "Connectez-vous avec Apple"
"login": "Connexion", },
"notificationEvents": "Événements de notification", "bind": "Connecter",
"subscribe": "S'abonner", "bindFailed": "Échec de la connexion",
"updateSuccess": "Mise à jour réussie" "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": {
"accountSettings": "खाता सेटिंग्स", "accountSettings": "खाता सेटिंग्स",
"loginPassword": "लॉगिन पासवर्ड",
"newPassword": "नया पासवर्ड", "newPassword": "नया पासवर्ड",
"passwordMismatch": "दोनों पासवर्ड मेल नहीं खाते", "passwordMismatch": "दोनों पासवर्ड मेल नहीं खाते",
"repeatNewPassword": "नया पासवर्ड दोहराएं", "repeatNewPassword": "नया पासवर्ड दोहराएं",
@ -9,21 +8,64 @@
"updateSuccess": "सफलतापूर्वक अपडेट किया गया" "updateSuccess": "सफलतापूर्वक अपडेट किया गया"
}, },
"notify": { "notify": {
"balanceChange": "बैलेंस परिवर्तन",
"bind": "बाइंडिंग पर जाएं", "bind": "बाइंडिंग पर जाएं",
"channels": "सूचना चैनल",
"emailNotification": "ईमेल सूचना", "emailNotification": "ईमेल सूचना",
"finance": "वित्त",
"login": "लॉगिन",
"notificationSettings": "सूचना सेटिंग्स", "notificationSettings": "सूचना सेटिंग्स",
"telegramId": "टेलीग्राम आईडी", "notificationTypes": "सूचना प्रकार",
"save": "परिवर्तन सहेजें",
"subscribe": "सदस्यता लें",
"telegramIdPlaceholder": "टेलीग्राम आईडी दर्ज करें", "telegramIdPlaceholder": "टेलीग्राम आईडी दर्ज करें",
"telegramNotification": "टेलीग्राम सूचना", "telegramNotification": "टेलीग्राम सूचना",
"unbind": "अनबाइंड करें", "unbind": "अनबाइंड करें",
"updateSuccess": "सफलतापूर्वक अपडेट किया गया" "updateSuccess": "सफलतापूर्वक अपडेट किया गया"
}, },
"notifyEvent": { "thirdParty": {
"balanceChange": "बैलेंस परिवर्तन", "apple": {
"finance": "वित्त", "description": "एप्पल के साथ साइन इन करें"
"login": "लॉगिन", },
"notificationEvents": "सूचना घटनाएँ", "bind": "जोड़ें",
"subscribe": "सदस्यता लें", "bindFailed": "कनेक्ट करने में विफल",
"updateSuccess": "सफलतापूर्वक अपडेट किया गया" "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": {
"accountSettings": "Fiókbeállítások", "accountSettings": "Fiókbeállítások",
"loginPassword": "Bejelentkezési jelszó",
"newPassword": "Új jelszó", "newPassword": "Új jelszó",
"passwordMismatch": "A két jelszó nem egyezik", "passwordMismatch": "A két jelszó nem egyezik",
"repeatNewPassword": "Új jelszó ismétlése", "repeatNewPassword": "Új jelszó ismétlése",
@ -9,21 +8,64 @@
"updateSuccess": "Sikeres frissítés" "updateSuccess": "Sikeres frissítés"
}, },
"notify": { "notify": {
"balanceChange": "Egyenleg Változás",
"bind": "Menj a kötéshez", "bind": "Menj a kötéshez",
"channels": "Értesítési Csatornák",
"emailNotification": "E-mail értesítés", "emailNotification": "E-mail értesítés",
"finance": "Pénzügy",
"login": "Bejelentkezés",
"notificationSettings": "Értesítési beállítások", "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", "telegramIdPlaceholder": "Adja meg a Telegram azonosítót",
"telegramNotification": "Telegram értesítés", "telegramNotification": "Telegram értesítés",
"unbind": "Kötés feloldása", "unbind": "Kötés feloldása",
"updateSuccess": "Sikeres frissítés" "updateSuccess": "Sikeres frissítés"
}, },
"notifyEvent": { "thirdParty": {
"balanceChange": "Egyenlegváltozás", "apple": {
"finance": "Pénzügy", "description": "Jelentkezz be az Apple-lal"
"login": "Bejelentkezés", },
"notificationEvents": "Értesítési események", "bind": "Kapcsolódás",
"subscribe": "Feliratkozás", "bindFailed": "A csatlakozás nem sikerült",
"updateSuccess": "Sikeres frissítés" "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": {
"accountSettings": "アカウント設定", "accountSettings": "アカウント設定",
"loginPassword": "ログインパスワード",
"newPassword": "新しいパスワード", "newPassword": "新しいパスワード",
"passwordMismatch": "パスワードが一致しません", "passwordMismatch": "パスワードが一致しません",
"repeatNewPassword": "新しいパスワードを再入力", "repeatNewPassword": "新しいパスワードを再入力",
@ -9,21 +8,64 @@
"updateSuccess": "更新成功" "updateSuccess": "更新成功"
}, },
"notify": { "notify": {
"balanceChange": "残高の変更",
"bind": "バインディングに移動", "bind": "バインディングに移動",
"channels": "通知チャネル",
"emailNotification": "メール通知", "emailNotification": "メール通知",
"finance": "ファイナンス",
"login": "ログイン",
"notificationSettings": "通知設定", "notificationSettings": "通知設定",
"telegramId": "Telegram ID", "notificationTypes": "通知タイプ",
"save": "変更を保存",
"subscribe": "購読する",
"telegramIdPlaceholder": "Telegram IDを入力", "telegramIdPlaceholder": "Telegram IDを入力",
"telegramNotification": "Telegram通知", "telegramNotification": "Telegram通知",
"unbind": "バインド解除", "unbind": "バインド解除",
"updateSuccess": "更新成功" "updateSuccess": "更新成功"
}, },
"notifyEvent": { "thirdParty": {
"balanceChange": "残高の変動", "apple": {
"finance": "財務", "description": "Appleでサインイン"
"login": "ログイン", },
"notificationEvents": "通知イベント", "bind": "接続",
"subscribe": "購読", "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": "更新成功" "updateSuccess": "更新成功"
} }
} }

View File

@ -1,7 +1,6 @@
{ {
"accountSettings": { "accountSettings": {
"accountSettings": "계정 설정", "accountSettings": "계정 설정",
"loginPassword": "로그인 비밀번호",
"newPassword": "새 비밀번호", "newPassword": "새 비밀번호",
"passwordMismatch": "비밀번호가 일치하지 않습니다", "passwordMismatch": "비밀번호가 일치하지 않습니다",
"repeatNewPassword": "새 비밀번호 반복", "repeatNewPassword": "새 비밀번호 반복",
@ -9,21 +8,64 @@
"updateSuccess": "업데이트 성공" "updateSuccess": "업데이트 성공"
}, },
"notify": { "notify": {
"balanceChange": "잔액 변경",
"bind": "바인딩으로 이동", "bind": "바인딩으로 이동",
"channels": "알림 채널",
"emailNotification": "이메일 알림", "emailNotification": "이메일 알림",
"finance": "재무",
"login": "로그인",
"notificationSettings": "알림 설정", "notificationSettings": "알림 설정",
"telegramId": "텔레그램 ID", "notificationTypes": "알림 유형",
"save": "변경 사항 저장",
"subscribe": "구독",
"telegramIdPlaceholder": "텔레그램 ID 입력", "telegramIdPlaceholder": "텔레그램 ID 입력",
"telegramNotification": "텔레그램 알림", "telegramNotification": "텔레그램 알림",
"unbind": "바인딩 해제", "unbind": "바인딩 해제",
"updateSuccess": "업데이트 성공" "updateSuccess": "업데이트 성공"
}, },
"notifyEvent": { "thirdParty": {
"balanceChange": "잔액 변경", "apple": {
"finance": "재무", "description": "애플로 로그인"
"login": "로그인", },
"notificationEvents": "알림 이벤트", "bind": "연결",
"subscribe": "구독", "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": "업데이트 성공" "updateSuccess": "업데이트 성공"
} }
} }

View File

@ -1,7 +1,6 @@
{ {
"accountSettings": { "accountSettings": {
"accountSettings": "Kontoinnstillinger", "accountSettings": "Kontoinnstillinger",
"loginPassword": "Innloggingspassord",
"newPassword": "Nytt passord", "newPassword": "Nytt passord",
"passwordMismatch": "Passordene stemmer ikke overens", "passwordMismatch": "Passordene stemmer ikke overens",
"repeatNewPassword": "Gjenta nytt passord", "repeatNewPassword": "Gjenta nytt passord",
@ -9,21 +8,64 @@
"updateSuccess": "Oppdatering vellykket" "updateSuccess": "Oppdatering vellykket"
}, },
"notify": { "notify": {
"balanceChange": "Endring i saldo",
"bind": "Gå til binding", "bind": "Gå til binding",
"channels": "Varslingskanaler",
"emailNotification": "E-postvarsling", "emailNotification": "E-postvarsling",
"finance": "Økonomi",
"login": "Logg inn",
"notificationSettings": "Varslingsinnstillinger", "notificationSettings": "Varslingsinnstillinger",
"telegramId": "Telegram-ID", "notificationTypes": "Varslingstyper",
"save": "Lagre endringer",
"subscribe": "Abonner",
"telegramIdPlaceholder": "Skriv inn Telegram-ID", "telegramIdPlaceholder": "Skriv inn Telegram-ID",
"telegramNotification": "Telegram-varsling", "telegramNotification": "Telegram-varsling",
"unbind": "Løsne", "unbind": "Løsne",
"updateSuccess": "Oppdatering vellykket" "updateSuccess": "Oppdatering vellykket"
}, },
"notifyEvent": { "thirdParty": {
"balanceChange": "Saldoendring", "apple": {
"finance": "Finans", "description": "Logg inn med Apple"
"login": "Logg inn", },
"notificationEvents": "Varslingshendelser", "bind": "Koble til",
"subscribe": "Abonner", "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" "updateSuccess": "Oppdatering vellykket"
} }
} }

View File

@ -1,7 +1,6 @@
{ {
"accountSettings": { "accountSettings": {
"accountSettings": "Ustawienia konta", "accountSettings": "Ustawienia konta",
"loginPassword": "Hasło do logowania",
"newPassword": "Nowe hasło", "newPassword": "Nowe hasło",
"passwordMismatch": "Wprowadzone hasła nie są zgodne", "passwordMismatch": "Wprowadzone hasła nie są zgodne",
"repeatNewPassword": "Powtórz nowe hasło", "repeatNewPassword": "Powtórz nowe hasło",
@ -9,21 +8,64 @@
"updateSuccess": "Aktualizacja zakończona sukcesem" "updateSuccess": "Aktualizacja zakończona sukcesem"
}, },
"notify": { "notify": {
"balanceChange": "Zmiana salda",
"bind": "Przejdź do wiązania", "bind": "Przejdź do wiązania",
"channels": "Kanały powiadomień",
"emailNotification": "Powiadomienie e-mail", "emailNotification": "Powiadomienie e-mail",
"finance": "Finanse",
"login": "Zaloguj się",
"notificationSettings": "Ustawienia powiadomień", "notificationSettings": "Ustawienia powiadomień",
"telegramId": "Telegram ID", "notificationTypes": "Typy powiadomień",
"save": "Zapisz zmiany",
"subscribe": "Subskrybuj",
"telegramIdPlaceholder": "Wprowadź Telegram ID", "telegramIdPlaceholder": "Wprowadź Telegram ID",
"telegramNotification": "Powiadomienie Telegram", "telegramNotification": "Powiadomienie Telegram",
"unbind": "Odwiąż", "unbind": "Odwiąż",
"updateSuccess": "Aktualizacja zakończona sukcesem" "updateSuccess": "Aktualizacja zakończona sukcesem"
}, },
"notifyEvent": { "thirdParty": {
"balanceChange": "Zmiana salda", "apple": {
"finance": "Finanse", "description": "Zaloguj się za pomocą Apple"
"login": "Logowanie", },
"notificationEvents": "Wydarzenia powiadomień", "bind": "Połącz",
"subscribe": "Subskrybuj", "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" "updateSuccess": "Aktualizacja zakończona sukcesem"
} }
} }

View File

@ -1,7 +1,6 @@
{ {
"accountSettings": { "accountSettings": {
"accountSettings": "Configurações da Conta", "accountSettings": "Configurações da Conta",
"loginPassword": "Senha de Login",
"newPassword": "Nova Senha", "newPassword": "Nova Senha",
"passwordMismatch": "As senhas digitadas não coincidem", "passwordMismatch": "As senhas digitadas não coincidem",
"repeatNewPassword": "Repita a Nova Senha", "repeatNewPassword": "Repita a Nova Senha",
@ -9,21 +8,64 @@
"updateSuccess": "Atualização bem-sucedida" "updateSuccess": "Atualização bem-sucedida"
}, },
"notify": { "notify": {
"balanceChange": "Mudança de Saldo",
"bind": "Ir para Vinculação", "bind": "Ir para Vinculação",
"channels": "Canais de Notificação",
"emailNotification": "Notificação por e-mail", "emailNotification": "Notificação por e-mail",
"finance": "Finanças",
"login": "Login",
"notificationSettings": "Configurações de notificação", "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", "telegramIdPlaceholder": "Insira o ID do Telegram",
"telegramNotification": "Notificação do Telegram", "telegramNotification": "Notificação do Telegram",
"unbind": "Desvincular", "unbind": "Desvincular",
"updateSuccess": "Atualização bem-sucedida" "updateSuccess": "Atualização bem-sucedida"
}, },
"notifyEvent": { "thirdParty": {
"balanceChange": "Mudança de saldo", "apple": {
"finance": "Finanças", "description": "Faça login com Apple"
"login": "Login", },
"notificationEvents": "Eventos de notificação", "bind": "Conectar",
"subscribe": "Inscrever-se", "bindFailed": "Falha ao conectar",
"updateSuccess": "Atualização bem-sucedida" "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": {
"accountSettings": "Setări cont", "accountSettings": "Setări cont",
"loginPassword": "Parolă de autentificare",
"newPassword": "Parolă nouă", "newPassword": "Parolă nouă",
"passwordMismatch": "Parolele introduse nu se potrivesc", "passwordMismatch": "Parolele introduse nu se potrivesc",
"repeatNewPassword": "Repetă parola nouă", "repeatNewPassword": "Repetă parola nouă",
@ -9,21 +8,64 @@
"updateSuccess": "Actualizare reușită" "updateSuccess": "Actualizare reușită"
}, },
"notify": { "notify": {
"balanceChange": "Schimbare Sold",
"bind": "Mergi la Legare", "bind": "Mergi la Legare",
"channels": "Canale de Notificare",
"emailNotification": "Notificare prin email", "emailNotification": "Notificare prin email",
"finance": "Finanțe",
"login": "Autentificare",
"notificationSettings": "Setări notificări", "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", "telegramIdPlaceholder": "Introduceți ID-ul Telegram",
"telegramNotification": "Notificare Telegram", "telegramNotification": "Notificare Telegram",
"unbind": "Dezleagă", "unbind": "Dezleagă",
"updateSuccess": "Actualizare reușită" "updateSuccess": "Actualizare reușită"
}, },
"notifyEvent": { "thirdParty": {
"balanceChange": "Schimbare de sold", "apple": {
"finance": "Finanțe", "description": "Autentificare cu Apple"
"login": "Autentificare", },
"notificationEvents": "Evenimente de notificare", "bind": "Conectează",
"subscribe": "Abonare", "bindFailed": "Conectare eșuată",
"updateSuccess": "Actualizare reușită" "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": {
"accountSettings": "Настройки аккаунта", "accountSettings": "Настройки аккаунта",
"loginPassword": "Пароль для входа",
"newPassword": "Новый пароль", "newPassword": "Новый пароль",
"passwordMismatch": "Пароли не совпадают", "passwordMismatch": "Пароли не совпадают",
"repeatNewPassword": "Повторите новый пароль", "repeatNewPassword": "Повторите новый пароль",
@ -9,21 +8,64 @@
"updateSuccess": "Успешно обновлено" "updateSuccess": "Успешно обновлено"
}, },
"notify": { "notify": {
"balanceChange": "Изменение баланса",
"bind": "Перейти к привязке", "bind": "Перейти к привязке",
"channels": "Каналы уведомлений",
"emailNotification": "Уведомление по электронной почте", "emailNotification": "Уведомление по электронной почте",
"finance": "Финансы",
"login": "Вход",
"notificationSettings": "Настройки уведомлений", "notificationSettings": "Настройки уведомлений",
"telegramId": "Telegram ID", "notificationTypes": "Типы уведомлений",
"save": "Сохранить изменения",
"subscribe": "Подписаться",
"telegramIdPlaceholder": "Введите Telegram ID", "telegramIdPlaceholder": "Введите Telegram ID",
"telegramNotification": "Уведомление в Telegram", "telegramNotification": "Уведомление в Telegram",
"unbind": "Отвязать", "unbind": "Отвязать",
"updateSuccess": "Успешно обновлено" "updateSuccess": "Успешно обновлено"
}, },
"notifyEvent": { "thirdParty": {
"balanceChange": "Изменение баланса", "apple": {
"finance": "Финансы", "description": "Войти с помощью Apple"
"login": "Вход", },
"notificationEvents": "События уведомлений", "bind": "Подключить",
"subscribe": "Подписка", "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": "Успешное обновление" "updateSuccess": "Успешное обновление"
} }
} }

View File

@ -1,7 +1,6 @@
{ {
"accountSettings": { "accountSettings": {
"accountSettings": "การตั้งค่าบัญชี", "accountSettings": "การตั้งค่าบัญชี",
"loginPassword": "รหัสผ่านเข้าสู่ระบบ",
"newPassword": "รหัสผ่านใหม่", "newPassword": "รหัสผ่านใหม่",
"passwordMismatch": "รหัสผ่านที่ป้อนไม่ตรงกัน", "passwordMismatch": "รหัสผ่านที่ป้อนไม่ตรงกัน",
"repeatNewPassword": "กรอกรหัสผ่านใหม่อีกครั้ง", "repeatNewPassword": "กรอกรหัสผ่านใหม่อีกครั้ง",
@ -9,21 +8,64 @@
"updateSuccess": "อัปเดตสำเร็จ" "updateSuccess": "อัปเดตสำเร็จ"
}, },
"notify": { "notify": {
"balanceChange": "การเปลี่ยนแปลงยอดเงิน",
"bind": "ไปที่การผูก", "bind": "ไปที่การผูก",
"channels": "ช่องทางการแจ้งเตือน",
"emailNotification": "การแจ้งเตือนทางอีเมล", "emailNotification": "การแจ้งเตือนทางอีเมล",
"finance": "การเงิน",
"login": "เข้าสู่ระบบ",
"notificationSettings": "การตั้งค่าการแจ้งเตือน", "notificationSettings": "การตั้งค่าการแจ้งเตือน",
"telegramId": "Telegram ID", "notificationTypes": "ประเภทการแจ้งเตือน",
"save": "บันทึกการเปลี่ยนแปลง",
"subscribe": "สมัครสมาชิก",
"telegramIdPlaceholder": "กรอก Telegram ID", "telegramIdPlaceholder": "กรอก Telegram ID",
"telegramNotification": "การแจ้งเตือนทาง Telegram", "telegramNotification": "การแจ้งเตือนทาง Telegram",
"unbind": "ยกเลิกการผูก", "unbind": "ยกเลิกการผูก",
"updateSuccess": "อัปเดตสำเร็จ" "updateSuccess": "อัปเดตสำเร็จ"
}, },
"notifyEvent": { "thirdParty": {
"balanceChange": "การเปลี่ยนแปลงยอดเงิน", "apple": {
"finance": "การเงิน", "description": "เข้าสู่ระบบด้วย Apple"
"login": "เข้าสู่ระบบ", },
"notificationEvents": "เหตุการณ์แจ้งเตือน", "bind": "เชื่อมต่อ",
"subscribe": "สมัครสมาชิก", "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": "อัปเดตสำเร็จ" "updateSuccess": "อัปเดตสำเร็จ"
} }
} }

View File

@ -1,7 +1,6 @@
{ {
"accountSettings": { "accountSettings": {
"accountSettings": "Hesap Ayarları", "accountSettings": "Hesap Ayarları",
"loginPassword": "Giriş Şifresi",
"newPassword": "Yeni Şifre", "newPassword": "Yeni Şifre",
"passwordMismatch": "Şifreler uyuşmuyor", "passwordMismatch": "Şifreler uyuşmuyor",
"repeatNewPassword": "Yeni Şifreyi Tekrarla", "repeatNewPassword": "Yeni Şifreyi Tekrarla",
@ -9,21 +8,64 @@
"updateSuccess": "Güncelleme Başarılı" "updateSuccess": "Güncelleme Başarılı"
}, },
"notify": { "notify": {
"balanceChange": "Bakiye Değişikliği",
"bind": "Bağlamaya Git", "bind": "Bağlamaya Git",
"channels": "Bildirim Kanalları",
"emailNotification": "E-posta Bildirimi", "emailNotification": "E-posta Bildirimi",
"finance": "Finans",
"login": "Giriş",
"notificationSettings": "Bildirim Ayarları", "notificationSettings": "Bildirim Ayarları",
"telegramId": "Telegram Kimliği", "notificationTypes": "Bildirim Türleri",
"save": "Değişiklikleri Kaydet",
"subscribe": "Abone Ol",
"telegramIdPlaceholder": "Telegram Kimliği girin", "telegramIdPlaceholder": "Telegram Kimliği girin",
"telegramNotification": "Telegram Bildirimi", "telegramNotification": "Telegram Bildirimi",
"unbind": "Bağlamayı Kaldır", "unbind": "Bağlamayı Kaldır",
"updateSuccess": "Güncelleme Başarılı" "updateSuccess": "Güncelleme Başarılı"
}, },
"notifyEvent": { "thirdParty": {
"balanceChange": "Bakiye Değişikliği", "apple": {
"finance": "Finans", "description": "Apple ile giriş yap"
"login": "Giriş", },
"notificationEvents": "Bildirim Olayları", "bind": "Bağla",
"subscribe": "Abone Ol", "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ı" "updateSuccess": "Güncelleme Başarılı"
} }
} }

View File

@ -1,7 +1,6 @@
{ {
"accountSettings": { "accountSettings": {
"accountSettings": "Налаштування облікового запису", "accountSettings": "Налаштування облікового запису",
"loginPassword": "Пароль для входу",
"newPassword": "Новий пароль", "newPassword": "Новий пароль",
"passwordMismatch": "Паролі не співпадають", "passwordMismatch": "Паролі не співпадають",
"repeatNewPassword": "Повторіть новий пароль", "repeatNewPassword": "Повторіть новий пароль",
@ -9,21 +8,64 @@
"updateSuccess": "Оновлення успішне" "updateSuccess": "Оновлення успішне"
}, },
"notify": { "notify": {
"balanceChange": "Зміна балансу",
"bind": "Перейти до прив'язки", "bind": "Перейти до прив'язки",
"channels": "Канали сповіщень",
"emailNotification": "Сповіщення електронною поштою", "emailNotification": "Сповіщення електронною поштою",
"finance": "Фінанси",
"login": "Увійти",
"notificationSettings": "Налаштування сповіщень", "notificationSettings": "Налаштування сповіщень",
"telegramId": "Telegram ID", "notificationTypes": "Типи сповіщень",
"save": "Зберегти зміни",
"subscribe": "Підписатися",
"telegramIdPlaceholder": "Введіть Telegram ID", "telegramIdPlaceholder": "Введіть Telegram ID",
"telegramNotification": "Сповіщення Telegram", "telegramNotification": "Сповіщення Telegram",
"unbind": "Відв'язати", "unbind": "Відв'язати",
"updateSuccess": "Оновлення успішне" "updateSuccess": "Оновлення успішне"
}, },
"notifyEvent": { "thirdParty": {
"balanceChange": "Зміна балансу", "apple": {
"finance": "Фінанси", "description": "Увійти через Apple"
"login": "Вхід", },
"notificationEvents": "Події сповіщень", "bind": "Підключити",
"subscribe": "Підписка", "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": "Оновлення успішне" "updateSuccess": "Оновлення успішне"
} }
} }

View File

@ -1,7 +1,6 @@
{ {
"accountSettings": { "accountSettings": {
"accountSettings": "Cài đặt tài khoản", "accountSettings": "Cài đặt tài khoản",
"loginPassword": "Mật khẩu đăng nhập",
"newPassword": "Mật khẩu mới", "newPassword": "Mật khẩu mới",
"passwordMismatch": "Hai lần nhập mật khẩu không khớp", "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", "repeatNewPassword": "Nhập lại mật khẩu mới",
@ -9,21 +8,64 @@
"updateSuccess": "Cập nhật thành công" "updateSuccess": "Cập nhật thành công"
}, },
"notify": { "notify": {
"balanceChange": "Thay Đổi Số Dư",
"bind": "Đi đến Liên kết", "bind": "Đi đến Liên kết",
"channels": "Kênh Thông Báo",
"emailNotification": "Thông báo Email", "emailNotification": "Thông báo Email",
"finance": "Tài Chính",
"login": "Đăng Nhập",
"notificationSettings": "Cài đặt Thông báo", "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", "telegramIdPlaceholder": "Nhập Telegram ID",
"telegramNotification": "Thông báo Telegram", "telegramNotification": "Thông báo Telegram",
"unbind": "Hủy liên kết", "unbind": "Hủy liên kết",
"updateSuccess": "Cập nhật thành công" "updateSuccess": "Cập nhật thành công"
}, },
"notifyEvent": { "thirdParty": {
"balanceChange": "Thay đổi số dư", "apple": {
"finance": "Tài chính", "description": "Đăng nhập bằng Apple"
"login": "Đăng nhập", },
"notificationEvents": "Sự kiện thông báo", "bind": "Kết Nối",
"subscribe": "Đăng ký", "bindFailed": "Kết nối thất bại",
"updateSuccess": "Cập nhật thành công" "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": {
"accountSettings": "账户设置", "accountSettings": "密码设置",
"loginPassword": "登录密码",
"newPassword": "新密码", "newPassword": "新密码",
"passwordMismatch": "两次密码输入不一致", "passwordMismatch": "两次密码不一致",
"repeatNewPassword": "重复新密码", "repeatNewPassword": "重复新密码",
"updatePassword": "更新密码", "updatePassword": "更新密码",
"updateSuccess": "更新成功" "updateSuccess": "更新成功"
}, },
"notify": { "notify": {
"bind": "前往绑定", "balanceChange": "余额变动",
"bind": "去绑定",
"channels": "通知渠道",
"emailNotification": "邮件通知", "emailNotification": "邮件通知",
"finance": "财务相关",
"login": "登录",
"notificationSettings": "通知设置", "notificationSettings": "通知设置",
"telegramId": "Telegram ID", "notificationTypes": "通知类型",
"save": "保存更改",
"subscribe": "订阅",
"telegramIdPlaceholder": "输入 Telegram ID", "telegramIdPlaceholder": "输入 Telegram ID",
"telegramNotification": "Telegram 通知", "telegramNotification": "Telegram 通知",
"unbind": "解除绑定", "unbind": "解除绑定",
"updateSuccess": "更新成功" "updateSuccess": "更新成功"
}, },
"notifyEvent": { "thirdParty": {
"balanceChange": "余额变动", "apple": {
"finance": "财务", "description": "使用 Apple 登录"
"login": "登录", },
"notificationEvents": "通知事件", "bind": "绑定",
"subscribe": "订阅", "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": "更新成功" "updateSuccess": "更新成功"
} }
} }

View File

@ -1,7 +1,6 @@
{ {
"accountSettings": { "accountSettings": {
"accountSettings": "帳戶設定", "accountSettings": "帳戶設定",
"loginPassword": "登入密碼",
"newPassword": "新密碼", "newPassword": "新密碼",
"passwordMismatch": "兩次密碼輸入不一致", "passwordMismatch": "兩次密碼輸入不一致",
"repeatNewPassword": "重複新密碼", "repeatNewPassword": "重複新密碼",
@ -9,21 +8,64 @@
"updateSuccess": "更新成功" "updateSuccess": "更新成功"
}, },
"notify": { "notify": {
"balanceChange": "餘額變更",
"bind": "前往綁定", "bind": "前往綁定",
"channels": "通知渠道",
"emailNotification": "郵件通知", "emailNotification": "郵件通知",
"finance": "財務",
"login": "登錄",
"notificationSettings": "通知設定", "notificationSettings": "通知設定",
"telegramId": "Telegram ID", "notificationTypes": "通知類型",
"save": "保存更改",
"subscribe": "訂閱",
"telegramIdPlaceholder": "輸入 Telegram ID", "telegramIdPlaceholder": "輸入 Telegram ID",
"telegramNotification": "Telegram 通知", "telegramNotification": "Telegram 通知",
"unbind": "解除綁定", "unbind": "解除綁定",
"updateSuccess": "更新成功" "updateSuccess": "更新成功"
}, },
"notifyEvent": { "thirdParty": {
"balanceChange": "餘額變動", "apple": {
"finance": "財務", "description": "使用 Apple 登錄"
"login": "登入", },
"notificationEvents": "通知事件", "bind": "連接",
"subscribe": "訂閱", "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": "更新成功" "updateSuccess": "更新成功"
} }
} }

View File

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