[flutter] 플러터(Flutter) 앱의 국제화(i18n) 구현하기

플러터는 국제화(i18n)를 지원하여 앱을 다국어로 제공할 수 있습니다. 이 기능을 사용하면 앱을 여러 국가의 사용자에게 제공하고, 언어와 지역에 맞는 적절한 문자열, 날짜, 통화 등을 표시할 수 있습니다. 이번 블로그에서는 플러터 앱의 국제화를 구현하는 방법에 대해 설명하겠습니다.

1. 국제화 패키지 추가하기

먼저, flutter_localizations 라이브러리를 추가하여 앱에 국제화 기능을 구현할 수 있습니다. 이 라이브러리는 플러터의 국제화를 지원하며, 여러 언어로 앱을 제공할 수 있도록 도와줍니다.

dependencies:
  flutter:
    sdk: flutter
  flutter_localizations:
    sdk: flutter
  # 추가적으로 필요한 패키지들을 여기에 추가합니다.

2. 지원할 언어 및 지역 설정하기

앱에서 지원할 언어와 지역을 설정해야 합니다. 예를 들어, 한국어와 영어를 지원하고 각각의 지역에 맞는 문자열 파일을 생성하는 등의 작업이 필요합니다.

flutter:
  assets:
    - i18n/

3. 문자열 파일 생성하기

각 언어 및 지역에 대한 문자열을 포함하는 파일을 생성해야 합니다. 이를 통해 각 언어별로 다른 문자열을 제공할 수 있습니다.

예를 들어, i18n 폴더 안에 en.jsonko.json과 같은 파일을 아래와 같이 생성합니다.

// en.json
{
  "hello": "Hello",
  "welcome": "Welcome to our app"
}
// ko.json
{
  "hello": "안녕하세요",
  "welcome": "우리 앱에 오신 것을 환영합니다"
}

4. 앱에서 국제화 지원 적용하기

이제 앱에서 지정된 언어 및 지역에 따라 적절한 문자열을 표시할 수 있도록 구현해야 합니다.

import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      localizationsDelegates: [
        AppLocalizations.delegate,
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
      ],
      supportedLocales: [
        const Locale('en', ''),
        const Locale('ko', ''),
      ],
      // 언어가 변경되지 않은 경우에도 앱이 같은 언어로 보이도록 fallback 지원
      localeResolutionCallback:
          (Locale locale, Iterable<Locale> supportedLocales) {
        for (Locale supportedLocale in supportedLocales) {
          if (supportedLocale.languageCode == locale.languageCode ||
              supportedLocale.countryCode == locale.countryCode) {
            return supportedLocale;
          }
        }
        return supportedLocales.first;
      },
      home: MyHomePage(),
    );
  }
}

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

결론

국제화 기능을 통해 플러터 앱을 여러 언어 및 지역으로 제공할 수 있으며, 사용자에게 보다 친숙하고 적합한 경험을 제공할 수 있습니다. 지원할 언어 및 지역을 설정하고, 각 문자열을 관리하는 것만으로도 국제 사용자들을 대상으로 앱을 더 폭넓게 제공할 수 있습니다.

참고 자료

이상으로 플러터 앱의 국제화(i18n) 구현 방법에 대해 알아보았습니다. 감사합니다!