Introduction

忘備録。

やりたいのは Appごとの言語設定をサポートする方法 を Flutter で実現する方法だが、調べても全然情報が出てこない。
色々調べているうちにこうすればできるのでは?というある程度の知見が得られたのでメモしておく。

How to resolve?

必要なのは

  • アプリケーション及び iOS が複数言語をサポートしていること

である。

アプリケーションの多言語サポート

正確には、「私(アプリ)は○○語と○○語をサポートしてしています」という宣言であって、実際に多言語対応が完了している必要はない。
この宣言は Xcode の Localization の設定から実施する。

xcode
xcode
xcode
xcode

iOS の優先する言語サポート

言語と地域優先する言語 に表示させたい言語を追加する。

最低でもここに2つ以上の言語が存在しないと、アプリケーションの設定に 優先する言語 が表示されない。
さらに言えば、iOS 側に言語が追加されていても、アプリケーションが対応を宣言していなければ、アプリケーションの設定の言語一覧に表示されないのである。

アプリケーションの設定表示

上記までの設定を実施していれば、iOS の設定ページの下部にアプリケーション設定へのリンクが表示される。

大抵はカメラとかプッシュ通知を使っているアプリを作っているので、アプリケーションの設定が表示されているのが普通だが、それすらない場合は下記のように、設定へのリンクそのものがない。

優先する言語

そして、アプリケーションの設定を開くと、優先する言語 の項目が表示され、サポートしている言語が一覧に表示される。

選択された言語を取得

Flutter 側から選択言語を取得するには下記のようにする。

1
2
3
4
5
import 'package:flutter/material.dart';

final locale = WidgetsBinding.instance.platformDispatcher.locale;
// For example, en-US, ja-JP, en-JP, ja-US
final result = 'Current Preferred Language: ${locale.languageCode}-${locale.countryCode}'
  • languageCode
    • アプリケーションの設定の 優先する言語 で選択した言語名
  • countryCode
    • iOS の 言語と地域地域 で選択した国名

ここでいう言語名や国名は IANA 言語サブタグレジストリ にある、 language 及び region に対応する値である。
例えば、日本語の場合は ja、英語の場合は en である、
また、日本の場合は JP、アメリカの場合は US になる。