← 스킬 목록으로 돌아가기

i18n-keys-toolkit

v1.0.0 approved Development 오늘 업데이트
✅ Verified
⬇ 다운로드 설치 가이드↓
🤖 에이전트용 설치 명령 (curl / MCP / Claude Desktop)
▸ curl 한 줄 다운로드
curl -L -o i18n-keys-toolkit.skill   "https://aiskillstore.io/v1/agent/skills/b7f40a38-3147-4626-937e-1f9d4a1ff620/download?platform=ClaudeCode"
▸ MCP 도구 호출 (Skill Store MCP 등록 시)
{
  "tool": "download_skill",
  "arguments": {
    "skill_id": "b7f40a38-3147-4626-937e-1f9d4a1ff620",
    "platform": "ClaudeCode"
  }
}
▸ Claude Desktop / Cursor MCP 설정 (1회)
{
  "mcpServers": {
    "skill-store": {
      "url": "https://aiskillstore.io/mcp/"
    }
  }
}
📖 에이전트용 전체 API 가이드: /llms.txt  ·  MCP server card

i18n/l10n key management toolkit — find missing/orphan keys, merge locales, sort, and report translation coverage (zero dependencies)

# i18n # l10n # localization # internationalization # translation # korean # development

기본 정보

소유자 👤 aiskillstore-team 카테고리 Development 등록일 2026-05-26 최종 업데이트 2026-05-26 최신 버전 1.0.0 패키지 날짜 2026-05-26 검증 상태 approved 다운로드 수 0회 체크섬 (SHA256) 46c13c22a486fc94dd30c74ee307c008dcaf2858a55755c9c2bb1ce462cef359

설치 방법

호환 플랫폼: any

1
openclaw_skill_manager.py로 스킬을 설치합니다.
python openclaw_skill_manager.py --install i18n-keys-toolkit
2
설치 확인
python openclaw_skill_manager.py --list-installed
3
특정 버전 설치 (선택)
python openclaw_skill_manager.py --install i18n-keys-toolkit --version 1.0.0
1
스킬 패키지를 다운로드합니다.
curl -O https://aiskillstore.io/v1/skills/b7f40a38-3147-4626-937e-1f9d4a1ff620/download
2
Claude Code commands 디렉터리에 배치합니다.
unzip i18n-keys-toolkit.skill -d ~/.claude/commands/i18n-keys-toolkit/
3
Claude Code에서 슬래시 커맨드로 사용합니다.
/i18n-keys-toolkit
1
Agent Skills 패키지를 다운로드합니다.
curl -O https://aiskillstore.io/v1/agent/skills/b7f40a38-3147-4626-937e-1f9d4a1ff620/download?platform=ClaudeCodeAgentSkill
2
Claude Code skills 디렉터리에 압축을 해제합니다.
unzip i18n-keys-toolkit-agent-skill-*.skill -d ~/.claude/skills/i18n-keys-toolkit/
3
Claude Code를 재시작하면 세션 시작 시 자동으로 로드됩니다. 슬래시 커맨드 없이 자연어로 사용 가능합니다.
1
Cursor 변환 패키지를 다운로드합니다.
curl -O https://aiskillstore.io/v1/agent/skills/b7f40a38-3147-4626-937e-1f9d4a1ff620/download?platform=Cursor
2
압축 해제 후 영구 위치에 저장합니다.
unzip i18n-keys-toolkit-cursor-*.skill -d ~/.cursor/skills/i18n-keys-toolkit/
3
.cursor/mcp.json에 MCP 서버 설정을 추가하고 Cursor를 재시작합니다.
cat ~/.cursor/skills/i18n-keys-toolkit/cursor_mcp_config.json
1
Gemini CLI 변환 패키지를 다운로드합니다.
curl -O https://aiskillstore.io/v1/agent/skills/b7f40a38-3147-4626-937e-1f9d4a1ff620/download?platform=GeminiCLI
2
압축 해제 후 영구 위치에 저장합니다.
unzip i18n-keys-toolkit-geminicli-*.skill -d ~/.gemini/skills/i18n-keys-toolkit/
3
~/.gemini/settings.json에 MCP 서버 설정을 추가하고 Gemini CLI를 재시작합니다.
cat ~/.gemini/skills/i18n-keys-toolkit/gemini_settings_snippet.json
1
Codex CLI 변환 패키지를 다운로드합니다.
curl -O https://aiskillstore.io/v1/agent/skills/b7f40a38-3147-4626-937e-1f9d4a1ff620/download?platform=CodexCLI
2
압축 해제 후 영구 위치에 저장합니다.
unzip i18n-keys-toolkit-codexcli-*.skill -d ~/.codex/skills/i18n-keys-toolkit/
3
~/.codex/config.toml에 MCP 서버 설정을 추가하고 Codex CLI를 재시작합니다.
cat ~/.codex/skills/i18n-keys-toolkit/codex_config_snippet.toml
1
REST API로 스킬 패키지를 다운로드합니다.
GET https://aiskillstore.io/v1/skills/b7f40a38-3147-4626-937e-1f9d4a1ff620/download
2
에이전트 플랫폼의 skills 디렉터리에 배치합니다.
cp i18n-keys-toolkit.skill ./skills/
3
설치 가이드 API로 플랫폼별 상세 정보를 조회합니다.
GET https://aiskillstore.io/v1/skills/b7f40a38-3147-4626-937e-1f9d4a1ff620/install-guide?platform=CustomAgent

보안 검증 보고서

검증 결과 APPROVED

검사 결과: ["메타데이터 경고: 권장 필드 없음: 'requirements' (SKILL.md v2 권장)", "메타데이터 경고: 권장 필드 없음: 'changelog' (SKILL.md v2 권장)", '정보: spec: usk/1.0 미선언 — v2 패키지로 처리됩니다. 자동 변환 및 에이전트 검색 기능을 사용하려면 USK v3로 업그레이드하세요.']

✅ 보안 위험 항목이 발견되지 않았습니다.

AI 검수 단계

검수 주체 gemini 위험도 🟢 낮음 검수 요약 선언된 제한적인 권한과 정적 분석 결과에 따라 안전하다고 판단됩니다. 스킬의 기능은 i18n 키 관리에 국한되며, 외부 자원 접근이 없습니다.
판단 근거

제공된 스킬 메타데이터와 정적 분석 결과를 바탕으로 보안 검수를 진행했습니다. 1. **선언된 권한 (Permissions)**: 스킬은 `network: false`, `filesystem: false`, `subprocess: false`로 매우 제한적인 권한을 선언하고 있습니다. 이는 외부 통신, 파일 시스템 접근, 외부 프로그램 실행 등 잠재적 위험이 있는 모든 행위를 차단하므로, 스킬의 공격 표면이 극도로 작습니다. 환경 변수 접근도 선언되지 않았습니다. 2. **악의적 목적 코드**: 정적 분석 결과는 `status: "approved"`, `red_flags_found: []`, `obfuscation_warnings: []`, `forbidden_exec_files_found: []`를 보고하고 있습니다. 이는 코드 내에 악의적인 목적의 코드(데이터 탈취, 시스템 파괴, 난독화 등)가 없음을 시사합니다. 3. **선언되지 않은 외부 통신**: `network: false`로 선언되어 있으며, 정적 분석 결과에서도 외부 통신에 대한 경고가 없습니다. 따라서 선언되지 않은 외부 통신은 없을 것으로 판단됩니다. 4. **사용자 데이터 무단 수집/전송**: 스킬은 i18n 키 관리라는 명확한 목적을 가지고 있으며, 입력으로 받은 `locales` 및 `source_code` 데이터를 처리합니다. `network: false` 권한으로 인해 사용자 데이터를 외부로 무단 전송할 수 없습니다. 5. **코드 품질 및 목적 일치**: 스킬의 메타데이터, 입력/출력 스키마, 예시가 매우 상세하고 명확하게 정의되어 있습니다. 'zero dependencies'를 명시하여 의존성으로 인한 잠재적 위험도 줄였습니다. 스킬의 목적(i18n/l10n 키 관리)과 기능이 일치하며, 잘 설계된 것으로 보입니다. **주의사항**: 실제 코드 파일이 제공되지 않아 직접적인 코드 검토는 불가능했습니다. 하지만 제공된 정적 분석 결과와 매우 제한적인 권한 선언을 바탕으로 판단했을 때, 이 스킬은 안전하며 위험 수준이 낮다고 평가됩니다.

버전 히스토리

버전 USK v3 검증 상태 패키지 날짜 다운로드 변경사항
v1.0.0 approved 2026-05-26 ⬇ 0

사용 예시 (Examples) 7 개

이 스킬의 대표적인 입출력 예시입니다. 에이전트는 이 예시를 보고 스킬 호출 방법과 결과 형태를 이해할 수 있습니다.

find_missing_keys — detect keys absent in ko locale
# missing# korean# comparison

Compare en base locale against ko to find untranslated keys

📥 입력
{
  "action": "find_missing_keys",
  "base_locale": "en",
  "locales": {
    "en": {
      "error": {
        "notFound": "Page not found"
      },
      "login": {
        "button": "Sign In",
        "title": "Login"
      },
      "welcome": "Welcome"
    },
    "ko": {
      "login": {
        "title": "\ub85c\uadf8\uc778"
      },
      "welcome": "\ud658\uc601\ud569\ub2c8\ub2e4"
    }
  }
}
📤 출력
{
  "action": "find_missing_keys",
  "ok": true,
  "result": {
    "base_locale": "en",
    "missing_by_locale": {
      "ko": [
        "login.button",
        "error.notFound"
      ]
    },
    "missing_count": {
      "ko": 2
    },
    "total_base_keys": 4
  }
}
find_orphan_keys — keys not used in source
# orphan# cleanup# source-scan

Find translation keys that appear in locale JSON but not in source code

📥 입력
{
  "action": "find_orphan_keys",
  "locales": {
    "en": {
      "another_orphan": "Also unused",
      "login_title": "Login",
      "unused_key": "Never used",
      "welcome": "Welcome"
    }
  },
  "source_code": "t(\u0027welcome\u0027) t(\u0027login_title\u0027) // some code"
}
📤 출력
{
  "action": "find_orphan_keys",
  "ok": true,
  "result": {
    "orphan_count": 2,
    "orphan_keys": [
      "unused_key",
      "another_orphan"
    ],
    "total_keys": 4,
    "used_keys": [
      "welcome",
      "login_title"
    ]
  }
}
merge_locales — combine multiple locale files
# merge# korean# conflict-resolution

Merge ko-base and ko-override with override_wins strategy

📥 입력
{
  "action": "merge_locales",
  "locales": {
    "base": {
      "login": {
        "button": "\ub85c\uadf8\uc778 \ud558\uae30",
        "title": "\ub85c\uadf8\uc778"
      },
      "welcome": "\ud658\uc601\ud569\ub2c8\ub2e4"
    },
    "override": {
      "login": {
        "button": "\uc2dc\uc791\ud558\uae30"
      },
      "signup": "\ud68c\uc6d0\uac00\uc785"
    }
  },
  "merge_strategy": "override_wins"
}
📤 출력
{
  "action": "merge_locales",
  "ok": true,
  "result": {
    "conflicts_resolved": 1,
    "keys_added": 1,
    "merged": {
      "login": {
        "button": "\uc2dc\uc791\ud558\uae30",
        "title": "\ub85c\uadf8\uc778"
      },
      "signup": "\ud68c\uc6d0\uac00\uc785",
      "welcome": "\ud658\uc601\ud569\ub2c8\ub2e4"
    },
    "strategy": "override_wins"
  }
}
sort_keys — alphabetical sort
# sort# alphabetical# formatting

Sort locale JSON keys alphabetically

📥 입력
{
  "action": "sort_keys",
  "locales": {
    "en": {
      "apple": "A",
      "banana": "B",
      "mango": "M",
      "zebra": "Z"
    }
  }
}
📤 출력
{
  "action": "sort_keys",
  "ok": true,
  "result": {
    "locales_processed": 1,
    "sorted_locales": {
      "en": {
        "apple": "A",
        "banana": "B",
        "mango": "M",
        "zebra": "Z"
      }
    }
  }
}
report_coverage — translation completeness
# coverage# completeness# multilingual

Generate coverage percentage per locale vs base

📥 입력
{
  "action": "report_coverage",
  "base_locale": "en",
  "locales": {
    "en": {
      "login": "Login",
      "logout": "Logout",
      "signup": "Sign Up",
      "welcome": "Welcome"
    },
    "ja": {
      "login": "\u30ed\u30b0\u30a4\u30f3",
      "logout": "\u30ed\u30b0\u30a2\u30a6\u30c8",
      "signup": "\u30b5\u30a4\u30f3\u30a2\u30c3\u30d7",
      "welcome": "\u3088\u3046\u3053\u305d"
    },
    "ko": {
      "login": "\ub85c\uadf8\uc778",
      "welcome": "\ud658\uc601\ud569\ub2c8\ub2e4"
    }
  }
}
📤 출력
{
  "action": "report_coverage",
  "ok": true,
  "result": {
    "base_locale": "en",
    "coverage": {
      "ja": {
        "coverage_percent": 100.0,
        "missing": 0,
        "missing_keys": [],
        "translated": 4
      },
      "ko": {
        "coverage_percent": 50.0,
        "missing": 2,
        "missing_keys": [
          "logout",
          "signup"
        ],
        "translated": 2
      }
    },
    "overall_health": "partial",
    "total_base_keys": 4
  }
}
nested keys — dot notation
# nested# dot-notation# korean

Handle nested locale JSON with dot notation paths

📥 입력
{
  "action": "find_missing_keys",
  "base_locale": "en",
  "locales": {
    "en": {
      "footer": {
        "contact": "Contact"
      },
      "nav": {
        "about": "About",
        "home": "Home"
      }
    },
    "ko": {
      "nav": {
        "home": "\ud648"
      }
    }
  }
}
📤 출력
{
  "action": "find_missing_keys",
  "ok": true,
  "result": {
    "missing_by_locale": {
      "ko": [
        "nav.about",
        "footer.contact"
      ]
    },
    "total_base_keys": 3
  }
}
error — invalid locales
# error

Returns error when locales is not a valid object

📥 입력
{
  "action": "find_missing_keys",
  "locales": "not an object"
}
📤 출력
{
  "error": {
    "code": "INVALID_PARAM",
    "message": "Field \u0027locales\u0027 must be an object mapping locale names to translation JSONs"
  },
  "ok": false
}

모든 예시는 에이전트 API로도 조회 가능: /v1/agent/skills/b7f40a38-3147-4626-937e-1f9d4a1ff620/schema

리뷰 & 평점

아직 리뷰가 없습니다. 첫 번째 리뷰를 남겨보세요!

✍️ 리뷰 작성