我正在使用JSP编写一个网站。我想以多种语言提供网站,因此我为我计划支持的每种语言创建了HashMap
,并通过map.get("identifier")
找到了文本(当然还有其他一些代码)。 )
我遇到的问题是我之前使用format
函数解决的问题(在许多语言中类似于printf
),但这是另一种语言。
问题特别在于User performed action
这样的文字可能会以另一种语言Action was performed by user
出现(即条款可能会出现故障)。
过去,我做过类似#translate("Welcome to the site, %s!", {"Username"})
的操作,然后使用语言的format
函数将%s
替换为用户名。我可以简单地使用String#replace
但是我不能像{I}那样做#translate("Welcome to the site, %s! You last visited on %s!", {"username", "last visit"})
之类的事情。
很抱歉,如果这是一个错误的解释 - 只需在PHP中查找printf
。
在Java中复制这样的东西的最佳方法是什么?谢谢你的帮助。
答案 0 :(得分:9)
不要重新发明。使用JSTL fmt
taglib。它也支持parameterized条消息。
<fmt:message key="identifier">
<fmt:param value="${username}" />
</fmt:message>
答案 1 :(得分:1)
我坚持自己的问题而且我发现最好的方法是像所有人(或几乎每个人)一样使用资源包。您可以使用fmt taglib或spring消息。
我尝试使用gettext解决方案,但它包含一些先前的步骤(xgettext,msgmerge,msgfmt),这使得这太复杂了,对于webapp来说不太好(在我看来)。
我将使用spring消息,你可以看到一个例子:
答案 2 :(得分:0)
使用属性文件来使用不同的语言
en_US.properties
fr_CA.properties
并在那些属性文件中,让您的文字像那样
user.performed.action=User performed an action
然后如BalusC所说,使用JSTL。