その他のプラグインとテーマによるテキスト翻訳
WPMLはその他のテキストやテーマによるテキスト翻訳を補助します。 例を見てみましょう。
人気が高い Contact Form 7 プラグインはあなたのサイトにコンタクト・フォームを作ります。 あなたはデフォルトのフィールド(名前やEメール等)を使い、自分のものを追加できます。 ビジターがサイトを違う言語で見た時、コンタクト・フォームもこれらの言語で表示されなくてはなりません。
すべてのテキストがプラグイン内にハードコード化される場合、これらはgettextを使い(プラグインの.moファイル)ローカライズできます。 しかし、ユーザーが入力したテキストはどう扱うのでしょうか? ユーザーがコンタクト・フォームに「職業」などの新しいフィールドを追加した場合、テーマの.moファイルを使って訳すことはできません。 ユーザーはこのテキストに翻訳を提供しなくてはなりません。
WPMLによるストリング翻訳
WPMLはこの種類のテキストを翻訳するメカニズムを持っています。 デフォルト設定により、これはWordPressが作るブログのタイトルやタグラインやウィジェットやその他のテキストの翻訳を補助します。 その他のプラグインやテーマもこのメカニズムを使うと、表示するテキストの翻訳を作成できます。
1. 翻訳が必要なストリングを登録する。
ユーザーが新しいストリングを作る、または既存のストリングをアップデートする際、これらはWPMLのストリング・テーブルに登録される必要があります。 これを行うためには以下を呼び出してください。
icl_register_string($context, $name, $value)
- $context – 人間が読めるフォーマットのプラグインの名前
- $name – ユーザー(またはトランスレーター)が何を翻訳するか理解するためのストリングの名前
- $value – 翻訳の必要があるストリング
私たちのコンタクト・フォームの例では、新しい(「職業」と呼ばれる)フィールドを追加しました。そして以下を呼び出します。
icl_register_string('Contact Form 7', 'Input field label', 'Profession')
これはWPMLに「職業」と呼ばれるストリングは翻訳の必要があることを伝えます。 ユーザーが翻訳する時、彼らはこれは「Contact Form 7」のプラグインの一部で、「Input field label」であることが判ります。
プラグインがテキストを翻訳する必要がない場合(例、ユーザーがコンタクト・フォームからそのフィールドを削除した等)、ストリングは以下の呼び出しを使い、翻訳テーブルから取り除けます。
icl_unregister_string($context, $name)
2.表示に翻訳を使う場合
コンタクト・フォームプラグインが表示される時、これは翻訳を取って使用しなくてはなりません。 これを行うためには icl_t 機能を使います。
icl_t($context, $name, $value)
WPMLは $context と $nameがマッチするストリングを探します。 それが見つかると、現在の言語の翻訳を探します。(サイトが表示されている言語)。翻訳が存在する場合、それがリターンされます。無ければ、元のストリングをリターンします。
ストリングが作成された時WPMLがアクティブでないため登録されなくても、正常なストリングの値がリターンされるように $value 引数がicl_t() 呼び出しに供給されます。
WPML内部でストリング翻訳が働く方法
WPML はストリング翻訳インターフェースを含むため、ストリングをリストし、これらの翻訳を管理することが可能です。

WPMLのストリング翻訳インタフェース
ユーザーがストリング翻訳をクリックすると、マルチ言語翻訳パネルがオープンし、言語毎の翻訳の編集を可能にします。各翻訳は完了フラッグを含みます。全ての言語の翻訳が完了すると、ストリングに完了のマークがつけられます。
ストリングが変更されると、その全部分の翻訳が未完了としてマークされ、ユーザーはその翻訳に更新が必要なことを知ります。
全てのストリング編集はWordPressアドミン・インターフェース内で行われますので、外部の呼び出しやサービスを必要としません。
WPMLのストリング翻訳とプラグインとテーマをいかに統合するか。
ストリング翻訳をプラグインやテーマにに統合する際、呼び出しの存在を確認することが重要です。
WPMLのストリング翻訳機能の呼び出しはif function_exists() ステートメントに囲まれる必要があります。 この方法を使うと、WPMLがアクティブな場合呼び出しが掛かります。 さもなければ、正常なオペレーションが保たれます。
またプラグイン開発者はユーザーがプラグインを使用開始したずっと後でWPMLがアクティベートされるケースを考慮するべきです。 この場合、 icl_register_string への呼び出しは新しいストリングが作成された時点で作成されていないため、翻訳が行われません。 この問題を克服するため、プラグインのアドミン画面がローディングされる毎に全てのユーザーのストリングを登録することをお薦めします。
これにより、実行時間は少なくなりますが、全てのストリングが翻訳に送られ、アップデートされることを保証できます。 コードは一度テストを行い、 icl_register_string が存在することを確認し、ユーザーが入力した全ストリングを登録するよう呼び出します。
この機能がブランクまたはNULL値で呼び出されると、WPMLにより無視されます。ストリングが既に存在し変更がない場合も無視されます。新しいまたは変更された翻訳が登録された場合のみ、効果があります。
翻訳テーブル全体が繰り返しキャッシュメモリーに保存されるため、ほとんど処理能力を使いません。
翻訳に送られる必要があるもの
まず何が icl_register()を使って翻訳される必要がないか考えましょう。
WPMLはいろいろな言語のためにいろいろな投稿文、ページ、タグ、カテゴリーを使います。 もしサイトが以下の二つのページを含む場合、- example.com/about/ と example.com/es/sobre/ WordPressでは違うページになります。
ユーザーがページが書かれた言語に合うテキストを入れると、ページ毎に追加されたテキストはマルチ言語で表示されます。
WPMLのストリング翻訳で翻訳する必要があるテキストは投稿文やページやタグやカテゴリーの範疇に入らないテキストです。 例えば、SEOプラグインはホームページのタイトルや、キーワードや内容用のテキストを入力させます。 このテキストはWPMLのストリング翻訳で訳す必要がありません。 この方法を使うと違う言語のホームページに翻訳が表示できます。