我正试图寻找多语言网站的解决方案。我有4个域名:
根据域名,必须加载适当的语言。语言由?lang = ...决定 我在.htaccess中尝试过modrewrite,但它不适合我的需要。当用户访问domain.com/page时,.htaccess不会处理规则。 所以我想用php来做。 目前,语言和cookie由这篇文章设置:
<?php
session_start();
header('Cache-control: private'); // IE 6 FIX
if(isSet($_GET['lang']))
{
$lang = $_GET['lang'];
// register the session and set the cookie
$_SESSION['lang'] = $lang;
setcookie('lang', $lang, time() + (3600 * 24 * 30));
}
else if(isSet($_SESSION['lang']))
{
$lang = $_SESSION['lang'];
}
else if(isSet($_COOKIE['lang']))
{
$lang = $_COOKIE['lang'];
}
else
{
$lang = 'en_eu';
}
switch ($lang) {
case 'nl_be':
$lang_file = 'nl_be.php';
break;
case 'nl_nl':
$lang_file = 'nl_nl.php';
break;
case 'en_us':
$lang_file = 'en_us.php';
break;
case 'en_uk':
$lang_file = 'en_us.php';
break;
case 'en_eu':
$lang_file = 'en_eu.php';
break;
default:
$lang_file = 'en_eu.php';
}
include_once 'components/languages/'.$lang_file;
?>
我正在考虑添加一些行来确定域名,并添加一些if语句来根据域确定语言。但我真的不知道如何以及如果这是正确的做法。
<?php
$url = "//{$_SERVER['HTTP_HOST']}";
if ($url == domain.be) {
$lang = 'nl_be';
}
elseif ($url == domain.uk) {
$lang = 'en_uk';
}
else ( ) {
$lang = 'en_us';
}
?>
答案 0 :(得分:1)
阅读本文后:https://support.google.com/webmasters/answer/182192?hl=en
Google建议在自己的网址上保留不同的语言版本。
由于您已经拥有顶级域名,我只需检查域名并确定其中的语言。
然后在每个页面的顶部为用户提供语言选择链接:
English: example.com/node/1
French: example.fr/node/1
etc.
隐藏当前语言链接。
并使用头部中的链接元素补充上述内容:
<link rel="alternate" hreflang="es" href="http://example.es/node/1" />
答案 1 :(得分:0)
我在这个帖子How to default to another language based on domain
中找到了答案它在.htaccess中使用SetEnvIf,php处理其余的
.htaccess中的代码:
SetEnvIf Host "\.be$" SITE_LANGUAGE=nl_be
SetEnvIf Host "\.uk$" SITE_LANGUAGE=en_uk
然后使用:
调用SITE_LANGUAGE$_SERVER['SITE_LANGUAGE'];
PHP中的代码:
<?php
session_start();
header('Cache-control: private'); // IE 6 FIX
$lang = $_SERVER['SITE_LANGUAGE'];
if(isSet($_GET['lang']))
{
$lang = $_GET['lang'];
// register the session and set the cookie
$_SESSION['lang'] = $lang;
setcookie('lang', $lang, time() + (3600 * 24 * 30));
}
else if(isSet($_SESSION['lang']))
{
$lang = $_SESSION['lang'];
}
else if(isSet($_COOKIE['lang']))
{
$lang = $_COOKIE['lang'];
}
else
{
$lang = 'en_eu';
}
switch ($lang) {
case 'nl_be':
$lang_file = 'nl_be.php';
break;
case 'nl_nl':
$lang_file = 'nl_nl.php';
break;
case 'en_us':
$lang_file = 'en_us.php';
break;
case 'en_uk':
$lang_file = 'en_us.php';
break;
case 'en_eu':
$lang_file = 'en_eu.php';
break;
default:
$lang_file = 'en_eu.php';
}
include_once 'components/languages/'.$lang_file;
?>