WordPress插件翻译-加载插件文本域

4smxwvx5  于 2023-03-17  发布在  WordPress
关注(0)|答案(2)|浏览(209)

我在一个自定义的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
你知道是什么引起的吗?

6jygbczu

6jygbczu1#

以防有人有同样的问题。我有

get_plugin_data( __FILE__ );

这会导致运行一个wp_core函数,在该函数中加载文本域,因此我的en_US.mo被de_DE.mo覆盖
我不知道为什么get_plugin_data()使用了错误的语言文件,它似乎为使用该函数的不同插件选择了正确的文件。

f5emj3cl

f5emj3cl2#

使用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

相关问题