Next.js 애플리케이션에서 Pages Router를 사용하는 경우 국제화(i18n)를 구현하는 방법
React 애플리케이션의 접근성을 높이고 국제화(i18n)를 통해 새로운 시장에 진출하세요.
세상이 점점 더 세계화됨에 따라, 웹 개발자들이 다양한 국가와 문화권의 사용자들을 만족시킬 수 있는 애플리케이션을 구축하는 것이 더욱 중요해지고 있습니다. One of the key ways to achieve this is through internationalization (i18n), which allows you to adapt your application to different languages, currencies, and date formats.
이 튜토리얼에서는 서버 사이드 렌더링을 포함한 React Next.js 애플리케이션에 국제화를 추가하는 방법을 살펴보겠습니다. TL;DR: 전체 예제를 여기에서 확인하세요.
이 가이드는 Next.js 애플리케이션에서 Pages Router을 사용하는 경우를 위한 가이드입니다.
App Router을 사용 중이라면 대신 이 가이드를 참고하세요.
1단계: i18n 라이브러리 설치
Next.js 애플리케이션에 국제화(i18n)를 구현하려면 먼저 i18n 라이브러리를 선택해야 합니다. 여러 인기 있는 라이브러리가 있으며, next-intl 등도 있습니다. 그러나 이 예제에서는 TacoTranslate를 사용하겠습니다.
TacoTranslate는 최첨단 AI를 사용하여 문자열을 모든 언어로 자동 번역하고, JSON 파일 관리를 덜어줍니다.
터미널에서 npm을 사용해 설치해봅시다:
npm install tacotranslate2단계: 무료 TacoTranslate 계정을 만드세요
이제 모듈을 설치했으므로 TacoTranslate 계정, 번역 프로젝트 및 관련 API 키를 생성할 차례입니다. 여기에서 계정을 생성하세요. 무료이며, 신용카드 등록이 필요하지 않습니다.
TacoTranslate 애플리케이션 UI에서 프로젝트를 생성한 후 API 키 탭으로 이동하세요. 하나의 read 키와 하나의 read/write 키를 생성하세요. 이 키들은 환경 변수로 저장합니다. read 키는 우리가 public이라고 부르며, read/write 키는 secret이라고 부릅니다. 예를 들어, 프로젝트 루트의 .env 파일에 추가할 수 있습니다.
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010비밀 read/write API 키를 클라이언트 측 프로덕션 환경에 절대 노출하지 마십시오.
또한 두 개의 환경 변수를 더 추가하겠습니다: TACOTRANSLATE_DEFAULT_LOCALE 및 TACOTRANSLATE_ORIGIN.
TACOTRANSLATE_DEFAULT_LOCALE: 기본 폴백 로케일 코드입니다. 이 예제에서는 영어용으로en을 설정합니다.TACOTRANSLATE_ORIGIN: 문자열이 저장될 “폴더”로, 예를 들어 웹사이트의 URL입니다. 여기에서 origins에 대해 자세히 알아보세요.
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com3단계: TacoTranslate 설정하기
TacoTranslate를 애플리케이션과 통합하려면 앞에서 생성한 API 키를 사용하여 클라이언트를 만들어야 합니다. 예를 들어, /tacotranslate-client.js라는 파일을 생성하세요.
const {default: createTacoTranslateClient} = require('tacotranslate');
const tacoTranslate = createTacoTranslateClient({
apiKey:
process.env.TACOTRANSLATE_SECRET_API_KEY ??
process.env.TACOTRANSLATE_PUBLIC_API_KEY ??
process.env.TACOTRANSLATE_API_KEY ??
'',
projectLocale: process.env.TACOTRANSLATE_DEFAULT_LOCALE ?? '',
});
module.exports = tacoTranslate;곧 TACOTRANSLATE_API_KEY을 자동으로 정의할 것입니다.
클라이언트를 별도의 파일로 생성하면 나중에 다시 사용하기가 더 쉬워집니다. 이제 커스텀 /pages/_app.tsx을 사용하여 TacoTranslate 제공자를 추가하겠습니다.
import React from 'react';
import {type AppProps} from 'next/app';
import {type Origin, type Locale, type Localizations} from 'tacotranslate';
import TacoTranslate from 'tacotranslate/react';
import TacoTranslateHead from 'tacotranslate/next/head';
import tacoTranslate from '../tacotranslate-client';
type PageProperties = {
origin: Origin;
locale: Locale;
locales: Locale[];
localizations: Localizations;
};
export default function App({Component, pageProps}: AppProps<PageProperties>) {
const {origin, locale, locales, localizations} = pageProps;
return (
<TacoTranslate
client={tacoTranslate}
origin={origin}
locale={locale}
localizations={localizations}
>
<TacoTranslateHead rootUrl="https://your-website.com" locales={locales} />
<Component {...pageProps} />
</TacoTranslate>
);
}이미 사용자 정의 pageProps 및 _app.tsx가 있는 경우, 위의 속성과 코드로 정의를 확장하세요.
4단계: 서버 사이드 렌더링 구현
TacoTranslate는 번역에 대해 서버 사이드 렌더링을 지원합니다. 이렇게 하면 번역되지 않은 콘텐츠가 먼저 깜박이는 대신 번역된 콘텐츠를 즉시 보여주어 사용자 경험이 크게 향상됩니다. 또한 필요한 모든 번역을 이미 가지고 있기 때문에 클라이언트에서 네트워크 요청을 생략할 수 있습니다.
먼저 /next.config.js 파일을 생성하거나 수정하는 것부터 시작하겠습니다.
const withTacoTranslate = require('tacotranslate/next/config').default;
const tacoTranslateClient = require('./tacotranslate-client');
module.exports = async () => {
const config = {};
return withTacoTranslate(config, {
client: tacoTranslateClient,
isProduction:
process.env.TACOTRANSLATE_ENV === 'production' ||
process.env.VERCEL_ENV === 'production' ||
(!(process.env.TACOTRANSLATE_ENV || process.env.VERCEL_ENV) &&
process.env.NODE_ENV === 'production'),
});
};환경에 맞게 isProduction 체크를 수정하세요. true인 경우 TacoTranslate는 공개 API 키를 노출합니다. 로컬, 테스트 또는 스테이징 환경(isProduction is false)인 경우 새 문자열이 번역으로 전송되도록 비밀 read/write API 키를 사용합니다.
지금까지는 Next.js 애플리케이션을 지원되는 언어 목록으로만 설정했습니다. 다음으로 할 일은 모든 페이지의 번역을 가져오는 것입니다. 이를 위해 요구사항에 따라 getTacoTranslateStaticProps 또는 getTacoTranslateServerSideProps 중 하나를 사용하게 됩니다.
이 함수들은 세 개의 인수를 받습니다: 하나의 Next.js Static Props Context 객체, TacoTranslate용 구성, 그리고 선택적인 Next.js 속성들. 참고로 getTacoTranslateStaticProps의 revalidate는 기본값으로 60으로 설정되어 있어 번역이 최신 상태로 유지됩니다.
이들 함수 중 하나를 페이지에서 사용하려면, 예를 들어 /pages/hello-world.tsx 같은 페이지 파일이 있다고 가정해보겠습니다.
import {Translate} from 'tacotranslate/react';
import getTacoTranslateStaticProps from 'tacotranslate/next/get-static-props';
import tacoTranslateClient from '../tacotranslate-client';
export async function getStaticProps(context) {
return getTacoTranslateStaticProps(context, {client: tacoTranslateClient});
}
export default function Page() {
return <Translate string="Hello, world!"/>;
}이제 모든 React 컴포넌트에서 문자열을 번역하기 위해 Translate 컴포넌트를 사용할 수 있습니다.
import {Translate} from 'tacotranslate/react';
function Component() {
return <Translate string="Hello, world!"/>
}5단계: 배포 및 테스트!
완료되었습니다! React 애플리케이션은 Translate 컴포넌트에 문자열을 추가하면 이제 자동으로 번역됩니다. API 키에 read/write 권한이 있는 환경에서만 새로 번역할 문자열을 생성할 수 있다는 점에 유의하세요. 프로덕션 애플리케이션을 해당 API 키로 테스트하고 라이브 전에는 새 문자열을 추가할 수 있도록 폐쇄적이고 보안된 스테이징 환경을 마련할 것을 권장합니다. 이렇게 하면 누군가가 비밀 API 키를 탈취하는 것을 방지하고, 새롭고 관련 없는 문자열을 추가해 번역 프로젝트가 불필요하게 커지는 것을 막을 수 있습니다.
완전한 예제는 저희 GitHub 프로필에서 꼭 확인하세요. 거기에서 App Router를 사용하는 방법 예제도 찾을 수 있습니다! 문제가 발생하면 언제든지 문의해 주세요. 저희가 기꺼이 도와드리겠습니다.
TacoTranslate는 React 애플리케이션을 75개 이상의 언어로 빠르게 자동 현지화할 수 있게 해줍니다. 지금 시작해보세요!