본문 바로가기
카테고리 없음

[추가학습] Dart 서버 / 서버 애플리케이션 국제화(i18n) 및 지역화(l10n)/ Dart에서의 국제화(i18n)

by Maccrey Coding 2024. 10. 6.
반응형

1. 국제화(i18n)와 지역화(l10n)의 차이

먼저, 국제화와 지역화의 개념을 간단히 정리해 보겠습니다.

  • 국제화(i18n, Internationalization): 애플리케이션을 다국어와 여러 국가의 사용자들을 지원할 수 있도록 준비하는 과정입니다. 예를 들어, 애플리케이션에서 텍스트나 날짜 형식 등을 여러 언어와 문화권에서 사용 가능한 형태로 설정하는 것이 국제화입니다.

  • 지역화(l10n, Localization): 국제화된 애플리케이션을 실제로 특정 지역이나 언어에 맞게 변환하는 과정입니다. 예를 들어, 한국 사용자에게는 한국어로, 미국 사용자에게는 영어로 텍스트가 표시되도록 하는 것이 지역화입니다.

2. 서버 애플리케이션에서 다국어 지원 구현하기

2.1 Dart 서버 애플리케이션 구조

우선, 기본적인 Dart 서버 애플리케이션을 생성해 보겠습니다. HTTP 요청을 받아 특정 언어에 맞는 응답을 제공하는 서버를 구현할 것입니다.

import 'dart:io';

void main() async {
  final server = await HttpServer.bind(InternetAddress.loopbackIPv4, 8080);
  print('Server running on http://${server.address.host}:${server.port}');

  await for (HttpRequest request in server) {
    // 클라이언트의 언어 요청을 확인
    String language = request.headers.value('Accept-Language') ?? 'en';
    // 다국어 응답을 반환하는 함수 호출
    request.response.write(getLocalizedResponse(language));
    await request.response.close();
  }
}

String getLocalizedResponse(String language) {
  switch (language) {
    case 'ko':
      return '안녕하세요!';
    case 'es':
      return '¡Hola!';
    default:
      return 'Hello!';
  }
}

설명

  1. 서버 생성: HttpServer.bind로 서버를 로컬호스트의 포트 8080에 바인딩합니다.

  2. 언어 처리: request.headers.value('Accept-Language')를 통해 클라이언트가 요청한 언어를 가져옵니다. 만약 언어가 지정되지 않았을 경우 기본값으로 영어(en)를 사용합니다.

  3. 다국어 응답: getLocalizedResponse 함수에서 언어에 맞는 인사말을 반환합니다. 예를 들어, 한국어(ko)라면 "안녕하세요!", 스페인어(es)라면 "¡Hola!"를 반환합니다.

이 코드는 클라이언트가 사용하는 언어에 따라 다른 언어로 응답하는 간단한 예제입니다.

3. intl 패키지를 사용한 문자열 번역 및 지역화 지원

Dart에서는 intl 패키지를 사용하여 문자열을 쉽게 번역하고, 날짜나 숫자 같은 형식을 지역에 맞게 처리할 수 있습니다.

3.1 intl 패키지 설치하기

먼저, 프로젝트에서 intl 패키지를 사용하려면 pubspec.yaml 파일에 패키지를 추가해야 합니다.

dependencies:
  intl: ^0.17.0

그리고 터미널에서 다음 명령어로 패키지를 설치합니다.

$ dart pub get

3.2 번역 파일 준비

intl 패키지를 사용해 다국어 지원을 하려면, 번역할 문자열을 별도의 ARB 파일에 저장합니다.

ARB 파일은 JSON 형식의 파일로, 각 언어별로 문자열을 저장하는데 사용됩니다.

예를 들어, 기본 영어 번역 파일(intl_en.arb)과 한국어 번역 파일(intl_ko.arb)을 만들 수 있습니다.

intl_en.arb (영어 번역 파일)

{
  "@@locale": "en",
  "greeting": "Hello!",
  "@greeting": {
    "description": "Greeting message"
  }
}

intl_ko.arb (한국어 번역 파일)

{
  "@@locale": "ko",
  "greeting": "안녕하세요!",
  "@greeting": {
    "description": "인사말"
  }
}

3.3 코드에서 intl 패키지 사용하기

이제, 코드에서 intl 패키지를 사용하여 번역된 문자열을 불러오는 방법을 보겠습니다.

import 'dart:io';
import 'package:intl/intl.dart';
import 'package:intl/message_lookup_by_library.dart';

void main() async {
  // 언어별 ARB 파일을 로드
  initializeMessages('en'); // 영어 메시지 초기화
  initializeMessages('ko'); // 한국어 메시지 초기화
  
  final server = await HttpServer.bind(InternetAddress.loopbackIPv4, 8080);
  print('Server running on http://${server.address.host}:${server.port}');

  await for (HttpRequest request in server) {
    String language = request.headers.value('Accept-Language') ?? 'en';
    Intl.defaultLocale = language;
    String greeting = Intl.message(
      'Hello!',
      name: 'greeting',
      desc: 'Greeting message',
      locale: language,
    );
    
    request.response.write(greeting);
    await request.response.close();
  }
}

설명

  1. initializeMessages: 각 언어에 대한 메시지를 로드합니다. 여기서 initializeMessages('en')과 initializeMessages('ko')를 사용해 영어와 한국어 번역 파일을 초기화합니다.
  2. Intl.defaultLocale: 클라이언트가 요청한 언어를 Intl.defaultLocale에 설정합니다.
  3. Intl.message: Intl.message 함수는 ARB 파일에서 번역된 문자열을 가져옵니다. name 파라미터는 ARB 파일에서 번역된 문자열의 키(greeting)를 의미하며, locale은 요청한 언어에 맞는 번역을 불러옵니다.

3.4 숫자 및 날짜 형식 처리

intl 패키지는 문자열 번역뿐만 아니라, 날짜나 숫자를 해당 지역에 맞는 형식으로 변환하는 기능도 제공합니다.

void displayFormattedDate(String locale) {
  Intl.defaultLocale = locale;
  var now = DateTime.now();
  var formattedDate = DateFormat.yMMMMd().format(now);
  
  print('Locale: $locale - Date: $formattedDate');
}

void main() {
  displayFormattedDate('en');  // Locale: en - Date: October 6, 2024
  displayFormattedDate('ko');  // Locale: ko - Date: 2024년 10월 6일
}

설명

  • DateFormat: DateFormat.yMMMMd()를 사용하면 해당 지역에 맞는 날짜 형식으로 변환됩니다. 예를 들어, 영어(en)로 설정하면 "October 6, 2024"로, 한국어(ko)로 설정하면 "2024년 10월 6일"로 출력됩니다.

Dart 서버 애플리케이션에서 다국어 지원을 구현하기 위해 intl 패키지를 사용하는 방법을 알아보았습니다.

클라이언트의 언어 설정에 따라 적절한 언어로 응답을 제공할 수 있으며, 날짜나 숫자 형식도 지역에 맞게 변환할 수 있습니다.

이러한 기능을 통해 글로벌 사용자를 지원하는 서버 애플리케이션을 쉽게 구축할 수 있습니다.

구독!! 공감과 댓글,

광고 클릭은 저에게 큰 힘이 됩니다.

 

Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.

 

Tester Share [테스터쉐어] - Google Play 앱

Tester Share로 Google Play 앱 등록을 단순화하세요.

play.google.com

반응형