💆

【Flutter】多言語のデータをより簡単に管理・生成できるPythonプログラムを作成してみた

に公開

こんにちは、laughtaoneです。
Flutter学習中に備忘録として書いていますので、正確な情報でない可能性もありますのでご了承ください。

Flutterを多言語に対応させるために flutter_localizationsintl を使用する場合、ARBファイルを生成すると思いますが、このARBファイルの生成って言語ごとに用意しないといけないので、かなり面倒ですよね。

そこで、1つのJSONファイルから、指定した言語のARBファイルを生成するPythonプログラムを作成してみました。その利用方法をご紹介します。

多言語対応

まず、Flutterアプリ自体を多言語に対応させます。

詳細は、下記リンクから他の方の記事を参考にしてみてください。
https://zenn.dev/amuro/articles/27799da3afc40e

そして、多言語に対応させるにあたり、例えば、日本語と英語と韓国語の3言語に対応させる場合、app_en.arbapp_ja.arbapp_kr.arb の3言語のコードを生成していると思います。

ですが、それぞれの言語のファイルで、辞書のキーを書くのは大変面倒だと思います。

そこで、1つのJSONファイル内で、次の構造で書くだけで、それぞれの言語のarbファイルが生成できるPythonプログラムを作成しました!

{
    "キー": {
        "ja": "日本語のテキスト",
        "en": "英語のテキスト",
        "kr": "韓国語のテキスト"
    },
    ...
}

多言語のデータをより簡単に管理・生成

ここからは早速、多言語のARBファイルを簡単に生成する方法を紹介していきます。

1. Pythonプログラムの準備

まず、次のリンクからGitHubリポジトリに飛び、クローンします。

https://github.com/laughtaone/generate_flutter_l10n_arb

(お試しだけなら、次のGoogle Colabリンクから試せますが、以降の手順とは少し異なります。)
https://colab.research.google.com/drive/165qGeDrpurgW9w4DsPxOWzrVP4KNFsaz?usp=sharing

2. データの準備

original_data.json に多言語データを準備します。

次のような構造で書いていきます。

{
    "キー": {
        "ja": "日本語のテキスト",
        "en": "英語のテキスト",
        "kr": "韓国語のテキスト"
    },
    ...
}

まず、外側の大きな辞書のキーに、AppLocalizations.of(context)!.XXXXXX に当たる名前を書きます。

次に、そのキーに対応する値にさらに辞書を設定し、その辞書内のキーに言語コード値にその言語での表記を入力します。

3. ARBファイルの生成

original_data.json に多言語データが準備できたら、Pythonプログラムを実行します。

実行コマンドは環境によって異なる場合がありますが、クローンしたディレクトリにいることを確認して、Mac環境の私の場合は次のコマンドを実行します:

python3 main.py

そして、実行結果に「✅ ARBファイルが生成されました。」と表示されれば成功です。

同じディレクトリ下に、新しく outputディレクトリが作成され、その中に「app_言語コード.arb」(言語コードは任意の言語コード) が生成されます。

そして、例として「app_en.arb」の中身を見てみると、きちんとしたARBファイルが生成されていることが確認できます。

これを Flutterプロジェクトディレクトリ/lib/l10n 内に、移動orコピペ して、Flutterプロジェクトディレクトリ下で次のコマンドを実行すれば、多言語ファイルを簡単に生成できたことが実感できると思います。

flutter gen-l10n

まとめ

このようにして、多言語対応に必要なARBファイルの生成を簡単にすることができます。

もっと簡単な方法があったら、ぜひ教えてください!

Discussion