翻译的最佳实践

时间:2011-02-10 19:16:15

标签: java jsp

我正在使用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中复制这样的东西的最佳方法是什么?谢谢你的帮助。

3 个答案:

答案 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消息,你可以看到一个例子:

http://viralpatel.net/blogs/2010/07/spring-3-mvc-internationalization-i18n-localization-tutorial-example.html

答案 2 :(得分:0)

使用属性文件来使用不同的语言

en_US.properties
fr_CA.properties

并在那些属性文件中,让您的文字像那样

user.performed.action=User performed an action

然后如BalusC所说,使用JSTL。