i1n
i1n
모든 언어로 제공되는 앱. 단 하나의 명령어.

코드 기반 로컬라이제이션. 번역 키를 푸시하고, AI가 182개 언어로 번역하며, 타입 안전한 TypeScript 정의를 풀(pull)합니다. 개발자, AI 에이전트 및 제품 팀을 위해 구축되었습니다.
평생 무료 · 신용카드 불필요 · i1n.ai
왜 i1n인가요?
기존의 i18n 방식은 수십 개의 JSON 파일, 타입 안전성 부재, 반복적인 복사-붙여넣기 작업, 그리고 새벽 2시에 발생하는 배포 오류를 의미합니다. 기존 도구들은 월 $120 이상의 비용을 청구하며 브라우저 기반 워크플로우를 요구합니다.
i1n은 다릅니다:
단 하나의 명령어 —
i1n push --translate es,fr,ja로 완료타입 안전성 — IDE 자동 완성을 완벽하게 지원하는
i1n.d.ts자동 생성AI 네이티브 — Cursor, Claude Code, Windsurf를 위한 MCP 서버. 에이전트가 알아서 i18n을 처리합니다
제로 마이그레이션 — 브리지 모드를 통해 기존 i18next/next-intl/vue-i18n을 그대로 사용 가능
6배 저렴한 비용 — 무료 티어 포함. Pro 버전은 월 $19로 Lokalise의 월 $120 대비 저렴
📦 설치
# To use the CLI (global)
npm install -g i1n
# To use the SDK + types (in your app)
npm install i1n
# Local CLI usage (optional)
npm install -D i1nnpm, pnpm, yarn, bun을 지원합니다.
🏁 빠른 시작
# 1. Initialize (auth + auto-detect setup)
i1n init
# 2. Push your translation keys
i1n push
# 3. Pull translations + auto-generated TypeScript types
i1n pull✨ 주요 기능 및 명령어
🛠️ i1n init
워크스페이스를 준비하는 대화형 설정.
API 키를 통한 인증.
처음이신가요? 키가 없는 경우 CLI가 시작 방법을 명확하게 안내합니다.
프레임워크 자동 감지 (Next.js, Vite, Expo, Flutter, Rails 등).
i1n.config.json에 설정 저장 (자동으로.gitignore에 추가됨).AI 오케스트레이션: AI 코딩 도구를 위한 규칙을 선택적으로 설정합니다.
⬆️ i1n push
로컬 번역을 i1n으로 동기화합니다.
새로운 키와 소스 변경 사항을 감지합니다.
스마트 번역: 진행 전 비용 추정치와 함께 누락된 키 번역을 제안합니다.
효율적인 캐싱 계층 — 반복되는 번역은 새로운 번역보다 훨씬 저렴합니다.
⬇️ i1n pull
번역을 다운로드하고 타입 안전한 ID를 생성합니다.
설정된 형식에 따라 로컬 로케일 파일을 업데이트합니다.
IDE 자동 완성을 위해
i1n.d.ts를 생성합니다.
📊 i1n limits
실시간 사용량 추적.
현재 플랜과 크레딧 사용량을 확인합니다.
활성 언어 슬롯과 사용 가능한 용량을 모니터링합니다.
🧠 i1n setup-ai
IDE를 로컬라이제이션 전문가로 변신시킵니다.
Cursor (
.mdc), Claude Code (CLAUDE.md), Windsurf 등을 위한 프로젝트별 규칙을 생성합니다.AI 에이전트가 귀하의 명명 규칙, 파일 구조 및 브랜드 보이스를 따르도록 보장합니다.
🔌 i1n mcp
AI 코딩 어시스턴트를 위한 MCP 서버.
Model Context Protocol 서버를 시작하여 Cursor, Claude Code, Windsurf 및 기타 AI 어시스턴트가 IDE에서 직접 i1n 명령을 실행할 수 있도록 합니다.
# Add to Claude Code
claude mcp add i1n -- npx i1n mcp
# Or add to .mcp.json / cursor config{
"mcpServers": {
"i1n": {
"command": "npx",
"args": ["i1n", "mcp"]
}
}
}7가지 도구 제공:
도구 | 설명 |
| 프로젝트 상태, 플랜, 제한 및 활성 언어 확인 |
| 자동 diff 감지를 통해 로컬 번역 파일 푸시 |
| 번역을 풀(pull)하고 타입 안전한 TypeScript 정의 생성 |
| AI를 사용하여 지정된 언어로 키 번역 |
| 자동 번역 옵션과 함께 새 언어 추가 |
| 코드에서 문자열을 추출하여 키로 푸시하고 모든 언어로 번역 |
| 이름이나 값으로 기존 번역 키 검색 |
최고의 워크플로우 — AI 에이전트에게 "이 컴포넌트를 다국어화해줘"라고 말하세요:
에이전트가 파일을 읽고 하드코딩된 문자열을 식별합니다.
추출된 문자열로
i1n_extract_and_translate를 호출합니다.i1n이 키를 푸시하고, 모든 활성 언어로 번역하며, 타입을 생성합니다.
에이전트가
t('key')호출을 사용하여 컴포넌트를 다시 작성합니다.
60분 걸릴 작업을 30초 만에 완료합니다.
📁 지원되는 형식
형식 | 프레임워크 | 파일 예시 |
Nested JSON | i1next, next-intl, vue-i18n |
|
Flat JSON | React Native, Generic |
|
ARB | Flutter / Dart |
|
YAML | Ruby on Rails |
|
Android XML | Native Android |
|
Apple Strings | iOS / macOS |
|
TypeScript | Type-safe JSON |
|
🧩 SDK 사용법
i1n 패키지에는 웹 및 모바일 JS/TS 프로젝트를 위한 런타임 SDK가 포함되어 있습니다. 두 가지 방식으로 사용할 수 있습니다:
독립형 모드 — 기존 i18n 라이브러리 대체
i1n 네이티브 엔진을 직접 사용합니다. 외부 의존성이 필요 없습니다.
import { init, t, setLocale } from "i1n";
// Load your translation resources
init({
locale: "en_us",
resources: {
en_us: {
auth: { login: "Login", title: "Welcome back, {user}" },
items_one: "One item",
items_other: "{count} items",
},
es_es: {
auth: { login: "Entrar", title: "Bienvenido de nuevo, {user}" },
items_one: "Un elemento",
items_other: "{count} elementos",
},
},
});
// Autocomplete and type-safety work out of the box after 'i1n pull'
t("auth.login"); // "Login"
// Support for default values (useful during development)
t("new.key", { defaultValue: "Coming soon..." }); // "Coming soon..."
// Variables & Plurals
t("auth.title", { user: "Fran" }); // "Welcome back, Fran"
t("items", { count: 5 }); // "5 items"
// Switch language at runtime
setLocale("es_es");
t("auth.login"); // "Entrar"키 해석은 중첩 및 평면 구조 모두에서 자동으로 작동합니다. 프로젝트가 선호하는 형식을 사용하세요.
브리지 모드 — 기존 라이브러리 유지 및 타입 안전성 추가
이미 i1next, vue-i18n 또는 react-intl을 사용 중이신가요? 한 줄의 코드로 i1n에 연결하여 전체 자동 완성을 지원받으세요.
import i18next from "i18next";
import { registerI1n, t } from "i1n";
// Set up i18next as usual
await i18next.init({
lng: "en",
resources: {
/* ... */
},
});
// Connect to i1n — one line
registerI1n((key, params) => i18next.t(key, params));
// Now t() uses i18next under the hood, but with strict type checking
t("common.greeting", { name: "World" }); // Powered by i18next, typed by i1n모든 라이브러리와 호환됩니다:
vue-i18n:
registerI1n((key, params) => i18n.global.t(key, params))react-intl:
registerI1n((key, params) => intl.formatMessage({ id: key }, params))Custom:
registerI1n((key) => myLookup(key))
복수형 처리
_zero, _one, _other 접미사를 사용하여 복수형 변형을 정의합니다:
// In your translation files:
// "items_zero": "No items"
// "items_one": "One item"
// "items_other": "{count} items"
t("items", { count: 0 }); // "No items"
t("items", { count: 1 }); // "One item"
t("items", { count: 5 }); // "5 items"보간(Interpolation)
세 가지 구문이 범용적으로 지원됩니다: {var}, {{var}}, %{var}
JavaScript (TypeScript 미사용)
SDK는 일반 JS에서도 작동합니다. 단지 자동 완성이 지원되지 않을 뿐입니다:
import { init, t } from "i1n";
init({ locale: "en_us", resources: { en_us: { greeting: "Hello {name}" } } });
t("greeting", { name: "World" }); // "Hello World"⚛️ React / Preact 통합
"플러그 앤 플레이" 경험을 위해 이 미니멀한 프로바이더 패턴을 사용하세요.
import { createContext, useContext, useState, useEffect } from "react";
import { init, t, getLocale, setLocale as sdkSetLocale } from "i1n";
// 1. Initialize with wordings
// (In a real app, you'd probably import these from your locales folder)
init({
locale: "en_us",
resources: {
/* ... */
},
});
const STORAGE_KEY = "i1n-locale";
const I1nContext = createContext({
locale: "en_us",
setLocale: (l: string) => {},
});
// 2. Persistent Provider
export function I1nProvider({ children, defaultLocale = "en_us" }) {
const [locale, setLocaleState] = useState(() => {
return localStorage.getItem(STORAGE_KEY) || defaultLocale;
});
// Keep SDK in sync
useEffect(() => {
sdkSetLocale(locale);
}, [locale]);
const setLocale = (newLocale: string) => {
localStorage.setItem(STORAGE_KEY, newLocale);
setLocaleState(newLocale);
};
return (
<I1nContext.Provider value={{ locale, setLocale }}>
{children}
</I1nContext.Provider>
);
}
// 3. Simple Hook
export const useI1n = () => ({ t, ...useContext(I1nContext) });사용법:
const { t, setLocale } = useI1n();
return (
<div>
<h1>{t("auth.title", { user: "Fran" })}</h1>
<button onClick={() => setLocale("es_es")}>Español</button>
</div>
);비 JS 플랫폼
Flutter, Android 및 iOS 프로젝트는 SDK를 사용하지 않습니다. i1n pull로 생성된 번역 파일(.arb, .xml, .strings)을 각 플랫폼의 네이티브 로컬라이제이션 시스템과 함께 사용합니다.
🛡️ 개발자 경험
🔒 개인정보 보호 및 보안
자동 무시:
i1n init은 민감한 설정 파일을 자동으로.gitignore에 추가합니다.비밀 관리: API 키는 로컬에만 저장되며 버전 관리 시스템에 커밋되지 않습니다.
암호화된 전송: 모든 동기화 작업은 안전한 HTTPS 채널을 통해 이루어집니다.
🔒 제로 설정 타입 안전성 (TypeScript)
CLI는 프로젝트의 특정 키로 i1n 패키지를 자동으로 보강하는 경량 선언 파일(i1n.d.ts)을 생성합니다.
Pull:
i1n pull을 실행합니다. CLI가locales/i1n.d.ts를 생성하고tsconfig.json을 자동으로 업데이트하여 IDE가 즉시 인식하도록 합니다.사용:
i1n에서t를 가져와 전체 자동 완성 및 컴파일 타임 검사를 받으세요. 수동 경로 매핑이 필요 없습니다.
import { t } from "i1n";
// Full autocomplete & compile-time checking
t("auth.login.title");
// ERROR: Argument of type '"auth.login.titlse"' is not assignable...
t("auth.login.titlse");💳 요금제
플랜 | 가격 | 키 | 언어 | 월간 AI 번역량 |
Starter | $0 | 600 | 2 | 2,000 |
Pro | 월 $19 | 5,000 | 5 | 10,000 |
Business | 월 $49 | 15,000 | 12 | 20,000 |
Enterprise | 맞춤형 | 맞춤형 | 182 | 맞춤형 |
CLI, SDK 및 MCP 서버는 모든 플랜에서 무료입니다. Starter 플랜은 신용카드가 필요 없습니다.
Pro 평생 이용권 $99부터 — 선착순 200명 한정.
📄 라이선스
MIT — © 2026 i1n.ai
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Pakvothe/i1n-cli'
If you have feedback or need assistance with the MCP directory API, please join our Discord server