CakePHP: Интернационализация веб-приложения - PullRequest
0 голосов
/ 08 января 2012

На основании приведенной ниже статьи я смог в определенной степени интернационализировать свое приложение CakePHP -

http://puskin.in/blog/2010/08/cakephp-manage-multiple-language-in-application/

Я хочу расширить эту функциональность и предоставить возможность, где пользователь может сохранитьпредпочитаемый язык в его профиле пользователя.И каждый раз, когда пользователь входит в систему, я хочу использовать предпочитаемый язык и отображать содержимое сайта на этом языке.Ex - настройка языка Facebook.Как только вы меняете язык, статический контент на веб-сайте меняется на этот язык.

Кроме того, у меня есть некоторые статические данные, такие как информация о поиске для выпадающих меню.Каким должен быть дизайн моей таблицы для поддержки i18n.

Какие-либо фрагменты кода или идеи?

1 Ответ

1 голос
/ 08 января 2012

Установка пользовательских языковых предпочтений тривиальна.Просто добавьте поле language в пользовательскую таблицу и разрешите пользователю где-нибудь установить для нее значение.В вашем приложении вы устанавливаете язык по умолчанию в core.php, используя Configure::write('Config.language', 'eng'), и переопределяете его где-то еще, лучше всего в AppController::beforeFilter:

public function beforeFilter() {
    if ($this->Auth->user('language')) {
        Configure::write('Config.language', $this->Auth->user('language'));
    }
}

Теперь все функциональные возможности Cake L10n будут выводить контент ввыбранный пользователем язык.

Если вам нужна дополнительная языковая логика, которая не покрывается Cake, возможно, вам придется реализовать ее самостоятельно.Я бы посоветовал вам открыть новый конкретный вопрос о ваших конкретных проблемах.Как правило, любая логика пользовательского языка будет основываться на значении Configure::read('Config.language').Например, если у вас есть продукты с описаниями на нескольких языках, вы можете иметь отношение Product hasMany Description, где каждый Description имеет атрибут language, по которому вы фильтруете.

...