翻译的最佳实践
我正在使用JSP编写一个网站。 我希望网站有多种语言版本,所以我为我计划支持的每种语言创建了一个HashMap
,并通过map.get("identifier")
找到了文本map.get("identifier")
当然还有一些其他代码)。
我遇到的问题是我之前通过使用format
函数解决的问题(类似于许多语言中的printf
),但这是另一种语言。
具体问题是像User performed action
文本可能会Action was performed by user
以另一种语言User performed action
(即术语可能会出现故障)。
在过去,我做过类似#translate("Welcome to the site, %s!", {"Username"})
,然后使用语言的format
function将%s
替换为用户名。 我可以简单地使用String#replace
但是我不能做像#translate("Welcome to the site, %s! You last visited on %s!", {"username", "last visit"})
这样的事情#translate("Welcome to the site, %s! You last visited on %s!", {"username", "last visit"})
就像我一样我想。
很抱歉,如果这是一个不好的解释 – 只需在PHP之类的内容中查找printf
。
在Java中复制这样的东西的最佳方法是什么? 谢谢您的帮助。
不要重新发明。 使用JSTL fmt
taglib 。 它也支持参数化消息。
也可以看看:
- 如何国际化Java Web应用程序? – 一个迷你教程
我一直坚持这个问题,我发现最好的方法是像所有人(或几乎每个人)一样使用资源包。 您可以使用fmt taglib或spring消息。
我尝试使用gettext解决方案,但它包含一些先前的步骤(xgettext,msgmerge,msgfmt),这使得这太复杂了,对于webapp来说不太好(在我看来)。
我将使用spring消息,你可以看到一个例子:
使用属性文件具有不同的语言
en_US.properties fr_CA.properties
并在那些属性文件中,让你的文字像那样
user.performed.action=User performed an action
然后如BalusC所说,使用JSTL。