Локали для всего приложения с Gettext и Zend_Translate?

У меня есть пользовательский каталог, например /www/phpstuff, который находится в моем каталоге include_path. Внутри этого каталога phpstuff находится папка i18n. Он содержит файлы уровня .mo на стороне сервера.

Zend_Translate позволяет указать каталог во втором параметре конструктора, я не могу этого сделать

Zend_Translate( 'gettext', 'i18n/', 'en' );

Он пытается читать из каталога, в котором вызывается этот скрипт, есть ли какой-нибудь трюк, который я могу использовать, чтобы не указывать /www/phpstuff/i18n явно? Причина в том, что эта структура, с которой я работаю, будет использоваться на многих разных платформах, и было бы проще указать каталог в include_path, чем абсолютный путь.

Единственный обходной путь, который я могу придумать, - это вручную прочитать путь включения, разбить его по разделителю, проверить, не назван ли какой-либо из каталогов «gettext», а затем получить абсолютный путь первого найденного каталога и установить его.


person meder omuraliev    schedule 09.12.2009    source источник


Ответы (1)


Вам нужно будет где-то определить путь к приложению. Если вы не хотите устанавливать абсолютный путь, вам нужно установить относительный путь. Возьмите эту структуру каталога, например:

/application/
/application/i18n/
/public_html/
/public_html/index.php

Путь приложения в этом случае будет следующим:

define('APPLICATION_PATH', '../application');

И вы можете использовать его следующим образом:

Zend_Translate( 'gettext', APPLICATION_PATH . '/i18n', 'en' );

Надеюсь, это поможет.

person Basher    schedule 10.12.2009
comment
Да, но это все еще зависит от приложения. Что, если бы я хотел использовать одни и те же файлы .mo для нескольких приложений, чтобы я мог обновить один файл mo, и это отразилось бы на всех них? - person meder omuraliev; 10.12.2009
comment
Поместите папку i18n куда-нибудь вне приложения и укажите путь к ней. Вопрос не в том, куда вы поместите папку i18n, а в том, что вы определяете путь где-то, специфичный для приложения. - person Basher; 10.12.2009
comment
Я понимаю, о чем вы говорите, но я не использую Zend в первую очередь для этого приложения - использую только Zend_Translate, и независимо от того, что я пытаюсь реализовать их на нескольких серверах, я не могу просто поместить i18n в родителя родителя каталог всех моих приложений, так как иногда он структурирован непоследовательно... Думаю, это не оставляет мне другого выбора, кроме как определить константу абсолютного пути и использовать ее. - person meder omuraliev; 11.12.2009