イラスト英熟語 v1.1.4 韓国語対応!flutter gen-l10nで国際化しました

目次

はじめに

「英熟語を覚えにくい」というユーザーのために作ったイラスト英熟語アプリ。今回はいよいよ韓国語対応(v1.1.4)を実装しました。

英熟語アプリは英語圏のユーザーには不要なので、韓国語・中国語圏を対象にした国際化を進めることにしました。

作業内容

① 500問の韓国語翻訳

まず最大の作業、500問分のJSONデータの翻訳です。

翻訳が必要な項目は各熟語の:

  • meaning(意味)
  • origin(由来)
  • usage(使い方)
  • example(例文)
  • choices(選択肢4つ)

500問 × 5項目 = 2500箇所の翻訳が必要でしたが、ChatGPTを活用して効率化しました。

手順:

  1. Pythonスクリプトでidioms.jsonを20問ずつ25ファイルに分割
  2. ChatGPTに1ファイルずつ翻訳依頼
  3. 翻訳完了後、Pythonスクリプトで1つのidioms_ko.jsonに結合

分割スクリプト:

import json

with open('assets/data/idioms.json', 'r', encoding='utf-8') as f:
    data = json.load(f)

idioms = data['idioms']
chunk_size = 20

for i in range(0, len(idioms), chunk_size):
    chunk = idioms[i:i+chunk_size]
    filename = f'chunk_{i//chunk_size + 1:02d}.json'
    with open(filename, 'w', encoding='utf-8') as f:
        json.dump({"idioms": chunk}, f, ensure_ascii=False, indent=2)

意外と早く、2時間ほどで500問の翻訳が完了しました!

② flutter gen-l10nでUIテキストを国際化

UIのテキスト(ボタンラベルや画面タイトルなど)はflutter gen-l10nを使って正式な方法で国際化しました。

手順:

  1. pubspec.yamlに追加:
dependencies:
  flutter_localizations:
    sdk: flutter
  intl: ^0.20.2

flutter:
  generate: true
  1. l10n.yamlをプロジェクトルートに作成:
arb-dir: lib/l10n
template-arb-file: app_ja.arb
output-localization-file: app_localizations.dart
  1. lib/l10n/app_ja.arbとlib/l10n/app_ko.arbを作成して翻訳テキストを記述
  2. flutter gen-l10nを実行するとapp_localizations.dartが自動生成されます
  3. 各画面でAppLocalizations.of(context)!を使ってテキストを取得

③ 言語に応じたJSONファイルの切り替え

デバイスの言語設定を取得して、読み込むJSONファイルを切り替えます:

Future<void> loadIdioms({Locale? locale}) async {
  final String langCode = locale?.languageCode ?? 'ja';
  final String fileName = langCode == 'ko'
      ? 'assets/data/idioms_ko.json'
      : 'assets/data/idioms_ja.json';
  final String jsonString = await rootBundle.loadString(fileName);
  // ...
}

作業時間

驚いたことに、2日間で韓国語対応が完成しました!

最初は「500問の翻訳なんてとんでもない作業量では?」と心配していましたが、ChatGPTを活用することで思ったより遥かに短時間で完了できました。

おわりに

次は中国語対応を予定しています。今回の経験があるので、さらにスムーズに進められると思います。

審査通過を祈りつつ、引き続きイラスト英熟語をよろしくお願いします!

目次