转换与全局变量一起工作,您只需等待适当的挂钩来调用转换函数。我没有看过代码或文档,但只是通过实验,翻译是在after_setup_theme
钩子,但在其他钩子之前开火。
这意味着如果你想在plugins_loaded
胡克,你不会得到翻译后的结果。
例如,在下面的插件中$dash
在主插件文件中被“翻译”,则不会被翻译。无论发生什么情况,它都会打印“Dashboard”。同样的事情plugins_loaded
钩
有趣的部分在于after_setup_theme
钩住全局$dash
打印的是英文,但新翻译的文本打印的是“Escritorio”。
在init
钩子,全球$dash
打印翻译后的文本。我向闭包添加了一个回调,以确保它显示的是全局$dash
变量,确实如此。
/**
* Plugin Name: StackExchange Sample
*/
namespace StackExchange\\WordPress;
$dash = __( \'Dashboard \' );
printf( \'<p>Main plugin file: %1$s</p>\', $dash ); // Dashboard
class plugin {
public function plugins_loaded() {
\\add_action( \'after_setup_theme\', [ $this, \'after_setup_theme\' ] );
\\add_action( \'init\', [ $this, \'init\' ] );
echo \'<h2>plugins_loaded</h2>\';
global $dash;
printf( \'<p>Global: %1$s</p>\', $dash ); // Dashboard
$dash = __( \'Dashboard\' );
printf( \'<p>Local: %1$s</p>\', $dash ); // Dashboard
}
public function after_setup_theme() {
echo \'<h2>after_setup_theme</h2>\';
global $dash;
printf( \'<p>Global: %1$s</p>\', $dash ); // Dashboard
$dash = __( \'Dashboard\' );
printf( \'<p>Local: %1$s</p>\', $dash ); // Escritorio
}
public function init() {
echo \'<h2>init</h2>\';
global $dash;
printf( \'<p>Global: %1$s</p>\', $dash ); // Escritorio
$dash = __( \'Dashboard\' );
printf( \'<p>Local: %1$s</p>\', $dash ); // Escritorio
}
}
\\add_action( \'plugins_loaded\', [ new plugin(), \'plugins_loaded\' ] );
\\add_action( \'init\', function() {
global $dash;
printf( \'<p>Global: %1$s</p>\', $dash ); // Escritorio
}, 20 );
总而言之:具有翻译文本的全局变量确实有效,请确保等到
after_setup_theme
钩子来翻译文本,不要使用全局变量,因为这只会导致问题。