🦋

Flutter多言語化の更新

2024/05/12に公開

更新すること、いろいろ

まずはやってみよう的に一部だけ多言語化したアプリを
全面的に多言語化していく過程でやらなきゃならない、細々したこと。

arbファイルの更新

辞書ファイルを更新したら、 terminalで

flutter gen-l10n
flutter pub get

多言語化するページにはそれぞれ

import 'package:flutter_gen/gen_l10n/app_localizations.dart';

これがないと、AppLocalizationsがエラーになる。

constを外す

const Text(' ')   <-だったところを
Text(AppLocalizations.of(context)!.gameDialogB)  <-みたいに変更する。

constを外さないとエラーになる。
constが大枠で掛かっていて、中の一部だけを変更するなら、
大枠のconstを外して、変更しない各部分にconstを振り直す、という作業がいる。

テキストじゃなくても多言語化できる

言語によって画像を差し替えたいときは、arbファイルで画像のパスを指定する。

 "cover": "assets/images/cover_ja.png"

これで言語ごとに違う画像を表示できる。

初期値と初期状態が違ってしまう

言語選択ボタンの初期値を🇯🇵にしていたのだが、
Simulatorは前回終了時を記憶しているから、
Buttonは🇯🇵なのに、表示は英語、みたいなことが起こる。
なので、起動時に状態を読み込んでボタンの表示を変える機能を追加。
もちょっとシンプルに書けないのかと思うが、とりあえず。

  
  void initState() {
    super.initState();
    _loadLanguage();  // 起動時に言語設定を読み込む
  }

  void _loadLanguage() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    String? languageCode = prefs.getString('languageCode');

    // SharedPreferencesから言語が読み込めたら、それを使ってUIを更新
    if (languageCode != null) {
      setState(() {
        currentLanguage = languageCode;
      });
    }
  }

考え方を変える

多言語化を諦めた部分もある。
ゲームの答え合わせで正解数と不正回数を表示していた。

Text(
    '正解: $correctAnswer / 間違い: $incorrectAnswer',
    style: const TextStyle(fontSize: 18),
),

これと

AppLocalizations.of(context)!.gameDialogC

は共存できるか?
爺様に聞いたら、とんでもなくややこしいcodeを書いてきた。
しかもそれを実行すると、単語が長くてデザインが崩れる。
なのでここは、多言語化の逆、ユニバーサルデザインにする。
つまり絵文字(笑)

Text(
    '👍: $correctAnswer / 👎: $incorrectAnswer',
    style: const TextStyle(fontSize: 18),
),

日本人の発想力を活用しよう\(^O^)/

あ、こんなところにも文字列があった

みたいなのがボロボロ出てくる(>_<)
ま、一つ一つ潰していこう。

四次元年表

https://app.laporte.academy

三次元・四次元表示

https://tempo-spaco.web.app

四次元年表の使い方

https://www.youtube.com/@laporte_academy

Flutter大学

Discussion