Вечер добрый всем. Пытаюсь сделать несколько языков на сайте. Делаю всё на фреймворка. Но вот где то ошибка у меня не могу понять где только.
Есть контролер
<?php
namespace app\controllers;
use ishop\core\App;
class LanguageController extends AppController {
public function changeAction(){
$lang = !empty($_GET['lang']) ? $_GET['lang'] : null;
if($lang) {
if(array_key_exists($lang, App::$app->getProperty('langs'))){
setcookie('lang', $lang, time() + 3600*24*7, '/');
}
}
redirect();
}
}
В appcontroller записал так
App::$app->setProperty('langs', Language::getLanguages());
App::$app->setProperty('lang', Language::getLanguage(App::$app->getProperty('langs')));
Создал отдельную папку в неё поместил
Файл
Language.php
<?php
namespace app\widgets\language;
class Language{
protected $tpl;
protected $language;
protected $languages;
public function __construct(){
$this->tpl = __DIR__ . '/lang_tpl.php';
$this->run();
}
protected function run(){
$this->languages = App::$app->getProperty('langs');
$this->language = App::$app->getProperty('lang');
echo $this->getHtml();
}
public static function getLanguages(){
return \R::getAssoc("SELECT code, title, base FROM languages ORDER BY base DESC");
}
public static function getLanguage($languages){
if(isset($_COOKIE['lang']) && array_key_exists($_COOKIE['lang'],$languages)){
$key = $_COOKIE['lang'];
}else{
$key = key($languages);
}
$lang = $languages[$key];
$lang['code'] = $key;
return $lang;
}
public static function getHtml(){
ob_start();
require_once $this->tpl;
return ob_get_clean();
}
}
И другой там же в папке
lang_tpl.php
<div class="dropdown">
<div value="<?=$this->language['code'];?>" class="dropbtn"><?=$this->language['title'];?></div>
<div class="dropdown-content">
<?php foreach($this->language as $k => $v): ?>
<?php if($this->language['code'] != $k): ?>
<a value="<?=$k;?>"><?=$v['title'];?></a>
<?php endif; ?>
<?php endforeach; ?>
</div>
</div>
Есть папка с языками. Ну там ru en и тд..
<?php
return [
'test' => 'привет',
'dota' => 'ай ай',
];
?>
Есть функция
function __($key){
echo \ishop\core\base\Lang::get($key);
}
Ещё создал вид
<?php
namespace ishop\base;
class Lang{
public static $lang_data = [];
public static $lang_layout = [];
public static $lang_wiew = [];
public static function load($code, $wiew){
$lang_layout = APP . "/langs/{$code['code']}.php";
$lang_view = APP . "/langs/{$code['code']}/{$view['controller']}/{$view['action']}.php";
if(file_exists($lang_layout)){
self::$lang_layout = require_once $lang_layout;
}
if(file_exists($lang_view)){
self::$lang_view = require_once $lang_view;
}
self::$lang_data = array_merge(self::$lang_layout, self::$lang_view);
}
public static function get($key){
return isset(self::$lang_data[$key]) ? self::$lang_data[$key] : $key;
}
}
Есть js файл
$(function () {
$('#lang').change(function(){
window.location = '/language/change?lang=' + $(this).val();
});
});
Пытаюсь всё выводить так
<?php __(test);?>
Ещё в виде шаблона приписал такое
Lang::load(App::$app->getProperty('lang'), $this->route);
Не ошибок не чего не выводит. Шаблон выводит только до того момента где пишу
<?php __(test);?>
Может кто подсказать где может быть ошибка? В базе данных талица всё есть. Оттуда массивы нормально всё выводит.