Flutterで多言語対応をしていて、大概はcontextを使った以下のようなコードを配置することで多言語対応は完了する。

AppLocalizations.of(context)!.hello

ただ、いつでもcontextを取得できるとは限らない。

文字列生成のクラスなど、View層以外のクラスで多言語対応が必要なコードを書かないといけないことがある。

そんなときはWidgetsBinding.instance.platformDispatcher.localeでlocale情報を取得することができる。

書き方としてはこんな感じ。

String sample() {
  final locale = WidgetsBinding.instance.platformDispatcher.locale;
  if (locale.languageCode == 'ja') {
    return 'こんにちは';
  }

  return 'hello';
}

もともとはWidgetsBinding.instance.window.localeだったけど、こっちは現在はdeprecatedらしい。

最初、ChatGPTに聞いたらwindowの方を勧められた。

この記事の環境情報

  • Flutter 3.10.2