Организация структуры многоязычного сайта

  • Заблокирован
  • #11
вообще это должно по-моему выглядеть так.
index.html редиректит на index.php?lang=ЯЗЫК&и т.д. в site.ru/eng/index это всё должен превращать URL rewrite сервера.то есть htacces или web.config
У меня так joomla работает по крайней мере. Только дефолтным фалом надо назвать index.html
 
Что-то примерное?
к чему тут можно прикрутить $ _SERVER ["REQUEST_URI"]

<?php
$sites = array(
"en" => "/en/index",
);

$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);

if (!in_array($lang, array_keys($sites))){
$lang = 'en';
}
// перенаправление на субдомен
header('Location: ' . $sites[$lang]);
?>

стараюсь сделать но делает перенаправление на главную:
PHP:
header ('Location:'. $sites[$lang]. $SERVER["REQUEST_URI"].)
 
eader ('Location: /'. $sites[$lang]. $SERVER["REQUEST_URI"]);
нужна наклонная черта в начеле
 
не получается переадресация идет на site.ru/en/
 
Простите, но вы все не правы:p Это конечно можно как-то реализовать на PHP, но зачем ради этого нагружать сервер? От этого будет хуже и клиенту и серверу.
В java скрипте с помощью объекта Для просмотра ссылки Войди или Зарегистрируйся узнаётся язык, а затем с помощью window.location.replace(тут куда перенаправить) перенаправляешь куда надо. Причём пользователь даже не заметит что его на нужный ему язык сразу перенаправили. Это даже в истории не сохранится
Js еще может быть отключен у пользователя... И как быть, если нужно выборку из базы делать на основании языка, с ajax играться или клонов index.php плодить?
Для себя как-то писал функцию для определения языка
PHP:
function br_lang()
    {
        $accepted = array('ru', 'en');
        $alllang = $_SERVER["HTTP_ACCEPT_LANGUAGE"];
        if (strpos($alllang, ";") !== FALSE)
        $alllang = substr($alllang,0,strpos($alllang, ";"));
        $langs = explode(",", $alllang);
        if( is_array($langs) && count($langs) )
            {
                foreach( $langs as $one )
                    {
                        if( in_array($one,$accepted) )
                            {
                                $res = $one;
                                break;
                            }
                        else
                            {
                                $res = 'ru';
                            }
                    }
            }
        else
            {
                $res = 'ru';
            }
        return $res;
    }
Потом на основе полученного языка делал выборку из базы (категории/элементы или названия).
 
Назад
Сверху