Запустить функцию на основе .pathname - PullRequest
0 голосов
/ 02 июля 2018

Итак, у меня есть этот код на моей странице: очень простой, но работающий скрипт для перевода его на несколько языков.

// 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 голосов
/ 02 июля 2018

На основе приведенного выше кода пара мыслей:

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

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

Пара причин:

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

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

...