テーマとプラグインのハードコード化されたテキストを翻訳するために登録する方法をお探しなら、テーマとプラグインローカリゼーション記事をご覧ください。 一方、テーマまたはプラグインオプションを翻訳用に登録する方法をお探しなら、言語設定ファイルをご使用ください。

以下の記事はテーマとプラグインによりデータベース内に保管されたユーザー入力テキストについて説明します。注:テーマとプラグインをグループとして翻訳した方が良い要素を作成する場合(例、フォーム)、ストリングパッケージ翻訳をご覧ください。

例を見てみましょう。

タイトル入力欄とその他のオプションを有するカスタムウィジェットを作成したとします。 ‘apply_filters’ を使用してウィジェットタイトルを登録することができますが、その他のオプション欄に保存できる入力テキストも登録すべきです。

すべてのテキストがプラグイン/ウイジェット内でハードコード化されている場合、gettext (プラグインの .mo ファイル)を使用してローカライズすることができます。 しかしながらユーザーが入力したテキストはどうすればよいでしょうか?

WPMLによるストリング翻訳

WPML はこの種類のテキストを翻訳するストリング翻訳モジュールを含みます。 デフォルト設定により、これはWordPressが作るブログのタイトルやタグラインやウィジェットやその他のテキストの翻訳を補助します。 その他のプラグインとテーマの表示すべきテキスト翻訳にもこのメカニズムを使用できます。

1. 翻訳が必要なストリングを登録する。

ユーザーが新しいストリングを作る、または既存のストリングをアップデートする際、これらはWPMLのストリング・テーブルに登録される必要があります。

注:WPMLバージョン>=3.2 には、 wpml_register_single_string アクションフックをご使用ください。 以下の機能もご使用いただけますが、将来廃止される予定です。

これを行うためには以下を呼び出してください。

icl_register_string ( string $context, string $name, string $value );
  • $context
    • (ストリング) (要) 人間が読めるフォーマットのプラグイン名
  • $name
    • (ストリング) (要) トランスレーターが翻訳項目を見分けるためのストリング名
  • $value
    • (ストリング) (要) 翻訳が必要なストリング。

カスタムウイジェットの例では、ウィジェットオプションが保存または更新される時、 ‘icl_register_string()’ を呼び出す必要があります。これはカスタムウィジェットの「更新」機能で行われます。

以下が表示例です。 当社のカスタムウィジェットはタイトル、1行の入力欄、テキスト部分を含みます。

function update($new_instance, $old_instance){

		$instance = $old_instance;

		$instance['title'] 		= strip_tags($new_instance['title']);

		$instance['custom_input'] 	= strip_tags($new_instance['custom_input']);

		$instance['custom_textarea'] 	= $new_instance['custom_textarea'];

		

		//WMPL

		/**

		 * register strings for translation

		 */

		if (function_exists ( 'icl_register_string' )){

			icl_register_string('Widgets', 'Custom Widget - input field', $instance['custom_input']);

			icl_register_string('Widgets', 'Custom Widget - textarea field', $instance['custom_textarea']);

		}

		//WMPL

		

		

		return $instance;

	}

これはWPMLに入力欄のユーザー入力テキストとテキスト部分を翻訳する必要があることを教えます。 これらは「ウイジェット」ストリングコンテキストに、それぞれ「カスタムウイジェット-入力欄」と「カスタムウイジェット-テキストエリア欄」という名前で登録されます。

便利なヒント:プラグインに翻訳するテキストが必要なくなった場合(例、ユーザーがプラグインを削除した)、ストリングはこの呼び出しを使用して翻訳テーブルから取り除くことができます。

icl_unregister_string ( string $context, string $name );

2. ウイジェット表示時に翻訳を使用する

カスタムウイジェットがフロントエンドに表示される時、翻訳を使用するために取得する必要があります。

これを行うには、icl_translate機能を使用します。WPML 3.3から、 icl_translate フックはサポートされなくなります。 その代りに wpml_translate_single_string アクションフックをご使用ください。

WPML内部でストリング翻訳が働く方法

WPML はストリング翻訳インターフェースを含むため、ストリングをリストし、これらの翻訳を管理します。

WPMLのストリング翻訳インターフェース
WPMLのストリング翻訳インターフェース

ユーザーがストリング用の翻訳をクリックすると、複数言語翻訳パネルが開き、各言語の翻訳の編集が可能になります。 それぞれの翻訳は完全なフラッグを含みます。 全ての言語の翻訳が完了すると、ストリング自体が完了とマークされます。

ストリングが変更されると、その全部分の翻訳が未完了としてマークされ、ユーザーはその翻訳に更新が必要なことを知ります。

全てのストリング編集はWordPressアドミン・インターフェース内で行われますので、外部の呼び出しやサービスを必要としません。

WPMLのストリング翻訳とプラグインとテーマをいかに統合するか。

ストリング翻訳をプラグインやテーマに統合する際、呼び出しの存在を確認することが重要です。

WPMLのストリング翻訳機能への呼び出しはif_function_exists()ステートメントにラップされなくてはなりません。 WPMLがアクティベートされるとこれが呼び出されます。 さもなければ、正常なオペレーションが保たれます。

またプラグイン開発者はユーザーがプラグインを使用開始したずっと後でWPMLがアクティベートされるケースを考慮するべきです。 この場合、新しいストリングが作成された時点で icl_register_string への呼び出しは作成されていないため、翻訳が行われません。 この問題を克服するため、プラグイン用のアドミン画面がローディングされる毎に全てのユーザーのストリングを登録することをお薦めします。

これにより僅かな実行時間が追加されますが、全てのストリングが翻訳に送信され、更新されることを保証します。 本コードはicl_register_stringが存在することを確認するために一度テストを行い、ユーザーが入力した全ストリングを登録するために、これを呼び出します。

この機能が空白またはNULL値で呼び出される場合、WPMLにより無視されます。すでにストリングが存在し、変更されていない場合も呼び出しは無視されます。新しいまたは変更済みのストリングが登録された時のみ効果があります。

翻訳テーブル全体が繰り返しキャッシュメモリーに保存されるため、ほとんど処理能力を使いません。

翻訳に送られる必要があるもの

まず icl_register()を使って登録される必要がない物から考えましょう。

WPMLはいろいろな言語のためにいろいろな投稿文、ページ、タグ、カテゴリーを使います。 もしサイトが以下の2ページを含む場合、- example.com/about/ example.com/es/sobre/ 、これらはWordPressでは違うページになります。

ユーザーがページが書かれた言語に合うテキストを入れると、ページ毎に追加されたテキストは多言語で表示されます。

WPMLのストリング翻訳で翻訳する必要があるテキストは投稿文やページやタグやカテゴリーの範疇に入らないテキストです。 例えば、SEOプラグインはホームページのタイトルや、キーワードや内容用のテキストを入力させます。 このテキストはWPMLのストリング翻訳で訳す必要がありません。 この方法を使うと違う言語のホームページに翻訳が表示できます。