2015-03-09 2 views
0

Вопрос:
Как я могу сделать мой язык URL конкретным, например:Как изменить сегменты CodeIgniter в URI на основе языка

  • Английского
    www.website.com/контроллер- в-ный/метод-в-ен
  • другого языка
    www.website.com/контроллер-в-Oth-Ланг/метод-в-Oth-языки
    (Я хочу, чтобы этот URL-адрес был автоматически перенаправлен на сайт www.website.com/controller-in-en/method-in-en на основе «контроллера-в-en» и «метода-в-en» перевода в языковой файл).

Дополнительная информация:
В будущем я планирую перенаправлять пользователей на разных языках в разных поддоменов, например, lt.website.com, но сейчас я хочу, чтобы сегменты URI были переведены в зависимости от языка пользователей.

Я хочу ясно дать понять, что:

  1. Я уже знаю, как создать язык переключатель и изменить язык.
  2. Я НЕ хочу, чтобы код языка был включен в URL-адрес, как '/ en' или '/ lt'.

Мои (плохие) идеи:
я думал, что это может быть сделано с помощью переводных адресов маршрутизации $route[lang('url_market')] = 'market/index'; но при маршрутизации выполняется, библиотека языка не Yeat загружены.

ответ

0

Единственный путь, который я вижу, - это через дБ.

Построить таблицу, которая выглядит следующим образом:

routes_translation

***************************************** 
*id | controller | translation | lang* 
***************************************** 
* 1 | home   | home  | en * 
* 2 | home   | accueil | fr * 
        ... 
***************************************** 

Затем в routes.php

require_once(BASEPATH .'database/DB'. EXT); 
$db =& DB(); 
$query = $db->get('routes_translation'); 
$result = $query->result(); 
foreach($result as $row) 
{ 
    $route[$row->translation] = $row->controller; 
} 
+0

Возможно ли сделать то же самое, требуя перевод из файла (файл перевода, чтобы быть точными) вместо база данных? –

+0

@ DeividasKaržinauskas Вы можете выполнить то же самое, используя конфигурационный файл, имея конфигурационный массив для каждого языка, имеющего имя контроллера как индекс и перевод как значение. – ahmad

+0

@ahmad Не могли бы вы предоставить пример кода для этого? И представить его в качестве ответа, чтобы я мог принять его. –

0

Simple ....

  1. Получить пользователь выбирает язык либо из db, либо из s оторвал его СЕССИИ
  2. Пропустите выбранный laguage при загрузке библиотеки языка

Например: $ this-> лэнгмю> нагрузки ("сообщение", $ SESSION [ 'selected_language']);

+0

Эти инструкции объясняют, как загрузить файл языка. Мне нужно изменить маршрутизацию в зависимости от языка, хранящегося в сеансе. –

+0

Я понимаю это. То, что я хочу сделать, - создать автоматический маршрут, допустим, «рыночный» контроллер, но на другом языке его можно назвать другим. Я хотел бы, чтобы мое приложение отображало «рыночный» контроллер, но к нему следует обращаться через сегмент URI «rinka», если он находится на литовском языке. –

0

Основано на ответе @AdrienXL. Вот пример без использования базы данных.

$config['routes_translation']['en'] = array(
'home' => 'home' 
); 

$config['routes_translation']['fr'] = array(
'home' => 'accueil' 
); 

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

$translatedNamed = $config['routes_translation'][$language_code][$controller] 

, который должен дать вам «дом» для ванной & «Accueil» для фра