Open3
【多言語対応/i18n】文章のリアルタイム翻訳について📝

【React/Next.js】多言語対応 i18n の実装について

事例:Notta の文字起こし文章リアルタイム翻訳📝

AIが生成したテキストを多言語化する場合のやり方📝
リアルタイムで AI が生成したテキストを多言語化する場合、
「どこで翻訳モデルを動かすか/どうやってストリームを流すか」 を軸に技術を選ぶと設計がラクになります。
下記では
- 翻訳エンジンの選択肢
- 低レイテンシの配信アーキテクチャ
- 実装スタックの具体例
- 品質・運用面のポイント の順でまとめます。
1. 翻訳エンジンの主な選択肢
種類 | 代表サービス/ライブラリ | 長所 | 注意点 |
---|---|---|---|
マネージド API | Google Cloud Translation, DeepL API, Azure AI Translator | 高精度・Glossary対応・スケーラブル | 従量課金、要求に応じてストリーミング対応を確認 |
LLM ベース | OpenAI GPT-4o Realtime API/Chat Completions(翻訳も可)(nypost.com) | 生成元 LLM と同一 API で翻訳も可能、WebSocket で低遅延 | トークン単価・同時接続制限に注意 |
OSS 自前ホスト | LibreTranslate(Argos Translate) | コスト固定・オフライン運用可 | 精度は商用 API に劣ることも。GPU が欲しい |
ブラウザ内推論 | Transformers.js + M2M-100/NLLB | 完全クライアントサイド、PWA でも動く | WebGPU/WASM 対応端末のみ。モデル容量・メモリ |
選定の指針
- 1 桁秒以内の遅延が許容範囲ならクラウド API で十分。
- 500 ms 以下を狙う場合は GPT-4o Realtime や WebSocket ストリームが便利。
- オフライン対応・機密保持が最優先なら OSS or Edge 推論。
2. 低レイテンシ配信アーキテクチャ
2.1 ストリーミングパイプライン
-
LLM からトークンストリームを取得(例: OpenAI ChatCompletions の
stream=true
)。 -
適当なチャンクサイズで区切り、翻訳 API へ非同期リクエスト。
-
訳文チャンクを WebSocket/SSE でフロントに push。
- React 側ではカスタムフックでバッファリングし、UI に逐次描画。
2.2 メッセージング技術
- Socket.IO は WebSocket + フォールバックを提供し実装が簡単。
- 既存インフラで Kafka / PubSub があるならバックエンド間のストリームに流し、フロントへは Ably や Cloud Run SSE をブリッジ。
- 軽量に収めたい場合は純粋な Server-Sent Events (SSE) でも十分。
3. 実装スタック例(Node.js + React)
サーバー側(Express + Socket.IO)
import express from 'express';
import { Server } from 'socket.io';
import { translateText } from './translator'; // 切り替え可能な薄いラッパ
const app = express();
const httpServer = app.listen(3000);
const io = new Server(httpServer, { path: '/ws' });
io.on('connection', socket => {
socket.on('ai-chunk', async ({ id, text }) => {
const translated = await translateText(text); // 非同期翻訳
socket.emit('translated-chunk', { id, translated });
});
});
-
translateText
内で Google/DeepL/GPT-4o などにスイッチ。 - 同時リクエスト数を p-limit 等で制御し、API レートを超えないようにする。
フロント側(React)
const { t } = useTranslation(); // i18next
const [chunks, setChunks] = useState<string[]>([]);
useEffect(() => {
const socket = io('/ws');
socket.on('translated-chunk', ({ translated }) =>
setChunks(prev => [...prev, translated]));
return () => socket.disconnect();
}, []);
return <p>{chunks.join('')}</p>;
- UI の翻訳キーは react-i18next で国際化。
- AI 生成テキストは上記 Socket で逐次流し込む。
4. 品質・運用のチェックリスト
項目 | 具体策 |
---|---|
用語統一 | Google の Glossary / DeepL 用語集を併用 |
キャッシュ | 同一文の翻訳結果を LRU に保持し API コール削減 |
ポストエディット | 高価値コンテンツは人手校正フラグを付ける |
コンテキスト保持 | チャンク翻訳では文脈欠落が起きやすい。文末判定や「sentencepiece」レベルで区切る |
スイッチング | 障害時は LibreTranslate へフェイルオーバー (OSS) |
プライバシー | 送信前に個人情報をマスクし、API 送信ログを暗号化 |
5. コストとパフォーマンスの目安
エンジン | 料金感 | 平均レイテンシ |
---|---|---|
Google Translation Basic | 0.02 USD/1k 文字 | ≈ 300 ms |
DeepL Pro | 0.00002 €/char | ≈ 250 ms |
GPT-4o Realtime | 5 USD/1M text tokens | 140–180 ms |
LibreTranslate (自前 GPU) | サーバー維持費のみ | 80–120 ms (ローカル) |
数値は 1 kB の短文を東京リージョンから測定した参考値。
まとめ
- クラウド API × Socket.IO が最も実装が早く、99 % のユースケースで十分。
- レイテンシを劇的に下げたい・会話系なら GPT-4o Realtime WebSocket が有力。
- オフラインや機密保持が必須なら LibreTranslate か Transformers.js(WebGPU) を組み合わせてエッジ推論。
- UI は
react-i18next
で通常文言を管理し、AI 生成文は 翻訳ストリームとして別レイヤーで扱うとスケールする。
このあたりをベースに、要件(速度・コスト・守秘)に合わせてエンジンを差し替える構成がおすすめです。
参考資料
(上記で引用した番号は以下の通り)
- Google Cloud Translation API overview(cloud.google.com)
- DeepL API docs(developers.deepl.com)
- OpenAI Realtime API announcement(openai.com)
- GPT-4o live translationデモ報道(nypost.com)
- Azure AI Translator docs(learn.microsoft.com)
- LibreTranslate OSS README(github.com)
- Transformers.js ブラウザ推論ドキュメント(huggingface.co)
- Ably「WebSockets with React」ガイド(ably.com)
- Socket.IO v4 公式紹介(socket.io)
- i18next 公式ドキュメント(ロード方法)(i18next.com, i18next.com)
- WebSocket 基礎記事 (dev.to)(dev.to)
- Machine Translation の限界に関する Wired 記事(wired.com)