私は解決策を見つけたと思うが、少し前に
前提
load_theme_textdomain()
そして、load_child_theme_textdomain()
基本的に同じである、唯一の違いは、彼らが使用するデフォルトのパスは次のとおりです。
- 現在の言語を取得し(を使用
get_locale()
)、相対.moファイルを引数として渡されたパスに追加します。
- その後
load_textdomain()
、textdomainと.moファイルへの結果パスの両方を引数として渡すことを呼び出します。
次にload_textdomain
、.moファイルをグローバルtextdomain変数にロードしますが、ソースから読み取ることができます。
ドメインが既に存在する場合、翻訳はマージされます。
両方のセットに同じ文字列が含まれている場合、元の値からの変換が行われます。
したがって、必要なテーマの親の文字列のみをオーバーライド/置換するには、親テーマがその.moファイルを読み込む前に、翻訳された文字列のみを含む親textdomainのカスタム.moファイルを読み込む必要があります。
解決
最後に、単に親テーマの名前を持つフォルダーを(便宜上)子テーマの言語フォルダーに作成し、その中に親textdomainのカスタム.moファイル(言語用、xx_XX.mo
フォーム内の1つ、どこxx_XX
)言語コードです。
そしてfunctions.php
、after_setup_theme
アクション中に、子テーマtextdomainの.moファイルをロードする行の近くに、子テーマファイルに行を追加しました。
add_action( 'after_setup_theme', function () {
// load custom translation file for the parent theme
load_theme_textdomain( 'parent-textdomain', get_stylesheet_directory() . '/languages/parent-theme' );
// load translation file for the child theme
load_child_theme_textdomain( 'my-child-theme', get_stylesheet_directory() . '/languages' );
} );
のでfunctions.php
、子テーマのファイルは親の1の前にロードされ、文字列のこのセットは、親テーマの翻訳よりも優先されます(または私はちょうどの三番目のパラメータ使用して優先順位を設定していたかもしれないadd_action
機能を)。
注:前提の中で述べたload_child_theme_textdomain
ようにload_theme_textdomain
、の代わりにを使用することもできます。