プラグインやテーマからのユーザー入力テキストを翻訳のために登録する方法を説明します。登録すると、文字列翻訳で翻訳できるようになります。
ユーザー入力テキストを登録する方法
ユーザーが新しい文字列を作成したり、既存の文字列を更新したりする場合、それらをWPMLの文字列テーブルに登録する必要があります。
この呼び出しは、wpml_register_single_stringアクションフックを使用して行うことができます。
do_action( 'wpml_register_single_string', string $context, string $name, string $value )
- $context – プラグインまたはテーマの名前(人間が読める形式)。
- $name – 文字列の名前(翻訳者が何を翻訳しているのかを理解するのに役立ちます)。
- $value – 翻訳する必要がある文字列。
title、1行のinputフィールド、およびtextareaを含む、このカスタムウィジェットの例を考えてみましょう。ウィジェットのオプションが保存または更新されたときに、これらのフィールドを翻訳のために登録するには、update関数を使用します。
wpml_register_single_stringアクションフックの使用
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'];
//WPML
/**
* register strings for translation
*/
do_action( 'wpml_register_single_string', 'Widgets', 'Custom Widget - input field', $instance['custom_input'] );
do_action( 'wpml_register_single_string', 'Widgets', 'Custom Widget - textarea field', $instance['custom_textarea'] );
//WPML
return $instance;
}この例では、inputフィールドとtextareaフィールドのユーザー入力テキストを翻訳する必要があることをWPMLに伝えます。これらのテキストは、Widgets文字列コンテキストの下に、それぞれCustom Widget – input fieldおよびCustom Widget – textarea fieldという名前で登録されます。
テキストを登録すると、wpml_translate_single_stringアクションフックを使用して、フロントエンドに翻訳を表示できるようになります。
プラグインおよびテーマと文字列翻訳を統合する方法
文字列翻訳をプラグインやテーマと統合する際は、呼び出しが存在することを確認することが重要です。
条件付き呼び出しの実装
呼び出しをif_function_exists()ステートメントで囲むことで、WPMLが有効化されている場合は呼び出され、そうでない場合は通常の動作が維持されるようにします。
WPMLの遅延有効化の処理
テーマやプラグインの開発者は、ユーザーがテーマやプラグインを使い始めてからずっと後になってWPMLが有効化されるケースも考慮する必要があります。
このような場合、作成時にwpml_register_single_stringの呼び出しが行われないため、文字列は翻訳されません。これを解決するには、プラグインの管理画面が読み込まれるたびに、すべてのユーザー文字列を登録する必要があります。
これによりわずかな実行時間が追加されますが、文字列が常に翻訳に送信され、最新の状態に保たれることが保証されます。
コードはまず、wpml_register_single_string関数が存在するかどうかを確認する必要があります。存在する場合は、関数を呼び出してすべてのユーザー入力テキストを登録します。仕組みは以下のとおりです。
- 関数が空白またはNULL値で呼び出された場合、WPMLはこれらの呼び出しを無視します。
- 文字列がすでに存在し、変更されていない場合、WPMLは呼び出しを無視します。
- 関数は、新しい文字列または変更された文字列が登録された場合にのみアクションを実行します。
翻訳テーブル全体がメモリにキャッシュされるため、繰り返し呼び出しても処理能力はほとんど消費されません。
追加リソース
テーマやプラグインのハードコードされたテキストを翻訳のために登録するには、文字列翻訳ページに表示されない文字列を見つける方法に関する記事をご覧ください。
テーマやプラグインのオプションを翻訳のために登録するには、言語設定ファイルの使用に関するガイドをご覧ください。
テーマやプラグインの要素をグループとして翻訳するには、文字列パッケージ翻訳をご覧ください。