
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.xml
をID一致で突き合わせて登録。不一致は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
クイックスタート
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.xml
の ID一致でペアにして登録します。
同一 source_name
(XML: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/xml | EN/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から丸ごと消えます。取り込みし直せます。
コメント