<span> hello world </span>
类似于:
<span> <fmt:message key="hi.message" /> </span>
我想知道是否可以从属性文件(en / fr)中读取文本,具体取决于JSP中的用户区域设置,这样我将为所有区域设置使用一个模板,文本是动态的
注意:力度不是应用程序中使用的视图技术,我只在发送电子邮件时使用它的模板。
答案 0 :(得分:2)
Spring MVC附带(非常)有用的velocimacros(参见Spring MVC documentation)。其中一个是#springMessageText。
在你的hello.vm文件中:
<span>#springMessageText("hi.message", "Hello Default!")</span>
此宏将根据当前区域设置(使用Spring中的内置ResourceBundleMessageSource)读取消息源中的消息。
messages_fr_FR.properties
hi.message=Bonjour
messages_en_GB.propertie
hi.message=Hello
如果没有可用于当前语言环境的包,则默认消息“Hello Default!”使用。
默认情况下,Spring正在读取消息* .properties文件。但是您可以在servlet.xml配置中指定更多消息源(此处为messages * .properties和othermessages * .properties):
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames">
<list>
<value>messages</value>
<value>othermessages</value>
</list>
</property>
</bean>
SpringMVC如何了解当前的区域设置?
嗯,这都是内置的SpringMVC。 ResourceBundleMessageSource根据Locale读取键。 我认为默认情况下配置了LocaleResolver(使用沿客户端请求发送的区域设置),但您可以register your own localeResolver。
我们建议您检查所有可用的springmvc velocimacros和velocity tools(非常有用!)。
答案 1 :(得分:2)
Velocity Tools'ResourceTool类是一个用于访问ResourceBundles和格式化消息的工具。对上一个问题的回答描述了how to set up Velocity Tools
在工具配置文件中,添加以下行以启用ResourceTool。您可以提供默认语言环境,但通常会使用HttpServletRequest.getLocale()
中的语言环境。
Toolbox configuration example:
<tools>
<toolbox scope="request">
<tool class="org.apache.velocity.tools.generic.ResourceTool"
bundles="myresources"
locale="en_US"/>
</toolbox>
</tools>
如果资源包中包含
bar=The args are {0} and {1}.
您可以在模板中使用以下内容
$text.bar -> The args are {0} and {1}.
$text.bar.insert(4) -> The args are 4 and {1}.
$text.bar.insert(4,true) -> The args are 4 and true.
使用完全编程配置可能最好显示;这样您就可以每次手动设置区域设置。
EasyFactoryConfiguration config = new EasyFactoryConfiguration();
config.toolbox("request").tool(ResourceTool.class)
.property("bundles", "myresources")
.property("locale", "en_US");
ToolManager manager = new ToolManager(false, false);
manager.configure(config);
Context context = manager.createContext();
context.put("name", "Jarl");
Template template = Velocity.getTemplate("mytemplate.vm");
StringWriter writer = new StringWriter();
template.merge(context, writer);
System.out.println(writer.toString());
mytemplate.vm:
$text.greeting $name
myresources_en_US.properties:
greeting=Hello
输出
Hello Jarl
答案 2 :(得分:1)
这是因为您的编码,首先尝试手动更改页面编码(通常在工具中)。
我在这方面有点远,但不是更远.Spring自动将编码设置为iso-8859-1,我将它设置为utf-8,然而,我的希伯来字符串变为gibrish,也摧毁了有机会手动选择正确的编码,因为它们似乎都无法正确解码。
我非常感谢能够解决这个问题。
答案 3 :(得分:0)
我们不能在Web应用程序之外使用宏,就像我的情况一样,所以解决方案是使用messageSource
model.put("messagesource", this.messagesource);
// adding this e.g. should do the trick
model.put("keyHelloCustomer", "the_key_you_use_in_your_properties_file");
model.put("noArgs", new Object[]{});
model.put("locale", yourOwnPrivateMethodToDetermineWhichLocaleToUse());
并在vm中:
${messageSource.getMessage($keyHelloCustomer, $noArgs, $locale)}