Flutter에서 국제화를 위한 필수 도구: intl 패키지 사용법 및 옵션 가이드

2024. 7. 1. 02:03Flutter/Flutter Programming

반응형

국제화(i18n)는 전 세계 사용자를 대상으로 하는 앱을 만들기 위해 매우 중요합니다. Flutter는 개발자가 쉽게 앱을 국제화할 수 있도록 강력한 도구를 제공합니다. 그중 하나가 바로 intl 패키지입니다. 이 블로그에서는 intl 패키지를 사용하는 방법과 다양한 옵션에 대해 자세히 알아보겠습니다.

1. intl 패키지란?

intl 패키지는 Flutter에서 국제화와 지역화를 지원하는 가장 기본적이고 중요한 패키지입니다. 날짜, 시간, 숫자, 통화 형식 등을 로컬 규칙에 맞게 변환하고, 다양한 언어로 문자열을 관리할 수 있습니다.

2. intl 패키지 설치하기

우선, pubspec.yaml 파일에 intl 패키지를 추가해야 합니다.

dependencies:
  flutter:
    sdk: flutter
  intl: ^0.17.0

그런 다음, 터미널에서 다음 명령어를 실행하여 패키지를 설치합니다.

flutter pub get

3. 날짜와 시간 형식 지정하기

날짜와 시간을 로컬 형식에 맞게 표시하는 것은 국제화의 중요한 부분입니다. intl 패키지를 사용하면 간단하게 할 수 있습니다.

import 'package:intl/intl.dart';

void main() {
  var now = DateTime.now();
  var formatter = DateFormat.yMMMMd('en_US');
  String formattedDate = formatter.format(now);
  print(formattedDate); // October 20, 2023
}

다양한 날짜 형식 옵션을 사용할 수 있습니다:

  • yMd: 1/27/2023
  • yMMMMd: January 27, 2023
  • yMMMMEEEEd: Friday, January 27, 2023

4. 숫자 및 통화 형식 지정하기

숫자와 통화 형식도 로컬 규칙에 따라 달라질 수 있습니다. intl 패키지를 사용하면 이를 쉽게 처리할 수 있습니다.

import 'package:intl/intl.dart';

void main() {
  var number = 1234567.89;
  var numberFormat = NumberFormat('#,##0.00', 'en_US');
  print(numberFormat.format(number)); // 1,234,567.89

  var currencyFormat = NumberFormat.simpleCurrency(locale: 'en_US');
  print(currencyFormat.format(number)); // $1,234,567.89
}

다양한 숫자 및 통화 형식 옵션을 사용할 수 있습니다:

  • NumberFormat.compact(): 1.2M
  • NumberFormat.currency(locale: 'en_US', symbol: '\$'): $1,234,567.89
  • NumberFormat.percent(): 123456789%

5. 다국어 지원을 위한 문자열 번역

앱의 UI를 여러 언어로 제공하려면 문자열 번역이 필요합니다. 이를 위해 intl 패키지와 함께 intl_translation 도구를 사용할 수 있습니다.

5.1 intl_translation 도구 설치

intl_translation 도구를 글로벌 패키지로 설치합니다.

dart pub global activate intl_translation

5.2 번역 파일 생성 및 관리

lib/l10n 디렉터리에 intl_en.arb, intl_es.arb와 같은 ARB 파일을 생성합니다. 예:

intl_en.arb

{
  "hello": "Hello",
  "greeting": "Hello {name}"
}

intl_es.arb

{
  "hello": "Hola",
  "greeting": "Hola {name}"
}

5.3 Dart 파일 생성

터미널에서 다음 명령어를 실행하여 번역 파일을 Dart 파일로 변환합니다.

flutter pub pub run intl_translation:generate_from_arb --output-dir=lib/l10n lib/main.dart lib/l10n/intl_*.arb

5.4 번역 적용

생성된 Dart 파일을 가져와서 앱에 번역을 적용합니다.

import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'generated/l10n.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      localizationsDelegates: [
        S.delegate,
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
        GlobalCupertinoLocalizations.delegate,
      ],
      supportedLocales: S.delegate.supportedLocales,
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(S.of(context).hello),
      ),
      body: Center(
        child: Text(S.of(context).greeting(name: 'John')),
      ),
    );
  }
}

build 메서드

  • MaterialApp 위젯을 반환합니다.
    • localizationsDelegates: 앱에서 사용하는 지역화 위임자 목록을 정의합니다.
      • S.delegate: 자동 생성된 번역 파일(generated/l10n.dart)에서 가져온 위임자입니다.
      • GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, GlobalCupertinoLocalizations.delegate: Flutter에서 제공하는 기본적인 지역화 위임자들입니다.
    • supportedLocales: 앱에서 지원하는 로캘 목록을 정의합니다. 이 목록은 S.delegate.supportedLocales에서 가져옵니다.
    • home: 앱의 첫 화면을 나타내는 위젯을 정의합니다. 여기서는 MyHomePage 클래스를 사용합니다.

6. 결론

intl 패키지는 Flutter 앱을 국제화하는 데 매우 유용한 도구입니다. 날짜, 시간, 숫자, 통화 형식 뿐만 아니라 다국어 문자열 번역까지 다양한 기능을 제공합니다.

위 가이드를 따라 intl 패키지를 효과적으로 사용하여 글로벌 사용자를 위한 앱을 만들어보세요.

 

 

 

수발가족을 위한 일기장 “나비일기장

https://play.google.com/store/apps/details?id=com.maccrey.navi_diary_release

 

비공개테스트를 위한 20명의 테스터모집 앱 "테스터 쉐어"

https://play.google.com/store/apps/details?id=com.maccrey.tester_share_release

 

카카오톡 대화방

https://open.kakao.com/o/gsS8Jbzg

반응형