mirror of
https://github.com/perfect-panel/ppanel-web.git
synced 2026-02-06 11:40:28 -05:00
✨ feat(profile): Update localization strings and enhance third-party account binding
This commit is contained in:
parent
3883646566
commit
2d1effb7ab
@ -1,5 +1,5 @@
|
||||
// @ts-ignore
|
||||
|
||||
|
||||
// API 更新时间:
|
||||
// API 唯一标识:
|
||||
import * as announcement from './announcement';
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
// @ts-ignore
|
||||
|
||||
|
||||
// API 更新时间:
|
||||
// API 唯一标识:
|
||||
import * as auth from './auth';
|
||||
|
||||
@ -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>
|
||||
);
|
||||
|
||||
@ -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>
|
||||
);
|
||||
}
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
);
|
||||
|
||||
292
apps/user/app/(main)/(user)/profile/third-party-accounts.tsx
Normal file
292
apps/user/app/(main)/(user)/profile/third-party-accounts.tsx
Normal 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>
|
||||
</>
|
||||
);
|
||||
}
|
||||
@ -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}
|
||||
|
||||
33
apps/user/app/bind/[platform]/certification.tsx
Normal file
33
apps/user/app/bind/[platform]/certification.tsx
Normal 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;
|
||||
}
|
||||
61
apps/user/app/bind/[platform]/page.tsx
Normal file
61
apps/user/app/bind/[platform]/page.tsx
Normal 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>
|
||||
);
|
||||
}
|
||||
@ -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á"
|
||||
}
|
||||
}
|
||||
|
||||
@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@ -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": "بهروزرسانی با موفقیت انجام شد"
|
||||
}
|
||||
}
|
||||
|
||||
@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@ -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": "अपडेट सफल"
|
||||
}
|
||||
}
|
||||
|
||||
@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@ -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": "更新成功"
|
||||
}
|
||||
}
|
||||
|
||||
@ -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": "업데이트 성공"
|
||||
}
|
||||
}
|
||||
|
||||
@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@ -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ă"
|
||||
}
|
||||
}
|
||||
|
||||
@ -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": "Успешное обновление"
|
||||
}
|
||||
}
|
||||
|
||||
@ -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": "อัปเดตสำเร็จ"
|
||||
}
|
||||
}
|
||||
|
||||
@ -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ı"
|
||||
}
|
||||
}
|
||||
|
||||
@ -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": "Оновлення успішне"
|
||||
}
|
||||
}
|
||||
|
||||
@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@ -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": "更新成功"
|
||||
}
|
||||
}
|
||||
|
||||
@ -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": "更新成功"
|
||||
}
|
||||
}
|
||||
|
||||
@ -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 || {}),
|
||||
});
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user