ホームページ >CMS チュートリアル >&#&プレス >WordPress I18N:プラグインの翻訳を準備します

WordPress I18N:プラグインの翻訳を準備します

Jennifer Aniston
Jennifer Anistonオリジナル
2025-02-19 12:37:11293ブラウズ

WordPress I18N:プラグインの翻訳を準備します

以前の投稿では、WordPress Internationalizationの基本について説明しました(I18Nと略されました)。 WordPressのローカライズされたバージョンをインストールする方法と、既存のWordPressサイトをローカライズされたバージョンに簡単に変換する方法。 この記事では、WordPressプラグインを国際化するプロセスを説明します。このプロセスは難しくありません。知識が取得されると、WordPressプラグインを他の言語に簡単に翻訳できます。

キーテイクアウト

Internationalization(I18N)は、他の言語に簡単に翻訳するプラグインを開発するプロセスであり、ローカリゼーション(L10N)は、国際化されたプラグインを新しい言語に変換するその後のプロセスです。

WordPressプラグインの翻訳を準備することは、グローバルな視聴者にリーチし、ユーザーエクスペリエンスを強化し、異なる言語を話すユーザーがアクセスできるようにすることでユーザーベースを増やすために重要です。
    翻訳の準備が整うプロセスには、翻訳ヘッダー(テキストドメインとドメインパス)、テキストドメインの読み込み、文字列、プレースホルダー、HTML、複数形、コンテキスト、翻訳文字列などのさまざまな要素の国際化が含まれます。 >
  • WordPress i18nは、テキストを翻訳するためのツールを提供するGNU GetTextローカリゼーションフレームワークを使用します。これには、すべてのテキスト文字列を__()または_e()関数に包み、プラグインからのすべての翻訳可能な文字列を含む.pot(ポータブルオブジェクトテンプレート)ファイルを作成します。
  • 国際化とローカリゼーションの違い
  • 長年にわたり、開発者はこれらの用語の意味を誤解する傾向があります - 国際化とローカリゼーション。
  • 国際化はプラグインを開発するプロセスであるため、他の言語に簡単に翻訳できます。
  • ローカライズは、国際化されたプラグインを新しい言語に変換するその後のプロセスについて説明します。

国際化は、しばしばi18nとして省略されていること(「i」と「n」の間に18文字があるため)とl10nとして省略されていることに注意してください(「l」と「l」との間に10文字があるためです。 'n'。)

なぜInternationalize?

    答えは簡単です。 WordPressは、多くの異なる言語で世界中で使用されています。プラグインが国際化されると、彼らは自分の言語でプラグインを使用することで明らかに利益を得る世界の他の地域からより多くの視聴者を引き付けます。
  • 開発者として、他の言語を話さないため、ローカライズされたバージョンをプラグインのバージョンを提供する時間がない場合があります。ただし、プラグインを国際化すると、ソースコードを必ずしも変更せずにローカリゼーションを作成するために、他の人がドアを開けたままにしておきます。

    プラグインInternationalization

    プラグインの国際化とローカリゼーションの概念に精通しているので、プラグインを翻訳の準備をするプロセスに飛び込みましょう。

    翻訳ヘッダーを設定

    翻訳可能なプラグインを作成するための最初のステップは、プラグインヘッダーに翻訳ヘッダーを含めることです。

    翻訳ヘッダーはテキストドメインとドメインパスです。

    テキストドメインは、プラグインに属するすべてのテキストを示すために使用されます。 これは、WordPressがすべてのロードされた翻訳を区別できるようにするユニークな識別子です。これにより、既存のWordPressツールを使用すると、移植性が向上し、より良く再生されます。

    テキストドメインは、プラグインのナメクジと一致する必要があります。たとえば、プラグインがsample-plugin.phpという単一のファイルである場合、またはサンプルプラギンと呼ばれるフォルダーに含まれている場合、

    テキストドメイン

    はsample-pluginである必要があります。

    テキストドメインに関するメモ

    テキストドメイン名は、アンダースコアではなくダッシュを使用する必要があります。 テキストドメインはプラグインスラッグと一致する必要があると言ったことを覚えていますか?結局のところ、それは真実ではないかもしれません。プラグインスラッグの代わりに、プラグインの1つで簡単な実験を行いました。ユニークなテキストを使用して、問題なく動作しました。

    モラル:テキストドメインがユニークであることを確認して、他のプラグインのドメインと衝突しないでください。

    ドメインパスは、WordPressが.mo翻訳ファイルを検索するフォルダーです。

    デフォルトでは、WordPressは、使用する翻訳ファイルのプラグインディレクトリを検索します。プラグインのルートフォルダーに翻訳ファイルを置くと、プラグイン構造が乱れている可能性があります。 たとえば、翻訳ファイルをフォルダーに保管したい場合。 /言語、ドメインパスヘッダーを使用してWordPressに通知する必要があります。 以下は、翻訳を含むWordPressプラグインの典型的なヘッダーです。

    テキストドメインを読み込みます

    ここで、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. 文字列翻訳
    2. プレースホルダーを使用して
    3. html翻訳
    4. 複数形に対処します
    5. コンテキストによる
    6. の曖昧性
    7. 翻訳文字列の脱出
    注意:文字列espw-pluginは、このチュートリアルでテキストドメインとして使用されます。

    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>

    PHPおよびWordPress開発者として、プレースホルダーが何であるかを知っていると思います。詳細については、Sprintfとprintf()Phpドキュメントをすばやくスキミングできます。

    以下の例のような文字列で変数を使用している場合は、プレースホルダーを使用する必要があります。
    <span><span><?php load_plugin_textdomain( $domain, $abs_rel_path, $plugin_rel_path ) ?></span></span>

    正しい方法は、printf()関数を次のように使用することです。

    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つのコメント」があります。他の言語では、複数の複数形式を持つことができます。

      以下のコードは、_n()関数を使用してそのようなシナリオを処理する方法を示しています。
    • コード説明上のコードは、これらの3つの関数で構成されています - printf、_n、number_format_i18n。
    • 簡単な同化のために、関数コードは各関数コンポーネントが説明されて分析されます。
      <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のスクリーンショットです。

      _x()翻訳された文字列を取得している間、_ex()はそれを表示します。

      6。翻訳文字列の脱出

      WordPressには、データを検証および消毒するための多くの機能があります。リストの中には、翻訳テキストを逃がすための関数があります - esc_html()、esc_html_e()、esc_html_x()、esc_attr()、esc_attr_e()、esc_attr_x()。 WordPress Codexでこれらの各機能に関する詳細情報を入手できます。

      これらすべてを説明する必要はありませんが、彼らがしていることは基本的に翻訳可能なテキストを逃れることです。

      wlap up

      WordPressの目標の1つは、世界中のユーザーがコンテンツを公開できるようにすることです。プラグイン開発者として、プラグインを国際化するときにユーザーの公開プロセスをさらに緩和するのに役立ちます。

      このチュートリアルの最初の部分は、基本的にプラグインI18nについて知っておくべきすべてのものについてでした。

      結論の部分は、プラグインの翻訳を準備する方法と、プラグインを新しい言語にローカライズする方法を学ぶ方法のウォークスルーです。

      このチュートリアルから何か新しいことを学んだことを願っています。

      ハッピーコーディング!

      WordPress I18Nおよびプラグインの翻訳に関するよくある質問(FAQ) WordPressプラグインの翻訳対応を作成することの重要性は何ですか?

      WordPressプラグイン翻訳を準備することは、グローバルな視聴者にリーチするために重要です。すべてのWordPressユーザーが英語を話すわけではありません。プラグインを国際化することにより、さまざまな言語を話すユーザーがアクセスできるようにし、それによりユーザーベースが増加します。また、ユーザーが母国語でプラグインと対話できるため、ユーザーエクスペリエンスが向上し、よりユーザーフレンドリーになります。

      WordPress I18Nはどのように機能しますか?プラグインのテキスト文字列を他の言語に翻訳できるようにします。これは、これらのテキスト文字列を翻訳できる特別な関数で包むことによって達成されます。 WordPressは、この目的のためにGNU getTextローカリゼーションフレームワークを使用します。これにより、テキストを翻訳するための一連のツールが提供されます。プラグインの翻訳準備には、いくつかのステップが含まれます。まず、すべてのテキスト文字列を__()または_e()関数に巻き付けることにより、プラグインを国際化する必要があります。次に、プラグインからすべての翻訳可能な文字列を含む.pot(ポータブルオブジェクトテンプレート)ファイルを作成する必要があります。このファイルは、翻訳された文字列を含む.po(ポータブルオブジェクト)および.mo(マシンオブジェクト)ファイルを作成するためのテンプレートとして使用されます。 WordPress i18n?

      __()および_e()関数は、両方ともWordPress i18nで使用され、テキスト文字列を翻訳可能にします。それらの主な違いは、__()が翻訳された文字列を返し、_e()が翻訳された文字列を直接エコーまたは出力することです。したがって、変数に翻訳された文字列を保存するときは__()を使用し、翻訳された文字列をユーザーに表示する場合は_e()を使用します。 WordPressプラグインをさまざまな言語に翻訳するにはどうすればよいですか?

      WordPressプラグインを異なる言語に翻訳するには、各言語の.poおよび.moファイルを作成する必要があります。これらのファイルには翻訳された文字列が含まれており、ISO-639言語コード(たとえば、英語のEN_US、フランス語のFR_FR)に従って命名されています。 PoEDITやLoco Translateなどのツールを使用してこれらの翻訳ファイルを作成および管理できます。 PoEDITとLoco Translateは、翻訳ファイルを作成および管理するための人気のあるツールです。 Webベースの翻訳ツールであるGlotPressは、WordPressコミュニティによってWordPressコア、プラグイン、テーマを翻訳するためにも使用しています。 WordPressの設定で言語を変更し、プラグインのテキスト文字列が正しく翻訳されているかどうかを確認することにより、WordPressプラグインを翻訳の準備をテストできます。また、WordPress I18Nチェッカープラグインなどのツールを使用することもできます。これは、一般的なi18nエラーをプラグインでチェックします。 WordPress PolyGlotsチームを通じて。 WordPressをさまざまな言語にローカリングする責任があります。チームに参加して、プラグインとテーマを母国語に翻訳することができます。 .po、および.moファイルは、WordPress i18nで重要な役割を果たします。 .potファイルは、プラグインからすべての翻訳可能な文字列を含むテンプレートです。 .poファイルは、翻訳された文字列を含むヒューマン読み取り可能なファイルであり、.moファイルは、翻訳された文字列を表示するためにWordPressが使用するマシン読み取り可能なファイルです。 Theme Translation-Ready?WordPress Theme Translation-Readyを作成するには、プラグインと同様のプロセスが含まれます。 __()または_e()関数にすべてのテキスト文字列をラップすることにより、テーマを国際化する必要があります。次に、.potファイルを作成し、各言語の.poおよび.moファイルを作成するためのテンプレートとして使用する必要があります。

以上がWordPress I18N:プラグインの翻訳を準備しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。