작가:
    생성:2024-08-11마지막 업데이트:2026-08-30

    Intlayer로 Express backend 번역하기 | 국제화(i18n)

    express-intlayer는 Express 애플리케이션을 위한 강력한 국제화(i18n) 미들웨어로, 클라이언트의 선호도에 따라 로컬화된 응답을 제공하여 백엔드 서비스를 전 세계적으로 접근 가능하게 만듭니다.

    실질적인 사용 사례

    • 사용자 언어로 백엔드 오류 표시: 오류가 발생했을 때, 사용자의 모국어로 메시지를 표시하면 이해도를 높이고 좌절감을 줄일 수 있습니다. 이는 토스트나 모달과 같은 프론트엔드 구성 요소에 표시될 수 있는 동적 오류 메시지에 특히 유용합니다.

    • 다국어 콘텐츠 검색: 데이터베이스에서 콘텐츠를 가져오는 애플리케이션의 경우, 국제화는 이 콘텐츠를 여러 언어로 제공할 수 있도록 보장합니다. 이는 전자 상거래 사이트나 콘텐츠 관리 시스템과 같이 제품 설명, 기사 및 기타 콘텐츠를 사용자가 선호하는 언어로 표시해야 하는 플랫폼에 필수적입니다.
    • 다국어 이메일 전송: 거래 이메일, 마케팅 캠페인 또는 알림 등 수신자의 언어로 이메일을 보내면 참여도와 효과를 크게 높일 수 있습니다.

    • 다국어 이메일 전송: 트랜잭션 이메일, 마케팅 캠페인, 알림 등 어떤 경우든 수신자의 언어로 이메일을 전송하면 참여도와 효과를 크게 높일 수 있습니다.

    • 다국어 푸시 알림: 모바일 애플리케이션의 경우, 사용자가 선호하는 언어로 푸시 알림을 보내면 상호작용과 유지율을 높일 수 있습니다. 이러한 개인화된 접근은 알림을 더 관련성 있고 실행 가능하게 만듭니다.

    • 기타 커뮤니케이션: SMS 메시지, 시스템 알림 또는 사용자 인터페이스 업데이트와 같은 백엔드의 모든 형태의 커뮤니케이션은 사용자의 언어로 제공될 때 명확성을 보장하고 전반적인 사용자 경험을 향상시킵니다. 백엔드를 국제화함으로써 애플리케이션은 문화적 차이를 존중할 뿐만 아니라 글로벌 시장 요구에 더 잘 부합하게 되어 서비스를 전 세계적으로 확장하는 데 중요한 단계가 됩니다.

    백엔드를 국제화함으로써, 당신의 애플리케이션은 문화적 차이를 존중할 뿐만 아니라 글로벌 시장 수요에도 더 잘 맞춰지며, 이는 서비스를 전 세계적으로 확장하는 핵심 단계입니다.

    시작하기

    ide.intlayer.org

    See Application Template on GitHub.

    설치

    express-intlayer를 사용하려면 npm을 사용하여 패키지를 설치하십시오:

    bash
    npx intlayer init --interactive
    
    --interactive 플래그는 선택 사항입니다. AI 에이전트인 경우 intlayer-cli init를 사용하세요.
    이 명령은 환경을 감지하고 필요한 패키지를 설치합니다. 예를 들어:
    bash
    npm install intlayer express-intlayer
    

    설정

    프로젝트 루트에 intlayer.config.ts를 생성하여 국제화 설정을 구성하십시오:

    intlayer.config.ts
    import { Locales, type IntlayerConfig } from "intlayer";
    
    const config: IntlayerConfig = {
      internationalization: {
        locales: [
          Locales.ENGLISH,
          Locales.FRENCH,
          Locales.SPANISH_MEXICO,
          Locales.SPANISH_SPAIN,
        ],
        defaultLocale: Locales.ENGLISH,
      },
    };
    
    export default config;
    

    콘텐츠 선언하기

    번역을 저장하기 위해 콘텐츠 선언을 생성하고 관리하세요:

    src/index.content.ts
    import { t, type Dictionary } from "intlayer";
    
    const indexContent = {
      key: "index",
      content: {
        exampleOfContent: t({
          en: "Example of returned content in English",
          fr: "Exemple de contenu renvoyé en français",
          "es-ES": "Ejemplo de contenido devuelto en español (España)",
          "es-MX": "Ejemplo de contenido devuelto en español (México)",
        }),
      },
    } satisfies Dictionary;
    
    export default indexContent;
    
    콘텐츠 선언은 애플리케이션 내 어디에서나 정의할 수 있으며, contentDir 디렉토리(기본값은 ./src)에 포함되어야 합니다. 그리고 콘텐츠 선언 파일 확장자(기본값은 .content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml})와 일치해야 합니다.
    자세한 내용은 콘텐츠 선언 문서를 참조하세요.

    Express 애플리케이션 설정

    express-intlayer를 사용하도록 Express 애플리케이션을 설정하세요:

    src/index.ts
    import express, { type Express } from "express";
    import { intlayer, t, getDictionary, getIntlayer } from "express-intlayer";
    import dictionaryExample from "./index.content";
    
    const app: Express = express();
    
    // 국제화 요청 핸들러 로드
    app.use(intlayer());
    
    // 라우트
    app.get("/t_example", (_req, res) => {
      res.send(
        t({
          ko: "영어로 반환된 콘텐츠 예시",
          en: "Example of returned content in English",
          fr: "Exemple de contenu renvoyé en français",
          "es-ES": "Ejemplo de contenido devuelto en español (España)",
          "es-MX": "Ejemplo de contenido devuelto en español (México)",
        })
      );
    });
    
    app.get("/getIntlayer_example", (_req, res) => {
      res.send(getIntlayer("index").exampleOfContent);
    });
    
    app.get("/getDictionary_example", (_req, res) => {
      res.send(getDictionary(dictionaryExample).exampleOfContent);
    });
    
    // 서버 시작
    app.listen(3000, () => console.log(`Listening on port 3000`));
    

    호환성

    express-intlayer는 다음과 완벽하게 호환됩니다:

    • React 애플리케이션용 react-intlayer
    • Next.js 애플리케이션용 next-intlayer
    • Vite 애플리케이션용 vite-intlayer 다양한 환경(브라우저 및 API 요청 포함)에서 모든 국제화 솔루션과 원활하게 작동합니다. 미들웨어를 사용자 정의하여 헤더나 쿠키를 통해 로케일을 감지할 수 있습니다:

    또한 브라우저 및 API 요청을 포함한 다양한 환경에서 모든 국제화 솔루션과 seamlessly 작동합니다. 헤더 또는 쿠키를 통해 locale을 감지하도록 middleware를 사용자 지정할 수 있습니다:

    intlayer.config.ts
    import { Locales, type IntlayerConfig } from "intlayer";
    
    const config: IntlayerConfig = {
      // ... 기타 구성 옵션
      routing: {
        storage: [
          { type: "header", name: "my-locale-header" },
          { type: "cookie", name: "my-locale-cookie" },
        ],
      },
    };
    
    export default config;
    

    기본적으로 express-intlayerAccept-Language 헤더를 해석하여 클라이언트가 선호하는 언어를 결정합니다.

    구성 및 고급 주제에 대한 자세한 내용은 문서를 참조하세요.

    TypeScript 구성

    express-intlayer는 국제화 과정을 향상시키기 위해 TypeScript의 강력한 기능을 활용합니다. TypeScript의 정적 타이핑은 모든 번역 키가 포함되도록 보장하여 누락된 번역의 위험을 줄이고 유지보수성을 향상시킵니다.

    Autocompletion

    Translation error

    자동 생성된 타입들(기본적으로 ./types/intlayer.d.ts 위치)을 tsconfig.json 파일에 포함했는지 확인하세요.

    tsconfig.json
    {
      // ... 기존 TypeScript 설정
      "include": [
        // ... 기존 TypeScript 설정
        ".intlayer/**/*.ts", // 자동 생성된 타입 포함
      ],
    }
    

    VS 코드 확장

    Intlayer와 함께 개발 경험을 향상시키기 위해 공식 Intlayer VS 코드 확장을 설치할 수 있습니다.

    VS 코드 마켓플레이스에서 설치하기

    이 확장은 다음 기능을 제공합니다:

    • 번역 키에 대한 자동 완성.
    • 누락된 번역에 대한 실시간 오류 감지.
    • 번역된 내용의 인라인 미리보기.
    • 번역을 쉽게 생성하고 업데이트할 수 있는 빠른 작업.

    확장 사용 방법에 대한 자세한 내용은 Intlayer VS 코드 확장 문서를 참조하세요.

    Git 설정

    Intlayer가 생성하는 파일을 무시하는 것이 권장됩니다. 이렇게 하면 Git 저장소에 해당 파일을 커밋하지 않을 수 있습니다.

    이를 위해 .gitignore 파일에 다음 지침을 추가할 수 있습니다:

    .gitignore
    # Intlayer가 생성한 파일 무시
    .intlayer
    

    자주 묻는 질문

    전통적인 옵션은 네임스페이스별로 JSON 카탈로그를 로드하고 요청에 로케일을 저장하는 i18next-http-middlewarei18next입니다. 대안은 express-intlayer를 통한 Intlayer로, 프론트엔드와 공유되는 타입 정의 파일에 콘텐츠를 선언하고 요청별로 로케일을 확인하며 AI 번역과 CMS를 추가합니다.

    백엔드를 국제화해야 하는 이유는 사용자가 읽는 텍스트의 상당 부분이 프론트엔드를 거치지 않기 때문입니다: API 오류 메시지, 트랜잭션 이메일, 푸시 알림, SMS 및 PDF 내보내기 등이 여기에 해당합니다. 이러한 텍스트는 세션이 아닌 요청별로 수신자의 언어가 확인되어야 합니다.

    왜 Intlayer인가를 참조하세요.

    매우 적습니다. 사전은 사전에 컴파일되며 선언한 로케일만 포함되므로 부팅 시 카탈로그 로딩이나 요청 경로에서의 파일 읽기가 발생하지 않습니다. 이는 번들 크기가 콜드 스타트 시간을 좌우하는 서버리스 및 엣지 배포 환경에서 특히 중요합니다. 번들 최적화를 참조하세요.

    네, 두 가지 방법이 있습니다. i18next 마이그레이션 가이드를 따라 점진적으로 이전할 수 있습니다. 또는 현재 API를 완전히 유지할 수도 있습니다: 호환 어댑터(compat adapters)i18next와 완전히 동일한 API를 노출하면서 Intlayer 사전에서 데이터를 제공하므로, import 구문만 변경하고 핸들러 코드는 그대로 유지할 수 있습니다.

    네. sync JSON 플러그인/messages/{locale}/{namespace}.json 파일을 단일 진실 공급원(source of truth)으로 유지하면서 양방향으로 Intlayer 사전을 생성합니다. sync PO 플러그인은 gettext 카탈로그에 대해 동일한 작업을 수행하며, 로케일별 파일을 통해 로케일을 한 파일에 모으는 대신 언어별로 콘텐츠를 분할할 수도 있습니다.

    아닙니다. npx intlayer extract를 실행하면 Intlayer가 소스 파일을 읽고 사용자 대면 문자열을 추출하여 각 컴포넌트 옆에 .content 파일을 생성하므로 카탈로그에 일일이 복사할 필요 없이 diff만 검토하면 됩니다. extract 명령을 참조하세요.

    동일한 프로젝트의 프론트엔드 측에서는 Intlayer 컴파일러가 빌드 타임에 JSX, TSX, Vue 또는 Svelte 소스에서 사전을 생성하므로 앱의 두 영역이 수동 키 관리 없이 단일 콘텐츠 레이어를 공유할 수 있습니다.

    5가지 도구가 모두 선택 사항으로 제공됩니다:

    • VS Code 확장 프로그램: useIntlayer 키에서 이를 선언한 콘텐츠 파일로 바로 이동하고, 컴포넌트에서 콘텐츠를 추출하며, 명령 팔레트나 전용 Intlayer 탭에서 build, fill, test, push, pull을 실행할 수 있습니다.
    • LSP 서버: LSP를 지원하는 모든 에디터에서 정의로 이동, 모든 참조 찾기, 번역 값 마우스 오버 미리보기, 키 및 필드 자동 완성, 선언되지 않은 키에 대한 경고 등 동일한 기능을 제공합니다. 또한 i18next, react-i18next, next-intl, use-intl 호출도 해석하므로 마이그레이션 시 유용합니다.
    • MCP 서버: Cursor, VS Code, Claude Desktop, Claude Code, ChatGPT에 Intlayer 문서와 CLI를 노출하여 AI 어시스턴트가 최신 문서를 기반으로 정확히 답변하고 intlayer fill 등의 명령을 직접 실행할 수 있게 합니다.
    • Agent Skills: intlayer-config, intlayer-cli, intlayer-content 및 각 프레임워크 전용 스킬을 통해 AI 에이전트에게 라우팅 설정과 콘텐츠 노드 타입을 학습시킵니다.
    • ESLint 플러그인: no-raw-text 규칙으로 하드코딩된 문자열을 표시하고, 정적 사전 키 및 사용되지 않는 콘텐츠에 대한 추가 규칙을 제공합니다.