export default { // Navbar "navbar.upload": "업로드", "navbar.signin": "로그인", "navbar.home": "홈", "navbar.signup": "계정 만들기", "navbar.links.shares": "내 공유", "navbar.links.reverse": "역방향 공유", "navbar.avatar.account": "내 계정", "navbar.avatar.admin": "관리자", "navbar.avatar.signout": "로그아웃", // END navbar // / "home.title": "직접 호스팅하는 파일 공유 플랫폼.", "home.description": "정말 WeTransfer와 같은 제3자에게 개인 파일을 맡기고 싶으세요?", "home.bullet.a.name": "직접 호스팅", "home.bullet.a.description": "자신의 컴퓨터에서 Pingvin Share를 호스팅하세요.", "home.bullet.b.name": "개인 정보 보호", "home.bullet.b.description": "당신의 파일은 당신의 것이므로 절대로 제3자의 손에 들어가서는 안 됩니다.", "home.bullet.c.name": "귀찮은 파일 크기 제한 없음", "home.bullet.c.description": "원하는 만큼 큰 파일을 업로드하세요. 오직 여러분의 하드 디스크만이 한계가 될 것입니다.", "home.button.start": "시작하기", "home.button.source": "소스 코드", // END / // /auth/signin "signin.title": "다시 오신 것을 환영합니다!", "signin.description": "아직 계정이 없으신가요?", "signin.button.signup": "계정 만들기", "signin.input.email-or-username": "이메일 또는 사용자 이름", "signin.input.email-or-username.placeholder": "당신의 이메일 또는 사용자 이름", "signin.input.password": "비밀번호", "signin.input.password.placeholder": "당신의 비밀번호", "signin.button.submit": "로그인", "signIn.notify.totp-required.title": "2단계 인증이 필요합니다", "signIn.notify.totp-required.description": "2단계 인증 코드를 입력해주세요", "signIn.oauth.or": "또는", "signIn.oauth.github": "깃허브", "signIn.oauth.google": "구글", "signIn.oauth.microsoft": "마이크로소프트", "signIn.oauth.discord": "디스코드", "signIn.oauth.oidc": "오픈ID", // END /auth/signin // /auth/signup "signup.title": "계정 만들기", "signup.description": "이미 계정이 있으신가요?", "signup.button.signin": "로그인", "signup.input.username": "사용자 이름", "signup.input.username.placeholder": "당신의 사용지 이름", "signup.input.email": "이메일", "signup.input.email.placeholder": "당신의 이메일", "signup.button.submit": "시작하기", // END /auth/signup // /auth/totp "totp.title": "TOTP 인증", "totp.button.signIn": "로그인", // END /auth/totp // /auth/reset-password "resetPassword.title": "비밀번호를 잊으셨나요?", "resetPassword.description": "비밀번호를 재설정하려면 이메일을 입력하세요.", "resetPassword.notify.success": "이메일이 존재한다면 비밀번호를 재설정하는 링크를 포함한 메시지가 발송되었습니다.", "resetPassword.button.back": "로그인 페이지로 돌아가기", "resetPassword.text.resetPassword": "비밀번호 재설정", "resetPassword.text.enterNewPassword": "새로운 비밀번호를 입력하세요", "resetPassword.input.password": "새로운 비밀번호", "resetPassword.notify.passwordReset": "비밀번호가 성공적으로 재설정되었습니다.", // /account "account.title": "내 계정", "account.card.info.title": "계정 정보", "account.card.info.username": "사용자 이름", "account.card.info.email": "이메일", "account.notify.info.success": "계정이 업데이트되었습니다.", "account.card.password.title": "비밀번호", "account.card.password.old": "기존 비밀번호", "account.card.password.new": "새로운 비밀번호", "account.card.password.noPasswordSet": "비밀번호를 설정하지 않았습니다. 이메일과 비밀번호로 로그인하려면 비밀번호를 설정해야 합니다.", "account.notify.password.success": "비밀번호 변경 완료", "account.card.oauth.title": "소셜 로그인", "account.card.oauth.github": "깃허브", "account.card.oauth.google": "구글", "account.card.oauth.microsoft": "마이크로소프트", "account.card.oauth.discord": "디스코드", "account.card.oauth.oidc": "오픈ID", "account.card.oauth.link": "연결", "account.card.oauth.unlink": "연결 해제", "account.card.oauth.unlinked": "연결 해제", "account.modal.unlink.title": "계정 연결 해제", "account.modal.unlink.description": "소셜 계정 연결을 해제하면 사용자 이름과 비밀번호를 기억하지 못할 경우 계정을 잃을 수 있습니다.", "account.notify.oauth.unlinked.success": "연결 해제됨", "account.card.security.title": "보안", "account.card.security.totp.enable.description": "TOTP 활성화를 시작하려면 현재 비밀번호를 입력하세요.", "account.card.security.totp.disable.description": "TOTP 를 비활성화 하려면 비밀번호를 입력하세요.", "account.card.security.totp.button.start": "시작", "account.modal.totp.title": "TOTP 활성화", "account.modal.totp.step1": "1단계: 인증기를 추가하세요.", "account.modal.totp.step2": "2 단계: 코드 유효성 검사", "account.modal.totp.enterManually": "직접 입력", "account.modal.totp.code": "코드", "account.modal.totp.clickToCopy": "클릭하여 복사", "account.modal.totp.verify": "인증", "account.notify.totp.disable": "TOTP가 비활성화되었습니다.", "account.notify.totp.enable": "TOTP가 활성화 되었습니다.", "account.card.language.title": "언어", "account.card.language.description": "이 프로젝트는 커뮤니티에 의해 번역됩니다. 일부 언어는 불완전할 수 있습니다.", "account.card.color.title": "배경 설정", // ThemeSwitcher.tsx "account.theme.dark": "어두운 배경", "account.theme.light": "밝은 배경", "account.theme.system": "시스템", "account.button.delete": "계정 삭제", "account.modal.delete.title": "계정 삭제", "account.modal.delete.description": "정말로 활성화된 모든 공유를 포함하여 계정을 삭제하시겠습니까?", // END /account // /account/shares "account.shares.title": "내 공유", "account.shares.title.empty": "이곳은 아무것도 없는것 같아요 👀", "account.shares.description.empty": "당신은 아무것도 공유한것이 없어요.", "account.shares.button.create": "파일 업로드", "account.shares.info.title": "공유 정보", "account.shares.table.id": "ID", "account.shares.table.name": "이름", "account.shares.table.description": "설명", "account.shares.table.visitors": "방문자", "account.shares.table.expiresAt": "만료일", "account.shares.table.createdAt": "생성일", "account.shares.table.size": "크기", "account.shares.modal.share-informations": "공유 정보", "account.shares.modal.share-link": "공유 링크", "account.shares.modal.delete.title": "공유 삭제 {share}", "account.shares.modal.delete.description": "정말로 이 공유를 삭제하시겠습니까?", // END /account/shares // /account/reverseShares "account.reverseShares.title": "역방향 공유", "account.reverseShares.description": "역방향 공유를 통해 외부 사용자가 공유를 생성할 수 있는 고유 URL을 생성할 수 있습니다.", "account.reverseShares.title.empty": "이곳은 아무것도 없는것 같아요 👀", "account.reverseShares.description.empty": "당신은 역방향 공유한것이 없어요.", // showCreateReverseShareModal.tsx "account.reverseShares.modal.title": "새로운 역방향 공유 생성", "account.reverseShares.modal.expiration.label": "만료일", "account.reverseShares.modal.expiration.minute-singular": "분", "account.reverseShares.modal.expiration.minute-plural": "분", "account.reverseShares.modal.expiration.hour-singular": "시", "account.reverseShares.modal.expiration.hour-plural": "시", "account.reverseShares.modal.expiration.day-singular": "일", "account.reverseShares.modal.expiration.day-plural": "일", "account.reverseShares.modal.expiration.week-singular": "주", "account.reverseShares.modal.expiration.week-plural": "주", "account.reverseShares.modal.expiration.month-singular": "개월", "account.reverseShares.modal.expiration.month-plural": "개월", "account.reverseShares.modal.expiration.year-singular": "년", "account.reverseShares.modal.expiration.year-plural": "년", "account.reverseShares.modal.max-size.label": "최대 공유 크기", "account.reverseShares.modal.send-email": "이메일 알림 보내기", "account.reverseShares.modal.send-email.description": "이 역방향 공유 링크를 사용하여 공유가 생성되면 이메일 알림을 보냅니다.", "account.reverseShares.modal.max-use.label": "공유 생성 제한", "account.reverseShares.modal.max-use.description": "이 URL을 사용하여 공유를 생성할 수 있는 최대 횟수입니다.", "account.reverseShare.never-expires": "이 역공유 링크는 만료되지 않습니다.", "account.reverseShare.expires-on": "이 역방향 공유는 {expiration} 에 만료됩니다.", "account.reverseShares.table.no-shares": "아직 생성된 공유가 없습니다.", "account.reverseShares.table.count.singular": "공유", "account.reverseShares.table.count.plural": "공유", "account.reverseShares.table.shares": "공유", "account.reverseShares.table.remaining": "남은 링크 사용 횟수", "account.reverseShares.table.max-size": "최대 공유 크기", "account.reverseShares.table.expires": "만료 날짜", "account.reverseShares.modal.reverse-share-link": "역방향 공유 링크", "account.reverseShares.modal.delete.title": "역방향 공유 삭제", "account.reverseShares.modal.delete.description": "Do you really want to delete this reverse share? If you do, the associated shares will be deleted as well.", // END /account/reverseShares // /admin "admin.title": "Administration", "admin.button.users": "User management", "admin.button.shares": "Share management", "admin.button.config": "Configuration", "admin.version": "Version", // END /admin // /admin/users "admin.users.title": "User management", "admin.users.table.username": "Username", "admin.users.table.email": "Email", "admin.users.table.admin": "Admin", "admin.users.edit.update.title": "Update user {username}", "admin.users.edit.update.admin-privileges": "Admin privileges", "admin.users.edit.update.change-password.title": "Change password", "admin.users.edit.update.change-password.field": "New password", "admin.users.edit.update.change-password.button": "Save new password", "admin.users.edit.update.notify.password.success": "Password changed successfully", "admin.users.edit.delete.title": "Delete user {username}", "admin.users.edit.delete.description": "Do you really want to delete this user and all his shares?", // showCreateUserModal.tsx "admin.users.modal.create.title": "Create user", "admin.users.modal.create.username": "Username", "admin.users.modal.create.email": "Email", "admin.users.modal.create.password": "Password", "admin.users.modal.create.manual-password": "Set password manually", "admin.users.modal.create.manual-password.description": "If not checked, the user will receive an email with a link to set their password.", "admin.users.modal.create.admin": "Admin privileges", "admin.users.modal.create.admin.description": "If checked, the user will be able to access the admin panel.", // END /admin/users // /admin/shares "admin.shares.title": "Share management", "admin.shares.table.id": "Share ID", "admin.shares.table.username": "Creator", "admin.shares.table.visitors": "Visitors", "admin.shares.table.expires": "Expires At", "admin.shares.edit.delete.title": "Delete share {id}", "admin.shares.edit.delete.description": "Do you really want to delete this share?", // END /admin/shares // /upload "upload.title": "Upload", "upload.notify.generic-error": "An error occurred while finishing your share.", "upload.notify.count-failed": "{count} files failed to upload. Trying again.", // Dropzone.tsx "upload.dropzone.title": "Upload files", "upload.dropzone.description": "Drag'n'drop files here to start your share. We can accept only files that are less than {maxSize} in total.", "upload.dropzone.notify.file-too-big": "Your files exceed the maximum share size of {maxSize}.", // FileList.tsx "upload.filelist.name": "Name", "upload.filelist.size": "Size", // showCreateUploadModal.tsx "upload.modal.title": "Create Share", "upload.modal.link.error.invalid": "Can only contain letters, numbers, underscores, and hyphens", "upload.modal.link.error.taken": "This link is already in use", "upload.modal.not-signed-in": "You're not signed in", "upload.modal.not-signed-in-description": "You will be unable to delete your share manually and view the visitor count.", "upload.modal.expires.never": "never", "upload.modal.expires.never-long": "Never Expires", "upload.modal.expires.error.too-long": "Expiration exceeds maximum expiration date of {max}.", "upload.modal.link.label": "Link", "upload.modal.expires.label": "만료일", "upload.modal.expires.minute-singular": "분", "upload.modal.expires.minute-plural": "분", "upload.modal.expires.hour-singular": "시", "upload.modal.expires.hour-plural": "시", "upload.modal.expires.day-singular": "일", "upload.modal.expires.day-plural": "일", "upload.modal.expires.week-singular": "주", "upload.modal.expires.week-plural": "주", "upload.modal.expires.month-singular": "개월", "upload.modal.expires.month-plural": "개월", "upload.modal.expires.year-singular": "년", "upload.modal.expires.year-plural": "년", "upload.modal.accordion.name-and-description.title": "이름과 설명", "upload.modal.accordion.name-and-description.name.placeholder": "이름", "upload.modal.accordion.name-and-description.description.placeholder": "공유를 받을 사람에게 메모", "upload.modal.accordion.email.title": "Email recipients", "upload.modal.accordion.email.placeholder": "Enter email recipients", "upload.modal.accordion.email.invalid-email": "Invalid email address", "upload.modal.accordion.security.title": "Security options", "upload.modal.accordion.security.password.label": "Password protection", "upload.modal.accordion.security.password.placeholder": "No password", "upload.modal.accordion.security.max-views.label": "Maximum views", "upload.modal.accordion.security.max-views.placeholder": "No limit", // showCompletedUploadModal.tsx "upload.modal.completed.never-expires": "This share will never expire.", "upload.modal.completed.expires-on": "This share will expire on {expiration}.", "upload.modal.completed.share-ready": "Share ready", // END /upload // /share/[id] "share.title": "Share {shareId}", "share.description": "Look what I've shared with you!", "share.error.visitor-limit-exceeded.title": "Visitor limit exceeded", "share.error.visitor-limit-exceeded.description": "The visitor limit from this share has been exceeded.", "share.error.removed.title": "Share removed", "share.error.not-found.title": "Share not found", "share.error.not-found.description": "The share you're looking for doesn't exist.", "share.modal.password.title": "Password required", "share.modal.password.description": "To access this share please enter the password for the share.", "share.modal.password": "Password", "share.modal.error.invalid-password": "Invalid password", "share.button.download-all": "Download all", "share.notify.download-all-preparing": "The share is preparing. Try again in a few minutes.", "share.modal.file-link": "File link", "share.table.name": "Name", "share.table.size": "Size", "share.modal.file-preview.error.not-supported.title": "Preview not supported", "share.modal.file-preview.error.not-supported.description": "A preview for this file type is unsupported. Please download the file to view it.", // END /share/[id] // /share/[id]/edit "share.edit.title": "Edit {shareId}", "share.edit.append-upload": "Append file", "share.edit.notify.generic-error": "An error occurred while finishing your share.", "share.edit.notify.save-success": "Share updated successfully", // END /share/[id]/edit // /admin/config "admin.config.title": "Configuration", "admin.config.category.general": "General", "admin.config.category.share": "Share", "admin.config.category.email": "Email", "admin.config.category.smtp": "SMTP", "admin.config.category.oauth": "Social Login", "admin.config.general.app-name": "App name", "admin.config.general.app-name.description": "Name of the application", "admin.config.general.app-url": "App URL", "admin.config.general.app-url.description": "On which URL Pingvin Share is available", "admin.config.general.show-home-page": "Show home page", "admin.config.general.show-home-page.description": "Whether to show the home page", "admin.config.general.logo": "Logo", "admin.config.general.logo.description": "Change your logo by uploading a new image. The image must be a PNG and should have the format 1:1.", "admin.config.general.logo.placeholder": "Pick image", "admin.config.email.enable-share-email-recipients": "Enable share email recipients", "admin.config.email.enable-share-email-recipients.description": "Whether to allow emails to share recipients. Only enable this if you have enabled SMTP.", "admin.config.email.share-recipients-subject": "Share recipients subject", "admin.config.email.share-recipients-subject.description": "Subject of the email which gets sent to the share recipients.", "admin.config.email.share-recipients-message": "Share recipients message", "admin.config.email.share-recipients-message.description": "Message which gets sent to the share recipients. Available variables:\n {creator} - The username of the creator of the share\n {shareUrl} - The URL of the share\n {desc} - The description of the share\n {expires} - The expiration date of the share\n The variables will be replaced with the actual value.", "admin.config.email.reverse-share-subject": "Reverse share subject", "admin.config.email.reverse-share-subject.description": "Subject of the email which gets sent when someone created a share with your reverse share link.", "admin.config.email.reverse-share-message": "Reverse share message", "admin.config.email.reverse-share-message.description": "Message which gets sent when someone created a share with your reverse share link. {shareUrl} will be replaced with the creator's name and the share URL.", "admin.config.email.reset-password-subject": "Reset password subject", "admin.config.email.reset-password-subject.description": "Subject of the email which gets sent when a user requests a password reset.", "admin.config.email.reset-password-message": "Reset password message", "admin.config.email.reset-password-message.description": "Message which gets sent when a user requests a password reset. {url} will be replaced with the reset password URL.", "admin.config.email.invite-subject": "Invite subject", "admin.config.email.invite-subject.description": "Subject of the email which gets sent when an admin invites a user.", "admin.config.email.invite-message": "Invite message", "admin.config.email.invite-message.description": "Message which gets sent when an admin invites a user. {url} will be replaced with the invite URL and {password} with the password.", "admin.config.share.allow-registration": "Allow registration", "admin.config.share.allow-registration.description": "Whether registration is allowed", "admin.config.share.allow-unauthenticated-shares": "Allow unauthenticated shares", "admin.config.share.allow-unauthenticated-shares.description": "Whether unauthenticated users can create shares", "admin.config.share.max-expiration": "Max expiration", "admin.config.share.max-expiration.description": "Maximum share expiration in hours. Set to 0 to allow unlimited expiration.", "admin.config.share.max-size": "Max size", "admin.config.share.max-size.description": "Maximum share size in bytes", "admin.config.share.zip-compression-level": "Zip compression level", "admin.config.share.zip-compression-level.description": "Adjust the level to balance between file size and compression speed. Valid values range from 0 to 9, with 0 being no compression and 9 being maximum compression. ", "admin.config.share.chunk-size": "Chunk size", "admin.config.share.chunk-size.description": "Adjust the chunk size (in bytes) for your uploads to balance efficiency and reliability according to your internet connection. Smaller chunks can enhance success rates for unstable connections, while larger chunks speed up uploads for stable connections.", "admin.config.smtp.enabled": "Enabled", "admin.config.smtp.enabled.description": "Whether SMTP is enabled. Only set this to true if you entered the host, port, email, user and password of your SMTP server.", "admin.config.smtp.host": "Host", "admin.config.smtp.host.description": "Host of the SMTP server", "admin.config.smtp.port": "Port", "admin.config.smtp.port.description": "Port of the SMTP server", "admin.config.smtp.email": "Email", "admin.config.smtp.email.description": "Email address which the emails get sent from", "admin.config.smtp.username": "Username", "admin.config.smtp.username.description": "Username of the SMTP server", "admin.config.smtp.password": "Password", "admin.config.smtp.password.description": "Password of the SMTP server", "admin.config.smtp.button.test": "Send test email", "admin.config.oauth.allow-registration": "Allow registration", "admin.config.oauth.allow-registration.description": "Allow users to register via social login", "admin.config.oauth.ignore-totp": "Ignore TOTP", "admin.config.oauth.ignore-totp.description": "Whether to ignore TOTP when user using social login", "admin.config.oauth.github-enabled": "GitHub", "admin.config.oauth.github-enabled.description": "Whether GitHub login is enabled", "admin.config.oauth.github-client-id": "GitHub Client ID", "admin.config.oauth.github-client-id.description": "Client ID of the GitHub OAuth app", "admin.config.oauth.github-client-secret": "GitHub Client secret", "admin.config.oauth.github-client-secret.description": "Client secret of the GitHub OAuth app", "admin.config.oauth.google-enabled": "Google", "admin.config.oauth.google-enabled.description": "Whether Google login is enabled", "admin.config.oauth.google-client-id": "Google Client ID", "admin.config.oauth.google-client-id.description": "Client ID of the Google OAuth app", "admin.config.oauth.google-client-secret": "Google Client secret", "admin.config.oauth.google-client-secret.description": "Client secret of the Google OAuth app", "admin.config.oauth.microsoft-enabled": "Microsoft", "admin.config.oauth.microsoft-enabled.description": "Whether Microsoft login is enabled", "admin.config.oauth.microsoft-tenant": "Microsoft Tenant", "admin.config.oauth.microsoft-tenant.description": "Tenant ID of the Microsoft OAuth app\ncommon: Users with both a personal Microsoft account and a work or school account from Microsoft Entra ID can sign in to the application. organizations: Only users with work or school accounts from Microsoft Entra ID can sign in to the application.\nconsumers: Only users with a personal Microsoft account can sign in to the application.\ndomain name of the Microsoft Entra tenant or the tenant ID in GUID format: Only users from a specific Microsoft Entra tenant (directory members with a work or school account or directory guests with a personal Microsoft account) can sign in to the application.", "admin.config.oauth.microsoft-client-id": "Microsoft Client ID", "admin.config.oauth.microsoft-client-id.description": "Client ID of the Microsoft OAuth app", "admin.config.oauth.microsoft-client-secret": "Microsoft Client secret", "admin.config.oauth.microsoft-client-secret.description": "Client secret of the Microsoft OAuth app", "admin.config.oauth.discord-enabled": "Discord", "admin.config.oauth.discord-enabled.description": "Whether Discord login is enabled", "admin.config.oauth.discord-limited-guild": "Discord limited server ID", "admin.config.oauth.discord-limited-guild.description": "Limit signing in to users in a specific server. Leave it blank to disable.", "admin.config.oauth.discord-client-id": "Discord Client ID", "admin.config.oauth.discord-client-id.description": "Client ID of the Discord OAuth app", "admin.config.oauth.discord-client-secret": "Discord Client secret", "admin.config.oauth.discord-client-secret.description": "Client secret of the Discord OAuth app", "admin.config.oauth.oidc-enabled": "OpenID Connect", "admin.config.oauth.oidc-enabled.description": "Whether OpenID Connect login is enabled", "admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI", "admin.config.oauth.oidc-discovery-uri.description": "Discovery URI of the OpenID Connect OAuth app", "admin.config.oauth.oidc-username-claim": "OpenID Connect username claim", "admin.config.oauth.oidc-username-claim.description": "Username claim in OpenID Connect ID token. Leave it blank if you don't know what this config is.", "admin.config.oauth.oidc-client-id": "OpenID Connect Client ID", "admin.config.oauth.oidc-client-id.description": "Client ID of the OpenID Connect OAuth app", "admin.config.oauth.oidc-client-secret": "OpenID Connect Client secret", "admin.config.oauth.oidc-client-secret.description": "Client secret of the OpenID Connect OAuth app", // 404 "404.description": "Oops this page doesn't exist.", "404.button.home": "Bring me back home", // error "error.title": "Error", "error.description": "Oops!", "error.button.back": "Go back", "error.msg.default": "Something went wrong.", "error.msg.access_denied": "You canceled the authentication process, please try again.", "error.msg.expired_token": "The authentication process took too long, please try again.", "error.msg.invalid_token": "Internal Error", "error.msg.no_user": "User linked to this {0} account doesn't exist.", "error.msg.no_email": "Can't get email address from this {0} account.", "error.msg.already_linked": "This {0} account is already linked to another account.", "error.msg.not_linked": "This {0} account haven't linked to any account yet.", "error.msg.unverified_account": "This {0} account is unverified, please try again after verification.", "error.msg.discord_guild_permission_denied": "You are not allowed to sign in.", "error.msg.cannot_get_user_info": "Can not get your user info from this {0} account.", "error.param.provider_github": "GitHub", "error.param.provider_google": "Google", "error.param.provider_microsoft": "Microsoft", "error.param.provider_discord": "Discord", "error.param.provider_oidc": "OpenID Connect", // Common translations "common.button.save": "Save", "common.button.create": "Create", "common.button.submit": "Submit", "common.button.delete": "Delete", "common.button.cancel": "Cancel", "common.button.confirm": "Confirm", "common.button.disable": "Disable", "common.button.share": "Share", "common.button.generate": "Generate", "common.button.done": "Done", "common.text.link": "Link", "common.text.navigate-to-link": "Go to the link", "common.text.or": "or", "common.button.go-back": "Go back", "common.button.go-home": "첫 페이지", "common.notify.copied": "Your link was copied to the clipboard", "common.success": "성공", "common.error": "에러", "common.error.unknown": "An unknown error occurred", "common.error.invalid-email": "Invalid email address", "common.error.too-short": "Must be at least {length} characters", "common.error.too-long": "Must be at most {length} characters", "common.error.exact-length": "Must be exactly {length} characters", "common.error.invalid-number": "Must be a number", "common.error.field-required": "This field is required" };