Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Переопределение методов jQuery (https://javascript.ru/forum/jquery/78855-pereopredelenie-metodov-jquery.html)

Vanguger 14.11.2019 01:52

Переопределение методов jQuery
 
Прошу помощи в реализации следующего:

Есть большой не локализованный скрипт, который переловачивать не вижу смысла, в том числе ввиду будущих обновлений. В коде существует много конструкций jQuery, типа:
$('selector').text('Website');

Есть желание переопределить метод text из jQuery, примерно по следующей логике:
function lang(txt){
  if(txt=='Website')txt='Вебсайт';
  return txt;
}

Т.е. когда в коде встречается что-то вроде $('.txt1').text('Website');
то вместо <div class="txt1">Website</div>, вставлялось переведённое <div class="txt1">Вебсайт</div>

Подскажите пожалуйста есть ли возможность такое реализовать и если да, то как, пример было бы здорово.

laimas 14.11.2019 05:36

Скрипт, это текст, а в тексте найти и заменить можно в любом редакторе, только менять нужно не грабли "Website" на грабли "Вебсайт", а на имя переменной, которая может содержать как "Website", так и "Вебсайт", так и любое иное.

Vanguger 14.11.2019 12:10

Это вроде проще, но было бы гораздо элегантнее иметь описанное
переопределение, так как при обновлении скрипта, все правки полетят. Заданный вопрос остаётся открытым.

Malleys 14.11.2019 12:21

Vanguger, так?

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<!-- скрипт, который вставляется сразу после jQuery -->
<script>
	/* словарик */
	var i18n = {
		"Website": "Уебсайт"
	};

	/* «манкипатчинг» позволяет добавить немного волшебства в jQuery */
	jQuery.prototype.text = (function (jQueryText) {
		return function text(string) {
			return jQueryText.call(this, string in i18n ? i18n[string] : string);
		}
	})(jQuery.prototype.text);
</script>

<!-- Пример -->
<script>
$(() => {
	$(".txt1").text("Website");
});
</script>
<div class="txt1"></div>

laimas 14.11.2019 13:09

Цитата:

Сообщение от Vanguger
было бы гораздо элегантнее

Охрень, то есть под каждую такую замену переопределять методы?
Даже с учетом того, что в JQ и не потребуется ничего переопределять, и есть готовое $.valHooks, для такого занятия даже слов не найти, чтобы охарактеризовать. )

Malleys 14.11.2019 14:21

Цитата:

Сообщение от laimas
Скрипт, это текст, а в тексте найти и заменить можно в любом редакторе, только менять нужно не грабли "Website" на грабли "Вебсайт"

Цитата:

Сообщение от laimas
Охрень, то есть под каждую такую замену переопределять методы?
Даже с учетом того, что в JQ и не потребуется ничего переопределять, и есть готовое $.valHooks, для такого занятия даже слов не найти, чтобы охарактеризовать. )

Так покажи как надо!

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<!-- скрипт, который вставляется сразу после jQuery -->
<script>
	/* словарик */
	var i18n = {
		"Website": "Уебсайт"
	};

	/* здесь ожидается решение от laimas */
</script>

<!-- Пример -->
<script>
$(() => {
	$(".txt1").text("Website");
});
</script>
<div class="txt1"></div>

laimas 14.11.2019 14:43

Цитата:

Сообщение от Malleys
Так покажи как надо

var myname = 'Траля-ля-ля'; -> Редактор -> найти/заменить "ХХХХ" -> myname. Если подмена определяется сервером, то и брать ее из переменных сервера.

Malleys 14.11.2019 20:16

Цитата:

Сообщение от laimas
ля-ля'

А два языка как?

laimas 15.11.2019 01:01

Цитата:

Сообщение от Malleys
А два языка как?

Чего чего, хотите сказать, что локализация осуществляется переопределением методов?

Malleys 15.11.2019 13:32

Цитата:

Сообщение от laimas
Чего чего, хотите сказать, что локализация осуществляется переопределением методов?

Локализация определённо так не осуществлятся, но вам стоит ещё раз прочитать сообщение №1. Потому что в jQuery многие мерзости принимаются адептами jQuery на «ура». Вы что не поняли? (Смотри строку №9 в коде в сообщении №4)


Часовой пояс GMT +3, время: 14:37.