Implemented italian and english
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
@@ -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");
|
||||||
|
|||||||
@@ -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;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user