Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 메모장앱
- submodules
- funnel
- nodejs
- 블랙서바이벌
- 카카오톡공유하기
- 페이스북광고
- 부업
- 라인광고플랫폼
- 캐치마인드
- 토이프로젝트
- 개발자를_위한 #PPT팁
- 스케치퀴즈
- 개인앱
- 플러터
- git pull
- 룩백
- nestjs
- 광고플랫폼
- 이터널리턴
- Redis
- 코딩공부
- 영원회귀
- 펀널
- 구글검색광고
- git
- 스케치데브
- Kotlin
- 카카오톡
- 사이드프로젝트
Archives
- Today
- Total
가을기 Workspace
[플러터] 32일차 - i18n, l10n 적용하기 본문
본 예제에서는 easy_localization 을 사용합니다.
다른 라이브러리가 arb로 generate 하고 변환한 arb 파일을 사용하는 것에 비해
easy_localization은 지정한 경로에 json만 만들면 되기 때문에 사용이 대단히 편리합니다.
pubspec.yaml
dependencies:
easy_localization: ^3.0.0
위와 같이 설정해서 의존성 다운로드를 받습니다.
main.dart
void main() async {
// Needs to be called so that we can await for EasyLocalization.ensureInitialized();
WidgetsFlutterBinding.ensureInitialized();
await EasyLocalization.ensureInitialized();
runApp(EasyLocalization(
fallbackLocale: Locale('ko', 'KR'),
child: MyApp(),
supportedLocales: [Locale('en', 'US'), Locale('ko', 'KR'), Locale('ja', 'JP')],
path: 'data/translations',
));
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
MaterialApp(
localizationsDelegates: context.localizationDelegates,
supportedLocales: context.supportedLocales,
locale: context.locale,
title: 'Flutter Demo',
initialRoute: '/',
);
}
}
main 코드를 위와같이 준비했다면 준비는 모두 끝입니다.
locale 파일
지원할 언어별로 json 파일을 만들어둬야 합니다.
assets
└── translations
├── {languageCode}.{ext} //only language code
└── {languageCode}-{countryCode}.{ext} //or full locale code
- translations/ko-KR.json
- translations/en-US.json
코드
...
import 'package:easy_localization/easy_localization.dart';
...
...
Text(
'home.matchHistory'.tr(),
style: GoogleFonts.doHyeon(
color: Colors.white,
fontSize: 12,
),
)
text에 extenstion 함수 tr()
을 호출하면 상응하는 json의 value로 치환이 됩니다.
언어 변경 화면
class LanguagePreferences extends StatefulWidget {
static const route = '/preferences/language';
@override
State<LanguagePreferences> createState() => _LanguagePreferences();
}
class _LanguagePreferences extends State<LanguagePreferences> {
@override
Widget build(BuildContext context) {
final locale = EasyLocalization.of(context)!.locale.toString();
return Scaffold(
body: ListView(
children: [
ListTile(
title: Text('한국어', style: GoogleFonts.jua()),
trailing: Radio(
value: 'ko_KR',
groupValue: locale,
onChanged: (String? value) {
context.setLocale(Locale('ko', 'KR'));
},
),
),
ListTile(
title: Text('English', style: GoogleFonts.jua()),
trailing: Radio(
value: 'en_US',
groupValue: locale,
onChanged: (String? value) {
context.setLocale(Locale('en', 'US'));
},
),
),
ListTile(
title: Text('日本語', style: GoogleFonts.jua()),
trailing: Radio(
value: 'ja_JP',
groupValue: locale,
onChanged: (String? value) {
context.setLocale(Locale('ja', 'JP'));
},
),
),
],
),
);
}
}
종료 후 언어 설정이 초기화 되지는 않을까 염려하지 않으셔도 되겠습니다.
라이브러리 레벨에서 모두 제공이 됩니다.
'개발 > 개인앱' 카테고리의 다른 글
[플러터] mac에서 homebrew로 flutter 설치 (5초면 끝남) (0) | 2021.10.08 |
---|---|
플러터 - 파이어베이스 활용하기 1 - 프로젝트 만들기 (0) | 2021.09.11 |
[플러터] 30일차 - 스크롤시 역동적인 앱바 (0) | 2021.08.19 |
[플러터] 29일차 - 애니메이션, 인트로 (0) | 2021.08.19 |
[플러터] 28일차 - SharedPreference (0) | 2021.08.16 |
Comments