2

我有一个多语言网站,人们通过带有 url 后缀(例如 /lang/en)或没有后缀(只是页面 url)的链接进入。

现在我想用一个链接创建语言切换功能(用一个类来触发 javascript)。

例如,我的链接类将是“英语”,在 JS 中,我首先需要检查 URL 是否没有语言后缀,然后再附加它。

这是我现在所拥有的(来自另一个线程):

<a class="english" href="">English</a>
<script>

$('.datalink').attr('href', function() {
return this.href + '/lang/en';

});

</script>

这添加了后缀,但不检查它是否已经存在,我如何检查它是否已经存在而不附加它?或将其更改为另一种语言(/lang/nl)?

更新

其实我的课不在href上,而是在<li>它周围,它看起来像:

<li class="english"><a title="English">English</a></li>

所以现在我有

$('.english >a').attr('href', function() { 
  var suffix = this.href.match(/lang\/en\/?$/i) ? "" : "/lang/en"; 
  return this.href + suffix; 
}); 

注意我想要实现的是我网站每个页面上的两个链接,它们将由基本页面 url 和

lang/en 

或者

lang/nl

他们的后缀。当单击这些链接时,将加载相同的页面,但 url 中带有语言后缀,我的语言插件将选择该语言。

4

3 回答 3

0

不知何故,以上 javascript 都不适合我,我不知道我做错了什么,但最终我决定求助于 php,因为我理解得更好。我在 wordpress 网站上使用它,我想出了以下代码(在主题 functions.php 中)对我有用:

// add languages to menu
add_filter('wp_nav_menu_items','add_langs', 10, 2);

function add_langs($items, $args) 
{

    if( $args->theme_location == 'primary-menu')

$current_url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] .     $_SERVER['REQUEST_URI'];
$href = str_replace(array('/lang/en','/lang/nl'),'',$current_url);

    $english = '<li class="english"><a href="'.$href.'/lang/en">EN</a></li>';
    $nederlands = '<li class="nederlands"><a href="'.$href.'/lang/nl">NL</a></li>';
    return $items . $english . $nederlands ;

}

这会找到我的名为“primary-menu”的菜单,并在此菜单中添加两个项目,包括 $english 和 $nederlands 链接。

我不得不使用 $_server['HTTP_HOST'] 而不是 get_permalink() 获取页面 url,因为它以某种方式返回了一个随机 url。第一个始终有效,并且使用 str_replace 我首先替换语言添加(如果存在)(str_replace 不需要 if 语句,它总是在替换之前检查它是否存在)

希望这对其他人有所帮助,仍然想知道为什么 javascript 对我不起作用!

于 2013-05-19T08:25:05.733 回答
0

如果它是一个总是以 /lang 开头的后缀,试试这个

现场演示

$('.english a').each(function() {
    $(this).attr('href', this.href.split("/lang")[0] + '/lang/en');
});

或者如果你想保留一个

$('.english a').each(function() {
  var href = this.href;
  var pos = href.indexOf("/lang/");
  if (pos == -1) $(this).attr('href', href.substring(0,pos)+'/lang/en');
});
于 2013-05-12T08:00:40.940 回答
0

您可以使用正则表达式来检查 URL 是否包含后缀:

if (this.href.match(/lang\/en\/?$/i)) {
    /* CONTAINS THE SUFFIX */
} else {
    /* DOESN'T CONTAIN IT */
}

我可能会这样做的方式如下:

$('.datalink').attr('href', function() {
    // suffix is blank if the URL already contains the language portion
    var suffix = this.href.match(/lang\/en\/?$/i) ? "" : "/lang/en";
    return this.href + suffix;
});
于 2013-05-12T08:09:15.300 回答