공개 (@Tuwasduliebst 제보) 대응. - ckeditor5: 미참조 이미지 정리 엔진 신설 — 참조 판정(hash + 파일명 2토큰, filter_reference_sources 훅으로 확장 콘텐츠 등록) + 정리 커맨드(기본 꺼짐 옵트인, 3중 게이트) + 업로드 관리 화면(권한 분리·참조 배지·개별/선택 삭제) + 기설치본 설정 백필 upgrade step - board: 임시 첨부 GC(상시) + 소프트삭제 첨부 영구 정리(옵트인) + 설정 UI, 저장 payload 누락(F4)·빈 temp 디렉토리 잔존(F5) 수정 - ecommerce: 임시 상품 이미지 GC + 카테고리 삭제 시 이미지 파일 미삭제(S4) 수정 - page: 임시 첨부 GC - 코어: 고아 첨부 정리 커맨드(옵트인, site_logo 보호) + 사이트 로고 교체 시 구 로고 재편입 차단(S6) + DB 백업 미구현 501 정직화(B3) + 플러그인 관리자 메뉴 설치·업데이트 자동 동기화(F1·F7) - 동반: 플러그인 설정 검증 오류 필드명 라벨화(F3), Toggle 노드 type 정정 수평 전개(marketing 1.0.2 bump·gdpr·ecommerce), ja 언어팩 4종, API 문서, hooks.md, 시나리오 매니페스트 8종, Playwright E2E 4종
204 lines
13 KiB
PHP
204 lines
13 KiB
PHP
<?php
|
|
|
|
return [
|
|
// 설정 관련 메시지
|
|
'fetch_success' => '설정을 성공적으로 가져왔습니다.',
|
|
'fetch_failed' => '설정을 가져오는데 실패했습니다.',
|
|
'save_success' => '설정이 성공적으로 저장되었습니다.',
|
|
'save_failed' => '설정 저장에 실패했습니다.',
|
|
'update_success' => '설정이 성공적으로 업데이트되었습니다.',
|
|
'update_failed' => '설정 업데이트에 실패했습니다.',
|
|
'delete_success' => '설정이 성공적으로 삭제되었습니다.',
|
|
'delete_failed' => '설정 삭제에 실패했습니다.',
|
|
'save_error' => '설정 저장 중 오류가 발생했습니다.',
|
|
'update_error' => '설정 업데이트 중 오류가 발생했습니다.',
|
|
'cache_clear_success' => '캐시가 성공적으로 정리되었습니다.',
|
|
'cache_clear_failed' => '캐시 정리에 실패했습니다.',
|
|
'cache_clear_error' => '캐시 정리 중 오류가 발생했습니다.',
|
|
'optimize_success' => '시스템이 성공적으로 최적화되었습니다.',
|
|
'optimize_failed' => '시스템 최적화에 실패했습니다.',
|
|
'optimize_error' => '시스템 최적화 중 오류가 발생했습니다.',
|
|
'backup_success' => '데이터베이스 백업이 성공적으로 시작되었습니다.',
|
|
'backup_failed' => '데이터베이스 백업에 실패했습니다.',
|
|
'backup_error' => '데이터베이스 백업 중 오류가 발생했습니다.',
|
|
'database_backup_unavailable' => '데이터베이스 백업 기능은 아직 제공하지 않습니다. 설정 백업은 설정 백업 기능을 이용해 주세요.',
|
|
'backup_path_required' => '백업 경로를 입력해주세요.',
|
|
'restore_success' => '설정이 성공적으로 복원되었습니다.',
|
|
'restore_failed' => '설정 복원에 실패했습니다.',
|
|
'restore_error' => '설정 복원 중 오류가 발생했습니다.',
|
|
'save_individual_failed' => '설정 저장에 실패했습니다: :error',
|
|
|
|
// 앱 키 관련 메시지
|
|
'invalid_password' => '비밀번호가 일치하지 않습니다.',
|
|
'password_required' => '비밀번호를 입력해주세요.',
|
|
'app_key_regenerated' => '어플리케이션 키가 성공적으로 재생성되었습니다.',
|
|
'app_key_regenerate_failed' => '어플리케이션 키 재생성에 실패했습니다.',
|
|
'app_key_regenerate_warning' => '키를 변경하면 모든 세션이 무효화됩니다. 계속하시겠습니까?',
|
|
|
|
// 시스템 정보 관련
|
|
'seconds' => '초',
|
|
|
|
// 드라이버 라벨 (DriverRegistryService 가 활성 언어팩 별로 조회)
|
|
'drivers' => [
|
|
'storage' => [
|
|
'local' => '로컬',
|
|
's3' => 'Amazon S3',
|
|
],
|
|
'public_asset' => [
|
|
'none' => '사용 안 함 (스트리밍)',
|
|
'public' => 'Public 디스크',
|
|
's3' => 'Amazon S3',
|
|
],
|
|
'cache' => [
|
|
'file' => '파일',
|
|
'redis' => 'Redis',
|
|
],
|
|
'session' => [
|
|
'file' => '파일',
|
|
'database' => '데이터베이스',
|
|
'redis' => 'Redis',
|
|
],
|
|
'queue' => [
|
|
'sync' => '동기',
|
|
'database' => '데이터베이스',
|
|
'redis' => 'Redis',
|
|
],
|
|
'log' => [
|
|
'single' => '단일 파일',
|
|
'daily' => '일별 파일',
|
|
],
|
|
'websocket' => [
|
|
'reverb' => 'Laravel Reverb',
|
|
],
|
|
'mail' => [
|
|
'smtp' => 'SMTP',
|
|
'mailgun' => 'Mailgun',
|
|
'ses' => 'SES (Amazon)',
|
|
],
|
|
'search' => [
|
|
'mysql-fulltext' => 'MySQL 전문검색',
|
|
],
|
|
],
|
|
|
|
// 드라이버 연결 테스트 메시지
|
|
'driver_test_success' => '모든 드라이버 연결 테스트가 성공했습니다.',
|
|
'driver_test_partial' => '일부 드라이버 연결 테스트가 실패했습니다.',
|
|
'driver_test_error' => '드라이버 연결 테스트 중 오류가 발생했습니다.',
|
|
'unknown_driver' => '알 수 없는 드라이버입니다.',
|
|
|
|
// S3 테스트 메시지
|
|
's3_test_success' => 'S3 버킷에 성공적으로 연결되었습니다.',
|
|
's3_test_failed' => 'S3 버킷 연결에 실패했습니다.',
|
|
's3_missing_config' => 'S3 설정이 누락되었습니다. (버킷, 리전, 액세스 키, 시크릿 키)',
|
|
's3_sdk_missing' => 'AWS SDK가 설치되어 있지 않습니다.',
|
|
's3_adapter_missing' => 'S3 스토리지 어댑터(league/flysystem-aws-s3-v3)가 설치되어 있지 않습니다.',
|
|
's3_bucket_not_found' => 'S3 버킷을 찾을 수 없습니다.',
|
|
's3_access_denied' => 'S3 버킷에 대한 접근이 거부되었습니다.',
|
|
's3_invalid_credentials' => 'S3 인증 정보가 올바르지 않습니다.',
|
|
|
|
// Redis 테스트 메시지
|
|
'redis_test_success' => 'Redis 서버에 성공적으로 연결되었습니다.',
|
|
'redis_test_failed' => 'Redis 서버 연결에 실패했습니다.',
|
|
'redis_extension_missing' => 'Redis PHP 확장이 설치되어 있지 않습니다.',
|
|
'redis_connection_failed' => 'Redis 서버에 연결할 수 없습니다.',
|
|
'redis_auth_failed' => 'Redis 인증에 실패했습니다.',
|
|
'redis_ping_failed' => 'Redis PING 응답이 없습니다.',
|
|
|
|
// Memcached 테스트 메시지
|
|
'memcached_test_success' => 'Memcached 서버에 성공적으로 연결되었습니다.',
|
|
'memcached_test_failed' => 'Memcached 서버 연결에 실패했습니다.',
|
|
'memcached_extension_missing' => 'Memcached PHP 확장이 설치되어 있지 않습니다.',
|
|
'memcached_connection_failed' => 'Memcached 서버에 연결할 수 없습니다.',
|
|
|
|
// Websocket 테스트 메시지
|
|
'websocket_test_success' => 'Websocket 서버에 성공적으로 연결되었습니다.',
|
|
'websocket_test_failed' => 'Websocket 서버 연결에 실패했습니다.',
|
|
'websocket_server_test_failed' => 'Websocket 서버(백엔드 발송용) endpoint 연결에 실패했습니다. 클라이언트 endpoint 는 정상입니다.',
|
|
'driver_unusable_s3_adapter' => 'S3 스토리지 어댑터(league/flysystem-aws-s3-v3)가 설치되어 있지 않습니다.',
|
|
'driver_unusable_redis_client' => 'phpredis 확장과 predis 라이브러리가 모두 없습니다.',
|
|
'driver_unusable_memcached_extension' => 'memcached PHP 확장이 설치되어 있지 않습니다.',
|
|
'websocket_invalid_host' => 'Websocket 호스트 설정이 올바르지 않습니다. 호스트에는 주소만 입력하고 계정 정보(@)나 http/https 이외의 프로토콜은 사용할 수 없습니다.',
|
|
'websocket_connection_refused' => 'Websocket 서버에 연결할 수 없습니다. 서버가 실행 중인지 확인해주세요.',
|
|
|
|
// 테스트 메일 관련 메시지
|
|
'invalid_email' => '유효하지 않은 이메일 주소입니다.',
|
|
'test_mail_subject' => ':app_name 테스트 메일',
|
|
'test_mail_body' => '이것은 그누보드7에서 발송한 테스트 메일입니다. 이 메일을 받으셨다면 메일 설정이 올바르게 구성되어 있습니다.',
|
|
'test_mail_sent' => '테스트 메일이 성공적으로 발송되었습니다.',
|
|
'test_mail_failed' => '테스트 메일 발송에 실패했습니다.',
|
|
'test_mail_error' => '테스트 메일 발송 중 오류가 발생했습니다.',
|
|
|
|
// 코어 업데이트 관련 메시지
|
|
'core_update' => [
|
|
'check_success' => '업데이트 확인이 완료되었습니다.',
|
|
'check_failed' => '업데이트 확인에 실패했습니다.',
|
|
'update_available' => '새로운 업데이트가 있습니다.',
|
|
'no_update' => '현재 최신 버전입니다.',
|
|
'maintenance_mode_active' => '시스템 점검 중입니다. 잠시 후 다시 시도해주세요.',
|
|
'invalid_github_url' => 'GitHub 저장소 URL이 유효하지 않습니다.',
|
|
'download_failed' => ':version 버전 다운로드에 실패했습니다.',
|
|
'zip_extract_failed' => 'ZIP 파일 압축 해제에 실패했습니다.',
|
|
'invalid_package' => '다운로드된 패키지가 유효하지 않습니다.',
|
|
'invalid_package_not_g7' => '지정된 디렉토리가 그누보드7 프로젝트가 아닙니다. config/app.php 파일과 version 설정이 필요합니다.',
|
|
'composer_failed' => 'composer install 실행에 실패했습니다.',
|
|
'pending_path_create_failed' => '_pending 디렉토리(:path) 생성에 실패했습니다: :error',
|
|
'pending_path_not_writable' => '_pending 디렉토리(:path)에 쓰기 권한이 없습니다.',
|
|
'downloading' => '업데이트 다운로드 중...',
|
|
'extracting' => '압축 해제 중...',
|
|
'validating' => '패키지 검증 중...',
|
|
'running_composer' => 'composer install 실행 중...',
|
|
'step_check' => '업데이트 확인 중...',
|
|
'step_validate_pending' => '환경 검증 중...',
|
|
'step_maintenance' => '유지보수 모드 활성화 중...',
|
|
'step_download' => '다운로드 중...',
|
|
'step_backup' => '백업 생성 중...',
|
|
'step_apply' => '파일 적용 중...',
|
|
'step_composer' => 'composer install 중...',
|
|
'step_migration' => '마이그레이션 실행 중...',
|
|
'step_upgrade' => '업그레이드 스텝 실행 중...',
|
|
'step_composer_prod' => '운영 디렉토리 composer install 중...',
|
|
'step_cleanup' => '정리 중...',
|
|
|
|
// 파일 적용 방식 요약 (Step 7)
|
|
'apply_mode_incremental' => '파일 적용: 코어가 실제 변경한 파일만 적용했습니다 (신규 :added개, 변경 :changed개). 그 외 파일은 현재 상태 그대로 보존되었습니다.',
|
|
'apply_mode_incremental_prune_hint' => '신 버전에서 제거된 파일을 함께 정리하려면 `--prune` 옵션으로 다시 실행하거나 `php artisan hotfix:rollback-stale-files --prune` 을 사용하세요.',
|
|
'apply_mode_prune' => '파일 적용: 전체 덮어쓰기 + 제거된 파일 정리를 수행했습니다 (--prune).',
|
|
'apply_mode_fallback' => '파일 적용: 백업이 없어 증분 적용을 건너뛰고 전체 덮어쓰기를 수행했습니다. 사용자 커스텀 파일 보존을 원하면 다음부터는 백업을 유지한 채 업데이트하세요.',
|
|
|
|
// GitHub API 에러 메시지
|
|
'github_url_not_configured' => 'GitHub 저장소 URL이 설정되지 않았습니다.',
|
|
'github_api_failed' => 'GitHub API에 연결할 수 없습니다.',
|
|
'github_token_required' => '프라이빗 저장소입니다. GitHub 액세스 토큰을 설정해주세요.',
|
|
'github_token_invalid' => 'GitHub 액세스 토큰이 유효하지 않거나 권한이 부족합니다. (HTTP :status — :message)',
|
|
'github_repo_not_found' => 'GitHub 저장소를 찾을 수 없습니다. (HTTP :status — :message)',
|
|
'github_repo_not_found_no_token' => 'GitHub 저장소를 찾을 수 없습니다. 프라이빗 저장소인 경우 액세스 토큰을 설정해주세요. (HTTP :status — :message)',
|
|
'github_api_error' => 'GitHub API 오류가 발생했습니다. (HTTP :status — :message)',
|
|
'no_releases_found' => 'GitHub 저장소에 릴리스가 없습니다. (HTTP :status — :message)',
|
|
|
|
// 로그 메시지
|
|
'log_api_call_failed' => '코어 업데이트: GitHub API 호출 실패',
|
|
'log_auth_failed' => '코어 업데이트: GitHub 인증 실패',
|
|
'log_not_found' => '코어 업데이트: GitHub 저장소/릴리스 미발견',
|
|
'log_unexpected_status' => '코어 업데이트: 예상하지 못한 HTTP 상태 코드',
|
|
'log_version_check_error' => '코어 업데이트: 최신 버전 확인 중 오류',
|
|
|
|
'unknown_error' => '알 수 없는 오류가 발생했습니다.',
|
|
|
|
// 시스템 요구사항
|
|
'system_requirements_failed' => '시스템 요구사항이 충족되지 않습니다:',
|
|
'no_extract_method_available' => '사용 가능한 아카이브 추출 방법이 없습니다. PHP zip 확장(ZipArchive) 또는 unzip 명령어(Linux) 중 하나가 필요합니다. 또는 --source 옵션으로 수동 업데이트할 수 있습니다.',
|
|
'manual_update_guide' => '수동 업데이트: GitHub에서 릴리스 ZIP을 다운로드하여 압축 해제 후, php artisan core:update --source=/압축해제/경로 명령어를 실행하세요.',
|
|
|
|
// 추출 폴백 체인
|
|
'archive_url_not_found' => ':type 아카이브 URL을 찾을 수 없습니다. 다음 방법을 시도합니다.',
|
|
'extracting_with' => ':method 방식으로 압축 해제 중...',
|
|
'extract_empty' => '압축 해제된 디렉토리가 비어 있습니다.',
|
|
'extract_fallback' => ':method 방식 실패: :error — 다음 방법을 시도합니다.',
|
|
'all_extract_methods_failed' => '모든 아카이브 추출 방법이 실패했습니다. --source 옵션으로 수동 업데이트를 시도하세요.',
|
|
'unzip_command_failed' => 'unzip 명령어 실행 실패 (종료 코드: :code). :output',
|
|
'zip_file_not_found' => '지정된 ZIP 파일을 찾을 수 없습니다: :path',
|
|
'source_vendor_missing' => '소스 디렉토리에 vendor가 없습니다. composer install이 실행되지 않았을 수 있습니다.',
|
|
'composer_failed_with_output' => 'composer install 실행에 실패했습니다.:output',
|
|
],
|
|
];
|