Enum valora la internacionalización en Wicket

Tengo una enumeración FooBar en la clase Clazz con falues ​​FOO y BAR así:

class Clazz {
    enum FooBar{
        FOO,
        BAR
    }
}

Ahora me gustaría utilizar el getString()método wicket para localizar los valores FOOy BAR. Lo mejor que puedo hacer es definir en el archivo i18n

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

y obtengo valores con este código

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

He oído que esto se puede lograr sin Clazz.FooBaragregar la cadena de consulta i18n, pero el método que se llamará sería diferente. ¿Como hacer esto?

Respuesta 1

Puede poner este método en su página / panel base:

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

Entonces puedes simplemente llamarlo con

getString(Clazz.FooBar.FOO);

y le devolverá lo que definió en el archivo de propiedades.

Respuesta: 2

No le aconsejaré que almacene directamente nombres constantes de enumeración en el archivo de propiedades, la razón es simple, dos enumeraciones diferentes pueden contener el mismo nombre.

A continuación se muestra el código que se me ocurrió.

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

Esto mantendrá su enumeración y su propósito i18n separados y claros.

Respuesta: 3

Vea a continuación la muestra de clase Enum. Es posible que desee personalizarlo más según sus necesidades.

    public enum FooBar {

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

    private String key;

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



    public String toString() {
        return key;
    }
}

entonces puede hacer que el método toString devuelva la clave directamente para que pueda usar

 getString(ErrorCodeEnum.ERROR1);

o puede anular el método toString directamente como se muestra a continuación

 public enum FooBar {

    foo, bar;

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

Simplemente podrías definir

FOO=foo
BAR=bar

en sus propiedades y acceda a ella por

getString(fooBar.name());

o me estoy perdiendo algún punto?

Respuesta: 5

Me resulta difícil convertir una pieza de código a PHP desde Java. Busqué en Internet sobre el significado de cada línea de código escrita en mi ejemplo de código de Java, pero no encontré ninguno. Quiero ...

Tengo un Enum, que devuelve el género de gender char: public enum Gender {FEMALE ('F'), MALE ('M'); género de char privado; Género (char gender) {this.gender = gender; ...

En la literatura JDBC a menudo encuentro fragmentos como void databaseCall () {Connection con = null; Sentencia de declaración = intento nulo {con = getConnection (...); ...

Sabemos que el conjunto de cadenas de pasantes de Java se basa en el patrón de diseño Flyweight. También el objeto String es inmutable. ¿Es obligatorio que todos los objetos que usan el patrón Flyweight sean inmutables? . ...