Skip to main content
Glama

i1n

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

npm license MCP

demo

코드 기반 로컬라이제이션. 번역 키를 푸시하고, 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 i1n

npm, 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가지 도구 제공:

도구

설명

i1n_status

프로젝트 상태, 플랜, 제한 및 활성 언어 확인

i1n_push

자동 diff 감지를 통해 로컬 번역 파일 푸시

i1n_pull

번역을 풀(pull)하고 타입 안전한 TypeScript 정의 생성

i1n_translate

AI를 사용하여 지정된 언어로 키 번역

i1n_add_language

자동 번역 옵션과 함께 새 언어 추가

i1n_extract_and_translate

코드에서 문자열을 추출하여 키로 푸시하고 모든 언어로 번역

i1n_search

이름이나 값으로 기존 번역 키 검색

최고의 워크플로우 — AI 에이전트에게 "이 컴포넌트를 다국어화해줘"라고 말하세요:

  1. 에이전트가 파일을 읽고 하드코딩된 문자열을 식별합니다.

  2. 추출된 문자열로 i1n_extract_and_translate를 호출합니다.

  3. i1n이 키를 푸시하고, 모든 활성 언어로 번역하며, 타입을 생성합니다.

  4. 에이전트가 t('key') 호출을 사용하여 컴포넌트를 다시 작성합니다.

60분 걸릴 작업을 30초 만에 완료합니다.


📁 지원되는 형식

형식

프레임워크

파일 예시

Nested JSON

i1next, next-intl, vue-i18n

en/common.json

Flat JSON

React Native, Generic

locales/en.json

ARB

Flutter / Dart

app_en.arb

YAML

Ruby on Rails

en.yml

Android XML

Native Android

strings.xml

Apple Strings

iOS / macOS

Localizable.strings

TypeScript

Type-safe JSON

locales/en.ts


🧩 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)을 생성합니다.

  1. Pull: i1n pull을 실행합니다. CLI가 locales/i1n.d.ts를 생성하고 tsconfig.json자동으로 업데이트하여 IDE가 즉시 인식하도록 합니다.

  2. 사용: 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

-
security - not tested
A
license - permissive license
-
quality - not tested

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