【Flutter】国際化(i18n)はVSCodeのプラグインで簡単・楽勝!

Flutter

こんにちは。趣味グラマのNobu(@nm_aru)です。

相変わらず本業の忙しさから、個人開発が中々できず、ブログの更新もストップしてしまっていました。

このままではプログラミングから遠ざかってしまうので、今日は久しぶりに新規でFlutterアプリの開発に着手する事にしました。(以前に開発していたものは、一旦お蔵入り)

Flutterのコードを見るのも書くのも半年ぶりぐらいになってしまったため、ほぼ初心者状態に戻っているのですが、今度こそ何とかFlutterでアプリを1本リリースするところまで持っていきたいと考えています。

今回作ろうと思っているアプリは、日本に閉じた物じゃなくても良いと思ったので、まずはアプリの国際化(i18n)の部分について調査、実装したところについて備忘録として残そうと思います。

Flutterの国際化は難しい…?

調査するにあたって、まずは公式ドキュメントと思い、Flutterの公式サイトを確認します。

Internationalizing Flutter apps
How to internationalize your Flutter app.

何かやる事めっちゃある…。

後半にミニマムなやり方も書いてあるんだけど、これらを自分で実装しないといけないのは面倒くさい。

さてどうしようと思い、Googleで「Flutter i18n」でググると、いくつかある記事の中で、いつものようにmonoさんの記事が見つかる。(monoさんには本当に感謝)

記事を読む限り、公式ドキュメントを分かりやすく解説してくれてはいるが、やる内容は変わらないようだ。

monoさんですらやるのだからと、仕方なし公式ドキュメント&monoさんの記事を見ながら進めていたところ、.arbファイルを作成した時に、VSCodeが神のようなレコメンドをしてくれた。

VSCodeのプラグイン(Flutter Intl)を使えば国際化は楽勝!

.arbファイルを触るなら、こんなプラグインがあるよと勧めてくれたのが以下のプラグイン。(IntelliJやAndroid Studio向けにもある)

Flutter Intl - Visual Studio Marketplace
Extension for Visual Studio Code - Flutter localization binding from .arb files with official Intl library

何々と説明を見ると、国際化をめっちゃ楽にできそうな手順が書いてある!

大まかに手順だけ書くと(ドキュメントとは順番を少し入れ替えてます)

  1. VSCodeにプラグインをインストールする
  2. pubspec.yamlに必要なライブラリ書いてインストールする
  3. 「Flutter Intl: Initialize」で初期化する
  4. 「Flutter Intl: Add locale」で必要なロケールを追加する(ja_JPとか)
  5. iOS向けの設定をInfo.plistに書く
  6. コードを修正する

たったこれだけ!

1〜5は最初に1回やるだけなので、後は.arbに文言を追加していくだけ。

このプラグインの素晴らしいのは、ロケールを追加したり、.arbを編集すると「/lib/generated/」以下に作られたファイルを自動更新してくれるところ。

pubspec.yamlにオプションを書くことでカスタマイズ出来るので、私は以下の2つだけ指定しています。

.arbファイルの更新は手動で…

monoさんの記事で、BabelEditというツールが紹介されていた。

BabelEdit - Editor for JSON translation files for Angular & React
Edit your translation files in parallel. Supports Angular (ngx-translate), React (react-intl) and other frameworks that ...

便利そうではあるのだが、ライセンス料(1回きりだけど)が5,000円ほどかかるので、貧乏趣味グラマ的には、一旦手動で頑張る事に…。

まぁ、翻訳しないといけない文言数もそんなに多くならないはずなので、Google翻訳またはDeepLで地道にやろうかなと。(米中韓ぐらいの想定だし)

まとめ

国際化は、後からやろうとすると結構大変な分野なので、今回さくっとできたのは良かった。

プラグインの作者(会社)には感謝しかない。

公開目指して頑張るぞー。

コメント

タイトルとURLをコピーしました