🙆‍♀️

【Flutter】多言語対応(Flutter Intlプラグイン)

2022/02/17に公開
2

この記事について

今回はFlutter Intlというプラグインを勉強しました。
こちらのプラグインを導入して、単語を登録すると、スマホの言語設定によってテキストを出し分けてくれるプラグインです!
設定が少し長かったので、メモとして残しておきます。

この記事を見られて
・ここ間違ってるよ!
・こうした方がいいよ!
・この説明がわかりにくい!
などありましたらお気軽にコメントください!

使用する環境

  • Android Studio Arctic Fox | 2020.3.1 Patch 4
  • macOS Monterey version12.1

参考にしたサイト

https://plugins.jetbrains.com/plugin/13666-flutter-intl
https://localizely.com/flutter-localization-workflow/

1. プラグインのインストール

  1. Android Studioの設定を開く
    Android Studio | Preferences | Plugins
  2. 検索窓でFlutter Intlと検索し、インストール
    (上のタブがMarketplaceになっているか確認)
  3. Restart IDEと出てくるので押して、Android Studioを再起動する
  4. 再起動後、メニューバーのToolsを開き、Flutter Intlがあれば完了

2. Flutter Intlを初期化する

  1. Tools | Flutter Intl | Initialize for the Projectを実行

3. flutter_localizationsパッケージをインストール

  1. pubspec.yamlファイルにflutter_localizationsを追加
pubspec.yaml
 dependencies:
   flutter:
     sdk: flutter
+  flutter_localizations:
+    sdk: flutter
  1. ターミナルでflutter pub getを実行
flutter pub get
  1. 先ほどまで表示されていたgeneratedフォルダのエラーが消えていれば完了

4. main.dartに設定

  1. main.dartMaterialAppに追記
main.dart
// import一部省略
+ import 'generated/l10n.dart';
+ import 'package:flutter_localizations/flutter_localizations.dart';

 void main() => runApp(MyApp());
 
 class MyApp extends StatelessWidget {
   const MyApp({Key? key}) : super(key: key);
 
   
   Widget build(BuildContext context) {
     return MaterialApp(
       title: "ローカライズのやり方",
+      localizationsDelegates: [
+        S.delegate,
+        GlobalMaterialLocalizations.delegate,
+        GlobalWidgetsLocalizations.delegate,
+        GlobalCupertinoLocalizations.delegate
+      ],
+      supportedLocales: S.delegate.supportedLocales,
       home: HomeScreen(),
     );
   }
 }

5. 変換したい言語や単語を設定

  1. 変換したい言語のarbファイルを作成する
    メニューバーのTools | Flutter Intl | Add Localeを開く

    Add New Localejaと入力しOKをクリック
    lib/generated/l10nフォルダにintl_ja.arbが作成される
  2. 作成したファイルに変換したい単語を登録する
    intl_ja.arbに日本語
    intl_en.arbに英語を登録します。
intl_ja.arb
{
  "title": "テストアプリ",
}
intl_en.arb
{
  "title": "Test App",
}
  1. 先ほど設定したtitleを使用してみる
home_screen
// import省略

class HomeScreen extends StatefulWidget {
  const HomeScreen({Key? key}) : super(key: key);

  
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
+        child: Text(S.of(context).title),
      ),
    );
  }
}
  1. エミュレーターで表示確認
    エミュレーターの言語設定が日本語の場合はテストアプリと表示され、言語設定を英語に変更して再度確認するとTest Appと表示が変わっていれば完了

6. iOSで表示させる設定

  1. Xcodeを開く
    iosフォルダを右クリック
    Flutter | Open iOS module in Xcodeをクリック
  2. 左側のタブのRunner/Runner/Infoをクリック
  3. Information Property Listにマウスカーソルを合わせると右側にが現れるのでクリック
  4. Localizationsと入力してEnter
  5. Localizationsの左側にある>をクリック
  6. Item 0にマウスカーソルを合わせると右側にが現れるのでクリック
  7. Item 1が生成されるので右側のValueJapaneseと入力
  8. エミュレーターで確認
  9. 言語設定を日本語、英語に変更し、変わっていれば完了

おわりに

以上で設定が終わりました!
簡単にAndroidもiOSも多言語対応ができるのがやっぱりFlutterの良いところなのかなと思いました!
冒頭にも書きましたが、何かあればコメントしてやってください🙇🏻‍♂️
また何か調べたり実装したらアウトプットしていきます!

Discussion

mqkotoomqkotoo

参考になります!この記事を見て多言語対応していたのですが、
現在(2023/02/03、6のステップをやらなくても、iOSシュミレーターでは言語切り替えができていたのですが、実機で見るとならないとかそういうことですかね。。

なみおなみお

ありがとうございます!
6のステップやらなくても大丈夫そうですね🤔
実機でも試しましたが問題なく表示できましたのでご安心ください!