将resourceBundle与外部文件一起使用java

时间:2010-09-18 15:03:25

标签: java multilingual

我一直在阅读其他问题和答案,但我没有得到资源边界如何工作完整。 我认为在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或类似的东西。

2 个答案:

答案 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名称。