본문 바로가기
Web

Next.js에서 다국어 지원

by 보증서는 남자 2025. 2. 3.

다국어를 지원하는 서비스에서 언어별로 화면을 만드는 것은 불필요한 반복이 생기는 업무이며 관리 또한 어려워집니다. Next.js에서는 다국어를 손쉽게 지원할 수 있는 라이브러리를 지원하며 추가로 이를 동적으로 수정/반영할 수 있습니다.

오늘은 다국어 지원과 언어별로 동적으로 반영할 수 있는 Crowdin 툴이 사용되는 방법까지 알아보겠습니다.

 

Next.js에서 다국어 지원을 하는 경우 I18n이라는 명칭을 사용하고 있습니다.  I18n은 'Internationalization'의 줄임말로, 첫 글자 'I'와 마지막 글자 'n' 사이에 18개의 글자가 있다는 의미입니다. 이는 긴 단어를 간단하게 표현하는 방법으로, 개발자들 사이에서 널리 사용되는 관행입니다.

 

국제화의 주요 목표는 다음과 같습니다:

  • 다국어 지원을 위한 코드 구조 설계
  • 문자열 추출 및 외부화
  • 날짜, 시간, 숫자 형식의 유연한 처리
  • 다양한 문자 인코딩 지원
  • 양방향 텍스트 지원 (예: 아랍어, 히브리어)

Next.js에서 국제화 구현하기

Next.js는 v10.0.0부터 국제화(i18n) 라우팅을 기본적으로 지원합니다. 이를 통해 개발자는 쉽게 다국어 웹사이트를 구축할 수 있습니다.

 

1. 다국어 지원 설정 방법

Next.js에서 다국어 지원을 설정하는 방법은 다음과 같습니다:

 

1. next.config.js 파일에 i18n 설정 추가:

module.exports = {
  i18n: {
    locales: ['en', 'ko', 'ja'],
    defaultLocale: 'ko',
  },
}

 

2. 언어별 번역 파일 생성:
public/locales 디렉토리에 각 언어별 JSON 파일을 생성합니다.

public/
  locales/
    en/
      common.json
    ko/
      common.json
    ja/
      common.json

 

3. next-i18next 라이브러리 설치 및 설정:

npm install next-i18next

 

 

next-i18next.config.js 파일 생성:

module.exports = {
  i18n: {
    defaultLocale: 'ko',
    locales: ['en', 'ko', 'ja'],
  },
}

 

4. _app.js에서 appWithTranslation HOC 사용:

import { appWithTranslation } from 'next-i18next'

function MyApp({ Component, pageProps }) {
  return <Component {...pageProps} />
}

export default appWithTranslation(MyApp)

 

2. 동적 라우팅을 활용한 언어 전환

Next.js의 i18n 라우팅을 사용하면, URL 경로에 언어 코드를 포함시켜 동적으로 언어를 전환할 수 있습니다.

 

1. 링크를 사용한 언어 전환:

import Link from 'next/link'
import { useRouter } from 'next/router'

function LanguageSwitcher() {
  const router = useRouter()
  
  return (
    <div>
      <Link href={router.asPath} locale="en">
        <a>English</a>
      </Link>
      <Link href={router.asPath} locale="ko">
        <a>한국어</a>
      </Link>
      <Link href={router.asPath} locale="ja">
        <a>日本語</a>
      </Link>
    </div>
  )
}

 

2. 프로그래매틱 언어 전환:

import { useRouter } from 'next/router'

function LanguageSwitcher() {
  const router = useRouter()
  
  const changeLanguage = (locale) => {
    router.push(router.pathname, router.asPath, { locale })
  }
  
  return (
    <div>
      <button onClick={() => changeLanguage('en')}>English</button>
      <button onClick={() => changeLanguage('ko')}>한국어</button>
      <button onClick={() => changeLanguage('ja')}>日本語</button>
    </div>
  )
}

 

결론

Next.js에서 국제화(i18n)를 구현하는 것은 내장 기능과 다양한 라이브러리의 도움으로 비교적 간단합니다. 동적 라우팅을 활용한 언어 전환 기능은 사용자 경험을 향상시키고, SEO에도 긍정적인 영향을 미칩니다.

국제화는 단순히 텍스트를 번역하는 것 이상의 의미를 가집니다. 날짜 형식, 숫자 표기법, 통화 등 다양한 문화적 차이를 고려해야 하며, 이를 통해 전 세계 사용자에게 더 나은 서비스를 제공할 수 있습니다.

 

동적 배포를 위한 Crowdin 적용

Next.js 애플리케이션에서 다국어 지원은 글로벌 사용자 경험을 향상시키는 중요한 요소입니다. Crowdin은 이러한 다국어 지원 프로세스를 효율적으로 관리할 수 있게 해주는 강력한 도구입니다. 이 글에서는 Next.js 프로젝트에서 Crowdin을 활용하여 다국어 지원을 구현하는 방법에 대해 알아보겠습니다.

 

Crowdin 소개

Crowdin은 소프트웨어 현지화를 위한 클라우드 기반 플랫폼입니다. 이 도구는 번역 프로세스를 자동화하고, 개발자와 번역가 간의 협업을 원활하게 만들어줍니다.

 

주요 특징:

  • 600개 이상의 앱 및 통합 기능 제공
  • 자동화된 워크플로우
  • 번역 메모리 및 용어집 관리
  • 실시간 협업 환경

Next.js와 Crowdin 통합하기

1. Crowdin 프로젝트 설정

먼저 Crowdin에서 새 프로젝트를 생성하고, 소스 언어와 대상 언어를 설정합니다

2. Next.js 프로젝트 설정

Next.js 프로젝트에 next-intl 라이브러리를 설치합니다.

npm install next-intl

3. Crowdin 설정 파일 생성

프로젝트 루트에 crowdin.yml 파일을 생성합니다:

project_id: 'YOUR_PROJECT_ID'
api_token_env: CROWDIN_PERSONAL_TOKEN
preserve_hierarchy: true
files:
  - source: /public/locales/en/**/*
    translation: /public/locales/%two_letters_code%/**/%original_file_name%

4. 번역 파일 관리

public/locales 디렉토리에 각 언어별 JSON 파일을 생성합니다.

4. Crowdin CLI 설치 및 사용

Crowdin CLI를 설치하고 번역 파일을 동기화합니다:

npm install -g @crowdin/cli
crowdin upload sources
crowdin download

 

자동화된 워크플로우 구축

1. CI/CD 파이프라인 설정

GitHub Actions 등을 사용하여 자동화된 번역 동기화 워크플로우를 구축합니다.

name: Crowdin Sync

on:
  push:
    branches: [ main ]

jobs:
  synchronize-with-crowdin:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: crowdin action
        uses: crowdin/github-action@1.4.9
        with:
          upload_sources: true
          upload_translations: false
          download_translations: true
          localization_branch_name: l10n_crowdin_action
          create_pull_request: true
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
          CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}

2. 실시간 번역 업데이트

Crowdin의 Over-the-air 기능을 활용하여 실시간으로 번역을 업데이트할 수 있습니다.

 

번역 품질 관리

Crowdin은 다양한 기능을 통해 번역 품질을 향상시킵니다:

  • 번역 메모리: 일관된 번역을 유지
  • 용어집: 주요 용어의 일관성 보장
  • 기계 번역 및 인간 번역의 조합: 효율성과 정확성 향상

결론

Crowdin을 Next.js 프로젝트에 통합함으로써, 다국어 지원 스크립트를 수정하여 웹에 즉각적으로 적용할 수 있으며 번역과 문구를 지정함에 있어 유관부서와 함께 소통하며 업무를 수행할 수 있는 환경을 만들 수 있습니다.

'Web' 카테고리의 다른 글

Next.js에서의 상태관리  (0) 2025.02.10
Next.js의 렌더링 방식 비교 (SSR, SSG, CSR)  (1) 2025.01.27
Next.js 라우팅 시스템  (3) 2024.12.23
Next.js 파일구조와 FSD  (5) 2024.12.09
Next.js 탄생배경  (1) 2024.11.25