Ayyyy, welcome to the UI: Actions Menu → General Improvements PR!
We are soooo back boys and girls.
This is the first PR in a series aimed at delivering the largest overhaul and set of improvements to the Actions menu yet.
This initial PR introduces smaller visual and navigation improvements as part of the broader Actions menu refresh, while also serving as the starting point for locale fracturing across the entirety of Ryujinx. As this is a series of progressive PRs, bug fixes and additional refinements will continue to be rolled out throughout the series.
### GENERAL:
* **Fractured:** A bunch of locales. The following new files, and their designations, were created:
* `MenuBar_Actions.json` - all UI-related locales for the `Actions` menu
* `MenuBar_File.json` - all UI-related locales for the `File` menu
* `Dialog_Firmware.json` - all firmware-related dialog locales
* `Dialog_Keys.json` - all keys-related dialogs locales
* `Error.json` - all error-related locales
* `StatusBar.json` - all UI-related locales for the Status Bar
**NOTE:** To keep this PR manageable, `MenuBar_File.json`, `Error.json`, and `StatusBar.json` were NOT populated with their locales. Additionally, `RenderDoc.json` was deleted and all of its locales were moved to `MenuBar_Actions.json` because all RenderDoc locales are present only in the `Actions` menu.
* **Fixed:** Some typos in `Locales.md`.
### **DEFAULT ACTIONS:**
* **Added:** File picker dialog titles for `Install Firmware` and `Install Keys`.
* `Install Firmware`: "Select an XCI file or a ZIP archive to install firmware from" and "Select a folder to install firmware from".
* `Install Keys`: "Select a KEYS file to install keys from" and "Select a folder to install keys from".
* **Improved:** `Install Firmware` and `Install Keys` submenus.
* Submenus no longer have periods before file extensions; this avoids visual issues in right‑to‑left languages matches other emulators using uppercase extensions (e.g. `Install Firmware` → `Install Firmware (.XCI or .ZIP)` is now `Install Firmware` → `Install Firmware (XCI or ZIP)`).
* Submenus no longer repeat the main menu title; they now show only the specific option, making navigation cleaner (e.g. `Install Firmware` → `Install Firmware (XCI or ZIP)` is now `Install Firmware` → `XCI or ZIP`).
* Submenus now end with an ellipsis; this follows UI conventions that signal additional user input is required (e.g. `Install Firmware` → `XCI or ZIP...`).
* **Moved:** `Manage File Types` menu and submenu.
* These menus let Windows and Linux users associate formats like .xci and .nsp with the emulator so they can be opened by double‑clicking. macOS already handles this automatically when an app supports the format.
* Since this PR focuses on the `Actions` menu, this menu and its submenus have been moved under `File`, with their locales relocated to the new `MenuBar_File.json`.
* This menu is useful but currently too vague about its purpose. A later PR will refine and clarify it.
* **Improved:** `Mii Editor`
* Removed the `Mii Editor` tooltip, as the menu was already self‑explanatory.
* The loading text for the `Mii Editor` is now locale-dynamic, instead of the previously static "miiEdit".
### **IN-GAME ACTIONS:**
* **Updated:** Menu grouping with separators (see images below)
* **Renamed:** `Resume` to `Resume Emulation` and `Pause` to `Pause Emulation`, ensuring consistency with the other options.
* **Fixed:** `Pause Emulation`/`Resume Emulation` UI Bug
* Previously, if a user paused emulation and then exited the game without closing the emulator, the next game launch would incorrectly show `Resume Emulation`, as though the new game were paused.
* **Updated:** `Scan Amiibo` and `Scan Skylander` icons to a chess rook and dragon, making them clearer and more fun than the previous cubes.
* **Added:** Shortcut for `Simulate Wake-up Message`
* Few games support it, but an in‑game shortcut still helps players who use it often.
* **Removed:** `Manage Cheats` from the menu
* `Manage Cheats` doesn't properly work in-game right now, and is removed in this PR. It will be returned to later in Part 4.
Please see the image comparisons below.
_If there are any features or changes that you wish to be implemented, please comment down below and I'll be happy to accommodate!_
Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/42
2.6 KiB
Ryubing Locales
Ryubing Locales uses a custom format, which uses a file for defining the supported languages and a folder of json files for the locales themselves.
Each json file holds the locales for a specific part of the emulator, e.g. the Setup Wizard locales are in SetupWizard.json, and each locale entry in the file includes all the supported languages in the same place.
Languages
In the /assets/ folder you will find the Languages.json file, which defines all the languages supported by the emulator.
The file includes a table of the language codes and their language names.
#Example of the format for Languages.json
{
"Languages": {
"ar_SA": "اَلْعَرَبِيَّةُ",
"en_US": "English (US)",
...
"zh_TW": "繁體中文 (台灣)"
}
}
Locales
In the /assets/Locales/ folder you will find the json files, which define all the locales supported by the emulator.
Each json file holds locales for a specific part of the emulator in a large array of locale objects.
Each locale is made up an ID used for lookup and a list of the languages and their matching translations.
Any empty string or null value will automatically use the English translation instead in the emulator.
Format
When adding a new locale, you just need to add the ID and the en_US language translation, then the validation system will add default values for the rest of languages automatically, when rebuilding the project.
If you want to signal that a translation is supposed to match the English translation, you just have to replace the empty string with null.
When you want to check what translations are missing for a language just search for "<lang_code>": "", e.g: "en_US": "" (but with any other language, as English will never be missing translations).
Legacy file (Root.json)
Currently all older locales are stored in Root.json, but they are slowly being moved into newer, more descriptive json files, to make the locale system more accessible.
Do not add new locales to Root.json.
If no json file exists for the specific part of the emulator you're working on, you should instead add a new json file for that part.
#Example of the format for Root.json
{
"Locales": [
{
"ID": "MenuBarActionsOpenMiiEditor",
"Translations": {
"ar_SA": "",
"en_US": "Mii Editor",
...
"zh_TW": "Mii 編輯器"
}
},
{
"ID": "KeyNumber9",
"Translations": {
"ar_SA": "٩",
"en_US": "9",
...
"zh_TW": null
}
}
]
}