WordPress 插件翻译 - load_plugin_textdomain

问题描述 投票:0回答:2

我正在开发一个自定义的 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

你知道是什么导致了这个问题吗?

wordpress plugins wpml
2个回答
3
投票

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

get_plugin_data( __FILE__ );

在我的代码中。这导致在加载文本域的地方运行 wp_core 函数,所以我的 en_US.mo 被 de_DE.mo 覆盖

我不知道为什么 get_plugin_data() 拿错了 lang-file。好像是针对不同的插件用到的功能选对了


0
投票

使用

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

© www.soinside.com 2019 - 2024. All rights reserved.