Java中的程序范围参数

时间:2010-07-31 22:41:36

标签: java internationalization

我开始翻译Java程序,该程序有几十个对话框来处理。我想知道如何创建一个在所有这些类中都能理解的参数,而不必在每个类中声明它。

Actualy是两个参数。试过像:

public Locale currentLocale = new Locale("en");
public ResourceBundle text = ResourceBundle.getBundle("MessagesBundle", currentLocale);

在该计划的启动课程中,但没有运气。

任何提示?

2 个答案:

答案 0 :(得分:1)

  

无需在每一个中声明它。

有两种通用方法:

  1. Singleton pattern
  2. 使用ThreadLocal将参考文献存储在帖子中。
  3. 无论哪种方式,您都需要考虑很多警告。单例在具有多个类加载器/ JVM的环境中不能很好地工作,并且当您自己生成多个线程来处理业务任务时,ThreadLocals不能很好地工作。在继续之前,您需要理解这些警告。

    安全的方法是在应用程序启动时在一些前端控制器类中仅创建一次对象,并在需要时将其作为参数传递给业务/模型对象。

答案 1 :(得分:0)

设置父ResourceBundle

使用ResourceBundle.setParent()方法。如果在当前ResourceBundle中找不到特定密钥,则会搜索父ResourceBundle

getBundle会自动搜索父母

作为ResourceBundle.getBundle(String, Locale, ClassLoader)的JavaDoc状态,当您为特定Locale加载资源包时会自动发生这种情况,并且可以在没有语言环境后缀的情况下找到具有相同基本名称的包。

在您的示例中,ResourceBundle将从文件(.properties扩展名是可选的)加载,名为:

MessagesBundle_en.properties

但它也会寻找通用的

MessagesBundle.properties

并将其设置为父级。如果您同时提供此通用文件,则无论何时无法找到特定区域设置包中的密钥,它都将用作默认文件。