Запустить функцию на основе.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
Пара причин:
а) мы хотим изменить содержимое страницы на основе информации, такой как путь / местность. Итак, мы хотим знать, что страница загружается первой.
б) возможно, мы захотим создать функцию, которая будет обрабатывать / изменять язык и вызывать ее из разных мест. Мы хотим эту функцию в рамках нашей логики проверки локальности. Если мы определим это внутри готовой области действия функции, нам понадобится любая логика, которая вызывает эту функцию также внутри той же области действия.