ADF中的自定义ResourceBundle只有一个类

时间:2013-03-07 08:30:18

标签: java locale oracle-adf jdeveloper resourcebundle

由于我的项目要求,我已经实现了一个自定义的Java ResouceBundle类来从web.xml中配置的目录中获取资源数据。 我的目的是在项目中只有一个ResourceBundle类,并且未来添加的任何资源和语言都可以完成,而无需重新部署整个项目。 例如:MainBundle.java

public MainBundle() {
    super();
    this.locale = ADFContext.getCurrent().getLocale();
    readBundle();
}

public MainBundle(Locale locale) {
    super();
    this.locale = locale;
    readBundle();
}

private void readBundle() {
    bundleFileName = baseBundleName + "_" + locale.toString();
    // do some file reading here
}

我已经实现了ResourceBundle类,以根据当前语言环境加载正确的语言。但是,如果我只有一个ResourceBundle类,当用户登录时,所有其他并发用户的语言环境都会更改为该用户的语言环境,从而更改其语言。例如:英语用户正在使用我的网站。法国用户登录,英语用户突然被迫使用法语网站。

为了解决这个问题,我必须为每个语言环境创建一个类,它扩展了MainBundle类,例如MainBundle_en_US,MainBundle_fr等。这些类在它们的构造函数中只包含super()调用,仅此而已。 但是,当添加新语言时,这会破坏不必修改项目的目的。

我的问题是:

如何绕过这个并且只有一个资源包类?

无论如何要实现我想要的,在添加新语言时不必修改项目?

1 个答案:

答案 0 :(得分:0)

不要从Resource Bundle Class扩展您的类并实现您自己的本地化/国际化框架,那么您将完全控制您的设计方法。