これが走るパイプラインです www。conveythis。com それ自体 — 238 ページの Astro サイト、55 か国語で運営されています。私たちはそれを抽出し、見つけるのにかかったすべての障害モードを文書化し、すべてを公開しました。これはトライアルでもティーザーでもありません。購入するキーも割り当てもアカウントもありません。
2 つの設計上の決定
仕組み
2 つの決定がそれを定義します。まず、翻訳はバイト オフセットによって構築された HTML にスプライシングされ、ドキュメントは DOM — から再シリアル化されないため、重要な CSS、LCP 要素、アセット ハッシュ、および がインライン化されます width/height CLS を保持する属性はすべてそのまま引き継がれます。それは なぜ ロケール ページは、Core Web Vitals 上のソース言語に単に似ているのではなく、ソース言語と一致します。第二に、翻訳の単位はテキスト ノードではなくブロック全体です。これは、一般的なサイトのテキスト ノードの約 5 分の 1 がインライン マークアップによって分割され、フラグメントを個別に翻訳すると、順序を変更したり語形変化したりする言語の文法が壊れるためです。
結果は主張されるのではなく証明されます。8 つのゲートと、すべてのページにわたる徹底的な SEO 監査です。これには、カバレッジ メトリクスが抽出バグに対して構造的に盲目であるという理由だけで存在する 1 つのゲートも含まれます。
検証
実際に成立するのでしょうか?
正当な質問であり、私たちの言葉を鵜呑みにするのではなく、チェック可能です。 doctranslator。com/fr このパイプラインによってフランス語ページが建設された大規模な Astro サイトです。英語のオリジナルと比較してください。マークアップは次のとおりです バイト同一:
2,743
タグは同一の順序で
2,031
クラス属性、すべて一致
+0.74%
ページの重み — フランス語は長いです
構造的に何も移動しないため、ブラウザが別の方法でレイアウトするものは何もありません。自分で確認してください — 約 10 秒かかります:
curl -s https://doctranslator.com/ | grep -o 'class="[^"]*"' > en.txt
curl -s https://doctranslator.com/fr | grep -o 'class="[^"]*"' > fr.txt
diff en.txt fr.txt && echo "markup identical — only the text changed"そしてスコア
| 英語ソース | フランス語、このツールから | A11y / ベストプラクティス / SEO | |
|---|---|---|---|
| デスクトップ | 100 | 100 | 100 / 100 / 100 |
| モバイル | 98 | 98 | 100 / 100 / 100 |
PageSpeed Insights のパフォーマンス スコア。2026 年 8 月 25 日に測定されました。どちらの戦略でも、両方のページを実行するたびにアクセシビリティ、ベスト プラクティス、SEO が 100 でした。
これらは意図的に中央値です。 Lighthouse スコアの動き: 同じ英語のモバイル ページを 5 回連続で実行すると、98、98、88、98、98 が返され、最大のコンテンツを含むペイントは 1。8 秒から 3。2 秒の間で揺れ動きました。これは、ページの品質ではなく、ネットワークと CDN の差異です。1 回測定して 91 を得た場合、— を数回実行し、マーケティング ページの数字ではなく 2 つの言語を相互に比較するのはこのためです。
そして言語
マークアップのアイデンティティは測定可能です。スペイン語があるかどうか 良い は別の質問で、2。0 まではパイプラインにはそれに対する答えがありませんでした — テストではリクエストの形状と足場がチェックされましたが、翻訳のスコアは何もありませんでした。
node scripts/i18n/tqa.mjs --lang es --dry # sample size and cost, no API call
node scripts/i18n/tqa.mjs --lang es,fr,de # scorecard + per-locale JSON
node scripts/i18n/tqa.mjs --lang es --repeat # judge the same sample twice従来の重み — マイナー 1、メジャー 5、クリティカル 10 — で MQM エラー類型に関する層別サンプルをスコアリングし、各文字列が表示される頻度によってサンプルを重み付けするため、全員が読むヘッダーは 1 回限りの脚注よりもカウントされます。数字が装飾的になるのを妨げている 3 つの点:
- 裁判官は翻訳者とは異なるモデルです
- モデルは独自の出力を寛大にスコアリングします。2 番目のプロバイダー キーが設定されていない場合は、実行時とレポートで同じプロバイダー キーが使用され、その旨が示されます。
- サンプルにシードが付けられ、分散が報告されます
- シードはスコアを正確に再現します
--repeat同じサンプルを 2 回スコア付けし、ギャップを出力します。誰も再導出できない品質番号は、ノイズなしで引用され、マーケティング番号です。 - 裁判官が評価できない単位は除外され、クリーンとしてカウントされません
- 初期のバージョンでは、すべてのユニットが解析に失敗したサンプルから 100 点中 100 点が印刷されました。同社は現在、この件に関してスコアをまったく報告することを拒否している。
グレードとしてではなく、ロケール間、モデル間、プロンプト変更の前後の比較 — としてお読みください —。これは人間によるレビューではなく、あるモデルが別のモデルの研究を評価するものであり、報告書はそれを表面的に述べている。
決定3
用語は文ごとの選択ではありません
同一の文字列は常に一貫していました — ユニットはソース テキストのハッシュによってキー付けされるため、一度翻訳された nav ラベルはすべてのページおよび実行全体で再利用されます。それができないのは、任期を保持することです 変化する文の中で: “ダッシュボード” 2 つの異なる段落には、2 つのハッシュ、2 つのバッチ、2 つのステートレス リクエストがあり、それらを比較するものは何もありません。
[
{ "source": "Acme", "rule": "keep", "matchCase": true },
{ "source": "Dashboard", "rule": "translate",
"targets": { "es": "Panel de control", "de": "Übersicht" } }
]matchCase は、私たちが直接尋ねられた質問に対する答えです: それは知ることができますか アップル からの会社 リンゴ 果物?一律の名前のリストではそれを表現できません。単語全体、大文字と小文字を区別するルールが可能です。
| ソース | スペイン語 | なぜ |
|---|---|---|
| Appleがデバイスを発表した | Apple の処分 | 大文字 A — が保護され、検証されました |
| 1日1個のリンゴ | ウナ・マンザナ・アル・ディア | 小文字 — 普通に翻訳 |
| アップルソースが販売中です | ラ・コンポタ・エスタ・エン・オフェルタ | 単語全体 — 長い単語内では一致しない |
同じリリースがモデルに伝えます 文字列とは何か。以前はテキストのみを受信していたため、ボタンのラベルと本文の段落は区別できませんでした —。そのため、ボタンのラベルを短く保つというプロンプト自体の指示は強制力がありませんでした。A <button>、 見出し、フォームラベル、メタ説明にそれぞれそのように記載されるようになりました。
ボタンの命令形を意図的に要求しません。ドイツ語の UI は動詞名詞を好み、フランス語は不定詞を好むため、その言語が実際にボタンに付ける構造を求めます。すでにリストしたブランド名は、大文字と小文字を区別する保管ルールとして自動的に折りたたまれ、生き残ったことを確認する検証ゲートの下にも置かれます。これまでそれをチェックしたものは何もありませんでした。
ロケール規約
数字はローカライズされます。価格は決して換算されません。
書く 1,234.56 ドイツ語の読者にとって、機械翻訳の最も目に見える痕跡の 1 つです。モデルは区切り文字の規則では信頼できないため、モデルは数値を放っておくように指示されます Intl その後、決定論的にそれらを再フォーマットします。
| ソース | なる | どこ |
|---|---|---|
| 1,234.56 | 1.234,56 | デ |
| 1,234.56 | 1 234,56 | フランス |
| $5 | 5,00 $US | fr — 配置と間隔、量ではありません |
| 50% | 50 % | fr — 改行しないスペース付き |
フォーマットします。決して変換しません。
それのための設定オプションはありません価格は商業的なコミットメントであり、ビルド — が書かれた翌日に古くなった — に焼き付けられたレートで価格を変換すると、翻訳ツールは誰も見ていない市場で間違ったオファーを公開し始めます。見つかった金額はすべてレポートに書き込まれるため、人間が各市場を意図的に価格設定します。
数値整合性ゲートは、数値がビルドに失敗することでそれをバックアップします 値 出典と翻訳の変更。静かに出荷するモデル $39 情報筋が言ったところ $49 同じマークアップ、一致するプレースホルダー、妥当な長さ、流暢なスペイン語など、他のすべてのチェックに合格します。
意図的に放置されたバージョン番号、時刻、IPアドレス、ISO日付、電話番号、グループ化されていない番号—開発中に貪欲なパターンが 192.168.1.1 に 1.921.681,1そして、そのケースは今やテストです。バグのように見え、そうではない結果の 1 つは、スペイン語は 4 桁の数字をグループ化しないということです 1,234.50 は 正しく 1234,50 で es そして 1.234,50 で de.
正直なルーティング
実際に必要なのはどれですか?
静的置換とランタイム層はさまざまな問題を解決します。間違ったものを選ぶと週末がかかるので、正直な分割は次のとおりです。
静的ビルドがあり、リリースリズムに応じてコンテンツが変更され、HTML を完全に所有する必要があります。
クロード翻訳者
無料、セルフホスト、AGPL-3。0。独自の API キー、独自のファイル、アカウントなし。
GitHubで見る →コンテンツは毎日変更されたり、CMS に保存されたり、ユーザーが生成したり、ログインやチェックアウトの後ろに置かれたりします。
ConveyThis
管理されたランタイム層。フックするためのビルド手順、すべての編集での再実行、ビジュアル エディター、および人間のレビューはありません。
価格設定 → を参照してください翻訳が必要なのは、ページ — PDF、DOCX、XLSX、PPTX ではなくドキュメントです。
ドクトランスレーター
ファイル全体、レイアウト、テーブルが保存され、100+ 言語。
DocTranslator →に移動しますクイックスタート
インストールしてください
リポジトリ
https://github.com/ConveyThis/claude-translator
AGPL-3。0 · ノード ≥ 20 · 1つの依存関係(parse5) · GitHubで開く →
必要なのは
- Node。js 20以降
- 静的HTMLで構築されるサイト — ソースではなくビルド出力を読み取ります
- 選択したモデルの API キー — または、ローカルで実行する場合はまったく実行しません
クロード コードのスキルとして
それをスキル ディレクトリにクローンし、Claude にサイトのローカライズを依頼します。これは、— を見つけるために実際にお金を費やす失敗モードや、これが完全に間違ったツールである場合のルールなど、バンドルされた指示に従います。
git clone https://github.com/ConveyThis/claude-translator.git \
~/.claude/skills/claude-translatorどのプロジェクトでも
1 つのコマンド。 init パイプラインをコピーします scripts/i18n/、 configを書き込み、宣言します parse5 そして導出されたものを追加します i18n/ あなたへの道 .gitignore。それなしでは何も上書きしません --force、 そして、タッチしたすべてのファイルを出力します。
cd your-project
npx claude-translator init
npm install # parse5, the only dependencyスクリプトはリポジトリ内に留まるのではなく、リポジトリ内に配置されます node_modules 意図的に — 参加したプロジェクトからのパスを解決し、読み取るのに十分な長さがあり、ライセンスを存在するため、パスを変更できます。
Npxなしでインストールする
git clone https://github.com/ConveyThis/claude-translator.git
cp -r claude-translator/scripts your-project/scripts/i18n
cp claude-translator/i18n.config.example.json your-project/i18n.config.json
cd your-project && npm install --save-dev parse5設定する
実行される最小の構成。 buildDir ジェネレーターが HTML を書き込む場所です baseUrl は正規の起源であり、末尾のスラッシュはありません。
{
"buildDir": "dist",
"baseUrl": "https://example.com",
"provider": "anthropic",
"glossary": "glossary.json",
"locales": [
{ "hreflang": "es", "pathCode": "es", "nativeLabel": "Español" },
{ "hreflang": "de", "pathCode": "de", "nativeLabel": "Deutsch" }
]
}echo "ANTHROPIC_API_KEY=your-key-here" >> .env # and gitignore it実行する
| npm run ビルド | 通常のビルド — ソース言語のみ |
| ノードスクリプト/i18n/extract。mjs | 翻訳可能なすべてのユニットを見つけます |
| ノードスクリプト/i18n/translate。mjs --lang es,fr | 記憶に翻訳する |
| ノードスクリプト/i18n/build-locales。mjs --lang all | ローカライズされたページを書きます |
| ノードスクリプト/i18n/verify。mjs --lang all | 8つのゲート — 失敗するとゼロ以外で終了する |
| ノードスクリプト/i18n/audit-seo。mjs | 正典、hreflang、JSON-LD、サイトマップ |
| ノードスクリプト/i18n/tqa。mjs --lang es --dry | オプション — MQM 品質スコア、コスト優先 |
次に、ビルド ディレクトリを今日デプロイしたとおりにデプロイします — ローカライズされたページは、既存のファイルの隣にある通常のファイルです。完全なオプション、すべての失敗モード、および各設計決定の背後にある理由は、にあります README.
モデル
独自のモデル — を地元のモデルも含めてご持参ください
翻訳ステップでは、小さなアダプタを介してモデルと通信し、Claude(デフォルト)、Gemini、および OpenAI 互換のエンドポイントの 3 つのデバイスが同梱されます。最後のものは、フィールド — OpenAI、Azure、Groq、DeepSeek、Mistral、OpenRouter、Together、Fireworks — のほとんどをカバーしており、Ollama、LM Studio、vLLM もカバーしています。
つまり、3 行の構成でパイプライン全体を独自のハードウェア上で実行します
{
"provider": "openai",
"apiBaseUrl": "http://localhost:11434/v1",
"model": "qwen2.5:14b"
}キーもクォータもなく、マシン — から何も残りません。これは、コンテンツが機密である場合に重要です。そのリストに含まれていないものは、2 つの関数を含むアダプター ファイルです。
制限
無料ツールが停止する場所
6 つの本当の限界。これらはどれも機能不全に陥った機能ではありません — これらはアプローチの形状であり、スクリプトは静かに失敗するのではなく、いつヒットしたかを教えてくれます。
- クライアント側の水分補給
- アイランドとフレームワークのペイロードは、置換された HTML 経由でブラウザで再レンダリングされます。抽出器は影響を受けるページをカウントするため、フル実行後ではなく数秒で確認できます。
- ドキュメント
- リンクされた PDF、DOCX、および XLSX はソース言語に留まります — パイプラインは HTML にのみ触れます。
- 解約
- メモリはソース ハッシュによってキー入力されるため、前回の実行以降にサイトのシェアが変更されたことがわかります。解約率が高いということは、繰り返し再翻訳するためにお金を払うことを意味します。
- 翻訳の編集
- メモリ ファイル内のハッシュを見つけ、文字列を編集して再構築します。エディターもレビュアーもワークフローもありません。
- 音量
- モデルを自分で実行する場合は、独自のキー — を使用して、独自のモデル プロバイダーに直接、そのレートで支払うか、まったく支払いません。
- ネットワークの使用を変更しました
- AGPL-3。0 §13 では、変更されたコピーを他の人向けのサービスとして実行する場合、変更を公開することが義務付けられています。変更せずに実行したり、内部的に変更したりすることは制限されません。
最初の 4 つは人々が実際に殴ったもので、すべて同じ形です。何かが起こらなければなりません 後 ビルドタイム ツールでは実行できないビルド。それが管理対象製品の目的です 無料プラン カードなしで 5,000 語なので、役立つかどうかを知るのに十分です。このページで何かを使用する必要はありません。
帰属
ページに掲載されるもの
ローカライズされたページには、 <meta name="generator"> タグと 1 つの HTML コメント命名 ConveyThis — 約 150 バイト、リクエストなし、スクリプトなし、および リンクなし。これは、Astro、Hugo、WordPress が使用するメカニズムと同じです。2 つの構成キーがそれを削除し、リポジトリ内の何も削除したかどうかをチェックしません。
目に見えるクレジットを表示したい場合は、設定します credit.visibleLink へ true そして、ページ上の任意の場所にスロットを配置します。それについては何も求められず、見返りも何も与えられません。— それは、使用するツールをクレジットしたい人がいるために存在しますが、それ以外の理由はありません。
クレジットリンクは rel="nofollow"、 意図的に。有料だからではなく — ではないから —、ビルド スクリプトがサイトのすべてのページに追加するリンクであるため、編集上の選択ではなくツールを通じて表示されるサイト全体のリンクが Google のリンク スキーム ガイダンスの目的です。バックリンクではなく、紹介トラフィックの価値があります — そうでないと言う人はペナルティを売っています。
商業ライセンス
コードはAGPL-3。0です。独自のサイトをローカライズし、出力を送信することは制限されません — ライセンスは、書き込む HTML ではなく、ソフトウェアをカバーします。走った場合にのみ噛みつきます 変更された 他の人のためのネットワークサービスとしてコピーします。それがあなたであり、変更を公開できない場合は、に書いてください [メールアドレス].
質問
人々が実際に尋ねる質問
これは本当に無料ですか?落とし穴は何ですか?
ConveyThis アカウントが必要ですか?
実行には実際にどれくらいの費用がかかりますか?
独自のモデルを使用したり、完全にオフラインで実行したりできますか?
翻訳されたページは元のページよりも遅くなりますか?
私のフレームワークで動作しますか?
水和する React コンポーネントや Astro アイランドについてはどうですか?
用語の一貫性を保ち、ブランド名と通常の単語を区別できますか?
もう使っています。2。0。0 にアップグレードすると何が変わりますか?
気に入らない翻訳を修正できますか?
ページを編集したり、新しいページを追加したりするとどうなりますか?
翻訳されたページは Google によってインデックス付けされますか?
商業的に使用できますか?AGPL-3。0 は私にとって何を意味しますか?
ConveyThis 帰属は必要ですか?
これは ConveyThis 自体とどう違うのでしょうか?
翻訳は、単に言語を知るだけでなく、複雑なプロセスです。
私たちのヒントに従って使用することによって ConveyThis 翻訳されたページは、ターゲット言語にネイティブであると感じられ、読者の共感を呼ぶでしょう。
努力が必要ですが、結果はやりがいがあります。Web サイトを翻訳している場合、ConveyThis 自動機械翻訳により時間を節約できます。
無料プランの ConveyThis から始めましょう — クレジットカードは必要ありません!
