React/React 다국어

(부록) React에서 다국어 번역 키 관리를 최적화하는 방법: TypeScript Enum 활용

atomicdev 2024. 10. 16. 18:04
728x90

React에서 i18next를 사용할 때 번역 키가 많아지면, 자주 발생하는 문제는 번역 키를 잘못 입력하는 것, 오타, 또는 관리가 어려워지는 것들입니다. 이를 해결하기 위해 C#이나 Java의 Enum처럼 키 값을 관리하는 방법을 도입하면 개발 생산성을 높이고 오류를 줄일 수 있습니다.

다음은 몇 가지 방법으로 i18next의 번역 키 관리를 효율화하고, 개발 중 오류를 줄일 수 있는 방법입니다.

TypeScript Enum 활용

1. 번역 키를 상수(Constant)로 관리

가장 간단하고 명확한 방법 중 하나는 번역 키들을 상수로 정의하는 것입니다. constants.js 파일에 모든 번역 키를 상수로 정의해 두고, 이 상수를 사용하는 방식으로 오타를 방지할 수 있습니다.

constants.js 파일

export const TRANSLATION_KEYS = {
  WELCOME: 'welcome',
  DESCRIPTION: 'description',
  // 더 많은 키 추가
};

사용 예시 (App.js)

import React from 'react';
import { useTranslation } from 'react-i18next';
import { TRANSLATION_KEYS } from './constants';  // 상수 파일 import

const App = () => {
  const { t } = useTranslation();

  return (
    <div>
      <h1>{t(TRANSLATION_KEYS.WELCOME)}</h1>
      <p>{t(TRANSLATION_KEYS.DESCRIPTION)}</p>
    </div>
  );
};

export default App;
 

이 방법을 사용하면 번역 키를 입력할 때 오타를 방지할 수 있고, IDE의 자동 완성 기능을 활용할 수 있어 생산성이 높아집니다.


2. TypeScript로 변환하여 타입 안전성 제공

만약 프로젝트에서 TypeScript를 사용하고 있다면, Enum을 사용하여 더욱 타입 안전한 번역 키 관리가 가능합니다.

TranslationKeys.ts 파일

export enum TranslationKeys {
  WELCOME = 'welcome',
  DESCRIPTION = 'description',
  // 더 많은 키 추가
}

사용 예시 (App.tsx)

import React from 'react';
import { useTranslation } from 'react-i18next';
import { TranslationKeys } from './TranslationKeys';  // Enum 파일 import

const App = () => {
  const { t } = useTranslation();

  return (
    <div>
      <h1>{t(TranslationKeys.WELCOME)}</h1>
      <p>{t(TranslationKeys.DESCRIPTION)}</p>
    </div>
  );
};

export default App;

이 방법을 사용하면 컴파일 타임에 번역 키에 대한 타입 검사를 받을 수 있어 더욱 안전합니다. 오타가 발생하면 IDE가 이를 감지할 수 있고, 자동 완성 기능도 활용할 수 있습니다.


3. 타입 정의와 함수로 번역 키 그룹화 (TypeScript)

다수의 번역 키를 다룰 때, 각각의 번역 키를 더 구조적으로 관리할 수 있도록 그룹화하여 관리하는 방법도 있습니다.

TranslationKeys.ts 파일

type TranslationKey = 'welcome' | 'description' | 'button.submit' | 'button.cancel';

export const TranslationKeys = {
  WELCOME: 'welcome' as TranslationKey,
  DESCRIPTION: 'description' as TranslationKey,
  BUTTON: {
    SUBMIT: 'button.submit' as TranslationKey,
    CANCEL: 'button.cancel' as TranslationKey,
  }
};

사용 예시 (App.tsx)

import React from 'react';
import { useTranslation } from 'react-i18next';
import { TranslationKeys } from './TranslationKeys';  // 그룹화된 키 import

const App = () => {
  const { t } = useTranslation();

  return (
    <div>
      <h1>{t(TranslationKeys.WELCOME)}</h1>
      <p>{t(TranslationKeys.DESCRIPTION)}</p>
      <button>{t(TranslationKeys.BUTTON.SUBMIT)}</button>
    </div>
  );
};

export default App;

이 방식은 번역 키가 많아질 때, 각각의 키를 더 구조적으로 그룹화할 수 있어 유지보수가 쉬워지고, 타입 안전성을 유지하면서 번역 키 관리가 가능합니다.


4. 자동 생성된 번역 키 관리 (i18next-parser)

마지막으로, 자동으로 번역 키를 추출하는 도구를 사용하는 것도 좋은 방법입니다. i18next-parser 같은 도구를 사용하면 코드에서 사용되는 번역 키를 자동으로 JSON 파일에서 추출하고, 유지보수를 자동화할 수 있습니다.

  • i18next-parser는 코드에서 사용된 번역 키들을 JSON 파일로 자동 추출하여 관리합니다.
  • 수동으로 키를 정의할 필요가 없고, 새로운 키가 추가될 때마다 자동으로 업데이트됩니다.
npm install i18next-parser --save-dev

이 방법은 번역 키를 수동으로 관리하지 않고, 번역 키가 코드 내에서 자동으로 관리되기를 원하는 경우에 적합합니다.


마무리

위의 방법들은 각각의 장점이 있으며, 특히 TypeScript의 Enum이나 상수 관리를 사용하면 번역 키를 효율적으로 관리할 수 있습니다. 이로 인해 오타로 인한 오류가 줄어들고, IDE의 자동 완성 기능을 활용하여 번역 키를 빠르게 찾을 수 있어 개발 생산성을 크게 향상시킬 수 있습니다.

728x90