Я использую 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
просто для возможности установкиязык.
Какой способ установки языка проще (или лучше)?