Next.js 국제화(i18n) 튜토리얼
새 Next.js 프로젝트 만들기
먼저 create-next-app CLI 도구를 사용하여 새 Next.js 프로젝트를 생성해 보겠습니다.
npx create-next-app nextjs-i18n-example
React Intl 의존성 추가
앞에서 언급했듯이 Next.js는 기존 i18n 라이브러리( react-intl , lingui , next-intl 및 이와 유사한 라이브러리)와 잘 작동합니다. 이 자습서에서는
react-intl
를 사용합니다.cd nextjs-i18n-example
npm i react-intl
국제화된 라우팅을 위한 구성 추가
번역과 라우팅은 국제화의 두 가지 주요 기둥입니다. 이전에 추가된
react-intl
라이브러리가 번역 및 서식 지정을 처리합니다. 라우팅과 관련하여 Next.js에는 built-in support이 있습니다. 이 기본 제공 지원은 하위 경로 라우팅과 도메인 라우팅이라는 두 가지 옵션을 제공합니다. 이 튜토리얼에서는 덜 복잡하고 일반 웹 사이트에 더 일반적이므로 하위 경로 라우팅을 사용합니다. 이를 위해 next.config.js
구성으로 i18n
파일을 업데이트해 보겠습니다./** @type {import('next').NextConfig} */
const nextConfig = {
reactStrictMode: true,
i18n: {
// The locales you want to support in your app
locales: ["en", "fr"],
// The default locale you want to be used when visiting a non-locale prefixed path e.g. `/hello`
defaultLocale: "en",
},
};
module.exports = nextConfig;
참고: 국제화된 라우팅은 Next.js 10부터 사용할 수 있습니다.
현지화 파일 만들기
다음으로 중요한 것은 현지화 파일을 추가하는 것입니다. 이를 위해
lang
디렉토리를 생성해 보겠습니다. 그 안에 en.json
및 fr.json
두 개의 JSON 파일을 추가합니다. 이 파일은 각각 영어와 프랑스어에 대한 번역을 보관할 것입니다. 아래에서 언급된 파일을 추가한 후 프로젝트 구조를 볼 수 있습니다.nextjs-i18n-example
|-- lang
| |-- en.json
| |-- fr.json
|-- pages
| |-- api
| |-- _app.js
| |-- index.js
| |-- ...
|-- public
|-- ...
|-- package.json
|-- package-lock.json
그런 다음 나중에 사용할 메시지로 현지화 파일을 채웁니다.
en.json
파일:{
"page.home.head.title": "Next.js i18n example",
"page.home.head.meta.description": "Next.js i18n example - English",
"page.home.title": "Welcome to <b>Next.js i18n tutorial</b>",
"page.home.description": "You are currently viewing the homepage in English 🚀"
}
fr.json
파일:{
"page.home.head.title": "Next.js i18n exemple",
"page.home.head.meta.description": "Next.js i18n exemple - Français",
"page.home.title": "Bienvenue à <b>Next.js i18n didacticiel</b>",
"page.home.description": "Vous consultez actuellement la page d'accueil en Français 🚀"
}
Next.js 프로젝트에서 react-intl 구성
국제화된 라우팅 및 현지화 파일은 작업의 첫 번째 부분에 불과합니다. 두 번째 부분은
react-intl
라이브러리를 설정하는 것입니다. 아래에서 _app.js
파일에서 변경된 사항을 확인할 수 있습니다.import { useRouter } from "next/router";
import { IntlProvider } from "react-intl";
import en from "../lang/en.json";
import fr from "../lang/fr.json";
import "../styles/globals.css";
const messages = {
en,
fr,
};
function MyApp({ Component, pageProps }) {
const { locale } = useRouter();
return (
<IntlProvider locale={locale} messages={messages[locale]}>
<Component {...pageProps} />
</IntlProvider>
);
}
export default MyApp;
i18n에 맞게 페이지 조정
우리는 대부분의 작업을 수행했습니다. 마지막 단계는 이 모든 것을 통합하는 것입니다. 따라서 페이지 디렉토리 아래의
index.js
파일을 업데이트할 예정입니다. 아래에서 현지화 메시지에 액세스하기 위한 명령형 및 선언형의 두 가지 접근 방식을 찾을 수 있습니다. 우리는 이미 these two ways of usage , formatting options 을 다루었으며 another post 에서도 유사합니다.index.js
파일:import Head from "next/head";
import Link from "next/link";
import { useRouter } from "next/router";
import { FormattedMessage, useIntl } from "react-intl";
import styles from "../styles/Home.module.css";
export default function Home(props) {
const { locales } = useRouter();
const intl = useIntl();
const title = intl.formatMessage({ id: "page.home.head.title" });
const description = intl.formatMessage({ id: "page.home.head.meta.description" });
return (
<div className={styles.container}>
<Head>
<title>{title}</title>
<meta name="description" content={description} />
<link rel="icon" href="/favicon.ico" />
{/* Add hreflang links */}
<link rel="alternate" href="http://example.com" hrefLang="x-default" />
<link rel="alternate" href="http://example.com" hrefLang="en" />
<link rel="alternate" href="http://example.com/fr" hrefLang="fr" />
</Head>
<header>
<div className={styles.languages}>
{[...locales].sort().map((locale) => (
<Link key={locale} href="/" locale={locale}>
{locale}
</Link>
))}
</div>
</header>
<main className={styles.main}>
<h1 className={styles.title}>
<FormattedMessage id="page.home.title" values={{ b: (chunks) => <b>{chunks}</b> }} />
</h1>
<p className={styles.description}>
<FormattedMessage id="page.home.description" />
</p>
</main>
</div>
);
}
축하합니다! 🎉
Next.js 프로젝트에서 국제화를 성공적으로 설정했습니다.
자세한 내용과 예는 original post 에서 찾을 수 있습니다.
이 문서에 사용된 모든 코드 샘플은 GitHub repo에서 사용할 수 있습니다.
Reference
이 문제에 관하여(Next.js 국제화(i18n) 튜토리얼), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/localizely/nextjs-internationalization-i18n-tutorial-4lg1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)