Я пытаюсь создать URL-роутер, где язык сайта определяется первыми двумя символами в домене. Пример: domain.com/en (сайт будет отображать контент на английском языке).
Сценарий ниже - это то, что я придумал до сих пор. Фокус на функциональности, а не на SEO. Однако я бы хотел, чтобы он был оптимизирован для обеих сторон, и, честно говоря, я не эксперт по поисковой оптимизации.
- Сможет ли Googlebot индексировать английский и датский контент? (обратите внимание, как я понимаю язык посетителей и делаю переадресацию соответственно)
- Могу ли я что-нибудь сделать для улучшения функциональности скрипта, включая обработку SEO?
Все предложения по улучшению приветствуются.
Заранее спасибо!
private $allowedLang = array('da', 'en');
private $langRouter = array(
'en' => 'en_US',
'da' => 'da_DK'
);
function __construct() {
$locale = in_array($_GET['locale'], $this->allowedLang);
if ($locale) {
// If get-var locale is allowed, set it as session
$_SESSION['language'] = $_GET['locale'];
}
if (empty($_SESSION['language'])) {
// If session isn't set, use visitor's browser language
$_SESSION['language'] = $this->getLanguage();
}
// Only redirect if get-var locale is empty or isn't allowed, and target file is not located in lib folder (ajax files etc.)
if ((empty($_GET['locale']) || !$locale) && substr($_SERVER['SCRIPT_NAME'], 0, 4) != '/lib') {
header('Location: /'.$_SESSION['language']);
}
$this->setLanguage($_SESSION['language']);
}
public function setLanguage($lang) {
// If $lang is allowed use it, else default to DEFAULT_LANGUAGE
$locale = (in_array($lang, $this->allowedLang) ? $this->langRouter[$lang] : DEFAULT_LANGUAGE);
// Initiate gettext
putenv("LC_ALL=$locale");
setlocale(LC_ALL, $locale);
bindtextdomain("messages", CLIENT_PATH."/lib/locale");
textdomain("messages");
}
/**
* Get the visitor's language based on browser settings.
* If language isn't found or isn't allowed, default to DEFAULT_LANGUAGE
*/
private function getLanguage() {
if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
$langs = explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']);
foreach ($langs as $value) {
$choice = substr($value, 0, 2);
if (in_array($choice, $this->allowedLang)) {
return $choice;
}
}
}
return DEFAULT_LANGUAGE;
}
}