基于.pathname运行函数

时间:2018-07-01 23:29:52

标签: javascript function pathname

所以我的页面上有这段代码:一个非常简单但有效的脚本,可以将其翻译成多种语言。

// preparing language file
var aLangKeys=new Array();
aLangKeys['en']=new Array();
aLangKeys['es']=new Array();
aLangKeys['fr']=new Array();
aLangKeys['cn']=new Array();

aLangKeys['en']['language']='english';
aLangKeys['es']['language']='español';
aLangKeys['fr']['language']='français';
aLangKeys['cn']['language']='中文';

aLangKeys['en']['buy']='buy';
aLangKeys['es']['buy']='comprar';
aLangKeys['fr']['buy']='acheter';
aLangKeys['cn']['buy']='买';

$(document).ready(function() {

    // onclick behavior
    $('.language').click(function() {
        var lang = $(this).attr('id'); // obtain language id

        if ($(this).attr('id') == 'es') {
          $('.language').attr('id', 'fr');
        }

        else if ($(this).attr('id') == 'fr') {
          $('.language').attr('id', 'cn');
        }

        else if ($(this).attr('id') == 'cn') {
          $('.language').attr('id', 'en');
        }

        else if ($(this).attr('id') == 'en') {
          $('.language').attr('id', 'es');
        }

        // translate all translatable elements
        $('.translate').each(function(i){
          $(this).html(aLangKeys[lang][ $(this).attr('key') ]);
        });

    } );

});



// HERE'S WHERE MY BRAIN STARTS MALFUNCTIONING

if ((window.location.pathname).split('/')[1] == 'es') {
    // <-- EXECUTE FUNCTION ABOVE TO TRANSLATE TO SPANISH BASED ON PATHNAME
}

else if ((window.location.pathname).split('/')[1] == 'fr') {
    // <-- EXECUTE FUNCTION ABOVE TO TRANSLATE TO FRENCH BASED ON PATHNAME
}

else {
}

因此,单击按钮时,它基本上可以翻译(更改页面上某些元素的值)。每次单击它,都会切换到下一种语言。很好。

问题是,如果用户从某个链接访问,我希望将它“自动”更改为某种语言:

示例:

  • www.mysite.com(什么都没有发生,因为路径名上没有任何内容)
  • www.mysite.com/es/(“自动将值更改为西班牙语”)
  • www.mysite.com/fr/(“将值自动更改为法语”)

我尝试用javascript“伪造”按钮单击,但没有用。 还尝试了“命名”翻译功能并“调用/运行”它。

我知道这样做比较容易,而且使事情变得复杂,但我真是个菜鸟。

请帮忙。或只是一个提示。在此先感谢您,我的英语很抱歉。

1 个答案:

答案 0 :(得分:1)

基于以上几点思考的代码:

1)允许将aLangKeys更改为一个对象,而每个键都是另一个对象。 即

var aLangKeys={};
aLangKeys['en']={}; // Thats a named key/prop so we want an object here
...
aLangKeys['en']['language']='english'; // ditto the above comment

2)我们可能希望将准备好功能的检查逻辑移到内部 中。 即

$(document).ready(function() {
    // onclick behavior
    $('.language').click(function() {
       ...
    });

    // we want access to the DOM *and* maybe certain functions that do stuff. So its gotta be in here...
    if ((window.location.pathname).split('/')[1] == 'es') {
        // <-- EXECUTE FUNCTION ABOVE TO TRANSLATE TO SPANISH BASED ON PATHNAME
    }
    else if ((window.location.pathname).split('/')[1] == 'fr') {
        // <-- EXECUTE FUNCTION ABOVE TO TRANSLATE TO FRENCH BASED ON PATHNAME
    }
}); // end of ready function

耦合原因:

a)我们要根据路径名/位置等信息来更改页面内容。所以我们想知道页面首先被加载。

b)也许我们会想要创建一个进行语言处理/更改并从多个地方调用的函数。我们希望该功能在我们的位置检查逻辑的范围内。如果我们在ready函数作用域内定义该函数,则将需要在同一作用域内也调用该函数的任何逻辑