본문으로 이동

플러터:다중언어: 두 판 사이의 차이

학교의 모든 지식. SMwiki
잔글편집 요약 없음
 
(같은 사용자의 중간 판 2개는 보이지 않습니다)
4번째 줄: 4번째 줄:
<code>flutter_localizations</code> + <code>intl</code> + ARB 파일 구조로 만드는 것이 공식.
<code>flutter_localizations</code> + <code>intl</code> + ARB 파일 구조로 만드는 것이 공식.


== 사전 작 ==
= 사전 준비 =


=== 패키지 설치 ===
=== 패키지 설치 ===
다음과 같은 형태로.<syntaxhighlight lang="yaml">
다음과 같은 형태로. 기본 SDK에 포함된 패키지라 다운로드 없이 바로 적용된다.<syntaxhighlight lang="yaml">
dependencies:
dependencies:
   flutter:
   flutter:
47번째 줄: 47번째 줄:


MaterialApp(
MaterialApp(
  localizationsDelegates: const [
    localizationsDelegates: AppLocalizations.localizationsDelegates, // AppLocalizations.of(context)를 동작
    AppLocalizations.delegate,
     supportedLocales: AppLocalizations.supportedLocales, // 아래에서 강제 지정하면 없어도 되는데, 언어 자동 감지용
     GlobalMaterialLocalizations.delegate,
     locale: settings.locale, // 사용자가 설정에 사용한 언어 강제 지정
    GlobalWidgetsLocalizations.delegate,
     GlobalCupertinoLocalizations.delegate,
  ],
  supportedLocales: const [
    Locale('en'),
    Locale('ko'),
  ],
)</syntaxhighlight>
)</syntaxhighlight>
= 사용 =
{| class="wikitable"
|+
!과정
!사용
!비고
|-
|클래스 정의. 로컬라이제이션 객체 가져오기.
현재 locale에 맞는 객체를 반환한다.
|final l10n = AppLocalizations.of(context)!;
|
* 약어 규칙. l10n = localization 그냥 가운데 10자라서 10이다;;
* 느낌표는 null이 아님을 보장해야 한다는 의미.
* context는 빌드에서 사용되는 BuildContext 객체.
|-
|사용
|Text(l10n.hello)
|hello에 매칭된 문자열을 가져온다.
|}
=== 언어파일에서 변수 사용하는 법 ===
아래처럼 설정한 후, 호출할 때 변수를 전달한다.<syntaxhighlight lang="json">{
  "hello": "Hello, {name}",
  "@hello": {  // 사용되지 않는, 문자 설명용. 어디서 쓰는지 등등
    "description": "Hello text"
  },
  "login": "Login"
}</syntaxhighlight>Text(AppLocalizations.of(context)!.hello("철수"))
변수가 여러 개인 경우, 그냥 함수처럼 쓰면 된다.(특이하게도 변수명을 지정하는 방식으로는 안된다. 사용 이전에 변수명 지정해서 순서대로 입력하는 게 일반적.)

2026년 3월 18일 (수) 01:57 기준 최신판

틀:플러터 Dart:개요 플러터에 대한 지식 분류

  1. 플러터:개요
    1. 플러터:VSCode
    2. 플러터:안드로이드 스튜디오
  2. 플러터:실행
  3. 플러터:개념 잡기
    1. 플러터:화면 하나 만들기
    2. 플러터:변하는 화면(StatefulWidget)
    3. 플러터:화면 전환(화면 쌓기, 하단 네비게이션 바)
    4. 플러터:화면 전환(Drawer)
    5. 플러터:입력 관련
      1. 플러터:버튼
      2. 플러터:키보드 입력
      3. 플러터:슬라이더
    6. 플러터:그래프 그리기(fl chart)
    7. 플러터:데이터 저장(간단한 데이터)
    8. 플러터:인증(Firebase 인증)(미완)
    9. 플러터:인증(OAuth2)(미완)
    10. 플러터:푸시 알람(FCM)(미완)
  4. 권한 사용
    1. 플러터:마이크 입력
  5. 위젯
    1. 플러터:아이콘
    2. 플러터:레이아웃 계열 위젯
    3. 플러터:네비게이션 계열 위젯
    4. 플러터:버튼
    5. 플러터:상태관리(미완)
  6. 플러터:DB연결
    1. 플러터:HIVE
    2. 플러터:Firebase(미완)
    3. 플러터:MySQL(미완)
  7. 디자인
    1. 플러터:테마
    2. 플러터:앱바
  8. 편의
    1. 플러터:다중언어
  9. 플러터:배포
    1. 플러터:배포(안드로이드)(미완)
    2. 플러터:배포(iOS)(미완)
  10. 플러터:참고자료
  11. 플러터:위젯
    1. 플러터:공간배치용 위젯
  12. 플러터:구글 AdMob(미완)
  13. 플러터:라이브러리
    1. 플러터:logger

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)!;
  • 약어 규칙. l10n = localization 그냥 가운데 10자라서 10이다;;
  • 느낌표는 null이 아님을 보장해야 한다는 의미.
  • context는 빌드에서 사용되는 BuildContext 객체.
사용 Text(l10n.hello) hello에 매칭된 문자열을 가져온다.

언어파일에서 변수 사용하는 법

[편집 | 원본 편집]

아래처럼 설정한 후, 호출할 때 변수를 전달한다.

{
  "hello": "Hello, {name}",
  "@hello": {   // 사용되지 않는, 문자 설명용. 어디서 쓰는지 등등
    "description": "Hello text"
  },
  "login": "Login"
}

Text(AppLocalizations.of(context)!.hello("철수"))

변수가 여러 개인 경우, 그냥 함수처럼 쓰면 된다.(특이하게도 변수명을 지정하는 방식으로는 안된다. 사용 이전에 변수명 지정해서 순서대로 입력하는 게 일반적.)