Files
Gnuboard7/lang/ko/user.php
T
HeuJung cf1d8ab52c fix(security): 보안 제보 14건 + 유사 결함 전수조사 수정
sir.kr 커뮤니티 제보(Xbuilder 님 외)와 전수조사 발굴분을 코어·게시판·
이커머스·페이지·ckeditor5 전반에 반영.

- 통합 검색 하이라이트: 코어 SearchHighlighter 로 원문 이스케이프 후 강조
 (저장형 XSS 차단, board/ecommerce/page 3중복제 통합)
- 공개 최신글·인기글·관리자 대시보드: 읽기권한 없는 게시판·블라인드·비활성
 게시판 글 필터. 비밀글은 기존 공개 정책대로 제목 노출 유지(본문만 보호)
- 게시판 관리 대시보드 권한 게이트, 이커머스 쿠폰 다운로드·리뷰 대상·주문옵션
 확정 스코프 강화, 취소/환불 항목 검증 회원/비회원 대칭
- 만료 토큰 거부(SetLocale), 회원 탈퇴·정보관리 실패 시 내부 오류 원문 마스킹
- 예외→응답 매핑 정비(generic catch 상태코드), ckeditor 업로드 권한 게이트 정리

정책 정합 정정: 착수 계획이 "비밀글 제목 노출=취약점"으로 전제해 공개 최신글·
대시보드에 넣었던 is_secret 필터는, 저장소가 확정한 "제목 공개, 본문만 보호"
정책(2026-01-02/02-04/06-18/06-19)과 배치되어 되돌림. 읽기권한·블라인드 필터는 유지.
Chrome MCP 실측(T1~T10) + 회귀 테스트로 확인.
2026-08-17 15:46:38 +09:00

147 lines
9.4 KiB
PHP

<?php
return [
// 상태 라벨
'status' => [
'active' => '활성',
'inactive' => '비활성',
'blocked' => '차단',
'withdrawn' => '탈퇴',
],
// 언어 라벨
'language' => [
'ko' => '한국어',
'en' => 'English',
],
// 사용자 관리 메시지
'not_found' => '사용자를 찾을 수 없습니다.',
'withdrawn_user' => '탈퇴한 사용자',
'fetch_success' => '사용자 정보를 성공적으로 가져왔습니다.',
'fetch_failed' => '사용자 정보를 가져오는데 실패했습니다.',
'create_success' => '사용자가 성공적으로 생성되었습니다.',
'create_failed' => '사용자 생성에 실패했습니다. 잠시 후 다시 시도해 주세요.',
'update_success' => '사용자 정보가 성공적으로 업데이트되었습니다.',
'update_failed' => '사용자 정보 업데이트에 실패했습니다. 잠시 후 다시 시도해 주세요.',
'delete_success' => '사용자가 성공적으로 삭제되었습니다.',
'delete_failed' => '사용자 삭제에 실패했습니다. 잠시 후 다시 시도해 주세요.',
'statistics_success' => '사용자 통계를 성공적으로 가져왔습니다.',
'statistics_failed' => '사용자 통계를 가져오는데 실패했습니다.',
'search_success' => '사용자 검색을 성공적으로 완료했습니다.',
'search_failed' => '사용자 검색에 실패했습니다.',
'search_name_required' => '검색할 이름을 입력해주세요.',
'search_keyword_required' => '검색 키워드를 입력해주세요.',
'email_available' => '사용 가능한 이메일입니다.',
'email_unavailable' => '이미 사용 중인 이메일입니다.',
'email_required' => '이메일을 입력해주세요.',
'email_check_failed' => '이메일 중복 확인에 실패했습니다.',
'profile_success' => '프로필 정보를 성공적으로 가져왔습니다.',
'profile_failed' => '프로필 정보를 가져오는데 실패했습니다.',
'language_update_success' => '언어 설정이 성공적으로 변경되었습니다.',
'language_update_failed' => '언어 설정 변경에 실패했습니다.',
'invalid_language' => '지원하지 않는 언어입니다.',
'activity_log_success' => '활동 기록을 성공적으로 가져왔습니다.',
'activity_log_failed' => '활동 기록을 가져오는데 실패했습니다.',
'bulk_status_updated' => ':count명의 사용자 상태가 변경되었습니다.',
'bulk_update_status_failed' => '사용자 상태 일괄 변경에 실패했습니다.',
'last_admin_role_cannot_remove' => '시스템에 관리자 역할을 가진 사용자가 본인뿐이므로 관리자 역할을 제거할 수 없습니다.',
// 아바타 관련 메시지
'avatar_upload_success' => '프로필 이미지가 성공적으로 업로드되었습니다.',
'avatar_upload_failed' => '프로필 이미지 업로드에 실패했습니다.',
'avatar_delete_success' => '프로필 이미지가 성공적으로 삭제되었습니다.',
'avatar_delete_failed' => '프로필 이미지 삭제에 실패했습니다.',
'avatar_not_found' => '삭제할 프로필 이미지가 없습니다.',
// 마케팅 수신 동의 관련 메시지
'marketing_consent_update_success' => '마케팅 수신 설정이 성공적으로 변경되었습니다.',
'marketing_consent_update_failed' => '마케팅 수신 설정 변경에 실패했습니다.',
// 비밀번호 확인 관련 메시지
'password_verified' => '비밀번호가 확인되었습니다.',
'password_incorrect' => '비밀번호가 일치하지 않습니다.',
'password_verify_failed' => '비밀번호 확인에 실패했습니다.',
// 비밀번호 변경 관련 메시지
'password_change_success' => '비밀번호가 성공적으로 변경되었습니다.',
'password_change_failed' => '비밀번호 변경에 실패했습니다.',
// 회원 탈퇴 관련 메시지
'withdraw_success' => '회원 탈퇴가 완료되었습니다.',
'withdraw_failed' => '회원 탈퇴에 실패했습니다. 잠시 후 다시 시도해 주세요.',
'withdraw_admin_forbidden' => '관리자 계정은 탈퇴할 수 없습니다.',
'withdraw_failed_unknown' => '알 수 없는 오류로 탈퇴 처리에 실패했습니다.',
// 유효성 검사 메시지
'validation' => [
'page_integer' => '페이지 번호는 숫자여야 합니다.',
'page_min' => '페이지 번호는 1 이상이어야 합니다.',
'per_page_integer' => '페이지당 항목 수는 숫자여야 합니다.',
'per_page_min' => '페이지당 항목 수는 1 이상이어야 합니다.',
'per_page_max' => '페이지당 항목 수는 100 이하여야 합니다.',
'search_string' => '검색어는 문자열이어야 합니다.',
'search_max' => '검색어는 255자 이하여야 합니다.',
'search_field_invalid' => '유효하지 않은 검색 필드입니다.',
'start_date_invalid' => '시작 날짜 형식이 올바르지 않습니다.',
'end_date_invalid' => '종료 날짜 형식이 올바르지 않습니다.',
'end_date_after_start' => '종료 날짜는 시작 날짜보다 늦어야 합니다.',
'date_filter_invalid' => '유효하지 않은 날짜 필터입니다.',
'sort_by_invalid' => '유효하지 않은 정렬 필드입니다.',
'sort_order_invalid' => '유효하지 않은 정렬 순서입니다.',
'name_required' => '이름은 필수입니다.',
'name_string' => '이름은 문자열이어야 합니다.',
'name_max' => '이름은 255자 이하여야 합니다.',
'nickname_string' => '닉네임은 문자열이어야 합니다.',
'nickname_max' => '닉네임은 50자 이하여야 합니다.',
'email_required' => '이메일은 필수입니다.',
'email_invalid' => '올바른 이메일 형식이 아닙니다.',
'email_unique' => '이미 사용 중인 이메일입니다.',
'email_max' => '이메일은 255자 이하여야 합니다.',
'password_required' => '비밀번호는 필수입니다.',
'password_confirmed' => '비밀번호 확인이 일치하지 않습니다.',
'password_min' => '비밀번호는 최소 8자 이상이어야 합니다.',
'current_password_required' => '현재 비밀번호를 입력해주세요.',
'current_password_invalid' => '현재 비밀번호가 올바르지 않습니다.',
'password_confirmation_required' => '비밀번호 확인을 입력해주세요.',
'language_required' => '언어를 선택해주세요.',
'language_invalid' => '지원하지 않는 언어입니다.',
'country_required' => '국가를 선택해주세요.',
'country_size' => '국가 코드는 2자리여야 합니다.',
'country_alpha' => '국가 코드는 영문자만 사용 가능합니다.',
'timezone_invalid' => '올바른 시간대를 선택해주세요.',
'status_invalid' => '유효하지 않은 계정 상태입니다.',
'homepage_url' => '올바른 URL 형식이 아닙니다.',
'homepage_max' => '홈페이지 주소는 255자 이하여야 합니다.',
'mobile_max' => '휴대폰 번호는 20자 이하여야 합니다.',
'mobile_regex' => '휴대폰 번호는 숫자, 하이픈, 공백만 입력 가능합니다.',
'phone_max' => '전화번호는 20자 이하여야 합니다.',
'phone_regex' => '전화번호는 숫자, 하이픈, 공백만 입력 가능합니다.',
'avatar_required' => '프로필 이미지를 선택해주세요.',
'avatar_image' => '프로필 이미지는 이미지 파일이어야 합니다.',
'avatar_mimes' => '프로필 이미지는 JPG, PNG, GIF, WEBP 형식만 가능합니다.',
'avatar_max' => '프로필 이미지는 2MB 이하여야 합니다.',
'zipcode_max' => '우편번호는 10자 이하여야 합니다.',
'address_max' => '기본 주소는 255자 이하여야 합니다.',
'address_detail_max' => '상세 주소는 255자 이하여야 합니다.',
'signature_max' => '서명은 1000자 이하여야 합니다.',
'bio_max' => '자기소개는 5000자 이하여야 합니다.',
'admin_memo_max' => '관리자 메모는 5000자 이하여야 합니다.',
// 역할 정보
'roles_required' => '역할을 하나 이상 선택해주세요.',
'roles_min' => '역할을 하나 이상 선택해주세요.',
// 다중 검색 조건 관련 메시지
'filters_array' => '검색 조건은 배열 형식이어야 합니다.',
'filters_max' => '검색 조건은 최대 10개까지 가능합니다.',
'filter_field_required' => '검색 필드는 필수입니다.',
'filter_field_invalid' => '유효하지 않은 검색 필드입니다.',
'filter_value_required' => '검색값은 필수입니다.',
'filter_value_max' => '검색값은 255자 이하여야 합니다.',
'filter_operator_invalid' => '유효하지 않은 검색 연산자입니다.',
'search_name_required' => '검색할 이름을 입력해주세요.',
'search_keyword_required' => '검색 키워드를 입력해주세요.',
'exclude_user_id_uuid' => '제외할 사용자 ID는 유효한 UUID여야 합니다.',
'exclude_user_id_exists' => '존재하지 않는 사용자입니다.',
],
];