Files
Gnuboard7/public/install/lang/ko.php
T
HeuJung 5ba7a83597 feat(core,engine): 부트스트랩 리소스 정적 게시(bake) 및 폴백 체계 도입
공개 제보 https://github.com/gnuboard/g7/issues/122 대응 — 초기 부트스트랩
리소스(다국어 병합·컴포넌트 정의·라우트·확장 번들·템플릿 dist)를 캐시 버전
디렉토리(public/build/ext/{v}/)에 실파일로 게시해 웹서버가 rewrite 전에 직접
서빙한다. 부트 임계 경로의 PHP 왕복을 제거하고(실측 TTFB 131~144ms → 1~7ms),
미게시·부분게시·GC 직후에는 fetch·태그·번들 3계층이 종전 API 로 즉시 폴백한다.

- 게시: 원자적 tmp→rename→manifest(존재=완료), 캐시 락 단일 실행, 인라인 GC
 (현재+직전 1개), incrementExtensionCacheVersion 단일 지점 terminating 트리거
 + blade 자가 치유 + 설치기 태스크(best_effort) + 일일 cleanup 스케줄,
 sudo 업데이트 대비 소유권 정상화(normalizeOwnership)·prune/백업 제외
- 프론트(engine-v1.61.0): blade 주입 cache_version 1급 시드(이중 부트 로드 제거),
 fetchStaticFirst 즉시 폴백, ComponentRegistry 버전 키드 매니페스트,
 ModuleAssetLoader 번들 정적→레거시 폴백, asset-url-recovery staticToLegacy 역변환
- 폴백 API 품질: lang/components/routes ETag+304 + 환경 분기 Cache-Control,
 열화 라우트 스냅샷 공개 캐시 금지(서버측 캐시 회피와 대칭), 게시 .htaccess
 mod_deflate + nginx gzip 스니펫(압축 전송량 회귀 방지)
- SEO 정합: 봇 HTML 은 GC 대상 정적 URL 미사용(allowStatic:false), props $switch
 봇측 해석 구현(engine-v1.56.0 패리티), 패리티 룰 expression-dialect 그룹 신설,
 상주 allow 헤더 제거로 잠금 복원, _comment* 접두 주석 키 분류
- 검증: 전 수정 red→green 4단계, Playwright 라이브 21건, Chrome MCP 24축+M1~M3,
 봇 curl 3축, 캐시 저장소(file/redis/database) 축 판정, 히스토리·공개이슈·커밋
 이력 전수 재조사 반영
- 코어 7.0.10, engine-v1.61.0. kill-switch: G7_STATIC_CACHE=false
2026-08-25 17:02:53 +09:00

935 lines
64 KiB
PHP

<?php
// /install/lang/ko.php
return [
// 공통
'next' => '다음',
'previous' => '이전',
'install' => '설치하기',
'cancel' => '취소',
'yes' => '예',
'no' => '아니오',
'loading' => '로딩 중...',
'saving' => '저장 중...',
'save_failed' => '저장 실패',
'error' => '오류',
// Step 0: 환영
'welcome_title' => '그누보드7 시작하기',
'welcome_desc' => '그누보드7에 오신 것을 환영합니다. 이곳은 설치 첫 단계이며,<br>순서대로 안내를 따라 하시면 필요한 환경 설정을 빠르고 안정적으로 완료하실 수 있습니다.',
'select_language' => '언어를 선택하세요',
'storage_permission_check' => '디렉토리 권한 체크',
'storage_permission_required' => 'Storage 폴더 권한 설정 필요',
'storage_permission_failed' => 'Storage 폴더 권한이 부족합니다',
'storage_not_exists' => 'Storage 폴더가 없습니다',
'storage_not_exists_message' => 'Storage 폴더가 존재하지 않습니다. 프로젝트 루트에 storage 폴더를 생성해주세요.',
'storage_not_writable' => 'Storage 폴더 쓰기 권한 없음',
'storage_not_writable_message' => 'Storage 폴더에 쓰기 권한이 없습니다. 폴더 소유자 또는 그룹 권한을 확인해주세요.',
'storage_ownership_mismatch' => 'Storage 폴더 소유자 불일치',
'storage_ownership_mismatch_message' => 'Storage 폴더의 소유자(:owner)가 웹서버 실행 사용자(:web_user)와 다릅니다. 현재 권한(:permissions)은 소유자만 쓰기 가능하므로 웹서버가 쓸 수 없습니다. 아래 방법 중 하나를 적용해주세요.',
'storage_permission_guide' => 'Storage 폴더에 <strong>755</strong> 권한을 부여해주세요.',
'storage_permission_guide_detail' => '아래 명령어를 실행하거나 FTP를 통해 권한을 변경하세요:',
'storage_permission_command_linux' => 'chmod -R 755 :path',
'current_owner' => '현재 소유자',
'current_group' => '현재 소유그룹',
'current_permissions' => '현재 권한',
'required_permissions' => '필요 권한',
'unknown' => '알 수 없음',
'recheck_permission' => '다시 확인',
'permission_checking' => '권한 확인 중...',
// Step 1: 라이선스
'license_title' => '라이선스 동의',
'license_agreement' => '라이선스 약관',
'i_agree' => '위 라이선스 약관에 동의합니다',
'must_agree' => '계속하려면 라이선스에 동의해 주십시오.',
'license_not_found' => '라이선스 정보를 찾을 수 없습니다.',
// Step 2: 설치 환경 확인
'checking_requirements' => '서버 요구사항을 확인하는 중...',
'php_version' => 'PHP 버전',
'php_modules' => 'PHP 모듈',
'directory_permissions' => '디렉토리 권한',
'disk_space' => '디스크 공간',
'https' => 'HTTPS',
'opcache' => 'OPcache',
'required' => '필수',
'enabled' => '활성화됨',
'not_enabled' => '비활성화됨',
'recommended' => '권장사항',
'needs_fix' => '수정 필요',
'requirements_check_failed' => '요구사항 검증 실패',
'all_requirements_met' => '모든 요구사항이 충족되었습니다.',
'some_requirements_failed' => '일부 요구사항이 충족되지 않았습니다. 서버 설정을 확인하세요.',
'recheck' => '다시 검증',
'requirements_not_met' => '필수 요구사항을 충족하지 못했습니다. 환경을 확인하고 다시 시도해주세요.',
'badge_required' => '필수',
'badge_optional' => '선택',
'or_above' => '이상',
'fix_permission' => '쓰기 권한 부족',
'including_subdirectories' => '하위 포함',
'and_more' => '외 :count개',
'error_php_version' => 'PHP 버전',
'error_missing_extensions' => '필수 PHP 확장 미설치',
'error_disk_space' => '디스크 공간',
'error_directory_permissions' => '디렉토리 쓰기 권한 부족',
'error_required_files' => '필수 파일 누락',
'error_required_files_missing_label' => '필수 파일 누락',
'error_required_files_not_writable_label' => '필수 파일 쓰기 권한 없음',
'error_required_files_ownership_mismatch_label' => '필수 파일 소유자 불일치',
'ownership_mismatch_option_666' => '[대안 2] 최후 수단 — 파일에 모든 사용자 쓰기 허용 (보안 약화, 비권장):',
'required_files' => '필수 파일',
'file_exists' => '존재',
'file_missing' => '누락',
'file_not_writable' => '쓰기 불가',
'required_files_fix_guide' => '아래 명령어를 프로젝트 루트에서 실행하세요:',
'minimum' => '최소',
'required_text' => '필요',
// Step 3: 설정
'database_settings' => '데이터베이스 설정',
'database_type' => '데이터베이스 타입',
'db_host' => '데이터베이스 호스트',
'db_port' => '포트',
'db_name' => '데이터베이스 이름',
'db_username' => '사용자명',
'db_password' => '비밀번호',
'db_prefix' => '테이블 접두사',
'db_prefix_hint' => '모든 테이블명 앞에 붙는 접두사입니다. (예: g7_users, g7_posts) 최대 6자까지 입력할 수 있습니다.',
'db_prefix_placeholder' => 'g7_',
'test_write_db_connection' => 'Write DB 연결 테스트',
'test_read_db_connection' => 'Read DB 연결 테스트',
'use_read_db' => 'Read DB 설정 사용',
'database_settings_read' => '데이터베이스 설정 (Read DB) - 선택사항',
'site_settings' => '사이트 설정',
'app_name' => '사이트 이름',
'app_url' => '사이트 URL',
'admin_account' => '관리자 계정',
'admin_name' => '관리자 이름',
'admin_language' => '관리자 언어',
'admin_email' => '관리자 이메일',
'admin_password' => '관리자 비밀번호',
'admin_password_confirm' => '비밀번호 확인',
'start_installation' => '설치 시작',
// Step 5: 설치
'installation_title' => '설치 진행 중',
'installation_in_progress' => '그누보드7을 설치하고 있습니다. 잠시만 기다려 주세요...',
'installation_in_progress_message' => '설치가 진행 중입니다. 설치 화면으로 이동합니다.',
'overall_progress' => '전체 진행률',
'preparing' => '준비 중...',
'waiting_installation' => '설치 시작을 기다리는 중...',
'processing' => '처리 중...',
'installation_complete' => '설치 완료',
'installation_failed' => '설치 실패',
'retry_installation' => '재시도',
'do_not_close_page' => '설치가 완료될 때까지 페이지를 닫지 마세요.',
'installation_log' => '설치 로그',
'hide_log' => '로그 숨기기',
'show_log' => '로그 보기',
'back_to_settings' => '설정으로 돌아가기',
'progress_status' => '설치 목록',
'hide_progress' => '설치 목록 숨기기',
'show_progress' => '설치 목록 보기',
'installation_completed' => '설치가 완료되었습니다!',
'recommendations' => '설치 후 권장사항',
'recommendation_env_permission' => '.env 파일 권한을 644로 설정하세요 (chmod 644 .env)',
'recommendation_https' => '프로덕션 환경에서는 반드시 HTTPS를 사용하세요',
// .env 권한 보안 강화 안내 (Step 5 완료 화면, 0600 미적용 시 조건부 노출)
'env_hardening_hint_title' => '.env 권한 보안 강화 (선택)',
'env_hardening_hint_current_status' => '현재 .env 권한은 %s 입니다 (소유자: %s). 가장 안전한 권한은 0600 (소유자만 읽기·쓰기) 이며, 다음 두 명령 중 환경에 맞는 쪽을 sudo 로 실행하여 추가 보안 강화를 적용할 수 있습니다.',
'env_hardening_hint_option_strict' => '명령줄 사용자 = 웹 서버 사용자 (단일 사용자 환경)',
'env_hardening_hint_option_group' => '명령줄 사용자 ≠ 웹 서버 사용자 (자체 구축 서버 등 — 그룹 읽기 허용 절충안)',
'env_hardening_hint_note' => '명령 실행 전 환경을 확인하세요. 잘못된 권한 적용 시 웹 서버가 .env 를 읽지 못해 사이트가 응답하지 않을 수 있습니다.',
// Step 5: 완료
'installation_info' => '설치 정보',
'installation_complete_message' => '그누보드7이 성공적으로 설치되었습니다!',
'installed_version_label' => '설치된 버전:',
'site_url' => '사이트 URL',
'installed_at' => '설치 완료 일시',
'go_to_admin_login' => '관리자 로그인',
// 재진입
'completed_tasks' => '완료된 작업',
'interrupted_task' => '중단된 작업',
'pending_tasks' => '미완료 작업',
'interrupted_during_execution' => '진행 중 중단됨',
'resume_continue' => '계속 진행',
'installation_resuming' => '설치 재개',
// 에러 메시지 - 공통
'error_occurred' => '오류가 발생했습니다',
'please_try_again' => '다시 시도해 주세요.',
'invalid_input' => '입력값이 올바르지 않습니다.',
// 에러 메시지 - 검증 (데이터베이스)
'error_db_host_required' => '데이터베이스 호스트는 필수입니다.',
'error_db_name_required' => '데이터베이스 이름은 필수입니다.',
'error_db_username_required' => '데이터베이스 사용자명을 입력해주세요.',
'error_db_credentials_required' => '데이터베이스명과 사용자명은 필수입니다.',
'error_db_username_privileged' => '보안상 :username 계정으로는 설치할 수 없습니다. 최고 권한 계정이 유출되면 데이터베이스 전체가 위험해집니다. G7 전용 데이터베이스 사용자를 새로 만들어 필요한 권한만 부여한 뒤 입력해주세요.',
'error_db_prefix_too_long' => '테이블 접두사는 최대 :max자까지 가능합니다. (입력: :current자) 접두사가 길면 일부 테이블의 인덱스명이 데이터베이스 한도를 초과합니다.',
'error_db_privileges_insufficient' => '데이터베이스에 필요한 권한이 부족합니다.',
'error_db_not_tested' => '데이터베이스 연결 테스트를 먼저 수행해주세요.',
'error_write_db_not_tested' => 'Write DB 연결 테스트를 먼저 수행해주세요.',
'error_read_db_not_tested' => 'Read DB 연결 테스트를 먼저 수행해주세요.',
// 에러 메시지 - 검증 (데이터베이스) (상세)
'error_db_privileges_insufficient_detail' => ':type 데이터베이스에 필요한 권한이 부족합니다: :missing',
'error_db_connection_failed_detail' => ':type 데이터베이스 연결 실패: :error',
'error_db_test_failed' => '데이터베이스 테스트 중 오류 발생',
// 에러 메시지 - 검증 (관리자 계정)
'error_admin_email_invalid' => '유효한 이메일 주소를 입력해주세요.',
'error_admin_language_invalid' => '올바른 언어를 선택해주세요.',
'error_admin_name_required' => '관리자 이름을 입력해주세요.',
'error_admin_password_required' => '관리자 비밀번호를 입력해주세요.',
'error_admin_password_min' => '비밀번호는 최소 8자 이상이어야 합니다.',
'error_admin_password_confirm_required' => '비밀번호 확인을 입력해주세요.',
'error_password_mismatch' => '비밀번호가 일치하지 않습니다.',
'error_app_name_required' => '사이트 이름을 입력해주세요.',
'error_app_url_required' => '사이트 URL을 입력해주세요.',
'error_field_required' => '이 필드는 필수입니다.',
// 에러 메시지 - 시스템 (요구사항)
'error_requirements_check_failed' => '요구사항 검증 중 오류가 발생했습니다.',
'error_php_version_insufficient' => 'PHP 버전이 요구사항을 충족하지 않습니다.',
'error_php_extensions_missing' => '일부 필수 PHP 확장이 설치되어 있지 않습니다.',
'error_disk_space_insufficient' => '디스크 공간이 부족합니다.',
'error_disk_space_unknown' => '디스크 공간을 확인할 수 없습니다.',
'error_directory_not_writable' => '일부 디렉토리에 쓰기 권한이 없습니다.',
// 에러 메시지 - 시스템 (요구사항) (상세)
'error_php_version_insufficient_detail' => 'PHP 버전이 요구사항을 충족하지 않습니다. (현재: :current, 요구: :min+)',
'error_disk_space_insufficient_detail' => '디스크 공간이 부족합니다. (현재: :current MB, 요구: :min MB)',
'error_directory_not_writable_detail' => '일부 디렉토리에 쓰기 권한이 없습니다. 아래 명령어를 실행하여 권한을 부여해주세요.',
'error_required_files_missing' => '필수 파일이 누락되었습니다.',
'error_step_file_not_found' => '단계 파일을 찾을 수 없습니다. 설치 파일이 손상되었을 수 있습니다.',
'error_state_file_creation_failed' => '설치 상태 파일(state.json)을 생성할 수 없습니다. storage/installer 디렉토리의 쓰기 권한을 확인해주세요.',
'error_invalid_step_access' => '올바르지 않은 단계 접근입니다',
'error_invalid_step_access_message' => '올바른 설치 순서대로 진행해주세요.',
// 성공 메시지 - 데이터베이스
'success_db_write_connected' => 'Write 데이터베이스 연결 및 권한 검증에 성공했습니다.',
'success_db_read_connected' => 'Read 데이터베이스 연결 및 권한 검증에 성공했습니다.',
// 성공 메시지 - 요구사항
'success_requirements_met' => '모든 요구사항이 충족되었습니다.',
'success_php_version' => 'PHP 버전이 요구사항을 충족합니다.',
'success_php_extensions' => '모든 필수 PHP 확장이 설치되어 있습니다.',
'success_disk_space' => '디스크 공간이 충분합니다.',
'success_directories_writable' => '모든 디렉토리가 쓰기 가능합니다.',
'success_required_files' => '필수 파일이 모두 존재합니다.',
// 성공 메시지 - 요구사항 (상세)
'success_php_version_detail' => 'PHP 버전이 요구사항을 충족합니다. (현재: :current, 요구: :min+)',
'success_disk_space_detail' => '디스크 공간이 충분합니다. (현재: :current MB, 요구: :min MB)',
// HTTPS 메시지
'https_enabled' => 'HTTPS가 활성화되어 있습니다. (권장)',
'https_disabled' => 'HTTPS가 비활성화되어 있습니다. 보안을 위해 HTTPS 사용을 권장합니다.',
// OPcache 메시지
'opcache_enabled' => 'OPcache가 활성화되어 있습니다. (권장)',
'opcache_disabled_short' => '비활성화됨 — 페이지가 몇 배 느려집니다',
'opcache_disabled_warning' => 'OPcache가 비활성화되어 있습니다. 이 상태에서는 방문자가 페이지를 열 때마다 사이트의 모든 PHP 코드를 처음부터 다시 해석합니다. 같은 서버, 같은 사양에서도 응답 속도가 몇 배까지 느려지며 방문자가 많을수록 격차가 커집니다. 설치는 이대로 진행할 수 있지만, 운영에 사용할 서버라면 php.ini에서 opcache.enable=1 을 켠 뒤 웹서버를 재시작하시기를 강력히 권장합니다.',
'opcache_unknown' => 'OPcache 상태를 확인할 수 없습니다. 서버에서 설정 조회가 제한되어 있습니다.',
// API 응답 메시지
'api_method_not_allowed' => 'POST 요청만 허용됩니다.',
'api_invalid_request' => '잘못된 요청 데이터입니다.',
'api_unexpected_error' => '예상치 못한 오류가 발생했습니다.',
// 단계명 (헬퍼 함수용)
'step_0_welcome' => '환영',
'step_1_license' => '라이선스 동의',
'step_2_requirements' => '설치 환경 확인',
'step_3_configuration' => '설치 정보 입력',
'step_4_extension_selection' => '확장 기능 선택',
'step_5_installation' => '설치 진행',
'step_6_complete' => '완료',
'step_unknown' => '알 수 없는 단계',
// 작업명 (헬퍼 함수용)
'task_composer_check' => '패키지 관리자 확인',
'task_composer_install' => '필수 패키지 설치',
'task_env_create' => '환경 설정 파일 생성',
'task_env_update' => '환경 설정 파일 업데이트',
'task_key_generate' => '보안 키 생성',
'task_dependency_precheck' => '확장 의존성 사전 검증',
'task_db_cleanup' => '기존 DB 테이블 정리',
'task_db_migrate' => '데이터베이스 테이블 생성',
'task_db_seed' => '기본 데이터 생성',
'task_template_install' => '관리자 템플릿 설치',
'task_template_activate' => '관리자 템플릿 활성화',
'task_module_install' => '모듈 설치',
'task_module_activate' => '모듈 활성화',
'task_plugin_install' => '플러그인 설치',
'task_plugin_activate' => '플러그인 활성화',
'task_user_template_install' => '사용자 템플릿 설치',
'task_user_template_activate' => '사용자 템플릿 활성화',
'task_language_pack_install' => '언어팩 설치',
'task_cache_clear' => '임시 파일 정리',
'task_create_settings_json' => '설정 파일 생성',
'task_complete_flag' => '설치 완료 처리',
'task_config_cache' => '설정 캐시 생성',
'task_static_publish' => '부트스트랩 리소스 정적 게시',
'task_unknown' => '알 수 없는 작업',
// 작업 그룹명
'task_group_environment' => '환경 설정',
'task_group_database' => '데이터베이스',
'task_group_admin_templates' => '관리자 템플릿',
'task_group_modules' => '모듈',
'task_group_plugins' => '플러그인',
'task_group_user_templates' => '사용자 템플릿',
'task_group_language_packs' => '언어팩',
'task_group_finalize' => '마무리',
// 그룹 상태 레이블
'status_pending' => '대기',
'status_in_progress' => '진행 중',
'status_completed' => '완료',
'status_failed' => '실패',
'status_aborted' => '중단',
// 에러 메시지 - Worker (Composer)
'error_composer_not_installed' => 'Composer가 설치되어 있지 않습니다.',
'error_composer_install_failed' => 'Composer 의존성 설치에 실패했습니다',
// 로그 메시지 - Worker (Composer)
'log_composer_check_success' => 'Composer 확인 완료',
'log_composer_check_skipped_bundled' => 'Composer 확인 스킵 — 번들 vendor 모드',
'log_composer_check_auto_fallback' => 'Composer 미설치 — 번들 vendor 모드로 자동 폴백 예정',
'log_composer_already_installed' => 'Composer 의존성이 이미 설치되어 있습니다',
'log_composer_install_success' => 'Composer 의존성 설치 완료',
'log_composer_vendor_without_lock' => 'vendor 디렉토리는 있지만 composer.lock 파일이 없습니다 (불완전 상태)',
'log_composer_removing_vendor' => 'vendor 디렉토리를 삭제하고 재설치합니다...',
'log_composer_vendor_deleted' => 'vendor 디렉토리 삭제 완료',
'log_composer_vendor_delete_failed' => 'vendor 디렉토리 삭제 실패 (계속 진행합니다)',
'log_composer_installing_from_lock' => 'composer.lock 파일을 사용하여 의존성을 설치합니다...',
'log_composer_fresh_install' => '새로운 Composer 의존성을 설치합니다...',
'log_composer_cache_cleared' => '이전 패키지 캐시를 삭제했습니다',
// 에러 메시지 - Worker (.env)
'error_env_example_not_found' => '.env.example 파일을 찾을 수 없습니다',
'error_env_create_failed' => '.env 파일 생성에 실패했습니다',
'error_env_not_found' => '.env 파일이 존재하지 않습니다.',
// 로그 메시지 - Worker (.env)
'log_env_create_success' => '.env 파일 생성 완료',
'log_env_update_success' => '.env 파일 업데이트 완료',
'log_env_readonly_skip' => '.env 파일에 쓰기 권한이 없어 업데이트를 건너뜁니다.',
'log_env_flag_skipped' => '.env 파일에 쓰기 권한이 없어 설치 완료 플래그를 건너뜁니다.',
// 에러 메시지 - Worker (Key)
'error_key_generate_failed' => 'Application Key 생성에 실패했습니다',
// 로그 메시지 - Worker (Key)
'log_key_generate_success' => 'Application Key 생성 완료',
// 에러 메시지 - Worker (Database)
'error_db_migrate_failed' => '데이터베이스 테이블 생성에 실패했습니다',
'error_db_seed_failed' => '기본 데이터 입력에 실패했습니다',
// 로그 메시지 - Worker (Database)
'log_db_migrate_success' => '데이터베이스 마이그레이션 완료',
'log_db_seed_success' => '데이터베이스 시딩 완료',
// 에러 메시지 - Worker (Template)
'error_template_install_failed' => '템플릿 설치에 실패했습니다',
'error_template_activate_failed' => '템플릿 활성화에 실패했습니다',
// 로그 메시지 - Worker (Template)
'log_template_install_success' => '템플릿 설치 완료',
'log_template_activate_success' => '템플릿 활성화 완료',
// 에러 메시지 - Worker (Module)
'error_module_install_failed' => '모듈 설치에 실패했습니다',
'error_module_activate_failed' => '모듈 활성화에 실패했습니다',
// 로그 메시지 - Worker (Module)
'log_module_install_success' => '모듈 설치 완료',
'log_module_activate_success' => '모듈 활성화 완료',
// 에러 메시지 - Worker (Plugin)
'error_plugin_install_failed' => '플러그인 설치에 실패했습니다',
'error_plugin_activate_failed' => '플러그인 활성화에 실패했습니다',
// 로그 메시지 - Worker (Plugin)
'log_plugin_install_success' => '플러그인 설치 완료',
'log_plugin_activate_success' => '플러그인 활성화 완료',
// 에러 메시지 - Worker (User Template)
'error_user_template_install_failed' => '사용자 템플릿 설치에 실패했습니다',
'error_user_template_activate_failed' => '사용자 템플릿 활성화에 실패했습니다',
// 로그 메시지 - Worker (User Template)
'log_user_template_install_success' => '사용자 템플릿 설치 완료',
'log_user_template_activate_success' => '사용자 템플릿 활성화 완료',
// 에러/로그 메시지 - Worker (Language Pack)
'error_language_pack_install_failed' => '언어팩 설치에 실패했습니다',
'log_language_pack_install_success' => '언어팩 설치 완료',
'warning_language_pack_install_partial' => '언어팩 일부 설치에 실패했습니다: :identifier (계속 진행)',
// 에러 메시지 - Worker (Cache)
'error_cache_clear_failed' => '캐시 클리어에 실패했습니다',
'error_config_cache_failed' => '설정 캐시 생성에 실패했습니다',
'error_static_publish_failed' => '부트스트랩 리소스 정적 게시에 실패했습니다 (사이트는 API 경로로 정상 동작합니다)',
// 로그 메시지 - Worker (Cache)
'log_cache_clear_success' => '캐시 클리어 완료',
'log_config_cache_success' => '설정 캐시 생성 완료',
'log_static_publish_success' => '부트스트랩 리소스 정적 게시 완료',
// 에러 메시지 - Worker (Settings JSON)
'error_settings_json_failed' => '설정 파일 생성에 실패했습니다',
// 로그 메시지 - Worker (Settings JSON)
'log_creating_settings' => '설정 JSON 파일 생성 중...',
'log_settings_json_created' => '설정 JSON 파일 생성 완료',
// 에러 메시지 - Worker (Admin)
'error_autoload_not_found' => 'vendor/autoload.php 파일을 찾을 수 없습니다',
'error_app_bootstrap_not_found' => 'bootstrap/app.php 파일을 찾을 수 없습니다',
// 로그 메시지 - Worker (Complete)
'log_complete_flag_success' => '설치 완료 플래그 설정 완료',
'log_installation_completed' => '설치가 성공적으로 완료되었습니다',
'log_installation_failed' => '설치 실패',
'log_installation_task_failed' => '[실패] :task: :message',
'log_installation_exception' => '[실패] 설치 중 오류 발생: :error',
// Worker 로그 메시지 (작업 진행)
'log_task_in_progress' => ':task 작업 중...',
'log_task_completed' => ':task 작업 완료',
'log_task_skipped' => ':task (이미 존재하여 건너뜀)',
'manual_commands_guide' => '💡 아래 명령어를 수동으로 실행할 수 있습니다:',
'log_separator' => '========================================',
'log_error_occurred' => '❌ 오류 발생: :error',
'log_env_file_created' => '.env 파일 생성 완료',
'log_env_flag_added' => '.env 파일에 설치 완료 플래그 추가',
'log_installed_flag_created' => 'g7_installed 플래그 파일 생성',
'log_state_updated' => '설치 상태 업데이트 완료',
'log_all_tasks_completed' => '🎉 모든 설치 작업이 완료되었습니다!',
'log_already_completed' => ':task (이미 완료됨)',
// Worker 중단 관련 메시지
'abort_connection_lost' => '[중단] 브라우저 연결이 끊어졌습니다.',
'abort_rollback_start' => "[중단] 현재 작업 ':task' 롤백을 시작합니다.",
'abort_rollback_success' => '[중단] 롤백 완료: :message',
'abort_rollback_failed' => '[중단] 롤백 실패: :message (계속 진행)',
'abort_no_rollback_needed' => '[중단] 롤백할 작업이 없습니다. (current_task가 null이거나 이미 완료됨)',
'abort_by_user' => '[중단] 사용자가 설치를 중단했습니다. (현재 작업: :task)',
'abort_installation_stopped' => '설치가 중단되었습니다.',
// Worker 실패 시 롤백 관련 메시지
'failed_rollback_start' => "[실패] 실패한 작업 ':task' 롤백을 시작합니다.",
'failed_rollback_success' => '[실패] 롤백 완료: :message',
'failed_rollback_failed' => '[실패] 롤백 실패: :message',
'failed_rollback_manual_cleanup' => '[안내] 롤백에 실패했습니다. 데이터베이스를 수동으로 정리한 후 다시 설치를 시도해주세요.',
'failed_rollback_manual_cleanup_detail' => '데이터베이스 관리 도구(phpMyAdmin 등)를 사용하여 생성된 테이블을 삭제하거나, 데이터베이스를 초기화한 후 다시 설치를 진행하세요.',
'failed_rollback_db_restart' => '[안내] 데이터베이스가 롤백되었습니다. 재시도 시 데이터베이스 설치부터 다시 진행됩니다.',
'failed_rollback_retry' => '[안내] 작업에 실패했습니다. 설치를 다시 시도해주세요.',
'failed_rollback_retry_detail' => '재시도 시 실패한 작업부터 다시 진행됩니다. 문제가 지속되면 수동 명령어를 참고하세요.',
// Worker SSE 연결 메시지
'sse_connection_established' => 'SSE 연결이 설정되었습니다',
'sse_method_not_allowed' => '허용되지 않는 메서드입니다. SSE는 GET 요청이 필요합니다.',
// DB 작업 중 중단 불가 메시지
'db_task_no_abort' => '데이터베이스 작업 중에는 중단할 수 없습니다. 작업 완료 후 중단됩니다.',
'db_task_in_progress' => '데이터베이스 작업 중...',
// Worker 에러 상세 메시지
'error_composer_process_failed' => 'Composer 설치 프로세스 시작 실패',
'error_composer_exit_code' => 'Composer 설치 실패 (종료 코드: :code)',
'error_env_example_not_found_detail' => '.env.example 파일을 찾을 수 없습니다: :path',
'error_env_write_failed' => '.env 파일 쓰기 실패: :path',
'error_complete_flag_failed' => '설치 완료 플래그 설정 실패',
'error_unexpected_exception' => '예기치 않은 오류가 발생했습니다',
// install-process.php 메시지
'error_method_not_allowed' => 'POST 요청만 허용됩니다.',
'error_config_not_in_session' => '설정 정보가 세션에 없습니다. Step 3에서 설정을 먼저 완료해주세요.',
'error_required_fields_missing' => '필수 설정 항목이 누락되었습니다: :fields',
'log_installation_config_saved' => '설치 설정 저장 완료 - SSE 연결 대기 중',
'success_installation_started' => '설치가 시작되었습니다.',
'error_installation_start_failed' => '설치 프로세스 시작 실패',
'error_installation_start_exception' => '설치 시작 중 오류가 발생했습니다: :error',
// get-install-state.php 메시지
'error_get_method_required' => 'GET 요청만 허용됩니다.',
'error_state_query_failed' => '설치 상태 조회 중 오류가 발생했습니다.',
// 새로고침/페이지 이탈 경고 (브라우저가 기본 메시지로 표시하지만, 의도 명확화)
'confirm_leave_installation' => '설치가 진행 중입니다. 페이지를 나가면 설치에 문제가 발생할 수 있습니다.',
'confirm_resume_installation' => '설치가 진행 중이었습니다. 설치를 재개하시겠습니까?',
'resume_installation_btn' => '설치 재개',
'cancel_installation_btn' => '취소',
// 설치 완료 후 재접근 메시지
'installation_already_completed' => '설치 완료',
'installation_already_completed_message' => '그누보드7이 이미 설치되었습니다. 홈페이지로 이동합니다.',
// URL 파라미터 접근 메시지
'url_parameter_not_supported' => 'URL 파라미터 사용 불가',
'url_parameter_redirect_message' => '설치 과정은 세션 기반으로 관리됩니다. 요청하신 Step :requested 대신 현재 진행 중인 Step :current(으)로 이동합니다.',
// 설치 중단 관련
'abort_installation' => '설치 중단',
'aborting' => '중단 중',
'confirm_abort_installation' => '정말 설치를 중단하시겠습니까? 중단 시 현재까지의 설치 내용은 유지되며, 나중에 중단된 지점부터 다시 시작할 수 있습니다.',
'installation_aborted' => '설치가 중단되었습니다',
'installation_aborted_message' => '설치 도중 브라우저가 닫혔거나 새로고침되었습니다. 중단된 지점부터 다시 설치할 수 있습니다.',
'clean_state' => '상태 초기화',
'cleaning' => '초기화 중',
'state_cleaned' => '상태가 초기화되었습니다',
'clean_failed' => '초기화 실패',
'clean_error' => '초기화 중 오류 발생',
'resuming' => '재개 중',
'resume_failed' => '재개 실패',
'resume_error' => '재개 중 오류 발생',
'abort_failed' => '중단 실패',
'abort_error_occurred' => '중단 중 오류 발생',
// 검증 에러 메시지 (validation.php)
'validation_required' => ':field은(는) 필수 항목입니다.',
'validation_email' => ':field의 형식이 올바르지 않습니다.',
'validation_min' => ':field은(는) 최소 :min자 이상이어야 합니다.',
'validation_max' => ':field은(는) 최대 :max자까지 입력 가능합니다.',
'validation_url' => ':field은(는) 올바른 URL 형식이어야 합니다.',
'validation_alpha_num' => ':field은(는) 영문자와 숫자만 입력 가능합니다.',
'validation_alpha_num_underscore' => ':field은(는) 영문 소문자, 숫자, 언더스코어(_)만 입력 가능합니다.',
'validation_starts_with_alpha' => ':field은(는) 영문 소문자로 시작해야 합니다.',
'validation_confirmed' => ':field 확인이 일치하지 않습니다.',
'validation_numeric' => ':field은(는) 숫자여야 합니다.',
'validation_integer' => ':field은(는) 정수여야 합니다.',
'validation_in' => ':field은(는) 다음 중 하나여야 합니다: :values',
// 필드명 레이블 (validation.php)
'fields' => [
'db_host' => '데이터베이스 호스트',
'db_port' => '데이터베이스 포트',
'db_database' => '데이터베이스명',
'db_username' => '데이터베이스 사용자명',
'db_password' => '데이터베이스 비밀번호',
'db_write_host' => 'Write 데이터베이스 호스트',
'db_write_port' => 'Write 데이터베이스 포트',
'db_write_database' => 'Write 데이터베이스명',
'db_write_username' => 'Write 데이터베이스 사용자명',
'db_write_password' => 'Write 데이터베이스 비밀번호',
'db_prefix' => '테이블 접두사',
'db_read_host' => 'Read 데이터베이스 호스트',
'db_read_port' => 'Read 데이터베이스 포트',
'db_read_database' => 'Read 데이터베이스명',
'db_read_username' => 'Read 데이터베이스 사용자명',
'db_read_password' => 'Read 데이터베이스 비밀번호',
'app_name' => '사이트 이름',
'app_url' => '사이트 URL',
'admin_name' => '관리자 이름',
'admin_language' => '관리자 언어',
'admin_email' => '관리자 이메일',
'admin_password' => '관리자 비밀번호',
'admin_password_confirmation' => '관리자 비밀번호 확인',
'email' => '이메일',
'password' => '비밀번호',
'password_confirmation' => '비밀번호 확인',
],
// JavaScript 클라이언트 메시지 (installer.js)
'testing_connection' => '연결을 테스트하는 중...',
'connection_failed_prefix' => '연결 실패:',
'validation_incomplete_alert' => '필수 항목을 모두 입력하고 DB 연결 테스트를 완료해주세요.',
'validation_incomplete_title' => '다음 항목을 완료해주세요:',
'confirm_leave_page' => '설정이 저장되지 않았습니다. 페이지를 나가시겠습니까?',
'installation_in_progress_alert' => '설치가 진행 중입니다. 설정 페이지로 돌아가시겠습니까?',
'confirm_go_to_settings' => '설정 페이지로 이동하시겠습니까?',
'confirm_go_to_settings_simple' => "설정 페이지로 이동하시겠습니까?\n\n설치 상태가 초기화되며, 모든 작업이 처음부터 다시 실행됩니다.\n\n⚠️ 데이터베이스에 생성된 테이블은 자동으로 삭제되지 않습니다.\n필요 시 phpMyAdmin 등을 통해 수동으로 정리해주세요.",
'confirm_go_to_settings_title' => '설정 페이지로 이동',
'confirm_go_to_settings_desc' => '설치 상태가 초기화되며, 모든 작업이 처음부터 다시 실행됩니다.\n\n⚠️ 데이터베이스에 생성된 테이블은 자동으로 삭제되지 않습니다. 필요 시 phpMyAdmin 등을 통해 수동으로 정리해주세요.',
'confirm_go_to_settings_btn' => '이동',
'reset_db_checkbox_label' => '데이터베이스 초기화 (생성된 테이블 삭제)',
'error_state_reset_failed' => '상태 초기화에 실패했습니다.\n\n:message\n\n페이지를 새로고침 후 다시 시도해주세요.',
'confirm_force_go_to_settings' => '상태 초기화 중 오류가 발생했습니다.\n\n그래도 설정 페이지로 이동하시겠습니까?',
'view_error_details' => '오류 상세 보기',
'installation_error_occurred' => '설치 중 오류가 발생했습니다.',
'installation_start_error' => '설치 시작 중 오류 발생',
'installation_start_failed' => '설치를 시작할 수 없습니다.',
'unknown_error_occurred' => '알 수 없는 오류가 발생했습니다.',
// SSE 연결 실패 메시지
'sse_connection_timeout' => 'SSE 실시간 연결에 실패했습니다. 서버 설정을 확인하거나 페이지를 새로고침해주세요.',
'sse_server_config_guide' => '서버 관리자이신 경우 아래 설정을 확인해주세요:
[Nginx 설정]
location /install/api/ {
proxy_buffering off;
proxy_cache off;
proxy_read_timeout 600s;
}
[Apache 설정]
# .htaccess 또는 httpd.conf
<Location /install/api/>
SetEnv no-gzip 1
</Location>
[PHP 설정]
// install-worker.php 최상단에 추가
ini_set(\'output_buffering\', \'off\');
ini_set(\'zlib.output_compression\', \'off\');
@apache_setenv(\'no-gzip\', 1);
[공유 호스팅]
호스팅 제공업체에 SSE(Server-Sent Events) 지원 여부를 문의해주세요.
방화벽이나 프록시에서 long-lived HTTP 연결을 차단하고 있을 수 있습니다.',
// 설치 진행 방식 (SSE / 폴링)
'installation_mode_label' => '설치 진행 방식',
'installation_mode_sse_title' => '실시간 스트리밍 (SSE) — 권장',
'installation_mode_sse_desc' => '서버가 진행 상황을 즉시 전송합니다. 일반 환경에서 가장 빠르고 안정적입니다.',
'installation_mode_polling_title' => '호환성 모드 (폴링)',
'installation_mode_polling_desc' => 'Nginx 프록시, 공유 호스팅 등 SSE 연결 오류가 발생하는 환경에서 사용하세요. 1초마다 상태를 확인합니다.',
'sse_fallback_confirm' => 'SSE 연결에 실패했습니다.\n\n호환성 모드(폴링)로 다시 시도하시겠습니까?',
'sse_probe_incompat_use_polling' => "현재 환경에서는 SSE 실시간 연결을 사용할 수 없습니다.\n\n호환성 모드(폴링)로 설치를 진행하시겠습니까?\n\n[확인] 폴링 모드로 설치 시작\n[취소] 설치 시작 화면으로 돌아가기",
'start_installation_button' => '설치 시작',
// Step 4 의존성 경고
'dependency_warning_title' => '의존성 누락 감지',
'dependency_warning_description' => '다음 확장이 필요합니다. "필요한 항목 자동 선택" 버튼을 눌러 한 번에 해결할 수 있습니다.',
'dependency_auto_select' => '필요한 항목 자동 선택',
'dependency_missing_tooltip' => '의존성을 먼저 해결해주세요',
'dependency_precheck_failed' => '의존성 사전 검증 실패 — Step 4로 돌아가 누락된 모듈/플러그인을 선택해주세요',
// Step 3 기존 DB 감지
'db_existing_g7_badge' => '기존 그누보드7 설치 감지',
'db_existing_foreign_badge' => '다른 데이터 감지',
'db_existing_mixed_badge' => 'G7 일부 + 다른 테이블 혼재',
'db_existing_g7_title' => '그누보드7 기존 설치 감지',
'db_existing_foreign_title' => '다른 데이터 감지',
'db_existing_mixed_title' => '데이터 혼재 감지',
'db_existing_generic_title' => '기존 테이블 감지',
'db_existing_g7_desc' => '선택한 DB에 이미 그누보드7이 설치되어 있습니다. 강제 진행 시 입력한 테이블 접두사로 시작하는 기존 그누보드7 테이블이 삭제됩니다. 반드시 백업 후 진행하세요.',
'db_existing_foreign_desc' => '선택한 DB에 알 수 없는 테이블이 존재합니다. 강제 진행 시 입력한 테이블 접두사로 시작하는 테이블만 삭제되며, 접두사가 다른 테이블은 보존됩니다. 반드시 백업 후 진행하세요.',
'db_existing_mixed_desc' => '선택한 DB에 G7 일부 테이블과 다른 테이블이 혼재합니다. 강제 진행 시 입력한 테이블 접두사로 시작하는 테이블만 삭제되며, 접두사가 다른 테이블은 보존됩니다.',
'db_existing_generic_desc' => '선택한 DB에 기존 테이블이 존재합니다. 강제 진행 시 입력한 테이블 접두사로 시작하는 테이블만 삭제됩니다.',
'db_existing_tables_list' => '감지된 테이블 (최대 20개):',
'db_backup_guide' => '백업 명령어 예시 (호스트/사용자/데이터베이스명 확인 후 실행하세요):',
'db_backup_confirmed' => '백업을 완료했으며, 입력한 접두사로 시작하는 기존 테이블이 삭제되는 것에 동의합니다',
'error_db_cleanup_consent_required' => '기존 테이블 삭제에 동의하셔야 다음 단계로 진행할 수 있습니다.',
'db_force_proceed_drop' => '기존 테이블 삭제 후 설치',
'db_force_proceed_confirmed' => '강제 진행 모드 (설치 시 기존 테이블 삭제)',
'log_db_cleanup_skipped' => '기존 테이블 정리 건너뛰기 (액션 없음)',
'log_db_cleanup_empty' => '기존 테이블이 없습니다. 정리 건너뛰기',
'log_db_cleanup_dropping' => '기존 테이블 {count}개 삭제 시작...',
'log_db_cleanup_done' => '기존 테이블 {count}개 삭제 완료',
'error_db_cleanup_failed' => '기존 DB 테이블 정리 실패',
// 다크모드
'toggle_theme' => '테마 전환',
'dark_mode' => '다크 모드',
'light_mode' => '라이트 모드',
// Step 4: 확장 기능 선택
'extension_selection_description' => '설치할 확장 기능을 선택하세요. 관리자 템플릿은 필수 선택입니다.',
'loading_extensions' => '확장 기능을 불러오는 중...',
'admin_templates' => '관리자 템플릿',
'admin_templates_description' => '관리자 페이지에서 사용할 템플릿을 선택하세요.',
'user_templates' => '사용자 템플릿',
'user_templates_description' => '프론트 페이지에서 사용할 템플릿을 선택하세요.',
'modules' => '모듈',
'modules_description' => '설치할 모듈을 선택하세요. 모듈은 게시판, 이커머스 등 주요 기능을 제공합니다.',
'plugins' => '플러그인',
'plugins_description' => '설치할 플러그인을 선택하세요. 플러그인은 결제, 알림 등 부가 기능을 제공합니다.',
'language_packs' => '언어팩',
'language_packs_description' => '추가 언어 지원을 위한 번들 언어팩을 선택하세요. 종속 확장이 함께 선택되어야 활성화됩니다.',
'optional' => '선택',
'no_extensions_found' => '사용 가능한 확장이 없습니다.',
'no_user_templates' => '사용 가능한 사용자 템플릿이 없습니다.',
'no_modules' => '사용 가능한 모듈이 없습니다.',
'no_plugins' => '사용 가능한 플러그인이 없습니다.',
'no_language_packs' => '사용 가능한 번들 언어팩이 없습니다.',
'language_pack_disabled_by_extension' => '종속된 확장이 선택되지 않아 비활성화되었습니다.',
'language_pack_scope_core' => '코어',
'language_pack_scope_module' => '모듈',
'language_pack_scope_plugin' => '플러그인',
'language_pack_scope_template' => '템플릿',
'bulk_select_all_optional' => '선택 가능한 모든 항목 선택',
'bulk_select_section' => '전체 선택',
// 브랜드명
'brand_name' => '그누보드7',
// Step 3 — Vendor 설치 방식
'vendor_mode_title' => 'Vendor 설치 방식',
'vendor_mode_description' => 'PHP 패키지 의존성(vendor/) 을 어떤 방식으로 설치할지 선택합니다.',
'vendor_mode_auto_title' => '자동',
'vendor_mode_auto_description' => 'Composer 사용 가능 시 Composer, 불가 시 번들 vendor 사용',
'vendor_mode_auto_status_ok' => '환경 자동 감지',
'vendor_mode_composer_title' => 'Composer 실행',
'vendor_mode_composer_description' => 'composer install 명령으로 최신 버전 설치 (인터넷 + proc_open 필수)',
'vendor_mode_composer_status_ok' => 'proc_open 사용 가능',
'vendor_mode_composer_status_blocked' => 'proc_open() 차단됨 — 사용 불가',
'vendor_mode_bundled_title' => '번들 Vendor 사용',
'vendor_mode_bundled_description' => 'vendor-bundle.zip 을 추출 (오프라인 설치, composer 불필요)',
'vendor_mode_bundled_status_ok' => 'vendor-bundle.zip 발견',
'vendor_mode_bundled_status_no_ziparchive' => 'ZipArchive 확장 미설치 — 사용 불가',
'vendor_mode_bundled_status_no_zip' => 'vendor-bundle.zip 파일 없음 — 사용 불가',
'vendor_mode_badge_recommended' => '권장',
'vendor_mode_badge_dev' => '개발 환경',
'vendor_mode_badge_shared' => '공유 호스팅',
'vendor_mode_change_later_html' => '이 설정은 추후 <code>php artisan core:update --vendor-mode=...</code> 옵션으로 변경할 수 있습니다.',
// 설치 진행 중단 감지
'error_installation_stuck' => '설치가 응답하지 않습니다. 서버 워커가 명령 실행 중 멈췄을 수 있습니다. 새로고침하거나 재시도하세요. 문제가 반복되면 storage/logs/installation.log 를 확인해주세요.',
'extension_load_failed' => '확장 기능 목록을 불러오는데 실패했습니다.',
'no_admin_template_error' => '관리자 템플릿이 필요하지만 찾을 수 없습니다. templates 디렉토리에 최소 1개 이상의 관리자 템플릿이 있는지 확인해주세요.',
'selection_summary' => '선택 요약',
'selected_count' => ':count개 선택됨',
'admin_template_required' => '관리자 템플릿은 최소 1개 이상 선택해야 합니다.',
'proceed_to_installation' => '설치 진행',
'version' => '버전',
'select' => '선택',
'selected' => '선택됨',
'dependencies' => '의존성',
'dependency_type_module' => '모듈',
'dependency_type_plugin' => '플러그인',
'dependency_type_admin_template' => '관리자 템플릿',
'dependency_type_user_template' => '사용자 템플릿',
'dependency_type_other' => '기타',
'dep_auto_badge_label' => '필수 의존성',
'dep_lock_message' => ':names 이(가) 이 항목을 필요로 합니다. 먼저 해당 확장을 해제해주세요.',
'dep_version_required' => '필요 버전',
'dep_version_available' => '설치 가능 버전',
'author' => '제작자',
'retry' => '재시도',
'select_all' => '전체 선택',
'deselect_all' => '전체 해제',
// install-worker.php 다국어 키
'db_task_abort_detected_before_start' => '[DB 작업] 시작 전 중단 상태 감지 - 작업을 건너뜁니다.',
'db_task_failed_rollback_start' => '[DB 작업] :task 실패 - 롤백을 시작합니다.',
'db_task_abort_reason_connection' => '연결 끊김',
'db_task_abort_reason_user' => '사용자 요청',
'db_task_completed_abort_detected' => '[DB 작업] :task 완료 후 중단 감지 (:reason) - 롤백을 시작합니다.',
'db_task_completed_rollback_start' => '[중단] :task 완료 후 롤백을 시작합니다.',
'log_removing_state_file' => '인스톨러 상태 파일을 제거합니다...',
'log_state_file_removed' => '인스톨러 상태 파일이 제거되었습니다.',
'log_state_file_remove_failed' => '경고: 인스톨러 상태 파일 제거에 실패했습니다.',
'error_worker_exception' => '설치 워커 SSE 예외 발생',
// rollback-functions.php 다국어 키
'log_prefix_rollback' => '[롤백]',
'log_prefix_force_rollback' => '[강제 롤백]',
'rollback_not_needed_recreatable' => '롤백 불필요 (새로 생성 가능)',
'rollback_not_needed_overwritable' => '롤백 불필요 (재설치/재활성화 시 덮어쓰기 가능)',
'rollback_unknown_task' => '알 수 없는 작업: :task',
'rollback_error' => '[롤백 오류] :task: :error',
'rollback_exception' => '롤백 중 예외 발생: :error',
'rollback_migrate_start' => '마이그레이션 롤백을 시작합니다 (migrate:rollback).',
'rollback_migrate_result' => 'migrate:rollback 실행 결과: :result',
'rollback_migrate_success' => '마이그레이션 롤백 완료',
'rollback_migrate_failed_code' => '마이그레이션 롤백 실패 (returnCode: :code)',
'rollback_migrate_failed' => '마이그레이션 롤백 실패',
'rollback_migrate_error' => '마이그레이션 롤백 중 오류: :error',
'rollback_seed_no_config' => 'DB 설정 정보가 없어 시드 롤백을 건너뜁니다.',
'rollback_seed_already_done' => '시드 이미 완료됨 (롤백 불필요)',
'rollback_seed_interrupted' => '시드가 중단되었습니다. 테이블을 비웁니다.',
'rollback_seed_force_truncate' => '시드 데이터를 무조건 삭제합니다.',
'rollback_table_truncated' => "테이블 ':table'을 비웠습니다.",
'rollback_table_truncate_skipped' => "테이블 ':table' TRUNCATE 건너뜀: :error",
'rollback_seed_data_deleted' => '시드 데이터를 삭제했습니다.',
'rollback_db_connection_failed' => 'DB 연결 실패: :error',
'rollback_db_connection_failed_skip' => 'DB 연결 실패. 시드 롤백을 건너뜁니다.',
'rollback_seed_error' => '시드 처리 중 오류: :error',
'rollback_env_flag_removed' => '.env에서 INSTALLER_COMPLETED를 제거했습니다.',
'rollback_installed_flag_removed' => 'g7_installed 파일을 삭제했습니다.',
'rollback_runtime_removed' => '인스톨러 런타임 설정 파일을 정리했습니다.',
'error_worker_busy' => '다른 인스톨 워커가 진행 중입니다. 잠시 후 다시 시도하세요.',
'rollback_complete_flag_removed' => '설치 완료 플래그를 제거했습니다: :details',
'rollback_complete_flag_error' => '완료 플래그 제거 중 오류: :error',
'rollback_no_current_task' => '롤백할 현재 작업이 없습니다. (current_task가 null)',
'rollback_task_already_completed' => "':task'은(는) 이미 완료된 작업입니다. (롤백 불필요)",
'rollback_current_task_start' => "[중단] 현재 작업 ':task' 롤백을 시작합니다.",
'rollback_no_completed_tasks' => '롤백할 완료된 작업이 없습니다.',
'rollback_checking_tasks' => '롤백 가능한 작업들을 확인합니다...',
'rollback_no_matching_tasks' => '롤백할 작업이 없습니다. (rollbackable 목록과 매칭되는 작업 없음)',
'rollback_tasks_to_rollback' => '롤백할 작업: :tasks',
'rollback_task_rolling_back' => "':task' 작업을 롤백합니다...",
'rollback_task_success' => "':task' 롤백 성공",
'rollback_task_failed' => "':task' 롤백 실패: :error",
'manual_cmd_settings_json' => 'settings.json은 자동으로 생성됩니다. 설치를 다시 시도하세요.',
// state-management.php 다국어 키
'state_reset_requested' => '설정 페이지로 이동을 요청했습니다.',
'state_reset_db_notice' => 'DB는 자동으로 초기화되지 않습니다. 필요 시 수동으로 정리해주세요.',
'state_save_failed' => '상태 파일 저장에 실패했습니다.',
'state_reset_completed' => '설치 상태가 초기화되었습니다. (Step :step(으)로 이동)',
'abort_api_requested' => '[중단 API] abort 요청됨 - 사용자가 설치 중단 요청',
'abort_api_current_status' => '[중단 API] 현재 installation_status: :status',
'abort_api_current_task' => '[중단 API] 현재 current_task: :task',
'abort_api_completed_count' => '[중단 API] 완료된 작업 수: :count',
'abort_api_already_completed' => '설치가 이미 완료되어 중단할 수 없습니다.',
'abort_api_already_aborted' => '설치가 이미 중단되었습니다.',
'abort_api_not_running' => '중단할 설치가 없습니다.',
'abort_user_requested' => '사용자가 설치 중단을 요청했습니다.',
'abort_api_status_change' => '[중단 API] installation_status를 "aborted"로 변경합니다.',
'abort_api_save_result' => '[중단 API] state.json 저장 결과: :result',
'abort_api_verify_status' => '[중단 API] 저장 후 확인 - installation_status: :status',
'error_state_management' => '상태 관리 오류',
'error_log_prefix' => '[오류] :error',
// functions.php 다국어 키
'error_db_name_username_required' => '데이터베이스 이름과 사용자명은 필수입니다.',
'error_db_invalid_parameter' => '데이터베이스 :field 값에 허용되지 않는 문자가 포함되어 있습니다.',
'error_db_connection_failed' => '데이터베이스 연결 실패: :error',
'error_privilege_check_failed' => '권한 검증 중 오류 발생',
// 필수 파일 생성 안내 (Step 5)
'file_setup_title' => '필수 파일 생성',
'file_setup_description' => '설치를 진행하려면 아래 파일이 프로젝트 루트에 필요합니다.',
'file_setup_guide' => '터미널에서 아래 명령어를 프로젝트 루트 디렉토리에서 실행하세요:',
'file_check_button' => '파일 확인',
'file_checking' => '확인 중...',
'files_not_found_yet' => '필수 파일을 아직 찾을 수 없습니다. 파일을 생성한 후 다시 확인해주세요.',
'copy_command' => '복사',
'copied' => '복사됨!',
// Step 2 권한 안내
'permission_fix_guide' => '아래 명령어를 터미널 또는 SSH에서 실행하여 권한을 부여하세요:',
'ownership_mismatch_option_group' => '[권장] 그룹 공유 방식 — 웹서버 그룹으로 변경하여 쓰기 권한 부여:',
'ownership_mismatch_option_chown' => '[대안 1] 소유자 변경 — 소유자를 웹서버 사용자로 변경:',
'ownership_mismatch_option_777' => '[대안 2] 최후 수단 — 모든 사용자에게 쓰기 허용 (보안 약화, 비권장):',
'ownership_mismatch_hint' => '※ 현재 소유자: :owner / 웹서버 실행 사용자: :web_user. 위 3가지 중 환경에 맞는 방법을 선택하세요.',
'permission_fallback_title' => '위 명령어로 해결되지 않는 경우',
'permission_fallback_detail' => '전용 서버 등 일부 환경에서는 다음 명령어가 필요할 수 있습니다: chmod -R 775 :path',
'permission_windows_hint' => '※ Windows 환경에서는 관리자 권한으로 명령 프롬프트(cmd)를 열고 실행하세요. 또는 폴더 속성 → 보안 탭에서 권한을 설정할 수 있습니다.',
'directory_create_guide' => '아래 명령어를 실행하여 누락된 디렉토리를 생성하세요:',
// 디렉토리명 (Step 2)
'dir_bootstrap_cache' => '부트스트랩 캐시 디렉토리',
'dir_vendor' => '패키지 디렉토리',
'dir_modules' => '모듈 디렉토리',
'dir_modules_pending' => '모듈 대기 디렉토리',
'dir_plugins' => '플러그인 디렉토리',
'dir_plugins_pending' => '플러그인 대기 디렉토리',
'dir_templates' => '템플릿 디렉토리',
'dir_templates_pending' => '템플릿 대기 디렉토리',
// save-extensions.php 다국어 키
'log_extensions_selected' => '확장 기능 선택 완료: 관리자 템플릿 :admin개, 사용자 템플릿 :user개, 모듈 :modules개, 플러그인 :plugins개, 언어팩 :language_packs개',
'log_extensions_saved' => '확장 기능 선택이 저장되었습니다.',
'error_admin_template_required' => '관리자 템플릿을 최소 1개 이상 선택해주세요.',
'error_invalid_extension_identifier' => '확장 식별자 ":identifier" 가 허용된 형식이 아닙니다 (그룹: :group). 영문/숫자/`._-` 만 사용할 수 있습니다.',
// 코어 업데이트 설정
'core_update_settings' => '코어 업데이트 설정 (선택)',
'core_update_pending_path' => '업데이트 대기 디렉토리 경로',
'core_update_pending_path_help' => '비워두면 기본값(storage/app/core_pending)을 사용합니다. 외부 경로를 사용하려면 절대 경로 또는 그누보드7 루트 기준 상대 경로를 입력하세요.',
// 자산 URL 방식 (이슈 #486)
'asset_url_mode' => '에셋 파일 서빙 방식',
'asset_url_mode_extension' => '확장자 사용 (권장)',
'asset_url_mode_extensionless' => '확장자 미사용',
'asset_url_mode_help' => '서버 설정을 자동으로 감지해 선택합니다. 정적 파일 최적화 규칙(nginx의 location ~* \\.(js|css|json|png|jpg|jpeg|gif|ico|svg|woff2?)$ 블록 등)이 확장자 주소를 가로채면 화면이 뜨지 않는데, 그 경우 확장자 미사용을 선택하세요.',
'asset_url_mode_detected_extension' => '감지 결과: 확장자를 사용할 수 있는 환경입니다.',
'asset_url_mode_detected_extensionless' => '감지 결과: 정적 파일 최적화 규칙(nginx location ~* \\.(js|css|json|...)$ 블록 등)이 확장자 주소를 가로채고 있어 확장자 미사용을 선택했습니다.',
'asset_url_mode_detected_unavailable' => '확장자 있는 주소와 없는 주소 모두 응답하지 않아 서빙 방식을 감지하지 못했습니다. 에셋 방식 자체의 문제라기보다, 앱이 아직 이 주소에서 정상 응답하지 않거나(PHP·라우팅 설정) 프록시·보안 규칙(CSP 등)이 프로브 요청을 막고 있을 가능성이 큽니다. 이 항목은 설치를 막지 않으니 계속 진행할 수 있으며, 설치 후 화면이 비어 보이면 관리자 > 환경설정 > 일반에서 확장자 미사용으로 바꿔 보세요.',
'asset_url_mode_checking' => '확인 중…',
'asset_url_mode_unknown' => '확인 불가',
'core_update_github_url' => 'GitHub 저장소 URL',
'core_update_github_url_help' => '코어 업데이트를 확인할 GitHub 저장소 URL입니다.',
'core_update_github_token' => 'GitHub 액세스 토큰',
'core_update_github_token_help' => '프라이빗 저장소인 경우 GitHub Personal Access Token이 필요합니다. 공개 저장소인 경우 비워둘 수 있습니다.',
'check_core_pending_path' => '경로 확인',
'dir_core_pending' => '코어 업데이트 대기 디렉토리',
'core_pending_will_be_created' => '디렉토리가 존재하지 않습니다. 설치 시 자동으로 생성됩니다.',
'core_pending_path_ok' => '경로가 유효합니다.',
'core_pending_info' => '소유자: :owner, 그룹: :group, 퍼미션: :permissions',
'error_core_pending_not_directory' => '지정한 경로가 디렉토리가 아닙니다.',
'error_core_pending_not_writable' => '디렉토리(:path)에 쓰기 권한이 없습니다.',
'error_core_pending_parent_not_writable' => '상위 디렉토리(:path)에 쓰기 권한이 없어 자동 생성이 불가합니다.',
'error_path_required' => '경로를 입력해주세요.',
'error_core_pending_path_invalid' => '입력한 경로가 유효한 디렉토리가 아니거나 허용되지 않은 형식입니다.',
// PHP CLI / Composer 설정
'php_cli_settings' => 'PHP CLI 설정 (선택)',
'php_cli_settings_required' => 'PHP CLI 설정 (필수)',
'php_cli_settings_help' => '호스팅 환경에서 PHP CLI가 시스템 PATH에 없거나 버전이 다른 경우 직접 경로를 지정할 수 있습니다. 일반적인 환경에서는 변경할 필요가 없습니다.',
'php_cli_settings_help_required' => '기본 php 명령어로 PHP CLI를 실행할 수 없습니다. 올바른 PHP CLI 경로를 지정하고 버전을 확인해주세요.',
'php_binary_path' => 'PHP CLI 경로',
'php_binary_path_help' => '예: /usr/local/php82/bin/php (기본값: php)',
'composer_binary_path' => 'Composer 경로',
'composer_binary_path_help' => '비워두면 시스템 PATH에서 자동 탐색합니다. .phar 파일 경로도 지원합니다.',
'verify_version' => '버전 확인',
'auto_detect_php' => 'PHP 자동 감지',
'detecting_php' => 'PHP 바이너리를 탐색 중입니다...',
'detected_php_binaries' => '감지된 PHP 바이너리 (클릭하여 선택):',
'no_php_detected' => '서버에서 PHP 바이너리를 찾을 수 없습니다.',
'php_detected_count' => ':count개의 PHP 바이너리를 발견했습니다.',
'success_php_binary_version' => ':path — PHP :version ✓',
'error_php_path_empty' => 'PHP 바이너리 경로가 비어있습니다.',
'error_php_path_not_exists' => '파일이 존재하지 않습니다: :path',
'error_php_exec_failed' => 'PHP 실행 실패: :path',
'error_php_binary_path_not_allowed' => '사용할 수 없는 PHP 경로 형식입니다 (:path). 실행 파일의 절대경로만 입력하세요 — 옵션(- 로 시작), 상대경로, .. 는 쓸 수 없습니다.',
'error_composer_binary_path_not_allowed' => '사용할 수 없는 Composer 경로 형식입니다 (:path). composer 실행 파일 또는 .phar 의 절대경로만 입력하세요. 멀티 PHP 환경은 "PHP절대경로 composer절대경로" 형식으로 입력할 수 있습니다.',
'error_php_version_too_low' => ':path — PHP :version (최소 :min 필요)',
'error_php_version_parse_failed' => 'PHP 버전을 파싱할 수 없습니다.',
'error_php_cli_not_verified' => 'PHP CLI 경로가 확인되지 않았습니다. "버전 확인" 버튼을 클릭해주세요.',
'error_composer_not_verified' => 'Composer 실행이 확인되지 않았습니다. "버전 확인" 버튼을 클릭해주세요.',
'error_composer_path_not_exists' => '파일이 존재하지 않습니다: :path',
'error_composer_exec_failed' => 'Composer 실행 실패: :path',
'error_composer_version_parse_failed' => 'Composer 버전을 파싱할 수 없습니다.',
'error_check_failed' => '확인 요청에 실패했습니다. 네트워크 또는 서버 상태를 확인해 주세요.',
'session_cookie_blocked_title' => '세션 쿠키 차단 감지',
'session_cookie_blocked_description' => '브라우저가 인스톨러의 세션 쿠키(PHPSESSID)를 보존하지 않아 설치 도중 진행이 멈출 수 있습니다. 그대로 진행은 가능하지만 권장하지 않으며, 아래 회피 방법 중 하나를 시도해 주세요.',
'session_cookie_blocked_remedy_1' => '다른 브라우저로 다시 접속해 주세요. 시크릿/프라이빗 창은 보통 쿠키 정책이 더 엄격하므로 일반 창 사용을 권장합니다.',
'session_cookie_blocked_remedy_2' => '브라우저의 쿠키/사이트 데이터 차단 설정을 해제한 뒤 새로고침 해 주세요.',
'session_cookie_blocked_remedy_3' => '도메인 대신 IP 또는 localhost 로 접속해 보세요. 예: http://localhost:포트/install/',
'session_cookie_blocked_technical_detail' => '기술 상세: 인스톨러 세션 쿠키 round-trip 검증이 실패했습니다. (SameSite 정책, 비표준 포트, 브라우저 추적 보호 등의 조합으로 인한 차단 추정)',
'session_cookie_blocked_dismiss' => '경고 닫기',
'success_composer_version' => ':path — Composer :version ✓',
'composer_install_guide_title' => 'Composer 설치 안내',
'composer_install_guide_message' => 'Composer가 설치되어 있지 않습니다. 아래 방법으로 설치할 수 있습니다:',
'composer_install_guide_global' => '전역 설치 (권장):',
'composer_install_guide_local' => '로컬 설치 (프로젝트 디렉토리):',
'composer_install_guide_hosting' => '호스팅 환경 설치 (위 방법이 안 될 경우):',
'composer_install_guide_pwd_hint' => '설치 후 아래 명령어로 현재 디렉토리의 절대 경로를 확인하세요:',
'composer_install_guide_phar_hint' => '위 Composer 경로 입력란에 절대 경로를 포함한 전체 실행 명령어를 입력하세요. 예: /usr/local/php84/bin/php /home/user/g7/composer.phar',
'composer_install_guide_link' => '자세한 설치 방법은 <a href="https://getcomposer.org/download/" target="_blank" rel="noopener">getcomposer.org</a>를 참조하세요.',
'composer_checking' => 'Composer를 확인하는 중입니다...',
'cli_status_checking' => '확인 중...',
'cli_status_verified' => '✓ 확인됨',
'cli_status_not_verified' => '✗ 미확인',
'cli_status_optional_bundled' => '— 선택사항 (번들 모드)',
// 환경 체크 강화
'required_functions' => '필수 함수',
'required_functions_available' => '사용 가능',
'required_functions_disabled' => ':count개 비활성화',
'success_required_functions' => '필수 함수(exec, proc_open, shell_exec)가 모두 사용 가능합니다.',
'error_disabled_functions' => '다음 함수가 비활성화되어 있어 설치를 진행할 수 없습니다: :functions. 호스팅 관리자에게 활성화를 요청하세요.',
'php_cli_version' => 'PHP CLI 버전',
'php_cli_version_check_skipped' => 'exec 함수가 비활성화되어 CLI 버전 확인을 건너뛰었습니다.',
'php_cli_version_unknown' => 'PHP CLI 버전을 확인할 수 없습니다.',
'php_cli_version_matched' => '일치 (웹: :web, CLI: :cli)',
'php_cli_version_mismatch' => '불일치 (웹: :web, CLI: :cli)',
'php_cli_version_mismatch_hint' => 'Step 3에서 올바른 PHP CLI 경로를 지정해주세요.',
'success_core_pending_path' => '경로가 유효하고 쓰기 권한이 있습니다.',
// .env 통합 안내
'required_files_fix_guide_combined' => '.env 파일 생성 및 권한 설정이 필요합니다. 아래 명령어를 실행해주세요:',
// 상대경로 병기 안내
'or_relative_path' => '또는 그누보드7 루트 디렉토리에서:',
];