I have a bunch of plugins. Obviously, they all have their own unique textdomains for internationalization (i18n).
I also have a bunch of files that I include in all my plugins – I throw them all in a directory called common. This adds a dashboard widget that I want all my plugins to have, as well as a script for updating (since they don’t live on the wordpress.org plugin repo).
I want to be able to just drop my common folder into each of my plugins without having to edit the files. But I’m concerned about the text strings contained inside.
Can I call load_plugin_textdomain twice, for two different domains, within the same plugin? What’s the best way of handling this situation with i18n in mind?
Or will I have to go through each instance of my common files and manually change the textdomain to match the plugin?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
You can call load_plugin_textdomain() multiple times in each plugin, but I would not do that.
Put the common files into a separate plugin, for example luke-carbis-library. In that plugin create two simple functions for setup and loading extra files:
add_action( 'plugins_loaded', 'lcl_init' );
function lcl_init()
{
$dir = plugin_dir_path( __FILE__ );
$url = plugins_url( __FILE__ );
// maybe load necessary files and translation
do_action( 'lcl_init', $dir, $url );
}
function lcl_load( $file )
{
require_once plugin_dir_path( __FILE__ ) . $file;
}
In your depending plugins hook into your custom action:
add_action( 'lcl_init', 'depending_plugin_init', 10, 2 );
Now you can change the inner structure of the base plugin any time; the other plugins just use $dir and $url from your hook.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0