【Flutter】l10n 현지화(다국어 대응)에 대응

Flutter의 stable이 1.22.0으로 업데이트



1.22.0 업데이트와 함께 다국어 지원이 포함되었습니다.
그래서, 조속히 시험해 보았습니다.

공식 문서는 이쪽

완성 이미지는 이쪽



htps : // 기주 b. 코 m / 테츠키 ck / 사과 lf
App Store는 여기
Google Play 스토어는 여기

일본어판





영어 버전





인도네시아어 버전





STEP1: 플러그인 가져오기



pubspec.yaml에 다음을 추가합니다. pub get 을 실행할 때마다 다국어 대응의 파일이 자동 생성되게 됩니다.

pubspec.yaml
dependencies:
  flutter:
    sdk: flutter
  # Internationalization support.
  flutter_localizations:
    sdk: flutter
  intl: 0.16.1
  # the rest of your dependencies
flutter:
  # Adds code generation (synthetic package) support 
  generate: true

2단계: l10n.yaml 파일 생성



루트 바로 아래에 l10n.yaml를 만듭니다.
작성 후, 이하를 추기.

l10n.yaml
arb-dir: lib/l10n
template-arb-file: app_en.arb
output-localization-file: app_localizations.dart
arb-dir는 l10n 파일의 디렉토리를 지정합니다. 이 디렉토리에는 ".arb"형식의 파일이 들어 있습니다.
template-arb-file 응용 프로그램이 지원하는 모든 메시지와 각 메시지에 대한 설명을 정의하는 파일을 지정합니다. 이 파일은 arb-dir에 만들어야 합니다.
output-localization-file 응용 프로그램이 가져올 Dart 클래스 파일을 정의합니다.

3단계: 다국어 지원 파일 만들기



lib/l10n 아래에 .arb 형식의 파일을 생성합니다.

app_en.arb
{
  "@@locale": "en",

  "rate": "Rate",
      "@rate": {
        "description": "rate title label"
      },

  "player": "Player",
      "@player": {
        "description": "number of player label"
      },

  "shake": "Shake!!",
      "@shake": {
        "description": "start create random number"
      },

  "allowDuplicateNumber": "Allow duplicate number",
      "@allowDuplicateNumber": {
        "description": "Allow duplicate number"
      },

  "noServiceMessage": "Not compatible with Android.\nPlease wait for a while as it is currently under development.",
      "@noServiceMessage": {
        "description": "Not compatible with Android.Please wait for a while as it is currently under development."
      },

  "feedback": "Feedback",
      "@feedback": {
        "description": "feedback"
      },

  "privacyPolicy": "Privacy policy",
      "@privacyPolicy": {
        "description": "Privacy policy"
      }
}

app_en.arb
{
  "@@locale": "ja",

  "rate": "レート",
  "player": "プレイヤー数",
  "shake": "乱数生成",
  "allowDuplicateNumber": "重複を許可",
  "noServiceMessage": "Androidには対応しておりません。\n現在開発中のためしばらくお待ち下さい。",
  "feedback": "フィードバック",
  "privacyPolicy": "プライバシー・ポリシー"
}

app_id.arb
{
  "@@locale": "id",

  "rate": "menilai",
  "player": "Jumlah pemain",
  "shake": "Generasi acak",
  "allowDuplicateNumber": "Izinkan duplikasi",
  "noServiceMessage": "Tidak kompatibel dengan Android.\nHarap tunggu sebentar karena saat ini sedang dalam pengembangan.",
  "feedback": "Umpan balik",
  "privacyPolicy": "Rahasia pribadi"
}

위에서 만든 후에 flutter pub get 를 실행하여 파일을 자동으로 생성합니다.

STEP4: localization의 delegate



main.dart
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart'; // Add this line.

void main() {
 runApp(MyApp());
}

class MyApp extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
   return MaterialApp(
     // Add the `localizationsDelegate` and `supportedLocales` lines.
     localizationsDelegates: AppLocalizations.localizationsDelegates,
     supportedLocales: AppLocalizations.supportedLocales,
     home: MyHomePage(title: 'Flutter Demo Home Page'),
   );
 }
}


STEP5: 앱 내에서 사용



플러그인을 가져옵니다.
import 'package:flutter_gen/gen_l10n/app_localizations.dart';

String으로서 이하와 같이 취급할 수 있습니다.
AppLocalizations.of(context).privacyPolicy

좋은 웹페이지 즐겨찾기