Мне кажется, что вы хотите обработать файл JS как файл JSP и разрешить его содержимое с помощью тега spring: message.
Я бы этого не делал.
Обычно JS i18nвыполняется одним из двух способов:
- Записывая массив переведенных строк со страницы JSP
- Создавая фильтр перевода и предоставляя предварительно переведенный файл JS запрашивающему клиенту
И то и другое работает лучше всего, если вы создадите одно централизованное расположение для ваших переводимых строк на стороне клиента.
В вашем контексте, я бы порекомендовал первый способ (намного проще).Это если ваш проект не очень большой и у вас есть много переводимых строк на стороне клиента.Таким образом, модификация будет выглядеть так:
<script type="text/javascript">
var strings = new Array();
strings['settings.toogle'] = "<spring:message code='proj.settings.toggle' javaScriptEscape='true' />";
strings['settings.toogle.description'] = "<spring:message code='proj.settings.toggle.description' javaScriptEscape='true' />";
</script>
<spring:theme code="jsFile" var="js" />
<script type="text/javascript" src="${js}" />
А в вашем файле JS:
buildList('settings', [{
name: strings['settings.toggle'],
id:"setting1",
description: strings['settings.toggle.description'],
installed: true
}]);
Помните, что я использовал двойные кавычки для записи переведенных строк.Это из-за некоторых слов на французском или итальянском, которые могут содержать апостроф.
Редактировать: Дополнительный ввод
По этой причине мы предоставляем переводы в файлы JS.Обычно причина в том, что мы хотим динамически создавать некоторую часть пользовательского интерфейса.Также есть случаи, когда нам нужно локализовать какой-либо сторонний компонент, мой ответ выше вполне с ними справляется.
Для случаев, когда мы хотим создавать части пользовательского интерфейса динамически, действительно имеет смысл использовать шаблоны, а не объединять теги HTML вJavaScript.Я решил написать это, потому что это делает решение намного более чистым (и, возможно, многократно используемым).
Поэтому вместо передачи переводов в JavaScript можно создать шаблон и поместить его на страницу (в моем примере будет использоваться Handlebars.js , но я считаю, что можно использовать любой другой движок):
<script id="article" type="text/x-handlebars-template">
<div class="head">
<p>
<span>
<spring:message code="article.subject.header" text="Subject: " />
</span>{{subject}}</p>
</div>
<div class="body">
{{{body}}}
</div>
</script>
На стороне клиента (то есть в JavaScript) все, что вам нужно сделать, это получить доступ к шаблону (пример ниже)очевидно, использует jQuery) и компилирует:
var template = Handlebars.compile($("#article").html());
var html = template({subject: "It is really clean",
body: "<p>Don't you agree?</p><p>It looks much better than usual spaghetti with JavaScript variables.</p>"
});
$("#someDOMReference").html(html);
Несколько вещей, на которые следует обратить внимание: теги
<spring:message />
экранируют как HTML, так и JS по умолчанию, нам не нужно указыватьjavaScriptEscape
атрибут - Имеет смысл предоставить атрибут
text
для тега <spring:message />
, так как он может использоваться в качестве запасного варианта (если для данного языка нет перевода), а также в качестве комментария (что означает этот элемент)Можно даже создать инструмент, который бы сканировал файлы на наличие тегов <spring:message />
и автоматически генерировал файлы свойств - . Чтобы не допустить выхода руля из содержимого HTML, я использовал тройной
{{{curly braces}}}
в основном это.Я рекомендую использовать шаблоны, если это возможно.