gettext работает в одном файле, а не в другом? - PullRequest
0 голосов
/ 20 июля 2010

У меня небольшая проблема с получением gettext для работы. Я сделал простой тестовый файл, в котором я вызываю translate.php и echo T _ ("XXXXX"), и он переводится, но когда я пытаюсь использовать echo T_ в функции, он не работает ..

translate.php:

    <?php

error_reporting(E_ALL | E_STRICT);

// define constants
define('PROJECT_DIR', realpath('./functions/'));
//define('LOCALE_DIR', PROJECT_DIR .'/functions/locale');
define('LOCALE_DIR', PROJECT_DIR .'locale');
define('DEFAULT_LOCALE', 'en_US');

require_once('gettext.inc');

$supported_locales = array('en_US', 'sr_CS', 'de_CH');
$encoding = 'UTF-8';

$locale = (isset($_GET['lang']))? $_GET['lang'] : DEFAULT_LOCALE;

// gettext setup
T_setlocale(LC_MESSAGES, $locale);
// Set the text domain as 'messages'
$domain = 'messages';
T_bindtextdomain($domain, LOCALE_DIR);
T_bind_textdomain_codeset($domain, $encoding);
T_textdomain($domain);

//header("Content-type: text/html; charset=$encoding");
?>

рабочий тестовый файл:

<?php
require("translate.php"); 

echo T_("test"); 

?>

Это был всего лишь тест, чтобы увидеть, сработал ли он, и слово «тест» было переведено так, как я надеялся достичь. С настоящими php файлами это немного усложняется.

info.php

<?php

    require("functions\info_functions.php");

    (...)

    class infopage extends Page
    {
        public function display()
        {
        (...)

        displayInfo();

        (...)
        }
    }   


    $homepage = new infopage(); 
    $homepage->display();   

?>

info_functions.php - здесь эхо не переводится!

<?php

require("translate.php"); 

echo T_("test"); 

            function displayInfo()
            {

            (...)

            echo T_("test"); 

            (...)

            }

?>  

1 Ответ

1 голос
/ 20 июля 2010

Проверьте, действительно ли ваша переменная окружения LOCALE_DIR указывает на правильное место в displayInfo(). От:

// define constants
define('PROJECT_DIR', realpath('./functions/'));
//define('LOCALE_DIR', PROJECT_DIR .'/functions/locale');
define('LOCALE_DIR', PROJECT_DIR .'locale');

Похоже, что это может быть относительный путь, который не работает из info_functions.php, поскольку он находится в другом каталоге, чем ваши другие (тестовые) файлы.

...