ホームページ >CMS チュートリアル >&#&プレス >WordPress I18N:プラグインの翻訳を準備します
以前の投稿では、WordPress Internationalizationの基本について説明しました(I18Nと略されました)。 WordPressのローカライズされたバージョンをインストールする方法と、既存のWordPressサイトをローカライズされたバージョンに簡単に変換する方法。 この記事では、WordPressプラグインを国際化するプロセスを説明します。このプロセスは難しくありません。知識が取得されると、WordPressプラグインを他の言語に簡単に翻訳できます。
キーテイクアウト
なぜInternationalize?
プラグインの国際化とローカリゼーションの概念に精通しているので、プラグインを翻訳の準備をするプロセスに飛び込みましょう。
翻訳ヘッダーを設定翻訳ヘッダーはテキストドメインとドメインパスです。
テキストドメインは、プラグインに属するすべてのテキストを示すために使用されます。 これは、WordPressがすべてのロードされた翻訳を区別できるようにするユニークな識別子です。これにより、既存のWordPressツールを使用すると、移植性が向上し、より良く再生されます。テキストドメインは、プラグインのナメクジと一致する必要があります。たとえば、プラグインがsample-plugin.phpという単一のファイルである場合、またはサンプルプラギンと呼ばれるフォルダーに含まれている場合、
テキストドメインはsample-pluginである必要があります。
テキストドメインに関するメモテキストドメイン名は、アンダースコアではなくダッシュを使用する必要があります。 テキストドメインはプラグインスラッグと一致する必要があると言ったことを覚えていますか?結局のところ、それは真実ではないかもしれません。プラグインスラッグの代わりに、プラグインの1つで簡単な実験を行いました。ユニークなテキストを使用して、問題なく動作しました。
モラル:テキストドメインがユニークであることを確認して、他のプラグインのドメインと衝突しないでください。テキストドメインを読み込みます
ここで、load_plugin_textdomain()関数を使用して、ユーザーの言語に存在する場合は翻訳ファイルをロードするようにwordpressに指示します。 以下は関数概要です。
最初のパラメーター$ドメインはテキストドメインである必要があります。 $ abs_rel_pathは非推奨であり、falseに設定する必要があります。最後に、$ plugin_rel_pathは、翻訳ファイルへの相対パスです
翻訳MOファイルがプラグインの独自のディレクトリにある場合、次のように使用してください。翻訳MOファイルがプラグインの言語サブディレクトリにある場合。次のように使用してください:
load_plugin_textdomain関数を呼び出すだけでなく、このようなplugins_loadedアクションと同じくらい早くプラグインで呼び出す必要があります。
<span><span><?php </span></span><span><span>/* </span></span><span><span> Plugin Name: Enable Shortcode and PHP in Text widget </span></span><span><span> Plugin URI: http://w3guy.com/shortcode-php-support-wordpress-text-widget/ </span></span><span><span> Description: Enable shortcode support and execute PHP in WordPress's Text Widget </span></span><span><span> Author: Agbonghama Collins </span></span><span><span> Version: 1.2 </span></span><span><span> Author URI: http://w3guy.com </span></span><span><span> Text Domain: espw-plugin </span></span><span><span> Domain Path: /languages/ </span></span><span><span> */</span></span>プラグインi18n
チュートリアルのこのセグメントは、次のように分割されます。
1。文字列翻訳
<span><span><?php </span></span><span><span>/* </span></span><span><span> Plugin Name: Enable Shortcode and PHP in Text widget </span></span><span><span> Plugin URI: http://w3guy.com/shortcode-php-support-wordpress-text-widget/ </span></span><span><span> Description: Enable shortcode support and execute PHP in WordPress's Text Widget </span></span><span><span> Author: Agbonghama Collins </span></span><span><span> Version: 1.2 </span></span><span><span> Author URI: http://w3guy.com </span></span><span><span> Text Domain: espw-plugin </span></span><span><span> Domain Path: /languages/ </span></span><span><span> */</span></span>
PHPおよびWordPress開発者として、プレースホルダーが何であるかを知っていると思います。詳細については、Sprintfとprintf()Phpドキュメントをすばやくスキミングできます。
以下の例のような文字列で変数を使用している場合は、プレースホルダーを使用する必要があります。<span><span><?php load_plugin_textdomain( $domain, $abs_rel_path, $plugin_rel_path ) ?></span></span>
WordPressプラグインリポジトリでホストされているいくつかのプラグインのコードを使用すると、このようなことがわかります。
文字列は翻訳可能になりましたが、PHP変数$都市も翻訳可能になります。
<span>load_plugin_textdomain( 'espw-plugin', false, dirname( plugin_basename( __FILE__ ) ) );</span>これは悪い練習です。翻訳者が変数を誤って変更したり、悪意のあるコードをプラグインコードベースに挿入したりする可能性があるため、最終的にプラグインが誤動作します。
sprintf関数はprintfに類似しています。これは、プレースホルダーを使用して文字列をフォーマットし、printfはフォーマットされた文字列を出力し、sprintfは文字列を返します。
例:次のコードは、フォーマットされた文字列を変数$テキストに割り当てます。<span>load_plugin_textdomain( 'espw-plugin', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );</span>
3。 html翻訳
<span>function load_plugin_textdomain() { </span> <span>load_plugin_textdomain( 'espw-plugin', FALSE, basename( dirname( __FILE__ ) ) . '/languages/' ); </span><span>} </span> <span>add_action( 'plugins_loaded', 'load_plugin_textdomain' );</span>
<span>$text = __( 'Hello, SitePoint Readers!', 'espw-plugin' );</span>翻訳可能な文字列にHTMLを含めることは、コンテキストに依存します
例はリンクです(それを囲むテキストから分離):
別の例は、段落のリンクです(周囲のテキストから分離されていません):
4。複数項
を扱う_n()関数を使用して、アイテムの変更数を変更できるときに変更される文字列。
この関数は、4つの引数、すなわち<span>_e( 'Hello, SitePoint Readers!', 'espw-plugin' );</span>を受け入れます
複数 - 文字列の複数形
count - 特異形式を返すべきかどうかを決定するオブジェクトの数
<span>echo 'Your city is $city.'</span>
<span>printf( </span> <span>__( 'Your city is %s.', 'espw-plugin' ), </span> <span>$city </span><span>);</span>テキストドメイン - プラグインテキストドメイン
_n()関数がどのように機能するかを理解するためのいくつかの例を見てみましょう。
英語では、「1つのコメント」と「2つのコメント」があります。他の言語では、複数の複数形式を持つことができます。
<span><span><?php </span></span><span><span>/* </span></span><span><span> Plugin Name: Enable Shortcode and PHP in Text widget </span></span><span><span> Plugin URI: http://w3guy.com/shortcode-php-support-wordpress-text-widget/ </span></span><span><span> Description: Enable shortcode support and execute PHP in WordPress's Text Widget </span></span><span><span> Author: Agbonghama Collins </span></span><span><span> Version: 1.2 </span></span><span><span> Author URI: http://w3guy.com </span></span><span><span> Text Domain: espw-plugin </span></span><span><span> Domain Path: /languages/ </span></span><span><span> */</span></span>
_n関数に渡された最初の引数は、コメントの数が特異なときに表示されるテキストです。
2番目は、コメントの数が1より大きい場合に表示されるテキストです。プレースホルダー%sには、number_format_i18n(get_comments_number())の値が含まれます。
3番目の引数get_comments_number()は、コメント数を返す関数であると想定されています。それが1を返す場合、最初の引数1コメントがprintfによって出力されます。
注意:プレースホルダー%sは、number_format_i18n(get_comments_number()によって返された整数に置き換えられます。最後に、4番目の引数は翻訳
テキストドメイン。
ですfunction number_format_i18n()は、ロケールに基づいてコメントカウントをフォーマットに変換します。詳細については、ドキュメントを参照してください。
number_format_i18n()に類似しているのは、タイムスタンプに基づいてローカライズされた形式で日付を取得する日付_i18nです。 _n()関数については、以下は関数の仕組みについての別のデモンストレーションです。
変数$ countが1を返す場合、1つのスパムメッセージを削除したテキストが表示されます。ただし、1を超える場合、削除された%Dスパムメッセージは、プレースホルダー%dを$ countの整数値に置き換えて表示されます。5。コンテキストによる曖昧性
いくつかのコンテキストで1つの用語が使用されることがありますが、それは英語では同じ単語であり、他の言語では異なる方法で翻訳する必要があります。 たとえば、「コメントを投稿するにはここをクリックしてください」と「この投稿を編集する」のように、単語の投稿は動詞として使用できます。 このような場合、_xまたは_ex関数を使用する必要があります。
__()と_e()に似ていますが、追加の引数があります - $ Context。
<span><span><?php load_plugin_textdomain( $domain, $abs_rel_path, $plugin_rel_path ) ?></span></span>このメソッドを使用する両方の場合、元のバージョンの文字列コメントが取得されますが、翻訳者には翻訳の2つのコメント文字列が表示されます。
関数によって翻訳可能になった文字列_x()がPoEDITなどの翻訳ツールによって解析されると、文脈引数は文字列/テキストが使用されたコンテキストで翻訳者にヒントを提供します。 ドイツ語では、名詞としての投稿はbeitragですが、動詞が動詞です。 以下は、文字列をドイツ語に翻訳するPoEDITのスクリーンショットです。
6。翻訳文字列の脱出
WordPressには、データを検証および消毒するための多くの機能があります。リストの中には、翻訳テキストを逃がすための関数があります - esc_html()、esc_html_e()、esc_html_x()、esc_attr()、esc_attr_e()、esc_attr_x()。 WordPress Codexでこれらの各機能に関する詳細情報を入手できます。
これらすべてを説明する必要はありませんが、彼らがしていることは基本的に翻訳可能なテキストを逃れることです。
wlap upWordPressの目標の1つは、世界中のユーザーがコンテンツを公開できるようにすることです。プラグイン開発者として、プラグインを国際化するときにユーザーの公開プロセスをさらに緩和するのに役立ちます。
このチュートリアルから何か新しいことを学んだことを願っています。
ハッピーコーディング!
WordPress I18Nおよびプラグインの翻訳に関するよくある質問(FAQ) WordPressプラグインの翻訳対応を作成することの重要性は何ですか?WordPressプラグイン翻訳を準備することは、グローバルな視聴者にリーチするために重要です。すべてのWordPressユーザーが英語を話すわけではありません。プラグインを国際化することにより、さまざまな言語を話すユーザーがアクセスできるようにし、それによりユーザーベースが増加します。また、ユーザーが母国語でプラグインと対話できるため、ユーザーエクスペリエンスが向上し、よりユーザーフレンドリーになります。
WordPress I18Nはどのように機能しますか?プラグインのテキスト文字列を他の言語に翻訳できるようにします。これは、これらのテキスト文字列を翻訳できる特別な関数で包むことによって達成されます。 WordPressは、この目的のためにGNU getTextローカリゼーションフレームワークを使用します。これにより、テキストを翻訳するための一連のツールが提供されます。プラグインの翻訳準備には、いくつかのステップが含まれます。まず、すべてのテキスト文字列を__()または_e()関数に巻き付けることにより、プラグインを国際化する必要があります。次に、プラグインからすべての翻訳可能な文字列を含む.pot(ポータブルオブジェクトテンプレート)ファイルを作成する必要があります。このファイルは、翻訳された文字列を含む.po(ポータブルオブジェクト)および.mo(マシンオブジェクト)ファイルを作成するためのテンプレートとして使用されます。 WordPress i18n?
以上がWordPress I18N:プラグインの翻訳を準備しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。