我发现很难在一个简单的 Web 应用程序中实现它。我将 l10n.properties 文件放在根 WEB-INF 下,但我不明白如何阅读它们。我使用了 PropertiesResourceBundle.getBundle(baseName, locale) 但我不明白我必须为 baseName 写什么。我在一些线程上读到我必须将本地文件放在类路径中:对吗?我在哪里可以在 JDeveloper 中设置类路径?
提前致谢
我发现很难在一个简单的 Web 应用程序中实现它。我将 l10n.properties 文件放在根 WEB-INF 下,但我不明白如何阅读它们。我使用了 PropertiesResourceBundle.getBundle(baseName, locale) 但我不明白我必须为 baseName 写什么。我在一些线程上读到我必须将本地文件放在类路径中:对吗?我在哪里可以在 JDeveloper 中设置类路径?
提前致谢
除非您需要在后端读取资源文件(这意味着不是直接在您的 Web 前端),否则在任何情况下都不应该使用它ResourceBundle.getBundle()
,尤其是不 PropertiesResourceBundle.getBundle()
应该使用它的子类。
根据应用程序的类型(无论是 JSP 还是 JSF),您访问资源的方式会有所不同。
对于简单的 JSP,您将使用JSTL和 fmt:message 标签来翻译 UI,就像这里和 StackOverflow 上的无数问题(只需使用屏幕右上角的搜索引擎)。
对于 JSF/Facelets,您需要在 faces-config.xml 中设置适当的变量,并且只需使用有效的表达式语言查询。更多内容可以在这个优秀的教程中找到。
回到您最初的问题,您传递给的基本名称(除非您真的知道自己在做什么,否则请ResourceBundle.getBundle()
确保不要使用子类)与您从中访问它的类的路径相关(这意味着它应该是相同的源目录)。另一件事是在这里传递什么。假设您的资源文件名类似于messages.properties、messages_de.properties、messages_es_MX.properties 等,您只需将“messages”放在baseName 中,因此有问题的调用看起来就像ResourceBundle.getBundle("messages", theLocale);
theLocale 是您的Locale
对象——这个应该被检测到(在 JSP 世界中它有点棘手,在 JSF/Facelets 中它就像 一样简单Locale theLocale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
)。而已。