I\'m sure there are a lot of methods, but what\'s the recommended way to do this that has the least amount of impact to your code?
The obvious is that you create pr
As far as I know, some applications use layout/component builders (advised by Karsten Lentzsch, and part of JGoodies API). These builders include the code to localize components (using ResourceBundle under the hood).
Other people (me included) prefer resource injection; this is normally the least intrusive method. This is the way chosen by the Swing Application Framework (JSR-296) and other GUI frameworks like Guts-GUI.
You may also want to take a look at this question which is quite similar to yours.
Regarding changes of language "on the fly" (Locale change notification), I think it is easier to implement when using resource injection (I have implemented this in Guts-GUI already, Swing Application Framework may also have it but I am not sure about it).
Java offers no way to listen to Locale changes, hence you have to create you own "Locale service" (which any Locale change request should be addressed to). In this service, you would have to enumerate all visible windows (this is possible with Window.getWindows(), no need to register visible components before) and then inject resources again.
If you want an example, take a look at the resource package in Guts-GUI source code:
Locale, which sends a notification event (uses an Event Bus for that, but simple listeners would be fine too) about this changeThe interesting code for updating all visible windows is copied hereafter:
for (Window window: Window.getWindows())
{
if (window.isVisible())
{
injectResources(window);
window.repaint();
if (window instanceof RootPaneContainer)
{
((RootPaneContainer) window).getRootPane().revalidate();
}
}
}