Создайте «Блок/Меню» и разместите его на страницах, где включен поисковый фильтр.
Например в пункте «Введите символы, при обнаружении которых отображать Блок/Меню:» укажите:
/ua/shop/
/ua/pers_shop/
Пример перевода строк, а также кнопки «Применить».
<script>
document.addEventListener("DOMContentLoaded", () => {
const $dict = {
"Color": "Цвет",
"Blue": "Голубой",
"Green": "Зеленый",
"Black": "Черний"
};
const translate = () => {
Object.entries($dict).forEach(([txtorig, txtnew]) => {
const selectors = [
`#shop_catalog_product_types_id_ajax .product_types_valuebox_checkbox span`,
`#shop_catalog_product_types_id_ajax .shop_catalog_product_types_block_title`,
`.shop_catalog_product_properties_block .shop_catalog_product_types_block_title`,
`.shop_catalog_product_properties_block .product_types_valuebox_checkbox`
];
selectors.forEach(sel => {
document.querySelectorAll(sel).forEach(el => {
if (el.textContent.includes(txtorig) && !el.hasAttribute("data-translated")) {
el.innerHTML = txtnew;
el.setAttribute("data-translated", "true");
}
});
});
});
const applyBtn1 = document.querySelector(`.hotengine-smart_search_submit_button input`);
if (applyBtn1) applyBtn1.value = "Apply";
const applyBtn2 = document.querySelector(`#searchinp_smart_search .button`);
if (applyBtn2) applyBtn2.value = "Apply";
};
translate();
const observer = new MutationObserver((mutations) => {
let shouldTranslate = false;
mutations.forEach(mutation => {
if (mutation.addedNodes.length || mutation.type === "characterData") {
shouldTranslate = true;
}
});
if (shouldTranslate) {
translate();
}
});
observer.observe(document.body, {
childList: true,
subtree: true,
characterData: true
});
});
</script>
Пример перевода с перезаписью слов:
<script>
document.addEventListener("DOMContentLoaded", () => {
const $dict = {
"Color": "Цвет",
"Blue": "Голубой",
"Green": "Зеленый",
"Black": "Черний"
};
const translate = () => {
const container = document.querySelector(`#shop_catalog_product_types_id_ajax`);
if (!container) return;
Object.entries($dict).forEach(([txtorig, txtnew]) => {
const regex = new RegExp(txtorig, "g");
const walk = document.createTreeWalker(container, NodeFilter.SHOW_TEXT, null, false);
let node;
while (node = walk.nextNode()) {
if (node.nodeValue.includes(txtorig)) {
node.nodeValue = node.nodeValue.replace(regex, txtnew);
}
}
});
};
translate();
const observer = new MutationObserver((mutations) => {
mutations.forEach(mutation => {
if (mutation.addedNodes.length || mutation.type === "characterData") {
translate();
}
});
});
observer.observe(document.body, {
childList: true,
subtree: true,
characterData: true
});
});
</script>
Аналогично, вы можете добавить другие языки и новые слова, размещая код на соответствующие языковые версии сайта.