[flutter] 플러터 앱에서 변수에 따라 동적으로 언어 변경하는 방법
플러터(Flutter)로 다중 언어를 지원하는 앱을 개발할 때, 사용자가 원하는 언어를 선택할 수 있도록 만들어야 할 때가 있습니다. 이 포스트에서는 플러터 앱에서 사용자가 선택한 변수에 따라 동적으로 언어를 변경하는 방법에 대해 알아보겠습니다.
1. 다중 언어 지원 구성
플러터 앱에서 다중 언어를 지원하려면, flutter_localizations
패키지를 사용하여 MaterialApp
위젯을 구성해야 합니다. 이 패키지를 사용하면 앱 내에서 문구를 다양한 언어로 제공할 수 있습니다.
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
localizationsDelegates: [
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
],
supportedLocales: [
const Locale('en', 'US'), // 영어
const Locale('ko', 'KO'), // 한국어
],
home: MyHomePage(),
);
}
}
2. 동적으로 언어 변경하기
다중 언어를 지원하는 앱에서 동적으로 언어를 변경하려면, 사용자가 선택한 언어에 따라 해당 언어의 Locale을 설정해야 합니다. 이를 위해 사용자가 선택한 언어를 저장하는 변수를 만들어 관리할 수 있습니다.
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_localizations/localization/app_localizations.dart';
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
Locale _locale;
void _changeLanguage(Locale locale) {
setState(() {
_locale = locale;
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
localizationsDelegates: [
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
AppLocalizations.delegate, // 앱에서 사용하는 커스텀 로컬라이제이션
],
supportedLocales: [
const Locale('en', 'US'), // 영어
const Locale('ko', 'KO'), // 한국어
],
locale: _locale, // 사용자가 선택한 언어로 설정
home: MyHomePage(onLanguageChanged: _changeLanguage),
);
}
}
위 예제에서 _changeLanguage
메서드는 사용자가 언어를 변경할 때 호출되는 메서드입니다. 이를 통해 사용자가 선택한 언어에 따라 _locale
을 변경할 수 있습니다.
3. 커스텀 Localizations 클래스 생성
마지막으로, 앱에서 사용할 커스텀 로컬라이제이션을 정의하는 클래스를 생성해야 합니다. 이를 통해 다양한 언어에 대한 텍스트를 정의하고, 해당 언어로 출력할 수 있습니다.
import 'package:flutter/material.dart';
class AppLocalizations {
static AppLocalizations of(BuildContext context) {
return Localizations.of<AppLocalizations>(context, AppLocalizations);
}
String get title {
// 각 언어에 따른 제목 반환
return 'Title';
}
String get greeting {
// 각 언어에 따른 인사말 반환
return 'Hello!';
}
// 추가적인 언어별 텍스트 정의
}
AppLocalizations
클래스를 통해 다양한 언어에 따른 텍스트를 정의하고, 이를 앱 내에서 사용하여 다중 언어 지원을 구현할 수 있습니다.
이렇게 하면 사용자가 선택한 언어에 따라 앱 내의 텍스트가 동적으로 변경되는 플러터 앱을 만들 수 있습니다.
참고문헌: