ui2022/translate_widget.html.twig line 1

Open in your IDE?
  1. {% set translationLanguages = _args.languages|default(cms.translationLanguages) %}
  2. {% set userEffectiveLanguage = cms.userEffectiveLanguage %}
  3. {% if translationLanguages is not empty %}
  4.     {% set defaultLanguage = constant('App\\Util\\Locales::ISO6391__ENGLISH') %}
  5.     {% set defaultLanguageHumanReadable = (constant('App\\Util\\Locales::ISO6391_HUMAN_READABLE'))[defaultLanguage] %}
  6.     {% set translationLanguages  = {(defaultLanguage): defaultLanguageHumanReadable}|merge(translationLanguages) %}
  7.     {% do dom_scripts_head([
  8.         'https://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit',
  9.     ]) %}
  10.     <div class="col-auto mp__head-right">
  11.         <div id="language-switcher" class="dropdown dropdown-lang notranslate">
  12.             <a class="select-lang dropdown-toggle" href="#" role="button" data-toggle="dropdown"
  13.                aria-expanded="false">{{ translationLanguages[userEffectiveLanguage] }}</a>
  14.             <div class="dropdown-menu" aria-labelledby="select-language">
  15.                 {% for lang, name in translationLanguages %}
  16.                     <a class="dropdown-item{% if userEffectiveLanguage is same as(lang) %} d-none{% endif %}"
  17.                        href="#" data-href="{{ path('app.notifications.portal.language.set', {language: lang}) }}"
  18.                        data-lang="{{ lang }}">{{ name }}</a>
  19.                 {% endfor %}
  20.             </div>
  21.         </div>
  22.     </div>
  23.     <script type="text/javascript">
  24.         (function (window, document, $, undefined) {
  25.             $(function () {
  26.                 $('#language-switcher .dropdown-menu').on('click', 'a.dropdown-item', function (e) {
  27.                     e.preventDefault();
  28.                     var lang = $(this).attr('data-lang');
  29.                     $('#language-switcher .select-lang').text($(this).text());
  30.                     $('#language-switcher .dropdown-menu .dropdown-item').each(function (index, elem) {
  31.                         $(elem).toggleClass(
  32.                             'd-none',
  33.                             ($(elem).attr('data-lang') === lang)
  34.                         );
  35.                     });
  36.                     {% if app.user %}
  37.                     $.ajax({
  38.                         url: $(this).attr('data-href'),
  39.                         method: 'GET',
  40.                     });
  41.                     {% endif %}
  42.                     if (lang === '{{ defaultLanguage }}') {
  43.                         dismissGoogleTranslate();
  44.                         $('#language-switcher .select-lang').text('{{ defaultLanguageHumanReadable }}');
  45.                     } else {
  46.                         triggerLangChangeEvent(document.querySelector('.goog-te-combo'), 'change', lang);
  47.                     }
  48.                 });
  49.             });
  50.         })(window, document, jQuery);
  51.         function googleTranslateElementInit() {
  52.             new google.translate.TranslateElement({
  53.                 pageLanguage: '{{ defaultLanguage }}',
  54.                 includedLanguages: '{{ translationLanguages|keys|join(',') }}',
  55.                 layout: google.translate.TranslateElement.InlineLayout.simple,
  56.             }, 'google_translate_element');
  57.             // set cookie
  58.             var lang = '{{ userEffectiveLanguage }}';
  59.             var intervalId = setInterval(function(){
  60.                 if ($('.goog-te-combo').length > 0){ // Check if element has been found
  61.                     if (lang !== '{{ defaultLanguage }}' && $('.goog-te-combo').val() !== lang) {
  62.                         triggerLangChangeEvent(document.querySelector('.goog-te-combo'), 'change', lang);
  63.                     }
  64.                     clearInterval(intervalId);
  65.                 }
  66.             }, 1000);
  67.         }
  68.         // fire google change event, set cookie
  69.         function triggerLangChangeEvent(element, eventName, lang) {
  70.             $('.goog-te-combo').val(lang);
  71.             var event;
  72.             if (document.createEvent) {
  73.                 event = document.createEvent('HTMLEvents');
  74.                 event.initEvent(eventName, true, true);
  75.                 element.dispatchEvent(event);
  76.             } else {
  77.                 event = document.createEventObject();
  78.                 event.eventType = eventName;
  79.                 element.fireEvent('on' + event.eventType, event);
  80.             }
  81.         }
  82.         // back to default language
  83.         function dismissGoogleTranslate() {
  84.             // find `iframe` element with GoogleTranslate select and buttons
  85.             var iframe = document.getElementsByClassName('goog-te-banner-frame')[0]
  86.                 || document.getElementById(':1.container');
  87.             if (!iframe) return;
  88.             // search all buttons from the retrieved iframe
  89.             var innerDoc = iframe.contentDocument || iframe.contentWindow.document;
  90.             var restore_el = innerDoc.getElementsByTagName("button");
  91.             // fire `click` event on the `restore` button, that `Shows the origin`
  92.             for (var i = 0; i < restore_el.length; i++) {
  93.                 if (restore_el[i].id.indexOf("restore") >= 0) {
  94.                     restore_el[i].click();
  95.                     return;
  96.                 }
  97.             }
  98.         }
  99.     </script>
  100.     <div class="google-translate d-none" id="google_translate_element"></div>
  101.     <style>
  102.         body {
  103.             position: static !important;
  104.             top: 0 !important;
  105.         }
  106.         .skiptranslate {
  107.             display: none !important;
  108.         }
  109.     </style>
  110. {% endif %}