2.13.4経緯FlutterでLocalizationする際、公式が出しているintlを導入することが多い思うが、自分が調べて行った際にサイト毎で微妙に手順が違っていて混乱したので、次から迷わないようにまとめておこうと思った次第。日時や数字等をLocalizationするためのパッケージ記事作成時点では0.17.0が最新。必要に応じてversionは書き換え。getを叩き、パッケージをプロジェクトに取り込む。l10n.yamlを作成Flutterプロジェクトのrootにl10n.yamlを作成する。以下の記述は、自分用に変更等を加えているので、後述の説明とともに適宜書き換えて保存。コードを合成パッケージ(?)として生成するかプロジェクトの指定フォルダに生成するかどうかdefault値は、truetrueの時、合成パッケージを生成するらしいが、使ったことないのでわからない。app_en.arbに記述arbは、JSONとほぼ同じ記述形式になっている。gen-l10nを叩いて、Localizationのコードを生成する。ここまでで記述や作成位置に問題なければ、l10n.yamlの内容を元にLocalizationファイルが生成される。MaterialAppに記述追加MaterialAppのlocalizationsDelegates及びsupportedLocalesを記載する。その際、生成したコードのimportも忘れずに行う。WidgetのdelegatesupportedLocalesを元に、Localizationの処理周りを担うlocalizationsDelegatesを記載する時、supportedLocalesも必須となる。Localizationで生成されたコードの適用L10n.of(context)でinstanceを作ってLocalizeKeyを呼ぶことでLocalizationされたテキストが呼ばれる。自動生成されるコードは差分がでやすく、コミット対象に不向きなため、.gitignoreに記述してコミットから除外する。analysis_options.yamlから除外(lintを使っている人のみ対象)自動生成されるコードをlintに対象すると、修正できないwarningやerrorが出ることもあるためlintから除外する。iOSプロジェクトで言語追加XcodeでこのFlutterプロジェクトのiosフォルダにあるRunner.xcworkspaceを開く。左のカラムでInfo.plistを選択し、LocalizationsKeyにJapaneseを追加する。(LocalizationsKeyがない時は、+を押してKey自体を追加する。l10n.yamlに追記アプリでLocalizeに端末の言語が対応していない時、英語がLocalizeされていれば、英語がデフォルト言語となるようだ。英語がLocalizeされていない時は、何が基準でデフォルト言語になっているか動作確認等してみたものの不明。MaterialAppに記述追加MaterialAppにlocaleResolutionCallbackを追加する。callback処理内で、Localizeしている言語(supportedLocales)に端末言語(locale)が含まれているか確認する。instanceを生成して比較。含まれていれば、そのlocaleをそのまま返す。含まれていなければ、supportedLocalesの最初にあるlocaleを返す。アプリ起動時の端末言語の優先度が1番高いものが来る。Localizeには本記事の方法では対応しきれないことが出てくると思われる。en_USとen_UKをそれぞれLocalizeする方法は、また別途調査して書ければと思う。参考にしたページhttps://flutter.dev/docs/development/accessibility-and-localization/internationalizationhttps://pub.dev/packages/intlhttps://zenn.dev/ga_ku/articles/1ca06e77125e22aryzaearyzaeバッジを贈って著者を応援しようバッジを受け取った著者にはZennから現金やAmazonギフトカードが還元されます。2023/06/20ちょうど知りたかったことが知れました。Proよくある質問LinksX(Twitter)GitHubメディアキットLegal利用規約プライバシーポリシ。