Лучший способ установить язык в CodeIgniter с помощью URI - PullRequest
0 голосов
/ 06 сентября 2010

Я использую 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

просто для возможности установкиязык.

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

1 Ответ

2 голосов
/ 07 октября 2011

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

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

...