設定したらもう安心:クラウド翻訳がWordPressサイトの破損をなくす理由

木曜日の午後。そろそろ退社しようとしたとき、携帯電話が鳴りました。クライアントのWooCommerceのチェックアウトページに、「注文を確定」ボタンの代わりに生のPHP警告が表示されています。原因は?翻訳プラグインが夜間に自動更新され、その過程で3つの.moファイルが破損したことです。
あなたは次の2時間を緊急FTPセッションに費やし、できるだけ新しいバックアップからファイルを復元します。クライアントは不満を抱き、あなたは疲れ果てています。そして心のどこかで、これがまた起こるだろうとわかっています。
これは仮説的なシナリオではありません。多言語サイトを提供するために翻訳プラグインに依存している、何千人ものWordPress開発者が実際に経験していることです。朗報は、そうである必要はないということです。
翻訳プラグインがWordPressサイトを破損させる理由
翻訳プラグインは、インストールできるWordPress拡張機能の中で最も侵略的なものの1つです。お問い合わせフォームやSEOプラグインのように、いくつかのデータベーステーブルを追加するのとは異なり、翻訳プラグインはWordPressがすべてのページをレンダリングする方法を根本的に変更します。
データベースのオーバーヘッドの問題
WPMLやPolylangのようなプラグインは、翻訳をWordPressデータベースに保存します。多くの場合、複雑なJOINクエリを持つカスタムテーブルに保存します。ページがロードされるたびに、ページ上のすべての文字列の正しい翻訳を取得するために、追加のデータベースクエリがトリガーされます。
5つの言語を持つ典型的なWooCommerceストアでは、これはページロードごとに50〜200の追加のデータベースクエリを意味する可能性があります。これは理論的な数字ではありません。プラグインベースの翻訳と静的な.moファイルを比較した場合、実際のベンチマークテストで示されているものです。
結果は?Time to First Byte (TTFB)が遅くなり、Core Web Vitalsのスコアが悪化し、サイトが訪問者にとって遅く感じられます。キャッシュは役立ちますが、それは問題を隠しているだけです。最初のキャッシュされていないリクエストは依然としてデータベースに大きな負荷をかけ、動的ページ(カート、チェックアウト、アカウント)はまったくキャッシュできません。
更新の競合の問題
WordPress翻訳プラグインは、コアレンダリングパイプラインに深くフックします。WordPress自体が更新されたり、テーマやプラグインが翻訳ファイルを更新したりすると、これらのフックが微妙な形で壊れる可能性があります。一般的な症状は次のとおりです。
- 翻訳された文字列がソース言語に戻る
- 翻訳されたページに2つの言語が混在して表示される
- 互換性のないプラグインバージョンによる致命的なエラー
- 翻訳された
.moファイルがプラグインまたはテーマの更新によって上書きされる
最悪なのは、これらのエラーがしばしばサイレントであることです。クライアントの訪問者は、誰かが気付く前に、数時間または数日間、壊れたテキストを目にすることになります。
変数の破損の問題
翻訳プラグインが文字列を機械翻訳APIに渡すとき、それらは必ずしもそれらの文字列に埋め込まれたコード変数を保護するとは限りません。次のような文字列:
msgid "Order #%d has been shipped to %s"
msgstr ""
翻訳APIから次のように返ってくる可能性があります:
msgstr "Bestellung Nr. %d wurde an % s versendet"
% sにスペースがあることに注目してください。この1つのスペースがsprintf()を失敗させ、その結果、顧客に見えるPHP警告が表示されるか、厳密なエラー設定では、白い画面が表示されます。 翻訳中に変数を保護する方法については広範囲にわたって書いてきましたが、根本的な問題は、ほとんどのプラグインがこの保護を自動的に実行しないことです。
静的ファイルアプローチ:「設定したらもう安心」が実際に意味すること
上記の3つの問題をすべて排除する、WordPress翻訳を処理するための根本的に異なる方法があります。それは新しいものではありません。WordPress自体が動作するように設計された方法です。
WordPressはGNU Gettextを使用します。これは、翻訳が/wp-content/languages/ディレクトリにある静的なバイナリファイル(.moファイル)に保存されるシステムです。 WordPressがロードされると、これらのファイルがメモリに読み込まれます。これは、データベースクエリのない、単一の高速な操作です。
「設定したらもう安心」のワークフローは簡単です。
.poファイルを翻訳します。クラウドベースのAI、デスクトップエディタ、または人間の翻訳者のいずれかのツールを使用します。.moファイルにコンパイルします- サーバー上の正しいディレクトリにアップロードします
- 翻訳を更新する必要があるまで、二度と考える必要はありません
維持するプラグインはありません。ページがロードされるたびにデータベースクエリはありません。更新の競合はありません。クライアントが誤って壊す可能性のある翻訳インターフェースはありません。
WordPressでの翻訳ファイルの保存場所
このアプローチを確実に機能させるには、ファイル階層を理解することが重要です。
wp-content/
├── languages/
│ ├── themes/
│ │ └── flavor-starter-de_DE.mo ← Theme translations
│ ├── plugins/
│ │ └── woocommerce-de_DE.mo ← Plugin translations
│ └── de_DE.mo ← Core translations
/wp-content/languages/のファイルは更新から安全です。プラグインまたはテーマが更新されると、WordPressはプラグイン自身のディレクトリにあるファイルを上書きしますが、/wp-content/languages/はそのままにします。これは、カスタム翻訳の正しい場所です。
クラウド翻訳がこれを簡単にする方法
静的ファイルアプローチは、パフォーマンスと信頼性にとって常に正しい答えでした。課題は、翻訳ステップ自体でした。Poeditで何千もの文字列を手動で翻訳するのは非常に遅く、.poファイルを人間の翻訳者に送信するのは費用がかかり、数日かかります。
クラウドベースのAI翻訳は、このボトルネックを解決します。 SimplePoTranslateでのワークフローは次のようになります。
1. ソースファイルをアップロードする
.poまたは.potファイルをクラウド翻訳者にドラッグします。デスクトップエディタをクラッシュさせる大規模な10MB以上の言語パックであっても、あらゆるサイズのファイルを受け入れます。
2. 構文ロックが自動的にアクティブ化される
単語がAIに届く前に、パーサーはすべての文字列をスキャンしてロックします。
- Printfスタイルの変数:
%s、%d、%1$s、%2$f - HTMLタグ:
<strong>、<a href="...">、<br /> - テンプレートリテラル:
{name}、{count}、{{variable}} - Gettextプレースホルダーとコンテキスト
AIは、これらのロックされたトークンの間の人間が読めるテキストのみを表示します。これは翻訳後の検証ではありません。翻訳前の保護です。 AIは変数を見ることがないので、変数を破損させることはできません。
3. ファイルをダウンロードする
次のものが含まれるZIPファイルを受信します。
.poファイル(人間が読める、編集可能).moファイル(コンパイルされたバイナリ、デプロイ準備完了).jsonファイル(wp_set_script_translations()を使用するJavaScriptベースのテーマ用).phpファイル(PHPベースの翻訳ローディングを使用するテーマ用).xliffファイル(CATツールとの相互運用性のため)
1回のアップロードで5つの形式。手動コンパイルステップはありません。 msgfmtコマンドはありません。コンパイルエラーのリスクはありません。
4. デプロイして忘れる
SFTP、Git、またはデプロイパイプラインを介して、.moファイルを/wp-content/languages/plugins/(または/themes/)にアップロードします。サイトはすぐに翻訳されます。更新するもの、維持するもの、WordPressコアの更新によって破損する可能性のあるものは何もありません。
実際の影響:ビフォーアフター
前(プラグインベース)
- TTFB:1.2秒(キャッシュ)、3.8秒(キャッシュなし)
- ページごとのデータベースクエリ:180+
- 毎月のプラグインの競合:1〜2
- 翻訳に関するクライアントサポートチケット:3〜4件/月
- WordPressの更新時の不安レベル:高い
後(クラウド翻訳経由の静的な.moファイル)
- TTFB:0.4秒(キャッシュ)、0.6秒(キャッシュなし)
- ページごとのデータベースクエリ:35(WordPressベースライン)
- 翻訳によるプラグインの競合:0
- 翻訳に関するクライアントサポートチケット:0
- WordPressの更新時の不安レベル:なし
数字はそれ自体を物語っていますが、最も価値のあるメトリックは最後のものです。翻訳がWordPressがネイティブにロードする静的ファイルである場合、監視するもの、更新するもの、午前2時にあなたを驚かせる可能性のあるものは何もありません。
翻訳を更新する必要がある場合
静的ファイルは、変更できないファイルではありません。プラグインが更新で新しい文字列を追加した場合、または既存の翻訳を改善したい場合は、プロセスは簡単です。
- 更新された
.potファイルをプラグインまたはテーマからエクスポートします - SimplePoTranslateにアップロードします
- 新しい
.moファイルをダウンロードします - サーバー上の古いファイルを置き換えます
これには5分もかかりません。プラグインの競合をデバッグしたり、バックアップから復元したり、チェックアウトページに都市名の代わりに%sが表示される理由をクライアントに説明したりすることと比較してください。
複数のサイトを管理するエージェンシーの場合、この更新ワークフローは集中化および標準化できるため、1人のチームメンバーがすべてのクライアントプロジェクトで翻訳の更新を処理します。
安心のためのチェックリスト
次の多言語WordPressプロジェクトの前に、自問してください。
- 現在のアプローチは、破損することなくWordPressコアの更新を乗り切ることができますか?
- プラグインを非アクティブ化した場合、翻訳は保持されますか?
- 変数(
%s、%1$s、HTML)は翻訳後も安全であることが保証されていますか? - 私のアプローチは、フロントエンドにデータベースクエリをまったく追加しませんか?
- どこにでも持ち込める標準形式で翻訳ファイルを所有していますか?
これらのいずれかの答えが「いいえ」または「わからない」の場合は、アプローチを再検討する時期です。クラウド翻訳経由で配信される静的な.moファイルを使用すると、すべての質問に対して自信を持って「はい」と答えることができます。
破損した翻訳を心配するのをやめる準備はできましたか? SimplePoTranslateを無料でお試しください —
.poファイルをアップロードして、安全な翻訳を入手し、自信を持ってデプロイします。プラグインは不要、クレジットカードは不要。