{% set translationLanguages = _args.languages|default(cms.translationLanguages) %}
{% set userEffectiveLanguage = cms.userEffectiveLanguage %}
{% if translationLanguages is not empty %}
{% set defaultLanguage = constant('App\\Util\\Locales::ISO6391__ENGLISH') %}
{% set defaultLanguageHumanReadable = (constant('App\\Util\\Locales::ISO6391_HUMAN_READABLE'))[defaultLanguage] %}
{% set translationLanguages = {(defaultLanguage): defaultLanguageHumanReadable}|merge(translationLanguages) %}
{% do dom_scripts_head([
'https://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit',
]) %}
<div class="col-auto mp__head-right">
<div id="language-switcher" class="dropdown dropdown-lang notranslate">
<a class="select-lang dropdown-toggle" href="#" role="button" data-toggle="dropdown"
aria-expanded="false">{{ translationLanguages[userEffectiveLanguage] }}</a>
<div class="dropdown-menu" aria-labelledby="select-language">
{% for lang, name in translationLanguages %}
<a class="dropdown-item{% if userEffectiveLanguage is same as(lang) %} d-none{% endif %}"
href="#" data-href="{{ path('app.notifications.portal.language.set', {language: lang}) }}"
data-lang="{{ lang }}">{{ name }}</a>
{% endfor %}
</div>
</div>
</div>
<script type="text/javascript">
(function (window, document, $, undefined) {
$(function () {
$('#language-switcher .dropdown-menu').on('click', 'a.dropdown-item', function (e) {
e.preventDefault();
var lang = $(this).attr('data-lang');
$('#language-switcher .select-lang').text($(this).text());
$('#language-switcher .dropdown-menu .dropdown-item').each(function (index, elem) {
$(elem).toggleClass(
'd-none',
($(elem).attr('data-lang') === lang)
);
});
{% if app.user %}
$.ajax({
url: $(this).attr('data-href'),
method: 'GET',
});
{% endif %}
if (lang === '{{ defaultLanguage }}') {
dismissGoogleTranslate();
$('#language-switcher .select-lang').text('{{ defaultLanguageHumanReadable }}');
} else {
triggerLangChangeEvent(document.querySelector('.goog-te-combo'), 'change', lang);
}
});
});
})(window, document, jQuery);
function googleTranslateElementInit() {
new google.translate.TranslateElement({
pageLanguage: '{{ defaultLanguage }}',
includedLanguages: '{{ translationLanguages|keys|join(',') }}',
layout: google.translate.TranslateElement.InlineLayout.simple,
}, 'google_translate_element');
// set cookie
var lang = '{{ userEffectiveLanguage }}';
var intervalId = setInterval(function(){
if ($('.goog-te-combo').length > 0){ // Check if element has been found
if (lang !== '{{ defaultLanguage }}' && $('.goog-te-combo').val() !== lang) {
triggerLangChangeEvent(document.querySelector('.goog-te-combo'), 'change', lang);
}
clearInterval(intervalId);
}
}, 1000);
}
// fire google change event, set cookie
function triggerLangChangeEvent(element, eventName, lang) {
$('.goog-te-combo').val(lang);
var event;
if (document.createEvent) {
event = document.createEvent('HTMLEvents');
event.initEvent(eventName, true, true);
element.dispatchEvent(event);
} else {
event = document.createEventObject();
event.eventType = eventName;
element.fireEvent('on' + event.eventType, event);
}
}
// back to default language
function dismissGoogleTranslate() {
// find `iframe` element with GoogleTranslate select and buttons
var iframe = document.getElementsByClassName('goog-te-banner-frame')[0]
|| document.getElementById(':1.container');
if (!iframe) return;
// search all buttons from the retrieved iframe
var innerDoc = iframe.contentDocument || iframe.contentWindow.document;
var restore_el = innerDoc.getElementsByTagName("button");
// fire `click` event on the `restore` button, that `Shows the origin`
for (var i = 0; i < restore_el.length; i++) {
if (restore_el[i].id.indexOf("restore") >= 0) {
restore_el[i].click();
return;
}
}
}
</script>
<div class="google-translate d-none" id="google_translate_element"></div>
<style>
body {
position: static !important;
top: 0 !important;
}
.skiptranslate {
display: none !important;
}
</style>
{% endif %}