Лучший способ установить язык в CodeIgniter с помощью URI

Я использую CodeIgniter с файлами po/mo (мне не нравятся встроенные функции). У меня есть уже готовая функция, которая использует переменные get для установки файла cookie с языком.

Теперь у CodeIgniter нет get, но он использует URI. Это функция, которую я использую (она срабатывает в конструкторе):

private function locale(){

    $cookie_name = $this->cookie_lang;
    $uri = $this->uri->uri_to_assoc(3);

    if ($this->tools->isArray($uri)){
        $locale = $uri['locale'];
    }

    if ($locale) {
        setcookie("$cookie_name", $locale, 0, "/");
    } else {
        if( !isset($_COOKIE[$cookie_name]) && empty($_COOKIE[$cookie_name]) ) {
            setcookie("$cookie_name", 'it', 0, "/");
            $locale = 'it';
        } else {
            $locale = $_COOKIE[$cookie_name];
        }
    }   
    putenv("LC_ALL=$locale");
    setlocale(LC_ALL, $locale);
    bindtextdomain("default", "./locale");
    textdomain("default");
    $this->locale = $locale;
    return true;
}

Это работает отлично. Установка языка — это просто добавление:

locale/x

к URL-адресу. Проблема в том, что я использую URI для других целей (например, для загрузки страницы).

page/x

Это приводит к очень длинным URL-адресам, например:

www.site.com/controller/method/page/x/locale/y

просто чтобы иметь возможность установить язык.

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


person 0plus1    schedule 06.09.2010    source источник
comment
Я думаю, что это довольно элегантный метод и очень удобный для SEO, по крайней мере, до тех пор, пока порядок ваших параметров не меняется. В противном случае для одного и того же контента могут появиться повторяющиеся URL-адреса, что, насколько мне известно, плохо для SEO.   -  person janosrusiczki    schedule 06.09.2010
comment
Спасибо, порядок не должен меняться в этом отношении, я в безопасности.   -  person 0plus1    schedule 06.09.2010


Ответы (1)


Используйте Session для управления языковой системой. Вы можете поместить сеанс по умолчанию в MY_Controller и получить из файла конфигурации ($config['language']).

Не путайте себя и клиента с URI. URI будет дублироваться. Если вам нужно расставить приоритеты SEO, не делайте этого.

person Wahyu Kristianto    schedule 07.10.2011