Je suis en train de refactoriser une application de bureau Java existante pour charger des étiquettes de texte d'interface utilisateur internationalisées à partir d'un fichier .properties. Quand dans le cycle de vie de l'application est le moment approprié pour charger le fichier de propriétés et remplir les chaînes en mémoire? L'implémentation existante définit l'étiquette de chaque composant comme par exemple: public static final String foo = "bar";
Il semble inefficace de charger le texte dans le constructeur (puisqu'il sera partagé entre toutes les instances), mais tout faire dans un bloc static {...}
ne semble pas non plus sain d'esprit. Quelle est la meilleure pratique ici? Dans la plupart des applications que j'ai vuSwing I18N: Quand charger les propriétés?
Répondre
, les propriétés sont chargées à partir d'un fichier avant de commencer à construire l'interface utilisateur principale. Ces propriétés sont chargées dans un ResourceBundle qui sera soit
- statique
- donné comme argument à chaque constructeur
Je suggère aux ressources de charge paresseusement. Fondamentalement, créez une fonction pour obtenir votre groupe de ressources qui le charge s'il n'est pas encore là. Ensuite, utilisez-le pour récupérer vos ressources.
Une autre façon de le faire, sans changer le code de panneaux, est d'utiliser une sorte de « injection de ressources ».
Les bibliothèques suivantes effectuent, entre autres choses:
- fuse: exactement ce que fait (mais je ne testé et le projet semble mort maintenant)
- Swing Application Framework: fait beaucoup de choses, y compris des ressources injection. Peut-être vaut une vérification au code source pour prendre ce qui est pertinent pour vous. Notez que le projet est mort, et le code source est assez salissante (peut-être pas facile à extraire code)
- Guts-GUI: est un cadre d'interface graphique complète, y compris l'injection de ressources, mais il est basé sur Guice. Si vous connaissez un peu Guice, le code source de l'injection de ressources doit être facile à comprendre et à extraire du projet.
Dans la plupart des cas, l'injection de ressources est basée sur le nom donné à chaque composante (ce qui est la façon dont App Swing cadre et le travail Guts-GUI, pour Fuse Je ne suis pas sûr). Si les composants ne sont pas nommés correctement, vous avez également quelques options pour les nommer automatiquement (sans changer le code source des panneaux). J'ai mis en place une telle approche dans un paquet Guts-GUI, vous pouvez également vouloir jeter un coup d'oeil. Ensuite, l'injection de ressources est normalement appelée juste avant l'affichage de votre image ou de votre boîte de dialogue (ce sera le seul emplacement de code à modifier dans votre source actuelle, facile si le code d'ouverture des dialogues/trames est centralisé dans une classe). pas répandre tout autour).
J'opterais pour un chargement paresseux. Lorsque vous chargez tout à l'avance, vous augmentez simplement le temps de démarrage de l'application et vous risquez même de charger des tâches qui ne sont même plus nécessaires (plus).
Cette chose statique, vous avez mentionné, par ailleurs, mettrait fin en chargement paresseux de toute façon, puisque la machine virtuelle Java ne chargement paresseux pour les classes.Aussi: lorsque vous utilisez ResourceBundles, gardez à l'esprit qu'ils font une mise en mémoire cache interne, définissant ainsi un
public static final String labelText= "hello world";
ou, pire, initialisant d'un ResourceBundle est plutôt inutile.
plus lire:
- 1. Propriétés Java Swing (addPropertyChangeListener)
- 2. Java EE i18n sans fichiers de propriétés
- 3. Charger les propriétés avant un test
- 4. Quand charger des textures?
- 5. Liste des propriétés de l'interface Java Swing?
- 6. Quand un composant Swing est-il 'affichable'?
- 7. i18n jira problèmes
- 8. i18n avec les fichiers de propriétés codés UTF-8 dans l'application JSF 2.0
- 9. Charger le fichier de propriétés dans JAR?
- 10. Tatukgis, enregistrer et charger les propriétés de la couche
- 11. Quand utiliser Propriétés et quand Mapper en Java?
- 12. Quand utiliser les propriétés plutôt que des fonctions
- 13. Quand les propriétés hal sont-elles mises à jour?
- 14. Quelle est la bonne façon de nommer les propriétés des messages dans i18n?
- 15. Quand doit-uiviewcontrollers être déclarée comme propriétés
- 16. support oracle et i18n
- 17. forme Django et i18n
- 18. Composant GUI de liste de propriétés dans Swing
- 19. authlogic i18n?
- 20. i18n argument d'interpolation manquant
- 21. Java swing: comment détecter quand la souris est au repos
- 22. TreeItem avec I18N GWT
- 23. i18n avec webpy
- 24. Workflow de Sharepoint créer des propriétés de tâche: quand créer des champs et quand créer des propriétés de depepndency?
- 25. ASP.NET MVC 2 i18n
- 26. rails problème date i18n
- 27. locale i18n dans l'URL
- 28. Rails i18n chaînes auto-minuscules?
- 29. Struts i18n app
- 30. Java swing comment faire quand la souris sur une petite boîte pour afficher les détails