我有一个多语言网站,人们通过链接带来一个url后缀(例如/ lang / en)或没有后缀(只是页面网址)。
现在我想创建一个带有链接的语言切换功能(带有一个触发javascript的类)。
我的链接类例如是“英语”,在JS中我首先需要检查在我追加它之前是否已经没有语言后缀。
这就是我现在所拥有的(来自另一个主题):
<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;
});
注意我希望实现的是我网站每个页面上的两个链接,它们将包含基本页面网址
lang/en
或
lang/nl
后缀给他们。点击后,这些链接将加载相同的页面,但在网址中加上语言后缀,我的语言插件会选择当前的语言。
答案 0 :(得分: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');
});
答案 1 :(得分: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;
});
答案 2 :(得分:0)
不知何故上述javascript都没有为我工作,我不知道我做错了什么但是我决定诉诸php因为我明白了更好。我在wordpress网站上使用它,我想出了以下代码(在theme 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()来获取页面网址,因为它会以某种方式返回一个随机网址。第一个总是工作,并且使用str_replace我首先替换语言添加(如果它们存在(str_replace不需要if语句,它总是在替换之前检查它是否存在)
希望这有助于其他人,仍然想知道为什么javascript对我不起作用!