Похоже, мы все согласны с тем, что нужна какая-то константа.Когда дело касается констант, я настоятельно предпочитаю Enums.Java Enums очень мощные и явно недооцененные:
String title = Messages.getString(RunDialogMessages.TITLE);
Хорошо, но что мне нужно было сделать, чтобы это выглядело так?Простой интерфейс, перечисление и небольшая модификация стандартной процедуры доступа к сообщениям.Давайте начнем с интерфейса:
public interface MessageKeyProvider {
String getKey();
}
Перечисление:
public enum RunDialogMessages implements MessageKeyProvider {
TITLE("RunDialog.Title"),
PROMPT("RunDialog.Prompt.Label"),
RUN("RunDialog.Run.Button"),
CANCEL("RunDialog.Cancel.Button");
private RunDialogMessages(String key) {
this.key = key;
}
private String key;
@Override
public String getKey() {
return key;
}
}
И модифицированный getString()
метод:
public static String getString(MessageKeyProvider provider) {
String key = provider.getKey();
try {
return RESOURCE_BUNDLE.getString(key);
} catch (MissingResourceException e) {
return '!' + key + '!';
}
}
Просто для завершения картины, давайтемы видим RunDialog.properties (я скоро об этом расскажу):
RunDialog.Title=Run
RunDialog.Prompt.Label=Enter the name of the program to run:
RunDialog.Run.Button=Run
RunDialog.Cancel.Button=Cancel
Очевидно, что вы можете использовать Enum для чтения из файла свойств (встраивая ResourceBundle), однако это, вероятно, нарушит принцип единой ответственности(а также «Не повторяйте себя», так как код доступа должен был бы повторяться).
Возвращаясь к файлу свойств, у меня было ощущение (я могу ошибаться здесь), что одна из ваших целей былачтобы избежать дублирования переводов.Вот почему я поставил два прогона в примере выше.Видите ли, это слово будет переводиться по-разному в зависимости от контекста (что на самом деле довольно распространено).В этом примере, если бы я перевёл это на польский, это выглядело бы так:
RunDialog.Title=Uruchamianie
RunDialog.Prompt.Label=Wpisz nazwę programu do uruchomienia:
RunDialog.Run.Button=Uruchom
RunDialog.Cancel.Button=Anuluj
Это печальная проблема какого-то странного языка с понятием сопряжения ...