이 페이지와 원하는 AI 어시스턴트를 사용하여 문서를 요약합니다
이 문서는 오래되었습니다. 기본 버전이 다음 날짜에 업데이트되었습니다: 2026년 4월 3일.
영문 문서로 이동버전 기록
- "routing.domains 구성을 통해 도메인 기반 로케일 라우팅을 추가했습니다."v8.5.02026. 4. 2.
이 페이지의 콘텐츠는 AI를 사용하여 번역되었습니다.
영어 원본 내용의 최신 버전을 보기If you have an idea for improving this documentation, please feel free to contribute by submitting a pull request on GitHub.
GitHub link to the documentationCopy doc Markdown to clipboard
사용자 정의 도메인
Intlayer는 도메인 기반 로케일 라우팅을 지원하므로 전용 호스트 이름에서 특정 로케일을 제공할 수 있습니다. 예를 들어, 중국 방문자를 intlayer.org/zh 대신 intlayer.zh로 안내할 수 있습니다.
작동 방식
routing의 domains 맵은 각 로케일을 호스트 이름과 연결합니다. Intlayer는 이 맵을 다음 두 곳에서 사용합니다.
- URL 생성 (
getLocalizedUrl): 대상 로케일이 현재 페이지와 다른 도메인에 있는 경우 절대 URL이 반환됩니다(예:https://intlayer.zh/about). 두 도메인이 일치하면 상대 URL이 반환됩니다(예:/fr/about). - 서버 프록시 (Next.js & Vite): 들어오는 요청은 도달한 도메인에 따라 리디렉션되거나 다시 작성됩니다.
독점 도메인 vs 공유 도메인
주요 차이점은 독점성입니다.
- 독점 도메인 - 하나의 로케일만 해당 호스트 이름에 매핑됩니다(예:
zh → intlayer.zh). 도메인 자체가 로케일을 식별하므로 경로에 로케일 접두사가 추가되지 않습니다.https://intlayer.zh/about은 중국어 콘텐츠를 제공합니다. - 공유 도메인 - 여러 로케일이 동일한 호스트 이름에 매핑됩니다(예:
en과fr모두intlayer.org에 매핑됨). 일반적인 접두사 기반 라우팅이 적용됩니다.intlayer.org/fr/about은 프랑스어 콘텐츠를 제공합니다.
구성
코드를 클립보드에 복사
import { Locales, type IntlayerConfig } from "intlayer";const config: IntlayerConfig = { internationalization: { locales: [ Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH, Locales.CHINESE, ], defaultLocale: Locales.ENGLISH, }, routing: { mode: "prefix-no-default", domains: { // 공유 도메인 - en 및 fr은 intlayer.org에서 접두사 라우팅을 사용합니다. en: "intlayer.org", // 독점 도메인 - zh는 자체 호스트 이름을 가지며 /zh/ 접두사가 필요하지 않습니다. zh: "intlayer.zh", }, },};export default config;domains에 나열되지 않은 로케일은 도메인 재정의 없이 표준 접두사 라우팅을 계속 사용합니다.
URL 생성
getLocalizedUrl은 호출 컨텍스트에 따라 올바른 URL 유형을 자동으로 생성합니다.
동일 도메인 로케일 (상대 URL)
코드를 클립보드에 복사
// 현재 페이지: intlayer.org/aboutgetLocalizedUrl("/about", "fr", { currentDomain: "intlayer.org" });// → "/fr/about"getLocalizedUrl("/about", "en", { currentDomain: "intlayer.org" });// → "/about" (기본 로케일, 접두사 없음)도메인 간 로케일 (절대 URL)
코드를 클립보드에 복사
// 현재 페이지: intlayer.org/aboutgetLocalizedUrl("/about", "zh", { currentDomain: "intlayer.org" });// → "https://intlayer.zh/about" (독점 도메인, /zh/ 접두사 없음)로케일 자체 도메인에서 제공
코드를 클립보드에 복사
// 현재 페이지: intlayer.zh/aboutgetLocalizedUrl("/about", "zh", { currentDomain: "intlayer.zh" });// → "/about" (이미 올바른 도메인에 있음 - 상대 URL)getLocalizedUrl("/about", "fr", { currentDomain: "intlayer.zh" });// → "https://intlayer.org/fr/about" (intlayer.org로 다시 연결되는 도메인 간 링크)현재 도메인 자동 감지
currentDomain은 선택 사항입니다. 생략하면 getLocalizedUrl은 다음 순서로 이를 해결합니다.
- 절대 입력 URL의 호스트 이름(예:
https://intlayer.org/about→intlayer.org). - 브라우저 환경의
window.location.hostname. - 둘 다 사용할 수 없는 경우(명시적 옵션이 없는 SSR), 동일 도메인 로케일에 대해 상대 URL이 반환되고 절대 URL은 생성되지 않습니다. 이것이 안전한 폴백입니다.
코드를 클립보드에 복사
// 브라우저 - window.location.hostname === 'intlayer.org'getLocalizedUrl("/about", "zh");// → "https://intlayer.zh/about" (window에서 자동 감지)// 절대 URL에서 - 도메인이 자동으로 감지됨getLocalizedUrl("https://intlayer.org/about", "zh");// → "https://intlayer.zh/about"도메인이 있는 getMultilingualUrls
getMultilingualUrls는 모든 로케일에 대해 getLocalizedUrl을 호출하므로 호출자의 도메인에 따라 상대 URL과 절대 URL이 혼합되어 생성됩니다.
코드를 클립보드에 복사
// currentDomain: 'intlayer.org'getMultilingualUrls("/about", { currentDomain: "intlayer.org" });// {// en: "/about",// fr: "/fr/about",// es: "/es/about",// zh: "https://intlayer.zh/about",// }이러한 절대 URL은 SEO를 위한 <link rel="alternate" hreflang="..."> 태그에서 바로 사용할 수 있습니다.
프록시 동작
Next.js
intlayerProxy 미들웨어는 도메인 라우팅을 자동으로 처리합니다. middleware.ts에 추가하세요.
코드를 클립보드에 복사
export { intlayerProxy as default } from "next-intlayer/proxy";export const config = { matcher: "/((?!api|static|assets|robots|sitemap|.*\\..*|_next).*)",};리디렉션 - 요청이 특정 로케일 접두사에 대해 잘못된 도메인에 도달한 경우:
코드를 클립보드에 복사
GET intlayer.org/zh/about→ 301 https://intlayer.zh/about다시 쓰기 (Rewrite) - 요청이 접두사 없이 로케일의 독점 도메인에 도달한 경우:
코드를 클립보드에 복사
GET intlayer.zh/about→ /zh/about으로 다시 쓰기 (Next.js 내부 라우팅 전용, URL은 깔끔하게 유지됨)Vite
intlayerProxy Vite 플러그인은 개발 중에 동일한 로직을 적용합니다.
코드를 클립보드에 복사
import { defineConfig } from "vite";import { intlayerProxy } from "vite-intlayer";export default defineConfig({ plugins: [intlayerProxy()],});참고: 로컬 개발에서는 일반적으로localhost에 있으므로 도메인 간 리디렉션은 다른 로컬 포트가 아닌 실제 도메인을 가리킵니다. 로컬에서 다중 도메인 라우팅을 테스트해야 하는 경우 호스트 파일 재정의(예:127.0.0.1 intlayer.zh) 또는 역방향 프록시를 사용하세요.
로케일 전환기 (Locale Switcher)
next-intlayer의 useLocale 후크는 도메인 인식 탐색을 자동으로 처리합니다. 사용자가 다른 도메인의 로케일로 전환하면 차세대 라우터가 원본(origins)을 가로질러갈 수 없기 때문에 후크는 클라이언트 측 라우터 푸시 대신 전체 페이지 탐색(window.location.href)을 수행합니다.
코드를 클립보드에 복사
"use client";import { useLocale } from "next-intlayer";export const LocaleSwitcher = () => { const { availableLocales, locale, setLocale } = useLocale(); return ( <ul> {availableLocales.map((localeEl) => ( <li key={localeEl}> <button onClick={() => setLocale(localeEl)} aria-current={localeEl === locale ? "true" : undefined} > {l.toUpperCase()} </button> </li> ))} </ul> );};추가 구성이 필요하지 않습니다. useLocale은 내부적으로 window.location.hostname을 감지하고 router.replace(동일 도메인)와 window.location.href(도메인 간) 중에서 결정합니다.
SEO: hreflang 대체 링크
도메인 기반 라우팅은 일반적으로 검색 엔진에 각 언어에 대해 인덱싱할 URL을 알리기 위해 hreflang과 함께 사용됩니다. getMultilingualUrls를 사용하여 대체 URL의 전체 세트를 생성합니다.
코드를 클립보드에 복사
import { getMultilingualUrls } from "intlayer";import type { Metadata } from "next";export const generateMetadata = (): Metadata => { const alternates = getMultilingualUrls("/", { currentDomain: process.env.NEXT_PUBLIC_DOMAIN, // 예: "intlayer.org" }); return { alternates: { languages: alternates, }, };};이것은 다음을 생성합니다.
코드를 클립보드에 복사
<link rel="alternate" hreflang="en" href="https://intlayer.org/" /><link rel="alternate" hreflang="fr" href="https://intlayer.org/fr/" /><link rel="alternate" hreflang="es" href="https://intlayer.org/es/" /><link rel="alternate" hreflang="zh" href="https://intlayer.zh/" />핵심 유틸리티
테이블을 모달로 열어 모든 데이터를 명확하게 확인
| 유틸리티 | 설명 |
|---|---|
getLocalizedUrl(url, locale, { currentDomain }) | 대상 로케일이 현재 도메인인지 여부에 따라 상대 또는 절대 URL을 반환합니다. |
getMultilingualUrls(url, { currentDomain }) | 필요한 경우 상대 및 절대 URL을 혼합하여 로케일 키 로컬라이즈된 URL 맵을 반환합니다. |
getPrefix(locale, { domains }) | 독점 도메인 로케일에는 빈 접두사를 반환하고, 그렇지 않으면 일반 접두사를 반환합니다. |