我有一个使用Spring MVC的Web应用程序。我想让我的界面只包含一个页面,它通过AJAX将所有数据动态地检索为JSON。我的问题是国际化。当我呈现在JSP中的内容,我可以使用JSTL标记来解决我的钥匙(超级容易与Spring MVC):Spring - 获取所有可解析的消息密钥
<fmt:message key="name"/>: ${name}
<fmt:message key="title"/>: ${title}
<fmt:message key="group"/>: ${group}
如果配置正确,它在芬兰的语言环境呈现为
Nimi: yay
Otsikko: hoopla
Ryhmä: doo
现在,当我使用json时,我只能从服务器进入:
{
name: "yay",
title: "hoopla",
group: "doo"
}
没有键名!但我必须以某种方式提供它们。我考虑将键名更改为本地化表单或将本地化键名添加到json输出中(例如name_localized =“Nimi”),但这两个选项都是不好的做法。我使用jackson json自动将我的域对象解析为json,我喜欢它提供的封装。
我想出的唯一可行的解决方案是:动态创建一个JavaScript文件,其中包含本地化的键名作为变量。
<script type="text/javascript">
var name="Nimi";
var title="Otsikko";
var group="Ryhmä";
</script>
一旦我有这个加载,我现在有我的JavaScript中的所有信息来处理json!但有一个问题:我的字段名称列表是动态的。因此,在JSP实际静态渲染应该是这样的:
<c:forEach var="field" values="${fields}">
<fmt:message key="${field.key}"/>: ${field.value}
</c:forEach>
我需要找到所有在我messages.properties指定的消息。 Spring MessageSource接口只支持按键检索消息。我怎样才能得到我的JSP中的关键字列表,呈现本地化的JavaScript变量?
那么,通过将自定义消息源设置为项目的默认值,您可以清除一些丑陋的内容。很难将它全部放在评论中,但是在你的配置文件中,然后在你的类中使用''然后'@Autowired private ExposedResourceBundleMessageSourcemessageSource;'。 –
Patrick
对于那些想要如何获得'Locale'的人,你可能想使用'LocaleContextHolder.getLocale()'。这将获得绑定到线程的语言环境,这通常是您在servlet/spring mvc环境中所需的。 –