web-dev-qa-db-ja.com

子テーマにはテキストドメインが必要ですか

Noobの質問ですみません。

テキストドメインは子供のテーマに必要ですか?私はテキストドメインが宣言されていない単純な子テーマを作成しています。したがって、翻訳対象の文字列を使用するときは、親テーマのtext-domainを使用する必要があります(はい、親テーマにはtext-domainがロードされ、.mo/.poファイルもあります)。

例えば、私の子供のテーマテンプレートにこの行を追加する

<?php __('Some String', 'parent-text-domain');> 

文字列の上は翻訳されますか?

前もって感謝します

8
Ayanize

TL; DR: 親テーマに含まれる文字列を親テーマでどのように使用するかについては、子テーマにテキストドメインを設定する必要はありません。

ただし、親テーマで使用されていない文字列を翻訳可能にするには、関連する翻訳(.mo)ファイルを含む別のテキストドメインが必要になります。


翻訳ワークフロー

WordPressが翻訳機能の中で文字列を見つけた場合:

  1. 必要なテキストドメインの翻訳が( load_plugin_textdomain または load_theme_textdomain または load_textdomain を介して)ロードされているかどうかをチェックし、もしそうであれば3.に行きます
  2. Translationsフォルダ(デフォルトではwp-content/languages)に、一致するtextdomainファイルが含まれているかどうかを確認します。対応するtextdomainファイルは"{$domain}-{$locale}.mo"です。ここで、$domainは翻訳する文字列のテキストドメイン、$localeはWebサイトの現在のロケールです。そのファイルが見つからない場合は元の文字列が返され、それ以外の場合はロードされてWPが次のポイントに進みます。
  3. Textdomainがロードされると、WPは、必要な文字列がそのファイルに含まれているかどうかを調べます。元の文字列が返されない場合は、それ以外の場合はWPは次のポイントに進みます。
  4. 見つかった翻訳された文字列が何らかの単数形/複数形の解決を必要とする場合(例えば _n() を使用する場合)、それらは行われます。そうでなければWPは次の点に進む。
  5. フィルタフックが翻訳された文字列に適用され( https://developer.wordpress.org/?s=gettext&post_type%5B%5D=wp-parser-hook を参照)、最後に結果が返されます。

そう?

親テーマのテキストドメインを子テーマからの翻訳機能で使用する場合(親テーマがtextdomainファイルを出荷してロードする、またはそれがtranslationsフォルダに翻訳ファイルを持っていると仮定して)、WordPressはの中のポイント3.に到着します文字列がファイル内で利用可能な場合(親テーマで使用されているため)、それ以外の場合はそうなりません。

つまり、親テーマのカスタム文字列には独自の翻訳ファイルが必要です。

理論的には、WordPressは同じテキストドメインを何度もロードして「マージ」できるため、別の翻訳ファイルで親のテキストドメインを使用することは可能ですが、翻訳フォルダーに"{$domain}-{$locale}.mo"の形式で存在するファイルは1つだけなので問題があります(上記の一覧のポイント2.を参照)。

したがって、結論として、子テーマを翻訳可能にする唯一の実行可能な方法は、親テーマで使用されていない文字列が含まれている場合、独自のテキストドメインと独自の翻訳ファイルを使用することです。

6
gmazzap

あなたの子供のテーマが親のテーマとは異なる文字列を含む場合。

子テーマで異なるテキストドメインを使用する適切な方法は、load_child_theme_textdomain()関数です。他のload _..._ textdomain関数と同じように使うことができます。

用心しなさい!

プラグイン言語ファイルとは異なり、my_child_theme-de_DE.moのような名前は機能しません。プラグイン言語ファイルではファイル名にテキストドメインを指定できますが、これはテーマや子テーマでは機能しません。テーマの言語ファイル には言語ショートカットのみを含める必要があります

0
docker