플러터:다중언어: 두 판 사이의 차이
보이기
| (같은 사용자의 중간 판 하나는 보이지 않습니다) | |||
| 7번째 줄: | 7번째 줄: | ||
=== 패키지 설치 === | === 패키지 설치 === | ||
다음과 같은 형태로.<syntaxhighlight lang="yaml"> | 다음과 같은 형태로. 기본 SDK에 포함된 패키지라 다운로드 없이 바로 적용된다.<syntaxhighlight lang="yaml"> | ||
dependencies: | dependencies: | ||
flutter: | flutter: | ||
| 47번째 줄: | 47번째 줄: | ||
MaterialApp( | MaterialApp( | ||
localizationsDelegates: AppLocalizations.localizationsDelegates, // AppLocalizations.of(context)를 동작 | |||
supportedLocales: AppLocalizations.supportedLocales, // 아래에서 강제 지정하면 없어도 되는데, 언어 자동 감지용 | |||
locale: settings.locale, // 사용자가 설정에 사용한 언어 강제 지정 | |||
)</syntaxhighlight> | )</syntaxhighlight> | ||
| 66번째 줄: | 59번째 줄: | ||
!비고 | !비고 | ||
|- | |- | ||
|클래스 정의. 로컬라이제이션 객체 | |클래스 정의. 로컬라이제이션 객체 가져오기. | ||
현재 locale에 맞는 객체를 반환한다. | |||
|final l10n = AppLocalizations.of(context)!; | |final l10n = AppLocalizations.of(context)!; | ||
| | | | ||
* 약어 규칙. l10n = localization 그냥 가운데 10자라서 10이다;; | * 약어 규칙. l10n = localization 그냥 가운데 10자라서 10이다;; | ||
* 느낌표는 null이 아님을 보장해야 한다는 의미. | * 느낌표는 null이 아님을 보장해야 한다는 의미. | ||
* context는 빌드에서 사용되는 | * context는 빌드에서 사용되는 BuildContext 객체. | ||
|- | |- | ||
|사용 | |사용 | ||
|Text(l10n .hello) | |Text(l10n.hello) | ||
|hello에 매칭된 문자열을 가져온다. | |hello에 매칭된 문자열을 가져온다. | ||
|} | |} | ||
| 87번째 줄: | 81번째 줄: | ||
}</syntaxhighlight>Text(AppLocalizations.of(context)!.hello("철수")) | }</syntaxhighlight>Text(AppLocalizations.of(context)!.hello("철수")) | ||
변수가 여러 개인 경우, 그냥 함수처럼 쓰면 된다.(특이하게도 변수명을 지정하는 방식으로는 안된다. 이전에 변수명 지정해서 순서대로 입력하는 게 일반적.) | 변수가 여러 개인 경우, 그냥 함수처럼 쓰면 된다.(특이하게도 변수명을 지정하는 방식으로는 안된다. 사용 이전에 변수명 지정해서 순서대로 입력하는 게 일반적.) | ||
2026년 3월 18일 (수) 01:57 기준 최신판
- 플러터:개요
- 플러터:실행
- 플러터:개념 잡기
- 권한 사용
- 위젯
- 플러터: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("철수"))
변수가 여러 개인 경우, 그냥 함수처럼 쓰면 된다.(특이하게도 변수명을 지정하는 방식으로는 안된다. 사용 이전에 변수명 지정해서 순서대로 입력하는 게 일반적.)