はじめに
Flutterは、世界中のユーザーを対象とするアプリケーション開発に最適なフレームワークです。多言語化(国際化)は、異なる言語や地域のユーザーに対応するための重要な機能です。この記事では、Flutterアプリを多言語化する方法を初心者にもわかりやすく解説します。
多言語化とは?
多言語化(Internationalization, i18n)は、アプリケーションを複数の言語や地域に対応させるプロセスです。例えば、日本語、英語、フランス語など、ユーザーのデバイスの設定に応じて表示言語を切り替えられるようにします。
必要なパッケージ
Flutterでは、以下のパッケージを使用して多言語化を簡単に実現できます:
- flutter_localizations:Flutter SDKに組み込まれた多言語化のための公式ライブラリ。
- intl:国際化に必要な日付、数値、テキストフォーマットを提供。
- intl_utils:
arb
ファイルを使って多言語化データを効率的に管理。
pubspec.yamlに依存関係を追加
以下をpubspec.yaml
に記載してパッケージを追加します
YAML
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
intl: ^0.19.0
intl_utils: ^2.6.2
flutter:
# The following line ensures that the Material Icons font is
# included with your application, so that you can use the icons in
# the material Icons class.
uses-material-design: true
generate: true
その後、以下のコマンドでパッケージをインストールします
Bash
flutter pub get
MaterialAppに多言語化を有効化
FlutterアプリのエントリーポイントであるMaterialApp
にローカライゼーションを設定します。
main.dart
Dart
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter 多言語化',
localizationsDelegates: [
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: [
Locale('en', ''), // 英語
Locale('ja', ''), // 日本語
],
home: MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('多言語化サンプル'),
),
body: Center(
child: Text('こんにちは!'),
),
);
}
}
ポイント
localizationsDelegates
:Flutterがローカライズされたリソースを取得するためのデリゲートを設定。supportedLocales
:アプリがサポートする言語を定義。
intlとarbファイルを使用して翻訳データを管理
Flutterでは、intl
パッケージを利用して翻訳データを管理します。
arbファイルを作成
lib/l10n
ディレクトリを作成し、以下のようなintl_en.arb
とintl_ja.arb
ファイルを作成します。
intl_en.arb
JSON
{
"@@locale": "en",
"appTitle": "Flutter Localization",
"greeting": "Hello!"
}
intl_ja.arb
JSON
{
"@@locale": "ja",
"appTitle": "Flutter 多言語化",
"greeting": "こんにちは!"
}
intl_utilsでコードを自動生成
以下のコマンドを実行してコードを自動生成します
Bash
flutter pub run intl_utils:generate
これにより、lib/generated/l10n.dart
が生成されます。
コードで翻訳を使用
main.dart(更新)
Dart
import 'package:flutter/material.dart';
import 'generated/l10n.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: S.of(context).appTitle,
localizationsDelegates: [
S.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: S.delegate.supportedLocales,
home: MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(S.of(context).appTitle),
),
body: Center(
child: Text(S.of(context).greeting),
),
);
}
}
動作確認
アプリを再起動し、デバイスやエミュレーターの言語設定を変更して動作を確認します。
- 英語設定では “Hello!”
- 日本語設定では “こんにちは!”
技術選定のポイント
- 多言語化が必要な場合は必須:
- グローバル展開を想定するアプリでは、
flutter_localizations
やintl
は標準的な選択です。
- グローバル展開を想定するアプリでは、
- arbファイルの効率的な管理:
- 翻訳が多くなると、
intl_utils
のような自動生成ツールが役立ちます。
- 翻訳が多くなると、
- 日付や通貨フォーマットのローカライズ:
intl
パッケージを使うことで、日付や通貨も簡単にローカライズ可能です。
まとめ
Flutterの多言語化は、公式ライブラリを活用することで簡単に実現できます。この記事では、flutter_localizations
やintl
を使った基本的な多言語化の方法を解説しました。多言語化を実装することで、ユーザー体験を向上させ、アプリの魅力を高めましょう!
コメント