/**
* 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);
});
})();