我如何在php gettext中使用多个textdomain?

时间:2018-04-12 12:24:29

标签: 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”文件。每个模块都加载相同的文件。

我如何使用多个textdomain?

1 个答案:

答案 0 :(得分:0)

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

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');