对于基本的JSP/Servlet Web应用程序,基本方法将使用JSTL fmt塔格利布结合在一起资源束..资源包含键值对,其中键是常量,对于所有语言都是相同的,并且每种语言的值都不同。资源包通常是属性文件被ResourceBundleAPI但是,可以对其进行自定义,以便您可以从例如数据库加载键值对。
下面是一个示例,说明如何使用基于属性文件的资源包国际化Web应用程序的登录表单。创建以下文件并将其放入包中。com.example.i18n(在Maven的情况下,将它们放在包结构中src/main/resources).
text.properties(包含默认语言(通常为英语)中的键值对)login.label.username = Username
login.label.password = Password
login.button.submit = Sign in
text_nl.properties(含荷兰语)nl)键值对)login.label.username = Gebruikersnaam
login.label.password = Wachtwoord
login.button.submit = Inloggen
text_es.properties(含西班牙文(es)键值对)login.label.username = Nombre de usuario
login.label.password = Contraseña
login.button.submit = Acceder
资源包文件名应遵循以下模式name_ll_CC.properties..这个_ll部分应为小写。ISO 693-1语言代码。它是可选的,只有在_CC部分是存在的。这个_CC部分应为大写ISO 3166-1 Alpha-2国家代码。它是可选的,通常只用于区分特定国家的语言方言,例如美国英语 (_en_US)和英式英语 (_en_GB).
如果尚未完成,请安装JSTL。如果在Servlet2.5容器或更高版本(Tomcat6.0等)上运行,那么web.xml声明符合Servlet2.5规范,然后将Jstl-1.2.jar在webapp中/WEB-INF/lib文件夹。
创建以下示例JSP文件,并将其放入Web Content文件夹中。
login.jsp
JSP/JSTL i18n demoEnglish
Nederlands
Español
:
:
这个管理当前语言。如果语言是作为请求参数(通过语言下拉列表)提供的,那么它将被设置。否则,如果已经在会话中设置了语言,那么就坚持使用它。否则,请在请求头中使用用户提供的区域设置。
这个设置资源包的区域设置。这句话很重要以前这个.
这个根据资源包的基本名称(即完整的限定包名称)初始化资源包,直到使用唯一的名称而不使用_ll_CC说明者)。
这个通过指定的包键检索消息值。
这个通知搜索机器人页面使用的是什么语言,这样它就不会被标记为重复的内容(因此,对SEO有好处)。
当选择另一种语言时,语言下拉列表将立即由JavaScript提交,并使用新选择的语言刷新页面。
但是,您需要记住,在默认情况下,属性文件是使用ISO-8859-1字符编码读取的。您需要通过Unicode转义来转义它们。这可以使用jdk提供的native2ascii.exe工具。另见本文部分更多细节。
理论上的另一种选择是提供一个自定义的包。Control将这些文件作为UTF-8加载,但不幸的是,基本的JSTL不支持它fmt塔格利布。你需要用一个人的帮助来管理这一切Filter..有一些(MVC)框架可以更透明的方式处理这一问题,如JSF,请参见这篇文章.