По локализации веб-приложения
Существует веб-приложение, делаю возможность выбора языков. Добавил в элементы, содержащие строки для перевода, класс custom-lang, а вместо строк условные лейблы ([line1]). Просто получаю потом список всех элементов и прогоняю циклом по всем сообщениям — если атрибуты, .value или .textContent содержат условный лейбл, заменяю его на строку. А в <html> впендюриваю lang="code" dir="ltr/rtl".
Всё прекрасно работает, кроме случая, когда в строке находится ещё один элемент. Например, ссылка.
<span class="custom-lang">[line1] <a class="custom-lang" href="[line2]">[line3]</a></span>
Разумеется, заменить в этом случае лейбл невозможно. Если сделать .textContent = .textContent.replace(), то заменится и ссылка. А если заключить строку в свой блок (<span><span>Строка</span><a>ссылка</a></span>), то при письменности справа-налево всё это превращается в кашу (ссылка оказывается спереди).
Да, можно просто заменить по тексту через .replace() на весь блок (или даже всю страницу), но проблема в том, что переведённые строки генерируют пользователи. И там может быть в теории что угодно, в том числе милая XSSочка. Это небезопасно.
Что в этом случае можно придумать? Желательно без монструозных библиотек для локализации, проблема только в этом.