AI翻訳の比較:Gemini vs GPT-4 vs DeepSeek(.poファイルの場合)

あなたは、歴史上最も強力なAIモデルを3つも自由に使える状態にあります。それぞれのモデルにWordPressの.po文字列を貼り付けます。すると、そのうち2つがあなたのサイトを壊してしまいます。
これは仮説上のシナリオではありません。「英語が得意」=「Gettextが得意」と思い込んでいる開発者には、日常茶飯事です。真実は、WordPressのローカライズファイルの翻訳は特殊なタスクであり、それぞれのLLM(大規模言語モデル)が非常に異なる方法で処理するということです。
どのモデルが最も正確で、コードセーフな翻訳を生成するかを確かめるため、Gemini 2.0 Flash、GPT-4、DeepSeekに同じ.po文字列のセットを実行させました。その結果は驚くべきものでした。
テストのセットアップ:何を翻訳したか
本番環境のWooCommerceストアと人気のあるWordPressテーマから、200個の実際の文字列を選びました。テストセットは意図的にトリッキーなものにし、以下を網羅しました。
- シンプルなUI文字列(「カートに追加」「検索結果」)
- printf変数を含む文字列(
%s、%d、%1$s of %2$s) - HTMLマークアップを含む文字列(
<strong>、<a href>、<br/>) - ポーランド語(3つの形式)とアラビア語(6つの形式)を対象とした複数形(
msgid_plural) - 「Post」がブログ投稿または動詞の「投稿する」を意味するコンテキスト(
msgctxt)を持つ文字列
各モデルは同じプロンプトを受け取りました。これらのGettextエントリを英語からトルコ語に翻訳し、すべての変数とHTMLタグをソースに表示されるとおりに正確に保持します。
次に、各出力を、プレースホルダーの整合性、HTML構造、複数形の数、および文字エンコーディングをチェックする検証スイートに通しました。
ラウンド1:シンプルなUI文字列
3つのモデルすべてが基本的な文字列をうまく処理しました。「Add to Cart」は、いずれも「Sepete Ekle」になりました。「Log In」も正しくレンダリングされました。ここでは驚きはありません。
しかし、この単純なカテゴリでさえ、私たちはあるパターンに気づきました。GPT-4は、ソースにはない丁寧な表現を追加することがありました。簡潔な「Delete」が、よりフォーマルな表現になり、3〜4文字多くなっていました。バグではありませんが、ボタンの幅が固定されているUIレイアウトでは懸念事項です。
DeepSeekは、わずかにより文字通りの翻訳を生成しました。これは、簡潔さが重要なUI要素にとっては実際に好ましいです。
Geminiはバランスを取り、ソース文字列の表現と長さに最も一貫して一致しました。
結論:シンプルな文字列
3つすべて合格。わずかな文体の違いのみ。
ラウンド2:Printf変数と位置引数
ここからが、本当の違いが出てくる部分です。この一般的なWordPress文字列を見てください。
msgid "Page %1$s of %2$s"
msgstr ""
以下は、各モデルがトルコ語に翻訳した結果です。
# Gemini 2.0 Flash
msgstr "Sayfa %1$s / %2$s"
# GPT-4
msgstr "Sayfa %1$s / %2$s"
# DeepSeek
msgstr "%1$s / %2$s. Sayfa"
3つすべてが変数を技術的に無傷のまま保持しました。しかし、DeepSeekは文の構造を並べ替え、「Sayfa」を最後に移動しました。文法的には独創的ですが、これは意味を変えます。ユーザーは「Page 1 of 10」ではなく、「1 / 10. Page」と読むことになります。
では、より危険な例を見てみましょう。
msgid "Hello %s, you have %d new messages"
msgstr ""
# Gemini 2.0 Flash
msgstr "Merhaba %s, %d yeni mesajiniz var"
# GPT-4
msgstr "Merhaba %s, %d yeni mesajınız var"
# DeepSeek
msgstr "Merhaba % s, % d yeni mesajınız var"
ここにあります。DeepSeekは%sと%dの中にスペースを追加し、それらを% sと% dに変えました。PHPのsprintf()はこれらを認識しません。あなたのサイトは致命的なエラーをスローするか、生の変数文字列をユーザーに表示します。
これは、私たちが文書化した最も一般的な翻訳を壊すバグです。プレースホルダー内の1つのスペースがなぜあなたのサイトを破壊するのかを正確に理解したい場合は、コード変数を壊さずに.poファイルを翻訳する方法に関する詳細な記事をお読みください。
結論:変数
GeminiとGPT-4は信頼できます。DeepSeekは、後処理なしでは危険です。
ラウンド3:HTMLマークアップの保持
WordPress文字列には、インラインHTMLが含まれていることがよくあります。実際の例を次に示します。
msgid "Click <a href=\"%s\">here</a> to view your <strong>order</strong>."
msgstr ""
# Gemini 2.0 Flash
msgstr "<a href=\"%s\">Buraya</a> tıklayarak <strong>siparişinizi</strong> görüntüleyin."
# GPT-4
msgstr "Siparişinizi görüntülemek için <a href=\"%s\">buraya</a> tıklayın.</strong>"
# DeepSeek
msgstr "<a href=\"%s\">buraya</a> tıklayarak <strong>siparişinizi</strong> görüntüleyin."
GPT-4は、微妙ですが重大なエラーを犯しました。閉じ</strong>タグを文末に移動し、その対応する開き<strong>から遠く離れてしまいました。その結果、「order」の後のページ上のすべてが太字でレンダリングされ、下のレイアウト全体に影響を与える可能性があります。
GeminiとDeepSeekはどちらも、このインスタンスではHTML構造を正しく保持しました。ただし、200文字列の完全なテスト全体で、DeepSeekは自己終了タグの中にスペースを追加しました(<br />が<br / >になりました)3つのケースで。
結論:HTML
Geminiが最も一貫性があります。GPT-4とDeepSeekはどちらも、特定の条件下で構造的なHTMLエラーを引き起こします。
ラウンド4:複数形
複数形の処理は、ほとんどの翻訳ツールが完全に崩壊する場所です。英語には2つの複数形があります。トルコ語にも2つあります。しかし、ポーランド語には3つ、アラビア語には6つあります。
この文字列をポーランド語(nplurals=3)に対してテストしました。
msgid "%d item in your cart"
msgid_plural "%d items in your cart"
Geminiは、それぞれ適切な数値範囲に合わせて活用された3つのmsgstrエントリを正しく生成しました。GPT-4も3つの形式を生成しましたが、形式1と2を同一のテキストにまとめることがあり、これはポーランド語としては文法的に正しくありません。DeepSeekは2つの形式しか生成せず、nplurals=3の要件を完全に無視しました。
これがなぜ重要なのか、そしてWordPressがPlural-Formsヘッダーをどのように使用するかの詳細な説明については、Gettext複数形に関するガイドをご覧ください。
結論:複数形
Geminiがリード。GPT-4はレビューすれば許容範囲内です。DeepSeekは、3つ以上の複数形を持つ言語では失敗します。
ラウンド5:コンテキストの曖昧さ回避
Gettextのmsgctxtフィールドは、単語がどのように使用されているかを翻訳者に伝えます。単語「Post」は、次の意味を持つ可能性があります。
- ブログ投稿(名詞)
- コメントを投稿する(動詞)
- 郵便物/投稿(名詞、イギリス英語)
msgctxt "verb: to publish"
msgid "Post"
msgstr ""
msgctxt "noun: blog entry"
msgid "Post"
msgstr ""
Geminiは、2つを正しく区別し、動詞には「Yayinla」(公開)、名詞には「Yazi」(記事/エントリ)を生成しました。GPT-4もこれを正しく処理しました。DeepSeekは両方を「Gonderi」(一般的な名詞)として翻訳し、msgctxtのヒントを無視しました。
コンテキスト認識は、贅沢な機能ではありません。あなたの「Post」ボタンがコメントを公開するのに、翻訳が「記事」と表示されている場合、ユーザーはクリックすることを躊躇するでしょう。WordPressローカリゼーションにおけるAIの安全性が、まさにこの種のコンテキスト理解に依存する理由について説明しました。
結論:コンテキスト
GeminiとGPT-4はmsgctxtをうまく処理します。DeepSeekはそれを無視します。
スコアカード
| カテゴリ | Gemini 2.0 Flash | GPT-4 | DeepSeek |
|---|---|---|---|
| シンプルな文字列 | 合格 | 合格 | 合格 |
| Printf変数 | 合格 | 合格 | 不合格 |
| HTMLの保持 | 合格 | 部分的 | 部分的 |
| 複数形 | 合格 | 部分的 | 不合格 |
| コンテキスト(msgctxt) | 合格 | 合格 | 不合格 |
| 全体 | 5/5 | 3.5/5 | 1/5 |
生のモデル出力では決して十分ではない理由
私たちのテストで最高のパフォーマンスを発揮したGeminiでさえ、完璧ではありません。200個の文字列全体で、2つのケースでスペーシングの問題を引き起こし、ソースにない不要なピリオドを文字列に追加したことが1度ありました。
これが、後処理検証が不可欠である理由です。どのモデルを使用する場合でも、出力は以下を通過する必要があります。
- プレースホルダーの正規化:% sを%sに戻します
- 句読点の一致:翻訳された文字列がソースと同じ文字で終わるようにします
- 複数形の強制:正しい数の
msgstrエントリを確認します - 変数カウントの検証:ソースからのすべての
%sと%dがターゲットに表示されることを確認します
これが構文ロックの背後にある原則であり、AIモデルと最終的な.poファイルの間に位置する検証レイヤーです。最高のモデルでさえ時折発生するすべてのエラーをキャッチします。
ワークフロー用のツールを評価している場合は、POファイルを編集および翻訳するための上位5つの無料ツールに関するまとめで、AIのみのソリューションを超えた状況をカバーしています。
結論
Gemini 2.0 Flashは現在、WordPressの.poファイル翻訳に最も信頼できるモデルです。変数、HTML、複数形、およびコンテキストを競合他社よりも適切に処理します。GPT-4は堅実な次善の選択肢ですが、HTML出力と複数形を注意深くレビューする必要があります。DeepSeekは、汎用コーディングタスクでは強みを発揮しますが、大規模な後処理なしではGettext翻訳には適していません。
しかし、ここに重要な洞察があります。**モデルだけでは十分ではありません。**Geminiでさえ、エッジケースをキャッチするための検証レイヤーが必要です。プロフェッショナルなローカリゼーションツールと生のAPI呼び出しの違いは、AIモデルではありません。モデルの実行前と実行後に発生するすべてのことです。
SimplePoTranslateは、Geminiを主要なエンジンとして使用し、すべての変数、タグ、および複数形を自動的にキャッチして修正するコンテキスト対応AIパイプラインと構文ロックでラップしています。最高のモデルと、本番環境に対応できるようにするセーフティネットが手に入ります。
ご自身で違いを確認してみませんか?.poファイルをアップロードして、SimplePoTranslate.comで最大100個の文字列を無料で翻訳してください。