CakePhp: Как узнать текущий локальный в модели? - PullRequest
0 голосов
/ 27 сентября 2011

Я должен разработать небольшой сайт, который будет многоязычным. Этот веб-сайт использует базу данных ERP, поэтому я не могу выбрать структуру своей базы данных, ...

Мое приложение имеет язык по умолчанию в core.php, и я использую I18N через URL , чтобы указать, какой язык должен отображаться

Для каждого языка у меня есть отдельная таблица, содержащая описание продуктов на нужном языке.

Так что мне нужно установить «$ useTable» cakePhp в конструкторе на нужную таблицу. Но для этого мне нужно знать текущую локализацию приложения.

Я пробовал несколько вещей:

  • сделать getInstance для класса I18n, но я всегда "английский" как "lang"
  • делает Configure :: read ('Config.language'), но это только отображает мне язык по умолчанию cakePhp
  • Я пытался прочитать $ GLOBALS ['Dispatcher'] -> $ params ['language'], но если пользователь не указал локальный, я не получаю
  • Я попытался импортировать компонентную сессию и прочитать значение Config.language (которое я пишу в app_controller), но мне кажется, что если я на французской странице, я нажимаю на ссылку, чтобы отобразить страницу на немецком языке (теперь все тексты на немецком языке), но полученное здесь значение по-прежнему на французском, если я обновлю страницу, я наконец получу немецкий, но мне нужно получить значение сейчас, а не на следующей странице перезагрузить

Так что я не вижу, как получить этот язык, есть ли скрытое поле, содержащее эту переменную, или где-нибудь, где я мог бы получить эту информацию?

1 Ответ

1 голос
/ 27 сентября 2011

Я не нашел простого способа получить эту переменную, и поскольку мы вызываемся до _beforeFilter, я должен проверить параметр, сессию, файлы cookie и переменную по умолчанию.

Поэтому я создал методЯ помещаю его в свой компонент "Инструменты" и импортирую в свою модель.

Вот модель, если вы заинтересованы:

function GetCurrentLocale(){
    if(isset($GLOBALS['Dispatcher']->params['language'])) return $GLOBALS['Dispatcher']->params['language'];
    if($this->Session->check('Config.language')) return $this->Session->read('Config.language');
    if($this->Cookie->read('lang')!==false)return $this->Cookie->read('lang');
    return Configure::read('Config.language');      
}

И я звонюкак это:

    App::import('component','Tools');
    $tools = new ToolsComponent();
    $locale = $tools->GetCurrentLocale();

Если кто-то найдет лучший способ, я буду сильно заинтересован, чтобы увидеть, как:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...