mirror of
https://github.com/kyantech/Palmr.git
synced 2025-10-23 06:11:58 +00:00
feat(auth): enhance trusted device management for 2FA
- Added lastUsedAt timestamp to the TrustedDevice model for tracking device usage. - Implemented new endpoints for retrieving and removing trusted devices. - Updated AuthService to manage trusted devices, including methods for getting and removing devices. - Enhanced the user interface to support trusted device management, including modals for removing devices. - Added translations for new messages related to trusted devices in multiple languages.
This commit is contained in:
@@ -278,6 +278,7 @@ model TrustedDevice {
|
||||
deviceName String?
|
||||
userAgent String?
|
||||
ipAddress String?
|
||||
lastUsedAt DateTime @default(now())
|
||||
expiresAt DateTime
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
@@ -122,4 +122,47 @@ export class AuthController {
|
||||
return reply.status(400).send({ error: error.message });
|
||||
}
|
||||
}
|
||||
|
||||
async getTrustedDevices(request: FastifyRequest, reply: FastifyReply) {
|
||||
try {
|
||||
const userId = (request as any).user?.userId;
|
||||
if (!userId) {
|
||||
return reply.status(401).send({ error: "Unauthorized: a valid token is required to access this resource." });
|
||||
}
|
||||
|
||||
const devices = await this.authService.getTrustedDevices(userId);
|
||||
return reply.send({ devices });
|
||||
} catch (error: any) {
|
||||
return reply.status(400).send({ error: error.message });
|
||||
}
|
||||
}
|
||||
|
||||
async removeTrustedDevice(request: FastifyRequest, reply: FastifyReply) {
|
||||
try {
|
||||
const userId = (request as any).user?.userId;
|
||||
if (!userId) {
|
||||
return reply.status(401).send({ error: "Unauthorized: a valid token is required to access this resource." });
|
||||
}
|
||||
|
||||
const { id } = request.params as { id: string };
|
||||
await this.authService.removeTrustedDevice(userId, id);
|
||||
return reply.send({ success: true, message: "Trusted device removed successfully" });
|
||||
} catch (error: any) {
|
||||
return reply.status(400).send({ error: error.message });
|
||||
}
|
||||
}
|
||||
|
||||
async removeAllTrustedDevices(request: FastifyRequest, reply: FastifyReply) {
|
||||
try {
|
||||
const userId = (request as any).user?.userId;
|
||||
if (!userId) {
|
||||
return reply.status(401).send({ error: "Unauthorized: a valid token is required to access this resource." });
|
||||
}
|
||||
|
||||
const result = await this.authService.removeAllTrustedDevices(userId);
|
||||
return reply.send(result);
|
||||
} catch (error: any) {
|
||||
return reply.status(400).send({ error: error.message });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -183,4 +183,101 @@ export async function authRoutes(app: FastifyInstance) {
|
||||
},
|
||||
authController.getCurrentUser.bind(authController)
|
||||
);
|
||||
|
||||
app.get(
|
||||
"/auth/trusted-devices",
|
||||
{
|
||||
schema: {
|
||||
tags: ["Authentication"],
|
||||
operationId: "getTrustedDevices",
|
||||
summary: "Get Trusted Devices",
|
||||
description: "Get all trusted devices for the current user",
|
||||
response: {
|
||||
200: z.object({
|
||||
devices: z.array(
|
||||
z.object({
|
||||
id: z.string().describe("Device ID"),
|
||||
deviceName: z.string().nullable().describe("Device name"),
|
||||
userAgent: z.string().nullable().describe("User agent"),
|
||||
ipAddress: z.string().nullable().describe("IP address"),
|
||||
createdAt: z.date().describe("Creation date"),
|
||||
lastUsedAt: z.date().describe("Last used date"),
|
||||
expiresAt: z.date().describe("Expiration date"),
|
||||
})
|
||||
),
|
||||
}),
|
||||
401: z.object({ error: z.string().describe("Error message") }),
|
||||
},
|
||||
},
|
||||
preValidation: async (request: FastifyRequest, reply: FastifyReply) => {
|
||||
try {
|
||||
await request.jwtVerify();
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
reply.status(401).send({ error: "Unauthorized: a valid token is required to access this resource." });
|
||||
}
|
||||
},
|
||||
},
|
||||
authController.getTrustedDevices.bind(authController)
|
||||
);
|
||||
|
||||
app.delete(
|
||||
"/auth/trusted-devices/:id",
|
||||
{
|
||||
schema: {
|
||||
tags: ["Authentication"],
|
||||
operationId: "removeTrustedDevice",
|
||||
summary: "Remove Trusted Device",
|
||||
description: "Remove a specific trusted device",
|
||||
params: z.object({
|
||||
id: z.string().describe("Device ID"),
|
||||
}),
|
||||
response: {
|
||||
200: z.object({
|
||||
success: z.boolean().describe("Success status"),
|
||||
message: z.string().describe("Success message"),
|
||||
}),
|
||||
401: z.object({ error: z.string().describe("Error message") }),
|
||||
},
|
||||
},
|
||||
preValidation: async (request: FastifyRequest, reply: FastifyReply) => {
|
||||
try {
|
||||
await request.jwtVerify();
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
reply.status(401).send({ error: "Unauthorized: a valid token is required to access this resource." });
|
||||
}
|
||||
},
|
||||
},
|
||||
authController.removeTrustedDevice.bind(authController)
|
||||
);
|
||||
|
||||
app.delete(
|
||||
"/auth/trusted-devices",
|
||||
{
|
||||
schema: {
|
||||
tags: ["Authentication"],
|
||||
operationId: "removeAllTrustedDevices",
|
||||
summary: "Remove All Trusted Devices",
|
||||
description: "Remove all trusted devices for the current user",
|
||||
response: {
|
||||
200: z.object({
|
||||
success: z.boolean().describe("Success status"),
|
||||
message: z.string().describe("Success message"),
|
||||
removedCount: z.number().describe("Number of devices removed"),
|
||||
}),
|
||||
401: z.object({ error: z.string().describe("Error message") }),
|
||||
},
|
||||
},
|
||||
preValidation: async (request: FastifyRequest, reply: FastifyReply) => {
|
||||
try {
|
||||
await request.jwtVerify();
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
reply.status(401).send({ error: "Unauthorized: a valid token is required to access this resource." });
|
||||
}
|
||||
},
|
||||
},
|
||||
authController.removeAllTrustedDevices.bind(authController)
|
||||
);
|
||||
}
|
||||
|
@@ -87,6 +87,8 @@ export class AuthService {
|
||||
if (userAgent && ipAddress) {
|
||||
const isDeviceTrusted = await this.trustedDeviceService.isDeviceTrusted(user.id, userAgent, ipAddress);
|
||||
if (isDeviceTrusted) {
|
||||
// Update last used timestamp for trusted device
|
||||
await this.trustedDeviceService.updateLastUsed(user.id, userAgent, ipAddress);
|
||||
return UserResponseSchema.parse(user);
|
||||
}
|
||||
}
|
||||
@@ -132,6 +134,12 @@ export class AuthService {
|
||||
|
||||
if (rememberDevice && userAgent && ipAddress) {
|
||||
await this.trustedDeviceService.addTrustedDevice(userId, userAgent, ipAddress);
|
||||
} else if (userAgent && ipAddress) {
|
||||
// Update last used timestamp if this is already a trusted device
|
||||
const isDeviceTrusted = await this.trustedDeviceService.isDeviceTrusted(userId, userAgent, ipAddress);
|
||||
if (isDeviceTrusted) {
|
||||
await this.trustedDeviceService.updateLastUsed(userId, userAgent, ipAddress);
|
||||
}
|
||||
}
|
||||
|
||||
return UserResponseSchema.parse(user);
|
||||
@@ -203,4 +211,21 @@ export class AuthService {
|
||||
}
|
||||
return UserResponseSchema.parse(user);
|
||||
}
|
||||
|
||||
async getTrustedDevices(userId: string) {
|
||||
return await this.trustedDeviceService.getUserTrustedDevices(userId);
|
||||
}
|
||||
|
||||
async removeTrustedDevice(userId: string, deviceId: string) {
|
||||
return await this.trustedDeviceService.removeTrustedDevice(userId, deviceId);
|
||||
}
|
||||
|
||||
async removeAllTrustedDevices(userId: string) {
|
||||
const result = await this.trustedDeviceService.removeAllTrustedDevices(userId);
|
||||
return {
|
||||
success: true,
|
||||
message: "All trusted devices removed successfully",
|
||||
removedCount: result.count,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@@ -40,11 +40,13 @@ export class TrustedDeviceService {
|
||||
userAgent,
|
||||
ipAddress,
|
||||
expiresAt,
|
||||
lastUsedAt: new Date(),
|
||||
},
|
||||
update: {
|
||||
expiresAt,
|
||||
userAgent,
|
||||
ipAddress,
|
||||
lastUsedAt: new Date(),
|
||||
},
|
||||
});
|
||||
}
|
||||
@@ -82,11 +84,26 @@ export class TrustedDeviceService {
|
||||
});
|
||||
}
|
||||
|
||||
async removeAllTrustedDevices(userId: string): Promise<void> {
|
||||
await prisma.trustedDevice.deleteMany({
|
||||
async removeAllTrustedDevices(userId: string): Promise<{ count: number }> {
|
||||
const result = await prisma.trustedDevice.deleteMany({
|
||||
where: {
|
||||
userId,
|
||||
},
|
||||
});
|
||||
return { count: result.count };
|
||||
}
|
||||
|
||||
async updateLastUsed(userId: string, userAgent: string, ipAddress: string): Promise<void> {
|
||||
const deviceHash = this.generateDeviceHash(userAgent, ipAddress);
|
||||
|
||||
await prisma.trustedDevice.updateMany({
|
||||
where: {
|
||||
userId,
|
||||
deviceHash,
|
||||
},
|
||||
data: {
|
||||
lastUsedAt: new Date(),
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@@ -143,7 +143,8 @@
|
||||
"saving": "جاري الحفظ...",
|
||||
"update": "تحديث",
|
||||
"click": "انقر على",
|
||||
"creating": "جاري الإنشاء..."
|
||||
"creating": "جاري الإنشاء...",
|
||||
"loadingSimple": "جاري التحميل..."
|
||||
},
|
||||
"createShare": {
|
||||
"title": "إنشاء مشاركة",
|
||||
@@ -189,7 +190,8 @@
|
||||
"Password verification required": "مطلوب التحقق من كلمة المرور",
|
||||
"Two-factor authentication is already enabled": "المصادقة الثنائية مفعلة بالفعل",
|
||||
"Two-factor authentication is not enabled": "المصادقة الثنائية غير مفعلة",
|
||||
"Two-factor authentication required": "المصادقة الثنائية مطلوبة"
|
||||
"Two-factor authentication required": "المصادقة الثنائية مطلوبة",
|
||||
"noUserData": "لا يوجد بيانات المستخدم"
|
||||
},
|
||||
"fileActions": {
|
||||
"editFile": "تعديل الملف",
|
||||
@@ -338,6 +340,21 @@
|
||||
},
|
||||
"pageTitle": "الصفحة الرئيسية"
|
||||
},
|
||||
"iconPicker": {
|
||||
"title": "اختر أيقونة",
|
||||
"placeholder": "اختر أيقونة",
|
||||
"searchPlaceholder": "البحث عن الأيقونات...",
|
||||
"loadingMore": "جاري تحميل المزيد من الأيقونات...",
|
||||
"allIconsLoaded": "تم تحميل جميع الأيقونات {count}",
|
||||
"noIconsFound": "لم يتم العثور على أيقونات لـ \"{search}\"",
|
||||
"tabs": {
|
||||
"all": "جميع الأيقونات",
|
||||
"popular": "الشائعة",
|
||||
"auth": "مزودي المصادقة"
|
||||
},
|
||||
"stats": "{iconCount} أيقونة من {libraryCount} مكتبة",
|
||||
"categoryBadge": "{category} ({count} أيقونات)"
|
||||
},
|
||||
"login": {
|
||||
"welcome": "مرحبا بك",
|
||||
"signInToContinue": "قم بتسجيل الدخول للمتابعة",
|
||||
@@ -1428,6 +1445,160 @@
|
||||
"dark": "داكن",
|
||||
"system": "النظام"
|
||||
},
|
||||
"twoFactor": {
|
||||
"title": "المصادقة الثنائية",
|
||||
"description": "أضف طبقة إضافية من الأمان إلى حسابك",
|
||||
"enabled": "حسابك محمي بالمصادقة الثنائية",
|
||||
"disabled": "المصادقة الثنائية غير مفعلة",
|
||||
"setup": {
|
||||
"title": "تفعيل المصادقة الثنائية",
|
||||
"description": "امسح رمز QR باستخدام تطبيق المصادقة، ثم أدخل رمز التحقق.",
|
||||
"qrCode": "رمز QR",
|
||||
"manualEntryKey": "مفتاح الإدخال اليدوي",
|
||||
"verificationCode": "رمز التحقق",
|
||||
"verificationCodePlaceholder": "أدخل الرمز المكون من 6 أرقام",
|
||||
"verificationCodeDescription": "أدخل الرمز المكون من 6 أرقام من تطبيق المصادقة",
|
||||
"verifyAndEnable": "تحقق وتفعيل",
|
||||
"cancel": "إلغاء"
|
||||
},
|
||||
"disable": {
|
||||
"title": "تعطيل المصادقة الثنائية",
|
||||
"description": "أدخل كلمة المرور للتأكيد على تعطيل المصادقة الثنائية.",
|
||||
"password": "كلمة المرور",
|
||||
"passwordPlaceholder": "أدخل كلمة المرور",
|
||||
"confirm": "تأكيد التعطيل",
|
||||
"cancel": "إلغاء"
|
||||
},
|
||||
"backupCodes": {
|
||||
"title": "رموز النسخ الاحتياطي",
|
||||
"description": "احفظ رموز النسخ الاحتياطي هذه في مكان آمن. يمكنك استخدامها للوصول إلى حسابك في حالة فقدان جهاز المصادقة.",
|
||||
"warning": "هام:",
|
||||
"warningText": "يمكن استخدام كل رمز نسخ احتياطي مرة واحدة فقط. احتفظ بها بشكل آمن ولا تشاركها مع أي شخص.",
|
||||
"generateNew": "إنشاء رموز نسخ احتياطي جديدة",
|
||||
"download": "تحميل رموز النسخ الاحتياطي",
|
||||
"copyToClipboard": "نسخ إلى الحافظة",
|
||||
"savedMessage": "لقد حفظت رموز النسخ الاحتياطي",
|
||||
"available": "{count} رموز نسخ احتياطي متاحة",
|
||||
"instructions": [
|
||||
"• احفظ هذه الرموز في مكان آمن",
|
||||
"• يمكن استخدام كل رمز نسخ احتياطي مرة واحدة فقط",
|
||||
"• يمكنك إنشاء رموز جديدة في أي وقت"
|
||||
]
|
||||
},
|
||||
"verification": {
|
||||
"title": "المصادقة الثنائية",
|
||||
"description": "أدخل الرمز المكون من 6 أرقام من تطبيق المصادقة",
|
||||
"backupDescription": "أدخل أحد رموز النسخ الاحتياطي للمتابعة",
|
||||
"verificationCode": "رمز التحقق",
|
||||
"backupCode": "رمز النسخ الاحتياطي",
|
||||
"verificationCodePlaceholder": "000000",
|
||||
"backupCodePlaceholder": "XXXX-XXXX",
|
||||
"verify": "تحقق",
|
||||
"verifying": "جاري التحقق...",
|
||||
"useBackupCode": "استخدم رمز النسخ الاحتياطي بدلاً من ذلك",
|
||||
"useAuthenticatorCode": "استخدم رمز المصادقة بدلاً من ذلك",
|
||||
"rememberDevice": "تذكر هذا الجهاز لمدة 30 يومًا",
|
||||
"rememberDeviceDescription": "لن تحتاج إلى إدخال رموز المصادقة الثنائية على هذا الجهاز لمدة 30 يومًا"
|
||||
},
|
||||
"messages": {
|
||||
"enabledSuccess": "تم تفعيل المصادقة الثنائية بنجاح!",
|
||||
"disabledSuccess": "تم تعطيل المصادقة الثنائية بنجاح",
|
||||
"backupCodesGenerated": "تم إنشاء رموز النسخ الاحتياطي الجديدة بنجاح",
|
||||
"backupCodesCopied": "تم نسخ رموز النسخ الاحتياطي إلى الحافظة",
|
||||
"setupFailed": "فشل في إنشاء إعداد المصادقة الثنائية",
|
||||
"verificationFailed": "رمز التحقق غير صالح",
|
||||
"disableFailed": "فشل في تعطيل المصادقة الثنائية. يرجى التحقق من كلمة المرور.",
|
||||
"backupCodesFailed": "فشل في إنشاء رموز النسخ الاحتياطي",
|
||||
"backupCodesCopyFailed": "فشل في نسخ رموز النسخ الاحتياطي",
|
||||
"statusLoadFailed": "فشل في تحميل حالة المصادقة الثنائية",
|
||||
"enterVerificationCode": "يرجى إدخال رمز التحقق",
|
||||
"enterPassword": "يرجى إدخال كلمة المرور",
|
||||
"deviceTrusted": "تم تحديد هذا الجهاز كجهاز موثوق به لمدة 30 يومًا"
|
||||
},
|
||||
"errors": {
|
||||
"invalidVerificationCode": "رمز التحقق غير صالح",
|
||||
"invalidTwoFactorCode": "رمز المصادقة الثنائية غير صالح",
|
||||
"twoFactorRequired": "المصادقة الثنائية مطلوبة",
|
||||
"twoFactorAlreadyEnabled": "المصادقة الثنائية مفعلة بالفعل",
|
||||
"twoFactorNotEnabled": "المصادقة الثنائية غير مفعلة",
|
||||
"passwordVerificationRequired": "التحقق من كلمة المرور مطلوب",
|
||||
"invalidPassword": "كلمة المرور غير صالحة",
|
||||
"userNotFound": "المستخدم غير موجود"
|
||||
},
|
||||
"buttons": {
|
||||
"enable2FA": "تفعيل المصادقة الثنائية",
|
||||
"disable2FA": "تعطيل المصادقة الثنائية"
|
||||
},
|
||||
"deviceNames": {
|
||||
"unknownDevice": "جهاز غير معروف",
|
||||
"browsers": {
|
||||
"chrome": "كروم",
|
||||
"firefox": "فايرفوكس",
|
||||
"safari": "سفاري",
|
||||
"edge": "إيدج"
|
||||
},
|
||||
"platforms": {
|
||||
"windows": " على ويندوز",
|
||||
"macos": " على ماك",
|
||||
"linux": " على لينكس",
|
||||
"iphone": " على آيفون",
|
||||
"android": " على أندرويد"
|
||||
}
|
||||
},
|
||||
"status": {
|
||||
"label": "الحالة:",
|
||||
"enabled": "مفعل",
|
||||
"disabled": "معطل"
|
||||
},
|
||||
"trustedDevices": {
|
||||
"title": "الأجهزة الموثوقة - المصادقة الثنائية",
|
||||
"description": "الأجهزة التي لا تتطلب التحقق من المصادقة الثنائية",
|
||||
"noDevices": "لا توجد أجهزة موثوقة",
|
||||
"deviceName": "الجهاز",
|
||||
"addedOn": "تمت الإضافة في",
|
||||
"expiresOn": "تنتهي في",
|
||||
"remove": "إزالة",
|
||||
"removeAll": "إزالة الكل",
|
||||
"confirmRemove": "هل أنت متأكد أنك تريد إزالة هذا الجهاز الموثوق به؟",
|
||||
"confirmRemoveAll": "هل أنت متأكد أنك تريد إزالة جميع الأجهزة الموثوقة؟",
|
||||
"deviceRemoved": "تمت إزالة الجهاز الموثوق به بنجاح",
|
||||
"allDevicesRemoved": "تمت إزالة جميع الأجهزة الموثوقة بنجاح",
|
||||
"loadFailed": "فشل في تحميل الأجهزة الموثوقة",
|
||||
"removeFailed": "فشل في إزالة الجهاز الموثوق به",
|
||||
"removeAllFailed": "فشل في إزالة جميع الأجهزة الموثوقة",
|
||||
"loading": "جاري تحميل الأجهزة الموثوقة...",
|
||||
"noDevicesDescription": "ستظهر الأجهزة هنا عندما تختار الوثوق بها أثناء التحقق من المصادقة الثنائية",
|
||||
"tableHeaders": {
|
||||
"device": "الجهاز",
|
||||
"added": "تمت الإضافة",
|
||||
"expires": "تنتهي",
|
||||
"lastUsed": "آخر استخدام",
|
||||
"ipAddress": "عنوان IP",
|
||||
"actions": "الإجراءات"
|
||||
},
|
||||
"status": {
|
||||
"never": "أبداً",
|
||||
"expired": "منتهي الصلاحية"
|
||||
},
|
||||
"modals": {
|
||||
"removeDevice": {
|
||||
"title": "إزالة الجهاز الموثوق به",
|
||||
"added": "تمت الإضافة:",
|
||||
"ip": "عنوان IP:"
|
||||
},
|
||||
"removeAllDevices": {
|
||||
"title": "إزالة جميع الأجهزة الموثوقة",
|
||||
"description": "سيؤدي هذا إلى إزالة {count} جهاز موثوق به{count, plural, =1 {} other {}}. ستحتاج إلى التحقق من المصادقة الثنائية على جميع الأجهزة مرة أخرى."
|
||||
},
|
||||
"buttons": {
|
||||
"cancel": "إلغاء",
|
||||
"removing": "جاري الإزالة...",
|
||||
"removeDevice": "إزالة الجهاز",
|
||||
"removeAllDevices": "إزالة جميع الأجهزة"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"uploadFile": {
|
||||
"title": "رفع ملف",
|
||||
"multipleTitle": "رفع ملفات متعددة",
|
||||
@@ -1544,98 +1715,5 @@
|
||||
"passwordRequired": "كلمة المرور مطلوبة",
|
||||
"nameRequired": "الاسم مطلوب",
|
||||
"required": "هذا الحقل مطلوب"
|
||||
},
|
||||
"iconPicker": {
|
||||
"title": "اختر أيقونة",
|
||||
"placeholder": "اختر أيقونة",
|
||||
"searchPlaceholder": "البحث عن الأيقونات...",
|
||||
"loadingMore": "جاري تحميل المزيد من الأيقونات...",
|
||||
"allIconsLoaded": "تم تحميل جميع الأيقونات {count}",
|
||||
"noIconsFound": "لم يتم العثور على أيقونات لـ \"{search}\"",
|
||||
"tabs": {
|
||||
"all": "جميع الأيقونات",
|
||||
"popular": "الشائعة",
|
||||
"auth": "مزودي المصادقة"
|
||||
},
|
||||
"stats": "{iconCount} أيقونة من {libraryCount} مكتبة",
|
||||
"categoryBadge": "{category} ({count} أيقونات)"
|
||||
},
|
||||
"twoFactor": {
|
||||
"title": "المصادقة الثنائية",
|
||||
"description": "أضف طبقة إضافية من الأمان إلى حسابك",
|
||||
"enabled": "حسابك محمي بالمصادقة الثنائية",
|
||||
"disabled": "المصادقة الثنائية غير مفعلة",
|
||||
"setup": {
|
||||
"title": "تفعيل المصادقة الثنائية",
|
||||
"description": "امسح رمز QR باستخدام تطبيق المصادقة، ثم أدخل رمز التحقق.",
|
||||
"qrCode": "رمز QR",
|
||||
"manualEntryKey": "مفتاح الإدخال اليدوي",
|
||||
"verificationCode": "رمز التحقق",
|
||||
"verificationCodePlaceholder": "أدخل الرمز المكون من 6 أرقام",
|
||||
"verificationCodeDescription": "أدخل الرمز المكون من 6 أرقام من تطبيق المصادقة",
|
||||
"verifyAndEnable": "تحقق وتفعيل",
|
||||
"cancel": "إلغاء"
|
||||
},
|
||||
"disable": {
|
||||
"title": "تعطيل المصادقة الثنائية",
|
||||
"description": "أدخل كلمة المرور للتأكيد على تعطيل المصادقة الثنائية.",
|
||||
"password": "كلمة المرور",
|
||||
"passwordPlaceholder": "أدخل كلمة المرور",
|
||||
"confirm": "تأكيد التعطيل",
|
||||
"cancel": "إلغاء"
|
||||
},
|
||||
"backupCodes": {
|
||||
"title": "رموز النسخ الاحتياطي",
|
||||
"description": "احفظ رموز النسخ الاحتياطي هذه في مكان آمن. يمكنك استخدامها للوصول إلى حسابك في حالة فقدان جهاز المصادقة.",
|
||||
"warning": "هام:",
|
||||
"warningText": "يمكن استخدام كل رمز نسخ احتياطي مرة واحدة فقط. احتفظ بها بشكل آمن ولا تشاركها مع أي شخص.",
|
||||
"generateNew": "إنشاء رموز نسخ احتياطي جديدة",
|
||||
"download": "تحميل رموز النسخ الاحتياطي",
|
||||
"copyToClipboard": "نسخ إلى الحافظة",
|
||||
"savedMessage": "لقد حفظت رموز النسخ الاحتياطي",
|
||||
"available": "{count} رموز نسخ احتياطي متاحة",
|
||||
"instructions": [
|
||||
"• احفظ هذه الرموز في مكان آمن",
|
||||
"• يمكن استخدام كل رمز نسخ احتياطي مرة واحدة فقط",
|
||||
"• يمكنك إنشاء رموز جديدة في أي وقت"
|
||||
]
|
||||
},
|
||||
"verification": {
|
||||
"title": "المصادقة الثنائية",
|
||||
"description": "أدخل الرمز المكون من 6 أرقام من تطبيق المصادقة",
|
||||
"backupDescription": "أدخل أحد رموز النسخ الاحتياطي للمتابعة",
|
||||
"verificationCode": "رمز التحقق",
|
||||
"backupCode": "رمز النسخ الاحتياطي",
|
||||
"verificationCodePlaceholder": "000000",
|
||||
"backupCodePlaceholder": "XXXX-XXXX",
|
||||
"verify": "تحقق",
|
||||
"verifying": "جاري التحقق...",
|
||||
"useBackupCode": "استخدم رمز النسخ الاحتياطي بدلاً من ذلك",
|
||||
"useAuthenticatorCode": "استخدم رمز المصادقة بدلاً من ذلك"
|
||||
},
|
||||
"messages": {
|
||||
"enabledSuccess": "تم تفعيل المصادقة الثنائية بنجاح!",
|
||||
"disabledSuccess": "تم تعطيل المصادقة الثنائية بنجاح",
|
||||
"backupCodesGenerated": "تم إنشاء رموز النسخ الاحتياطي الجديدة بنجاح",
|
||||
"backupCodesCopied": "تم نسخ رموز النسخ الاحتياطي إلى الحافظة",
|
||||
"setupFailed": "فشل في إنشاء إعداد المصادقة الثنائية",
|
||||
"verificationFailed": "رمز التحقق غير صالح",
|
||||
"disableFailed": "فشل في تعطيل المصادقة الثنائية. يرجى التحقق من كلمة المرور.",
|
||||
"backupCodesFailed": "فشل في إنشاء رموز النسخ الاحتياطي",
|
||||
"backupCodesCopyFailed": "فشل في نسخ رموز النسخ الاحتياطي",
|
||||
"statusLoadFailed": "فشل في تحميل حالة المصادقة الثنائية",
|
||||
"enterVerificationCode": "يرجى إدخال رمز التحقق",
|
||||
"enterPassword": "يرجى إدخال كلمة المرور"
|
||||
},
|
||||
"errors": {
|
||||
"invalidVerificationCode": "رمز التحقق غير صالح",
|
||||
"invalidTwoFactorCode": "رمز المصادقة الثنائية غير صالح",
|
||||
"twoFactorRequired": "المصادقة الثنائية مطلوبة",
|
||||
"twoFactorAlreadyEnabled": "المصادقة الثنائية مفعلة بالفعل",
|
||||
"twoFactorNotEnabled": "المصادقة الثنائية غير مفعلة",
|
||||
"passwordVerificationRequired": "التحقق من كلمة المرور مطلوب",
|
||||
"invalidPassword": "كلمة المرور غير صالحة",
|
||||
"userNotFound": "المستخدم غير موجود"
|
||||
}
|
||||
}
|
||||
}
|
@@ -143,7 +143,8 @@
|
||||
"saving": "Speichere...",
|
||||
"update": "Aktualisieren",
|
||||
"click": "Klicken Sie auf",
|
||||
"creating": "Erstellen..."
|
||||
"creating": "Erstellen...",
|
||||
"loadingSimple": "Lade..."
|
||||
},
|
||||
"createShare": {
|
||||
"title": "Freigabe Erstellen",
|
||||
@@ -189,7 +190,8 @@
|
||||
"Password verification required": "Passwortüberprüfung erforderlich",
|
||||
"Two-factor authentication is already enabled": "Zwei-Faktor-Authentifizierung ist bereits aktiviert",
|
||||
"Two-factor authentication is not enabled": "Zwei-Faktor-Authentifizierung ist nicht aktiviert",
|
||||
"Two-factor authentication required": "Zwei-Faktor-Authentifizierung erforderlich"
|
||||
"Two-factor authentication required": "Zwei-Faktor-Authentifizierung erforderlich",
|
||||
"noUserData": "Keine Benutzerdaten"
|
||||
},
|
||||
"fileActions": {
|
||||
"editFile": "Datei bearbeiten",
|
||||
@@ -338,6 +340,21 @@
|
||||
},
|
||||
"pageTitle": "Startseite"
|
||||
},
|
||||
"iconPicker": {
|
||||
"title": "Symbol auswählen",
|
||||
"placeholder": "Wählen Sie ein Symbol",
|
||||
"searchPlaceholder": "Symbole suchen...",
|
||||
"loadingMore": "Weitere Symbole werden geladen...",
|
||||
"allIconsLoaded": "Alle {count} Symbole geladen",
|
||||
"noIconsFound": "Keine Symbole für \"{search}\" gefunden",
|
||||
"tabs": {
|
||||
"all": "Alle Symbole",
|
||||
"popular": "Beliebt",
|
||||
"auth": "Authentifizierungsanbieter"
|
||||
},
|
||||
"stats": "{iconCount} Symbole aus {libraryCount} Bibliotheken",
|
||||
"categoryBadge": "{category} ({count} Symbole)"
|
||||
},
|
||||
"login": {
|
||||
"welcome": "Willkommen zu",
|
||||
"signInToContinue": "Melden Sie sich an, um fortzufahren",
|
||||
@@ -1426,6 +1443,160 @@
|
||||
"dark": "Dunkel",
|
||||
"system": "System"
|
||||
},
|
||||
"twoFactor": {
|
||||
"title": "Zwei-Faktor-Authentifizierung",
|
||||
"description": "Fügen Sie Ihrem Konto eine zusätzliche Sicherheitsebene hinzu",
|
||||
"enabled": "Ihr Konto ist mit Zwei-Faktor-Authentifizierung geschützt",
|
||||
"disabled": "Zwei-Faktor-Authentifizierung ist nicht aktiviert",
|
||||
"setup": {
|
||||
"title": "Zwei-Faktor-Authentifizierung aktivieren",
|
||||
"description": "Scannen Sie den QR-Code mit Ihrer Authenticator-App und geben Sie dann den Bestätigungscode ein.",
|
||||
"qrCode": "QR-Code",
|
||||
"manualEntryKey": "Manueller Eingabeschlüssel",
|
||||
"verificationCode": "Bestätigungscode",
|
||||
"verificationCodePlaceholder": "6-stelligen Code eingeben",
|
||||
"verificationCodeDescription": "Geben Sie den 6-stelligen Code aus Ihrer Authenticator-App ein",
|
||||
"verifyAndEnable": "Überprüfen & Aktivieren",
|
||||
"cancel": "Abbrechen"
|
||||
},
|
||||
"disable": {
|
||||
"title": "Zwei-Faktor-Authentifizierung deaktivieren",
|
||||
"description": "Geben Sie Ihr Passwort ein, um die Deaktivierung der Zwei-Faktor-Authentifizierung zu bestätigen.",
|
||||
"password": "Passwort",
|
||||
"passwordPlaceholder": "Geben Sie Ihr Passwort ein",
|
||||
"confirm": "Deaktivierung bestätigen",
|
||||
"cancel": "Abbrechen"
|
||||
},
|
||||
"backupCodes": {
|
||||
"title": "Backup-Codes",
|
||||
"description": "Speichern Sie diese Backup-Codes an einem sicheren Ort. Sie können sie verwenden, um auf Ihr Konto zuzugreifen, wenn Sie Ihr Authentifizierungsgerät verlieren.",
|
||||
"warning": "Wichtig:",
|
||||
"warningText": "Jeder Backup-Code kann nur einmal verwendet werden. Bewahren Sie sie sicher auf und teilen Sie sie mit niemandem.",
|
||||
"generateNew": "Neue Backup-Codes generieren",
|
||||
"download": "Backup-Codes herunterladen",
|
||||
"copyToClipboard": "In die Zwischenablage kopieren",
|
||||
"savedMessage": "Ich habe meine Backup-Codes gespeichert",
|
||||
"available": "{count} Backup-Codes verfügbar",
|
||||
"instructions": [
|
||||
"• Speichern Sie diese Codes an einem sicheren Ort",
|
||||
"• Jeder Backup-Code kann nur einmal verwendet werden",
|
||||
"• Sie können jederzeit neue Codes generieren"
|
||||
]
|
||||
},
|
||||
"verification": {
|
||||
"title": "Zwei-Faktor-Authentifizierung",
|
||||
"description": "Geben Sie den 6-stelligen Code aus Ihrer Authenticator-App ein",
|
||||
"backupDescription": "Geben Sie einen Ihrer Backup-Codes ein, um fortzufahren",
|
||||
"verificationCode": "Bestätigungscode",
|
||||
"backupCode": "Backup-Code",
|
||||
"verificationCodePlaceholder": "000000",
|
||||
"backupCodePlaceholder": "XXXX-XXXX",
|
||||
"verify": "Überprüfen",
|
||||
"verifying": "Überprüfung läuft...",
|
||||
"useBackupCode": "Stattdessen Backup-Code verwenden",
|
||||
"useAuthenticatorCode": "Stattdessen Authenticator-Code verwenden",
|
||||
"rememberDevice": "Dieses Gerät für 30 Tage merken",
|
||||
"rememberDeviceDescription": "Sie müssen auf diesem Gerät 30 Tage lang keine 2FA-Codes eingeben"
|
||||
},
|
||||
"messages": {
|
||||
"enabledSuccess": "Zwei-Faktor-Authentifizierung erfolgreich aktiviert!",
|
||||
"disabledSuccess": "Zwei-Faktor-Authentifizierung erfolgreich deaktiviert",
|
||||
"backupCodesGenerated": "Neue Backup-Codes erfolgreich generiert",
|
||||
"backupCodesCopied": "Backup-Codes in die Zwischenablage kopiert",
|
||||
"setupFailed": "2FA-Setup konnte nicht generiert werden",
|
||||
"verificationFailed": "Ungültiger Bestätigungscode",
|
||||
"disableFailed": "2FA konnte nicht deaktiviert werden. Bitte überprüfen Sie Ihr Passwort.",
|
||||
"backupCodesFailed": "Backup-Codes konnten nicht generiert werden",
|
||||
"backupCodesCopyFailed": "Backup-Codes konnten nicht kopiert werden",
|
||||
"statusLoadFailed": "2FA-Status konnte nicht geladen werden",
|
||||
"enterVerificationCode": "Bitte geben Sie den Bestätigungscode ein",
|
||||
"enterPassword": "Bitte geben Sie Ihr Passwort ein",
|
||||
"deviceTrusted": "Dieses Gerät wurde für 30 Tage als vertrauenswürdig markiert"
|
||||
},
|
||||
"errors": {
|
||||
"invalidVerificationCode": "Ungültiger Bestätigungscode",
|
||||
"invalidTwoFactorCode": "Ungültiger Zwei-Faktor-Authentifizierungscode",
|
||||
"twoFactorRequired": "Zwei-Faktor-Authentifizierung erforderlich",
|
||||
"twoFactorAlreadyEnabled": "Zwei-Faktor-Authentifizierung ist bereits aktiviert",
|
||||
"twoFactorNotEnabled": "Zwei-Faktor-Authentifizierung ist nicht aktiviert",
|
||||
"passwordVerificationRequired": "Passwortüberprüfung erforderlich",
|
||||
"invalidPassword": "Ungültiges Passwort",
|
||||
"userNotFound": "Benutzer nicht gefunden"
|
||||
},
|
||||
"buttons": {
|
||||
"enable2FA": "2FA aktivieren",
|
||||
"disable2FA": "2FA deaktivieren"
|
||||
},
|
||||
"deviceNames": {
|
||||
"unknownDevice": "Unbekanntes Gerät",
|
||||
"browsers": {
|
||||
"chrome": "Chrome",
|
||||
"firefox": "Firefox",
|
||||
"safari": "Safari",
|
||||
"edge": "Edge"
|
||||
},
|
||||
"platforms": {
|
||||
"windows": " auf Windows",
|
||||
"macos": " auf macOS",
|
||||
"linux": " auf Linux",
|
||||
"iphone": " auf iPhone",
|
||||
"android": " auf Android"
|
||||
}
|
||||
},
|
||||
"status": {
|
||||
"label": "Status:",
|
||||
"enabled": "Aktiviert",
|
||||
"disabled": "Deaktiviert"
|
||||
},
|
||||
"trustedDevices": {
|
||||
"title": "Vertrauenswürdige Geräte - 2FA",
|
||||
"description": "Geräte, die keine 2FA-Verifizierung benötigen",
|
||||
"noDevices": "Keine vertrauenswürdigen Geräte",
|
||||
"deviceName": "Gerät",
|
||||
"addedOn": "Hinzugefügt am",
|
||||
"expiresOn": "Läuft ab am",
|
||||
"remove": "Entfernen",
|
||||
"removeAll": "Alle entfernen",
|
||||
"confirmRemove": "Möchten Sie dieses vertrauenswürdige Gerät wirklich entfernen?",
|
||||
"confirmRemoveAll": "Möchten Sie wirklich alle vertrauenswürdigen Geräte entfernen?",
|
||||
"deviceRemoved": "Vertrauenswürdiges Gerät erfolgreich entfernt",
|
||||
"allDevicesRemoved": "Alle vertrauenswürdigen Geräte erfolgreich entfernt",
|
||||
"loadFailed": "Fehler beim Laden der vertrauenswürdigen Geräte",
|
||||
"removeFailed": "Fehler beim Entfernen des vertrauenswürdigen Geräts",
|
||||
"removeAllFailed": "Fehler beim Entfernen aller vertrauenswürdigen Geräte",
|
||||
"loading": "Lade vertrauenswürdige Geräte...",
|
||||
"noDevicesDescription": "Geräte erscheinen hier, wenn Sie sie während der 2FA-Verifizierung als vertrauenswürdig markieren",
|
||||
"tableHeaders": {
|
||||
"device": "Gerät",
|
||||
"added": "Hinzugefügt",
|
||||
"expires": "Läuft ab",
|
||||
"lastUsed": "Zuletzt verwendet",
|
||||
"ipAddress": "IP-Adresse",
|
||||
"actions": "Aktionen"
|
||||
},
|
||||
"status": {
|
||||
"never": "Nie",
|
||||
"expired": "Abgelaufen"
|
||||
},
|
||||
"modals": {
|
||||
"removeDevice": {
|
||||
"title": "Vertrauenswürdiges Gerät entfernen",
|
||||
"added": "Hinzugefügt:",
|
||||
"ip": "IP:"
|
||||
},
|
||||
"removeAllDevices": {
|
||||
"title": "Alle vertrauenswürdigen Geräte entfernen",
|
||||
"description": "Dies wird {count} vertrauenswürdige{count, plural, =1 {s Gerät} other { Geräte}} entfernen. Sie müssen die 2FA auf allen Geräten erneut verifizieren."
|
||||
},
|
||||
"buttons": {
|
||||
"cancel": "Abbrechen",
|
||||
"removing": "Wird entfernt...",
|
||||
"removeDevice": "Gerät entfernen",
|
||||
"removeAllDevices": "Alle Geräte entfernen"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"uploadFile": {
|
||||
"title": "Datei hochladen",
|
||||
"multipleTitle": "Mehrere Dateien Hochladen",
|
||||
@@ -1542,98 +1713,5 @@
|
||||
"passwordRequired": "Passwort ist erforderlich",
|
||||
"nameRequired": "Name ist erforderlich",
|
||||
"required": "Dieses Feld ist erforderlich"
|
||||
},
|
||||
"iconPicker": {
|
||||
"title": "Symbol auswählen",
|
||||
"placeholder": "Wählen Sie ein Symbol",
|
||||
"searchPlaceholder": "Symbole suchen...",
|
||||
"loadingMore": "Weitere Symbole werden geladen...",
|
||||
"allIconsLoaded": "Alle {count} Symbole geladen",
|
||||
"noIconsFound": "Keine Symbole für \"{search}\" gefunden",
|
||||
"tabs": {
|
||||
"all": "Alle Symbole",
|
||||
"popular": "Beliebt",
|
||||
"auth": "Authentifizierungsanbieter"
|
||||
},
|
||||
"stats": "{iconCount} Symbole aus {libraryCount} Bibliotheken",
|
||||
"categoryBadge": "{category} ({count} Symbole)"
|
||||
},
|
||||
"twoFactor": {
|
||||
"title": "Zwei-Faktor-Authentifizierung",
|
||||
"description": "Fügen Sie Ihrem Konto eine zusätzliche Sicherheitsebene hinzu",
|
||||
"enabled": "Ihr Konto ist mit Zwei-Faktor-Authentifizierung geschützt",
|
||||
"disabled": "Zwei-Faktor-Authentifizierung ist nicht aktiviert",
|
||||
"setup": {
|
||||
"title": "Zwei-Faktor-Authentifizierung aktivieren",
|
||||
"description": "Scannen Sie den QR-Code mit Ihrer Authenticator-App und geben Sie dann den Bestätigungscode ein.",
|
||||
"qrCode": "QR-Code",
|
||||
"manualEntryKey": "Manueller Eingabeschlüssel",
|
||||
"verificationCode": "Bestätigungscode",
|
||||
"verificationCodePlaceholder": "6-stelligen Code eingeben",
|
||||
"verificationCodeDescription": "Geben Sie den 6-stelligen Code aus Ihrer Authenticator-App ein",
|
||||
"verifyAndEnable": "Überprüfen & Aktivieren",
|
||||
"cancel": "Abbrechen"
|
||||
},
|
||||
"disable": {
|
||||
"title": "Zwei-Faktor-Authentifizierung deaktivieren",
|
||||
"description": "Geben Sie Ihr Passwort ein, um die Deaktivierung der Zwei-Faktor-Authentifizierung zu bestätigen.",
|
||||
"password": "Passwort",
|
||||
"passwordPlaceholder": "Geben Sie Ihr Passwort ein",
|
||||
"confirm": "Deaktivierung bestätigen",
|
||||
"cancel": "Abbrechen"
|
||||
},
|
||||
"backupCodes": {
|
||||
"title": "Backup-Codes",
|
||||
"description": "Speichern Sie diese Backup-Codes an einem sicheren Ort. Sie können sie verwenden, um auf Ihr Konto zuzugreifen, wenn Sie Ihr Authentifizierungsgerät verlieren.",
|
||||
"warning": "Wichtig:",
|
||||
"warningText": "Jeder Backup-Code kann nur einmal verwendet werden. Bewahren Sie sie sicher auf und teilen Sie sie mit niemandem.",
|
||||
"generateNew": "Neue Backup-Codes generieren",
|
||||
"download": "Backup-Codes herunterladen",
|
||||
"copyToClipboard": "In die Zwischenablage kopieren",
|
||||
"savedMessage": "Ich habe meine Backup-Codes gespeichert",
|
||||
"available": "{count} Backup-Codes verfügbar",
|
||||
"instructions": [
|
||||
"• Speichern Sie diese Codes an einem sicheren Ort",
|
||||
"• Jeder Backup-Code kann nur einmal verwendet werden",
|
||||
"• Sie können jederzeit neue Codes generieren"
|
||||
]
|
||||
},
|
||||
"verification": {
|
||||
"title": "Zwei-Faktor-Authentifizierung",
|
||||
"description": "Geben Sie den 6-stelligen Code aus Ihrer Authenticator-App ein",
|
||||
"backupDescription": "Geben Sie einen Ihrer Backup-Codes ein, um fortzufahren",
|
||||
"verificationCode": "Bestätigungscode",
|
||||
"backupCode": "Backup-Code",
|
||||
"verificationCodePlaceholder": "000000",
|
||||
"backupCodePlaceholder": "XXXX-XXXX",
|
||||
"verify": "Überprüfen",
|
||||
"verifying": "Überprüfung läuft...",
|
||||
"useBackupCode": "Stattdessen Backup-Code verwenden",
|
||||
"useAuthenticatorCode": "Stattdessen Authenticator-Code verwenden"
|
||||
},
|
||||
"messages": {
|
||||
"enabledSuccess": "Zwei-Faktor-Authentifizierung erfolgreich aktiviert!",
|
||||
"disabledSuccess": "Zwei-Faktor-Authentifizierung erfolgreich deaktiviert",
|
||||
"backupCodesGenerated": "Neue Backup-Codes erfolgreich generiert",
|
||||
"backupCodesCopied": "Backup-Codes in die Zwischenablage kopiert",
|
||||
"setupFailed": "2FA-Setup konnte nicht generiert werden",
|
||||
"verificationFailed": "Ungültiger Bestätigungscode",
|
||||
"disableFailed": "2FA konnte nicht deaktiviert werden. Bitte überprüfen Sie Ihr Passwort.",
|
||||
"backupCodesFailed": "Backup-Codes konnten nicht generiert werden",
|
||||
"backupCodesCopyFailed": "Backup-Codes konnten nicht kopiert werden",
|
||||
"statusLoadFailed": "2FA-Status konnte nicht geladen werden",
|
||||
"enterVerificationCode": "Bitte geben Sie den Bestätigungscode ein",
|
||||
"enterPassword": "Bitte geben Sie Ihr Passwort ein"
|
||||
},
|
||||
"errors": {
|
||||
"invalidVerificationCode": "Ungültiger Bestätigungscode",
|
||||
"invalidTwoFactorCode": "Ungültiger Zwei-Faktor-Authentifizierungscode",
|
||||
"twoFactorRequired": "Zwei-Faktor-Authentifizierung erforderlich",
|
||||
"twoFactorAlreadyEnabled": "Zwei-Faktor-Authentifizierung ist bereits aktiviert",
|
||||
"twoFactorNotEnabled": "Zwei-Faktor-Authentifizierung ist nicht aktiviert",
|
||||
"passwordVerificationRequired": "Passwortüberprüfung erforderlich",
|
||||
"invalidPassword": "Ungültiges Passwort",
|
||||
"userNotFound": "Benutzer nicht gefunden"
|
||||
}
|
||||
}
|
||||
}
|
@@ -129,6 +129,7 @@
|
||||
},
|
||||
"common": {
|
||||
"loading": "Loading, please wait...",
|
||||
"loadingSimple": "Loading...",
|
||||
"cancel": "Cancel",
|
||||
"save": "Save",
|
||||
"saving": "Saving...",
|
||||
@@ -189,7 +190,8 @@
|
||||
"Invalid password": "Invalid password",
|
||||
"Password verification required": "Password verification required",
|
||||
"Invalid two-factor authentication code": "Invalid two-factor authentication code",
|
||||
"Two-factor authentication required": "Two-factor authentication required"
|
||||
"Two-factor authentication required": "Two-factor authentication required",
|
||||
"noUserData": "No user data"
|
||||
},
|
||||
"fileActions": {
|
||||
"editFile": "Edit File",
|
||||
@@ -338,6 +340,21 @@
|
||||
},
|
||||
"pageTitle": "Home"
|
||||
},
|
||||
"iconPicker": {
|
||||
"title": "Select Icon",
|
||||
"placeholder": "Select an icon",
|
||||
"searchPlaceholder": "Search icons...",
|
||||
"loadingMore": "Loading more icons...",
|
||||
"allIconsLoaded": "All {count} icons loaded",
|
||||
"noIconsFound": "No icons found for \"{search}\"",
|
||||
"tabs": {
|
||||
"all": "All Icons",
|
||||
"popular": "Popular",
|
||||
"auth": "Auth Providers"
|
||||
},
|
||||
"stats": "{iconCount} icons from {libraryCount} libraries",
|
||||
"categoryBadge": "{category} ({count} icons)"
|
||||
},
|
||||
"login": {
|
||||
"welcome": "Welcome to",
|
||||
"signInToContinue": "Sign in to continue",
|
||||
@@ -1426,6 +1443,160 @@
|
||||
"dark": "Dark",
|
||||
"system": "System"
|
||||
},
|
||||
"twoFactor": {
|
||||
"title": "Two-Factor Authentication",
|
||||
"description": "Add an extra layer of security to your account",
|
||||
"enabled": "Your account is protected with two-factor authentication",
|
||||
"disabled": "Two-factor authentication is not enabled",
|
||||
"status": {
|
||||
"label": "Status:",
|
||||
"enabled": "Enabled",
|
||||
"disabled": "Disabled"
|
||||
},
|
||||
"buttons": {
|
||||
"enable2FA": "Enable 2FA",
|
||||
"disable2FA": "Disable 2FA"
|
||||
},
|
||||
"setup": {
|
||||
"title": "Enable Two-Factor Authentication",
|
||||
"description": "Scan the QR code with your authenticator app, then enter the verification code.",
|
||||
"qrCode": "QR Code",
|
||||
"manualEntryKey": "Manual Entry Key",
|
||||
"verificationCode": "Verification Code",
|
||||
"verificationCodePlaceholder": "Enter 6-digit code",
|
||||
"verificationCodeDescription": "Enter the 6-digit code from your authenticator app",
|
||||
"verifyAndEnable": "Verify & Enable",
|
||||
"cancel": "Cancel"
|
||||
},
|
||||
"disable": {
|
||||
"title": "Disable Two-Factor Authentication",
|
||||
"description": "Enter your password to confirm disabling two-factor authentication.",
|
||||
"password": "Password",
|
||||
"passwordPlaceholder": "Enter your password",
|
||||
"confirm": "Confirm Disable",
|
||||
"cancel": "Cancel"
|
||||
},
|
||||
"backupCodes": {
|
||||
"title": "Backup Codes",
|
||||
"description": "Save these backup codes in a safe place. You can use them to access your account if you lose your authenticator device.",
|
||||
"warning": "Important:",
|
||||
"warningText": "Each backup code can only be used once. Keep them secure and don't share them with anyone.",
|
||||
"generateNew": "Generate New Backup Codes",
|
||||
"download": "Download Backup Codes",
|
||||
"copyToClipboard": "Copy to Clipboard",
|
||||
"savedMessage": "I've Saved My Backup Codes",
|
||||
"available": "{count} backup codes available",
|
||||
"instructions": [
|
||||
"• Save these codes in a secure location",
|
||||
"• Each backup code can only be used once",
|
||||
"• You can generate new codes anytime"
|
||||
]
|
||||
},
|
||||
"verification": {
|
||||
"title": "Two-Factor Authentication",
|
||||
"description": "Enter the 6-digit code from your authenticator app",
|
||||
"backupDescription": "Enter one of your backup codes to continue",
|
||||
"verificationCode": "Verification Code",
|
||||
"backupCode": "Backup Code",
|
||||
"verificationCodePlaceholder": "000000",
|
||||
"backupCodePlaceholder": "XXXX-XXXX",
|
||||
"verify": "Verify",
|
||||
"verifying": "Verifying...",
|
||||
"useBackupCode": "Use backup code instead",
|
||||
"useAuthenticatorCode": "Use authenticator code instead",
|
||||
"rememberDevice": "Remember this device for 30 days",
|
||||
"rememberDeviceDescription": "You won't need to enter 2FA codes on this device for 30 days"
|
||||
},
|
||||
"trustedDevices": {
|
||||
"title": "Trusted Devices - 2FA",
|
||||
"description": "Devices that don't require 2FA verification",
|
||||
"noDevices": "No trusted devices",
|
||||
"deviceName": "Device",
|
||||
"addedOn": "Added on",
|
||||
"expiresOn": "Expires on",
|
||||
"remove": "Remove",
|
||||
"removeAll": "Remove All",
|
||||
"confirmRemove": "Are you sure you want to remove this trusted device?",
|
||||
"confirmRemoveAll": "Are you sure you want to remove all trusted devices?",
|
||||
"deviceRemoved": "Trusted device removed successfully",
|
||||
"allDevicesRemoved": "All trusted devices removed successfully",
|
||||
"loadFailed": "Failed to load trusted devices",
|
||||
"removeFailed": "Failed to remove trusted device",
|
||||
"removeAllFailed": "Failed to remove all trusted devices",
|
||||
"loading": "Loading trusted devices...",
|
||||
"noDevicesDescription": "Devices will appear here when you choose to trust them during 2FA verification",
|
||||
"tableHeaders": {
|
||||
"device": "Device",
|
||||
"added": "Added",
|
||||
"expires": "Expires",
|
||||
"lastUsed": "Last Used",
|
||||
"ipAddress": "IP Address",
|
||||
"actions": "Actions"
|
||||
},
|
||||
"status": {
|
||||
"never": "Never",
|
||||
"expired": "Expired"
|
||||
},
|
||||
"modals": {
|
||||
"removeDevice": {
|
||||
"title": "Remove Trusted Device",
|
||||
"added": "Added:",
|
||||
"ip": "IP:"
|
||||
},
|
||||
"removeAllDevices": {
|
||||
"title": "Remove All Trusted Devices",
|
||||
"description": "This will remove {count} trusted device{count, plural, =1 {} other {s}}. You will need to verify 2FA on all devices again."
|
||||
},
|
||||
"buttons": {
|
||||
"cancel": "Cancel",
|
||||
"removing": "Removing...",
|
||||
"removeDevice": "Remove Device",
|
||||
"removeAllDevices": "Remove All Devices"
|
||||
}
|
||||
}
|
||||
},
|
||||
"messages": {
|
||||
"enabledSuccess": "Two-factor authentication enabled successfully!",
|
||||
"disabledSuccess": "Two-factor authentication disabled successfully",
|
||||
"backupCodesGenerated": "New backup codes generated successfully",
|
||||
"backupCodesCopied": "Backup codes copied to clipboard",
|
||||
"setupFailed": "Failed to generate 2FA setup",
|
||||
"verificationFailed": "Invalid verification code",
|
||||
"disableFailed": "Failed to disable 2FA. Please check your password.",
|
||||
"backupCodesFailed": "Failed to generate backup codes",
|
||||
"backupCodesCopyFailed": "Failed to copy backup codes",
|
||||
"statusLoadFailed": "Failed to load 2FA status",
|
||||
"enterVerificationCode": "Please enter the verification code",
|
||||
"enterPassword": "Please enter your password",
|
||||
"deviceTrusted": "This device has been marked as trusted for 30 days"
|
||||
},
|
||||
"errors": {
|
||||
"invalidVerificationCode": "Invalid verification code",
|
||||
"invalidTwoFactorCode": "Invalid two-factor authentication code",
|
||||
"twoFactorRequired": "Two-factor authentication required",
|
||||
"twoFactorAlreadyEnabled": "Two-factor authentication is already enabled",
|
||||
"twoFactorNotEnabled": "Two-factor authentication is not enabled",
|
||||
"passwordVerificationRequired": "Password verification required",
|
||||
"invalidPassword": "Invalid password",
|
||||
"userNotFound": "User not found"
|
||||
},
|
||||
"deviceNames": {
|
||||
"unknownDevice": "Unknown Device",
|
||||
"browsers": {
|
||||
"chrome": "Chrome",
|
||||
"firefox": "Firefox",
|
||||
"safari": "Safari",
|
||||
"edge": "Edge"
|
||||
},
|
||||
"platforms": {
|
||||
"windows": " on Windows",
|
||||
"macos": " on macOS",
|
||||
"linux": " on Linux",
|
||||
"iphone": " on iPhone",
|
||||
"android": " on Android"
|
||||
}
|
||||
}
|
||||
},
|
||||
"uploadFile": {
|
||||
"title": "Upload File",
|
||||
"multipleTitle": "Upload Files",
|
||||
@@ -1542,101 +1713,5 @@
|
||||
"passwordMinLength": "Password must be at least 6 characters",
|
||||
"nameRequired": "Name is required",
|
||||
"required": "This field is required"
|
||||
},
|
||||
"twoFactor": {
|
||||
"title": "Two-Factor Authentication",
|
||||
"description": "Add an extra layer of security to your account",
|
||||
"enabled": "Your account is protected with two-factor authentication",
|
||||
"disabled": "Two-factor authentication is not enabled",
|
||||
"setup": {
|
||||
"title": "Enable Two-Factor Authentication",
|
||||
"description": "Scan the QR code with your authenticator app, then enter the verification code.",
|
||||
"qrCode": "QR Code",
|
||||
"manualEntryKey": "Manual Entry Key",
|
||||
"verificationCode": "Verification Code",
|
||||
"verificationCodePlaceholder": "Enter 6-digit code",
|
||||
"verificationCodeDescription": "Enter the 6-digit code from your authenticator app",
|
||||
"verifyAndEnable": "Verify & Enable",
|
||||
"cancel": "Cancel"
|
||||
},
|
||||
"disable": {
|
||||
"title": "Disable Two-Factor Authentication",
|
||||
"description": "Enter your password to confirm disabling two-factor authentication.",
|
||||
"password": "Password",
|
||||
"passwordPlaceholder": "Enter your password",
|
||||
"confirm": "Confirm Disable",
|
||||
"cancel": "Cancel"
|
||||
},
|
||||
"backupCodes": {
|
||||
"title": "Backup Codes",
|
||||
"description": "Save these backup codes in a safe place. You can use them to access your account if you lose your authenticator device.",
|
||||
"warning": "Important:",
|
||||
"warningText": "Each backup code can only be used once. Keep them secure and don't share them with anyone.",
|
||||
"generateNew": "Generate New Backup Codes",
|
||||
"download": "Download Backup Codes",
|
||||
"copyToClipboard": "Copy to Clipboard",
|
||||
"savedMessage": "I've Saved My Backup Codes",
|
||||
"available": "{count} backup codes available",
|
||||
"instructions": [
|
||||
"• Save these codes in a secure location",
|
||||
"• Each backup code can only be used once",
|
||||
"• You can generate new codes anytime"
|
||||
]
|
||||
},
|
||||
"verification": {
|
||||
"title": "Two-Factor Authentication",
|
||||
"description": "Enter the 6-digit code from your authenticator app",
|
||||
"backupDescription": "Enter one of your backup codes to continue",
|
||||
"verificationCode": "Verification Code",
|
||||
"backupCode": "Backup Code",
|
||||
"verificationCodePlaceholder": "000000",
|
||||
"backupCodePlaceholder": "XXXX-XXXX",
|
||||
"verify": "Verify",
|
||||
"verifying": "Verifying...",
|
||||
"useBackupCode": "Use backup code instead",
|
||||
"useAuthenticatorCode": "Use authenticator code instead",
|
||||
"rememberDevice": "Remember this device for 30 days",
|
||||
"rememberDeviceDescription": "You won't need to enter 2FA codes on this device for 30 days"
|
||||
},
|
||||
"messages": {
|
||||
"enabledSuccess": "Two-factor authentication enabled successfully!",
|
||||
"disabledSuccess": "Two-factor authentication disabled successfully",
|
||||
"backupCodesGenerated": "New backup codes generated successfully",
|
||||
"backupCodesCopied": "Backup codes copied to clipboard",
|
||||
"setupFailed": "Failed to generate 2FA setup",
|
||||
"verificationFailed": "Invalid verification code",
|
||||
"disableFailed": "Failed to disable 2FA. Please check your password.",
|
||||
"backupCodesFailed": "Failed to generate backup codes",
|
||||
"backupCodesCopyFailed": "Failed to copy backup codes",
|
||||
"statusLoadFailed": "Failed to load 2FA status",
|
||||
"enterVerificationCode": "Please enter the verification code",
|
||||
"enterPassword": "Please enter your password",
|
||||
"deviceTrusted": "This device has been marked as trusted for 30 days"
|
||||
},
|
||||
"errors": {
|
||||
"invalidVerificationCode": "Invalid verification code",
|
||||
"invalidTwoFactorCode": "Invalid two-factor authentication code",
|
||||
"twoFactorRequired": "Two-factor authentication required",
|
||||
"twoFactorAlreadyEnabled": "Two-factor authentication is already enabled",
|
||||
"twoFactorNotEnabled": "Two-factor authentication is not enabled",
|
||||
"passwordVerificationRequired": "Password verification required",
|
||||
"invalidPassword": "Invalid password",
|
||||
"userNotFound": "User not found"
|
||||
}
|
||||
},
|
||||
"iconPicker": {
|
||||
"title": "Select Icon",
|
||||
"placeholder": "Select an icon",
|
||||
"searchPlaceholder": "Search icons...",
|
||||
"loadingMore": "Loading more icons...",
|
||||
"allIconsLoaded": "All {count} icons loaded",
|
||||
"noIconsFound": "No icons found for \"{search}\"",
|
||||
"tabs": {
|
||||
"all": "All Icons",
|
||||
"popular": "Popular",
|
||||
"auth": "Auth Providers"
|
||||
},
|
||||
"stats": "{iconCount} icons from {libraryCount} libraries",
|
||||
"categoryBadge": "{category} ({count} icons)"
|
||||
}
|
||||
}
|
@@ -143,7 +143,8 @@
|
||||
"saving": "Guardando...",
|
||||
"update": "Actualizar",
|
||||
"click": "Haga clic para",
|
||||
"creating": "Creando..."
|
||||
"creating": "Creando...",
|
||||
"loadingSimple": "Cargando..."
|
||||
},
|
||||
"createShare": {
|
||||
"title": "Crear Compartir",
|
||||
@@ -189,7 +190,8 @@
|
||||
"Password verification required": "Se requiere verificación de contraseña",
|
||||
"Two-factor authentication is already enabled": "La autenticación de dos factores ya está habilitada",
|
||||
"Two-factor authentication is not enabled": "La autenticación de dos factores no está habilitada",
|
||||
"Two-factor authentication required": "Se requiere autenticación de dos factores"
|
||||
"Two-factor authentication required": "Se requiere autenticación de dos factores",
|
||||
"noUserData": "No hay datos del usuario"
|
||||
},
|
||||
"fileActions": {
|
||||
"editFile": "Editar archivo",
|
||||
@@ -338,6 +340,21 @@
|
||||
},
|
||||
"pageTitle": "Inicio"
|
||||
},
|
||||
"iconPicker": {
|
||||
"title": "Seleccionar Icono",
|
||||
"placeholder": "Seleccionar un icono",
|
||||
"searchPlaceholder": "Buscar iconos...",
|
||||
"loadingMore": "Cargando más iconos...",
|
||||
"allIconsLoaded": "Todos los {count} iconos cargados",
|
||||
"noIconsFound": "No se encontraron iconos para \"{search}\"",
|
||||
"tabs": {
|
||||
"all": "Todos los Iconos",
|
||||
"popular": "Populares",
|
||||
"auth": "Proveedores de Autenticación"
|
||||
},
|
||||
"stats": "{iconCount} iconos de {libraryCount} bibliotecas",
|
||||
"categoryBadge": "{category} ({count} iconos)"
|
||||
},
|
||||
"login": {
|
||||
"welcome": "Bienvenido a",
|
||||
"signInToContinue": "Inicia sesión para continuar",
|
||||
@@ -1426,6 +1443,160 @@
|
||||
"dark": "Oscuro",
|
||||
"system": "Sistema"
|
||||
},
|
||||
"twoFactor": {
|
||||
"title": "Autenticación de dos factores",
|
||||
"description": "Añade una capa extra de seguridad a tu cuenta",
|
||||
"enabled": "Tu cuenta está protegida con autenticación de dos factores",
|
||||
"disabled": "La autenticación de dos factores no está habilitada",
|
||||
"setup": {
|
||||
"title": "Habilitar autenticación de dos factores",
|
||||
"description": "Escanea el código QR con tu aplicación de autenticación y luego ingresa el código de verificación.",
|
||||
"qrCode": "Código QR",
|
||||
"manualEntryKey": "Clave de entrada manual",
|
||||
"verificationCode": "Código de verificación",
|
||||
"verificationCodePlaceholder": "Ingresa el código de 6 dígitos",
|
||||
"verificationCodeDescription": "Ingresa el código de 6 dígitos de tu aplicación de autenticación",
|
||||
"verifyAndEnable": "Verificar y habilitar",
|
||||
"cancel": "Cancelar"
|
||||
},
|
||||
"disable": {
|
||||
"title": "Deshabilitar autenticación de dos factores",
|
||||
"description": "Ingresa tu contraseña para confirmar la desactivación de la autenticación de dos factores.",
|
||||
"password": "Contraseña",
|
||||
"passwordPlaceholder": "Ingresa tu contraseña",
|
||||
"confirm": "Confirmar desactivación",
|
||||
"cancel": "Cancelar"
|
||||
},
|
||||
"backupCodes": {
|
||||
"title": "Códigos de respaldo",
|
||||
"description": "Guarda estos códigos de respaldo en un lugar seguro. Puedes usarlos para acceder a tu cuenta si pierdes tu dispositivo de autenticación.",
|
||||
"warning": "Importante:",
|
||||
"warningText": "Cada código de respaldo solo se puede usar una vez. Mantenlos seguros y no los compartas con nadie.",
|
||||
"generateNew": "Generar nuevos códigos de respaldo",
|
||||
"download": "Descargar códigos de respaldo",
|
||||
"copyToClipboard": "Copiar al portapapeles",
|
||||
"savedMessage": "He guardado mis códigos de respaldo",
|
||||
"available": "{count} códigos de respaldo disponibles",
|
||||
"instructions": [
|
||||
"• Guarda estos códigos en un lugar seguro",
|
||||
"• Cada código de respaldo solo se puede usar una vez",
|
||||
"• Puedes generar nuevos códigos en cualquier momento"
|
||||
]
|
||||
},
|
||||
"verification": {
|
||||
"title": "Autenticación de dos factores",
|
||||
"description": "Ingresa el código de 6 dígitos de tu aplicación de autenticación",
|
||||
"backupDescription": "Ingresa uno de tus códigos de respaldo para continuar",
|
||||
"verificationCode": "Código de verificación",
|
||||
"backupCode": "Código de respaldo",
|
||||
"verificationCodePlaceholder": "000000",
|
||||
"backupCodePlaceholder": "XXXX-XXXX",
|
||||
"verify": "Verificar",
|
||||
"verifying": "Verificando...",
|
||||
"useBackupCode": "Usar código de respaldo en su lugar",
|
||||
"useAuthenticatorCode": "Usar código de autenticación en su lugar",
|
||||
"rememberDevice": "Recordar este dispositivo durante 30 días",
|
||||
"rememberDeviceDescription": "No necesitarás ingresar códigos 2FA en este dispositivo durante 30 días"
|
||||
},
|
||||
"messages": {
|
||||
"enabledSuccess": "¡Autenticación de dos factores habilitada exitosamente!",
|
||||
"disabledSuccess": "Autenticación de dos factores deshabilitada exitosamente",
|
||||
"backupCodesGenerated": "Nuevos códigos de respaldo generados exitosamente",
|
||||
"backupCodesCopied": "Códigos de respaldo copiados al portapapeles",
|
||||
"setupFailed": "Error al generar la configuración de 2FA",
|
||||
"verificationFailed": "Código de verificación inválido",
|
||||
"disableFailed": "Error al deshabilitar 2FA. Por favor verifica tu contraseña.",
|
||||
"backupCodesFailed": "Error al generar códigos de respaldo",
|
||||
"backupCodesCopyFailed": "Error al copiar códigos de respaldo",
|
||||
"statusLoadFailed": "Error al cargar el estado de 2FA",
|
||||
"enterVerificationCode": "Por favor ingresa el código de verificación",
|
||||
"enterPassword": "Por favor ingresa tu contraseña",
|
||||
"deviceTrusted": "Este dispositivo ha sido marcado como confiable durante 30 días"
|
||||
},
|
||||
"errors": {
|
||||
"invalidVerificationCode": "Código de verificación inválido",
|
||||
"invalidTwoFactorCode": "Código de autenticación de dos factores inválido",
|
||||
"twoFactorRequired": "Se requiere autenticación de dos factores",
|
||||
"twoFactorAlreadyEnabled": "La autenticación de dos factores ya está habilitada",
|
||||
"twoFactorNotEnabled": "La autenticación de dos factores no está habilitada",
|
||||
"passwordVerificationRequired": "Se requiere verificación de contraseña",
|
||||
"invalidPassword": "Contraseña inválida",
|
||||
"userNotFound": "Usuario no encontrado"
|
||||
},
|
||||
"buttons": {
|
||||
"enable2FA": "Habilitar 2FA",
|
||||
"disable2FA": "Deshabilitar 2FA"
|
||||
},
|
||||
"deviceNames": {
|
||||
"unknownDevice": "Dispositivo Desconocido",
|
||||
"browsers": {
|
||||
"chrome": "Chrome",
|
||||
"firefox": "Firefox",
|
||||
"safari": "Safari",
|
||||
"edge": "Edge"
|
||||
},
|
||||
"platforms": {
|
||||
"windows": " en Windows",
|
||||
"macos": " en macOS",
|
||||
"linux": " en Linux",
|
||||
"iphone": " en iPhone",
|
||||
"android": " en Android"
|
||||
}
|
||||
},
|
||||
"status": {
|
||||
"label": "Estado:",
|
||||
"enabled": "Habilitado",
|
||||
"disabled": "Deshabilitado"
|
||||
},
|
||||
"trustedDevices": {
|
||||
"title": "Dispositivos Confiables - 2FA",
|
||||
"description": "Dispositivos que no requieren verificación 2FA",
|
||||
"noDevices": "No hay dispositivos confiables",
|
||||
"deviceName": "Dispositivo",
|
||||
"addedOn": "Agregado el",
|
||||
"expiresOn": "Expira el",
|
||||
"remove": "Eliminar",
|
||||
"removeAll": "Eliminar Todos",
|
||||
"confirmRemove": "¿Estás seguro de que deseas eliminar este dispositivo confiable?",
|
||||
"confirmRemoveAll": "¿Estás seguro de que deseas eliminar todos los dispositivos confiables?",
|
||||
"deviceRemoved": "Dispositivo confiable eliminado exitosamente",
|
||||
"allDevicesRemoved": "Todos los dispositivos confiables fueron eliminados exitosamente",
|
||||
"loadFailed": "Error al cargar los dispositivos confiables",
|
||||
"removeFailed": "Error al eliminar el dispositivo confiable",
|
||||
"removeAllFailed": "Error al eliminar todos los dispositivos confiables",
|
||||
"loading": "Cargando dispositivos confiables...",
|
||||
"noDevicesDescription": "Los dispositivos aparecerán aquí cuando elijas confiar en ellos durante la verificación 2FA",
|
||||
"tableHeaders": {
|
||||
"device": "Dispositivo",
|
||||
"added": "Agregado",
|
||||
"expires": "Expira",
|
||||
"lastUsed": "Último uso",
|
||||
"ipAddress": "Dirección IP",
|
||||
"actions": "Acciones"
|
||||
},
|
||||
"status": {
|
||||
"never": "Nunca",
|
||||
"expired": "Expirado"
|
||||
},
|
||||
"modals": {
|
||||
"removeDevice": {
|
||||
"title": "Eliminar Dispositivo Confiable",
|
||||
"added": "Agregado:",
|
||||
"ip": "IP:"
|
||||
},
|
||||
"removeAllDevices": {
|
||||
"title": "Eliminar Todos los Dispositivos Confiables",
|
||||
"description": "Esto eliminará {count} dispositivo{count, plural, =1 {} other {s}} confiable{count, plural, =1 {} other {s}}. Necesitarás verificar 2FA en todos los dispositivos nuevamente."
|
||||
},
|
||||
"buttons": {
|
||||
"cancel": "Cancelar",
|
||||
"removing": "Eliminando...",
|
||||
"removeDevice": "Eliminar Dispositivo",
|
||||
"removeAllDevices": "Eliminar Todos los Dispositivos"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"uploadFile": {
|
||||
"title": "Subir archivo",
|
||||
"multipleTitle": "Subir Múltiples Archivos",
|
||||
@@ -1542,98 +1713,5 @@
|
||||
"passwordRequired": "Se requiere la contraseña",
|
||||
"nameRequired": "El nombre es obligatorio",
|
||||
"required": "Este campo es obligatorio"
|
||||
},
|
||||
"iconPicker": {
|
||||
"title": "Seleccionar Icono",
|
||||
"placeholder": "Seleccionar un icono",
|
||||
"searchPlaceholder": "Buscar iconos...",
|
||||
"loadingMore": "Cargando más iconos...",
|
||||
"allIconsLoaded": "Todos los {count} iconos cargados",
|
||||
"noIconsFound": "No se encontraron iconos para \"{search}\"",
|
||||
"tabs": {
|
||||
"all": "Todos los Iconos",
|
||||
"popular": "Populares",
|
||||
"auth": "Proveedores de Autenticación"
|
||||
},
|
||||
"stats": "{iconCount} iconos de {libraryCount} bibliotecas",
|
||||
"categoryBadge": "{category} ({count} iconos)"
|
||||
},
|
||||
"twoFactor": {
|
||||
"title": "Autenticación de dos factores",
|
||||
"description": "Añade una capa extra de seguridad a tu cuenta",
|
||||
"enabled": "Tu cuenta está protegida con autenticación de dos factores",
|
||||
"disabled": "La autenticación de dos factores no está habilitada",
|
||||
"setup": {
|
||||
"title": "Habilitar autenticación de dos factores",
|
||||
"description": "Escanea el código QR con tu aplicación de autenticación y luego ingresa el código de verificación.",
|
||||
"qrCode": "Código QR",
|
||||
"manualEntryKey": "Clave de entrada manual",
|
||||
"verificationCode": "Código de verificación",
|
||||
"verificationCodePlaceholder": "Ingresa el código de 6 dígitos",
|
||||
"verificationCodeDescription": "Ingresa el código de 6 dígitos de tu aplicación de autenticación",
|
||||
"verifyAndEnable": "Verificar y habilitar",
|
||||
"cancel": "Cancelar"
|
||||
},
|
||||
"disable": {
|
||||
"title": "Deshabilitar autenticación de dos factores",
|
||||
"description": "Ingresa tu contraseña para confirmar la desactivación de la autenticación de dos factores.",
|
||||
"password": "Contraseña",
|
||||
"passwordPlaceholder": "Ingresa tu contraseña",
|
||||
"confirm": "Confirmar desactivación",
|
||||
"cancel": "Cancelar"
|
||||
},
|
||||
"backupCodes": {
|
||||
"title": "Códigos de respaldo",
|
||||
"description": "Guarda estos códigos de respaldo en un lugar seguro. Puedes usarlos para acceder a tu cuenta si pierdes tu dispositivo de autenticación.",
|
||||
"warning": "Importante:",
|
||||
"warningText": "Cada código de respaldo solo se puede usar una vez. Mantenlos seguros y no los compartas con nadie.",
|
||||
"generateNew": "Generar nuevos códigos de respaldo",
|
||||
"download": "Descargar códigos de respaldo",
|
||||
"copyToClipboard": "Copiar al portapapeles",
|
||||
"savedMessage": "He guardado mis códigos de respaldo",
|
||||
"available": "{count} códigos de respaldo disponibles",
|
||||
"instructions": [
|
||||
"• Guarda estos códigos en un lugar seguro",
|
||||
"• Cada código de respaldo solo se puede usar una vez",
|
||||
"• Puedes generar nuevos códigos en cualquier momento"
|
||||
]
|
||||
},
|
||||
"verification": {
|
||||
"title": "Autenticación de dos factores",
|
||||
"description": "Ingresa el código de 6 dígitos de tu aplicación de autenticación",
|
||||
"backupDescription": "Ingresa uno de tus códigos de respaldo para continuar",
|
||||
"verificationCode": "Código de verificación",
|
||||
"backupCode": "Código de respaldo",
|
||||
"verificationCodePlaceholder": "000000",
|
||||
"backupCodePlaceholder": "XXXX-XXXX",
|
||||
"verify": "Verificar",
|
||||
"verifying": "Verificando...",
|
||||
"useBackupCode": "Usar código de respaldo en su lugar",
|
||||
"useAuthenticatorCode": "Usar código de autenticación en su lugar"
|
||||
},
|
||||
"messages": {
|
||||
"enabledSuccess": "¡Autenticación de dos factores habilitada exitosamente!",
|
||||
"disabledSuccess": "Autenticación de dos factores deshabilitada exitosamente",
|
||||
"backupCodesGenerated": "Nuevos códigos de respaldo generados exitosamente",
|
||||
"backupCodesCopied": "Códigos de respaldo copiados al portapapeles",
|
||||
"setupFailed": "Error al generar la configuración de 2FA",
|
||||
"verificationFailed": "Código de verificación inválido",
|
||||
"disableFailed": "Error al deshabilitar 2FA. Por favor verifica tu contraseña.",
|
||||
"backupCodesFailed": "Error al generar códigos de respaldo",
|
||||
"backupCodesCopyFailed": "Error al copiar códigos de respaldo",
|
||||
"statusLoadFailed": "Error al cargar el estado de 2FA",
|
||||
"enterVerificationCode": "Por favor ingresa el código de verificación",
|
||||
"enterPassword": "Por favor ingresa tu contraseña"
|
||||
},
|
||||
"errors": {
|
||||
"invalidVerificationCode": "Código de verificación inválido",
|
||||
"invalidTwoFactorCode": "Código de autenticación de dos factores inválido",
|
||||
"twoFactorRequired": "Se requiere autenticación de dos factores",
|
||||
"twoFactorAlreadyEnabled": "La autenticación de dos factores ya está habilitada",
|
||||
"twoFactorNotEnabled": "La autenticación de dos factores no está habilitada",
|
||||
"passwordVerificationRequired": "Se requiere verificación de contraseña",
|
||||
"invalidPassword": "Contraseña inválida",
|
||||
"userNotFound": "Usuario no encontrado"
|
||||
}
|
||||
}
|
||||
}
|
@@ -143,7 +143,8 @@
|
||||
"saving": "Enregistrement...",
|
||||
"update": "Mettre à jour",
|
||||
"click": "Clique para",
|
||||
"creating": "Criando..."
|
||||
"creating": "Criando...",
|
||||
"loadingSimple": "Chargement..."
|
||||
},
|
||||
"createShare": {
|
||||
"title": "Créer un Partage",
|
||||
@@ -189,7 +190,8 @@
|
||||
"Password verification required": "Vérification du mot de passe requise",
|
||||
"Two-factor authentication is already enabled": "L'authentification à deux facteurs est déjà activée",
|
||||
"Two-factor authentication is not enabled": "L'authentification à deux facteurs n'est pas activée",
|
||||
"Two-factor authentication required": "L'authentification à deux facteurs est requise"
|
||||
"Two-factor authentication required": "L'authentification à deux facteurs est requise",
|
||||
"noUserData": "Aucune donnée utilisateur"
|
||||
},
|
||||
"fileActions": {
|
||||
"editFile": "Modifier le Fichier",
|
||||
@@ -338,6 +340,21 @@
|
||||
},
|
||||
"pageTitle": "Accueil"
|
||||
},
|
||||
"iconPicker": {
|
||||
"title": "Sélectionner une Icône",
|
||||
"placeholder": "Sélectionner une icône",
|
||||
"searchPlaceholder": "Rechercher des icônes...",
|
||||
"loadingMore": "Chargement d'autres icônes...",
|
||||
"allIconsLoaded": "Toutes les {count} icônes sont chargées",
|
||||
"noIconsFound": "Aucune icône trouvée pour \"{search}\"",
|
||||
"tabs": {
|
||||
"all": "Toutes les Icônes",
|
||||
"popular": "Populaires",
|
||||
"auth": "Fournisseurs d'Authentification"
|
||||
},
|
||||
"stats": "{iconCount} icônes de {libraryCount} bibliothèques",
|
||||
"categoryBadge": "{category} ({count} icônes)"
|
||||
},
|
||||
"login": {
|
||||
"welcome": "Bienvenue à",
|
||||
"signInToContinue": "Connectez-vous pour continuer",
|
||||
@@ -1426,6 +1443,160 @@
|
||||
"dark": "Sombre",
|
||||
"system": "Système"
|
||||
},
|
||||
"twoFactor": {
|
||||
"title": "Authentification à Deux Facteurs",
|
||||
"description": "Ajoutez une couche de sécurité supplémentaire à votre compte",
|
||||
"enabled": "Votre compte est protégé par l'authentification à deux facteurs",
|
||||
"disabled": "L'authentification à deux facteurs n'est pas activée",
|
||||
"setup": {
|
||||
"title": "Activer l'Authentification à Deux Facteurs",
|
||||
"description": "Scannez le code QR avec votre application d'authentification, puis saisissez le code de vérification.",
|
||||
"qrCode": "Code QR",
|
||||
"manualEntryKey": "Clé de Saisie Manuelle",
|
||||
"verificationCode": "Code de Vérification",
|
||||
"verificationCodePlaceholder": "Entrez le code à 6 chiffres",
|
||||
"verificationCodeDescription": "Saisissez le code à 6 chiffres de votre application d'authentification",
|
||||
"verifyAndEnable": "Vérifier et Activer",
|
||||
"cancel": "Annuler"
|
||||
},
|
||||
"disable": {
|
||||
"title": "Désactiver l'Authentification à Deux Facteurs",
|
||||
"description": "Saisissez votre mot de passe pour confirmer la désactivation de l'authentification à deux facteurs.",
|
||||
"password": "Mot de passe",
|
||||
"passwordPlaceholder": "Entrez votre mot de passe",
|
||||
"confirm": "Confirmer la Désactivation",
|
||||
"cancel": "Annuler"
|
||||
},
|
||||
"backupCodes": {
|
||||
"title": "Codes de Secours",
|
||||
"description": "Conservez ces codes de secours dans un endroit sûr. Vous pouvez les utiliser pour accéder à votre compte si vous perdez votre appareil d'authentification.",
|
||||
"warning": "Important :",
|
||||
"warningText": "Chaque code de secours ne peut être utilisé qu'une seule fois. Gardez-les en sécurité et ne les partagez avec personne.",
|
||||
"generateNew": "Générer de Nouveaux Codes de Secours",
|
||||
"download": "Télécharger les Codes de Secours",
|
||||
"copyToClipboard": "Copier dans le Presse-papiers",
|
||||
"savedMessage": "J'ai Sauvegardé Mes Codes de Secours",
|
||||
"available": "{count} codes de secours disponibles",
|
||||
"instructions": [
|
||||
"• Sauvegardez ces codes dans un endroit sécurisé",
|
||||
"• Chaque code de secours ne peut être utilisé qu'une seule fois",
|
||||
"• Vous pouvez générer de nouveaux codes à tout moment"
|
||||
]
|
||||
},
|
||||
"verification": {
|
||||
"title": "Authentification à Deux Facteurs",
|
||||
"description": "Saisissez le code à 6 chiffres de votre application d'authentification",
|
||||
"backupDescription": "Saisissez l'un de vos codes de secours pour continuer",
|
||||
"verificationCode": "Code de Vérification",
|
||||
"backupCode": "Code de Secours",
|
||||
"verificationCodePlaceholder": "000000",
|
||||
"backupCodePlaceholder": "XXXX-XXXX",
|
||||
"verify": "Vérifier",
|
||||
"verifying": "Vérification en cours...",
|
||||
"useBackupCode": "Utiliser un code de secours à la place",
|
||||
"useAuthenticatorCode": "Utiliser le code d'authentification à la place",
|
||||
"rememberDevice": "Se souvenir de cet appareil pendant 30 jours",
|
||||
"rememberDeviceDescription": "Vous n'aurez pas besoin de saisir de codes 2FA sur cet appareil pendant 30 jours"
|
||||
},
|
||||
"messages": {
|
||||
"enabledSuccess": "L'authentification à deux facteurs a été activée avec succès !",
|
||||
"disabledSuccess": "L'authentification à deux facteurs a été désactivée avec succès",
|
||||
"backupCodesGenerated": "Nouveaux codes de secours générés avec succès",
|
||||
"backupCodesCopied": "Codes de secours copiés dans le presse-papiers",
|
||||
"setupFailed": "Échec de la génération de la configuration 2FA",
|
||||
"verificationFailed": "Code de vérification invalide",
|
||||
"disableFailed": "Échec de la désactivation de la 2FA. Veuillez vérifier votre mot de passe.",
|
||||
"backupCodesFailed": "Échec de la génération des codes de secours",
|
||||
"backupCodesCopyFailed": "Échec de la copie des codes de secours",
|
||||
"statusLoadFailed": "Échec du chargement du statut 2FA",
|
||||
"enterVerificationCode": "Veuillez saisir le code de vérification",
|
||||
"enterPassword": "Veuillez saisir votre mot de passe",
|
||||
"deviceTrusted": "Cet appareil a été marqué comme fiable pendant 30 jours"
|
||||
},
|
||||
"errors": {
|
||||
"invalidVerificationCode": "Code de vérification invalide",
|
||||
"invalidTwoFactorCode": "Code d'authentification à deux facteurs invalide",
|
||||
"twoFactorRequired": "L'authentification à deux facteurs est requise",
|
||||
"twoFactorAlreadyEnabled": "L'authentification à deux facteurs est déjà activée",
|
||||
"twoFactorNotEnabled": "L'authentification à deux facteurs n'est pas activée",
|
||||
"passwordVerificationRequired": "Vérification du mot de passe requise",
|
||||
"invalidPassword": "Mot de passe invalide",
|
||||
"userNotFound": "Utilisateur non trouvé"
|
||||
},
|
||||
"buttons": {
|
||||
"enable2FA": "Activer 2FA",
|
||||
"disable2FA": "Désactiver 2FA"
|
||||
},
|
||||
"deviceNames": {
|
||||
"unknownDevice": "Appareil Inconnu",
|
||||
"browsers": {
|
||||
"chrome": "Chrome",
|
||||
"firefox": "Firefox",
|
||||
"safari": "Safari",
|
||||
"edge": "Edge"
|
||||
},
|
||||
"platforms": {
|
||||
"windows": " sur Windows",
|
||||
"macos": " sur macOS",
|
||||
"linux": " sur Linux",
|
||||
"iphone": " sur iPhone",
|
||||
"android": " sur Android"
|
||||
}
|
||||
},
|
||||
"status": {
|
||||
"label": "Statut :",
|
||||
"enabled": "Activé",
|
||||
"disabled": "Désactivé"
|
||||
},
|
||||
"trustedDevices": {
|
||||
"title": "Appareils de Confiance - 2FA",
|
||||
"description": "Appareils qui ne nécessitent pas de vérification 2FA",
|
||||
"noDevices": "Aucun appareil de confiance",
|
||||
"deviceName": "Appareil",
|
||||
"addedOn": "Ajouté le",
|
||||
"expiresOn": "Expire le",
|
||||
"remove": "Supprimer",
|
||||
"removeAll": "Tout Supprimer",
|
||||
"confirmRemove": "Êtes-vous sûr de vouloir supprimer cet appareil de confiance ?",
|
||||
"confirmRemoveAll": "Êtes-vous sûr de vouloir supprimer tous les appareils de confiance ?",
|
||||
"deviceRemoved": "Appareil de confiance supprimé avec succès",
|
||||
"allDevicesRemoved": "Tous les appareils de confiance ont été supprimés avec succès",
|
||||
"loadFailed": "Échec du chargement des appareils de confiance",
|
||||
"removeFailed": "Échec de la suppression de l'appareil de confiance",
|
||||
"removeAllFailed": "Échec de la suppression de tous les appareils de confiance",
|
||||
"loading": "Chargement des appareils de confiance...",
|
||||
"noDevicesDescription": "Les appareils apparaîtront ici lorsque vous choisirez de leur faire confiance lors de la vérification 2FA",
|
||||
"tableHeaders": {
|
||||
"device": "Appareil",
|
||||
"added": "Ajouté",
|
||||
"expires": "Expire",
|
||||
"lastUsed": "Dernière Utilisation",
|
||||
"ipAddress": "Adresse IP",
|
||||
"actions": "Actions"
|
||||
},
|
||||
"status": {
|
||||
"never": "Jamais",
|
||||
"expired": "Expiré"
|
||||
},
|
||||
"modals": {
|
||||
"removeDevice": {
|
||||
"title": "Supprimer l'Appareil de Confiance",
|
||||
"added": "Ajouté :",
|
||||
"ip": "IP :"
|
||||
},
|
||||
"removeAllDevices": {
|
||||
"title": "Supprimer Tous les Appareils de Confiance",
|
||||
"description": "Cela supprimera {count} appareil{count, plural, =1 {} other {s}} de confiance. Vous devrez vérifier la 2FA sur tous les appareils à nouveau."
|
||||
},
|
||||
"buttons": {
|
||||
"cancel": "Annuler",
|
||||
"removing": "Suppression...",
|
||||
"removeDevice": "Supprimer l'Appareil",
|
||||
"removeAllDevices": "Supprimer Tous les Appareils"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"uploadFile": {
|
||||
"title": "Télécharger fichier",
|
||||
"multipleTitle": "Télécharger Plusieurs Fichiers",
|
||||
@@ -1542,98 +1713,5 @@
|
||||
"passwordRequired": "Le mot de passe est requis",
|
||||
"nameRequired": "Nome é obrigatório",
|
||||
"required": "Este campo é obrigatório"
|
||||
},
|
||||
"iconPicker": {
|
||||
"title": "Sélectionner une Icône",
|
||||
"placeholder": "Sélectionner une icône",
|
||||
"searchPlaceholder": "Rechercher des icônes...",
|
||||
"loadingMore": "Chargement d'autres icônes...",
|
||||
"allIconsLoaded": "Toutes les {count} icônes sont chargées",
|
||||
"noIconsFound": "Aucune icône trouvée pour \"{search}\"",
|
||||
"tabs": {
|
||||
"all": "Toutes les Icônes",
|
||||
"popular": "Populaires",
|
||||
"auth": "Fournisseurs d'Authentification"
|
||||
},
|
||||
"stats": "{iconCount} icônes de {libraryCount} bibliothèques",
|
||||
"categoryBadge": "{category} ({count} icônes)"
|
||||
},
|
||||
"twoFactor": {
|
||||
"title": "Authentification à Deux Facteurs",
|
||||
"description": "Ajoutez une couche de sécurité supplémentaire à votre compte",
|
||||
"enabled": "Votre compte est protégé par l'authentification à deux facteurs",
|
||||
"disabled": "L'authentification à deux facteurs n'est pas activée",
|
||||
"setup": {
|
||||
"title": "Activer l'Authentification à Deux Facteurs",
|
||||
"description": "Scannez le code QR avec votre application d'authentification, puis saisissez le code de vérification.",
|
||||
"qrCode": "Code QR",
|
||||
"manualEntryKey": "Clé de Saisie Manuelle",
|
||||
"verificationCode": "Code de Vérification",
|
||||
"verificationCodePlaceholder": "Entrez le code à 6 chiffres",
|
||||
"verificationCodeDescription": "Saisissez le code à 6 chiffres de votre application d'authentification",
|
||||
"verifyAndEnable": "Vérifier et Activer",
|
||||
"cancel": "Annuler"
|
||||
},
|
||||
"disable": {
|
||||
"title": "Désactiver l'Authentification à Deux Facteurs",
|
||||
"description": "Saisissez votre mot de passe pour confirmer la désactivation de l'authentification à deux facteurs.",
|
||||
"password": "Mot de passe",
|
||||
"passwordPlaceholder": "Entrez votre mot de passe",
|
||||
"confirm": "Confirmer la Désactivation",
|
||||
"cancel": "Annuler"
|
||||
},
|
||||
"backupCodes": {
|
||||
"title": "Codes de Secours",
|
||||
"description": "Conservez ces codes de secours dans un endroit sûr. Vous pouvez les utiliser pour accéder à votre compte si vous perdez votre appareil d'authentification.",
|
||||
"warning": "Important :",
|
||||
"warningText": "Chaque code de secours ne peut être utilisé qu'une seule fois. Gardez-les en sécurité et ne les partagez avec personne.",
|
||||
"generateNew": "Générer de Nouveaux Codes de Secours",
|
||||
"download": "Télécharger les Codes de Secours",
|
||||
"copyToClipboard": "Copier dans le Presse-papiers",
|
||||
"savedMessage": "J'ai Sauvegardé Mes Codes de Secours",
|
||||
"available": "{count} codes de secours disponibles",
|
||||
"instructions": [
|
||||
"• Sauvegardez ces codes dans un endroit sécurisé",
|
||||
"• Chaque code de secours ne peut être utilisé qu'une seule fois",
|
||||
"• Vous pouvez générer de nouveaux codes à tout moment"
|
||||
]
|
||||
},
|
||||
"verification": {
|
||||
"title": "Authentification à Deux Facteurs",
|
||||
"description": "Saisissez le code à 6 chiffres de votre application d'authentification",
|
||||
"backupDescription": "Saisissez l'un de vos codes de secours pour continuer",
|
||||
"verificationCode": "Code de Vérification",
|
||||
"backupCode": "Code de Secours",
|
||||
"verificationCodePlaceholder": "000000",
|
||||
"backupCodePlaceholder": "XXXX-XXXX",
|
||||
"verify": "Vérifier",
|
||||
"verifying": "Vérification en cours...",
|
||||
"useBackupCode": "Utiliser un code de secours à la place",
|
||||
"useAuthenticatorCode": "Utiliser le code d'authentification à la place"
|
||||
},
|
||||
"messages": {
|
||||
"enabledSuccess": "L'authentification à deux facteurs a été activée avec succès !",
|
||||
"disabledSuccess": "L'authentification à deux facteurs a été désactivée avec succès",
|
||||
"backupCodesGenerated": "Nouveaux codes de secours générés avec succès",
|
||||
"backupCodesCopied": "Codes de secours copiés dans le presse-papiers",
|
||||
"setupFailed": "Échec de la génération de la configuration 2FA",
|
||||
"verificationFailed": "Code de vérification invalide",
|
||||
"disableFailed": "Échec de la désactivation de la 2FA. Veuillez vérifier votre mot de passe.",
|
||||
"backupCodesFailed": "Échec de la génération des codes de secours",
|
||||
"backupCodesCopyFailed": "Échec de la copie des codes de secours",
|
||||
"statusLoadFailed": "Échec du chargement du statut 2FA",
|
||||
"enterVerificationCode": "Veuillez saisir le code de vérification",
|
||||
"enterPassword": "Veuillez saisir votre mot de passe"
|
||||
},
|
||||
"errors": {
|
||||
"invalidVerificationCode": "Code de vérification invalide",
|
||||
"invalidTwoFactorCode": "Code d'authentification à deux facteurs invalide",
|
||||
"twoFactorRequired": "L'authentification à deux facteurs est requise",
|
||||
"twoFactorAlreadyEnabled": "L'authentification à deux facteurs est déjà activée",
|
||||
"twoFactorNotEnabled": "L'authentification à deux facteurs n'est pas activée",
|
||||
"passwordVerificationRequired": "Vérification du mot de passe requise",
|
||||
"invalidPassword": "Mot de passe invalide",
|
||||
"userNotFound": "Utilisateur non trouvé"
|
||||
}
|
||||
}
|
||||
}
|
@@ -143,7 +143,8 @@
|
||||
"saving": "सहेज रहा है...",
|
||||
"update": "अपडेट करें",
|
||||
"click": "क्लिक करें",
|
||||
"creating": "बना रहा है..."
|
||||
"creating": "बना रहा है...",
|
||||
"loadingSimple": "लोड हो रहा है..."
|
||||
},
|
||||
"createShare": {
|
||||
"title": "साझाकरण बनाएं",
|
||||
@@ -189,7 +190,8 @@
|
||||
"Password verification required": "पासवर्ड सत्यापन आवश्यक है",
|
||||
"Two-factor authentication is already enabled": "दो-कारक प्रमाणीकरण पहले से सक्षम है",
|
||||
"Two-factor authentication is not enabled": "दो-कारक प्रमाणीकरण सक्षम नहीं है",
|
||||
"Two-factor authentication required": "दो-कारक प्रमाणीकरण आवश्यक है"
|
||||
"Two-factor authentication required": "दो-कारक प्रमाणीकरण आवश्यक है",
|
||||
"noUserData": "उपयोगकर्ता डेटा नहीं मिला"
|
||||
},
|
||||
"fileActions": {
|
||||
"editFile": "फाइल संपादित करें",
|
||||
@@ -338,6 +340,21 @@
|
||||
},
|
||||
"pageTitle": "होम"
|
||||
},
|
||||
"iconPicker": {
|
||||
"title": "आइकन चुनें",
|
||||
"placeholder": "एक आइकन चुनें",
|
||||
"searchPlaceholder": "आइकन खोजें...",
|
||||
"loadingMore": "अधिक आइकन लोड हो रहे हैं...",
|
||||
"allIconsLoaded": "सभी {count} आइकन लोड हो गए",
|
||||
"noIconsFound": "\"{search}\" के लिए कोई आइकन नहीं मिला",
|
||||
"tabs": {
|
||||
"all": "सभी आइकन",
|
||||
"popular": "लोकप्रिय",
|
||||
"auth": "प्रमाणीकरण प्रदाता"
|
||||
},
|
||||
"stats": "{libraryCount} लाइब्रेरी से {iconCount} आइकन",
|
||||
"categoryBadge": "{category} ({count} आइकन)"
|
||||
},
|
||||
"login": {
|
||||
"welcome": "स्वागत है में",
|
||||
"signInToContinue": "जारी रखने के लिए साइन इन करें",
|
||||
@@ -1426,6 +1443,160 @@
|
||||
"dark": "डार्क",
|
||||
"system": "सिस्टम"
|
||||
},
|
||||
"twoFactor": {
|
||||
"title": "दो-कारक प्रमाणीकरण",
|
||||
"description": "अपने खाते में अतिरिक्त सुरक्षा स्तर जोड़ें",
|
||||
"enabled": "आपका खाता दो-कारक प्रमाणीकरण से सुरक्षित है",
|
||||
"disabled": "दो-कारक प्रमाणीकरण सक्षम नहीं है",
|
||||
"setup": {
|
||||
"title": "दो-कारक प्रमाणीकरण सक्षम करें",
|
||||
"description": "अपने प्रमाणीकरण ऐप से QR कोड स्कैन करें, फिर सत्यापन कोड दर्ज करें।",
|
||||
"qrCode": "QR कोड",
|
||||
"manualEntryKey": "मैनुअल एंट्री कुंजी",
|
||||
"verificationCode": "सत्यापन कोड",
|
||||
"verificationCodePlaceholder": "6-अंकों का कोड दर्ज करें",
|
||||
"verificationCodeDescription": "अपने प्रमाणीकरण ऐप से 6-अंकों का कोड दर्ज करें",
|
||||
"verifyAndEnable": "सत्यापित करें और सक्षम करें",
|
||||
"cancel": "रद्द करें"
|
||||
},
|
||||
"disable": {
|
||||
"title": "दो-कारक प्रमाणीकरण अक्षम करें",
|
||||
"description": "दो-कारक प्रमाणीकरण को अक्षम करने की पुष्टि के लिए अपना पासवर्ड दर्ज करें।",
|
||||
"password": "पासवर्ड",
|
||||
"passwordPlaceholder": "अपना पासवर्ड दर्ज करें",
|
||||
"confirm": "अक्षम करने की पुष्टि करें",
|
||||
"cancel": "रद्द करें"
|
||||
},
|
||||
"backupCodes": {
|
||||
"title": "बैकअप कोड",
|
||||
"description": "इन बैकअप कोड को सुरक्षित स्थान पर सहेजें। यदि आप अपना प्रमाणीकरण डिवाइस खो देते हैं तो आप इनका उपयोग अपने खाते तक पहुंचने के लिए कर सकते हैं।",
|
||||
"warning": "महत्वपूर्ण:",
|
||||
"warningText": "प्रत्येक बैकअप कोड का उपयोग केवल एक बार किया जा सकता है। उन्हें सुरक्षित रखें और किसी के साथ साझा न करें।",
|
||||
"generateNew": "नए बैकअप कोड जनरेट करें",
|
||||
"download": "बैकअप कोड डाउनलोड करें",
|
||||
"copyToClipboard": "क्लिपबोर्ड पर कॉपी करें",
|
||||
"savedMessage": "मैंने अपने बैकअप कोड सहेज लिए हैं",
|
||||
"available": "{count} बैकअप कोड उपलब्ध हैं",
|
||||
"instructions": [
|
||||
"• इन कोड को सुरक्षित स्थान पर सहेजें",
|
||||
"• प्रत्येक बैकअप कोड का उपयोग केवल एक बार किया जा सकता है",
|
||||
"• आप कभी भी नए कोड जनरेट कर सकते हैं"
|
||||
]
|
||||
},
|
||||
"verification": {
|
||||
"title": "दो-कारक प्रमाणीकरण",
|
||||
"description": "अपने प्रमाणीकरण ऐप से 6-अंकों का कोड दर्ज करें",
|
||||
"backupDescription": "जारी रखने के लिए अपने बैकअप कोड में से एक दर्ज करें",
|
||||
"verificationCode": "सत्यापन कोड",
|
||||
"backupCode": "बैकअप कोड",
|
||||
"verificationCodePlaceholder": "000000",
|
||||
"backupCodePlaceholder": "XXXX-XXXX",
|
||||
"verify": "सत्यापित करें",
|
||||
"verifying": "सत्यापन हो रहा है...",
|
||||
"useBackupCode": "इसके बजाय बैकअप कोड का उपयोग करें",
|
||||
"useAuthenticatorCode": "इसके बजाय प्रमाणीकरण कोड का उपयोग करें",
|
||||
"rememberDevice": "इस डिवाइस को 30 दिनों के लिए याद रखें",
|
||||
"rememberDeviceDescription": "आपको इस डिवाइस पर 30 दिनों तक 2FA कोड दर्ज करने की आवश्यकता नहीं होगी"
|
||||
},
|
||||
"messages": {
|
||||
"enabledSuccess": "दो-कारक प्रमाणीकरण सफलतापूर्वक सक्षम किया गया!",
|
||||
"disabledSuccess": "दो-कारक प्रमाणीकरण सफलतापूर्वक अक्षम किया गया",
|
||||
"backupCodesGenerated": "नए बैकअप कोड सफलतापूर्वक जनरेट किए गए",
|
||||
"backupCodesCopied": "बैकअप कोड क्लिपबोर्ड पर कॉपी किए गए",
|
||||
"setupFailed": "2FA सेटअप जनरेट करने में विफल",
|
||||
"verificationFailed": "अमान्य सत्यापन कोड",
|
||||
"disableFailed": "2FA अक्षम करने में विफल। कृपया अपना पासवर्ड जांचें।",
|
||||
"backupCodesFailed": "बैकअप कोड जनरेट करने में विफल",
|
||||
"backupCodesCopyFailed": "बैकअप कोड कॉपी करने में विफल",
|
||||
"statusLoadFailed": "2FA स्थिति लोड करने में विफल",
|
||||
"enterVerificationCode": "कृपया सत्यापन कोड दर्ज करें",
|
||||
"enterPassword": "कृपया अपना पासवर्ड दर्ज करें",
|
||||
"deviceTrusted": "यह डिवाइस 30 दिनों के लिए विश्वसनीय के रूप में चिह्नित किया गया है"
|
||||
},
|
||||
"errors": {
|
||||
"invalidVerificationCode": "अमान्य सत्यापन कोड",
|
||||
"invalidTwoFactorCode": "अमान्य दो-कारक प्रमाणीकरण कोड",
|
||||
"twoFactorRequired": "दो-कारक प्रमाणीकरण आवश्यक है",
|
||||
"twoFactorAlreadyEnabled": "दो-कारक प्रमाणीकरण पहले से सक्षम है",
|
||||
"twoFactorNotEnabled": "दो-कारक प्रमाणीकरण सक्षम नहीं है",
|
||||
"passwordVerificationRequired": "पासवर्ड सत्यापन आवश्यक है",
|
||||
"invalidPassword": "अमान्य पासवर्ड",
|
||||
"userNotFound": "उपयोगकर्ता नहीं मिला"
|
||||
},
|
||||
"buttons": {
|
||||
"enable2FA": "2FA सक्षम करें",
|
||||
"disable2FA": "2FA अक्षम करें"
|
||||
},
|
||||
"deviceNames": {
|
||||
"unknownDevice": "अज्ञात डिवाइस",
|
||||
"browsers": {
|
||||
"chrome": "Chrome",
|
||||
"firefox": "Firefox",
|
||||
"safari": "Safari",
|
||||
"edge": "Edge"
|
||||
},
|
||||
"platforms": {
|
||||
"windows": " Windows पर",
|
||||
"macos": " macOS पर",
|
||||
"linux": " Linux पर",
|
||||
"iphone": " iPhone पर",
|
||||
"android": " Android पर"
|
||||
}
|
||||
},
|
||||
"status": {
|
||||
"label": "स्थिति:",
|
||||
"enabled": "सक्षम",
|
||||
"disabled": "अक्षम"
|
||||
},
|
||||
"trustedDevices": {
|
||||
"title": "विश्वसनीय डिवाइस - 2FA",
|
||||
"description": "डिवाइस जिन्हें 2FA सत्यापन की आवश्यकता नहीं है",
|
||||
"noDevices": "कोई विश्वसनीय डिवाइस नहीं",
|
||||
"deviceName": "डिवाइस",
|
||||
"addedOn": "जोड़ा गया",
|
||||
"expiresOn": "समाप्ति तिथि",
|
||||
"remove": "हटाएं",
|
||||
"removeAll": "सभी हटाएं",
|
||||
"confirmRemove": "क्या आप वाकई इस विश्वसनीय डिवाइस को हटाना चाहते हैं?",
|
||||
"confirmRemoveAll": "क्या आप वाकई सभी विश्वसनीय डिवाइस हटाना चाहते हैं?",
|
||||
"deviceRemoved": "विश्वसनीय डिवाइस सफलतापूर्वक हटाया गया",
|
||||
"allDevicesRemoved": "सभी विश्वसनीय डिवाइस सफलतापूर्वक हटाए गए",
|
||||
"loadFailed": "विश्वसनीय डिवाइस लोड करने में विफल",
|
||||
"removeFailed": "विश्वसनीय डिवाइस हटाने में विफल",
|
||||
"removeAllFailed": "सभी विश्वसनीय डिवाइस हटाने में विफल",
|
||||
"loading": "विश्वसनीय डिवाइस लोड हो रहे हैं...",
|
||||
"noDevicesDescription": "जब आप 2FA सत्यापन के दौरान उन्हें विश्वसनीय मानने का चयन करेंगे तो डिवाइस यहां दिखाई देंगे",
|
||||
"tableHeaders": {
|
||||
"device": "डिवाइस",
|
||||
"added": "जोड़ा गया",
|
||||
"expires": "समाप्ति",
|
||||
"lastUsed": "अंतिम उपयोग",
|
||||
"ipAddress": "IP पता",
|
||||
"actions": "कार्रवाई"
|
||||
},
|
||||
"status": {
|
||||
"never": "कभी नहीं",
|
||||
"expired": "समाप्त"
|
||||
},
|
||||
"modals": {
|
||||
"removeDevice": {
|
||||
"title": "विश्वसनीय डिवाइस हटाएं",
|
||||
"added": "जोड़ा गया:",
|
||||
"ip": "IP:"
|
||||
},
|
||||
"removeAllDevices": {
|
||||
"title": "सभी विश्वसनीय डिवाइस हटाएं",
|
||||
"description": "यह {count} विश्वसनीय डिवाइस{count, plural, =1 {} other {s}} को हटा देगा। आपको सभी डिवाइस पर फिर से 2FA सत्यापित करना होगा।"
|
||||
},
|
||||
"buttons": {
|
||||
"cancel": "रद्द करें",
|
||||
"removing": "हटाया जा रहा है...",
|
||||
"removeDevice": "डिवाइस हटाएं",
|
||||
"removeAllDevices": "सभी डिवाइस हटाएं"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"uploadFile": {
|
||||
"title": "फ़ाइल अपलोड करें",
|
||||
"multipleTitle": "कई फ़ाइलें अपलोड करें",
|
||||
@@ -1542,98 +1713,5 @@
|
||||
"passwordRequired": "पासवर्ड आवश्यक है",
|
||||
"nameRequired": "नाम आवश्यक है",
|
||||
"required": "यह फ़ील्ड आवश्यक है"
|
||||
},
|
||||
"iconPicker": {
|
||||
"title": "आइकन चुनें",
|
||||
"placeholder": "एक आइकन चुनें",
|
||||
"searchPlaceholder": "आइकन खोजें...",
|
||||
"loadingMore": "अधिक आइकन लोड हो रहे हैं...",
|
||||
"allIconsLoaded": "सभी {count} आइकन लोड हो गए",
|
||||
"noIconsFound": "\"{search}\" के लिए कोई आइकन नहीं मिला",
|
||||
"tabs": {
|
||||
"all": "सभी आइकन",
|
||||
"popular": "लोकप्रिय",
|
||||
"auth": "प्रमाणीकरण प्रदाता"
|
||||
},
|
||||
"stats": "{libraryCount} लाइब्रेरी से {iconCount} आइकन",
|
||||
"categoryBadge": "{category} ({count} आइकन)"
|
||||
},
|
||||
"twoFactor": {
|
||||
"title": "दो-कारक प्रमाणीकरण",
|
||||
"description": "अपने खाते में अतिरिक्त सुरक्षा स्तर जोड़ें",
|
||||
"enabled": "आपका खाता दो-कारक प्रमाणीकरण से सुरक्षित है",
|
||||
"disabled": "दो-कारक प्रमाणीकरण सक्षम नहीं है",
|
||||
"setup": {
|
||||
"title": "दो-कारक प्रमाणीकरण सक्षम करें",
|
||||
"description": "अपने प्रमाणीकरण ऐप से QR कोड स्कैन करें, फिर सत्यापन कोड दर्ज करें।",
|
||||
"qrCode": "QR कोड",
|
||||
"manualEntryKey": "मैनुअल एंट्री कुंजी",
|
||||
"verificationCode": "सत्यापन कोड",
|
||||
"verificationCodePlaceholder": "6-अंकों का कोड दर्ज करें",
|
||||
"verificationCodeDescription": "अपने प्रमाणीकरण ऐप से 6-अंकों का कोड दर्ज करें",
|
||||
"verifyAndEnable": "सत्यापित करें और सक्षम करें",
|
||||
"cancel": "रद्द करें"
|
||||
},
|
||||
"disable": {
|
||||
"title": "दो-कारक प्रमाणीकरण अक्षम करें",
|
||||
"description": "दो-कारक प्रमाणीकरण को अक्षम करने की पुष्टि के लिए अपना पासवर्ड दर्ज करें।",
|
||||
"password": "पासवर्ड",
|
||||
"passwordPlaceholder": "अपना पासवर्ड दर्ज करें",
|
||||
"confirm": "अक्षम करने की पुष्टि करें",
|
||||
"cancel": "रद्द करें"
|
||||
},
|
||||
"backupCodes": {
|
||||
"title": "बैकअप कोड",
|
||||
"description": "इन बैकअप कोड को सुरक्षित स्थान पर सहेजें। यदि आप अपना प्रमाणीकरण डिवाइस खो देते हैं तो आप इनका उपयोग अपने खाते तक पहुंचने के लिए कर सकते हैं।",
|
||||
"warning": "महत्वपूर्ण:",
|
||||
"warningText": "प्रत्येक बैकअप कोड का उपयोग केवल एक बार किया जा सकता है। उन्हें सुरक्षित रखें और किसी के साथ साझा न करें।",
|
||||
"generateNew": "नए बैकअप कोड जनरेट करें",
|
||||
"download": "बैकअप कोड डाउनलोड करें",
|
||||
"copyToClipboard": "क्लिपबोर्ड पर कॉपी करें",
|
||||
"savedMessage": "मैंने अपने बैकअप कोड सहेज लिए हैं",
|
||||
"available": "{count} बैकअप कोड उपलब्ध हैं",
|
||||
"instructions": [
|
||||
"• इन कोड को सुरक्षित स्थान पर सहेजें",
|
||||
"• प्रत्येक बैकअप कोड का उपयोग केवल एक बार किया जा सकता है",
|
||||
"• आप कभी भी नए कोड जनरेट कर सकते हैं"
|
||||
]
|
||||
},
|
||||
"verification": {
|
||||
"title": "दो-कारक प्रमाणीकरण",
|
||||
"description": "अपने प्रमाणीकरण ऐप से 6-अंकों का कोड दर्ज करें",
|
||||
"backupDescription": "जारी रखने के लिए अपने बैकअप कोड में से एक दर्ज करें",
|
||||
"verificationCode": "सत्यापन कोड",
|
||||
"backupCode": "बैकअप कोड",
|
||||
"verificationCodePlaceholder": "000000",
|
||||
"backupCodePlaceholder": "XXXX-XXXX",
|
||||
"verify": "सत्यापित करें",
|
||||
"verifying": "सत्यापन हो रहा है...",
|
||||
"useBackupCode": "इसके बजाय बैकअप कोड का उपयोग करें",
|
||||
"useAuthenticatorCode": "इसके बजाय प्रमाणीकरण कोड का उपयोग करें"
|
||||
},
|
||||
"messages": {
|
||||
"enabledSuccess": "दो-कारक प्रमाणीकरण सफलतापूर्वक सक्षम किया गया!",
|
||||
"disabledSuccess": "दो-कारक प्रमाणीकरण सफलतापूर्वक अक्षम किया गया",
|
||||
"backupCodesGenerated": "नए बैकअप कोड सफलतापूर्वक जनरेट किए गए",
|
||||
"backupCodesCopied": "बैकअप कोड क्लिपबोर्ड पर कॉपी किए गए",
|
||||
"setupFailed": "2FA सेटअप जनरेट करने में विफल",
|
||||
"verificationFailed": "अमान्य सत्यापन कोड",
|
||||
"disableFailed": "2FA अक्षम करने में विफल। कृपया अपना पासवर्ड जांचें।",
|
||||
"backupCodesFailed": "बैकअप कोड जनरेट करने में विफल",
|
||||
"backupCodesCopyFailed": "बैकअप कोड कॉपी करने में विफल",
|
||||
"statusLoadFailed": "2FA स्थिति लोड करने में विफल",
|
||||
"enterVerificationCode": "कृपया सत्यापन कोड दर्ज करें",
|
||||
"enterPassword": "कृपया अपना पासवर्ड दर्ज करें"
|
||||
},
|
||||
"errors": {
|
||||
"invalidVerificationCode": "अमान्य सत्यापन कोड",
|
||||
"invalidTwoFactorCode": "अमान्य दो-कारक प्रमाणीकरण कोड",
|
||||
"twoFactorRequired": "दो-कारक प्रमाणीकरण आवश्यक है",
|
||||
"twoFactorAlreadyEnabled": "दो-कारक प्रमाणीकरण पहले से सक्षम है",
|
||||
"twoFactorNotEnabled": "दो-कारक प्रमाणीकरण सक्षम नहीं है",
|
||||
"passwordVerificationRequired": "पासवर्ड सत्यापन आवश्यक है",
|
||||
"invalidPassword": "अमान्य पासवर्ड",
|
||||
"userNotFound": "उपयोगकर्ता नहीं मिला"
|
||||
}
|
||||
}
|
||||
}
|
@@ -143,7 +143,8 @@
|
||||
"saving": "Salvataggio...",
|
||||
"update": "Aggiorna",
|
||||
"click": "Clicca per",
|
||||
"creating": "Creazione in corso..."
|
||||
"creating": "Creazione in corso...",
|
||||
"loadingSimple": "Caricamento..."
|
||||
},
|
||||
"createShare": {
|
||||
"title": "Crea Condivisione",
|
||||
@@ -189,7 +190,8 @@
|
||||
"Password verification required": "Verifica della password richiesta",
|
||||
"Two-factor authentication is already enabled": "L'autenticazione a due fattori è già abilitata",
|
||||
"Two-factor authentication is not enabled": "L'autenticazione a due fattori non è abilitata",
|
||||
"Two-factor authentication required": "Autenticazione a due fattori richiesta"
|
||||
"Two-factor authentication required": "Autenticazione a due fattori richiesta",
|
||||
"noUserData": "Nessun dato utente"
|
||||
},
|
||||
"fileActions": {
|
||||
"editFile": "Modifica File",
|
||||
@@ -338,6 +340,21 @@
|
||||
},
|
||||
"pageTitle": "Pagina iniziale"
|
||||
},
|
||||
"iconPicker": {
|
||||
"title": "Seleziona Icona",
|
||||
"placeholder": "Seleziona un'icona",
|
||||
"searchPlaceholder": "Cerca icone...",
|
||||
"loadingMore": "Caricamento altre icone...",
|
||||
"allIconsLoaded": "Tutte le {count} icone caricate",
|
||||
"noIconsFound": "Nessuna icona trovata per \"{search}\"",
|
||||
"tabs": {
|
||||
"all": "Tutte le Icone",
|
||||
"popular": "Popolari",
|
||||
"auth": "Provider di Autenticazione"
|
||||
},
|
||||
"stats": "{iconCount} icone da {libraryCount} librerie",
|
||||
"categoryBadge": "{category} ({count} icone)"
|
||||
},
|
||||
"login": {
|
||||
"welcome": "Benvenuto in",
|
||||
"signInToContinue": "Accedi per continuare",
|
||||
@@ -1426,6 +1443,160 @@
|
||||
"dark": "Scuro",
|
||||
"system": "Sistema"
|
||||
},
|
||||
"twoFactor": {
|
||||
"title": "Autenticazione a Due Fattori",
|
||||
"description": "Aggiungi un ulteriore livello di sicurezza al tuo account",
|
||||
"enabled": "Il tuo account è protetto con l'autenticazione a due fattori",
|
||||
"disabled": "L'autenticazione a due fattori non è abilitata",
|
||||
"setup": {
|
||||
"title": "Abilita Autenticazione a Due Fattori",
|
||||
"description": "Scansiona il codice QR con la tua app di autenticazione, quindi inserisci il codice di verifica.",
|
||||
"qrCode": "Codice QR",
|
||||
"manualEntryKey": "Chiave per Inserimento Manuale",
|
||||
"verificationCode": "Codice di Verifica",
|
||||
"verificationCodePlaceholder": "Inserisci il codice a 6 cifre",
|
||||
"verificationCodeDescription": "Inserisci il codice a 6 cifre dalla tua app di autenticazione",
|
||||
"verifyAndEnable": "Verifica e Abilita",
|
||||
"cancel": "Annulla"
|
||||
},
|
||||
"disable": {
|
||||
"title": "Disabilita Autenticazione a Due Fattori",
|
||||
"description": "Inserisci la tua password per confermare la disabilitazione dell'autenticazione a due fattori.",
|
||||
"password": "Password",
|
||||
"passwordPlaceholder": "Inserisci la tua password",
|
||||
"confirm": "Conferma Disabilitazione",
|
||||
"cancel": "Annulla"
|
||||
},
|
||||
"backupCodes": {
|
||||
"title": "Codici di Backup",
|
||||
"description": "Salva questi codici di backup in un luogo sicuro. Puoi usarli per accedere al tuo account se perdi il tuo dispositivo di autenticazione.",
|
||||
"warning": "Importante:",
|
||||
"warningText": "Ogni codice di backup può essere utilizzato una sola volta. Conservali in modo sicuro e non condividerli con nessuno.",
|
||||
"generateNew": "Genera Nuovi Codici di Backup",
|
||||
"download": "Scarica Codici di Backup",
|
||||
"copyToClipboard": "Copia negli Appunti",
|
||||
"savedMessage": "Ho Salvato i Miei Codici di Backup",
|
||||
"available": "{count} codici di backup disponibili",
|
||||
"instructions": [
|
||||
"• Salva questi codici in un luogo sicuro",
|
||||
"• Ogni codice di backup può essere utilizzato una sola volta",
|
||||
"• Puoi generare nuovi codici in qualsiasi momento"
|
||||
]
|
||||
},
|
||||
"verification": {
|
||||
"title": "Autenticazione a Due Fattori",
|
||||
"description": "Inserisci il codice a 6 cifre dalla tua app di autenticazione",
|
||||
"backupDescription": "Inserisci uno dei tuoi codici di backup per continuare",
|
||||
"verificationCode": "Codice di Verifica",
|
||||
"backupCode": "Codice di Backup",
|
||||
"verificationCodePlaceholder": "000000",
|
||||
"backupCodePlaceholder": "XXXX-XXXX",
|
||||
"verify": "Verifica",
|
||||
"verifying": "Verifica in corso...",
|
||||
"useBackupCode": "Usa invece un codice di backup",
|
||||
"useAuthenticatorCode": "Usa invece il codice dell'autenticatore",
|
||||
"rememberDevice": "Ricorda questo dispositivo per 30 giorni",
|
||||
"rememberDeviceDescription": "Non dovrai inserire codici 2FA su questo dispositivo per 30 giorni"
|
||||
},
|
||||
"messages": {
|
||||
"enabledSuccess": "Autenticazione a due fattori abilitata con successo!",
|
||||
"disabledSuccess": "Autenticazione a due fattori disabilitata con successo",
|
||||
"backupCodesGenerated": "Nuovi codici di backup generati con successo",
|
||||
"backupCodesCopied": "Codici di backup copiati negli appunti",
|
||||
"setupFailed": "Impossibile generare la configurazione 2FA",
|
||||
"verificationFailed": "Codice di verifica non valido",
|
||||
"disableFailed": "Impossibile disabilitare 2FA. Verifica la tua password.",
|
||||
"backupCodesFailed": "Impossibile generare i codici di backup",
|
||||
"backupCodesCopyFailed": "Impossibile copiare i codici di backup",
|
||||
"statusLoadFailed": "Impossibile caricare lo stato 2FA",
|
||||
"enterVerificationCode": "Inserisci il codice di verifica",
|
||||
"enterPassword": "Inserisci la tua password",
|
||||
"deviceTrusted": "Questo dispositivo è stato contrassegnato come affidabile per 30 giorni"
|
||||
},
|
||||
"errors": {
|
||||
"invalidVerificationCode": "Codice di verifica non valido",
|
||||
"invalidTwoFactorCode": "Codice di autenticazione a due fattori non valido",
|
||||
"twoFactorRequired": "Autenticazione a due fattori richiesta",
|
||||
"twoFactorAlreadyEnabled": "L'autenticazione a due fattori è già abilitata",
|
||||
"twoFactorNotEnabled": "L'autenticazione a due fattori non è abilitata",
|
||||
"passwordVerificationRequired": "Verifica password richiesta",
|
||||
"invalidPassword": "Password non valida",
|
||||
"userNotFound": "Utente non trovato"
|
||||
},
|
||||
"buttons": {
|
||||
"enable2FA": "Abilita 2FA",
|
||||
"disable2FA": "Disabilita 2FA"
|
||||
},
|
||||
"deviceNames": {
|
||||
"unknownDevice": "Dispositivo Sconosciuto",
|
||||
"browsers": {
|
||||
"chrome": "Chrome",
|
||||
"firefox": "Firefox",
|
||||
"safari": "Safari",
|
||||
"edge": "Edge"
|
||||
},
|
||||
"platforms": {
|
||||
"windows": " su Windows",
|
||||
"macos": " su macOS",
|
||||
"linux": " su Linux",
|
||||
"iphone": " su iPhone",
|
||||
"android": " su Android"
|
||||
}
|
||||
},
|
||||
"status": {
|
||||
"label": "Stato:",
|
||||
"enabled": "Abilitato",
|
||||
"disabled": "Disabilitato"
|
||||
},
|
||||
"trustedDevices": {
|
||||
"title": "Dispositivi Affidabili - 2FA",
|
||||
"description": "Dispositivi che non richiedono la verifica 2FA",
|
||||
"noDevices": "Nessun dispositivo affidabile",
|
||||
"deviceName": "Dispositivo",
|
||||
"addedOn": "Aggiunto il",
|
||||
"expiresOn": "Scade il",
|
||||
"remove": "Rimuovi",
|
||||
"removeAll": "Rimuovi Tutti",
|
||||
"confirmRemove": "Sei sicuro di voler rimuovere questo dispositivo affidabile?",
|
||||
"confirmRemoveAll": "Sei sicuro di voler rimuovere tutti i dispositivi affidabili?",
|
||||
"deviceRemoved": "Dispositivo affidabile rimosso con successo",
|
||||
"allDevicesRemoved": "Tutti i dispositivi affidabili rimossi con successo",
|
||||
"loadFailed": "Impossibile caricare i dispositivi affidabili",
|
||||
"removeFailed": "Impossibile rimuovere il dispositivo affidabile",
|
||||
"removeAllFailed": "Impossibile rimuovere tutti i dispositivi affidabili",
|
||||
"loading": "Caricamento dispositivi affidabili...",
|
||||
"noDevicesDescription": "I dispositivi appariranno qui quando scegli di fidarti di loro durante la verifica 2FA",
|
||||
"tableHeaders": {
|
||||
"device": "Dispositivo",
|
||||
"added": "Aggiunto",
|
||||
"expires": "Scade",
|
||||
"lastUsed": "Ultimo Utilizzo",
|
||||
"ipAddress": "Indirizzo IP",
|
||||
"actions": "Azioni"
|
||||
},
|
||||
"status": {
|
||||
"never": "Mai",
|
||||
"expired": "Scaduto"
|
||||
},
|
||||
"modals": {
|
||||
"removeDevice": {
|
||||
"title": "Rimuovi Dispositivo Affidabile",
|
||||
"added": "Aggiunto:",
|
||||
"ip": "IP:"
|
||||
},
|
||||
"removeAllDevices": {
|
||||
"title": "Rimuovi Tutti i Dispositivi Affidabili",
|
||||
"description": "Questo rimuoverà {count} dispositivo{count, plural, =1 {} other {i}} affidabile{count, plural, =1 {} other {i}}. Dovrai verificare 2FA su tutti i dispositivi nuovamente."
|
||||
},
|
||||
"buttons": {
|
||||
"cancel": "Annulla",
|
||||
"removing": "Rimozione in corso...",
|
||||
"removeDevice": "Rimuovi Dispositivo",
|
||||
"removeAllDevices": "Rimuovi Tutti i Dispositivi"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"uploadFile": {
|
||||
"title": "Carica file",
|
||||
"multipleTitle": "Carica Più File",
|
||||
@@ -1542,98 +1713,5 @@
|
||||
"passwordMinLength": "La password deve contenere almeno 6 caratteri",
|
||||
"nameRequired": "Il nome è obbligatorio",
|
||||
"required": "Questo campo è obbligatorio"
|
||||
},
|
||||
"iconPicker": {
|
||||
"title": "Seleziona Icona",
|
||||
"placeholder": "Seleziona un'icona",
|
||||
"searchPlaceholder": "Cerca icone...",
|
||||
"loadingMore": "Caricamento altre icone...",
|
||||
"allIconsLoaded": "Tutte le {count} icone caricate",
|
||||
"noIconsFound": "Nessuna icona trovata per \"{search}\"",
|
||||
"tabs": {
|
||||
"all": "Tutte le Icone",
|
||||
"popular": "Popolari",
|
||||
"auth": "Provider di Autenticazione"
|
||||
},
|
||||
"stats": "{iconCount} icone da {libraryCount} librerie",
|
||||
"categoryBadge": "{category} ({count} icone)"
|
||||
},
|
||||
"twoFactor": {
|
||||
"title": "Autenticazione a Due Fattori",
|
||||
"description": "Aggiungi un ulteriore livello di sicurezza al tuo account",
|
||||
"enabled": "Il tuo account è protetto con l'autenticazione a due fattori",
|
||||
"disabled": "L'autenticazione a due fattori non è abilitata",
|
||||
"setup": {
|
||||
"title": "Abilita Autenticazione a Due Fattori",
|
||||
"description": "Scansiona il codice QR con la tua app di autenticazione, quindi inserisci il codice di verifica.",
|
||||
"qrCode": "Codice QR",
|
||||
"manualEntryKey": "Chiave per Inserimento Manuale",
|
||||
"verificationCode": "Codice di Verifica",
|
||||
"verificationCodePlaceholder": "Inserisci il codice a 6 cifre",
|
||||
"verificationCodeDescription": "Inserisci il codice a 6 cifre dalla tua app di autenticazione",
|
||||
"verifyAndEnable": "Verifica e Abilita",
|
||||
"cancel": "Annulla"
|
||||
},
|
||||
"disable": {
|
||||
"title": "Disabilita Autenticazione a Due Fattori",
|
||||
"description": "Inserisci la tua password per confermare la disabilitazione dell'autenticazione a due fattori.",
|
||||
"password": "Password",
|
||||
"passwordPlaceholder": "Inserisci la tua password",
|
||||
"confirm": "Conferma Disabilitazione",
|
||||
"cancel": "Annulla"
|
||||
},
|
||||
"backupCodes": {
|
||||
"title": "Codici di Backup",
|
||||
"description": "Salva questi codici di backup in un luogo sicuro. Puoi usarli per accedere al tuo account se perdi il tuo dispositivo di autenticazione.",
|
||||
"warning": "Importante:",
|
||||
"warningText": "Ogni codice di backup può essere utilizzato una sola volta. Conservali in modo sicuro e non condividerli con nessuno.",
|
||||
"generateNew": "Genera Nuovi Codici di Backup",
|
||||
"download": "Scarica Codici di Backup",
|
||||
"copyToClipboard": "Copia negli Appunti",
|
||||
"savedMessage": "Ho Salvato i Miei Codici di Backup",
|
||||
"available": "{count} codici di backup disponibili",
|
||||
"instructions": [
|
||||
"• Salva questi codici in un luogo sicuro",
|
||||
"• Ogni codice di backup può essere utilizzato una sola volta",
|
||||
"• Puoi generare nuovi codici in qualsiasi momento"
|
||||
]
|
||||
},
|
||||
"verification": {
|
||||
"title": "Autenticazione a Due Fattori",
|
||||
"description": "Inserisci il codice a 6 cifre dalla tua app di autenticazione",
|
||||
"backupDescription": "Inserisci uno dei tuoi codici di backup per continuare",
|
||||
"verificationCode": "Codice di Verifica",
|
||||
"backupCode": "Codice di Backup",
|
||||
"verificationCodePlaceholder": "000000",
|
||||
"backupCodePlaceholder": "XXXX-XXXX",
|
||||
"verify": "Verifica",
|
||||
"verifying": "Verifica in corso...",
|
||||
"useBackupCode": "Usa invece un codice di backup",
|
||||
"useAuthenticatorCode": "Usa invece il codice dell'autenticatore"
|
||||
},
|
||||
"messages": {
|
||||
"enabledSuccess": "Autenticazione a due fattori abilitata con successo!",
|
||||
"disabledSuccess": "Autenticazione a due fattori disabilitata con successo",
|
||||
"backupCodesGenerated": "Nuovi codici di backup generati con successo",
|
||||
"backupCodesCopied": "Codici di backup copiati negli appunti",
|
||||
"setupFailed": "Impossibile generare la configurazione 2FA",
|
||||
"verificationFailed": "Codice di verifica non valido",
|
||||
"disableFailed": "Impossibile disabilitare 2FA. Verifica la tua password.",
|
||||
"backupCodesFailed": "Impossibile generare i codici di backup",
|
||||
"backupCodesCopyFailed": "Impossibile copiare i codici di backup",
|
||||
"statusLoadFailed": "Impossibile caricare lo stato 2FA",
|
||||
"enterVerificationCode": "Inserisci il codice di verifica",
|
||||
"enterPassword": "Inserisci la tua password"
|
||||
},
|
||||
"errors": {
|
||||
"invalidVerificationCode": "Codice di verifica non valido",
|
||||
"invalidTwoFactorCode": "Codice di autenticazione a due fattori non valido",
|
||||
"twoFactorRequired": "Autenticazione a due fattori richiesta",
|
||||
"twoFactorAlreadyEnabled": "L'autenticazione a due fattori è già abilitata",
|
||||
"twoFactorNotEnabled": "L'autenticazione a due fattori non è abilitata",
|
||||
"passwordVerificationRequired": "Verifica password richiesta",
|
||||
"invalidPassword": "Password non valida",
|
||||
"userNotFound": "Utente non trovato"
|
||||
}
|
||||
}
|
||||
}
|
@@ -143,7 +143,8 @@
|
||||
"saving": "保存中...",
|
||||
"update": "更新",
|
||||
"click": "クリックして",
|
||||
"creating": "作成中..."
|
||||
"creating": "作成中...",
|
||||
"loadingSimple": "読み込み中..."
|
||||
},
|
||||
"createShare": {
|
||||
"title": "共有を作成",
|
||||
@@ -189,7 +190,8 @@
|
||||
"Password verification required": "パスワードの確認が必要です",
|
||||
"Two-factor authentication is already enabled": "二要素認証は既に有効になっています",
|
||||
"Two-factor authentication is not enabled": "二要素認証が有効になっていません",
|
||||
"Two-factor authentication required": "二要素認証が必要です"
|
||||
"Two-factor authentication required": "二要素認証が必要です",
|
||||
"noUserData": "ユーザーデータがありません"
|
||||
},
|
||||
"fileActions": {
|
||||
"editFile": "ファイルを編集",
|
||||
@@ -338,6 +340,21 @@
|
||||
},
|
||||
"pageTitle": "ホーム"
|
||||
},
|
||||
"iconPicker": {
|
||||
"title": "アイコンを選択",
|
||||
"placeholder": "アイコンを選択してください",
|
||||
"searchPlaceholder": "アイコンを検索...",
|
||||
"loadingMore": "アイコンを読み込み中...",
|
||||
"allIconsLoaded": "全{count}個のアイコンを読み込みました",
|
||||
"noIconsFound": "\"{search}\"に一致するアイコンが見つかりませんでした",
|
||||
"tabs": {
|
||||
"all": "すべてのアイコン",
|
||||
"popular": "人気",
|
||||
"auth": "認証プロバイダー"
|
||||
},
|
||||
"stats": "{libraryCount}ライブラリから{iconCount}個のアイコン",
|
||||
"categoryBadge": "{category}({count}個のアイコン)"
|
||||
},
|
||||
"login": {
|
||||
"welcome": "ようこそへ",
|
||||
"signInToContinue": "続行するにはサインインしてください",
|
||||
@@ -1426,6 +1443,160 @@
|
||||
"dark": "ダーク",
|
||||
"system": "システム"
|
||||
},
|
||||
"twoFactor": {
|
||||
"title": "二要素認証",
|
||||
"description": "アカウントにセキュリティ層を追加",
|
||||
"enabled": "アカウントは二要素認証で保護されています",
|
||||
"disabled": "二要素認証は有効になっていません",
|
||||
"setup": {
|
||||
"title": "二要素認証を有効にする",
|
||||
"description": "認証アプリでQRコードをスキャンし、確認コードを入力してください。",
|
||||
"qrCode": "QRコード",
|
||||
"manualEntryKey": "手動入力キー",
|
||||
"verificationCode": "確認コード",
|
||||
"verificationCodePlaceholder": "6桁のコードを入力",
|
||||
"verificationCodeDescription": "認証アプリから6桁のコードを入力してください",
|
||||
"verifyAndEnable": "確認して有効化",
|
||||
"cancel": "キャンセル"
|
||||
},
|
||||
"disable": {
|
||||
"title": "二要素認証を無効にする",
|
||||
"description": "二要素認証を無効にするには、パスワードを入力して確認してください。",
|
||||
"password": "パスワード",
|
||||
"passwordPlaceholder": "パスワードを入力",
|
||||
"confirm": "無効化を確認",
|
||||
"cancel": "キャンセル"
|
||||
},
|
||||
"backupCodes": {
|
||||
"title": "バックアップコード",
|
||||
"description": "これらのバックアップコードを安全な場所に保管してください。認証デバイスを紛失した場合、アカウントへのアクセスに使用できます。",
|
||||
"warning": "重要:",
|
||||
"warningText": "各バックアップコードは1回のみ使用できます。安全に保管し、誰とも共有しないでください。",
|
||||
"generateNew": "新しいバックアップコードを生成",
|
||||
"download": "バックアップコードをダウンロード",
|
||||
"copyToClipboard": "クリップボードにコピー",
|
||||
"savedMessage": "バックアップコードを保存しました",
|
||||
"available": "利用可能なバックアップコード:{count}個",
|
||||
"instructions": [
|
||||
"• これらのコードを安全な場所に保管してください",
|
||||
"• 各バックアップコードは1回のみ使用できます",
|
||||
"• いつでも新しいコードを生成できます"
|
||||
]
|
||||
},
|
||||
"verification": {
|
||||
"title": "二要素認証",
|
||||
"description": "認証アプリから6桁のコードを入力してください",
|
||||
"backupDescription": "続行するにはバックアップコードを入力してください",
|
||||
"verificationCode": "確認コード",
|
||||
"backupCode": "バックアップコード",
|
||||
"verificationCodePlaceholder": "000000",
|
||||
"backupCodePlaceholder": "XXXX-XXXX",
|
||||
"verify": "確認",
|
||||
"verifying": "確認中...",
|
||||
"useBackupCode": "代わりにバックアップコードを使用",
|
||||
"useAuthenticatorCode": "代わりに認証アプリのコードを使用",
|
||||
"rememberDevice": "このデバイスを30日間記憶する",
|
||||
"rememberDeviceDescription": "このデバイスでは30日間2FAコードを入力する必要はありません"
|
||||
},
|
||||
"messages": {
|
||||
"enabledSuccess": "二要素認証が正常に有効化されました!",
|
||||
"disabledSuccess": "二要素認証が正常に無効化されました",
|
||||
"backupCodesGenerated": "新しいバックアップコードが正常に生成されました",
|
||||
"backupCodesCopied": "バックアップコードがクリップボードにコピーされました",
|
||||
"setupFailed": "2FA設定の生成に失敗しました",
|
||||
"verificationFailed": "確認コードが無効です",
|
||||
"disableFailed": "2FAの無効化に失敗しました。パスワードを確認してください。",
|
||||
"backupCodesFailed": "バックアップコードの生成に失敗しました",
|
||||
"backupCodesCopyFailed": "バックアップコードのコピーに失敗しました",
|
||||
"statusLoadFailed": "2FAステータスの読み込みに失敗しました",
|
||||
"enterVerificationCode": "確認コードを入力してください",
|
||||
"enterPassword": "パスワードを入力してください",
|
||||
"deviceTrusted": "このデバイスは30日間信頼できるデバイスとしてマークされました"
|
||||
},
|
||||
"errors": {
|
||||
"invalidVerificationCode": "確認コードが無効です",
|
||||
"invalidTwoFactorCode": "二要素認証コードが無効です",
|
||||
"twoFactorRequired": "二要素認証が必要です",
|
||||
"twoFactorAlreadyEnabled": "二要素認証はすでに有効になっています",
|
||||
"twoFactorNotEnabled": "二要素認証が有効になっていません",
|
||||
"passwordVerificationRequired": "パスワードの確認が必要です",
|
||||
"invalidPassword": "パスワードが無効です",
|
||||
"userNotFound": "ユーザーが見つかりません"
|
||||
},
|
||||
"buttons": {
|
||||
"enable2FA": "2FAを有効にする",
|
||||
"disable2FA": "2FAを無効にする"
|
||||
},
|
||||
"deviceNames": {
|
||||
"unknownDevice": "不明なデバイス",
|
||||
"browsers": {
|
||||
"chrome": "Chrome",
|
||||
"firefox": "Firefox",
|
||||
"safari": "Safari",
|
||||
"edge": "Edge"
|
||||
},
|
||||
"platforms": {
|
||||
"windows": " on Windows",
|
||||
"macos": " on macOS",
|
||||
"linux": " on Linux",
|
||||
"iphone": " on iPhone",
|
||||
"android": " on Android"
|
||||
}
|
||||
},
|
||||
"status": {
|
||||
"label": "状態:",
|
||||
"enabled": "有効",
|
||||
"disabled": "無効"
|
||||
},
|
||||
"trustedDevices": {
|
||||
"title": "信頼済みデバイス - 2FA",
|
||||
"description": "2FA認証が不要なデバイス",
|
||||
"noDevices": "信頼済みデバイスはありません",
|
||||
"deviceName": "デバイス",
|
||||
"addedOn": "追加日",
|
||||
"expiresOn": "有効期限",
|
||||
"remove": "削除",
|
||||
"removeAll": "すべて削除",
|
||||
"confirmRemove": "この信頼済みデバイスを削除してもよろしいですか?",
|
||||
"confirmRemoveAll": "すべての信頼済みデバイスを削除してもよろしいですか?",
|
||||
"deviceRemoved": "信頼済みデバイスが正常に削除されました",
|
||||
"allDevicesRemoved": "すべての信頼済みデバイスが正常に削除されました",
|
||||
"loadFailed": "信頼済みデバイスの読み込みに失敗しました",
|
||||
"removeFailed": "信頼済みデバイスの削除に失敗しました",
|
||||
"removeAllFailed": "すべての信頼済みデバイスの削除に失敗しました",
|
||||
"loading": "信頼済みデバイスを読み込み中...",
|
||||
"noDevicesDescription": "2FA認証時にデバイスを信頼するように選択すると、ここに表示されます",
|
||||
"tableHeaders": {
|
||||
"device": "デバイス",
|
||||
"added": "追加日",
|
||||
"expires": "有効期限",
|
||||
"lastUsed": "最終使用日",
|
||||
"ipAddress": "IPアドレス",
|
||||
"actions": "アクション"
|
||||
},
|
||||
"status": {
|
||||
"never": "なし",
|
||||
"expired": "期限切れ"
|
||||
},
|
||||
"modals": {
|
||||
"removeDevice": {
|
||||
"title": "信頼済みデバイスを削除",
|
||||
"added": "追加日:",
|
||||
"ip": "IP:"
|
||||
},
|
||||
"removeAllDevices": {
|
||||
"title": "すべての信頼済みデバイスを削除",
|
||||
"description": "{count}個の信頼済みデバイスを削除します。すべてのデバイスで再度2FA認証が必要になります。"
|
||||
},
|
||||
"buttons": {
|
||||
"cancel": "キャンセル",
|
||||
"removing": "削除中...",
|
||||
"removeDevice": "デバイスを削除",
|
||||
"removeAllDevices": "すべてのデバイスを削除"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"uploadFile": {
|
||||
"title": "ファイルをアップロード",
|
||||
"selectFile": "ファイルを選択するにはクリックしてください",
|
||||
@@ -1542,98 +1713,5 @@
|
||||
"passwordRequired": "パスワードは必須です",
|
||||
"nameRequired": "名前は必須です",
|
||||
"required": "このフィールドは必須です"
|
||||
},
|
||||
"iconPicker": {
|
||||
"title": "アイコンを選択",
|
||||
"placeholder": "アイコンを選択してください",
|
||||
"searchPlaceholder": "アイコンを検索...",
|
||||
"loadingMore": "アイコンを読み込み中...",
|
||||
"allIconsLoaded": "全{count}個のアイコンを読み込みました",
|
||||
"noIconsFound": "\"{search}\"に一致するアイコンが見つかりませんでした",
|
||||
"tabs": {
|
||||
"all": "すべてのアイコン",
|
||||
"popular": "人気",
|
||||
"auth": "認証プロバイダー"
|
||||
},
|
||||
"stats": "{libraryCount}ライブラリから{iconCount}個のアイコン",
|
||||
"categoryBadge": "{category}({count}個のアイコン)"
|
||||
},
|
||||
"twoFactor": {
|
||||
"title": "二要素認証",
|
||||
"description": "アカウントにセキュリティ層を追加",
|
||||
"enabled": "アカウントは二要素認証で保護されています",
|
||||
"disabled": "二要素認証は有効になっていません",
|
||||
"setup": {
|
||||
"title": "二要素認証を有効にする",
|
||||
"description": "認証アプリでQRコードをスキャンし、確認コードを入力してください。",
|
||||
"qrCode": "QRコード",
|
||||
"manualEntryKey": "手動入力キー",
|
||||
"verificationCode": "確認コード",
|
||||
"verificationCodePlaceholder": "6桁のコードを入力",
|
||||
"verificationCodeDescription": "認証アプリから6桁のコードを入力してください",
|
||||
"verifyAndEnable": "確認して有効化",
|
||||
"cancel": "キャンセル"
|
||||
},
|
||||
"disable": {
|
||||
"title": "二要素認証を無効にする",
|
||||
"description": "二要素認証を無効にするには、パスワードを入力して確認してください。",
|
||||
"password": "パスワード",
|
||||
"passwordPlaceholder": "パスワードを入力",
|
||||
"confirm": "無効化を確認",
|
||||
"cancel": "キャンセル"
|
||||
},
|
||||
"backupCodes": {
|
||||
"title": "バックアップコード",
|
||||
"description": "これらのバックアップコードを安全な場所に保管してください。認証デバイスを紛失した場合、アカウントへのアクセスに使用できます。",
|
||||
"warning": "重要:",
|
||||
"warningText": "各バックアップコードは1回のみ使用できます。安全に保管し、誰とも共有しないでください。",
|
||||
"generateNew": "新しいバックアップコードを生成",
|
||||
"download": "バックアップコードをダウンロード",
|
||||
"copyToClipboard": "クリップボードにコピー",
|
||||
"savedMessage": "バックアップコードを保存しました",
|
||||
"available": "利用可能なバックアップコード:{count}個",
|
||||
"instructions": [
|
||||
"• これらのコードを安全な場所に保管してください",
|
||||
"• 各バックアップコードは1回のみ使用できます",
|
||||
"• いつでも新しいコードを生成できます"
|
||||
]
|
||||
},
|
||||
"verification": {
|
||||
"title": "二要素認証",
|
||||
"description": "認証アプリから6桁のコードを入力してください",
|
||||
"backupDescription": "続行するにはバックアップコードを入力してください",
|
||||
"verificationCode": "確認コード",
|
||||
"backupCode": "バックアップコード",
|
||||
"verificationCodePlaceholder": "000000",
|
||||
"backupCodePlaceholder": "XXXX-XXXX",
|
||||
"verify": "確認",
|
||||
"verifying": "確認中...",
|
||||
"useBackupCode": "代わりにバックアップコードを使用",
|
||||
"useAuthenticatorCode": "代わりに認証アプリのコードを使用"
|
||||
},
|
||||
"messages": {
|
||||
"enabledSuccess": "二要素認証が正常に有効化されました!",
|
||||
"disabledSuccess": "二要素認証が正常に無効化されました",
|
||||
"backupCodesGenerated": "新しいバックアップコードが正常に生成されました",
|
||||
"backupCodesCopied": "バックアップコードがクリップボードにコピーされました",
|
||||
"setupFailed": "2FA設定の生成に失敗しました",
|
||||
"verificationFailed": "確認コードが無効です",
|
||||
"disableFailed": "2FAの無効化に失敗しました。パスワードを確認してください。",
|
||||
"backupCodesFailed": "バックアップコードの生成に失敗しました",
|
||||
"backupCodesCopyFailed": "バックアップコードのコピーに失敗しました",
|
||||
"statusLoadFailed": "2FAステータスの読み込みに失敗しました",
|
||||
"enterVerificationCode": "確認コードを入力してください",
|
||||
"enterPassword": "パスワードを入力してください"
|
||||
},
|
||||
"errors": {
|
||||
"invalidVerificationCode": "確認コードが無効です",
|
||||
"invalidTwoFactorCode": "二要素認証コードが無効です",
|
||||
"twoFactorRequired": "二要素認証が必要です",
|
||||
"twoFactorAlreadyEnabled": "二要素認証はすでに有効になっています",
|
||||
"twoFactorNotEnabled": "二要素認証が有効になっていません",
|
||||
"passwordVerificationRequired": "パスワードの確認が必要です",
|
||||
"invalidPassword": "パスワードが無効です",
|
||||
"userNotFound": "ユーザーが見つかりません"
|
||||
}
|
||||
}
|
||||
}
|
@@ -143,7 +143,8 @@
|
||||
"saving": "저장 중...",
|
||||
"update": "업데이트",
|
||||
"click": "클릭하여",
|
||||
"creating": "생성 중..."
|
||||
"creating": "생성 중...",
|
||||
"loadingSimple": "로딩 중..."
|
||||
},
|
||||
"createShare": {
|
||||
"title": "공유 생성",
|
||||
@@ -189,7 +190,8 @@
|
||||
"Password verification required": "비밀번호 확인이 필요합니다",
|
||||
"Two-factor authentication is already enabled": "2단계 인증이 이미 활성화되어 있습니다",
|
||||
"Two-factor authentication is not enabled": "2단계 인증이 활성화되어 있지 않습니다",
|
||||
"Two-factor authentication required": "2단계 인증이 필요합니다"
|
||||
"Two-factor authentication required": "2단계 인증이 필요합니다",
|
||||
"noUserData": "사용자 데이터가 없습니다"
|
||||
},
|
||||
"fileActions": {
|
||||
"editFile": "파일 편집",
|
||||
@@ -338,6 +340,21 @@
|
||||
},
|
||||
"pageTitle": "홈"
|
||||
},
|
||||
"iconPicker": {
|
||||
"title": "아이콘 선택",
|
||||
"placeholder": "아이콘 선택",
|
||||
"searchPlaceholder": "아이콘 검색...",
|
||||
"loadingMore": "아이콘 더 불러오는 중...",
|
||||
"allIconsLoaded": "모든 {count}개의 아이콘이 로드됨",
|
||||
"noIconsFound": "\"{search}\"에 대한 아이콘을 찾을 수 없습니다",
|
||||
"tabs": {
|
||||
"all": "모든 아이콘",
|
||||
"popular": "인기",
|
||||
"auth": "인증 제공자"
|
||||
},
|
||||
"stats": "{libraryCount}개의 라이브러리에서 {iconCount}개의 아이콘",
|
||||
"categoryBadge": "{category} ({count}개의 아이콘)"
|
||||
},
|
||||
"login": {
|
||||
"welcome": "에 오신 것을 환영합니다",
|
||||
"signInToContinue": "계속하려면 로그인하세요",
|
||||
@@ -1426,6 +1443,160 @@
|
||||
"dark": "다크",
|
||||
"system": "시스템"
|
||||
},
|
||||
"twoFactor": {
|
||||
"title": "2단계 인증",
|
||||
"description": "계정에 추가 보안 계층 추가",
|
||||
"enabled": "귀하의 계정은 2단계 인증으로 보호되고 있습니다",
|
||||
"disabled": "2단계 인증이 활성화되지 않았습니다",
|
||||
"setup": {
|
||||
"title": "2단계 인증 활성화",
|
||||
"description": "인증 앱으로 QR 코드를 스캔한 다음 인증 코드를 입력하세요.",
|
||||
"qrCode": "QR 코드",
|
||||
"manualEntryKey": "수동 입력 키",
|
||||
"verificationCode": "인증 코드",
|
||||
"verificationCodePlaceholder": "6자리 코드 입력",
|
||||
"verificationCodeDescription": "인증 앱에서 6자리 코드를 입력하세요",
|
||||
"verifyAndEnable": "확인 및 활성화",
|
||||
"cancel": "취소"
|
||||
},
|
||||
"disable": {
|
||||
"title": "2단계 인증 비활성화",
|
||||
"description": "2단계 인증 비활성화를 확인하려면 비밀번호를 입력하세요.",
|
||||
"password": "비밀번호",
|
||||
"passwordPlaceholder": "비밀번호 입력",
|
||||
"confirm": "비활성화 확인",
|
||||
"cancel": "취소"
|
||||
},
|
||||
"backupCodes": {
|
||||
"title": "백업 코드",
|
||||
"description": "이 백업 코드를 안전한 곳에 보관하세요. 인증 기기를 분실한 경우 계정에 액세스하는 데 사용할 수 있습니다.",
|
||||
"warning": "중요:",
|
||||
"warningText": "각 백업 코드는 한 번만 사용할 수 있습니다. 안전하게 보관하고 다른 사람과 공유하지 마세요.",
|
||||
"generateNew": "새 백업 코드 생성",
|
||||
"download": "백업 코드 다운로드",
|
||||
"copyToClipboard": "클립보드에 복사",
|
||||
"savedMessage": "백업 코드를 저장했습니다",
|
||||
"available": "사용 가능한 백업 코드 {count}개",
|
||||
"instructions": [
|
||||
"• 이 코드를 안전한 곳에 보관하세요",
|
||||
"• 각 백업 코드는 한 번만 사용할 수 있습니다",
|
||||
"• 언제든지 새 코드를 생성할 수 있습니다"
|
||||
]
|
||||
},
|
||||
"verification": {
|
||||
"title": "2단계 인증",
|
||||
"description": "인증 앱에서 6자리 코드를 입력하세요",
|
||||
"backupDescription": "계속하려면 백업 코드 중 하나를 입력하세요",
|
||||
"verificationCode": "인증 코드",
|
||||
"backupCode": "백업 코드",
|
||||
"verificationCodePlaceholder": "000000",
|
||||
"backupCodePlaceholder": "XXXX-XXXX",
|
||||
"verify": "확인",
|
||||
"verifying": "확인 중...",
|
||||
"useBackupCode": "대신 백업 코드 사용",
|
||||
"useAuthenticatorCode": "대신 인증 앱 코드 사용",
|
||||
"rememberDevice": "이 기기를 30일 동안 기억하기",
|
||||
"rememberDeviceDescription": "30일 동안 이 기기에서 2단계 인증 코드를 입력할 필요가 없습니다"
|
||||
},
|
||||
"messages": {
|
||||
"enabledSuccess": "2단계 인증이 성공적으로 활성화되었습니다!",
|
||||
"disabledSuccess": "2단계 인증이 성공적으로 비활성화되었습니다",
|
||||
"backupCodesGenerated": "새 백업 코드가 성공적으로 생성되었습니다",
|
||||
"backupCodesCopied": "백업 코드가 클립보드에 복사되었습니다",
|
||||
"setupFailed": "2단계 인증 설정 생성 실패",
|
||||
"verificationFailed": "잘못된 인증 코드",
|
||||
"disableFailed": "2단계 인증 비활성화 실패. 비밀번호를 확인하세요.",
|
||||
"backupCodesFailed": "백업 코드 생성 실패",
|
||||
"backupCodesCopyFailed": "백업 코드 복사 실패",
|
||||
"statusLoadFailed": "2단계 인증 상태 로드 실패",
|
||||
"enterVerificationCode": "인증 코드를 입력하세요",
|
||||
"enterPassword": "비밀번호를 입력하세요",
|
||||
"deviceTrusted": "이 기기는 30일 동안 신뢰할 수 있는 기기로 표시되었습니다"
|
||||
},
|
||||
"errors": {
|
||||
"invalidVerificationCode": "잘못된 인증 코드",
|
||||
"invalidTwoFactorCode": "잘못된 2단계 인증 코드",
|
||||
"twoFactorRequired": "2단계 인증이 필요합니다",
|
||||
"twoFactorAlreadyEnabled": "2단계 인증이 이미 활성화되어 있습니다",
|
||||
"twoFactorNotEnabled": "2단계 인증이 활성화되어 있지 않습니다",
|
||||
"passwordVerificationRequired": "비밀번호 확인이 필요합니다",
|
||||
"invalidPassword": "잘못된 비밀번호",
|
||||
"userNotFound": "사용자를 찾을 수 없습니다"
|
||||
},
|
||||
"buttons": {
|
||||
"enable2FA": "2단계 인증 활성화",
|
||||
"disable2FA": "2단계 인증 비활성화"
|
||||
},
|
||||
"deviceNames": {
|
||||
"unknownDevice": "알 수 없는 기기",
|
||||
"browsers": {
|
||||
"chrome": "Chrome",
|
||||
"firefox": "Firefox",
|
||||
"safari": "Safari",
|
||||
"edge": "Edge"
|
||||
},
|
||||
"platforms": {
|
||||
"windows": " Windows에서",
|
||||
"macos": " macOS에서",
|
||||
"linux": " Linux에서",
|
||||
"iphone": " iPhone에서",
|
||||
"android": " Android에서"
|
||||
}
|
||||
},
|
||||
"status": {
|
||||
"label": "상태:",
|
||||
"enabled": "활성화됨",
|
||||
"disabled": "비활성화됨"
|
||||
},
|
||||
"trustedDevices": {
|
||||
"title": "신뢰할 수 있는 기기 - 2단계 인증",
|
||||
"description": "2단계 인증 확인이 필요하지 않은 기기",
|
||||
"noDevices": "신뢰할 수 있는 기기 없음",
|
||||
"deviceName": "기기",
|
||||
"addedOn": "추가된 날짜",
|
||||
"expiresOn": "만료 날짜",
|
||||
"remove": "제거",
|
||||
"removeAll": "모두 제거",
|
||||
"confirmRemove": "이 신뢰할 수 있는 기기를 제거하시겠습니까?",
|
||||
"confirmRemoveAll": "모든 신뢰할 수 있는 기기를 제거하시겠습니까?",
|
||||
"deviceRemoved": "신뢰할 수 있는 기기가 성공적으로 제거되었습니다",
|
||||
"allDevicesRemoved": "모든 신뢰할 수 있는 기기가 성공적으로 제거되었습니다",
|
||||
"loadFailed": "신뢰할 수 있는 기기 로드 실패",
|
||||
"removeFailed": "신뢰할 수 있는 기기 제거 실패",
|
||||
"removeAllFailed": "모든 신뢰할 수 있는 기기 제거 실패",
|
||||
"loading": "신뢰할 수 있는 기기 로드 중...",
|
||||
"noDevicesDescription": "2단계 인증 확인 중에 기기를 신뢰하도록 선택하면 여기에 표시됩니다",
|
||||
"tableHeaders": {
|
||||
"device": "기기",
|
||||
"added": "추가됨",
|
||||
"expires": "만료",
|
||||
"lastUsed": "마지막 사용",
|
||||
"ipAddress": "IP 주소",
|
||||
"actions": "작업"
|
||||
},
|
||||
"status": {
|
||||
"never": "없음",
|
||||
"expired": "만료됨"
|
||||
},
|
||||
"modals": {
|
||||
"removeDevice": {
|
||||
"title": "신뢰할 수 있는 기기 제거",
|
||||
"added": "추가됨:",
|
||||
"ip": "IP:"
|
||||
},
|
||||
"removeAllDevices": {
|
||||
"title": "모든 신뢰할 수 있는 기기 제거",
|
||||
"description": "{count}개의 신뢰할 수 있는 기기를 제거합니다. 모든 기기에서 다시 2단계 인증을 확인해야 합니다."
|
||||
},
|
||||
"buttons": {
|
||||
"cancel": "취소",
|
||||
"removing": "제거 중...",
|
||||
"removeDevice": "기기 제거",
|
||||
"removeAllDevices": "모든 기기 제거"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"uploadFile": {
|
||||
"title": "파일 업로드",
|
||||
"multipleTitle": "여러 파일 업로드",
|
||||
@@ -1542,98 +1713,5 @@
|
||||
"passwordRequired": "비밀번호는 필수입니다",
|
||||
"nameRequired": "이름은 필수입니다",
|
||||
"required": "이 필드는 필수입니다"
|
||||
},
|
||||
"iconPicker": {
|
||||
"title": "아이콘 선택",
|
||||
"placeholder": "아이콘 선택",
|
||||
"searchPlaceholder": "아이콘 검색...",
|
||||
"loadingMore": "아이콘 더 불러오는 중...",
|
||||
"allIconsLoaded": "모든 {count}개의 아이콘이 로드됨",
|
||||
"noIconsFound": "\"{search}\"에 대한 아이콘을 찾을 수 없습니다",
|
||||
"tabs": {
|
||||
"all": "모든 아이콘",
|
||||
"popular": "인기",
|
||||
"auth": "인증 제공자"
|
||||
},
|
||||
"stats": "{libraryCount}개의 라이브러리에서 {iconCount}개의 아이콘",
|
||||
"categoryBadge": "{category} ({count}개의 아이콘)"
|
||||
},
|
||||
"twoFactor": {
|
||||
"title": "2단계 인증",
|
||||
"description": "계정에 추가 보안 계층 추가",
|
||||
"enabled": "귀하의 계정은 2단계 인증으로 보호되고 있습니다",
|
||||
"disabled": "2단계 인증이 활성화되지 않았습니다",
|
||||
"setup": {
|
||||
"title": "2단계 인증 활성화",
|
||||
"description": "인증 앱으로 QR 코드를 스캔한 다음 인증 코드를 입력하세요.",
|
||||
"qrCode": "QR 코드",
|
||||
"manualEntryKey": "수동 입력 키",
|
||||
"verificationCode": "인증 코드",
|
||||
"verificationCodePlaceholder": "6자리 코드 입력",
|
||||
"verificationCodeDescription": "인증 앱에서 6자리 코드를 입력하세요",
|
||||
"verifyAndEnable": "확인 및 활성화",
|
||||
"cancel": "취소"
|
||||
},
|
||||
"disable": {
|
||||
"title": "2단계 인증 비활성화",
|
||||
"description": "2단계 인증 비활성화를 확인하려면 비밀번호를 입력하세요.",
|
||||
"password": "비밀번호",
|
||||
"passwordPlaceholder": "비밀번호 입력",
|
||||
"confirm": "비활성화 확인",
|
||||
"cancel": "취소"
|
||||
},
|
||||
"backupCodes": {
|
||||
"title": "백업 코드",
|
||||
"description": "이 백업 코드를 안전한 곳에 보관하세요. 인증 기기를 분실한 경우 계정에 액세스하는 데 사용할 수 있습니다.",
|
||||
"warning": "중요:",
|
||||
"warningText": "각 백업 코드는 한 번만 사용할 수 있습니다. 안전하게 보관하고 다른 사람과 공유하지 마세요.",
|
||||
"generateNew": "새 백업 코드 생성",
|
||||
"download": "백업 코드 다운로드",
|
||||
"copyToClipboard": "클립보드에 복사",
|
||||
"savedMessage": "백업 코드를 저장했습니다",
|
||||
"available": "사용 가능한 백업 코드 {count}개",
|
||||
"instructions": [
|
||||
"• 이 코드를 안전한 곳에 보관하세요",
|
||||
"• 각 백업 코드는 한 번만 사용할 수 있습니다",
|
||||
"• 언제든지 새 코드를 생성할 수 있습니다"
|
||||
]
|
||||
},
|
||||
"verification": {
|
||||
"title": "2단계 인증",
|
||||
"description": "인증 앱에서 6자리 코드를 입력하세요",
|
||||
"backupDescription": "계속하려면 백업 코드 중 하나를 입력하세요",
|
||||
"verificationCode": "인증 코드",
|
||||
"backupCode": "백업 코드",
|
||||
"verificationCodePlaceholder": "000000",
|
||||
"backupCodePlaceholder": "XXXX-XXXX",
|
||||
"verify": "확인",
|
||||
"verifying": "확인 중...",
|
||||
"useBackupCode": "대신 백업 코드 사용",
|
||||
"useAuthenticatorCode": "대신 인증 앱 코드 사용"
|
||||
},
|
||||
"messages": {
|
||||
"enabledSuccess": "2단계 인증이 성공적으로 활성화되었습니다!",
|
||||
"disabledSuccess": "2단계 인증이 성공적으로 비활성화되었습니다",
|
||||
"backupCodesGenerated": "새 백업 코드가 성공적으로 생성되었습니다",
|
||||
"backupCodesCopied": "백업 코드가 클립보드에 복사되었습니다",
|
||||
"setupFailed": "2단계 인증 설정 생성 실패",
|
||||
"verificationFailed": "잘못된 인증 코드",
|
||||
"disableFailed": "2단계 인증 비활성화 실패. 비밀번호를 확인하세요.",
|
||||
"backupCodesFailed": "백업 코드 생성 실패",
|
||||
"backupCodesCopyFailed": "백업 코드 복사 실패",
|
||||
"statusLoadFailed": "2단계 인증 상태 로드 실패",
|
||||
"enterVerificationCode": "인증 코드를 입력하세요",
|
||||
"enterPassword": "비밀번호를 입력하세요"
|
||||
},
|
||||
"errors": {
|
||||
"invalidVerificationCode": "잘못된 인증 코드",
|
||||
"invalidTwoFactorCode": "잘못된 2단계 인증 코드",
|
||||
"twoFactorRequired": "2단계 인증이 필요합니다",
|
||||
"twoFactorAlreadyEnabled": "2단계 인증이 이미 활성화되어 있습니다",
|
||||
"twoFactorNotEnabled": "2단계 인증이 활성화되어 있지 않습니다",
|
||||
"passwordVerificationRequired": "비밀번호 확인이 필요합니다",
|
||||
"invalidPassword": "잘못된 비밀번호",
|
||||
"userNotFound": "사용자를 찾을 수 없습니다"
|
||||
}
|
||||
}
|
||||
}
|
@@ -143,7 +143,8 @@
|
||||
"saving": "Opslaan...",
|
||||
"update": "Bijwerken",
|
||||
"click": "Klik om",
|
||||
"creating": "Maken..."
|
||||
"creating": "Maken...",
|
||||
"loadingSimple": "Laden..."
|
||||
},
|
||||
"createShare": {
|
||||
"title": "Delen Maken",
|
||||
@@ -189,7 +190,8 @@
|
||||
"Password verification required": "Wachtwoordverificatie vereist",
|
||||
"Two-factor authentication is already enabled": "Tweefactorauthenticatie is al ingeschakeld",
|
||||
"Two-factor authentication is not enabled": "Tweefactorauthenticatie is niet ingeschakeld",
|
||||
"Two-factor authentication required": "Tweefactorauthenticatie vereist"
|
||||
"Two-factor authentication required": "Tweefactorauthenticatie vereist",
|
||||
"noUserData": "Geen gebruikersgegevens"
|
||||
},
|
||||
"fileActions": {
|
||||
"editFile": "Bestand Bewerken",
|
||||
@@ -338,6 +340,21 @@
|
||||
},
|
||||
"pageTitle": "Startpagina"
|
||||
},
|
||||
"iconPicker": {
|
||||
"title": "Selecteer Pictogram",
|
||||
"placeholder": "Selecteer een pictogram",
|
||||
"searchPlaceholder": "Zoek pictogrammen...",
|
||||
"loadingMore": "Meer pictogrammen laden...",
|
||||
"allIconsLoaded": "Alle {count} pictogrammen geladen",
|
||||
"noIconsFound": "Geen pictogrammen gevonden voor \"{search}\"",
|
||||
"tabs": {
|
||||
"all": "Alle Pictogrammen",
|
||||
"popular": "Populair",
|
||||
"auth": "Authenticatie Providers"
|
||||
},
|
||||
"stats": "{iconCount} pictogrammen van {libraryCount} bibliotheken",
|
||||
"categoryBadge": "{category} ({count} pictogrammen)"
|
||||
},
|
||||
"login": {
|
||||
"welcome": "Welkom bij",
|
||||
"signInToContinue": "Log in om door te gaan",
|
||||
@@ -1426,6 +1443,160 @@
|
||||
"dark": "Donker",
|
||||
"system": "Systeem"
|
||||
},
|
||||
"twoFactor": {
|
||||
"title": "Twee-Factor Authenticatie",
|
||||
"description": "Voeg een extra beveiligingslaag toe aan uw account",
|
||||
"enabled": "Uw account is beveiligd met twee-factor authenticatie",
|
||||
"disabled": "Twee-factor authenticatie is niet ingeschakeld",
|
||||
"setup": {
|
||||
"title": "Twee-Factor Authenticatie Inschakelen",
|
||||
"description": "Scan de QR-code met uw authenticator-app en voer vervolgens de verificatiecode in.",
|
||||
"qrCode": "QR-Code",
|
||||
"manualEntryKey": "Handmatige Invoersleutel",
|
||||
"verificationCode": "Verificatiecode",
|
||||
"verificationCodePlaceholder": "Voer 6-cijferige code in",
|
||||
"verificationCodeDescription": "Voer de 6-cijferige code van uw authenticator-app in",
|
||||
"verifyAndEnable": "Verifiëren & Inschakelen",
|
||||
"cancel": "Annuleren"
|
||||
},
|
||||
"disable": {
|
||||
"title": "Twee-Factor Authenticatie Uitschakelen",
|
||||
"description": "Voer uw wachtwoord in om het uitschakelen van twee-factor authenticatie te bevestigen.",
|
||||
"password": "Wachtwoord",
|
||||
"passwordPlaceholder": "Voer uw wachtwoord in",
|
||||
"confirm": "Bevestig Uitschakelen",
|
||||
"cancel": "Annuleren"
|
||||
},
|
||||
"backupCodes": {
|
||||
"title": "Back-upcodes",
|
||||
"description": "Bewaar deze back-upcodes op een veilige plaats. U kunt ze gebruiken om toegang te krijgen tot uw account als u uw authenticator-apparaat verliest.",
|
||||
"warning": "Belangrijk:",
|
||||
"warningText": "Elke back-upcode kan slechts één keer worden gebruikt. Bewaar ze veilig en deel ze met niemand.",
|
||||
"generateNew": "Genereer Nieuwe Back-upcodes",
|
||||
"download": "Download Back-upcodes",
|
||||
"copyToClipboard": "Kopiëren naar Klembord",
|
||||
"savedMessage": "Ik heb mijn back-upcodes opgeslagen",
|
||||
"available": "{count} back-upcodes beschikbaar",
|
||||
"instructions": [
|
||||
"• Bewaar deze codes op een veilige plaats",
|
||||
"• Elke back-upcode kan slechts één keer worden gebruikt",
|
||||
"• U kunt op elk moment nieuwe codes genereren"
|
||||
]
|
||||
},
|
||||
"verification": {
|
||||
"title": "Twee-Factor Authenticatie",
|
||||
"description": "Voer de 6-cijferige code van uw authenticator-app in",
|
||||
"backupDescription": "Voer een van uw back-upcodes in om door te gaan",
|
||||
"verificationCode": "Verificatiecode",
|
||||
"backupCode": "Back-upcode",
|
||||
"verificationCodePlaceholder": "000000",
|
||||
"backupCodePlaceholder": "XXXX-XXXX",
|
||||
"verify": "Verifiëren",
|
||||
"verifying": "Verifiëren...",
|
||||
"useBackupCode": "Gebruik in plaats daarvan een back-upcode",
|
||||
"useAuthenticatorCode": "Gebruik in plaats daarvan authenticator-code",
|
||||
"rememberDevice": "Onthoud dit apparaat voor 30 dagen",
|
||||
"rememberDeviceDescription": "U hoeft gedurende 30 dagen geen 2FA-codes in te voeren op dit apparaat"
|
||||
},
|
||||
"messages": {
|
||||
"enabledSuccess": "Twee-factor authenticatie succesvol ingeschakeld!",
|
||||
"disabledSuccess": "Twee-factor authenticatie succesvol uitgeschakeld",
|
||||
"backupCodesGenerated": "Nieuwe back-upcodes succesvol gegenereerd",
|
||||
"backupCodesCopied": "Back-upcodes gekopieerd naar klembord",
|
||||
"setupFailed": "Genereren van 2FA-configuratie mislukt",
|
||||
"verificationFailed": "Ongeldige verificatiecode",
|
||||
"disableFailed": "Uitschakelen van 2FA mislukt. Controleer uw wachtwoord.",
|
||||
"backupCodesFailed": "Genereren van back-upcodes mislukt",
|
||||
"backupCodesCopyFailed": "Kopiëren van back-upcodes mislukt",
|
||||
"statusLoadFailed": "Laden van 2FA-status mislukt",
|
||||
"enterVerificationCode": "Voer de verificatiecode in",
|
||||
"enterPassword": "Voer uw wachtwoord in",
|
||||
"deviceTrusted": "Dit apparaat is als vertrouwd gemarkeerd voor 30 dagen"
|
||||
},
|
||||
"errors": {
|
||||
"invalidVerificationCode": "Ongeldige verificatiecode",
|
||||
"invalidTwoFactorCode": "Ongeldige twee-factor authenticatiecode",
|
||||
"twoFactorRequired": "Twee-factor authenticatie vereist",
|
||||
"twoFactorAlreadyEnabled": "Twee-factor authenticatie is al ingeschakeld",
|
||||
"twoFactorNotEnabled": "Twee-factor authenticatie is niet ingeschakeld",
|
||||
"passwordVerificationRequired": "Wachtwoordverificatie vereist",
|
||||
"invalidPassword": "Ongeldig wachtwoord",
|
||||
"userNotFound": "Gebruiker niet gevonden"
|
||||
},
|
||||
"buttons": {
|
||||
"enable2FA": "2FA Inschakelen",
|
||||
"disable2FA": "2FA Uitschakelen"
|
||||
},
|
||||
"deviceNames": {
|
||||
"unknownDevice": "Onbekend Apparaat",
|
||||
"browsers": {
|
||||
"chrome": "Chrome",
|
||||
"firefox": "Firefox",
|
||||
"safari": "Safari",
|
||||
"edge": "Edge"
|
||||
},
|
||||
"platforms": {
|
||||
"windows": " op Windows",
|
||||
"macos": " op macOS",
|
||||
"linux": " op Linux",
|
||||
"iphone": " op iPhone",
|
||||
"android": " op Android"
|
||||
}
|
||||
},
|
||||
"status": {
|
||||
"label": "Status:",
|
||||
"enabled": "Ingeschakeld",
|
||||
"disabled": "Uitgeschakeld"
|
||||
},
|
||||
"trustedDevices": {
|
||||
"title": "Vertrouwde Apparaten - 2FA",
|
||||
"description": "Apparaten die geen 2FA-verificatie vereisen",
|
||||
"noDevices": "Geen vertrouwde apparaten",
|
||||
"deviceName": "Apparaat",
|
||||
"addedOn": "Toegevoegd op",
|
||||
"expiresOn": "Verloopt op",
|
||||
"remove": "Verwijderen",
|
||||
"removeAll": "Alles Verwijderen",
|
||||
"confirmRemove": "Weet u zeker dat u dit vertrouwde apparaat wilt verwijderen?",
|
||||
"confirmRemoveAll": "Weet u zeker dat u alle vertrouwde apparaten wilt verwijderen?",
|
||||
"deviceRemoved": "Vertrouwd apparaat succesvol verwijderd",
|
||||
"allDevicesRemoved": "Alle vertrouwde apparaten succesvol verwijderd",
|
||||
"loadFailed": "Laden van vertrouwde apparaten mislukt",
|
||||
"removeFailed": "Verwijderen van vertrouwd apparaat mislukt",
|
||||
"removeAllFailed": "Verwijderen van alle vertrouwde apparaten mislukt",
|
||||
"loading": "Vertrouwde apparaten laden...",
|
||||
"noDevicesDescription": "Apparaten verschijnen hier wanneer u ervoor kiest om ze te vertrouwen tijdens 2FA-verificatie",
|
||||
"tableHeaders": {
|
||||
"device": "Apparaat",
|
||||
"added": "Toegevoegd",
|
||||
"expires": "Verloopt",
|
||||
"lastUsed": "Laatst Gebruikt",
|
||||
"ipAddress": "IP-Adres",
|
||||
"actions": "Acties"
|
||||
},
|
||||
"status": {
|
||||
"never": "Nooit",
|
||||
"expired": "Verlopen"
|
||||
},
|
||||
"modals": {
|
||||
"removeDevice": {
|
||||
"title": "Vertrouwd Apparaat Verwijderen",
|
||||
"added": "Toegevoegd:",
|
||||
"ip": "IP:"
|
||||
},
|
||||
"removeAllDevices": {
|
||||
"title": "Alle Vertrouwde Apparaten Verwijderen",
|
||||
"description": "Dit zal {count} vertrouwd{count, plural, =1 { apparaat} other {e apparaten}} verwijderen. U moet 2FA opnieuw verifiëren op alle apparaten."
|
||||
},
|
||||
"buttons": {
|
||||
"cancel": "Annuleren",
|
||||
"removing": "Verwijderen...",
|
||||
"removeDevice": "Apparaat Verwijderen",
|
||||
"removeAllDevices": "Alle Apparaten Verwijderen"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"uploadFile": {
|
||||
"title": "Bestand uploaden",
|
||||
"multipleTitle": "Meerdere Bestanden Uploaden",
|
||||
@@ -1542,98 +1713,5 @@
|
||||
"passwordMinLength": "Wachtwoord moet minimaal 6 tekens bevatten",
|
||||
"nameRequired": "Naam is verplicht",
|
||||
"required": "Dit veld is verplicht"
|
||||
},
|
||||
"iconPicker": {
|
||||
"title": "Selecteer Pictogram",
|
||||
"placeholder": "Selecteer een pictogram",
|
||||
"searchPlaceholder": "Zoek pictogrammen...",
|
||||
"loadingMore": "Meer pictogrammen laden...",
|
||||
"allIconsLoaded": "Alle {count} pictogrammen geladen",
|
||||
"noIconsFound": "Geen pictogrammen gevonden voor \"{search}\"",
|
||||
"tabs": {
|
||||
"all": "Alle Pictogrammen",
|
||||
"popular": "Populair",
|
||||
"auth": "Authenticatie Providers"
|
||||
},
|
||||
"stats": "{iconCount} pictogrammen van {libraryCount} bibliotheken",
|
||||
"categoryBadge": "{category} ({count} pictogrammen)"
|
||||
},
|
||||
"twoFactor": {
|
||||
"title": "Twee-Factor Authenticatie",
|
||||
"description": "Voeg een extra beveiligingslaag toe aan uw account",
|
||||
"enabled": "Uw account is beveiligd met twee-factor authenticatie",
|
||||
"disabled": "Twee-factor authenticatie is niet ingeschakeld",
|
||||
"setup": {
|
||||
"title": "Twee-Factor Authenticatie Inschakelen",
|
||||
"description": "Scan de QR-code met uw authenticator-app en voer vervolgens de verificatiecode in.",
|
||||
"qrCode": "QR-Code",
|
||||
"manualEntryKey": "Handmatige Invoersleutel",
|
||||
"verificationCode": "Verificatiecode",
|
||||
"verificationCodePlaceholder": "Voer 6-cijferige code in",
|
||||
"verificationCodeDescription": "Voer de 6-cijferige code van uw authenticator-app in",
|
||||
"verifyAndEnable": "Verifiëren & Inschakelen",
|
||||
"cancel": "Annuleren"
|
||||
},
|
||||
"disable": {
|
||||
"title": "Twee-Factor Authenticatie Uitschakelen",
|
||||
"description": "Voer uw wachtwoord in om het uitschakelen van twee-factor authenticatie te bevestigen.",
|
||||
"password": "Wachtwoord",
|
||||
"passwordPlaceholder": "Voer uw wachtwoord in",
|
||||
"confirm": "Bevestig Uitschakelen",
|
||||
"cancel": "Annuleren"
|
||||
},
|
||||
"backupCodes": {
|
||||
"title": "Back-upcodes",
|
||||
"description": "Bewaar deze back-upcodes op een veilige plaats. U kunt ze gebruiken om toegang te krijgen tot uw account als u uw authenticator-apparaat verliest.",
|
||||
"warning": "Belangrijk:",
|
||||
"warningText": "Elke back-upcode kan slechts één keer worden gebruikt. Bewaar ze veilig en deel ze met niemand.",
|
||||
"generateNew": "Genereer Nieuwe Back-upcodes",
|
||||
"download": "Download Back-upcodes",
|
||||
"copyToClipboard": "Kopiëren naar Klembord",
|
||||
"savedMessage": "Ik heb mijn back-upcodes opgeslagen",
|
||||
"available": "{count} back-upcodes beschikbaar",
|
||||
"instructions": [
|
||||
"• Bewaar deze codes op een veilige plaats",
|
||||
"• Elke back-upcode kan slechts één keer worden gebruikt",
|
||||
"• U kunt op elk moment nieuwe codes genereren"
|
||||
]
|
||||
},
|
||||
"verification": {
|
||||
"title": "Twee-Factor Authenticatie",
|
||||
"description": "Voer de 6-cijferige code van uw authenticator-app in",
|
||||
"backupDescription": "Voer een van uw back-upcodes in om door te gaan",
|
||||
"verificationCode": "Verificatiecode",
|
||||
"backupCode": "Back-upcode",
|
||||
"verificationCodePlaceholder": "000000",
|
||||
"backupCodePlaceholder": "XXXX-XXXX",
|
||||
"verify": "Verifiëren",
|
||||
"verifying": "Verifiëren...",
|
||||
"useBackupCode": "Gebruik in plaats daarvan een back-upcode",
|
||||
"useAuthenticatorCode": "Gebruik in plaats daarvan authenticator-code"
|
||||
},
|
||||
"messages": {
|
||||
"enabledSuccess": "Twee-factor authenticatie succesvol ingeschakeld!",
|
||||
"disabledSuccess": "Twee-factor authenticatie succesvol uitgeschakeld",
|
||||
"backupCodesGenerated": "Nieuwe back-upcodes succesvol gegenereerd",
|
||||
"backupCodesCopied": "Back-upcodes gekopieerd naar klembord",
|
||||
"setupFailed": "Genereren van 2FA-configuratie mislukt",
|
||||
"verificationFailed": "Ongeldige verificatiecode",
|
||||
"disableFailed": "Uitschakelen van 2FA mislukt. Controleer uw wachtwoord.",
|
||||
"backupCodesFailed": "Genereren van back-upcodes mislukt",
|
||||
"backupCodesCopyFailed": "Kopiëren van back-upcodes mislukt",
|
||||
"statusLoadFailed": "Laden van 2FA-status mislukt",
|
||||
"enterVerificationCode": "Voer de verificatiecode in",
|
||||
"enterPassword": "Voer uw wachtwoord in"
|
||||
},
|
||||
"errors": {
|
||||
"invalidVerificationCode": "Ongeldige verificatiecode",
|
||||
"invalidTwoFactorCode": "Ongeldige twee-factor authenticatiecode",
|
||||
"twoFactorRequired": "Twee-factor authenticatie vereist",
|
||||
"twoFactorAlreadyEnabled": "Twee-factor authenticatie is al ingeschakeld",
|
||||
"twoFactorNotEnabled": "Twee-factor authenticatie is niet ingeschakeld",
|
||||
"passwordVerificationRequired": "Wachtwoordverificatie vereist",
|
||||
"invalidPassword": "Ongeldig wachtwoord",
|
||||
"userNotFound": "Gebruiker niet gevonden"
|
||||
}
|
||||
}
|
||||
}
|
@@ -143,7 +143,8 @@
|
||||
"dashboard": "Panel główny",
|
||||
"back": "Wróć",
|
||||
"click": "Kliknij, aby",
|
||||
"creating": "Tworzenie..."
|
||||
"creating": "Tworzenie...",
|
||||
"loadingSimple": "Ładowanie..."
|
||||
},
|
||||
"createShare": {
|
||||
"title": "Utwórz Udostępnienie",
|
||||
@@ -189,7 +190,8 @@
|
||||
"Password verification required": "Wymagana weryfikacja hasła",
|
||||
"Two-factor authentication is already enabled": "Uwierzytelnianie dwuskładnikowe jest już włączone",
|
||||
"Two-factor authentication is not enabled": "Uwierzytelnianie dwuskładnikowe nie jest włączone",
|
||||
"Two-factor authentication required": "Wymagane uwierzytelnianie dwuskładnikowe"
|
||||
"Two-factor authentication required": "Wymagane uwierzytelnianie dwuskładnikowe",
|
||||
"noUserData": "Brak danych użytkownika"
|
||||
},
|
||||
"fileActions": {
|
||||
"editFile": "Edytuj plik",
|
||||
@@ -338,6 +340,21 @@
|
||||
},
|
||||
"pageTitle": "Strona główna"
|
||||
},
|
||||
"iconPicker": {
|
||||
"title": "Wybierz ikonę",
|
||||
"placeholder": "Wybierz ikonę",
|
||||
"searchPlaceholder": "Szukaj ikon...",
|
||||
"loadingMore": "Ładowanie kolejnych ikon...",
|
||||
"allIconsLoaded": "Załadowano wszystkie {count} ikon",
|
||||
"noIconsFound": "Nie znaleziono ikon dla \"{search}\"",
|
||||
"tabs": {
|
||||
"all": "Wszystkie ikony",
|
||||
"popular": "Popularne",
|
||||
"auth": "Dostawcy uwierzytelniania"
|
||||
},
|
||||
"stats": "{iconCount} ikon z {libraryCount} bibliotek",
|
||||
"categoryBadge": "{category} ({count} ikon)"
|
||||
},
|
||||
"login": {
|
||||
"welcome": "Witaj w",
|
||||
"signInToContinue": "Zaloguj się, aby kontynuować",
|
||||
@@ -1426,6 +1443,160 @@
|
||||
"dark": "Ciemny",
|
||||
"system": "Systemowy"
|
||||
},
|
||||
"twoFactor": {
|
||||
"title": "Uwierzytelnianie dwuskładnikowe",
|
||||
"description": "Dodaj dodatkową warstwę zabezpieczeń do swojego konta",
|
||||
"enabled": "Twoje konto jest chronione uwierzytelnianiem dwuskładnikowym",
|
||||
"disabled": "Uwierzytelnianie dwuskładnikowe nie jest włączone",
|
||||
"setup": {
|
||||
"title": "Włącz uwierzytelnianie dwuskładnikowe",
|
||||
"description": "Zeskanuj kod QR za pomocą aplikacji uwierzytelniającej, a następnie wprowadź kod weryfikacyjny.",
|
||||
"qrCode": "Kod QR",
|
||||
"manualEntryKey": "Klucz do ręcznego wprowadzenia",
|
||||
"verificationCode": "Kod weryfikacyjny",
|
||||
"verificationCodePlaceholder": "Wprowadź 6-cyfrowy kod",
|
||||
"verificationCodeDescription": "Wprowadź 6-cyfrowy kod z aplikacji uwierzytelniającej",
|
||||
"verifyAndEnable": "Zweryfikuj i włącz",
|
||||
"cancel": "Anuluj"
|
||||
},
|
||||
"disable": {
|
||||
"title": "Wyłącz uwierzytelnianie dwuskładnikowe",
|
||||
"description": "Wprowadź hasło, aby potwierdzić wyłączenie uwierzytelniania dwuskładnikowego.",
|
||||
"password": "Hasło",
|
||||
"passwordPlaceholder": "Wprowadź swoje hasło",
|
||||
"confirm": "Potwierdź wyłączenie",
|
||||
"cancel": "Anuluj"
|
||||
},
|
||||
"backupCodes": {
|
||||
"title": "Kody zapasowe",
|
||||
"description": "Zapisz te kody zapasowe w bezpiecznym miejscu. Możesz ich użyć, aby uzyskać dostęp do swojego konta w przypadku utraty urządzenia uwierzytelniającego.",
|
||||
"warning": "Ważne:",
|
||||
"warningText": "Każdy kod zapasowy może być użyty tylko raz. Przechowuj je bezpiecznie i nie udostępniaj nikomu.",
|
||||
"generateNew": "Wygeneruj nowe kody zapasowe",
|
||||
"download": "Pobierz kody zapasowe",
|
||||
"copyToClipboard": "Kopiuj do schowka",
|
||||
"savedMessage": "Zapisałem moje kody zapasowe",
|
||||
"available": "{count} dostępnych kodów zapasowych",
|
||||
"instructions": [
|
||||
"• Zapisz te kody w bezpiecznym miejscu",
|
||||
"• Każdy kod zapasowy może być użyty tylko raz",
|
||||
"• Możesz wygenerować nowe kody w dowolnym momencie"
|
||||
]
|
||||
},
|
||||
"verification": {
|
||||
"title": "Uwierzytelnianie dwuskładnikowe",
|
||||
"description": "Wprowadź 6-cyfrowy kod z aplikacji uwierzytelniającej",
|
||||
"backupDescription": "Wprowadź jeden z kodów zapasowych, aby kontynuować",
|
||||
"verificationCode": "Kod weryfikacyjny",
|
||||
"backupCode": "Kod zapasowy",
|
||||
"verificationCodePlaceholder": "000000",
|
||||
"backupCodePlaceholder": "XXXX-XXXX",
|
||||
"verify": "Zweryfikuj",
|
||||
"verifying": "Weryfikacja...",
|
||||
"useBackupCode": "Użyj kodu zapasowego",
|
||||
"useAuthenticatorCode": "Użyj kodu z aplikacji uwierzytelniającej",
|
||||
"rememberDevice": "Zapamiętaj to urządzenie na 30 dni",
|
||||
"rememberDeviceDescription": "Nie będziesz musiał wprowadzać kodów 2FA na tym urządzeniu przez 30 dni"
|
||||
},
|
||||
"messages": {
|
||||
"enabledSuccess": "Uwierzytelnianie dwuskładnikowe zostało pomyślnie włączone!",
|
||||
"disabledSuccess": "Uwierzytelnianie dwuskładnikowe zostało pomyślnie wyłączone",
|
||||
"backupCodesGenerated": "Nowe kody zapasowe zostały pomyślnie wygenerowane",
|
||||
"backupCodesCopied": "Kody zapasowe skopiowane do schowka",
|
||||
"setupFailed": "Nie udało się wygenerować konfiguracji 2FA",
|
||||
"verificationFailed": "Nieprawidłowy kod weryfikacyjny",
|
||||
"disableFailed": "Nie udało się wyłączyć 2FA. Sprawdź swoje hasło.",
|
||||
"backupCodesFailed": "Nie udało się wygenerować kodów zapasowych",
|
||||
"backupCodesCopyFailed": "Nie udało się skopiować kodów zapasowych",
|
||||
"statusLoadFailed": "Nie udało się załadować statusu 2FA",
|
||||
"enterVerificationCode": "Wprowadź kod weryfikacyjny",
|
||||
"enterPassword": "Wprowadź swoje hasło",
|
||||
"deviceTrusted": "To urządzenie zostało oznaczone jako zaufane na 30 dni"
|
||||
},
|
||||
"errors": {
|
||||
"invalidVerificationCode": "Nieprawidłowy kod weryfikacyjny",
|
||||
"invalidTwoFactorCode": "Nieprawidłowy kod uwierzytelniania dwuskładnikowego",
|
||||
"twoFactorRequired": "Wymagane uwierzytelnianie dwuskładnikowe",
|
||||
"twoFactorAlreadyEnabled": "Uwierzytelnianie dwuskładnikowe jest już włączone",
|
||||
"twoFactorNotEnabled": "Uwierzytelnianie dwuskładnikowe nie jest włączone",
|
||||
"passwordVerificationRequired": "Wymagana weryfikacja hasła",
|
||||
"invalidPassword": "Nieprawidłowe hasło",
|
||||
"userNotFound": "Nie znaleziono użytkownika"
|
||||
},
|
||||
"buttons": {
|
||||
"enable2FA": "Włącz 2FA",
|
||||
"disable2FA": "Wyłącz 2FA"
|
||||
},
|
||||
"deviceNames": {
|
||||
"unknownDevice": "Nieznane urządzenie",
|
||||
"browsers": {
|
||||
"chrome": "Chrome",
|
||||
"firefox": "Firefox",
|
||||
"safari": "Safari",
|
||||
"edge": "Edge"
|
||||
},
|
||||
"platforms": {
|
||||
"windows": " na Windows",
|
||||
"macos": " na macOS",
|
||||
"linux": " na Linux",
|
||||
"iphone": " na iPhone",
|
||||
"android": " na Android"
|
||||
}
|
||||
},
|
||||
"status": {
|
||||
"label": "Status:",
|
||||
"enabled": "Włączone",
|
||||
"disabled": "Wyłączone"
|
||||
},
|
||||
"trustedDevices": {
|
||||
"title": "Zaufane urządzenia - 2FA",
|
||||
"description": "Urządzenia, które nie wymagają weryfikacji 2FA",
|
||||
"noDevices": "Brak zaufanych urządzeń",
|
||||
"deviceName": "Urządzenie",
|
||||
"addedOn": "Dodano",
|
||||
"expiresOn": "Wygasa",
|
||||
"remove": "Usuń",
|
||||
"removeAll": "Usuń wszystkie",
|
||||
"confirmRemove": "Czy na pewno chcesz usunąć to zaufane urządzenie?",
|
||||
"confirmRemoveAll": "Czy na pewno chcesz usunąć wszystkie zaufane urządzenia?",
|
||||
"deviceRemoved": "Zaufane urządzenie zostało pomyślnie usunięte",
|
||||
"allDevicesRemoved": "Wszystkie zaufane urządzenia zostały pomyślnie usunięte",
|
||||
"loadFailed": "Nie udało się załadować zaufanych urządzeń",
|
||||
"removeFailed": "Nie udało się usunąć zaufanego urządzenia",
|
||||
"removeAllFailed": "Nie udało się usunąć wszystkich zaufanych urządzeń",
|
||||
"loading": "Ładowanie zaufanych urządzeń...",
|
||||
"noDevicesDescription": "Urządzenia pojawią się tutaj, gdy zdecydujesz się im zaufać podczas weryfikacji 2FA",
|
||||
"tableHeaders": {
|
||||
"device": "Urządzenie",
|
||||
"added": "Dodano",
|
||||
"expires": "Wygasa",
|
||||
"lastUsed": "Ostatnio użyte",
|
||||
"ipAddress": "Adres IP",
|
||||
"actions": "Akcje"
|
||||
},
|
||||
"status": {
|
||||
"never": "Nigdy",
|
||||
"expired": "Wygasło"
|
||||
},
|
||||
"modals": {
|
||||
"removeDevice": {
|
||||
"title": "Usuń zaufane urządzenie",
|
||||
"added": "Dodano:",
|
||||
"ip": "IP:"
|
||||
},
|
||||
"removeAllDevices": {
|
||||
"title": "Usuń wszystkie zaufane urządzenia",
|
||||
"description": "Spowoduje to usunięcie {count} zaufanych urządzeń. Będziesz musiał zweryfikować 2FA na wszystkich urządzeniach ponownie."
|
||||
},
|
||||
"buttons": {
|
||||
"cancel": "Anuluj",
|
||||
"removing": "Usuwanie...",
|
||||
"removeDevice": "Usuń urządzenie",
|
||||
"removeAllDevices": "Usuń wszystkie urządzenia"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"uploadFile": {
|
||||
"title": "Prześlij plik",
|
||||
"multipleTitle": "Prześlij pliki",
|
||||
@@ -1542,98 +1713,5 @@
|
||||
"passwordMinLength": "Hasło musi mieć co najmniej 6 znaków",
|
||||
"nameRequired": "Nazwa jest wymagana",
|
||||
"required": "To pole jest wymagane"
|
||||
},
|
||||
"iconPicker": {
|
||||
"title": "Wybierz ikonę",
|
||||
"placeholder": "Wybierz ikonę",
|
||||
"searchPlaceholder": "Szukaj ikon...",
|
||||
"loadingMore": "Ładowanie kolejnych ikon...",
|
||||
"allIconsLoaded": "Załadowano wszystkie {count} ikon",
|
||||
"noIconsFound": "Nie znaleziono ikon dla \"{search}\"",
|
||||
"tabs": {
|
||||
"all": "Wszystkie ikony",
|
||||
"popular": "Popularne",
|
||||
"auth": "Dostawcy uwierzytelniania"
|
||||
},
|
||||
"stats": "{iconCount} ikon z {libraryCount} bibliotek",
|
||||
"categoryBadge": "{category} ({count} ikon)"
|
||||
},
|
||||
"twoFactor": {
|
||||
"title": "Uwierzytelnianie dwuskładnikowe",
|
||||
"description": "Dodaj dodatkową warstwę zabezpieczeń do swojego konta",
|
||||
"enabled": "Twoje konto jest chronione uwierzytelnianiem dwuskładnikowym",
|
||||
"disabled": "Uwierzytelnianie dwuskładnikowe nie jest włączone",
|
||||
"setup": {
|
||||
"title": "Włącz uwierzytelnianie dwuskładnikowe",
|
||||
"description": "Zeskanuj kod QR za pomocą aplikacji uwierzytelniającej, a następnie wprowadź kod weryfikacyjny.",
|
||||
"qrCode": "Kod QR",
|
||||
"manualEntryKey": "Klucz do ręcznego wprowadzenia",
|
||||
"verificationCode": "Kod weryfikacyjny",
|
||||
"verificationCodePlaceholder": "Wprowadź 6-cyfrowy kod",
|
||||
"verificationCodeDescription": "Wprowadź 6-cyfrowy kod z aplikacji uwierzytelniającej",
|
||||
"verifyAndEnable": "Zweryfikuj i włącz",
|
||||
"cancel": "Anuluj"
|
||||
},
|
||||
"disable": {
|
||||
"title": "Wyłącz uwierzytelnianie dwuskładnikowe",
|
||||
"description": "Wprowadź hasło, aby potwierdzić wyłączenie uwierzytelniania dwuskładnikowego.",
|
||||
"password": "Hasło",
|
||||
"passwordPlaceholder": "Wprowadź swoje hasło",
|
||||
"confirm": "Potwierdź wyłączenie",
|
||||
"cancel": "Anuluj"
|
||||
},
|
||||
"backupCodes": {
|
||||
"title": "Kody zapasowe",
|
||||
"description": "Zapisz te kody zapasowe w bezpiecznym miejscu. Możesz ich użyć, aby uzyskać dostęp do swojego konta w przypadku utraty urządzenia uwierzytelniającego.",
|
||||
"warning": "Ważne:",
|
||||
"warningText": "Każdy kod zapasowy może być użyty tylko raz. Przechowuj je bezpiecznie i nie udostępniaj nikomu.",
|
||||
"generateNew": "Wygeneruj nowe kody zapasowe",
|
||||
"download": "Pobierz kody zapasowe",
|
||||
"copyToClipboard": "Kopiuj do schowka",
|
||||
"savedMessage": "Zapisałem moje kody zapasowe",
|
||||
"available": "{count} dostępnych kodów zapasowych",
|
||||
"instructions": [
|
||||
"• Zapisz te kody w bezpiecznym miejscu",
|
||||
"• Każdy kod zapasowy może być użyty tylko raz",
|
||||
"• Możesz wygenerować nowe kody w dowolnym momencie"
|
||||
]
|
||||
},
|
||||
"verification": {
|
||||
"title": "Uwierzytelnianie dwuskładnikowe",
|
||||
"description": "Wprowadź 6-cyfrowy kod z aplikacji uwierzytelniającej",
|
||||
"backupDescription": "Wprowadź jeden z kodów zapasowych, aby kontynuować",
|
||||
"verificationCode": "Kod weryfikacyjny",
|
||||
"backupCode": "Kod zapasowy",
|
||||
"verificationCodePlaceholder": "000000",
|
||||
"backupCodePlaceholder": "XXXX-XXXX",
|
||||
"verify": "Zweryfikuj",
|
||||
"verifying": "Weryfikacja...",
|
||||
"useBackupCode": "Użyj kodu zapasowego",
|
||||
"useAuthenticatorCode": "Użyj kodu z aplikacji uwierzytelniającej"
|
||||
},
|
||||
"messages": {
|
||||
"enabledSuccess": "Uwierzytelnianie dwuskładnikowe zostało pomyślnie włączone!",
|
||||
"disabledSuccess": "Uwierzytelnianie dwuskładnikowe zostało pomyślnie wyłączone",
|
||||
"backupCodesGenerated": "Nowe kody zapasowe zostały pomyślnie wygenerowane",
|
||||
"backupCodesCopied": "Kody zapasowe skopiowane do schowka",
|
||||
"setupFailed": "Nie udało się wygenerować konfiguracji 2FA",
|
||||
"verificationFailed": "Nieprawidłowy kod weryfikacyjny",
|
||||
"disableFailed": "Nie udało się wyłączyć 2FA. Sprawdź swoje hasło.",
|
||||
"backupCodesFailed": "Nie udało się wygenerować kodów zapasowych",
|
||||
"backupCodesCopyFailed": "Nie udało się skopiować kodów zapasowych",
|
||||
"statusLoadFailed": "Nie udało się załadować statusu 2FA",
|
||||
"enterVerificationCode": "Wprowadź kod weryfikacyjny",
|
||||
"enterPassword": "Wprowadź swoje hasło"
|
||||
},
|
||||
"errors": {
|
||||
"invalidVerificationCode": "Nieprawidłowy kod weryfikacyjny",
|
||||
"invalidTwoFactorCode": "Nieprawidłowy kod uwierzytelniania dwuskładnikowego",
|
||||
"twoFactorRequired": "Wymagane uwierzytelnianie dwuskładnikowe",
|
||||
"twoFactorAlreadyEnabled": "Uwierzytelnianie dwuskładnikowe jest już włączone",
|
||||
"twoFactorNotEnabled": "Uwierzytelnianie dwuskładnikowe nie jest włączone",
|
||||
"passwordVerificationRequired": "Wymagana weryfikacja hasła",
|
||||
"invalidPassword": "Nieprawidłowe hasło",
|
||||
"userNotFound": "Nie znaleziono użytkownika"
|
||||
}
|
||||
}
|
||||
}
|
@@ -143,7 +143,8 @@
|
||||
"saving": "Salvando...",
|
||||
"update": "Atualizar",
|
||||
"creating": "Criando...",
|
||||
"click": "Clique para"
|
||||
"click": "Clique para",
|
||||
"loadingSimple": "Carregando..."
|
||||
},
|
||||
"createShare": {
|
||||
"title": "Criar compartilhamento",
|
||||
@@ -189,7 +190,8 @@
|
||||
"Password verification required": "Verificação de senha necessária",
|
||||
"Two-factor authentication is already enabled": "A autenticação de dois fatores já está ativada",
|
||||
"Two-factor authentication is not enabled": "A autenticação de dois fatores não está ativada",
|
||||
"Two-factor authentication required": "Autenticação de dois fatores necessária"
|
||||
"Two-factor authentication required": "Autenticação de dois fatores necessária",
|
||||
"noUserData": "Nenhum dado do usuário"
|
||||
},
|
||||
"fileActions": {
|
||||
"editFile": "Editar arquivo",
|
||||
@@ -338,6 +340,21 @@
|
||||
},
|
||||
"pageTitle": "Início"
|
||||
},
|
||||
"iconPicker": {
|
||||
"title": "Selecionar ícone",
|
||||
"placeholder": "Selecione um ícone",
|
||||
"searchPlaceholder": "Pesquisar ícones...",
|
||||
"loadingMore": "Carregando mais ícones...",
|
||||
"allIconsLoaded": "Todos os {count} ícones carregados",
|
||||
"noIconsFound": "Nenhum ícone encontrado para \"{search}\"",
|
||||
"tabs": {
|
||||
"all": "Todos os ícones",
|
||||
"popular": "Populares",
|
||||
"auth": "Provedores de autenticação"
|
||||
},
|
||||
"stats": "{iconCount} ícones de {libraryCount} bibliotecas",
|
||||
"categoryBadge": "{category} ({count} ícones)"
|
||||
},
|
||||
"login": {
|
||||
"welcome": "Bem-vindo ao",
|
||||
"signInToContinue": "Faça login para continuar",
|
||||
@@ -1426,6 +1443,160 @@
|
||||
"dark": "Escuro",
|
||||
"system": "Sistema"
|
||||
},
|
||||
"twoFactor": {
|
||||
"title": "Autenticação de dois fatores",
|
||||
"description": "Adicione uma camada extra de segurança à sua conta",
|
||||
"enabled": "Sua conta está protegida com autenticação de dois fatores",
|
||||
"disabled": "A autenticação de dois fatores não está ativada",
|
||||
"setup": {
|
||||
"title": "Ativar autenticação de dois fatores",
|
||||
"description": "Escaneie o código QR com seu aplicativo autenticador e depois insira o código de verificação.",
|
||||
"qrCode": "Código QR",
|
||||
"manualEntryKey": "Chave de Entrada Manual",
|
||||
"verificationCode": "Código de Verificação",
|
||||
"verificationCodePlaceholder": "Digite o código de 6 dígitos",
|
||||
"verificationCodeDescription": "Digite o código de 6 dígitos do seu aplicativo autenticador",
|
||||
"verifyAndEnable": "Verificar e ativar",
|
||||
"cancel": "Cancelar"
|
||||
},
|
||||
"disable": {
|
||||
"title": "Desativar autenticação de dois fatores",
|
||||
"description": "Digite sua senha para confirmar a desativação da autenticação de dois fatores.",
|
||||
"password": "Senha",
|
||||
"passwordPlaceholder": "Digite sua senha",
|
||||
"confirm": "Confirmar Desativação",
|
||||
"cancel": "Cancelar"
|
||||
},
|
||||
"backupCodes": {
|
||||
"title": "Códigos de backup",
|
||||
"description": "Salve estes códigos de backup em um local seguro. Você pode usá-los para acessar sua conta se perder seu dispositivo autenticador.",
|
||||
"warning": "Importante:",
|
||||
"warningText": "Cada código de backup só pode ser usado uma vez. Mantenha-os seguros e não os compartilhe com ninguém.",
|
||||
"generateNew": "Gerar novos códigos de backup",
|
||||
"download": "Baixar códigos de backup",
|
||||
"copyToClipboard": "Copiar para área de transferência",
|
||||
"savedMessage": "Salvei meus códigos de backup",
|
||||
"available": "{count} códigos de backup disponíveis",
|
||||
"instructions": [
|
||||
"• Salve estes códigos em um local seguro",
|
||||
"• Cada código de backup só pode ser usado uma vez",
|
||||
"• Você pode gerar novos códigos a qualquer momento"
|
||||
]
|
||||
},
|
||||
"verification": {
|
||||
"title": "Autenticação de dois fatores",
|
||||
"description": "Digite o código de 6 dígitos do seu aplicativo autenticador",
|
||||
"backupDescription": "Digite um dos seus códigos de backup para continuar",
|
||||
"verificationCode": "Código de verificação",
|
||||
"backupCode": "Código de backup",
|
||||
"verificationCodePlaceholder": "000000",
|
||||
"backupCodePlaceholder": "XXXX-XXXX",
|
||||
"verify": "Verificar",
|
||||
"verifying": "Verificando...",
|
||||
"useBackupCode": "Usar código de backup",
|
||||
"useAuthenticatorCode": "Usar código do autenticador",
|
||||
"rememberDevice": "Lembrar este dispositivo por 30 dias",
|
||||
"rememberDeviceDescription": "Você não precisará inserir códigos 2FA neste dispositivo por 30 dias"
|
||||
},
|
||||
"messages": {
|
||||
"enabledSuccess": "Autenticação de dois fatores ativada com sucesso!",
|
||||
"disabledSuccess": "Autenticação de dois fatores desativada com sucesso",
|
||||
"backupCodesGenerated": "Novos códigos de backup gerados com sucesso",
|
||||
"backupCodesCopied": "Códigos de backup copiados para a área de transferência",
|
||||
"setupFailed": "Falha ao gerar configuração 2FA",
|
||||
"verificationFailed": "Código de verificação inválido",
|
||||
"disableFailed": "Falha ao desativar 2FA. Por favor, verifique sua senha.",
|
||||
"backupCodesFailed": "Falha ao gerar códigos de backup",
|
||||
"backupCodesCopyFailed": "Falha ao copiar códigos de backup",
|
||||
"statusLoadFailed": "Falha ao carregar status do 2FA",
|
||||
"enterVerificationCode": "Por favor, digite o código de verificação",
|
||||
"enterPassword": "Por favor, digite sua senha",
|
||||
"deviceTrusted": "Este dispositivo foi marcado como confiável por 30 dias"
|
||||
},
|
||||
"errors": {
|
||||
"invalidVerificationCode": "Código de verificação inválido",
|
||||
"invalidTwoFactorCode": "Código de autenticação de dois fatores inválido",
|
||||
"twoFactorRequired": "Autenticação de dois fatores necessária",
|
||||
"twoFactorAlreadyEnabled": "A autenticação de dois fatores já está ativada",
|
||||
"twoFactorNotEnabled": "A autenticação de dois fatores não está ativada",
|
||||
"passwordVerificationRequired": "Verificação de senha necessária",
|
||||
"invalidPassword": "Senha inválida",
|
||||
"userNotFound": "Usuário não encontrado"
|
||||
},
|
||||
"buttons": {
|
||||
"enable2FA": "Ativar 2FA",
|
||||
"disable2FA": "Desativar 2FA"
|
||||
},
|
||||
"deviceNames": {
|
||||
"unknownDevice": "Dispositivo Desconhecido",
|
||||
"browsers": {
|
||||
"chrome": "Chrome",
|
||||
"firefox": "Firefox",
|
||||
"safari": "Safari",
|
||||
"edge": "Edge"
|
||||
},
|
||||
"platforms": {
|
||||
"windows": " no Windows",
|
||||
"macos": " no macOS",
|
||||
"linux": " no Linux",
|
||||
"iphone": " no iPhone",
|
||||
"android": " no Android"
|
||||
}
|
||||
},
|
||||
"status": {
|
||||
"label": "Status:",
|
||||
"enabled": "Ativado",
|
||||
"disabled": "Desativado"
|
||||
},
|
||||
"trustedDevices": {
|
||||
"title": "Dispositivos Confiáveis - 2FA",
|
||||
"description": "Dispositivos que não requerem verificação 2FA",
|
||||
"noDevices": "Nenhum dispositivo confiável",
|
||||
"deviceName": "Dispositivo",
|
||||
"addedOn": "Adicionado em",
|
||||
"expiresOn": "Expira em",
|
||||
"remove": "Remover",
|
||||
"removeAll": "Remover Todos",
|
||||
"confirmRemove": "Tem certeza que deseja remover este dispositivo confiável?",
|
||||
"confirmRemoveAll": "Tem certeza que deseja remover todos os dispositivos confiáveis?",
|
||||
"deviceRemoved": "Dispositivo confiável removido com sucesso",
|
||||
"allDevicesRemoved": "Todos os dispositivos confiáveis foram removidos com sucesso",
|
||||
"loadFailed": "Falha ao carregar dispositivos confiáveis",
|
||||
"removeFailed": "Falha ao remover dispositivo confiável",
|
||||
"removeAllFailed": "Falha ao remover todos os dispositivos confiáveis",
|
||||
"loading": "Carregando dispositivos confiáveis...",
|
||||
"noDevicesDescription": "Os dispositivos aparecerão aqui quando você optar por confiar neles durante a verificação 2FA",
|
||||
"tableHeaders": {
|
||||
"device": "Dispositivo",
|
||||
"added": "Adicionado",
|
||||
"expires": "Expira",
|
||||
"lastUsed": "Último Uso",
|
||||
"ipAddress": "Endereço IP",
|
||||
"actions": "Ações"
|
||||
},
|
||||
"status": {
|
||||
"never": "Nunca",
|
||||
"expired": "Expirado"
|
||||
},
|
||||
"modals": {
|
||||
"removeDevice": {
|
||||
"title": "Remover Dispositivo Confiável",
|
||||
"added": "Adicionado:",
|
||||
"ip": "IP:"
|
||||
},
|
||||
"removeAllDevices": {
|
||||
"title": "Remover Todos os Dispositivos Confiáveis",
|
||||
"description": "Isso removerá {count} dispositivo{count, plural, =1 {} other {s}} confiável{count, plural, =1 {} other {is}}. Você precisará verificar o 2FA em todos os dispositivos novamente."
|
||||
},
|
||||
"buttons": {
|
||||
"cancel": "Cancelar",
|
||||
"removing": "Removendo...",
|
||||
"removeDevice": "Remover Dispositivo",
|
||||
"removeAllDevices": "Remover Todos os Dispositivos"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"uploadFile": {
|
||||
"title": "Enviar Arquivo",
|
||||
"multipleTitle": "Enviar Múltiplos Arquivos",
|
||||
@@ -1542,98 +1713,5 @@
|
||||
"lastNameRequired": "O sobrenome é necessário",
|
||||
"usernameLength": "O nome de usuário deve ter pelo menos 3 caracteres",
|
||||
"usernameSpaces": "O nome de usuário não pode conter espaços"
|
||||
},
|
||||
"iconPicker": {
|
||||
"title": "Selecionar ícone",
|
||||
"placeholder": "Selecione um ícone",
|
||||
"searchPlaceholder": "Pesquisar ícones...",
|
||||
"loadingMore": "Carregando mais ícones...",
|
||||
"allIconsLoaded": "Todos os {count} ícones carregados",
|
||||
"noIconsFound": "Nenhum ícone encontrado para \"{search}\"",
|
||||
"tabs": {
|
||||
"all": "Todos os ícones",
|
||||
"popular": "Populares",
|
||||
"auth": "Provedores de autenticação"
|
||||
},
|
||||
"stats": "{iconCount} ícones de {libraryCount} bibliotecas",
|
||||
"categoryBadge": "{category} ({count} ícones)"
|
||||
},
|
||||
"twoFactor": {
|
||||
"title": "Autenticação de dois fatores",
|
||||
"description": "Adicione uma camada extra de segurança à sua conta",
|
||||
"enabled": "Sua conta está protegida com autenticação de dois fatores",
|
||||
"disabled": "A autenticação de dois fatores não está ativada",
|
||||
"setup": {
|
||||
"title": "Ativar autenticação de dois fatores",
|
||||
"description": "Escaneie o código QR com seu aplicativo autenticador e depois insira o código de verificação.",
|
||||
"qrCode": "Código QR",
|
||||
"manualEntryKey": "Chave de Entrada Manual",
|
||||
"verificationCode": "Código de Verificação",
|
||||
"verificationCodePlaceholder": "Digite o código de 6 dígitos",
|
||||
"verificationCodeDescription": "Digite o código de 6 dígitos do seu aplicativo autenticador",
|
||||
"verifyAndEnable": "Verificar e ativar",
|
||||
"cancel": "Cancelar"
|
||||
},
|
||||
"disable": {
|
||||
"title": "Desativar autenticação de dois fatores",
|
||||
"description": "Digite sua senha para confirmar a desativação da autenticação de dois fatores.",
|
||||
"password": "Senha",
|
||||
"passwordPlaceholder": "Digite sua senha",
|
||||
"confirm": "Confirmar Desativação",
|
||||
"cancel": "Cancelar"
|
||||
},
|
||||
"backupCodes": {
|
||||
"title": "Códigos de backup",
|
||||
"description": "Salve estes códigos de backup em um local seguro. Você pode usá-los para acessar sua conta se perder seu dispositivo autenticador.",
|
||||
"warning": "Importante:",
|
||||
"warningText": "Cada código de backup só pode ser usado uma vez. Mantenha-os seguros e não os compartilhe com ninguém.",
|
||||
"generateNew": "Gerar novos códigos de backup",
|
||||
"download": "Baixar códigos de backup",
|
||||
"copyToClipboard": "Copiar para área de transferência",
|
||||
"savedMessage": "Salvei meus códigos de backup",
|
||||
"available": "{count} códigos de backup disponíveis",
|
||||
"instructions": [
|
||||
"• Salve estes códigos em um local seguro",
|
||||
"• Cada código de backup só pode ser usado uma vez",
|
||||
"• Você pode gerar novos códigos a qualquer momento"
|
||||
]
|
||||
},
|
||||
"verification": {
|
||||
"title": "Autenticação de dois fatores",
|
||||
"description": "Digite o código de 6 dígitos do seu aplicativo autenticador",
|
||||
"backupDescription": "Digite um dos seus códigos de backup para continuar",
|
||||
"verificationCode": "Código de verificação",
|
||||
"backupCode": "Código de backup",
|
||||
"verificationCodePlaceholder": "000000",
|
||||
"backupCodePlaceholder": "XXXX-XXXX",
|
||||
"verify": "Verificar",
|
||||
"verifying": "Verificando...",
|
||||
"useBackupCode": "Usar código de backup",
|
||||
"useAuthenticatorCode": "Usar código do autenticador"
|
||||
},
|
||||
"messages": {
|
||||
"enabledSuccess": "Autenticação de dois fatores ativada com sucesso!",
|
||||
"disabledSuccess": "Autenticação de dois fatores desativada com sucesso",
|
||||
"backupCodesGenerated": "Novos códigos de backup gerados com sucesso",
|
||||
"backupCodesCopied": "Códigos de backup copiados para a área de transferência",
|
||||
"setupFailed": "Falha ao gerar configuração 2FA",
|
||||
"verificationFailed": "Código de verificação inválido",
|
||||
"disableFailed": "Falha ao desativar 2FA. Por favor, verifique sua senha.",
|
||||
"backupCodesFailed": "Falha ao gerar códigos de backup",
|
||||
"backupCodesCopyFailed": "Falha ao copiar códigos de backup",
|
||||
"statusLoadFailed": "Falha ao carregar status do 2FA",
|
||||
"enterVerificationCode": "Por favor, digite o código de verificação",
|
||||
"enterPassword": "Por favor, digite sua senha"
|
||||
},
|
||||
"errors": {
|
||||
"invalidVerificationCode": "Código de verificação inválido",
|
||||
"invalidTwoFactorCode": "Código de autenticação de dois fatores inválido",
|
||||
"twoFactorRequired": "Autenticação de dois fatores necessária",
|
||||
"twoFactorAlreadyEnabled": "A autenticação de dois fatores já está ativada",
|
||||
"twoFactorNotEnabled": "A autenticação de dois fatores não está ativada",
|
||||
"passwordVerificationRequired": "Verificação de senha necessária",
|
||||
"invalidPassword": "Senha inválida",
|
||||
"userNotFound": "Usuário não encontrado"
|
||||
}
|
||||
}
|
||||
}
|
@@ -143,7 +143,8 @@
|
||||
"saving": "Сохранение...",
|
||||
"update": "Обновить",
|
||||
"click": "Нажмите для",
|
||||
"creating": "Создание..."
|
||||
"creating": "Создание...",
|
||||
"loadingSimple": "Загрузка..."
|
||||
},
|
||||
"createShare": {
|
||||
"title": "Создать общий доступ",
|
||||
@@ -189,7 +190,8 @@
|
||||
"Password verification required": "Требуется подтверждение пароля",
|
||||
"Two-factor authentication is already enabled": "Двухфакторная аутентификация уже включена",
|
||||
"Two-factor authentication is not enabled": "Двухфакторная аутентификация не включена",
|
||||
"Two-factor authentication required": "Требуется двухфакторная аутентификация"
|
||||
"Two-factor authentication required": "Требуется двухфакторная аутентификация",
|
||||
"noUserData": "Нет данных пользователя"
|
||||
},
|
||||
"fileActions": {
|
||||
"editFile": "Редактировать файл",
|
||||
@@ -338,6 +340,21 @@
|
||||
},
|
||||
"pageTitle": "Главная"
|
||||
},
|
||||
"iconPicker": {
|
||||
"title": "Выбрать иконку",
|
||||
"placeholder": "Выберите иконку",
|
||||
"searchPlaceholder": "Поиск иконок...",
|
||||
"loadingMore": "Загрузка дополнительных иконок...",
|
||||
"allIconsLoaded": "Загружено все {count} иконок",
|
||||
"noIconsFound": "Не найдено иконок для \"{search}\"",
|
||||
"tabs": {
|
||||
"all": "Все иконки",
|
||||
"popular": "Популярные",
|
||||
"auth": "Провайдеры аутентификации"
|
||||
},
|
||||
"stats": "{iconCount} иконок из {libraryCount} библиотек",
|
||||
"categoryBadge": "{category} ({count} иконок)"
|
||||
},
|
||||
"login": {
|
||||
"welcome": "Добро пожаловать в",
|
||||
"signInToContinue": "Войдите, чтобы продолжить",
|
||||
@@ -1426,6 +1443,160 @@
|
||||
"dark": "Тёмная",
|
||||
"system": "Системная"
|
||||
},
|
||||
"twoFactor": {
|
||||
"title": "Двухфакторная аутентификация",
|
||||
"description": "Добавьте дополнительный уровень безопасности для вашей учетной записи",
|
||||
"enabled": "Ваша учетная запись защищена двухфакторной аутентификацией",
|
||||
"disabled": "Двухфакторная аутентификация не включена",
|
||||
"setup": {
|
||||
"title": "Включить двухфакторную аутентификацию",
|
||||
"description": "Отсканируйте QR-код с помощью приложения-аутентификатора, затем введите код подтверждения.",
|
||||
"qrCode": "QR-код",
|
||||
"manualEntryKey": "Ключ для ручного ввода",
|
||||
"verificationCode": "Код подтверждения",
|
||||
"verificationCodePlaceholder": "Введите 6-значный код",
|
||||
"verificationCodeDescription": "Введите 6-значный код из вашего приложения-аутентификатора",
|
||||
"verifyAndEnable": "Проверить и включить",
|
||||
"cancel": "Отмена"
|
||||
},
|
||||
"disable": {
|
||||
"title": "Отключить двухфакторную аутентификацию",
|
||||
"description": "Введите ваш пароль для подтверждения отключения двухфакторной аутентификации.",
|
||||
"password": "Пароль",
|
||||
"passwordPlaceholder": "Введите ваш пароль",
|
||||
"confirm": "Подтвердить отключение",
|
||||
"cancel": "Отмена"
|
||||
},
|
||||
"backupCodes": {
|
||||
"title": "Резервные коды",
|
||||
"description": "Сохраните эти резервные коды в безопасном месте. Вы можете использовать их для доступа к своей учетной записи, если потеряете устройство аутентификации.",
|
||||
"warning": "Важно:",
|
||||
"warningText": "Каждый резервный код можно использовать только один раз. Храните их в безопасности и не делитесь ими ни с кем.",
|
||||
"generateNew": "Сгенерировать новые резервные коды",
|
||||
"download": "Скачать резервные коды",
|
||||
"copyToClipboard": "Копировать в буфер обмена",
|
||||
"savedMessage": "Я сохранил мои резервные коды",
|
||||
"available": "{count} резервных кодов доступно",
|
||||
"instructions": [
|
||||
"• Сохраните эти коды в безопасном месте",
|
||||
"• Каждый резервный код можно использовать только один раз",
|
||||
"• Вы можете сгенерировать новые коды в любое время"
|
||||
]
|
||||
},
|
||||
"verification": {
|
||||
"title": "Двухфакторная аутентификация",
|
||||
"description": "Введите 6-значный код из вашего приложения-аутентификатора",
|
||||
"backupDescription": "Введите один из ваших резервных кодов для продолжения",
|
||||
"verificationCode": "Код подтверждения",
|
||||
"backupCode": "Резервный код",
|
||||
"verificationCodePlaceholder": "000000",
|
||||
"backupCodePlaceholder": "XXXX-XXXX",
|
||||
"verify": "Проверить",
|
||||
"verifying": "Проверка...",
|
||||
"useBackupCode": "Использовать резервный код",
|
||||
"useAuthenticatorCode": "Использовать код аутентификатора",
|
||||
"rememberDevice": "Запомнить это устройство на 30 дней",
|
||||
"rememberDeviceDescription": "Вам не нужно будет вводить коды 2FA на этом устройстве в течение 30 дней"
|
||||
},
|
||||
"messages": {
|
||||
"enabledSuccess": "Двухфакторная аутентификация успешно включена!",
|
||||
"disabledSuccess": "Двухфакторная аутентификация успешно отключена",
|
||||
"backupCodesGenerated": "Новые резервные коды успешно сгенерированы",
|
||||
"backupCodesCopied": "Резервные коды скопированы в буфер обмена",
|
||||
"setupFailed": "Не удалось сгенерировать настройку 2FA",
|
||||
"verificationFailed": "Неверный код подтверждения",
|
||||
"disableFailed": "Не удалось отключить 2FA. Пожалуйста, проверьте ваш пароль.",
|
||||
"backupCodesFailed": "Не удалось сгенерировать резервные коды",
|
||||
"backupCodesCopyFailed": "Не удалось скопировать резервные коды",
|
||||
"statusLoadFailed": "Не удалось загрузить статус 2FA",
|
||||
"enterVerificationCode": "Пожалуйста, введите код подтверждения",
|
||||
"enterPassword": "Пожалуйста, введите ваш пароль",
|
||||
"deviceTrusted": "Это устройство отмечено как доверенное на 30 дней"
|
||||
},
|
||||
"errors": {
|
||||
"invalidVerificationCode": "Неверный код подтверждения",
|
||||
"invalidTwoFactorCode": "Неверный код двухфакторной аутентификации",
|
||||
"twoFactorRequired": "Требуется двухфакторная аутентификация",
|
||||
"twoFactorAlreadyEnabled": "Двухфакторная аутентификация уже включена",
|
||||
"twoFactorNotEnabled": "Двухфакторная аутентификация не включена",
|
||||
"passwordVerificationRequired": "Требуется подтверждение пароля",
|
||||
"invalidPassword": "Неверный пароль",
|
||||
"userNotFound": "Пользователь не найден"
|
||||
},
|
||||
"buttons": {
|
||||
"enable2FA": "Включить 2FA",
|
||||
"disable2FA": "Отключить 2FA"
|
||||
},
|
||||
"deviceNames": {
|
||||
"unknownDevice": "Неизвестное устройство",
|
||||
"browsers": {
|
||||
"chrome": "Chrome",
|
||||
"firefox": "Firefox",
|
||||
"safari": "Safari",
|
||||
"edge": "Edge"
|
||||
},
|
||||
"platforms": {
|
||||
"windows": " на Windows",
|
||||
"macos": " на macOS",
|
||||
"linux": " на Linux",
|
||||
"iphone": " на iPhone",
|
||||
"android": " на Android"
|
||||
}
|
||||
},
|
||||
"status": {
|
||||
"label": "Статус:",
|
||||
"enabled": "Включено",
|
||||
"disabled": "Отключено"
|
||||
},
|
||||
"trustedDevices": {
|
||||
"title": "Доверенные устройства - 2FA",
|
||||
"description": "Устройства, не требующие проверки 2FA",
|
||||
"noDevices": "Нет доверенных устройств",
|
||||
"deviceName": "Устройство",
|
||||
"addedOn": "Добавлено",
|
||||
"expiresOn": "Истекает",
|
||||
"remove": "Удалить",
|
||||
"removeAll": "Удалить все",
|
||||
"confirmRemove": "Вы уверены, что хотите удалить это доверенное устройство?",
|
||||
"confirmRemoveAll": "Вы уверены, что хотите удалить все доверенные устройства?",
|
||||
"deviceRemoved": "Доверенное устройство успешно удалено",
|
||||
"allDevicesRemoved": "Все доверенные устройства успешно удалены",
|
||||
"loadFailed": "Не удалось загрузить доверенные устройства",
|
||||
"removeFailed": "Не удалось удалить доверенное устройство",
|
||||
"removeAllFailed": "Не удалось удалить все доверенные устройства",
|
||||
"loading": "Загрузка доверенных устройств...",
|
||||
"noDevicesDescription": "Устройства появятся здесь, когда вы решите доверять им во время проверки 2FA",
|
||||
"tableHeaders": {
|
||||
"device": "Устройство",
|
||||
"added": "Добавлено",
|
||||
"expires": "Истекает",
|
||||
"lastUsed": "Последнее использование",
|
||||
"ipAddress": "IP-адрес",
|
||||
"actions": "Действия"
|
||||
},
|
||||
"status": {
|
||||
"never": "Никогда",
|
||||
"expired": "Истекло"
|
||||
},
|
||||
"modals": {
|
||||
"removeDevice": {
|
||||
"title": "Удалить доверенное устройство",
|
||||
"added": "Добавлено:",
|
||||
"ip": "IP:"
|
||||
},
|
||||
"removeAllDevices": {
|
||||
"title": "Удалить все доверенные устройства",
|
||||
"description": "Это удалит {count} доверенное устройство{count, plural, =1 {} other {s}}. Вам потребуется повторно проверять 2FA на всех устройствах."
|
||||
},
|
||||
"buttons": {
|
||||
"cancel": "Отмена",
|
||||
"removing": "Удаление...",
|
||||
"removeDevice": "Удалить устройство",
|
||||
"removeAllDevices": "Удалить все устройства"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"uploadFile": {
|
||||
"title": "Загрузить файл",
|
||||
"multipleTitle": "Загрузить Несколько Файлов",
|
||||
@@ -1542,98 +1713,5 @@
|
||||
"passwordRequired": "Требуется пароль",
|
||||
"nameRequired": "Требуется имя",
|
||||
"required": "Это поле обязательно"
|
||||
},
|
||||
"iconPicker": {
|
||||
"title": "Выбрать иконку",
|
||||
"placeholder": "Выберите иконку",
|
||||
"searchPlaceholder": "Поиск иконок...",
|
||||
"loadingMore": "Загрузка дополнительных иконок...",
|
||||
"allIconsLoaded": "Загружено все {count} иконок",
|
||||
"noIconsFound": "Не найдено иконок для \"{search}\"",
|
||||
"tabs": {
|
||||
"all": "Все иконки",
|
||||
"popular": "Популярные",
|
||||
"auth": "Провайдеры аутентификации"
|
||||
},
|
||||
"stats": "{iconCount} иконок из {libraryCount} библиотек",
|
||||
"categoryBadge": "{category} ({count} иконок)"
|
||||
},
|
||||
"twoFactor": {
|
||||
"title": "Двухфакторная аутентификация",
|
||||
"description": "Добавьте дополнительный уровень безопасности для вашей учетной записи",
|
||||
"enabled": "Ваша учетная запись защищена двухфакторной аутентификацией",
|
||||
"disabled": "Двухфакторная аутентификация не включена",
|
||||
"setup": {
|
||||
"title": "Включить двухфакторную аутентификацию",
|
||||
"description": "Отсканируйте QR-код с помощью приложения-аутентификатора, затем введите код подтверждения.",
|
||||
"qrCode": "QR-код",
|
||||
"manualEntryKey": "Ключ для ручного ввода",
|
||||
"verificationCode": "Код подтверждения",
|
||||
"verificationCodePlaceholder": "Введите 6-значный код",
|
||||
"verificationCodeDescription": "Введите 6-значный код из вашего приложения-аутентификатора",
|
||||
"verifyAndEnable": "Проверить и включить",
|
||||
"cancel": "Отмена"
|
||||
},
|
||||
"disable": {
|
||||
"title": "Отключить двухфакторную аутентификацию",
|
||||
"description": "Введите ваш пароль для подтверждения отключения двухфакторной аутентификации.",
|
||||
"password": "Пароль",
|
||||
"passwordPlaceholder": "Введите ваш пароль",
|
||||
"confirm": "Подтвердить отключение",
|
||||
"cancel": "Отмена"
|
||||
},
|
||||
"backupCodes": {
|
||||
"title": "Резервные коды",
|
||||
"description": "Сохраните эти резервные коды в безопасном месте. Вы можете использовать их для доступа к своей учетной записи, если потеряете устройство аутентификации.",
|
||||
"warning": "Важно:",
|
||||
"warningText": "Каждый резервный код можно использовать только один раз. Храните их в безопасности и не делитесь ими ни с кем.",
|
||||
"generateNew": "Сгенерировать новые резервные коды",
|
||||
"download": "Скачать резервные коды",
|
||||
"copyToClipboard": "Копировать в буфер обмена",
|
||||
"savedMessage": "Я сохранил мои резервные коды",
|
||||
"available": "{count} резервных кодов доступно",
|
||||
"instructions": [
|
||||
"• Сохраните эти коды в безопасном месте",
|
||||
"• Каждый резервный код можно использовать только один раз",
|
||||
"• Вы можете сгенерировать новые коды в любое время"
|
||||
]
|
||||
},
|
||||
"verification": {
|
||||
"title": "Двухфакторная аутентификация",
|
||||
"description": "Введите 6-значный код из вашего приложения-аутентификатора",
|
||||
"backupDescription": "Введите один из ваших резервных кодов для продолжения",
|
||||
"verificationCode": "Код подтверждения",
|
||||
"backupCode": "Резервный код",
|
||||
"verificationCodePlaceholder": "000000",
|
||||
"backupCodePlaceholder": "XXXX-XXXX",
|
||||
"verify": "Проверить",
|
||||
"verifying": "Проверка...",
|
||||
"useBackupCode": "Использовать резервный код",
|
||||
"useAuthenticatorCode": "Использовать код аутентификатора"
|
||||
},
|
||||
"messages": {
|
||||
"enabledSuccess": "Двухфакторная аутентификация успешно включена!",
|
||||
"disabledSuccess": "Двухфакторная аутентификация успешно отключена",
|
||||
"backupCodesGenerated": "Новые резервные коды успешно сгенерированы",
|
||||
"backupCodesCopied": "Резервные коды скопированы в буфер обмена",
|
||||
"setupFailed": "Не удалось сгенерировать настройку 2FA",
|
||||
"verificationFailed": "Неверный код подтверждения",
|
||||
"disableFailed": "Не удалось отключить 2FA. Пожалуйста, проверьте ваш пароль.",
|
||||
"backupCodesFailed": "Не удалось сгенерировать резервные коды",
|
||||
"backupCodesCopyFailed": "Не удалось скопировать резервные коды",
|
||||
"statusLoadFailed": "Не удалось загрузить статус 2FA",
|
||||
"enterVerificationCode": "Пожалуйста, введите код подтверждения",
|
||||
"enterPassword": "Пожалуйста, введите ваш пароль"
|
||||
},
|
||||
"errors": {
|
||||
"invalidVerificationCode": "Неверный код подтверждения",
|
||||
"invalidTwoFactorCode": "Неверный код двухфакторной аутентификации",
|
||||
"twoFactorRequired": "Требуется двухфакторная аутентификация",
|
||||
"twoFactorAlreadyEnabled": "Двухфакторная аутентификация уже включена",
|
||||
"twoFactorNotEnabled": "Двухфакторная аутентификация не включена",
|
||||
"passwordVerificationRequired": "Требуется подтверждение пароля",
|
||||
"invalidPassword": "Неверный пароль",
|
||||
"userNotFound": "Пользователь не найден"
|
||||
}
|
||||
}
|
||||
}
|
@@ -143,7 +143,8 @@
|
||||
"saving": "Kaydediliyor...",
|
||||
"update": "Güncelle",
|
||||
"click": "Tıklayın",
|
||||
"creating": "Oluşturuluyor..."
|
||||
"creating": "Oluşturuluyor...",
|
||||
"loadingSimple": "Yükleniyor..."
|
||||
},
|
||||
"createShare": {
|
||||
"title": "Paylaşım Oluştur",
|
||||
@@ -189,7 +190,8 @@
|
||||
"Password verification required": "Şifre doğrulaması gerekli",
|
||||
"Two-factor authentication is already enabled": "İki faktörlü kimlik doğrulama zaten etkin",
|
||||
"Two-factor authentication is not enabled": "İki faktörlü kimlik doğrulama etkin değil",
|
||||
"Two-factor authentication required": "İki faktörlü kimlik doğrulama gerekli"
|
||||
"Two-factor authentication required": "İki faktörlü kimlik doğrulama gerekli",
|
||||
"noUserData": "Kullanıcı verisi yok"
|
||||
},
|
||||
"fileActions": {
|
||||
"editFile": "Dosyayı Düzenle",
|
||||
@@ -338,6 +340,21 @@
|
||||
},
|
||||
"pageTitle": "Ana Sayfa"
|
||||
},
|
||||
"iconPicker": {
|
||||
"title": "Simge Seç",
|
||||
"placeholder": "Bir simge seç",
|
||||
"searchPlaceholder": "Simgeleri ara...",
|
||||
"loadingMore": "Daha fazla simge yükleniyor...",
|
||||
"allIconsLoaded": "Tüm {count} simge yüklendi",
|
||||
"noIconsFound": "\"{search}\" için simge bulunamadı",
|
||||
"tabs": {
|
||||
"all": "Tüm Simgeler",
|
||||
"popular": "Popüler",
|
||||
"auth": "Kimlik Doğrulama Sağlayıcıları"
|
||||
},
|
||||
"stats": "{libraryCount} kütüphaneden {iconCount} simge",
|
||||
"categoryBadge": "{category} ({count} simge)"
|
||||
},
|
||||
"login": {
|
||||
"welcome": "Hoş geldiniz'e",
|
||||
"signInToContinue": "Devam etmek için oturum açın",
|
||||
@@ -1426,6 +1443,160 @@
|
||||
"dark": "Koyu",
|
||||
"system": "Sistem"
|
||||
},
|
||||
"twoFactor": {
|
||||
"title": "İki Faktörlü Kimlik Doğrulama",
|
||||
"description": "Hesabınıza ekstra bir güvenlik katmanı ekleyin",
|
||||
"enabled": "Hesabınız iki faktörlü kimlik doğrulama ile korunuyor",
|
||||
"disabled": "İki faktörlü kimlik doğrulama etkin değil",
|
||||
"setup": {
|
||||
"title": "İki Faktörlü Kimlik Doğrulamayı Etkinleştir",
|
||||
"description": "QR kodunu kimlik doğrulayıcı uygulamanızla tarayın, ardından doğrulama kodunu girin.",
|
||||
"qrCode": "QR Kodu",
|
||||
"manualEntryKey": "Manuel Giriş Anahtarı",
|
||||
"verificationCode": "Doğrulama Kodu",
|
||||
"verificationCodePlaceholder": "6 haneli kodu girin",
|
||||
"verificationCodeDescription": "Kimlik doğrulayıcı uygulamanızdan 6 haneli kodu girin",
|
||||
"verifyAndEnable": "Doğrula ve Etkinleştir",
|
||||
"cancel": "İptal"
|
||||
},
|
||||
"disable": {
|
||||
"title": "İki Faktörlü Kimlik Doğrulamayı Devre Dışı Bırak",
|
||||
"description": "İki faktörlü kimlik doğrulamayı devre dışı bırakmayı onaylamak için şifrenizi girin.",
|
||||
"password": "Şifre",
|
||||
"passwordPlaceholder": "Şifrenizi girin",
|
||||
"confirm": "Devre Dışı Bırakmayı Onayla",
|
||||
"cancel": "İptal"
|
||||
},
|
||||
"backupCodes": {
|
||||
"title": "Yedek Kodlar",
|
||||
"description": "Bu yedek kodları güvenli bir yerde saklayın. Kimlik doğrulayıcı cihazınızı kaybederseniz hesabınıza erişmek için bunları kullanabilirsiniz.",
|
||||
"warning": "Önemli:",
|
||||
"warningText": "Her yedek kod yalnızca bir kez kullanılabilir. Güvenli tutun ve kimseyle paylaşmayın.",
|
||||
"generateNew": "Yeni Yedek Kodlar Oluştur",
|
||||
"download": "Yedek Kodları İndir",
|
||||
"copyToClipboard": "Panoya Kopyala",
|
||||
"savedMessage": "Yedek Kodlarımı Kaydettim",
|
||||
"available": "{count} yedek kod mevcut",
|
||||
"instructions": [
|
||||
"• Bu kodları güvenli bir yerde saklayın",
|
||||
"• Her yedek kod yalnızca bir kez kullanılabilir",
|
||||
"• İstediğiniz zaman yeni kodlar oluşturabilirsiniz"
|
||||
]
|
||||
},
|
||||
"verification": {
|
||||
"title": "İki Faktörlü Kimlik Doğrulama",
|
||||
"description": "Kimlik doğrulayıcı uygulamanızdan 6 haneli kodu girin",
|
||||
"backupDescription": "Devam etmek için yedek kodlarınızdan birini girin",
|
||||
"verificationCode": "Doğrulama Kodu",
|
||||
"backupCode": "Yedek Kod",
|
||||
"verificationCodePlaceholder": "000000",
|
||||
"backupCodePlaceholder": "XXXX-XXXX",
|
||||
"verify": "Doğrula",
|
||||
"verifying": "Doğrulanıyor...",
|
||||
"useBackupCode": "Bunun yerine yedek kod kullan",
|
||||
"useAuthenticatorCode": "Bunun yerine kimlik doğrulayıcı kodu kullan",
|
||||
"rememberDevice": "Bu cihazı 30 gün boyunca hatırla",
|
||||
"rememberDeviceDescription": "Bu cihazda 30 gün boyunca 2FA kodları girmeniz gerekmeyecek"
|
||||
},
|
||||
"messages": {
|
||||
"enabledSuccess": "İki faktörlü kimlik doğrulama başarıyla etkinleştirildi!",
|
||||
"disabledSuccess": "İki faktörlü kimlik doğrulama başarıyla devre dışı bırakıldı",
|
||||
"backupCodesGenerated": "Yeni yedek kodlar başarıyla oluşturuldu",
|
||||
"backupCodesCopied": "Yedek kodlar panoya kopyalandı",
|
||||
"setupFailed": "2FA kurulumu oluşturulamadı",
|
||||
"verificationFailed": "Geçersiz doğrulama kodu",
|
||||
"disableFailed": "2FA devre dışı bırakılamadı. Lütfen şifrenizi kontrol edin.",
|
||||
"backupCodesFailed": "Yedek kodlar oluşturulamadı",
|
||||
"backupCodesCopyFailed": "Yedek kodlar kopyalanamadı",
|
||||
"statusLoadFailed": "2FA durumu yüklenemedi",
|
||||
"enterVerificationCode": "Lütfen doğrulama kodunu girin",
|
||||
"enterPassword": "Lütfen şifrenizi girin",
|
||||
"deviceTrusted": "Bu cihaz 30 gün boyunca güvenilir olarak işaretlendi"
|
||||
},
|
||||
"errors": {
|
||||
"invalidVerificationCode": "Geçersiz doğrulama kodu",
|
||||
"invalidTwoFactorCode": "Geçersiz iki faktörlü kimlik doğrulama kodu",
|
||||
"twoFactorRequired": "İki faktörlü kimlik doğrulama gerekli",
|
||||
"twoFactorAlreadyEnabled": "İki faktörlü kimlik doğrulama zaten etkin",
|
||||
"twoFactorNotEnabled": "İki faktörlü kimlik doğrulama etkin değil",
|
||||
"passwordVerificationRequired": "Şifre doğrulaması gerekli",
|
||||
"invalidPassword": "Geçersiz şifre",
|
||||
"userNotFound": "Kullanıcı bulunamadı"
|
||||
},
|
||||
"buttons": {
|
||||
"enable2FA": "2FA'yı Etkinleştir",
|
||||
"disable2FA": "2FA'yı Devre Dışı Bırak"
|
||||
},
|
||||
"deviceNames": {
|
||||
"unknownDevice": "Bilinmeyen Cihaz",
|
||||
"browsers": {
|
||||
"chrome": "Chrome",
|
||||
"firefox": "Firefox",
|
||||
"safari": "Safari",
|
||||
"edge": "Edge"
|
||||
},
|
||||
"platforms": {
|
||||
"windows": " Windows'ta",
|
||||
"macos": " macOS'ta",
|
||||
"linux": " Linux'ta",
|
||||
"iphone": " iPhone'da",
|
||||
"android": " Android'de"
|
||||
}
|
||||
},
|
||||
"status": {
|
||||
"label": "Durum:",
|
||||
"enabled": "Etkin",
|
||||
"disabled": "Devre Dışı"
|
||||
},
|
||||
"trustedDevices": {
|
||||
"title": "Güvenilir Cihazlar - 2FA",
|
||||
"description": "2FA doğrulaması gerektirmeyen cihazlar",
|
||||
"noDevices": "Güvenilir cihaz yok",
|
||||
"deviceName": "Cihaz",
|
||||
"addedOn": "Eklenme tarihi",
|
||||
"expiresOn": "Bitiş tarihi",
|
||||
"remove": "Kaldır",
|
||||
"removeAll": "Tümünü Kaldır",
|
||||
"confirmRemove": "Bu güvenilir cihazı kaldırmak istediğinizden emin misiniz?",
|
||||
"confirmRemoveAll": "Tüm güvenilir cihazları kaldırmak istediğinizden emin misiniz?",
|
||||
"deviceRemoved": "Güvenilir cihaz başarıyla kaldırıldı",
|
||||
"allDevicesRemoved": "Tüm güvenilir cihazlar başarıyla kaldırıldı",
|
||||
"loadFailed": "Güvenilir cihazlar yüklenemedi",
|
||||
"removeFailed": "Güvenilir cihaz kaldırılamadı",
|
||||
"removeAllFailed": "Tüm güvenilir cihazlar kaldırılamadı",
|
||||
"loading": "Güvenilir cihazlar yükleniyor...",
|
||||
"noDevicesDescription": "2FA doğrulaması sırasında cihazları güvenilir olarak işaretlediğinizde burada görünecekler",
|
||||
"tableHeaders": {
|
||||
"device": "Cihaz",
|
||||
"added": "Eklenme",
|
||||
"expires": "Bitiş",
|
||||
"lastUsed": "Son Kullanım",
|
||||
"ipAddress": "IP Adresi",
|
||||
"actions": "İşlemler"
|
||||
},
|
||||
"status": {
|
||||
"never": "Hiç",
|
||||
"expired": "Süresi Doldu"
|
||||
},
|
||||
"modals": {
|
||||
"removeDevice": {
|
||||
"title": "Güvenilir Cihazı Kaldır",
|
||||
"added": "Eklenme:",
|
||||
"ip": "IP:"
|
||||
},
|
||||
"removeAllDevices": {
|
||||
"title": "Tüm Güvenilir Cihazları Kaldır",
|
||||
"description": "Bu işlem {count} güvenilir cihaz{count, plural, =1 {ı} other {ı}} kaldıracak. Tüm cihazlarda 2FA doğrulaması yapmanız gerekecek."
|
||||
},
|
||||
"buttons": {
|
||||
"cancel": "İptal",
|
||||
"removing": "Kaldırılıyor...",
|
||||
"removeDevice": "Cihazı Kaldır",
|
||||
"removeAllDevices": "Tüm Cihazları Kaldır"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"uploadFile": {
|
||||
"title": "Dosya Yükle",
|
||||
"multipleTitle": "Çoklu Dosya Yükle",
|
||||
@@ -1542,98 +1713,5 @@
|
||||
"passwordRequired": "Şifre gerekli",
|
||||
"nameRequired": "İsim gereklidir",
|
||||
"required": "Bu alan zorunludur"
|
||||
},
|
||||
"iconPicker": {
|
||||
"title": "Simge Seç",
|
||||
"placeholder": "Bir simge seç",
|
||||
"searchPlaceholder": "Simgeleri ara...",
|
||||
"loadingMore": "Daha fazla simge yükleniyor...",
|
||||
"allIconsLoaded": "Tüm {count} simge yüklendi",
|
||||
"noIconsFound": "\"{search}\" için simge bulunamadı",
|
||||
"tabs": {
|
||||
"all": "Tüm Simgeler",
|
||||
"popular": "Popüler",
|
||||
"auth": "Kimlik Doğrulama Sağlayıcıları"
|
||||
},
|
||||
"stats": "{libraryCount} kütüphaneden {iconCount} simge",
|
||||
"categoryBadge": "{category} ({count} simge)"
|
||||
},
|
||||
"twoFactor": {
|
||||
"title": "İki Faktörlü Kimlik Doğrulama",
|
||||
"description": "Hesabınıza ekstra bir güvenlik katmanı ekleyin",
|
||||
"enabled": "Hesabınız iki faktörlü kimlik doğrulama ile korunuyor",
|
||||
"disabled": "İki faktörlü kimlik doğrulama etkin değil",
|
||||
"setup": {
|
||||
"title": "İki Faktörlü Kimlik Doğrulamayı Etkinleştir",
|
||||
"description": "QR kodunu kimlik doğrulayıcı uygulamanızla tarayın, ardından doğrulama kodunu girin.",
|
||||
"qrCode": "QR Kodu",
|
||||
"manualEntryKey": "Manuel Giriş Anahtarı",
|
||||
"verificationCode": "Doğrulama Kodu",
|
||||
"verificationCodePlaceholder": "6 haneli kodu girin",
|
||||
"verificationCodeDescription": "Kimlik doğrulayıcı uygulamanızdan 6 haneli kodu girin",
|
||||
"verifyAndEnable": "Doğrula ve Etkinleştir",
|
||||
"cancel": "İptal"
|
||||
},
|
||||
"disable": {
|
||||
"title": "İki Faktörlü Kimlik Doğrulamayı Devre Dışı Bırak",
|
||||
"description": "İki faktörlü kimlik doğrulamayı devre dışı bırakmayı onaylamak için şifrenizi girin.",
|
||||
"password": "Şifre",
|
||||
"passwordPlaceholder": "Şifrenizi girin",
|
||||
"confirm": "Devre Dışı Bırakmayı Onayla",
|
||||
"cancel": "İptal"
|
||||
},
|
||||
"backupCodes": {
|
||||
"title": "Yedek Kodlar",
|
||||
"description": "Bu yedek kodları güvenli bir yerde saklayın. Kimlik doğrulayıcı cihazınızı kaybederseniz hesabınıza erişmek için bunları kullanabilirsiniz.",
|
||||
"warning": "Önemli:",
|
||||
"warningText": "Her yedek kod yalnızca bir kez kullanılabilir. Güvenli tutun ve kimseyle paylaşmayın.",
|
||||
"generateNew": "Yeni Yedek Kodlar Oluştur",
|
||||
"download": "Yedek Kodları İndir",
|
||||
"copyToClipboard": "Panoya Kopyala",
|
||||
"savedMessage": "Yedek Kodlarımı Kaydettim",
|
||||
"available": "{count} yedek kod mevcut",
|
||||
"instructions": [
|
||||
"• Bu kodları güvenli bir yerde saklayın",
|
||||
"• Her yedek kod yalnızca bir kez kullanılabilir",
|
||||
"• İstediğiniz zaman yeni kodlar oluşturabilirsiniz"
|
||||
]
|
||||
},
|
||||
"verification": {
|
||||
"title": "İki Faktörlü Kimlik Doğrulama",
|
||||
"description": "Kimlik doğrulayıcı uygulamanızdan 6 haneli kodu girin",
|
||||
"backupDescription": "Devam etmek için yedek kodlarınızdan birini girin",
|
||||
"verificationCode": "Doğrulama Kodu",
|
||||
"backupCode": "Yedek Kod",
|
||||
"verificationCodePlaceholder": "000000",
|
||||
"backupCodePlaceholder": "XXXX-XXXX",
|
||||
"verify": "Doğrula",
|
||||
"verifying": "Doğrulanıyor...",
|
||||
"useBackupCode": "Bunun yerine yedek kod kullan",
|
||||
"useAuthenticatorCode": "Bunun yerine kimlik doğrulayıcı kodu kullan"
|
||||
},
|
||||
"messages": {
|
||||
"enabledSuccess": "İki faktörlü kimlik doğrulama başarıyla etkinleştirildi!",
|
||||
"disabledSuccess": "İki faktörlü kimlik doğrulama başarıyla devre dışı bırakıldı",
|
||||
"backupCodesGenerated": "Yeni yedek kodlar başarıyla oluşturuldu",
|
||||
"backupCodesCopied": "Yedek kodlar panoya kopyalandı",
|
||||
"setupFailed": "2FA kurulumu oluşturulamadı",
|
||||
"verificationFailed": "Geçersiz doğrulama kodu",
|
||||
"disableFailed": "2FA devre dışı bırakılamadı. Lütfen şifrenizi kontrol edin.",
|
||||
"backupCodesFailed": "Yedek kodlar oluşturulamadı",
|
||||
"backupCodesCopyFailed": "Yedek kodlar kopyalanamadı",
|
||||
"statusLoadFailed": "2FA durumu yüklenemedi",
|
||||
"enterVerificationCode": "Lütfen doğrulama kodunu girin",
|
||||
"enterPassword": "Lütfen şifrenizi girin"
|
||||
},
|
||||
"errors": {
|
||||
"invalidVerificationCode": "Geçersiz doğrulama kodu",
|
||||
"invalidTwoFactorCode": "Geçersiz iki faktörlü kimlik doğrulama kodu",
|
||||
"twoFactorRequired": "İki faktörlü kimlik doğrulama gerekli",
|
||||
"twoFactorAlreadyEnabled": "İki faktörlü kimlik doğrulama zaten etkin",
|
||||
"twoFactorNotEnabled": "İki faktörlü kimlik doğrulama etkin değil",
|
||||
"passwordVerificationRequired": "Şifre doğrulaması gerekli",
|
||||
"invalidPassword": "Geçersiz şifre",
|
||||
"userNotFound": "Kullanıcı bulunamadı"
|
||||
}
|
||||
}
|
||||
}
|
@@ -143,7 +143,8 @@
|
||||
"saving": "保存中...",
|
||||
"update": "更新",
|
||||
"click": "点击",
|
||||
"creating": "创建中..."
|
||||
"creating": "创建中...",
|
||||
"loadingSimple": "加载中..."
|
||||
},
|
||||
"createShare": {
|
||||
"title": "创建分享",
|
||||
@@ -189,7 +190,8 @@
|
||||
"Password verification required": "需要密码验证",
|
||||
"Two-factor authentication is already enabled": "双重认证已启用",
|
||||
"Two-factor authentication is not enabled": "双重认证未启用",
|
||||
"Two-factor authentication required": "需要双重认证"
|
||||
"Two-factor authentication required": "需要双重认证",
|
||||
"noUserData": "没有用户数据"
|
||||
},
|
||||
"fileActions": {
|
||||
"editFile": "编辑文件",
|
||||
@@ -338,6 +340,21 @@
|
||||
},
|
||||
"pageTitle": "首页"
|
||||
},
|
||||
"iconPicker": {
|
||||
"title": "选择图标",
|
||||
"placeholder": "选择一个图标",
|
||||
"searchPlaceholder": "搜索图标...",
|
||||
"loadingMore": "正在加载更多图标...",
|
||||
"allIconsLoaded": "已加载全部 {count} 个图标",
|
||||
"noIconsFound": "未找到与\"{search}\"相关的图标",
|
||||
"tabs": {
|
||||
"all": "所有图标",
|
||||
"popular": "常用",
|
||||
"auth": "认证提供商"
|
||||
},
|
||||
"stats": "来自 {libraryCount} 个库的 {iconCount} 个图标",
|
||||
"categoryBadge": "{category}({count} 个图标)"
|
||||
},
|
||||
"login": {
|
||||
"welcome": "欢迎您",
|
||||
"signInToContinue": "请登录以继续",
|
||||
@@ -1426,6 +1443,160 @@
|
||||
"dark": "暗黑",
|
||||
"system": "系统"
|
||||
},
|
||||
"twoFactor": {
|
||||
"title": "双重认证",
|
||||
"description": "为您的账户添加额外的安全保护",
|
||||
"enabled": "您的账户已启用双重认证保护",
|
||||
"disabled": "未启用双重认证",
|
||||
"setup": {
|
||||
"title": "启用双重认证",
|
||||
"description": "使用您的认证器应用扫描二维码,然后输入验证码。",
|
||||
"qrCode": "二维码",
|
||||
"manualEntryKey": "手动输入密钥",
|
||||
"verificationCode": "验证码",
|
||||
"verificationCodePlaceholder": "输入6位数验证码",
|
||||
"verificationCodeDescription": "输入认证器应用生成的6位数验证码",
|
||||
"verifyAndEnable": "验证并启用",
|
||||
"cancel": "取消"
|
||||
},
|
||||
"disable": {
|
||||
"title": "禁用双重认证",
|
||||
"description": "请输入您的密码以确认禁用双重认证。",
|
||||
"password": "密码",
|
||||
"passwordPlaceholder": "输入您的密码",
|
||||
"confirm": "确认禁用",
|
||||
"cancel": "取消"
|
||||
},
|
||||
"backupCodes": {
|
||||
"title": "备用码",
|
||||
"description": "请将这些备用码保存在安全的地方。如果您丢失了认证器设备,可以使用它们访问您的账户。",
|
||||
"warning": "重要提示:",
|
||||
"warningText": "每个备用码只能使用一次。请妥善保管,不要与任何人分享。",
|
||||
"generateNew": "生成新的备用码",
|
||||
"download": "下载备用码",
|
||||
"copyToClipboard": "复制到剪贴板",
|
||||
"savedMessage": "我已保存备用码",
|
||||
"available": "可用备用码:{count}个",
|
||||
"instructions": [
|
||||
"• 将这些代码保存在安全的位置",
|
||||
"• 每个备用码只能使用一次",
|
||||
"• 您可以随时生成新的备用码"
|
||||
]
|
||||
},
|
||||
"verification": {
|
||||
"title": "双重认证",
|
||||
"description": "请输入认证器应用生成的6位数验证码",
|
||||
"backupDescription": "请输入一个备用码以继续",
|
||||
"verificationCode": "验证码",
|
||||
"backupCode": "备用码",
|
||||
"verificationCodePlaceholder": "000000",
|
||||
"backupCodePlaceholder": "XXXX-XXXX",
|
||||
"verify": "验证",
|
||||
"verifying": "验证中...",
|
||||
"useBackupCode": "使用备用码",
|
||||
"useAuthenticatorCode": "使用认证器验证码",
|
||||
"rememberDevice": "在30天内记住此设备",
|
||||
"rememberDeviceDescription": "在30天内您无需在此设备上输入双重认证码"
|
||||
},
|
||||
"messages": {
|
||||
"enabledSuccess": "双重认证启用成功!",
|
||||
"disabledSuccess": "双重认证已成功禁用",
|
||||
"backupCodesGenerated": "新的备用码生成成功",
|
||||
"backupCodesCopied": "备用码已复制到剪贴板",
|
||||
"setupFailed": "生成双重认证设置失败",
|
||||
"verificationFailed": "验证码无效",
|
||||
"disableFailed": "禁用双重认证失败。请检查您的密码。",
|
||||
"backupCodesFailed": "生成备用码失败",
|
||||
"backupCodesCopyFailed": "复制备用码失败",
|
||||
"statusLoadFailed": "加载双重认证状态失败",
|
||||
"enterVerificationCode": "请输入验证码",
|
||||
"enterPassword": "请输入您的密码",
|
||||
"deviceTrusted": "此设备已被标记为30天内受信任"
|
||||
},
|
||||
"errors": {
|
||||
"invalidVerificationCode": "验证码无效",
|
||||
"invalidTwoFactorCode": "双重认证码无效",
|
||||
"twoFactorRequired": "需要双重认证",
|
||||
"twoFactorAlreadyEnabled": "双重认证已启用",
|
||||
"twoFactorNotEnabled": "未启用双重认证",
|
||||
"passwordVerificationRequired": "需要密码验证",
|
||||
"invalidPassword": "密码无效",
|
||||
"userNotFound": "未找到用户"
|
||||
},
|
||||
"buttons": {
|
||||
"enable2FA": "启用双重认证",
|
||||
"disable2FA": "禁用双重认证"
|
||||
},
|
||||
"deviceNames": {
|
||||
"unknownDevice": "未知设备",
|
||||
"browsers": {
|
||||
"chrome": "Chrome",
|
||||
"firefox": "Firefox",
|
||||
"safari": "Safari",
|
||||
"edge": "Edge"
|
||||
},
|
||||
"platforms": {
|
||||
"windows": " 在 Windows 上",
|
||||
"macos": " 在 macOS 上",
|
||||
"linux": " 在 Linux 上",
|
||||
"iphone": " 在 iPhone 上",
|
||||
"android": " 在 Android 上"
|
||||
}
|
||||
},
|
||||
"status": {
|
||||
"label": "状态:",
|
||||
"enabled": "已启用",
|
||||
"disabled": "已禁用"
|
||||
},
|
||||
"trustedDevices": {
|
||||
"title": "受信任设备 - 双重认证",
|
||||
"description": "无需双重认证验证的设备",
|
||||
"noDevices": "没有受信任的设备",
|
||||
"deviceName": "设备",
|
||||
"addedOn": "添加于",
|
||||
"expiresOn": "过期于",
|
||||
"remove": "移除",
|
||||
"removeAll": "移除全部",
|
||||
"confirmRemove": "您确定要移除此受信任设备吗?",
|
||||
"confirmRemoveAll": "您确定要移除所有受信任设备吗?",
|
||||
"deviceRemoved": "受信任设备已成功移除",
|
||||
"allDevicesRemoved": "所有受信任设备已成功移除",
|
||||
"loadFailed": "加载受信任设备失败",
|
||||
"removeFailed": "移除受信任设备失败",
|
||||
"removeAllFailed": "移除所有受信任设备失败",
|
||||
"loading": "正在加载受信任设备...",
|
||||
"noDevicesDescription": "当您在双重认证验证时选择信任设备时,设备将显示在此处",
|
||||
"tableHeaders": {
|
||||
"device": "设备",
|
||||
"added": "添加时间",
|
||||
"expires": "过期时间",
|
||||
"lastUsed": "最后使用",
|
||||
"ipAddress": "IP地址",
|
||||
"actions": "操作"
|
||||
},
|
||||
"status": {
|
||||
"never": "从未",
|
||||
"expired": "已过期"
|
||||
},
|
||||
"modals": {
|
||||
"removeDevice": {
|
||||
"title": "移除受信任设备",
|
||||
"added": "添加时间:",
|
||||
"ip": "IP地址:"
|
||||
},
|
||||
"removeAllDevices": {
|
||||
"title": "移除所有受信任设备",
|
||||
"description": "这将移除 {count} 个受信任设备。您需要在所有设备上重新进行双重认证验证。"
|
||||
},
|
||||
"buttons": {
|
||||
"cancel": "取消",
|
||||
"removing": "正在移除...",
|
||||
"removeDevice": "移除设备",
|
||||
"removeAllDevices": "移除所有设备"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"uploadFile": {
|
||||
"title": "上传文件",
|
||||
"multipleTitle": "上传多个文件",
|
||||
@@ -1542,98 +1713,5 @@
|
||||
"passwordRequired": "密码为必填项",
|
||||
"nameRequired": "名称为必填项",
|
||||
"required": "此字段为必填项"
|
||||
},
|
||||
"iconPicker": {
|
||||
"title": "选择图标",
|
||||
"placeholder": "选择一个图标",
|
||||
"searchPlaceholder": "搜索图标...",
|
||||
"loadingMore": "正在加载更多图标...",
|
||||
"allIconsLoaded": "已加载全部 {count} 个图标",
|
||||
"noIconsFound": "未找到与\"{search}\"相关的图标",
|
||||
"tabs": {
|
||||
"all": "所有图标",
|
||||
"popular": "常用",
|
||||
"auth": "认证提供商"
|
||||
},
|
||||
"stats": "来自 {libraryCount} 个库的 {iconCount} 个图标",
|
||||
"categoryBadge": "{category}({count} 个图标)"
|
||||
},
|
||||
"twoFactor": {
|
||||
"title": "双重认证",
|
||||
"description": "为您的账户添加额外的安全保护",
|
||||
"enabled": "您的账户已启用双重认证保护",
|
||||
"disabled": "未启用双重认证",
|
||||
"setup": {
|
||||
"title": "启用双重认证",
|
||||
"description": "使用您的认证器应用扫描二维码,然后输入验证码。",
|
||||
"qrCode": "二维码",
|
||||
"manualEntryKey": "手动输入密钥",
|
||||
"verificationCode": "验证码",
|
||||
"verificationCodePlaceholder": "输入6位数验证码",
|
||||
"verificationCodeDescription": "输入认证器应用生成的6位数验证码",
|
||||
"verifyAndEnable": "验证并启用",
|
||||
"cancel": "取消"
|
||||
},
|
||||
"disable": {
|
||||
"title": "禁用双重认证",
|
||||
"description": "请输入您的密码以确认禁用双重认证。",
|
||||
"password": "密码",
|
||||
"passwordPlaceholder": "输入您的密码",
|
||||
"confirm": "确认禁用",
|
||||
"cancel": "取消"
|
||||
},
|
||||
"backupCodes": {
|
||||
"title": "备用码",
|
||||
"description": "请将这些备用码保存在安全的地方。如果您丢失了认证器设备,可以使用它们访问您的账户。",
|
||||
"warning": "重要提示:",
|
||||
"warningText": "每个备用码只能使用一次。请妥善保管,不要与任何人分享。",
|
||||
"generateNew": "生成新的备用码",
|
||||
"download": "下载备用码",
|
||||
"copyToClipboard": "复制到剪贴板",
|
||||
"savedMessage": "我已保存备用码",
|
||||
"available": "可用备用码:{count}个",
|
||||
"instructions": [
|
||||
"• 将这些代码保存在安全的位置",
|
||||
"• 每个备用码只能使用一次",
|
||||
"• 您可以随时生成新的备用码"
|
||||
]
|
||||
},
|
||||
"verification": {
|
||||
"title": "双重认证",
|
||||
"description": "请输入认证器应用生成的6位数验证码",
|
||||
"backupDescription": "请输入一个备用码以继续",
|
||||
"verificationCode": "验证码",
|
||||
"backupCode": "备用码",
|
||||
"verificationCodePlaceholder": "000000",
|
||||
"backupCodePlaceholder": "XXXX-XXXX",
|
||||
"verify": "验证",
|
||||
"verifying": "验证中...",
|
||||
"useBackupCode": "使用备用码",
|
||||
"useAuthenticatorCode": "使用认证器验证码"
|
||||
},
|
||||
"messages": {
|
||||
"enabledSuccess": "双重认证启用成功!",
|
||||
"disabledSuccess": "双重认证已成功禁用",
|
||||
"backupCodesGenerated": "新的备用码生成成功",
|
||||
"backupCodesCopied": "备用码已复制到剪贴板",
|
||||
"setupFailed": "生成双重认证设置失败",
|
||||
"verificationFailed": "验证码无效",
|
||||
"disableFailed": "禁用双重认证失败。请检查您的密码。",
|
||||
"backupCodesFailed": "生成备用码失败",
|
||||
"backupCodesCopyFailed": "复制备用码失败",
|
||||
"statusLoadFailed": "加载双重认证状态失败",
|
||||
"enterVerificationCode": "请输入验证码",
|
||||
"enterPassword": "请输入您的密码"
|
||||
},
|
||||
"errors": {
|
||||
"invalidVerificationCode": "验证码无效",
|
||||
"invalidTwoFactorCode": "双重认证码无效",
|
||||
"twoFactorRequired": "需要双重认证",
|
||||
"twoFactorAlreadyEnabled": "双重认证已启用",
|
||||
"twoFactorNotEnabled": "未启用双重认证",
|
||||
"passwordVerificationRequired": "需要密码验证",
|
||||
"invalidPassword": "密码无效",
|
||||
"userNotFound": "未找到用户"
|
||||
}
|
||||
}
|
||||
}
|
@@ -97,4 +97,4 @@
|
||||
"tailwindcss": "4.1.11",
|
||||
"typescript": "5.8.3"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
4503
apps/web/pnpm-lock.yaml
generated
4503
apps/web/pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,33 @@
|
||||
import { NextRequest, NextResponse } from "next/server";
|
||||
|
||||
const API_BASE_URL = process.env.API_BASE_URL || "http://localhost:3333";
|
||||
|
||||
export async function DELETE(request: NextRequest, { params }: { params: Promise<{ id: string }> }) {
|
||||
try {
|
||||
const { id } = await params;
|
||||
const deleteUrl = `${API_BASE_URL}/auth/trusted-devices/${id}`;
|
||||
|
||||
const apiRes = await fetch(deleteUrl, {
|
||||
method: "DELETE",
|
||||
headers: {
|
||||
...Object.fromEntries(
|
||||
Array.from(request.headers.entries()).filter(
|
||||
([key]) => key.startsWith("authorization") || key.startsWith("cookie")
|
||||
)
|
||||
),
|
||||
},
|
||||
});
|
||||
|
||||
const data = await apiRes.json();
|
||||
|
||||
return NextResponse.json(data, {
|
||||
status: apiRes.status,
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
});
|
||||
} catch (error) {
|
||||
console.error("Error proxying trusted device delete:", error);
|
||||
return NextResponse.json({ success: false, error: "Internal server error" }, { status: 500 });
|
||||
}
|
||||
}
|
71
apps/web/src/app/api/(proxy)/auth/trusted-devices/route.ts
Normal file
71
apps/web/src/app/api/(proxy)/auth/trusted-devices/route.ts
Normal file
@@ -0,0 +1,71 @@
|
||||
import { NextRequest, NextResponse } from "next/server";
|
||||
|
||||
const API_BASE_URL = process.env.API_BASE_URL || "http://localhost:3333";
|
||||
|
||||
export async function GET(req: NextRequest) {
|
||||
try {
|
||||
const cookieHeader = req.headers.get("cookie");
|
||||
const url = `${API_BASE_URL}/auth/trusted-devices`;
|
||||
|
||||
const apiRes = await fetch(url, {
|
||||
method: "GET",
|
||||
headers: {
|
||||
cookie: cookieHeader || "",
|
||||
...Object.fromEntries(Array.from(req.headers.entries()).filter(([key]) => key.startsWith("authorization"))),
|
||||
},
|
||||
redirect: "manual",
|
||||
});
|
||||
|
||||
const resBody = await apiRes.text();
|
||||
const res = new NextResponse(resBody, {
|
||||
status: apiRes.status,
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
});
|
||||
|
||||
const setCookie = apiRes.headers.getSetCookie?.() || [];
|
||||
if (setCookie.length > 0) {
|
||||
res.headers.set("Set-Cookie", setCookie.join(","));
|
||||
}
|
||||
|
||||
return res;
|
||||
} catch (error) {
|
||||
console.error("Error proxying trusted devices request:", error);
|
||||
return NextResponse.json({ error: "Internal server error" }, { status: 500 });
|
||||
}
|
||||
}
|
||||
|
||||
export async function DELETE(req: NextRequest) {
|
||||
try {
|
||||
const cookieHeader = req.headers.get("cookie");
|
||||
const url = `${API_BASE_URL}/auth/trusted-devices`;
|
||||
|
||||
const apiRes = await fetch(url, {
|
||||
method: "DELETE",
|
||||
headers: {
|
||||
cookie: cookieHeader || "",
|
||||
...Object.fromEntries(Array.from(req.headers.entries()).filter(([key]) => key.startsWith("authorization"))),
|
||||
},
|
||||
redirect: "manual",
|
||||
});
|
||||
|
||||
const resBody = await apiRes.text();
|
||||
const res = new NextResponse(resBody, {
|
||||
status: apiRes.status,
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
});
|
||||
|
||||
const setCookie = apiRes.headers.getSetCookie?.() || [];
|
||||
if (setCookie.length > 0) {
|
||||
res.headers.set("Set-Cookie", setCookie.join(","));
|
||||
}
|
||||
|
||||
return res;
|
||||
} catch (error) {
|
||||
console.error("Error proxying remove all trusted devices request:", error);
|
||||
return NextResponse.json({ error: "Internal server error" }, { status: 500 });
|
||||
}
|
||||
}
|
@@ -77,7 +77,7 @@ export function useLogin() {
|
||||
|
||||
const userResponse = await getCurrentUser();
|
||||
if (!userResponse?.data?.user) {
|
||||
throw new Error("No user data");
|
||||
throw new Error(t("errors.noUserData"));
|
||||
}
|
||||
|
||||
const { isAdmin, ...userData } = userResponse.data.user;
|
||||
@@ -143,16 +143,16 @@ export function useLogin() {
|
||||
|
||||
setError(undefined);
|
||||
setIsSubmitting(true);
|
||||
|
||||
|
||||
try {
|
||||
const response = await completeTwoFactorLogin({
|
||||
userId: twoFactorUserId,
|
||||
token: twoFactorCode,
|
||||
rememberDevice: rememberDevice,
|
||||
});
|
||||
|
||||
|
||||
const { isAdmin, ...userData } = response.data.user;
|
||||
|
||||
|
||||
setUser(userData);
|
||||
setIsAdmin(isAdmin);
|
||||
setIsAuthenticated(true);
|
||||
|
@@ -2,16 +2,24 @@
|
||||
|
||||
import { useState } from "react";
|
||||
import {
|
||||
IconAlertTriangle,
|
||||
IconCalendar,
|
||||
IconClock,
|
||||
IconCopy,
|
||||
IconDeviceDesktop,
|
||||
IconDeviceMobile,
|
||||
IconDevices,
|
||||
IconDownload,
|
||||
IconEye,
|
||||
IconEyeClosed,
|
||||
IconKey,
|
||||
IconShield,
|
||||
IconShieldCheck,
|
||||
IconTrash,
|
||||
} from "@tabler/icons-react";
|
||||
import { useTranslations } from "next-intl";
|
||||
|
||||
import { Badge } from "@/components/ui/badge";
|
||||
import { Button } from "@/components/ui/button";
|
||||
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
|
||||
import {
|
||||
@@ -25,6 +33,9 @@ import {
|
||||
import { Input } from "@/components/ui/input";
|
||||
import { InputOTP, InputOTPGroup, InputOTPSlot } from "@/components/ui/input-otp";
|
||||
import { Label } from "@/components/ui/label";
|
||||
import { Separator } from "@/components/ui/separator";
|
||||
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table";
|
||||
import { useTrustedDevices } from "../hooks/use-trusted-devices";
|
||||
import { useTwoFactor } from "../hooks/use-two-factor";
|
||||
|
||||
export function TwoFactorForm() {
|
||||
@@ -52,8 +63,35 @@ export function TwoFactorForm() {
|
||||
copyBackupCodes,
|
||||
} = useTwoFactor();
|
||||
|
||||
const {
|
||||
isLoading: devicesLoading,
|
||||
devices,
|
||||
isRemoveModalOpen,
|
||||
isRemoveAllModalOpen,
|
||||
deviceToRemove,
|
||||
isRemoving,
|
||||
setIsRemoveModalOpen,
|
||||
setIsRemoveAllModalOpen,
|
||||
handleRemoveDevice,
|
||||
confirmRemoveDevice,
|
||||
handleRemoveAllDevices,
|
||||
confirmRemoveAllDevices,
|
||||
formatDeviceName,
|
||||
formatDate,
|
||||
} = useTrustedDevices();
|
||||
|
||||
const [showPassword, setShowPassword] = useState(false);
|
||||
|
||||
const getDeviceIcon = (userAgent: string) => {
|
||||
if (!userAgent) return IconDevices;
|
||||
|
||||
if (userAgent.includes("iPhone") || userAgent.includes("Android") || userAgent.includes("Mobile")) {
|
||||
return IconDeviceMobile;
|
||||
}
|
||||
|
||||
return IconDeviceDesktop;
|
||||
};
|
||||
|
||||
if (isLoading) {
|
||||
return (
|
||||
<Card>
|
||||
@@ -62,7 +100,7 @@ export function TwoFactorForm() {
|
||||
<IconShield className="h-5 w-5" />
|
||||
{t("twoFactor.title")}
|
||||
</CardTitle>
|
||||
<CardDescription>Loading...</CardDescription>
|
||||
<CardDescription>{t("common.loadingSimple")}</CardDescription>
|
||||
</CardHeader>
|
||||
</Card>
|
||||
);
|
||||
@@ -85,7 +123,10 @@ export function TwoFactorForm() {
|
||||
<CardContent className="space-y-4">
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<p className="font-medium">Status: {status.enabled ? "Enabled" : "Disabled"}</p>
|
||||
<p className="font-medium">
|
||||
{t("twoFactor.status.label")}{" "}
|
||||
{status.enabled ? t("twoFactor.status.enabled") : t("twoFactor.status.disabled")}
|
||||
</p>
|
||||
{status.enabled && (
|
||||
<p className="text-sm text-muted-foreground">
|
||||
{t("twoFactor.backupCodes.available", { count: status.availableBackupCodes })}
|
||||
@@ -100,17 +141,154 @@ export function TwoFactorForm() {
|
||||
{t("twoFactor.backupCodes.generateNew")}
|
||||
</Button>
|
||||
<Button variant="destructive" onClick={() => setIsDisableModalOpen(true)} disabled={isLoading}>
|
||||
Disable 2FA
|
||||
{t("twoFactor.buttons.disable2FA")}
|
||||
</Button>
|
||||
</>
|
||||
) : (
|
||||
<Button onClick={startSetup} disabled={isLoading}>
|
||||
<IconShield className="h-4 w-4" />
|
||||
Enable 2FA
|
||||
{t("twoFactor.buttons.enable2FA")}
|
||||
</Button>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Trusted Devices Section - Only shown when 2FA is enabled */}
|
||||
{status.enabled && (
|
||||
<>
|
||||
<Separator className="my-6" />
|
||||
|
||||
<div className="space-y-4">
|
||||
<div className="flex items-center justify-between">
|
||||
<div className="flex items-center gap-2">
|
||||
<IconDevices className="h-5 w-5 text-muted-foreground" />
|
||||
<h3 className="text-lg font-semibold">{t("twoFactor.trustedDevices.title")}</h3>
|
||||
</div>
|
||||
{devices.length > 0 && (
|
||||
<Button
|
||||
variant="ghost"
|
||||
size="sm"
|
||||
onClick={handleRemoveAllDevices}
|
||||
disabled={isRemoving}
|
||||
className="text-muted-foreground hover:text-destructive"
|
||||
>
|
||||
<IconTrash className="h-4 w-4" />
|
||||
{t("twoFactor.trustedDevices.removeAll")}
|
||||
</Button>
|
||||
)}
|
||||
</div>
|
||||
<p className="text-sm text-muted-foreground">{t("twoFactor.trustedDevices.description")}</p>
|
||||
|
||||
{devicesLoading ? (
|
||||
<div className="text-center py-8">
|
||||
<p className="text-muted-foreground">{t("twoFactor.trustedDevices.loading")}</p>
|
||||
</div>
|
||||
) : devices.length === 0 ? (
|
||||
<div className="text-center py-12">
|
||||
<IconDevices className="h-12 w-12 mx-auto text-muted-foreground mb-4" />
|
||||
<p className="text-muted-foreground text-sm">{t("twoFactor.trustedDevices.noDevices")}</p>
|
||||
<p className="text-xs text-muted-foreground/70 mt-2">
|
||||
{t("twoFactor.trustedDevices.noDevicesDescription")}
|
||||
</p>
|
||||
</div>
|
||||
) : (
|
||||
<div className="border rounded-lg overflow-hidden">
|
||||
<Table>
|
||||
<TableHeader>
|
||||
<TableRow className="bg-muted/50">
|
||||
<TableHead className="w-12"></TableHead>
|
||||
<TableHead className="font-semibold">
|
||||
{t("twoFactor.trustedDevices.tableHeaders.device")}
|
||||
</TableHead>
|
||||
<TableHead className="font-semibold">
|
||||
{t("twoFactor.trustedDevices.tableHeaders.added")}
|
||||
</TableHead>
|
||||
<TableHead className="font-semibold">
|
||||
{t("twoFactor.trustedDevices.tableHeaders.expires")}
|
||||
</TableHead>
|
||||
<TableHead className="font-semibold">
|
||||
{t("twoFactor.trustedDevices.tableHeaders.lastUsed")}
|
||||
</TableHead>
|
||||
<TableHead className="font-semibold">
|
||||
{t("twoFactor.trustedDevices.tableHeaders.ipAddress")}
|
||||
</TableHead>
|
||||
<TableHead className="w-20 text-center font-semibold">
|
||||
{t("twoFactor.trustedDevices.tableHeaders.actions")}
|
||||
</TableHead>
|
||||
</TableRow>
|
||||
</TableHeader>
|
||||
<TableBody>
|
||||
{devices.map((device) => {
|
||||
const isExpired = new Date(device.expiresAt) < new Date();
|
||||
const DeviceIcon = getDeviceIcon(device.userAgent || "");
|
||||
|
||||
return (
|
||||
<TableRow key={device.id}>
|
||||
<TableCell className="text-center">
|
||||
<DeviceIcon className="h-4 w-4 text-muted-foreground" />
|
||||
</TableCell>
|
||||
<TableCell>
|
||||
<div className="flex items-center gap-2">
|
||||
<span className={`font-medium ${isExpired ? "text-muted-foreground" : ""}`}>
|
||||
{formatDeviceName(device)}
|
||||
</span>
|
||||
{isExpired && (
|
||||
<Badge variant="secondary" className="text-xs text-destructive">
|
||||
{t("twoFactor.trustedDevices.status.expired")}
|
||||
</Badge>
|
||||
)}
|
||||
</div>
|
||||
</TableCell>
|
||||
<TableCell>
|
||||
<div className="flex items-center gap-1 text-sm text-muted-foreground">
|
||||
<IconCalendar className="h-3 w-3" />
|
||||
<span>{formatDate(device.createdAt)}</span>
|
||||
</div>
|
||||
</TableCell>
|
||||
<TableCell>
|
||||
<div
|
||||
className={`flex items-center gap-1 text-sm ${isExpired ? "text-destructive" : "text-muted-foreground"}`}
|
||||
>
|
||||
<IconClock className="h-3 w-3" />
|
||||
<span>{formatDate(device.expiresAt)}</span>
|
||||
</div>
|
||||
</TableCell>
|
||||
<TableCell>
|
||||
{device.lastUsedAt ? (
|
||||
<div className="flex items-center gap-1 text-sm text-muted-foreground">
|
||||
<IconClock className="h-3 w-3" />
|
||||
<span>{formatDate(device.lastUsedAt)}</span>
|
||||
</div>
|
||||
) : (
|
||||
<span className="text-sm text-muted-foreground">
|
||||
{t("twoFactor.trustedDevices.status.never")}
|
||||
</span>
|
||||
)}
|
||||
</TableCell>
|
||||
<TableCell>
|
||||
<span className="text-sm text-muted-foreground font-mono">{device.ipAddress}</span>
|
||||
</TableCell>
|
||||
<TableCell className="text-center">
|
||||
<Button
|
||||
variant="ghost"
|
||||
size="sm"
|
||||
onClick={() => handleRemoveDevice(device)}
|
||||
disabled={isRemoving}
|
||||
className="text-muted-foreground hover:text-destructive h-8 w-8 p-0"
|
||||
>
|
||||
<IconTrash className="h-4 w-4" />
|
||||
</Button>
|
||||
</TableCell>
|
||||
</TableRow>
|
||||
);
|
||||
})}
|
||||
</TableBody>
|
||||
</Table>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</>
|
||||
)}
|
||||
</CardContent>
|
||||
</Card>
|
||||
|
||||
@@ -270,6 +448,72 @@ export function TwoFactorForm() {
|
||||
</DialogFooter>
|
||||
</DialogContent>
|
||||
</Dialog>
|
||||
|
||||
{/* Remove Device Modal */}
|
||||
<Dialog open={isRemoveModalOpen} onOpenChange={setIsRemoveModalOpen}>
|
||||
<DialogContent className="max-w-md">
|
||||
<DialogHeader>
|
||||
<DialogTitle className="flex items-center gap-2">
|
||||
<IconAlertTriangle className="h-5 w-5 text-destructive" />
|
||||
{t("twoFactor.trustedDevices.modals.removeDevice.title")}
|
||||
</DialogTitle>
|
||||
<DialogDescription>{t("twoFactor.trustedDevices.confirmRemove")}</DialogDescription>
|
||||
</DialogHeader>
|
||||
|
||||
{deviceToRemove && (
|
||||
<div className="p-4 bg-muted rounded-lg">
|
||||
<p className="font-medium">{formatDeviceName(deviceToRemove)}</p>
|
||||
<p className="text-sm text-muted-foreground">
|
||||
{t("twoFactor.trustedDevices.modals.removeDevice.added")} {formatDate(deviceToRemove.createdAt)}
|
||||
</p>
|
||||
<p className="text-xs text-muted-foreground">
|
||||
{t("twoFactor.trustedDevices.modals.removeDevice.ip")} {deviceToRemove.ipAddress}
|
||||
</p>
|
||||
</div>
|
||||
)}
|
||||
|
||||
<DialogFooter>
|
||||
<Button variant="outline" onClick={() => setIsRemoveModalOpen(false)} disabled={isRemoving}>
|
||||
{t("twoFactor.trustedDevices.modals.buttons.cancel")}
|
||||
</Button>
|
||||
<Button variant="destructive" onClick={confirmRemoveDevice} disabled={isRemoving}>
|
||||
{isRemoving
|
||||
? t("twoFactor.trustedDevices.modals.buttons.removing")
|
||||
: t("twoFactor.trustedDevices.modals.buttons.removeDevice")}
|
||||
</Button>
|
||||
</DialogFooter>
|
||||
</DialogContent>
|
||||
</Dialog>
|
||||
|
||||
{/* Remove All Devices Modal */}
|
||||
<Dialog open={isRemoveAllModalOpen} onOpenChange={setIsRemoveAllModalOpen}>
|
||||
<DialogContent className="max-w-md">
|
||||
<DialogHeader>
|
||||
<DialogTitle className="flex items-center gap-2">
|
||||
<IconAlertTriangle className="h-5 w-5 text-destructive" />
|
||||
{t("twoFactor.trustedDevices.modals.removeAllDevices.title")}
|
||||
</DialogTitle>
|
||||
<DialogDescription>{t("twoFactor.trustedDevices.confirmRemoveAll")}</DialogDescription>
|
||||
</DialogHeader>
|
||||
|
||||
<div className="p-4 bg-muted rounded-lg">
|
||||
<p className="text-sm">
|
||||
{t("twoFactor.trustedDevices.modals.removeAllDevices.description", { count: devices.length })}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<DialogFooter>
|
||||
<Button variant="outline" onClick={() => setIsRemoveAllModalOpen(false)} disabled={isRemoving}>
|
||||
{t("twoFactor.trustedDevices.modals.buttons.cancel")}
|
||||
</Button>
|
||||
<Button variant="destructive" onClick={confirmRemoveAllDevices} disabled={isRemoving}>
|
||||
{isRemoving
|
||||
? t("twoFactor.trustedDevices.modals.buttons.removing")
|
||||
: t("twoFactor.trustedDevices.modals.buttons.removeAllDevices")}
|
||||
</Button>
|
||||
</DialogFooter>
|
||||
</DialogContent>
|
||||
</Dialog>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
144
apps/web/src/app/profile/hooks/use-trusted-devices.ts
Normal file
144
apps/web/src/app/profile/hooks/use-trusted-devices.ts
Normal file
@@ -0,0 +1,144 @@
|
||||
"use client";
|
||||
|
||||
import { useCallback, useEffect, useState } from "react";
|
||||
import { useTranslations } from "next-intl";
|
||||
import { toast } from "sonner";
|
||||
|
||||
import { getTrustedDevices, removeAllTrustedDevices, removeTrustedDevice } from "@/http/endpoints";
|
||||
import type { TrustedDevice } from "@/http/endpoints/auth/trusted-devices/types";
|
||||
|
||||
export function useTrustedDevices() {
|
||||
const t = useTranslations();
|
||||
const [isLoading, setIsLoading] = useState(true);
|
||||
const [devices, setDevices] = useState<TrustedDevice[]>([]);
|
||||
const [isRemoveModalOpen, setIsRemoveModalOpen] = useState(false);
|
||||
const [isRemoveAllModalOpen, setIsRemoveAllModalOpen] = useState(false);
|
||||
const [deviceToRemove, setDeviceToRemove] = useState<TrustedDevice | null>(null);
|
||||
const [isRemoving, setIsRemoving] = useState(false);
|
||||
|
||||
const loadDevices = useCallback(async () => {
|
||||
try {
|
||||
setIsLoading(true);
|
||||
const response = await getTrustedDevices();
|
||||
setDevices(response.devices);
|
||||
} catch (error) {
|
||||
toast.error(t("twoFactor.trustedDevices.loadFailed"));
|
||||
console.error("Failed to load trusted devices:", error);
|
||||
} finally {
|
||||
setIsLoading(false);
|
||||
}
|
||||
}, [t]);
|
||||
|
||||
const handleRemoveDevice = useCallback(async (device: TrustedDevice) => {
|
||||
setDeviceToRemove(device);
|
||||
setIsRemoveModalOpen(true);
|
||||
}, []);
|
||||
|
||||
const confirmRemoveDevice = useCallback(async () => {
|
||||
if (!deviceToRemove) return;
|
||||
|
||||
try {
|
||||
setIsRemoving(true);
|
||||
await removeTrustedDevice({ deviceId: deviceToRemove.id });
|
||||
toast.success(t("twoFactor.trustedDevices.deviceRemoved"));
|
||||
await loadDevices();
|
||||
setIsRemoveModalOpen(false);
|
||||
setDeviceToRemove(null);
|
||||
} catch (error) {
|
||||
toast.error(t("twoFactor.trustedDevices.removeFailed"));
|
||||
console.error("Failed to remove trusted device:", error);
|
||||
} finally {
|
||||
setIsRemoving(false);
|
||||
}
|
||||
}, [deviceToRemove, t, loadDevices]);
|
||||
|
||||
const handleRemoveAllDevices = useCallback(() => {
|
||||
setIsRemoveAllModalOpen(true);
|
||||
}, []);
|
||||
|
||||
const confirmRemoveAllDevices = useCallback(async () => {
|
||||
try {
|
||||
setIsRemoving(true);
|
||||
const response = await removeAllTrustedDevices();
|
||||
toast.success(t("twoFactor.trustedDevices.allDevicesRemoved"));
|
||||
await loadDevices();
|
||||
setIsRemoveAllModalOpen(false);
|
||||
} catch (error) {
|
||||
toast.error(t("twoFactor.trustedDevices.removeAllFailed"));
|
||||
console.error("Failed to remove all trusted devices:", error);
|
||||
} finally {
|
||||
setIsRemoving(false);
|
||||
}
|
||||
}, [t, loadDevices]);
|
||||
|
||||
const formatDeviceName = useCallback(
|
||||
(device: TrustedDevice) => {
|
||||
const userAgent = device.userAgent;
|
||||
|
||||
// Extract browser and OS info from user agent
|
||||
let deviceInfo = t("twoFactor.deviceNames.unknownDevice");
|
||||
|
||||
// Verificação de null safety
|
||||
if (!userAgent) {
|
||||
return deviceInfo;
|
||||
}
|
||||
|
||||
if (userAgent.includes("Chrome")) {
|
||||
deviceInfo = t("twoFactor.deviceNames.browsers.chrome");
|
||||
} else if (userAgent.includes("Firefox")) {
|
||||
deviceInfo = t("twoFactor.deviceNames.browsers.firefox");
|
||||
} else if (userAgent.includes("Safari") && !userAgent.includes("Chrome")) {
|
||||
deviceInfo = t("twoFactor.deviceNames.browsers.safari");
|
||||
} else if (userAgent.includes("Edge")) {
|
||||
deviceInfo = t("twoFactor.deviceNames.browsers.edge");
|
||||
}
|
||||
|
||||
if (userAgent.includes("Windows")) {
|
||||
deviceInfo += t("twoFactor.deviceNames.platforms.windows");
|
||||
} else if (userAgent.includes("Mac")) {
|
||||
deviceInfo += t("twoFactor.deviceNames.platforms.macos");
|
||||
} else if (userAgent.includes("Linux")) {
|
||||
deviceInfo += t("twoFactor.deviceNames.platforms.linux");
|
||||
} else if (userAgent.includes("iPhone")) {
|
||||
deviceInfo += t("twoFactor.deviceNames.platforms.iphone");
|
||||
} else if (userAgent.includes("Android")) {
|
||||
deviceInfo += t("twoFactor.deviceNames.platforms.android");
|
||||
}
|
||||
|
||||
return deviceInfo;
|
||||
},
|
||||
[t]
|
||||
);
|
||||
|
||||
const formatDate = useCallback((dateString: string) => {
|
||||
return new Date(dateString).toLocaleDateString("en-US", {
|
||||
year: "numeric",
|
||||
month: "short",
|
||||
day: "numeric",
|
||||
hour: "2-digit",
|
||||
minute: "2-digit",
|
||||
});
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
loadDevices();
|
||||
}, [loadDevices]);
|
||||
|
||||
return {
|
||||
isLoading,
|
||||
devices,
|
||||
isRemoveModalOpen,
|
||||
isRemoveAllModalOpen,
|
||||
deviceToRemove,
|
||||
isRemoving,
|
||||
setIsRemoveModalOpen,
|
||||
setIsRemoveAllModalOpen,
|
||||
handleRemoveDevice,
|
||||
confirmRemoveDevice,
|
||||
handleRemoveAllDevices,
|
||||
confirmRemoveAllDevices,
|
||||
formatDeviceName,
|
||||
formatDate,
|
||||
loadDevices,
|
||||
};
|
||||
}
|
@@ -1,39 +1,30 @@
|
||||
"use client"
|
||||
"use client";
|
||||
|
||||
import * as React from "react"
|
||||
import { OTPInput, OTPInputContext } from "input-otp"
|
||||
import { MinusIcon } from "lucide-react"
|
||||
import * as React from "react";
|
||||
import { OTPInput, OTPInputContext } from "input-otp";
|
||||
import { MinusIcon } from "lucide-react";
|
||||
|
||||
import { cn } from "@/lib/utils"
|
||||
import { cn } from "@/lib/utils";
|
||||
|
||||
function InputOTP({
|
||||
className,
|
||||
containerClassName,
|
||||
...props
|
||||
}: React.ComponentProps<typeof OTPInput> & {
|
||||
containerClassName?: string
|
||||
containerClassName?: string;
|
||||
}) {
|
||||
return (
|
||||
<OTPInput
|
||||
data-slot="input-otp"
|
||||
containerClassName={cn(
|
||||
"flex items-center gap-2 has-disabled:opacity-50",
|
||||
containerClassName
|
||||
)}
|
||||
containerClassName={cn("flex items-center gap-2 has-disabled:opacity-50", containerClassName)}
|
||||
className={cn("disabled:cursor-not-allowed", className)}
|
||||
{...props}
|
||||
/>
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
function InputOTPGroup({ className, ...props }: React.ComponentProps<"div">) {
|
||||
return (
|
||||
<div
|
||||
data-slot="input-otp-group"
|
||||
className={cn("flex items-center", className)}
|
||||
{...props}
|
||||
/>
|
||||
)
|
||||
return <div data-slot="input-otp-group" className={cn("flex items-center", className)} {...props} />;
|
||||
}
|
||||
|
||||
function InputOTPSlot({
|
||||
@@ -41,10 +32,10 @@ function InputOTPSlot({
|
||||
className,
|
||||
...props
|
||||
}: React.ComponentProps<"div"> & {
|
||||
index: number
|
||||
index: number;
|
||||
}) {
|
||||
const inputOTPContext = React.useContext(OTPInputContext)
|
||||
const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {}
|
||||
const inputOTPContext = React.useContext(OTPInputContext);
|
||||
const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {};
|
||||
|
||||
return (
|
||||
<div
|
||||
@@ -63,7 +54,7 @@ function InputOTPSlot({
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
function InputOTPSeparator({ ...props }: React.ComponentProps<"div">) {
|
||||
@@ -71,7 +62,7 @@ function InputOTPSeparator({ ...props }: React.ComponentProps<"div">) {
|
||||
<div data-slot="input-otp-separator" role="separator" {...props}>
|
||||
<MinusIcon />
|
||||
</div>
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
export { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator }
|
||||
export { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator };
|
||||
|
24
apps/web/src/http/endpoints/auth/trusted-devices/index.ts
Normal file
24
apps/web/src/http/endpoints/auth/trusted-devices/index.ts
Normal file
@@ -0,0 +1,24 @@
|
||||
import apiInstance from "@/config/api";
|
||||
import {
|
||||
RemoveAllTrustedDevicesResponse,
|
||||
RemoveTrustedDeviceRequest,
|
||||
RemoveTrustedDeviceResponse,
|
||||
TrustedDevicesResponse,
|
||||
} from "./types";
|
||||
|
||||
export const getTrustedDevices = async (): Promise<TrustedDevicesResponse> => {
|
||||
const response = await apiInstance.get("/api/auth/trusted-devices");
|
||||
return response.data;
|
||||
};
|
||||
|
||||
export const removeTrustedDevice = async (data: RemoveTrustedDeviceRequest): Promise<RemoveTrustedDeviceResponse> => {
|
||||
const response = await apiInstance.delete(`/api/auth/trusted-devices/${data.deviceId}`);
|
||||
return response.data;
|
||||
};
|
||||
|
||||
export const removeAllTrustedDevices = async (): Promise<RemoveAllTrustedDevicesResponse> => {
|
||||
const response = await apiInstance.delete("/api/auth/trusted-devices");
|
||||
return response.data;
|
||||
};
|
||||
|
||||
export * from "./types";
|
28
apps/web/src/http/endpoints/auth/trusted-devices/types.ts
Normal file
28
apps/web/src/http/endpoints/auth/trusted-devices/types.ts
Normal file
@@ -0,0 +1,28 @@
|
||||
export interface TrustedDevice {
|
||||
id: string;
|
||||
deviceName: string | null;
|
||||
userAgent: string | null;
|
||||
ipAddress: string | null;
|
||||
createdAt: string;
|
||||
lastUsedAt: string;
|
||||
expiresAt: string;
|
||||
}
|
||||
|
||||
export interface TrustedDevicesResponse {
|
||||
devices: TrustedDevice[];
|
||||
}
|
||||
|
||||
export interface RemoveTrustedDeviceRequest {
|
||||
deviceId: string;
|
||||
}
|
||||
|
||||
export interface RemoveTrustedDeviceResponse {
|
||||
success: boolean;
|
||||
message: string;
|
||||
}
|
||||
|
||||
export interface RemoveAllTrustedDevicesResponse {
|
||||
success: boolean;
|
||||
message: string;
|
||||
removedCount: number;
|
||||
}
|
@@ -5,3 +5,4 @@ export * from "./shares";
|
||||
export * from "./reverse-shares";
|
||||
export * from "./config";
|
||||
export * from "./app";
|
||||
export * from "./auth/trusted-devices";
|
||||
|
@@ -1,11 +1,7 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "ES2017",
|
||||
"lib": [
|
||||
"dom",
|
||||
"dom.iterable",
|
||||
"esnext"
|
||||
],
|
||||
"lib": ["dom", "dom.iterable", "esnext"],
|
||||
"allowJs": true,
|
||||
"skipLibCheck": true,
|
||||
"strict": true,
|
||||
@@ -23,20 +19,9 @@
|
||||
}
|
||||
],
|
||||
"paths": {
|
||||
"@/*": [
|
||||
"./src/*"
|
||||
]
|
||||
"@/*": ["./src/*"]
|
||||
}
|
||||
},
|
||||
"exclude": [
|
||||
"node_modules",
|
||||
".next/types/app/api/(proxy)/**/*",
|
||||
".next/types/**/*.ts"
|
||||
],
|
||||
"include": [
|
||||
"**/*.ts",
|
||||
"**/*.tsx",
|
||||
"next-env.d.ts",
|
||||
".next/types/**/*.ts"
|
||||
]
|
||||
"exclude": ["node_modules", ".next/types/app/api/(proxy)/**/*", ".next/types/**/*.ts"],
|
||||
"include": ["**/*.ts", "**/*.tsx", "next-env.d.ts", ".next/types/**/*.ts"]
|
||||
}
|
||||
|
Reference in New Issue
Block a user