0

由于我的项目的要求,我实现了一个自定义的 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() 调用,仅此而已。然而,这违背了在添加新语言时不必修改项目的目的。

我的问题是:

我怎样才能解决这个问题并且只有一个资源包类?

有没有办法实现我想要的,当添加新语言时不必修改项目?

4

1 回答 1

0

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

于 2013-03-09T02:18:41.363 回答