The NautDrafter project has the ability to use a user-selected language for the text in its interface. This is achieved via Java Resource Bundles, which make it easy for users to add their own translations to the app, without having to touch a line of code.
Resource Files
The resource files that contain the string for the NautDrafter user interface can be found in nautdrafter.bundles. These files are named in the format Strings_[ISO 639 alpha-2 or alpha-3 language code]_[ISO 3166 alpha-2 country code].properties. For example; Strings_en_GB.properties.
Current Files
In addition to the default/fallback resource file (the strings for which are in British English), NautDrafter currently also includes similar en_US and en_NZ files which are actively maintained. There are two more files (zh & es) that are for Chinese and Spanish respectively. Both are machine-translated using Google Translate and are only meant as placeholders.
Adding New Languages
To add a new language you must;:
- Create a new
- resources file (a text file) named in the
- format specified above and save it in the same directory as the other resource files.
- To this file, add any strings that differ from the base resource file (Strings.properties)
- .
Your language will automatically be added it into the drop-down list on the login screen and be able to be selected.
It should be noted that if a particular string is missing from the bundle, then it will automatically fall back to the default Strings.properties which is in English (UK). As an example, for en_US only strings that are spelt differently (e.g. color or mom) need to be defined and the rest will fall back to the common English spelling.
Using Localized Strings from Java Code
From anywhere in the main NautDrafter Java code, calling NautDrafter.getBundle()
will give you the appropriate ResourceBundle that should be used whenever you are setting a string that is displayed in the user interface. For example, rather than:
this.textInput.setPromptText("Enter chat message"); // Bad!
use:
this.textInput.setPromptText(NautDrafter.getBundle().getString("chat.prompt")); // Good!
Additionally, if you're loading an FXML file, it is important to pass in the bundle so that the any internationalized strings in the FXML will be displayed in the correct language. For example:
FXMLLoader fxmlLoader = new FXMLLoader(this.getClass().getResource("/com/monkygames/nautdrafter/view/TeamSelectionScreen.fxml"), NautDrafter.getBundle());