我如何在 php gettext 中使用多个文本域?

How i can use multiple textdomain in php gettext?

我想在gettext中同时加载多个mo文件

一个例子:

$lang = 'en_US';

putenv('LC_ALL=' . $lang);
setlocale(LC_ALL, $lang);

bindtextdomain('module', ROOT . 'Language');
bindtextdomain('default', ROOT . 'Language');

textdomain('module');
textdomain('default');

但是我不能同时使用两个"textdomains"。此代码仅提供一种语言。我想同时使用多个 "bindtextdomain" 和 .mo 文件。

我有很多模块。每个模块必须有单独的 "mo" 文件。每个模块加载相同的文件。

如何使用多个文本域?

您需要两个功能。第一个功能是动态改变 gettext 域。 第二个函数像默认的 gettext 方法一样工作。 简要地;您必须在函数中更改 gettext 域和 select 域。

function selectDomain($trFile)
{
    if ($trFile == 'default') {
        bindtextdomain($trFile, ROOT . 'Language');
    } else {
        bindtextdomain($trFile, MROOT . $trFile . '/Language');
    }

    textdomain($trFile);
}


function _e($msgid, $trFile = 'default')
{
    selectDomain($trFile);
    return _($msgid);
}

echo _e('Test');
echo _e('Test','another_text_domain');