Перейти к публикации

Мультиязычность без кучи шаблонов


Рекомендованные сообщения

DLE поддерживает много языков, но проблем у меня в том, что эта поддержка находится на уровне PHP, т.е. на уровне модов. Как сделать в шаблоне метку, которая бы менялась, при обработке, на соответствующий текст в справочнике переводов? Что бы данные брались из того же справочника, что и для модов?

Ссылка на сообщение
Поделиться на других сайтах

Есть такое решение:


Index: templates.class.php

===================================================================

--- templates.class.php	(revision 12)

+++ templates.class.php	(working copy)

@@ -52,6 +52,7 @@

 	}


 	function load_template($tpl_name) {

+		global $lang;

         /**/

         $this->templatename = $tpl_name; 

         /**/

@@ -63,9 +64,14 @@

 			die( "Невозможно загрузить шаблон: " . $tpl_name );

 			return false;

 		}

-

+		

 		$this->template = file_get_contents( $this->dir . DIRECTORY_SEPARATOR . $tpl_name );


+		if (strpos ( $this->template, "[lang=" ) !== false) {

+			//$this->template = preg_replace( "#\\[lang=['\"](.+?)['\"]\\]#ies", "ins_lang('\\1')", $this->template );

+			$this->template = preg_replace( "#\\[lang=['\"](.+?)['\"]\\]#ies", "isset(\$lang)&&isset(\$lang['\\1'])?\$lang['\\1']:'<span style=\"color: red; font-weight: bold; font-size: 14px\">\\1</span>'", $this->template );

+		}

+

 		if (strpos ( $this->template, "[aviable=" ) !== false) {

 			$this->template = preg_replace ( "#\\[aviable=(.+?)\\](.*?)\\[/aviable\\]#ies", "\$this->check_module('\\1', '\\2')", $this->template );

 		}

Тест (входные данные):
<br />>>[lang="admin"]<<

<br />>>[lang="admin1"]<<
Тест (результат (HTML)):
<br />>>Администратор<<

<br />>><span style="color: red; font-weight: bold; font-size: 14px">admin1</span><<

Его минусом является то, что не во всех шаблонах, обрабатывается команда (например) [lang="admin"]. К таким шаблонам относится login.tpl. Почему не знаю, пока разбираюсь. Пока, на мой взгляд, успех уже очевиден, т.к. не нужно делать шаблоны под разные языки сайта. Достаточно сделать один шаблон и ставить в места-константы команду [lang="<слово>"], где <слово> - это константа, указывающая на перевод. я подумал над случаем с login.tpl и пришел к выводу, что в ситуации когда мало времени, и спецификой данного шаблона (login.tpl, он отличается от остальных): простые вещи типа

global $lang;


<?=$lang["admin"]?>


$admin = $lang["admin"];

<?=$admin?>

не подходят, не работают, возвращается пустая строка. Даже если сделать:
<?="qwe"?>
Кароче, думаю проще юзать

login_panel = <<<HTML

...


HTML;

Изменено пользователем SNOOPYKZ
Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...