具有子文件夹的多语言站点

时间:2012-06-24 15:26:24

标签: php multilingual

请帮我处理必须重定向到正确语言的php文件。 网站架构是 site.com/en site.com/fr

我的鳕鱼:

<?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]);
?>

2 个答案:

答案 0 :(得分:1)

您可以将包含相对于文档根目录的路径的$_SERVER['PHP_SELF']变量附加到您的语言文件夹中。

如果您的路径为site.com/fr/file,则此变量将包含/fr/file。当您删除此部分的第一部分时,您将获得被调用脚本的“语言无关”路径,您可以将其附加到所需的语言目录。

如果您的路径如您所述,您可以尝试以下解决方案(未经测试!):

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

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

if (!in_array($lang, array_keys($sites))){
$lang = 'en';
}

$path_to_script = substr($_SERVER['PHP_SELF'], 3);

header('Location: ' . $sites[$lang] . $path_to_script);
?>

编辑:澄清方法: 如果网站为site.com/fr/123/index.php,则变量$path_to_script将包含/123/index.php,即没有主要语言目录的脚本目录。 然后,您可以将其附加到所需的语言目录并获取所需的路径:/en/123/index.php

答案 1 :(得分:0)

/en/index应为/en/index.php,除非您使用的是Apache的mod_rewrite(默认情况下不是)。请提供更多有关不起作用的详细信息,以便我们为您提供更多帮助。

编辑: 此外,您可以为用户提供选择语言的选项,因为可能未设置“HTTP_ACCEPT_LANGUAGE”。在这种情况下,唯一的选择是英语,这会限制你的公众。

有些人甚至推荐地理定位,但我发现添加一个带语言的下拉菜单就足够了。