Многоязычный класс php - функция быстрого доступа - PullRequest
1 голос
/ 10 июля 2009

Добрый вечер,

В моем приложении, которое я сейчас разрабатываю, у меня есть класс, который обрабатывает многоязычие. Это происходит путем внешней загрузки ассоциативного массива, где источник перевода будет определен примерно так:

'Source input' => 'Zdroj vstupního'

В настоящее время это работает безупречно, обращаясь и используя класс следующим образом:

$lang = new Lang('Czech');
print $lang->_('Source input'); // output: "zdroj vstupního"

Однако я хочу иметь это в функции быстрого доступа, которая не зависит от экземпляра класса "Lang". Я пробовал экспериментировать со статическими методами, но пока мне не повезло.

Псевдокод того, чего я хочу достичь.

 $lang = new Lang('Czech');
 $lang->setCurrent('contact_us'); // loads the language file for contact_us
 <p>
   <?php print _('Source input'); ?> // output: "zdroj vstupního"
 </p>

Точка в правильном направлении была бы великолепна. Спасибо!

1 Ответ

4 голосов
/ 10 июля 2009

Вы можете получить доступ к глобальной переменной $lang из вашей функции _, если используете оператор global $lang:

<?php
    class Lang
    {
        function _($str)
        {
            return 'Zdroj vstupního';
        }
    }

    function _($str)
    {
        global $lang;
        return $lang->_($str);
    }

    $lang = new Lang('Czech');
    print _('Source input');
?>

В качестве альтернативы вы можете использовать переменную static в классе Lang вместо создания экземпляра класса. Это немного чище, так как вам не нужно создавать переменную $lang в глобальном пространстве имен.

<?php
    class Lang
    {
        static $lang;

        function setCurrent($lang)
        {
            self::$lang = $lang;
        }
    }

    function _($str)
    {
        if (Lang::$lang == 'Czech')
        {
            return 'Zdroj vstupního';
        }
    }

    Lang::setCurrent('Czech');
    print _('Source input');
?>
...