From 2a6298e9eb3a021e629ebe8ac7f08288df0f6dab Mon Sep 17 00:00:00 2001 From: "J. Newing" Date: Mon, 7 Jul 2025 16:02:42 -0400 Subject: [PATCH 1/8] Admins can enable 2FA Added the feature for admins to force 2FA on accounts. The next time the user logs in they will have to setup 2FA on their account. --- package-lock.json | 16 +- server/routers/auth/completeTotpSetup.ts | 179 +++++++++++ server/routers/auth/index.ts | 2 + server/routers/auth/login.ts | 14 +- server/routers/auth/setupTotpSecret.ts | 127 ++++++++ server/routers/external.ts | 9 + server/routers/user/getOrgUser.ts | 3 +- server/routers/user/index.ts | 1 + server/routers/user/updateUser2FA.ts | 151 +++++++++ .../users/[userId]/access-controls/page.tsx | 66 +++- src/app/auth/2fa/setup/page.tsx | 289 ++++++++++++++++++ src/components/LoginForm.tsx | 6 + 12 files changed, 843 insertions(+), 20 deletions(-) create mode 100644 server/routers/auth/completeTotpSetup.ts create mode 100644 server/routers/auth/setupTotpSecret.ts create mode 100644 server/routers/user/updateUser2FA.ts create mode 100644 src/app/auth/2fa/setup/page.tsx diff --git a/package-lock.json b/package-lock.json index 292874b0..0316d12b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -121,8 +121,7 @@ "tsc-alias": "1.8.16", "tsx": "4.20.3", "typescript": "^5", - "typescript-eslint": "^8.35.0", - "yargs": "18.0.0" + "typescript-eslint": "^8.35.0" } }, "node_modules/@alloc/quick-lru": { @@ -6174,7 +6173,6 @@ "version": "9.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", - "dev": true, "license": "ISC", "dependencies": { "string-width": "^7.2.0", @@ -6189,7 +6187,6 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -6202,14 +6199,12 @@ "version": "10.4.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "dev": true, "license": "MIT" }, "node_modules/cliui/node_modules/string-width": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", @@ -6227,7 +6222,6 @@ "version": "9.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", @@ -7397,7 +7391,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -8342,7 +8335,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" @@ -8352,7 +8344,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -16479,7 +16470,6 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, "license": "ISC", "engines": { "node": ">=10" @@ -16511,7 +16501,6 @@ "version": "18.0.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", - "dev": true, "license": "MIT", "dependencies": { "cliui": "^9.0.1", @@ -16529,7 +16518,6 @@ "version": "22.0.0", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", - "dev": true, "license": "ISC", "engines": { "node": "^20.19.0 || ^22.12.0 || >=23" @@ -16539,14 +16527,12 @@ "version": "10.4.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "dev": true, "license": "MIT" }, "node_modules/yargs/node_modules/string-width": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", diff --git a/server/routers/auth/completeTotpSetup.ts b/server/routers/auth/completeTotpSetup.ts new file mode 100644 index 00000000..397f356b --- /dev/null +++ b/server/routers/auth/completeTotpSetup.ts @@ -0,0 +1,179 @@ +import { Request, Response, NextFunction } from "express"; +import createHttpError from "http-errors"; +import { z } from "zod"; +import { fromError } from "zod-validation-error"; +import HttpCode from "@server/types/HttpCode"; +import { response } from "@server/lib"; +import { db } from "@server/db"; +import { twoFactorBackupCodes, users } from "@server/db"; +import { eq, and } from "drizzle-orm"; +import { alphabet, generateRandomString } from "oslo/crypto"; +import { hashPassword, verifyPassword } from "@server/auth/password"; +import { verifyTotpCode } from "@server/auth/totp"; +import logger from "@server/logger"; +import { sendEmail } from "@server/emails"; +import TwoFactorAuthNotification from "@server/emails/templates/TwoFactorAuthNotification"; +import config from "@server/lib/config"; +import { UserType } from "@server/types/UserTypes"; + +export const completeTotpSetupBody = z + .object({ + email: z.string().email(), + password: z.string(), + code: z.string() + }) + .strict(); + +export type CompleteTotpSetupBody = z.infer; + +export type CompleteTotpSetupResponse = { + valid: boolean; + backupCodes?: string[]; +}; + +export async function completeTotpSetup( + req: Request, + res: Response, + next: NextFunction +): Promise { + const parsedBody = completeTotpSetupBody.safeParse(req.body); + + if (!parsedBody.success) { + return next( + createHttpError( + HttpCode.BAD_REQUEST, + fromError(parsedBody.error).toString() + ) + ); + } + + const { email, password, code } = parsedBody.data; + + try { + // Find the user by email + const [user] = await db + .select() + .from(users) + .where(and(eq(users.email, email), eq(users.type, UserType.Internal))) + .limit(1); + + if (!user) { + return next( + createHttpError( + HttpCode.UNAUTHORIZED, + "Invalid credentials" + ) + ); + } + + // Verify password + const validPassword = await verifyPassword(password, user.passwordHash!); + if (!validPassword) { + return next( + createHttpError( + HttpCode.UNAUTHORIZED, + "Invalid credentials" + ) + ); + } + + // Check if 2FA is enabled but not yet completed + if (!user.twoFactorEnabled) { + return next( + createHttpError( + HttpCode.BAD_REQUEST, + "Two-factor authentication is not required for this user" + ) + ); + } + + if (!user.twoFactorSecret) { + return next( + createHttpError( + HttpCode.BAD_REQUEST, + "User has not started two-factor authentication setup" + ) + ); + } + + // Verify the TOTP code + const valid = await verifyTotpCode( + code, + user.twoFactorSecret, + user.userId + ); + + if (!valid) { + if (config.getRawConfig().app.log_failed_attempts) { + logger.info( + `Two-factor authentication code is incorrect. Email: ${email}. IP: ${req.ip}.` + ); + } + return next( + createHttpError( + HttpCode.BAD_REQUEST, + "Invalid two-factor authentication code" + ) + ); + } + + // Generate backup codes and finalize setup + let codes: string[] = []; + await db.transaction(async (trx) => { + // Note: We don't set twoFactorEnabled to true here because it's already true + // We just need to generate backup codes since the setup is now complete + + const backupCodes = await generateBackupCodes(); + codes = backupCodes; + for (const code of backupCodes) { + const hash = await hashPassword(code); + + await trx.insert(twoFactorBackupCodes).values({ + userId: user.userId, + codeHash: hash + }); + } + }); + + // Send notification email + sendEmail( + TwoFactorAuthNotification({ + email: user.email!, + enabled: true + }), + { + to: user.email!, + from: config.getRawConfig().email?.no_reply, + subject: "Two-factor authentication enabled" + } + ); + + return response(res, { + data: { + valid: true, + backupCodes: codes + }, + success: true, + error: false, + message: "Two-factor authentication setup completed successfully", + status: HttpCode.OK + }); + } catch (error) { + logger.error(error); + return next( + createHttpError( + HttpCode.INTERNAL_SERVER_ERROR, + "Failed to complete two-factor authentication setup" + ) + ); + } +} + +async function generateBackupCodes(): Promise { + const codes = []; + for (let i = 0; i < 10; i++) { + const code = generateRandomString(6, alphabet("0-9", "A-Z", "a-z")); + codes.push(code); + } + return codes; +} \ No newline at end of file diff --git a/server/routers/auth/index.ts b/server/routers/auth/index.ts index 6955e16c..2b45a140 100644 --- a/server/routers/auth/index.ts +++ b/server/routers/auth/index.ts @@ -3,6 +3,8 @@ export * from "./signup"; export * from "./logout"; export * from "./verifyTotp"; export * from "./requestTotpSecret"; +export * from "./setupTotpSecret"; +export * from "./completeTotpSetup"; export * from "./disable2fa"; export * from "./verifyEmail"; export * from "./requestEmailVerificationCode"; diff --git a/server/routers/auth/login.ts b/server/routers/auth/login.ts index f5f7ff77..5080846a 100644 --- a/server/routers/auth/login.ts +++ b/server/routers/auth/login.ts @@ -35,6 +35,7 @@ export type LoginBody = z.infer; export type LoginResponse = { codeRequested?: boolean; emailVerificationRequired?: boolean; + twoFactorSetupRequired?: boolean; }; export const dynamic = "force-dynamic"; @@ -110,6 +111,17 @@ export async function login( } if (existingUser.twoFactorEnabled) { + // If 2FA is enabled but no secret exists, force setup + if (!existingUser.twoFactorSecret) { + return response(res, { + data: { twoFactorSetupRequired: true }, + success: true, + error: false, + message: "Two-factor authentication setup required", + status: HttpCode.ACCEPTED + }); + } + if (!code) { return response<{ codeRequested: boolean }>(res, { data: { codeRequested: true }, @@ -122,7 +134,7 @@ export async function login( const validOTP = await verifyTotpCode( code, - existingUser.twoFactorSecret!, + existingUser.twoFactorSecret, existingUser.userId ); diff --git a/server/routers/auth/setupTotpSecret.ts b/server/routers/auth/setupTotpSecret.ts new file mode 100644 index 00000000..89807e8e --- /dev/null +++ b/server/routers/auth/setupTotpSecret.ts @@ -0,0 +1,127 @@ +import { Request, Response, NextFunction } from "express"; +import createHttpError from "http-errors"; +import { z } from "zod"; +import { fromError } from "zod-validation-error"; +import { encodeHex } from "oslo/encoding"; +import HttpCode from "@server/types/HttpCode"; +import { response } from "@server/lib"; +import { db } from "@server/db"; +import { User, users } from "@server/db"; +import { eq, and } from "drizzle-orm"; +import { createTOTPKeyURI } from "oslo/otp"; +import logger from "@server/logger"; +import { verifyPassword } from "@server/auth/password"; +import { UserType } from "@server/types/UserTypes"; + +export const setupTotpSecretBody = z + .object({ + email: z.string().email(), + password: z.string() + }) + .strict(); + +export type SetupTotpSecretBody = z.infer; + +export type SetupTotpSecretResponse = { + secret: string; + uri: string; +}; + +export async function setupTotpSecret( + req: Request, + res: Response, + next: NextFunction +): Promise { + const parsedBody = setupTotpSecretBody.safeParse(req.body); + + if (!parsedBody.success) { + return next( + createHttpError( + HttpCode.BAD_REQUEST, + fromError(parsedBody.error).toString() + ) + ); + } + + const { email, password } = parsedBody.data; + + try { + // Find the user by email + const [user] = await db + .select() + .from(users) + .where(and(eq(users.email, email), eq(users.type, UserType.Internal))) + .limit(1); + + if (!user) { + return next( + createHttpError( + HttpCode.UNAUTHORIZED, + "Invalid credentials" + ) + ); + } + + // Verify password + const validPassword = await verifyPassword(password, user.passwordHash!); + if (!validPassword) { + return next( + createHttpError( + HttpCode.UNAUTHORIZED, + "Invalid credentials" + ) + ); + } + + // Check if 2FA is enabled but no secret exists (forced setup scenario) + if (!user.twoFactorEnabled) { + return next( + createHttpError( + HttpCode.BAD_REQUEST, + "Two-factor authentication is not required for this user" + ) + ); + } + + if (user.twoFactorSecret) { + return next( + createHttpError( + HttpCode.BAD_REQUEST, + "User has already completed two-factor authentication setup" + ) + ); + } + + // Generate new TOTP secret + const hex = crypto.getRandomValues(new Uint8Array(20)); + const secret = encodeHex(hex); + const uri = createTOTPKeyURI("Pangolin", user.email!, hex); + + // Save the secret to the database + await db + .update(users) + .set({ + twoFactorSecret: secret + }) + .where(eq(users.userId, user.userId)); + + return response(res, { + data: { + secret, + uri + }, + success: true, + error: false, + message: "TOTP secret generated successfully", + status: HttpCode.OK + }); + } catch (error) { + logger.error(error); + return next( + createHttpError( + HttpCode.INTERNAL_SERVER_ERROR, + "Failed to generate TOTP secret" + ) + ); + } +} \ No newline at end of file diff --git a/server/routers/external.ts b/server/routers/external.ts index 8cb3a19d..c764fa6d 100644 --- a/server/routers/external.ts +++ b/server/routers/external.ts @@ -490,6 +490,13 @@ authenticated.put( ); authenticated.get("/org/:orgId/user/:userId", verifyOrgAccess, user.getOrgUser); +authenticated.patch( + "/org/:orgId/user/:userId/2fa", + verifyOrgAccess, + verifyUserAccess, + verifyUserHasAction(ActionsEnum.getOrgUser), + user.updateUser2FA +); authenticated.get( "/org/:orgId/users", @@ -718,6 +725,8 @@ authRouter.post( verifySessionUserMiddleware, auth.requestTotpSecret ); +authRouter.post("/2fa/setup", auth.setupTotpSecret); +authRouter.post("/2fa/complete-setup", auth.completeTotpSetup); authRouter.post("/2fa/disable", verifySessionUserMiddleware, auth.disable2fa); authRouter.post("/verify-email", verifySessionMiddleware, auth.verifyEmail); diff --git a/server/routers/user/getOrgUser.ts b/server/routers/user/getOrgUser.ts index 562ef34e..05e231c9 100644 --- a/server/routers/user/getOrgUser.ts +++ b/server/routers/user/getOrgUser.ts @@ -23,7 +23,8 @@ async function queryUser(orgId: string, userId: string) { roleId: userOrgs.roleId, roleName: roles.name, isOwner: userOrgs.isOwner, - isAdmin: roles.isAdmin + isAdmin: roles.isAdmin, + twoFactorEnabled: users.twoFactorEnabled, }) .from(userOrgs) .leftJoin(roles, eq(userOrgs.roleId, roles.roleId)) diff --git a/server/routers/user/index.ts b/server/routers/user/index.ts index 49278c14..ed8a1769 100644 --- a/server/routers/user/index.ts +++ b/server/routers/user/index.ts @@ -10,3 +10,4 @@ export * from "./adminRemoveUser"; export * from "./listInvitations"; export * from "./removeInvitation"; export * from "./createOrgUser"; +export * from "./updateUser2FA"; diff --git a/server/routers/user/updateUser2FA.ts b/server/routers/user/updateUser2FA.ts new file mode 100644 index 00000000..845eaa0c --- /dev/null +++ b/server/routers/user/updateUser2FA.ts @@ -0,0 +1,151 @@ +import { Request, Response, NextFunction } from "express"; +import { z } from "zod"; +import { db } from "@server/db"; +import { users, userOrgs } from "@server/db"; +import { eq, and } from "drizzle-orm"; +import response from "@server/lib/response"; +import HttpCode from "@server/types/HttpCode"; +import createHttpError from "http-errors"; +import logger from "@server/logger"; +import { fromError } from "zod-validation-error"; +import { ActionsEnum, checkUserActionPermission } from "@server/auth/actions"; +import { OpenAPITags, registry } from "@server/openApi"; + +const updateUser2FAParamsSchema = z + .object({ + userId: z.string(), + orgId: z.string() + }) + .strict(); + +const updateUser2FABodySchema = z + .object({ + twoFactorEnabled: z.boolean() + }) + .strict(); + +export type UpdateUser2FAResponse = { + userId: string; + twoFactorEnabled: boolean; +}; + +registry.registerPath({ + method: "patch", + path: "/org/{orgId}/user/{userId}/2fa", + description: "Update a user's 2FA status within an organization.", + tags: [OpenAPITags.Org, OpenAPITags.User], + request: { + params: updateUser2FAParamsSchema, + body: { + content: { + "application/json": { + schema: updateUser2FABodySchema + } + } + } + }, + responses: {} +}); + +export async function updateUser2FA( + req: Request, + res: Response, + next: NextFunction +): Promise { + try { + const parsedParams = updateUser2FAParamsSchema.safeParse(req.params); + if (!parsedParams.success) { + return next( + createHttpError( + HttpCode.BAD_REQUEST, + fromError(parsedParams.error).toString() + ) + ); + } + + const parsedBody = updateUser2FABodySchema.safeParse(req.body); + if (!parsedBody.success) { + return next( + createHttpError( + HttpCode.BAD_REQUEST, + fromError(parsedBody.error).toString() + ) + ); + } + + const { userId, orgId } = parsedParams.data; + const { twoFactorEnabled } = parsedBody.data; + + if (!req.userOrg) { + return next( + createHttpError( + HttpCode.FORBIDDEN, + "You do not have access to this organization" + ) + ); + } + + // Check if user has permission to update other users' 2FA + const hasPermission = await checkUserActionPermission( + ActionsEnum.getOrgUser, + req + ); + if (!hasPermission) { + return next( + createHttpError( + HttpCode.FORBIDDEN, + "User does not have permission to update other users' 2FA settings" + ) + ); + } + + // Verify the user exists in the organization + const existingUser = await db + .select() + .from(userOrgs) + .where(and(eq(userOrgs.userId, userId), eq(userOrgs.orgId, orgId))) + .limit(1); + + if (existingUser.length === 0) { + return next( + createHttpError( + HttpCode.NOT_FOUND, + "User not found or does not belong to the specified organization" + ) + ); + } + + // Update the user's 2FA status + const updatedUser = await db + .update(users) + .set({ + twoFactorEnabled, + // If disabling 2FA, also clear the secret + twoFactorSecret: twoFactorEnabled ? undefined : null + }) + .where(eq(users.userId, userId)) + .returning({ userId: users.userId, twoFactorEnabled: users.twoFactorEnabled }); + + if (updatedUser.length === 0) { + return next( + createHttpError( + HttpCode.NOT_FOUND, + "User not found" + ) + ); + } + + return response(res, { + data: updatedUser[0], + success: true, + error: false, + message: `2FA ${twoFactorEnabled ? 'enabled' : 'disabled'} for user successfully`, + status: HttpCode.OK + }); + } catch (error) { + logger.error(error); + return next( + createHttpError(HttpCode.INTERNAL_SERVER_ERROR, "An error occurred") + ); + } +} \ No newline at end of file diff --git a/src/app/[orgId]/settings/access/users/[userId]/access-controls/page.tsx b/src/app/[orgId]/settings/access/users/[userId]/access-controls/page.tsx index 82999ad2..191fac77 100644 --- a/src/app/[orgId]/settings/access/users/[userId]/access-controls/page.tsx +++ b/src/app/[orgId]/settings/access/users/[userId]/access-controls/page.tsx @@ -27,6 +27,7 @@ import { ListRolesResponse } from "@server/routers/role"; import { userOrgUserContext } from "@app/hooks/useOrgUserContext"; import { useParams } from "next/navigation"; import { Button } from "@app/components/ui/button"; +import { Checkbox } from "@app/components/ui/checkbox"; import { SettingsContainer, SettingsSection, @@ -43,7 +44,9 @@ import { useEnvContext } from "@app/hooks/useEnvContext"; import { useTranslations } from "next-intl"; export default function AccessControlsPage() { - const { orgUser: user } = userOrgUserContext(); + const { orgUser: user, updateOrgUser } = userOrgUserContext(); + + console.log("User:", user); const api = createApiClient(useEnvContext()); @@ -51,6 +54,7 @@ export default function AccessControlsPage() { const [loading, setLoading] = useState(false); const [roles, setRoles] = useState<{ roleId: number; name: string }[]>([]); + const [enable2FA, setEnable2FA] = useState(user.twoFactorEnabled || false); const t = useTranslations(); @@ -96,7 +100,8 @@ export default function AccessControlsPage() { async function onSubmit(values: z.infer) { setLoading(true); - const res = await api + // Update user role + const roleRes = await api .post< AxiosResponse >(`/role/${values.roleId}/add/${user.userId}`) @@ -109,9 +114,34 @@ export default function AccessControlsPage() { t('accessRoleErrorAddDescription') ) }); + return null; }); - if (res && res.status === 200) { + // Update 2FA status if it changed + if (enable2FA !== user.twoFactorEnabled) { + const twoFARes = await api + .patch(`/org/${orgId}/user/${user.userId}/2fa`, { + twoFactorEnabled: enable2FA + }) + .catch((e) => { + toast({ + variant: "destructive", + title: "Error updating 2FA", + description: formatAxiosError( + e, + "Failed to update 2FA status" + ) + }); + return null; + }); + + if (twoFARes && twoFARes.status === 200) { + // Update the user context with the new 2FA status + updateOrgUser({ twoFactorEnabled: enable2FA }); + } + } + + if (roleRes && roleRes.status === 200) { toast({ variant: "default", title: t('userSaved'), @@ -170,6 +200,36 @@ export default function AccessControlsPage() { )} /> + +
+
+ + setEnable2FA( + e as boolean + ) + } + /> + +
+

+ When enabled, the user will be required to set up their authenticator app on their next login. + {user.twoFactorEnabled && ( + This user currently has 2FA enabled. + )} +

+
+ + diff --git a/src/app/auth/2fa/setup/page.tsx b/src/app/auth/2fa/setup/page.tsx new file mode 100644 index 00000000..2f77aaa5 --- /dev/null +++ b/src/app/auth/2fa/setup/page.tsx @@ -0,0 +1,289 @@ +"use client"; + +import { useState, useEffect } from "react"; +import { useRouter, useSearchParams } from "next/navigation"; +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; +import { AlertCircle, CheckCircle2 } from "lucide-react"; +import { createApiClient } from "@app/lib/api"; +import { useEnvContext } from "@app/hooks/useEnvContext"; +import { AxiosResponse } from "axios"; +import { + RequestTotpSecretResponse, + VerifyTotpResponse +} from "@server/routers/auth"; +import { z } from "zod"; +import { useForm } from "react-hook-form"; +import { zodResolver } from "@hookform/resolvers/zod"; +import { + Form, + FormControl, + FormField, + FormItem, + FormLabel, + FormMessage +} from "@app/components/ui/form"; +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle +} from "@/components/ui/card"; +import { toast } from "@app/hooks/useToast"; +import { formatAxiosError } from "@app/lib/api"; +import CopyTextBox from "@app/components/CopyTextBox"; +import { QRCodeCanvas } from "qrcode.react"; +import { useTranslations } from "next-intl"; + +export default function Setup2FAPage() { + const router = useRouter(); + const searchParams = useSearchParams(); + const redirect = searchParams?.get("redirect"); + const email = searchParams?.get("email"); + + const [step, setStep] = useState(1); + const [secretKey, setSecretKey] = useState(""); + const [secretUri, setSecretUri] = useState(""); + const [loading, setLoading] = useState(false); + const [backupCodes, setBackupCodes] = useState([]); + + const api = createApiClient(useEnvContext()); + const t = useTranslations(); + + // Redirect to login if no email is provided + useEffect(() => { + if (!email) { + router.push('/auth/login'); + } + }, [email, router]); + + const enableSchema = z.object({ + password: z.string().min(1, { message: t('passwordRequired') }) + }); + + const confirmSchema = z.object({ + code: z.string().length(6, { message: t('pincodeInvalid') }) + }); + + const enableForm = useForm>({ + resolver: zodResolver(enableSchema), + defaultValues: { + password: "" + } + }); + + const confirmForm = useForm>({ + resolver: zodResolver(confirmSchema), + defaultValues: { + code: "" + } + }); + + const request2fa = async (values: z.infer) => { + if (!email) return; + + setLoading(true); + + const res = await api + .post>( + `/auth/2fa/setup`, + { + email: email, + password: values.password + } + ) + .catch((e) => { + toast({ + title: t('otpErrorEnable'), + description: formatAxiosError( + e, + t('otpErrorEnableDescription') + ), + variant: "destructive" + }); + }); + + if (res && res.data.data.secret) { + setSecretKey(res.data.data.secret); + setSecretUri(res.data.data.uri); + setStep(2); + } + + setLoading(false); + }; + + const confirm2fa = async (values: z.infer) => { + if (!email) return; + + setLoading(true); + + const { password } = enableForm.getValues(); + + const res = await api + .post>(`/auth/2fa/complete-setup`, { + email: email, + password: password, + code: values.code + }) + .catch((e) => { + toast({ + title: t('otpErrorEnable'), + description: formatAxiosError( + e, + t('otpErrorEnableDescription') + ), + variant: "destructive" + }); + }); + + if (res && res.data.data.valid) { + setBackupCodes(res.data.data.backupCodes || []); + setStep(3); + } + + setLoading(false); + }; + + const handleComplete = () => { + if (redirect) { + router.push(redirect); + } else { + router.push("/"); + } + }; + + return ( +
+ + + {t('otpSetup')} + + Your administrator has enabled two-factor authentication for {email}. + Please complete the setup process to continue. + + + + {step === 1 && ( +
+ +
+ ( + + {t('password')} + + + + + + )} + /> +
+ +
+ + )} + + {step === 2 && ( +
+

+ {t('otpSetupScanQr')} +

+
+ +
+
+ + +
+ +
+ + ( + + + {t('otpSetupSecretCode')} + + + + + + + )} + /> + + + +
+ )} + + {step === 3 && ( +
+ +

+ {t('otpSetupSuccess')} +

+

+ {t('otpSetupSuccessStoreBackupCodes')} +

+ + {backupCodes.length > 0 && ( +
+ + +
+ )} + + +
+ )} +
+
+
+ ); +} \ No newline at end of file diff --git a/src/components/LoginForm.tsx b/src/components/LoginForm.tsx index 14189c37..a1480d30 100644 --- a/src/components/LoginForm.tsx +++ b/src/components/LoginForm.tsx @@ -134,6 +134,12 @@ export default function LoginForm({ redirect, onLogin, idps }: LoginFormProps) { return; } + if (data?.twoFactorSetupRequired) { + const setupUrl = `/auth/2fa/setup?email=${encodeURIComponent(email)}${redirect ? `&redirect=${encodeURIComponent(redirect)}` : ''}`; + router.push(setupUrl); + return; + } + if (onLogin) { await onLogin(); } From 0f3a5ce8ba9d867a5770b46a7fe5d33dd6415c5e Mon Sep 17 00:00:00 2001 From: "J. Newing" Date: Tue, 8 Jul 2025 10:12:20 -0400 Subject: [PATCH 2/8] Added users 2FA statsu to userstable --- server/routers/user/listUsers.ts | 3 +- .../settings/access/users/UsersTable.tsx | 34 +++++++++++++++++++ .../users/[userId]/access-controls/page.tsx | 7 ++-- .../[orgId]/settings/access/users/page.tsx | 3 +- 4 files changed, 41 insertions(+), 6 deletions(-) diff --git a/server/routers/user/listUsers.ts b/server/routers/user/listUsers.ts index 2e23f401..83c1e492 100644 --- a/server/routers/user/listUsers.ts +++ b/server/routers/user/listUsers.ts @@ -49,7 +49,8 @@ async function queryUsers(orgId: string, limit: number, offset: number) { roleName: roles.name, isOwner: userOrgs.isOwner, idpName: idp.name, - idpId: users.idpId + idpId: users.idpId, + twoFactorEnabled: users.twoFactorEnabled, }) .from(users) .leftJoin(userOrgs, eq(users.userId, userOrgs.userId)) diff --git a/src/app/[orgId]/settings/access/users/UsersTable.tsx b/src/app/[orgId]/settings/access/users/UsersTable.tsx index d3ee404e..017ab875 100644 --- a/src/app/[orgId]/settings/access/users/UsersTable.tsx +++ b/src/app/[orgId]/settings/access/users/UsersTable.tsx @@ -34,6 +34,7 @@ export type UserRow = { status: string; role: string; isOwner: boolean; + isTwoFactorEnabled: boolean; }; type UsersTableProps = { @@ -170,6 +171,39 @@ export default function UsersTable({ users: u }: UsersTableProps) { ); } }, + { + accessorKey: "isTwoFactorEnabled", + header: ({ column }) => { + return ( + + ); + }, + cell: ({ row }) => { + const userRow = row.original; + + return ( +
+ {userRow.isTwoFactorEnabled && ( + + {t('enabled')} + + ) || ( + + {t('disabled')} + + )} +
+ ); + } + }, { id: "actions", cell: ({ row }) => { diff --git a/src/app/[orgId]/settings/access/users/[userId]/access-controls/page.tsx b/src/app/[orgId]/settings/access/users/[userId]/access-controls/page.tsx index 191fac77..2929f75b 100644 --- a/src/app/[orgId]/settings/access/users/[userId]/access-controls/page.tsx +++ b/src/app/[orgId]/settings/access/users/[userId]/access-controls/page.tsx @@ -45,9 +45,6 @@ import { useTranslations } from "next-intl"; export default function AccessControlsPage() { const { orgUser: user, updateOrgUser } = userOrgUserContext(); - - console.log("User:", user); - const api = createApiClient(useEnvContext()); const { orgId } = useParams(); @@ -224,7 +221,7 @@ export default function AccessControlsPage() {

When enabled, the user will be required to set up their authenticator app on their next login. {user.twoFactorEnabled && ( - This user currently has 2FA enabled. + This user currently has 2FA enabled. )}

@@ -246,6 +243,8 @@ export default function AccessControlsPage() { + + ); } diff --git a/src/app/[orgId]/settings/access/users/page.tsx b/src/app/[orgId]/settings/access/users/page.tsx index 27b227fa..49637f71 100644 --- a/src/app/[orgId]/settings/access/users/page.tsx +++ b/src/app/[orgId]/settings/access/users/page.tsx @@ -81,7 +81,8 @@ export default async function UsersPage(props: UsersPageProps) { idpName: user.idpName || t('idpNameInternal'), status: t('userConfirmed'), role: user.isOwner ? t('accessRoleOwner') : user.roleName || t('accessRoleMember'), - isOwner: user.isOwner || false + isOwner: user.isOwner || false, + isTwoFactorEnabled: user.twoFactorEnabled || false, }; }); From c476ac7bc5d19614c2a93b3ca34d210d3ce52acb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 9 Jul 2025 01:18:19 +0000 Subject: [PATCH 3/8] Bump the dev-patch-updates group across 1 directory with 3 updates Bumps the dev-patch-updates group with 3 updates in the / directory: [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node), [drizzle-kit](https://github.com/drizzle-team/drizzle-orm) and [esbuild](https://github.com/evanw/esbuild). Updates `@types/node` from 24.0.7 to 24.0.12 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) Updates `drizzle-kit` from 0.31.2 to 0.31.4 - [Release notes](https://github.com/drizzle-team/drizzle-orm/releases) - [Commits](https://github.com/drizzle-team/drizzle-orm/compare/drizzle-kit@0.31.2...drizzle-kit@0.31.4) Updates `esbuild` from 0.25.5 to 0.25.6 - [Release notes](https://github.com/evanw/esbuild/releases) - [Changelog](https://github.com/evanw/esbuild/blob/main/CHANGELOG.md) - [Commits](https://github.com/evanw/esbuild/compare/v0.25.5...v0.25.6) --- updated-dependencies: - dependency-name: "@types/node" dependency-version: 24.0.12 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: drizzle-kit dependency-version: 0.31.4 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: esbuild dependency-version: 0.25.6 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates ... Signed-off-by: dependabot[bot] --- package-lock.json | 256 +++++++++++++++++++++++----------------------- package.json | 4 +- 2 files changed, 132 insertions(+), 128 deletions(-) diff --git a/package-lock.json b/package-lock.json index 292874b0..79605c6c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -112,8 +112,8 @@ "@types/swagger-ui-express": "^4.1.8", "@types/ws": "8.18.1", "@types/yargs": "17.0.33", - "drizzle-kit": "0.31.2", - "esbuild": "0.25.5", + "drizzle-kit": "0.31.4", + "esbuild": "0.25.6", "esbuild-node-externals": "1.18.0", "postcss": "^8", "react-email": "4.0.16", @@ -121,8 +121,7 @@ "tsc-alias": "1.8.16", "tsx": "4.20.3", "typescript": "^5", - "typescript-eslint": "^8.35.0", - "yargs": "18.0.0" + "typescript-eslint": "^8.35.0" } }, "node_modules/@alloc/quick-lru": { @@ -841,9 +840,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", - "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.6.tgz", + "integrity": "sha512-ShbM/3XxwuxjFiuVBHA+d3j5dyac0aEVVq1oluIDf71hUw0aRF59dV/efUsIwFnR6m8JNM2FjZOzmaZ8yG61kw==", "cpu": [ "ppc64" ], @@ -858,9 +857,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz", - "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.6.tgz", + "integrity": "sha512-S8ToEOVfg++AU/bHwdksHNnyLyVM+eMVAOf6yRKFitnwnbwwPNqKr3srzFRe7nzV69RQKb5DgchIX5pt3L53xg==", "cpu": [ "arm" ], @@ -875,9 +874,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz", - "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.6.tgz", + "integrity": "sha512-hd5zdUarsK6strW+3Wxi5qWws+rJhCCbMiC9QZyzoxfk5uHRIE8T287giQxzVpEvCwuJ9Qjg6bEjcRJcgfLqoA==", "cpu": [ "arm64" ], @@ -892,9 +891,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz", - "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.6.tgz", + "integrity": "sha512-0Z7KpHSr3VBIO9A/1wcT3NTy7EB4oNC4upJ5ye3R7taCc2GUdeynSLArnon5G8scPwaU866d3H4BCrE5xLW25A==", "cpu": [ "x64" ], @@ -909,9 +908,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz", - "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.6.tgz", + "integrity": "sha512-FFCssz3XBavjxcFxKsGy2DYK5VSvJqa6y5HXljKzhRZ87LvEi13brPrf/wdyl/BbpbMKJNOr1Sd0jtW4Ge1pAA==", "cpu": [ "arm64" ], @@ -926,9 +925,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz", - "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.6.tgz", + "integrity": "sha512-GfXs5kry/TkGM2vKqK2oyiLFygJRqKVhawu3+DOCk7OxLy/6jYkWXhlHwOoTb0WqGnWGAS7sooxbZowy+pK9Yg==", "cpu": [ "x64" ], @@ -943,9 +942,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz", - "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.6.tgz", + "integrity": "sha512-aoLF2c3OvDn2XDTRvn8hN6DRzVVpDlj2B/F66clWd/FHLiHaG3aVZjxQX2DYphA5y/evbdGvC6Us13tvyt4pWg==", "cpu": [ "arm64" ], @@ -960,9 +959,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz", - "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.6.tgz", + "integrity": "sha512-2SkqTjTSo2dYi/jzFbU9Plt1vk0+nNg8YC8rOXXea+iA3hfNJWebKYPs3xnOUf9+ZWhKAaxnQNUf2X9LOpeiMQ==", "cpu": [ "x64" ], @@ -977,9 +976,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz", - "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.6.tgz", + "integrity": "sha512-SZHQlzvqv4Du5PrKE2faN0qlbsaW/3QQfUUc6yO2EjFcA83xnwm91UbEEVx4ApZ9Z5oG8Bxz4qPE+HFwtVcfyw==", "cpu": [ "arm" ], @@ -994,9 +993,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz", - "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.6.tgz", + "integrity": "sha512-b967hU0gqKd9Drsh/UuAm21Khpoh6mPBSgz8mKRq4P5mVK8bpA+hQzmm/ZwGVULSNBzKdZPQBRT3+WuVavcWsQ==", "cpu": [ "arm64" ], @@ -1011,9 +1010,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz", - "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.6.tgz", + "integrity": "sha512-aHWdQ2AAltRkLPOsKdi3xv0mZ8fUGPdlKEjIEhxCPm5yKEThcUjHpWB1idN74lfXGnZ5SULQSgtr5Qos5B0bPw==", "cpu": [ "ia32" ], @@ -1028,9 +1027,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz", - "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.6.tgz", + "integrity": "sha512-VgKCsHdXRSQ7E1+QXGdRPlQ/e08bN6WMQb27/TMfV+vPjjTImuT9PmLXupRlC90S1JeNNW5lzkAEO/McKeJ2yg==", "cpu": [ "loong64" ], @@ -1045,9 +1044,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz", - "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.6.tgz", + "integrity": "sha512-WViNlpivRKT9/py3kCmkHnn44GkGXVdXfdc4drNmRl15zVQ2+D2uFwdlGh6IuK5AAnGTo2qPB1Djppj+t78rzw==", "cpu": [ "mips64el" ], @@ -1062,9 +1061,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz", - "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.6.tgz", + "integrity": "sha512-wyYKZ9NTdmAMb5730I38lBqVu6cKl4ZfYXIs31Baf8aoOtB4xSGi3THmDYt4BTFHk7/EcVixkOV2uZfwU3Q2Jw==", "cpu": [ "ppc64" ], @@ -1079,9 +1078,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz", - "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.6.tgz", + "integrity": "sha512-KZh7bAGGcrinEj4qzilJ4hqTY3Dg2U82c8bv+e1xqNqZCrCyc+TL9AUEn5WGKDzm3CfC5RODE/qc96OcbIe33w==", "cpu": [ "riscv64" ], @@ -1096,9 +1095,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz", - "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.6.tgz", + "integrity": "sha512-9N1LsTwAuE9oj6lHMyyAM+ucxGiVnEqUdp4v7IaMmrwb06ZTEVCIs3oPPplVsnjPfyjmxwHxHMF8b6vzUVAUGw==", "cpu": [ "s390x" ], @@ -1113,9 +1112,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", - "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.6.tgz", + "integrity": "sha512-A6bJB41b4lKFWRKNrWoP2LHsjVzNiaurf7wyj/XtFNTsnPuxwEBWHLty+ZE0dWBKuSK1fvKgrKaNjBS7qbFKig==", "cpu": [ "x64" ], @@ -1130,9 +1129,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz", - "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.6.tgz", + "integrity": "sha512-IjA+DcwoVpjEvyxZddDqBY+uJ2Snc6duLpjmkXm/v4xuS3H+3FkLZlDm9ZsAbF9rsfP3zeA0/ArNDORZgrxR/Q==", "cpu": [ "arm64" ], @@ -1147,9 +1146,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz", - "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.6.tgz", + "integrity": "sha512-dUXuZr5WenIDlMHdMkvDc1FAu4xdWixTCRgP7RQLBOkkGgwuuzaGSYcOpW4jFxzpzL1ejb8yF620UxAqnBrR9g==", "cpu": [ "x64" ], @@ -1164,9 +1163,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz", - "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.6.tgz", + "integrity": "sha512-l8ZCvXP0tbTJ3iaqdNf3pjaOSd5ex/e6/omLIQCVBLmHTlfXW3zAxQ4fnDmPLOB1x9xrcSi/xtCWFwCZRIaEwg==", "cpu": [ "arm64" ], @@ -1181,9 +1180,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz", - "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.6.tgz", + "integrity": "sha512-hKrmDa0aOFOr71KQ/19JC7az1P0GWtCN1t2ahYAf4O007DHZt/dW8ym5+CUdJhQ/qkZmI1HAF8KkJbEFtCL7gw==", "cpu": [ "x64" ], @@ -1197,10 +1196,27 @@ "node": ">=18" } }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.6.tgz", + "integrity": "sha512-+SqBcAWoB1fYKmpWoQP4pGtx+pUUC//RNYhFdbcSA16617cchuryuhOCRpPsjCblKukAckWsV+aQ3UKT/RMPcA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz", - "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.6.tgz", + "integrity": "sha512-dyCGxv1/Br7MiSC42qinGL8KkG4kX0pEsdb0+TKhmJZgCUDBGmyo1/ArCjNGiOLiIAgdbWgmWgib4HoCi5t7kA==", "cpu": [ "x64" ], @@ -1215,9 +1231,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz", - "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.6.tgz", + "integrity": "sha512-42QOgcZeZOvXfsCBJF5Afw73t4veOId//XD3i+/9gSkhSV6Gk3VPlWncctI+JcOyERv85FUo7RxuxGy+z8A43Q==", "cpu": [ "arm64" ], @@ -1232,9 +1248,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz", - "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.6.tgz", + "integrity": "sha512-4AWhgXmDuYN7rJI6ORB+uU9DHLq/erBbuMoAuB4VWJTu5KtCgcKYPynF0YI1VkBNuEfjNlLrFr9KZPJzrtLkrQ==", "cpu": [ "ia32" ], @@ -1249,9 +1265,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz", - "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.6.tgz", + "integrity": "sha512-NgJPHHbEpLQgDH2MjQu90pzW/5vvXIZ7KOnPyNBm92A6WgZ/7b6fJyUBjoumLqeOQQGqY2QjQxRo97ah4Sj0cA==", "cpu": [ "x64" ], @@ -4755,9 +4771,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "24.0.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.7.tgz", - "integrity": "sha512-YIEUUr4yf8q8oQoXPpSlnvKNVKDQlPMWrmOcgzoduo7kvA2UF0/BwJ/eMKFTiTtkNL17I0M6Xe2tvwFU7be6iw==", + "version": "24.0.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.12.tgz", + "integrity": "sha512-LtOrbvDf5ndC9Xi+4QZjVL0woFymF/xSTKZKPgrrl7H7XoeDvnD+E2IclKVDyaK9UM756W/3BXqSU+JEHopA9g==", "devOptional": true, "license": "MIT", "dependencies": { @@ -6174,7 +6190,6 @@ "version": "9.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", - "dev": true, "license": "ISC", "dependencies": { "string-width": "^7.2.0", @@ -6189,7 +6204,6 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -6202,14 +6216,12 @@ "version": "10.4.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "dev": true, "license": "MIT" }, "node_modules/cliui/node_modules/string-width": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", @@ -6227,7 +6239,6 @@ "version": "9.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", @@ -6824,9 +6835,9 @@ } }, "node_modules/drizzle-kit": { - "version": "0.31.2", - "resolved": "https://registry.npmjs.org/drizzle-kit/-/drizzle-kit-0.31.2.tgz", - "integrity": "sha512-Z2Uqxvu4HNFzlDkG3NQ2BYpII8SlOMkpjsC5XFh9TsYP2nYhfVamVjQ8spiMFXH3vGOyUt1cQ5FZ1JSgl6+8QQ==", + "version": "0.31.4", + "resolved": "https://registry.npmjs.org/drizzle-kit/-/drizzle-kit-0.31.4.tgz", + "integrity": "sha512-tCPWVZWZqWVx2XUsVpJRnH9Mx0ClVOf5YUHerZ5so1OKSlqww4zy1R5ksEdGRcO3tM3zj0PYN6V48TbQCL1RfA==", "dev": true, "license": "MIT", "dependencies": { @@ -7324,9 +7335,9 @@ } }, "node_modules/esbuild": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", - "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.6.tgz", + "integrity": "sha512-GVuzuUwtdsghE3ocJ9Bs8PNoF13HNQ5TXbEi2AhvVb8xU1Iwt9Fos9FEamfoee+u/TOsn7GUWc04lz46n2bbTg==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -7337,31 +7348,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.5", - "@esbuild/android-arm": "0.25.5", - "@esbuild/android-arm64": "0.25.5", - "@esbuild/android-x64": "0.25.5", - "@esbuild/darwin-arm64": "0.25.5", - "@esbuild/darwin-x64": "0.25.5", - "@esbuild/freebsd-arm64": "0.25.5", - "@esbuild/freebsd-x64": "0.25.5", - "@esbuild/linux-arm": "0.25.5", - "@esbuild/linux-arm64": "0.25.5", - "@esbuild/linux-ia32": "0.25.5", - "@esbuild/linux-loong64": "0.25.5", - "@esbuild/linux-mips64el": "0.25.5", - "@esbuild/linux-ppc64": "0.25.5", - "@esbuild/linux-riscv64": "0.25.5", - "@esbuild/linux-s390x": "0.25.5", - "@esbuild/linux-x64": "0.25.5", - "@esbuild/netbsd-arm64": "0.25.5", - "@esbuild/netbsd-x64": "0.25.5", - "@esbuild/openbsd-arm64": "0.25.5", - "@esbuild/openbsd-x64": "0.25.5", - "@esbuild/sunos-x64": "0.25.5", - "@esbuild/win32-arm64": "0.25.5", - "@esbuild/win32-ia32": "0.25.5", - "@esbuild/win32-x64": "0.25.5" + "@esbuild/aix-ppc64": "0.25.6", + "@esbuild/android-arm": "0.25.6", + "@esbuild/android-arm64": "0.25.6", + "@esbuild/android-x64": "0.25.6", + "@esbuild/darwin-arm64": "0.25.6", + "@esbuild/darwin-x64": "0.25.6", + "@esbuild/freebsd-arm64": "0.25.6", + "@esbuild/freebsd-x64": "0.25.6", + "@esbuild/linux-arm": "0.25.6", + "@esbuild/linux-arm64": "0.25.6", + "@esbuild/linux-ia32": "0.25.6", + "@esbuild/linux-loong64": "0.25.6", + "@esbuild/linux-mips64el": "0.25.6", + "@esbuild/linux-ppc64": "0.25.6", + "@esbuild/linux-riscv64": "0.25.6", + "@esbuild/linux-s390x": "0.25.6", + "@esbuild/linux-x64": "0.25.6", + "@esbuild/netbsd-arm64": "0.25.6", + "@esbuild/netbsd-x64": "0.25.6", + "@esbuild/openbsd-arm64": "0.25.6", + "@esbuild/openbsd-x64": "0.25.6", + "@esbuild/openharmony-arm64": "0.25.6", + "@esbuild/sunos-x64": "0.25.6", + "@esbuild/win32-arm64": "0.25.6", + "@esbuild/win32-ia32": "0.25.6", + "@esbuild/win32-x64": "0.25.6" } }, "node_modules/esbuild-node-externals": { @@ -7397,7 +7409,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -8342,7 +8353,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" @@ -8352,7 +8362,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -16479,7 +16488,6 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, "license": "ISC", "engines": { "node": ">=10" @@ -16511,7 +16519,6 @@ "version": "18.0.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", - "dev": true, "license": "MIT", "dependencies": { "cliui": "^9.0.1", @@ -16529,7 +16536,6 @@ "version": "22.0.0", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", - "dev": true, "license": "ISC", "engines": { "node": "^20.19.0 || ^22.12.0 || >=23" @@ -16539,14 +16545,12 @@ "version": "10.4.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "dev": true, "license": "MIT" }, "node_modules/yargs/node_modules/string-width": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", diff --git a/package.json b/package.json index e1b15d7d..280fda76 100644 --- a/package.json +++ b/package.json @@ -130,8 +130,8 @@ "@types/swagger-ui-express": "^4.1.8", "@types/ws": "8.18.1", "@types/yargs": "17.0.33", - "drizzle-kit": "0.31.2", - "esbuild": "0.25.5", + "drizzle-kit": "0.31.4", + "esbuild": "0.25.6", "esbuild-node-externals": "1.18.0", "postcss": "^8", "react-email": "4.0.16", From 5ff7c216b9b243d10f68dc6b483147d71896db41 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 9 Jul 2025 01:20:06 +0000 Subject: [PATCH 4/8] Bump the prod-patch-updates group across 1 directory with 7 updates Bumps the prod-patch-updates group with 7 updates in the / directory: | Package | From | To | | --- | --- | --- | | [eslint-config-next](https://github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next) | `15.3.4` | `15.3.5` | | [next](https://github.com/vercel/next.js) | `15.3.4` | `15.3.5` | | [next-intl](https://github.com/amannn/next-intl) | `4.3.1` | `4.3.4` | | [nodemailer](https://github.com/nodemailer/nodemailer) | `7.0.3` | `7.0.5` | | [tw-animate-css](https://github.com/Wombosvideo/tw-animate-css) | `1.3.4` | `1.3.5` | | [ws](https://github.com/websockets/ws) | `8.18.2` | `8.18.3` | | [zod](https://github.com/colinhacks/zod) | `3.25.67` | `3.25.76` | Updates `eslint-config-next` from 15.3.4 to 15.3.5 - [Release notes](https://github.com/vercel/next.js/releases) - [Changelog](https://github.com/vercel/next.js/blob/canary/release.js) - [Commits](https://github.com/vercel/next.js/commits/v15.3.5/packages/eslint-config-next) Updates `next` from 15.3.4 to 15.3.5 - [Release notes](https://github.com/vercel/next.js/releases) - [Changelog](https://github.com/vercel/next.js/blob/canary/release.js) - [Commits](https://github.com/vercel/next.js/compare/v15.3.4...v15.3.5) Updates `next-intl` from 4.3.1 to 4.3.4 - [Release notes](https://github.com/amannn/next-intl/releases) - [Changelog](https://github.com/amannn/next-intl/blob/main/CHANGELOG.md) - [Commits](https://github.com/amannn/next-intl/compare/v4.3.1...v4.3.4) Updates `nodemailer` from 7.0.3 to 7.0.5 - [Release notes](https://github.com/nodemailer/nodemailer/releases) - [Changelog](https://github.com/nodemailer/nodemailer/blob/master/CHANGELOG.md) - [Commits](https://github.com/nodemailer/nodemailer/compare/v7.0.3...v7.0.5) Updates `tw-animate-css` from 1.3.4 to 1.3.5 - [Release notes](https://github.com/Wombosvideo/tw-animate-css/releases) - [Commits](https://github.com/Wombosvideo/tw-animate-css/compare/v1.3.4...v1.3.5) Updates `ws` from 8.18.2 to 8.18.3 - [Release notes](https://github.com/websockets/ws/releases) - [Commits](https://github.com/websockets/ws/compare/8.18.2...8.18.3) Updates `zod` from 3.25.67 to 3.25.76 - [Release notes](https://github.com/colinhacks/zod/releases) - [Commits](https://github.com/colinhacks/zod/compare/v3.25.67...v3.25.76) --- updated-dependencies: - dependency-name: eslint-config-next dependency-version: 15.3.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: prod-patch-updates - dependency-name: next dependency-version: 15.3.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: prod-patch-updates - dependency-name: next-intl dependency-version: 4.3.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: prod-patch-updates - dependency-name: nodemailer dependency-version: 7.0.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: prod-patch-updates - dependency-name: tw-animate-css dependency-version: 1.3.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: prod-patch-updates - dependency-name: ws dependency-version: 8.18.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: prod-patch-updates - dependency-name: zod dependency-version: 3.25.76 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: prod-patch-updates ... Signed-off-by: dependabot[bot] --- package-lock.json | 166 +++++++++++++++++++++------------------------- package.json | 14 ++-- 2 files changed, 83 insertions(+), 97 deletions(-) diff --git a/package-lock.json b/package-lock.json index 292874b0..2ee60131 100644 --- a/package-lock.json +++ b/package-lock.json @@ -50,7 +50,7 @@ "crypto-js": "^4.2.0", "drizzle-orm": "0.44.2", "eslint": "9.29.0", - "eslint-config-next": "15.3.4", + "eslint-config-next": "15.3.5", "express": "4.21.2", "express-rate-limit": "7.5.1", "glob": "11.0.3", @@ -63,12 +63,12 @@ "jsonwebtoken": "^9.0.2", "lucide-react": "0.522.0", "moment": "2.30.1", - "next": "15.3.4", - "next-intl": "^4.1.0", + "next": "15.3.5", + "next-intl": "^4.3.4", "next-themes": "0.4.6", "node-cache": "5.1.2", "node-fetch": "3.3.2", - "nodemailer": "7.0.3", + "nodemailer": "7.0.5", "npm": "^11.4.2", "oslo": "1.2.1", "pg": "^8.16.2", @@ -82,14 +82,14 @@ "semver": "7.7.2", "swagger-ui-express": "^5.0.1", "tailwind-merge": "3.3.1", - "tw-animate-css": "^1.3.3", + "tw-animate-css": "^1.3.5", "uuid": "^11.1.0", "vaul": "1.1.2", "winston": "3.17.0", "winston-daily-rotate-file": "5.0.0", - "ws": "8.18.2", + "ws": "8.18.3", "yargs": "18.0.0", - "zod": "3.25.67", + "zod": "3.25.76", "zod-validation-error": "3.5.2" }, "devDependencies": { @@ -121,8 +121,7 @@ "tsc-alias": "1.8.16", "tsx": "4.20.3", "typescript": "^5", - "typescript-eslint": "^8.35.0", - "yargs": "18.0.0" + "typescript-eslint": "^8.35.0" } }, "node_modules/@alloc/quick-lru": { @@ -2075,24 +2074,24 @@ } }, "node_modules/@next/env": { - "version": "15.3.4", - "resolved": "https://registry.npmjs.org/@next/env/-/env-15.3.4.tgz", - "integrity": "sha512-ZkdYzBseS6UjYzz6ylVKPOK+//zLWvD6Ta+vpoye8cW11AjiQjGYVibF0xuvT4L0iJfAPfZLFidaEzAOywyOAQ==", + "version": "15.3.5", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.3.5.tgz", + "integrity": "sha512-7g06v8BUVtN2njAX/r8gheoVffhiKFVt4nx74Tt6G4Hqw9HCLYQVx/GkH2qHvPtAHZaUNZ0VXAa0pQP6v1wk7g==", "license": "MIT" }, "node_modules/@next/eslint-plugin-next": { - "version": "15.3.4", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.3.4.tgz", - "integrity": "sha512-lBxYdj7TI8phbJcLSAqDt57nIcobEign5NYIKCiy0hXQhrUbTqLqOaSDi568U6vFg4hJfBdZYsG4iP/uKhCqgg==", + "version": "15.3.5", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.3.5.tgz", + "integrity": "sha512-BZwWPGfp9po/rAnJcwUBaM+yT/+yTWIkWdyDwc74G9jcfTrNrmsHe+hXHljV066YNdVs8cxROxX5IgMQGX190w==", "license": "MIT", "dependencies": { "fast-glob": "3.3.1" } }, "node_modules/@next/swc-darwin-arm64": { - "version": "15.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.3.4.tgz", - "integrity": "sha512-z0qIYTONmPRbwHWvpyrFXJd5F9YWLCsw3Sjrzj2ZvMYy9NPQMPZ1NjOJh4ojr4oQzcGYwgJKfidzehaNa1BpEg==", + "version": "15.3.5", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.3.5.tgz", + "integrity": "sha512-lM/8tilIsqBq+2nq9kbTW19vfwFve0NR7MxfkuSUbRSgXlMQoJYg+31+++XwKVSXk4uT23G2eF/7BRIKdn8t8w==", "cpu": [ "arm64" ], @@ -2106,9 +2105,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "15.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.3.4.tgz", - "integrity": "sha512-Z0FYJM8lritw5Wq+vpHYuCIzIlEMjewG2aRkc3Hi2rcbULknYL/xqfpBL23jQnCSrDUGAo/AEv0Z+s2bff9Zkw==", + "version": "15.3.5", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.3.5.tgz", + "integrity": "sha512-WhwegPQJ5IfoUNZUVsI9TRAlKpjGVK0tpJTL6KeiC4cux9774NYE9Wu/iCfIkL/5J8rPAkqZpG7n+EfiAfidXA==", "cpu": [ "x64" ], @@ -2122,9 +2121,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "15.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.3.4.tgz", - "integrity": "sha512-l8ZQOCCg7adwmsnFm8m5q9eIPAHdaB2F3cxhufYtVo84pymwKuWfpYTKcUiFcutJdp9xGHC+F1Uq3xnFU1B/7g==", + "version": "15.3.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.3.5.tgz", + "integrity": "sha512-LVD6uMOZ7XePg3KWYdGuzuvVboxujGjbcuP2jsPAN3MnLdLoZUXKRc6ixxfs03RH7qBdEHCZjyLP/jBdCJVRJQ==", "cpu": [ "arm64" ], @@ -2138,9 +2137,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "15.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.3.4.tgz", - "integrity": "sha512-wFyZ7X470YJQtpKot4xCY3gpdn8lE9nTlldG07/kJYexCUpX1piX+MBfZdvulo+t1yADFVEuzFfVHfklfEx8kw==", + "version": "15.3.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.3.5.tgz", + "integrity": "sha512-k8aVScYZ++BnS2P69ClK7v4nOu702jcF9AIHKu6llhHEtBSmM2zkPGl9yoqbSU/657IIIb0QHpdxEr0iW9z53A==", "cpu": [ "arm64" ], @@ -2154,9 +2153,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "15.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.3.4.tgz", - "integrity": "sha512-gEbH9rv9o7I12qPyvZNVTyP/PWKqOp8clvnoYZQiX800KkqsaJZuOXkWgMa7ANCCh/oEN2ZQheh3yH8/kWPSEg==", + "version": "15.3.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.3.5.tgz", + "integrity": "sha512-2xYU0DI9DGN/bAHzVwADid22ba5d/xrbrQlr2U+/Q5WkFUzeL0TDR963BdrtLS/4bMmKZGptLeg6282H/S2i8A==", "cpu": [ "x64" ], @@ -2170,9 +2169,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "15.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.3.4.tgz", - "integrity": "sha512-Cf8sr0ufuC/nu/yQ76AnarbSAXcwG/wj+1xFPNbyNo8ltA6kw5d5YqO8kQuwVIxk13SBdtgXrNyom3ZosHAy4A==", + "version": "15.3.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.3.5.tgz", + "integrity": "sha512-TRYIqAGf1KCbuAB0gjhdn5Ytd8fV+wJSM2Nh2is/xEqR8PZHxfQuaiNhoF50XfY90sNpaRMaGhF6E+qjV1b9Tg==", "cpu": [ "x64" ], @@ -2186,9 +2185,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "15.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.3.4.tgz", - "integrity": "sha512-ay5+qADDN3rwRbRpEhTOreOn1OyJIXS60tg9WMYTWCy3fB6rGoyjLVxc4dR9PYjEdR2iDYsaF5h03NA+XuYPQQ==", + "version": "15.3.5", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.3.5.tgz", + "integrity": "sha512-h04/7iMEUSMY6fDGCvdanKqlO1qYvzNxntZlCzfE8i5P0uqzVQWQquU1TIhlz0VqGQGXLrFDuTJVONpqGqjGKQ==", "cpu": [ "arm64" ], @@ -2202,9 +2201,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "15.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.3.4.tgz", - "integrity": "sha512-4kDt31Bc9DGyYs41FTL1/kNpDeHyha2TC0j5sRRoKCyrhNcfZ/nRQkAUlF27mETwm8QyHqIjHJitfcza2Iykfg==", + "version": "15.3.5", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.3.5.tgz", + "integrity": "sha512-5fhH6fccXxnX2KhllnGhkYMndhOiLOLEiVGYjP2nizqeGWkN10sA9taATlXwake2E2XMvYZjjz0Uj7T0y+z1yw==", "cpu": [ "x64" ], @@ -6174,7 +6173,6 @@ "version": "9.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", - "dev": true, "license": "ISC", "dependencies": { "string-width": "^7.2.0", @@ -6189,7 +6187,6 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -6202,14 +6199,12 @@ "version": "10.4.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "dev": true, "license": "MIT" }, "node_modules/cliui/node_modules/string-width": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", @@ -6227,7 +6222,6 @@ "version": "9.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", @@ -6609,9 +6603,9 @@ } }, "node_modules/decimal.js": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz", - "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==", + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", "license": "MIT" }, "node_modules/decompress-response": { @@ -7397,7 +7391,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -7482,12 +7475,12 @@ } }, "node_modules/eslint-config-next": { - "version": "15.3.4", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.3.4.tgz", - "integrity": "sha512-WqeumCq57QcTP2lYlV6BRUySfGiBYEXlQ1L0mQ+u4N4X4ZhUVSSQ52WtjqHv60pJ6dD7jn+YZc0d1/ZSsxccvg==", + "version": "15.3.5", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.3.5.tgz", + "integrity": "sha512-oQdvnIgP68wh2RlR3MdQpvaJ94R6qEFl+lnu8ZKxPj5fsAHrSF/HlAOZcsimLw3DT6bnEQIUdbZC2Ab6sWyptg==", "license": "MIT", "dependencies": { - "@next/eslint-plugin-next": "15.3.4", + "@next/eslint-plugin-next": "15.3.5", "@rushstack/eslint-patch": "^1.10.3", "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", @@ -8342,7 +8335,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" @@ -8352,7 +8344,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -10287,12 +10278,12 @@ } }, "node_modules/next": { - "version": "15.3.4", - "resolved": "https://registry.npmjs.org/next/-/next-15.3.4.tgz", - "integrity": "sha512-mHKd50C+mCjam/gcnwqL1T1vPx/XQNFlXqFIVdgQdVAFY9iIQtY0IfaVflEYzKiqjeA7B0cYYMaCrmAYFjs4rA==", + "version": "15.3.5", + "resolved": "https://registry.npmjs.org/next/-/next-15.3.5.tgz", + "integrity": "sha512-RkazLBMMDJSJ4XZQ81kolSpwiCt907l0xcgcpF4xC2Vml6QVcPNXW0NQRwQ80FFtSn7UM52XN0anaw8TEJXaiw==", "license": "MIT", "dependencies": { - "@next/env": "15.3.4", + "@next/env": "15.3.5", "@swc/counter": "0.1.3", "@swc/helpers": "0.5.15", "busboy": "1.6.0", @@ -10307,14 +10298,14 @@ "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "15.3.4", - "@next/swc-darwin-x64": "15.3.4", - "@next/swc-linux-arm64-gnu": "15.3.4", - "@next/swc-linux-arm64-musl": "15.3.4", - "@next/swc-linux-x64-gnu": "15.3.4", - "@next/swc-linux-x64-musl": "15.3.4", - "@next/swc-win32-arm64-msvc": "15.3.4", - "@next/swc-win32-x64-msvc": "15.3.4", + "@next/swc-darwin-arm64": "15.3.5", + "@next/swc-darwin-x64": "15.3.5", + "@next/swc-linux-arm64-gnu": "15.3.5", + "@next/swc-linux-arm64-musl": "15.3.5", + "@next/swc-linux-x64-gnu": "15.3.5", + "@next/swc-linux-x64-musl": "15.3.5", + "@next/swc-win32-arm64-msvc": "15.3.5", + "@next/swc-win32-x64-msvc": "15.3.5", "sharp": "^0.34.1" }, "peerDependencies": { @@ -10341,9 +10332,9 @@ } }, "node_modules/next-intl": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/next-intl/-/next-intl-4.3.1.tgz", - "integrity": "sha512-FylHpOoQw5MpOyJt4cw8pNEGba7r3jKDSqt112fmBqXVceGR5YncmqpxS5MvSHsWRwbjqpOV8OsZCIY/4f4HWg==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/next-intl/-/next-intl-4.3.4.tgz", + "integrity": "sha512-VWLIDlGbnL/o4LnveJTJD1NOYN8lh3ZAGTWw2krhfgg53as3VsS4jzUVnArJdqvwtlpU/2BIDbWTZ7V4o1jFEw==", "funding": [ { "type": "individual", @@ -10354,7 +10345,7 @@ "dependencies": { "@formatjs/intl-localematcher": "^0.5.4", "negotiator": "^1.0.0", - "use-intl": "^4.3.1" + "use-intl": "^4.3.4" }, "peerDependencies": { "next": "^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0", @@ -10477,9 +10468,9 @@ } }, "node_modules/nodemailer": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-7.0.3.tgz", - "integrity": "sha512-Ajq6Sz1x7cIK3pN6KesGTah+1gnwMnx5gKl3piQlQQE/PwyJ4Mbc8is2psWYxK3RJTVeqsDaCv8ZzXLCDHMTZw==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-7.0.5.tgz", + "integrity": "sha512-nsrh2lO3j4GkLLXoeEksAMgAOqxOv6QumNRVQTJwKH4nuiww6iC2y7GyANs9kRAxCexg3+lTWM3PZ91iLlVjfg==", "license": "MIT-0", "engines": { "node": ">=6.0.0" @@ -15833,9 +15824,9 @@ } }, "node_modules/tw-animate-css": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/tw-animate-css/-/tw-animate-css-1.3.4.tgz", - "integrity": "sha512-dd1Ht6/YQHcNbq0znIT6dG8uhO7Ce+VIIhZUhjsryXsMPJQz3bZg7Q2eNzLwipb25bRZslGb2myio5mScd1TFg==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/tw-animate-css/-/tw-animate-css-1.3.5.tgz", + "integrity": "sha512-t3u+0YNoloIhj1mMXs779P6MO9q3p3mvGn4k1n3nJPqJw/glZcuijG2qTSN4z4mgNRfW5ZC3aXJFLwDtiipZXA==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/Wombosvideo" @@ -16075,9 +16066,9 @@ } }, "node_modules/use-intl": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/use-intl/-/use-intl-4.3.1.tgz", - "integrity": "sha512-8Xn5RXzeHZhWqqZimi1wi2pKFqm0NxRUOB41k1QdjbPX+ysoeLW3Ey+fi603D/e5EGb0fYw8WzjgtUagJdlIvg==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/use-intl/-/use-intl-4.3.4.tgz", + "integrity": "sha512-sHfiU0QeJ1rirNWRxvCyvlSh9+NczcOzRnPyMeo2rtHXhVnBsvMRjE+UG4eh3lRhCxrvcqei/I0lBxsc59on1w==", "license": "MIT", "dependencies": { "@formatjs/fast-memoize": "^2.2.0", @@ -16446,9 +16437,9 @@ "license": "ISC" }, "node_modules/ws": { - "version": "8.18.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", - "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", "license": "MIT", "engines": { "node": ">=10.0.0" @@ -16479,7 +16470,6 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, "license": "ISC", "engines": { "node": ">=10" @@ -16511,7 +16501,6 @@ "version": "18.0.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", - "dev": true, "license": "MIT", "dependencies": { "cliui": "^9.0.1", @@ -16529,7 +16518,6 @@ "version": "22.0.0", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", - "dev": true, "license": "ISC", "engines": { "node": "^20.19.0 || ^22.12.0 || >=23" @@ -16539,14 +16527,12 @@ "version": "10.4.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "dev": true, "license": "MIT" }, "node_modules/yargs/node_modules/string-width": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", @@ -16586,9 +16572,9 @@ } }, "node_modules/zod": { - "version": "3.25.67", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.67.tgz", - "integrity": "sha512-idA2YXwpCdqUSKRCACDE6ItZD9TZzy3OZMtpfLoh6oPR47lipysRrJfjzMqFxQ3uJuUPyUeWe1r9vLH33xO/Qw==", + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" diff --git a/package.json b/package.json index e1b15d7d..2146d532 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,7 @@ "crypto-js": "^4.2.0", "drizzle-orm": "0.44.2", "eslint": "9.29.0", - "eslint-config-next": "15.3.4", + "eslint-config-next": "15.3.5", "express": "4.21.2", "express-rate-limit": "7.5.1", "glob": "11.0.3", @@ -81,12 +81,12 @@ "jsonwebtoken": "^9.0.2", "lucide-react": "0.522.0", "moment": "2.30.1", - "next": "15.3.4", - "next-intl": "^4.1.0", + "next": "15.3.5", + "next-intl": "^4.3.4", "next-themes": "0.4.6", "node-cache": "5.1.2", "node-fetch": "3.3.2", - "nodemailer": "7.0.3", + "nodemailer": "7.0.5", "npm": "^11.4.2", "oslo": "1.2.1", "pg": "^8.16.2", @@ -100,13 +100,13 @@ "semver": "7.7.2", "swagger-ui-express": "^5.0.1", "tailwind-merge": "3.3.1", - "tw-animate-css": "^1.3.3", + "tw-animate-css": "^1.3.5", "uuid": "^11.1.0", "vaul": "1.1.2", "winston": "3.17.0", "winston-daily-rotate-file": "5.0.0", - "ws": "8.18.2", - "zod": "3.25.67", + "ws": "8.18.3", + "zod": "3.25.76", "zod-validation-error": "3.5.2", "yargs": "18.0.0" }, From 09024a93e920d60ac1ab268b932793045b9a70b1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 10 Jul 2025 01:57:05 +0000 Subject: [PATCH 5/8] Bump the dev-minor-updates group with 3 updates Bumps the dev-minor-updates group with 3 updates: [@dotenvx/dotenvx](https://github.com/dotenvx/dotenvx), [react-email](https://github.com/resend/react-email/tree/HEAD/packages/react-email) and [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint). Updates `@dotenvx/dotenvx` from 1.45.1 to 1.47.3 - [Release notes](https://github.com/dotenvx/dotenvx/releases) - [Changelog](https://github.com/dotenvx/dotenvx/blob/main/CHANGELOG.md) - [Commits](https://github.com/dotenvx/dotenvx/compare/v1.45.1...v1.47.3) Updates `react-email` from 4.0.16 to 4.1.0 - [Release notes](https://github.com/resend/react-email/releases) - [Changelog](https://github.com/resend/react-email/blob/canary/packages/react-email/CHANGELOG.md) - [Commits](https://github.com/resend/react-email/commits/react-email@4.1.0/packages/react-email) Updates `typescript-eslint` from 8.35.1 to 8.36.0 - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.36.0/packages/typescript-eslint) --- updated-dependencies: - dependency-name: "@dotenvx/dotenvx" dependency-version: 1.47.3 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: react-email dependency-version: 4.1.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: typescript-eslint dependency-version: 8.36.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates ... Signed-off-by: dependabot[bot] --- package-lock.json | 287 ++++++++++++++++++++++++++++++++++------------ package.json | 6 +- 2 files changed, 217 insertions(+), 76 deletions(-) diff --git a/package-lock.json b/package-lock.json index f7a8b623..7d999a2a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -93,7 +93,7 @@ "zod-validation-error": "3.5.2" }, "devDependencies": { - "@dotenvx/dotenvx": "1.45.1", + "@dotenvx/dotenvx": "1.47.3", "@esbuild-plugins/tsconfig-paths": "0.1.2", "@tailwindcss/postcss": "^4.1.10", "@types/better-sqlite3": "7.6.12", @@ -116,12 +116,12 @@ "esbuild": "0.25.6", "esbuild-node-externals": "1.18.0", "postcss": "^8", - "react-email": "4.0.16", + "react-email": "4.1.0", "tailwindcss": "^4.1.4", "tsc-alias": "1.8.16", "tsx": "4.20.3", "typescript": "^5", - "typescript-eslint": "^8.35.0" + "typescript-eslint": "^8.36.0" } }, "node_modules/@alloc/quick-lru": { @@ -310,9 +310,9 @@ } }, "node_modules/@dotenvx/dotenvx": { - "version": "1.45.1", - "resolved": "https://registry.npmjs.org/@dotenvx/dotenvx/-/dotenvx-1.45.1.tgz", - "integrity": "sha512-wKHPD+/NMMJVBPg3i98uD9jsURDy+Ck6RQRiWf39TlOAzC+Ge1FkmDk3sgeljYZxA3qF6E7SJmvRqC70XQuuVA==", + "version": "1.47.3", + "resolved": "https://registry.npmjs.org/@dotenvx/dotenvx/-/dotenvx-1.47.3.tgz", + "integrity": "sha512-V0jxoEgyTrP6INJYBXxR6qkaS1qUXmrWTz7FZVx706TgXnMnR7LVRi5Bf9z/o0UmZlkavJD13PLediPi4QvUTQ==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -327,8 +327,7 @@ "which": "^4.0.0" }, "bin": { - "dotenvx": "src/cli/dotenvx.js", - "git-dotenvx": "src/cli/dotenvx.js" + "dotenvx": "src/cli/dotenvx.js" }, "funding": { "url": "https://dotenvx.com" @@ -4899,16 +4898,16 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.35.1.tgz", - "integrity": "sha512-9XNTlo7P7RJxbVeICaIIIEipqxLKguyh+3UbXuT2XQuFp6d8VOeDEGuz5IiX0dgZo8CiI6aOFLg4e8cF71SFVg==", + "version": "8.36.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.36.0.tgz", + "integrity": "sha512-lZNihHUVB6ZZiPBNgOQGSxUASI7UJWhT8nHyUGCnaQ28XFCw98IfrMCG3rUl1uwUWoAvodJQby2KTs79UTcrAg==", "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.35.1", - "@typescript-eslint/type-utils": "8.35.1", - "@typescript-eslint/utils": "8.35.1", - "@typescript-eslint/visitor-keys": "8.35.1", + "@typescript-eslint/scope-manager": "8.36.0", + "@typescript-eslint/type-utils": "8.36.0", + "@typescript-eslint/utils": "8.36.0", + "@typescript-eslint/visitor-keys": "8.36.0", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", @@ -4922,7 +4921,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.35.1", + "@typescript-eslint/parser": "^8.36.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } @@ -4937,15 +4936,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.35.1.tgz", - "integrity": "sha512-3MyiDfrfLeK06bi/g9DqJxP5pV74LNv4rFTyvGDmT3x2p1yp1lOd+qYZfiRPIOf/oON+WRZR5wxxuF85qOar+w==", + "version": "8.36.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.36.0.tgz", + "integrity": "sha512-FuYgkHwZLuPbZjQHzJXrtXreJdFMKl16BFYyRrLxDhWr6Qr7Kbcu2s1Yhu8tsiMXw1S0W1pjfFfYEt+R604s+Q==", "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.35.1", - "@typescript-eslint/types": "8.35.1", - "@typescript-eslint/typescript-estree": "8.35.1", - "@typescript-eslint/visitor-keys": "8.35.1", + "@typescript-eslint/scope-manager": "8.36.0", + "@typescript-eslint/types": "8.36.0", + "@typescript-eslint/typescript-estree": "8.36.0", + "@typescript-eslint/visitor-keys": "8.36.0", "debug": "^4.3.4" }, "engines": { @@ -4961,13 +4960,13 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.35.1.tgz", - "integrity": "sha512-VYxn/5LOpVxADAuP3NrnxxHYfzVtQzLKeldIhDhzC8UHaiQvYlXvKuVho1qLduFbJjjy5U5bkGwa3rUGUb1Q6Q==", + "version": "8.36.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.36.0.tgz", + "integrity": "sha512-JAhQFIABkWccQYeLMrHadu/fhpzmSQ1F1KXkpzqiVxA/iYI6UnRt2trqXHt1sYEcw1mxLnB9rKMsOxXPxowN/g==", "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.35.1", - "@typescript-eslint/types": "^8.35.1", + "@typescript-eslint/tsconfig-utils": "^8.36.0", + "@typescript-eslint/types": "^8.36.0", "debug": "^4.3.4" }, "engines": { @@ -4982,13 +4981,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.35.1.tgz", - "integrity": "sha512-s/Bpd4i7ht2934nG+UoSPlYXd08KYz3bmjLEb7Ye1UVob0d1ENiT3lY8bsCmik4RqfSbPw9xJJHbugpPpP5JUg==", + "version": "8.36.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.36.0.tgz", + "integrity": "sha512-wCnapIKnDkN62fYtTGv2+RY8FlnBYA3tNm0fm91kc2BjPhV2vIjwwozJ7LToaLAyb1ca8BxrS7vT+Pvvf7RvqA==", "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.35.1", - "@typescript-eslint/visitor-keys": "8.35.1" + "@typescript-eslint/types": "8.36.0", + "@typescript-eslint/visitor-keys": "8.36.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4999,9 +4998,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.35.1.tgz", - "integrity": "sha512-K5/U9VmT9dTHoNowWZpz+/TObS3xqC5h0xAIjXPw+MNcKV9qg6eSatEnmeAwkjHijhACH0/N7bkhKvbt1+DXWQ==", + "version": "8.36.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.36.0.tgz", + "integrity": "sha512-Nhh3TIEgN18mNbdXpd5Q8mSCBnrZQeY9V7Ca3dqYvNDStNIGRmJA6dmrIPMJ0kow3C7gcQbpsG2rPzy1Ks/AnA==", "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5015,13 +5014,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.35.1.tgz", - "integrity": "sha512-HOrUBlfVRz5W2LIKpXzZoy6VTZzMu2n8q9C2V/cFngIC5U1nStJgv0tMV4sZPzdf4wQm9/ToWUFPMN9Vq9VJQQ==", + "version": "8.36.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.36.0.tgz", + "integrity": "sha512-5aaGYG8cVDd6cxfk/ynpYzxBRZJk7w/ymto6uiyUFtdCozQIsQWh7M28/6r57Fwkbweng8qAzoMCPwSJfWlmsg==", "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.35.1", - "@typescript-eslint/utils": "8.35.1", + "@typescript-eslint/typescript-estree": "8.36.0", + "@typescript-eslint/utils": "8.36.0", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, @@ -5038,9 +5037,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.35.1.tgz", - "integrity": "sha512-q/O04vVnKHfrrhNAscndAn1tuQhIkwqnaW+eu5waD5IPts2eX1dgJxgqcPx5BX109/qAz7IG6VrEPTOYKCNfRQ==", + "version": "8.36.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.36.0.tgz", + "integrity": "sha512-xGms6l5cTJKQPZOKM75Dl9yBfNdGeLRsIyufewnxT4vZTrjC0ImQT4fj8QmtJK84F58uSh5HVBSANwcfiXxABQ==", "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5051,15 +5050,15 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.35.1.tgz", - "integrity": "sha512-Vvpuvj4tBxIka7cPs6Y1uvM7gJgdF5Uu9F+mBJBPY4MhvjrjWGK4H0lVgLJd/8PWZ23FTqsaJaLEkBCFUk8Y9g==", + "version": "8.36.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.36.0.tgz", + "integrity": "sha512-JaS8bDVrfVJX4av0jLpe4ye0BpAaUW7+tnS4Y4ETa3q7NoZgzYbN9zDQTJ8kPb5fQ4n0hliAt9tA4Pfs2zA2Hg==", "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.35.1", - "@typescript-eslint/tsconfig-utils": "8.35.1", - "@typescript-eslint/types": "8.35.1", - "@typescript-eslint/visitor-keys": "8.35.1", + "@typescript-eslint/project-service": "8.36.0", + "@typescript-eslint/tsconfig-utils": "8.36.0", + "@typescript-eslint/types": "8.36.0", + "@typescript-eslint/visitor-keys": "8.36.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -5131,15 +5130,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.35.1.tgz", - "integrity": "sha512-lhnwatFmOFcazAsUm3ZnZFpXSxiwoa1Lj50HphnDe1Et01NF4+hrdXONSUHIcbVu2eFb1bAf+5yjXkGVkXBKAQ==", + "version": "8.36.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.36.0.tgz", + "integrity": "sha512-VOqmHu42aEMT+P2qYjylw6zP/3E/HvptRwdn/PZxyV27KhZg2IOszXod4NcXisWzPAGSS4trE/g4moNj6XmH2g==", "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.35.1", - "@typescript-eslint/types": "8.35.1", - "@typescript-eslint/typescript-estree": "8.35.1" + "@typescript-eslint/scope-manager": "8.36.0", + "@typescript-eslint/types": "8.36.0", + "@typescript-eslint/typescript-estree": "8.36.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5154,12 +5153,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.35.1.tgz", - "integrity": "sha512-VRwixir4zBWCSTP/ljEo091lbpypz57PoeAQ9imjG+vbeof9LplljsL1mos4ccG6H9IjfrVGM359RozUnuFhpw==", + "version": "8.36.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.36.0.tgz", + "integrity": "sha512-vZrhV2lRPWDuGoxcmrzRZyxAggPL+qp3WzUrlZD+slFueDiYHxeBa34dUXPuC0RmGKzl4lS5kFJYvKCq9cnNDA==", "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.35.1", + "@typescript-eslint/types": "8.36.0", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -6139,6 +6138,16 @@ "node": ">=18" } }, + "node_modules/citty": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "consola": "^3.2.3" + } + }, "node_modules/class-variance-authority": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", @@ -6391,6 +6400,23 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "license": "MIT" }, + "node_modules/confbox": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz", + "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -7963,6 +7989,13 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, + "node_modules/exsolve": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.7.tgz", + "integrity": "sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==", + "dev": true, + "license": "MIT" + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -9524,6 +9557,16 @@ "json-buffer": "3.0.1" } }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/kuler": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", @@ -12981,6 +13024,26 @@ "inBundle": true, "license": "ISC" }, + "node_modules/nypm": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.6.0.tgz", + "integrity": "sha512-mn8wBFV9G9+UFHIrq+pZ2r2zL4aPau/by3kJb3cM7+5tQHMt6HGQB8FDIeKFYp8o0D2pnH6nVsO88N4AmUxIWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.4.0", + "pathe": "^2.0.3", + "pkg-types": "^2.0.0", + "tinyexec": "^0.3.2" + }, + "bin": { + "nypm": "dist/cli.mjs" + }, + "engines": { + "node": "^14.16.0 || >=16.10.0" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -13724,6 +13787,13 @@ "node": ">=8" } }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, "node_modules/peberminta": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/peberminta/-/peberminta-0.9.0.tgz", @@ -13840,6 +13910,18 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pkg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.2.0.tgz", + "integrity": "sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "confbox": "^0.2.2", + "exsolve": "^1.0.7", + "pathe": "^2.0.3" + } + }, "node_modules/plimit-lit": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/plimit-lit/-/plimit-lit-1.6.1.tgz", @@ -13989,6 +14071,20 @@ "node": ">=6" } }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -14185,9 +14281,9 @@ "license": "0BSD" }, "node_modules/react-email": { - "version": "4.0.16", - "resolved": "https://registry.npmjs.org/react-email/-/react-email-4.0.16.tgz", - "integrity": "sha512-auhFU+nQxAkKkP6lQhPyGsa9exwfUEzp2BwZnjHokCwphZlg30tu4t1LgdKRwGPYsi7XNGy6asbVLAUhOVpzzg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/react-email/-/react-email-4.1.0.tgz", + "integrity": "sha512-UvG5z1/gNOsLNwKPO87vgMoF7tdzUGd0kIy4fozzdBBsyLUju7hNVLBRm9j+Li/CwP5CXFT8Y5jZBtIFvSyr0w==", "dev": true, "license": "MIT", "dependencies": { @@ -14199,15 +14295,18 @@ "debounce": "^2.0.0", "esbuild": "^0.25.0", "glob": "^11.0.0", + "jiti": "2.4.2", "log-symbols": "^7.0.0", "mime-types": "^3.0.0", - "next": "^15.3.1", "normalize-path": "^3.0.0", + "nypm": "0.6.0", "ora": "^8.0.0", - "socket.io": "^4.8.1" + "prompts": "2.4.2", + "socket.io": "^4.8.1", + "tsconfig-paths": "4.2.0" }, "bin": { - "email": "dist/cli/index.mjs" + "email": "dist/index.js" }, "engines": { "node": ">=18.0.0" @@ -14236,6 +14335,19 @@ "node": ">=18" } }, + "node_modules/react-email/node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/react-email/node_modules/mime-db": { "version": "1.54.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", @@ -14259,6 +14371,21 @@ "node": ">= 0.6" } }, + "node_modules/react-email/node_modules/tsconfig-paths": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/react-hook-form": { "version": "7.58.1", "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.58.1.tgz", @@ -15003,6 +15130,13 @@ "is-arrayish": "^0.3.1" } }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true, + "license": "MIT" + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -15628,6 +15762,13 @@ "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", "license": "MIT" }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true, + "license": "MIT" + }, "node_modules/tinyglobby": { "version": "0.2.14", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", @@ -15963,15 +16104,15 @@ } }, "node_modules/typescript-eslint": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.35.1.tgz", - "integrity": "sha512-xslJjFzhOmHYQzSB/QTeASAHbjmxOGEP6Coh93TXmUBFQoJ1VU35UHIDmG06Jd6taf3wqqC1ntBnCMeymy5Ovw==", + "version": "8.36.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.36.0.tgz", + "integrity": "sha512-fTCqxthY+h9QbEgSIBfL9iV6CvKDFuoxg6bHPNpJ9HIUzS+jy2lCEyCmGyZRWEBSaykqcDPf1SJ+BfCI8DRopA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.35.1", - "@typescript-eslint/parser": "8.35.1", - "@typescript-eslint/utils": "8.35.1" + "@typescript-eslint/eslint-plugin": "8.36.0", + "@typescript-eslint/parser": "8.36.0", + "@typescript-eslint/utils": "8.36.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" diff --git a/package.json b/package.json index b57a22ae..e981c13a 100644 --- a/package.json +++ b/package.json @@ -111,7 +111,7 @@ "yargs": "18.0.0" }, "devDependencies": { - "@dotenvx/dotenvx": "1.45.1", + "@dotenvx/dotenvx": "1.47.3", "@esbuild-plugins/tsconfig-paths": "0.1.2", "@tailwindcss/postcss": "^4.1.10", "@types/better-sqlite3": "7.6.12", @@ -134,12 +134,12 @@ "esbuild": "0.25.6", "esbuild-node-externals": "1.18.0", "postcss": "^8", - "react-email": "4.0.16", + "react-email": "4.1.0", "tailwindcss": "^4.1.4", "tsc-alias": "1.8.16", "tsx": "4.20.3", "typescript": "^5", - "typescript-eslint": "^8.35.0" + "typescript-eslint": "^8.36.0" }, "overrides": { "emblor": { From bdaf48da207373f8bb9602ad2ccc7f87ef4f401f Mon Sep 17 00:00:00 2001 From: Daeho Ro <40587651+daeho-ro@users.noreply.github.com> Date: Sat, 12 Jul 2025 04:15:35 +0000 Subject: [PATCH 6/8] Translated using Weblate (Korean) Currently translated at 100.0% (1134 of 1134 strings) Translated using Weblate (Korean) Currently translated at 2.9% (33 of 1134 strings) Translated using Weblate (Korean) Currently translated at 2.9% (33 of 1134 strings) Translated using Weblate (Korean) Currently translated at 2.9% (33 of 1134 strings) Added translation using Weblate (Korean) Co-authored-by: Daeho Ro <40587651+daeho-ro@users.noreply.github.com> Co-authored-by: Daeho Ro Co-authored-by: OpenAI Co-authored-by: Weblate Translate-URL: https://mini-i18n.daeho.ro/projects/pangolin/main/ko/ Translation: pangolin/main --- messages/ko.json | 1136 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1136 insertions(+) create mode 100644 messages/ko.json diff --git a/messages/ko.json b/messages/ko.json new file mode 100644 index 00000000..62b1dfc1 --- /dev/null +++ b/messages/ko.json @@ -0,0 +1,1136 @@ +{ + "setupCreate": "์กฐ์ง, ์‚ฌ์ดํŠธ ๋ฐ ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•˜์‹ญ์‹œ์˜ค.", + "orgDisplayName": "์ด๊ฒƒ์€ ๊ท€ํ•˜์˜ ์กฐ์ง์˜ ํ‘œ์‹œ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.", + "setupIdentifierMessage": "์ด๊ฒƒ์€ ๊ท€ํ•˜์˜ ์กฐ์ง์— ๋Œ€ํ•œ ๊ณ ์œ  ์‹๋ณ„์ž์ž…๋‹ˆ๋‹ค. ํ‘œ์‹œ ์ด๋ฆ„๊ณผ๋Š” ๋ณ„๊ฐœ์ž…๋‹ˆ๋‹ค.", + "componentsErrorNoMemberCreate": "ํ˜„์žฌ ์–ด๋–ค ์กฐ์ง์˜ ๊ตฌ์„ฑ์›๋„ ์•„๋‹™๋‹ˆ๋‹ค. ์‹œ์ž‘ํ•˜๋ ค๋ฉด ์กฐ์ง์„ ์ƒ์„ฑํ•˜์„ธ์š”.", + "componentsInvalidKey": "์œ ํšจํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋งŒ๋ฃŒ๋œ ๋ผ์ด์„ผ์Šค ํ‚ค๊ฐ€ ๊ฐ์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ๊ณ„์† ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ผ์ด์„ผ์Šค ์กฐ๊ฑด์„ ๋”ฐ๋ฅด์‹ญ์‹œ์˜ค.", + "orgId": "์กฐ์ง ID", + "siteQuestionRemove": "์กฐ์ง์—์„œ ์‚ฌ์ดํŠธ {selectedSite}๋ฅผ ์ œ๊ฑฐํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?", + "siteCreateDescription2": "์•„๋ž˜ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ผ ์ƒˆ ์‚ฌ์ดํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์—ฐ๊ฒฐํ•˜์‹ญ์‹œ์˜ค", + "componentsLicenseViolation": "๋ผ์ด์„ผ์Šค ์œ„๋ฐ˜: ์ด ์„œ๋ฒ„๋Š” {usedSites} ์‚ฌ์ดํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋Š” {maxSites} ์‚ฌ์ดํŠธ์˜ ๋ผ์ด์„ผ์Šค ํ•œ๋„๋ฅผ ์ดˆ๊ณผํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ๊ณ„์† ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ผ์ด์„ผ์Šค ์กฐ๊ฑด์„ ๋”ฐ๋ฅด์‹ญ์‹œ์˜ค.", + "years": "์—ฐ๋„", + "hours": "์‹œ๊ฐ„", + "days": "์ผ", + "weeks": "์ฃผ", + "months": "๊ฐœ์›”", + "authCreateAccount": "์‹œ์ž‘ํ•˜๋ ค๋ฉด ๊ณ„์ •์„ ์ƒ์„ฑํ•˜์„ธ์š”.", + "email": "์ด๋ฉ”์ผ", + "password": "๋น„๋ฐ€๋ฒˆํ˜ธ", + "confirmPassword": "๋น„๋ฐ€๋ฒˆํ˜ธ ํ™•์ธ", + "createAccount": "๊ณ„์ • ์ƒ์„ฑ", + "viewSettings": "์„ค์ • ๋ณด๊ธฐ", + "delete": "์‚ญ์ œ", + "name": "์ด๋ฆ„", + "online": "์˜จ๋ผ์ธ", + "offline": "์˜คํ”„๋ผ์ธ", + "site": "์‚ฌ์ดํŠธ", + "dataIn": "๋ฐ์ดํ„ฐ ์ž…๋ ฅ", + "dataOut": "๋ฐ์ดํ„ฐ ์ถœ๋ ฅ", + "connectionType": "์—ฐ๊ฒฐ ์œ ํ˜•", + "tunnelType": "ํ„ฐ๋„ ์œ ํ˜•", + "local": "๋กœ์ปฌ", + "edit": "ํŽธ์ง‘", + "siteConfirmDelete": "์‚ฌ์ดํŠธ ์‚ญ์ œ ํ™•์ธ", + "siteDelete": "์‚ฌ์ดํŠธ ์‚ญ์ œ", + "siteMessageRemove": "์ œ๊ฑฐ๋˜๋ฉด ์‚ฌ์ดํŠธ์— ๋” ์ด์ƒ ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์‚ฌ์ดํŠธ์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ๋ฆฌ์†Œ์Šค์™€ ๋Œ€์ƒ๋„ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.", + "siteMessageConfirm": "ํ™•์ธ์„ ์œ„ํ•ด ์•„๋ž˜์— ์‚ฌ์ดํŠธ ์ด๋ฆ„์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.", + "setupNewOrg": "์ƒˆ ์กฐ์ง", + "setupCreateOrg": "์กฐ์ง ์ƒ์„ฑ", + "setupCreateResources": "๋ฆฌ์†Œ์Šค ์ƒ์„ฑ", + "setupOrgName": "์กฐ์ง ์ด๋ฆ„", + "setupErrorIdentifier": "์กฐ์ง ID๊ฐ€ ์ด๋ฏธ ์‚ฌ์šฉ ์ค‘์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ฒƒ์„ ์„ ํƒํ•ด ์ฃผ์„ธ์š”.", + "componentsErrorNoMember": "ํ˜„์žฌ ์–ด๋–ค ์กฐ์ง์˜ ๊ตฌ์„ฑ์›๋„ ์•„๋‹™๋‹ˆ๋‹ค.", + "welcome": "ํŒ๊ณจ๋ฆฐ์— ์˜ค์‹  ๊ฒƒ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.", + "componentsCreateOrg": "์กฐ์ง ์ƒ์„ฑ", + "componentsMember": "๋‹น์‹ ์€ {count, plural, =0 {์กฐ์ง์ด ์—†์Šต๋‹ˆ๋‹ค} one {ํ•˜๋‚˜์˜ ์กฐ์ง} other {# ๊ฐœ์˜ ์กฐ์ง}}์˜ ๊ตฌ์„ฑ์›์ž…๋‹ˆ๋‹ค.", + "componentsSupporterMessage": "{tier}๋กœ ํŒ๊ณจ๋ฆฐ์„ ์ง€์›ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!", + "inviteErrorNotValid": "์ฃ„์†กํ•˜์ง€๋งŒ, ์ ‘๊ทผํ•˜๋ ค๋Š” ์ดˆ๋Œ€๊ฐ€ ์ˆ˜๋ฝ๋˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜ ๋” ์ด์ƒ ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.", + "inviteErrorUser": "์ฃ„์†กํ•˜์ง€๋งŒ, ์ ‘๊ทผํ•˜๋ ค๋Š” ์ดˆ๋Œ€๊ฐ€ ์ด ์‚ฌ์šฉ์ž์—๊ฒŒ ํ•ด๋‹น๋˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.", + "inviteLoginUser": "์˜ฌ๋ฐ”๋ฅธ ์‚ฌ์šฉ์ž๋กœ ๋กœ๊ทธ์ธํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.", + "inviteErrorNoUser": "์ฃ„์†กํ•˜์ง€๋งŒ, ์ ‘๊ทผํ•˜๋ ค๋Š” ์ดˆ๋Œ€๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ๊ฒƒ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.", + "inviteCreateUser": "๋จผ์ € ๊ณ„์ •์„ ์ƒ์„ฑํ•ด ์ฃผ์„ธ์š”.", + "goHome": "ํ™ˆ์œผ๋กœ ๊ฐ€๊ธฐ", + "inviteLogInOtherUser": "๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋กœ ๋กœ๊ทธ์ธ", + "createAnAccount": "๊ณ„์ • ๋งŒ๋“ค๊ธฐ", + "siteManageSites": "์‚ฌ์ดํŠธ ๊ด€๋ฆฌ", + "siteDescription": "์•ˆ์ „ํ•œ ํ„ฐ๋„์„ ํ†ตํ•ด ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉ", + "siteCreate": "์‚ฌ์ดํŠธ ์ƒ์„ฑ", + "inviteNotAccepted": "์ดˆ๋Œ€๊ฐ€ ์ˆ˜๋ฝ๋˜์ง€ ์•Š์Œ", + "authNoAccount": "๊ณ„์ •์ด ์—†์œผ์‹ ๊ฐ€์š”?", + "siteCreateDescription": "๋ฆฌ์†Œ์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ ์‚ฌ์ดํŠธ๋ฅผ ์ƒ์„ฑํ•˜์‹ญ์‹œ์˜ค.", + "dismiss": "ํ•ด์ œ", + "close": "๋‹ซ๊ธฐ", + "siteErrorCreate": "์‚ฌ์ดํŠธ ์ƒ์„ฑ ์˜ค๋ฅ˜", + "siteErrorCreateKeyPair": "ํ‚ค ์Œ ๋˜๋Š” ์‚ฌ์ดํŠธ ๊ธฐ๋ณธ๊ฐ’์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค", + "siteErrorCreateDefaults": "์‚ฌ์ดํŠธ ๊ธฐ๋ณธ๊ฐ’์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค", + "siteNameDescription": "์ด๊ฒƒ์€ ์‚ฌ์ดํŠธ์˜ ํ‘œ์‹œ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.", + "method": "๋ฐฉ๋ฒ•", + "siteMethodDescription": "์ด๊ฒƒ์ด ์—ฐ๊ฒฐ์„ ๋…ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.", + "siteLearnNewt": "์‹œ์Šคํ…œ์— Newt ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ• ๋ฐฐ์šฐ๊ธฐ", + "siteSeeConfigOnce": "๊ตฌ์„ฑ์„ ํ•œ ๋ฒˆ๋งŒ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.", + "siteLoadWGConfig": "WireGuard ๊ตฌ์„ฑ ๋กœ๋”ฉ ์ค‘...", + "siteDocker": "Docker ๋ฐฐํฌ ์„ธ๋ถ€์ •๋ณด ํ™•์žฅ", + "toggle": "์ „ํ™˜", + "dockerCompose": "๋„์ปค ์ปดํฌ์ฆˆ", + "dockerRun": "๋„์ปค ์‹คํ–‰", + "siteLearnLocal": "๋กœ์ปฌ ์‚ฌ์ดํŠธ๋Š” ํ„ฐ๋„๋งํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ", + "siteConfirmCopy": "๊ตฌ์„ฑ์„ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค.", + "searchSitesProgress": "์‚ฌ์ดํŠธ ๊ฒ€์ƒ‰...", + "siteAdd": "์‚ฌ์ดํŠธ ์ถ”๊ฐ€", + "siteInstallNewt": "Newt ์„ค์น˜", + "siteInstallNewtDescription": "์‹œ์Šคํ…œ์—์„œ Newt ์‹คํ–‰ํ•˜๊ธฐ", + "WgConfiguration": "WireGuard ๊ตฌ์„ฑ", + "WgConfigurationDescription": "๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค์Œ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.", + "operatingSystem": "์šด์˜ ์ฒด์ œ", + "commands": "๋ช…๋ น", + "recommended": "์ถ”์ฒœ", + "siteNewtDescription": "์ตœ๊ณ ์˜ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์œ„ํ•ด Newt๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. Newt๋Š” WireGuard๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉฐ, ํŒ๊ณจ๋ฆฐ ๋Œ€์‹œ๋ณด๋“œ ๋‚ด์—์„œ ๊ฐœ์ธ ๋„คํŠธ์›Œํฌ์˜ LAN ์ฃผ์†Œ๋กœ ๊ฐœ์ธ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.", + "siteRunsInDocker": "Docker์—์„œ ์‹คํ–‰", + "siteRunsInShell": "macOS, Linux ๋ฐ Windows์—์„œ ์…ธ์—์„œ ์‹คํ–‰", + "siteErrorDelete": "์‚ฌ์ดํŠธ ์‚ญ์ œ ์˜ค๋ฅ˜", + "siteErrorUpdate": "์‚ฌ์ดํŠธ ์—…๋ฐ์ดํŠธ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค", + "siteErrorUpdateDescription": "์‚ฌ์ดํŠธ ์—…๋ฐ์ดํŠธ ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "siteUpdated": "์‚ฌ์ดํŠธ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", + "siteUpdatedDescription": "์‚ฌ์ดํŠธ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "siteGeneralDescription": "์ด ์‚ฌ์ดํŠธ์— ๋Œ€ํ•œ ์ผ๋ฐ˜ ์„ค์ •์„ ๊ตฌ์„ฑํ•˜์„ธ์š”.", + "siteSettingDescription": "์‚ฌ์ดํŠธ์—์„œ ์„ค์ •์„ ๊ตฌ์„ฑํ•˜์„ธ์š”", + "siteSetting": "{siteName} ์„ค์ •", + "siteNewtTunnel": "๋‰ดํŠธ ํ„ฐ๋„ (์ถ”์ฒœ)", + "siteNewtTunnelDescription": "๋„คํŠธ์›Œํฌ์— ๋Œ€ํ•œ ์ง„์ž…์ ์„ ์ƒ์„ฑํ•˜๋Š” ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ์„ค์ •์ด ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค.", + "siteWg": "๊ธฐ๋ณธ WireGuard", + "siteWgDescription": "๋ชจ๋“  WireGuard ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ„ฐ๋„์„ ์„ค์ •ํ•˜์„ธ์š”. ์ˆ˜๋™ NAT ์„ค์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.", + "siteLocalDescription": "๋กœ์ปฌ ๋ฆฌ์†Œ์Šค๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ํ„ฐ๋„๋ง์ด ์—†์Šต๋‹ˆ๋‹ค.", + "siteSeeAll": "๋ชจ๋“  ์‚ฌ์ดํŠธ ๋ณด๊ธฐ", + "siteTunnelDescription": "์‚ฌ์ดํŠธ์— ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฒฐ์ •ํ•˜์„ธ์š”", + "siteNewtCredentials": "Newt ์ž๊ฒฉ ์ฆ๋ช…", + "siteNewtCredentialsDescription": "์ด๊ฒƒ์ด Newt๊ฐ€ ์„œ๋ฒ„์™€ ์ธ์ฆํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค", + "orgPolicyDeletedDescription": "์ •์ฑ…์ด ์„ฑ๊ณต์ ์œผ๋กœ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", + "actionCreateResourceRule": "๋ฆฌ์†Œ์Šค ๊ทœ์น™ ์ƒ์„ฑ", + "defaultMappingsUpdatedDescription": "๊ธฐ๋ณธ ๋งคํ•‘์ด ์„ฑ๊ณต์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "orgPoliciesAbout": "์กฐ์ง ์ •์ฑ…์— ๋Œ€ํ•˜์—ฌ", + "orgPoliciesAboutDescription": "์กฐ์ง ์ •์ฑ…์€ ์‚ฌ์šฉ์ž์˜ ID ํ† ํฐ์— ๋”ฐ๋ผ ์กฐ์ง์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ œ์–ดํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ID ํ† ํฐ์—์„œ ์—ญํ•  ๋ฐ ์กฐ์ง ์ •๋ณด๋ฅผ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•ด JMESPath ํ‘œํ˜„์‹์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.", + "orgPoliciesAboutDescriptionLink": "์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.", + "actionDeleteResourceRule": "๋ฆฌ์†Œ์Šค ๊ทœ์น™ ์‚ญ์ œ", + "defaultMappingsOptional": "๊ธฐ๋ณธ ๋งคํ•‘(์„ ํƒ ์‚ฌํ•ญ)", + "signupError": "๊ฐ€์ž…ํ•˜๋Š” ๋™์•ˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "siteCredentialsSave": "์ž๊ฒฉ ์ฆ๋ช… ์ €์žฅ", + "siteCredentialsSaveDescription": "์ด๊ฒƒ์€ ํ•œ ๋ฒˆ๋งŒ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ˆ์ „ํ•œ ์žฅ์†Œ์— ๋ณต์‚ฌํ•ด ๋‘์„ธ์š”.", + "siteInfo": "์‚ฌ์ดํŠธ ์ •๋ณด", + "status": "์ƒํƒœ", + "shareTitle": "๊ณต์œ  ๋งํฌ ๊ด€๋ฆฌ", + "shareDescription": "๊ณต์œ  ๊ฐ€๋Šฅํ•œ ๋งํฌ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ž„์‹œ ๋˜๋Š” ์˜๊ตฌ ์•ก์„ธ์Šค๋ฅผ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.", + "shareSearch": "๊ณต์œ  ๋งํฌ ๊ฒ€์ƒ‰...", + "shareCreate": "๊ณต์œ  ๋งํฌ ์ƒ์„ฑ", + "shareErrorDelete": "๋งํฌ ์‚ญ์ œ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.", + "shareErrorDeleteMessage": "๋งํฌ ์‚ญ์ œ ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "shareDeleted": "๋งํฌ๊ฐ€ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "shareDeletedDescription": "๋งํฌ๊ฐ€ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "shareTokenDescription": "์•ก์„ธ์Šค ํ† ํฐ์€ ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋˜๋Š” ์š”์ฒญ ํ—ค๋”์˜ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ „๋‹ฌ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ธ์ฆ๋œ ์•ก์„ธ์Šค๋ฅผ ์œ„ํ•ด ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ชจ๋“  ์š”์ฒญ๋งˆ๋‹ค ์ „๋‹ฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.", + "accessToken": "์•ก์„ธ์Šค ํ† ํฐ", + "usageExamples": "์‚ฌ์šฉ ์˜ˆ", + "tokenId": "ํ† ํฐ ID", + "requestHeades": "์š”์ฒญ ํ—ค๋”", + "queryParameter": "์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜", + "importantNote": "์ค‘์š”ํ•œ ์ฐธ๊ณ  ์‚ฌํ•ญ", + "shareImportantDescription": "๋ณด์•ˆ์ƒ์˜ ์ด์œ ๋กœ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜๋ณด๋‹ค ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์„œ๋ฒ„ ๋กœ๊ทธ๋‚˜ ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ก์— ๊ธฐ๋ก๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.", + "token": "ํ† ํฐ", + "shareTokenSecurety": "์•ก์„ธ์Šค ํ† ํฐ์„ ์•ˆ์ „ํ•˜๊ฒŒ ์œ ์ง€ํ•˜์„ธ์š”. ๊ณต๊ฐœ์ ์œผ๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์˜์—ญ์ด๋‚˜ ํด๋ผ์ด์–ธํŠธ ์ธก ์ฝ”๋“œ์—์„œ ๊ณต์œ ํ•˜์ง€ ๋งˆ์„ธ์š”.", + "shareErrorFetchResource": "๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.", + "shareErrorFetchResourceDescription": "๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "shareErrorCreate": "๊ณต์œ  ๋งํฌ ์ƒ์„ฑ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.", + "shareErrorCreateDescription": "๊ณต์œ  ๋งํฌ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋™์•ˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค", + "shareCreateDescription": "์ด ๋งํฌ๊ฐ€ ์žˆ๋Š” ๋ˆ„๊ตฌ๋‚˜ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.", + "shareTitleOptional": "์ œ๋ชฉ (์„ ํƒ ์‚ฌํ•ญ)", + "expireIn": "๋งŒ๋ฃŒ๋จ", + "neverExpire": "๋งŒ๋ฃŒ๋˜์ง€ ์•Š์Œ", + "shareExpireDescription": "๋งŒ๋ฃŒ ์‹œ๊ฐ„์€ ๋งํฌ๊ฐ€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ณ  ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ฐ„์ž…๋‹ˆ๋‹ค. ์ด ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ๋งํฌ๋Š” ๋” ์ด์ƒ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์ด ๋งํฌ๋ฅผ ์‚ฌ์šฉํ•œ ์‚ฌ์šฉ์ž๋Š” ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ์„ ์žƒ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.", + "pangolinLogoAlt": "ํŒ๊ณจ๋ฆฐ ๋กœ๊ณ ", + "shareSeeOnce": "์ด ๋งํฌ๋Š” ํ•œ ๋ฒˆ๋งŒ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋“œ์‹œ ๋ณต์‚ฌํ•ด ๋‘์„ธ์š”.", + "shareAccessHint": "์ด ๋งํฌ๊ฐ€ ์žˆ๋Š” ๋ˆ„๊ตฌ๋‚˜ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์˜ํ•ด์„œ ๊ณต์œ ํ•˜์„ธ์š”.", + "shareTokenUsage": "์•ก์„ธ์Šค ํ† ํฐ ์‚ฌ์šฉ ๋ณด๊ธฐ", + "createLink": "๋งํฌ ์ƒ์„ฑ", + "resourcesNotFound": "๋ฆฌ์†Œ์Šค๊ฐ€ ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.", + "resourceSearch": "๋ฆฌ์†Œ์Šค ๊ฒ€์ƒ‰", + "openMenu": "๋ฉ”๋‰ด ์—ด๊ธฐ", + "resource": "๋ฆฌ์†Œ์Šค", + "title": "์ œ๋ชฉ", + "created": "์ƒ์„ฑ๋จ", + "expires": "๋งŒ๋ฃŒ", + "never": "์ ˆ๋Œ€", + "shareErrorSelectResource": "๋ฆฌ์†Œ์Šค๋ฅผ ์„ ํƒํ•˜์„ธ์š”", + "resourceTitle": "๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ", + "resourceDescription": "๊ฐœ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ๋ณด์•ˆ ํ”„๋ก์‹œ ์ƒ์„ฑ", + "resourcesSearch": "๋ฆฌ์†Œ์Šค ๊ฒ€์ƒ‰...", + "resourceAdd": "๋ฆฌ์†Œ์Šค ์ถ”๊ฐ€", + "resourceErrorDelte": "๋ฆฌ์†Œ์Šค ์‚ญ์ œ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ", + "authentication": "์ธ์ฆ", + "protected": "๋ณดํ˜ธ๋จ", + "notProtected": "๋ณดํ˜ธ๋˜์ง€ ์•Š์Œ", + "inviteAlready": "์ดˆ๋Œ€๋ฐ›์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค!", + "resourceMessageRemove": "์ œ๊ฑฐ๋˜๋ฉด ๋ฆฌ์†Œ์Šค์— ๋” ์ด์ƒ ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฆฌ์†Œ์Šค์™€ ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ๋Œ€์ƒ๋„ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.", + "resourceMessageConfirm": "ํ™•์ธ์„ ์œ„ํ•ด ์•„๋ž˜์— ๋ฆฌ์†Œ์Šค์˜ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”.", + "tagsEnteredDescription": "์ž…๋ ฅํ•œ ํƒœ๊ทธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.", + "resourceQuestionRemove": "์กฐ์ง์—์„œ ๋ฆฌ์†Œ์Šค {selectedResource}๋ฅผ ์ œ๊ฑฐํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?", + "resourceHTTP": "HTTPS ๋ฆฌ์†Œ์Šค", + "resourceHTTPDescription": "์„œ๋ธŒ๋„๋ฉ”์ธ ๋˜๋Š” ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ HTTPS๋ฅผ ํ†ตํ•ด ์•ฑ์— ๋Œ€ํ•œ ์š”์ฒญ์„ ํ”„๋ก์‹œํ•ฉ๋‹ˆ๋‹ค.", + "resourceRaw": "์›์‹œ TCP/UDP ๋ฆฌ์†Œ์Šค", + "resourceRawDescription": "TCP/UDP๋ฅผ ํ†ตํ•ด ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ฑ์— ์š”์ฒญ์„ ํ”„๋ก์‹œํ•ฉ๋‹ˆ๋‹ค.", + "resourceCreate": "๋ฆฌ์†Œ์Šค ์ƒ์„ฑ", + "resourceCreateDescription": "์•„๋ž˜ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ผ ์ƒˆ ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•˜์„ธ์š”.", + "resourceSeeAll": "๋ชจ๋“  ๋ฆฌ์†Œ์Šค ๋ณด๊ธฐ", + "resourceInfo": "๋ฆฌ์†Œ์Šค ์ •๋ณด", + "resourceNameDescription": "์ด๊ฒƒ์€ ๋ฆฌ์†Œ์Šค์˜ ํ‘œ์‹œ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.", + "siteSelect": "์‚ฌ์ดํŠธ ์„ ํƒ", + "siteSearch": "์‚ฌ์ดํŠธ ๊ฒ€์ƒ‰", + "siteNotFound": "์‚ฌ์ดํŠธ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.", + "otpEnable": "์ด์ค‘ ์ธ์ฆ ํ™œ์„ฑํ™”", + "siteSelectionDescription": "์ด ์‚ฌ์ดํŠธ๋Š” ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.", + "resourceType": "๋ฆฌ์†Œ์Šค ์œ ํ˜•", + "resourceTypeDescription": "๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฒฐ์ •ํ•˜์„ธ์š”", + "resourceHTTPSSettings": "HTTPS ์„ค์ •", + "resourceHTTPSSettingsDescription": "๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ HTTPS ์ ‘๊ทผ ๋ฐฉ์‹์„ ๊ตฌ์„ฑํ•˜์‹ญ์‹œ์˜ค.", + "domainType": "๋„๋ฉ”์ธ ์œ ํ˜•", + "subdomain": "์„œ๋ธŒ๋„๋ฉ”์ธ", + "baseDomain": "๊ธฐ๋ณธ ๋„๋ฉ”์ธ", + "subdomnainDescription": "๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ํ•˜์œ„ ๋„๋ฉ”์ธ์ž…๋‹ˆ๋‹ค.", + "resourceRawSettings": "TCP/UDP ์„ค์ •", + "otpDisable": "์ด์ค‘ ์ธ์ฆ ๋น„ํ™œ์„ฑํ™”", + "resourceRawSettingsDescription": "TCP/UDP๋ฅผ ํ†ตํ•ด ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ตฌ์„ฑํ•˜์„ธ์š”.", + "protocol": "ํ”„๋กœํ† ์ฝœ", + "protocolSelect": "ํ”„๋กœํ† ์ฝœ ์„ ํƒ", + "resourcePortNumber": "ํฌํŠธ ๋ฒˆํ˜ธ", + "logout": "๋กœ๊ทธ ์•„์›ƒ", + "resourcePortNumberDescription": "์š”์ฒญ์„ ํ”„๋ก์‹œํ•˜๊ธฐ ์œ„ํ•œ ์™ธ๋ถ€ ํฌํŠธ ๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค.", + "cancel": "์ทจ์†Œ", + "resourceConfig": "๊ตฌ์„ฑ ์Šค๋‹ˆํŽซ", + "inviteAlreadyDescription": "์ดˆ๋Œ€๋ฅผ ์ˆ˜๋ฝํ•˜๋ ค๋ฉด ๋กœ๊ทธ์ธํ•˜๊ฑฐ๋‚˜ ๊ณ„์ •์„ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.", + "resourceConfigDescription": "TCP/UDP ๋ฆฌ์†Œ์Šค๋ฅผ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด ์ด ๊ตฌ์„ฑ ์Šค๋‹ˆํŽซ์„ ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ๋„ฃ์œผ์‹ญ์‹œ์˜ค.", + "resourceAddEntrypoints": "Traefik: ์—”ํŠธ๋ฆฌํฌ์ธํŠธ ์ถ”๊ฐ€", + "resourceExposePorts": "Gerbil: Docker Compose์—์„œ ํฌํŠธ ๋…ธ์ถœ", + "resourceLearnRaw": "TCP/UDP ๋ฆฌ์†Œ์Šค ๊ตฌ์„ฑ ๋ฐฉ๋ฒ• ์•Œ์•„๋ณด๊ธฐ", + "resourceBack": "๋ฆฌ์†Œ์Šค๋กœ ๋Œ์•„๊ฐ€๊ธฐ", + "resourceGoTo": "๋ฆฌ์†Œ์Šค๋กœ ์ด๋™", + "resourceDelete": "๋ฆฌ์†Œ์Šค ์‚ญ์ œ", + "resourceDeleteConfirm": "๋ฆฌ์†Œ์Šค ์‚ญ์ œ ํ™•์ธ", + "visibility": "๊ฐ€์‹œ์„ฑ", + "enabled": "ํ™œ์„ฑํ™”๋จ", + "disabled": "๋น„ํ™œ์„ฑํ™”๋จ", + "general": "์ผ๋ฐ˜", + "generalSettings": "์ผ๋ฐ˜ ์„ค์ •", + "proxy": "ํ”„๋ก์‹œ", + "rules": "๊ทœ์น™", + "resourceSettingDescription": "๋ฆฌ์†Œ์Šค์˜ ์„ค์ •์„ ๊ตฌ์„ฑํ•˜์„ธ์š”.", + "sidebarApiKeys": "API ํ‚ค", + "resourceSetting": "{resourceName} ์„ค์ •", + "alwaysAllow": "ํ•ญ์ƒ ํ—ˆ์šฉ", + "alwaysDeny": "ํ•ญ์ƒ ๊ฑฐ๋ถ€", + "orgSettingsDescription": "์กฐ์ง์˜ ์ผ๋ฐ˜ ์„ค์ •์„ ๊ตฌ์„ฑํ•˜์„ธ์š”", + "orgGeneralSettings": "์กฐ์ง ์„ค์ •", + "orgGeneralSettingsDescription": "์กฐ์ง ์„ธ๋ถ€์ •๋ณด ๋ฐ ๊ตฌ์„ฑ์„ ๊ด€๋ฆฌํ•˜์„ธ์š”.", + "saveGeneralSettings": "์ผ๋ฐ˜ ์„ค์ • ์ €์žฅ", + "orgDangerZone": "์œ„ํ—˜ ๊ตฌ์—ญ", + "orgDangerZoneDescription": "์ด ์กฐ์ง์„ ์‚ญ์ œํ•˜๋ฉด ๋˜๋Œ๋ฆด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ™•์‹คํžˆ ํ•˜์„ธ์š”.", + "orgDelete": "์กฐ์ง ์‚ญ์ œ", + "orgDeleteConfirm": "์กฐ์ง ์‚ญ์ œ ํ™•์ธ", + "orgMessageRemove": "์ด ์ž‘์—…์€ ๋˜๋Œ๋ฆด ์ˆ˜ ์—†์œผ๋ฉฐ ๋ชจ๋“  ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.", + "orgMessageConfirm": "ํ™•์ธ์„ ์œ„ํ•ด ์•„๋ž˜์— ์กฐ์ง ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์‹ญ์‹œ์˜ค.", + "orgQuestionRemove": "์กฐ์ง {selectedOrg}์„(๋ฅผ) ์ œ๊ฑฐํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?", + "orgUpdated": "์กฐ์ง์ด ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "orgUpdatedDescription": "์กฐ์ง์ด ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "orgErrorUpdate": "์กฐ์ง ์—…๋ฐ์ดํŠธ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.", + "orgErrorUpdateMessage": "์กฐ์ง์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋™์•ˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "sidebarSettings": "์„ค์ •", + "orgErrorFetch": "์กฐ์ง์„ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.", + "orgErrorFetchMessage": "์กฐ์ง์„ ๋‚˜์—ดํ•˜๋Š” ๋™์•ˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค", + "orgErrorDelete": "์กฐ์ง ์‚ญ์ œ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.", + "orgErrorDeleteMessage": "์กฐ์ง์„ ์‚ญ์ œํ•˜๋Š” ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "orgDeleted": "์กฐ์ง์ด ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "orgDeletedMessage": "์กฐ์ง๊ณผ ๊ทธ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "orgMissing": "์กฐ์ง ID๊ฐ€ ๋ˆ„๋ฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", + "orgMissingMessage": "์กฐ์ง ID ์—†์ด ์ดˆ๋Œ€์žฅ์„ ์žฌ์ƒ์„ฑํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.", + "accessUsersManage": "์‚ฌ์šฉ์ž ๊ด€๋ฆฌ", + "accessUsersDescription": "์‚ฌ์šฉ์ž๋ฅผ ์ดˆ๋Œ€ํ•˜๊ณ  ์—ญํ• ์— ์ถ”๊ฐ€ํ•˜์—ฌ ์กฐ์ง์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ๊ด€๋ฆฌํ•˜์„ธ์š”", + "accessUsersSearch": "์‚ฌ์šฉ์ž ๊ฒ€์ƒ‰...", + "accessUserCreate": "์‚ฌ์šฉ์ž ์ƒ์„ฑ", + "accessUserRemove": "์‚ฌ์šฉ์ž ์ œ๊ฑฐ", + "username": "์‚ฌ์šฉ์ž ์ด๋ฆ„", + "identityProvider": "์•„์ด๋ดํ‹ฐํ‹ฐ ๊ณต๊ธ‰์ž", + "role": "์—ญํ• ", + "nameRequired": "์ด๋ฆ„์€ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค", + "accessRolesManage": "์—ญํ•  ๊ด€๋ฆฌ", + "accessRolesDescription": "์กฐ์ง์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ๊ด€๋ฆฌํ•  ์—ญํ•  ๊ตฌ์„ฑ", + "accessRolesSearch": "์—ญํ•  ๊ฒ€์ƒ‰...", + "accessRolesAdd": "์—ญํ•  ์ถ”๊ฐ€", + "accessRoleDelete": "์—ญํ•  ์‚ญ์ œ", + "description": "์„ค๋ช…", + "inviteTitle": "์—ด๋ฆฐ ์ดˆ๋Œ€", + "inviteDescription": "๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์ดˆ๋Œ€๋ฅผ ๊ด€๋ฆฌํ•˜์„ธ์š”", + "inviteSearch": "์ดˆ๋Œ€ ๊ฒ€์ƒ‰...", + "minutes": "๋ถ„", + "day": "{count, plural, one {#์ผ} other {#์ผ}}", + "apiKeysTitle": "API ํ‚ค ์ •๋ณด", + "signupQuestion": "์ด๋ฏธ ๊ณ„์ •์ด ์žˆ์Šต๋‹ˆ๊นŒ?", + "apiKeysConfirmCopy2": "API ํ‚ค๋ฅผ ๋ณต์‚ฌํ–ˆ์Œ์„ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.", + "apiKeysErrorCreate": "API ํ‚ค ์ƒ์„ฑ ์˜ค๋ฅ˜", + "apiKeysErrorSetPermission": "๊ถŒํ•œ ์„ค์ • ์˜ค๋ฅ˜", + "apiKeysCreate": "API ํ‚ค ์ƒ์„ฑ", + "apiKeysCreateDescription": "์กฐ์ง์„ ์œ„ํ•œ ์ƒˆ๋กœ์šด API ํ‚ค ์ƒ์„ฑ", + "apiKeysGeneralSettings": "๊ถŒํ•œ", + "apiKeysGeneralSettingsDescription": "์ด API ํ‚ค๊ฐ€ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—… ๊ฒฐ์ •", + "apiKeysList": "๊ท€ํ•˜์˜ API ํ‚ค", + "apiKeysSave": "API ํ‚ค ์ €์žฅ", + "apiKeysSaveDescription": "์ด๊ฒƒ์€ ํ•œ ๋ฒˆ๋งŒ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ˆ์ „ํ•œ ์žฅ์†Œ์— ๋ณต์‚ฌํ•ด ๋‘์„ธ์š”.", + "apiKeysInfo": "๊ท€ํ•˜์˜ API ํ‚ค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:", + "apiKeysConfirmCopy": "API ํ‚ค๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค", + "generate": "์ƒ์„ฑ", + "done": "์™„๋ฃŒ", + "apiKeysSeeAll": "๋ชจ๋“  API ํ‚ค ๋ณด๊ธฐ", + "apiKeysPermissionsErrorLoadingActions": "API ํ‚ค ์ž‘์—… ๋กœ๋“œ ์˜ค๋ฅ˜", + "apiKeysPermissionsErrorUpdate": "๊ถŒํ•œ ์„ค์ • ์˜ค๋ฅ˜", + "apiKeysPermissionsUpdated": "๊ถŒํ•œ์ด ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", + "login": "๋กœ๊ทธ์ธ", + "apiKeysPermissionsUpdatedDescription": "๊ถŒํ•œ์ด ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "apiKeysPermissionsGeneralSettings": "๊ถŒํ•œ", + "apiKeysPermissionsGeneralSettingsDescription": "์ด API ํ‚ค๊ฐ€ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—… ๊ฒฐ์ •", + "apiKeysPermissionsSave": "๊ถŒํ•œ ์ €์žฅ", + "apiKeysPermissionsTitle": "๊ถŒํ•œ", + "apiKeys": "API ํ‚ค", + "searchApiKeys": "API ํ‚ค ๊ฒ€์ƒ‰...", + "apiKeysAdd": "API ํ‚ค ์ƒ์„ฑ", + "apiKeysErrorDelete": "API ํ‚ค ์‚ญ์ œ ์˜ค๋ฅ˜", + "apiKeysErrorDeleteMessage": "API ํ‚ค ์‚ญ์ œ ์˜ค๋ฅ˜", + "apiKeysQuestionRemove": "์กฐ์ง์—์„œ API ํ‚ค {selectedApiKey}๋ฅผ ์ œ๊ฑฐํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?", + "apiKeysMessageRemove": "์‚ญ์ œ๋˜๋ฉด API ํ‚ค๋ฅผ ๋” ์ด์ƒ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.", + "apiKeysMessageConfirm": "ํ™•์ธ์„ ์œ„ํ•ด ์•„๋ž˜์— API ํ‚ค์˜ ์ด๋ฆ„์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.", + "apiKeysDeleteConfirm": "API ํ‚ค ์‚ญ์ œ ํ™•์ธ", + "apiKeysDelete": "API ํ‚ค ์‚ญ์ œ", + "apiKeysManage": "API ํ‚ค ๊ด€๋ฆฌ", + "apiKeysDescription": "API ํ‚ค๋Š” ํ†ตํ•ฉ API์™€ ์ธ์ฆํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.", + "apiKeysSettings": "{apiKeyName} ์„ค์ •", + "userTitle": "๋ชจ๋“  ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ", + "userDescription": "์‹œ์Šคํ…œ์˜ ๋ชจ๋“  ์‚ฌ์šฉ์ž๋ฅผ ๋ณด๊ณ  ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค", + "userAbount": "์‚ฌ์šฉ์ž ๊ด€๋ฆฌ์— ๋Œ€ํ•œ ์ •๋ณด", + "userAbountDescription": "์ด ํ‘œ๋Š” ์‹œ์Šคํ…œ์˜ ๋ชจ๋“  ๋ฃจํŠธ ์‚ฌ์šฉ์ž ๊ฐ์ฒด๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์‚ฌ์šฉ์ž๋Š” ์—ฌ๋Ÿฌ ์กฐ์ง์— ์†ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋ฅผ ์กฐ์ง์—์„œ ์ œ๊ฑฐํ•ด๋„ ๋ฃจํŠธ ์‚ฌ์šฉ์ž ๊ฐ์ฒด๋Š” ์‚ญ์ œ๋˜์ง€ ์•Š์œผ๋ฉฐ, ์‹œ์Šคํ…œ์— ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋ฅผ ์‹œ์Šคํ…œ์—์„œ ์™„์ „ํžˆ ์ œ๊ฑฐํ•˜๋ ค๋ฉด ์ด ํ‘œ์˜ ์‚ญ์ œ ์ž‘์—…์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฃจํŠธ ์‚ฌ์šฉ์ž ๊ฐ์ฒด๋ฅผ ์‚ญ์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.", + "userServer": "์„œ๋ฒ„ ์‚ฌ์šฉ์ž", + "userSearch": "์„œ๋ฒ„ ์‚ฌ์šฉ์ž ๊ฒ€์ƒ‰ ์ค‘...", + "userErrorDelete": "์‚ฌ์šฉ์ž ์‚ญ์ œ ์˜ค๋ฅ˜", + "userDeleteConfirm": "์‚ฌ์šฉ์ž ์‚ญ์ œ ํ™•์ธ", + "userDeleteServer": "์„œ๋ฒ„์—์„œ ์‚ฌ์šฉ์ž ์‚ญ์ œ", + "userMessageRemove": "์‚ฌ์šฉ์ž๊ฐ€ ๋ชจ๋“  ์กฐ์ง์—์„œ ์ œ๊ฑฐ๋˜๋ฉฐ ์„œ๋ฒ„์—์„œ ์™„์ „ํžˆ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.", + "userMessageConfirm": "ํ™•์ธ์„ ์œ„ํ•ด ์•„๋ž˜์— ์‚ฌ์šฉ์ž ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์‹ญ์‹œ์˜ค.", + "userQuestionRemove": "์ •๋ง๋กœ {selectedUser}๋ฅผ ์„œ๋ฒ„์—์„œ ์˜๊ตฌ์ ์œผ๋กœ ์‚ญ์ œํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?", + "licenseKey": "๋ผ์ด์„ผ์Šค ํ‚ค", + "valid": "์œ ํšจ", + "numberOfSites": "์‚ฌ์ดํŠธ ์ˆ˜", + "licenseKeySearch": "๋ผ์ด์„ผ์Šค ํ‚ค ๊ฒ€์ƒ‰ ์ค‘...", + "licenseKeyAdd": "๋ผ์ด์„ผ์Šค ํ‚ค ์ถ”๊ฐ€", + "type": "์œ ํ˜•", + "licenseKeyRequired": "๋ผ์ด์„ผ์Šค ํ‚ค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค", + "licenseTermsAgree": "๋ผ์ด์„ ์Šค ์กฐ๊ฑด์— ๋™์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.", + "licenseErrorKeyLoad": "๋ผ์ด์„ผ์Šค ํ‚ค๋ฅผ ๋กœ๋“œํ•˜๋Š” ๋ฐ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.", + "licenseErrorKeyLoadDescription": "๋ผ์ด์„ผ์Šค ํ‚ค ๋กœ๋“œ ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "licenseErrorKeyDelete": "๋ผ์ด์„ผ์Šค ํ‚ค ์‚ญ์ œ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.", + "resourceNotFound": "๋ฆฌ์†Œ์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค", + "licenseErrorKeyDeleteDescription": "๋ผ์ด์„ผ์Šค ํ‚ค ์‚ญ์ œ ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "licenseKeyDeleted": "๋ผ์ด์„ผ์Šค ํ‚ค๊ฐ€ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "licenseKeyDeletedDescription": "๋ผ์ด์„ผ์Šค ํ‚ค๊ฐ€ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "licenseErrorKeyActivate": "๋ผ์ด์„ผ์Šค ํ‚ค ํ™œ์„ฑํ™”์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.", + "licenseErrorKeyActivateDescription": "๋ผ์ด์„ผ์Šค ํ‚ค๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋Š” ๋™์•ˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค", + "licenseAbout": "๋ผ์ด์„ผ์Šค์— ๋Œ€ํ•œ ์ •๋ณด", + "communityEdition": "์ปค๋ฎค๋‹ˆํ‹ฐ ์—๋””์…˜", + "licenseAboutDescription": "์ด๊ฒƒ์€ ์ƒ์—…์  ํ™˜๊ฒฝ์—์„œ Pangolin์„ ์‚ฌ์šฉํ•˜๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋ฐ ๊ธฐ์—… ์‚ฌ์šฉ์ž์šฉ์ž…๋‹ˆ๋‹ค. ๊ฐœ์ธ ์šฉ๋„๋กœ Pangolin์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ด ์„น์…˜์„ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.", + "licenseKeyActivated": "๋ผ์ด์„ผ์Šค ํ‚ค๊ฐ€ ํ™œ์„ฑํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค", + "licenseKeyActivatedDescription": "๋ผ์ด์„ผ์Šค ํ‚ค๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ํ™œ์„ฑํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "licenseErrorKeyRecheck": "๋ผ์ด์„ผ์Šค ํ‚ค ์žฌํ™•์ธ ์‹คํŒจ", + "licenseErrorKeyRecheckDescription": "๋ผ์ด์„ผ์Šค ํ‚ค๋ฅผ ์žฌํ™•์ธํ•˜๋Š” ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "licenseErrorKeyRechecked": "๋ผ์ด์„ผ์Šค ํ‚ค๊ฐ€ ์žฌํ™•์ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "licenseErrorKeyRecheckedDescription": "๋ชจ๋“  ๋ผ์ด์„ผ์Šค ํ‚ค๊ฐ€ ์žฌ๊ฒ€์‚ฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "licenseActivateKey": "๋ผ์ด์„ผ์Šค ํ‚ค ํ™œ์„ฑํ™”", + "licenseActivateKeyDescription": "๋ผ์ด์„ผ์Šค ํ‚ค๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ํ™œ์„ฑํ™”ํ•˜์‹ญ์‹œ์˜ค.", + "licenseActivate": "๋ผ์ด์„ผ์Šค ํ™œ์„ฑํ™”", + "licenseAgreement": "์ด ์ƒ์ž๋ฅผ ์ฒดํฌํ•จ์œผ๋กœ์จ, ๊ท€ํ•˜๋Š” ๊ท€ํ•˜์˜ ๋ผ์ด์„ ์Šค ํ‚ค์™€ ๊ด€๋ จ๋œ ๊ณ„์ธต์— ํ•ด๋‹นํ•˜๋Š” ๋ผ์ด์„ ์Šค ์กฐ๊ฑด์„ ์ฝ๊ณ  ๋™์˜ํ–ˆ์Œ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.", + "fossorialLicense": "Fossorial ์ƒ์—… ๋ผ์ด์„ ์Šค ๋ฐ ๊ตฌ๋… ์•ฝ๊ด€ ๋ณด๊ธฐ", + "licenseMessageRemove": "์ด ์ž‘์—…์€ ๋ผ์ด์„ผ์Šค ํ‚ค์™€ ๊ทธ์— ์˜ํ•ด ๋ถ€์—ฌ๋œ ๋ชจ๋“  ๊ด€๋ จ ๊ถŒํ•œ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.", + "sidebarAllUsers": "๋ชจ๋“  ์‚ฌ์šฉ์ž", + "licenseMessageConfirm": "ํ™•์ธ์„ ์œ„ํ•ด ์•„๋ž˜์— ๋ผ์ด์„ผ์Šค ํ‚ค๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”.", + "licenseQuestionRemove": "๋ผ์ด์„ผ์Šค ํ‚ค {selectedKey}๋ฅผ ์‚ญ์ œํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?", + "licenseKeyDelete": "๋ผ์ด์„ผ์Šค ํ‚ค ์‚ญ์ œ", + "licenseKeyDeleteConfirm": "๋ผ์ด์„ผ์Šค ํ‚ค ์‚ญ์ œ ํ™•์ธ", + "licenseTitle": "๋ผ์ด์„ ์Šค ์ƒํƒœ ๊ด€๋ฆฌ", + "licenseTitleDescription": "์‹œ์Šคํ…œ์—์„œ ๋ผ์ด์„ผ์Šค ํ‚ค๋ฅผ ๋ณด๊ณ  ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.", + "licenseHost": "ํ˜ธ์ŠคํŠธ ๋ผ์ด์„ผ์Šค", + "licenseHostDescription": "ํ˜ธ์ŠคํŠธ์˜ ์ฃผ์š” ๋ผ์ด์„ผ์Šค ํ‚ค๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.", + "licensedNot": "๋ผ์ด์„ผ์Šค ์—†์Œ", + "hostId": "ํ˜ธ์ŠคํŠธ ID", + "licenseReckeckAll": "๋ชจ๋“  ํ‚ค ์žฌํ™•์ธ", + "licenseSiteUsage": "์‚ฌ์ดํŠธ ์‚ฌ์šฉ๋Ÿ‰", + "licenseSiteUsageDecsription": "์ด ๋ผ์ด์„ผ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์ดํŠธ ์ˆ˜๋ฅผ ํ™•์ธํ•˜์„ธ์š”.", + "noResults": "๊ฒฐ๊ณผ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.", + "licenseNoSiteLimit": "๋ผ์ด์„ ์Šค๊ฐ€ ์—†๋Š” ํ˜ธ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์ดํŠธ ์ˆ˜์— ์ œํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค.", + "licensePurchase": "๋ผ์ด์„ผ์Šค ๊ตฌ๋งค", + "licensePurchaseSites": "์ถ”๊ฐ€ ์‚ฌ์ดํŠธ ๊ตฌ๋งค", + "licenseSitesUsedMax": "{maxSites}๊ฐœ์˜ ์‚ฌ์ดํŠธ ์ค‘ {usedSites}๊ฐœ ์‚ฌ์šฉ ์ค‘", + "licenseSitesUsed": "์‹œ์Šคํ…œ์— {count, plural, =0 {# ์‚ฌ์ดํŠธ} one {# ์‚ฌ์ดํŠธ} other {# ์‚ฌ์ดํŠธ}}๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.", + "licensePurchaseDescription": "๊ตฌ๋งคํ•  ์‚ฌ์ดํŠธ ์ˆ˜๋ฅผ ์„ ํƒํ•˜์„ธ์š” {selectedMode, select, license {๋ผ์ด์„ผ์Šค๋ฅผ ๊ตฌ๋งคํ•ฉ๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ๋” ๋งŽ์€ ์‚ฌ์ดํŠธ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.} other {๊ธฐ์กด ๋ผ์ด์„ผ์Šค์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.}}", + "licenseFee": "๋ผ์ด์„ ์Šค ์š”๊ธˆ", + "licensePriceSite": "์‚ฌ์ดํŠธ๋‹น ๊ฐ€๊ฒฉ", + "total": "์ด๊ณ„", + "licenseContinuePayment": "๊ฒฐ์ œ๋กœ ์ง„ํ–‰", + "pricingPage": "๊ฐ€๊ฒฉ ํŽ˜์ด์ง€", + "pricingPortal": "๊ตฌ๋งค ํฌํ„ธ ๋ณด๊ธฐ", + "licensePricingPage": "๊ฐ€์žฅ ์ตœ์‹ ์˜ ๊ฐ€๊ฒฉ ๋ฐ ํ• ์ธ ์ •๋ณด๋ฅผ ๋ณด๋ ค๋ฉด ๋ฐฉ๋ฌธํ•˜์‹ญ์‹œ์˜ค ", + "invite": "์ดˆ๋Œ€", + "inviteRegenerate": "์ดˆ๋Œ€์žฅ ์žฌ์ƒ์„ฑ", + "inviteRegenerateDescription": "์ด์ „ ์ดˆ๋Œ€๋ฅผ ์ทจ์†Œํ•˜๊ณ  ์ƒˆ๋กœ ์ƒ์„ฑ", + "inviteRemove": "์ดˆ๋Œ€ ์ œ๊ฑฐ", + "inviteRemoveError": "์ดˆ๋Œ€ ์ œ๊ฑฐ ์‹คํŒจ", + "inviteRemoveErrorDescription": "์ดˆ๋Œ€๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๋™์•ˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "inviteRemoved": "์ดˆ๋Œ€๊ฐ€ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "inviteRemovedDescription": "{email}์— ๋Œ€ํ•œ ์ดˆ๋Œ€๊ฐ€ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "inviteQuestionRemove": "์ดˆ๋Œ€ {email}๋ฅผ ์ œ๊ฑฐํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?", + "inviteMessageRemove": "ํ•œ ๋ฒˆ ์ œ๊ฑฐ๋˜๋ฉด ์ด ์ดˆ๋Œ€๋Š” ๋” ์ด์ƒ ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ์‚ฌ์šฉ์ž๋ฅผ ๋‹ค์‹œ ์ดˆ๋Œ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.", + "inviteMessageConfirm": "ํ™•์ธ์„ ์œ„ํ•ด ์•„๋ž˜ ์ดˆ๋Œ€์˜ ์ด๋ฉ”์ผ ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.", + "inviteQuestionRegenerate": "{email}์— ๋Œ€ํ•œ ์ดˆ๋Œ€์žฅ์„ ๋‹ค์‹œ ์ƒ์„ฑํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์ด์ „ ์ดˆ๋Œ€์žฅ์€ ์ทจ์†Œ๋ฉ๋‹ˆ๋‹ค.", + "inviteRemoveConfirm": "์ดˆ๋Œ€ ์ œ๊ฑฐ ํ™•์ธ", + "inviteRegenerated": "์ดˆ๋Œ€ ์žฌ์ƒ์„ฑ๋จ", + "inviteSent": "์ƒˆ ์ดˆ๋Œ€์žฅ์ด {email}๋กœ ์ „์†ก๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "inviteSentEmail": "์‚ฌ์šฉ์ž์—๊ฒŒ ์ด๋ฉ”์ผ ์•Œ๋ฆผ ์ „์†ก", + "inviteGenerate": "{email}์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ์ดˆ๋Œ€์žฅ์ด ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "inviteDuplicateError": "์ดˆ๋Œ€ ์ค‘๋ณต", + "inviteDuplicateErrorDescription": "์ด ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์ดˆ๋Œ€๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.", + "inviteRateLimitError": "์š”์ฒญ ํ•œ๋„ ์ดˆ๊ณผ", + "inviteRateLimitErrorDescription": "์‹œ๊ฐ„๋‹น 3ํšŒ ์žฌ์ƒ์„ฑ ํ•œ๋„๋ฅผ ์ดˆ๊ณผํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ๋‹ค์‹œ ์‹œ๋„ํ•˜์„ธ์š”.", + "inviteRegenerateError": "์ดˆ๋Œ€ ์žฌ์ƒ์„ฑ ์‹คํŒจ", + "inviteRegenerateErrorDescription": "์ดˆ๋Œ€์žฅ์„ ์žฌ์ƒ์„ฑํ•˜๋Š” ๋™์•ˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "inviteValidityPeriod": "์œ ํšจ ๊ธฐ๊ฐ„", + "inviteValidityPeriodSelect": "์œ ํšจ ๊ธฐ๊ฐ„ ์„ ํƒ", + "inviteRegenerateMessage": "์ดˆ๋Œ€์žฅ์ด ๋‹ค์‹œ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์•„๋ž˜ ๋งํฌ์— ์ ‘์†ํ•˜์—ฌ ์ดˆ๋Œ€์žฅ์„ ์ˆ˜๋ฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.", + "inviteRegenerateButton": "์žฌ์ƒ์„ฑ", + "expiresAt": "๋งŒ๋ฃŒ ์‹œ๊ฐ„", + "accessRoleUnknown": "์•Œ ์ˆ˜ ์—†๋Š” ์—ญํ• ", + "placeholder": "์ž๋ฆฌ ํ‘œ์‹œ์ž", + "userErrorOrgRemove": "์‚ฌ์šฉ์ž๋ฅผ ์ œ๊ฑฐํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค", + "userErrorOrgRemoveDescription": "์‚ฌ์šฉ์ž๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๋™์•ˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "userOrgRemoved": "์‚ฌ์šฉ์ž๊ฐ€ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "userOrgRemovedDescription": "์‚ฌ์šฉ์ž {email}๊ฐ€ ์กฐ์ง์—์„œ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "userQuestionOrgRemove": "{email}์„ ์กฐ์ง์—์„œ ์ œ๊ฑฐํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?", + "userMessageOrgRemove": "์ด ์‚ฌ์šฉ์ž๊ฐ€ ์ œ๊ฑฐ๋˜๋ฉด ๋” ์ด์ƒ ์กฐ์ง์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ๋‹ค์‹œ ์ดˆ๋Œ€ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ดˆ๋Œ€๋ฅผ ๋‹ค์‹œ ์ˆ˜๋ฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.", + "userMessageOrgConfirm": "ํ™•์ธ์„ ์œ„ํ•ด ์•„๋ž˜์— ์‚ฌ์šฉ์ž ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”.", + "userRemoveOrgConfirm": "์‚ฌ์šฉ์ž ์ œ๊ฑฐ ํ™•์ธ", + "userRemoveOrg": "์กฐ์ง์—์„œ ์‚ฌ์šฉ์ž ์ œ๊ฑฐ", + "users": "์‚ฌ์šฉ์ž", + "accessRoleMember": "ํšŒ์›", + "accessRoleOwner": "์†Œ์œ ์ž", + "userConfirmed": "ํ™•์ธ๋จ", + "idpNameInternal": "๋‚ด๋ถ€", + "emailInvalid": "์œ ํšจํ•˜์ง€ ์•Š์€ ์ด๋ฉ”์ผ ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค.", + "inviteValidityDuration": "์ง€์† ์‹œ๊ฐ„์„ ์„ ํƒํ•˜์‹ญ์‹œ์˜ค.", + "accessRoleSelectPlease": "์—ญํ• ์„ ์„ ํƒํ•˜์„ธ์š”", + "usernameRequired": "์‚ฌ์šฉ์ž ์ด๋ฆ„์€ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค.", + "idpSelectPlease": "์‹ ์› ์ œ๊ณต์ž๋ฅผ ์„ ํƒํ•˜์‹ญ์‹œ์˜ค", + "idpGenericOidc": "์ผ๋ฐ˜ OAuth2/OIDC ๊ณต๊ธ‰์ž.", + "accessRoleErrorFetch": "์—ญํ• ์„ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.", + "accessRoleErrorFetchDescription": "์—ญํ• ์„ ๊ฐ€์ ธ์˜ค๋Š” ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "idpErrorFetch": "์‹ ์› ์ œ๊ณต์ž๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค", + "idpErrorFetchDescription": "์‹ ์› ๊ณต๊ธ‰์ž๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "userErrorExists": "์‚ฌ์šฉ์ž๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.", + "terabytes": "{count} TB", + "userErrorExistsDescription": "์ด ์‚ฌ์šฉ์ž๋Š” ์ด๋ฏธ ์กฐ์ง์˜ ๊ตฌ์„ฑ์›์ž…๋‹ˆ๋‹ค.", + "inviteError": "์‚ฌ์šฉ์ž ์ดˆ๋Œ€์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค", + "inviteErrorDescription": "์‚ฌ์šฉ์ž๋ฅผ ์ดˆ๋Œ€ํ•˜๋Š” ๋™์•ˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "userInvited": "์‚ฌ์šฉ์ž๊ฐ€ ์ดˆ๋Œ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "userInvitedDescription": "์‚ฌ์šฉ์ž๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ดˆ๋Œ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "userErrorCreate": "์‚ฌ์šฉ์ž ์ƒ์„ฑ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.", + "userErrorCreateDescription": "์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋™์•ˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "userCreated": "์‚ฌ์šฉ์ž๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "userCreatedDescription": "์‚ฌ์šฉ์ž๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "userTypeInternal": "๋‚ด๋ถ€ ์‚ฌ์šฉ์ž", + "userTypeInternalDescription": "์‚ฌ์šฉ์ž๋ฅผ ์ดˆ๋Œ€ํ•˜์—ฌ ๊ท€ํ•˜์˜ ์กฐ์ง์— ์ง์ ‘ ์ฐธ์—ฌํ•˜๊ฒŒ ํ•˜์„ธ์š”.", + "userTypeExternal": "์™ธ๋ถ€ ์‚ฌ์šฉ์ž", + "userTypeExternalDescription": "์™ธ๋ถ€ ์‹ ์› ๊ณต๊ธ‰์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•˜์„ธ์š”.", + "accessUserCreateDescription": "์ƒˆ ์‚ฌ์šฉ์ž๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์•„๋ž˜ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.", + "userSeeAll": "๋ชจ๋“  ์‚ฌ์šฉ์ž ๋ณด๊ธฐ", + "userTypeTitle": "์‚ฌ์šฉ์ž ์œ ํ˜•", + "userTypeDescription": "์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฒฐ์ •ํ•˜์„ธ์š”.", + "userSettings": "์‚ฌ์šฉ์ž ์ •๋ณด", + "userSettingsDescription": "์ƒˆ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์„ธ๋ถ€์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜์‹ญ์‹œ์˜ค.", + "inviteEmailSent": "์‚ฌ์šฉ์ž์—๊ฒŒ ์ดˆ๋Œ€ ์ด๋ฉ”์ผ ๋ณด๋‚ด๊ธฐ", + "inviteValid": "์œ ํšจ ๊ธฐ๊ฐ„", + "selectDuration": "์ง€์† ์‹œ๊ฐ„ ์„ ํƒ", + "accessRoleSelect": "์—ญํ•  ์„ ํƒ", + "inviteEmailSentDescription": "์•„๋ž˜์˜ ์ ‘๊ทผ ๋งํฌ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ด๋ฉ”์ผ์ด ์ „์†ก๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์ดˆ๋Œ€๋ฅผ ์ˆ˜๋ฝํ•˜๊ธฐ ์œ„ํ•ด ๋งํฌ์— ์ ‘๊ทผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.", + "inviteSentDescription": "์‚ฌ์šฉ์ž๊ฐ€ ์ดˆ๋Œ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ดˆ๋Œ€๋ฅผ ์ˆ˜๋ฝํ•˜๋ ค๋ฉด ์•„๋ž˜ ๋งํฌ์— ์ ‘์†ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.", + "inviteExpiresIn": "์ดˆ๋Œ€๋Š” {days, plural, one {#์ผ} other {#์ผ}} ํ›„์— ๋งŒ๋ฃŒ๋ฉ๋‹ˆ๋‹ค.", + "idpTitle": "์•„์ด๋ดํ‹ฐํ‹ฐ ๊ณต๊ธ‰์ž", + "idpSelect": "์™ธ๋ถ€ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ ์•„์ด๋ดํ‹ฐํ‹ฐ ๊ณต๊ธ‰์ž๋ฅผ ์„ ํƒํ•˜์‹ญ์‹œ์˜ค", + "idpNotConfigured": "๊ตฌ์„ฑ๋œ ์•„์ด๋ดํ‹ฐํ‹ฐ ๊ณต๊ธ‰์ž๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์™ธ๋ถ€ ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์ „์— ์•„์ด๋ดํ‹ฐํ‹ฐ ๊ณต๊ธ‰์ž๋ฅผ ๊ตฌ์„ฑํ•˜์‹ญ์‹œ์˜ค.", + "usernameUniq": "์„ ํƒํ•œ ์•„์ด๋ดํ‹ฐํ‹ฐ ๊ณต๊ธ‰์ž์— ์กด์žฌํ•˜๋Š” ๊ณ ์œ ํ•œ ์‚ฌ์šฉ์ž ์ด๋ฆ„๊ณผ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.", + "emailOptional": "์ด๋ฉ”์ผ (์„ ํƒ ์‚ฌํ•ญ)", + "nameOptional": "์ด๋ฆ„ (์„ ํƒ ์‚ฌํ•ญ)", + "accessControls": "์ ‘๊ทผ ์ œ์–ด", + "userDescription2": "์ด ์‚ฌ์šฉ์ž์˜ ์„ค์ • ๊ด€๋ฆฌ", + "accessRoleErrorAdd": "์‚ฌ์šฉ์ž๋ฅผ ์—ญํ• ์— ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.", + "accessRoleErrorAddDescription": "์‚ฌ์šฉ์ž๋ฅผ ์—ญํ• ์— ์ถ”๊ฐ€ํ•˜๋Š” ๋™์•ˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "userSaved": "์‚ฌ์šฉ์ž ์ €์žฅ๋จ", + "userSavedDescription": "์‚ฌ์šฉ์ž๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "accessControlsDescription": "์ด ์‚ฌ์šฉ์ž๊ฐ€ ์กฐ์ง์—์„œ ์ ‘๊ทผํ•˜๊ณ  ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์„ ๊ด€๋ฆฌํ•˜์„ธ์š”", + "accessControlsSubmit": "์ ‘๊ทผ ์ œ์–ด ์ €์žฅ", + "roles": "์—ญํ• ", + "accessUsersRoles": "์‚ฌ์šฉ์ž ๋ฐ ์—ญํ•  ๊ด€๋ฆฌ", + "accessUsersRolesDescription": "์‚ฌ์šฉ์ž๋ฅผ ์ดˆ๋Œ€ํ•˜๊ณ  ์—ญํ• ์— ์ถ”๊ฐ€ํ•˜์—ฌ ์กฐ์ง์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ๊ด€๋ฆฌํ•˜์„ธ์š”", + "key": "ํ‚ค", + "createdAt": "์ƒ์„ฑ์ผ", + "proxyErrorInvalidHeader": "์ž˜๋ชป๋œ ์‚ฌ์šฉ์ž ์ •์˜ ํ˜ธ์ŠคํŠธ ํ—ค๋” ๊ฐ’์ž…๋‹ˆ๋‹ค. ๋„๋ฉ”์ธ ์ด๋ฆ„ ํ˜•์‹์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž ์ •์˜ ํ˜ธ์ŠคํŠธ ํ—ค๋”๋ฅผ ํ•ด์ œํ•˜๋ ค๋ฉด ๋น„์›Œ ๋‘์‹ญ์‹œ์˜ค.", + "proxyErrorTls": "์œ ํšจํ•˜์ง€ ์•Š์€ TLS ์„œ๋ฒ„ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ๋„๋ฉ”์ธ ์ด๋ฆ„ ํ˜•์‹์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋น„์›Œ ๋‘์–ด TLS ์„œ๋ฒ„ ์ด๋ฆ„์„ ์ œ๊ฑฐํ•˜์‹ญ์‹œ์˜ค.", + "proxyEnableSSL": "SSL ํ™œ์„ฑํ™” (https)", + "targetErrorFetch": "๋Œ€์ƒ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.", + "targetErrorFetchDescription": "๋Œ€์ƒ ๊ฐ€์ ธ์˜ค๋Š” ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค", + "siteErrorFetch": "๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค", + "siteErrorFetchDescription": "๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋™์•ˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค", + "targetErrorDuplicate": "์ค‘๋ณต ๋Œ€์ƒ", + "targetErrorDuplicateDescription": "์ด ์„ค์ •์„ ๊ฐ€์ง„ ๋Œ€์ƒ์ด ์ด๋ฏธ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค", + "targetWireGuardErrorInvalidIp": "์œ ํšจํ•˜์ง€ ์•Š์€ ๋Œ€์ƒ IP", + "targetWireGuardErrorInvalidIpDescription": "๋Œ€์ƒ IP๋Š” ์‚ฌ์ดํŠธ ์„œ๋ธŒ๋„ท ๋‚ด์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.", + "targetsUpdated": "๋Œ€์ƒ ์—…๋ฐ์ดํŠธ๋จ", + "targetsUpdatedDescription": "๋Œ€์ƒ ๋ฐ ์„ค์ •์ด ์„ฑ๊ณต์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "targetsErrorUpdate": "๋Œ€์ƒ ์—…๋ฐ์ดํŠธ ์‹คํŒจ", + "targetsErrorUpdateDescription": "๋Œ€์ƒ ์—…๋ฐ์ดํŠธ ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "targetTlsUpdate": "TLS ์„ค์ •์ด ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "targetTlsUpdateDescription": "TLS ์„ค์ •์ด ์„ฑ๊ณต์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "targetErrorTlsUpdate": "TLS ์„ค์ • ์—…๋ฐ์ดํŠธ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.", + "targetErrorTlsUpdateDescription": "TLS ์„ค์ •์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋™์•ˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค", + "proxyUpdated": "ํ”„๋ก์‹œ ์„ค์ •์ด ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "proxyUpdatedDescription": "ํ”„๋ก์‹œ ์„ค์ •์ด ์„ฑ๊ณต์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", + "proxyErrorUpdate": "ํ”„๋ก์‹œ ์„ค์ • ์—…๋ฐ์ดํŠธ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.", + "proxyErrorUpdateDescription": "ํ”„๋ก์‹œ ์„ค์ •์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋™์•ˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค", + "targetAddr": "IP / ํ˜ธ์ŠคํŠธ ์ด๋ฆ„", + "targetPort": "ํฌํŠธ", + "targetProtocol": "ํ”„๋กœํ† ์ฝœ", + "targetTlsSettings": "๋ณด์•ˆ ์—ฐ๊ฒฐ ๊ตฌ์„ฑ", + "targetTlsSettingsDescription": "๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ SSL/TLS ์„ค์ • ๊ตฌ์„ฑ", + "targetTlsSettingsAdvanced": "๊ณ ๊ธ‰ TLS ์„ค์ •", + "targetTlsSni": "TLS ์„œ๋ฒ„ ์ด๋ฆ„ (SNI)", + "targetTlsSniDescription": "SNI์— ์‚ฌ์šฉํ•  TLS ์„œ๋ฒ„ ์ด๋ฆ„. ๊ธฐ๋ณธ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋น„์›Œ ๋‘์‹ญ์‹œ์˜ค.", + "targetTlsSubmit": "์„ค์ • ์ €์žฅ", + "targets": "๋Œ€์ƒ ๊ตฌ์„ฑ", + "targetsDescription": "์„œ๋น„์Šค๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ผ์šฐํŒ…ํ•  ๋Œ€์ƒ์„ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค", + "targetStickySessions": "์Šคํ‹ฐํ‚ค ์„ธ์…˜ ํ™œ์„ฑํ™”", + "targetStickySessionsDescription": "์„ธ์…˜ ์ „์ฒด ๋™์•ˆ ๋™์ผํ•œ ๋ฐฑ์—”๋“œ ๋Œ€์ƒ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.", + "methodSelect": "์„ ํƒ ๋ฐฉ๋ฒ•", + "targetSubmit": "๋Œ€์ƒ ์ถ”๊ฐ€", + "targetNoOne": "๋Œ€์ƒ์ด ์—†์Šต๋‹ˆ๋‹ค. ์–‘์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€์ƒ์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”.", + "targetNoOneDescription": "์œ„์— ํ•˜๋‚˜ ์ด์ƒ์˜ ๋Œ€์ƒ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์ด ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค.", + "targetsSubmit": "๋Œ€์ƒ ์ €์žฅ", + "proxyAdditional": "์ถ”๊ฐ€ ํ”„๋ก์‹œ ์„ค์ •", + "proxyAdditionalDescription": "๋ฆฌ์†Œ์Šค๊ฐ€ ํ”„๋ก์‹œ ์„ค์ •์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ• ๊ตฌ์„ฑ", + "proxyCustomHeader": "์‚ฌ์šฉ์ž ์ •์˜ ํ˜ธ์ŠคํŠธ ํ—ค๋”", + "proxyCustomHeaderDescription": "์š”์ฒญ์„ ํ”„๋ก์‹œํ•  ๋•Œ ์„ค์ •ํ•  ํ˜ธ์ŠคํŠธ ํ—ค๋”์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋น„์›Œ ๋‘์‹ญ์‹œ์˜ค.", + "proxyAdditionalSubmit": "ํ”„๋ก์‹œ ์„ค์ • ์ €์žฅ", + "subnetMaskErrorInvalid": "์œ ํšจํ•˜์ง€ ์•Š์€ ์„œ๋ธŒ๋„ท ๋งˆ์Šคํฌ์ž…๋‹ˆ๋‹ค. 0์—์„œ 32 ์‚ฌ์ด์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.", + "ipAddressErrorInvalidFormat": "์ž˜๋ชป๋œ IP ์ฃผ์†Œ ํ˜•์‹", + "ipAddressErrorInvalidOctet": "์œ ํšจํ•˜์ง€ ์•Š์€ IP ์ฃผ์†Œ ์˜ฅํ…Ÿ", + "path": "๊ฒฝ๋กœ", + "ipAddressRange": "IP ๋ฒ”์œ„", + "rulesErrorFetch": "๊ทœ์น™์„ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.", + "rulesErrorFetchDescription": "๊ทœ์น™์„ ๊ฐ€์ ธ์˜ค๋Š” ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค", + "rulesErrorDuplicate": "์ค‘๋ณต ๊ทœ์น™", + "rulesErrorDuplicateDescription": "์ด ์„ค์ •์„ ๊ฐ€์ง„ ๊ทœ์น™์ด ์ด๋ฏธ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.", + "rulesErrorInvalidIpAddressRange": "์œ ํšจํ•˜์ง€ ์•Š์€ CIDR", + "rulesErrorInvalidIpAddressRangeDescription": "์œ ํšจํ•œ CIDR ๊ฐ’์„ ์ž…๋ ฅํ•˜์‹ญ์‹œ์˜ค.", + "rulesErrorInvalidUrl": "์œ ํšจํ•˜์ง€ ์•Š์€ URL ๊ฒฝ๋กœ", + "rulesErrorInvalidUrlDescription": "์œ ํšจํ•œ URL ๊ฒฝ๋กœ ๊ฐ’์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.", + "rulesErrorInvalidIpAddress": "์œ ํšจํ•˜์ง€ ์•Š์€ IP", + "rulesErrorInvalidIpAddressDescription": "์œ ํšจํ•œ IP ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”", + "rulesErrorUpdate": "๊ทœ์น™ ์—…๋ฐ์ดํŠธ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.", + "rulesErrorUpdateDescription": "๊ทœ์น™ ์—…๋ฐ์ดํŠธ ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "rulesUpdated": "๊ทœ์น™ ํ™œ์„ฑํ™”", + "rulesUpdatedDescription": "๊ทœ์น™ ํ‰๊ฐ€๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", + "rulesMatchIpAddressRangeDescription": "CIDR ํ˜•์‹์œผ๋กœ ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š” (์˜ˆ: 103.21.244.0/22)", + "rulesMatchIpAddress": "IP ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š” (์˜ˆ: 103.21.244.12)", + "rulesMatchUrl": "URL ๊ฒฝ๋กœ ๋˜๋Š” ํŒจํ„ด์„ ์ž…๋ ฅํ•˜์„ธ์š” (์˜ˆ: /api/v1/todos ๋˜๋Š” /api/v1/*)", + "rulesErrorInvalidPriority": "์œ ํšจํ•˜์ง€ ์•Š์€ ์šฐ์„ ์ˆœ์œ„", + "rulesErrorInvalidPriorityDescription": "์œ ํšจํ•œ ์šฐ์„  ์ˆœ์œ„๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”.", + "rulesErrorDuplicatePriority": "์ค‘๋ณต ์šฐ์„ ์ˆœ์œ„", + "rulesErrorDuplicatePriorityDescription": "๊ณ ์œ ํ•œ ์šฐ์„  ์ˆœ์œ„๋ฅผ ์ž…๋ ฅํ•˜์‹ญ์‹œ์˜ค.", + "ruleUpdated": "๊ทœ์น™์ด ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", + "ruleUpdatedDescription": "๊ทœ์น™์ด ์„ฑ๊ณต์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", + "ruleErrorUpdate": "์ž‘์—… ์‹คํŒจ", + "ruleErrorUpdateDescription": "์ €์žฅ ์ž‘์—… ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "rulesPriority": "์šฐ์„ ์ˆœ์œ„", + "rulesAction": "์ž‘์—…", + "rulesMatchType": "์ผ์น˜ ์œ ํ˜•", + "value": "๊ฐ’", + "rulesAbout": "๊ทœ์น™์— ๋Œ€ํ•œ ์ •๋ณด", + "rulesAboutDescription": "๊ทœ์น™์„ ์‚ฌ์šฉํ•˜๋ฉด IP ์ฃผ์†Œ ๋˜๋Š” URL ๊ฒฝ๋กœ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. IP ์ฃผ์†Œ ๋˜๋Š” URL ๊ฒฝ๋กœ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์•ก์„ธ์Šค๋ฅผ ํ—ˆ์šฉํ•˜๊ฑฐ๋‚˜ ๊ฑฐ๋ถ€ํ•˜๋Š” ๊ทœ์น™์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.", + "rulesActions": "์ž‘์—…", + "rulesActionAlwaysAllow": "ํ•ญ์ƒ ํ—ˆ์šฉ: ๋ชจ๋“  ์ธ์ฆ ๋ฐฉ๋ฒ• ์šฐํšŒ", + "rulesActionAlwaysDeny": "ํ•ญ์ƒ ๊ฑฐ๋ถ€: ๋ชจ๋“  ์š”์ฒญ์„ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค. ์ธ์ฆ์„ ์‹œ๋„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.", + "rulesMatchCriteria": "์ผ์น˜ ๊ธฐ์ค€", + "rulesMatchCriteriaIpAddress": "ํŠน์ • IP ์ฃผ์†Œ์™€ ์ผ์น˜", + "rulesMatchCriteriaIpAddressRange": "CIDR ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ IP ์ฃผ์†Œ ๋ฒ”์œ„๋ฅผ ์ผ์น˜์‹œํ‚ต๋‹ˆ๋‹ค", + "rulesMatchCriteriaUrl": "URL ๊ฒฝ๋กœ ๋˜๋Š” ํŒจํ„ด ์ผ์น˜", + "rulesEnable": "๊ทœ์น™ ํ™œ์„ฑํ™”", + "rulesEnableDescription": "์ด ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ๊ทœ์น™ ํ‰๊ฐ€๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ฑฐ๋‚˜ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.", + "rulesResource": "๋ฆฌ์†Œ์Šค ๊ทœ์น™ ๊ตฌ์„ฑ", + "rulesResourceDescription": "๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์ œ์–ดํ•˜๋Š” ๊ทœ์น™ ๊ตฌ์„ฑ", + "ruleSubmit": "๊ทœ์น™ ์ถ”๊ฐ€", + "rulesNoOne": "๊ทœ์น™์ด ์—†์Šต๋‹ˆ๋‹ค. ์–‘์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.", + "rulesOrder": "๊ทœ์น™์€ ์šฐ์„  ์ˆœ์œ„์— ๋”ฐ๋ผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ํ‰๊ฐ€๋ฉ๋‹ˆ๋‹ค.", + "rulesSubmit": "๊ทœ์น™ ์ €์žฅ", + "resourceErrorCreate": "๋ฆฌ์†Œ์Šค ์ƒ์„ฑ ์˜ค๋ฅ˜", + "resourceErrorCreateDescription": "๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "resourceErrorCreateMessage": "๋ฆฌ์†Œ์Šค ์ƒ์„ฑ ์˜ค๋ฅ˜:", + "resourceErrorCreateMessageDescription": "์˜ˆ๊ธฐ์น˜ ์•Š์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "sitesErrorFetch": "์‚ฌ์ดํŠธ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "sitesErrorFetchDescription": "์‚ฌ์ดํŠธ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค", + "domainsErrorFetch": "๋„๋ฉ”์ธ ๊ฐ€์ ธ์˜ค๊ธฐ ์˜ค๋ฅ˜", + "domainsErrorFetchDescription": "๋„๋ฉ”์ธ์„ ๊ฐ€์ ธ์˜ค๋Š” ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "none": "์—†์Œ", + "unknown": "์•Œ ์ˆ˜ ์—†์Œ", + "resources": "๋ฆฌ์†Œ์Šค", + "resourcesDescription": "๋ฆฌ์†Œ์Šค๋Š” ๊ฐœ์ธ ๋„คํŠธ์›Œํฌ์—์„œ ์‹คํ–‰ ์ค‘์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ํ”„๋ก์‹œ์ž…๋‹ˆ๋‹ค. ๊ฐœ์ธ ๋„คํŠธ์›Œํฌ์—์„œ HTTP/HTTPS ๋˜๋Š” ์›์‹œ TCP/UDP ์„œ๋น„์Šค์— ๋Œ€ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•˜์‹ญ์‹œ์˜ค. ๊ฐ ๋ฆฌ์†Œ์Šค๋Š” ์•”ํ˜ธํ™”๋œ WireGuard ํ„ฐ๋„์„ ํ†ตํ•ด ๊ฐœ์ธ์ ์ด๊ณ  ์•ˆ์ „ํ•œ ์—ฐ๊ฒฐ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด ์‚ฌ์ดํŠธ์— ์—ฐ๊ฒฐ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.", + "resourcesWireGuardConnect": "WireGuard ์•”ํ˜ธํ™”๋ฅผ ํ†ตํ•œ ์•ˆ์ „ํ•œ ์—ฐ๊ฒฐ", + "resourcesMultipleAuthenticationMethods": "๋‹ค์ค‘ ์ธ์ฆ ๋ฐฉ๋ฒ• ๊ตฌ์„ฑ", + "resourcesUsersRolesAccess": "์‚ฌ์šฉ์ž ๋ฐ ์—ญํ•  ๊ธฐ๋ฐ˜ ์ ‘๊ทผ ์ œ์–ด", + "resourcesErrorUpdate": "๋ฆฌ์†Œ์Šค๋ฅผ ์ „ํ™˜ํ•˜๋Š” ๋ฐ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.", + "resourcesErrorUpdateDescription": "๋ฆฌ์†Œ์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋™์•ˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "access": "์ ‘์†", + "shareLink": "{resource} ๊ณต์œ  ๋งํฌ", + "resourceSelect": "๋ฆฌ์†Œ์Šค ์„ ํƒ", + "shareLinks": "๊ณต์œ  ๋งํฌ", + "share": "๊ณต์œ  ๊ฐ€๋Šฅํ•œ ๋งํฌ", + "shareDescription2": "๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ๊ณต์œ  ๊ฐ€๋Šฅํ•œ ๋งํฌ๋ฅผ ์ƒ์„ฑํ•˜์„ธ์š”. ๋งํฌ๋Š” ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ž„์‹œ ๋˜๋Š” ๋ฌด์ œํ•œ ์•ก์„ธ์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋งํฌ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๋งŒ๋ฃŒ ๊ธฐ๊ฐ„์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.", + "shareEasyCreate": "์ƒ์„ฑํ•˜๊ณ  ๊ณต์œ ํ•˜๊ธฐ ์‰ฌ์›€", + "shareConfigurableExpirationDuration": "๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ๋งŒ๋ฃŒ ๊ธฐ๊ฐ„", + "shareSecureAndRevocable": "์•ˆ์ „ํ•˜๊ณ  ์ฒ ํšŒ ๊ฐ€๋Šฅ", + "nameMin": "์ด๋ฆ„์€ ์ตœ์†Œ {len}์ž ์ด์ƒ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.", + "nameMax": "์ด๋ฆ„์€ {len}์ž๋ณด๋‹ค ๊ธธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.", + "sitesConfirmCopy": "๊ตฌ์„ฑ์„ ๋ณต์‚ฌํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.", + "unknownCommand": "์•Œ ์ˆ˜ ์—†๋Š” ๋ช…๋ น", + "newtErrorFetchReleases": "๋ฆด๋ฆฌ์Šค ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค: {err}", + "newtErrorFetchLatest": "์ตœ์‹  ๋ฆด๋ฆฌ์Šค๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ: {err}", + "newtEndpoint": "Newt ์—”๋“œํฌ์ธํŠธ", + "newtId": "๋‰ดํŠธ ID", + "newtSecretKey": "Newt ๋น„๋ฐ€ ํ‚ค", + "architecture": "์•„ํ‚คํ…์ฒ˜", + "sites": "์‚ฌ์ดํŠธ", + "siteWgAnyClients": "WireGuard ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐํ•˜์‹ญ์‹œ์˜ค. ํ”ผ์–ด IP๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด๋ถ€ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.", + "siteWgCompatibleAllClients": "๋ชจ๋“  WireGuard ํด๋ผ์ด์–ธํŠธ์™€ ํ˜ธํ™˜", + "siteWgManualConfigurationRequired": "์ˆ˜๋™ ๊ตฌ์„ฑ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.", + "userErrorNotAdminOrOwner": "์‚ฌ์šฉ์ž๋Š” ๊ด€๋ฆฌ์ž ๋˜๋Š” ์†Œ์œ ์ž๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.", + "pangolinSettings": "์„ค์ • - ํŒ๊ณจ๋ฆฐ", + "accessRoleYour": "๊ท€ํ•˜์˜ ์—ญํ• :", + "accessRoleSelect2": "์—ญํ•  ์„ ํƒ", + "accessUserSelect": "์‚ฌ์šฉ์ž๋ฅผ ์„ ํƒํ•˜์„ธ์š”.", + "otpEmailEnter": "์ด๋ฉ”์ผ์„ ์ž…๋ ฅํ•˜์„ธ์š”", + "otpEmailEnterDescription": "์ž…๋ ฅ ํ•„๋“œ์— ์ž…๋ ฅํ•œ ํ›„ Enter ํ‚ค๋ฅผ ๋ˆŒ๋Ÿฌ ์ด๋ฉ”์ผ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.", + "otpEmailErrorInvalid": "์œ ํšจํ•˜์ง€ ์•Š์€ ์ด๋ฉ”์ผ ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค. ์™€์ผ๋“œ์นด๋“œ(*)๋Š” ์ „์ฒด ๋กœ์ปฌ ๋ถ€๋ถ„์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.", + "otpEmailSmtpRequired": "SMTP ํ•„์š”", + "otpEmailSmtpRequiredDescription": "์ผํšŒ์„ฑ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ธ์ฆ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์„œ๋ฒ„์—์„œ SMTP๊ฐ€ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.", + "otpEmailTitle": "์ผํšŒ์šฉ ๋น„๋ฐ€๋ฒˆํ˜ธ", + "otpEmailTitleDescription": "๋ฆฌ์†Œ์Šค ์ ‘๊ทผ์„ ์œ„ํ•œ ์ด๋ฉ”์ผ ๊ธฐ๋ฐ˜ ์ธ์ฆ ํ•„์š”", + "otpEmailWhitelist": "์ด๋ฉ”์ผ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ", + "otpEmailWhitelistList": "ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ๋œ ์ด๋ฉ”์ผ", + "otpEmailWhitelistListDescription": "์ด ์ด๋ฉ”์ผ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž๋งŒ ์ด ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ์ด๋ฉ”์ผ๋กœ ์ „์†ก๋œ ์ผํšŒ์šฉ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋„๋ฉ”์ธ์—์„œ ๋ชจ๋“  ์ด๋ฉ”์ผ ์ฃผ์†Œ๋ฅผ ํ—ˆ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์™€์ผ๋“œ์นด๋“œ(*@example.com)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.", + "otpEmailWhitelistSave": "ํ—ˆ์šฉ ๋ชฉ๋ก ์ €์žฅ", + "passwordAdd": "๋น„๋ฐ€๋ฒˆํ˜ธ ์ถ”๊ฐ€", + "passwordRemove": "๋น„๋ฐ€๋ฒˆํ˜ธ ์ œ๊ฑฐ", + "pincodeAdd": "PIN ์ฝ”๋“œ ์ถ”๊ฐ€", + "pincodeRemove": "PIN ์ฝ”๋“œ ์ œ๊ฑฐ", + "resourceAuthMethods": "์ธ์ฆ ๋ฐฉ๋ฒ•", + "resourceAuthMethodsDescriptions": "์ถ”๊ฐ€ ์ธ์ฆ ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ํ—ˆ์šฉ", + "resourceAuthSettingsSave": "์„ฑ๊ณต์ ์œผ๋กœ ์ €์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "resourceAuthSettingsSaveDescription": "์ธ์ฆ ์„ค์ •์ด ์ €์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", + "resourceErrorAuthFetch": "๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.", + "resourceErrorAuthFetchDescription": "๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "resourceErrorPasswordRemove": "๋ฆฌ์†Œ์Šค ๋น„๋ฐ€๋ฒˆํ˜ธ ์ œ๊ฑฐ ์˜ค๋ฅ˜", + "resourceErrorPasswordRemoveDescription": "๋ฆฌ์†Œ์Šค ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๋™์•ˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "resourceErrorPasswordSetup": "๋ฆฌ์†Œ์Šค ๋น„๋ฐ€๋ฒˆํ˜ธ ์„ค์ • ์˜ค๋ฅ˜", + "resourceErrorPasswordSetupDescription": "๋ฆฌ์†Œ์Šค ๋น„๋ฐ€๋ฒˆํ˜ธ ์„ค์ • ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค", + "resourceErrorPincodeRemove": "๋ฆฌ์†Œ์Šค ํ•€ ์ฝ”๋“œ ์ œ๊ฑฐ ์˜ค๋ฅ˜", + "resourceErrorPincodeRemoveDescription": "๋ฆฌ์†Œ์Šค ํ•€์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "resourceErrorPincodeSetup": "๋ฆฌ์†Œ์Šค PIN ์ฝ”๋“œ ์„ค์ • ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "resourceErrorPincodeSetupDescription": "๋ฆฌ์†Œ์Šค PIN ์ฝ”๋“œ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋™์•ˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "resourceErrorUsersRolesSave": "์—ญํ•  ์„ค์ •์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.", + "resourceErrorUsersRolesSaveDescription": "์—ญํ•  ์„ค์ • ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "resourceErrorWhitelistSave": "ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ ์ €์žฅ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.", + "resourceErrorWhitelistSaveDescription": "ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ๋ฅผ ์ €์žฅํ•˜๋Š” ๋™์•ˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "resourcePasswordSubmit": "๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณดํ˜ธ ํ™œ์„ฑํ™”", + "resourcePasswordProtection": "๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณดํ˜ธ {status}", + "resourcePasswordRemove": "๋ฆฌ์†Œ์Šค ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", + "resourcePasswordRemoveDescription": "๋ฆฌ์†Œ์Šค ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "resourcePasswordSetup": "๋ฆฌ์†Œ์Šค ๋น„๋ฐ€๋ฒˆํ˜ธ ์„ค์ •๋จ", + "resourcePasswordSetupDescription": "๋ฆฌ์†Œ์Šค ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์„ค์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "resourcePasswordSetupTitle": "๋น„๋ฐ€๋ฒˆํ˜ธ ์„ค์ •", + "resourcePasswordSetupTitleDescription": "์ด ๋ฆฌ์†Œ์Šค๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์„ค์ •ํ•˜์„ธ์š”.", + "resourcePincode": "PIN ์ฝ”๋“œ", + "resourcePincodeSubmit": "PIN ์ฝ”๋“œ ๋ณดํ˜ธ ํ™œ์„ฑํ™”", + "resourcePincodeProtection": "PIN ์ฝ”๋“œ ๋ณดํ˜ธ {์ƒํƒœ}", + "resourcePincodeRemove": "๋ฆฌ์†Œ์Šค ํ•€์ฝ”๋“œ๊ฐ€ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "resourcePincodeRemoveDescription": "๋ฆฌ์†Œ์Šค ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "resourcePincodeSetup": "๋ฆฌ์†Œ์Šค PIN ์ฝ”๋“œ๊ฐ€ ์„ค์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค", + "resourcePincodeSetupDescription": "๋ฆฌ์†Œ์Šค ํ•€์ฝ”๋“œ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์„ค์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค", + "resourcePincodeSetupTitle": "ํ•€์ฝ”๋“œ ์„ค์ •", + "resourcePincodeSetupTitleDescription": "์ด ๋ฆฌ์†Œ์Šค๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ํ•€ ์ฝ”๋“œ๋ฅผ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค.", + "resourceRoleDescription": "๊ด€๋ฆฌ์ž๋Š” ํ•ญ์ƒ ์ด ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.", + "resourceUsersRoles": "์‚ฌ์šฉ์ž ๋ฐ ์—ญํ• ", + "resourceUsersRolesDescription": "์ด ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž ๋ฐ ์—ญํ• ์„ ๊ตฌ์„ฑํ•˜์‹ญ์‹œ์˜ค", + "resourceUsersRolesSubmit": "์‚ฌ์šฉ์ž ๋ฐ ์—ญํ•  ์ €์žฅ", + "resourceWhitelistSave": "์„ฑ๊ณต์ ์œผ๋กœ ์ €์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "resourceWhitelistSaveDescription": "ํ—ˆ์šฉ ๋ชฉ๋ก ์„ค์ •์ด ์ €์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "ssoUse": "ํ”Œ๋žซํผ SSO ์‚ฌ์šฉ", + "ssoUseDescription": "๊ธฐ์กด ์‚ฌ์šฉ์ž๋Š” ์ด ๊ธฐ๋Šฅ์ด ํ™œ์„ฑํ™”๋œ ๋ชจ๋“  ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•ด ํ•œ ๋ฒˆ๋งŒ ๋กœ๊ทธ์ธํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.", + "proxyErrorInvalidPort": "์œ ํšจํ•˜์ง€ ์•Š์€ ํฌํŠธ ๋ฒˆํ˜ธ", + "subdomainErrorInvalid": "์ž˜๋ชป๋œ ํ•˜์œ„ ๋„๋ฉ”์ธ", + "domainErrorFetch": "๋„๋ฉ”์ธ ๊ฐ€์ ธ์˜ค๊ธฐ ์˜ค๋ฅ˜", + "domainErrorFetchDescription": "๋„๋ฉ”์ธ์„ ๊ฐ€์ ธ์˜ค๋Š” ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "resourceErrorUpdate": "๋ฆฌ์†Œ์Šค ์—…๋ฐ์ดํŠธ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.", + "resourceErrorUpdateDescription": "๋ฆฌ์†Œ์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋™์•ˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "resourceUpdated": "๋ฆฌ์†Œ์Šค๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "resourceUpdatedDescription": "๋ฆฌ์†Œ์Šค๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "resourceErrorTransfer": "๋ฆฌ์†Œ์Šค ์ „์†ก์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค", + "resourceErrorTransferDescription": "๋ฆฌ์†Œ์Šค๋ฅผ ์ „์†กํ•˜๋Š” ๋™์•ˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค", + "resourceTransferred": "๋ฆฌ์†Œ์Šค๊ฐ€ ์ „์†ก๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "resourceTransferredDescription": "๋ฆฌ์†Œ์Šค๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ „์†ก๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "gigabytes": "{count} GB", + "resourceErrorToggle": "๋ฆฌ์†Œ์Šค๋ฅผ ์ „ํ™˜ํ•˜๋Š” ๋ฐ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.", + "resourceErrorToggleDescription": "๋ฆฌ์†Œ์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋™์•ˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "resourceVisibilityTitle": "๊ฐ€์‹œ์„ฑ", + "resourceVisibilityTitleDescription": "๋ฆฌ์†Œ์Šค ๊ฐ€์‹œ์„ฑ์„ ์™„์ „ํžˆ ํ™œ์„ฑํ™”ํ•˜๊ฑฐ๋‚˜ ๋น„ํ™œ์„ฑํ™”", + "resourceGeneral": "์ผ๋ฐ˜ ์„ค์ •", + "resourceGeneralDescription": "์ด ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ผ๋ฐ˜ ์„ค์ •์„ ๊ตฌ์„ฑํ•˜์‹ญ์‹œ์˜ค.", + "resourceEnable": "๋ฆฌ์†Œ์Šค ํ™œ์„ฑํ™”", + "resourceTransfer": "๋ฆฌ์†Œ์Šค ์ „์†ก", + "resourceTransferDescription": "์ด ๋ฆฌ์†Œ์Šค๋ฅผ ๋‹ค๋ฅธ ์‚ฌ์ดํŠธ๋กœ ์ „์†ก", + "resourceTransferSubmit": "๋ฆฌ์†Œ์Šค ์ „์†ก", + "siteDestination": "๋Œ€์ƒ ์‚ฌ์ดํŠธ", + "searchSites": "์‚ฌ์ดํŠธ ๊ฒ€์ƒ‰", + "accessRoleCreate": "์—ญํ•  ์ƒ์„ฑ", + "accessRoleCreateDescription": "์‚ฌ์šฉ์ž๋ฅผ ๊ทธ๋ฃนํ™”ํ•˜๊ณ  ๊ถŒํ•œ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ ์—ญํ• ์„ ์ƒ์„ฑํ•˜์„ธ์š”.", + "accessRoleCreateSubmit": "์—ญํ•  ์ƒ์„ฑ", + "accessRoleCreated": "์—ญํ• ์ด ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "accessRoleCreatedDescription": "์—ญํ• ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "accessRoleErrorCreate": "์—ญํ•  ์ƒ์„ฑ ์‹คํŒจ", + "accessRoleErrorCreateDescription": "์—ญํ•  ์ƒ์„ฑ ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "accessRoleErrorNewRequired": "์ƒˆ ์—ญํ• ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.", + "accessRoleErrorRemove": "์—ญํ•  ์ œ๊ฑฐ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.", + "accessRoleErrorRemoveDescription": "์—ญํ• ์„ ์ œ๊ฑฐํ•˜๋Š” ๋™์•ˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "accessRoleName": "์—ญํ•  ์ด๋ฆ„", + "accessRoleQuestionRemove": "{name} ์—ญํ• ์„ ์‚ญ์ œํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์€ ์ทจ์†Œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.", + "accessRoleRemove": "์—ญํ•  ์ œ๊ฑฐ", + "accessRoleRemoveDescription": "์กฐ์ง์—์„œ ์—ญํ•  ์ œ๊ฑฐ", + "accessRoleRemoveSubmit": "์—ญํ•  ์ œ๊ฑฐ", + "accessRoleRemoved": "์—ญํ• ์ด ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", + "accessRoleRemovedDescription": "์—ญํ• ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "accessRoleRequiredRemove": "์ด ์—ญํ• ์„ ์‚ญ์ œํ•˜๊ธฐ ์ „์— ๊ธฐ์กด ๊ตฌ์„ฑ์›์„ ์ „์†กํ•  ์ƒˆ ์—ญํ• ์„ ์„ ํƒํ•˜์„ธ์š”.", + "manage": "๊ด€๋ฆฌ", + "sitesNotFound": "์‚ฌ์ดํŠธ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.", + "pangolinServerAdmin": "์„œ๋ฒ„ ๊ด€๋ฆฌ์ž - ํŒ๊ณจ๋ฆฐ", + "licenseTierProfessional": "์ „๋ฌธ ๋ผ์ด์„ผ์Šค", + "licenseTierEnterprise": "๊ธฐ์—… ๋ผ์ด์„ ์Šค", + "licenseTierCommercial": "์ƒ์—…์šฉ ๋ผ์ด์„ ์Šค", + "licensed": "๋ผ์ด์„ผ์Šค", + "yes": "์˜ˆ", + "no": "์•„๋‹ˆ์š”", + "sitesAdditional": "์ถ”๊ฐ€ ์‚ฌ์ดํŠธ", + "licenseKeys": "๋ผ์ด์„ผ์Šค ํ‚ค", + "sitestCountDecrease": "์‚ฌ์ดํŠธ ์ˆ˜ ์ค„์ด๊ธฐ", + "sitestCountIncrease": "์‚ฌ์ดํŠธ ์ˆ˜ ์ฆ๊ฐ€", + "idpManage": "์•„์ด๋ดํ‹ฐํ‹ฐ ๊ณต๊ธ‰์ž ๊ด€๋ฆฌ", + "idpManageDescription": "์‹œ์Šคํ…œ์—์„œ ID ์ œ๊ณต์ž๋ฅผ ๋ณด๊ณ  ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค", + "idpDeletedDescription": "์‹ ์› ๊ณต๊ธ‰์ž๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", + "idpOidc": "OAuth2/OIDC", + "idpQuestionRemove": "์ •๋ง๋กœ ์•„์ด๋ดํ‹ฐํ‹ฐ ๊ณต๊ธ‰์ž {name}๋ฅผ ์˜๊ตฌ์ ์œผ๋กœ ์‚ญ์ œํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?", + "idpMessageRemove": "์ด ์ž‘์—…์€ ์•„์ด๋ดํ‹ฐํ‹ฐ ๊ณต๊ธ‰์ž์™€ ๋ชจ๋“  ๊ด€๋ จ ๊ตฌ์„ฑ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณต๊ธ‰์ž๋ฅผ ํ†ตํ•ด ์ธ์ฆํ•˜๋Š” ์‚ฌ์šฉ์ž๋Š” ๋” ์ด์ƒ ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.", + "idpMessageConfirm": "ํ™•์ธ์„ ์œ„ํ•ด ์•„๋ž˜์— ์•„์ด๋ดํ‹ฐํ‹ฐ ์ œ๊ณต์ž์˜ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”.", + "idpConfirmDelete": "์‹ ์› ์ œ๊ณต์ž ์‚ญ์ œ ํ™•์ธ", + "idpDelete": "์•„์ด๋ดํ‹ฐํ‹ฐ ๊ณต๊ธ‰์ž ์‚ญ์ œ", + "idp": "์‹ ์› ๊ณต๊ธ‰์ž", + "idpSearch": "ID ๊ณต๊ธ‰์ž ๊ฒ€์ƒ‰...", + "idpAdd": "์•„์ด๋ดํ‹ฐํ‹ฐ ๊ณต๊ธ‰์ž ์ถ”๊ฐ€", + "idpClientIdRequired": "ํด๋ผ์ด์–ธํŠธ ID๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.", + "idpClientSecretRequired": "ํด๋ผ์ด์–ธํŠธ ๋น„๋ฐ€์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.", + "idpErrorAuthUrlInvalid": "์ธ์ฆ URL์€ ์œ ํšจํ•œ URL์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.", + "idpErrorTokenUrlInvalid": "ํ† ํฐ URL์€ ์œ ํšจํ•œ URL์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.", + "idpPathRequired": "์‹๋ณ„์ž ๊ฒฝ๋กœ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.", + "idpScopeRequired": "๋ฒ”์œ„๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.", + "idpOidcDescription": "OpenID Connect ID ๊ณต๊ธ‰์ž๋ฅผ ๊ตฌ์„ฑํ•˜์‹ญ์‹œ์˜ค.", + "idpCreatedDescription": "ID ๊ณต๊ธ‰์ž๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "idpCreate": "์•„์ด๋ดํ‹ฐํ‹ฐ ๊ณต๊ธ‰์ž ์ƒ์„ฑ", + "idpCreateDescription": "์‚ฌ์šฉ์ž ์ธ์ฆ์„ ์œ„ํ•œ ์ƒˆ๋กœ์šด ID ๊ณต๊ธ‰์ž๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.", + "idpSeeAll": "๋ชจ๋“  ID ๊ณต๊ธ‰์ž ๋ณด๊ธฐ", + "idpSettingsDescription": "์‹ ์› ์ œ๊ณต์ž์˜ ๊ธฐ๋ณธ ์ •๋ณด๋ฅผ ๊ตฌ์„ฑํ•˜์„ธ์š”", + "idpDisplayName": "์ด ์‹ ์› ๊ณต๊ธ‰์ž๋ฅผ ์œ„ํ•œ ํ‘œ์‹œ ์ด๋ฆ„", + "idpAutoProvisionUsers": "์‚ฌ์šฉ์ž ์ž๋™ ํ”„๋กœ๋น„์ €๋‹", + "idpAutoProvisionUsersDescription": "ํ™œ์„ฑํ™”๋˜๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์ฒซ ๋กœ๊ทธ์ธ ์‹œ ์‹œ์Šคํ…œ์— ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋ฉฐ, ์‚ฌ์šฉ์ž์™€ ์—ญํ•  ๋ฐ ์กฐ์ง์„ ๋งคํ•‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.", + "licenseBadge": "์ „๋ฌธ๊ฐ€", + "idpType": "์ œ๊ณต์ž ์œ ํ˜•", + "idpTypeDescription": "๊ตฌ์„ฑํ•  ID ๊ณต๊ธ‰์ž์˜ ์œ ํ˜•์„ ์„ ํƒํ•˜์‹ญ์‹œ์˜ค.", + "idpOidcConfigure": "OAuth2/OIDC ๊ตฌ์„ฑ", + "idpOidcConfigureDescription": "OAuth2/OIDC ๊ณต๊ธ‰์ž ์—”๋“œํฌ์ธํŠธ ๋ฐ ์ž๊ฒฉ ์ฆ๋ช…์„ ๊ตฌ์„ฑํ•˜์‹ญ์‹œ์˜ค.", + "idpClientId": "ํด๋ผ์ด์–ธํŠธ ID", + "idpClientIdDescription": "์•„์ด๋ดํ‹ฐํ‹ฐ ๊ณต๊ธ‰์ž์˜ OAuth2 ํด๋ผ์ด์–ธํŠธ ID", + "idpClientSecret": "ํด๋ผ์ด์–ธํŠธ ๋น„๋ฐ€", + "idpClientSecretDescription": "์‹ ์› ์ œ๊ณต์ž๋กœ๋ถ€ํ„ฐ์˜ OAuth2 ํด๋ผ์ด์–ธํŠธ ๋น„๋ฐ€", + "idpAuthUrl": "์ธ์ฆ URL", + "idpAuthUrlDescription": "OAuth2 ์ธ์ฆ ์—”๋“œํฌ์ธํŠธ URL", + "idpTokenUrl": "ํ† ํฐ URL", + "idpTokenUrlDescription": "OAuth2 ํ† ํฐ ์—”๋“œํฌ์ธํŠธ URL", + "idpOidcConfigureAlert": "์ค‘์š” ์ •๋ณด", + "idpOidcConfigureAlertDescription": "์•„์ด๋ดํ‹ฐํ‹ฐ ๊ณต๊ธ‰์ž๋ฅผ ์ƒ์„ฑํ•œ ํ›„, ์•„์ด๋ดํ‹ฐํ‹ฐ ๊ณต๊ธ‰์ž์˜ ์„ค์ •์—์„œ ์ฝœ๋ฐฑ URL์„ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฝœ๋ฐฑ URL์€ ์„ฑ๊ณต์ ์œผ๋กœ ์ƒ์„ฑ๋œ ํ›„ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.", + "idpToken": "ํ† ํฐ ๊ตฌ์„ฑ", + "idpTokenDescription": "ID ํ† ํฐ์—์„œ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์ถ”์ถœํ•˜๋Š” ๋ฐฉ๋ฒ• ๊ตฌ์„ฑ", + "idpJmespathAbout": "JMESPath์— ๋Œ€ํ•˜์—ฌ", + "idpJmespathAboutDescription": "์•„๋ž˜ ๊ฒฝ๋กœ๋Š” ID ํ† ํฐ์—์„œ ๊ฐ’์„ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•ด JMESPath ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.", + "idpJmespathAboutDescriptionLink": "JMESPath์— ๋Œ€ํ•ด ๋” ์•Œ์•„๋ณด๊ธฐ", + "idpJmespathLabel": "์‹๋ณ„์ž ๊ฒฝ๋กœ", + "idpJmespathLabelDescription": "ID ํ† ํฐ์—์„œ ์‚ฌ์šฉ์ž ์‹๋ณ„์ž์— ๋Œ€ํ•œ ๊ฒฝ๋กœ", + "idpJmespathEmailPathOptional": "์ด๋ฉ”์ผ ๊ฒฝ๋กœ (์„ ํƒ ์‚ฌํ•ญ)", + "idpJmespathEmailPathOptionalDescription": "ID ํ† ํฐ์—์„œ ์‚ฌ์šฉ์ž์˜ ์ด๋ฉ”์ผ ๊ฒฝ๋กœ", + "idpJmespathNamePathOptional": "์ด๋ฆ„ ๊ฒฝ๋กœ (์„ ํƒ ์‚ฌํ•ญ)", + "idpJmespathNamePathOptionalDescription": "ID ํ† ํฐ์—์„œ ์‚ฌ์šฉ์ž์˜ ์ด๋ฆ„ ๊ฒฝ๋กœ", + "idpOidcConfigureScopes": "๋ฒ”์œ„", + "idpOidcConfigureScopesDescription": "์š”์ฒญํ•  OAuth2 ๋ฒ”์œ„์˜ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋œ ๋ชฉ๋ก", + "idpSubmit": "์•„์ด๋ดํ‹ฐํ‹ฐ ๊ณต๊ธ‰์ž ์ƒ์„ฑ", + "orgPolicies": "์กฐ์ง ์ •์ฑ…", + "idpSettings": "{idpName} ์„ค์ •", + "megabytes": "{count} MB", + "actionCheckOrgId": "ID ํ™•์ธ", + "idpCreateSettingsDescription": "์•„์ด๋ดํ‹ฐํ‹ฐ ๊ณต๊ธ‰์ž์˜ ์„ค์ •์„ ๊ตฌ์„ฑํ•˜์‹ญ์‹œ์˜ค", + "roleMapping": "์—ญํ•  ๋งคํ•‘", + "orgMapping": "์กฐ์ง ๋งคํ•‘", + "orgPoliciesSearch": "์กฐ์ง ์ •์ฑ… ๊ฒ€์ƒ‰...", + "orgPoliciesAdd": "์กฐ์ง ์ •์ฑ… ์ถ”๊ฐ€", + "orgRequired": "์กฐ์ง์€ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค.", + "error": "์˜ค๋ฅ˜", + "success": "์„ฑ๊ณต", + "orgPolicyAddedDescription": "์ •์ฑ…์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค", + "orgPolicyUpdatedDescription": "์ •์ฑ…์ด ์„ฑ๊ณต์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "tagsEntered": "์ž…๋ ฅ๋œ ํƒœ๊ทธ", + "defaultMappingsOptionalDescription": "์กฐ์ง์— ๋Œ€ํ•ด ์ •์˜๋œ ์ •์ฑ…์ด ์—†์„ ๋•Œ ๊ธฐ๋ณธ ๋งคํ•‘์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ๊ธฐ๋ณธ ์—ญํ•  ๋ฐ ์กฐ์ง ๋งคํ•‘์„ ์ง€์ •ํ•˜์—ฌ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.", + "defaultMappingsRole": "๊ธฐ๋ณธ ์—ญํ•  ๋งคํ•‘", + "defaultMappingsRoleDescription": "์ด ํ‘œํ˜„์‹์˜ ๊ฒฐ๊ณผ๋Š” ์กฐ์ง์—์„œ ์ •์˜๋œ ์—ญํ•  ์ด๋ฆ„์„ ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.", + "defaultMappingsOrg": "๊ธฐ๋ณธ ์กฐ์ง ๋งคํ•‘", + "defaultMappingsOrgDescription": "์ด ํ‘œํ˜„์‹์€ ์‚ฌ์šฉ์ž๊ฐ€ ์กฐ์ง์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ์กฐ์ง ID ๋˜๋Š” true๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.", + "defaultMappingsSubmit": "๊ธฐ๋ณธ ๋งคํ•‘ ์ €์žฅ", + "orgPoliciesEdit": "์กฐ์ง ์ •์ฑ… ํŽธ์ง‘", + "org": "์กฐ์ง", + "orgSelect": "์กฐ์ง ์„ ํƒ", + "orgSearch": "์กฐ์ง ๊ฒ€์ƒ‰", + "orgNotFound": "์กฐ์ง์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.", + "roleMappingPathOptional": "์—ญํ•  ๋งคํ•‘ ๊ฒฝ๋กœ (์„ ํƒ ์‚ฌํ•ญ)", + "orgMappingPathOptional": "์กฐ์ง ๋งคํ•‘ ๊ฒฝ๋กœ (์„ ํƒ ์‚ฌํ•ญ)", + "orgPolicyUpdate": "์ •์ฑ… ์—…๋ฐ์ดํŠธ", + "orgPolicyAdd": "์ •์ฑ… ์ถ”๊ฐ€", + "orgPolicyConfig": "์กฐ์ง์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ๊ตฌ์„ฑํ•˜์‹ญ์‹œ์˜ค.", + "idpUpdatedDescription": "์•„์ด๋ดํ‹ฐํ‹ฐ ์ œ๊ณต์ž๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", + "redirectUrl": "๋ฆฌ๋””๋ ‰์…˜ URL", + "redirectUrlAbout": "๋ฆฌ๋””๋ ‰์…˜ URL์— ๋Œ€ํ•œ ์ •๋ณด", + "redirectUrlAboutDescription": "์‚ฌ์šฉ์ž๊ฐ€ ์ธ์ฆ ํ›„ ๋ฆฌ๋””๋ ‰์…˜๋  URL์ž…๋‹ˆ๋‹ค. ์ด URL์„ ์‹ ์› ์ œ๊ณต์ž ์„ค์ •์—์„œ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.", + "pangolinAuth": "์ธ์ฆ - ํŒ๊ณจ๋ฆฐ", + "verificationCodeLengthRequirements": "์ธ์ฆ ์ฝ”๋“œ๊ฐ€ 8์ž์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.", + "errorOccurred": "์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "emailErrorVerify": "์ด๋ฉ”์ผ ํ™•์ธ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค:", + "emailVerified": "์ด๋ฉ”์ผ์ด ์„ฑ๊ณต์ ์œผ๋กœ ํ™•์ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค! ๋ฆฌ๋””๋ ‰์…˜ ์ค‘์ž…๋‹ˆ๋‹ค...", + "verificationCodeErrorResend": "์ธ์ฆ ์ฝ”๋“œ๋ฅผ ์žฌ์ „์†กํ•˜๋Š” ๋ฐ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค:", + "verificationCodeResend": "์ธ์ฆ ์ฝ”๋“œ๊ฐ€ ์žฌ์ „์†ก๋˜์—ˆ์Šต๋‹ˆ๋‹ค", + "verificationCodeResendDescription": "๊ฒ€์ฆ ์ฝ”๋“œ๋ฅผ ๊ท€ํ•˜์˜ ์ด๋ฉ”์ผ ์ฃผ์†Œ๋กœ ์žฌ์ „์†กํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ›์€ ํŽธ์ง€ํ•จ์„ ํ™•์ธํ•ด ์ฃผ์„ธ์š”.", + "emailVerify": "์ด๋ฉ”์ผ ํ™•์ธ", + "emailVerifyDescription": "์ด๋ฉ”์ผ ์ฃผ์†Œ๋กœ ์ „์†ก๋œ ์ธ์ฆ ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”.", + "verificationCode": "์ธ์ฆ ์ฝ”๋“œ", + "verificationCodeEmailSent": "๊ท€ํ•˜์˜ ์ด๋ฉ”์ผ ์ฃผ์†Œ๋กœ ์ธ์ฆ ์ฝ”๋“œ๊ฐ€ ์ „์†ก๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "submit": "์ œ์ถœ", + "emailVerifyResendProgress": "์žฌ์ „์†ก ์ค‘...", + "emailVerifyResend": "์ฝ”๋“œ๋ฅผ ๋ฐ›์ง€ ๋ชปํ•˜์…จ๋‚˜์š”? ์—ฌ๊ธฐ ํด๋ฆญํ•˜์—ฌ ์žฌ์ „์†กํ•˜์„ธ์š”", + "passwordNotMatch": "๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.", + "resourceNotFoundDescription": "์ ‘๊ทผํ•˜๋ ค๋Š” ๋ฆฌ์†Œ์Šค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.", + "pincodeRequirementsLength": "PIN์€ ์ •ํ™•ํžˆ 6์ž๋ฆฌ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค", + "pincodeRequirementsChars": "PIN์€ ์ˆซ์ž๋งŒ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.", + "passwordRequirementsLength": "๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์ตœ์†Œ 1์ž ์ด์ƒ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค", + "otpEmailRequirementsLength": "OTP๋Š” ์ตœ์†Œ 1์ž ์ด์ƒ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค", + "otpEmailSent": "OTP ์ „์†ก๋จ", + "otpEmailSentDescription": "OTP๊ฐ€ ๊ท€ํ•˜์˜ ์ด๋ฉ”์ผ๋กœ ์ „์†ก๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "otpEmailErrorAuthenticate": "์ด๋ฉ”์ผ๋กœ ์ธ์ฆ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค", + "pincodeErrorAuthenticate": "ํ•€์ฝ”๋“œ๋กœ ์ธ์ฆํ•˜๋Š” ๋ฐ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค", + "passwordErrorAuthenticate": "๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ์ธ์ฆํ•˜๋Š” ๋ฐ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.", + "poweredBy": "์ œ๊ณต์ž", + "authenticationRequired": "์ธ์ฆ ํ•„์š”", + "authenticationMethodChoose": "{name}์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ์„ ํ˜ธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•˜์„ธ์š”.", + "authenticationRequest": "{name}์— ์ ‘๊ทผํ•˜๋ ค๋ฉด ์ธ์ฆํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.", + "user": "์‚ฌ์šฉ์ž", + "pincodeInput": "6์ž๋ฆฌ PIN ์ฝ”๋“œ", + "pincodeSubmit": "PIN์œผ๋กœ ๋กœ๊ทธ์ธ", + "passwordSubmit": "๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ๋กœ๊ทธ์ธ", + "otpEmailDescription": "์ผํšŒ์„ฑ ์ฝ”๋“œ๊ฐ€ ์ด ์ด๋ฉ”์ผ๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค.", + "otpEmailSend": "์ผํšŒ์„ฑ ์ฝ”๋“œ ์ „์†ก", + "otpEmail": "์ผํšŒ์„ฑ ๋น„๋ฐ€๋ฒˆํ˜ธ (OTP)", + "otpEmailSubmit": "OTP ์ œ์ถœ", + "backToEmail": "์ด๋ฉ”์ผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ", + "noSupportKey": "์„œ๋ฒ„๊ฐ€ ์ง€์› ํ‚ค ์—†์ด ์‹คํ–‰๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ง€์›์„ ๊ณ ๋ คํ•˜์„ธ์š”!", + "accessDenied": "์ ‘๊ทผ ๊ฑฐ๋ถ€", + "accessDeniedDescription": "์ด ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒŒ ์‹ค์ˆ˜๋ผ๋ฉด ๊ด€๋ฆฌ์ž์—๊ฒŒ ๋ฌธ์˜ํ•ด ์ฃผ์„ธ์š”.", + "accessTokenError": "์•ก์„ธ์Šค ํ† ํฐ ํ™•์ธ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ", + "accessGranted": "์ ‘๊ทผ ํ—ˆ๊ฐ€๋จ", + "accessUrlInvalid": "์ ‘๊ทผ URL์ด ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค", + "accessGrantedDescription": "์ด ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ ‘๊ทผ์ด ํ—ˆ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌ๋””๋ ‰์…˜ ์ค‘์ž…๋‹ˆ๋‹ค...", + "accessUrlInvalidDescription": "์ด ๊ณต์œ  ์•ก์„ธ์Šค URL์€ ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด URL์„ ์œ„ํ•ด ๋ฆฌ์†Œ์Šค ์†Œ์œ ์ž์—๊ฒŒ ๋ฌธ์˜ํ•˜์„ธ์š”.", + "tokenInvalid": "์œ ํšจํ•˜์ง€ ์•Š์€ ํ† ํฐ", + "pincodeInvalid": "์œ ํšจํ•˜์ง€ ์•Š์€ ์ฝ”๋“œ", + "passwordErrorRequestReset": "์žฌ์„ค์ •์„ ์š”์ฒญํ•˜๋Š” ๋ฐ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค:", + "passwordErrorReset": "๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ • ์‹คํŒจ:", + "passwordResetSuccess": "๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์žฌ์„ค์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค! ๋กœ๊ทธ์ธ์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ...", + "passwordReset": "๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ •", + "passwordResetDescription": "๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์žฌ์„ค์ •ํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”", + "passwordResetSent": "์ด ์ด๋ฉ”์ผ ์ฃผ์†Œ๋กœ ๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ • ์ฝ”๋“œ๋ฅผ ์ „์†กํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.", + "passwordResetCode": "์ฝ”๋“œ ์žฌ์„ค์ •", + "passwordResetCodeDescription": "์žฌ์„ค์ • ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด ์ด๋ฉ”์ผ์„ ํ™•์ธํ•˜์„ธ์š”.", + "passwordNew": "์ƒˆ ๋น„๋ฐ€๋ฒˆํ˜ธ", + "passwordNewConfirm": "์ƒˆ ๋น„๋ฐ€๋ฒˆํ˜ธ ํ™•์ธ", + "pincodeAuth": "์ธ์ฆ ์ฝ”๋“œ", + "pincodeSubmit2": "์ฝ”๋“œ ์ œ์ถœ", + "passwordResetSubmit": "์žฌ์„ค์ • ์š”์ฒญ", + "passwordBack": "๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ๋Œ์•„๊ฐ€๊ธฐ", + "loginBack": "๋กœ๊ทธ์ธ์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ", + "signup": "๊ฐ€์ž…ํ•˜๊ธฐ", + "loginStart": "์‹œ์ž‘ํ•˜๋ ค๋ฉด ๋กœ๊ทธ์ธํ•˜์„ธ์š”.", + "idpOidcTokenValidating": "OIDC ํ† ํฐ ๊ฒ€์ฆ ์ค‘", + "idpOidcTokenResponse": "OIDC ํ† ํฐ ์‘๋‹ต ๊ฒ€์ฆ", + "idpErrorOidcTokenValidating": "OIDC ํ† ํฐ ๊ฒ€์ฆ ์˜ค๋ฅ˜", + "idpConnectingTo": "{name}์— ์—ฐ๊ฒฐ ์ค‘", + "idpConnectingToDescription": "๊ท€ํ•˜์˜ ์‹ ์›์„ ํ™•์ธํ•˜๋Š” ์ค‘", + "idpConnectingToProcess": "์—ฐ๊ฒฐ ์ค‘...", + "idpConnectingToFinished": "์—ฐ๊ฒฐ๋จ", + "idpErrorConnectingTo": "{name}์— ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž์—๊ฒŒ ๋ฌธ์˜ํ•˜์‹ญ์‹œ์˜ค.", + "idpErrorNotFound": "IdP๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.", + "inviteInvalid": "์œ ํšจํ•˜์ง€ ์•Š์€ ์ดˆ๋Œ€", + "inviteInvalidDescription": "์ดˆ๋Œ€ ๋งํฌ๊ฐ€ ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.", + "inviteErrorWrongUser": "์ด ์ดˆ๋Œ€๋Š” ์ด ์‚ฌ์šฉ์ž์—๊ฒŒ ํ•ด๋‹น๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค", + "inviteErrorUserNotExists": "์‚ฌ์šฉ์ž๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋จผ์ € ๊ณ„์ •์„ ์ƒ์„ฑํ•ด ์ฃผ์„ธ์š”.", + "inviteErrorLoginRequired": "์ดˆ๋Œ€๋ฅผ ์ˆ˜๋ฝํ•˜๋ ค๋ฉด ๋กœ๊ทธ์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.", + "inviteErrorExpired": "์ดˆ๋Œ€๊ฐ€ ๋งŒ๋ฃŒ๋˜์—ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.", + "inviteErrorRevoked": "์ดˆ๋Œ€๊ฐ€ ์ทจ์†Œ๋˜์—ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.", + "inviteErrorTypo": "์ดˆ๋Œ€ ๋งํฌ์— ์˜คํƒ€๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.", + "pangolinSetup": "์„ค์ • - ํŒ๊ณจ๋ฆฐ", + "orgNameRequired": "์กฐ์ง ์ด๋ฆ„์€ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค.", + "orgIdRequired": "์กฐ์ง ID๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค", + "orgErrorCreate": "์กฐ์ง ์ƒ์„ฑ ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "pageNotFound": "ํŽ˜์ด์ง€๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค", + "pageNotFoundDescription": "์•—! ์ฐพ๊ณ  ์žˆ๋Š” ํŽ˜์ด์ง€๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.", + "overview": "๊ฐœ์š”", + "home": "ํ™ˆ", + "accessControl": "์•ก์„ธ์Šค ์ œ์–ด", + "settings": "์„ค์ •", + "usersAll": "๋ชจ๋“  ์‚ฌ์šฉ์ž", + "license": "๋ผ์ด์„ ์Šค", + "pangolinDashboard": "๋Œ€์‹œ๋ณด๋“œ - ํŒ๊ณจ๋ฆฐ", + "tagsWarnCannotBeLessThanZero": "maxTags์™€ minTags๋Š” 0๋ณด๋‹ค ์ž‘์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค", + "tagsWarnNotAllowedAutocompleteOptions": "์ž๋™ ์™„์„ฑ ์˜ต์…˜์— ๋”ฐ๋ผ ํƒœ๊ทธ๊ฐ€ ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค", + "tagsWarnInvalid": "validateTag์— ๋”ฐ๋ผ ์œ ํšจํ•˜์ง€ ์•Š์€ ํƒœ๊ทธ์ž…๋‹ˆ๋‹ค", + "tagWarnTooShort": "ํƒœ๊ทธ {tagText}๊ฐ€ ๋„ˆ๋ฌด ์งง์Šต๋‹ˆ๋‹ค", + "tagWarnTooLong": "ํƒœ๊ทธ {tagText}๊ฐ€ ๋„ˆ๋ฌด ๊น๋‹ˆ๋‹ค.", + "tagsWarnReachedMaxNumber": "ํ—ˆ์šฉ๋œ ์ตœ๋Œ€ ํƒœ๊ทธ ์ˆ˜์— ๋„๋‹ฌํ–ˆ์Šต๋‹ˆ๋‹ค.", + "tagWarnDuplicate": "์ค‘๋ณต ํƒœ๊ทธ {tagText}๊ฐ€ ์ถ”๊ฐ€๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.", + "supportKeyInvalid": "์œ ํšจํ•˜์ง€ ์•Š์€ ํ‚ค", + "supportKeyInvalidDescription": "์ง€์›์ž ํ‚ค๊ฐ€ ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.", + "supportKeyValid": "์œ ํšจํ•œ ํ‚ค", + "supportKeyValidDescription": "๊ท€ํ•˜์˜ ํ›„์›์ž ํ‚ค๊ฐ€ ๊ฒ€์ฆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ง€์›ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!", + "supportKeyErrorValidationDescription": "์„œํฌํ„ฐ ํ‚ค ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.", + "supportKey": "๊ฐœ๋ฐœ ์ง€์› ๋ฐ ํŒ๊ณจ๋ฆฐ์„ ์ž…์–‘ํ•˜์„ธ์š”!", + "supportKeyDescription": "์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ์œ„ํ•ด Pangolin ๊ฐœ๋ฐœ์„ ์ง€์†ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ›„์›์ž ํ‚ค๋ฅผ ๊ตฌ๋งคํ•˜์„ธ์š”. ๊ท€ํ•˜์˜ ๊ธฐ์—ฌ๋Š” ๋ชจ๋“  ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ ์ง€ํ•˜๊ณ  ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ ๋” ๋งŽ์€ ์‹œ๊ฐ„์„ ํ• ์• ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ ˆ๋Œ€ ์ด ๊ธฐ๋Šฅ์„ ์œ ๋ฃŒํ™”ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ƒ์—…์šฉ ์—๋””์…˜๊ณผ๋Š” ๋ณ„๊ฐœ์ž…๋‹ˆ๋‹ค.", + "supportKeyPet": "์ž์‹ ๋งŒ์˜ ์• ์™„ ํŒ๊ณจ๋ฆฐ์„ ์ž…์–‘ํ•˜๊ณ  ๋งŒ๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!", + "supportKeyPurchase": "๊ฒฐ์ œ๋Š” GitHub๋ฅผ ํ†ตํ•ด ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ์ดํ›„, ํ‚ค๋ฅผ ๋‹ค์Œ์—์„œ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.", + "supportKeyPurchaseLink": "์šฐ๋ฆฌ ์›น์‚ฌ์ดํŠธ", + "supportKeyPurchase2": "์—ฌ๊ธฐ์—์„œ ์‚ฌ์šฉํ•˜์„ธ์š”.", + "supportKeyLearnMore": "์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ.", + "supportKeyOptions": "๊ฐ€์žฅ ์ ํ•ฉํ•œ ์˜ต์…˜์„ ์„ ํƒํ•ด ์ฃผ์„ธ์š”.", + "supportKetOptionFull": "์ „์ฒด ํ›„์›์ž", + "forWholeServer": "์ „์ฒด ์„œ๋ฒ„์— ๋Œ€ํ•ด", + "lifetimePurchase": "ํ‰์ƒ ๊ตฌ๋งค", + "supporterStatus": "ํ›„์›์ž ์ƒํƒœ", + "buy": "๊ตฌ๋งค", + "supportKeyOptionLimited": "์ œํ•œ๋œ ํ›„์›์ž", + "forFiveUsers": "5๋ช… ์ดํ•˜์˜ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•ด", + "supportKeyRedeem": "์„œํฌํ„ฐ ํ‚ค ์‚ฌ์šฉ", + "supportKeyHideSevenDays": "7์ผ ๋™์•ˆ ์ˆจ๊ธฐ๊ธฐ", + "supportKeyEnter": "์ง€์›์ž ํ‚ค ์ž…๋ ฅ", + "supportKeyEnterDescription": "๋‹น์‹ ๋งŒ์˜ ํŽญ๊ท„ ์• ์™„๋™๋ฌผ์„ ๋งŒ๋‚˜๋ณด์„ธ์š”!", + "githubUsername": "GitHub ์‚ฌ์šฉ์ž ์ด๋ฆ„", + "supportKeyInput": "ํ›„์›์ž ํ‚ค", + "supportKeyBuy": "์„œํฌํ„ฐ ํ‚ค ๊ตฌ๋งค", + "logoutError": "๋กœ๊ทธ์•„์›ƒ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ", + "signingAs": "๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž", + "serverAdmin": "์„œ๋ฒ„ ๊ด€๋ฆฌ์ž", + "licenseTierProfessionalRequired": "์ „๋ฌธ ์—๋””์…˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.", + "licenseTierProfessionalRequiredDescription": "์ด ๊ธฐ๋Šฅ์€ Professional Edition์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.", + "actionGetOrg": "์กฐ์ง ๊ฐ€์ ธ์˜ค๊ธฐ", + "actionUpdateOrg": "์กฐ์ง ์—…๋ฐ์ดํŠธ", + "actionGetOrgUser": "์กฐ์ง ์‚ฌ์šฉ์ž ๊ฐ€์ ธ์˜ค๊ธฐ", + "actionListOrgDomains": "์กฐ์ง ๋„๋ฉ”์ธ ๋ชฉ๋ก", + "actionCreateSite": "์‚ฌ์ดํŠธ ์ƒ์„ฑ", + "actionDeleteSite": "์‚ฌ์ดํŠธ ์‚ญ์ œ", + "actionGetSite": "์‚ฌ์ดํŠธ ๊ฐ€์ ธ์˜ค๊ธฐ", + "actionListSites": "์‚ฌ์ดํŠธ ๋ชฉ๋ก", + "actionUpdateSite": "์‚ฌ์ดํŠธ ์—…๋ฐ์ดํŠธ", + "actionListSiteRoles": "ํ—ˆ์šฉ๋œ ์‚ฌ์ดํŠธ ์—ญํ•  ๋ชฉ๋ก", + "actionCreateResource": "๋ฆฌ์†Œ์Šค ์ƒ์„ฑ", + "actionDeleteResource": "๋ฆฌ์†Œ์Šค ์‚ญ์ œ", + "actionGetResource": "๋ฆฌ์†Œ์Šค ๊ฐ€์ ธ์˜ค๊ธฐ", + "actionListResource": "๋ฆฌ์†Œ์Šค ๋ชฉ๋ก", + "actionUpdateResource": "๋ฆฌ์†Œ์Šค ์—…๋ฐ์ดํŠธ", + "actionListResourceUsers": "๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ์ž ๋ชฉ๋ก", + "actionSetResourceUsers": "๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ์ž ์„ค์ •", + "actionSetAllowedResourceRoles": "ํ—ˆ์šฉ๋œ ๋ฆฌ์†Œ์Šค ์—ญํ•  ์„ค์ •", + "actionListAllowedResourceRoles": "ํ—ˆ์šฉ๋œ ๋ฆฌ์†Œ์Šค ์—ญํ•  ๋ชฉ๋ก", + "actionSetResourcePassword": "๋ฆฌ์†Œ์Šค ๋น„๋ฐ€๋ฒˆํ˜ธ ์„ค์ •", + "actionSetResourcePincode": "๋ฆฌ์†Œ์Šค ํ•€์ฝ”๋“œ ์„ค์ •", + "actionSetResourceEmailWhitelist": "๋ฆฌ์†Œ์Šค ์ด๋ฉ”์ผ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ ์„ค์ •", + "actionGetResourceEmailWhitelist": "๋ฆฌ์†Œ์Šค ์ด๋ฉ”์ผ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ ๊ฐ€์ ธ์˜ค๊ธฐ", + "actionCreateTarget": "๋Œ€์ƒ ๋งŒ๋“ค๊ธฐ", + "actionDeleteTarget": "๋Œ€์ƒ ์‚ญ์ œ", + "actionGetTarget": "๋Œ€์ƒ ๊ฐ€์ ธ์˜ค๊ธฐ", + "actionListTargets": "๋Œ€์ƒ ๋ชฉ๋ก", + "actionUpdateTarget": "๋Œ€์ƒ ์—…๋ฐ์ดํŠธ", + "actionCreateRole": "์—ญํ•  ์ƒ์„ฑ", + "actionDeleteRole": "์—ญํ•  ์‚ญ์ œ", + "actionGetRole": "์—ญํ•  ๊ฐ€์ ธ์˜ค๊ธฐ", + "actionListRole": "์—ญํ•  ๋ชฉ๋ก", + "actionUpdateRole": "์—ญํ•  ์—…๋ฐ์ดํŠธ", + "actionListAllowedRoleResources": "ํ—ˆ์šฉ๋œ ์—ญํ•  ๋ฆฌ์†Œ์Šค ๋ชฉ๋ก", + "actionInviteUser": "์‚ฌ์šฉ์ž ์ดˆ๋Œ€", + "actionRemoveUser": "์‚ฌ์šฉ์ž ์ œ๊ฑฐ", + "actionListUsers": "์‚ฌ์šฉ์ž ๋ชฉ๋ก", + "actionAddUserRole": "์‚ฌ์šฉ์ž ์—ญํ•  ์ถ”๊ฐ€", + "containersIn": "{siteName}์˜ ์ปจํ…Œ์ด๋„ˆ", + "actionGenerateAccessToken": "์•ก์„ธ์Šค ํ† ํฐ ์ƒ์„ฑ", + "actionDeleteAccessToken": "์•ก์„ธ์Šค ํ† ํฐ ์‚ญ์ œ", + "actionListAccessTokens": "์•ก์„ธ์Šค ํ† ํฐ ๋ชฉ๋ก", + "actionListResourceRules": "๋ฆฌ์†Œ์Šค ๊ทœ์น™ ๋ชฉ๋ก", + "actionUpdateResourceRule": "๋ฆฌ์†Œ์Šค ๊ทœ์น™ ์—…๋ฐ์ดํŠธ", + "actionListOrgs": "์กฐ์ง ๋ชฉ๋ก", + "actionCreateOrg": "์กฐ์ง ์ƒ์„ฑ", + "actionDeleteOrg": "์กฐ์ง ์‚ญ์ œ", + "actionListApiKeys": "API ํ‚ค ๋ชฉ๋ก", + "actionListApiKeyActions": "API ํ‚ค ์ž‘์—… ๋ชฉ๋ก", + "actionSetApiKeyActions": "API ํ‚ค ํ—ˆ์šฉ ์ž‘์—… ์„ค์ •", + "actionCreateApiKey": "API ํ‚ค ์ƒ์„ฑ", + "actionDeleteApiKey": "API ํ‚ค ์‚ญ์ œ", + "actionCreateIdp": "IDP ์ƒ์„ฑ", + "actionUpdateIdp": "IDP ์—…๋ฐ์ดํŠธ", + "actionDeleteIdp": "IDP ์‚ญ์ œ", + "actionListIdps": "IDP ๋ชฉ๋ก", + "actionGetIdp": "IDP ๊ฐ€์ ธ์˜ค๊ธฐ", + "actionCreateIdpOrg": "IDP ์กฐ์ง ์ •์ฑ… ์ƒ์„ฑ", + "actionDeleteIdpOrg": "IDP ์กฐ์ง ์ •์ฑ… ์‚ญ์ œ", + "actionListIdpOrgs": "IDP ์กฐ์ง ๋ชฉ๋ก", + "actionUpdateIdpOrg": "IDP ์กฐ์ง ์—…๋ฐ์ดํŠธ", + "noneSelected": "์„ ํƒ๋œ ํ•ญ๋ชฉ ์—†์Œ", + "orgNotFound2": "์กฐ์ง์ด ์—†์Šต๋‹ˆ๋‹ค.", + "searchProgress": "๊ฒ€์ƒ‰...", + "create": "์ƒ์„ฑ", + "orgs": "์กฐ์ง", + "loginError": "๋กœ๊ทธ์ธ ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค", + "passwordForgot": "๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์žŠ์œผ์…จ๋‚˜์š”?", + "otpAuth": "์ด์ค‘ ์ธ์ฆ", + "otpAuthDescription": "์ธ์ฆ ์•ฑ์—์„œ ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•˜๊ฑฐ๋‚˜ ๋‹จ์ผ ์‚ฌ์šฉ ๋ฐฑ์—… ์ฝ”๋“œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”.", + "otpAuthSubmit": "์ฝ”๋“œ ์ œ์ถœ", + "idpContinue": "๋˜๋Š” ๊ณ„์† ์ง„ํ–‰ํ•˜์‹ญ์‹œ์˜ค.", + "otpAuthBack": "๋กœ๊ทธ์ธ์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ", + "navbar": "ํƒ์ƒ‰ ๋ฉ”๋‰ด", + "navbarDescription": "์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ฃผ์š” ํƒ์ƒ‰ ๋ฉ”๋‰ด", + "navbarDocsLink": "๋ฌธ์„œ", + "commercialEdition": "์ƒ์—…์šฉ ์—๋””์…˜", + "otpErrorEnable": "2FA๋ฅผ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.", + "otpErrorEnableDescription": "2FA๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋Š” ๋™์•ˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค", + "otpSetupCheckCode": "6์ž๋ฆฌ ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”", + "otpSetupCheckCodeRetry": "์œ ํšจํ•˜์ง€ ์•Š์€ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ๋‹ค์‹œ ์‹œ๋„ํ•˜์„ธ์š”.", + "otpSetup": "์ด์ค‘ ์ธ์ฆ ํ™œ์„ฑํ™”", + "otpSetupDescription": "์ถ”๊ฐ€ ๋ณดํ˜ธ ๊ณ„์ธต์œผ๋กœ ๊ณ„์ •์„ ์•ˆ์ „ํ•˜๊ฒŒ ์œ ์ง€ํ•˜์„ธ์š”.", + "otpSetupScanQr": "์ธ์ฆ ์•ฑ์œผ๋กœ ์ด QR ์ฝ”๋“œ๋ฅผ ์Šค์บ”ํ•˜๊ฑฐ๋‚˜ ๋น„๋ฐ€ ํ‚ค๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ž…๋ ฅํ•˜์‹ญ์‹œ์˜ค:", + "otpSetupSecretCode": "์ธ์ฆ ์ฝ”๋“œ", + "otpSetupSuccess": "์ด์ค‘ ์ธ์ฆ ํ™œ์„ฑํ™”๋จ", + "otpSetupSuccessStoreBackupCodes": "๊ท€ํ•˜์˜ ๊ณ„์ •์ด ์ด์ œ ๋” ์•ˆ์ „ํ•ด์กŒ์Šต๋‹ˆ๋‹ค. ๋ฐฑ์—… ์ฝ”๋“œ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์„ธ์š”.", + "otpErrorDisable": "2FA๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.", + "otpErrorDisableDescription": "2FA๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๋™์•ˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "otpRemove": "์ด์ค‘ ์ธ์ฆ ๋น„ํ™œ์„ฑํ™”", + "otpRemoveDescription": "๊ณ„์ •์— ๋Œ€ํ•œ ์ด์ค‘ ์ธ์ฆ ๋น„ํ™œ์„ฑํ™”", + "otpRemoveSuccess": "์ด์ค‘ ์ธ์ฆ ๋น„ํ™œ์„ฑํ™”", + "otpRemoveSuccessMessage": "์ด์ค‘ ์ธ์ฆ์ด ๊ท€ํ•˜์˜ ๊ณ„์ •์—์„œ ๋น„ํ™œ์„ฑํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์–ธ์ œ๋“ ์ง€ ๋‹ค์‹œ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.", + "otpRemoveSubmit": "2FA ๋น„ํ™œ์„ฑํ™”", + "paginator": "ํŽ˜์ด์ง€ {current} / {last}", + "paginatorToFirst": "์ฒซ ํŽ˜์ด์ง€๋กœ ์ด๋™", + "paginatorToPrevious": "์ด์ „ ํŽ˜์ด์ง€๋กœ ์ด๋™", + "paginatorToNext": "๋‹ค์Œ ํŽ˜์ด์ง€๋กœ ์ด๋™", + "paginatorToLast": "๋งˆ์ง€๋ง‰ ํŽ˜์ด์ง€๋กœ ์ด๋™", + "copyText": "ํ…์ŠคํŠธ ๋ณต์‚ฌ", + "copyTextFailed": "ํ…์ŠคํŠธ ๋ณต์‚ฌ ์‹คํŒจ: ", + "copyTextClipboard": "ํด๋ฆฝ๋ณด๋“œ์— ๋ณต์‚ฌ", + "inviteErrorInvalidConfirmation": "์œ ํšจํ•˜์ง€ ์•Š์€ ํ™•์ธ", + "passwordRequired": "๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค.", + "allowAll": "๋ชจ๋‘ ํ—ˆ์šฉ", + "permissionsAllowAll": "๋ชจ๋“  ๊ถŒํ•œ ํ—ˆ์šฉ", + "githubUsernameRequired": "GitHub ์‚ฌ์šฉ์ž ์ด๋ฆ„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.", + "supportKeyRequired": "์ง€์›์ž ํ‚ค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.", + "passwordRequirementsChars": "๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์ตœ์†Œ 8์ž ์ด์ƒ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค", + "language": "์–ธ์–ด", + "verificationCodeRequired": "์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.", + "userErrorNoUpdate": "์—…๋ฐ์ดํŠธํ•  ์‚ฌ์šฉ์ž๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค", + "siteErrorNoUpdate": "์—…๋ฐ์ดํŠธํ•  ์‚ฌ์ดํŠธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.", + "resourceErrorNoUpdate": "์—…๋ฐ์ดํŠธํ•  ๋ฆฌ์†Œ์Šค๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค", + "authErrorNoUpdate": "์—…๋ฐ์ดํŠธํ•  ์ธ์ฆ ์ •๋ณด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.", + "orgErrorNoUpdate": "์—…๋ฐ์ดํŠธํ•  ์กฐ์ง์ด ์—†์Šต๋‹ˆ๋‹ค.", + "orgErrorNoProvided": "์ œ๊ณต๋œ ์กฐ์ง์ด ์—†์Šต๋‹ˆ๋‹ค.", + "apiKeysErrorNoUpdate": "์—…๋ฐ์ดํŠธํ•  API ํ‚ค๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.", + "sidebarOverview": "๊ฐœ์š”", + "sidebarHome": "ํ™ˆ", + "sidebarSites": "์‚ฌ์ดํŠธ", + "sidebarResources": "๋ฆฌ์†Œ์Šค", + "sidebarAccessControl": "์•ก์„ธ์Šค ์ œ์–ด", + "sidebarUsers": "์‚ฌ์šฉ์ž", + "sidebarInvitations": "์ดˆ๋Œ€", + "sidebarRoles": "์—ญํ• ", + "sidebarShareableLinks": "๊ณต์œ  ๊ฐ€๋Šฅํ•œ ๋งํฌ", + "sidebarIdentityProviders": "์‹ ์› ๊ณต๊ธ‰์ž", + "sidebarLicense": "๋ผ์ด์„ ์Šค", + "enableDockerSocket": "Docker ์†Œ์ผ“ ํ™œ์„ฑํ™”", + "enableDockerSocketDescription": "์ปจํ…Œ์ด๋„ˆ ์ •๋ณด๋ฅผ ์ฑ„์šฐ๊ธฐ ์œ„ํ•ด Docker ์†Œ์ผ“ ๊ฒ€์ƒ‰์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ์†Œ์ผ“ ๊ฒฝ๋กœ๋Š” Newt์— ์ œ๊ณต๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.", + "enableDockerSocketLink": "์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ", + "viewDockerContainers": "๋„์ปค ์ปจํ…Œ์ด๋„ˆ ๋ณด๊ธฐ", + "selectContainerDescription": "์ด ๋Œ€์ƒ์„ ์œ„ํ•œ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉํ•  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์„ ํƒํ•˜์„ธ์š”. ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํฌํŠธ๋ฅผ ํด๋ฆญํ•˜์„ธ์š”.", + "containerName": "์ด๋ฆ„", + "containerImage": "์ด๋ฏธ์ง€", + "containerState": "์ฃผ", + "containerNetworks": "๋„คํŠธ์›Œํฌ", + "containerHostnameIp": "ํ˜ธ์ŠคํŠธ ์ด๋ฆ„/IP", + "containerLabels": "๋ ˆ์ด๋ธ”", + "containerLabelsCount": "{count, plural, one {# ๋ ˆ์ด๋ธ”} other {# ๋ ˆ์ด๋ธ”}}", + "containerLabelsTitle": "์ปจํ…Œ์ด๋„ˆ ๋ ˆ์ด๋ธ”", + "containerLabelEmpty": "<๋น„์–ด ์žˆ์Œ>", + "containerPorts": "ํฌํŠธ", + "containerPortsMore": "+{count}๊ฐœ ๋”", + "containerActions": "์ž‘์—…", + "select": "์„ ํƒ", + "noContainersMatchingFilters": "ํ˜„์žฌ ํ•„ํ„ฐ์™€ ์ผ์น˜ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.", + "showContainersWithoutPorts": "ํฌํŠธ๊ฐ€ ์—†๋Š” ์ปจํ…Œ์ด๋„ˆ ํ‘œ์‹œ", + "showStoppedContainers": "์ค‘์ง€๋œ ์ปจํ…Œ์ด๋„ˆ ํ‘œ์‹œ", + "noContainersFound": "์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. Docker ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰ ์ค‘์ธ์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.", + "searchContainersPlaceholder": "{count}๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ์—์„œ ๊ฒ€์ƒ‰...", + "searchResultsCount": "{count, plural, one {# ๊ฒฐ๊ณผ} other {# ๊ฒฐ๊ณผ}}", + "filters": "ํ•„ํ„ฐ", + "filterOptions": "ํ•„ํ„ฐ ์˜ต์…˜", + "filterPorts": "ํฌํŠธ", + "filterStopped": "์ค‘์ง€๋จ", + "clearAllFilters": "๋ชจ๋“  ํ•„ํ„ฐ ์ง€์šฐ๊ธฐ", + "columns": "์—ด", + "toggleColumns": "์—ด ์ „ํ™˜", + "refreshContainersList": "์ปจํ…Œ์ด๋„ˆ ๋ชฉ๋ก ์ƒˆ๋กœ ๊ณ ์นจ", + "searching": "๊ฒ€์ƒ‰ ์ค‘...", + "noContainersFoundMatching": "\"{filter}\"์™€ ์ผ์น˜ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.", + "light": "๋น›", + "dark": "์–ด๋‘์šด", + "system": "์‹œ์Šคํ…œ", + "theme": "ํ…Œ๋งˆ", + "initialSetupTitle": "์ดˆ๊ธฐ ์„œ๋ฒ„ ์„ค์ •", + "initialSetupDescription": "์ดˆ๊ธฐ ์„œ๋ฒ„ ๊ด€๋ฆฌ์ž ๊ณ„์ •์„ ์ƒ์„ฑํ•˜์„ธ์š”. ์„œ๋ฒ„ ๊ด€๋ฆฌ์ž ๊ณ„์ •์€ ํ•˜๋‚˜๋งŒ ์กด์žฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ž๊ฒฉ ์ฆ๋ช…์€ ๋‚˜์ค‘์— ์–ธ์ œ๋“ ์ง€ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.", + "createAdminAccount": "๊ด€๋ฆฌ์ž ๊ณ„์ • ์ƒ์„ฑ", + "setupErrorCreateAdmin": "์„œ๋ฒ„ ๊ด€๋ฆฌ์ž ๊ณ„์ •์„ ์ƒ์„ฑํ•˜๋Š” ๋™์•ˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค." +} From 1983d0067d248aca020b83a82297aa415538416e Mon Sep 17 00:00:00 2001 From: Daeho Ro <40587651+daeho-ro@users.noreply.github.com> Date: Sat, 12 Jul 2025 13:21:14 +0900 Subject: [PATCH 7/8] Add Korean translations --- messages/{ko.json => ko-KR.json} | 0 src/components/LocaleSwitcher.tsx | 4 ++++ src/i18n/config.ts | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) rename messages/{ko.json => ko-KR.json} (100%) diff --git a/messages/ko.json b/messages/ko-KR.json similarity index 100% rename from messages/ko.json rename to messages/ko-KR.json diff --git a/src/components/LocaleSwitcher.tsx b/src/components/LocaleSwitcher.tsx index 080c8f7b..fe1dece5 100644 --- a/src/components/LocaleSwitcher.tsx +++ b/src/components/LocaleSwitcher.tsx @@ -48,6 +48,10 @@ export default function LocaleSwitcher() { { value: 'zh-CN', label: '็ฎ€ไฝ“ไธญๆ–‡' + }, + { + value: 'ko-KR', + label: 'ํ•œ๊ตญ์–ด' } ]} /> diff --git a/src/i18n/config.ts b/src/i18n/config.ts index 305d66d3..9871a199 100644 --- a/src/i18n/config.ts +++ b/src/i18n/config.ts @@ -1,4 +1,4 @@ export type Locale = (typeof locales)[number]; -export const locales = ['en-US', 'es-ES', 'fr-FR', 'de-DE', 'nl-NL', 'it-IT', 'pl-PL', 'pt-PT', 'tr-TR', 'zh-CN'] as const; +export const locales = ['en-US', 'es-ES', 'fr-FR', 'de-DE', 'nl-NL', 'it-IT', 'pl-PL', 'pt-PT', 'tr-TR', 'zh-CN', 'ko-KR'] as const; export const defaultLocale: Locale = 'en-US'; \ No newline at end of file From cec9e4101de01b6d3b034ef55ea11e6334f28eb9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 13 Jul 2025 18:47:45 +0000 Subject: [PATCH 8/8] Bump the prod-minor-updates group across 1 directory with 5 updates Bumps the prod-minor-updates group with 5 updates in the / directory: | Package | From | To | | --- | --- | --- | | [@react-email/components](https://github.com/resend/react-email/tree/HEAD/packages/components) | `0.1.0` | `0.2.0` | | [@react-email/tailwind](https://github.com/resend/react-email/tree/HEAD/packages/tailwind) | `1.0.5` | `1.1.0` | | [eslint](https://github.com/eslint/eslint) | `9.29.0` | `9.30.1` | | [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react) | `0.522.0` | `0.525.0` | | [react-hook-form](https://github.com/react-hook-form/react-hook-form) | `7.58.1` | `7.60.0` | Updates `@react-email/components` from 0.1.0 to 0.2.0 - [Release notes](https://github.com/resend/react-email/releases) - [Changelog](https://github.com/resend/react-email/blob/canary/packages/components/CHANGELOG.md) - [Commits](https://github.com/resend/react-email/commits/@react-email/components@0.2.0/packages/components) Updates `@react-email/tailwind` from 1.0.5 to 1.1.0 - [Release notes](https://github.com/resend/react-email/releases) - [Changelog](https://github.com/resend/react-email/blob/canary/packages/tailwind/CHANGELOG.md) - [Commits](https://github.com/resend/react-email/commits/@react-email/tailwind@1.1.0/packages/tailwind) Updates `eslint` from 9.29.0 to 9.30.1 - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v9.29.0...v9.30.1) Updates `lucide-react` from 0.522.0 to 0.525.0 - [Release notes](https://github.com/lucide-icons/lucide/releases) - [Commits](https://github.com/lucide-icons/lucide/commits/0.525.0/packages/lucide-react) Updates `react-hook-form` from 7.58.1 to 7.60.0 - [Release notes](https://github.com/react-hook-form/react-hook-form/releases) - [Changelog](https://github.com/react-hook-form/react-hook-form/blob/master/CHANGELOG.md) - [Commits](https://github.com/react-hook-form/react-hook-form/compare/v7.58.1...v7.60.0) --- updated-dependencies: - dependency-name: "@react-email/components" dependency-version: 0.2.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: prod-minor-updates - dependency-name: "@react-email/tailwind" dependency-version: 1.1.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: prod-minor-updates - dependency-name: eslint dependency-version: 9.30.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: prod-minor-updates - dependency-name: lucide-react dependency-version: 0.525.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: prod-minor-updates - dependency-name: react-hook-form dependency-version: 7.60.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: prod-minor-updates ... Signed-off-by: dependabot[bot] --- package-lock.json | 114 +++++++++++++++++----------------------------- package.json | 10 ++-- 2 files changed, 47 insertions(+), 77 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7d999a2a..1cc9c67d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,9 +31,9 @@ "@radix-ui/react-switch": "1.2.5", "@radix-ui/react-tabs": "1.1.12", "@radix-ui/react-toast": "1.2.14", - "@react-email/components": "0.1.0", + "@react-email/components": "0.3.1", "@react-email/render": "^1.1.2", - "@react-email/tailwind": "1.0.5", + "@react-email/tailwind": "1.2.1", "@tailwindcss/forms": "^0.5.10", "@tanstack/react-table": "8.21.3", "arctic": "^3.7.0", @@ -49,7 +49,7 @@ "cors": "2.8.5", "crypto-js": "^4.2.0", "drizzle-orm": "0.44.2", - "eslint": "9.29.0", + "eslint": "9.31.0", "eslint-config-next": "15.3.5", "express": "4.21.2", "express-rate-limit": "7.5.1", @@ -61,7 +61,7 @@ "jmespath": "^0.16.0", "js-yaml": "4.1.0", "jsonwebtoken": "^9.0.2", - "lucide-react": "0.522.0", + "lucide-react": "0.525.0", "moment": "2.30.1", "next": "15.3.5", "next-intl": "^4.3.4", @@ -76,7 +76,7 @@ "react": "19.1.0", "react-dom": "19.1.0", "react-easy-sort": "^1.6.0", - "react-hook-form": "7.58.1", + "react-hook-form": "7.60.0", "react-icons": "^5.5.0", "rebuild": "0.1.2", "semver": "7.7.2", @@ -1320,9 +1320,9 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.1.tgz", - "integrity": "sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==", + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", "license": "Apache-2.0", "dependencies": { "@eslint/object-schema": "^2.1.6", @@ -1334,18 +1334,18 @@ } }, "node_modules/@eslint/config-helpers": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.3.tgz", - "integrity": "sha512-u180qk2Um1le4yf0ruXH3PYFeEZeYC3p/4wCTKrr2U1CmGdzGi3KtY0nuPDH48UJxlKCC5RDzbcbh4X0XlqgHg==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz", + "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==", "license": "Apache-2.0", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/core": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz", - "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==", + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz", + "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", "license": "Apache-2.0", "dependencies": { "@types/json-schema": "^7.0.15" @@ -1378,9 +1378,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.29.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.29.0.tgz", - "integrity": "sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==", + "version": "9.31.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.31.0.tgz", + "integrity": "sha512-LOm5OVt7D4qiKCqoiPbA7LWmI+tbw1VbTUowBcUMgQSuM6poJufkFkYDcQpo5KfgD39TnNySV26QjOh7VFpSyw==", "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1411,18 +1411,6 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@eslint/plugin-kit/node_modules/@eslint/core": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz", - "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, "node_modules/@floating-ui/core": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.2.tgz", @@ -3942,9 +3930,9 @@ } }, "node_modules/@react-email/button": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@react-email/button/-/button-0.1.0.tgz", - "integrity": "sha512-fg4LtgTu5zXxaRSly9cuv6sHVF/hi1lElbRaIA8EPx5coWOBhCto6rCPfawcXpaN2oER7rNHUrcNBkI+lz5F9A==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@react-email/button/-/button-0.2.0.tgz", + "integrity": "sha512-8i+v6cMxr2emz4ihCrRiYJPp2/sdYsNNsBzXStlcA+/B9Umpm5Jj3WJKYpgTPM+aeyiqlG/MMI1AucnBm4f1oQ==", "license": "MIT", "engines": { "node": ">=18.0.0" @@ -3993,13 +3981,13 @@ } }, "node_modules/@react-email/components": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@react-email/components/-/components-0.1.0.tgz", - "integrity": "sha512-Rx0eZk0XuzLKXC5NoMm8xuH72ALVsPYNb/BvcdCJx4EZAoVpQISb4sCqpo9blVYVIazNr4MqWroqFb3ZNrCLMQ==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@react-email/components/-/components-0.3.1.tgz", + "integrity": "sha512-FqcyGaUpJJu8zfYGSS+qaSy7Zc2BFAswBc/LvHeSV4iTQMZMD8Dy7aS/NvP1SQMg5vjsO1aMpGFdrD4NBY58dw==", "license": "MIT", "dependencies": { "@react-email/body": "0.0.11", - "@react-email/button": "0.1.0", + "@react-email/button": "0.2.0", "@react-email/code-block": "0.1.0", "@react-email/code-inline": "0.0.5", "@react-email/column": "0.0.13", @@ -4013,10 +4001,10 @@ "@react-email/link": "0.0.12", "@react-email/markdown": "0.0.15", "@react-email/preview": "0.0.13", - "@react-email/render": "1.1.2", + "@react-email/render": "1.1.3", "@react-email/row": "0.0.12", "@react-email/section": "0.0.16", - "@react-email/tailwind": "1.0.5", + "@react-email/tailwind": "1.2.1", "@react-email/text": "0.1.5" }, "engines": { @@ -4026,24 +4014,6 @@ "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, - "node_modules/@react-email/components/node_modules/@react-email/render": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@react-email/render/-/render-1.1.2.tgz", - "integrity": "sha512-RnRehYN3v9gVlNMehHPHhyp2RQo7+pSkHDtXPvg3s0GbzM9SQMW4Qrf8GRNvtpLC4gsI+Wt0VatNRUFqjvevbw==", - "license": "MIT", - "dependencies": { - "html-to-text": "^9.0.5", - "prettier": "^3.5.3", - "react-promise-suspense": "^0.3.4" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "react": "^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^18.0 || ^19.0 || ^19.0.0-rc" - } - }, "node_modules/@react-email/container": { "version": "0.0.15", "resolved": "https://registry.npmjs.org/@react-email/container/-/container-0.0.15.tgz", @@ -4207,9 +4177,9 @@ } }, "node_modules/@react-email/tailwind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@react-email/tailwind/-/tailwind-1.0.5.tgz", - "integrity": "sha512-BH00cZSeFfP9HiDASl+sPHi7Hh77W5nzDgdnxtsVr/m3uQD9g180UwxcE3PhOfx0vRdLzQUU8PtmvvDfbztKQg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@react-email/tailwind/-/tailwind-1.2.1.tgz", + "integrity": "sha512-SmVyDuNQLJwO3wHEe/snSTaRhf/Exldy5DQU/RyPjcSPC0EuXXYwFlBr16br8jJSxkZA/fL91AxKL7HbbWp0Rw==", "license": "MIT", "engines": { "node": ">=18.0.0" @@ -7459,18 +7429,18 @@ } }, "node_modules/eslint": { - "version": "9.29.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.29.0.tgz", - "integrity": "sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ==", + "version": "9.31.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.31.0.tgz", + "integrity": "sha512-QldCVh/ztyKJJZLr4jXNUByx3gR+TDYZCRXEktiZoUR3PGy4qCmSbkxcIle8GEwGpb5JBZazlaJ/CxLidXdEbQ==", "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.20.1", - "@eslint/config-helpers": "^0.2.1", - "@eslint/core": "^0.14.0", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.3.0", + "@eslint/core": "^0.15.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.29.0", + "@eslint/js": "9.31.0", "@eslint/plugin-kit": "^0.3.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", @@ -9971,9 +9941,9 @@ } }, "node_modules/lucide-react": { - "version": "0.522.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.522.0.tgz", - "integrity": "sha512-jnJbw974yZ7rQHHEFKJOlWAefG3ATSCZHANZxIdx8Rk/16siuwjgA4fBULpXEAWx/RlTs3FzmKW/udWUuO0aRw==", + "version": "0.525.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.525.0.tgz", + "integrity": "sha512-Tm1txJ2OkymCGkvwoHt33Y2JpN5xucVq1slHcgE6Lk0WjDfjgKWor5CdVER8U6DvcfMwh4M8XxmpTiyzfmfDYQ==", "license": "ISC", "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" @@ -14387,9 +14357,9 @@ } }, "node_modules/react-hook-form": { - "version": "7.58.1", - "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.58.1.tgz", - "integrity": "sha512-Lml/KZYEEFfPhUVgE0RdCVpnC4yhW+PndRhbiTtdvSlQTL8IfVR+iQkBjLIvmmc6+GGoVeM11z37ktKFPAb0FA==", + "version": "7.60.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.60.0.tgz", + "integrity": "sha512-SBrYOvMbDB7cV8ZfNpaiLcgjH/a1c7aK0lK+aNigpf4xWLO8q+o4tcvVurv3c4EOyzn/3dCsYt4GKD42VvJ/+A==", "license": "MIT", "engines": { "node": ">=18.0.0" diff --git a/package.json b/package.json index e981c13a..16aab459 100644 --- a/package.json +++ b/package.json @@ -49,9 +49,9 @@ "@radix-ui/react-switch": "1.2.5", "@radix-ui/react-tabs": "1.1.12", "@radix-ui/react-toast": "1.2.14", - "@react-email/components": "0.1.0", + "@react-email/components": "0.3.1", "@react-email/render": "^1.1.2", - "@react-email/tailwind": "1.0.5", + "@react-email/tailwind": "1.2.1", "@tailwindcss/forms": "^0.5.10", "@tanstack/react-table": "8.21.3", "arctic": "^3.7.0", @@ -67,7 +67,7 @@ "cors": "2.8.5", "crypto-js": "^4.2.0", "drizzle-orm": "0.44.2", - "eslint": "9.29.0", + "eslint": "9.31.0", "eslint-config-next": "15.3.5", "express": "4.21.2", "express-rate-limit": "7.5.1", @@ -79,7 +79,7 @@ "jmespath": "^0.16.0", "js-yaml": "4.1.0", "jsonwebtoken": "^9.0.2", - "lucide-react": "0.522.0", + "lucide-react": "0.525.0", "moment": "2.30.1", "next": "15.3.5", "next-intl": "^4.3.4", @@ -94,7 +94,7 @@ "react": "19.1.0", "react-dom": "19.1.0", "react-easy-sort": "^1.6.0", - "react-hook-form": "7.58.1", + "react-hook-form": "7.60.0", "react-icons": "^5.5.0", "rebuild": "0.1.2", "semver": "7.7.2",