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

时间:2012-07-04 20:37:57

标签: java jsf internationalization facelets

我已在我的项目中成功实施了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();
  }
}

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

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

1 个答案:

答案 0 :(得分:5)

您需要使用与JSF相同的方式来加载资源包:使用ResourceBundle API。这是一个假设基本名称为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");
// ...