I would like to be able to change the locale in my Swing application at runtime and have all the text elements on the screen update themselves with localized text from a ResourceBundle of the new locale.
Can this be done without customizing swing components or creating UIDelegates for all components that handle rendering localized text?
If no, then what is a good solution I can consider implementing?
use ResourceBundle.getBundle(BUNDLE_NAME).getString(key);
to access the Strings.
when updating the Default Locale e.g. via Locale.setDefault(Locale.GERMAN);
clear the Resourcebundle cache: ResourceBundle.clearCache();
the next call of ResourceBundle.getBundle(BUNDLE_NAME).getString(key);
should the return the localized String of the chosen Locale.
You have a method that is used to change app locale (and probably persist the new value) and another one to get localized strings.
Create an interface:
interface LocaleChangeListener {
void onLocaleChange();
}
Implement it by UI components that need to be able to change locale at runtime and set the new values in overrides onLocaleChange()
.
Now, have a list of listeners that will be notified on locale change by the first method.
You may want to save the language preference out, and then require a restart of the app for changes to take effect.
Then, you should be able to use Locale.setDefault(Locale.<desired language>);
on startup, prior to rendering the GUI. That should properly switch your locale, which will result in the desired .properties file(s) being loaded.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With