ترجمة

// ======== Shortcode:

مترجم متعدد المصادر

========
add_action(‘init’, function(){
add_shortcode(‘mt_widget’, function(){
// سجّل سكربت فارغ لتتمكن من حقن سكربت داخلي آمن
wp_register_script(‘mt-inline’, false, [], MT_RP_VERSION, true);

// حقن السكربت الداخلي (واجهة الترجمة)
$inline_js = << document.getElementById(id);
const input = el(‘mt-input’);
const target = el(‘mt-target’);
const status = el(‘mt-status’);
const btnTranslate = el(‘mt-translate’);
const btnClear = el(‘mt-clear’);
const outGoogle = el(‘mt-google’);
const outBing = el(‘mt-bing’);
const outYandex = el(‘mt-yandex’);
const outReverso= el(‘mt-reverso’);
const linkReverso = el(‘mt-reverso-link’);

const base = (window.wp && window.wpApiSettings && window.wpApiSettings.root) || ‘/wp-json/’;
const routes = {
google: base + ‘mt/v1/translate/google’,
bing: base + ‘mt/v1/translate/bing’,
yandex: base + ‘mt/v1/translate/yandex’,
reverso: base + ‘mt/v1/translate/reverso’
};

btnClear.addEventListener(‘click’, () => {
input.value = ”;
outGoogle.value = outBing.value = outYandex.value = outReverso.value = ”;
status.textContent = ”;
});

function updateReversoLink(q, to){
const langMap = { ar:’arabic’, en:’english’, fr:’french’, de:’german’, es:’spanish’, ru:’russian’, tr:’turkish’ };
const tgt = langMap[to] || ‘arabic’;
const url = `https://context.reverso.net/translation/english-${tgt}/${encodeURIComponent(q)}`;
if (linkReverso) { linkReverso.href = url; linkReverso.style.display = ‘inline’; }
}

async function postJSON(url, data){
const res = await fetch(url, {
method: ‘POST’,
headers: { ‘Content-Type’: ‘application/json’ },
body: JSON.stringify(data)
});
if(!res.ok){
const t = await res.text();
throw new Error(`HTTP ${res.status}: ${t}`);
}
return res.json();
}

btnTranslate.addEventListener(‘click’, async () => {
const q = input.value.trim();
const to = target.value;
if(!q){ alert(‘فضلاً أدخل نصًا للترجمة’); return; }

status.textContent = ‘جاري الترجمة…’;
outGoogle.value = outBing.value = outYandex.value = outReverso.value = ”;

updateReversoLink(q, to);

const payload = { text: q, to };
try{
const [g, b, y, r] = await Promise.allSettled([
postJSON(routes.google, payload),
postJSON(routes.bing, payload),
postJSON(routes.yandex, payload),
postJSON(routes.reverso,payload)
]);

if(g.status === ‘fulfilled’){ outGoogle.value = g.value.translation || ”; }
else{ outGoogle.value = ‘خطأ: ‘ + g.reason.message; }

if(b.status === ‘fulfilled’){ outBing.value = (b.value.translation || b.value.joined || ”); }
else{ outBing.value = ‘خطأ: ‘ + b.reason.message; }

if(y.status === ‘fulfilled’){ outYandex.value = y.value.translation || ”; }
else{ outYandex.value = ‘خطأ: ‘ + y.reason.message; }

if(r.status === ‘fulfilled’){ outReverso.value = r.value.translation || r.value.message || ”; }
else{
outReverso.value = ‘واجهة Reverso المؤسسية غير مضبوطة أو حدث خطأ.’;
}

status.textContent = ‘تمت المعالجة.’;
}catch(err){
status.textContent = ‘حدث خطأ.’;
console.error(err);
}
});
})();
JS;

wp_add_inline_script(‘mt-inline’, $inline_js);
wp_enqueue_script(‘mt-inline’);

ob_start();
?>

مترجم متعدد المصادر








Scroll to Top