解析Spring:使用JavaScript进行i18n国际化的消息

解析Spring:使用JavaScript进行i18n国际化的消息,第1张

解析Spring:使用JavaScript进行i18n国际化的消息

在我看来,您想要做的就是将JS文件像JSP文件一样对待,并通过spring:message标签解析其内容。
我不会那样做。

通常,JS i18n通过以下两种方式之一完成:

  • 通过从JSP页面写出翻译后的字符串数组
  • 通过创建翻译过滤器并向请求的客户端提供预翻译的JS文件

如果您为客户端可翻译字符串创建一个中心位置,则两种方法都效果最好。
在您的情况下,我建议第一种方法(容易得多)。除非您的项目很大,并且在客户端上有 很多 可翻译的字符串,否则这是不可行的。因此,修改如下所示:

<script type="text/javascript">  var strings = new Array();  strings['settings.toogle'] = "<spring:message pre='proj.settings.toggle' javascriptEscape='true' />";  strings['settings.toogle.description'] = "<spring:message pre='proj.settings.toggle.description' javascriptEscape='true' />";</script><spring:theme pre="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文件的翻译。通常,原因是我们要动态创建UI的某些部分。在某些情况下,我们需要本地化一些第三方组件,我在上面的回答很好地解决了这些问题。
对于我们要动态创建UI部件的情况,使用模板而不是在Javascript中连接HTML标签确实很有意义。我决定写这篇文章,因为它使解决方案更加简洁(并且可能可重用)。
因此,可以将模板传递到Javascript而不是将翻译传递给Javascript(我的示例将使用Handlebars.js,但我相信可以使用任何其他引擎):

<script id="article" type="text/x-handlebars-template">  <div >    <p>      <span>        <spring:message pre="article.subject.header" text="Subject: " />      </span>{{subject}}</p>  </div>  <div >    {{{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}}}

基本上就是这样。如果可能,我建议使用模板。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5153160.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-18
下一篇 2022-11-18

发表评论

登录后才能评论

评论列表(0条)

保存