i18n: add Korean (ko-KR) translation#1568
Conversation
Adds a full Korean UI translation for ScriptCat: - src/locales/ko-KR/: 11 i18next namespace JSON files (959 leaf keys) translated from the en-US source, covering common, popup, script, editor, settings, install, agent, logs, guide, tools, permission. - Registers ko-KR in src/locales/locales.ts (import + i18next resources). - Adds a Korean entry to the Monaco editor prompt/grant-value strings in src/pkg/utils/monaco-editor/langs.ts. - Adds src/assets/_locales/ko/messages.json for the chrome.i18n extension-market metadata (name/description), matching the existing per-locale files there. No terminology-ko-KR.md exists yet, so translations follow the existing style/voice used by ja-JP and de-DE per docs/translation.md guidance rather than introducing new terminology conventions. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Korean translation review — changes requested
I reviewed the Korean locale against both the English (en-US) source and the Simplified Chinese (zh-CN) source, together with the existing terminology guides.
The contribution is substantially complete and many strings are clear and accurate. However, the following issues should be corrected before merge:
- Authorization is mistranslated as authentication in the permission flow.
- The normal-script product type is translated as the generic userscript concept, losing a product distinction that both terminology guides require.
- Scheduled Script terminology is mixed with
crontab script, even though the product term is already established. - An exclude-rule explanation says “match rule,” producing incorrect UI meaning.
- A “clear storage” success message says the storage was reset, which is a different operation.
- A split popup sentence is grammatically broken when the number is inserted.
- Cross-browser background-running copy unnecessarily names Chrome.
- A Simplified Chinese full-width colon was copied into Korean text.
Must-fix findings
M1. Authorization is translated as authentication
File: src/locales/ko-KR/permission.json
Keys: auth_duration, loading_confirm, confirm_expired_title, confirm_expired_desc
The English source uses Authorization, and Simplified Chinese uses 授权. The Korean strings use 인증, which means authentication/identity verification rather than granting a script permission.
Current concepts:
인증 유효 기간인증 요청을 불러오는 중…인증 요청이 만료되었습니다
Suggested wording:
{
"auth_duration": "권한 허용 기간",
"loading_confirm": "권한 요청을 불러오는 중…",
"confirm_expired_title": "권한 요청이 만료되었습니다",
"confirm_expired_desc": "이 권한 요청은 시간이 초과되었거나 이미 처리되었습니다. 페이지로 돌아가 다시 시도해 주세요."
}This is a semantic issue, not only a style preference.
M2. The normal-script product type is translated as generic userscript
File: src/locales/ko-KR/script.json
Key: create_user_script
Current:
"create_user_script": "유저스크립트 만들기"In this UI, the key creates ScriptCat’s ordinary/normal script type. 유저스크립트 is also used as the generic userscript ecosystem concept elsewhere. Simplified Chinese deliberately resolves this product type as 普通脚本, and both terminology guides require preserving the distinction among normal, page, background, and scheduled scripts.
Suggested:
"create_user_script": "일반 스크립트 만들기"Use 유저스크립트 for the generic userscript concept and 일반 스크립트 for this ScriptCat type.
M3. Scheduled Script is mixed with crontab script
File: src/locales/ko-KR/editor.json
Key: only_background_scheduled_can_run
Current:
"only_background_scheduled_can_run": "백그라운드 스크립트/예약(crontab) 스크립트만 실행할 수 있습니다"The English crontab scripts wording is already identified as a source-copy review target. Simplified Chinese correctly uses the established scheduled-script product term.
Suggested:
"only_background_scheduled_can_run": "백그라운드 스크립트와 예약 스크립트만 실행할 수 있습니다"Keep cron/crontab only for the scheduling syntax, not the script-type name.
M4. Exclude-rule explanation incorrectly says “match rule”
File: src/locales/ko-KR/editor.json
Key: after_deleting_exclude_item
Current:
"after_deleting_exclude_item": "삭제 후에도 스크립트에 정의된 매치 규칙은 제외 목록에 다시 추가됩니다"This is the exclude list and should refer to an exclude rule.
Suggested:
"after_deleting_exclude_item": "삭제 후에도 스크립트에 정의된 제외 규칙은 제외 목록에 다시 추가됩니다"The English and Chinese strings appear to contain the same source-level inconsistency, but the Korean translation should not reproduce it when the key and UI context are clear.
M5. Clear storage is translated as reset
File: src/locales/ko-KR/editor.json
Key: clear_success
Current:
"clear_success": "초기화되었습니다"초기화 means reset/initialize and can imply restoring defaults. The action clears stored data; the UI already has separate reset and restore operations.
Suggested:
"clear_success": "저장소를 비웠습니다"모두 지웠습니다 may also work if the surrounding notification already identifies the storage object.
M6. Split popup sentence becomes grammatically incorrect
File: src/locales/ko-KR/popup.json
Keys: menu_expand_num_before, menu_expand_num_after
Current:
{
"menu_expand_num_before": "메뉴 항목이",
"menu_expand_num_after": "개를 초과하면 숨겨집니다."
}After inserting a number, this produces wording like 메뉴 항목이 5개를 초과하면 숨겨집니다, which is ungrammatical. It is the number of menu items that exceeds the limit.
Suggested:
{
"menu_expand_num_before": "메뉴 항목 수가 ",
"menu_expand_num_after": "개를 초과하면 자동으로 숨겨집니다."
}Please verify the exact leading/trailing spaces against the component concatenation.
M7. Cross-browser copy unnecessarily names Chrome
File: src/locales/ko-KR/settings.json
Key: enable_background.description
Current wording says the process remains active until the user manually quits Chrome. ScriptCat supports multiple browsers, and the Simplified Chinese source correctly generalizes this to “the browser.” The English terminology guide also identifies this as a source-copy review target.
Suggested:
활성화하면 모든 창을 닫아도 브라우저가 트레이에 최소화된 상태로 백그라운드에서 계속 실행되며, 브라우저를 직접 종료할 때까지 유지됩니다. 이를 통해 백그라운드 스크립트가 계속 실행될 수 있습니다.
M8. Simplified Chinese punctuation appears in Korean text
File: src/locales/ko-KR/settings.json
Key: migration_confirm_message
Current text contains the full-width Chinese colon ::
자세한 내용:https://docs.scriptcat.org/docs/change/v0.17/
Suggested:
저장소 엔진 마이그레이션을 다시 시도하면 기존 데이터가 변경됩니다. 진행하기 전에 확인해 주세요. 자세한 내용: https://docs.scriptcat.org/docs/change/v0.17/
Recommended improvements
R1. Translate generic “Source” as 출처, not 소스
File/key: src/locales/ko-KR/common.json → source
Suggested:
"source": "출처"Reserve 소스 or 소스 코드 for source code.
R2. Make “All” explicitly refer to browser tabs
File/key: src/locales/ko-KR/settings.json → script_run_env.all
Current: 전체
Suggested: 모든 탭
The sibling values are 일반 탭 and 시크릿 탭, so the bare label is ambiguous.
R3. Avoid the literal 절대 범위
File/key: src/locales/ko-KR/logs.json → absolute_range
Current: 절대 범위
Suggested: 절대 시간 범위
This follows the meaning clarified by the Simplified Chinese 绝对时间范围.
R4. Use desktop-appropriate wording for expanding update details
File/key: src/locales/ko-KR/install.json → updatepage.tap_to_expand
Current: 탭하여 펼치기
Suggested: 클릭하여 펼치기
This is primarily a desktop extension interface; Simplified Chinese also resolves the source’s ambiguous “Tap” to “click.”
R5. Clarify that models are fetched/listed, not imported
File/key: src/locales/ko-KR/agent.json → model_fetch
Current: 모델 가져오기
Suggested: 모델 목록 불러오기
가져오기 is already used for import operations elsewhere.
R6. Prefer 매개변수 for user-facing tool arguments
File/key: src/locales/ko-KR/agent.json → chat_tool_arguments
Current: 인수
Suggested: 매개변수
인수 is technically valid, but 매개변수 is clearer in this user-facing chat UI.
R7. Improve the OPFS expansion
File/key: src/locales/ko-KR/agent.json → opfs_subtitle
Current:
출처별 프라이빗 파일 시스템(OPFS) · 에이전트 전용 저장소
Suggested:
오리진 전용 파일 시스템(OPFS) · 에이전트 전용 저장소
출처별 does not clearly express the web-platform security-origin concept.
R8. Correct the CORS label
File/key: src/locales/ko-KR/permission.json → permission_cors
Current: 교차 도메인(CORS)
Suggested: 교차 출처 접근(CORS)
CORS specifically concerns cross-origin resource sharing.
R9. Normalize Skill as 스킬 in ordinary Korean UI
File/keys: src/locales/ko-KR/script.json
import_skilllink_import_hintdrop_to_installdrop_to_install_hint
The locale already uses 스킬 throughout agent.json and install.json, but these strings retain English Skill.
Suggested:
{
"import_skill": "스킬 가져오기",
"link_import_hint": "유저스크립트 / 구독 / 스킬 URL을 지원합니다",
"drop_to_install": "스크립트 또는 스킬을 여기에 드롭하여 설치",
"drop_to_install_hint": ".js 유저스크립트 / 구독 · .zip 스킬 패키지를 드롭하세요"
}Preserve exact identifiers and filenames such as SKILL.md, SKILL.cat.md, and SkillScript.
R10. Avoid placeholder particle notation
File/key: src/locales/ko-KR/script.json → confirm_delete_script_content
Current:
스크립트 "{{name}}"을(를) 삭제하시겠습니까?
Suggested:
"{{name}}" 스크립트를 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.
Rephrasing is more natural than exposing Korean particle alternatives.
R11. Make execution exclusion labels more natural
File/keys: src/locales/ko-KR/common.json → exclude_on, exclude_off
Suggested:
{
"exclude_on": "$0에서 다시 실행",
"exclude_off": "$0에서 실행 제외"
}The current compressed noun phrases read like literal machine translation.
R12. Keep the generic userscript term consistent in Monaco
File/key: src/pkg/utils/monaco-editor/langs.ts → thisIsAUserScript
Current: 사용자 스크립트
Suggested: 유저스크립트
This aligns with the dominant generic term in the Korean locale. The normal ScriptCat product type should remain 일반 스크립트.
R13. Smooth two Monaco quick-fix strings
File/keys:
replaceMatchTldWildcardWithIncludereplaceIncludeWithMatch
Suggested:
@match 최상위 도메인 와일드카드를 @include {0}으로 바꾸기
@include를 @match {0}으로 바꾸기
This removes visible particle notation and reads more naturally as an action.
R14. Consider improving the extension-store description
File/key: src/assets/_locales/ko/messages.json → scriptcat_description
Current:
브라우저의 모든 잠재력을 끌어내는 강력한 유저스크립트 매니저!
Suggested:
브라우저의 잠재력을 최대한 활용할 수 있는 강력한 유저스크립트 관리자!
The current sentence is understandable, but the suggestion is more natural and neutral Korean product copy.
|
@cyfung1031 Thanks for the thorough review 🙏 I did a pass focused only on structure (not wording/grammar), and there's one thing that needs handling:
|
|
@moduvoice I am waiting for your follow-up. If there is no follow-up within this week, I will just use AI to apply all above suggestions. Then you might make another PR for any further changing. |
Korean (ko-KR) translation PR body
Motivation
This adds Korean (
ko-KR) translation support — to help Korean-speaking users use thisopen-source project more comfortably in their own language.
한국 사람들의 오픈소스 이용에 도움이 되게 하기 위해서 한글화 작업을 하였습니다.
Changes
src/locales/ko-KR/locale: 11 namespace files (agent.json,common.json,editor.json,guide.json,install.json,logs.json,permission.json,popup.json,script.json,settings.json,tools.json) +index.ts, mirroring theen-USstructure — 959 translated keys, verified 1:1 key parity againsten-US(0 missing / 0 extra).src/locales/locales.ts("ko-KR": { title: "한국어", ...koKR }).src/assets/_locales/ko/messages.json— legacychrome.i18nextension metadata (name/description) for the Chrome Web Store listing.src/pkg/utils/monaco-editor/langs.ts— added Korean strings for the in-editor GM API grant-value hover prompts and metadata-field prompts (script header fields, crontab examples, etc.) used by the Monaco editor.Testing
ko-KR/*.jsonnamespace files diffed key-by-key againsten-US, confirming 959/959 keys with 0 missing and 0 extra.docs/translation.md: noterminology-ko-KR.mdexists yet, so translation style was kept consistent with the existing locale conventions rather than introducing new ad-hoc terminology; verified terminology consistency for core concepts across all 11 files (스크립트/유저스크립트, 권한, 구독, 백그라운드 스크립트, 샌드박스, 에이전트).install.json(security/permission warning copy) andagent.json(AI coding agent feature UI).npx tsc --noEmit— clean.npx eslint .— clean.npx vitest run— 3084/3084 tests passing (289 test files).