Лучший способ построить многоязычный сайт с codeigniter? - PullRequest
9 голосов
/ 04 апреля 2011

Мой текущий подход заключается в использовании функции _remap, предоставляемой codeigniter, для получения сегмента URI, чтобы проверить, является ли язык "en" или "np"

Вот пример:

function _remap($url_title){

    $this->_identify_language($this->uri->segment(1));

    $data ['sub_categories'] = $this->category_model->get_category_list_by_url($url_title)->result_array();
    $data ['news'] = $this->news_model->get_news_list_by_url($url_title)->result_array();
    $data ['url_title'] = $url_title;

    $this->_render_front_view('main',$data);
}

Я использую эту технику на каждом контроллере. Что не очень эффективно.

Я хотел спросить, будет ли лучше использовать сеансы для хранения языковых кодов или моя текущая техника достаточно хороша?

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

Конечно, моя база данных в настоящее время сформирована для 2 языков, и я разделил поля. например: - title_en, title_np. они отражаются в соответствии с используемым языковым полем.

Ответы [ 3 ]

7 голосов
/ 04 апреля 2011

Много частей к этому.

  1. Ваши URL не обязательно должны быть / en / и / fr /, если вы не хотите, чтобы они использовались для Google Analytics. Spidering не имеет большого значения. Заголовки Accept-Language могут быть такими же надежными.

  2. Глобальный анализ этого сегмента URL. Вы можете использовать этот метод или Accept-Language, но в любом случае вам понадобится ловушка, MY_Controller или расширение класса Lang.

  3. Подумайте, хотите ли вы, чтобы разные языки были полностью разделены. Например, если у меня есть страница на английском языке, не переведенная на французский язык, и страница на французском языке не существует, должна ли она отображать страницу на английском или 404? Вы можете сохранить lang = fr в базе данных и взять значение из константы, заданной в ловушке / MY_Controller / и т. Д.

    ГДЕ lang = CURRENT_LANGUAGE

  4. Структурируйте свою БД. title_en title_fr - это один из методов, но вскоре он станет неуправляемым с большим количеством языков. Иметь таблицы "pages" и "page_content", чтобы вся общая информация находилась в одной таблице, а весь язык (заголовок, контент, мета и т. Д.) Находился в таблице page_conten, которая имеет поле lang.

Есть миллион способов сделать все это, но есть над чем подумать, а не только по URL. Мой любимый

4 голосов
/ 04 апреля 2011

Я использовал эту библиотеку интернационализации для codeigniter, и я считаю, что она вполне соответствует моим потребностям.

Он расширяет класс Lang, а затем в конструкторе анализирует URI, чтобы выяснить, какой язык использовать. Так что он просто загружается, прежде чем использовать какие-либо языковые файлы. Вам не нужно добавлять какой-либо код в ваши контроллеры. Это просто меняет настройку в объекте языка. Таким образом, вы можете получить текущий язык так же, как обычно:

$this->lang->lang();
1 голос
/ 04 апреля 2011

Если у вас 500 новостей и 2 языка, изменение префикса url в корне даст вам 1000 ссылок, скажем, «/ en / hello-world» и «/ np / hello-world» будут иметь идентичный контент и, возможно, тот же название, которое может быть плохим с точки зрения SEO. Я бы использовал сеанс или куки для хранения настроек, чтобы сохранить сок ссылок.

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