我一直在阅读其他问题和答案,但我没有得到资源边界如何工作完整。 我认为在Joomla中使用多语言选项的方式类似。 基本上,您拥有要为不同语言阅读的不同消息的文件。 所以我在src / Lang文件夹中创建了System.properties 我在里面创建
STARTING_MYAPP=Starting my app
我可能在这里错了,但无论如何我无法读取默认文件。现在我脑死亡,我无法理解我读到的任何东西 这就是我这样做的方式
Locale locale = Locale.getDefault();
String basename ="System";
ResourceBundle resourceBundle = ResourceBundle.getBundle(basename, locale);
System.out.println(resourceBundle.getString("STARTING_MYAPP"));
//UserPreferences UserPrefs = new UserPreferences();
当我调用getBundle()时,它有两个输入,basename和locale,right。我在使用basename时遇到问题。如果我的文件在src / lang / System.properties中,我该如何查找它。 basename =“System”,basename =“Lang / System”,basename =“System.properties”,basename =“myProject.label”。
我尝试了所有这些和更多的组合,但没有工作,我总是得到类似的东西 线程“main”中的异常java.util.MissingResourceException:找不到基本名称System,locale en_US
的包关于语言环境,我如何将其保留为默认值,因此我不必使用System_en_US.properties或类似的东西。
答案 0 :(得分:4)
basename的结构类似于完全限定的类名(因为资源包可以是类),因此如果类路径根为src
且资源为文件src/lang/System.properties
,则基本名称为{ {1}}。
关于语言环境,我是如何做到的 默认,所以我不必使用 System_en_US.properties或其他东西 那样的。
只需使用仅带有基本名称的getBundle()
方法。
答案 1 :(得分:3)
这很好用。
import java.util.Locale;
import java.util.ResourceBundle;
public class ResourceBundleTester
{
public static void main(String[] args)
{
Locale locale = Locale.getDefault();
String basename ="lang/System";
ResourceBundle resourceBundle = ResourceBundle.getBundle(basename, locale);
System.out.println(resourceBundle.getString("STARTING_MYAPP"));
}
}
在src / lang文件夹中,我创建了一个名为System.properties的文件,其中包含...
STARTING_MYAPP=Starting my app
输出结果是:启动我的应用
This page解释了JDK如何解析ResourceBundle名称。