У меня была такая же проблема несколько дней назад, и я нашел решение, которое работает. У меня есть сайт на испанском языке, и пока мы не переведем его на английский, мы предлагаем нашим пользователям возможность использовать Google Website Translator. Когда пользователи нажимают на флаге на английском языке, он открывает модал Twitter Bootstrap, сообщающий пользователю, что веб-сайт еще не переведен, и есть кнопка, которую можно нажать, чтобы вызвать перевод. Я фиксирую событие с помощью JavaScript, устанавливаю cookie «googtrans» со значением «/ es / en» и перезагружаю страницу. Скрипт Google делает все остальное. После перезагрузки я проверяю, существует ли файл cookie, и меняю английский флаг на испанский. Когда пользователь нажимает на него, я устанавливаю cookie на '' (пустая строка) и перезагружаю страницу.
Для простоты я не буду включать модальную часть Bootstrap.
Html
<!DOCTYPE html>
<html>
<head>
(...)
<meta name="google-translate-customization" content="(YOUR_TRANSLATE_CUSTOMIZATION_ID)" />
(...)
</head>
<body>
(...)
<a id="lang-change-en" class="lang-change" href="javascript:void(0);">
<img src="images/en-flag.png" alt="English Flag">
</a>
(...)
<script src="js/script.js"></script>
<script src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>
</body>
</html>
Javascript (script.js)
function setCookie(cname, cvalue, exdays) {
var expires;
if (exdays === 0) {
expires = '';
} else {
var d = new Date();
d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
expires = "expires=" + d.toGMTString();
}
var domain = (typeof domain === "undefined") ? '' : "; domain="+domain;
document.cookie = cname + "=" + cvalue + "; " + expires + "path=" + path + domain;
}
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i].trim();
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return "";
}
//Google provides this function
function googleTranslateElementInit() {
new google.translate.TranslateElement({
pageLanguage: 'es',
includedLanguages: 'en',
layout: google.translate.TranslateElement.InlineLayout.SIMPLE,
autoDisplay: false
},'google_translate_element');
}
//Using jQuery
$(document).ready(function() {
$(document).on('click','#lang-change-en', function() {
setCookie('googtrans', '/es/en', 0, '.viajoasalta.com');
setCookie('googtrans', '', 0, '/');
location.reload();
});
$(document).on('click', '#lang-change-es', function() {
setCookie('googtrans', '', 0, '/', '.viajoasalta.com');
setCookie('googtrans', '', 0, '/');
location.reload();
});
var googTrans = getCookie('googtrans');
if (googTrans === '/es/en') {
var src = $('#lang-change-en > img').attr('src').replace('en-flag', 'es-flag');
$('#lang-change-en > img').attr('src', src);
$('#lang-change-en').attr('id', 'lang-change-es');
}
});
В мастере настройки «Переводчик веб-сайтов» вы можете выбрать языки, которые вы хотите отобразить в списке. Тогда у вас может быть свой собственный <select>
, где каждый <option>
имеет в качестве value
значение файла cookie, который он должен иметь, или обычный список с флагами с чем-то вроде data-cookie="value"
. Затем с помощью JavaScript вы фиксируете событие 'change' (для выбора) или событие 'click' для списка и соответственно устанавливаете cookie.
Примечание. Я намеренно удалил div, в котором переводчик веб-сайта отображается:
<div id="google_translate_element"></div>
Чтобы увидеть, как это работает, вы можете посетить www.viajoasalta.com ; по крайней мере, пока мы наконец не переведем это.