php+smarty: реализация двуязычной версие сайта

stasbz

Новичок
php+smarty: реализация двуязычной версие сайта

Сайт реализован на php+smarty. В основной папке лежат php файлы. В папке ru.templates лежат русскоязычные шаблоны, в папке en.templates англоязычные шаблоны. Есть папка libs с движком smarty.
По умолчанию открывается русскоязычная версия сайта. переключение на англоязычную - http://xxx.com/index.php?lang=ru
Переход на другой язык собираюсь орагнизовать по Accept-Language, настроив htaccess.
Если сделать RewriteRule ^/?$ /index.php?lang=ru [R,L]
то возникает глюк. вообщем не работает.
как лучше тогда организовать переход на другую версию сайта?
Может быть сделать копию всех файлов и поместить их в папку /en/.
И соответсвенно в htacces сделать переадресацию RewriteRule ^/?$ /en/index.php
 

stasbz

Новичок
потому что не работает , если прописать в htaccess
# Если русского языка в списке поддерживаемых нет
RewriteCond %{HTTP:Accept-Language} !ru [NC]
# Идем в английский раздел
RewriteRule ^/?$ /en/ [R,L]
# Иначе в русский
RewriteRule ^/?$ /ru/ [R]

код из /libs/engine.php
<?php

function getmicrotime()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
$tstart = getmicrotime();


## Подключение к БД.
require_once($_SERVER['DOCUMENT_ROOT']."/libs/Smarty/Smarty.class.php");
require_once($_SERVER['DOCUMENT_ROOT']."/libs/DbSimple/config.php");
require_once($_SERVER['DOCUMENT_ROOT']."/libs/DbSimple/Generic.php");
require_once($_SERVER['DOCUMENT_ROOT']."/libs/Main.class.php");

session_start();

global $smarty;
$smarty = new Smarty();

if (!$_SESSION['lang']) {
$_SESSION['lang'] = 'ru';
}
if ($_GET ['lang']) {
$_SESSION['lang'] = $_GET ['lang'];
}
$smarty->template_dir= ($_SESSION['lang']=='ru')? "ru.templates": "en.templates";
$smarty->compile_dir= ($_SESSION['lang']=='ru')? "ru.templates_c": "en.templates_c";

$menulang = $_GET ['menulang'];
if ($menulang) {
$_SESSION['menulang'] = ($menulang=='en')? 'en': 'ru';
} else {
$_SESSION['menulang'] = ($_SESSION['menulang']=='ru')? 'ru': 'en';
}

-~{}~ 07.02.10 16:04:

вот решил сделать так. в папку ru положить все нынешние файлы и настроить на открытие русского языка по умолчанию, а папку ru положить все нынешние файлы и настроить на открытие английяского языка по умолчанию. и настроить htaccess
# Если русского языка в списке поддерживаемых нет
RewriteCond %{HTTP:Accept-Language} !ru [NC]
# Идем в английский раздел
RewriteRule ^/?$ /en/index.php [R,L]
# Иначе в русский
RewriteRule ^/?$ /ru/index.php [R]

-~{}~ 07.02.10 16:04:

Хотел узнать может быть есть другие варианты?
 

Вурдалак

Продвинутый новичок
Вообще-то шаблоны для обеих версий должны быть одинаковые. Вернее, не должно быть вообще никакого разделения в зависимости от языка. Вместо текстов нужно оставлять переменные, либо что-то типа
Код:
{t}Текст{/t}
И переводить для каждой версии. Это уже дело вкуса.
 

stasbz

Новичок
В данный момент сделано как я описал. уже давно так работает.
 

zerkms

TDD infected
Команда форума
stasbz
повторяю вопрос: как проблемы .htaccess связаны со смарти?

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

stasbz

Новичок
Автор оригинала: zerkms
stasbz
повторяю вопрос: как проблемы .htaccess связаны со смарти?
Сорри. не сразу понял.
могли бы посоветовать: как тогда правильно настроить htaccess?
 

Вурдалак

Продвинутый новичок
Автор оригинала: zerkms
Вурдалак
вообще не всегда. в зависимости от языка может подгружаться совершенно разная графика и быть совершенно разная верстка, при той же структуре сайта и естественно тех же данных.
— да, не всегда. Я поводу интернационализации.
 

baev

‹°°¬•
Команда форума
Мда.
Автор оригинала: stasbz
По умолчанию открывается русскоязычная версия сайта. переключение на англоязычную - http://xxx.com/index.php?[b]lang=ru[/b]
Автор оригинала: stasbz
вот решил сделать так. в папку ru положить все нынешние файлы и настроить на открытие русского языка по умолчанию, а папку ru положить все нынешние файлы и настроить на открытие английяского языка по умолчанию. и настроить htaccess
Давайте, Вы сначала определитесь, где у Вас опечатки, а где — действительно ошиблись.
 

zerkms

TDD infected
Команда форума
stasbz
я не вижу вопроса по .htaccess. есть куча кода и куча слов насчёт смарти.
 

stasbz

Новичок
Автор оригинала: baev
Мда.


Давайте, Вы сначала определитесь, где у Вас опечатки, а где — действительно ошиблись.
Я имел ввиду следующее.
На данный момент следующая структура в корневой папке
*.php
ru.templates
en.templates
libs
Я решил сделать так- создать две папки ru и en и в них залить вышеописанные файлы.
ru
-*.php
-ru.templates
-en.templates
-libs
en
-*.php
-ru.templates
-en.templates
-libs
И делать редирект через htaccess на ru/index.php или на en/index.php

-~{}~ 07.02.10 16:43:

Автор оригинала: zerkms
stasbz
я не вижу вопроса по .htaccess. есть куча кода и куча слов насчёт смарти.
данный код Htaccess не сработал в моем варианте.
# Если русского языка в списке поддерживаемых нет
RewriteCond %{HTTP:Accept-Language} !ru [NC]
# Идем в английский раздел
RewriteRule ^/?$ /index.php?lang=en [R,L]
# Иначе в русский
RewriteRule ^/?$ /index.php [R]
 

Вурдалак

Продвинутый новичок
Автор оригинала: stasbz
данный код Htaccess не сработал в моем варианте.
# Если русского языка в списке поддерживаемых нет
RewriteCond %{HTTP:Accept-Language} !ru [NC]
# Идем в английский раздел
RewriteRule ^/?$ /index.php?lang=en [R,L]
# Иначе в русский
RewriteRule ^/?$ /index.php [R]
— там есть строка RewriteEngine On?

-~{}~ 07.02.10 16:48:

+ ещё желательно добавить
Код:
RewriteCond %{QUERY_STRING} !lang
 

dimagolov

Новичок
Это вторая серия. Первая тут: http://phpclub.ru/talk/showthread.php?s=&threadid=117983

Надо признать, что градус маразма увеличивается:
И делать редирект через htaccess на ru/index.php или на en/index.php
stasbz, ты реши для себя. Ты хочешь сделать 2 независимых сайта с похожим контентом, или один сайт с 2-я локализациями? Потому что две директории со своим кодом, либами и шаблонами, это уже 2 сайта. Разных.

п.с. я вот еще не понял логику держать русские шаблоны в английском сайте, ну да ладно. похоже неспособность написать правила реврайта заставляет автора играться с папками и скриптами подстраиваясь под те правила, что у него есть сейчас. wag the dog, короче.
 

stasbz

Новичок
Автор оригинала: Вурдалак
— там есть строка RewriteEngine On?

-~{}~ 07.02.10 16:48:

+ ещё желательно добавить
Код:
RewriteCond %{QUERY_STRING} !lang
не помогает , пишет
Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.
 

stasbz

Новичок
настроил. работает.
проверял через http://ipinfo.info/netrenderer/index.php
при открытие главной проблем нету.
а если открывать любую др. страницу, то все равно открывается русская версия.

-~{}~ 08.02.10 17:16:

Какое решение в моем случае лучше всего?
 

Вурдалак

Продвинутый новичок
Я бы делал на уровне скрипта все эти проверки и перенаправления.
 
Сверху