私は私が見つけることができるすべての類似したスレッドを調べました、そして私は翻訳された文字列を出現させるためにすべての部分を整えるべきですが、そうではありません。髪の毛を引き出す準備ができました。
これは私が行っているものです - 私は(_sスターターに基づいて)カスタムテーマを作っています、そして私は(私自身のプラグインで作成された)いくつかのカスタム投稿タイプのテンプレートを追加しました。私はpo/moファイルを作成し編集するためのLoco Translateプラグインをインストールしました。ファイルは 'mytheme/languages'に格納されています。
私のテーマのfunctions.phpで私は持っています:
/**
* Load theme text domain for translations
*/
function mytheme_load_theme_textdomain() {
if (load_theme_textdomain('mytheme', get_template_directory() . '/languages')) {
error_log("Text Domain loaded.");
}
}
add_action('after_setup_theme', 'mytheme_load_theme_textdomain');
私のテンプレートパートファイルでは、このように表示用に設定された文字列があります。
<?php _e('My String Text', 'mytheme'); ?>
翻訳された文字列があるはずのページをロードしてからdebug.logファイルを見ると、「Text Domain loaded」というメッセージが表示されます。だからその部分は働いているはずです。 Loco Translateは文字列を正しく見て翻訳することができます。そのため、.moファイルの内容はすべて正しいはずです。
私は、define('WPLANG', 'es_ES');
を追加し、グローバルな$locale
変数を上記の関数内からデバッグログにエコーすることによって、(単にチェックするために)wp-config.phpでロケールをハードコーディングすることを試みました。それは正しく機能します。
編集:debug-mo-translationsプラグインからの出力の追加
Debug MO Translations (Version 1.0)
Locale: es_ES
Domain: mytheme
File: /wp-content/languages/themes/mytheme-es_ES.mo (not found)
Called in: /wp-includes/l10n.php line 792 load_textdomain
Domain: mytheme
File: /wp-content/languages/loco/themes/mytheme-es_ES.mo (not found)
Called in: /wp-content/plugins/loco-translate/src/hooks/LoadHelper.php line 103 load_textdomain
Domain: mytheme
File: /wp-content/themes/mytheme/languages/es_ES.mo (0.62kb)
Called in: /wp-includes/l10n.php line 800 load_textdomain
ですから、テンプレートファイルに翻訳可能な文字列があり、テーマ内で.po/.moファイルに翻訳があり、ロケールが正しく設定されています。そして、私のfunctions.phpファイルにテーマのテキストドメインをロードします。しかし、文字列はまだフロントエンドに翻訳された形で表示されません。何が足りないの?
前もって感謝します!
ええと、今はソートしてあるようです。私の場合は、(Loco Translateを使用して)小さな変更を加えて保存することにより、.potテンプレートファイルを元に戻して更新しました。それから私は.poファイルエディタ画面に戻り、.potファイルと再同期し、そして.moファイルを更新するために保存しました。翻訳は私のテーマに表示されています。フー!
私はこれが次の人が同じような状況に遭遇するのを助けるかもしれないと思います!
あなたは言語ファイルのパスを分析するべきです、それは正しいですか?
この仕事に役立つプラグイン:
あなたはパスを得るために関数をチェックするべきです。関数get_template_directory
は、子テーマではなく親テーマへのパスを取得します。子テーマの翻訳ファイルを使用する場合は、get_stylesheet_directory_uri
を使用してください。その関数は常にアクティブなスタイルシートのパスを取得します。