[flutter] 플러터 훅 위젯을 활용한 다국어 지원 방법

서론

앱을 국제 시장에 출시한다면 다국어 지원은 필수적인 요소입니다. 플러터(Flutter)의 편리한 훅(Hook) 위젯을 활용하여 앱 내에서 간단하게 다국어를 지원하는 방법에 대해 알아보겠습니다.


1. 다국어 지원 라이브러리 추가

먼저, flutter_localizations 의존성을 pubspec.yaml 파일에 추가합니다.

dependencies:
  flutter:
    sdk: flutter
  flutter_localizations:
    sdk: flutter
  ...

그런 다음, MaterialApp 위젯을 래핑하여 지원할 로캘(언어 및 지역)을 설정합니다.

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

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      // ...
      localizationsDelegates: const [
        S.delegate,
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
        GlobalCupertinoLocalizations.delegate,
      ],
      supportedLocales: S.delegate.supportedLocales,
      // ...
    );
  }
}

2. 다국어 문구 관리

앱 내에서 다국어로 표시할 문자열을 효과적으로 관리하기 위해 arb 파일 포맷을 사용합니다.

다음은 lib/l10n/intl_en.arb 파일의 예시입니다.

{
  "@@locale": "en",
  "greeting": "Hello, World!",
  "button_text": "Click Me",
  ...
}

3. 다국어 문자열 호출

이제, 앱 내에서 문자열을 호출할 때, 간편하게 훅(Hook) 위젯을 사용할 수 있습니다.

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

class MyWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Text(MyAppLocalizations.of(context)!.greeting),
          ElevatedButton(
            onPressed: () {
              // ...
            },
            child: Text(MyAppLocalizations.of(context)!.buttonText),
          ),
        ],
      ),
    );
  }
}

결론

플러터의 훅(Hook) 위젯과 flutter_localizations 라이브러리를 활용하여, 앱의 다국어 지원을 간단히 구현할 수 있습니다. 이를 통해 다양한 사용자들에게 더 나은 앱 경험을 제공할 수 있습니다.


위 문서는 Flutter 공식 문서를 참고하여 작성되었습니다.