ts-intl
문서
Astro 공식 통합 지원|ts-intl-astro

모던 TypeScript를 위한 국제화 솔루션

무의존성 · 타입 안전성 · 프레임워크 무관

$
pnpm add@aaakul/ts-intl
export default {
  dashboard: {
    greeting: "안녕하세요, {name: string}님!",
    membership: "{role, select, admin {관리자} pro {프로 회원} other {일반 회원}}",
    cart: "{count, plural, =0 {장바구니가 비어 있습니다} other {장바구니 상품 #개}}",
    discount: "반짝 세일: <badge>전 품목 20% 할인</badge>",
    invoice: "결제 금액: {amount, number, currency}",
    delivery: "예상 도착: {time}",
  },
} as const;
실시간 미리보기

안녕하세요, 개발자님!

프로 회원
반짝 세일: 전 품목 20% 할인
장바구니 상품 3개결제 금액: ₩129,000
예상 도착: 2일 후

타입 안전성

번역 키, 네임스페이스 및 매개변수에 대한 TypeScript 타입 추론을 제공하며, 로케일 간 스키마 일관성을 검증합니다.

런타임 의존성 제로

TypeScript와 웹 표준 Intl API를 기반으로 제작되어 별도의 코드 생성 빌드 과정이 필요하지 않습니다. Minified + Gzipped: < 5 kB

ICU Message Format 지원

외부 파서 의존성 없이 복수형, 서수, 조건부 분기(select) 및 리치 텍스트 태그 보간을 지원합니다.

프레임워크 무관

Astro, Next.js, React, Vue, Svelte, Node.js, Bun 및 Cloudflare Workers 등 다양한 환경에서 원활히 동작합니다.

벤치마크

네트워크 전송 크기 벤치마크

초기 사전 렌더링 및 클라이언트 측 수화(Hydration) 과정에서 브라우저가 실제로 다운로드하는 모든 i18n 리소스의 네트워크 전송 크기를 측정합니다.

네트워크 전송 크기 (KB)

Playwright Headless Chromium · Real HTTP Transfer Size

paraglide미들웨어 분할
-91%36.3 KB
ts-intl로케일 분할 로딩
-86%57.8 KB
paraglide전체 번들링
-82%76.6 KB
i18nextHTTP 동적 로딩
-55%188.7 KB
ts-intl전체 번들링
-14%360.0 KB
i18next전체 번들링
Baseline420.4 KB
런타임 의존성 및 번들 크기 비교

i18next는 자체 파서 엔진과 플러그인 런타임을 포함하여 기본적인 오버헤드가 발생합니다. 반면 ts-intl은 외부 런타임 의존성이 전혀 없으며(코어 약 2 KB), 로케일 분할 모드에서는 현재 활성화된 언어의 딕셔너리 청크만 전송합니다.

컴파일 방식 vs 런타임 분할 방식

Paraglide는 각 메시지를 JS 함수로 컴파일하여 사용하지 않는 키를 트리쉐이킹합니다. ts-intl은 코드 생성이 필요 없는 런타임 라이브러리로서, 표준 동적 import를 활용해 여러 언어의 사전 데이터가 번들에 누적되는 것을 방지합니다.