Implemented italian and english

This commit is contained in:
SimoneN64
2023-10-22 15:42:48 +02:00
parent 511776748e
commit ccd889e1da
5 changed files with 38 additions and 35 deletions

View File

@@ -1,10 +1,10 @@
#include <Language.hpp> #include <Language.hpp>
namespace Language { namespace Language {
void SetLanguage(const std::array<std::string, STRING_COUNT>& lang, int selectedLang) { void SetLanguage(std::array<std::string, STRING_COUNT>& lang, int selectedLang) {
switch (selectedLang) { switch (selectedLang) {
case AvailableLangs::ENGLISH: std::copy(english.begin(), english.end(), lang.begin()); break; case AvailableLangs::ENGLISH: lang = english; break;
case AvailableLangs::ITALIAN: std::copy(italian.begin(), italian.end(), lang.begin()); break; case AvailableLangs::ITALIAN: lang = italian; break;
default: Util::panic("Language not supported, index {}\n", selectedLang); default: Util::panic("Language not supported, index {}\n", selectedLang);
} }
} }

View File

@@ -23,8 +23,6 @@ enum StringID {
SETTINGS_OPTION_LOCK_CHANNELS, SETTINGS_OPTION_LOCK_CHANNELS,
SETTINGS_OPTION_ENABLE_JIT, SETTINGS_OPTION_ENABLE_JIT,
SETTINGS_OPTION_LANGUAGE, SETTINGS_OPTION_LANGUAGE,
LANGUAGE_ENGLISH,
LANGUAGE_ITALIAN,
STRING_COUNT STRING_COUNT
}; };
@@ -81,5 +79,5 @@ static const std::array<std::string, AVAILABLE_LANGS_COUNT> languages = {
"Italiano" "Italiano"
}; };
void SetLanguage(const std::array<std::string, STRING_COUNT>& lang, int selectedLang); void SetLanguage(std::array<std::string, STRING_COUNT>& lang, int selectedLang);
} }

View File

@@ -5,6 +5,7 @@
#include <Core.hpp> #include <Core.hpp>
namespace fs = std::filesystem; namespace fs = std::filesystem;
#define GET_TRANSLATED_STRING(x) languageStrings[(x)].c_str()
#define checknestedjsonentry(name, type, param1, param2, defaultVal) \ #define checknestedjsonentry(name, type, param1, param2, defaultVal) \
do { \ do { \
@@ -100,45 +101,45 @@ Settings::~Settings() {
void Settings::RenderWidget(bool& show) { void Settings::RenderWidget(bool& show) {
if(show) { if(show) {
ImGui::OpenPopup("Settings"); ImGui::OpenPopup(GET_TRANSLATED_STRING(Language::EMULATION_ITEM_SETTINGS));
if(ImGui::BeginPopupModal(languageStrings[Language::EMULATION_ITEM_SETTINGS].c_str(), &show)) { if(ImGui::BeginPopupModal(GET_TRANSLATED_STRING(Language::EMULATION_ITEM_SETTINGS), &show)) {
enum class SelectedSetting { CPU, Audio, Interface, COUNT }; enum class SelectedSetting { CPU, Audio, Interface, COUNT };
static SelectedSetting selectedSetting = SelectedSetting::CPU; static SelectedSetting selectedSetting = SelectedSetting::CPU;
const char *categories[(int)SelectedSetting::COUNT] = { const char *categories[(int)SelectedSetting::COUNT] = {
languageStrings[Language::SETTINGS_CATEGORY_CPU].c_str(), GET_TRANSLATED_STRING(Language::SETTINGS_CATEGORY_CPU),
languageStrings[Language::SETTINGS_CATEGORY_AUDIO].c_str(), GET_TRANSLATED_STRING(Language::SETTINGS_CATEGORY_AUDIO),
languageStrings[Language::SETTINGS_CATEGORY_INTERFACE].c_str() }; GET_TRANSLATED_STRING(Language::SETTINGS_CATEGORY_INTERFACE)};
CreateComboList("##", (int*)&selectedSetting, categories, (int)SelectedSetting::COUNT); CreateComboList("##categories", (int*)&selectedSetting, categories, (int)SelectedSetting::COUNT);
ImGui::Separator(); ImGui::Separator();
switch (selectedSetting) { switch (selectedSetting) {
case SelectedSetting::Audio: case SelectedSetting::Audio:
ImGui::Checkbox(languageStrings[Language::SETTINGS_OPTION_LOCK_CHANNELS].c_str(), &lockChannels); ImGui::Checkbox(GET_TRANSLATED_STRING(Language::SETTINGS_OPTION_LOCK_CHANNELS), &lockChannels);
ImGui::Checkbox(languageStrings[Language::SETTINGS_OPTION_MUTE].c_str(), &mute); ImGui::Checkbox(GET_TRANSLATED_STRING(Language::SETTINGS_OPTION_MUTE), &mute);
if(mute) { if(mute) {
volumeL = 0; volumeL = 0;
volumeR = 0; volumeR = 0;
ImGui::BeginDisabled(); ImGui::BeginDisabled();
ImGui::SliderFloat(languageStrings[Language::SETTINGS_OPTION_VOLUME_L].c_str(), &oldVolumeL, 0, 1, "%.2f", ImGuiSliderFlags_NoInput); ImGui::SliderFloat(GET_TRANSLATED_STRING(Language::SETTINGS_OPTION_VOLUME_L), &oldVolumeL, 0, 1, "%.2f", ImGuiSliderFlags_NoInput);
if (lockChannels) { if (lockChannels) {
oldVolumeR = oldVolumeL; oldVolumeR = oldVolumeL;
} }
ImGui::SliderFloat(languageStrings[Language::SETTINGS_OPTION_VOLUME_R].c_str(), &oldVolumeR, 0, 1, "%.2f", ImGuiSliderFlags_NoInput); ImGui::SliderFloat(GET_TRANSLATED_STRING(Language::SETTINGS_OPTION_VOLUME_R), &oldVolumeR, 0, 1, "%.2f", ImGuiSliderFlags_NoInput);
ImGui::EndDisabled(); ImGui::EndDisabled();
} }
else { else {
volumeL = oldVolumeL; volumeL = oldVolumeL;
volumeR = oldVolumeR; volumeR = oldVolumeR;
ImGui::SliderFloat(languageStrings[Language::SETTINGS_OPTION_VOLUME_L].c_str(), &volumeL, 0, 1, "%.2f", ImGuiSliderFlags_NoInput); ImGui::SliderFloat(GET_TRANSLATED_STRING(Language::SETTINGS_OPTION_VOLUME_L), &volumeL, 0, 1, "%.2f", ImGuiSliderFlags_NoInput);
if (!lockChannels) { if (!lockChannels) {
ImGui::SliderFloat(languageStrings[Language::SETTINGS_OPTION_VOLUME_R].c_str(), &volumeR, 0, 1, "%.2f", ImGuiSliderFlags_NoInput); ImGui::SliderFloat(GET_TRANSLATED_STRING(Language::SETTINGS_OPTION_VOLUME_R), &volumeR, 0, 1, "%.2f", ImGuiSliderFlags_NoInput);
} }
else { else {
volumeR = volumeL; volumeR = volumeL;
ImGui::BeginDisabled(); ImGui::BeginDisabled();
ImGui::SliderFloat(languageStrings[Language::SETTINGS_OPTION_VOLUME_R].c_str(), &volumeR, 0, 1, "%.2f", ImGuiSliderFlags_NoInput); ImGui::SliderFloat(GET_TRANSLATED_STRING(Language::SETTINGS_OPTION_VOLUME_R), &volumeR, 0, 1, "%.2f", ImGuiSliderFlags_NoInput);
ImGui::EndDisabled(); ImGui::EndDisabled();
} }
@@ -148,14 +149,16 @@ void Settings::RenderWidget(bool& show) {
break; break;
case SelectedSetting::CPU: case SelectedSetting::CPU:
ImGui::Checkbox(languageStrings[Language::SETTINGS_OPTION_ENABLE_JIT].c_str(), &jit); ImGui::Checkbox(GET_TRANSLATED_STRING(Language::SETTINGS_OPTION_ENABLE_JIT), &jit);
break; break;
case SelectedSetting::Interface: { case SelectedSetting::Interface: {
const char* languages[Language::AVAILABLE_LANGS_COUNT] = { const char* languages[Language::AVAILABLE_LANGS_COUNT] = {
Language::languages[0].c_str(), Language::languages[Language::ENGLISH].c_str(),
Language::languages[1].c_str() Language::languages[Language::ITALIAN].c_str()
}; };
CreateComboList("##", &selectedLanguage, languages, Language::AVAILABLE_LANGS_COUNT); ImGui::Text("%s:", GET_TRANSLATED_STRING(Language::SETTINGS_OPTION_LANGUAGE));
CreateComboList("##language", (int*)&selectedLanguage, languages, (int)Language::AVAILABLE_LANGS_COUNT);
ImGui::Separator();
} break; } break;
case SelectedSetting::COUNT: case SelectedSetting::COUNT:
Util::panic("BRUH"); Util::panic("BRUH");

View File

@@ -13,6 +13,7 @@ struct Settings {
[[nodiscard]] FORCE_INLINE float GetVolumeR() const { return volumeR; }; [[nodiscard]] FORCE_INLINE float GetVolumeR() const { return volumeR; };
void RenderWidget(bool& show); void RenderWidget(bool& show);
std::array<std::string, Language::STRING_COUNT> languageStrings{};
private: private:
bool jit = false; bool jit = false;
float volumeL, volumeR; float volumeL, volumeR;
@@ -20,6 +21,5 @@ private:
bool lockChannels = true; bool lockChannels = true;
bool mute = false; bool mute = false;
int selectedLanguage = Language::ENGLISH; int selectedLanguage = Language::ENGLISH;
std::array<std::string, Language::STRING_COUNT> languageStrings{};
json settings; json settings;
}; };

View File

@@ -7,6 +7,7 @@
VkInstance instance{}; VkInstance instance{};
namespace fs = std::filesystem; namespace fs = std::filesystem;
#define GET_TRANSLATED_STRING(x) settings.languageStrings[(x)].c_str()
Window::Window(n64::Core& core) : settings(core) { Window::Window(n64::Core& core) : settings(core) {
InitSDL(); InitSDL();
@@ -16,11 +17,11 @@ Window::Window(n64::Core& core) : settings(core) {
} }
void Window::handleEvents(SDL_Event event, n64::Core& core) { void Window::handleEvents(SDL_Event event, n64::Core& core) {
done = event.window.event == (int)SDL_WINDOWEVENT_CLOSE done = event.window.event == SDL_WINDOWEVENT_CLOSE
&& event.window.windowID == SDL_GetWindowID(window); && event.window.windowID == SDL_GetWindowID(window);
bool minimized = SDL_GetWindowFlags(window) & SDL_WINDOW_MINIMIZED; bool minimized = SDL_GetWindowFlags(window) & SDL_WINDOW_MINIMIZED;
core.pause = event.window.event == (int)SDL_WINDOWEVENT_FOCUS_LOST || minimized; core.pause = event.window.event == SDL_WINDOWEVENT_FOCUS_LOST || minimized;
core.render = !minimized; core.render = !minimized;
} }
@@ -176,8 +177,8 @@ void Window::LoadROM(n64::Core& core, const std::string &path) {
void Window::RenderMainMenuBar(n64::Core &core) { void Window::RenderMainMenuBar(n64::Core &core) {
ImGui::BeginMainMenuBar(); ImGui::BeginMainMenuBar();
if (ImGui::BeginMenu("File")) { if (ImGui::BeginMenu(GET_TRANSLATED_STRING(Language::MENU_FILE))) {
if (ImGui::MenuItem("Open", "O")) { if (ImGui::MenuItem(GET_TRANSLATED_STRING(Language::FILE_ITEM_OPEN), "O")) {
OpenROMDialog(*this, core); OpenROMDialog(*this, core);
} }
if (ImGui::MenuItem("Dump RDRAM")) { if (ImGui::MenuItem("Dump RDRAM")) {
@@ -189,23 +190,24 @@ void Window::RenderMainMenuBar(n64::Core &core) {
if (ImGui::MenuItem("Dump DMEM")) { if (ImGui::MenuItem("Dump DMEM")) {
core.cpu->mem.DumpDMEM(); core.cpu->mem.DumpDMEM();
} }
if (ImGui::MenuItem("Exit")) { if (ImGui::MenuItem(GET_TRANSLATED_STRING(Language::FILE_ITEM_EXIT))) {
done = true; done = true;
} }
ImGui::EndMenu(); ImGui::EndMenu();
} }
if (ImGui::BeginMenu("Emulation")) { if (ImGui::BeginMenu(GET_TRANSLATED_STRING(Language::MENU_EMULATION))) {
if (ImGui::MenuItem("Reset")) { if (ImGui::MenuItem(GET_TRANSLATED_STRING(Language::EMULATION_ITEM_RESET))) {
LoadROM(core, core.rom); LoadROM(core, core.rom);
} }
if (ImGui::MenuItem("Stop")) { if (ImGui::MenuItem(GET_TRANSLATED_STRING(Language::EMULATION_ITEM_STOP))) {
windowTitle = "Kaizen"; windowTitle = "Kaizen";
core.rom.clear(); core.rom.clear();
Util::UpdateRPC(Util::Idling); Util::UpdateRPC(Util::Idling);
SDL_SetWindowTitle(window, windowTitle.c_str()); SDL_SetWindowTitle(window, windowTitle.c_str());
core.Stop(); core.Stop();
} }
if (ImGui::MenuItem(core.pause ? "Resume" : "Pause", nullptr, false, core.romLoaded)) { if (ImGui::MenuItem(core.pause ? GET_TRANSLATED_STRING(Language::EMULATION_ITEM_RESUME)
: GET_TRANSLATED_STRING(Language::EMULATION_ITEM_PAUSE), nullptr, false, core.romLoaded)) {
core.TogglePause(); core.TogglePause();
if(core.pause) { if(core.pause) {
shadowWindowTitle = windowTitle; shadowWindowTitle = windowTitle;
@@ -217,7 +219,7 @@ void Window::RenderMainMenuBar(n64::Core &core) {
} }
SDL_SetWindowTitle(window, windowTitle.c_str()); SDL_SetWindowTitle(window, windowTitle.c_str());
} }
if (ImGui::MenuItem("Settings")) { if (ImGui::MenuItem(GET_TRANSLATED_STRING(Language::EMULATION_ITEM_SETTINGS))) {
showSettings = true; showSettings = true;
} }
ImGui::EndMenu(); ImGui::EndMenu();