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