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


multilanguage site with sub folder

请帮助我处理必须重定向到正确语言的php文件。网站体系结构是site.com/ensite.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]);
?>
您可以将

包含相对于文档根目录的路径的 $_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

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

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

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