私はmu-pluginsの中で固く守らなければならない非常に厳格なディレクトリ構造を持っていますが、POEditが他の多くを無視しながらこの構造の中の特定のコードのための翻訳ファイルを生成できるようにしたいです。
現時点では、POEditは有効なコードを見つけるのが困難です。私はPro版を購入しましたが、私の構造はProの自動化された機能から利益を得ることができるようにあまりにもカスタマイズされていると思います。出発点として https://github.com/fxbenard/Blank-WordPress-Pot にある空のWordPress .potファイルも使用してみましたしかし、私はまだ似たような結果を得ています。
これが私の構造です:
- mu-plugins
- vendor [don't translate]
- languages [.mo, .po and .pot files should go here]
- client [translate some of these]
- Custom_Class
- Custom_Class.php [the file that is automatically loaded by _loader.php]
- Custom_Class_2
- Custom_Class_2.php [file that is automatically loaded by _loader.php]
- includes
- Included_File_1.php [files included by Custom_Class_2.php]
- react_app [all these files should be EXCLUDED, especially node_modules/*]
- _loader.php [contains the WordPress plugin headers, and includes all the other php files within the other folders]
_loader.php
には以下のものがあります。
define( 'MY_TEXTDOMAIN', 'MY_TEXTDOMAIN' );
function load_mu_plugin_textdomain(){
load_plugin_textdomain( MY_TEXTDOMAIN, false, plugin_dit_path( __FILE__ ) );
}
add_action( 'plugins-loaded', 'load_mu_plugin_textdomain' );
注:上記のコードには、以下の私の答えで対処するタイプミスがあります。問題を記録するためにここに残してください
私はIDEコード補完のためだけにdefine()
を使っています。ご覧のとおり、文字列は定数と同じなので、POEditは__( 'my string', MY_TEXTDOMAIN );
のようなものを見つけるのに問題はないはずです。
私はPOEditの観点から多くの非標準的なアプローチがあることを認識しています、しかし私は手動でこれを処理するために私の.potファイルをカスタマイズすることができるべきであると感じます。これが私の.potファイルです。
# WordPress Blank Pot
# Copyright (C) 2014 ...
# This file is distributed under the GNU General Public License v2 or later.
msgid ""
msgstr ""
"Project-Id-Version: MY_PROJECT\n"
"POT-Creation-Date: 2012-10-05 10:50+0100\n"
"PO-Revision-Date: \n"
"Last-Translator: Your Name <[email protected]>\n"
"Language-Team: Your Team <[email protected]>\n"
"Report-Msgid-Bugs-To: Translator Name <[email protected]>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Textdomain-Support: yes"
"X-Generator: Poedit 1.6.4\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-KeywordsList: __;_e;esc_html_e;esc_html_x:1,2c;esc_html__;esc_attr_e;esc_attr_x:1,2c;esc_attr__;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;_x:1,2c;_n:1,2;_n_noop:1,2;__ngettext:1,2;__ngettext_noop:1,2;_c,_nc:4c,1,2;\n"
"X-Poedit-Basepath: ../client/\n"
"X-Poedit-SearchPath-0: .\n"
"X-Poedit-Language: English\n"
"X-Poedit-Country: UNITED STATES\n"
"X-Poedit-Bookmarks: \n"
これがのみの問題で、POEditが自分のコードを正しく解析できないという100%の確信はありません。 WordPress側のことですが、これらの(愚かな)エラーを修正し、以下の.potファイルからPOEditを再実行すると正しい翻訳文字列が生成されたようです。
define( 'MY_TEXTDOMAIN', 'MY_TEXTDOMAIN' );
function load_mu_plugin_textdomain(){
load_plugin_textdomain( MY_TEXTDOMAIN, false, plugin_dir_path( __FILE__ ) );
}
add_action( 'muplugins_loaded', 'load_mu_plugin_textdomain' );
元の投稿から変更されました。
muplugins_loaded
の代わりにplugins-loaded
(これはとにかくアクションではありません:plugins_loaded
は正しいアクションフックです - ダッシュの代わりにアンダースコアに注意してください)。
タイプミスの代わりにplugin_dir_path()
:plugin_dit_path()
これが私がロードしてから新しい翻訳を生成した、更新された.potファイルです。
# WordPress Blank Pot
# Copyright (C) 2014 ...
# This file is distributed under the GNU General Public License v2 or later.
msgid ""
msgstr ""
"Project-Id-Version: MY_PROJECT\n"
"POT-Creation-Date: 2012-10-05 10:50+0100\n"
"PO-Revision-Date: \n"
"Last-Translator: Your Name <[email protected]>\n"
"Language-Team: Your Team <[email protected]>\n"
"Report-Msgid-Bugs-To: Translator Name <[email protected]>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Textdomain-Support: yes"
"X-Generator: Poedit 1.6.4\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-KeywordsList: __;_e;esc_html_e;esc_html_x:1,2c;esc_html__;esc_attr_e;esc_attr_x:1,2c;esc_attr__;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;_x:1,2c;_n:1,2;_n_noop:1,2;__ngettext:1,2;__ngettext_noop:1,2;_c,_nc:4c,1,2;\n"
"X-Poedit-Basepath: ../client/\n"
"X-Poedit-SearchPath-0: .\n"
"X-Poedit-Language: English\n"
"X-Poedit-Country: UNITED STATES\n"
"X-Poedit-Bookmarks: \n"