使用JSF Facelets的国际化(i18n):Java类中的消息

Men*_*nno 2 java jsf facelets internationalization

我已经在我的项目中成功实现了i18n.现在我被困在我的豆...

private String pageTitle;
public List<Product> getProductsByCategory(String category) {
  if(validate(category)) {
    pageTitle = category;
    return service.getProductsByCategory(String category);
  } else {
    pageTitle = "Random products";
    return service.getRandomProducts();
  }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我想让我的pageTitle依赖于提供的方法的结果.一切都很好,但考虑到国际化,这并不好.我已经尝试使用Properties.load(新的FileInputStream)方法,但考虑到文件名为base.properties,base_en_US.properties等,这不起作用.

有谁知道这种情况下的最佳做法?提前致谢!

Bal*_*usC 5

您需要使用与JSF相同的方式来加载资源包:使用ResourceBundleAPI.这里有一个例子假设基本名称是com.example.i18n.base(完全按照你的使用值<f:loadBundle>在视图中<resource-bundle>faces-config.xml)

ResourceBundle bundle = ResourceBundle.getBundle("com.example.i18n.base",
    FacesContext.getCurrentInstance().getViewRoot().getLocale());
String pageTitle = bundle.getString("page.title");
// ...
Run Code Online (Sandbox Code Playgroud)