在PHP应用程序的gettext中使用多个域
所谓域,我指的是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
$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这是更好的答案。