Мультиязычный сайт на PHP + XSL = проблема

Статус
Закрыто для дальнейших ответов.

deeand

Member
Регистрация
13.12.2011
Сообщения
23
Всем привет!
Имеется сайт с поддержкой двух языков (При нажатии ссылок ENG и РУС осуществляется перевод). Его структура выглядит примерно вот так:
Код:
[b]<?php
require_once('class.translation.php');[/b]
[b]if(isset($_GET['lang']))
$translate = new Translator($_GET['lang']);
else
$translate = new Translator('ru');
?>[/b]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru"><head>
....
</head>
<body>
<div id="lang">
<a class="flag_english" title="english" href="index.php?lang=eng">[b]ENG[/b]</a>
<a class="flag_russian" title="russian" href="index.php">[b]РУС[/b]</a>
</div>
....
<li id="item2"><a href="../service.php">[b]<?php $translate->__('Службы'); ?>[/b]</a></li>
....
....
[color=#ff0000]<div class="panel" data-url="[b]skin=compact.xsl[/b]">Fetching...</div>[/color]
....
</body>
</html>
В текстовом файлике perevod.txt записывается перевод слов/предложений в таком виде:
Код:
Службы=Services
И при помощи файла class.translation.php осуществляется подставление слов/предложений на сайт:
Код:
<?php
class Translator {
private $language = 'ru';
private $lang = array();

public function __construct($language){
$this->language = $language;
}

private function findString($str) {
	 if (array_key_exists($str, $this->lang[$this->language])) {
echo $this->lang[$this->language][$str];
return;
	 }
	 echo $str;
}

private function splitStrings($str) {
	 return explode('=',trim($str));
}

public function __($str) {
	 if (!array_key_exists($this->language, $this->lang)) {
		 if (file_exists($this->language.'.txt')) {
			 $strings = array_map(array($this,'splitStrings'),file($this->language.'.txt'));
			 foreach ($strings as $k => $v) {
	 $this->lang[$this->language][$v[0]] = $v[1];
			 }
			 return $this->findString($str);
		 }
		 else {
			 echo $str;
		 }
	 }
	 else {
		 return $this->findString($str);
	 }
}
}
?>

Проблема в следующем: В подгружаемом к сайту xsl-файлике не переводятся слова таким способом <?php $translate->__('Службы'); ?> , а как сделать правильно я не знаю.
Вот структура xsl файла:
Код:
<xsl:transform version="1.0" encoding="UTF-8" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:variable name="panel" select="/items/@panel"/>

<xsl:template match="items">
<table style="width:314px;">
<xsl:call-template name="header"/>
<xsl:apply-templates select="item"/>
<xsl:call-template name="footer"/>
</table>
</xsl:template>
.....
<xsl:template name="footer">
<xsl:call-template name="totals"/>
<td class="total" colspan="3" style="text-align:center;vertical-align:bottom">

<xsl:if test="$panel = 'yes'">
	 <xsl:if test="item">
.....
	 [color=#ff0000]<button type="submit" id="valka" name="submit">[b]ПОДТВЕРДИТЬ[/b]<span class="icon1"></span></button> [/color]
.....
	 </xsl:if>
</xsl:if>
</td>
</xsl:template>
.....
 

AngelGabriel

И имя мне - легион
Регистрация
23.11.2008
Сообщения
778
Я так понял не работает php код в стилях, это из-зи того что они не обробатываются php-процессором на сервере.

Преобразования нужно делать в файле котороый генеририрует xml.
 

deeand

Member
Регистрация
13.12.2011
Сообщения
23
Я так понял не работает php код в стилях, это из-зи того что они не обробатываются php-процессором на сервере.

Преобразования нужно делать в файле котороый генеририрует xml.
xml файла нет. Только xsl есть.
Мне нужно каким-то образом интерпретировать php команду ( <?php $translate->__('Службы'); ?> ) под xsl. Спомощью этой команды переводятся слова и тексты с русского на английский.
 

AngelGabriel

И имя мне - легион
Регистрация
23.11.2008
Сообщения
778
есть вариант, сменить расширение c .xsl на .php, но у меня это ошибку выбивает (переводил стили на стороне клиента), И вобще в стилях код не пишут, наверное вы изначально чт то не так делаете.

Нужно болше инфы, какой процессор используете на клиенте или на сервере.
 

deeand

Member
Регистрация
13.12.2011
Сообщения
23
В общем, решил эту проблему очень просто. Создал несколько копий этого xsl под разными названиями на различных языках, а в html, поменял строку <div class="panel" data-url="skin=compact.xsl">Fetching...</div> на <div class="panel" data-url="skin=<?php $translate->__('compact.xsl'); ?>">Fetching...</div> и в текстовом файле дописал compact.xsl=compact_en.xsl . И всё :biggrin:
 

deeand

Member
Регистрация
13.12.2011
Сообщения
23
Знаю что плохое, "костыльное" решение, но по другому не получается. С xsl впервые столкнулся. Сайт "самописный" без БД и CMS, пока на локалке. XSL файлик относится к корзине покупок http://easybasket.co.uk/instalation.html, отвечает за внешний, графический вид. Корзина всем устраивает, за исключением выбора доставки и настройки мультиязычности xsl.
 
Статус
Закрыто для дальнейших ответов.
Верх Низ