Java国际化 - 我是否必须为每个类加载资源包?

时间:2013-10-30 15:06:41

标签: java internationalization

noob。

我正在尝试将国际化实施到基于命令行的程序。以下是java国际化路径中提供的内容。

import java.util.*;

public class I18NSample {

    static public void main(String[] args) {

        String language;
        String country;

        if (args.length != 2) {
            language = new String("en");
            country = new String("US");
        } else {
            language = new String(args[0]);
            country = new String(args[1]);
        }

        Locale currentLocale;
        ResourceBundle messages;

        currentLocale = new Locale(language, country);

        messages = ResourceBundle.getBundle("MessagesBundle", currentLocale);
        System.out.println(messages.getString("greetings"));
        System.out.println(messages.getString("inquiry"));
        System.out.println(messages.getString("farewell"));
    }
}

这显然有效,但我有几个类(目前不在一个包中)。我是否需要在所有这些类中加载相同的包才能使用它们?

我想最终得到的是,在程序的开头,让用户选择他们想要使用的语言(从可用的.properties文件列表中),让他们输入命令这将加载特定的文件。

这可能吗?

由于

2 个答案:

答案 0 :(得分:1)

您可以使用公共静态方法为getString方法创建一个帮助器类。类似的东西:

public class Messages {
    private static Locale locale;

    public static void setLocale(Locale locale) {
        Messages.locale = locale;
    }

    public static String getString(String key) {
        return ResourceBundle.getBundle("MessagesBundle", locale).getString(key);
    }
}

设置消息的区域设置后,您可以通过

获取消息
Messages.getString("greetings");

答案 1 :(得分:1)

似乎没有任何理由说明您的所有课程无法共享相同的LocaleResourceBundle。我假设即使您的类不在同一个包中,您也可以在同一个应用程序中使用它们。您只需要公开它们或提供公共吸气剂。例如:

public class YourClass {

    private static Locale currentLocale;
    private static ResourceBundle messages;

    static public void main(String[] args) {

        String language;
        String country;

        if (args.length != 2) {
            language = new String("en");
            country = new String("US");
        } else {
            language = new String(args[0]);
            country = new String(args[1]);
        }

        currentLocale = new Locale(language, country);

        messages = ResourceBundle.getBundle("MessagesBundle", currentLocale);
    }

    public static Locale getCurrentLocale() {
        return currentLocale;
    }

    public static ResourceBundle getMessages() {
        return messages;
    }
}

从其他课程中,您可以致电:

Locale currentLocale = YourClass.getCurrentLocale();
ResourceBundle messages = YourClass.getMessages();