我正在尝试解决此问题以加载两个 mo 文件。 我有两个 mo 文件,它们都有不同的 msgid 和 msgstr。
我的文件夹结构如下。 local/zh_CN/LC_MESSAGES/lang.mo local/zh_CN/LC_MESSAGES/brand.mo
下面是我用来加载 mo 文件的代码。
define('PROJECT_DIR', realpath('./'));
define('LOCALE_DIR', PROJECT_DIR .'/locale');
define('DEFAULT_LOCALE', 'en_US');
$encoding = 'UTF-8';
$locale = (isset($_SESSION['lang']))? $_SESSION['lang'] : DEFAULT_LOCALE;
// gettext setup
T_setlocale(LC_MESSAGES, $locale);
// Set the text domain as 'messages'
$our_domain = 'lang';
T_bindtextdomain($our_domain, LOCALE_DIR);
T_bind_textdomain_codeset($our_domain, $encoding);
T_textdomain($our_domain);
我怎样才能在这里添加一个mo文件
最佳答案
我们的想法是将您的字符串分类到不同的域和类别:
locale/
en/ <-- language
LC_MESSAGES/ <-- category
messages.mo <-- domain
brands.mo <-- domain
您将不同的域绑定(bind)到区域设置目录,以告诉 gettext 可以在何处找到哪个域。然后选择一个默认域,调用 _('Foo')
时将使用该域。然后,您可以使用更专业的功能来切换域或类别:
_('Foo') // LC_MESSAGES/messages.mo
dgettext('brands', 'Foo') // LC_MESSAGES/brands.mo
dcgettext('brands', 'Foo', LC_MONETARY) // LC_MONETARY/brands.mo
想法是在源代码中对字符串进行分类。
关于php - 如何加载两个 mo 文件以进行 gettext 本地化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21333847/