【Baldur’s Gate 3】MOD日本語化・翻訳作業補助ツール作った

BG3 の MOD を日本語化していると、

  • 統一された訳を作りづらい(固有名詞がそもそも多すぎる)
  • 固有名詞をひとつずつ探すのに手間がかかりすぎる
  • EN/JA の .loca.xml を突き合わせて辞書化するのが面倒

この辺を一気に解決するために、ローカル専用の翻訳補助ツールを作りました。
CSV/XML を SQLite + FTS5 にまとめ、高速検索候補照会一括エクスポートその場編集までワンストップです。LLM に渡す用の プロンプト挿入もUIからポチッと。

基本これとLLM(ChatGPTやGemini)を併用して効率よく翻訳していこうというものです。

目次

できること(ざっくり)

  • 検索(一覧):FTS5 ベースの高速検索。結果をその場で編集→保存(Ctrl+S)
  • 照会(LLM補助):用語リストを貼ると、Top-K 候補を返す。完全一致優先/単語境界もON/OFF可
  • エクスポート:結果を JSONL/TSV/CSV に。冒頭にプロンプトを自動挿入してコピペ or ダウンロード
  • プロンプト管理:複数テンプレをローカル保存(切替・既定化・削除)
  • XMLインポート:EN/JA の .loca.xmlID一致で突き合わせて登録。不一致はUIに詳細表示
  • ソース管理マルチ選択フィルタ同一ソースへの再インポートは置き換えUIから削除
  • 100%ローカル:FastAPI + SQLite(data/app.sqlite)。ネットワーク外へ出ません

仕組みと前提

  • UI:バニラ JS + CSS(軽量)
  • API:FastAPI(/search, /query, /entry, /import/xml, /sources
  • DB:SQLite + FTS5(bm25でスコア)
  • 既定で ブラウザ自動オープン(起動後に http://127.0.0.1:8000/ui/
  • Windowsは run_dev.bat / run_prod.bat から起動OK

クイックスタート

GitHub
GitHub - mattarilightcha/BG3-Translation-DB-Tool Contribute to mattarilightcha/BG3-Translation-DB-Tool development by creating an account on GitHub.

1) 仮想環境と依存関係

  1. リポジトリ取得 & 仮想環境
# Windows (PowerShell)
python -m venv .venv
.venv\Scripts\Activate.ps1
pip install --upgrade pip
pip install -r requirements.txt
# macOS / Linux
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
ビルドに失敗する場合

lxml について
requirements.txt に lxml が含まれていますが、本ツールは標準の xml.etree.ElementTree で動作します。
Windows で lxml のビルドに失敗する場合は、以下のいずれかで回避してください:

  • 事前ビルド版を入れる:pip install --only-binary=:all: lxml==5.2.2
  • あるいは requirements.txt の lxml==... 行を一時的にコメントアウトしてインストール(高速化機能を使わない方針)。

2) サーバ起動(自動でWeb UIが開きます)

    # 開発用(ホットリロード)
    .\run_dev.bat
    
    # 本番用(リロードなし)
    .\run_prod.bat

    または手動で:

    uvicorn api.main:app --reload
    # → http://127.0.0.1:8000/ui/

    使い方(各タブ)

    1. ソース選択(画面上部)

    ソース名のプルダウン+チェックで、検索/照会の対象を絞り込みできます。
    右端のゴミ箱ボタンそのソースだけDBから削除も可能(確認ダイアログ付き)。

    2. 検索(一覧)

    キーワード・件数・最小priorityで絞り込み。
    行右の編集保存で即反映(Ctrl+S可)。FTSも自動更新されます。

    • 列:ID / EN / JA / source / prio / score / 操作
    • 「表をTSVコピー」で手早く共有可。
      • プロンプト設定済みならTSVで冒頭にプロンプトが自動挿入された形でコピーされます。

    3. 照会(LLM補助)

    改行区切りで用語を貼り、Top-K最大抜粋長完全一致優先/単語境界min_priorityを設定。
    プロンプトテンプレを選んでおけば、コピー/保存時に自動で前置します。

    • 単語境界(英語のみ):FTSヒット後に \b 正規表現で厳密マッチ
    • 出力:JSONL / TSV / CSV(プロンプトを先頭に付加するかチェックで制御)

    4. プロンプト管理

    複数テンプレをローカル保存(localStorage)
    新規名前/本文保存既定にするで、照会タブからいつでも選択可能。

    5. XMLインポート(EN/JA)

    .loca.xmlID一致でペアにして登録します。
    同一 source_nameXML:EN|JA)で再取り込みした場合は置き換え(古い行は自動削除)になります。

    • 厳密モード(既定ON):EN/JAでID集合が完全一致していないと取り込み拒否
      → UIに 件数/差分サンプル(最大50件) を表示するので、どちらが不足しているか一目でわかります
    • 成功後は FTS再構築ソース一覧も自動更新

    API(抜粋)

    Method/Path説明
    GET /healthヘルスチェック
    GET /sourcesソース一覧(name と件数)
    DELETE /sources/{source_name}指定ソースを全削除(FTS再構築)
    GET /search?q=...&size=...&min_priority=...&sources=...FTS検索(フレーズ→0件なら語句)
    POST /query照会(Top-K 候補、完全一致優先、単語境界など)
    GET /entry/{id}行を取得(インライン編集用)
    PATCH /entry/{id}行を更新 → FTS差し替え
    POST /import/xmlEN/JA の .loca.xml をインポート(strict/replace_src あり)

    運用Tips

    • priority:小さいほど“強い訳”として扱いやすい。照会/検索の min_priority とセットで運用
    • ソース名:MOD別・生成元別に分けると整理しやすい(例:BG3 Official / XML:HomebrewSpellsLoca EN|JP
    • バックアップ:辞書は data/app.sqlite。このファイルをコピーしておけば復元OK
    • 再取り込み:同じソース名で取り込むと置き換え(重複しない)

    よくある質問

    Q. 検索しても何も出ない
    A. ソースフィルタで対象が0件になっていないか確認。インポート直後はFTS再構築待ちの可能性あり(UIに完了が出ます)。

    Q. インポートで失敗する
    A. 厳密モードでは EN/JA のID集合が完全一致している必要あり。UIのエラーメッセージに only_in_en / only_in_ja のサンプルID が出るので、欠けている側を修正して再実行してください。

    Q. 既存ソースを消したい
    A. ソース選択メニュー右端の🗑️で削除。確認のあとDBから丸ごと消えます。取り込みし直せます。

    この記事が気に入ったら
    フォローしてね!

    コメント

    コメントを投稿する

    目次