私は多くの言語ですべての翻訳された文字列をロードするために正しくload_theme_textdomain()
を使う親テーマを持っています。
それから、load_child_theme_textdomain()
を使ってその文字列に対して同じことを実現する子テーマを作成しました。
親テーマには特定の言語用の翻訳された文字列がいくつかありますが、それを子テーマで置き換えたり上書きしたりしたいのです。
それらがテンプレートファイル上にあったかどうか私はファイルを置き換えて単にそれらの文字列のためにtextdomainを変更することができました、しかし残念なことに私が話しているものは多くの場所とダッシュボードで使われます。 ).
だから私の質問は: 親のテンプレートファイルや関数を置き換えることなく、子のテーマ内のそれらの翻訳された文字列を置き換える方法はありますか?
私は知りませんが、子テーマのlanguagesフォルダの中に parent-theme.mo ファイルを追加して、それらの文字列だけを翻訳したものか、それともそのようなものを追加するのかもしれません。
私は解決策を見つけたと思うが、少し前に
load_theme_textdomain()
とload_child_theme_textdomain()
は基本的に等しく、唯一の違いは使用するデフォルトのパスです。
get_locale()
を使用)、相対。moファイルを引数として渡されたパスに追加します。load_textdomain()
を呼び出し、textdomainと.moファイルへの結果のパスの両方を引数として渡します。その後、load_textdomain
は.moファイルをグローバルtextdomain変数にロードしますが、 source から読み取ることができます。
ドメインが既に存在する場合、翻訳はマージされます。
両方のセットに同じ文字列が含まれている場合、元の値からの変換が行われます。
したがって、必要なテーマの親の文字列のみをオーバーライド/置換するには、翻訳された文字列のみを含む親textdomainのカスタム.moファイルをロードする必要がありますbefore親テーマは.moファイルをロードします。
最後に、親テーマの名前を持つフォルダーを(便宜上)子テーマの言語フォルダーに作成し、その中に親textdomain(言語用のxx_XX.mo
形式のカスタム.moファイル)を入れます、ここでxx_XX
は言語コードです)。
そして、functions.php
アクション中に、私の子テーマのtextdomainの.moファイルをロードする行の近くに、私の子テーマのafter_setup_theme
ファイルに行を追加しました。
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
ファイルは親のテーマの前に読み込まれるため、この文字列のセットは親テーマの変換よりも優先されます(またはadd_action
関数の3番目のパラメーターを使用して優先度を設定することもできます)。
注:前提で同じように言ったように、load_child_theme_textdomain
の代わりにload_theme_textdomain
を使用することもできます。
あなたはあなたの子供のテーマフォルダにある言語ファイルを使うことができます。最初に、親テーマがどのテキストドメインを使用しているかを知る必要があります。次に、自分の言語だけをファイル名として.poファイルと.moファイルを作成し(例:de_DE.po/de_DE.moまたはnl_NL.po/nl_NL.mo)、それらをあなたの子テーマディレクトリ内のフォルダ "languages"に入れます例えば。
その後、テキストドメインをload_child_theme_textdomain()
で初期化できます。
load_child_theme_textdomain( 'the_text_domain', get_stylesheet_directory() . '/languages/' );
親テーマのPHPファイル内で__()
や_e()
のような関数呼び出しを探すことでテキストドメインを見つけることができることに注意してください。 2番目のパラメータはテキストドメインです。__( 'Translated text string', 'text_domain' );
Wordpress 5.0.1用の2019年のアップデート。
function child_theme_slug_setup() {
load_child_theme_textdomain( 'parent-theme-slug', get_stylesheet_directory() . '/languages' );
}
add_action( 'after_setup_theme', 'child_theme_slug_setup' );