현대 웹 애플리케이션에서 다국어 지원은 필수적입니다. 사용자 경험을 향상시키고 더 많은 사용자에게 다가갈 수 있는 기회를 제공합니다. 특히 글로벌 시장에서 경쟁력을 유지하기 위해서는 로컬라이제이션(Localization)과 국제화(Internationalization)의 중요성을 인식해야 합니다. 이번 글에서는 Next.js의 i18n 기능을 이용하여 어떻게 다국어 지원을 구현할 수 있는지 자세히 살펴보겠습니다.
1. 국제화(Internationalization)와 로컬라이제이션(Localization)의 이해
국제화(Internationalization, i18n)는 소프트웨어가 다양한 언어와 지역을 지원할 수 있도록 설계하는 과정입니다. 반면에, 로컬라이제이션(Localization, l10n)은 특정 언어 및 문화에 맞게 소프트웨어를 조정하는 과정을 의미합니다. 예를 들어, 프랑스어로 된 버전의 애플리케이션은 프랑스의 문화적 맥락과 어휘를 반영해야 하며, 이는 로컬라이제이션입니다.
2. Next.js의 기본 개념
Next.js는 React 기반의 프레임워크로, 서버 사이드 렌더링(SSR)과 정적 웹 사이트 생성(SSG)을 쉽게 구현할 수 있도록 돕습니다. 또한 Next.js는 파일 기반 라우팅, API 경로 및 보고서 좋은 성능으로 많은 개발자들에게 인기를 끌고 있습니다. Next.js의 i18n 기능은 기존의 이점을 활용하여 다국어 지원을 쉽게 수행할 수 있게 해줍니다.
3. Next.js의 i18n 기능 소개
Next.js에서는 `next.config.js` 파일을 통해 국제화 설정을 간단하게 구성할 수 있습니다. i18n 기능은 페이지별로 기본 언어를 설정하고, 각 언어에 대한 약어를 정의하며, 사용자가 언어를 선택할 수 있도록 도와줍니다.module.exports = {
i18n: {
locales: ['en-US', 'ko-KR', 'fr-FR'],
defaultLocale: 'en-US',
},
}
4. 다국어 지원을 위한 구조 설계
다국어 지원을 위한 최상의 접근 방식 중 하나는 언어별로 리소스를 모듈화하여 저장하는 것입니다. 일반적으로 JSON 파일을 활용하여 각 언어에 맞는 텍스트를 정의합니다. 이렇게 함으로써 유지보수가 용이하고 코드의 가독성을 높일 수 있습니다.// locales/en-US.json
{
"welcome": "Welcome",
"description": "This is an example of i18n with Next.js."
}
// locales/ko-KR.json
{
"welcome": "환영합니다",
"description": "이는 Next.js의 i18n 예제입니다."
}
// locales/fr-FR.json
{
"welcome": "Bienvenue",
"description": "Ceci est un exemple d'i18n avec Next.js."
}
5. 언어 리소스 가져오기
언어 파일을 가져오기 위해서, React의 훅을 이용한 간단한 커스텀 훅을 만들 수 있습니다. 이 훅은 현재 언어에 따라 적절한 메시지를 반환합니다.import { useRouter } from 'next/router';
import en from '../locales/en-US.json';
import ko from '../locales/ko-KR.json';
import fr from '../locales/fr-FR.json';
const translations = {
'en-US': en,
'ko-KR': ko,
'fr-FR': fr,
};
export const useTranslation = () => {
const { locale } = useRouter();
const t = (key) => translations[locale][key] || key;
return { t };
};
6. 컴포넌트에서 다국어 지원 적용하기
이제 컴포넌트에서 위에서 만든 `useTranslation` 훅을 사용하여 다국어 지원을 적용할 수 있습니다. 예를 들어, 다음과 같은 코드로 환영 메시지를 표시할 수 있습니다.import React from 'react';
import { useTranslation } from '../hooks/useTranslation';
const Welcome = () => {
const { t } = useTranslation();
return (
{t('welcome')}
{t('description')}
);
};
export default Welcome;
7. 언어 변경 기능 구현하기
사용자가 웹 애플리케이션의 언어를 변경할 수 있도록 하려면, 언어 선택 버튼을 추가하여 이를 처리하는 기능을 구현할 수 있습니다. Next.js에서는 “ 컴포넌트를 사용하여 언어 변경을 쉽게 처리할 수 있습니다.import Link from 'next/link';
import { useRouter } from 'next/router';
const LanguageSwitcher = () => {
const { locales, locale } = useRouter();
return (
{locales.map((lng) => (
))}
);
};
export default LanguageSwitcher;
8. Next.js API Route에서의 다국어 지원
Next.js의 API Route에서도 다국어 지원을 추가할 수 있습니다. API Route에서 언어를 파라미터로 받아 적절한 메시지를 반환하는 구조를 만들 수 있습니다.// pages/api/message.js
export default function handler(req, res) {
const { locale } = req.query;
const messages = {
'en-US': 'Hello!',
'ko-KR': '안녕하세요!',
'fr-FR': 'Bonjour!',
};
res.status(200).json({ message: messages[locale] || messages['en-US'] });
}
9. 최적화 및 SEO를 고려한 다국어 지원
다국어 웹사이트에서 SEO를 최적화하기 위해서는 hreflang 태그를 사용하는 것이 좋습니다. 이를 통해 검색 엔진이 페이지의 언어 및 지역 정보를 이해할 수 있도록 돕습니다. Next.js에서는 `next/head`를 사용해 이를 구현할 수 있습니다.import Head from 'next/head';
const MyPage = () => {
return (
<>
Hello World
);
};
export default MyPage;
10. 결론
Next.js의 i18n 기능을 사용하면 다국어 지원을 효율적으로 구현할 수 있습니다. 국제화와 로컬라이제이션의 차이를 이해하고, 각 언어별로 리소스를 관리하는 방법을 배우면 사용자 경험을 극대화할 수 있습니다. 올바른 설계를 통해 여러분의 Next.js 애플리케이션은 글로벌 사용자에게도 손쉽게 접근할 수 있는 플랫폼이 될 것입니다. 이제 다른 문화와 언어를 가진 사용자를 위한 웹 애플리케이션을 만들 기회를 잡아보세요!
11. 참고 자료
Next.js i18n Documentation
i18next for React
MDN: The Language Header