Лучшие практики для хранения и поиска сообщений об ошибках - PullRequest
4 голосов
/ 08 марта 2010

Каков наилучший способ хранения пользовательских сообщений в файле конфигурации и последующего извлечения их для определенных событий в приложении?

Я думал о том, чтобы иметь 1 единственный файл конфигурации с записями, такими как

REQUIRED_FIELD = {0} is a required field
INVALID_FORMAT = The format for {0} is {1}

и т.д.. а затем вызывать их из класса, который будет что-то вроде этого

public class UIMessages {
    public static final String REQUIRED_FIELD = "REQUIRED_FIELD";
    public static final String INVALID_FORMAT = "INVALID_FORMAT";

    static {
        // load configuration file into a "Properties" object
    }
    public static String getMessage(String messageKey) {
        // 
        return properties.getProperty(messageKey);
    }
}

Это правильный способ решения этой проблемы или уже существует какой-то де-факто стандарт?

Ответы [ 3 ]

8 голосов
/ 09 марта 2010

Вы на правильном пути, поместив сообщения в файл свойств. Java делает это довольно легко, если вы используете ResourceBundle. Вы в основном создаете файл свойств, содержащий ваши строки сообщений для каждой локали, которую вы хотите поддерживать (messages_en.properties, messages_ja.properties), и связываете эти файлы свойств в свой jar. Затем в своем коде вы извлекаете сообщение:

ResourceBundle bundle = ResourceBundle.getBundle("messages");
String text = MessageFormat.format(bundle.getString("ERROR_MESSAGE"), args);

Когда вы загружаете пакет, Java определит, в какой локали вы работаете, и загрузит правильное сообщение. Затем вы передаете свои аргументы вместе со строкой сообщения и создаете локализованное сообщение.

Ссылка для ResourceBundle .

3 голосов
/ 08 марта 2010

Ваш подход почти правильный. Я хочу добавить еще одну вещь. Если вы говорите о конфигурационном файле, всегда лучше иметь два .properties файла.

Один для конфигурации приложения по умолчанию. (скажем defaultProperties.properties)

Второй для пользовательской конфигурации (скажем, appProperties.properties)

. . .
// create and load default properties
Properties defaultProps = new Properties();
FileInputStream in = new FileInputStream("defaultProperties");
defaultProps.load(in);
in.close();

// create application properties with default
Properties applicationProps = new Properties(defaultProps);

// now load properties from last invocation
in = new FileInputStream("appProperties");
applicationProps.load(in);
in.close();
. . .
0 голосов
/ 09 марта 2010

Spring уже поддерживает такие вещи. http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#context-functionality-messagesource будет хорошей отправной точкой

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...