'언어팩 목록을 조회했습니다.', 'fetch_failed' => '언어팩 목록을 불러오지 못했습니다.', 'not_found' => '언어팩을 찾을 수 없습니다.', 'install_success' => '언어팩을 설치했습니다.', 'install_failed' => '언어팩 설치에 실패했습니다.', 'activate_success' => '언어팩을 활성화했습니다.', 'activate_failed' => '언어팩 활성화에 실패했습니다.', 'deactivate_success' => '언어팩을 비활성화했습니다.', 'deactivate_failed' => '언어팩 비활성화에 실패했습니다.', 'uninstall_success' => '언어팩을 제거했습니다.', 'uninstall_failed' => '언어팩 제거에 실패했습니다.', 'manifest_invalid' => 'language-pack.json 검증에 실패했습니다.', 'check_updates_success' => '업데이트 확인을 완료했습니다.', 'check_updates_failed' => '업데이트 확인에 실패했습니다.', 'update_success' => '언어팩을 업데이트했습니다.', 'update_failed' => '언어팩 업데이트에 실패했습니다.', 'refresh_cache_success' => '언어팩 캐시를 갱신했습니다.', 'refresh_cache_failed' => '언어팩 캐시 갱신에 실패했습니다.', 'preview_success' => 'manifest 미리보기를 완료했습니다.', 'preview_failed' => 'manifest 미리보기에 실패했습니다.', 'errors' => [ 'manifest_not_found' => 'ZIP 안에서 language-pack.json 파일을 찾을 수 없습니다.', 'manifest_invalid_json' => 'language-pack.json 의 JSON 형식이 올바르지 않습니다.', 'php_outside_backend' => 'PHP 파일은 backend/{언어코드}/{그룹}.php 위치에만 둘 수 있습니다 (:file).', 'php_file_not_literal_array' => 'PHP 파일에는 번역 배열만 담을 수 있습니다. :file 파일 :line 번째 줄에 배열이 아닌 코드가 있습니다.', 'unsupported_file_type' => '언어팩에 넣을 수 없는 파일 형식입니다 (:file — :extension). json, php, md 파일만 포함할 수 있습니다.', 'symlink_not_allowed' => '언어팩에는 심볼릭 링크를 포함할 수 없습니다 (:file).', 'auto_activate_requires_manage' => '설치 후 바로 켜기는 언어팩 관리 권한이 필요합니다. 이 항목을 빼면 설치는 그대로 진행됩니다.', 'core_locale_missing' => '코어 언어팩(:locale)이 먼저 활성화되어야 합니다.', 'target_not_installed' => '대상 :scope (:target)이 설치되어 있지 않습니다.', 'target_inactive' => '대상 :scope (:target)이 비활성 상태입니다. 먼저 활성화해야 합니다.', 'target_version_too_old' => '대상 :scope (:target) 버전이 요구 조건(:constraint)을 충족하지 않습니다.', 'downgrade_blocked' => '다운그레이드가 차단되었습니다 (:from → :to).', 'protected_pack' => '보호된 언어팩은 비활성화/제거할 수 없습니다.', 'download_failed' => 'URL(:url) 에서 언어팩을 다운로드하지 못했습니다: :error', 'download_url_not_public' => '내부 네트워크 주소(사설 IP·localhost 등)에서는 언어팩을 내려받을 수 없습니다. 외부에서 접속 가능한 https 주소를 사용해주세요.', 'checksum_mismatch' => '체크섬이 일치하지 않습니다.', 'update_no_source' => '업데이트 소스 정보가 없습니다 (GitHub 소스 언어팩만 업데이트 가능).', 'update_already_latest' => '이미 최신 버전입니다.', 'preview_invalid_manifest' => 'manifest 파일이 유효하지 않아 미리보기에 실패했습니다.', 'operation_in_progress' => '언어팩(:identifier) 에서 다른 작업이 진행 중입니다. 완료 후 다시 시도해주세요.', 'bundled_not_found' => '번들 디렉토리(lang-packs/_bundled/:identifier) 가 존재하지 않습니다.', 'slot_conflict' => '같은 슬롯에 이미 활성 언어팩(:current)이 있습니다. (:target)으로 교체하려면 확인이 필요합니다.', 'directory_not_writable' => '언어팩 설치 디렉토리(:path) 에 쓰기 권한이 없습니다. 웹 서버 사용자(예: www-data) 에게 쓰기 권한을 부여하세요. (예: sudo chgrp www-data :path && sudo chmod g+w :path)', 'identifier_not_found' => '언어팩을 찾을 수 없습니다 (:identifier).', 'unsupported_source' => '지원하지 않는 소스 (:source) — bundled, github, url 중 하나를 사용하세요.', ], 'validation' => [ 'file_required' => '언어팩 ZIP 파일을 업로드하세요.', 'file_invalid' => '업로드된 파일이 유효하지 않습니다.', 'file_too_large' => '파일 크기는 10MB 를 초과할 수 없습니다.', 'file_not_zip' => 'ZIP 형식의 파일만 업로드할 수 있습니다.', 'github_url_required' => 'GitHub URL 을 입력하세요.', 'github_url_invalid' => '올바른 URL 을 입력하세요.', 'github_url_format' => 'GitHub 저장소 URL 형식이어야 합니다 (예: https://github.com/owner/repo).', 'url_required' => '다운로드 URL 을 입력하세요.', 'url_invalid' => '올바른 URL 을 입력하세요.', 'checksum_invalid' => 'SHA-256 체크섬은 64자 16진수여야 합니다.', 'identifier_required' => '언어팩 식별자를 입력하세요.', 'identifier_invalid' => '식별자는 영문/숫자/점/언더스코어/하이픈만 허용됩니다.', ], ];