💡

Flutter 多言語化を支援する Dart スクリプトを2つ作った話

に公開

はじめに

Flutter アプリを多言語対応する際、こんな悩みはありませんか?

  • 「あれ、この日本語文字列、ハードコードしたままだった...」
  • 「英語の翻訳キーはあるのに日本語版が抜けてる!」
  • 「リリース直前に多言語化漏れを発見...」

うっかりハードコードしてしまった日本語文字列や、ARB ファイル間のキーの不整合が発生するケースが考えられます。
規模が大きくなればなるほど手動でのチェックは非効率で、見落としは避けられません。

そこで今回は、これらの問題を自動で検出する2つのスクリプトを開発しました!

開発したスクリプト

1. 日本語ハードコード文字列検出スクリプト

  • ファイル: find_japanese_hardcoded_strings.dart
  • 機能: ひらがな・カタカナ・漢字を含む文字列リテラルを自動検出
  • 特徴: コメント内の日本語は除外、対象ディレクトリ指定可能

2. ARB キー整合性チェックスクリプト

  • ファイル: check_arb_keys.dart
  • 機能: 複数言語の ARB ファイル間でキーの整合性をチェック
  • 特徴: 不足キーの特定、言語固有キーの検出

デモアプリで体験

実際の動作を確認できるデモアプリも用意しました。

// lib/views/samples/sample_screen.dart(抜粋)
const Text('フルーツリスト'), // 検出される
Text('• りんご'),            // 検出される
Text('• ばなな'),            // 検出される
Text('• ぶどう'),            // 検出される

スクリプト 1: 日本語ハードコード文字列検出

主な機能

// 検出対象の設定
const defaultConfig = JapaneseDetectorConfig(
  targetDirectories: ['lib/views'],    // 検索対象
  excludePatterns: ['.g.dart'],        // 除外パターン
  includeComments: false,              // コメント除外
  l10nDirectory: 'lib/l10n',           // ARBディレクトリ
);

実行方法

dart run tools/find_japanese_hardcoded_strings.dart

実行結果

日本語ハードコード文字列検出スクリプトを開始します...

対象ディレクトリ: lib/views
既存のl10n文字列: 2件読み込み完了
対象Dartファイル: 1件

検出結果: 8件の日本語文字列が見つかりました

lib/views/samples/sample_screen.dart (8)
────────────────────────────────────────────────────────────
行19: 'ローカライゼーション ツール デモ'
   title: const Text('ローカライゼーション ツール デモ'),

行27: 'フルーツリスト'
   'フルーツリスト',

スクリプト 2: ARB キー整合性チェック

サンプル ARB ファイル

app_en.arb

{
  "@@locale": "en",
  "apple": "Apple",
  "grape": "Grape"
}

app_ja.arb

{
  "@@locale": "ja",
  "apple": "りんご",
  "banana": "ばなな"
}

実行方法

dart run tools/check_arb_keys.dart

実行結果

EN: 2個のキー
JA: 2個のキー

============================================================
合計キー数: 3

============================================================
言語別の不足キー:
============================================================

EN に不足している1個のキー:
  - banana

JA に不足している1個のキー:
  - grape

============================================================
一部の言語にのみ存在するキー:
============================================================

'banana':
  存在する言語: JA
  不足している言語: EN

'grape':
  存在する言語: EN
  不足している言語: JA

============================================================
詳細統計:
============================================================

EN 固有キー (1):
  - grape

JA 固有キー (1):
  - banana

まとめ

この2つのスクリプトで、

日本語ハードコードの箇所を検出でき、arbファイルでキーが統一されていない問題を解決出来るというお話でした!
今回説明したスクリプトとサンプルファイルは下記のリポジトリにあるので、興味がある方は見てみてください。
自分の環境にスクリプト入れるでもOKです。
ちなみにCIに組み込むというのもありだと思います。(freeプランだと2000時間が上限ですが)

ここまでみていただきありがとうございました!

https://github.com/tks-00/flutter_localization_tools/tree/main

Discussion