Я пытаюсь реализовать что то вроде мультиязычности на сайте. Принцип такой: огда пользователь заходит на сайте, поставить ему язык его браузера, при желании он может изменить язык выбрав соответсвующий язык в форме.
Проблема в том что, до клика на кнопку (отправки выбранного языка на сервер) переменная $_POST
пустая, и по этому я не могу записать его в сессию что бы сохранить язык выбранный пользователем, а после нажатия на кнопку другого языка запись в сессии не перезаписывается. Форма и ajax
запрос:
$('#multilanguage li input').click(function select_lang() {
// id инпутов это сокращение от названия языка, так я определяю какая кнопка была нажата
// смотрим какая кнопка была нажата
var lang = $(this).attr('id');
//отправляем запрос
$.ajax({
type: "POST",
url: "php/header.php",
data: {
'lang': lang
},
cache: false,
success: function(response) {
console.log(response);
},
error: function(error) {
alert('bad');
console.log(error);
}
});
});
<form method="post" action="javascript:void(null);" id="multilanguage">
<li>
<input type="button" name="lang" value="English" id="en">
</li>
<li>
<input type="button" name="lang" value="Russian" id="ru">
</li>
</form>
Вот php
:
@session_start();
//массив с языками для выбора
$lang_arr = [
"en" => array('English', 'Russian', 'Ukrainian'),
"ru" => array('Английский', 'Русский', 'Украинский')
];
//определяем язык браузера
preg_match_all('/([a-z]{1,8}(?:-[a-z]{1,8})?)(?:;q=([0-9.]+))?/', strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"]), $matches);
$langs = array_combine($matches[1], $matches[2]);
foreach ($langs as $n => $v)
$langs[$n] = $v ? $v : 1;
arsort($langs);
$default_lang = key($langs);
$default_lang = substr($default_lang, 0, 2);
//если пользователь не выбирал язык
if (!isset($_POST['lang'])) {
//проверяем совпадает ли его язык браузера с перечнем доступных языков
if(array_key_exists($default_lang, $lang_arr)) {
//если всё хорошо заносим его в сессию
$_SESSION['lang'] = $default_lang;
}else {
//если нет, то заносим в сессию английский язык
$_SESSION['lang']= 'en';
}
}
//если пользователь выбрал другой язык
if(isset($_POST['lang'])) {
//проверяем всё ли корректно
if(array_key_exists($_POST['lang'], $lang_arr)) {
//если всё хорошо заносим в сессию выбранный язык
$_SESSION['lang'] = $_POST['lang'];
}else {
//иначе ставим английский
$_SESSION['lang'] = 'en';
}
}
Суть в том что в сессию заноситься язык браузера пользователя но когда я нажимаю на другой язык в сессию ничего не перезаписывается. подскажите, как сделать так, что бы после нажатия на кнопку обновлялась страница и в сессии менялся язык?
Для начала измените немного вашу форму, чтобы язык был не как ID, а как свойство или атрибут кнопки. Например
<form id="multilanguage">
<li>
<input type="button" name="lang" value="English" data-lang="en">
</li>
<li>
<input type="button" name="lang" value="Russian" data-lang="ru">
</li>
</form>
Далее такой JS код, в консольке все работает четко
$(document).on('click', 'input[name="lang"]', function() {
var btn = $(this);
var fields = new Object();
fields.title = btn.val(); // Тайтл
fields.lang = btn.attr('data-lang'); // Код
$.ajax({
url: 'php/header.php',
type: 'POST',
data: fields,
dataType: 'json',
beforeSend: function() {
console.log('beforeSend', fields);
},
success: function(json) {
console.log('success', json);
}
});
return false;
});
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Нужно реализовать редактирование комментариев в течении 1 одной минуты на PHPПодскажите, как лучше всего это сделать
Здравствуйте , я создал путь Route::resource(); Там все прописал как положеноМне нужно, чтобы в blade по клику переходило на статью выбраную
Недавно начал заниматься темой и возник следующая проблема: есть форма и то, что в нне введено нужно записать в гуглодоки в файл схожий с вордовскимПри...