'템플릿 관리', 'errors' => [ 'force_update_no_source' => ':template 을(를) 강제 업데이트할 소스를 찾을 수 없습니다. 번들 및 GitHub URL이 모두 없습니다.', 'downgrade_blocked' => '다운그레이드가 차단되었습니다 (:from → :to). 의도적 다운그레이드는 --force 옵션을 사용하세요.', 'not_found' => '템플릿을 찾을 수 없습니다. (:template)', 'not_installed' => '템플릿이 설치되지 않았습니다. (:template)', 'already_active' => '이미 활성화된 템플릿입니다.', 'invalid_format' => '잘못된 템플릿 형식입니다.', 'activation_failed' => '템플릿 활성화에 실패했습니다: :error', 'file_copy_failed' => '파일 복사에 실패했습니다: :error', 'dist_directory_not_found' => '템플릿 빌드 결과물(dist)을 찾을 수 없습니다.', 'invalid_directory_name' => '잘못된 디렉토리명입니다. vendor-name 형식을 사용하세요.', 'dependency_not_met' => '필수 의존성 :dependency (:type)이 충족되지 않았습니다.', 'version_mismatch' => ':dependency 버전이 맞지 않습니다. (필요: :required, 설치됨: :installed)', 'deactivation_failed' => '템플릿 비활성화에 실패했습니다: :error', 'installation_failed' => '템플릿 설치에 실패했습니다: :error', 'uninstallation_failed' => '템플릿 제거에 실패했습니다: :error', 'template_json_not_found' => 'template.json 파일을 찾을 수 없습니다.', 'template_json_invalid' => 'template.json 파일이 유효하지 않습니다.', 'missing_required_fields' => '필수 필드가 누락되었습니다.', 'invalid_type' => '잘못된 템플릿 타입입니다. (admin 또는 user만 허용)', 'copy_rollback_failed' => '파일 복사 롤백에 실패했습니다: :error', 'invalid_layout_json' => '레이아웃 JSON 파일이 유효하지 않습니다.', 'missing_layout_name' => '레이아웃 JSON에 layout_name 필드가 누락되었습니다.', 'layout_registration_failed' => '레이아웃 등록에 실패했습니다: :error', 'layout_validation_failed' => ':template 템플릿의 레이아웃 검증에 실패했습니다. (:count개 오류)', 'layout_validation_json_error' => ':file - JSON 파싱 오류: :error', 'layout_validation_missing_name' => ':file - layout_name 필드가 누락되었습니다.', 'layout_validation_partial_error' => ':file - Partial 처리 오류 (:partial): :error', 'override_layout_registration_failed' => '오버라이드 레이아웃 등록에 실패했습니다: :error', 'file_not_found' => '파일을 찾을 수 없습니다.', 'file_type_not_allowed' => '허용되지 않은 파일 타입입니다.', 'components_not_found' => '컴포넌트 정의 파일을 찾을 수 없습니다.', 'locale_not_supported' => ':template 템플릿은 :locale 언어를 지원하지 않습니다.', 'language_file_not_found' => ':locale 언어 파일을 찾을 수 없습니다.', 'invalid_json' => '유효하지 않은 JSON 형식입니다.', 'invalid_cache_data' => '캐시 데이터가 손상되었습니다. 다시 시도해주세요.', 'unknown_error' => '알 수 없는 오류가 발생했습니다.', 'zip_open_failed' => 'ZIP 파일을 열 수 없습니다: :error', 'identifier_missing' => '템플릿 식별자가 누락되었습니다.', 'already_installed' => '이미 설치된 템플릿입니다.', 'install_failed' => '템플릿 설치에 실패했습니다: :error', 'github_url_invalid' => '유효하지 않은 GitHub URL 형식입니다.', 'github_download_failed' => 'GitHub에서 다운로드에 실패했습니다: :error', 'github_repo_not_found' => 'GitHub 저장소를 찾을 수 없습니다.', 'refresh_layouts_failed' => '레이아웃 갱신에 실패했습니다: :error', 'routes_not_found' => '라우트 파일을 찾을 수 없습니다.', // 템플릿 엔진 에러 메시지 'no_active_template' => '활성화된 템플릿이 없습니다', 'layout_load_failed' => '레이아웃을 불러오는데 실패했습니다: :error', 'component_load_failed' => '컴포넌트를 불러오는데 실패했습니다: :error', 'translation_load_failed' => '다국어 파일을 불러오는데 실패했습니다: :error', 'template_init_error' => '템플릿 엔진을 초기화하는 중 오류가 발생했습니다', 'contact_admin_for_template' => '시스템 관리자에게 문의하여 템플릿을 활성화해주세요.', // 에러 레이아웃 검증 메시지 'missing_error_config' => '템플릿에 error_config 섹션이 없습니다. 에러 페이지 레이아웃 설정이 필요합니다.', 'missing_error_layout' => ':code 에러 레이아웃이 정의되지 않았습니다.', 'error_layout_not_found' => ':code 에러 레이아웃 파일을 찾을 수 없습니다: :path', // 템플릿 상태 에러 'template_not_found' => '템플릿을 찾을 수 없습니다: :identifier', 'template_not_active' => '템플릿이 활성화되어 있지 않습니다: :identifier', // 의존성 관련 에러 'dependencies_not_met' => '템플릿의 필수 의존성이 충족되지 않았습니다.', 'service_unavailable' => '서비스를 일시적으로 사용할 수 없습니다.', 'contact_admin' => '관리자에게 문의하세요.', // 업데이트 관련 에러 'operation_in_progress' => '템플릿 ":name"이(가) 현재 :status 상태입니다. 작업이 완료될 때까지 기다려 주세요.', 'github_api_failed' => 'GitHub API 호출에 실패했습니다: :error', 'invalid_github_url' => '유효하지 않은 GitHub URL입니다.', 'zip_url_not_found' => 'ZIP 다운로드 URL을 찾을 수 없습니다.', 'download_failed' => '템플릿 ":template" :version 버전 다운로드에 실패했습니다: :error', 'zip_extract_failed' => 'ZIP 압축 해제에 실패했습니다: :error', 'extracted_dir_not_found' => '압축 해제된 디렉토리를 찾을 수 없습니다.', 'reload_failed' => '템플릿 다시 로드에 실패했습니다: :error', 'delete_directory_failed' => '템플릿 디렉토리 삭제에 실패했습니다: :error', 'update_failed' => '템플릿 ":template" 업데이트에 실패했습니다: :error', 'invalid_layout_strategy' => '유효하지 않은 레이아웃 전략입니다. (overwrite 또는 keep만 허용)', ], 'messages' => [ 'activated' => '템플릿이 활성화되었습니다.', 'deactivated' => '템플릿이 비활성화되었습니다.', 'installed' => '템플릿이 설치되었습니다.', 'uninstalled' => '템플릿이 제거되었습니다.', 'previous_template_deactivated' => '이전 활성 템플릿이 비활성화되었습니다.', 'files_copied' => '템플릿 파일이 복사되었습니다.', 'files_removed' => '템플릿 파일이 제거되었습니다.', 'routes_retrieved' => '템플릿 라우트 정보를 조회했습니다.', 'routes_not_found' => '템플릿 라우트를 찾을 수 없습니다.', 'layout_served' => '레이아웃이 제공되었습니다.', 'config_retrieved' => '템플릿 설정 정보를 조회했습니다.', 'template_activated' => '템플릿이 활성화되었습니다.', 'template_deactivated' => '템플릿이 비활성화되었습니다.', 'template_uninstalled' => '템플릿이 제거되었습니다.', 'editor_spec_empty' => '편집기 스펙이 비어 있습니다.', 'editor_spec_retrieved' => '편집기 스펙을 조회했습니다.', 'editor_assets_retrieved' => '편집기 자산 정보를 조회했습니다.', 'editor_assets_missing' => '편집기 자산 매니페스트가 없습니다 (빌드되지 않음).', 'language_retrieved' => '다국어 데이터를 조회했습니다.', 'language_empty' => '다국어 데이터가 비어 있습니다.', ], 'not_found' => '템플릿 :template을(를) 찾을 수 없습니다.', 'layout_not_found' => '레이아웃을 찾을 수 없습니다.', 'info' => [ 'scanning' => '템플릿 디렉토리를 스캔하는 중...', 'loading' => '템플릿을 로드하는 중...', 'validating_dependencies' => '의존성을 검증하는 중...', 'copying_files' => '파일을 복사하는 중...', 'removing_files' => '파일을 제거하는 중...', 'template_found' => '템플릿을 발견했습니다.', 'no_templates_found' => '템플릿을 발견하지 못했습니다.', 'public_directory_cleaned' => 'public 디렉토리가 정리되었습니다.', 'no_layouts_directory' => '레이아웃 디렉토리가 존재하지 않습니다.', 'no_layout_files' => '레이아웃 JSON 파일이 존재하지 않습니다.', 'layout_registered' => '레이아웃이 등록되었습니다.', 'layouts_deleted' => '레이아웃이 삭제되었습니다.', 'cache_cleared' => '템플릿 캐시가 삭제되었습니다.', 'cache_warmed' => '템플릿 캐시가 생성되었습니다.', 'no_overrides_directory' => '오버라이드 디렉토리가 존재하지 않습니다.', 'no_override_modules' => '오버라이드할 모듈 디렉토리가 존재하지 않습니다.', 'no_override_layouts_for_module' => '해당 모듈에 대한 오버라이드 레이아웃이 없습니다.', 'override_layout_registered' => '오버라이드 레이아웃이 등록되었습니다.', 'override_layouts_registered' => '오버라이드 레이아웃이 등록되었습니다.', 'override_layouts_cache_invalidated' => '오버라이드 레이아웃 캐시가 무효화되었습니다.', 'override_layouts_cache_invalidation_error' => '오버라이드 레이아웃 캐시 무효화 중 오류가 발생했습니다.', ], 'status' => [ 'active' => '활성', 'inactive' => '비활성', 'installing' => '설치 중', 'uninstalling' => '제거 중', 'updating' => '업데이트 중', ], 'types' => [ 'admin' => '관리자용', 'user' => '사용자용', ], 'dependencies' => [ 'section_title' => '의존성', 'modules' => '필수 모듈', 'plugins' => '필수 플러그인', 'status_met' => '충족', 'status_unmet' => '미충족', 'no_dependencies' => '의존성 없음', 'version_required' => '필요 버전: :version', 'version_installed' => '설치된 버전: :version', 'not_installed' => '미설치', 'not_active' => '비활성', ], 'validation' => [ 'name_required' => '템플릿 이름은 필수입니다.', 'name_string' => '템플릿 이름은 문자열이어야 합니다.', 'name_max' => '템플릿 이름은 255자를 초과할 수 없습니다.', 'file_required' => '파일은 필수입니다.', 'file_invalid' => '유효한 파일이 아닙니다.', 'file_must_be_zip' => 'ZIP 파일만 업로드 가능합니다.', 'file_max_size' => '파일 크기는 :sizeMB를 초과할 수 없습니다.', 'github_url_required' => 'GitHub URL은 필수입니다.', 'github_url_invalid' => 'GitHub URL이 올바르지 않습니다.', 'github_url_format' => 'GitHub URL 형식이 올바르지 않습니다. (예: https://github.com/owner/repo)', // 목록 조회 검증 'type_in' => '템플릿 타입은 user 또는 admin만 허용됩니다.', 'search_max' => '검색어는 255자를 초과할 수 없습니다.', 'filters_max' => '검색 필터는 최대 10개까지 허용됩니다.', 'filter_field_required' => '필터 필드는 필수입니다.', 'filter_field_invalid' => '허용되지 않은 필터 필드입니다.', 'filter_value_required' => '필터 값은 필수입니다.', 'filter_value_max' => '필터 값은 255자를 초과할 수 없습니다.', 'filter_operator_invalid' => '허용되지 않은 필터 연산자입니다. (like, eq, starts_with, ends_with만 허용)', 'status_invalid' => '허용되지 않은 상태 값입니다. (installed, not_installed, active, inactive만 허용)', 'per_page_min' => '페이지당 항목 수는 최소 1개 이상이어야 합니다.', 'per_page_max' => '페이지당 항목 수는 최대 100개까지 허용됩니다.', 'page_min' => '페이지 번호는 최소 1 이상이어야 합니다.', ], 'install_success' => '템플릿이 성공적으로 설치되었습니다.', 'install_failed' => '템플릿 설치에 실패했습니다: :error', 'preview_success' => 'manifest 미리보기를 완료했습니다.', 'preview_failed' => 'manifest 미리보기에 실패했습니다: :error', 'uninstall_success' => '템플릿이 성공적으로 제거되었습니다.', 'uninstall_failed' => '템플릿 제거에 실패했습니다: :error', 'activate_success' => '템플릿이 활성화되었습니다.', 'activate_failed' => '템플릿 활성화에 실패했습니다: :error', 'activate_warning' => '템플릿 활성화를 위해 필요한 의존성이 충족되지 않았습니다.', // 경고 메시지 'warnings' => [ 'missing_dependencies' => '이 템플릿을 활성화하려면 다음 의존성이 필요합니다.', ], 'deactivate_success' => '템플릿이 비활성화되었습니다.', 'deactivate_failed' => '템플릿 비활성화에 실패했습니다: :error', 'fetch_success' => '템플릿 정보를 성공적으로 가져왔습니다.', 'license_not_found' => '템플릿 라이선스 파일을 찾을 수 없습니다.', 'refresh_layouts_success' => '템플릿 레이아웃이 성공적으로 갱신되었습니다.', 'refresh_layouts_failed' => '템플릿 레이아웃 갱신에 실패했습니다: :error', // 업데이트 관련 메시지 'update_success' => '템플릿 ":template"이(가) :version 버전으로 업데이트되었습니다.', 'update_failed' => '템플릿 업데이트에 실패했습니다: :error', 'update_hook_failed' => '템플릿 업데이트 훅 실행에 실패했습니다: :error', 'no_update_available' => '업데이트할 내용이 없습니다.', 'check_updates_success' => '업데이트 확인이 완료되었습니다.', 'check_updates_failed' => '업데이트 확인에 실패했습니다: :error', 'not_installed' => '템플릿 ":template"이(가) 설치되지 않았습니다.', 'check_modified_layouts_success' => '수정된 레이아웃 확인이 완료되었습니다.', 'check_modified_layouts_failed' => '수정된 레이아웃 확인에 실패했습니다: :error', // _pending 관련 메시지 'pending_not_found' => '설치 대기 목록에서 템플릿 ":template"을(를) 찾을 수 없습니다.', 'already_exists' => '템플릿 ":template"이(가) 이미 존재합니다.', 'move_failed' => '템플릿 ":template" 이동에 실패했습니다: :error', 'commands' => [ 'install' => [ 'success' => '템플릿 ":template" 설치 완료', 'already_installed' => '템플릿 ":template"이(가) 이미 설치되어 있습니다.', 'force_reinstall' => '템플릿 ":template" 을(를) 강제 재설치합니다 (활성 디렉토리 덮어쓰기)...', 'layouts_created' => '레이아웃 :count개 생성됨', 'type' => '타입: :type', 'version' => '버전: :version', 'directory_not_found' => '템플릿 디렉토리를 찾을 수 없습니다: :path', 'config_not_found' => 'template.json 파일을 찾을 수 없습니다', ], 'activate' => [ 'success' => '템플릿 ":template" 활성화 완료', 'not_installed' => '템플릿 ":template"이(가) 설치되지 않았습니다.', 'deactivated_previous' => '기존 :type 템플릿 ":previous" 비활성화', ], 'deactivate' => [ 'success' => '템플릿 ":template" 비활성화 완료', 'not_active' => '템플릿 ":template"이(가) 활성화되지 않았습니다.', 'no_active_warning' => '현재 활성화된 :type 템플릿이 없습니다.', ], 'uninstall' => [ 'success' => '템플릿 ":template" 삭제 완료', 'confirm_prompt' => '템플릿 ":template"을(를) 삭제하시겠습니까?', 'confirm_details' => [ 'layouts' => '- 레이아웃 :count개가 삭제됩니다', 'versions' => '- user 타입 템플릿의 경우 버전 히스토리도 삭제됩니다', ], 'confirm_question' => '계속하시겠습니까?', 'layouts_deleted' => '레이아웃 :count개 삭제됨', 'versions_deleted' => '버전 히스토리 :count개 삭제됨', 'custom_preserved' => '운영자 파일(:directory)을 :archive 에 보관했습니다.', 'aborted' => '삭제가 취소되었습니다.', ], 'list' => [ 'no_templates' => '등록된 템플릿이 없습니다.', 'invalid_type' => '잘못된 타입입니다. admin 또는 user만 사용 가능합니다.', 'invalid_status' => '잘못된 상태입니다. installed, uninstalled, active, inactive만 사용 가능합니다.', 'headers' => [ 'identifier' => '식별자', 'name' => '이름', 'type' => '타입', 'version' => '버전', 'status' => '상태', ], 'status' => [ 'uninstalled' => '미설치', ], 'summary' => '총 :total개 템플릿 (설치됨: :installed개, 활성: :active개)', ], 'cache_clear' => [ 'clearing_single' => '템플릿 ":template" 캐시 삭제 중...', 'clearing_all' => '모든 템플릿 캐시 삭제 중...', 'success_single' => '템플릿 ":template" 캐시 :count개 삭제 완료', 'success_all' => '전체 템플릿 캐시 :count개 삭제 완료', ], 'check_updates' => [ 'not_installed' => '템플릿 ":template"이(가) 설치되지 않았습니다.', 'no_installed' => '설치된 템플릿이 없습니다.', 'update_available' => '업데이트 가능', 'up_to_date' => '최신', 'headers' => [ 'identifier' => '식별자', 'current_version' => '현재 버전', 'latest_version' => '최신 버전', 'source' => '소스', 'status' => '상태', ], 'summary' => '총 :total개 확인 (업데이트 가능: :updates개)', 'single_up_to_date' => '템플릿 ":template"은(는) 최신 버전입니다. (v:version)', 'single_update_available' => '템플릿 ":template" 업데이트 가능: v:current → v:latest (:source)', ], 'update' => [ 'success' => '템플릿 ":template" 업데이트 완료', 'version_change' => 'v:from → v:to', 'no_update' => '템플릿 ":template"에 사용 가능한 업데이트가 없습니다.', 'not_installed' => '템플릿 ":template"이(가) 설치되지 않았습니다.', 'invalid_strategy' => '잘못된 레이아웃 전략입니다. overwrite 또는 keep만 사용 가능합니다.', 'current_version' => '현재 버전: :version', 'latest_version' => '최신 버전: :version', 'update_source' => '업데이트 소스: :source', 'layout_strategy' => '레이아웃 전략: :strategy', 'modified_layouts_warning' => '수정된 레이아웃 :count개가 덮어씌워집니다:', 'modified_layout_item' => ' - :name (수정일: :date)', 'confirm_question' => '업데이트를 진행하시겠습니까?', 'aborted' => '업데이트가 취소되었습니다.', 'backup_restored' => '백업에서 이전 버전이 복원되었습니다.', 'force_mode' => '강제 업데이트 모드: 버전 비교를 건너뛰고 재설치합니다.', ], ], // 레이아웃 첨부 파일 (배경 이미지 등) 'layout_attachments' => [ 'messages' => [ 'uploaded' => '첨부 파일을 업로드했습니다.', 'listed' => '첨부 파일 목록을 조회했습니다.', 'deleted' => '첨부 파일을 삭제했습니다.', ], 'errors' => [ 'upload_failed' => '첨부 파일 업로드에 실패했습니다.', 'delete_failed' => '첨부 파일 삭제에 실패했습니다.', 'not_found' => '첨부 파일을 찾을 수 없습니다.', ], 'validation' => [ 'file_required' => '업로드할 파일을 선택해 주세요.', 'file_invalid' => '올바른 파일이 아닙니다.', 'file_image' => '이미지 파일만 업로드할 수 있습니다.', 'file_mimes' => '지원하는 이미지 형식이 아닙니다 (jpg, jpeg, png, gif, webp, svg).', 'file_max' => '파일 크기는 최대 :max MB까지 허용됩니다.', 'layout_name_max' => '레이아웃 이름은 최대 150자까지 허용됩니다.', ], ], ];