今年我写了一个非常大的网站,没有CMS。我是从头开始写的。今天我开始实施翻译系统。
基本上,想法是在URL中添加/language/
。这意味着,当我浏览默认语言时,索引页面具有URL
http://www.racebooking.net/index.php
一旦用户点击英国国旗以查看该网站的英文版本,该网址将变为
http://www.racebooking.net/en/index.php
在.htaccess中,我有一条将/en/
转换为?lang=en
的规则。
问题
每个页面都有大量的链接,这意味着我的网站上有数千个<a href=".."></a>
个标签。
例如,在我的index.php页面上,我有一个像这样的链接
<a href="http://www.racebooking.net/forum">Forum</a>
如果我目前正在浏览英文版本,应该指向
http://www.racebooking.net/en/forum
乍一看,我的想法是将其改为
<a href="http://www.racebooking.net/<?php echo $_GET['lang'] . '/';?>forum">Forum</a>
效果很好!但是,问题是我的网站上有数以千计的<a>
标签!改变所有这些都是完全疯狂的,只需在其中添加<?php echo $_GET['lang'] . '/';?>
!这将需要数天,数天和数天的工作。
那么,有没有一种聪明的方法可以将/language/
添加到我的所有网站网址中?
修改
我不想使用任何js。禁用js的所有用户在浏览我的网站时都会遇到问题!
答案 0 :(得分:4)
HTTP permanent redirect status code (301)完全符合您的情况。您网站的所有链接仍然有效,此外,任何书签都会更新到您的新网址路径构建。
您可以使用mod_rewrite在
中在Apache中进行设置RewriteRule /(?!en|es|de|fr|it)(/?.*)$ http://www.mydomain.com/en/$1 [R=301,L]
这将重定向每个网址路径,该路径不以en
,es
,de
,fr
,it
开头{{1 (默认)子路径。
编辑评论:
上述解决方案可以让您的所有链接都能正常工作(新旧链接)。
如果您还想更改页面上的所有链接,以便搜索引擎可以看到它们,那么您唯一的选择是在PHP / HTML代码中重写它们(使用JavaScript这是一个坏主意,原因有很多) )。
在这种情况下,最好的选择是编写辅助函数,根据当前语言为您生成链接。通过这种方式,您将拥有一个单点,您可以在其中更改链接,如果它们将来再次更改。
很遗憾,您无法一次更改所有链接。如果你有数千个,并且没有生成所有这些代码的公共代码,那么你必须逐个完成。好消息是,您不是第一个遇到此问题的人,专业IDE的开发人员已经实施了工具来帮助您。我个人的选择是商业软件,但其他开源IDE也有很好的查找/替换选项。例如,您可以编写正则表达式,它将找到您的链接并根据您提供的规则替换它们。写一个好的正则表达式替换器可能被证明是非常有益的,而不是逐个审查所有链接。
这是url helper的可能实现之一:
en
现在你必须找到所有链接被输出的地方并使用帮助器:
class UrlHelper
{
public static function make($base, $lang = null)
{
if ( $lang === null ) {
$lang = 'en';
if ( isset($_GET['lang']) ) {
$lang = $_GET['lang'];
}
}
$url = "http://www.racebooking.net/{$lang}/{$base}";
return $url;
}
}
请注意,这只是它如何工作的一个例子。我实际上不建议将帮助器实现为静态方法,因为static is pure evil。对于您的实际实现,您可以考虑使用辅助对象而不是帮助方法。
答案 1 :(得分:0)
编写一个小型Java程序(或您最喜欢的任何其他语言),迭代所有网站文件和更改:
<a href="http://www.racebooking.net/ ...>
in
<a href="http://www.racebooking.net/<?php echo $_GET['lang'] . '/';?>
或使用jQuery并在每个页面中包含这样的函数:
$('a').click(function () {
var oldhref = $(this).attr('href');
// change href string here, e.g. insert /language/
$(this).attr('href', newhref);
});
此函数将更改页面上每个锚标记的href。
答案 2 :(得分:0)
您可以使用jquery修改客户端上的链接。所以你有一个JS函数来使用jquery在现有标签上重建url。您只需将变量发送到每页顶部的JS。我假设你在每个页面上都有某种包含功能,所以你可以在不修改每一页的情况下添加一些代码。
例如(未经测试)......
//top of page
var lang = <?php echo $lang?>; //this is the language
//this function takes a url and adds a language variable to the end
function updateurl(url) {
url = url + '?lang=' + lang;
}
//this loops through each anchor on the page and adds the language to the querystring
$( "a" ).each(function( index ) {
jquery(this).attr('href') = update(jQuery(this).attr('href'))
});
答案 3 :(得分:0)
如果您不想挑选每个链接,可以使用我的JS代码。
Javascript目前没有任何内置的输出GET值的可能性,所以你首先需要将lang-value放在一个小的HTML元素中,然后JS从中获取内容:
<div class="current-lang"><?php echo $_GET['lang']; ?></div>
如果您愿意,可以在CSS的帮助下隐藏元素。 (如示例所示。)
JS-Example: http://jsfiddle.net/leo/BH9nf/(需要jQuery)
这是很多工作,所以我希望得到积极的投票。
答案 4 :(得分:-1)
您可以尝试在会话中存储该语言,然后在您的页面上检查它,如果找不到,则可以默认为英语。
<?
start_sesssion();
$_SESSION["lang"]="en";
Other File
/*****************\
start_session();
if($_SESSION["lang"]=="en")
english();