Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP应用程序的gettext中使用多个域_Php_Gettext - Fatal编程技术网

在PHP应用程序的gettext中使用多个域

在PHP应用程序的gettext中使用多个域,php,gettext,Php,Gettext,所谓域,我指的是gettext域。我有这个密码 $domain = "default"; $locale = 'en_US'; putenv("LC_ALL=$locale"); setlocale(LC_ALL, $locale); bindtextdomain($domain, 'my_path'); bind_textdomain_codeset($domain, 'UTF-8'); textdomain($domain); 因此,它将使用my_path/en_US/LC_ME

所谓域,我指的是gettext域。我有这个密码

$domain = "default";
$locale = 'en_US';
putenv("LC_ALL=$locale");
setlocale(LC_ALL, $locale);
bindtextdomain($domain, 'my_path'); 
bind_textdomain_codeset($domain, 'UTF-8');    
textdomain($domain);
因此,它将使用my_path/en_US/LC_MESSAGES/default.po

但我想使用多个文件,以便覆盖default.po中的值 使用另一个po文件,如admin.po、blog.po等,首先定义所有域,如下所示:

bindtextdomain('domain1', DIR_LOCALE);
bindtextdomain('domain2', DIR_LOCALE);
bindtextdomain('domain3', DIR_LOCALE);
textdomain('domain1'); // set default domain for _() function
现在,如果要从不同的域获取字符串,可以使用
dgettext()
dcgettext()
(如果不是从
lcu MESSAGES
)从不同的指定域中仅检索单个字符串。例如:

echo dgettext('domain2', "msgid");

您所说的覆盖是什么意思?你想在两个.po文件中定义相同的
msgid
?我猜他总是想加载default.mo,但也想加载页面特定的mo文件。在我看来,这是完全没有必要的,而且会使整个应用程序变得更加复杂,而没有真正的好处。此外,您将无法跨不同的po文件重用字符串。例如,如果你在“admin.po”中有一个字符串“cancel”,你以后在“blog.po”中也需要这个字符串,那么你必须复制它们,或者将它们移动到default.po,等等。太复杂了……我不明白这个域是什么意思,为什么我们需要这个域。您能给出一些解释或相关链接吗?是否需要为DIR_LOCALE2定义目录结构,如“loc2/en_US/LC_MESSAGES/default.po”“loc3/en_US/LC_MESSAGES/default.po”如果每个mo文件具有不同的msgid,如何将多个mo文件加载在一起。每个gettext都为此提供支持吗?必须在DGettText函数上使用函数first param。稍后我会发布我的用例,但是@DanMan这是更好的答案。