web-dev-qa-db-ja.com

WordPressプラグインの翻訳を準備するにはどうすればいいですか?

翻訳対応のプラグインを作成するための最善の方法は何ですか?

最初から翻訳する必要はありませんが、簡単に翻訳できるようにする必要があるため、さまざまな文化の開発者がプラグインのローカライズプロセスに参加できます。

19
Nabil Kadimi

1.ローカライズを念頭に置いて書く

echoまたはprint()を使用してテキスト出力を生成せず、代わりにWordPress関数__()および_e()を使用します。

/** Not localization friendly */
echo "Welcome to my plugin";    
// OR
print("Welcome to my plugin");

/** Localization friendly */
_e('Welcome to my plugin', 'my-plugin');
// OR
$my_text = __('Welcome to my plugin', 'my-plugin');
echo $my_text;

_e()および__()は、最初のパラメーターとして提供されるテキストの翻訳を(現在の言語で)提供します。 _e()はテキストを出力しますが、__()はテキストを返します。

2番目のパラメーターはtext domainです。最初のパラメーターとして提供されたテキストがこのプラグインに属することをWordPressに伝えるために使用します。任意の名前を使用できますが、ディレクトリのプラグインファイルに使用した名前と同じ名前を使用することを好みます。より直感的にわかります。

「Hello <username>」のような動的テキストを出力する方法は?

__()およびsprintf()の場合:

/** Get the username */
$username = 'Magictrick';

/** Not localization friendly */
echo "Hello $username";     

/** Localization friendly */
printf(__('Hello %s', 'my-plugin'), $username);
// OR 
$my_text = sprintf(__('Hello %s', 'my-plugin'), $username);
echo $my_text;

2. .pot/.po/.moファイルを準備します

定義

  • 。potファイル:プラグイン開発者が自由に使用でき、新しい翻訳を作成するための開始点として使用されます。WordPressは使用しません。
  • A .po file:は、あなたまたは他の誰かが開始した翻訳ファイルであり、おそらく完了しているので、WordPressは使用しません。
  • A.mo file:.poファイルを保存するたびにPoeditによって自動的に作成されます。これらのファイルでできることは、.poファイルを作成または更新するたびにアップロードまたは再アップロードすることだけです。 WordPressは.moファイルから翻訳を取得します

Poedit および新しいカタログを作成(File› New Catallog ...)で開くこれらの設定:

  • プロジェクト情報:あなた(またはあなたのチーム)の情報を使用してください。言語と国はプラグインのデフォルト言語と一致する必要があります
  • パス:
    • 基本パス:.
    • パス:すべてを削除して..を追加します(言語ファイルは、languagesというプラグインサブディレクトリに保存します)
  • キーワード:すべて削除して__および_eを追加

保存カタログを/my_wordpress_blog/wp-content/plugins/my-plugin/languages/my-plugin.potとして、およびスキャン更新ボタンを押して翻訳可能なテキストのプラグインファイルを作成します。そのカタログの近くで更新が終了したら、プラグインに新しい翻訳可能な文字列(__()または_e()で囲まれた)を追加しない限り、そのファイルを更新する必要はありません。

では、最初の翻訳を作成しましょう(fr_FRを使用します)。

PodeitPOTファイルからカタログを作成(ファイル› POTファイルから新しいカタログ...)

  • プロジェクト情報:あなた(またはあなたのチーム)の情報を使用してください言語と国を変更、フランス語とフランスを使用します
  • パス:変更しないでください
  • キーワード:変更しないでください

保存/my_wordpress_blog/wp-content/plugins/my-plugin/languages/my-plugin-fr_FR.poとしてのカタログ。文字列の一部またはすべてを変換しますsave .poファイル、pload .poおよび.moファイルの両方。

.poファイルを保存すると、。poファイルのファイル名が重要という同じ名前の.moファイルが生成されることに注意してください。これは、プラグインテキストドメインの連結で構成されます(my-プラグイン)および言語ロケール(fr_FR)、プラグインの.poファイルには常に[textdomain]-[locale] .poのような名前を付けます。ここにいくつかの例を示します。

  • イタリア語/イタリア:wpcf7-it_IT.po
  • ポルトガル語/ブラジル:wpcf7-pt_BR.po
  • アラビア語:wpcf7-ar.po...はい!

プラグインが新しいテキストで更新されるたびに、pdate poファイル、translate新しい文字列、および。poおよび.moを再アップロードファイル

3.現在の言語の翻訳されたテキストをロードするようにプラグインに指示します

プラグインのどこかで、WordPressに.moファイルを使用するように指示する必要があります。プラグインファイルの先頭で次のコードを使用して実行できます。

function my_plugin_init() {
  load_plugin_textdomain( 'my-plugin', false, 'my-plugin/languages' );
}
add_action('init', 'my_plugin_init');

my-plugin関数の1番目と3番目のパラメーターで、load_plugin_textdomainをプラグイン名に置き換えます。

4.テストとトラブルシューティング

動作しない可能性があるいくつかの理由:

  • 文字列は.potまたは.poファイルにインポートされません
    • →間違ったカタログ設定(パスまたはキーワード、あるいはその両方)
  • テキストはWordPressサイトでは翻訳されません
    • →その言語の.moファイルがないか、ファイル名が間違っている
    • →テキストドメインは使用されていません(_e('my text')_e('my text', 'my-plugin')に置き換えてください)
    • →テキストドメインがロードされていません(上記の例を正しいパラメーターで使用すると、WPはエラーについて警告しません)
37
Nabil Kadimi

Nabilの答えはかなり完成していますが、簡単なバリエーションがあります。

  1. あなたのプラグインはWordPress.orgプラグインリポジトリにあります

  2. あなたのプラグインがWordPress 4.6以上でのみ動作することを要求しても構わないと思っています。

手順は次のとおりです。

  1. プラグインのreadme.txtファイルに、Requires at least: 4.6を追加します。 https://developer.wordpress.org/plugins/wordpress-org/how-your-readme-txt-works/ を参照してください。

  2. まだない場合は、プラグインをWordPressプラグインリポジトリにアップロードします。 https://wordpress.org/plugins/developers/add/ を参照してください。

  3. プラグインのスラッグ/テキストドメインを探します。それには、WordPressプラグインレポジトリのプラグインのページにアクセスしてください。 URLは https://wordpress.org/plugins/your-plugin-slug/ のようになります。 URLの最後の部分「your-plugin-slug」は、プラグインのスラッグです。それが翻訳機能のテキストドメインに使用するものです。

  4. プラグインでWordPressの翻訳機能を使用します(__e(‘hello’, ‘my-plugin-domain’);のように)。前の手順で取得した正しいプラグインテキストドメインを必ず使用してください。詳細については https://developer.wordpress.org/plugins/internationalization/how-to-internationalize-your-plugin/ を参照してください。

上記の手順を実行すると、WordPressは以下の処理を行います。

  • 翻訳可能なすべての文字列についてプラグインを解析します(Poeditをインストールして実行する必要はありません)。
  • 誰かがあなたのプラグインの翻訳をtranslate.wordpress.orgに投稿できるようにしてください(あなた自身のサイトをあなたのプラグインの翻訳専用にしたり、翻訳者があなたに翻訳を投稿するためのカスタムプロセスを持ってもらう必要はありません)
  • 誰かがあなたのプラグインを使うとき、WordPressはそれが彼らの言語に翻訳されているかどうかをチェックし、もしそうなら、彼らの言語でそれを見せる(彼らまたは彼らのウェブサイトに翻訳ファイルをロードする必要はありません)

(私のブログ記事からの回答はここにあります: https://cmljnelson.blog/2019/01/01/the-really-lazy-way-to-translate-a-wordpress-plugin/

2
thespacecamel