我正在开发一个自定义的 Wordpress 插件,但我无法让它支持多语言。
它确实正确加载了主要语言的 .mo 文件,但是当切换语言(使用 WPML)时,它总是显示主要语言的翻译(在本例中为德语)。所以当我使用英语时,它仍然显示德语翻译。
这是我的代码:
在标题中:
/*
Plugin Name: MM Jobs
Plugin URI: http://example.com/
Description: Custom Jobs Plugin to create new Jobs
Version: 1.3.84
Author: Jekey
Author URI: http://example.com/
Text Domain: mm-jobs
Domain Path: /languages
*/
然后:
function mm_jobs_plugins_loaded() {
load_plugin_textdomain( 'mm-jobs', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
}
add_action( 'plugins_loaded', 'mm_jobs_plugins_loaded', 0 );
.mo 文件是正确的,因为它已经加载了德语翻译。 命名:/plugins/mm-jobs/languages/下的 mm-jobs-en_US.mo 或 mm-jobs-de_DE.mo
你知道是什么导致了这个问题吗?
以防有人遇到同样的问题。我有
get_plugin_data( __FILE__ );
在我的代码中。这导致在加载文本域的地方运行 wp_core 函数,所以我的 en_US.mo 被 de_DE.mo 覆盖
我不知道为什么 get_plugin_data() 拿错了 lang-file。好像是针对不同的插件用到的功能选对了
init
动作挂钩。
加载插件翻译不应该在
行动因为那太早了并且防止其他 与语言相关的插件正确连接plugins_loaded
功能并做他们想做的事。 调用load_textdomain()
应该延迟到load_plugin_textdomain()
行动。init
add_action( 'init', 'wpdocs_load_textdomain' ); /** * Load plugin textdomain. */ function wpdocs_load_textdomain() { load_plugin_textdomain( 'wpdocs_textdomain', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' ); }
参考:https://developer.wordpress.org/reference/functions/load_plugin_textdomain/#div-comment-1568