我一直在寻找,但似乎无法找到实现这一目标的正确方法:
为了创建多语言(2)网站,我考虑使用以下文件夹结构:
DOMAIN
www.domain.com/index.php
NL-folder
www.domain.com/nl/index.php (alternative home.php?)
www.domain.com/nl/pagina2.php
...
EN-folder
www.domain.com/en/index.php (alternative home.php?)
www.domain.com/nl/page2.php
...
我读过有些人发现www.domain.com/index.php
是一个令人讨厌的语言选择页面。
因此我认为此页面应显示与首选语言的索引/主页相同的内容。我听说过这可以通过使用标题字段Accept-Language
来完成。另外,我应该显示www.domain.com/nl/index.php
的内容或重定向(为了能够进行语言相关的查询,我觉得我必须将www.domain.com/index.php
重定向到特定于语言的页面,以便语言可以选择?)。
当然,用户以后可以改变语言......
我完全坚持如何正确地实现这一点。
我唯一想到的就是重定向。使用http://www.thefutureoftheweb.com/blog/use-accept-language-header上的代码,这将成为:
$langs = array();
if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
preg_match_all('/([a-z]{1,8}(-[a-z]{1,8})?)\s*(;\s*q\s*=\s*(1|0\.[0-9]+))?/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $lang_parse);
if (count($lang_parse[1])) {
// create a list like "en" => 0.8
$langs = array_combine($lang_parse[1], $lang_parse[4]);
// set default to 1 for any without q factor
foreach ($langs as $lang => $val) {
if ($val === '') $langs[$lang] = 1;
}
// sort list based on value
arsort($langs, SORT_NUMERIC);
}
}
// look through sorted list and use first one that matches our languages
foreach ($langs as $lang => $val) {
if (strpos($lang, 'nl') === 0) {
header("Location: http://domain.com/nl/index.php");
} else if (strpos($lang, 'en') === 0) {
header("Location: http://domain.com/en/index.php");
}
}
我的例子好吗,或者我应该采用不同的方式吗?
答案 0 :(得分:0)
我认为这个问题没有一个答案。我在Zend Framework(v1)应用程序中写了一些关于multilanguage support的博客,并写了(实际上仍在编写)包含此内容的library。
你在第一个目录路径中分离不同版本的方法是好的,但你需要一些重写规则,因为我想你不想在每个语言目录中复制代码! :)
如果浏览器的语言不在您支持的语言列表中,您还需要预先定义一组受支持的语言,并使用后备语言。
另外,正如Bartdude举例说明的那样,不要依赖访问者的国家来决定语言。
答案 1 :(得分:0)
Algorihtm
检测接受语言
table_a <- structure(list(name = structure(c(2L, 1L, 5L, 3L, 4L), .Label = c("ALex", "John", "Kev", "Peter", "ToM"), class = "factor"), color = c("red", "blue", "green", "yellow", "pink")), row.names = c(NA, -5L), class = "data.frame")
table_b <- structure(list(name = structure(c(2L, 1L, 6L, 3L, 4L, 5L), .Label = c("Alexander", "Johnathan", "Kevin", "Luke", "Ryan", "Tomas"), class = "factor"), food = c("pizza", "tacos", "sushi", "cake", "brownies", "burgers")), row.names = c(NA, -6L), class = "data.frame")
table_c <- structure(list(name = structure(c(2L, 1L, 5L, 3L, 4L), .Label = c("Alexande1", "Johnatha", "Kevi1", "Luk1", "Toma1"), class = "factor"), food = c("pizza", "tacos", "sushi", "cake", "brownies")), row.names = c(NA, -5L ), class = "data.frame")
此函数将返回一个数组。例子:
function GetAcceptLanguageList(){
$langs = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
$list = [];
{
$ls = explode(",",$langs);
foreach ($ls as $key => $value) {
$lx=explode(";",$value);
array_push($list,$lx[0]);
}
}
return $list;
}
选择接受语言或默认语言后。
转到语言页面示例。 Array
(
[0] => tr-TR
[1] => tr
[2] => en-US
[3] => en
[4] => la
)