From ab999c1e1649bd75e9e2f5e5c4dbcfcb0e513460 Mon Sep 17 00:00:00 2001 From: chan Date: Tue, 24 Mar 2026 17:12:24 +0900 Subject: [PATCH] =?UTF-8?q?i18n=20=EA=B2=80=EC=A6=9D=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tenants/routes/TenantProfilePage.tsx | 2 +- locales/en.toml | 1053 +++++++++-------- 2 files changed, 590 insertions(+), 465 deletions(-) diff --git a/adminfront/src/features/tenants/routes/TenantProfilePage.tsx b/adminfront/src/features/tenants/routes/TenantProfilePage.tsx index 6d186c62..75683569 100644 --- a/adminfront/src/features/tenants/routes/TenantProfilePage.tsx +++ b/adminfront/src/features/tenants/routes/TenantProfilePage.tsx @@ -230,7 +230,7 @@ export function TenantProfilePage() {

{t( "ui.admin.tenants.profile.form.parent_help", - "가족사 테넌트나 하위 조직을 종속시킬 경우 상위 테넌트를 선택해주세요.", + "하위 조직을 종속시킬 경우 상위 테넌트를 선택해주세요.", )}

diff --git a/locales/en.toml b/locales/en.toml index 4148e964..e1002e87 100644 --- a/locales/en.toml +++ b/locales/en.toml @@ -1,5 +1,4 @@ -[test] -key = "Test" +[domain] [domain.affiliation] affiliate = "Affiliate" @@ -19,6 +18,8 @@ company_group = "Company Group" personal = "Personal" user_group = "User Group" +[err] + [err.common] unknown = "An unknown error occurred." @@ -40,103 +41,7 @@ rate_limited = "Too many requests. Please try again later." service_unavailable = "The authentication service is currently unavailable." slow_down = "Requests are too frequent. Please try again shortly." -[msg.admin] -idp_env_prod = "IDP env: prod" -logout_confirm = "Are you sure you want to log out?" -scope_admin = "Scoped to /admin" -session_ttl = "Session TTL: 15m admin" -tenant_headers = "Tenant-aware headers" - -[msg.common] -error = "Error" -loading = "Loading..." -no_description = "No Description." -parsing = "Parsing data..." -requesting = "Requesting..." -saving = "Saving..." -unknown_error = "unknown error" -copied_to_clipboard = "Copied to clipboard." -forbidden = "Access Denied." - -[msg.dev] -logout_confirm = "Are you sure you want to log out?" - -[msg.info] -saved_success = "Saved successfully." - -[msg.userfront] -greeting = "Greeting" - -[ui.admin] -brand = "Brand" -dev_role_switcher = "🛠 DEV Role Switcher" -title = "Admin Control" - -[ui.common] -add = "Add" -all = "All" -admin_only = "Admin Only" -assign = "Assign" -back = "Back" -back_to_login = "Back to login" -cancel = "Cancel" -change_file = "Change File" -clear_search = "Clear Search" -close = "Close" -collapse = "Collapse" -confirm = "Confirm" -copy = "Copy" -create = "Create" -delete = "Delete" -details = "Details" -edit = "Edit" -export = "Export" -fail = "Fail" -go_home = "Go Home" -view = "View" -hyphen = "-" -manage = "Manage" -na = "N/A" -never = "Never" -next = "Next" -none = "None" -page_of = "Page {{page}} of {{total}}" -prev = "Prev" -previous = "Previous" -qr = "QR" -reset = "Reset" -read_only = "Read Only" -refresh = "Refresh" -remove = "Remove" -resend = "Resend" -retry = "Retry" -save = "Save" -search = "Search" -select = "Select" -select_file = "Select File" -select_placeholder = "Select Placeholder" -show_more = "Show More" -language = "Language" -language_ko = "Korean" -language_en = "English" -success = "Success" -theme_dark = "Dark" -theme_light = "Light" -theme_toggle = "Theme Toggle" -unknown = "Unknown" -generate = "Generate" - -[ui.dev] -brand = "Brand" -console_title = "Developer Console" -env_badge = "Env: dev" -scope_badge = "Scoped to /dev" - -[ui.userfront] -app_title = "Baron SW Portal" - -[non.existent] -key = "Non-existent key" +[err.userfront] [err.userfront.auth_proxy] consent_accept = "Consent Accept" @@ -158,374 +63,19 @@ verify_code_failed = "Verify Code Failed" [err.userfront.session] missing = "Missing" +[msg] + +[msg.admin] +idp_env_prod = "IDP env: prod" +logout_confirm = "Are you sure you want to log out?" +scope_admin = "Scoped to /admin" +session_ttl = "Session TTL: 15m admin" +tenant_headers = "Tenant-aware headers" + [msg.admin.common] forbidden = "You do not have permission to perform this action." -[msg.admin.audit] -empty = "Empty" -end = "End of audit feed" -load_error = "Error loading logs: {{error}}" -loading = "Loading audit logs..." -subtitle = "Subtitle" - -[msg.admin.header] -subtitle = "Tenant isolation & least privilege by default" - -[msg.admin.notice] -idp_policy = "IDP Policy" -scope = "Scope" - -[msg.admin.org] -hover_member_info = "Hover to see member details." -import_description = "Upload a CSV file to bulk register the organization chart." -import_error = "An error occurred during organization chart import." -import_success = "Organization chart imported successfully." - -[msg.admin.overview] -description = "Description" -idp_fallback = "Fallback: Descope" -idp_primary = "IDP: Ory primary" - -[msg.admin.tenants] -approve_confirm = "Approve Confirm" -approve_success = "Approve Success" -delete_confirm = "Delete Tenant \"{{name}}\"?" -delete_success = "Tenant deleted." -empty = "Empty" -fetch_error = "Fetch Error" -missing_id = "No Tenant ID." -not_found = "Tenant not found." -remove_sub_confirm = "Remove tenant \"{{name}}\" from sub-tenants?" -subtitle = "Subtitle" - -[msg.dev.auth] -access_denied_description = "DevFront is for administrators only. Request access from your administrator." -access_denied_title = "Access denied." - -[msg.dev.forbidden] -default = "You do not have permission to access this resource. Please contact an administrator." -rp_admin = "RP administrators can only access resources for the apps they manage." -tenant_admin = "Tenant administrator permissions are not configured correctly or have expired." -user = "Regular users cannot access the developer console." -title = "Access Denied: {{resource}}" - -[msg.dev.audit] -empty = "No audit logs found." -forbidden = "You do not have permission to view audit logs. Please request access from an administrator." -load_error = "Error loading audit logs: {{error}}" -loaded_count = "Loaded {{count}} rows" -loading = "Loading audit logs..." -subtitle = "Shows DevFront activity history within current tenant/app scope." - -[msg.dev.clients] -load_error = "Error loading clients: {{error}}" -loading = "Loading apps..." -showing = "Showing {{shown}} of {{total}} apps" -deleted = "App deleted." -delete_error = "Failed to delete: {{error}}" -delete_confirm = "Are you sure you want to delete this app? This action cannot be undone." - -[msg.dev.sidebar] -notice = "Developer Console" -notice_detail = "Register and manage client applications." - -[msg.userfront.audit] -date = "Date" -device = "Device" -end = "End" -ip = "Ip" -load_more_error = "Load More Error" -result = "Result" -session_id = "Session ID: {{value}}" -status = "Status" - -[msg.userfront.dashboard] -approved_device = "Approved Device" -approved_ip = "Approve IP: {{ip}}" -audit_empty = "Audit Empty" -audit_load_error = "Audit Load Error" -render_error = "Dashboard render error: {{error}}" -auth_method = "Auth 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" - -[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.forgot] -description = "Description" -dry_send = "Dry Send" -error = "Error" -input_required = "Input Required" -sent = "Sent" - -[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" -link_timeout = "Time expired." -no_account = "New to Baron?" -oidc_failed = "OIDC Failed" -qr_expired = "Time expired." -qr_init_failed = "QR Init Failed" -qr_login_required = "QR Login Required" -token_missing = "Token Missing" -verification_failed = "Verification Failed" - -[msg.userfront.login_success] -subtitle = "Subtitle" - -[msg.userfront.consent] -accept_error = "Failed to process consent: {{error}}" -client_id = "Client ID: {{id}}" -client_unknown = "Unknown application" -description = "The service below is requesting access to your account information.\nPlease choose whether to continue." -load_error = "Failed to load consent information: {{error}}" -missing_redirect = "Consent was processed, but the redirect URL was missing." -redirect_notice = "After consent, you will be redirected automatically." -scope_count = "Total {{count}}" - -[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" - -[msg.userfront.qr] -camera_error = "Camera Error" -permission_error = "Permission Error" -permission_required = "Permission Required" - -[msg.userfront.reset] -invalid_body = "Invalid Body" -invalid_link = "Invalid Link" -invalid_title = "Invalid Title" -policy_loading = "Policy Loading" -success = "Success" - -[msg.userfront.sections] -apps_subtitle = "Apps Subtitle" -audit_subtitle = "Audit Subtitle" - -[msg.userfront.settings] -disabled = "Disabled" - -[msg.userfront.signup] -failed = "Failed" -privacy_full = "Privacy Full" -tos_full = "Tos Full" - -[ui.admin.audit] -export_csv = "Export CSV" -load_more = "Load more" -target = "Target · {{target}}" -title = "Title" - -[ui.admin.groups] -import_csv = "Import Csv" - -[ui.admin.header] -plane = "Admin Plane" - -[ui.admin.nav] -api_keys = "API Keys" -audit_logs = "Audit Logs" -auth_guard = "Auth Guard" -logout = "Logout" -overview = "Overview" -relying_parties = "Apps (RP)" -tenant_dashboard = "Tenant Dashboard" -user_groups = "User Groups" -tenants = "Tenants" -users = "Users" - -[ui.admin.org] -download_template = "Download Template" -import_btn = "Import" -import_title = "Bulk Organization Import" -start_import = "Start Import" - -[ui.admin.overview] -kicker = "Global Overview" -title = "Tenant-independent control plane" - -[ui.admin.profile] -manageable_tenants = "Manageable Tenants" - -[ui.admin.role] -rp_admin = "RP ADMIN" -super_admin = "SUPER ADMIN" -tenant_admin = "TENANT ADMIN" -user = "TENANT MEMBER" - -[ui.admin.tenants] -add = "Add Tenant" -title = "Tenant Registry" - -[ui.common.badge] -admin_only = "Admin only" -command_only = "Command only" -system = "System" - -[ui.common.status] -active = "Active" -blocked = "Blocked" -failure = "Failure" -inactive = "Inactive" -ok = "Ok" -pending = "Pending" -success = "Success" - -[ui.dev.nav] -clients = "Connected Application" -logout = "Logout" - -[ui.dev.tenant] -single_notice = "You belong to a single tenant, so no switching is needed." -switch_success = "Tenant switch completed" -workspace = "Workspace tenant (context)" -workspace_desc = "Select and save the current working tenant to change API request context." - -[ui.dev.audit] -load_more = "Load more" -title = "Audit Logs" - -[ui.dev.profile] -menu_aria = "Open account menu" -menu_title = "Account" -unknown_email = "unknown@example.com" -unknown_name = "Unknown User" -title = "My Profile" -subtitle = "View user details and assigned roles." -loading = "Loading profile..." -error = "Failed to load profile." - -[ui.dev.clients] -new = "Add Connected Application" -search_placeholder = "Search by app name or ID..." -tenant_scoped = "Tenant-scoped" -untitled = "Untitled" - -[ui.dev.dashboard] -ready_badge = "devfront ready" - -[ui.dev.header] -plane = "Dev Plane" -subtitle = "Manage your applications" - -[ui.dev.session] -active = "Checking expiration..." -unknown = "Unknown" -expired = "Session expired" -expiring = "Expiring soon: {{minutes}}m {{seconds}}s left" -remaining = "Expires in: {{minutes}}m {{seconds}}s" -refresh = "Refresh session expiry" -refreshing = "Refreshing session expiry..." - -[ui.userfront.app_label] -admin_console = "Admin Console" -baron = "Baron" -dev_console = "Dev Console" - -[ui.userfront.auth_method] -ory = "Ory" -session = "Session" - -[ui.userfront.dashboard] -last_auth_label = "Last Auth Label" -status_history = "Status History" - -[ui.userfront.device] -android = "Mobile(Android)" -ios = "Mobile(iOS)" -linux = "Desktop(Linux)" -macos = "Desktop(macOS)" -windows = "Desktop(Windows)" - -[ui.userfront.error] -go_home = "Go Home" -go_login = "Go Login" - -[ui.userfront.forgot] -heading = "Heading" -input_label = "Input Label" -submit = "Submit" -title = "Title" - -[ui.userfront.login] -forgot_password = "Forgot Password" -signup = "Signup" - -[ui.userfront.login_success] -later = "Later" -qr = "QR" -title = "Title" - -[ui.userfront.consent] -accept = "Agree and continue" -requested_scopes = "Requested permissions" -title = "Permission request" - -[ui.userfront.nav] -dashboard = "Dashboard" -logout = "Logout" -profile = "Profile" -qr_scan = "QR Scan" - -[ui.userfront.profile] -department_empty = "Department Empty" -manage = "Manage" -user_fallback = "User" - -[ui.userfront.qr] -camera_error = "Camera Error" -permission_error = "Permission Error" -permission_required = "Permission Required" -rescan = "Rescan" -result_success = "Result Success" -title = "Scan QR Code" - -[ui.userfront.reset] -confirm_password = "Confirm Password" -new_password = "New Password" -submit = "Submit" -subtitle = "Subtitle" -title = "Title" - -[ui.userfront.sections] -apps = "Apps" -audit = "Audit" - -[ui.userfront.session] -active = "Active" -unknown = "Unknown" - -[ui.userfront.signup] -complete = "Complete" -next_step = "Next Step" -title = "Title" +[msg.admin.api_keys] [msg.admin.api_keys.create] error = "Error" @@ -535,18 +85,36 @@ scopes_count = "Scopes Count" scopes_hint = "Scopes Hint" subtitle = "Subtitle" +[msg.admin.api_keys.create.success] +copy_hint = "Copy Hint" +notice = "Notice" +notice_emphasis = "Notice Emphasis" +notice_suffix = "Notice Suffix" + [msg.admin.api_keys.list] delete_confirm = "Delete Confirm" empty = "Empty" fetch_error = "Fetch Error" subtitle = "Subtitle" +[msg.admin.api_keys.list.registry] +count = "Count" + +[msg.admin.audit] +empty = "Empty" +end = "End of audit feed" +load_error = "Error loading logs: {{error}}" +loading = "Loading audit logs..." +subtitle = "Subtitle" + [msg.admin.audit.filters] empty = "Empty" [msg.admin.audit.registry] count = "Count" +[msg.admin.groups] + [msg.admin.groups.create] description = "Adds a new organization unit such as a department or team." title = "Create New Organization Unit" @@ -581,6 +149,24 @@ empty = "Empty" remove_confirm = "Are you sure you want to revoke this role?" remove_success = "Role revoked successfully." +[msg.admin.header] +subtitle = "Tenant isolation & least privilege by default" + +[msg.admin.notice] +idp_policy = "IDP Policy" +scope = "Scope" + +[msg.admin.org] +hover_member_info = "Hover to see member details." +import_description = "Upload a CSV file to bulk register the organization chart." +import_error = "An error occurred during organization chart import." +import_success = "Organization chart imported successfully." + +[msg.admin.overview] +description = "Description" +idp_fallback = "Fallback: Descope" +idp_primary = "IDP: Ory primary" + [msg.admin.overview.playbook] description = "Description" idp_body = "IDP Body" @@ -597,6 +183,18 @@ oidc_clients = "OIDC Clients" policy_gate = "Policy Gate Status" total_tenants = "Total Tenants" +[msg.admin.tenants] +approve_confirm = "Approve Confirm" +approve_success = "Approve Success" +delete_confirm = "Delete Tenant \"{{name}}\"?" +delete_success = "Tenant deleted." +empty = "Empty" +fetch_error = "Fetch Error" +missing_id = "No Tenant ID." +not_found = "Tenant not found." +remove_sub_confirm = 'Remove tenant "{{name}}" from sub-tenants?' +subtitle = "Subtitle" + [msg.admin.tenants.admins] add_success = "Add Success" empty = "Empty" @@ -618,6 +216,16 @@ remove_self = "Cannot remove yourself." [msg.admin.tenants.create] subtitle = "Subtitle" +[msg.admin.tenants.create.form] +domains_help = "Users with these email domains will be automatically assigned to this tenant." + +[msg.admin.tenants.create.memo] +body = "Body" +subtitle = "Subtitle" + +[msg.admin.tenants.create.profile] +subtitle = "Subtitle" + [msg.admin.tenants.members] desc = "View the list of users belonging to this organization." empty = "No members found." @@ -638,6 +246,8 @@ forbidden_desc = "Only administrators can access user schema settings." empty = "Empty" subtitle = "Subtitle" +[msg.admin.users] + [msg.admin.users.bulk] delete_confirm = "Are you sure you want to delete the selected {{count}} users?" delete_success = "{{count}} users have been deleted." @@ -655,6 +265,22 @@ error = "Failed to User Create." password_required = "Password Required" success = "User created successfully." +[msg.admin.users.create.account] +subtitle = "Subtitle" + +[msg.admin.users.create.form] +email_required = "Email Required" +field_invalid = "Invalid {{label}} format." +field_required = "{{label}} is required." +name_required = "Name Required" +password_auto_help = "Password Auto Help" +password_manual_help = "Password Manual Help" +role_help = "Role Help" + +[msg.admin.users.create.password_generated] +default = "Default" +with_email = "With Email" + [msg.admin.users.detail] edit_subtitle = "Edit Subtitle" not_found = "Not Found" @@ -662,12 +288,67 @@ update_error = "Failed to User Edit." update_success = "Update Success" password_generated = "A secure password has been generated." +[msg.admin.users.detail.form] +field_required = "Required." +name_required = "Name Required" + +[msg.admin.users.detail.security] +password_hint = "Password Hint" + [msg.admin.users.list] delete_confirm = "Delete Confirm" empty = "Empty" fetch_error = "Fetch Error" subtitle = "Subtitle" +[msg.admin.users.list.columns] +description = "Select columns to display in the table." +no_custom = "No custom fields defined for this tenant." + +[msg.admin.users.list.registry] +count = "Count" + +[msg.common] +error = "Error" +loading = "Loading..." +no_description = "No Description." +parsing = "Parsing data..." +requesting = "Requesting..." +saving = "Saving..." +unknown_error = "unknown error" +copied_to_clipboard = "Copied to clipboard." +forbidden = "Access Denied." + +[msg.dev] +logout_confirm = "Are you sure you want to log out?" + +[msg.dev.auth] +access_denied_description = "DevFront is for administrators only. Request access from your administrator." +access_denied_title = "Access denied." + +[msg.dev.forbidden] +default = "You do not have permission to access this resource. Please contact an administrator." +rp_admin = "RP administrators can only access resources for the apps they manage." +tenant_admin = "Tenant administrator permissions are not configured correctly or have expired." +user = "Regular users cannot access the developer console." +title = "Access Denied: {{resource}}" + +[msg.dev.audit] +empty = "No audit logs found." +forbidden = "You do not have permission to view audit logs. Please request access from an administrator." +load_error = "Error loading audit logs: {{error}}" +loaded_count = "Loaded {{count}} rows" +loading = "Loading audit logs..." +subtitle = "Shows DevFront activity history within current tenant/app scope." + +[msg.dev.clients] +load_error = "Error loading clients: {{error}}" +loading = "Loading apps..." +showing = "Showing {{shown}} of {{total}} apps" +deleted = "App deleted." +delete_error = "Failed to delete: {{error}}" +delete_confirm = "Are you sure you want to delete this app? This action cannot be undone." + [msg.dev.clients.consents] empty = "No consents found." load_error = "Error loading consents: {{error}}" @@ -691,6 +372,13 @@ secret_rotated = "Secret Rotated" secret_unavailable = "SECRET_NOT_AVAILABLE" subtitle = "Subtitle" +[msg.dev.clients.details.redirect] +description = "Description" + +[msg.dev.clients.details.security] +footer = "Footer" +note = "Note" + [msg.dev.clients.general] load_error = "Error loading client: {{error}}" loading = "Loading client..." @@ -703,6 +391,22 @@ subtitle = "Manage external identity providers for this application." add_subtitle = "Connect an external OIDC provider." empty = "No IdP configurations found." +[msg.dev.clients.general.identity] +logo_help = "Logo Help" +subtitle = "Subtitle" + +[msg.dev.clients.general.redirect] +help = "Enter the redirect URIs. You can modify them in the Federation tab after creation." + +[msg.dev.clients.general.scopes] +empty = "Empty" +subtitle = "Subtitle" + +[msg.dev.clients.general.security] +private_help = "Server side App: For apps that can safely store a client secret, such as Node.js or Java servers." +pkce_help = "PKCE App (SPA/Mobile): For apps that cannot safely store a client secret. PKCE is mandatory." +subtitle = "Select application type. Security level determines authentication method." + [msg.dev.clients.help] docs_body = "Includes PKCE, client_secret_basic, redirect URI validation tips." subtitle = "Developer guides for Confidential/Public clients, redirect URIs, and auth methods." @@ -715,6 +419,8 @@ email = "Email" openid = "Openid" profile = "Profile" +[msg.dev.dashboard] + [msg.dev.dashboard.hero] body = "Body" title_emphasis = "Title Emphasis" @@ -1052,10 +758,35 @@ section_scopes = "Section Scopes" submit = "Submit" title = "Title" +[ui.admin.api_keys.create.success] +copy_secret = "Copy Secret" +go_list = "Go List" +title = "Title" + [ui.admin.api_keys.list] add = "Add" title = "Title" +[ui.admin.api_keys.list.breadcrumb] +list = "List" +section = "API Keys" + +[ui.admin.api_keys.list.registry] +title = "API Key Registry" + +[ui.admin.api_keys.list.table] +actions = "ACTIONS" +client_id = "CLIENT ID" +last_used = "LAST USED" +name = "NAME" +scopes = "SCOPES" + +[ui.admin.audit] +export_csv = "Export CSV" +load_more = "Load more" +target = "Target · {{target}}" +title = "Title" + [ui.admin.audit.breadcrumb] logs = "Logs" section = "Audit" @@ -1095,6 +826,9 @@ request = "REQUEST" status = "STATUS" time = "TIME" +[ui.admin.groups] +import_csv = "Import Csv" + [ui.admin.groups.create] description = "Adds a new organization unit such as a department or team." title = "Title" @@ -1121,11 +855,43 @@ unit_level_placeholder = "Unit Level Placeholder" [ui.admin.groups.list] title = "User Groups" +[ui.admin.groups.members] + +[ui.admin.groups.members.table] +email = "Email" +name = "Name" +remove = "Remove" + [ui.admin.groups.table] actions = "ACTIONS" members = "MEMBERS" name = "NAME" +[ui.admin.header] +plane = "Admin Plane" + +[ui.admin.nav] +api_keys = "API Keys" +audit_logs = "Audit Logs" +auth_guard = "Auth Guard" +logout = "Logout" +overview = "Overview" +relying_parties = "Apps (RP)" +tenant_dashboard = "Tenant Dashboard" +user_groups = "User Groups" +tenants = "Tenants" +users = "Users" + +[ui.admin.org] +download_template = "Download Template" +import_btn = "Import" +import_title = "Bulk Organization Import" +start_import = "Start Import" + +[ui.admin.overview] +kicker = "Global Overview" +title = "Tenant-independent control plane" + [ui.admin.overview.playbook] title = "Admin playbook" @@ -1142,6 +908,19 @@ oidc_clients = "OIDC Clients" policy_gate = "Policy Gate" total_tenants = "Total Tenants" +[ui.admin.profile] +manageable_tenants = "Manageable Tenants" + +[ui.admin.role] +rp_admin = "RP ADMIN" +super_admin = "SUPER ADMIN" +tenant_admin = "TENANT ADMIN" +user = "TENANT MEMBER" + +[ui.admin.tenants] +add = "Add Tenant" +title = "Tenant Registry" + [ui.admin.tenants.admins] add_button = "Add Button" already_admin = "Already Admin" @@ -1174,6 +953,28 @@ section = "Tenants" [ui.admin.tenants.create] title = "Tenant Add" +[ui.admin.tenants.create.breadcrumb] +action = "Create" +section = "Tenants" + +[ui.admin.tenants.create.form] +description = "Description" +domains_label = "Allowed Domains (Comma separated)" +domains_placeholder = "example.com, example.kr" +name = "Tenant name" +name_placeholder = "Enter tenant name" +parent = "Parent" +slug = "Slug" +slug_placeholder = "tenant-slug" +status = "Status" +type = "Type" + +[ui.admin.tenants.create.memo] +title = "Title" + +[ui.admin.tenants.create.profile] +title = "Tenant Profile" + [ui.admin.tenants.detail] breadcrumb_list = "Tenant List" header_subtitle = "Header Subtitle" @@ -1197,6 +998,12 @@ title = "Tenant Members ({{count}})" total = "Total" total_label = "Total" +[ui.admin.tenants.members.table] +email = "EMAIL" +name = "NAME" +role = "ROLE" +status = "STATUS" + [ui.admin.tenants.profile] allowed_domains = "Allowed Domains" allowed_domains_help = "Users with these email domains will be automatically assigned to this tenant." @@ -1217,6 +1024,23 @@ add_field = "Add Field" save = "Save Schema" title = "User Schema Extension" +[ui.admin.tenants.schema.field] +admin_only = "Admin Only" +key = "Field Key (ID)" +key_placeholder = "e.g. employee_id" +label = "Display Label" +label_placeholder = "Label Placeholder" +required = "Required" +type = "Type" +type_boolean = "Boolean" +type_date = "Date" +type_number = "Number" +type_text = "Text" +validation_placeholder = "Regex Pattern (Optional)" +type_datetime = "DateTime" +type_float = "Float" +unsigned = "Unsigned" + [ui.admin.tenants.sub] add = "Add" add_dialog_desc = "Select a tenant to add as a sub-tenant." @@ -1228,6 +1052,12 @@ search_placeholder = "Search..." title = "Sub-tenants ({{count}})" tree_search_placeholder = "Search in tree..." +[ui.admin.tenants.sub.table] +action = "ACTION" +name = "NAME" +slug = "SLUG" +status = "STATUS" + [ui.admin.tenants.table] actions = "ACTIONS" members = "Members" @@ -1237,6 +1067,8 @@ status = "STATUS" type = "TYPE" updated = "UPDATED" +[ui.admin.users] + [ui.admin.users.bulk] do_move = "Execute Move" download_template = "Download Template" @@ -1256,12 +1088,73 @@ go_list = "Go List" submit = "User Create" title = "User Add" +[ui.admin.users.create.account] +title = "Title" + +[ui.admin.users.create.breadcrumb] +new = "New" +section = "Users" + +[ui.admin.users.create.custom_fields] +title = "Title" + +[ui.admin.users.create.form] +auto_password = "Auto Password" +department = "Department" +department_placeholder = "Department Placeholder" +email = "Email" +email_placeholder = "user@example.com" +job_title = "Job Title" +job_title_placeholder = "e.g. Frontend Developer" +name = "Name" +name_placeholder = "Name Placeholder" +password = "Password" +password_placeholder = "********" +phone = "Phone number" +phone_placeholder = "010-1234-5678" +position = "Position" +position_placeholder = "e.g. Senior" +role = "Role" +tenant = "Tenant" +tenant_global = "Tenant Global" + +[ui.admin.users.create.password_generated] +title = "Title" + [ui.admin.users.detail] back = "Back" edit_title = "Edit Title" title = "User Details" generate_password = "Auto Generate" +[ui.admin.users.detail.breadcrumb] +section = "Users" + +[ui.admin.users.detail.custom_fields] +multi_title = "Per-tenant Profile Management" + +[ui.admin.users.detail.form] +department = "Department" +department_placeholder = "Department Placeholder" +name = "Name" +name_placeholder = "Name Placeholder" +phone = "Phone number" +phone_placeholder = "010-1234-5678" +role = "Role" +status = "Status" +tenant = "Representative Affiliated Tenant" +tenant_global = "Tenant Global" + +[ui.admin.users.detail.security] +password = "Password" +password_placeholder = "Password Placeholder" +title = "Security Settings" + +[ui.admin.users.detail.tenants_section] +additional = "Additional Affiliated/Manageable Tenants" +primary = "Representative Affiliated Tenant" +title = "Affiliation & Organization Info" + [ui.admin.users.list] add = "User Add" bulk_import = "Bulk Import" @@ -1271,11 +1164,127 @@ search_placeholder = "Search Placeholder" subtitle = "Subtitle" title = "User Manage" +[ui.admin.users.list.breadcrumb] +list = "List" +section = "Users" + +[ui.admin.users.list.columns] +title = "Column Settings" + +[ui.admin.users.list.filter] +tenant = "Tenant Filter" + +[ui.admin.users.list.registry] +count = "Count" +title = "User Registry" + +[ui.admin.users.list.table] +actions = "ACTIONS" +created = "CREATED" +name_email = "NAME / EMAIL" +role = "ROLE" +status = "STATUS" +tenant_dept = "TENANT / DEPT" + [ui.admin.users.table] email = "Email" name = "Name" role = "Role" +[ui.common] +add = "Add" +all = "All" +admin_only = "Admin Only" +assign = "Assign" +back = "Back" +back_to_login = "Back to login" +cancel = "Cancel" +change_file = "Change File" +clear_search = "Clear Search" +close = "Close" +collapse = "Collapse" +confirm = "Confirm" +copy = "Copy" +create = "Create" +delete = "Delete" +details = "Details" +edit = "Edit" +export = "Export" +fail = "Fail" +go_home = "Go Home" +view = "View" +hyphen = "-" +manage = "Manage" +na = "N/A" +never = "Never" +next = "Next" +none = "None" +page_of = "Page {{page}} of {{total}}" +prev = "Prev" +previous = "Previous" +qr = "QR" +reset = "Reset" +read_only = "Read Only" +refresh = "Refresh" +remove = "Remove" +resend = "Resend" +retry = "Retry" +save = "Save" +search = "Search" +select = "Select" +select_file = "Select File" +select_placeholder = "Select Placeholder" +show_more = "Show More" +language = "Language" +language_ko = "Korean" +language_en = "English" +success = "Success" +theme_dark = "Dark" +theme_light = "Light" +theme_toggle = "Theme Toggle" +unknown = "Unknown" +generate = "Generate" + +[ui.common.badge] +admin_only = "Admin only" +command_only = "Command only" +system = "System" + +[ui.common.status] +active = "Active" +blocked = "Blocked" +failure = "Failure" +inactive = "Inactive" +ok = "Ok" +pending = "Pending" +success = "Success" + +[test] +key = "Test" + +[non.existent] +key = "Non-existent key" + +[ui.dev] +brand = "Brand" +console_title = "Developer Console" +env_badge = "Env: dev" +scope_badge = "Scoped to /dev" + +[ui.dev.nav] +clients = "Connected Application" +logout = "Logout" + +[ui.dev.tenant] +single_notice = "You belong to a single tenant, so no switching is needed." +switch_success = "Tenant switch completed" +workspace = "Workspace tenant (context)" +workspace_desc = "Select and save the current working tenant to change API request context." + +[ui.dev.audit] +load_more = "Load more" +title = "Audit Logs" + [ui.dev.audit.registry] title = "Audit registry" @@ -1291,6 +1300,16 @@ status = "Status" target = "Target" time = "Time" +[ui.dev.profile] +menu_aria = "Open account menu" +menu_title = "Account" +unknown_email = "unknown@example.com" +unknown_name = "Unknown User" +title = "My Profile" +subtitle = "View user details and assigned roles." +loading = "Loading profile..." +error = "Failed to load profile." + [ui.dev.profile.tab] basic = "Basic Info" role = "Roles & Permissions" @@ -1312,6 +1331,12 @@ title = "System Role" description = "The permission level granted to this account." current = "Current Role" +[ui.dev.clients] +new = "Add Connected Application" +search_placeholder = "Search by app name or ID..." +tenant_scoped = "Tenant-scoped" +untitled = "Untitled" + [ui.dev.clients.badge] admin_session = "Admin Session" tenant_selected = "Tenant Selected" @@ -1333,6 +1358,59 @@ status_revoked = "Revoked" subject = "Subject" title = "User Consent Grants" +[ui.dev.clients.consents.breadcrumb] +clients = "Clients" +current = "User Consent Grants" +home = "Home" + +[ui.dev.clients.consents.filters] +advanced = "Advanced Filters" + +[ui.dev.clients.consents.stats] +active_grants = "Active Grants" +avg_scopes = "Avg. Scopes per User" +total_scopes = "Total Scopes Issued" + +[ui.dev.clients.consents.table] +action = "Action" +first_granted = "First Granted" +last_auth = "Last Authenticated" +scopes = "Granted Scopes" +status = "Status" +tenant = "Tenant" +user = "User" + +[ui.dev.clients.details] + +[ui.dev.clients.details.credentials] +client_id = "Client ID" +client_secret = "Client Secret" +title = "Client Credentials" + +[ui.dev.clients.details.endpoints] +read_only = "Read Only" +title = "OIDC Endpoints" + +[ui.dev.clients.details.redirect] +callback_label = "Callback Label" +label = "Redirect URIs" +placeholder = "https://your-app.com/callback, http://localhost:3000/auth/callback" +save = "Save" +title = "Redirection Settings" + +[ui.dev.clients.details.secret] +hide = "Hide" +rotate = "Rotate" +show = "Show" + +[ui.dev.clients.details.security] +title = "Security Note" + +[ui.dev.clients.details.tab] +connection = "Federation" +consents = "Consent & Users" +settings = "Settings" + [ui.dev.clients.general] create = "Create Application" display_new = "Add Connected Application" @@ -1344,6 +1422,37 @@ title = "Identity Federation" add_title = "Add Identity Provider" add_btn = "Add Provider" +[ui.dev.clients.general.identity] +description = "Description" +description_placeholder = "Description Placeholder" +logo = "App Logo URL" +logo_placeholder = "https://example.com/logo.png" +logo_preview = "Logo Preview" +name = "Name" +name_placeholder = "My Awesome Application" +title = "Application Identity" + +[ui.dev.clients.general.redirect] +label = "Redirect URIs" +placeholder = "Placeholder" + +[ui.dev.clients.general.scopes] +add = "Scope Add" +description_placeholder = "Description Placeholder" +name_placeholder = "e.g. profile" +title = "Scopes" + +[ui.dev.clients.general.scopes.table] +description = "Description" +mandatory = "Mandatory" +name = "Scope Name" +delete = "Delete" + +[ui.dev.clients.general.security] +private = "Server Side App" +pkce = "PKCE" +title = "Security Settings" + [ui.dev.clients.help] docs_body = "Includes PKCE, client_secret_basic, redirect URI validation tips." docs_title = "Docs & Examples" @@ -1385,6 +1494,9 @@ type = "Type" pkce = "PKCE" private = "Server side App" +[ui.dev.dashboard] +ready_badge = "devfront ready" + [ui.dev.dashboard.badge] consent_guard = "Consent guard ready" policy_toggle = "Policy toggle enabled" @@ -1398,6 +1510,15 @@ title = "Next actions" subtitle = "Subtitle" title = "Ops board" +[ui.dev.dashboard.ops.card] +consent_revoked = "Consent Revoked" +hydra_status = "Hydra Status" +rp_requests = "Rp Requests" + +[ui.dev.dashboard.ops.tag] +consent = "Consent grants" +rp_status = "RP status" + [ui.dev.dashboard.stack] notes = "Setup notes" subtitle = "Devfront baseline" @@ -1639,3 +1760,7 @@ verify = "Verification" [ui.userfront.signup.success] action = "Go to sign-in" + +[ui.admin.tenants.profile.form] +parent = "Parent Tenant (Optional)" +parent_help = "Select a parent tenant if this is a subsidiary or sub-organization."