[flutter] 플러터 intl을 사용해서 앱에서 로케일 변경을 지원하는 방법을 알려주세요.

1. Intl 패키지 추가하기

Intl 패키지를 사용하기 위해 pubspec.yaml 파일에 다음을 추가합니다:

dependencies:
  flutter_localizations:
    sdk: flutter
  intl: ^0.17.0

저장하고 패키지를 가져오기 위해 터미널에서 flutter pub get 명령을 실행합니다.

2. 지원할 로케일 설정하기

앱에서 지원할 로케일을 설정하는 방법은 다양합니다. 가장 간단한 방법은 MaterialApp 위젯의 supportedLocales 속성을 설정하는 것입니다. 예를 들어, 영어와 한국어를 지원하려면 다음과 같이 설정할 수 있습니다:

MaterialApp(
  supportedLocales: [
    const Locale('en', 'US'),
    // 추가로 지원할 로케일을 여기에 추가합니다
    const Locale('ko', 'KR'),
  ],
  // ...
)

3. 번역 메시지 파일 작성하기

번역할 메시지를 작성할 파일을 생성합니다. 일반적으로 ‘lib/l10n/intl_messages.arb’ 파일을 사용합니다. 아래는 예시입니다:

{
  "@@locale": "en",
  "helloWorld": "Hello, World!",
  // 추가로 번역할 메시지를 여기에 추가합니다
}

{
  "@@locale": "ko",
  "helloWorld": "안녕, 세계!",
  // 추가로 번역할 메시지를 여기에 추가합니다
}

4. 번역 메시지 클래스 생성하기

번역 메시지 클래스를 생성하여 번역된 메시지에 접근할 수 있도록 합니다. ‘lib/l10n/intl_messages.dart’ 파일을 생성하고 다음의 코드를 추가합니다:

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

String intlMessages(String messageText, [List<Object> args]) {
  return Intl.message(
    messageText,
    args: args,
    // 가져올 번역 메시지 파일 경로를 설정합니다
    locale: Intl.defaultLocale,
    name: 'intlMessages',
  );
}

typedef Future<dynamic> LibraryLoader();
final _messageLookup = MessageLookupByLibrary();
Future<LibraryLoader> loadLibrary() async {
  await initializeMessages('intl_messages');
  return _messageLookup.loadLibrary(libraryName: 'intl_messages');
}

final intlMessages = Intl.messageLookupByLibrary(_messageLookup);

5. 번역 메시지 사용하기

이제 번역 메시지에 접근하여 사용할 수 있습니다. 예를 들어, ‘Hello, World!’ 메시지를 출력하려면 다음 코드를 사용합니다:

Text(intlMessages('helloWorld')),

현재 언어 설정에 따라 영어 또는 한국어로 메시지가 표시됩니다.

위의 방법을 통해 플러터 Intl을 사용하여 앱에서 로케일 변경을 지원할 수 있습니다. 자세한 내용은 Intl 패키지의 문서를 참조하시기 바랍니다.