diff --git a/docs/references/terminology-ko-KR.md b/docs/references/terminology-ko-KR.md
new file mode 100644
index 000000000..ae717051f
--- /dev/null
+++ b/docs/references/terminology-ko-KR.md
@@ -0,0 +1,175 @@
+# ko-KR 용어 및 UI 문구 가이드
+
+이 문서는 ScriptCat 한국어(`ko-KR`) 인터페이스와 문서에서 사용할 용어와 문체를 정의합니다. 목표는 한국어 사용자에게 자연스럽고 명확한 UI를 제공하면서 ScriptCat의 스크립트 유형, 기능 이름, 개발자 용어를 정확히 구분하는 것입니다.
+
+검토 기준: `src/locales/en-US/*.json`, `src/locales/zh-CN/*.json`, `src/pkg/utils/monaco-editor/langs.ts`, `docs/references/terminology-en-US.md`, `docs/references/terminology-zh-CN.md`
+
+## 원칙
+
+1. 영어 또는 중국어 문장을 단어 단위로 직역하지 말고, 한국어 소프트웨어 UI에서 자연스러운 표현을 사용합니다.
+2. `일반 스크립트`, `페이지 스크립트`, `백그라운드 스크립트`, `예약 스크립트`는 서로 다른 제품 개념이므로 임의로 합치지 않습니다.
+3. 일반적인 userscript 생태계나 기능은 `유저스크립트`로 표현하고, ScriptCat의 ordinary/normal script 유형은 `일반 스크립트`로 표현합니다.
+4. 원문이 모호하거나 다른 locale과 충돌하면 실제 기능, 화면 위치, 주변 문구와 제품 용어를 확인한 뒤 결정합니다.
+5. placeholder, HTML/React 태그, URL, 코드 식별자와 `@match`, `@exclude`, `@grant`, `@connect`, `@resource`, `@require` 등의 메타데이터 식별자를 변경하지 않습니다.
+6. 기술 용어는 개발자가 알아볼 수 있도록 정확히 유지하되, 일반 사용자용 설명은 이해하기 쉬운 한국어로 작성합니다.
+7. 레이블은 짧고 명확하게 쓰고, 설명 문장은 일관된 높임말과 종결 표현을 사용합니다.
+8. 중국어 전각 문장 부호(`:`, `,`, `。`)를 한국어 문구에 사용하지 않습니다.
+
+## 분류
+
+| 분류 | 용도 |
+| --- | --- |
+| **A. 제품 및 기능 용어** | ScriptCat의 기능과 스크립트 유형을 식별하는 이름 |
+| **B. UI 작업 및 상태** | 버튼, 메뉴, 레이블, 알림에 사용하는 기본 표현 |
+| **C. 문맥에 따라 선택하는 용어** | 기능과 화면에 따라 번역이 달라지는 단어 |
+| **D. 유지해야 하는 기술 용어** | API, 메타데이터, 표준 기술 개념 |
+| **E. 한국어 문체 및 형식** | 띄어쓰기, placeholder, 문장 부호, 높임말 규칙 |
+| **F. 기존 문구 검토 대상** | 현재 번역에서 특히 주의해야 할 혼용 사례 |
+
+## A. 제품 및 기능 용어
+
+| 개념 | 우선 사용 | 예시 key | 설명 |
+| --- | --- | --- | --- |
+| ScriptCat browser extension | `ScriptCat 확장 프로그램` | `welcome_title`, `ext_update_notification` | 제품명 `ScriptCat`의 대소문자를 유지합니다. |
+| generic userscript capability | `유저스크립트` | `script_list_content`, `allow_user_script_guide`, Monaco `thisIsAUserScript` | 생태계, 일반 기능, 호환 형식을 뜻할 때 사용합니다. |
+| ordinary/normal ScriptCat script type | `일반 스크립트` | `create_user_script`, `script_list.sidebar.normal_script` | 백그라운드 스크립트 및 예약 스크립트와 구분되는 제품 유형입니다. |
+| page script | `페이지 스크립트` | `script_list_enable_content` | 페이지에서 실행되는 개념을 설명할 때 사용합니다. |
+| background script | `백그라운드 스크립트` | `create_background_script`, `background_script` | 제품의 백그라운드 실행 유형 및 기능입니다. |
+| scheduled script | `예약 스크립트` | `create_scheduled_script`, `scheduled_script` | 제품 유형 이름입니다. `crontab 스크립트`로 부르지 않습니다. |
+| cron scheduling syntax | `cron 표현식`, `cron 일정` | `cron_invalid_expr`, `tasks_cron` | 예약 스크립트의 일정 문법을 설명할 때만 사용합니다. |
+| script synchronization | `스크립트 동기화` | `script_sync`, `sync_status` | 연결과 동기화를 구분합니다. |
+| deletion synchronization | `삭제 동기화` | `sync_delete`, `notification.script_sync_delete` | 자세한 동작은 설명 문구에서 안내합니다. |
+| subscription object | `구독` | `subscribe`, `subscribe_url`, `count_subscribes` | 객체와 기능 이름입니다. |
+| subscribe action | `구독하기` 또는 문맥에 맞는 `구독 설치` | 설치/작업 버튼 | 명사 `구독`과 동작을 문맥에 맞게 구분합니다. |
+| script discovery destination | `스크립트 마켓` / `스크립트 갤러리` | `script_list_title`, `script_gallery` | 실제 링크와 화면의 제품 이름을 따릅니다. 임의로 하나로 합치지 않습니다. |
+| AI Agent | `AI 에이전트` | `agent:title` | 일반 UI에서는 한국어 표기를 사용합니다. |
+| Skill feature | `스킬` | `skills`, `import_skill` | 일반 문구에서는 `스킬`을 사용하고 `SKILL.md`, `SKILL.cat.md`, `SkillScript`는 그대로 유지합니다. |
+| model provider | `모델 제공업체` | `provider_select`, `provider_subtitle` | 기능 페이지 이름이 `모델 서비스`인 경우 해당 이름을 유지할 수 있습니다. |
+| script manager | `유저스크립트 관리자` | 확장 프로그램 설명 | 커뮤니티 문맥에서 `매니저`를 사용할 수 있으나 제품 설명은 `관리자`를 우선합니다. |
+
+## B. UI 작업 및 상태
+
+| 개념 | 우선 사용 | 예시 key | 설명 |
+| --- | --- | --- | --- |
+| create | `만들기` / `새로 만들기` | `create_script`, `create_background_script` | 같은 메뉴 안에서는 한 표현으로 통일합니다. |
+| save / save as | `저장` / `다른 이름으로 저장` | `save`, `save_as` | 알림은 `저장되었습니다`처럼 자연스러운 문장으로 씁니다. |
+| import / export | `가져오기` / `내보내기` | `import`, `export` | 파일과 데이터 작업에서 일관되게 사용합니다. |
+| install / update | `설치` / `업데이트` | `script`, `update_script` | 객체 이름이 필요하면 함께 표시합니다. |
+| run / runtime | `실행` / `런타임` 또는 `실행 시간` | `run`, `runtime`, `log_title` | 기술 레이블과 일반 설명의 문맥을 확인합니다. |
+| enable / disable | `활성화` / `비활성화` | `enable`, `disable` | 상태는 `활성화됨` / `비활성화됨`을 사용합니다. |
+| allow / deny | `허용` / `거부` | `allow_action`, `deny_action` | 권한 결정에 사용합니다. |
+| settings | `설정` | `settings`, `script_setting` | 제품 옵션과 사용자 설정에 사용합니다. |
+| configuration data | `구성` 또는 문맥에 맞는 `설정` | `skills_config`, `editor_config` | 사용자에게 자연스러운 표현을 선택하고 `컨피그`는 피합니다. |
+| connect / sync | `연결` / `동기화` | `connect`, `script_sync` | 서비스 연결과 데이터 동기화를 구분합니다. |
+| restore / reset / clear | `복원` / `초기화` / `비우기`·`지우기` | `restore`, `reset`, `clear` | 서로 다른 동작이므로 혼용하지 않습니다. |
+| load / reload | `불러오는 중` / `새로고침` | `loading`, `click_to_reload` | 파일 또는 데이터를 가져오는 동작과 import를 구분합니다. |
+| delete | `삭제` | `delete`, `delete_success` | 성공 알림은 `삭제되었습니다`를 사용합니다. |
+| browser tab | `탭` | `close_current_tab`, `script_run_env.*` | `태그`와 혼동하지 않습니다. |
+| directory / folder | `디렉터리` / `폴더` | `open_directory`, `opfs_type_directory` | 개발자 파일 시스템과 일반 폴더 UI를 구분할 수 있습니다. |
+| click / tap | `클릭` / 터치 전용일 때 `탭` | 도움말, 펼치기 동작 | 데스크톱 확장 UI에서는 `클릭`을 우선합니다. |
+
+## C. 문맥에 따라 선택하는 용어
+
+| 개념 | 사용할 수 있는 표현 | 선택 기준 | 예시 key |
+| --- | --- | --- | --- |
+| source | `출처`, `설치 출처`, `구독 출처`, `소스 코드` | origin/provenance는 `출처`, code는 `소스 코드`를 사용합니다. | `source`, `col_source`, `prompt.source` |
+| local / cloud | `로컬` / `클라우드` | 데이터 위치, 백업 위치, 동기화 대상을 설명합니다. | `local`, `cloud`, `backup_to` |
+| storage | `저장소`, `저장 공간` | 기능 이름과 짧은 레이블은 `저장소`, 공간을 설명하는 문장은 `저장 공간`을 사용할 수 있습니다. | `script_storage`, `storage_error` |
+| panel / console | `패널` / `콘솔` | ScriptCat 조작 UI는 `패널`, 개발자 도구 출력은 `콘솔`을 사용합니다. | `background_script_description`, `build_success_message` |
+| permission | `권한` | 기능이 수행할 수 있는 능력과 권한 목록에 사용합니다. | `permission`, `permission_management` |
+| authorization | `권한 허용`, `권한 부여`, `권한 요청` | 스크립트에 접근을 허용하거나 허용 기간을 정할 때 사용합니다. | `auth_duration`, `confirm_expired_title` |
+| authentication | `인증` | 계정, 자격 증명, 로그인 정보 검증에만 사용합니다. | `auth_type`, `account_validation_failed` |
+| match / exclude | `일치` / `제외` | 사용자 문구에서는 의미를 설명하고 `@match`, `@exclude` 식별자는 그대로 유지합니다. | `website_match`, `website_exclude` |
+| arguments / parameters | `매개변수` | 일반 UI에서 우선 사용합니다. 매우 개발자 중심 문맥에서는 `인수`도 가능합니다. | `chat_tool_arguments` |
+| origin | `오리진` | 웹 플랫폼의 security origin을 뜻할 때 사용합니다. 일반적인 출처와 구분합니다. | `opfs_subtitle`, cross-origin copy |
+| all tabs | `모든 탭` | 형제 값이 `일반 탭`, `시크릿 탭`인 경우 bare `전체`를 피합니다. | `script_run_env.all` |
+
+## D. 유지해야 하는 기술 용어
+
+| 개념 | 표기 | 예시 key | 설명 |
+| --- | --- | --- | --- |
+| regular expression | `정규식` / 설명에서는 `정규 표현식` | `search_regex` | 개발자 UI의 짧은 레이블은 `정규식`이 자연스럽습니다. |
+| cron expression | `cron 표현식` | `cron_invalid_expr`, `tasks_cron` | 제품 유형 이름인 `예약 스크립트`와 구분합니다. |
+| expression | `표현식` | `value_export_expression`, `expression_format_error` | 조건식, 내보내기 식 등 기술 의미를 유지합니다. |
+| watch file changes | `파일 감시` / `감시 중지` | `watch_file`, `stop_watch_file` | 지속적인 변경 감지를 뜻합니다. |
+| metadata declaration | `선언` | `error_metadata_line_duplicated` | 값이나 일반 항목이 아니라 메타데이터 선언입니다. |
+| Storage API | `Storage API` 또는 기존 제품 표기 | `storage_api` | API 이름은 알아볼 수 있게 유지합니다. |
+| OPFS | `오리진 전용 파일 시스템(OPFS)` | `opfs_subtitle` | `출처별`로 직역하지 않습니다. |
+| CORS | `교차 출처 접근(CORS)` | `permission_cors` | `교차 도메인`보다 정확한 기술 표현을 사용합니다. |
+| product/API identifiers | 원문 유지 | ESLint, VSCode, Cookie, GM API, MCP, CloudCat | 이름과 식별자를 번역하거나 철자를 바꾸지 않습니다. |
+| metadata identifiers | 원문 유지 | `@match`, `@exclude`, `@grant`, `@connect` | 설명을 붙일 수 있지만 식별자 자체는 변경하지 않습니다. |
+| exact filenames/types | 원문 유지 | `SKILL.md`, `SKILL.cat.md`, `SkillScript`, `.d.ts` | 프로그램이 인식하거나 사용자가 검색해야 하는 이름입니다. |
+
+## E. 한국어 문체 및 형식
+
+### 레이블과 문장
+
+- 버튼과 메뉴는 짧은 명사형 또는 동작형으로 씁니다: `저장`, `삭제`, `업데이트 확인`.
+- 설명 문장은 `~합니다` 체를 기본으로 사용합니다.
+- 사용자 지시는 `~하세요`를 사용합니다.
+- 확인 대화상자는 `~하시겠습니까?`를 사용합니다.
+- 레이블에는 불필요한 마침표를 붙이지 않고, 완전한 문장에는 문장 부호를 사용합니다.
+
+### placeholder와 조사
+
+- `{{count}}`, `{{name}}`, `{0}`, `$0`, `${dir}`를 그대로 유지합니다.
+- 사용자에게 `은(는)`, `이(가)`, `을(를)` 같은 조사 선택 표기를 노출하지 않습니다.
+- 조사가 필요 없는 구조로 문장을 바꿉니다.
+
+예:
+
+```text
+나쁨: 스크립트 "{{name}}"을(를) 삭제하시겠습니까?
+권장: "{{name}}" 스크립트를 삭제하시겠습니까?
+```
+
+### 숫자와 단위
+
+- UI 카운터는 `{{count}}개`, `{{count}}초`, `{{count}}줄`처럼 숫자와 단위를 붙여 씁니다.
+- 문맥상 객체가 불명확하면 `{{count}}개 항목`, `{{count}}개 스크립트`처럼 대상을 표시합니다.
+
+### 영문 식별자와 띄어쓰기
+
+- 영문 약어와 뒤따르는 일반 명사는 띄어 씁니다: `API 키`, `URL 패턴`, `MCP 서버`.
+- 조사와 어미는 자연스럽게 붙입니다: `URL에서`, `ScriptCat이`.
+- 메타데이터 식별자와 설명 명사는 띄어 씁니다: `@connect 태그`, `@match 규칙`.
+- 정확한 코드, URL, 파일명 내부에는 임의로 공백을 추가하지 않습니다.
+
+### 문장 부호
+
+- 한국어 문구에서 중국어 전각 문장 부호 `:`, `,`, `。`를 사용하지 않습니다.
+- 콜론은 `:`, 쉼표는 `,`, 마침표는 `.`를 사용합니다.
+- 로딩/진행 표시의 말줄임표는 가능하면 `…`로 통일합니다.
+- 같은 화면에서 `...`와 `…`를 혼용하지 않습니다.
+
+## F. 기존 문구 검토 대상
+
+| 대상 | 주의할 문제 | 권장 방향 | 예시 key |
+| --- | --- | --- | --- |
+| `인증` / 권한 허용 | authorization을 authentication으로 오역할 수 있음 | 권한 결정은 `권한 허용`·`권한 요청`, 계정 검증만 `인증` | `auth_duration`, `loading_confirm` |
+| 일반 스크립트 / 유저스크립트 | 제품 유형과 일반 생태계 용어가 섞일 수 있음 | 제품 유형은 `일반 스크립트`, 일반 개념은 `유저스크립트` | `create_user_script`, `thisIsAUserScript` |
+| 예약 스크립트 / crontab script | 유형 이름과 문법 이름이 섞일 수 있음 | 유형은 `예약 스크립트`, 문법은 `cron 표현식` | `only_background_scheduled_can_run` |
+| `소스` / `출처` | origin과 source code가 혼동될 수 있음 | origin은 `출처`, code는 `소스 코드` | `common:source`, `prompt.source` |
+| `Skill` / `스킬` | 동일한 기능 이름이 혼용될 수 있음 | 일반 UI는 `스킬`, 정확한 식별자는 원문 유지 | `import_skill`, `skills_title` |
+| 브라우저 탭 | bare `전체`가 무엇을 뜻하는지 불명확할 수 있음 | `모든 탭`, `일반 탭`, `시크릿 탭` | `script_run_env.*` |
+| clear / reset | 데이터 비우기와 기본값 초기화가 혼동될 수 있음 | `비우기`·`지우기`와 `초기화`를 구분 | `clear_success`, `reset` |
+| cross-origin / CORS | `교차 도메인`은 기술적으로 부정확할 수 있음 | `교차 출처` 사용 | `permission_cors` |
+| 특정 브라우저 이름 | 다중 브라우저 기능에 Chrome이 남을 수 있음 | 구현이 특정 브라우저 전용이 아니면 `브라우저` 사용 | `enable_background.description` |
+| placeholder 조사 | `을(를)` 같은 기계적 표기가 노출될 수 있음 | 조사가 필요 없는 문장으로 재구성 | `confirm_delete_script_content` |
+
+## AI 및 기여자 체크리스트
+
+한국어 번역을 추가하거나 수정할 때:
+
+1. 대상 locale이 `ko-KR`인지 확인하고 이 문서를 먼저 읽습니다.
+2. 영어 원문을 기본 의미로 확인하되, 모호하거나 오래된 문구는 실제 기능과 다른 locale을 함께 확인합니다.
+3. `일반 스크립트`, `페이지 스크립트`, `백그라운드 스크립트`, `예약 스크립트`의 구분을 유지합니다.
+4. 일반 userscript 개념은 `유저스크립트`, 제품의 normal type은 `일반 스크립트`로 구분합니다.
+5. authorization과 authentication을 구분합니다. 권한 허용 문맥에 `인증`을 사용하지 않습니다.
+6. `출처`와 `소스 코드`, `복원`과 `초기화`와 `비우기`, `연결`과 `동기화`를 문맥에 맞게 구분합니다.
+7. `@match`, `@exclude`, `@grant`, `@connect`, API 이름, 파일명, placeholder를 변경하지 않습니다.
+8. `은(는)`, `이(가)`, `을(를)` 표기를 사용자에게 노출하지 않도록 문장을 재구성합니다.
+9. 영문 식별자 주변 띄어쓰기와 한국어 문장 부호를 확인합니다.
+10. 같은 화면에서 `Skill`/`스킬`, `...`/`…`, `소스`/`출처`가 불필요하게 혼용되지 않는지 검색합니다.
+11. 완성 후 실제 UI에서 잘림, 줄바꿈, 숫자 삽입, split-string 연결 문법을 확인합니다.
+12. 가능하면 한국어 원어민에게 보안 경고, 권한 요청, 삭제 확인 문구를 최종 검토받습니다.
diff --git a/src/assets/_locales/ko/messages.json b/src/assets/_locales/ko/messages.json
new file mode 100644
index 000000000..cd2b0c152
--- /dev/null
+++ b/src/assets/_locales/ko/messages.json
@@ -0,0 +1,14 @@
+{
+ "i18n": {
+ "message": "i18n"
+ },
+ "scriptcat": {
+ "message": "ScriptCat"
+ },
+ "scriptcat_beta": {
+ "message": "ScriptCat Beta"
+ },
+ "scriptcat_description": {
+ "message": "브라우저의 모든 잠재력을 끌어내는 강력한 유저스크립트 매니저!"
+ }
+}
diff --git a/src/locales/ko-KR/agent.json b/src/locales/ko-KR/agent.json
new file mode 100644
index 000000000..0d2ab8ac4
--- /dev/null
+++ b/src/locales/ko-KR/agent.json
@@ -0,0 +1,223 @@
+{
+ "title": "AI 에이전트",
+ "docs": "문서",
+ "chat": "채팅",
+ "provider": "모델 서비스",
+ "mcp": "MCP",
+ "skills": "스킬",
+ "provider_title": "모델 서비스",
+ "provider_subtitle": "AI 모델 제공업체와 연결을 관리합니다",
+ "provider_select": "AI 제공업체",
+ "provider_api_base_url": "API 기본 URL",
+ "provider_api_key": "API 키",
+ "provider_model": "기본 모델",
+ "provider_test_connection": "연결 테스트",
+ "provider_test_success": "연결 성공",
+ "provider_test_failed": "연결 실패",
+ "provider_test_hint": "테스트 시 설정을 확인하기 위해 최소한의 요청을 전송합니다",
+ "provider_docs": "문서",
+ "provider_count_hint": "기본 모델은 새 대화에 사용됩니다",
+ "model_count": "모델 {{count}}개",
+ "model_fetch": "모델 가져오기",
+ "model_name": "이름",
+ "model_add": "모델 추가",
+ "model_edit": "편집",
+ "model_copy": "복사",
+ "model_delete": "삭제",
+ "model_set_default": "기본값으로 설정",
+ "model_default_label": "기본값",
+ "model_max_tokens": "최대 출력 토큰 수",
+ "model_context_window": "컨텍스트 윈도우",
+ "model_no_models": "설정된 모델이 없습니다",
+ "model_no_models_desc": "첫 번째 모델을 추가하고 AI 에이전트를 사용해 보세요",
+ "model_capabilities": "기능",
+ "model_supports_vision": "이미지 입력",
+ "model_supports_image_output": "이미지 출력",
+ "skills_title": "스킬 관리",
+ "skills_subtitle": "에이전트 스킬 패키지(SKILL.md 프롬프트, 스크립트, 참고 자료)를 관리합니다",
+ "skills_add": "스킬 추가",
+ "skills_empty": "설치된 스킬이 없습니다",
+ "skills_empty_desc": "ZIP 파일을 업로드하거나 URL에서 첫 번째 스킬을 가져와 보세요",
+ "skills_tools": "도구",
+ "skills_references": "참고 자료",
+ "skills_detail": "스킬 상세 정보",
+ "skills_install_url": "URL에서 가져오기",
+ "skills_uninstall": "제거",
+ "skills_uninstall_confirm": "\"{{name}}\" 스킬을 제거하시겠습니까?",
+ "skills_install_zip": "ZIP 업로드",
+ "skills_prompt": "프롬프트",
+ "skills_installed_at": "설치일",
+ "skills_refresh": "새로고침",
+ "skills_refresh_success": "새로고침되었습니다",
+ "skills_tool_code": "도구 코드",
+ "skills_click_to_view_code": "도구 이름을 클릭하면 코드를 볼 수 있습니다",
+ "skills_config": "설정",
+ "skills_config_saved": "설정이 저장되었습니다",
+ "skills_check_updates": "업데이트 확인",
+ "skills_no_updates": "모든 스킬이 최신 상태입니다",
+ "skills_updates_available": "개 스킬에 업데이트가 있습니다",
+ "skills_update": "업데이트",
+ "skills_docs": "문서",
+ "skills_count": "스킬 {{count}}개 설치됨",
+ "skills_update_count": "{{count}}개 업데이트 가능",
+ "skills_update_available": "{{version}}으로 업데이트",
+ "skills_references_short": "참고",
+ "skills_configurable": "설정 가능",
+ "skills_open_config": "설정 열기",
+ "skills_update_success": "업데이트되었습니다",
+ "skills_url_placeholder": "SKILL.cat.md URL을 입력하세요",
+ "chat_new": "새 채팅",
+ "chat_delete": "채팅 삭제",
+ "chat_delete_confirm": "이 대화를 삭제하시겠습니까?",
+ "chat_no_conversations": "대화가 없습니다",
+ "chat_search_placeholder": "대화 검색…",
+ "chat_search_no_results": "일치하는 대화가 없습니다",
+ "chat_export": "내보내기",
+ "chat_input_placeholder": "메시지를 입력하세요...",
+ "chat_send": "전송",
+ "chat_stop": "중지",
+ "chat_thinking": "생각 중",
+ "chat_tool_arguments": "인수",
+ "chat_tool_result": "결과",
+ "chat_no_model": "설정된 모델이 없습니다. 먼저 모델 서비스에서 모델을 추가해 주세요.",
+ "chat_model_select": "모델 선택",
+ "chat_rename": "이름 변경",
+ "chat_copy": "복사",
+ "chat_copy_success": "복사되었습니다",
+ "chat_regenerate": "다시 생성",
+ "chat_streaming": "생성 중...",
+ "chat_loading_audio": "오디오 불러오는 중...",
+ "chat_starting": "시작하는 중...",
+ "chat_retrying": "재시도 중 ({{attempt}}/{{max}})...",
+ "chat_attach_file": "파일 첨부",
+ "chat_welcome_hint": "스크립트에 대해 무엇이든 물어보세요",
+ "chat_welcome_start": "대화를 만들어 시작해 보세요",
+ "chat_first_token": "TTFT",
+ "chat_tools_count": "도구 {{count}}개",
+ "chat_tools_enabled": "도구 활성화됨",
+ "chat_tools_disabled": "도구 비활성화됨",
+ "chat_tools_enabled_tip": "도구 활성화됨 — 클릭하면 비활성화",
+ "chat_tools_disabled_tip": "도구 비활성화됨 — 클릭하면 활성화",
+ "chat_background_enabled_tip": "백그라운드 모드 켜짐 — 페이지를 닫아도 대화가 계속됩니다. 클릭하면 끌 수 있습니다",
+ "chat_background_disabled_tip": "백그라운드 모드 꺼짐 — 페이지를 닫으면 대화가 중지됩니다. 클릭하면 켤 수 있습니다",
+ "chat_delete_round": "삭제",
+ "chat_copy_message": "복사",
+ "chat_edit_message": "편집",
+ "chat_save_and_send": "저장 후 전송",
+ "chat_cancel_edit": "취소",
+ "chat_message_queued": "대기 중",
+ "chat_cancel_message": "전송 취소",
+ "permission_title": "스크립트가 에이전트 대화 사용을 요청합니다",
+ "permission_describe": "이 스크립트는 에이전트 대화 기능 사용을 요청하며, 이는 API 토큰을 소비합니다. 신뢰할 수 있는 스크립트에만 허용하세요.",
+ "permission_content": "에이전트 대화",
+ "opfs": "OPFS",
+ "opfs_title": "OPFS 파일 브라우저",
+ "opfs_empty": "빈 디렉터리",
+ "opfs_name": "이름",
+ "opfs_size": "크기",
+ "opfs_type": "종류",
+ "opfs_modified": "마지막 수정",
+ "opfs_delete_confirm": "정말 삭제하시겠습니까?",
+ "opfs_delete_success": "삭제되었습니다",
+ "opfs_preview": "미리보기",
+ "opfs_subtitle": "출처별 프라이빗 파일 시스템(OPFS) · 에이전트 전용 저장소",
+ "opfs_refresh": "새로고침",
+ "opfs_upload": "업로드",
+ "opfs_actions": "작업",
+ "opfs_item_count": "{{count}}개 항목",
+ "opfs_empty_desc": "이 디렉터리에는 아직 파일이 없습니다",
+ "opfs_upload_success": "업로드되었습니다",
+ "opfs_upload_failed": "업로드에 실패했습니다",
+ "opfs_uploading": "업로드 중…",
+ "opfs_type_directory": "폴더",
+ "opfs_type_image": "이미지",
+ "opfs_type_text": "텍스트",
+ "opfs_type_binary": "바이너리",
+ "opfs_root": "루트",
+ "dom_permission_title": "스크립트가 DOM 조작 권한을 요청합니다",
+ "dom_permission_describe": "이 스크립트는 웹페이지의 DOM을 읽고 조작하는 기능(클릭, 양식 입력, 페이지 이동, 스크린샷 등)을 요청합니다. 신뢰할 수 있는 스크립트에만 허용하세요.",
+ "dom_permission_content": "에이전트 DOM 조작",
+ "mcp_title": "MCP 서버",
+ "mcp_subtitle": "MCP 서버를 연결하여 에이전트의 도구, 리소스, 프롬프트를 확장하세요",
+ "mcp_add_server": "서버 추가",
+ "mcp_no_servers": "설정된 MCP 서버가 없습니다",
+ "mcp_no_servers_desc": "첫 번째 MCP 서버를 추가하여 외부 도구와 데이터에 연결해 보세요",
+ "mcp_status_connected": "연결됨",
+ "mcp_status_failed": "연결 실패",
+ "mcp_status_untested": "테스트 안 함",
+ "mcp_has_key": "시크릿 키",
+ "mcp_headers_count": "헤더 {{count}}개",
+ "mcp_count_servers": "서버 {{count}}개",
+ "mcp_count_connected": "{{count}}개 연결됨",
+ "mcp_count_tools": "도구 {{count}}개 사용 가능",
+ "mcp_docs": "문서",
+ "mcp_test_connection": "테스트",
+ "mcp_optional": "선택 사항",
+ "mcp_custom_headers": "사용자 지정 헤더",
+ "mcp_enabled": "활성화",
+ "mcp_detail": "상세 정보",
+ "mcp_tools": "도구",
+ "mcp_resources": "리소스",
+ "mcp_prompts": "프롬프트",
+ "mcp_no_tools": "사용 가능한 도구가 없습니다",
+ "mcp_no_resources": "사용 가능한 리소스가 없습니다",
+ "mcp_no_prompts": "사용 가능한 프롬프트가 없습니다",
+ "mcp_loading": "불러오는 중...",
+ "tasks": "예약 작업",
+ "tasks_title": "예약 작업",
+ "tasks_subtitle": "cron 일정에 따라 에이전트 작업을 자동으로 실행합니다",
+ "tasks_docs": "문서",
+ "tasks_count_total": "작업 {{count}}개",
+ "tasks_count_enabled": "{{count}}개 활성화됨",
+ "tasks_create": "작업 만들기",
+ "tasks_edit": "작업 편집",
+ "tasks_mode": "모드",
+ "tasks_mode_internal_short": "내부",
+ "tasks_mode_event_short": "이벤트",
+ "tasks_cron": "Cron 표현식",
+ "tasks_next_run": "다음 실행",
+ "tasks_run_now": "지금 실행",
+ "tasks_history": "실행 기록",
+ "tasks_prompt": "프롬프트",
+ "tasks_max_iterations": "최대 반복 횟수",
+ "tasks_notify": "완료 시 알림",
+ "tasks_notify_desc": "작업이 완료되면 브라우저 알림을 보냅니다",
+ "tasks_no_tasks": "예약된 작업이 없습니다",
+ "tasks_no_tasks_desc": "첫 번째 예약 작업을 만들어 에이전트를 자동으로 실행해 보세요",
+ "tasks_no_runs": "실행 기록이 아직 없습니다",
+ "tasks_clear_runs": "기록 지우기",
+ "tasks_clear_runs_confirm": "이 작업의 실행 기록을 지우시겠습니까?",
+ "tasks_event_hint": "이벤트가 발생하면 이 작업을 만든 스크립트로 알림이 전달됩니다",
+ "tasks_event_trigger": "이벤트 트리거",
+ "tasks_model_select": "모델 선택",
+ "tasks_skills_auto": "모두 자동 로드",
+ "tasks_run_status_success": "성공",
+ "tasks_run_status_error": "오류",
+ "tasks_run_status_running": "실행 중",
+ "tasks_run_duration": "소요 시간",
+ "tasks_run_usage": "사용량",
+ "tasks_run_time": "시간",
+ "tasks_run_status": "상태",
+ "tasks_never_run": "실행한 적 없음",
+ "settings": "설정",
+ "settings_title": "에이전트 설정",
+ "settings_subtitle": "모델, 검색 및 일반 설정 · 변경 사항은 즉시 적용됩니다",
+ "settings_cat_model": "모델",
+ "settings_cat_search": "검색",
+ "summary_model": "요약 모델",
+ "summary_model_desc": "요약에 사용되는 모델로, 설정하지 않으면 기본 모델을 사용합니다",
+ "summary_model_placeholder": "기본 모델 사용",
+ "search_engine": "검색 엔진",
+ "search_engine_desc": "web_search 도구가 사용하는 검색 소스입니다.",
+ "search_engine_baidu": "바이두",
+ "search_google_api_key": "Google API 키",
+ "search_google_api_key_desc": "Custom Search JSON API 호출에 사용됩니다.",
+ "search_google_cse_id": "사용자 지정 검색 엔진 ID",
+ "search_google_cse_id_desc": "Programmable Search Engine의 cx 매개변수입니다.",
+ "settings_saved": "설정이 저장되었습니다",
+ "settings_save_failed": "설정 저장에 실패했습니다",
+ "search_engine_tip_bing": "전 세계적으로 폭넓게 지원되는 기본 검색 엔진으로, 추가 설정이 필요 없습니다.",
+ "search_engine_tip_duckduckgo": "개인정보 보호에 중점을 둔 검색 엔진으로, API 키가 필요 없습니다.",
+ "search_engine_tip_baidu": "중국어 콘텐츠에 최적화되어 있어 중국어 검색에서 더 나은 결과를 제공합니다.",
+ "search_engine_tip_google": "고품질 검색 결과를 제공하지만, Google API 키와 사용자 지정 검색 엔진 ID가 필요합니다."
+}
diff --git a/src/locales/ko-KR/common.json b/src/locales/ko-KR/common.json
new file mode 100644
index 000000000..143b111f5
--- /dev/null
+++ b/src/locales/ko-KR/common.json
@@ -0,0 +1,97 @@
+{
+ "user_guide": "사용 가이드",
+ "api_docs": "API 문서",
+ "development_guide": "개발 가이드",
+ "script_gallery": "스크립트 갤러리",
+ "community_forum": "커뮤니티 포럼",
+ "external_links": "외부 링크",
+ "no_data": "데이터 없음",
+ "logs": "로그",
+ "tools": "도구",
+ "settings": "설정",
+ "change_theme": "테마 변경",
+ "hide_main_sidebar": "사이드바 접기",
+ "show_main_sidebar": "사이드바 펼치기",
+ "menu": "메뉴",
+ "notifications": "알림",
+ "more_menu": "더보기 메뉴",
+ "helpcenter": "도움말 센터",
+ "save": "저장",
+ "save_success": "저장되었습니다",
+ "update": "업데이트",
+ "check_update": "업데이트 확인",
+ "confirm_delete": "삭제 확인",
+ "delete_success": "삭제되었습니다",
+ "enable": "활성화",
+ "disable": "비활성화",
+ "name": "이름",
+ "version": "버전",
+ "source": "소스",
+ "action": "작업",
+ "export": "내보내기",
+ "delete": "삭제",
+ "pin_to_top": "상단 고정",
+ "confirm": "확인",
+ "close": "닫기",
+ "key": "키",
+ "value": "값",
+ "add": "추가",
+ "type": "유형",
+ "size": "크기",
+ "download": "다운로드",
+ "edit_value": "값 편집",
+ "add_value": "값 추가",
+ "update_success": "업데이트되었습니다",
+ "add_success": "추가되었습니다",
+ "clear": "지우기",
+ "type_string": "문자열",
+ "type_number": "숫자",
+ "type_boolean": "불리언",
+ "type_object": "객체",
+ "confirm_delete_resource": "이 리소스를 삭제하시겠습니까? 다음 시작 시 이 리소스가 다시 로드됩니다.",
+ "confirm_clear_resource": "이 리소스를 모두 지우시겠습니까? 다음 시작 시 리소스가 다시 로드됩니다.",
+ "yes": "예",
+ "no": "아니요",
+ "confirm_delete_permission": "이 권한을 삭제하시겠습니까?",
+ "reset": "초기화",
+ "run_once": "한 번 실행",
+ "stop": "중지",
+ "edit": "편집",
+ "copy": "복사",
+ "exclude_on": "$0 실행 복원",
+ "exclude_off": "$0 실행 제외",
+ "confirm_error": "확인 실패",
+ "import": "가져오기",
+ "error": "오류",
+ "get_script": "스크립트 받기",
+ "report_issue": "문제 신고",
+ "project_docs": "프로젝트 문서",
+ "community": "커뮤니티",
+ "domain": "도메인",
+ "script_name": "스크립트 이름",
+ "skip": "건너뛰기",
+ "next": "다음",
+ "back": "뒤로",
+ "auto": "자동",
+ "collapse": "접기",
+ "expand": "펼치기",
+ "no_message_content": "메시지 내용 없음",
+ "loading": "로딩 중...",
+ "no_scripts": "스크립트가 없습니다",
+ "no_subscribes": "구독이 없습니다",
+ "no_subscribes_hint": "구독한 스크립트 모음이 여기에 표시됩니다",
+ "clear_filter": "필터 지우기",
+ "batch_selected": "{{count}}개 선택됨",
+ "stopped": "중지됨",
+ "auth_type": "인증 유형",
+ "url": "URL",
+ "username": "사용자 이름",
+ "password": "비밀번호",
+ "access_token_bearer": "액세스 토큰(Bearer)",
+ "s3_bucket_name": "버킷 이름",
+ "s3_region": "리전",
+ "s3_access_key_id": "액세스 키 ID",
+ "s3_secret_access_key": "비밀 액세스 키",
+ "s3_custom_endpoint": "사용자 지정 엔드포인트(선택 사항)",
+ "cancel": "취소"
+}
diff --git a/src/locales/ko-KR/editor.json b/src/locales/ko-KR/editor.json
new file mode 100644
index 000000000..951353087
--- /dev/null
+++ b/src/locales/ko-KR/editor.json
@@ -0,0 +1,136 @@
+{
+ "save": "저장",
+ "save_success": "저장되었습니다",
+ "copy": "복사",
+ "find": "찾기",
+ "replace": "바꾸기",
+ "select_all": "모두 선택",
+ "format": "포맷",
+ "back": "뒤로",
+ "more": "더 보기",
+ "file": "파일",
+ "edit": "편집",
+ "settings": "설정",
+ "run_settings": "실행 설정",
+ "code": "코드",
+ "script_setting": "스크립트 설정",
+ "storage": "저장소",
+ "resource": "리소스",
+ "script_storage_tooltip": "스크립트에 저장된 데이터를 관리합니다(GM_value)",
+ "script_resource_tooltip": "@resource와 @require로 내려받은 리소스를 관리합니다",
+ "script_setting_tooltip": "이 스크립트의 설정을 사용자 지정합니다",
+ "search_resource": "리소스 검색",
+ "search_storage": "키 검색",
+ "record_count": "{{count}}개 항목",
+ "resource_count": "리소스 {{count}}개 · {{size}}",
+ "script_list": "스크립트 목록",
+ "search_scripts": "스크립트 검색...",
+ "new_script": "새 스크립트",
+ "source": "출처",
+ "from_user": "사용자",
+ "from_script": "스크립트",
+ "last_updated": "마지막 업데이트",
+ "run_at": "실행 시점",
+ "run_in": "실행 위치",
+ "line_col": "{{line}}행, {{col}}열",
+ "script_not_found": "스크립트를 찾을 수 없습니다",
+ "script_name_cannot_be_set_to_empty": "스크립트 이름은 비워둘 수 없습니다",
+ "confirm_delete_script": "\"{{name}}\" 스크립트를 삭제하시겠습니까?",
+ "delete_success": "삭제되었습니다",
+ "delete_failed": "삭제에 실패했습니다",
+ "cancel": "취소",
+ "confirm": "확인",
+ "save_as": "다른 이름으로 저장",
+ "run": "실행",
+ "script_storage": "스크립트 저장소",
+ "key_placeholder": "키",
+ "value_placeholder": "타입이 object인 경우, JSON으로 파싱 가능한 데이터를 입력하세요.",
+ "clear_success": "초기화되었습니다",
+ "confirm_clear": "이 저장 공간을 정말 비우시겠습니까?",
+ "basic_info": "기본 정보",
+ "update_url": "업데이트 URL",
+ "add_permission": "권한 추가",
+ "match": "매치",
+ "add_match": "매치 추가",
+ "add_exclude": "제외 추가",
+ "bulk_match_desc": "한 줄에 하나씩 패턴을 붙여넣으세요. 앞뒤 공백은 제거되며, 빈 줄과 중복 항목은 건너뜁니다.",
+ "bulk_permission_desc": "권한 유형과 허용 상태를 선택한 뒤, 한 줄에 하나씩 권한 값을 붙여넣으세요.",
+ "bulk_values": "일괄 값",
+ "bulk_empty_preview": "값을 붙여넣으면 파싱 결과를 미리 볼 수 있습니다",
+ "bulk_status_new": "신규",
+ "bulk_status_duplicate": "중복",
+ "preview": "미리보기",
+ "status": "상태",
+ "website_match": "웹사이트 매치(@match)",
+ "website_exclude": "웹사이트 제외(@exclude)",
+ "confirm_reset": "초기화하시겠습니까?",
+ "confirm_delete_match": "이 매치를 삭제하시겠습니까?",
+ "confirm_delete_exclude": "이 제외 항목을 삭제하시겠습니까?",
+ "after_deleting_match_item": "삭제 후에도 스크립트에 정의된 매치 규칙은 매치 목록에 다시 추가됩니다",
+ "after_deleting_exclude_item": "삭제 후에도 스크립트에 정의된 매치 규칙은 제외 목록에 다시 추가됩니다",
+ "undo": "실행 취소",
+ "redo": "다시 실행",
+ "cut": "잘라내기",
+ "paste": "붙여넣기",
+ "user_config": "사용자 설정(UserConfig)",
+ "storage_api": "저장소 API",
+ "use_file_system": "사용 중인 파일 시스템",
+ "open_directory": "디렉터리 열기",
+ "account_validation_failed": "계정 인증에 실패했습니다",
+ "not_set": "설정 안 됨",
+ "in_use": "사용 중",
+ "storage_error": "저장소 오류",
+ "upload_to_cloud": "클라우드로 업로드",
+ "save_failed": "저장에 실패했습니다",
+ "exporting": "내보내는 중...",
+ "upload_to": "업로드 위치",
+ "value_export_expression": "값 내보내기 표현식",
+ "overwrite_original_value_on_import": "가져올 때 기존 값 덮어쓰기",
+ "cookie_export_expression": "쿠키 내보내기 표현식",
+ "overwrite_original_cookie_on_import": "가져올 때 기존 쿠키 덮어쓰기",
+ "restore_default_values": "기본값으로 복원",
+ "edit_conflict": "편집 충돌",
+ "confirm_override_when_edit_conflict": "이 스크립트는 다른 인스턴스에서 수정되었습니다. 지금 저장하면 그 변경 사항을 덮어쓰게 됩니다. 이 버전을 유지하시겠습니까?",
+ "scriptname_conflict": "스크립트 이름 충돌",
+ "confirm_save_when_scriptname_conflict": "이 스크립트 이름은 이미 다른 스크립트에서 사용 중입니다. 그래도 저장하시겠습니까?",
+ "eslint_config_format_error": "ESLint 설정 형식 오류",
+ "create_success_note": "새 스크립트가 생성되었습니다. 백그라운드 스크립트는 기본적으로 활성화되지 않으니 참고하세요.",
+ "save_as_failed": "다른 이름으로 저장에 실패했습니다",
+ "save_as_success": "다른 이름으로 저장되었습니다",
+ "only_background_scheduled_can_run": "백그라운드 스크립트/예약(crontab) 스크립트만 실행할 수 있습니다",
+ "build_success_message": "빌드에 성공했습니다. 개발자 도구를 열어 콘솔에서 출력을 확인하세요",
+ "script_modified_close_confirm": "스크립트가 수정되었습니다. 지금 닫으면 변경 사항이 사라집니다. 계속하시겠습니까?",
+ "close_current_tab": "현재 탭 닫기",
+ "close_other_tabs": "다른 탭 닫기",
+ "close_left_tabs": "왼쪽 탭 모두 닫기",
+ "close_right_tabs": "오른쪽 탭 모두 닫기",
+ "invalid_script_code": "잘못된 코드",
+ "build_failed": "빌드에 실패했습니다",
+ "watch_file": "파일 감시",
+ "stop_watch_file": "감시 중지",
+ "watch_file_description": "파일 변경을 감시해 스크립트를 자동으로 업데이트합니다. 감시 중에는 스크립트 파일 경로를 바꾸지 말고 이 페이지도 닫지 마세요.",
+ "individual_edit": "개별 편집",
+ "batch_edit": "일괄 편집",
+ "script_code": "스크립트 코드",
+ "editor_config": "에디터 설정",
+ "editor_type_definition": "에디터 타입 정의",
+ "font_size": "글꼴 크기",
+ "font_size_description": "에디터의 글꼴 크기를 픽셀 단위로 지정합니다.",
+ "mouse_wheel_scroll_sensitivity": "마우스 휠 스크롤 감도",
+ "mouse_wheel_scroll_sensitivity_description": "마우스 휠 스크롤 양에 적용할 배율입니다.",
+ "smooth_scrolling": "부드러운 스크롤",
+ "smooth_scrolling_description": "에디터 스크롤에 애니메이션을 적용합니다.",
+ "editor_config_description": "compilerOptions를 통해 설정할 수 있습니다. 참고:",
+ "editor_type_definition_description": "직접 타입 정의를 사용자 지정할 수 있으며, 스크립트 에디터가 이 타입 정의를 자동으로 불러옵니다",
+ "eslint_rules_reset": "ESLint 규칙이 초기화되었습니다",
+ "eslint_rules_saved": "ESLint 규칙이 저장되었습니다",
+ "editor_config_reset": "에디터 설정이 초기화되었습니다",
+ "editor_config_saved": "에디터 설정이 저장되었습니다",
+ "editor_config_format_error": "에디터 설정 형식 오류",
+ "editor_type_definition_reset": "에디터 타입 정의가 초기화되었습니다",
+ "editor_type_definition_saved": "에디터 타입 정의가 저장되었습니다",
+ "editor": {
+ "show_script_list": "스크립트 목록 표시",
+ "hide_script_list": "스크립트 목록 숨기기"
+ }
+}
diff --git a/src/locales/ko-KR/guide.json b/src/locales/ko-KR/guide.json
new file mode 100644
index 000000000..03c8c5e16
--- /dev/null
+++ b/src/locales/ko-KR/guide.json
@@ -0,0 +1,33 @@
+{
+ "installed_scripts": "설치한 스크립트가 여기에 표시됩니다. 기본 사용법은 빠른 시작을 참고하세요.",
+ "script_list_title": "스크립트 마켓",
+ "script_list_content": "스크립트 마켓에서 스크립트를 설치할 수 있습니다. ScriptCat은 유저스크립트뿐 아니라 백그라운드 스크립트도 지원합니다.",
+ "script_list_enable_title": "스크립트 활성화",
+ "script_list_enable_content": "스크립트는 활성화해야 사용할 수 있습니다. 페이지 스크립트는 설치 시 기본적으로 활성화되며, 백그라운드 스크립트는 기본적으로 비활성화됩니다.",
+ "script_list_action_title": "작업",
+ "script_list_action_content": "작업 바에서는 스크립트 편집, 실행 제어 및 중지(백그라운드 스크립트), 설정(UserConfig 참고)에 접근할 수 있습니다. 오른쪽 버튼으로는 고급 필터링과 보기 모드 전환을 사용할 수 있습니다.",
+ "tools_backup_title": "백업",
+ "tools_backup_content": "백업을 이용하면 스크립트를 저장해 유실을 막을 수 있습니다. 스크립트 파일을 로컬로 내보내거나 로컬에서 불러올 수 있으며, 클라우드에 백업하면 더욱 편리합니다. 다른 매니저에서 이전하려면 마이그레이션 가이드를 참고하세요.",
+ "setting_sync_title": "업데이트 및 동기화",
+ "setting_sync_content": "스크립트 동기화 기능을 사용하면 이 기기의 스크립트 내용을 클라우드에 손쉽게 동기화할 수 있습니다. 삭제 동기화 옵션을 선택하면 이 기기에서 스크립트를 삭제할 때 클라우드에서도 함께 삭제됩니다. 여기에서 스크립트 버전을 업데이트해 더 강력한 기능을 사용할 수도 있습니다.",
+ "installed_scripts_title": "설치된 스크립트",
+ "subscribe_title": "구독",
+ "subscribe_content": "스크립트 링크를 구독하면 스크립트가 자동으로 최신 상태를 유지합니다. 자세한 내용은 구독 문서를 참고하세요.",
+ "welcome_title": "ScriptCat에 오신 것을 환영합니다 🎉",
+ "welcome_subtitle": "강력한 유저스크립트 매니저 — 몇 단계만 거치면 바로 시작할 수 있습니다.",
+ "welcome_feature_manage_title": "설치된 스크립트 관리",
+ "welcome_feature_manage_desc": "모든 스크립트를 \"설치된 스크립트\" 페이지에서 한눈에 확인하세요",
+ "welcome_feature_market_title": "스크립트 마켓에서 설치",
+ "welcome_feature_market_desc": "scriptcat.org에서 클릭 한 번으로 스크립트를 찾고 설치하세요",
+ "welcome_feature_backup_title": "스크립트를 잃어버리지 마세요",
+ "welcome_feature_backup_desc": "로컬 또는 클라우드에 백업해 두면 기기를 바꿔도 걱정 없습니다",
+ "welcome_start": "둘러보기 시작",
+ "welcome_later": "나중에 하기",
+ "tour_finish": "완료",
+ "tour_progress": "{{current}} / {{total}}",
+ "title": "온보딩 가이드",
+ "demo_normal_name": "예제 스크립트",
+ "demo_normal_desc": "이 가이드를 위한 예제 스크립트",
+ "demo_background_name": "예제 백그라운드 스크립트",
+ "demo_background_desc": "이 가이드를 위한 예제 백그라운드 스크립트"
+}
diff --git a/src/locales/ko-KR/index.ts b/src/locales/ko-KR/index.ts
new file mode 100644
index 000000000..bacd6d096
--- /dev/null
+++ b/src/locales/ko-KR/index.ts
@@ -0,0 +1,11 @@
+export { default as agent } from "./agent.json";
+export { default as common } from "./common.json";
+export { default as editor } from "./editor.json";
+export { default as guide } from "./guide.json";
+export { default as install } from "./install.json";
+export { default as logs } from "./logs.json";
+export { default as permission } from "./permission.json";
+export { default as popup } from "./popup.json";
+export { default as script } from "./script.json";
+export { default as settings } from "./settings.json";
+export { default as tools } from "./tools.json";
diff --git a/src/locales/ko-KR/install.json b/src/locales/ko-KR/install.json
new file mode 100644
index 000000000..17d489ce0
--- /dev/null
+++ b/src/locales/ko-KR/install.json
@@ -0,0 +1,181 @@
+{
+ "script": "스크립트 설치",
+ "update_script": "스크립트 업데이트",
+ "subscribe": "구독 설치",
+ "update_subscribe": "구독 업데이트",
+ "update_script_no_close": "창을 닫지 않고 업데이트",
+ "script_no_close": "창을 닫지 않고 설치",
+ "update_script_no_more_update": "업데이트하고 이후 업데이트는 확인 안 함",
+ "close_update_script_no_more_update": "닫고 업데이트 확인 안 함",
+ "script_no_more_update": "설치하고 이후 업데이트는 확인 안 함",
+ "subscribe_scripts_title": "이 구독은 다음 스크립트를 설치합니다",
+ "subscribe_scripts_empty": "이 구독에는 아직 선언된 스크립트가 없습니다",
+ "perm_card_title": "이 스크립트에 다음 권한이 부여됩니다",
+ "perm_card_hint": "설치하기 전에 확인해 주세요",
+ "perm_card_empty": "이 스크립트는 특별한 권한을 요청하지 않습니다",
+ "perm_match_label": "실행 사이트",
+ "perm_match_summary": "스크립트가 다음 사이트에서 실행되며 페이지를 수정합니다",
+ "perm_connect_label": "교차 출처 접근",
+ "perm_connect_summary": "다음 도메인으로 요청을 보내고 데이터를 읽을 수 있습니다",
+ "perm_grant_label": "GM 기능",
+ "perm_grant_summary": "다음 GM API를 호출할 수 있습니다",
+ "perm_require_label": "외부 리소스",
+ "perm_require_summary": "다음 서드파티 스크립트와 리소스를 불러옵니다",
+ "badge_background": "백그라운드",
+ "badge_scheduled": "예약됨",
+ "enabled_label": "활성화됨",
+ "schedule_cron_label": "예약 작업",
+ "schedule_next_run": "다음 실행",
+ "schedule_background_desc": "브라우저가 열려 있는 동안 자동으로 실행됩니다",
+ "background_script_description": "이 스크립트는 백그라운드 스크립트입니다. 활성화하면 브라우저가 시작될 때 자동으로 실행되며, 패널에서 수동으로 제어할 수도 있습니다.",
+ "scheduled_script_description_title": "이 스크립트는 예약 스크립트입니다. 활성화하면 지정된 시간에 자동으로 실행되며, 패널에서 수동으로 제어할 수도 있습니다.",
+ "code_lines": "{{count}}줄",
+ "code_copy": "코드 복사",
+ "code_collapse": "접기",
+ "code_expand": "펼치기",
+ "loading_title": "스크립트 불러오는 중",
+ "loading_desc": "소스에서 스크립트 내용을 다운로드하고 분석하고 있습니다",
+ "error_retry": "다시 시도",
+ "error_invalid_desc": "유효한 설치 소스 매개변수가 없어 스크립트를 불러올 수 없습니다.",
+ "context_install": "스크립트 설치",
+ "context_update": "스크립트 업데이트",
+ "background_script": "백그라운드 스크립트",
+ "scheduled_script": "예약 스크립트",
+ "watching_chip": "감시 중",
+ "watching_title": "파일 변경 감시 중",
+ "watching_file_desc": "{{file}} 파일을 저장하면 스크립트가 자동으로 재설치되고 동기화됩니다",
+ "watching_last_sync": "마지막 동기화 {{time}}",
+ "warning_title": "신뢰할 수 있는 출처의 스크립트인지 확인하세요",
+ "warning_risk_connect": "모든 도메인에 접근할 수 있음",
+ "warning_risk_antifeature": "안티피처(anti-feature)가 포함되어 있음",
+ "warning_risk_join": ", ",
+ "warning_risk_tail": " — 설치 시 주의하세요.",
+ "action_note_install": "설치하면 이 스크립트의 출처와 제작자를 신뢰하는 것입니다",
+ "action_note_update": "업데이트하면 이 코드와 권한 변경 사항을 승인하는 것입니다",
+ "action_note_subscribe": "설치하면 이 구독과 그 제작자를 신뢰하는 것입니다",
+ "action_note_watching": "감시 중 — 파일을 저장하면 자동으로 업데이트됩니다. 수동으로 조작하려면 감시를 중지하세요",
+ "context_skill_install": "스킬 설치",
+ "context_skill_update": "스킬 업데이트",
+ "skill_kind": "AI 스킬",
+ "skill_prompt_title": "프롬프트",
+ "skill_prompt_chip": "SKILL.md",
+ "skill_tools_title": "도구",
+ "skill_config_title": "설정",
+ "skill_references_title": "참고 자료",
+ "skill_required": "필수",
+ "skill_secret": "시크릿",
+ "skill_install": "스킬 설치",
+ "skill_update": "스킬 업데이트",
+ "skill_warning": "이 스킬은 AI에 프롬프트를 주입하고, 다음 도구와 GM 기능, 설정을 호출할 수 있는 권한을 부여합니다. 반드시 신뢰할 수 있는 출처에서만 설치하세요!",
+ "skill_warning_title": "이 스킬이 신뢰할 수 있는 출처의 것인지 확인하세요",
+ "skill_warning_desc": "설치하면 AI에 프롬프트를 주입하고, 나열된 도구(GM 권한 포함)와 설정에 대한 읽기/쓰기 권한을 부여합니다 — 설치 시 주의하세요.",
+ "success": "설치 완료",
+ "install": {},
+ "failed": "설치 실패",
+ "subscribe_success": "구독 완료",
+ "updatepage": {
+ "title": "일괄 업데이트",
+ "main_header": "업데이트 확인",
+ "last_check": "마지막 확인 {{time}}",
+ "status_checking_updates": "업데이트 확인 중...",
+ "updates_available": "업데이트 {{count}}건 있음",
+ "ignored_count": "{{count}}건 무시됨",
+ "selected_count": "{{selected}} / {{total}}개 선택됨",
+ "update_selected": "선택 항목 업데이트 ({{count}})",
+ "ignore_selected": "선택 항목 무시",
+ "update": "업데이트",
+ "ignore": "무시",
+ "restore": "복원",
+ "restore_all": "모두 복원",
+ "ignored_section": "무시된 업데이트",
+ "auto_close": "{{count}}초 후 자동으로 닫힘",
+ "col_script": "스크립트",
+ "col_version": "버전",
+ "col_change": "변경 사항",
+ "col_source": "출처",
+ "col_action": "작업",
+ "enabled": "활성화",
+ "disabled": "비활성화",
+ "codechange_major": "큰 변경",
+ "codechange_noticeable": "눈에 띄는 변경",
+ "codechange_tiny": "작은 변경",
+ "tag_new_connect": "새 @connect",
+ "empty_title": "모든 스크립트가 최신 상태입니다",
+ "empty_desc": "{{count}}개 스크립트 확인 · 업데이트 없음",
+ "recheck": "다시 확인",
+ "tap_to_expand": "탭하여 펼치기",
+ "similarity": "유사도",
+ "new_connects": "새 @connect",
+ "toast_found": "업데이트 가능한 스크립트 {{count}}개를 찾았습니다",
+ "toast_uptodate": "모든 스크립트가 최신 상태입니다"
+ },
+ "importpage": {
+ "title": "데이터 가져오기",
+ "context_review": "데이터 가져오기",
+ "context_importing": "가져오는 중",
+ "context_done": "가져오기 완료",
+ "selected_count": "{{selected}} / {{total}}개 선택됨",
+ "unimportable_count": "{{count}}개는 가져올 수 없음",
+ "count_scripts": "스크립트 {{count}}개",
+ "count_subscribes": "구독 {{count}}개",
+ "col_script": "스크립트",
+ "col_version": "버전",
+ "col_source": "출처",
+ "col_data": "데이터",
+ "col_status": "상태",
+ "col_enabled": "활성화",
+ "op_add": "신규",
+ "op_update": "업데이트",
+ "op_error": "분석 실패",
+ "source_local": "로컬에서 생성됨",
+ "data_values": "{{count}}개 항목",
+ "data_resources": "리소스 포함",
+ "enable_after_import": "가져온 후 활성화",
+ "row_error": "파일이 손상되어 가져올 수 없습니다",
+ "unknown_script": "알 수 없는 스크립트",
+ "subscribe_section": "구독",
+ "trust_hint": "선택한 항목만 복원되며, 가져오는 과정에서 어떤 데이터도 외부로 전송되지 않습니다",
+ "import_selected": "선택 항목 가져오기 ({{count}})",
+ "importing_progress": "백업 복원 중 · {{done}} / {{total}} 완료",
+ "importing_hint": "이 페이지를 열어 두세요",
+ "importing_actionbar_hint": "스크립트와 데이터를 복원하는 중입니다. 이 페이지를 닫지 마세요",
+ "importing_button": "가져오는 중…",
+ "cancel": "취소",
+ "status_pending": "대기 중",
+ "status_importing": "가져오는 중",
+ "status_done": "가져옴",
+ "status_skipped": "건너뜀",
+ "done_title": "가져오기 완료",
+ "done_desc": "선택한 스크립트와 데이터가 복원되었습니다",
+ "done_stat_scripts": "스크립트 {{count}}개",
+ "done_stat_subscribes": "구독 {{count}}개",
+ "done_stat_values": "데이터 {{count}}개",
+ "view_scripts": "스크립트 목록 보기",
+ "loading_title": "백업 파일 분석 중",
+ "loading_desc": "백업 내용을 읽고 검증하고 있습니다",
+ "error_title": "백업 파일을 읽을 수 없습니다",
+ "error_desc": "백업 파일이 손상되었거나 가져오기 링크가 만료되었을 수 있습니다",
+ "invalid_desc": "가져오기 링크가 유효하지 않거나 만료되었습니다",
+ "retry": "다시 시도",
+ "empty_title": "이 백업에는 가져올 항목이 없습니다",
+ "empty_desc": "이 백업 파일에는 스크립트나 구독이 포함되어 있지 않습니다"
+ },
+ "downloading_status_text": "다운로드 중입니다. {{bytes}} 수신함.",
+ "downloading_status_percent": "다운로드 중입니다. {{bytes}} / {{total}}({{percent}}%) 수신함.",
+ "page_load_failed": "설치 페이지를 불러오지 못했습니다",
+ "invalid_page": "잘못된 페이지",
+ "from_legitimate_sources_warning": "반드시 정당한 출처에서 스크립트를 설치하세요! 출처가 불분명한 스크립트는 개인정보를 침해하거나 악의적인 동작을 수행할 수 있습니다.",
+ "referral_link_title": "추천 링크",
+ "ads_title": "광고",
+ "payment_title": "유료",
+ "miner_title": "채굴",
+ "membership_title": "멤버십 기능",
+ "tracking_title": "추적",
+ "referral_link_description": "이 스크립트는 제작자의 추천 링크로 수정하거나 리디렉션합니다",
+ "ads_description": "이 스크립트는 방문하는 페이지에 광고를 삽입합니다",
+ "payment_description": "이 스크립트는 정상적으로 사용하려면 결제가 필요합니다",
+ "miner_description": "이 스크립트는 채굴(마이닝) 행위를 합니다",
+ "membership_description": "이 스크립트는 정상적으로 사용하려면 회원 가입이 필요합니다",
+ "tracking_description": "이 스크립트는 사용자 정보를 추적합니다",
+ "script_info_load_failed": "스크립트 정보를 불러오지 못했습니다"
+}
diff --git a/src/locales/ko-KR/logs.json b/src/locales/ko-KR/logs.json
new file mode 100644
index 000000000..618c49de8
--- /dev/null
+++ b/src/locales/ko-KR/logs.json
@@ -0,0 +1,59 @@
+{
+ "log_title": "실행 로그",
+ "last_5_minutes": "최근 5분",
+ "last_15_minutes": "최근 15분",
+ "last_30_minutes": "최근 30분",
+ "last_1_hour": "최근 1시간",
+ "last_3_hours": "최근 3시간",
+ "last_6_hours": "최근 6시간",
+ "last_12_hours": "최근 12시간",
+ "last_24_hours": "최근 24시간",
+ "last_7_days": "최근 7일",
+ "query": "조회",
+ "labels": "라벨",
+ "search_regex": "검색(정규식 지원)",
+ "clean_schedule": "다음보다 오래된 로그 자동 정리",
+ "days_ago_logs": "일",
+ "delete_completed": "삭제 완료",
+ "delete_current_logs": "현재 로그 삭제",
+ "clear_completed": "지우기 완료",
+ "clear_logs": "로그 지우기",
+ "now": "현재",
+ "last_updated": "마지막 업데이트",
+ "runtime": "런타임",
+ "advanced": "고급",
+ "label_filter": "라벨 필터",
+ "add_label": "라벨 추가",
+ "back_to_top": "맨 위로",
+ "refresh": "새로고침",
+ "all_levels": "전체",
+ "total_count": "총 {{count}}개",
+ "filtered_count": "필터링됨 {{count}}개",
+ "clear_logs_confirm": "모든 로그를 지우시겠습니까? 이 작업은 되돌릴 수 없습니다.",
+ "no_logs": "로그가 없습니다",
+ "refresh_off": "끄기",
+ "interval_5s": "5초",
+ "interval_10s": "10초",
+ "interval_30s": "30초",
+ "interval_1m": "1분",
+ "interval_5m": "5분",
+ "quick_range": "빠른 범위",
+ "absolute_range": "절대 범위",
+ "from_start": "시작",
+ "to_end": "종료",
+ "apply_range": "범위 적용",
+ "auto_refresh_hint": "종료 시간을 '현재'로 설정하면 자동 새로고침이 최신 로그를 계속 가져옵니다.",
+ "group_minutes": "분",
+ "group_hours": "시간",
+ "group_days": "일",
+ "weekdays_short": "일,월,화,수,목,금,토",
+ "year_month": "{{year}}년 {{month}}월",
+ "time": "시간",
+ "prev_month": "이전 달",
+ "next_month": "다음 달",
+ "live": "실시간",
+ "total_logs": "총 {{length}}개의 로그가 조회되었습니다",
+ "filtered_logs": "필터링 후 {{length}}개의 로그",
+ "enter_filter_conditions": "조회할 필터 조건을 입력하세요",
+ "custom_range": "사용자 지정 범위"
+}
diff --git a/src/locales/ko-KR/permission.json b/src/locales/ko-KR/permission.json
new file mode 100644
index 000000000..5b5298843
--- /dev/null
+++ b/src/locales/ko-KR/permission.json
@@ -0,0 +1,39 @@
+{
+ "permission": "권한",
+ "permission_value": "권한 값",
+ "allow": "허용",
+ "permission_management": "권한 관리",
+ "script_accessing_cross_origin_resource": "스크립트가 교차 출처 리소스에 접근하려고 합니다",
+ "confirm_operation_description": "스크립트가 이 작업을 수행하도록 허용할지 확인하세요. 스크립트는 @connect 태그를 추가하여 이 확인을 건너뛸 수도 있습니다.",
+ "request_domain": "요청 도메인",
+ "request_url": "요청 URL",
+ "access_cookie_content": "스크립트가 웹사이트의 쿠키 내용에 접근하려고 합니다",
+ "confirm_script_operation": "스크립트가 이 작업을 수행하도록 허용할지 확인하세요. 쿠키에는 중요한 사용자 데이터가 포함되어 있으므로 신뢰할 수 있는 스크립트에만 허용하세요.",
+ "cookie_domain": "쿠키 도메인",
+ "script_operation_title": "스크립트가 스크립트 동기화 저장소에 접근하려고 합니다",
+ "script_operation_description": "스크립트가 이 작업을 수행하도록 허용할지 확인하세요. 허용하면 스크립트가 설정한 저장 공간에 접근할 수 있으며, 그 안에 app/${dir} 디렉터리를 생성합니다.",
+ "script_permission_content": "스크립트",
+ "extension_site_access_title": "ScriptCat에 사이트 접근 권한이 필요합니다",
+ "extension_site_access_description": "ScriptCat이 이 요청을 수행할 수 있도록 이 출처에 대한 브라우저 사이트 접근 권한을 부여하세요. 이는 확장 프로그램의 사이트 접근 설정을 변경합니다.",
+ "extension_site_access_content": "사이트",
+ "request_permission": "권한 요청",
+ "user_script_type": "유저스크립트",
+ "auth_duration": "인증 유효 기간",
+ "duration_once": "한 번만",
+ "duration_temporary": "임시",
+ "duration_permanent": "영구",
+ "apply_to_all_domains": "요청된 모든 도메인에 적용",
+ "apply_to_all_domains_desc": "이 스크립트의 모든 요청에 적용됩니다(와일드카드)",
+ "allow_action": "허용",
+ "deny_action": "거부",
+ "ignore_action": "무시",
+ "cancel_action": "취소",
+ "loading_confirm": "인증 요청을 불러오는 중…",
+ "cookie_warning_title": "민감도가 높은 권한",
+ "cookie_warning_desc": "쿠키에는 로그인 상태 등 민감한 데이터가 포함되어 있습니다. 신뢰할 수 있는 스크립트에만 허용하세요.",
+ "confirm_expired_title": "인증 요청이 만료되었습니다",
+ "confirm_expired_desc": "이 인증 요청은 시간이 초과되었거나 이미 처리되었습니다. 페이지로 돌아가 다시 시도해 주세요.",
+ "auto_close_in": "{{second}}초 후 창이 자동으로 닫힙니다",
+ "permission_cors": "교차 도메인(CORS)",
+ "permission_cookie": "쿠키 관리"
+}
diff --git a/src/locales/ko-KR/popup.json b/src/locales/ko-KR/popup.json
new file mode 100644
index 000000000..f15cc6b0a
--- /dev/null
+++ b/src/locales/ko-KR/popup.json
@@ -0,0 +1,27 @@
+{
+ "new_version_available": "새 버전이 있습니다",
+ "current_page_scripts": "현재 페이지에서 실행 중인 스크립트",
+ "enabled_background_scripts": "활성화되어 실행 중인 백그라운드 스크립트",
+ "develop_mode_guide": "'개발자 모드'가 활성화되어 있지 않아 스크립트가 정상적으로 실행되지 않습니다. 👉활성화 방법 보기",
+ "lower_version_browser_guide": "브라우저 버전이 너무 낮아 스크립트가 정상적으로 실행되지 않습니다. 👉자세히 알아보기",
+ "click_to_reload": "👉클릭하여 새로고침",
+ "page_in_blacklist": "현재 페이지는 차단 목록에 있어 스크립트를 사용할 수 없습니다",
+ "ext_update_notification": "ScriptCat 확장 프로그램이 업데이트되었습니다",
+ "ext_update_notification_desc": "현재 버전: {{version}}, 자세한 내용은 업데이트 로그를 확인하세요",
+ "script_menu_display": "스크립트가 등록한 메뉴",
+ "badge_type_none": "표시 안 함",
+ "badge_type_run_count": "실행 횟수",
+ "badge_type_script_count": "스크립트 수",
+ "script_menu": "스크립트 메뉴",
+ "display_right_click_menu": "우클릭 메뉴 표시",
+ "display_right_click_menu_desc": "브라우저 우클릭 메뉴에 스크립트 메뉴를 표시합니다",
+ "expand_count": "펼침 개수",
+ "auto_collapse_when_exceeds": "이 개수를 초과하면 자동으로 접기",
+ "allow_user_script_guide": "'유저스크립트 허용'이 활성화되어 있지 않아 스크립트가 정상적으로 실행되지 않습니다. 👉활성화 방법 보기",
+ "request_permission": "권한 요청",
+ "show_more_scripts": "+{{count}}개 스크립트",
+ "use_on_mobile": "모바일에서 ScriptCat 사용하기",
+ "scan_qr_to_install": "QR 코드를 스캔하여 휴대폰에 ScriptCat 설치",
+ "menu_expand_num_before": "메뉴 항목이",
+ "menu_expand_num_after": "개를 초과하면 숨겨집니다."
+}
diff --git a/src/locales/ko-KR/script.json b/src/locales/ko-KR/script.json
new file mode 100644
index 000000000..7d4efda63
--- /dev/null
+++ b/src/locales/ko-KR/script.json
@@ -0,0 +1,77 @@
+{
+ "create_user_script": "유저스크립트 만들기",
+ "create_background_script": "백그라운드 스크립트 만들기",
+ "create_scheduled_script": "예약 스크립트 만들기",
+ "create_script": "스크립트 만들기",
+ "installed_scripts": "설치된 스크립트",
+ "nav_scripts": "스크립트",
+ "subscribe": "구독",
+ "subscribe_scripts_count": "스크립트 {{count}}개",
+ "enter_subscribe_name": "구독 이름을 입력하세요",
+ "subscribe_url": "구독 URL",
+ "confirm_delete_subscription": "이 구독을 삭제하시겠습니까? 관련 스크립트도 함께 삭제됩니다.",
+ "list": {},
+ "apply_to_run_status": "적용 대상 / 실행 상태",
+ "running": "실행 중",
+ "source_subscribe_link": "구독 링크",
+ "source_local_script": "로컬 스크립트",
+ "source_script_link": "스크립트 링크",
+ "confirm_delete_scripts_content": "선택한 스크립트 {{count}}개를 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.",
+ "confirm_delete_script_content": "스크립트 \"{{name}}\"을(를) 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.",
+ "delete_failed": "삭제에 실패했습니다",
+ "checking_for_updates": "업데이트 확인 중...",
+ "new_version_available": "새 버전이 있습니다",
+ "latest_version": "최신 버전입니다",
+ "update_check_failed": "업데이트 확인에 실패했습니다",
+ "operation_failed": "작업에 실패했습니다",
+ "scripts_pinned_to_top": "선택한 스크립트가 고정되었습니다",
+ "homepage": "홈페이지",
+ "script_total_runs": "이 스크립트는 총 {{runNum}}회 실행되었으며, iframe에서 {{runNumByIframe}}회 실행되었습니다",
+ "script_total_runs_single": "이 스크립트는 {{runNum}}회 실행되었습니다",
+ "script_disabled": "이 스크립트는 활성화되어 있지 않습니다",
+ "cron_oncetype": {
+ "minute": "{{next}}(매분 실행)",
+ "hour": "{{next}}(매시간 실행)",
+ "day": "{{next}}(매일 실행)",
+ "month": "{{next}}(매월 실행)",
+ "week": "{{next}}(매주 실행)"
+ },
+ "cron_invalid_expr": "잘못된 cron 표현식입니다",
+ "background_script": "백그라운드 스크립트",
+ "scheduled_script": "예약 스크립트",
+ "next_run": "다음 실행",
+ "background_script_tooltip": "백그라운드 스크립트입니다. 활성화하면 백그라운드에서 실행됩니다.",
+ "scheduled_script_tooltip": "예약 스크립트입니다. 설정한 시간에 자동으로 실행됩니다.",
+ "search_scripts": "스크립트 검색",
+ "script_list": {
+ "sidebar": {
+ "stopped": "중지됨",
+ "all": "전체",
+ "normal_script": "일반 스크립트",
+ "status": "상태"
+ }
+ },
+ "tags": "태그",
+ "input_tags_placeholder": "태그를 입력하고 Enter를 눌러 확인하세요",
+ "error_metadata_invalid": "잘못된 메타데이터 블록입니다",
+ "error_script_name_required": "스크립트 이름은 필수입니다",
+ "error_script_namespace_required": "스크립트 @namespace는 필수입니다",
+ "error_cron_invalid": "잘못된 cron 표현식입니다: {{expr}}",
+ "error_script_type_mismatch": "스크립트 유형이 일치하지 않습니다: 일반 스크립트와 백그라운드 스크립트는 서로 변환할 수 없습니다",
+ "error_old_script_code_missing": "이전 스크립트 코드를 찾을 수 없습니다",
+ "error_subscribe_name_required": "구독 이름은 필수입니다",
+ "error_grant_conflict": "@grant에 'none'과 GM API가 함께 선언되어 있습니다",
+ "error_metadata_line_duplicated": "메타데이터에 중복된 선언이 있습니다.",
+ "create_group": "만들기",
+ "import_group": "가져오기",
+ "import_local_script": "로컬 스크립트 가져오기",
+ "link_import": "URL에서 가져오기",
+ "import_skill": "Skill 가져오기",
+ "link_import_desc": "스크립트 / 구독 URL을 한 줄에 하나씩 붙여넣으세요",
+ "link_import_placeholder": "https://example.com/script.user.js",
+ "link_import_hint": "유저스크립트 / 구독 / Skill URL을 지원합니다",
+ "not_a_valid_script": "유효한 유저스크립트 또는 SkillScript가 아닙니다",
+ "import_done": "가져오기 완료: 성공 {{success}}개 · 실패 {{fail}}개",
+ "drop_to_install": "스크립트 또는 Skill을 여기에 드롭하여 설치",
+ "drop_to_install_hint": ".js 유저스크립트 / 구독 · .zip Skill 패키지를 드롭하세요"
+}
diff --git a/src/locales/ko-KR/settings.json b/src/locales/ko-KR/settings.json
new file mode 100644
index 000000000..9812203f4
--- /dev/null
+++ b/src/locales/ko-KR/settings.json
@@ -0,0 +1,114 @@
+{
+ "general": "일반",
+ "language": "언어",
+ "help_translate": "번역 참여하기",
+ "script_sync": "스크립트 동기화",
+ "sync_delete": "삭제 동기화",
+ "sync_delete_desc": "활성화하면 스크립트를 삭제할 때 삭제 표시가 추가되고, 다른 기기가 이 상태를 감지해 해당 스크립트를 함께 삭제합니다. 비활성화하면 로컬과 클라우드에서 스크립트가 바로 삭제되며, 여러 기기를 사용 중이라면 동기화가 반복되는 문제가 발생할 수 있습니다.",
+ "enable_script_sync_to": "스크립트 동기화 활성화 주기",
+ "never": "사용 안 함",
+ "6_hours": "6시간",
+ "12_hours": "12시간",
+ "every_day": "매일",
+ "every_week": "매주",
+ "update_disabled_scripts": "비활성화된 스크립트도 업데이트",
+ "silent_update_non_critical_changes": "중요하지 않은 변경 사항은 조용히 업데이트",
+ "enable_eslint": "ESLint 활성화",
+ "eslint_rules": "ESLint 규칙",
+ "custom_eslint_rules_config": "사용자 지정 ESLint 규칙 설정(JSON 형식)",
+ "enter_eslint_rules": "ESLint 규칙을 입력하세요. https://eslint.org/play/ 에서 설정을 내려받을 수 있습니다.",
+ "language_change_tip": "언어가 변경되었습니다",
+ "backup": "백업",
+ "local": "로컬",
+ "export_file": "파일 내보내기",
+ "import_file": "파일 가져오기",
+ "cloud": "클라우드",
+ "backup_to": "백업 위치",
+ "preparing_backup": "클라우드로 백업 준비 중",
+ "backup_success": "백업이 완료되었습니다",
+ "backup_failed": "백업에 실패했습니다",
+ "no_backup_files": "백업 파일이 없습니다",
+ "backup_list": "백업 목록",
+ "open_backup_dir": "백업 디렉터리 열기",
+ "confirm_delete_backup_file": "백업 파일을 삭제하시겠습니까?",
+ "backup_strategy": "백업 전략",
+ "under_construction": "준비 중입니다",
+ "sync_system_connect_failed": "동기화 시스템 연결에 실패했습니다",
+ "sync_system_closed": "동기화가 꺼져 있습니다",
+ "sync_system_closed_description": "동기화가 비활성화되어 있습니다. 다시 설정해 주세요",
+ "export_success": "내보내기가 완료되었습니다",
+ "get_backup_dir_url_failed": "백업 디렉터리 주소를 가져오지 못했습니다",
+ "get_backup_files_failed": "백업 파일 목록을 가져오지 못했습니다",
+ "baidu_netdisk": "바이두 넷디스크",
+ "netdisk_unbind": "{{provider}} 연동 해제",
+ "netdisk_unbind_confirm": "{{provider}} 계정 연동을 해제하시겠습니까?",
+ "netdisk_unbind_success": "{{provider}} 계정 연동이 해제되었습니다",
+ "netdisk_unbind_error": "{{provider}} 계정 연동 해제에 실패했습니다",
+ "save_only_current_group": "현재 그룹에만 저장",
+ "security": "보안",
+ "blacklist_pages": "차단 목록 페이지",
+ "blacklist_placeholder": "다음과 같은 페이지에서 ScriptCat이 스크립트를 실행하지 않도록 합니다\nhttps://*.example.com",
+ "expression_format_error": "조건식 형식 오류",
+ "migration_confirm_message": "저장소 엔진 마이그레이션을 다시 시도하면 기존 데이터가 변경됩니다. 진행 전에 확인해 주세요. 자세한 내용:https://docs.scriptcat.org/docs/change/v0.17/",
+ "retry_migration": "저장소 엔진 마이그레이션 다시 시도",
+ "sync_status": "동기화 상태",
+ "interface_settings": "인터페이스",
+ "select_interface_language": "인터페이스 표시 언어 선택",
+ "extension_icon_badge": "확장 프로그램 아이콘 배지",
+ "display_type": "표시 유형",
+ "extension_icon_badge_type": "확장 프로그램 아이콘에 표시할 숫자 유형",
+ "background_color": "배경색",
+ "badge_background_color_desc": "배지 배경색",
+ "text_color": "텍스트 색상",
+ "badge_text_color_desc": "배지 텍스트 색상",
+ "badge_type_none": "표시 안 함",
+ "badge_type_run_count": "실행 횟수",
+ "badge_type_script_count": "스크립트 수",
+ "script_menu": "스크립트 메뉴",
+ "display_right_click_menu": "우클릭 메뉴에 표시",
+ "display_right_click_menu_desc": "브라우저 우클릭 메뉴에 스크립트 메뉴 표시",
+ "expand_count": "펼침 개수",
+ "auto_collapse_when_exceeds": "이 개수를 초과하면 자동으로 접기",
+ "script_update_check_frequency": "스크립트 업데이트 확인 주기",
+ "script_auto_update_frequency": "스크립트 자동 업데이트 확인 주기",
+ "control_script_update_behavior": "스크립트 업데이트 동작 제어",
+ "blacklist_pages_desc": "지정한 페이지에서 스크립트 실행을 막습니다. 와일드카드를 지원합니다",
+ "development_tools": "개발 도구",
+ "check_script_code_quality": "스크립트 코드 품질과 오류를 검사",
+ "script_run_env": {
+ "title": "실행 환경",
+ "all": "전체",
+ "normal-tabs": "일반 탭",
+ "incognito-tabs": "시크릿 탭"
+ },
+ "script_run_at": {},
+ "script_setting": {
+ "default": "기본값"
+ },
+ "notification": {
+ "script_sync_delete": "스크립트 동기화 삭제",
+ "script_sync_delete_desc": "스크립트 {{scriptName}}이(가) 삭제되었습니다",
+ "subscribe_update": "구독 {{subscribeName}}이(가) 업데이트되었습니다",
+ "subscribe_update_desc": "새 스크립트: {{newScripts}}\n삭제된 스크립트: {{deletedScripts}}"
+ },
+ "enable_background": {
+ "title": "백그라운드 실행 활성화",
+ "description": "활성화하면 모든 창을 닫아도 브라우저가 트레이로 최소화된 채 백그라운드에서 계속 실행되며, 수동으로 Chrome을 종료할 때까지 유지됩니다. 이를 통해 백그라운드 스크립트가 계속 실행될 수 있습니다.",
+ "enable_failed": "활성화에 실패했습니다",
+ "disable_failed": "비활성화에 실패했습니다",
+ "prompt_title": "백그라운드 실행을 활성화할까요?",
+ "prompt_description": "이 스크립트는 {{scriptType}}입니다. 백그라운드 실행을 활성화하면 브라우저를 닫아도 스크립트가 계속 실행됩니다.",
+ "enable_now": "지금 활성화",
+ "maybe_later": "나중에 하기",
+ "settings_hint": "이 옵션은 설정에서 언제든지 변경할 수 있습니다."
+ },
+ "favicon_service": "파비콘 서비스",
+ "favicon_service_desc": "웹사이트 아이콘을 가져올 서비스를 선택하세요",
+ "favicon_service_scriptcat": "ScriptCat",
+ "favicon_service_google": "Google",
+ "favicon_service_duckduckgo": "DuckDuckGo",
+ "favicon_service_icon-horse": "Icon Horse",
+ "favicon_service_local": "로컬에서 가져오기",
+ "cloud_sync_account_verification": "클라우드 동기화 계정 확인 중...",
+ "cloud_sync_verification_failed": "클라우드 동기화 계정 확인에 실패했습니다"
+}
diff --git a/src/locales/ko-KR/tools.json b/src/locales/ko-KR/tools.json
new file mode 100644
index 000000000..32e47affd
--- /dev/null
+++ b/src/locales/ko-KR/tools.json
@@ -0,0 +1,18 @@
+{
+ "development_tool": "개발 도구",
+ "vscode_url": "VSCode 주소",
+ "auto_connect_vscode_service": "VSCode 서비스 자동 연결",
+ "connect": "연결",
+ "connection_success": "연결되었습니다",
+ "connection_failed": "연결에 실패했습니다",
+ "select_import_script": "새 페이지에서 가져올 스크립트를 선택하세요",
+ "import_error": "가져오기 오류",
+ "pulling_data_from_cloud": "클라우드에서 데이터를 가져오는 중",
+ "pull_failed": "가져오기에 실패했습니다",
+ "restore": "복원",
+ "manual_download": "다운로드가 시작되지 않으면 수동으로 다운로드하세요",
+ "local_backup": "로컬 백업",
+ "cloud_backup": "클라우드 백업",
+ "auto_backup": "자동 백업",
+ "data_migration": "데이터 마이그레이션"
+}
diff --git a/src/locales/locales.ts b/src/locales/locales.ts
index 6db946b30..9dd5a857a 100644
--- a/src/locales/locales.ts
+++ b/src/locales/locales.ts
@@ -11,6 +11,7 @@ import * as deDE from "./de-DE";
import * as viVN from "./vi-VN";
import * as ruRU from "./ru-RU";
import * as trTR from "./tr-TR";
+import * as koKR from "./ko-KR";
import { changeRelativeTimeLanguage } from "./relative-date";
export let localePath = "";
@@ -57,6 +58,7 @@ export function initLanguage(lng: string = "en-US"): void {
"vi-VN": { title: "Tiếng Việt", ...viVN },
"ru-RU": { title: "Русский", ...ruRU },
"tr-TR": { title: "Türkçe", ...trTR },
+ "ko-KR": { title: "한국어", ...koKR },
},
});
diff --git a/src/pkg/utils/monaco-editor/langs.ts b/src/pkg/utils/monaco-editor/langs.ts
index 7805a4923..6e8ccfa12 100644
--- a/src/pkg/utils/monaco-editor/langs.ts
+++ b/src/pkg/utils/monaco-editor/langs.ts
@@ -295,6 +295,48 @@ const grantValuePromptsRuRU = {
"window.onurlchange": "Разрешает скрипту слушать события изменения URL.",
} as const;
+const grantValuePromptsKoKR = {
+ none: "특별한 GM API 권한을 요청하지 않으며, 스크립트는 일반 페이지 스크립트에 가깝게 동작합니다.",
+ unsafeWindow: "페이지 자체의 window 객체에 접근하여 네이티브 페이지 스크립트와 상호작용합니다.",
+ GM_getValue: "스크립트의 영구 저장소에서 값 하나를 읽습니다.",
+ GM_getValues: "스크립트의 영구 저장소에서 여러 값을 읽습니다.",
+ GM_setValue: "스크립트의 영구 저장소에 값 하나를 씁니다.",
+ GM_setValues: "스크립트의 영구 저장소에 여러 값을 씁니다.",
+ GM_deleteValue: "스크립트의 영구 저장소에서 값 하나를 삭제합니다.",
+ GM_deleteValues: "스크립트의 영구 저장소에서 여러 값을 삭제합니다.",
+ GM_listValues: "스크립트의 영구 저장소에 있는 모든 키를 나열합니다.",
+ GM_addValueChangeListener: "스크립트 저장 값의 변경을 감지합니다.",
+ GM_removeValueChangeListener: "스크립트 저장 값 변경 리스너를 제거합니다.",
+ GM_xmlhttpRequest: "교차 출처(cross-origin) 네트워크 요청을 보냅니다. 대상 호스트는 보통 @connect로 허용해야 합니다.",
+ GM_download:
+ "파일을 다운로드합니다. URL과 파일명을 전달하거나 url, name, headers, saveAs 등의 필드를 가진 상세 객체를 전달할 수 있으며, 중단(abort) 가능한 핸들을 반환합니다.",
+ GM_openInTab: "새 탭을 열며, 전면/백그라운드로 열기 등의 옵션을 사용할 수 있습니다.",
+ GM_closeInTab: "스크립트가 열었거나 관리하는 탭을 닫습니다.",
+ GM_getTab: "현재 탭과 연결된 임시 데이터를 읽습니다.",
+ GM_saveTab: "현재 탭과 연결된 임시 데이터를 저장합니다.",
+ GM_getTabs: "스크립트가 저장한 모든 탭의 임시 데이터를 읽습니다.",
+ GM_notification: "브라우저 알림을 표시하고 클릭, 닫기 등의 이벤트를 처리합니다.",
+ GM_closeNotification: "지정한 스크립트 알림을 닫습니다.",
+ GM_updateNotification: "지정한 스크립트 알림을 업데이트합니다.",
+ GM_setClipboard: "시스템 클립보드에 씁니다.",
+ GM_registerMenuCommand: "스크립트 메뉴 명령을 등록합니다.",
+ GM_unregisterMenuCommand: "스크립트 메뉴 명령의 등록을 해제합니다.",
+ CAT_registerMenuInput: "ScriptCat API: 입력 필드가 있는 스크립트 메뉴 명령을 등록합니다.",
+ CAT_unregisterMenuInput: "ScriptCat API: 입력 필드가 있는 스크립트 메뉴 명령의 등록을 해제합니다.",
+ GM_addStyle: "페이지에 CSS를 삽입합니다.",
+ GM_addElement: "페이지에 요소를 생성하여 삽입합니다.",
+ GM_getResourceText: "@resource로 선언된 리소스의 텍스트 내용을 읽습니다.",
+ GM_getResourceURL: "@resource로 선언된 리소스의 URL을 가져옵니다.",
+ GM_cookie: "쿠키를 읽거나 쓰거나 삭제하기 위해 Cookie API에 접근합니다.",
+ CAT_fetchBlob: "ScriptCat 내부 API: 확장 프로그램 측에서 접근 가능한 리소스를 읽어 Blob으로 반환합니다.",
+ CAT_fileStorage: "ScriptCat API: 스크립트 파일 저장소에 접근합니다.",
+ CAT_userConfig: "ScriptCat API: 스크립트 사용자 설정에 접근합니다.",
+ CAT_scriptLoaded: "ScriptCat API: @early-start 시나리오에서 스크립트가 완전히 로드될 때까지 기다립니다.",
+ "window.close": "스크립트가 window.close()를 호출할 수 있도록 허용합니다.",
+ "window.focus": "스크립트가 window.focus()를 호출할 수 있도록 허용합니다.",
+ "window.onurlchange": "스크립트가 URL 변경 이벤트를 감지할 수 있도록 허용합니다.",
+} as const;
+
export const editorLangs = {
"zh-CN": {
title: "简体中文",
@@ -908,6 +950,93 @@ tracking: Этот скрипт отслеживает информацию о
* * * * once(1-5) Раз в неделю, только с понедельника по пятницу`.replace(/\n/g, "
"),
},
},
+
+ "ko-KR": {
+ title: "한국어",
+ thisIsAUserScript: "사용자 스크립트",
+ undefinedPrompt: "정의되지 않은 프롬프트",
+ quickfix: "{0} 문제 수정",
+ addEslintDisableNextLine: "eslint-disable-next-line 주석 추가",
+ addEslintDisable: "eslint-disable 주석 추가",
+ declareGlobal: "'{0}'을(를) 전역 변수로 선언 (/* global */)",
+ removeConnectWildcard: "@connect 와일드카드 제거: {0}",
+ replaceMatchTldWildcardWithInclude: "@match 최상위 도메인 와일드카드를 @include {0}(으)로 교체",
+ replaceIncludeWithMatch: "@include를 @match {0}(으)로 교체",
+ grantConflict: "@grant none은 GM API와 함께 사용할 수 없습니다. none 또는 모든 GM API를 제거하세요.",
+ grantValuePrompts: grantValuePromptsKoKR,
+ prompt: {
+ name: "스크립트 이름",
+ namespace: "스크립트 네임스페이스",
+ copyright: "스크립트의 저작권 정보",
+ license: "스크립트의 오픈소스 라이선스",
+ version: "스크립트 버전",
+ description: "스크립트 설명",
+ icon: "스크립트 아이콘",
+ iconURL: "스크립트 아이콘",
+ defaulticon: "스크립트 아이콘",
+ icon64: "64x64 크기의 스크립트 아이콘",
+ icon64URL: "64x64 크기의 스크립트 아이콘",
+ grant: "스크립트가 요청하는 특수 API 권한",
+ author: "스크립트 작성자",
+ "run-at":
+ "스크립트 실행 시점
`document-start`: URL이 일치한 직후 가능한 한 빨리 스크립트를 주입
`document-end`: DOM 로딩이 끝난 후 주입 (이미지 등은 아직 로딩 중일 수 있음)
`document-idle`: 모든 콘텐츠 로딩이 끝난 후 주입
`document-body`: body 요소가 존재할 때만 주입",
+ "run-in": "스크립트가 주입되는 환경",
+ homepage: "스크립트 홈페이지",
+ homepageURL: "스크립트 홈페이지",
+ website: "스크립트 홈페이지",
+ background: "백그라운드 스크립트",
+ include: "스크립트가 실행되는 URL 패턴",
+ match: "스크립트가 실행되는 URL 패턴",
+ exclude: "스크립트가 실행되지 않는 URL 패턴",
+ connect: "스크립트가 접근할 수 있는 사이트",
+ resource: "가져올 리소스 파일",
+ require: "가져올 외부 JS 파일",
+ "require-css": "가져올 외부 CSS 파일",
+ noframes: "스크립트를 `` 내부에서 실행하지 않음",
+ compatible: "GreasyFork에 표시되는 호환성 정보",
+ "inject-into":
+ "스크립트 주입 환경
`content`: content 환경에 주입
`page`: 페이지 환경에 주입 (기본값)
참고: SC는 CSP를 기준으로 컨텍스트를 자동 선택하는 `inject-into: auto`를 지원하지 않습니다.",
+ "early-start":
+ "`run-at: document-start`와 함께 사용합니다. `early-start`를 사용하면 페이지보다 먼저 스크립트를 로드하고 실행할 수 있지만, 성능 문제와 GM API 사용 제한이 있을 수 있습니다. (SC 전용)",
+ unwrap:
+ "유저스크립트를 샌드박스로 감싸지 않고 페이지의 네이티브 전역 스코프에 직접 주입하여 실행합니다.
스크립트는 페이지의 실제 전역 변수에 직접 접근하고 수정할 수 있지만, GM.* 등 유저스크립트 전용 API는 사용할 수 없습니다.
페이지의 네이티브 스크립트와 깊이 상호작용해야 하거나 일반 페이지 스크립트에서 마이그레이션하는 경우에 주로 사용됩니다.",
+ definition: "ScriptCat 전용 기능: 에디터 자동완성에 사용되는 `.d.ts` 파일의 참조 URL",
+ antifeature: `스크립트 마켓과 관련된 항목으로, 환영받지 못하는 기능에는 이 설명 값을 추가해야 합니다
+referral-link: 이 스크립트는 작성자의 리퍼럴(추천) 링크로 수정하거나 리디렉션합니다
+ads: 이 스크립트는 방문한 페이지에 광고를 삽입합니다
+payment: 이 스크립트는 정상적으로 사용하려면 결제가 필요합니다
+miner: 이 스크립트는 사용자 자원을 이용하지만 사용자에게 이익이 거의 또는 전혀 없는 채굴 행위를 합니다
+membership: 이 스크립트는 정상적으로 사용하려면 회원 가입이 필요합니다
+tracking: 이 스크립트는 사용자 정보를 추적합니다`.replace(/\n/g, "
"),
+ updateURL: "스크립트 업데이트 확인용 URL",
+ downloadURL: "스크립트 업데이트 다운로드 URL",
+ supportURL: "지원 사이트 / 버그 제보 페이지",
+ source: "스크립트 소스 코드 페이지",
+ scriptUrl: "구독 스크립트가 참조하는 유저스크립트 URL",
+ storageName: "여러 스크립트가 하나의 저장 공간을 공유하도록 하는 스크립트 값 저장소 이름",
+ tag: "스크립트 태그, 쉼표 또는 공백으로 구분",
+ cloudCat: "스크립트를 CloudCat 클라우드 스크립트 패키지로 내보낼 수 있도록 표시",
+ cloudServer: "스크립트가 사용하는 CloudCat 클라우드 서비스",
+ exportValue: "클라우드 스크립트로 내보낼 때 함께 내보낼 스크립트 저장 값",
+ exportCookie: "클라우드 스크립트로 내보낼 때 함께 내보낼 쿠키",
+ crontab: `예약 스크립트 crontab 예시 (클라우드 스크립트에는 적용되지 않음)
+* * * * * * 매초 실행
+* * * * * 매분 실행
+0 */6 * * * 6시간마다 0분에 한 번 실행
+15 */6 * * * 6시간마다 15분에 한 번 실행
+* once * * * 매시간 한 번 실행
+* * once * * 매일 한 번 실행
+* 10 once * * 매일 10:00-10:59 사이에 한 번 실행. 10:04에 실행되었다면 그날 10:05-10:59에는 다시 실행되지 않음
+* 1,3,5 once * * 매일 1시, 3시, 5시에 한 번 실행. 1시에 실행되었다면 그날 3시, 5시에는 다시 실행되지 않음
+* */4 once * * 4시간마다 확인 후 한 번 실행. 4시에 실행되었다면 그날 8시, 12시, 16시, 20시, 24시에는 다시 실행되지 않음
+* 10-23 once * * 매일 10:00-23:59 사이에 한 번 실행. 10:04에 실행되었다면 그날 10:05-23:59에는 다시 실행되지 않음
+* once 13 * * 매월 13일 매시간 한 번 실행
+* once(9-17) * * * 매일 9시부터 17시 사이, 매시간 한 번 실행
+0,30 once * * * 매시간 0분 또는 30분 중 먼저 도달한 시점에 한 번 실행, 나머지는 건너뜀
+* * once(9-18) * * 매월 9일부터 18일까지, 매일 한 번 실행
+* * * * once(1-5) 매주 한 번 실행, 월요일부터 금요일 사이에만`.replace(/\n/g, "
"),
+ },
+ },
} as const;
export type EditorLangCode = keyof typeof editorLangs;