플러터:다중언어
보이기
- 플러터:개요
- 플러터:실행
- 플러터:개념 잡기
- 권한 사용
- 위젯
- 플러터:DB연결
- 플러터:HIVE
- 플러터:Firebase(미완)
- 플러터:MySQL(미완)
- 디자인
- 편의
- 플러터:배포
- 플러터:배포(안드로이드)(미완)
- 플러터:배포(iOS)(미완)
- 플러터:참고자료
- 플러터:위젯
- 플러터:구글 AdMob(미완)
- 플러터:라이브러리
개요
flutter_localizations + intl + ARB 파일 구조로 만드는 것이 공식.
사전 준비
패키지 설치
다음과 같은 형태로. 기본 SDK에 포함된 패키지라 다운로드 없이 바로 적용된다.
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
intl: ^0.19.0
flutter:
generate: true
코드 생성
다음 명령을 실행하면 번역데이터 ARB 파일을 기반해석하여 dart로 자동 생성된다.
flutter gen-l10n
생성 위치
lib/gen_l10n/app_localizations.dart
폴더 및 언어 파일 생성
lib/l10n/app_en.arb
{
"hello": "Hello",
"@hello": { // 사용되지 않는, 문자 설명용. 어디서 쓰는지 등등
"description": "Hello text"
},
"login": "Login"
}
lib/l10n/app_ko.arb
{
"hello": "안녕하세요",
"login": "로그인"
}
마테리얼 앱 설정
import 'package:flutter_localizations/flutter_localizations.dart';
import 'l10n/app_localizations.dart';
MaterialApp(
localizationsDelegates: AppLocalizations.localizationsDelegates, // AppLocalizations.of(context)를 동작
supportedLocales: AppLocalizations.supportedLocales, // 아래에서 강제 지정하면 없어도 되는데, 언어 자동 감지용
locale: settings.locale, // 사용자가 설정에 사용한 언어 강제 지정
)
사용
| 과정 | 사용 | 비고 |
|---|---|---|
| 클래스 정의. 로컬라이제이션 객체 가져오기.
현재 locale에 맞는 객체를 반환한다. |
final l10n = AppLocalizations.of(context)!; |
|
| 사용 | Text(l10n.hello) | hello에 매칭된 문자열을 가져온다. |
언어파일에서 변수 사용하는 법
아래처럼 설정한 후, 호출할 때 변수를 전달한다.
{
"hello": "Hello, {name}",
"@hello": { // 사용되지 않는, 문자 설명용. 어디서 쓰는지 등등
"description": "Hello text"
},
"login": "Login"
}
Text(AppLocalizations.of(context)!.hello("철수"))
변수가 여러 개인 경우, 그냥 함수처럼 쓰면 된다.(특이하게도 변수명을 지정하는 방식으로는 안된다. 사용 이전에 변수명 지정해서 순서대로 입력하는 게 일반적.)