지식쌓기
Flutter Localization
바나나쥬스
2021. 2. 19. 11:19
아래 개발페이지에 있는것을 쉽게 설명
https://flutter.dev/docs/development/accessibility-and-localization/internationalization
1.pubspec.xml 파일 dependencies 및 설정 추가
dependencies:
flutter:
sdk: flutter
flutter_localizations: # 추가
sdk: flutter # 추가
intl: ^0.16.1 # 추가
flutter:
generate: true # 추가
2. 소스 추가 (나중엔 import문과 localizationsDelegates, supportedLocales 부분을 수정할 것이다)
import 'package:flutter_localizations/flutter_localizations.dart';
MaterialApp(
localizationsDelegates: [
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: [
const Locale('en', ''),
const Locale('ko', ''),
// 그외 언어들은 개발페이지 보고 추가할거 추가
],
// ...
)
3. l10n.yaml 파일 생성 (프로젝트 루트 아래)
arb-dir: lib/l10n
template-arb-file: app_en.arb
output-localization-file: app_localizations.dart
supportedLocales에 추가하지 않은 언어의 경우 app_en.arb 가 기본으로 사용되는 걸로 보인다
4. lib/l10n 폴더 안에 app_en.arb 파일 생성
{
"hello": "Hello",
"@hello": {
"description": "The conventional newborn programmer greeting"
}
}
문자열 키를 하나 정의 하면 대표파일에 '@'를 포함한 같은 키가 있어야 한다. (없으면 컴파일에러) "description" 은 정의하지 않아도 무관
콤마 잘써야함, 마지막라인엔 콤마 쓰면안됨
5. 그외 언어도 파일 만들어 정의, 추가된 언어파일에는 '@'정의 하지 않아도됨
app_ko.arb
{
"hello": "안녕"
}
6. 이렇게 까지 하고 실행을 하면 아래폴더에 파일들이 생성된다
${FLUTTER_PROJECT}/.dart_tool/flutter_gen/gen_l10n.
${FLUTTER_PROJECT}/.dart_tool/flutter_gen/gen_l10n.
7. 파일이 정상적으로 생성되면 app 코드를 수정
// import 'package:flutter_localizations/flutter_localizations.dart'; << 제거
// 아래 import문 추가
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
MaterialApp(
// 기존꺼 제거
// localizationsDelegates: [
// GlobalMaterialLocalizations.delegate,
// GlobalWidgetsLocalizations.delegate,
// GlobalCupertinoLocalizations.delegate,
// ],
// supportedLocales: [
// const Locale('en', ''),
// const Locale('ko', ''),
// const Locale.fromSubtags(languageCode: 'zh'), // Chinese *See Advanced Locales below*
// // ... other locales the app supports
// ],
// ...
// 아래꺼로 사용
localizationsDelegates: AppLocalizations.localizationsDelegates,
supportedLocales: AppLocalizations.supportedLocales,
)
8. 문자 사용시 아래처럼 사용
AppLocalizations.of(context).hello
이후부터는 언어를 추가할때 app_xx.arb 파일만 추가하면 됨