Onde colocar as cadeias de teclas i18n em Java

Ao fazer a internacionalização em Java, você atribui uma chave de cadeia a cada mensagem. Qual é a melhor prática, sobre onde colocar essas chaves de seqüência de caracteres. O objetivo é permitir uma refatoração fácil (por exemplo, alterações no nome da chave), código limpo e legível, separação de preocupações, mas ainda não duplicação de chaves / mensagens, mesmo que sejam chamadas de diferentes partes do códig

//bad way, strings directly in code
messages.getString("hello_key");

-

// better way, use String constants
public static final String HELLO_KEY = "hello_key";
...
messages.getString(HELLO_KEY);

-

// other (better?) way, put all keys in one huge central class
public class AllMessageKeys {
  public static final String HELLO_KEY = "hello_key";
  ...
}

public class Foo {
  ...
  messages.getString(AllMessageKeys.HELLO_KEY);
}

-

// other (better?) way, put all keys in neighbor class
public class FooMessageKeys {
  public static final String HELLO_KEY = "hello_key";
}

public class Foo {
  ...
  messages.getString(FooMessageKeys.HELLO_KEY);
}

Algumas outras propostas? Qual é melhor? Estou no IDE Eclipse, se isso tornar a parte da refatoração mais clar

Clarificação: nos exemplos acima, "mensagens" é do tipo ResourceBundl

questionAnswers(7)

yourAnswerToTheQuestion