@Malazar

Проблема с языками на сайте php как исправить ошибку?

Вечер добрый всем. Пытаюсь сделать несколько языков на сайте. Делаю всё на фреймворка. Но вот где то ошибка у меня не могу понять где только.

Есть контролер
<?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);?>

Может кто подсказать где может быть ошибка? В базе данных талица всё есть. Оттуда массивы нормально всё выводит.
  • Вопрос задан
  • 112 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы