Запустить функцию на основе.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 ответ

Исходя из кода выше пара мыслей:

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) мы, вероятно, хотим переместить логику, которая проверяет локальность внутри функции ready. Т.е.

$(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

Пара причин:

а) мы хотим изменить содержимое страницы на основе информации, такой как путь / местность. Итак, мы хотим знать, что страница загружается первой.

б) возможно, мы захотим создать функцию, которая будет обрабатывать / изменять язык и вызывать ее из разных мест. Мы хотим эту функцию в рамках нашей логики проверки локальности. Если мы определим это внутри готовой области действия функции, нам понадобится любая логика, которая вызывает эту функцию также внутри той же области действия.

Другие вопросы по тегам