2013-09-27 2 views
0

Я закодировал многоязычный веб-сайт с php & mysql. Теперь я столкнулся с проблемами (в основном с роботами, seo и поисковыми системами) , потому что язык выбирается на основе cookie.многоязычный веб-сайт: php + mysql + cookies

, как он работает сейчас: пользователь => index.php:

function cookies() { 
if (!isset($_COOKIE["lang"])){ 
setcookie('lang','ukr', time()+(60*60*24*31)); 
header('Location: index.php'); 
}}; 

и вывод выбранного языка на каждое место, это должно было быть с функцией:

function catSet($source, $link, $item){ 
$item .= '_'. $_COOKIE['lang']; 
global $connection; 
$link = mysqli_real_escape_string($connection, $link); 
$result = mysqli_query($connection, "SELECT * FROM $source WHERE link_item = '". $link ."'"); 
if (!$result) { die("DB Query failed: " . mysql_error()); } 
while ($row = mysqli_fetch_array ($result)) { 
echo $row[$item]; }} 

То, что я хочу сейчас находится иметь $item .= '_'. $_COOKIE['lang'];, который должен быть заменен постоянным на основе пользовательского выбора, который можно было бы прочитать роботами и поисковыми системами, поэтому это не должно быть cookie.

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

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

Я вижу выход, чтобы использовать переменную [GET] и передавать его каждый раз на другую страницу, но как сохранить данные [GET], если пользователь вернется в следующий раз (та же проблема, что и в сеансах).

Я был бы признателен за любые идеи и решения :)

ответ

1

Вы все еще можете использовать куки для сохранения решения пользователя. Когда пользователь посещает ваш сайт без языка в url (GET), но получает cookie с выбранным языком, перенаправляет его на URL с выбором.

Это позволит вам использовать адреса с заданным языком, а также позволит пользователю просто скопировать/пропустить его текущий URL-адрес, который всегда приведет его к его языковой версии.

+0

таким образом, я должен сделать if/else для проверки '(! Isset ($ _ COOKIE [" lang "]))' каждый раз. Пользователь приходит на страницу 1-го раза, допустим, по умолчанию lang = 'eng', если пользователь меняет lang, в следующий раз я буду читать cookie и дать ему обратно, который он выбрал. НО! Роботы не используют файлы cookie, это означает, что они всегда будут видеть только один = default lang ?! – A1exandr

+0

@ A1exandr Как я уже сказал, перенаправляйте пользователя и игнорируйте cookie, когда задано значение get. Также во всех ссылках на веб-странице используйте эту переменную. Например. когда входящая ссылка имела lang = en, тогда каждая ссылка на веб-сайте будет содержать этот lang = en. –

+0

Я тебя понимаю. Но что, если значение в get установлено в значение по умолчанию. Пойдут ли роботы через другие языки ?! – A1exandr

0

Для локализации вы можете использовать расширение gettext PHP, это использует формат .po и .mo для преобразования содержимого. Это также решит проблему SEO. Все содержимое загружается в память сервера в виде объекта и отображается в браузере в соответствии с запрошенным языком. Для получения более подробной информации read here

+0

'gettext' может быть следующим шагом, но не может решить любую проблему SEO. –

+0

хорошо, что это вариант, но я могу редактировать MySQL с webAdministration панели, я не уверен, если редактирование PO файлы будет так легко. – A1exandr

+0

@ElonThan - SEO, безусловно, совершенно другой вопрос, но в моем случае, мне нужно видеть робот всех языков для начала. – A1exandr