Skip to main content
OpenRocket is translated into multiple languages. Translations are stored as Java .properties files in the repository and synchronized with Crowdin, an online translation platform. You can contribute translations either directly via Crowdin or by editing the .properties files in the repository.

How translations work

OpenRocket’s GUI elements never display hard-coded text. Instead, each widget retrieves its label through a Translator object by passing a key:
private static final Translator trans = Application.getTranslator();

JLabel label = new JLabel(trans.get("RocketPanel.lbl.ViewType"));
The Translator looks up the key in the active language file and returns the translated string. If a key is not present in the active language file, it falls back to the English base file.

Language files

All translation files live in core/src/main/resources/l10n/:
  • messages.properties — the English base file; all keys are defined here
  • messages_xx.properties — per-language file, where xx is the IETF language tag (for example, messages_fr.properties for French)

File format

Language files use a simple key-value format. Lines starting with ! are comments:
! RocketPanel
RocketPanel.lbl.ViewType = View Type:
RocketPanel.lbl.Zoom = Zoom:
RocketPanel.lbl.Stability = Stability:
Key naming convention: {ClassName}.{widgetType}.{ShortDescription}. For example, RocketPanel.lbl.ViewType is the ViewType label (lbl) used by the RocketPanel class. The corresponding Dutch translation looks like this:
! RocketPanel
RocketPanel.lbl.ViewType = Weergavetype:
RocketPanel.lbl.Zoom = Zoom:
RocketPanel.lbl.Stability = Stabiliteit:

Modifying an existing translation

1

Find the language file

Open core/src/main/resources/l10n/messages_xx.properties for the language you want to update. For example, messages_fr.properties for French.
2

Edit the translation

Find the key you want to change and update its value. Do not change the key itself — only the translated text on the right-hand side.
3

Submit a pull request

Commit your changes and open a pull request. The maintainers will review and merge the update.If you are not familiar with Git, you can instead open an issue and paste your changes there.

Creating a new translation

1

Create the language file

Create a new file messages_xx.properties in core/src/main/resources/l10n/, where xx is the language code. For example, messages_fi.properties for Finnish.Copy the full contents of messages.properties into the new file, then translate the English values into your language.
2

Register the new locale

Open swing/src/main/java/info/openrocket/swing/gui/util/SwingPreferences.java and add the new language code to the SUPPORTED_LOCALES array:
// Before
for (String lang : new String[] { "en", "ar", "de", "es", "fr", "it", "nl", "ru", "cs", "pl", "ja", "pt", "tr" }) {
// After (adding "fi" for Finnish)
for (String lang : new String[] { "en", "ar", "de", "es", "fr", "it", "nl", "ru", "cs", "pl", "ja", "pt", "tr", "fi" }) {
3

Credit yourself

Add your name to the list of translation contributors in two places:
  • swing/src/main/java/info/openrocket/swing/gui/dialogs/AboutDialog.java — edit the CREDITS string and add your details after the Translations by: tag.
  • README.md — add your name in the translations section.
4

Submit a pull request

Commit all your changes (new language file, SwingPreferences.java, AboutDialog.java, and README.md) and open a pull request.If you are not familiar with Git, open an issue with your translation and the maintainers will handle the pull request for you.
Translated strings that are identical to the English base (for example, abbreviations or proper nouns) can simply be left as-is in the language file. The fallback to English is automatic.