feat(i18n): kustomisasi pilihan bahasa tambahan dan sembunyikan topbar google translate

This commit is contained in:
Mas Budi Kusuma
2026-09-15 23:42:39 +07:00
parent 7ba6d951bf
commit 9dd84e2c23
3 changed files with 120 additions and 110 deletions
+44 -15
View File
@@ -22,7 +22,7 @@
</a>
</div>
<!-- Area Navigasi & Bilingual -->
<!-- Area Navigasi & Bahasa -->
<div class="header-nav-wrap">
<nav class="main-navigation" id="site-navigation">
<?php
@@ -36,12 +36,27 @@
?>
</nav>
<!-- BILINGUAL SWITCHER (ID | EN) -->
<?php if ( get_option( 'edukarsa_tampil_bilingual', 1 ) == 1 ) : ?>
<!-- MULTI-LANGUAGE SWITCHER DINAMIS -->
<?php
if ( get_option( 'edukarsa_tampil_bilingual', 1 ) == 1 ) :
$available_langs = array( 'id' => 'ID' );
if ( get_option( 'edukarsa_lang_en', 1 ) == 1 ) $available_langs['en'] = 'EN';
if ( get_option( 'edukarsa_lang_ar', 0 ) == 1 ) $available_langs['ar'] = 'AR';
if ( get_option( 'edukarsa_lang_zh', 0 ) == 1 ) $available_langs['zh-CN'] = 'ZH';
if ( get_option( 'edukarsa_lang_ja', 0 ) == 1 ) $available_langs['ja'] = 'JA';
$incl_codes = implode( ',', array_keys( $available_langs ) );
?>
<div class="edukarsa-lang-switcher" id="lang-switcher">
<button type="button" class="lang-btn active" data-lang="id" title="Bahasa Indonesia">ID</button>
<span class="lang-divider">|</span>
<button type="button" class="lang-btn" data-lang="en" title="English">EN</button>
<?php
$total = count( $available_langs );
$idx = 0;
foreach ( $available_langs as $code => $label ) :
$idx++;
?>
<button type="button" class="lang-btn" data-lang="<?php echo esc_attr( $code ); ?>"><?php echo esc_html( $label ); ?></button>
<?php if ( $idx < $total ) : ?><span class="lang-divider">|</span><?php endif; ?>
<?php endforeach; ?>
</div>
<div id="google_translate_element" style="display:none;"></div>
<?php endif; ?>
@@ -58,37 +73,39 @@
</header>
<?php if ( get_option( 'edukarsa_tampil_bilingual', 1 ) == 1 ) : ?>
<!-- SKRIP NATIVE TRANSLATE CONTROLLER -->
<!-- SKRIP TRANSLASI NATIVE & PEMBERSIH TOOLBAR GOOGLE -->
<script type="text/javascript">
function googleTranslateElementInit() {
new google.translate.TranslateElement({
pageLanguage: 'id',
includedLanguages: 'en,id',
includedLanguages: '<?php echo esc_js( $incl_codes ); ?>',
autoDisplay: false
}, 'google_translate_element');
}
function changeLanguage(lang) {
var host = window.location.hostname;
var cookieVal = '/id/' + lang;
if (lang === 'id') {
document.cookie = "googtrans=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/; domain=" + host;
document.cookie = "googtrans=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
document.cookie = "googtrans=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/; domain=" + host;
document.cookie = "googtrans=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/; domain=." + host;
} else {
document.cookie = "googtrans=" + cookieVal + "; path=/; domain=" + host;
var cookieVal = '/id/' + lang;
document.cookie = "googtrans=" + cookieVal + "; path=/;";
document.cookie = "googtrans=" + cookieVal + "; path=/; domain=" + host;
document.cookie = "googtrans=" + cookieVal + "; path=/; domain=." + host;
}
window.location.reload();
}
document.addEventListener("DOMContentLoaded", function() {
// Cek status bahasa aktif dari cookie
var match = document.cookie.match(/googtrans=\/id\/([a-z]{2})/i);
var activeLang = match ? match[1].toLowerCase() : 'id';
// Cek status bahasa aktif
var match = document.cookie.match(/googtrans=\/id\/([a-zA-Z\-]+)/i);
var activeLang = match ? match[1] : 'id';
var buttons = document.querySelectorAll('.lang-btn');
buttons.forEach(function(btn) {
if (btn.getAttribute('data-lang') === activeLang) {
if (btn.getAttribute('data-lang').toLowerCase() === activeLang.toLowerCase()) {
btn.classList.add('active');
} else {
btn.classList.remove('active');
@@ -98,6 +115,18 @@
changeLanguage(selected);
});
});
// Hapus pergeseran paksa body dari Google Translate
var killTranslateBar = function() {
if (document.body.style.top && document.body.style.top !== '0px') {
document.body.style.top = '0px';
}
var banner = document.querySelector('.goog-te-banner-frame, iframe.goog-te-banner-frame, .VIpgJd-ZVi9od-ORHb-OEVmcd');
if (banner) {
banner.style.display = 'none';
}
};
setInterval(killTranslateBar, 150);
});
</script>
<script type="text/javascript" src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>