Помощники CakePHP и i18n - PullRequest
0 голосов
/ 27 мая 2009

У меня есть несколько вопросов о cakePHP, я потратил много времени на поиски решения, и так как я не нашел ни одного, я не уверен, что выбрал правильный подход.

Итак, у меня есть меню / карта сайта, которая является частично статической (файл xml - i10n) и частично динамической (база данных i18n)

Меня попросили кэшировать меню так, чтобы:

  1. Компонент создает кэш-файл xml всего меню для каждого языка, если он не существует

  2. Помощник создает HTML-кэш, отформатированный из файла XML, созданного из компонента

  3. В макете используется помощник для добавления меню на страницу

Вопросы:

  • Как получить список доступных языков от помощника и компонента?

  • Это

    $this->L10n = new L10n(); $this->L10n->lang
    

    правильный способ получить реальный язык?

  • Если я импортирую помощники / компонент в app_controller вместо того, чтобы вводить их в каждый контроллер

    class AppController extends Controller {
        var $components = array('menu', 'otherComponent');
        var $helpers = array('menuCache');
    
        function beforeFilter(){
            $this->menu->doSomething();
        }
    }
    

Я получаю call to undefined object $html за echo $html->charset(); в макете

не могу понять, почему ...

1 Ответ

3 голосов
/ 29 мая 2009

Вы можете использовать Configure::read('Config.language'). Часть кулинарной книги CakePHP гласит:

Текущей локалью является текущее значение Configure :: read ('Config.language'). Значение Config.language присваивается в классе L10n - если оно уже не установлено.

I18n, класс, отвечающий за перевод с использованием __(), использует Config.language, поэтому, если вы не переопределите его в bootstrap.php, эта переменная содержит выбранный язык. На самом деле, даже если вы переопределите его, он все равно будет содержать используемый язык (могут быть несоответствия, потому что I10n на самом деле не знает об изменениях, но я никогда не сталкивался с ними).

Чтобы получить список языков, вы можете использовать L10n::catalog(). Однако я не уверен, что это то, что вам нужно, поскольку в нем перечислены все языки, о которых знает CakePHP, а не только те языки, которые фактически имеют перевод в app/locale.

...