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