/** * Protects specific words/phrases from being mistranslated by the * Google Website Translator widget, by auto-wrapping them in * ... on page load. * * Add new terms to PROTECTED_TERMS as needed (e.g. other acronyms, * product names, brand names that get mangled in translation). * * Install: paste into a "Custom Code" snippet (Elementor Pro > Custom * Code, or a plugin like WPCode / Insert Headers and Footers), set it * to load in the footer, on all pages. */ (function () { // Add any other terms here that should never be translated. var PROTECTED_TERMS = ['IOT']; function escapeRegExp(str) { return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); } function protectTerms(root) { PROTECTED_TERMS.forEach(function (term) { // \b...\b = whole word only, case-sensitive (so "biot..." etc. is untouched) var regex = new RegExp('\\b' + escapeRegExp(term) + '\\b', 'g'); var walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, { acceptNode: function (node) { if (!node.nodeValue || !regex.test(node.nodeValue)) { return NodeFilter.FILTER_REJECT; } var parent = node.parentElement; if ( parent && parent.closest('script, style, .notranslate, #google_translate_element') ) { return NodeFilter.FILTER_REJECT; } return NodeFilter.FILTER_ACCEPT; }, }); var nodes = []; var n; while ((n = walker.nextNode())) nodes.push(n); nodes.forEach(function (textNode) { var wrapper = document.createElement('span'); wrapper.innerHTML = textNode.nodeValue.replace( regex, '' + term + '' ); textNode.parentNode.replaceChild(wrapper, textNode); }); }); } document.addEventListener('DOMContentLoaded', function () { protectTerms(document.body); }); })();