2010-03-08 4 views
4

Quelle est la meilleure pratique pour stocker des messages utilisateur dans un fichier de configuration, puis les récupérer pour certains événements dans une application?Meilleure pratique pour le stockage et la récupération des messages d'erreur

Je pensais avoir 1 seul fichier de configuration avec des entrées telles que

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

etc., puis les appeler d'une classe qui serait quelque chose comme ça

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

Est-ce le droit façon d'aborder ce problème ou existe-t-il déjà une norme de facto?

Répondre

8

Vous êtes sur la bonne voie en mettant les messages dans un fichier de propriétés. Java rend cela assez facile si vous utilisez ResourceBundle. Vous créez essentiellement un fichier de propriétés contenant vos chaînes de message pour chaque environnement local que vous souhaitez prendre en charge (messages_en.properties, messages_ja.properties) et regroupez ces fichiers de propriétés dans votre fichier jar. Ensuite, dans votre code, vous extrayez le message:

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

Lorsque vous chargez le paquet, Java déterminera que soit la langue que vous utilisez et charger le message correct. Ensuite, vous passez vos args avec la chaîne de message et créez le message localisé.

Référence pour ResourceBundle.

3

Votre approche est presque correcte. Je veux ajouter une chose de plus. Si vous parlez de fichier de configuration, il est toujours préférable d'avoir deux fichiers .properties.

Un pour la configuration par défaut de l'application. (Disons defaultProperties.properties)

deuxième pour la configuration spécifique à l'utilisateur (disons 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(); 
. . . 
Questions connexes