Enum在Wicket的价值国际化

时间:2012-08-01 11:32:06

标签: java internationalization wicket

我在班级Clazz上有一个enum FooBar,有这样的FOO和BAR:

class Clazz {
    enum FooBar{
        FOO,
        BAR
    }
}

我现在想使用wicket getString()方法来定位值FOOBAR。我能做的最好的事情是在i18n文件中定义

 Clazz.FooBar.FOO=foo
 Clazz.FooBar.BAR=bar

我使用此代码获取值

 fooBar = FooBar.FOO;
 getString("Clazz.FooBar." + fooBar.name());

我听说这可以在没有Clazz.FooBar i18n查询字符串的情况下实现,但要调用的方法会有所不同。怎么做?

5 个答案:

答案 0 :(得分:1)

您可以将此方法放在基页/面板中:

public String getString(Enum<?> value) {
    Class<?> enclosingClass = value.getClass().getEnclosingClass();
    String key = (enclosingClass == null ? "" : enclosingClass.getSimpleName() + ".")
            + value.getClass().getSimpleName() + "." + value.name();
    return getString(key);
}

然后你可以用

简单地调用它
getString(Clazz.FooBar.FOO);

它将返回您在属性文件中定义的内容。

答案 1 :(得分:1)

我不建议你直接在属性文件中存储枚举常量名称,原因很简单,两个不同的枚举可以保持同名。

以下是我提出的代码

class Clazz {
enum FooBar {
    //StrId are keys from property file e.g. below
    FOO("com.abc.classz.foobar.FOO"), BAR("com.abc.classz.foobar.BAR");

    private final String strId;

    private FooBar(String id) {
        this.strId = id;
    }

    // toString can also be used here I am just keen on having seperate
    // method
    public String getName() {
        //Load Value for strId from properties file
        return null;
    }
}
}

这将使您的枚举和您的i18n目的分开且清晰。

答案 2 :(得分:0)

见下面的Enum类示例。您可能希望根据需要对其进行更多自定义。

    public enum FooBar {

    foo("foobar.foo"),
    bar("foobar.bar");

    private String key;

    ErrorCodeEnum(final String key) {
        this.key = key;     
    }



    public String toString() {
        return key;
    }
}

然后你可以让toString方法直接返回键,这样你就可以使用

 getString(ErrorCodeEnum.ERROR1);

或者您可以直接覆盖toString方法,如下所示

 public enum FooBar {

    foo, bar;

     public String toString(){
        return getClass().getName()+"."+name();
     }
  }

答案 3 :(得分:0)

你可以简单地定义

FOO=foo
BAR=bar
在您的媒体资源中

并通过

访问它
getString(fooBar.name());

还是我错过了一些观点?

答案 4 :(得分:0)

我正在寻找名为EnumChoiceRenderer的东西。主要思想是给出一个EnumChoiceRenderer,例如: DropDownChoise元素,你能够提供我在我的问题中提出的那种参数。好的,在这个解决方案中,你只能给出

     FooBar.BAR=bar
     FooBar.FOO=foo

在您的资源文件中,但这是我在业余时间对此进行更多调查时能找到的最接近的。

PS。单击本答案开头的EnumChoiseRenderer,查看此解决方案的文章。