2010-06-28 7 views
2

Je travaille sur une application J2SE (pensez à l'application de style kiosque) qui utilise intensément les bundles de ressources et i18n. Cela inclut non seulement les traductions, mais aussi le formatage et d'autres problèmes liés à l'i18n. Nous avons mis en place une logique personnalisée pour homogénéiser le chargement des ressources, mais c'est assez simple. Le problème que j'ai est le MissingResourceException. Même si je contourne la logique personnalisée en place dans l'application et appelez directement dans la classe ResourceBundle pour charger ce groupe spécifique, Java n'est pas en mesure de le charger pour un environnement local spécifique. Voici l'exception de la racine avec trace de la pile:Java Missing Resource

Caused by: java.util.MissingResourceException: Can't find bundle for base name version1/FormatResource, locale en_GB 
at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:836) 
at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:726) 
at java.util.ResourceBundle.getBundle(ResourceBundle.java:576) 

Le regroupement de ressources est dans un répertoire « version1 » placé dans un dossier de classe dans Eclipse qui est au sommet de mon chemin de classe. Ce dossier contient d'autres groupes de ressources qui sont chargés correctement à l'aide de la même logique de chargement du groupe de ressources, ainsi que de nombreuses configurations XML qui se chargent également correctement lorsqu'elles sont chargées à l'aide du chargeur de classes système. Les fichiers pertinents pour l'ensemble des ressources sont les suivantes:

FormatResource_cs_CZ.properties 
FormatResource_en_GB.properties 
FormatResource_fr_BE.properties 
FormatResource_fr_FR.properties 
FormatResource_hu_HU.properties 
FormatResource_nl_BE.properties 
FormatResource_nl_NL.properties 
FormatResource_pl_PL.properties 
FormatResource_sk_SK.properties 

Quand mon application démarre dans l'environnement local polonais, tout va bien. Si je me connecte en tant qu'utilisateur avec les paramètres régionaux polonais, tout va bien. Si je me connecte en tant qu'utilisateur britannique, l'application tente de charger tous les paquets en_GB (traductions, formateurs, etc.) et échoue sur ce paquet. Il ne peut pas trouver FormatResource_en_GB.properties, ce qui est clairement dans le chemin de la classe: la liste de fichiers ci-dessus est un copier-coller à partir de la ligne de commande.

Un dernier problème que je trouve intéressant est que si je définis FormatResource_en_US.properties dans le répertoire version1, alors même le fichier FormatResource_pl_PL.properties ne se charge pas et l'application ne démarre même pas.

Vous avez des idées?

Répondre

0

Je voudrais essayer de tester le fichier & des problèmes de système d'exploitation comme les autorisations. Renommez votre FormatResource_en_GB.properties afin qu'il soit à l'écart et copiez l'un des fichiers de travail FormatResource à sa place.

0

Je trouve intéressant que vous mentionniez quand vous mettez les Etats-Unis en haut de la liste qu'il charge celui-là et pas un autre (semblable pour quand le polonais était au sommet). Changez-vous les paramètres régionaux lorsque vous recherchez l'ensemble de ressources suivant? ou est-ce qu'il maintient le réglage par défaut lorsque le programme a démarré? Une autre idée est avec les chargeurs de classes .... chaque fois que j'ai rencontré des fichiers de propriétés mal positionnés (même s'ils sont là où je les attend), j'ai fini par regarder comment le classloader charge les choses . Habituellement, il a été différent de ce que je soupçonnais (comme un fichier dupliqué ailleurs, ou plusieurs chargeurs de classe en conflit les uns avec les autres).

Juste deux pensées à essayer.