web-dev-qa-db-ja.com

Wp-content/languages/themes内の言語ファイルを子テーマで上書きする方法

私はTwentyFifteenテーマのための子テーマを作りたいのですが、それは翻訳を含む多くのことをカスタマイズします。私が自分の言語(Farsi)でWordPressをインストールするとき、それはwp-content/languages/themesにTwentyFifteen言語ファイルを含みます

そのため、子テーマにlanguagesフォルダーを作成し、それにカスタマイズされた言語ファイルを追加し、子テーマのfunctions.phpload_theme_textdomain( 'twentyfifteen', get_stylesheet_directory() . '/languages' )を追加すると、カスタマイズされた言語ファイルは読み込まれず、代わりにwp-content/languages/themesのファイルが読み込まれます。それらのファイルを上書きするために私は何ができますか?

1
Omid Mohammadi

WP 4.6以降load_theme_textdomain()(したがってload_child_theme_textdomain())は、WPのオンライン翻訳プラットフォーム(translate.wordpress.org)からダウンロードされた.moファイルを優先します。テキストコードがlanguages /ディレクトリにある場合、新しいコードのため( ここでは769行目 )、これらの関数はローカルの.moファイルを完全に無視します。

ただし、もっと基本的なload_textdomain()関数を使って直接.moファイルをロードし、元のドメインの文字列を上書きすることができます。

$domain = 'textdomain-to-override';
$path = get_stylesheet_directory() . '/languages/'; // adjust to the location of your .mo file

$locale = apply_filters( 'theme_locale', get_locale(), $domain );
load_textdomain( $domain, $path . $locale . '.mo' );
2
Henrique Vianna

これは ソースからのload_textdomain の引用です(WP 4.6):

テキストドメインがすでに存在する場合、翻訳はマージされます。両方のセットに同じ文字列がある場合は、元の値からの変換が行われます。

言い換えれば、あなたの翻訳がTwentyFifteenのものを上書きするようにするために、あなたはあなたのmo-ファイルが最初にロードされることを確実にしなければなりません。これを行うには、子テーマのfunctions.phpが親テーマの前にロードされるという事実を使用できます。

親テーマでテキストドメインを読み込んでいる関数を見つけます。おそらくafter_setup_themeフックを使っています。あなたの子供のテーマが親と同じテキストドメインを使用していることを確認してください。次に、同じフックの load_child_theme_textdomain を使用してテキストドメインをロードしますが、 より高い優先度 を使用します。

1
cjbj