1. 패키지 설치

flutter pub add easy_localization

https://pub.dev/packages/easy_localization

 

 

2. pubspec.yaml 수정

dependencies:
  flutter:
    sdk: flutter
  easy_localization: <last_version>

flutter:
  assets:
    - assets/translations/

 

 

3. 다국어 파일 작성

en-US.json

{
  "lbl_home": "Home",
  "lbl_members": "Members",
  "lbl_myInfo": "My Page",
  "lbl_addPhoto": "Add Photo",
  "lbl_phoneNo": "Phone Number",
  "lbl_confirm_user": "Customer Verification",
  "lbl_noImage": "No Image",

  "btn_yes": "Yes",
  "btn_no": "No",
  "btn_save": "Save",
  "btn_cancel": "Cancel",
  "btn_confirm": "Confirm",

  "msg_noUser": "No Customers",
  "msg_noPhoto": "No Photos",
  "msg_exists_user": "Existing Customer",
  "msg_new_user": "New Customer",

  "vld_phoneNo": "Please enter Phone No."
}

ko-KR.json

{
  "lbl_home": "홈",
  "lbl_members": "고객 목록",
  "lbl_myInfo": "마이페이지",
  "lbl_addPhoto": "사진추가",
  "lbl_phoneNo": "핸드폰 번호",
  "lbl_confirm_user": "고객확인",
  "lbl_noImage": "사진 없음",

  "btn_yes": "예",
  "btn_no": "아니오",
  "btn_save": "저장",
  "btn_cancel": "취소",
  "btn_confirm": "확인",

  "msg_noUser": "등록된 고객이 없습니다.",
  "msg_noPhoto": "등록된 사진이 없습니다.",
  "msg_exists_user": "기존고객",
  "msg_new_user": "신규고객",

  "vld_phoneNo": "핸드폰 번호를 입력하세요."
}

 

 

4. iOS에서 작동을 하기 위해서 ios/Runner/Info.plist 수정, Android용 AndroidManifest.xml은 수정 필요없다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
...
	<!-- easy_localization -->
	<key>CFBundleLocalizations</key>
	<array>
		<string>en</string>
		<string>ko</string>
	</array>
...
</dict>
</plist>

 

 

5. 다국어 파일 작성

import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';


void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // for Localization
  await EasyLocalization.ensureInitialized();

  runApp(
    EasyLocalization(
      supportedLocales: const <Locale>[Locale("en", "US"), Locale("ko", "KR")],
      // Language file Path
      path: "assets/translations",
      // initialization language
      //startLocale: const Locale("ko", "KR"),
      // fallback language of initialization language
      fallbackLocale: const Locale("en", "US"),
      child: const Main(),
    ),
  );
}

class Main extends StatelessWidget {
  const Main({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      // for Language
      localizationsDelegates: context.localizationDelegates,
      supportedLocales: context.supportedLocales,
      locale: context.locale,

      home: const MainList(),
    );
  }
}
Text('lbl_home').tr() // Text widget
print('lbl_home'.tr()); // String
var title = tr('lbl_home') // Static function