Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
321 changes: 321 additions & 0 deletions src/lib/i18n/ko.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,34 @@
"logout": "로그아웃",
"admin": "관리자"
},
"common": {
"name": "이름",
"code": "코드",
"description": "설명",
"status": "상태",
"actions": "작업",
"created": "생성",
"add": "추가",
"cancel": "취소",
"save": "저장",
"edit": "수정",
"delete": "삭제",
"confirm_delete": "삭제하시겠습니까?",
"none": "없음",
"all": "전체",
"apply": "적용",
"reset": "초기화",
"collapse": "접기",
"expand": "편집",
"status_active": "활성",
"status_inactive": "비활성",
"status_disabled": "비활성",
"status_locked": "잠김",
"primary_member": "주소속",
"remove": "제거",
"change": "변경",
"saving": "저장되었습니다."
},
"login": {
"username": "아이디",
"password": "비밀번호",
Expand All @@ -32,5 +60,298 @@
"profile": "내 프로필",
"mfa": "2단계 인증",
"passkeys": "패스키"
},
"logout": {
"in_progress": "로그아웃 중..."
},
"mfa_login": {
"title": "2단계 인증",
"backup_code_hint": "백업 코드를 입력해 주세요.",
"totp_hint": "인증 앱의 6자리 코드를 입력해 주세요.",
"backup_code_label": "백업 코드",
"totp_code_label": "인증 코드",
"confirm": "확인",
"use_backup": "백업 코드로 로그인",
"use_totp": "인증 앱 코드로 로그인",
"back_to_login": "← 로그인으로 돌아가기"
},
"mfa_manage": {
"title": "2단계 인증 관리",
"back_to_home": "← 홈으로",
"backup_codes_generated": "백업 코드가 생성되었습니다",
"backup_codes_warning": "이 코드는 지금만 표시됩니다. 안전한 곳에 저장해 두세요. 코드 하나당 1회만 사용 가능합니다.",
"setup_title": "인증 앱 등록",
"setup_hint": "Google Authenticator, Authy 등 TOTP 앱으로 QR 코드를 스캔하세요.",
"qr_loading": "로딩 중...",
"qr_error": "QR 코드 생성 실패",
"manual_entry": "직접 입력 (키 보기)",
"code_input_label": "앱에 표시된 6자리 코드 입력",
"register_complete": "등록 완료",
"new_qr": "새 QR 코드 생성",
"enrolled_badge": "TOTP 인증기가 등록되어 있습니다.",
"enrolled_date": "등록일:",
"backup_codes_label": "백업 코드",
"backup_codes_remaining": "{{count}}개 남음",
"backup_codes_low": "— 코드가 부족합니다",
"backup_codes_empty": "— 재생성이 필요합니다",
"regenerate": "재생성",
"regenerate_confirm": "기존 백업 코드가 모두 삭제되고 새로 발급됩니다. 계속하시겠습니까?",
"totp_placeholder": "TOTP 코드",
"delete_input_placeholder": "현재 TOTP 코드 입력 후 삭제",
"delete_button": "인증기 삭제",
"delete_confirm": "TOTP 인증기와 모든 백업 코드가 삭제됩니다. 계속하시겠습니까?",
"not_enrolled_hint": "2단계 인증을 활성화하면 계정 보안이 강화됩니다. Google Authenticator, Authy 등의 인증 앱이 필요합니다.",
"start_setup": "인증기 등록 시작"
},
"passkeys": {
"title": "패스키 관리",
"subtitle": "지문, Face ID, 보안 키 등으로 비밀번호 없이 로그인할 수 있습니다.",
"name_label": "패스키 이름 (선택)",
"registered_date": "등록:",
"last_used": "· 마지막 사용:",
"delete_confirm": "이 패스키를 삭제하시겠습니까?",
"empty": "등록된 패스키가 없습니다.",
"registering": "등록 중...",
"register": "패스키 등록"
},
"profile": {
"title": "내 프로필",
"saved": "프로필이 저장되었습니다.",
"basic_info": "기본 정보",
"given_name": "이름 (Given Name)",
"family_name": "성 (Family Name)",
"display_name": "표시 이름",
"birthdate": "생년월일",
"phone": "전화번호",
"bio": "소개",
"locale": "언어",
"timezone": "시간대",
"locale_settings": "지역 설정",
"org_membership": "조직 소속",
"team_label": "팀",
"part_label": "파트"
},
"audit": {
"title": "감사 로그",
"showing": "{{count}}건 표시 (페이지 {{pageSize}}건)",
"event_kind": "이벤트 종류",
"outcome": "결과",
"success": "성공",
"failure": "실패",
"col_time": "시각",
"col_user": "사용자",
"col_event": "이벤트",
"col_ip": "IP",
"col_detail": "상세",
"empty": "감사 로그가 없습니다.",
"next_page": "다음 페이지 →"
},
"departments": {
"title": "부서 관리",
"add_btn": "+ 부서 추가",
"create_title": "새 부서 추가",
"name_label": "부서명 *",
"parent_label": "상위 부서",
"parent_none": "없음 (최상위)",
"display_order": "표시 순서",
"col_name": "부서명",
"col_parent": "상위 부서",
"empty": "등록된 부서가 없습니다.",
"delete_confirm": "삭제하시겠습니까? 하위 부서의 상위 부서 연결이 해제됩니다."
},
"positions": {
"title": "직급 관리",
"add_btn": "+ 직급 추가",
"create_title": "새 직급 추가",
"name_label": "직급명 *",
"level_label": "레벨 (높을수록 고위)",
"col_name": "직급명",
"col_level": "레벨",
"empty": "등록된 직급이 없습니다."
},
"teams": {
"title": "팀 관리",
"add_btn": "+ 팀 추가",
"create_title": "새 팀 추가",
"name_label": "팀명 *",
"dept_label": "소속 부서",
"dept_none": "없음 (독립 팀)",
"col_name": "팀명",
"col_dept": "소속 부서",
"empty": "등록된 팀이 없습니다."
},
"parts": {
"title": "파트 관리",
"add_btn": "+ 파트 추가",
"create_title": "새 파트 추가",
"name_label": "파트명 *",
"team_label": "소속 팀",
"team_none": "없음 (독립 파트)",
"col_name": "파트명",
"col_team": "소속 팀",
"col_dept": "부서",
"empty": "등록된 파트가 없습니다."
},
"signing_keys": {
"title": "서명 키 관리",
"rotate_btn": "키 로테이션",
"rotate_confirm": "새 키를 생성하고 기존 활성 키를 비활성화합니다.\n계속하시겠습니까?",
"rotated_title": "키 로테이션이 완료되었습니다",
"new_kid_label": "새 KID:",
"col_alg": "알고리즘",
"col_use": "용도",
"col_cert": "인증서",
"col_created": "생성일",
"col_rotated": "로테이션",
"col_expires": "만료일",
"cert_yes": "있음",
"cert_no": "없음",
"empty": "등록된 서명 키가 없습니다. 키 로테이션 버튼을 눌러 첫 번째 키를 생성하세요."
},
"users": {
"title": "사용자 관리",
"add_btn": "+ 사용자 추가",
"create_title": "새 사용자 추가",
"email_label": "이메일 *",
"username_label": "아이디 (미입력 시 자동)",
"display_name_label": "이름",
"role_label": "역할 *",
"password_label": "비밀번호 * (8자 이상)",
"role_user": "일반 사용자",
"role_admin": "관리자",
"role_user_short": "일반",
"status_active": "활성",
"status_disabled": "비활성",
"status_locked": "잠김",
"action_disable": "비활성화",
"action_enable": "활성화",
"action_unlock": "잠금 해제",
"reset_password": "비밀번호 초기화",
"new_password_placeholder": "새 비밀번호 (8자 이상)",
"col_id_email": "아이디 / 이메일",
"col_name": "이름",
"col_role": "역할",
"empty": "등록된 사용자가 없습니다.",
"delete_confirm": "사용자를 삭제하시겠습니까?"
},
"user_detail": {
"back": "← 목록",
"saved": "저장되었습니다.",
"profile_section": "프로필 정보",
"given_name": "이름 (Given Name)",
"family_name": "성 (Family Name)",
"display_name": "표시 이름",
"phone": "전화번호",
"birthdate": "생년월일",
"bio": "소개",
"locale": "언어",
"timezone": "시간대",
"role": "역할",
"status": "상태",
"role_user": "일반 사용자",
"role_admin": "관리자",
"status_active": "활성",
"status_disabled": "비활성",
"status_locked": "잠김",
"dept_section": "부서 소속",
"dept_empty": "소속된 부서가 없습니다.",
"dept_select": "부서 선택",
"position_none": "직급 없음",
"job_title_placeholder": "직책 (예: 팀장)",
"primary": "주소속",
"team_section": "팀 소속",
"team_empty": "소속된 팀이 없습니다.",
"team_select": "팀 선택",
"part_section": "파트 소속",
"part_empty": "소속된 파트가 없습니다.",
"part_select": "파트 선택",
"part_job_title_placeholder": "직책 (예: 파트장)"
},
"ldap": {
"title": "LDAP 프로바이더",
"add_btn": "+ 프로바이더 추가",
"create_title": "새 LDAP 프로바이더",
"added_success": "LDAP 프로바이더가 추가되었습니다. 테스트 후 활성화하세요.",
"saved": "저장되었습니다.",
"name_label": "이름 *",
"tls_label": "TLS 모드",
"tls_none": "없음 (ldap://)",
"tls_tls": "TLS (ldaps://)",
"tls_starttls": "STARTTLS",
"host_label": "호스트 *",
"port_label": "포트",
"base_dn_label": "Base DN",
"auth_section": "인증 방식 — Admin Bind + Search (ou가 여러 개인 경우) 또는 DN 패턴",
"auth_hint": "Admin Bind DN을 입력하면 Search 방식을 사용합니다. 비워두면 유저 DN 패턴을 사용합니다.",
"bind_dn_label": "Admin Bind DN",
"bind_pw_label": "Admin Bind 패스워드",
"search_filter_label": "유저 검색 필터",
"dn_pattern_label": "유저 DN 패턴",
"dn_pattern_hint": "(Admin Bind 미사용 시)",
"attr_section": "속성 매핑 (기본값: mail, cn, givenName, sn)",
"attr_email": "이메일 속성",
"attr_display": "표시 이름 속성",
"attr_given": "이름 속성",
"attr_family": "성 속성",
"enable": "활성화",
"col_name": "이름",
"col_host": "호스트",
"col_dn_pattern": "유저 DN 패턴",
"col_created": "생성",
"empty": "등록된 LDAP 프로바이더가 없습니다.",
"delete_confirm": "LDAP 프로바이더를 삭제하시겠습니까?"
},
"oidc": {
"title": "OIDC 클라이언트",
"add_btn": "+ 클라이언트 추가",
"create_title": "새 OIDC 클라이언트",
"created_title": "클라이언트가 생성되었습니다",
"created_secret_hint": "시크릿은 지금만 표시됩니다. 안전한 곳에 저장해 두세요.",
"secret_regenerated_title": "시크릿이 재생성되었습니다",
"secret_regenerated_hint": "기존 시크릿은 더 이상 사용할 수 없습니다.",
"name_label": "이름 *",
"redirect_uris_label": "Redirect URIs * (줄바꿈 구분)",
"post_logout_label": "Post-Logout Redirect URIs (줄바꿈 구분)",
"auth_method_label": "인증 방식",
"auth_method_none": "none (공개 클라이언트)",
"pkce_required": "PKCE 필수",
"enabled": "활성",
"col_name_id": "이름 / Client ID",
"col_auth": "인증",
"col_created": "생성",
"empty": "등록된 클라이언트가 없습니다.",
"regenerate_secret": "시크릿 재생성",
"regenerate_confirm": "시크릿을 재생성하시겠습니까? 기존 시크릿은 즉시 무효화됩니다.",
"delete_confirm": "클라이언트를 삭제하시겠습니까?"
},
"saml": {
"title": "SAML SP 관리",
"add_btn": "+ SP 추가",
"create_title": "새 SAML SP 등록",
"metadata_hint": "SP 메타데이터 XML로 자동 입력",
"metadata_optional": "(선택)",
"metadata_placeholder": "<md:EntityDescriptor ...> 를 붙여넣으세요",
"parse_btn": "메타데이터 파싱 →",
"name_label": "이름 *",
"entity_id_label": "Entity ID *",
"acs_url_label": "ACS URL *",
"slo_url_label": "SLO URL",
"name_id_label": "NameID Format",
"sign_assertion": "Assertion 서명",
"sign_response": "Response 서명",
"want_signed": "AuthnRequest 서명 요구",
"cert_label": "SP 인증서 (PEM, 선택)",
"allowed_attrs_label": "허용 속성 (콤마 구분, 비우면 email,username,displayName 만 전송)",
"col_name_entity": "이름 / Entity ID",
"col_acs": "ACS URL",
"col_sign": "서명",
"col_created": "생성",
"enabled": "활성",
"empty": "등록된 SAML SP 가 없습니다.",
"delete_confirm": "SP를 삭제하시겠습니까?"
},
"poc": {
"title": "Workers 환경 PoC",
"subtitle": "킥오프 M0 사전 점검. 각 엔드포인트는 GET 요청 시 JSON 으로 결과를 반환."
}
}
3 changes: 2 additions & 1 deletion src/routes/(auth)/logout/+page.svelte
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
<script lang="ts">
import { onMount } from "svelte";
import { enhance } from "$app/forms";
import { t } from "$lib/i18n.svelte";

let formEl: HTMLFormElement;
onMount(() => formEl.requestSubmit());
</script>

<form method="POST" bind:this={formEl} use:enhance>
<p>로그아웃 중...</p>
<p>{t("logout.in_progress")}</p>
</form>
Loading
Loading