Skip to content

Commit 9f31605

Browse files
authored
Update GTranslator.php
Improved performance and only include selected languages.
1 parent eb429cd commit 9f31605

File tree

1 file changed

+55
-13
lines changed

1 file changed

+55
-13
lines changed

src/GTranslator.php

Lines changed: 55 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,15 @@ public function addLanguage($key, $value){
186186
return $this;
187187
}
188188

189+
/**
190+
* get default languages
191+
* @return string en,us,etc
192+
*/
193+
public function getLanguageKeys(){
194+
$jsKeys = array_keys($this->languages);
195+
return implode(',', $jsKeys);
196+
}
197+
189198
/**
190199
* Sets google element id name
191200
* @param string $ele
@@ -328,8 +337,8 @@ private function selectorBootstrap(){
328337
$this->setLinkClass("dropdown-item");
329338
$html = '<div class="language-selector">';
330339
$html .= '<div class="dropdown notranslate">';
331-
$html .= '<button class="btn btn-outline-gold dropdown-toggle" type="button" id="php-g-translator" data-' . $this->getBootstrapAttr() . 'toggle="dropdown" aria-expanded="false">';
332-
$html .= '<img alt="' . $this->siteLang . '" src="' . $this->iconPath . $this->siteLang . $this->iconType . '"> ' . $this->languages[$this->siteLang];
340+
$html .= '<button class="btn btn-outline-light btn-sm dropdown-toggle" type="button" id="php-g-translator" data-' . $this->getBootstrapAttr() . 'toggle="dropdown" aria-expanded="false">';
341+
$html .= '<img alt="' . $this->siteLang . '" src="' . $this->iconPath . $this->siteLang . $this->iconType . '"> ' . ($this->languages[$this->siteLang]??$this->siteLang);
333342
$html .= '</button>';
334343
$html .= ' <ul id="php-gt-languages" class="dropdown-menu" aria-labelledby="php-g-translator">';
335344
$html .= $this->buildLinks(true);
@@ -385,7 +394,7 @@ public function load(){
385394
*/
386395

387396
public function addScript(){
388-
$JSScript = "<script>var GTranslator = GTranslator || {
397+
$JSScript = "<script id='php-g-translator-plugin'>var GTranslator = GTranslator || {
389398
siteLang: \"{$this->siteLang}\",
390399
googleElement: \"{$this->element}\",
391400
OPTION_ACTIVE: false,
@@ -429,15 +438,27 @@ public function addScript(){
429438
},
430439
431440
GoogleInit: function() {
432-
new google.translate.TranslateElement({pageLanguage: \"{$this->siteLang}\", autoDisplay: false}, GTranslator.googleElement);
441+
var langKeys = Object.keys(GTranslator.Languages);
442+
new google.translate.TranslateElement({
443+
pageLanguage: \"{$this->siteLang}\",
444+
includedLanguages: '\"' + langKeys.join(',') + '\"',
445+
layout: google.translate.TranslateElement.InlineLayout.VERTICAL,
446+
autoDisplay: false,
447+
additionalOption: {
448+
disableAutoTranslation: true,
449+
disablePoweredBy: true
450+
}
451+
}, GTranslator.googleElement);
433452
},
434453
435454
GoogleScript: function(){
436-
var s1=document.createElement('script');
437-
s1.async=true;
455+
var s1 = document.createElement('script');
456+
s1.async = true;
457+
s1.defer = true;
438458
s1.type = 'text/javascript';
439459
s1.src='https://translate.google.com/translate_a/element.js?cb=GTranslator.GoogleInit';
440-
var s0 = document.getElementsByTagName('script')[0];
460+
/*var s0 = document.getElementsByTagName('script')[0];*/
461+
var s0 = document.getElementById('php-g-translator-plugin');
441462
s0.parentNode.insertBefore(s1, s0);
442463
},
443464
@@ -446,7 +467,8 @@ public function addScript(){
446467
if (GTranslator.Current() == null && lang == from){
447468
return;
448469
}
449-
localStorage.setItem('siteLang', to);localStorage.setItem('changeLang', 1);
470+
localStorage.setItem('siteLang', to);
471+
localStorage.setItem('changeLang', 1);
450472
var teCombo;
451473
var sel = document.getElementsByTagName('select');
452474
for (var i = 0; i < sel.length; i++){
@@ -570,7 +592,7 @@ public function addScript(){
570592
}
571593
});
572594
}
573-
}
595+
}
574596
};";
575597
}else if($this->provider == self::BOOTSTRAP){
576598
$JSScript .= "
@@ -609,8 +631,10 @@ public function addScript(){
609631

610632
$JSScript .= "
611633
(function(){
612-
GTranslator.Init();
613-
document.body.classList.add('php-google-translator');
634+
window.onload = function() {
635+
GTranslator.Init();
636+
document.body.classList.add('php-google-translator');
637+
};
614638
})();
615639
</script>";
616640
return $JSScript;
@@ -622,13 +646,31 @@ public function addScript(){
622646
* @return string|html|css $styleSheet
623647
*/
624648
private function addCss(){
625-
$styleSheet = " <style> body{top:0 !important} .skiptranslate, #{$this->element}, #goog-gt-tt{display:none !important} .goog-te-banner-frame{display:none !important} .goog-te-menu-value:hover{text-decoration:none !important} .goog-text-highlight{background-color:transparent !important;box-shadow:none !important} #php-g-translator img{height:16px;width:16px}";
649+
$styleSheet = " <style>body.php-google-translator{top:0 !important}.skiptranslate, #{$this->element}, #goog-gt-tt, .goog-te-banner-frame{display:none !important}#php-g-translator img{height:16px;width:16px}";
626650
if($this->provider == self::DEFAULT){
627-
$styleSheet .= ".open-language-selector, .g-custom-js{display: inline-block;width:16px;height:16px;}.g-translator-custom:not(.g-custom-js){position: relative} .g-translator-custom .toggle-translator{font-family:Arial;font-size:10pt;text-align:left;cursor:pointer;overflow:hidden;width:{$this->selectWidth};line-height:17px;position: absolute;right: 0;list-style-type: none;padding-left: 0px} .g-translator-custom a{text-decoration:none;display:block;font-size:10pt;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box} .g-translator-custom a img{vertical-align:middle;display:inline;border:0;padding:0;margin:0;opacity:0.8} .g-translator-custom a:hover img{opacity:1} .g-translator-custom .toggle-languages{background-color:#FFFFFF; position:relative; z-index:9999; cursor: pointer} .g-translator-custom .toggle-languages a{border:1px solid #CCCCCC;color:#666666;padding:3px 5px} .g-translator-custom .toggle-cert{background-image: url(\"data:image/svg+xml,%3Csvg class='caret-down' width='12' height='8' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11 1.5l-5 5-5-5' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' stroke='%23000'%3E%3C/path%3E%3C/svg%3E\");background-repeat: no-repeat;background-position: center;padding:3px 5px;width: 12px;position: absolute;right: 0px;top: 0px;bottom: 0px;height: 22px} .g-translator-custom .toggle-languages .open .toggle-cert{-moz-transform: scaleY(-1);-o-transform: scaleY(-1);-webkit-transform: scaleY(-1);transform: scaleY(-1)} .g-translator-custom .language-options{position:relative;border:1px solid #CCCCCC;background-color:#EEEEEE;display:none;width:auto;max-height:300px;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;overflow-y:auto;overflow-x:hidden;z-index: 100;list-style-type: none;padding-left: 0px} .g-translator-custom .language-options li{list-style-type: none} .g-translator-custom .language-options a{background:#eee;color:#000;padding:5px 8px} .g-translator-custom .language-options a:hover{background:#FFC} .g-translator-custom .language-options::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 3px rgba(0,0,0,0.3);border-radius:5px;background-color:#F5F5F5} .g-translator-custom .language-options::-webkit-scrollbar{width:5px} .g-translator-custom .language-options::-webkit-scrollbar-thumb{border-radius:5px;-webkit-box-shadow: inset 0 0 3px rgba(0,0,0,.3);background-color:#888} .g-translator-custom #php-g-translator img{margin-right:2px} ";
651+
$styleSheet .= ".open-language-selector, .g-custom-js{display: inline-block;width:16px;height:16px;}
652+
.g-translator-custom:not(.g-custom-js){position: relative}
653+
.g-translator-custom .toggle-translator{font-family:Arial;font-size:10pt;text-align:left;cursor:pointer;overflow:hidden;width:{$this->selectWidth};line-height:17px;position: absolute;right: 0;list-style-type: none;padding-left: 0px}
654+
.g-translator-custom a{text-decoration:none;display:block;font-size:10pt;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}
655+
.g-translator-custom a img{vertical-align:middle;display:inline;border:0;padding:0;margin:0;opacity:0.8}
656+
.g-translator-custom a:hover img{opacity:1}
657+
.g-translator-custom .toggle-languages{background-color:#FFFFFF; position:relative; z-index:9999; cursor: pointer}
658+
.g-translator-custom .toggle-languages a{border:1px solid #CCCCCC;color:#666666;padding:3px 5px}
659+
.g-translator-custom .toggle-cert{background-image: url(\"data:image/svg+xml,%3Csvg class='caret-down' width='12' height='8' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11 1.5l-5 5-5-5' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' stroke='%23000'%3E%3C/path%3E%3C/svg%3E\");background-repeat: no-repeat;background-position: center;padding:3px 5px;width: 12px;position: absolute;right: 0px;top: 0px;bottom: 0px;height: 22px}
660+
.g-translator-custom .toggle-languages .open .toggle-cert{-moz-transform: scaleY(-1);-o-transform: scaleY(-1);-webkit-transform: scaleY(-1);transform: scaleY(-1)} .g-translator-custom .language-options{position:relative;border:1px solid #CCCCCC;background-color:#EEEEEE;display:none;width:auto;max-height:300px;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;overflow-y:auto;overflow-x:hidden;z-index: 100;list-style-type: none;padding-left: 0px}
661+
.g-translator-custom .language-options li{list-style-type: none} .g-translator-custom .language-options a{background:#eee;color:#000;padding:5px 8px} .g-translator-custom .language-options a:hover{background:#FFC} .g-translator-custom .language-options::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 3px rgba(0,0,0,0.3);border-radius:5px;background-color:#F5F5F5}
662+
.g-translator-custom .language-options::-webkit-scrollbar{width:5px}
663+
.g-translator-custom .language-options::-webkit-scrollbar-thumb{border-radius:5px;-webkit-box-shadow: inset 0 0 3px rgba(0,0,0,.3);background-color:#888}
664+
.g-translator-custom #php-g-translator img{margin-right:2px}";
628665
}
629666
if($this->provider == self::SELECT){
630667
$styleSheet .= ".select-language-item{padding: 6px 12px;}";
631668
}
669+
670+
if($this->provider == self::BOOTSTRAP){
671+
$styleSheet .= ".dropdown-menu{max-height: 300px;overflow: auto;}";
672+
}
673+
632674
$styleSheet .= "</style>";
633675
return $styleSheet;
634676
}

0 commit comments

Comments
 (0)