JavaScript, Thymeleaf и локализующий текст

Наша веб-страница построена с использованием большого количества JavaScript. У меня проблемы с заменой текста в сгенерированной разметке локализованным текстом. JavaScript не является встроенным в веб-страницу, но вводится с директивой. В JavaScript есть что-то вроде следующего:

$("#Dynamic-Modal-Content").empty();     
$("#Dynamic-Modal-Content").append("<div class='dynamic_model' id='dynamic_id'>"+
    "<p>Done?</p></div>");

На веб-странице есть

<div id="Dynamic-Modal-Content"></div>

Мне нужно заменить "Готово?" с локализованным текстом, но не могу понять, как. Я попробовал предложение на http://blog.florentlim.com/how-to-write-javascript-including-thymeleaf/, но это не сработало.

Это упрощенная версия реального кода, но суть проблемы.

Какие-нибудь указатели от людей в большом, широком мире?

1 ответ

Есть 2 обходных пути для этого:

  • Вы можете использовать дополнительные js-файлы с текстами для каждой локали и выбрать нужный с javascript по запросу. Некоторые библиотеки виджетов пользовательского интерфейса используют этот подход в некоторой степени. Однако у него есть два основных недостатка. Javascript afaik может разрешать локаль только из браузера, поэтому вам все еще нужен некоторый параметр связи, передаваемый серверу, если вы сохраняете предпочтение локали в сеансе. Во-вторых, что еще более важно, вы не можете не разделять тексты i18n в разных местах для каждой локали - один для серверной части и один для js.

  • Используйте атрибуты данных html5. Я считаю, что использование атрибутов данных html5 - это самый чистый способ передачи данных между сервером и js, не только для i18n.

Например, ваш div становится:

<div id="Dynamic-Modal-Content" th:attr="data-txt=#{label.done}"></div>

затем с помощью jQuery вы можете легко получить все атрибуты данных html5, как если бы они были данными jQuery:

$("#Dynamic-Modal-Content").data("txt");
Другие вопросы по тегам