2012-03-12 2 views
2

По домену я называю домен gettext. У меня есть этот кодИспользование нескольких доменов в gettext в приложении PHP

$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

Но я хочу использовать более 1 файл, так что я могу переопределить перезаписать значение по умолчанию. po с другим файлом po, например admin.po, blog.po и т. д.

+1

Что вы подразумеваете под 'override'? Вы хотите определить одно и то же 'msgid' в двух файлах .po? –

+0

Я предполагаю, что он всегда хочет загрузить default.mo, но также хочет загружать текстовые файлы mo. На мой взгляд, это совершенно необязательно и сделает приложение более сложным без реальной выгоды. Также вы не сможете повторно использовать строки в разных файлах po. Например, если у вас есть строка «cancel» в «admin.po», которую вы позже также нуждаетесь в «blog.po», вам придется скопировать их или перенести на default.po и т. Д. Так сложно. .. –

+0

Я не понимаю, что означает * домен * и почему нам нужен домен. Не могли бы вы дать некоторые объяснения или связанные ссылки? – cuixiping

ответ

0

AFAIK, gettext предназначен для использования только одного файла POT для каждого приложения, но имеет ton of utilities to manipulate them. Этот php.net comment имеет приятный трюк, позволяющий использовать разные текстовые области в разных местах ваших скриптов. Он автоматически запоминает, каков был последний текстовый домен, который вы использовали.

14

Сначала определите все домены что-то вроде этого:

bindtextdomain('domain1', DIR_LOCALE); 
bindtextdomain('domain2', DIR_LOCALE); 
bindtextdomain('domain3', DIR_LOCALE); 
textdomain('domain1'); // set default domain for _() function 

Теперь, если вы хотите, чтобы захватить строки из другого домена, вы будете использовать либо dgettext() или dcgettext() (если не из LC_MESSAGES), чтобы получить просто одна строка из другого указанного домена. Пример:

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

Это должно быть принято как ответ! Работает как шарм! – aurora

+0

Требуется ли определенная структура каталогов для DIR_LOCALE2 как «loc2/en_US/LC_MESSAGES/default.po» «loc3/en_US/LC_MESSAGES/default.po» – SarwarCSE

+0

Как я могу загрузить несколько файлов mo вместе, если у каждого есть разные. Поддерживается ли каждый gettext? –

Смежные вопросы