gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 06:35:36 26 4
gpt4 key购买 nike

这里是菜鸟。

我正在尝试对基于命令行的程序实现国际化。以下是 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 文件列表中)这将加载特定的文件。

这可能吗?

谢谢

最佳答案

似乎没有任何理由可以解释为什么您的所有类不能共享相同的 LocaleResourceBundle。我假设即使您的类并不都在同一个包中,但您还是在同一个应用程序中使用它们。您只需要将它们公开或提供公共(public) getter 即可。例如:

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;
}
}

从您的其他类(class)中,您可以调用:

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

关于Java 国际化 - 我是否必须为每个类加载资源包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19686476/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com