my release as service. maybe someone will need.
$di->setShared('lang', function() use ($di) {
$langDefault = 'en';
$request = $di->getRequest();
$cookies = $di->getCookies();
// Если есть кука с языком
if($cookies->has('lang')) {
$lang = $cookies->get('lang');
}
// Если нет
else {
// Ставим язык из браузера
$lang = substr($request->getBestLanguage(), 0, 2);
// Если из браузера или заголовков определить не удалось
if(!$lang) {
// Ставим по умолчанию
$lang = $langDefault;
}
else {
// Устанавливаем куку на 1 год
$cookies->set('lang', $lang, time() + 365 * 86400);
}
}
return $lang ?: $langDefault;
});
$di->setShared('translate', function() use ($di) {
$lang = $di->getLang();
// Доступные переводы
$acceptLanguages = array(
'en','ru',
);
// Языки-замены
$friendlyLanguages = array(
'ru' => ['ru','be','uk','kk'],
'en' => ['en'],
);
// Если перевод на этот язык не готов - ищем ближайший понятный
if(!in_array($lang, $acceptLanguages)) {
foreach($friendlyLanguages as $from => $to) {
if(in_array($lang, $to)) {
$lang = $from;
break;
}
}
}
// Подключаем перевод
if (file_exists('../app/langs/'.$lang.'.php')) {
require '../app/langs/'.$lang.'.php';
}
return new \Phalcon\Translate\Adapter\NativeArray(array(
'content' => $messages
));
});