fix(i18n): update userfront english copy

This commit is contained in:
Lectom C Han committed 2026-03-23 13:44:55 +09:00
1 parent 2de22869c0
commit 318948c2fb
5 files changed
+582 -444

No files matched your search

+227 -222
View File
@@ -41,75 +41,63 @@ verify_code_failed = "Verify Code Failed"
missing = "Missing"
[msg.userfront]
greeting = "Greeting"
greeting = "Hello, {name}."
[msg.userfront.audit]
date = "Date"
device = "Device"
end = "End"
ip = "Ip"
load_more_error = "Load More Error"
result = "Result"
date = "Date: {value}"
device = "Device: {value}"
end = "No more items to show."
ip = "IP address: {value}"
load_more_error = "Could not load more history."
result = "Result: {value}"
session_id = "Session ID: {value}"
status = "Status"
status = "Status: pending"
[msg.userfront.dashboard]
approved_device = "Approved Device"
approved_ip = "Approve IP: {ip}"
audit_empty = "Audit Empty"
audit_load_error = "Audit Load Error"
approved_device = "Approved device: {device}"
approved_ip = "Approved IP: {ip}"
audit_empty = "No recent sign-in activity."
audit_load_error = "Could not load sign-in history."
render_error = "Dashboard render error: {error}"
auth_method = "Auth Method"
auth_method = "Auth method: {method}"
client_id = "Client ID: {id}"
client_id_missing = "Client Id Missing"
current_status = "Current Status"
last_auth = "Last Auth"
link_missing = "Link Missing"
link_open_error = "Link Open Error"
session_id_copied = "Session Id Copied"
client_id_missing = "No client ID available."
current_status = "Current status: {status}"
last_auth = "Last signed in: {value}"
link_missing = "This app does not have a launch URL configured."
link_open_error = "Could not open the app link."
session_id_copied = "Session ID copied."
[msg.userfront.dashboard.activities]
empty = "Empty"
empty_detail = "Empty Detail"
error = "Error"
empty = "No linked apps yet."
empty_detail = "Linked apps and their latest activity will appear here."
error = "Could not load linked apps."
[msg.userfront.dashboard.approved_session]
copy_click = "Copy Click"
copy_tap = "Copy Tap"
none = "None"
copy_click = "{label}: {id}\\\\nClick to copy."
copy_tap = "{label}: {id}\\\\nTap to copy."
none = "No {label}"
[msg.userfront.dashboard.revoke]
confirm = "Confirm"
error = "Error"
success = "Success"
confirm = "Disconnect {app}?\\\\nYou will need to grant access again the next time you sign in."
error = "Could not disconnect the app: {error}"
success = "{app} has been disconnected."
[msg.userfront.dashboard.scopes]
empty = "Empty"
empty = "No scopes were requested."
[msg.userfront.dashboard.timeline]
load_error = "Load Error"
load_error = "Could not load sign-in history."
[msg.userfront.error]
detail_contact = "Please contact administrator."
detail_generic = "Detail Generic"
detail_request = "Detail Request"
id = "Id"
title = "Title"
title_generic = "Title Generic"
title_with_code = "Title With Code"
type = "Type"
[msg.userfront.error.whitelist]
"$normalizedCode" = "{error}"
settings_disabled = "Account settings are currently unavailable."
invalid_session = "Your session has expired. Please sign in again."
verification_required = "Additional verification is required. Please follow the instructions."
recovery_expired = "The recovery link has expired. Please request a new one."
recovery_invalid = "The recovery link is invalid."
rate_limited = "Too many requests. Please try again later."
not_found = "The requested page could not be found."
bad_request = "Please check your input."
password_or_email_mismatch = "Email or password does not match."
detail_contact = "If the problem continues, please contact your administrator."
detail_generic = "Something went wrong."
detail_request = "We had trouble processing your request."
id = "Error ID: {id}"
title = "An error occurred during authentication."
title_generic = "An error occurred."
title_with_code = "Error: {code}"
type = "Error type: {type}"
[msg.userfront.error.ory]
"$normalizedCode" = "{error}"
@@ -127,57 +115,70 @@ temporarily_unavailable = "The authentication server is temporarily unavailable.
unauthorized_client = "The client is not authorized for this request."
unsupported_response_type = "The response type is not supported."
[msg.userfront.error.whitelist]
"$normalizedCode" = "{error}"
bad_request = "Please check your input."
invalid_session = "Your session has expired. Please sign in again."
not_found = "The requested page could not be found."
password_or_email_mismatch = "Email or password does not match."
rate_limited = "Too many requests. Please try again later."
recovery_expired = "The recovery link has expired. Please request a new one."
recovery_invalid = "The recovery link is invalid."
settings_disabled = "Account settings are currently unavailable."
verification_required = "Additional verification is required. Please follow the instructions."
[msg.userfront.forgot]
description = "Description"
dry_send = "Dry Send"
error = "Error"
input_required = "Input Required"
sent = "Sent"
description = "Enter the email address or phone number linked to your account and we will send you a password reset link."
dry_send = "Dry-send mode: no email or SMS was actually sent."
error = "Failed to send the reset link: {error}"
input_required = "Enter your email address or phone number."
sent = "A password reset link has been sent. Check your email or SMS."
[msg.userfront.login]
cookie_check_failed = "Cookie Check Failed"
dry_send = "Dry Send"
link_failed = "Link Failed"
link_send_failed = "Link Send Failed"
link_sent_email = "Link Sent Email"
link_sent_phone = "Link Sent Phone"
cookie_check_failed = "Could not verify your sign-in state: {error}"
dry_send = "Dry-send mode: no email or SMS was actually sent."
link_failed = "Could not complete link sign-in: {error}"
link_send_failed = "Failed to send the sign-in link: {error}"
link_sent_email = "We sent a sign-in link to your email address."
link_sent_phone = "We sent a sign-in link to your phone number."
link_timeout = "Time expired."
no_account = "New to Baron?"
oidc_failed = "OIDC Failed"
oidc_failed = "OIDC sign-in failed. Please try again."
qr_expired = "Time expired."
qr_init_failed = "QR Init Failed"
qr_login_required = "QR Login Required"
token_missing = "Token Missing"
verification_failed = "Verification Failed"
qr_init_failed = "Failed to initialize QR sign-in: {error}"
qr_login_required = "You need to be signed in to approve a QR sign-in."
token_missing = "Could not find the sign-in token."
verification_failed = "Failed to approve the sign-in request: {error}"
[msg.userfront.login.link]
helper = "Sending you a login link"
missing_login_id = "Missing Login Id"
missing_phone = "Missing Phone"
resend_wait = "Resend Wait"
short_code_help = "Short Code Help"
approved = "Sign-in approved. You will be redirected to the sign-in page shortly."
helper = "We will send a sign-in link using the information you enter."
missing_login_id = "Enter your email address or phone number."
missing_phone = "Enter your phone number."
resend_wait = "You can resend in {time}."
short_code_help = "You can also sign in with the last 2 letters and 6 digits from the link you received."
[msg.userfront.login.password]
failed = "Failed"
missing_credentials = "Missing Credentials"
failed = "Sign-in failed: {error}"
missing_credentials = "Enter both your email or phone number and your password."
[msg.userfront.login.qr]
load_failed = "Load Failed"
scan_hint = "Scan Hint"
load_failed = "Could not load the QR code."
scan_hint = "Scan it with the mobile app."
[msg.userfront.login.short_code]
invalid = "Invalid"
invalid = "Enter the 2 letters and 6 digits from your code."
[msg.userfront.login.unregistered]
body = "Body"
body = "We could not find an account for that information.\\\\nPlease sign up before continuing."
[msg.userfront.login.verification]
approved = "Approved"
approved_local = "Approved Local"
success = "Success"
approved = "Approved. Complete sign-in in the original window."
approved_local = "Approved. This device is already signed in, and the remote window will be signed in shortly."
success = "Sign-in approval completed."
[msg.userfront.login_success]
subtitle = "Subtitle"
subtitle = "You have signed in successfully."
[msg.userfront.consent]
accept_error = "Failed to process consent: {error}"
@@ -201,136 +202,139 @@ phone = "Phone number (identity verification and notifications)"
profile = "Basic profile information (name, user identifier)"
[msg.userfront.profile]
department_missing = "Department Missing"
department_required = "Department Required"
email_missing = "Email Missing"
greeting = "Greeting"
load_failed = "Load Failed"
name_missing = "Name Missing"
name_required = "Name Required"
phone_required = "Phone Required"
phone_verify_required = "Phone Verify Required"
update_failed = "Update Failed"
update_success = "Update Success"
department_missing = "No department information"
department_required = "Enter your department."
email_missing = "No email address"
greeting = "Hello, {name}."
load_failed = "Could not load your profile."
name_missing = "No name provided"
name_required = "Enter your name."
phone_required = "Enter your phone number."
phone_verify_required = "Phone verification is required."
update_failed = "Failed to update your profile: {error}"
update_success = "Your profile has been updated."
[msg.userfront.profile.password]
change_failed = "Change Failed"
changed = "Changed"
current_required = "Current Required"
mismatch = "Mismatch"
new_required = "New Required"
subtitle = "Subtitle"
change_failed = "Failed to change your password: {error}"
changed = "Your password has been changed."
current_required = "Enter your current password."
mismatch = "The new passwords do not match."
new_required = "Enter a new password."
subtitle = "Verify your current password before setting a new one."
[msg.userfront.profile.phone]
code_sent = "Code Sent"
send_failed = "Send Failed"
verified = "Verified"
verify_failed = "Verify Failed"
verify_notice = "Verify Notice"
code_sent = "A verification code has been sent."
send_failed = "Failed to send the code: {error}"
verified = "Phone number verified."
verify_failed = "Verification failed: {error}"
verify_notice = "SMS verification is required to change your phone number."
[msg.userfront.profile.section]
basic = "Basic"
organization = "Organization"
security = "Security"
basic = "Manage your basic account information."
organization = "Your organization and affiliation details."
security = "Keep your password secure."
[msg.userfront.qr]
camera_error = "Camera Error"
permission_error = "Permission Error"
permission_required = "Permission Required"
approve_error = "QR approval failed: {error}"
approve_success = "QR approval complete. Continue on your desktop."
camera_error = "Camera error: {error}"
permission_error = "Could not request camera access. Check your browser or OS settings."
permission_required = "Camera access is required."
[msg.userfront.reset]
invalid_body = "Invalid Body"
invalid_link = "Invalid Link"
invalid_title = "Invalid Title"
policy_loading = "Policy Loading"
success = "Success"
invalid_body = "This password reset link is invalid or has expired. Please request a new one."
invalid_link = "This reset link is invalid. Missing loginId or token."
invalid_title = "Invalid reset link"
policy_loading = "Loading the password policy..."
success = "Your password has been changed successfully. Please sign in again."
[msg.userfront.reset.error]
empty_password = "Please enter Password."
generic = "Generic"
lowercase = "Lowercase"
min_length = "Min Length"
min_types = "Min Types"
mismatch = "Mismatch"
number = "Number"
symbol = "Symbol"
uppercase = "Uppercase"
generic = "Failed to change your password: {error}"
lowercase = "Include at least one lowercase letter."
min_length = "Use at least {count} characters."
min_types = "Use at least {count} character types: uppercase, lowercase, number, or symbol."
mismatch = "The passwords do not match."
number = "Include at least one number."
symbol = "Include at least one symbol."
uppercase = "Include at least one uppercase letter."
[msg.userfront.reset.policy]
lowercase = "Lowercase"
min_length = "Min Length"
min_types = "Min Types"
number = "Number"
symbol = "Symbol"
uppercase = "Uppercase"
lowercase = "At least one lowercase letter"
min_length = "At least {count} characters"
min_types = "At least {count} character types"
number = "At least one number"
symbol = "At least one symbol"
uppercase = "At least one uppercase letter"
[msg.userfront.sections]
apps_subtitle = "Apps Subtitle"
audit_subtitle = "Audit Subtitle"
apps_subtitle = "Your linked apps and their latest sign-in status."
audit_subtitle = "Recent access history for Baron sign-in."
[msg.userfront.settings]
disabled = "Disabled"
disabled = "Account settings are currently unavailable."
[msg.userfront.signup]
failed = "Failed"
privacy_full = "Privacy Full"
tos_full = "Tos Full"
privacy_full = "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n개인정보 수집 및 이용 동의\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n바론서비스 개인정보처리방침\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n제1조 (목적)\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n바론컨설턴트(이하 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"회사\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\")는 바론서비스(이하 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"서비스\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\")를 이용하는 고객(이하 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"이용자\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\")의 개인정보를 보호하고, 「개인정보 보호법」에 따라 책임과 의무를 다하기 위해 본 개인정보처리방침을 마련했습니다. 본 방침은 이용자가 제공한 개인정보가 어떻게 수집, 이용, 보관, 보호되는지를 설명합니다.\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n제2조 (개인정보의 처리목적)\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n회사는 다음의 목적을 위해 개인정보를 처리합니다. 처리하고 있는 개인정보는 다음의 목적 이외의 용도로는 이용되지 않으며, 이용 목적이 변경되는 경우에는 「개인정보 보호법」 제18조에 따라 별도의 동의를 받는 등 필요한 조치를 이행할 예정입니다.\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n- 본인확인: 회원가입 및 관리를 위한 본인 확인, 전화 또는 이메일을 통한 연락\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n- 서비스 제공: 각종 통보 및 서비스 제공을 위한 업무 처리\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n- 제품소개서 다운로드: 설명자료 전달\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n- 상담 및 데모 신청: 상담 제공 및 데모 제공, 계약 처리자 정보 수집\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n- 행사 참가 신청: 참석 안내 및 세미나/설명회/교육 제공\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n- 보안가이드 제공: 안내자료 전달\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n- 기술지원 문의: 서비스 사용 지원\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n- 서비스 개선 의견 접수: 서비스 품질 개선\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n- 마케팅 활동: 동의한 고객에 한해 뉴스레터 및 매거진 발송\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n제3조 (개인정보의 처리 및 보유 기간)\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n① 회사는 법령에 따른 개인정보 보유 및 이용기간 또는 정보주체로부터 개인정보를 수집 시 동의받은 개인정보 보유 및 이용기간 내에서 개인정보를 처리 및 보유합니다.\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n② 각각의 개인정보 처리 및 보유 기간은 다음과 같습니다:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n- 회원정보: 회원가입일부터 회원탈퇴 후 1년까지\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n- 홍보, 상담, 계약용 개인정보: 2년\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n제4조 (개인정보의 제3자 제공)\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n① 회사는 정보주체의 개인정보를 제2조에서 명시한 범위 내에서만 처리하며, 정보 주체의 동의, 법률의 특별한 규정 등 「개인정보 보호법」 제17조 및 제18조에 해당하는 경우에만 개인정보를 제3자에게 제공합니다.\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n② 회사는 다음과 같이 개인정보를 제3자에게 제공하고 있습니다:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n- 제공받는 자: 수사기관 및 유관기관, 피신고업체\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n- 이용 목적: 개인Line truncated
tos_full = "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n바론 소프트웨어 이용약관\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n제1장 총칙\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n제1조 (목적)\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n이 약관은 바론컨설턴트(이하 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"회사\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"라 합니다)가 제공하는 바론소프트웨어(이하 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"서비스\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"라 합니다)를 이용함에 있어 회사와 이용자 간의 권리, 의무 및 책임사항과 기타 필요한 사항을 정하는 것을 목적으로 합니다.\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n제2조 (용어의 정의)\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n① 본 약관에서 사용하는 용어의 정의는 다음과 같습니다:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n- “서비스”란 회사가 제공하는 소프트웨어 및 관련 제반 서비스를 의미합니다.\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n- “이용자”란 회사의 서비스에 접속하여 본 약관에 따라 회사가 제공하는 서비스를 이용하는 회원 및 비회원을 말합니다.\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n- “회원”이란 본 약관에 동의하고 회사와 이용계약을 체결한 자를 의미합니다.\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n- “비회원”이란 회원가입을 하지 않고 회사가 제공하는 일부 서비스를 이용하는 자를 말합니다.\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n제3조 (약관의 효력 및 변경)\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n① 본 약관은 이용자가 본 약관에 동의하고, 회사가 이에 대한 승낙을 완료함으로써 효력이 발생합니다. ② 회사는 필요한 경우 본 약관을 변경할 수 있으며, 변경된 약관은 서비스 화면에 공지된 후 효력이 발생합니다.\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n제4조 (약관 외 준칙)\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n본 약관에 명시되지 않은 사항에 대해서는 대한민국의 관련 법령과 상관습에 따릅니다.\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n제2장 서비스 이용계약\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n제5조 (이용계약의 성립)\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n이용계약은 이용자가 약관의 내용에 동의하고, 회사가 제공하는 소정의 회원가입 신청서를 작성하여 가입을 완료한 후, 회사가 이를 승인함으로써 성립합니다.\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n제6조 (이용계약의 유보와 거절)\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n① 회사는 다음 각 호에 해당하는 경우 이용계약의 성립을 유보하거나 거절할 수 있습니다: - 신청서의 내용이 허위로 판명된 경우 - 서비스 제공이 기술적으로 어려운 경우\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n제7조 (계약사항의 변경)\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n회원은 개인정보 관리 메뉴를 통해 언제든지 자신의 정보를 열람하고 수정할 수 있습니다. 회원의 정보가 변경된 경우 즉시 수정해야 하며, 수정하지 않아 발생하는 문제의 책임은 회원에게 있습니다.\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n제3장 개인정보 보호\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n제8조 (개인정보 보호의 원칙)\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n① 회원의 개인정보는 관련 법령에 따라 보호됩니다. ② 회사는 개인정보 보호와 관련된 세부 사항을 별도로 마련한 개인정보처리방침에 따라 관리하며, 이용자는 언제든지 해당 방침을 통해 개인정보 관리에 대한 자세한 내용을 확인할 수 있습니다.\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n제9조 (개인정보처리방침 준수)\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n① 회사는 Line truncated
[msg.userfront.signup.agreement]
title = "Agreement Title"
title = "Please review and agree to the terms to continue."
[msg.userfront.signup.auth]
affiliate_notice = "Affiliate Notice"
title = "Auth Title"
affiliate_notice = "If you are an affiliate employee, use your official company email address."
title = "Verify your email and phone number."
[msg.userfront.signup.email]
code_mismatch = "Code Mismatch"
duplicate = "Duplicate"
invalid = "Invalid"
send_failed = "Send Failed"
verified = "Verified"
verify_failed = "Verify Failed"
code_mismatch = "The verification code does not match."
duplicate = "This email address is already registered."
invalid = "Enter a valid email address."
send_failed = "Failed to send the email: {error}"
verified = "Email verified."
verify_failed = "Email verification failed: {error}"
[msg.userfront.signup.password]
length_required = "Length Required"
lowercase_required = "Lowercase Required"
mismatch = "Mismatch"
number_required = "Number Required"
symbol_required = "Symbol Required"
title = "Password Title"
uppercase_required = "Uppercase Required"
length_required = "Your password must be at least 12 characters long."
lowercase_required = "Include at least one lowercase letter."
mismatch = "The passwords do not match."
number_required = "Include at least one number."
symbol_required = "Include at least one symbol."
title = "Create a secure password to finish signing up."
uppercase_required = "Include at least one uppercase letter."
[msg.userfront.signup.password.rule]
lowercase = "Lowercase"
min_length = "Min Length"
min_types = "Min Types"
lowercase = "Lowercase letter"
min_length = "At least {count} characters"
min_types = "At least {count} character types"
number = "Number"
symbol = "Symbol"
uppercase = "Uppercase"
uppercase = "Uppercase letter"
[msg.userfront.signup.phone]
code_mismatch = "Code Mismatch"
send_failed = "Send Failed"
verified = "Verified"
verify_failed = "Verify Failed"
code_mismatch = "The verification code does not match."
send_failed = "Failed to send the SMS: {error}"
verified = "Phone number verified."
verify_failed = "Phone verification failed: {error}"
[msg.userfront.signup.policy]
loading = "Loading"
lowercase = "Lowercase"
min_length = "Min Length"
min_types = "Min Types"
loading = "Loading the password policy..."
lowercase = "Lowercase letter"
min_length = "At least {count} characters"
min_types = "At least {count} character types"
number = "Number"
summary = "Summary"
summary = "Security policy: {rules}"
symbol = "Symbol"
uppercase = "Uppercase"
uppercase = "Uppercase letter"
[msg.userfront.signup.profile]
affiliate_hint = "Affiliate Hint"
title = "Profile Title"
affiliate_hint = "This will be selected automatically when you use an affiliate email."
title = "Tell us about your affiliation."
[msg.userfront.signup.success]
body = "Body"
title = "Title"
body = "Your account has been created successfully."
title = "Sign-up complete"
[ui.common]
add = "Add"
@@ -426,19 +430,19 @@ ory = "Ory"
session = "Session"
[ui.userfront.dashboard]
last_auth_label = "Last Auth Label"
status_history = "Status History"
last_auth_label = "Last sign-in"
status_history = "Activity history"
[ui.userfront.dashboard.activity]
linked = "Linked"
[ui.userfront.dashboard.approved_session]
default = "Default"
userfront = "Userfront"
userfront = "Approved UserFront session ID"
[ui.userfront.dashboard.revoke]
confirm_button = "Confirm Button"
title = "Title"
confirm_button = "Disconnect"
title = "Disconnect app"
[ui.userfront.dashboard.scopes]
title = "Permission (Scopes)"
@@ -458,26 +462,29 @@ go_home = "Go Home"
go_login = "Go Login"
[ui.userfront.forgot]
heading = "Heading"
input_label = "Input Label"
submit = "Submit"
title = "Title"
heading = "Forgot your password?"
input_label = "Email address or phone number"
submit = "Send reset link"
title = "Reset password"
[ui.userfront.login]
forgot_password = "Forgot Password"
signup = "Signup"
signup = "Sign up"
[ui.userfront.login.action]
submit = "Submit"
submit = "Sign in"
[ui.userfront.login.field]
login_id = "Emain or Phone Number"
login_id = "Email address or phone number"
password = "Password"
[ui.userfront.login.link]
code_only = "Code Only"
resend_with_time = "Resend With Time"
action_label = "Go to sign-in"
code_only = "Get code only ({time})"
page_title = "Link sign-in"
resend_with_time = "Resend ({time})"
send = "Send"
title = "Link sign-in complete"
[ui.userfront.login.qr]
expired = "Expired"
@@ -485,29 +492,29 @@ refresh = "Refresh"
remaining = "Remaining: {time}"
[ui.userfront.login.short_code]
digits = "Digits"
expire_time = "Expire Time"
prefix = "Prefix"
submit = "Submit"
digits = "6 digits"
expire_time = "Expires in {time}"
prefix = "2 letters"
submit = "Sign in with code"
[ui.userfront.login.tabs]
link = "Link/Code"
link = "Sign-in link"
password = "Password"
qr = "QR Code"
[ui.userfront.login.unregistered]
action = "Action"
title = "Title"
action = "Create an account"
title = "Account not found"
[ui.userfront.login.verification]
action_label = "Confirm"
page_title = "Page Title"
title = "Title"
action_label = "Done"
page_title = "Sign-in approval"
title = "Approval complete"
[ui.userfront.login_success]
later = "Later"
qr = "QR"
title = "Title"
later = "Do this later (go to dashboard)"
qr = "Use QR approval"
title = "Sign-in complete"
[ui.userfront.consent]
accept = "Agree and continue"
@@ -526,7 +533,7 @@ qr_scan = "QR Scan"
[ui.userfront.profile]
department_empty = "Department Empty"
manage = "Manage"
manage = "Manage profile"
user_fallback = "User"
[ui.userfront.profile.field]
@@ -543,11 +550,11 @@ confirm = "Confirm"
current = "Current"
forgot = "Forgot"
new = "New"
title = "Title"
title = "Change password"
[ui.userfront.profile.phone]
code_hint = "Code Hint"
request_code = "Request Code"
code_hint = "6-digit code"
request_code = "Send code"
title = "Phone number"
[ui.userfront.profile.section]
@@ -556,67 +563,65 @@ organization = "Organization"
security = "Security"
[ui.userfront.qr]
camera_error = "Camera Error"
permission_error = "Permission Error"
permission_required = "Permission Required"
request_permission = "Allow camera access"
rescan = "Rescan"
result_success = "Result Success"
result_failure = "Approval failed"
result_success = "Approval complete"
title = "Scan QR Code"
[ui.userfront.reset]
confirm_password = "Confirm Password"
new_password = "New Password"
submit = "Submit"
subtitle = "Subtitle"
title = "Title"
subtitle = "Set a new password"
title = "Create a new password"
[ui.userfront.sections]
apps = "Apps"
audit = "Audit"
[ui.userfront.session]
active = "Active"
active = "Active session"
unknown = "Unknown"
[ui.userfront.signup]
complete = "Complete"
next_step = "Next Step"
title = "Title"
complete = "Finish sign-up"
next_step = "Next"
title = "Sign up"
[ui.userfront.signup.agreement]
all = "All"
privacy_title = "Privacy Title"
tos_title = "Tos Title"
all = "Agree to all"
privacy_title = "Privacy Policy (Required)"
tos_title = "Terms of Service (Required)"
[ui.userfront.signup.auth]
code_label = "Code Label"
request_code = "Request Code"
code_label = "6-digit verification code"
request_code = "Send code"
[ui.userfront.signup.auth.email]
label = "Label"
title = "Title"
label = "Email address"
title = "Email verification"
[ui.userfront.signup.password]
confirm_label = "Password Confirm"
label = "Password"
[ui.userfront.signup.phone]
label = "Label"
title = "Title"
label = "Phone number (no hyphens)"
title = "Phone verification"
[ui.userfront.signup.profile]
affiliation_type = "Affiliation Type"
company = "Company"
department = "Department"
department_optional = "Department Optional"
department_optional = "Department (optional)"
name = "Name"
[ui.userfront.signup.steps]
agreement = "Agreement"
agreement = "Terms"
password = "Password"
profile = "Profile"
verify = "Verify"
verify = "Verification"
[ui.userfront.signup.success]
action = "Action"
action = "Go to sign-in"
@@ -0,0 +1,106 @@
import 'dart:io';
import 'package:flutter_test/flutter_test.dart';
import 'package:toml/toml.dart';
const Set<String> _placeholderValues = {
'Action',
'Action Label',
'Approve Error',
'Approve Success',
'Body',
'Code Hint',
'Code Label',
'Confirm',
'Confirm Button',
'Description',
'Error',
'Heading',
'Input Label',
'Invalid',
'Label',
'Load Failed',
'Page Title',
'Request Code',
'Result Failure',
'Sent',
'Subtitle',
'Title',
'Update Success',
};
String? _readTomlValue(Map<String, dynamic> root, String key) {
dynamic cursor = root;
for (final part in key.split('.')) {
if (cursor is! Map<String, dynamic>) {
return null;
}
cursor = cursor[part];
}
return cursor is String ? cursor : null;
}
void main() {
test('critical english copy does not expose placeholder values', () {
final file = File('assets/translations/en.toml');
final document = TomlDocument.parse(file.readAsStringSync());
final translations = document.toMap();
const criticalKeys = <String>[
'ui.userfront.forgot.heading',
'ui.userfront.forgot.input_label',
'ui.userfront.forgot.title',
'msg.userfront.forgot.description',
'msg.userfront.forgot.sent',
'ui.userfront.login.link.action_label',
'ui.userfront.login.link.page_title',
'ui.userfront.login.link.title',
'ui.userfront.login.unregistered.action',
'ui.userfront.login.unregistered.title',
'ui.userfront.login.verification.action_label',
'ui.userfront.login.verification.page_title',
'ui.userfront.login.verification.title',
'msg.userfront.login.qr.load_failed',
'msg.userfront.login.short_code.invalid',
'msg.userfront.login.unregistered.body',
'ui.userfront.login_success.title',
'msg.userfront.login_success.subtitle',
'msg.userfront.profile.load_failed',
'msg.userfront.profile.update_success',
'ui.userfront.profile.password.title',
'ui.userfront.profile.phone.code_hint',
'msg.userfront.reset.invalid_body',
'msg.userfront.reset.invalid_title',
'ui.userfront.reset.subtitle',
'ui.userfront.reset.title',
'ui.userfront.signup.title',
'msg.userfront.signup.agreement.title',
'msg.userfront.signup.auth.title',
'ui.userfront.signup.auth.email.label',
'ui.userfront.signup.auth.email.title',
'msg.userfront.signup.password.title',
'msg.userfront.signup.profile.title',
'msg.userfront.signup.success.body',
'msg.userfront.signup.success.title',
'ui.userfront.signup.success.action',
];
final failures = <String>[];
for (final key in criticalKeys) {
final value = _readTomlValue(translations, key);
if (value == null || value.trim().isEmpty) {
failures.add('$key is missing');
continue;
}
if (_placeholderValues.contains(value.trim())) {
failures.add('$key uses placeholder "$value"');
}
}
expect(
failures,
isEmpty,
reason: failures.isEmpty ? null : failures.join('\n'),
);
});
}