앱을 만들다 보면 언젠가는 꼭 부딪히게 되는 요구사항이 있습니다. 바로 다국어 지원입니다. 한국어만 지원하는 앱이 아니라, 영어, 일본어, 스페인어 등 다양한 언어를 동시에 제공하는 앱을 만들고 싶어지는 순간이 오죠.
특히 글로벌 유저를 타깃으로 하는 서비스라면 앱의 첫 인상이 바로 언어에서 결정되기도 합니다. 그런데 언어가 바뀐다고 해서 앱 전체를 새로 만들어야 할까요? 다행히도 그럴 필요는 없습니다. 플러터에서는 intl이라는 공식 패키지를 활용해 비교적 간단하게 다국어 지원을 구현할 수 있습니다.
이번 글에서는 플러터에서 intl 패키지를 이용해 다국어 앱을 만드는 방법을 단계적으로 정리해보려 합니다. 개념뿐만 아니라 실제 예제 코드도 함께 제공하니, 여러분의 프로젝트에 바로 적용해 보셔도 좋을 거예요.
intl 패키지는 무엇이고 왜 필요한가요?
intl은 Internationalization(국제화)의 줄임말로, 플러터와 Dart에서 다국어 메시지 처리, 날짜·숫자 포맷 처리, 지역(locale) 설정 등을 도와주는 패키지입니다. 말 그대로 앱을 “다국어화”하기 위한 모든 기본 기능을 제공합니다.
예를 들어 화면에 “Hello” 대신 사용자의 언어 설정에 따라 “안녕하세요”, “Hola”, “こんにちは” 같은 문자열이 표시되도록 하려면, 언어별로 각각의 문자열을 저장하고, 이를 자동으로 불러와야 합니다. intl 패키지는 바로 이 과정을 구조적으로 지원해주는 도구입니다.
또한 단순히 번역만 처리하는 게 아니라, 날짜를 2024-06-01처럼 보여줄지, June 1, 2024로 보여줄지도 지역에 따라 다르게 설정할 수 있습니다. 숫자 표기, 통화 기호, 시간 형식까지도 포함되죠. 이런 모든 요소는 intl 패키지를 사용하면 코드 한 줄로 간단하게 현지화할 수 있습니다.
즉, intl은 단순한 문자열 교체 도구가 아니라, 앱을 글로벌하게 만들기 위한 인프라 도구라고 볼 수 있어요.
다국어 프로젝트 구조 만들기와 intl 설정 방법
intl 패키지를 사용해 다국어 기능을 구현하려면 먼저 플러터 프로젝트에서 다국어 메시지를 어디서 관리할지 구조를 정리해야 합니다. 일반적으로는 l10n이라는 폴더를 만들고, 그 안에 각 언어별로 사용할 ARB 파일을 저장합니다. 예를 들어 app_en.arb, app_ko.arb처럼 파일 이름에 언어 코드가 포함되도록 구성하는 것이죠.
이 ARB 파일(예: app_en.arb)은 JSON 형식으로 구성되며, 앱에서 사용할 텍스트를 키-값 쌍으로 정의합니다. 예를 들어 title이라는 키에 대해 영어로는 “Hello”, 한국어로는 “안녕하세요”라고 정의하는 식입니다.
그다음 flutter_localizations와 intl 패키지를 pubspec.yaml에 추가하고, MaterialApp에 다국어 관련 설정을 연결해줘야 합니다. 여기에는 앱이 지원할 언어 목록, 번역 클래스, 초기 언어 설정 등이 포함됩니다. 플러터는 빌드시 ARB 파일을 바탕으로 자동으로 AppLocalizations라는 클래스를 생성하고, 이를 통해 텍스트를 가져올 수 있게 해줍니다.
예제 코드를 보면 감이 딱 오실 거예요.
1. 패키지 설치
# pubspec.yaml
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
intl: ^0.18.0
2. 다국어 메시지 파일 작성
// lib/l10n/app_en.arb
{
"title": "Hello",
"greeting": "Welcome to our app!"
}
// lib/l10n/app_ko.arb
{
"title": "안녕하세요",
"greeting": "앱에 오신 것을 환영합니다!"
}
3. l10n.yaml 파일고 설정 정의
# project root에 생성
arb-dir: lib/l10n
template-arb-file: app_en.arb
output-localization-file: app_localizations.dart
4. MaterialApp에 다국어 설정 연결
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'generated/app_localizations.dart'; // 자동 생성된 파일
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Intl Demo',
localizationsDelegates: const [
AppLocalizations.delegate, // 생성된 로컬라이즈 클래스
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: const [
Locale('en'), // 영어 지원
Locale('ko'), // 한국어 지원
],
home: const HomePage(),
);
}
}
class HomePage extends StatelessWidget {
const HomePage({super.key});
@override
Widget build(BuildContext context) {
final t = AppLocalizations.of(context)!;
return Scaffold(
appBar: AppBar(title: Text(t.title)),
body: Center(child: Text(t.greeting)),
);
}
}
여기까지 완료하면, 기기의 언어 설정에 따라 앱이 자동으로 해당 언어로 표시됩니다. 만약 테스트 중 특정 언어로 강제로 실행하고 싶다면 locale: const Locale('ko')처럼 MaterialApp에 직접 언어를 지정할 수도 있습니다.
날짜, 숫자, 통화 포맷까지 현지화하는 방법
플러터에서 다국어를 구현할 때 단순히 텍스트만 번역하는 데 그치지 않고, 날짜 형식, 숫자 표기, 통화 단위까지도 사용자의 언어 설정에 맞게 표현하는 것이 중요합니다. 예를 들어 한국에서는 2024년 5월 24일이라고 표시하지만, 미국에서는 May 24, 2024로, 일본에서는 2024/05/24처럼 표기 방식이 다릅니다. 금액이나 숫자도 마찬가지죠.
이런 기능을 구현할 때 사용하는 도구가 바로 intl 패키지의 DateFormat, NumberFormat 클래스입니다. 이 클래스를 통해 현재 로케일(locale)에 맞춰 날짜와 숫자를 자동으로 포맷할 수 있습니다.
예를 들어 아래처럼 사용할 수 있습니다.
import 'package:intl/intl.dart';
final date = DateTime.now();
final formattedDate = DateFormat.yMMMMEEEEd('ko').format(date); // "2024년 5월 24일 금요일"
final currency = NumberFormat.currency(locale: 'en_US', symbol: '\$').format(15000); // "$15,000.00"
사용자의 locale은 BuildContext에서 얻을 수 있으므로, 앱 실행 시 자동 감지하거나 선택한 언어에 따라 동적으로 적용할 수 있습니다. 이런 세심한 현지화 포맷 처리는 사용자 경험을 훨씬 자연스럽고 고급스럽게 만들어 줍니다.
또한 다국어 테스트를 위해 flutter run --device-id= 명령어로 다양한 에뮬레이터에서 앱을 실행하거나, locale: const Locale('ja')처럼 강제로 언어를 지정해 테스트하는 방법도 유용하게 활용할 수 있습니다.
마치며...
플러터로 앱을 개발하다 보면 언젠가는 ‘이제 다국어도 해볼까?’ 하는 순간이 옵니다. 이때 intl 패키지는 매우 강력하고 직관적인 도구가 되어줍니다. 단순히 UI 텍스트만 바꾸는 것을 넘어 날짜, 숫자, 통화 등 다양한 정보를 로컬 환경에 맞게 표현함으로써, 우리는 더욱 ‘사용자 친화적인 앱’을 만들 수 있게 되죠.
글로벌한 사용자 기반을 가진 앱을 꿈꾸고 있다면, 다국어 지원은 더 이상 부가 기능이 아니라 서비스의 신뢰도와 완성도를 높여주는 필수 구성 요소입니다. 처음에는 설정이 복잡해 보일 수 있지만, 구조를 한 번 잡아두면 이후에는 번역 파일만 추가하면 되기 때문에 매우 효율적입니다.
이번 글을 통해 intl 패키지로 플러터에서 다국어 앱을 만드는 기본 개념과 흐름을 익히셨다면, 이제는 직접 프로젝트에 적용해보며 차근차근 익혀가 보세요. 언어는 다르지만 좋은 UX는 전 세계 어디서나 통합니다.
'IT' 카테고리의 다른 글
플러터, 테스트 앱 배포하기 (0) | 2025.05.30 |
---|---|
온라인 사무실에서 재택 근무하는 세상 (8) | 2025.05.27 |
인증과 보안, 엑세스 토큰과 리프레시 토큰 (0) | 2025.05.23 |
데이터베이스를 잘 만들기 위한 기초 지식 (2) | 2025.05.22 |
플러터, 서버리스 앱을 만들 때 주의할 점 (8) | 2025.05.21 |