首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >聪明的方式添加语言到所有的网站网址?

问聪明的方式添加语言到所有的网站网址?
EN

Stack Overflow用户
提问于 2013-12-07 20:32:22
回答 5查看 3.6K关注 0票数 1

在今年,我写了一个非常大的网站,没有CMS。我白手起家写的。今天,我开始实施一个翻译系统。

这个想法基本上是在URL中添加/language/。这意味着,当我在默认语言上浏览时,索引页是否具有url

代码语言:javascript
复制
http://www.racebooking.net/index.php

一旦用户单击英文标志以查看网站的英文版本,URL将变成

代码语言:javascript
复制
http://www.racebooking.net/en/index.php

在.htaccess中,我有一个将/en/转换为?lang=en的规则。

问题

每个页面都有大量的链接,这意味着我的网站上有成千上万的<a href=".."></a>标签。

例如,在我的index.php页面上,我有一个类似于此的链接

代码语言:javascript
复制
<a href="http://www.racebooking.net/forum">Forum</a>

如果我正在浏览英文版本,应该指向

代码语言:javascript
复制
http://www.racebooking.net/en/forum

乍一看,这个想法是把它改成

代码语言:javascript
复制
<a href="http://www.racebooking.net/<?php echo $_GET['lang'] . '/';?>forum">Forum</a>

效果很好!但是,问题是我的网站上有成千上万的<a>标签!改变它们都是完全疯狂的,因为在它们中添加了<?php echo $_GET['lang'] . '/';?>!这需要一天又一天的工作。

那么,是否有一种聪明的方式将/language/添加到我所有的网站URLS中?

编辑

我宁愿不使用任何js。所有禁用js的用户在浏览我的网站时都会遇到问题!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-12-07 20:43:57

HTTP永久重定向状态代码(301)完全适合你的情况。所有链接到您的网站将仍然工作,此外,任何书签将更新到您的新网址路径构造。

您可以使用mod_rewrite在Apache中设置它:

代码语言:javascript
复制
RewriteRule /(?!en|es|de|fr|it)(/?.*)$ http://www.mydomain.com/en/$1 [R=301,L]

这将重定向每个url路径,它不以en、es、de、fr、it开始到en (默认)子路径。

编辑评论:

上面的解决方案将使您的所有链接(旧的和新的)都能工作。

如果您还想更改页面上的所有链接,以便搜索引擎能够看到它们,那么您唯一的选择是在PHP/HTML代码中重写它们(为此使用JavaScript是个坏主意,原因很多)。

在这种情况下,最好的选择是编写一个助手函数,它根据当前语言为您生成链接。这样你将有一个单一的点,在那里你可以改变你的链接,如果他们再次改变在未来。

不幸的是,你不能一次改变你所有的链接。如果你有成千上万的,没有共同的代码来生成所有的,那么你必须一个一个地去做。好消息是,您并不是第一个遇到这个问题的人,专业IDE的开发人员已经实现了帮助您的工具。我个人选择的是一个商业软件,但其他开源IDE也有相当好的查找/替换选项。例如,您可以编写一个regex,它将找到您的链接并按照您提供的规则相应地替换它们。编写一个好的regex替换程序可能被证明是非常有益的,而不是一个一个地检查所有的链接。

这是url助手可能的实现之一:

代码语言:javascript
复制
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;
    }
}

现在,您必须找到输出链接的所有地方,并使用助手:

代码语言:javascript
复制
<a href="<?php echo UrlHelper::make('/old/url'); ?>">Link</a>

请注意,这只是它如何工作的一个例子。实际上,我不建议将助手实现为静态方法,因为静态是纯粹的邪恶。对于真正的实现,您可以考虑使用帮助器对象而不是帮助器方法。

票数 4
EN

Stack Overflow用户

发布于 2013-12-07 20:42:11

编写一个小型Java程序(或您最喜欢的任何其他语言),对所有网站文件和更改进行迭代:

代码语言:javascript
复制
<a href="http://www.racebooking.net/ ...>

在……里面

代码语言:javascript
复制
<a href="http://www.racebooking.net/<?php echo $_GET['lang'] . '/';?>

或者使用jQuery并在每个页面中包含这样的函数:

代码语言:javascript
复制
$('a').click(function () {
     var oldhref = $(this).attr('href');
     // change href string here, e.g. insert /language/
     $(this).attr('href', newhref);
});

此函数将更改页面上每个锚标记的href。

票数 0
EN

Stack Overflow用户

发布于 2013-12-07 20:49:50

请注意,这仅仅是一个idea...someone可以改进这个答案:

您可以使用jquery修改客户端的链接。因此,您将有一个JS函数来使用jquery在现有标记上重建urls。您只需将变量发送到每个页面顶部的JS。我假设您在每个页面上都有某种包含函数,所以在不修改每个页面的情况下添加一些代码。

(没有测试)..。

代码语言:javascript
复制
//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'))
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20446273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档