如何使用javascript更改网址中的语言代码

时间:2017-02-11 13:03:21

标签: javascript

我正在开发一个使用两种语言的网站,我需要更改网址以包含所选网址 我真正需要的是

1-选择当前网址

2-检查它是否包含任何语言代码

3-如果代码不存在则附加代码或将代码更改为所选代码(如果存在)

例如:

http://localhost:11767/Home/resultMain?model=1&&type=1

以上链接适用于英语,因为它是默认语言,当用户点击es语言时,它应该是

http://localhost:11767/es/Home/resultMain?model=1&&type=1

3 个答案:

答案 0 :(得分:1)

您可以借助a元素解析URL,然后替换所需的部分并重新构建URL:

function addReplaceLangCode(url, langCode) {
  var a = document.createElement('a');
  a.href = document.getElementById('url').value; // or document.location.href;

  var paths = a.pathname.split('/');
  paths.shift();

  if(paths[0].length == 2) {
    paths[0] = langCode;
  }else{
    paths.unshift(langCode);
  }
  return a.protocol + '//' +
    a.host + '/' + paths.join('/') + 
    (a.search != '' ?  a.search : '') + 
    (a.hash != '' ?  a.hash : '');
}
    
function onClickReplace() {
    document.getElementById('result').innerHTML = addReplaceLangCode( document.location.href, 'es');
}
URL : <input type="text" id="url" style="width:400px" value="http://localhost:11767/Home/resultMain?model=1&&type=1"><input type="button" value="Replace" onclick="onClickReplace()"><br />
Result: <span id="result"></span>

答案 1 :(得分:0)

我不知道是不是这个,你想要什么。但JavaScript可以使用对象“位置”获取URL。特别是location.pathname对您有用。您可以在location.pathname上应用reg-exp来检查网址是否包含/es/,如果是,则将网站通过适当的Ajax请求翻译到您的后端。

但通常我建议使用你后端的路由。我认为最好的解决方案 - 使用http标头通知服务器首选语言。

  

https://www.w3.org/International/questions/qa-accept-lang-locales

答案 2 :(得分:0)

基于@Bulnet Vural上面的回答,我编写了以下代码,因为我需要切换进出网址的语言路径。

var getOtherLanguageLocation = function (currentUrl, languagePath) {
    // based on https://stackoverflow.com/a/42176588/1378980
    var anchorTag = document.createElement('a');
    anchorTag.href = currentUrl;
    var paths = anchorTag.pathname.split("/");

    // remove all the empty items so we don't get double slash when joining later.
    var paths = paths.filter(function (e) { return e !== '' })

    // the language will be at index 1 of the paths
    if (paths.length > 0 && paths[0].toLowerCase() == languagePath) {
        // remove the language prefix
        paths.splice(0, 1);
    } else {
        // add the language prefix
        paths.unshift(languagePath);
    }

    return anchorTag.protocol + '//' +
      anchorTag.host + '/' + paths.join('/') +
      anchorTag.search + anchorTag.hash;
};