← 記事一覧に戻る
Web 2026-04-17 · rev. 2026-05-10 ProtoMedia

数十の言語を話すサイト、翻訳者なし

機械翻訳によるテキストです。 · 原文を読む

これらのページで動作する翻訳システムを構築した方法:必要なときにAI、常にキャッシュ、知覚される待ち時間ゼロ。

従来のi18nの問題点

長年、ウェブサイトの国際化は、ワークフローにおける小さなオデッセイでした:.poファイル、人間の翻訳者、忘れられたキー、そして「まだドイツ語がない」という理由による遅延デプロイ。言語を追加するには時間と費用がかかり、中小企業にとっては10言語を追加することは不可能でした。

最新世代のLLMにより、機械翻訳の品質は、企業ウェブサイト(文学作品ではありません)には十分なレベルに達しました。問題はもはや「自動的に翻訳できるか」ではなく、「ユーザーエクスペリエンスを損なうことなくどのように統合するか」です。

アーキテクチャの概要

このサイトは、イタリア語で静的に提供されます。ユーザーが別の言語を選択すると、3つのMongoDBコレクション上で動作する小さなエンジンが起動します:

  • i18n_base: ソーステキストを希望する言語(現在はイタリア語)で記述し、それぞれに言語の宣言、ウェブサイトでの表示場所と理由の説明(翻訳の品質に不可欠)、トーン、文字数制限を付与します。この説明はLLMへのプロンプトの一部となり、ボタンなのか段落なのかをLLMが理解するのに役立ちます。
  • i18n_human: LLMの出力ではなく、編集品質を求める特定のページに対する手動で調整された翻訳です。自動キャッシュよりも優先され、ソーステキストが変更されると自動的に「再マーク」されます。
  • i18n_cache: 既に生成された翻訳を、(フィールド, 言語)でインデックス化します。各エントリは、生成時の基本テキストのタイムスタンプを保持します。
  • articoli_i18n: この記事のような長いコンテンツにも同じロジックを適用します。

新しい言語で最初にアクセスすると、システムはLLMに実際に不足しているフィールドのみを要求し、応答をキャッシュに保存してブラウザに返します。その後のアクセスでは、同じ言語がAI呼び出しなしに瞬時に表示されます。

機能する無効化

キャッシュは秩序だった嘘です。「私の真実はこれだ」と言いながら、誰かに否定されるのを待ちます。この場合の否定メカニズムは単純です。キャッシュされた翻訳は、それを生成した基本テキストのタイムスタンプを保存します。イタリア語のテキストを変更し、updated_atを更新すると、そのフィールドのすべての言語の翻訳は自動的に古くなり、必要に応じて再生成されます。手動のカスケーディングは不要で、キャッシュをクリアする必要もありません。

待たないユーザー

最も興味深いのは翻訳そのものではなく、その表示方法です。言語を切り替えると、ブラウザには更新する各テキストブロックの横に小さなスピナーが表示されたイタリア語のページが表示されます。すべてをまとめて翻訳する単一の呼び出しを行うことが誘惑的です。それは簡単でクリーンですが、ユーザーはLLMがすべてを終了するまで、変更を一切見ることはできません。

私たちは逆の方向を取りました。テキストはセクション(ナビバー、本文、フッター)ごとにグループ化され、各セクションを3つのフィールドのマイクロバッチに分割します。呼び出しは順番に開始されます。まず、数秒で表示されるナビバーのいくつかのフィールド。ユーザーは何か起こっているのを見て、読み始めます。読み進めるうちに、本文の最初の部分、次に2番目の部分、最後にフッターが到着します。

簡潔な教訓: 知覚される速度は総速度ではありません。 一度に少しずつ、視覚的な順序で翻訳することが、最初に完了することよりも重要です。

夜間の作業

キャッシュには真の敵が1つだけあります。それは最初の訪問です。 最初のドイツ人ユーザーは、将来のすべての翻訳の代償を払い、彼が記憶に残るのはその経験だけです。 この問題を排除(またはほぼ排除)するために、バックグラウンドタスクは毎分起動し、まだ完了していない言語の中で最も期待される言語を選択し、翻訳されていないテキストを取得してLLMに渡します。 次の分には次のテキストを処理します。 数日で、最も一般的な言語はすべて準備完了になります。

夜間のタスクは、質の疑わしい翻訳を自動的に見直し、別のAIモデルで再試行するという2番目の仕事も行います。 言語間の整合性が重要な場合、平凡な翻訳はそのまま残ることはありません。

もしあなたがその日の最初のドイツ人で、システムがまだキャッシュを完成させている最中に到着した場合でも、プログレッシブローディングで気を紛らわせることができます。 もしあなたが2番目のドイツ人なら、それに気づくことさえありません。

得られるもの

翻訳者なしで多言語サイト、管理するファイルなし、言語を追加するためのデプロイもなし。ユーザーがコードを入力する — ja, ca, eu, 好きなものを — そしてページが翻訳されます。2回目は瞬時です。3回目には、おそらく私たちがすでに翻訳を済ませているでしょう。常に稼働しているタスクによって、適切なタイミングで翻訳されたのです。

このページをドイツ語、スペイン語、韓国語で読んでいる場合、翻訳者が一度も書いたことはありません。LLMによって一度だけ翻訳され、それ以来はキャッシュから提供されています。今読んでいるのがイタリア語の場合、手書きされたのはこれだけです。

このアーキテクチャをあなたのサイトに導入することにご興味がありますか?お話しましょう。

お問い合わせ

ご意見はここから

このメッセージはあなたと私たちだけに見えます。興味深いコメントは記事の最後に掲載する可能性がありますが、審査後となります。

入力中、ブラウザが簡単な計算処理を行っています。これは、サードパーティサービスを使わず、信号のような画像認証を求めることなく、自動投稿を防ぐための仕組みです。何もお願いせず、このサイトからデータは送信されません。