1
0
mirror of synced 2025-01-18 00:56:49 +01:00

ui/ux: hexeditor -> hex_editor, Improved performance and flickering when highlighting bytes

This commit is contained in:
WerWolv 2022-02-06 21:02:31 +01:00
parent decfad5c99
commit b3728ae658
12 changed files with 417 additions and 415 deletions

View File

@ -24,7 +24,7 @@ add_library(${PROJECT_NAME} SHARED
source/content/providers/gdb_provider.cpp source/content/providers/gdb_provider.cpp
source/content/providers/disk_provider.cpp source/content/providers/disk_provider.cpp
source/content/views/view_hexeditor.cpp source/content/views/view_hex_editor.cpp
source/content/views/view_pattern_editor.cpp source/content/views/view_pattern_editor.cpp
source/content/views/view_pattern_data.cpp source/content/views/view_pattern_data.cpp
source/content/views/view_hashes.cpp source/content/views/view_hashes.cpp

View File

@ -35,35 +35,35 @@ namespace hex::plugin::builtin {
void registerDataFormatters() { void registerDataFormatters() {
ContentRegistry::DataFormatter::add("hex.builtin.view.hexeditor.copy.c", [](prv::Provider *provider, u64 offset, size_t size) { ContentRegistry::DataFormatter::add("hex.builtin.view.hex_editor.copy.c", [](prv::Provider *provider, u64 offset, size_t size) {
return formatLanguageArray(provider, offset, size, hex::format("const uint8_t data[{0}] = {{", size), "0x{0:02X}, ", "};"); return formatLanguageArray(provider, offset, size, hex::format("const uint8_t data[{0}] = {{", size), "0x{0:02X}, ", "};");
}); });
ContentRegistry::DataFormatter::add("hex.builtin.view.hexeditor.copy.cpp", [](prv::Provider *provider, u64 offset, size_t size) { ContentRegistry::DataFormatter::add("hex.builtin.view.hex_editor.copy.cpp", [](prv::Provider *provider, u64 offset, size_t size) {
return formatLanguageArray(provider, offset, size, hex::format("constexpr std::array<uint8_t, {0}> data = {{", size), "0x{0:02X}, ", "};"); return formatLanguageArray(provider, offset, size, hex::format("constexpr std::array<uint8_t, {0}> data = {{", size), "0x{0:02X}, ", "};");
}); });
ContentRegistry::DataFormatter::add("hex.builtin.view.hexeditor.copy.java", [](prv::Provider *provider, u64 offset, size_t size) { ContentRegistry::DataFormatter::add("hex.builtin.view.hex_editor.copy.java", [](prv::Provider *provider, u64 offset, size_t size) {
return formatLanguageArray(provider, offset, size, "final byte[] data = {", "0x{0:02X}, ", "};"); return formatLanguageArray(provider, offset, size, "final byte[] data = {", "0x{0:02X}, ", "};");
}); });
ContentRegistry::DataFormatter::add("hex.builtin.view.hexeditor.copy.csharp", [](prv::Provider *provider, u64 offset, size_t size) { ContentRegistry::DataFormatter::add("hex.builtin.view.hex_editor.copy.csharp", [](prv::Provider *provider, u64 offset, size_t size) {
return formatLanguageArray(provider, offset, size, "const byte[] data = {", "0x{0:02X}, ", "};"); return formatLanguageArray(provider, offset, size, "const byte[] data = {", "0x{0:02X}, ", "};");
}); });
ContentRegistry::DataFormatter::add("hex.builtin.view.hexeditor.copy.rust", [](prv::Provider *provider, u64 offset, size_t size) { ContentRegistry::DataFormatter::add("hex.builtin.view.hex_editor.copy.rust", [](prv::Provider *provider, u64 offset, size_t size) {
return formatLanguageArray(provider, offset, size, hex::format("let data: [u8; 0x{0:02X}] = [", size), "0x{0:02X}, ", "];"); return formatLanguageArray(provider, offset, size, hex::format("let data: [u8; 0x{0:02X}] = [", size), "0x{0:02X}, ", "];");
}); });
ContentRegistry::DataFormatter::add("hex.builtin.view.hexeditor.copy.python", [](prv::Provider *provider, u64 offset, size_t size) { ContentRegistry::DataFormatter::add("hex.builtin.view.hex_editor.copy.python", [](prv::Provider *provider, u64 offset, size_t size) {
return formatLanguageArray(provider, offset, size, "data = bytes([", "0x{0:02X}, ", "]);"); return formatLanguageArray(provider, offset, size, "data = bytes([", "0x{0:02X}, ", "]);");
}); });
ContentRegistry::DataFormatter::add("hex.builtin.view.hexeditor.copy.js", [](prv::Provider *provider, u64 offset, size_t size) { ContentRegistry::DataFormatter::add("hex.builtin.view.hex_editor.copy.js", [](prv::Provider *provider, u64 offset, size_t size) {
return formatLanguageArray(provider, offset, size, "const data = new Uint8Array([", "0x{0:02X}, ", "]);"); return formatLanguageArray(provider, offset, size, "const data = new Uint8Array([", "0x{0:02X}, ", "]);");
}); });
ContentRegistry::DataFormatter::add("hex.builtin.view.hexeditor.copy.ascii", [](prv::Provider *provider, u64 offset, size_t size) { ContentRegistry::DataFormatter::add("hex.builtin.view.hex_editor.copy.ascii", [](prv::Provider *provider, u64 offset, size_t size) {
std::string result = "Hex View 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F\n\n"; std::string result = "Hex View 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F\n\n";
std::vector<u8> buffer(0x1'0000, 0x00); std::vector<u8> buffer(0x1'0000, 0x00);
@ -105,7 +105,7 @@ namespace hex::plugin::builtin {
return result; return result;
}); });
ContentRegistry::DataFormatter::add("hex.builtin.view.hexeditor.copy.html", [](prv::Provider *provider, u64 offset, size_t size) { ContentRegistry::DataFormatter::add("hex.builtin.view.hex_editor.copy.html", [](prv::Provider *provider, u64 offset, size_t size) {
std::string result = std::string result =
"<div>\n" "<div>\n"
" <style type=\"text/css\">\n" " <style type=\"text/css\">\n"

View File

@ -21,7 +21,7 @@ namespace hex::plugin::builtin {
ImGuiID patternData = ImGui::DockBuilderSplitNode(hexEditor, ImGuiDir_Down, 0.3F, nullptr, &hexEditor); ImGuiID patternData = ImGui::DockBuilderSplitNode(hexEditor, ImGuiDir_Down, 0.3F, nullptr, &hexEditor);
ImGuiID inspector = ImGui::DockBuilderSplitNode(hexEditor, ImGuiDir_Right, 0.3F, nullptr, &hexEditor); ImGuiID inspector = ImGui::DockBuilderSplitNode(hexEditor, ImGuiDir_Right, 0.3F, nullptr, &hexEditor);
openViewAndDockTo("hex.builtin.view.hexeditor.name", hexEditor); openViewAndDockTo("hex.builtin.view.hex_editor.name", hexEditor);
openViewAndDockTo("hex.builtin.view.data_inspector.name", inspector); openViewAndDockTo("hex.builtin.view.data_inspector.name", inspector);
openViewAndDockTo("hex.builtin.view.pattern_data.name", patternData); openViewAndDockTo("hex.builtin.view.pattern_data.name", patternData);

View File

@ -104,7 +104,7 @@ namespace hex::plugin::builtin {
// Save file as // Save file as
ImGui::Disabled([&provider] { ImGui::Disabled([&provider] {
if (ImGui::ToolBarButton(ICON_VS_SAVE_AS, ImGui::GetCustomColorVec4(ImGuiCustomCol_ToolbarBlue))) if (ImGui::ToolBarButton(ICON_VS_SAVE_AS, ImGui::GetCustomColorVec4(ImGuiCustomCol_ToolbarBlue)))
hex::openFileBrowser("hex.builtin.view.hexeditor.save_as"_lang, DialogMode::Save, {}, [&provider](auto path) { hex::openFileBrowser("hex.builtin.view.hex_editor.save_as"_lang, DialogMode::Save, {}, [&provider](auto path) {
provider->saveAs(path); provider->saveAs(path);
}); });
}, },

View File

@ -1,4 +1,4 @@
#include "content/views/view_hexeditor.hpp" #include "content/views/view_hex_editor.hpp"
#include "content/views/view_pattern_editor.hpp" #include "content/views/view_pattern_editor.hpp"
#include "content/views/view_pattern_data.hpp" #include "content/views/view_pattern_data.hpp"
#include "content/views/view_hashes.hpp" #include "content/views/view_hashes.hpp"

View File

@ -1,4 +1,4 @@
#include "content/views/view_hexeditor.hpp" #include "content/views/view_hex_editor.hpp"
#include <hex/api/imhex_api.hpp> #include <hex/api/imhex_api.hpp>
#include <hex/providers/provider.hpp> #include <hex/providers/provider.hpp>
@ -22,7 +22,7 @@
namespace hex::plugin::builtin { namespace hex::plugin::builtin {
ViewHexEditor::ViewHexEditor() : View("hex.builtin.view.hexeditor.name"_lang) { ViewHexEditor::ViewHexEditor() : View("hex.builtin.view.hex_editor.name"_lang) {
this->m_searchStringBuffer.resize(0xFFF, 0x00); this->m_searchStringBuffer.resize(0xFFF, 0x00);
this->m_searchHexBuffer.resize(0xFFF, 0x00); this->m_searchHexBuffer.resize(0xFFF, 0x00);
@ -84,7 +84,7 @@ namespace hex::plugin::builtin {
} }
if (!currColor || !prevColor) { if (!currColor || !prevColor) {
if (_this->m_highlights.size() > 0x10) if (_this->m_highlights.size() > 0x100)
_this->m_highlights.pop_front(); _this->m_highlights.pop_front();
auto blockStartOffset = off - (off % HighlightBlock::Size); auto blockStartOffset = off - (off % HighlightBlock::Size);
@ -125,6 +125,8 @@ namespace hex::plugin::builtin {
} }
_this->m_highlights.push_back(std::move(newBlock)); _this->m_highlights.push_back(std::move(newBlock));
return _this->m_memoryEditor.HighlightFn(data, off, next);
} }
if (next && prevColor != currColor) { if (next && prevColor != currColor) {
@ -169,7 +171,7 @@ namespace hex::plugin::builtin {
}; };
this->m_memoryEditor.DecodeFn = [](const ImU8 *data, size_t addr) -> MemoryEditor::DecodeData { this->m_memoryEditor.DecodeFn = [](const ImU8 *data, size_t addr) -> MemoryEditor::DecodeData {
ViewHexEditor *_this = (ViewHexEditor *)data; auto *_this = (ViewHexEditor *)data;
if (_this->m_currEncodingFile.getLongestSequence() == 0) if (_this->m_currEncodingFile.getLongestSequence() == 0)
return { ".", 1, 0xFFFF8000 }; return { ".", 1, 0xFFFF8000 };
@ -212,12 +214,12 @@ namespace hex::plugin::builtin {
size_t dataSize = (!ImHexApi::Provider::isValid() || !provider->isReadable()) ? 0x00 : provider->getSize(); size_t dataSize = (!ImHexApi::Provider::isValid() || !provider->isReadable()) ? 0x00 : provider->getSize();
this->m_memoryEditor.DrawWindow(View::toWindowName("hex.builtin.view.hexeditor.name").c_str(), &this->getWindowOpenState(), this, dataSize, dataSize == 0 ? 0x00 : provider->getBaseAddress() + provider->getCurrentPageAddress()); this->m_memoryEditor.DrawWindow(View::toWindowName("hex.builtin.view.hex_editor.name").c_str(), &this->getWindowOpenState(), this, dataSize, dataSize == 0 ? 0x00 : provider->getBaseAddress() + provider->getCurrentPageAddress());
if (dataSize != 0x00) { if (dataSize != 0x00) {
this->m_memoryEditor.OptShowAdvancedDecoding = this->m_advancedDecodingEnabled && this->m_currEncodingFile.valid(); this->m_memoryEditor.OptShowAdvancedDecoding = this->m_advancedDecodingEnabled && this->m_currEncodingFile.valid();
if (ImGui::Begin(View::toWindowName("hex.builtin.view.hexeditor.name").c_str())) { if (ImGui::Begin(View::toWindowName("hex.builtin.view.hex_editor.name").c_str())) {
if (ImGui::IsMouseReleased(ImGuiMouseButton_Right) && ImGui::IsWindowHovered(ImGuiHoveredFlags_ChildWindows)) if (ImGui::IsMouseReleased(ImGuiMouseButton_Right) && ImGui::IsWindowHovered(ImGuiHoveredFlags_ChildWindows))
ImGui::OpenPopup("hex.builtin.menu.edit"_lang); ImGui::OpenPopup("hex.builtin.menu.edit"_lang);
@ -253,7 +255,7 @@ namespace hex::plugin::builtin {
ImGui::SameLine(); ImGui::SameLine();
ImGui::SetCursorPosY(linePos); ImGui::SetCursorPosY(linePos);
ImGui::TextFormatted("hex.builtin.view.hexeditor.page"_lang, provider->getCurrentPage() + 1, provider->getPageCount()); ImGui::TextFormatted("hex.builtin.view.hex_editor.page"_lang, provider->getCurrentPage() + 1, provider->getPageCount());
} }
this->drawSearchPopup(); this->drawSearchPopup();
@ -268,7 +270,7 @@ namespace hex::plugin::builtin {
} }
static void saveAs() { static void saveAs() {
hex::openFileBrowser("hex.builtin.view.hexeditor.save_as"_lang, DialogMode::Save, {}, [](const auto &path) { hex::openFileBrowser("hex.builtin.view.hex_editor.save_as"_lang, DialogMode::Save, {}, [](const auto &path) {
ImHexApi::Provider::get()->saveAs(path); ImHexApi::Provider::get()->saveAs(path);
}); });
} }
@ -276,9 +278,9 @@ namespace hex::plugin::builtin {
void ViewHexEditor::drawAlwaysVisible() { void ViewHexEditor::drawAlwaysVisible() {
auto provider = ImHexApi::Provider::get(); auto provider = ImHexApi::Provider::get();
if (ImGui::BeginPopupModal("hex.builtin.view.hexeditor.exit_application.title"_lang, nullptr, ImGuiWindowFlags_AlwaysAutoResize)) { if (ImGui::BeginPopupModal("hex.builtin.view.hex_editor.exit_application.title"_lang, nullptr, ImGuiWindowFlags_AlwaysAutoResize)) {
ImGui::NewLine(); ImGui::NewLine();
ImGui::TextUnformatted("hex.builtin.view.hexeditor.exit_application.desc"_lang); ImGui::TextUnformatted("hex.builtin.view.hex_editor.exit_application.desc"_lang);
ImGui::NewLine(); ImGui::NewLine();
confirmButtons( confirmButtons(
@ -290,15 +292,15 @@ namespace hex::plugin::builtin {
ImGui::EndPopup(); ImGui::EndPopup();
} }
if (ImGui::BeginPopupModal("hex.builtin.view.hexeditor.script.title"_lang, nullptr, ImGuiWindowFlags_AlwaysAutoResize)) { if (ImGui::BeginPopupModal("hex.builtin.view.hex_editor.script.title"_lang, nullptr, ImGuiWindowFlags_AlwaysAutoResize)) {
ImGui::SetCursorPosX(10); ImGui::SetCursorPosX(10);
ImGui::TextFormattedWrapped("{}", static_cast<const char *>("hex.builtin.view.hexeditor.script.desc"_lang)); ImGui::TextFormattedWrapped("{}", static_cast<const char *>("hex.builtin.view.hex_editor.script.desc"_lang));
ImGui::NewLine(); ImGui::NewLine();
ImGui::InputText("##nolabel", this->m_loaderScriptScriptPath.data(), this->m_loaderScriptScriptPath.length(), ImGuiInputTextFlags_ReadOnly); ImGui::InputText("##nolabel", this->m_loaderScriptScriptPath.data(), this->m_loaderScriptScriptPath.length(), ImGuiInputTextFlags_ReadOnly);
ImGui::SameLine(); ImGui::SameLine();
if (ImGui::Button("hex.builtin.view.hexeditor.script.script"_lang)) { if (ImGui::Button("hex.builtin.view.hex_editor.script.script"_lang)) {
hex::openFileBrowser("hex.builtin.view.hexeditor.script.script.title"_lang, DialogMode::Open, { hex::openFileBrowser("hex.builtin.view.hex_editor.script.script.title"_lang, DialogMode::Open, {
{"Python Script", "py"} {"Python Script", "py"}
}, },
[this](const auto &path) { [this](const auto &path) {
@ -307,8 +309,8 @@ namespace hex::plugin::builtin {
} }
ImGui::InputText("##nolabel", this->m_loaderScriptFilePath.data(), this->m_loaderScriptFilePath.length(), ImGuiInputTextFlags_ReadOnly); ImGui::InputText("##nolabel", this->m_loaderScriptFilePath.data(), this->m_loaderScriptFilePath.length(), ImGuiInputTextFlags_ReadOnly);
ImGui::SameLine(); ImGui::SameLine();
if (ImGui::Button("hex.builtin.view.hexeditor.script.file"_lang)) { if (ImGui::Button("hex.builtin.view.hex_editor.script.file"_lang)) {
hex::openFileBrowser("hex.builtin.view.hexeditor.script.file.title"_lang, DialogMode::Open, {}, [this](const auto &path) { hex::openFileBrowser("hex.builtin.view.hex_editor.script.file.title"_lang, DialogMode::Open, {}, [this](const auto &path) {
this->m_loaderScriptFilePath = path.string(); this->m_loaderScriptFilePath = path.string();
}); });
} }
@ -330,7 +332,7 @@ namespace hex::plugin::builtin {
ImGui::EndPopup(); ImGui::EndPopup();
} }
if (ImGui::BeginPopupModal("hex.builtin.view.hexeditor.menu.edit.set_base"_lang, nullptr, ImGuiWindowFlags_AlwaysAutoResize)) { if (ImGui::BeginPopupModal("hex.builtin.view.hex_editor.menu.edit.set_base"_lang, nullptr, ImGuiWindowFlags_AlwaysAutoResize)) {
ImGui::InputText("hex.builtin.common.address"_lang, this->m_baseAddressBuffer, 16, ImGuiInputTextFlags_CharsHexadecimal); ImGui::InputText("hex.builtin.common.address"_lang, this->m_baseAddressBuffer, 16, ImGuiInputTextFlags_CharsHexadecimal);
ImGui::NewLine(); ImGui::NewLine();
@ -345,7 +347,7 @@ namespace hex::plugin::builtin {
ImGui::EndPopup(); ImGui::EndPopup();
} }
if (ImGui::BeginPopupModal("hex.builtin.view.hexeditor.menu.edit.resize"_lang, nullptr, ImGuiWindowFlags_AlwaysAutoResize)) { if (ImGui::BeginPopupModal("hex.builtin.view.hex_editor.menu.edit.resize"_lang, nullptr, ImGuiWindowFlags_AlwaysAutoResize)) {
ImGui::TextUnformatted("0x"); ImGui::TextUnformatted("0x");
ImGui::SameLine(); ImGui::SameLine();
ImGui::InputScalar("hex.builtin.common.size"_lang, ImGuiDataType_U64, &this->m_resizeSize, nullptr, nullptr, "%llx", ImGuiInputTextFlags_CharsHexadecimal); ImGui::InputScalar("hex.builtin.common.size"_lang, ImGuiDataType_U64, &this->m_resizeSize, nullptr, nullptr, "%llx", ImGuiInputTextFlags_CharsHexadecimal);
@ -362,7 +364,7 @@ namespace hex::plugin::builtin {
ImGui::EndPopup(); ImGui::EndPopup();
} }
if (ImGui::BeginPopupModal("hex.builtin.view.hexeditor.menu.edit.insert"_lang, nullptr, ImGuiWindowFlags_AlwaysAutoResize)) { if (ImGui::BeginPopupModal("hex.builtin.view.hex_editor.menu.edit.insert"_lang, nullptr, ImGuiWindowFlags_AlwaysAutoResize)) {
ImGui::TextUnformatted("0x"); ImGui::TextUnformatted("0x");
ImGui::SameLine(); ImGui::SameLine();
ImGui::InputScalar("hex.builtin.common.size"_lang, ImGuiDataType_U64, &this->m_resizeSize, nullptr, nullptr, "%llx", ImGuiInputTextFlags_CharsHexadecimal); ImGui::InputScalar("hex.builtin.common.size"_lang, ImGuiDataType_U64, &this->m_resizeSize, nullptr, nullptr, "%llx", ImGuiInputTextFlags_CharsHexadecimal);
@ -387,7 +389,7 @@ namespace hex::plugin::builtin {
if (auto fileProvider = dynamic_cast<prv::FileProvider *>(provider)) { if (auto fileProvider = dynamic_cast<prv::FileProvider *>(provider)) {
fileProvider->setPath(path); fileProvider->setPath(path);
if (!fileProvider->open()) { if (!fileProvider->open()) {
View::showErrorPopup("hex.builtin.view.hexeditor.error.open"_lang); View::showErrorPopup("hex.builtin.view.hex_editor.error.open"_lang);
ImHexApi::Provider::remove(provider); ImHexApi::Provider::remove(provider);
return; return;
@ -396,13 +398,13 @@ namespace hex::plugin::builtin {
if (!provider->isWritable()) { if (!provider->isWritable()) {
this->m_memoryEditor.ReadOnly = true; this->m_memoryEditor.ReadOnly = true;
View::showErrorPopup("hex.builtin.view.hexeditor.error.read_only"_lang); View::showErrorPopup("hex.builtin.view.hex_editor.error.read_only"_lang);
} else { } else {
this->m_memoryEditor.ReadOnly = false; this->m_memoryEditor.ReadOnly = false;
} }
if (!provider->isAvailable()) { if (!provider->isAvailable()) {
View::showErrorPopup("hex.builtin.view.hexeditor.error.open"_lang); View::showErrorPopup("hex.builtin.view.hex_editor.error.open"_lang);
ImHexApi::Provider::remove(provider); ImHexApi::Provider::remove(provider);
return; return;
@ -607,10 +609,10 @@ namespace hex::plugin::builtin {
ImGui::SetNextWindowPos(ImGui::GetWindowPos() + ImGui::GetWindowContentRegionMin() - ImGui::GetStyle().WindowPadding); ImGui::SetNextWindowPos(ImGui::GetWindowPos() + ImGui::GetWindowContentRegionMin() - ImGui::GetStyle().WindowPadding);
if (ImGui::BeginPopup("hex.builtin.view.hexeditor.menu.file.search"_lang)) { if (ImGui::BeginPopup("hex.builtin.view.hex_editor.menu.file.search"_lang)) {
if (ImGui::BeginTabBar("searchTabs")) { if (ImGui::BeginTabBar("searchTabs")) {
std::vector<char> *currBuffer = nullptr; std::vector<char> *currBuffer = nullptr;
if (ImGui::BeginTabItem("hex.builtin.view.hexeditor.search.string"_lang)) { if (ImGui::BeginTabItem("hex.builtin.view.hex_editor.search.string"_lang)) {
this->m_searchFunction = findString; this->m_searchFunction = findString;
this->m_lastSearchBuffer = &this->m_lastStringSearch; this->m_lastSearchBuffer = &this->m_lastStringSearch;
currBuffer = &this->m_searchStringBuffer; currBuffer = &this->m_searchStringBuffer;
@ -625,7 +627,7 @@ namespace hex::plugin::builtin {
ImGui::EndTabItem(); ImGui::EndTabItem();
} }
if (ImGui::BeginTabItem("hex.builtin.view.hexeditor.search.hex"_lang)) { if (ImGui::BeginTabItem("hex.builtin.view.hex_editor.search.hex"_lang)) {
this->m_searchFunction = findHex; this->m_searchFunction = findHex;
this->m_lastSearchBuffer = &this->m_lastHexSearch; this->m_lastSearchBuffer = &this->m_lastHexSearch;
currBuffer = &this->m_searchHexBuffer; currBuffer = &this->m_searchHexBuffer;
@ -641,16 +643,16 @@ namespace hex::plugin::builtin {
} }
if (currBuffer != nullptr) { if (currBuffer != nullptr) {
if (ImGui::Button("hex.builtin.view.hexeditor.search.find"_lang)) if (ImGui::Button("hex.builtin.view.hex_editor.search.find"_lang))
Find(currBuffer->data()); Find(currBuffer->data());
if (!this->m_lastSearchBuffer->empty()) { if (!this->m_lastSearchBuffer->empty()) {
if ((ImGui::Button("hex.builtin.view.hexeditor.search.find_next"_lang))) if ((ImGui::Button("hex.builtin.view.hex_editor.search.find_next"_lang)))
FindNext(); FindNext();
ImGui::SameLine(); ImGui::SameLine();
if ((ImGui::Button("hex.builtin.view.hexeditor.search.find_prev"_lang))) if ((ImGui::Button("hex.builtin.view.hex_editor.search.find_prev"_lang)))
FindPrevious(); FindPrevious();
} }
} }
@ -668,12 +670,12 @@ namespace hex::plugin::builtin {
auto dataSize = provider->getActualSize(); auto dataSize = provider->getActualSize();
ImGui::SetNextWindowPos(ImGui::GetWindowPos() + ImGui::GetWindowContentRegionMin() - ImGui::GetStyle().WindowPadding); ImGui::SetNextWindowPos(ImGui::GetWindowPos() + ImGui::GetWindowContentRegionMin() - ImGui::GetStyle().WindowPadding);
if (ImGui::BeginPopup("hex.builtin.view.hexeditor.menu.file.goto"_lang)) { if (ImGui::BeginPopup("hex.builtin.view.hex_editor.menu.file.goto"_lang)) {
bool runGoto = false; bool runGoto = false;
if (ImGui::BeginTabBar("gotoTabs")) { if (ImGui::BeginTabBar("gotoTabs")) {
u64 newOffset = 0; u64 newOffset = 0;
if (ImGui::BeginTabItem("hex.builtin.view.hexeditor.goto.offset.absolute"_lang)) { if (ImGui::BeginTabItem("hex.builtin.view.hex_editor.goto.offset.absolute"_lang)) {
ImGui::SetKeyboardFocusHere(); ImGui::SetKeyboardFocusHere();
runGoto = ImGui::InputScalar("hex", ImGuiDataType_U64, &this->m_gotoAddress, nullptr, nullptr, "%llx", ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_EnterReturnsTrue); runGoto = ImGui::InputScalar("hex", ImGuiDataType_U64, &this->m_gotoAddress, nullptr, nullptr, "%llx", ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_EnterReturnsTrue);
@ -684,7 +686,7 @@ namespace hex::plugin::builtin {
ImGui::EndTabItem(); ImGui::EndTabItem();
} }
if (ImGui::BeginTabItem("hex.builtin.view.hexeditor.goto.offset.begin"_lang)) { if (ImGui::BeginTabItem("hex.builtin.view.hex_editor.goto.offset.begin"_lang)) {
ImGui::SetKeyboardFocusHere(); ImGui::SetKeyboardFocusHere();
runGoto = ImGui::InputScalar("hex", ImGuiDataType_U64, &this->m_gotoAddress, nullptr, nullptr, "%llx", ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_EnterReturnsTrue); runGoto = ImGui::InputScalar("hex", ImGuiDataType_U64, &this->m_gotoAddress, nullptr, nullptr, "%llx", ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_EnterReturnsTrue);
@ -695,7 +697,7 @@ namespace hex::plugin::builtin {
ImGui::EndTabItem(); ImGui::EndTabItem();
} }
if (ImGui::BeginTabItem("hex.builtin.view.hexeditor.goto.offset.current"_lang)) { if (ImGui::BeginTabItem("hex.builtin.view.hex_editor.goto.offset.current"_lang)) {
ImGui::SetKeyboardFocusHere(); ImGui::SetKeyboardFocusHere();
runGoto = ImGui::InputScalar("dec", ImGuiDataType_S64, &this->m_gotoAddress, nullptr, nullptr, "%lld", ImGuiInputTextFlags_CharsDecimal | ImGuiInputTextFlags_EnterReturnsTrue); runGoto = ImGui::InputScalar("dec", ImGuiDataType_S64, &this->m_gotoAddress, nullptr, nullptr, "%lld", ImGuiInputTextFlags_CharsDecimal | ImGuiInputTextFlags_EnterReturnsTrue);
@ -710,7 +712,7 @@ namespace hex::plugin::builtin {
ImGui::EndTabItem(); ImGui::EndTabItem();
} }
if (ImGui::BeginTabItem("hex.builtin.view.hexeditor.goto.offset.end"_lang)) { if (ImGui::BeginTabItem("hex.builtin.view.hex_editor.goto.offset.end"_lang)) {
ImGui::SetKeyboardFocusHere(); ImGui::SetKeyboardFocusHere();
runGoto = ImGui::InputScalar("hex", ImGuiDataType_U64, &this->m_gotoAddress, nullptr, nullptr, "%llx", ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_EnterReturnsTrue); runGoto = ImGui::InputScalar("hex", ImGuiDataType_U64, &this->m_gotoAddress, nullptr, nullptr, "%llx", ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_EnterReturnsTrue);
@ -722,7 +724,7 @@ namespace hex::plugin::builtin {
ImGui::EndTabItem(); ImGui::EndTabItem();
} }
if (ImGui::Button("hex.builtin.view.hexeditor.menu.file.goto"_lang) || runGoto) { if (ImGui::Button("hex.builtin.view.hex_editor.menu.file.goto"_lang) || runGoto) {
provider->setCurrentPage(std::floor(double(newOffset - baseAddress) / hex::prv::Provider::PageSize)); provider->setCurrentPage(std::floor(double(newOffset - baseAddress) / hex::prv::Provider::PageSize));
EventManager::post<RequestSelectionChange>(Region { newOffset, 1 }); EventManager::post<RequestSelectionChange>(Region { newOffset, 1 });
} }
@ -737,20 +739,20 @@ namespace hex::plugin::builtin {
void ViewHexEditor::drawEditPopup() { void ViewHexEditor::drawEditPopup() {
auto provider = ImHexApi::Provider::get(); auto provider = ImHexApi::Provider::get();
bool providerValid = ImHexApi::Provider::isValid(); bool providerValid = ImHexApi::Provider::isValid();
if (ImGui::MenuItem("hex.builtin.view.hexeditor.menu.edit.undo"_lang, "CTRL + Z", false, providerValid)) if (ImGui::MenuItem("hex.builtin.view.hex_editor.menu.edit.undo"_lang, "CTRL + Z", false, providerValid))
provider->undo(); provider->undo();
if (ImGui::MenuItem("hex.builtin.view.hexeditor.menu.edit.redo"_lang, "CTRL + Y", false, providerValid)) if (ImGui::MenuItem("hex.builtin.view.hex_editor.menu.edit.redo"_lang, "CTRL + Y", false, providerValid))
provider->redo(); provider->redo();
ImGui::Separator(); ImGui::Separator();
bool bytesSelected = this->m_memoryEditor.DataPreviewAddr != -1 && this->m_memoryEditor.DataPreviewAddrEnd != -1; bool bytesSelected = this->m_memoryEditor.DataPreviewAddr != -1 && this->m_memoryEditor.DataPreviewAddrEnd != -1;
if (ImGui::MenuItem("hex.builtin.view.hexeditor.menu.edit.copy"_lang, "CTRL + C", false, bytesSelected)) if (ImGui::MenuItem("hex.builtin.view.hex_editor.menu.edit.copy"_lang, "CTRL + C", false, bytesSelected))
this->copyBytes(); this->copyBytes();
if (ImGui::BeginMenu("hex.builtin.view.hexeditor.menu.edit.copy_as"_lang, bytesSelected)) { if (ImGui::BeginMenu("hex.builtin.view.hex_editor.menu.edit.copy_as"_lang, bytesSelected)) {
if (ImGui::MenuItem("hex.builtin.view.hexeditor.copy.hex"_lang, "CTRL + SHIFT + C")) if (ImGui::MenuItem("hex.builtin.view.hex_editor.copy.hex"_lang, "CTRL + SHIFT + C"))
this->copyString(); this->copyString();
ImGui::Separator(); ImGui::Separator();
@ -769,15 +771,15 @@ namespace hex::plugin::builtin {
ImGui::EndMenu(); ImGui::EndMenu();
} }
if (ImGui::MenuItem("hex.builtin.view.hexeditor.menu.edit.paste"_lang, "CTRL + V", false, bytesSelected)) if (ImGui::MenuItem("hex.builtin.view.hex_editor.menu.edit.paste"_lang, "CTRL + V", false, bytesSelected))
this->pasteBytes(); this->pasteBytes();
if (ImGui::MenuItem("hex.builtin.view.hexeditor.menu.edit.select_all"_lang, "CTRL + A", false, providerValid)) if (ImGui::MenuItem("hex.builtin.view.hex_editor.menu.edit.select_all"_lang, "CTRL + A", false, providerValid))
EventManager::post<RequestSelectionChange>(Region { provider->getBaseAddress(), provider->getActualSize() }); EventManager::post<RequestSelectionChange>(Region { provider->getBaseAddress(), provider->getActualSize() });
ImGui::Separator(); ImGui::Separator();
if (ImGui::MenuItem("hex.builtin.view.hexeditor.menu.edit.bookmark"_lang, nullptr, false, this->m_memoryEditor.DataPreviewAddr != -1 && this->m_memoryEditor.DataPreviewAddrEnd != -1)) { if (ImGui::MenuItem("hex.builtin.view.hex_editor.menu.edit.bookmark"_lang, nullptr, false, this->m_memoryEditor.DataPreviewAddr != -1 && this->m_memoryEditor.DataPreviewAddrEnd != -1)) {
auto base = ImHexApi::Provider::get()->getBaseAddress(); auto base = ImHexApi::Provider::get()->getBaseAddress();
size_t start = base + std::min(this->m_memoryEditor.DataPreviewAddr, this->m_memoryEditor.DataPreviewAddrEnd); size_t start = base + std::min(this->m_memoryEditor.DataPreviewAddr, this->m_memoryEditor.DataPreviewAddrEnd);
@ -786,22 +788,22 @@ namespace hex::plugin::builtin {
ImHexApi::Bookmarks::add(start, end - start + 1, {}, {}); ImHexApi::Bookmarks::add(start, end - start + 1, {}, {});
} }
if (ImGui::MenuItem("hex.builtin.view.hexeditor.menu.edit.set_base"_lang, nullptr, false, providerValid && provider->isReadable())) { if (ImGui::MenuItem("hex.builtin.view.hex_editor.menu.edit.set_base"_lang, nullptr, false, providerValid && provider->isReadable())) {
std::memset(this->m_baseAddressBuffer, 0x00, sizeof(this->m_baseAddressBuffer)); std::memset(this->m_baseAddressBuffer, 0x00, sizeof(this->m_baseAddressBuffer));
ImHexApi::Tasks::doLater([] { ImGui::OpenPopup("hex.builtin.view.hexeditor.menu.edit.set_base"_lang); }); ImHexApi::Tasks::doLater([] { ImGui::OpenPopup("hex.builtin.view.hex_editor.menu.edit.set_base"_lang); });
} }
if (ImGui::MenuItem("hex.builtin.view.hexeditor.menu.edit.resize"_lang, nullptr, false, providerValid && provider->isResizable())) { if (ImGui::MenuItem("hex.builtin.view.hex_editor.menu.edit.resize"_lang, nullptr, false, providerValid && provider->isResizable())) {
ImHexApi::Tasks::doLater([this] { ImHexApi::Tasks::doLater([this] {
this->m_resizeSize = ImHexApi::Provider::get()->getActualSize(); this->m_resizeSize = ImHexApi::Provider::get()->getActualSize();
ImGui::OpenPopup("hex.builtin.view.hexeditor.menu.edit.resize"_lang); ImGui::OpenPopup("hex.builtin.view.hex_editor.menu.edit.resize"_lang);
}); });
} }
if (ImGui::MenuItem("hex.builtin.view.hexeditor.menu.edit.insert"_lang, nullptr, false, providerValid && provider->isResizable())) { if (ImGui::MenuItem("hex.builtin.view.hex_editor.menu.edit.insert"_lang, nullptr, false, providerValid && provider->isResizable())) {
ImHexApi::Tasks::doLater([this] { ImHexApi::Tasks::doLater([this] {
this->m_resizeSize = 0; this->m_resizeSize = 0;
ImGui::OpenPopup("hex.builtin.view.hexeditor.menu.edit.insert"_lang); ImGui::OpenPopup("hex.builtin.view.hex_editor.menu.edit.insert"_lang);
}); });
} }
} }
@ -835,17 +837,17 @@ namespace hex::plugin::builtin {
EventManager::subscribe<EventWindowClosing>(this, [](GLFWwindow *window) { EventManager::subscribe<EventWindowClosing>(this, [](GLFWwindow *window) {
if (ProjectFile::hasUnsavedChanges()) { if (ProjectFile::hasUnsavedChanges()) {
glfwSetWindowShouldClose(window, GLFW_FALSE); glfwSetWindowShouldClose(window, GLFW_FALSE);
ImHexApi::Tasks::doLater([] { ImGui::OpenPopup("hex.builtin.view.hexeditor.exit_application.title"_lang); }); ImHexApi::Tasks::doLater([] { ImGui::OpenPopup("hex.builtin.view.hex_editor.exit_application.title"_lang); });
} }
}); });
EventManager::subscribe<RequestOpenWindow>(this, [this](std::string name) { EventManager::subscribe<RequestOpenWindow>(this, [this](std::string name) {
if (name == "Create File") { if (name == "Create File") {
hex::openFileBrowser("hex.builtin.view.hexeditor.create_file"_lang, DialogMode::Save, {}, [this](const auto &path) { hex::openFileBrowser("hex.builtin.view.hex_editor.create_file"_lang, DialogMode::Save, {}, [this](const auto &path) {
File file(path, File::Mode::Create); File file(path, File::Mode::Create);
if (!file.isValid()) { if (!file.isValid()) {
View::showErrorPopup("hex.builtin.view.hexeditor.error.create"_lang); View::showErrorPopup("hex.builtin.view.hex_editor.error.create"_lang);
return; return;
} }
@ -855,12 +857,12 @@ namespace hex::plugin::builtin {
this->getWindowOpenState() = true; this->getWindowOpenState() = true;
}); });
} else if (name == "Open File") { } else if (name == "Open File") {
hex::openFileBrowser("hex.builtin.view.hexeditor.open_file"_lang, DialogMode::Open, {}, [this](const auto &path) { hex::openFileBrowser("hex.builtin.view.hex_editor.open_file"_lang, DialogMode::Open, {}, [this](const auto &path) {
EventManager::post<RequestOpenFile>(path); EventManager::post<RequestOpenFile>(path);
this->getWindowOpenState() = true; this->getWindowOpenState() = true;
}); });
} else if (name == "Open Project") { } else if (name == "Open Project") {
hex::openFileBrowser("hex.builtin.view.hexeditor.open_project"_lang, DialogMode::Open, { hex::openFileBrowser("hex.builtin.view.hex_editor.open_project"_lang, DialogMode::Open, {
{"Project File", "hexproj"} {"Project File", "hexproj"}
}, },
[this](const auto &path) { [this](const auto &path) {
@ -962,15 +964,15 @@ namespace hex::plugin::builtin {
ShortcutManager::addShortcut(this, CTRL + Keys::F, [] { ShortcutManager::addShortcut(this, CTRL + Keys::F, [] {
ImGui::OpenPopupInWindow(View::toWindowName("hex.builtin.view.hexeditor.name").c_str(), "hex.builtin.view.hexeditor.menu.file.search"_lang); ImGui::OpenPopupInWindow(View::toWindowName("hex.builtin.view.hex_editor.name").c_str(), "hex.builtin.view.hex_editor.menu.file.search"_lang);
}); });
ShortcutManager::addShortcut(this, CTRL + Keys::G, [] { ShortcutManager::addShortcut(this, CTRL + Keys::G, [] {
ImGui::OpenPopupInWindow(View::toWindowName("hex.builtin.view.hexeditor.name").c_str(), "hex.builtin.view.hexeditor.menu.file.goto"_lang); ImGui::OpenPopupInWindow(View::toWindowName("hex.builtin.view.hex_editor.name").c_str(), "hex.builtin.view.hex_editor.menu.file.goto"_lang);
}); });
ShortcutManager::addShortcut(this, CTRL + Keys::O, [] { ShortcutManager::addShortcut(this, CTRL + Keys::O, [] {
hex::openFileBrowser("hex.builtin.view.hexeditor.open_file"_lang, DialogMode::Open, {}, [](const auto &path) { hex::openFileBrowser("hex.builtin.view.hex_editor.open_file"_lang, DialogMode::Open, {}, [](const auto &path) {
EventManager::post<RequestOpenFile>(path); EventManager::post<RequestOpenFile>(path);
}); });
}); });
@ -1003,21 +1005,21 @@ namespace hex::plugin::builtin {
bool providerValid = ImHexApi::Provider::isValid(); bool providerValid = ImHexApi::Provider::isValid();
if (ImGui::MenuItem("hex.builtin.view.hexeditor.menu.file.save"_lang, "CTRL + S", false, providerValid && provider->isWritable())) { if (ImGui::MenuItem("hex.builtin.view.hex_editor.menu.file.save"_lang, "CTRL + S", false, providerValid && provider->isWritable())) {
save(); save();
} }
if (ImGui::MenuItem("hex.builtin.view.hexeditor.menu.file.save_as"_lang, "CTRL + SHIFT + S", false, providerValid && provider->isWritable())) { if (ImGui::MenuItem("hex.builtin.view.hex_editor.menu.file.save_as"_lang, "CTRL + SHIFT + S", false, providerValid && provider->isWritable())) {
saveAs(); saveAs();
} }
if (ImGui::MenuItem("hex.builtin.view.hexeditor.menu.file.close"_lang, "", false, providerValid)) { if (ImGui::MenuItem("hex.builtin.view.hex_editor.menu.file.close"_lang, "", false, providerValid)) {
EventManager::post<EventFileUnloaded>(); EventManager::post<EventFileUnloaded>();
ImHexApi::Provider::remove(ImHexApi::Provider::get()); ImHexApi::Provider::remove(ImHexApi::Provider::get());
providerValid = false; providerValid = false;
} }
if (ImGui::MenuItem("hex.builtin.view.hexeditor.menu.file.quit"_lang, "", false)) { if (ImGui::MenuItem("hex.builtin.view.hex_editor.menu.file.quit"_lang, "", false)) {
ImHexApi::Common::closeImHex(); ImHexApi::Common::closeImHex();
} }
}); });
@ -1028,8 +1030,8 @@ namespace hex::plugin::builtin {
auto provider = ImHexApi::Provider::get(); auto provider = ImHexApi::Provider::get();
bool providerValid = ImHexApi::Provider::isValid(); bool providerValid = ImHexApi::Provider::isValid();
if (ImGui::MenuItem("hex.builtin.view.hexeditor.menu.file.open_project"_lang, "")) { if (ImGui::MenuItem("hex.builtin.view.hex_editor.menu.file.open_project"_lang, "")) {
hex::openFileBrowser("hex.builtin.view.hexeditor.menu.file.open_project"_lang, DialogMode::Open, { hex::openFileBrowser("hex.builtin.view.hex_editor.menu.file.open_project"_lang, DialogMode::Open, {
{"Project File", "hexproj"} {"Project File", "hexproj"}
}, },
[](const auto &path) { [](const auto &path) {
@ -1037,9 +1039,9 @@ namespace hex::plugin::builtin {
}); });
} }
if (ImGui::MenuItem("hex.builtin.view.hexeditor.menu.file.save_project"_lang, "", false, providerValid && provider->isWritable())) { if (ImGui::MenuItem("hex.builtin.view.hex_editor.menu.file.save_project"_lang, "", false, providerValid && provider->isWritable())) {
if (ProjectFile::getProjectFilePath() == "") { if (ProjectFile::getProjectFilePath() == "") {
hex::openFileBrowser("hex.builtin.view.hexeditor.save_project"_lang, DialogMode::Save, { hex::openFileBrowser("hex.builtin.view.hex_editor.save_project"_lang, DialogMode::Save, {
{"Project File", "hexproj"} {"Project File", "hexproj"}
}, },
[](const auto &path) { [](const auto &path) {
@ -1053,7 +1055,7 @@ namespace hex::plugin::builtin {
ProjectFile::store(); ProjectFile::store();
} }
if (ImGui::MenuItem("hex.builtin.view.hexeditor.menu.file.load_encoding_file"_lang)) { if (ImGui::MenuItem("hex.builtin.view.hex_editor.menu.file.load_encoding_file"_lang)) {
std::vector<fs::path> paths; std::vector<fs::path> paths;
for (const auto &path : hex::getPath(ImHexPath::Encodings)) { for (const auto &path : hex::getPath(ImHexPath::Encodings)) {
for (const auto &entry : fs::recursive_directory_iterator(path)) { for (const auto &entry : fs::recursive_directory_iterator(path)) {
@ -1079,13 +1081,13 @@ namespace hex::plugin::builtin {
bool providerValid = ImHexApi::Provider::isValid(); bool providerValid = ImHexApi::Provider::isValid();
/* Import */ /* Import */
if (ImGui::BeginMenu("hex.builtin.view.hexeditor.menu.file.import"_lang)) { if (ImGui::BeginMenu("hex.builtin.view.hex_editor.menu.file.import"_lang)) {
if (ImGui::MenuItem("hex.builtin.view.hexeditor.menu.file.import.base64"_lang)) { if (ImGui::MenuItem("hex.builtin.view.hex_editor.menu.file.import.base64"_lang)) {
hex::openFileBrowser("hex.builtin.view.hexeditor.menu.file.import.base64"_lang, DialogMode::Open, {}, [this](const auto &path) { hex::openFileBrowser("hex.builtin.view.hex_editor.menu.file.import.base64"_lang, DialogMode::Open, {}, [this](const auto &path) {
File file(path, File::Mode::Read); File file(path, File::Mode::Read);
if (!file.isValid()) { if (!file.isValid()) {
View::showErrorPopup("hex.builtin.view.hexeditor.error.open"_lang); View::showErrorPopup("hex.builtin.view.hex_editor.error.open"_lang);
return; return;
} }
@ -1095,22 +1097,22 @@ namespace hex::plugin::builtin {
this->m_dataToSave = crypt::decode64(base64); this->m_dataToSave = crypt::decode64(base64);
if (this->m_dataToSave.empty()) if (this->m_dataToSave.empty())
View::showErrorPopup("hex.builtin.view.hexeditor.base64.import_error"_lang); View::showErrorPopup("hex.builtin.view.hex_editor.base64.import_error"_lang);
else else
ImGui::OpenPopup("hex.builtin.view.hexeditor.save_data"_lang); ImGui::OpenPopup("hex.builtin.view.hex_editor.save_data"_lang);
this->getWindowOpenState() = true; this->getWindowOpenState() = true;
} else View::showErrorPopup("hex.builtin.view.hexeditor.file_open_error"_lang); } else View::showErrorPopup("hex.builtin.view.hex_editor.file_open_error"_lang);
}); });
} }
ImGui::Separator(); ImGui::Separator();
if (ImGui::MenuItem("hex.builtin.view.hexeditor.menu.file.import.ips"_lang, nullptr, false, !this->m_processingImportExport)) { if (ImGui::MenuItem("hex.builtin.view.hex_editor.menu.file.import.ips"_lang, nullptr, false, !this->m_processingImportExport)) {
hex::openFileBrowser("hex.builtin.view.hexeditor.open_file"_lang, DialogMode::Open, {}, [this](const auto &path) { hex::openFileBrowser("hex.builtin.view.hex_editor.open_file"_lang, DialogMode::Open, {}, [this](const auto &path) {
this->m_processingImportExport = true; this->m_processingImportExport = true;
std::thread([this, path] { std::thread([this, path] {
auto task = ImHexApi::Tasks::createTask("hex.builtin.view.hexeditor.processing", 0); auto task = ImHexApi::Tasks::createTask("hex.builtin.view.hex_editor.processing", 0);
auto patchData = File(path, File::Mode::Read).readBytes(); auto patchData = File(path, File::Mode::Read).readBytes();
auto patch = hex::loadIPSPatch(patchData); auto patch = hex::loadIPSPatch(patchData);
@ -1134,11 +1136,11 @@ namespace hex::plugin::builtin {
}); });
} }
if (ImGui::MenuItem("hex.builtin.view.hexeditor.menu.file.import.ips32"_lang, nullptr, false, !this->m_processingImportExport)) { if (ImGui::MenuItem("hex.builtin.view.hex_editor.menu.file.import.ips32"_lang, nullptr, false, !this->m_processingImportExport)) {
hex::openFileBrowser("hex.builtin.view.hexeditor.open_file"_lang, DialogMode::Open, {}, [this](const auto &path) { hex::openFileBrowser("hex.builtin.view.hex_editor.open_file"_lang, DialogMode::Open, {}, [this](const auto &path) {
this->m_processingImportExport = true; this->m_processingImportExport = true;
std::thread([this, path] { std::thread([this, path] {
auto task = ImHexApi::Tasks::createTask("hex.builtin.view.hexeditor.processing", 0); auto task = ImHexApi::Tasks::createTask("hex.builtin.view.hex_editor.processing", 0);
auto patchData = File(path, File::Mode::Read).readBytes(); auto patchData = File(path, File::Mode::Read).readBytes();
auto patch = hex::loadIPS32Patch(patchData); auto patch = hex::loadIPS32Patch(patchData);
@ -1162,10 +1164,10 @@ namespace hex::plugin::builtin {
}); });
} }
if (ImGui::MenuItem("hex.builtin.view.hexeditor.menu.file.import.script"_lang)) { if (ImGui::MenuItem("hex.builtin.view.hex_editor.menu.file.import.script"_lang)) {
this->m_loaderScriptFilePath.clear(); this->m_loaderScriptFilePath.clear();
this->m_loaderScriptScriptPath.clear(); this->m_loaderScriptScriptPath.clear();
ImHexApi::Tasks::doLater([] { ImGui::OpenPopup("hex.builtin.view.hexeditor.script.title"_lang); }); ImHexApi::Tasks::doLater([] { ImGui::OpenPopup("hex.builtin.view.hex_editor.script.title"_lang); });
} }
ImGui::EndMenu(); ImGui::EndMenu();
@ -1173,8 +1175,8 @@ namespace hex::plugin::builtin {
/* Export */ /* Export */
if (ImGui::BeginMenu("hex.builtin.view.hexeditor.menu.file.export"_lang, providerValid && provider->isWritable())) { if (ImGui::BeginMenu("hex.builtin.view.hex_editor.menu.file.export"_lang, providerValid && provider->isWritable())) {
if (ImGui::MenuItem("hex.builtin.view.hexeditor.menu.file.export.ips"_lang, nullptr, false, !this->m_processingImportExport)) { if (ImGui::MenuItem("hex.builtin.view.hex_editor.menu.file.export.ips"_lang, nullptr, false, !this->m_processingImportExport)) {
Patches patches = provider->getPatches(); Patches patches = provider->getPatches();
if (!patches.contains(0x00454F45) && patches.contains(0x00454F46)) { if (!patches.contains(0x00454F45) && patches.contains(0x00454F46)) {
u8 value = 0; u8 value = 0;
@ -1184,16 +1186,16 @@ namespace hex::plugin::builtin {
this->m_processingImportExport = true; this->m_processingImportExport = true;
std::thread([this, patches] { std::thread([this, patches] {
auto task = ImHexApi::Tasks::createTask("hex.builtin.view.hexeditor.processing", 0); auto task = ImHexApi::Tasks::createTask("hex.builtin.view.hex_editor.processing", 0);
this->m_dataToSave = generateIPSPatch(patches); this->m_dataToSave = generateIPSPatch(patches);
this->m_processingImportExport = false; this->m_processingImportExport = false;
ImHexApi::Tasks::doLater([this] { ImHexApi::Tasks::doLater([this] {
hex::openFileBrowser("hex.builtin.view.hexeditor.menu.file.export.title"_lang, DialogMode::Save, {}, [this](const auto &path) { hex::openFileBrowser("hex.builtin.view.hex_editor.menu.file.export.title"_lang, DialogMode::Save, {}, [this](const auto &path) {
auto file = File(path, File::Mode::Create); auto file = File(path, File::Mode::Create);
if (!file.isValid()) { if (!file.isValid()) {
View::showErrorPopup("hex.builtin.view.hexeditor.error.create"_lang); View::showErrorPopup("hex.builtin.view.hex_editor.error.create"_lang);
return; return;
} }
@ -1203,7 +1205,7 @@ namespace hex::plugin::builtin {
}).detach(); }).detach();
} }
if (ImGui::MenuItem("hex.builtin.view.hexeditor.menu.file.export.ips32"_lang, nullptr, false, !this->m_processingImportExport)) { if (ImGui::MenuItem("hex.builtin.view.hex_editor.menu.file.export.ips32"_lang, nullptr, false, !this->m_processingImportExport)) {
Patches patches = provider->getPatches(); Patches patches = provider->getPatches();
if (!patches.contains(0x00454F45) && patches.contains(0x45454F46)) { if (!patches.contains(0x00454F45) && patches.contains(0x45454F46)) {
u8 value = 0; u8 value = 0;
@ -1213,16 +1215,16 @@ namespace hex::plugin::builtin {
this->m_processingImportExport = true; this->m_processingImportExport = true;
std::thread([this, patches] { std::thread([this, patches] {
auto task = ImHexApi::Tasks::createTask("hex.builtin.view.hexeditor.processing", 0); auto task = ImHexApi::Tasks::createTask("hex.builtin.view.hex_editor.processing", 0);
this->m_dataToSave = generateIPS32Patch(patches); this->m_dataToSave = generateIPS32Patch(patches);
this->m_processingImportExport = false; this->m_processingImportExport = false;
ImHexApi::Tasks::doLater([this] { ImHexApi::Tasks::doLater([this] {
hex::openFileBrowser("hex.builtin.view.hexeditor.menu.file.export.title"_lang, DialogMode::Save, {}, [this](const auto &path) { hex::openFileBrowser("hex.builtin.view.hex_editor.menu.file.export.title"_lang, DialogMode::Save, {}, [this](const auto &path) {
auto file = File(path, File::Mode::Create); auto file = File(path, File::Mode::Create);
if (!file.isValid()) { if (!file.isValid()) {
View::showErrorPopup("hex.builtin.view.hexeditor.error.create"_lang); View::showErrorPopup("hex.builtin.view.hex_editor.error.create"_lang);
return; return;
} }
@ -1239,14 +1241,14 @@ namespace hex::plugin::builtin {
/* Search / Goto */ /* Search / Goto */
ContentRegistry::Interface::addMenuItem("hex.builtin.menu.file", 1400, [&, this] { ContentRegistry::Interface::addMenuItem("hex.builtin.menu.file", 1400, [&, this] {
if (ImGui::MenuItem("hex.builtin.view.hexeditor.menu.file.search"_lang, "CTRL + F")) { if (ImGui::MenuItem("hex.builtin.view.hex_editor.menu.file.search"_lang, "CTRL + F")) {
this->getWindowOpenState() = true; this->getWindowOpenState() = true;
ImGui::OpenPopupInWindow(View::toWindowName("hex.builtin.view.hexeditor.name").c_str(), "hex.builtin.view.hexeditor.menu.file.search"_lang); ImGui::OpenPopupInWindow(View::toWindowName("hex.builtin.view.hex_editor.name").c_str(), "hex.builtin.view.hex_editor.menu.file.search"_lang);
} }
if (ImGui::MenuItem("hex.builtin.view.hexeditor.menu.file.goto"_lang, "CTRL + G")) { if (ImGui::MenuItem("hex.builtin.view.hex_editor.menu.file.goto"_lang, "CTRL + G")) {
this->getWindowOpenState() = true; this->getWindowOpenState() = true;
ImGui::OpenPopupInWindow(View::toWindowName("hex.builtin.view.hexeditor.name").c_str(), "hex.builtin.view.hexeditor.menu.file.goto"_lang); ImGui::OpenPopupInWindow(View::toWindowName("hex.builtin.view.hex_editor.name").c_str(), "hex.builtin.view.hex_editor.menu.file.goto"_lang);
} }
}); });

View File

@ -407,14 +407,14 @@ namespace hex::plugin::builtin {
}); });
ContentRegistry::Interface::addMenuItem("hex.builtin.menu.file", 1050, [&] { ContentRegistry::Interface::addMenuItem("hex.builtin.menu.file", 1050, [&] {
if (ImGui::MenuItem("hex.builtin.view.hexeditor.menu.file.open_file"_lang, "CTRL + O")) { if (ImGui::MenuItem("hex.builtin.view.hex_editor.menu.file.open_file"_lang, "CTRL + O")) {
hex::openFileBrowser("hex.builtin.view.hexeditor.open_file"_lang, DialogMode::Open, {}, [](const auto &path) { hex::openFileBrowser("hex.builtin.view.hex_editor.open_file"_lang, DialogMode::Open, {}, [](const auto &path) {
EventManager::post<RequestOpenFile>(path); EventManager::post<RequestOpenFile>(path);
}); });
} }
if (ImGui::BeginMenu("hex.builtin.view.hexeditor.menu.file.open_recent"_lang, !s_recentFilePaths.empty())) { if (ImGui::BeginMenu("hex.builtin.view.hex_editor.menu.file.open_recent"_lang, !s_recentFilePaths.empty())) {
for (auto &path : s_recentFilePaths) { for (auto &path : s_recentFilePaths) {
if (ImGui::MenuItem(fs::path(path).filename().string().c_str())) { if (ImGui::MenuItem(fs::path(path).filename().string().c_str())) {
EventManager::post<RequestOpenFile>(path); EventManager::post<RequestOpenFile>(path);
@ -422,7 +422,7 @@ namespace hex::plugin::builtin {
} }
ImGui::Separator(); ImGui::Separator();
if (ImGui::MenuItem("hex.builtin.view.hexeditor.menu.file.clear_recent"_lang)) { if (ImGui::MenuItem("hex.builtin.view.hex_editor.menu.file.clear_recent"_lang)) {
s_recentFilePaths.clear(); s_recentFilePaths.clear();
ContentRegistry::Settings::write( ContentRegistry::Settings::write(
"hex.builtin.setting.imhex", "hex.builtin.setting.imhex",
@ -433,7 +433,7 @@ namespace hex::plugin::builtin {
ImGui::EndMenu(); ImGui::EndMenu();
} }
if (ImGui::BeginMenu("hex.builtin.view.hexeditor.menu.file.open_other"_lang)) { if (ImGui::BeginMenu("hex.builtin.view.hex_editor.menu.file.open_other"_lang)) {
for (const auto &unlocalizedProviderName : ContentRegistry::Provider::getEntries()) { for (const auto &unlocalizedProviderName : ContentRegistry::Provider::getEntries()) {
if (ImGui::MenuItem(LangEntry(unlocalizedProviderName))) { if (ImGui::MenuItem(LangEntry(unlocalizedProviderName))) {

View File

@ -201,83 +201,83 @@ namespace hex::plugin::builtin {
{ "hex.builtin.view.help.pattern_cheat_sheet", "Pattern Language Cheat Sheet"}, { "hex.builtin.view.help.pattern_cheat_sheet", "Pattern Language Cheat Sheet"},
{ "hex.builtin.view.help.calc_cheat_sheet", "Rechner Cheat Sheet" }, { "hex.builtin.view.help.calc_cheat_sheet", "Rechner Cheat Sheet" },
{ "hex.builtin.view.hexeditor.name", "Hex editor" }, { "hex.builtin.view.hex_editor.name", "Hex editor" },
{ "hex.builtin.view.hexeditor.create_file", "Neu" }, { "hex.builtin.view.hex_editor.create_file", "Neu" },
{ "hex.builtin.view.hexeditor.open_file", "Öffnen" }, { "hex.builtin.view.hex_editor.open_file", "Öffnen" },
{ "hex.builtin.view.hexeditor.open_project", "Projekt öffnen" }, { "hex.builtin.view.hex_editor.open_project", "Projekt öffnen" },
{ "hex.builtin.view.hexeditor.save_project", "Projekt speichern" }, { "hex.builtin.view.hex_editor.save_project", "Projekt speichern" },
{ "hex.builtin.view.hexeditor.save_data", "Daten speichern" }, { "hex.builtin.view.hex_editor.save_data", "Daten speichern" },
{ "hex.builtin.view.hexeditor.open_base64", "Base64 Datei öffnen" }, { "hex.builtin.view.hex_editor.open_base64", "Base64 Datei öffnen" },
{ "hex.builtin.view.hexeditor.load_enconding_file", "Custom encoding Datei laden" }, { "hex.builtin.view.hex_editor.load_enconding_file", "Custom encoding Datei laden" },
{ "hex.builtin.view.hexeditor.page", "Seite {0} / {1}" }, { "hex.builtin.view.hex_editor.page", "Seite {0} / {1}" },
{ "hex.builtin.view.hexeditor.save_as", "Speichern unter" }, { "hex.builtin.view.hex_editor.save_as", "Speichern unter" },
{ "hex.builtin.view.hexeditor.exit_application.title", "Applikation verlassen?" }, { "hex.builtin.view.hex_editor.exit_application.title", "Applikation verlassen?" },
{ "hex.builtin.view.hexeditor.exit_application.desc", "Es wurden ungespeicherte Änderungen an diesem Projekt vorgenommen\nBist du sicher, dass du ImHex schliessen willst?" }, { "hex.builtin.view.hex_editor.exit_application.desc", "Es wurden ungespeicherte Änderungen an diesem Projekt vorgenommen\nBist du sicher, dass du ImHex schliessen willst?" },
{ "hex.builtin.view.hexeditor.script.title", "Datei mit Loader Skript laden" }, { "hex.builtin.view.hex_editor.script.title", "Datei mit Loader Skript laden" },
{ "hex.builtin.view.hexeditor.script.desc", "Lade eine Datei mit Hilfe eines Python Skriptes" }, { "hex.builtin.view.hex_editor.script.desc", "Lade eine Datei mit Hilfe eines Python Skriptes" },
{ "hex.builtin.view.hexeditor.script.script", "Skript" }, { "hex.builtin.view.hex_editor.script.script", "Skript" },
{ "hex.builtin.view.hexeditor.script.script.title", "Loader Script: Skript öffnen" }, { "hex.builtin.view.hex_editor.script.script.title", "Loader Script: Skript öffnen" },
{ "hex.builtin.view.hexeditor.script.file", "Datei" }, { "hex.builtin.view.hex_editor.script.file", "Datei" },
{ "hex.builtin.view.hexeditor.script.file.title", "Loader Script: Datei öffnen" }, { "hex.builtin.view.hex_editor.script.file.title", "Loader Script: Datei öffnen" },
{ "hex.builtin.view.hexeditor.processing", "Importieren / Exportieren" }, { "hex.builtin.view.hex_editor.processing", "Importieren / Exportieren" },
{ "hex.builtin.view.hexeditor.menu.file.open_file", "Datei öffnen..." }, { "hex.builtin.view.hex_editor.menu.file.open_file", "Datei öffnen..." },
{ "hex.builtin.view.hexeditor.menu.file.open_recent", "Kürzlich geöffnete Dateien" }, { "hex.builtin.view.hex_editor.menu.file.open_recent", "Kürzlich geöffnete Dateien" },
{ "hex.builtin.view.hexeditor.menu.file.clear_recent", "Löschen" }, { "hex.builtin.view.hex_editor.menu.file.clear_recent", "Löschen" },
{ "hex.builtin.view.hexeditor.menu.file.open_other", "Provider öffnen..." }, { "hex.builtin.view.hex_editor.menu.file.open_other", "Provider öffnen..." },
{ "hex.builtin.view.hexeditor.menu.file.save", "Speichern" }, { "hex.builtin.view.hex_editor.menu.file.save", "Speichern" },
{ "hex.builtin.view.hexeditor.menu.file.save_as", "Speichern unter..." }, { "hex.builtin.view.hex_editor.menu.file.save_as", "Speichern unter..." },
{ "hex.builtin.view.hexeditor.menu.file.close", "Schliessen" }, { "hex.builtin.view.hex_editor.menu.file.close", "Schliessen" },
{ "hex.builtin.view.hexeditor.menu.file.quit", "ImHex Beenden" }, { "hex.builtin.view.hex_editor.menu.file.quit", "ImHex Beenden" },
{ "hex.builtin.view.hexeditor.menu.file.open_project", "Projekt öffnen..." }, { "hex.builtin.view.hex_editor.menu.file.open_project", "Projekt öffnen..." },
{ "hex.builtin.view.hexeditor.menu.file.save_project", "Projekt speichern..." }, { "hex.builtin.view.hex_editor.menu.file.save_project", "Projekt speichern..." },
{ "hex.builtin.view.hexeditor.menu.file.load_encoding_file", "Custom encoding laden..." }, { "hex.builtin.view.hex_editor.menu.file.load_encoding_file", "Custom encoding laden..." },
{ "hex.builtin.view.hexeditor.menu.file.import", "Importieren..." }, { "hex.builtin.view.hex_editor.menu.file.import", "Importieren..." },
{ "hex.builtin.view.hexeditor.menu.file.import.base64", "Base64 Datei" }, { "hex.builtin.view.hex_editor.menu.file.import.base64", "Base64 Datei" },
{ "hex.builtin.view.hexeditor.base64.import_error", "Datei ist nicht in einem korrekten Base64 Format!" }, { "hex.builtin.view.hex_editor.base64.import_error", "Datei ist nicht in einem korrekten Base64 Format!" },
{ "hex.builtin.view.hexeditor.file_open_error", "Öffnen der Datei fehlgeschlagen!" }, { "hex.builtin.view.hex_editor.file_open_error", "Öffnen der Datei fehlgeschlagen!" },
{ "hex.builtin.view.hexeditor.menu.file.import.ips", "IPS Patch" }, { "hex.builtin.view.hex_editor.menu.file.import.ips", "IPS Patch" },
{ "hex.builtin.view.hexeditor.menu.file.import.ips32", "IPS32 Patch" }, { "hex.builtin.view.hex_editor.menu.file.import.ips32", "IPS32 Patch" },
{ "hex.builtin.view.hexeditor.menu.file.import.script", "Datei mit Loader Script" }, { "hex.builtin.view.hex_editor.menu.file.import.script", "Datei mit Loader Script" },
{ "hex.builtin.view.hexeditor.menu.file.export", "Exportieren..." }, { "hex.builtin.view.hex_editor.menu.file.export", "Exportieren..." },
{ "hex.builtin.view.hexeditor.menu.file.export.title", "Datei exportieren" }, { "hex.builtin.view.hex_editor.menu.file.export.title", "Datei exportieren" },
{ "hex.builtin.view.hexeditor.menu.file.export.ips", "IPS Patch" }, { "hex.builtin.view.hex_editor.menu.file.export.ips", "IPS Patch" },
{ "hex.builtin.view.hexeditor.menu.file.export.ips32", "IPS32 Patch" }, { "hex.builtin.view.hex_editor.menu.file.export.ips32", "IPS32 Patch" },
{ "hex.builtin.view.hexeditor.menu.file.search", "Suchen" }, { "hex.builtin.view.hex_editor.menu.file.search", "Suchen" },
{ "hex.builtin.view.hexeditor.search.string", "String" }, { "hex.builtin.view.hex_editor.search.string", "String" },
{ "hex.builtin.view.hexeditor.search.hex", "Hex" }, { "hex.builtin.view.hex_editor.search.hex", "Hex" },
{ "hex.builtin.view.hexeditor.search.find", "Suchen" }, { "hex.builtin.view.hex_editor.search.find", "Suchen" },
{ "hex.builtin.view.hexeditor.search.find_next", "Nächstes" }, { "hex.builtin.view.hex_editor.search.find_next", "Nächstes" },
{ "hex.builtin.view.hexeditor.search.find_prev", "Vorheriges" }, { "hex.builtin.view.hex_editor.search.find_prev", "Vorheriges" },
{ "hex.builtin.view.hexeditor.menu.file.goto", "Sprung" }, { "hex.builtin.view.hex_editor.menu.file.goto", "Sprung" },
{ "hex.builtin.view.hexeditor.goto.offset.absolute", "Absolut" }, { "hex.builtin.view.hex_editor.goto.offset.absolute", "Absolut" },
{ "hex.builtin.view.hexeditor.goto.offset.current", "Momentan" }, { "hex.builtin.view.hex_editor.goto.offset.current", "Momentan" },
{ "hex.builtin.view.hexeditor.goto.offset.begin", "Beginn" }, { "hex.builtin.view.hex_editor.goto.offset.begin", "Beginn" },
{ "hex.builtin.view.hexeditor.goto.offset.end", "Ende" }, { "hex.builtin.view.hex_editor.goto.offset.end", "Ende" },
{ "hex.builtin.view.hexeditor.error.read_only", "Schreibzugriff konnte nicht erlangt werden. Datei wurde im Lesemodus geöffnet." }, { "hex.builtin.view.hex_editor.error.read_only", "Schreibzugriff konnte nicht erlangt werden. Datei wurde im Lesemodus geöffnet." },
{ "hex.builtin.view.hexeditor.error.open", "Öffnen der Datei fehlgeschlagen!" }, { "hex.builtin.view.hex_editor.error.open", "Öffnen der Datei fehlgeschlagen!" },
{ "hex.builtin.view.hexeditor.error.create", "Erstellen der neuen Datei fehlgeschlagen!" }, { "hex.builtin.view.hex_editor.error.create", "Erstellen der neuen Datei fehlgeschlagen!" },
{ "hex.builtin.view.hexeditor.menu.edit.undo", "Rückgängig" }, { "hex.builtin.view.hex_editor.menu.edit.undo", "Rückgängig" },
{ "hex.builtin.view.hexeditor.menu.edit.redo", "Wiederholen" }, { "hex.builtin.view.hex_editor.menu.edit.redo", "Wiederholen" },
{ "hex.builtin.view.hexeditor.menu.edit.copy", "Kopieren" }, { "hex.builtin.view.hex_editor.menu.edit.copy", "Kopieren" },
{ "hex.builtin.view.hexeditor.menu.edit.copy_as", "Kopieren als..." }, { "hex.builtin.view.hex_editor.menu.edit.copy_as", "Kopieren als..." },
{ "hex.builtin.view.hexeditor.copy.hex", "String" }, { "hex.builtin.view.hex_editor.copy.hex", "String" },
{ "hex.builtin.view.hexeditor.copy.c", "C Array" }, { "hex.builtin.view.hex_editor.copy.c", "C Array" },
{ "hex.builtin.view.hexeditor.copy.cpp", "C++ Array" }, { "hex.builtin.view.hex_editor.copy.cpp", "C++ Array" },
{ "hex.builtin.view.hexeditor.copy.csharp", "C# Array" }, { "hex.builtin.view.hex_editor.copy.csharp", "C# Array" },
{ "hex.builtin.view.hexeditor.copy.rust", "Rust Array" }, { "hex.builtin.view.hex_editor.copy.rust", "Rust Array" },
{ "hex.builtin.view.hexeditor.copy.python", "Python Array" }, { "hex.builtin.view.hex_editor.copy.python", "Python Array" },
{ "hex.builtin.view.hexeditor.copy.java", "Java Array" }, { "hex.builtin.view.hex_editor.copy.java", "Java Array" },
{ "hex.builtin.view.hexeditor.copy.js", "JavaScript Array" }, { "hex.builtin.view.hex_editor.copy.js", "JavaScript Array" },
{ "hex.builtin.view.hexeditor.copy.ascii", "ASCII Art" }, { "hex.builtin.view.hex_editor.copy.ascii", "ASCII Art" },
{ "hex.builtin.view.hexeditor.copy.html", "HTML" }, { "hex.builtin.view.hex_editor.copy.html", "HTML" },
{ "hex.builtin.view.hexeditor.menu.edit.paste", "Einfügen" }, { "hex.builtin.view.hex_editor.menu.edit.paste", "Einfügen" },
{ "hex.builtin.view.hexeditor.menu.edit.select_all", "Alles auswählen" }, { "hex.builtin.view.hex_editor.menu.edit.select_all", "Alles auswählen" },
{ "hex.builtin.view.hexeditor.menu.edit.bookmark", "Lesezeichen erstellen" }, { "hex.builtin.view.hex_editor.menu.edit.bookmark", "Lesezeichen erstellen" },
{ "hex.builtin.view.hexeditor.menu.edit.set_base", "Basisadresse setzen" }, { "hex.builtin.view.hex_editor.menu.edit.set_base", "Basisadresse setzen" },
{ "hex.builtin.view.hexeditor.menu.edit.resize", "Grösse ändern..." }, { "hex.builtin.view.hex_editor.menu.edit.resize", "Grösse ändern..." },
{ "hex.builtin.view.hexeditor.menu.edit.insert", "Einsetzen..." }, { "hex.builtin.view.hex_editor.menu.edit.insert", "Einsetzen..." },
{ "hex.builtin.view.information.name", "Dateninformationen" }, { "hex.builtin.view.information.name", "Dateninformationen" },
{ "hex.builtin.view.information.control", "Einstellungen" }, { "hex.builtin.view.information.control", "Einstellungen" },

View File

@ -205,83 +205,83 @@ namespace hex::plugin::builtin {
{ "hex.builtin.view.help.pattern_cheat_sheet", "Pattern Language Cheat Sheet"}, { "hex.builtin.view.help.pattern_cheat_sheet", "Pattern Language Cheat Sheet"},
{ "hex.builtin.view.help.calc_cheat_sheet", "Calculator Cheat Sheet" }, { "hex.builtin.view.help.calc_cheat_sheet", "Calculator Cheat Sheet" },
{ "hex.builtin.view.hexeditor.name", "Hex editor" }, { "hex.builtin.view.hex_editor.name", "Hex editor" },
{ "hex.builtin.view.hexeditor.create_file", "New" }, { "hex.builtin.view.hex_editor.create_file", "New" },
{ "hex.builtin.view.hexeditor.open_file", "Open" }, { "hex.builtin.view.hex_editor.open_file", "Open" },
{ "hex.builtin.view.hexeditor.open_project", "Open Project" }, { "hex.builtin.view.hex_editor.open_project", "Open Project" },
{ "hex.builtin.view.hexeditor.save_project", "Save Project" }, { "hex.builtin.view.hex_editor.save_project", "Save Project" },
{ "hex.builtin.view.hexeditor.save_data", "Save Data" }, { "hex.builtin.view.hex_editor.save_data", "Save Data" },
{ "hex.builtin.view.hexeditor.open_base64", "Open Base64 File" }, { "hex.builtin.view.hex_editor.open_base64", "Open Base64 File" },
{ "hex.builtin.view.hexeditor.load_enconding_file", "Load custom encoding File" }, { "hex.builtin.view.hex_editor.load_enconding_file", "Load custom encoding File" },
{ "hex.builtin.view.hexeditor.page", "Page {0} / {1}" }, { "hex.builtin.view.hex_editor.page", "Page {0} / {1}" },
{ "hex.builtin.view.hexeditor.save_as", "Save As" }, { "hex.builtin.view.hex_editor.save_as", "Save As" },
{ "hex.builtin.view.hexeditor.exit_application.title", "Exit Application?" }, { "hex.builtin.view.hex_editor.exit_application.title", "Exit Application?" },
{ "hex.builtin.view.hexeditor.exit_application.desc", "You have unsaved changes made to your Project.\nAre you sure you want to exit?" }, { "hex.builtin.view.hex_editor.exit_application.desc", "You have unsaved changes made to your Project.\nAre you sure you want to exit?" },
{ "hex.builtin.view.hexeditor.script.title", "Load File with Loader Script" }, { "hex.builtin.view.hex_editor.script.title", "Load File with Loader Script" },
{ "hex.builtin.view.hexeditor.script.desc", "Load a file using a Python loader script." }, { "hex.builtin.view.hex_editor.script.desc", "Load a file using a Python loader script." },
{ "hex.builtin.view.hexeditor.script.script", "Script" }, { "hex.builtin.view.hex_editor.script.script", "Script" },
{ "hex.builtin.view.hexeditor.script.script.title", "Loader Script: Open Script" }, { "hex.builtin.view.hex_editor.script.script.title", "Loader Script: Open Script" },
{ "hex.builtin.view.hexeditor.script.file", "File" }, { "hex.builtin.view.hex_editor.script.file", "File" },
{ "hex.builtin.view.hexeditor.script.file.title", "Loader Script: Open File" }, { "hex.builtin.view.hex_editor.script.file.title", "Loader Script: Open File" },
{ "hex.builtin.view.hexeditor.processing", "Importing / Exporting" }, { "hex.builtin.view.hex_editor.processing", "Importing / Exporting" },
{ "hex.builtin.view.hexeditor.menu.file.open_file", "Open File..." }, { "hex.builtin.view.hex_editor.menu.file.open_file", "Open File..." },
{ "hex.builtin.view.hexeditor.menu.file.open_recent", "Open Recent" }, { "hex.builtin.view.hex_editor.menu.file.open_recent", "Open Recent" },
{ "hex.builtin.view.hexeditor.menu.file.clear_recent", "Clear" }, { "hex.builtin.view.hex_editor.menu.file.clear_recent", "Clear" },
{ "hex.builtin.view.hexeditor.menu.file.open_other", "Open Other..." }, { "hex.builtin.view.hex_editor.menu.file.open_other", "Open Other..." },
{ "hex.builtin.view.hexeditor.menu.file.save", "Save" }, { "hex.builtin.view.hex_editor.menu.file.save", "Save" },
{ "hex.builtin.view.hexeditor.menu.file.save_as", "Save As..." }, { "hex.builtin.view.hex_editor.menu.file.save_as", "Save As..." },
{ "hex.builtin.view.hexeditor.menu.file.close", "Close" }, { "hex.builtin.view.hex_editor.menu.file.close", "Close" },
{ "hex.builtin.view.hexeditor.menu.file.quit", "Quit ImHex" }, { "hex.builtin.view.hex_editor.menu.file.quit", "Quit ImHex" },
{ "hex.builtin.view.hexeditor.menu.file.open_project", "Open Project..." }, { "hex.builtin.view.hex_editor.menu.file.open_project", "Open Project..." },
{ "hex.builtin.view.hexeditor.menu.file.save_project", "Save Project..." }, { "hex.builtin.view.hex_editor.menu.file.save_project", "Save Project..." },
{ "hex.builtin.view.hexeditor.menu.file.load_encoding_file", "Load custom encoding..." }, { "hex.builtin.view.hex_editor.menu.file.load_encoding_file", "Load custom encoding..." },
{ "hex.builtin.view.hexeditor.menu.file.import", "Import..." }, { "hex.builtin.view.hex_editor.menu.file.import", "Import..." },
{ "hex.builtin.view.hexeditor.menu.file.import.base64", "Base64 File" }, { "hex.builtin.view.hex_editor.menu.file.import.base64", "Base64 File" },
{ "hex.builtin.view.hexeditor.base64.import_error", "File is not in a valid Base64 format!" }, { "hex.builtin.view.hex_editor.base64.import_error", "File is not in a valid Base64 format!" },
{ "hex.builtin.view.hexeditor.file_open_error", "Failed to open file!" }, { "hex.builtin.view.hex_editor.file_open_error", "Failed to open file!" },
{ "hex.builtin.view.hexeditor.menu.file.import.ips", "IPS Patch" }, { "hex.builtin.view.hex_editor.menu.file.import.ips", "IPS Patch" },
{ "hex.builtin.view.hexeditor.menu.file.import.ips32", "IPS32 Patch" }, { "hex.builtin.view.hex_editor.menu.file.import.ips32", "IPS32 Patch" },
{ "hex.builtin.view.hexeditor.menu.file.import.script", "File with Loader Script" }, { "hex.builtin.view.hex_editor.menu.file.import.script", "File with Loader Script" },
{ "hex.builtin.view.hexeditor.menu.file.export", "Export..." }, { "hex.builtin.view.hex_editor.menu.file.export", "Export..." },
{ "hex.builtin.view.hexeditor.menu.file.export.title", "Export File" }, { "hex.builtin.view.hex_editor.menu.file.export.title", "Export File" },
{ "hex.builtin.view.hexeditor.menu.file.export.ips", "IPS Patch" }, { "hex.builtin.view.hex_editor.menu.file.export.ips", "IPS Patch" },
{ "hex.builtin.view.hexeditor.menu.file.export.ips32", "IPS32 Patch" }, { "hex.builtin.view.hex_editor.menu.file.export.ips32", "IPS32 Patch" },
{ "hex.builtin.view.hexeditor.menu.file.search", "Search" }, { "hex.builtin.view.hex_editor.menu.file.search", "Search" },
{ "hex.builtin.view.hexeditor.search.string", "String" }, { "hex.builtin.view.hex_editor.search.string", "String" },
{ "hex.builtin.view.hexeditor.search.hex", "Hex" }, { "hex.builtin.view.hex_editor.search.hex", "Hex" },
{ "hex.builtin.view.hexeditor.search.find", "Find" }, { "hex.builtin.view.hex_editor.search.find", "Find" },
{ "hex.builtin.view.hexeditor.search.find_next", "Find next" }, { "hex.builtin.view.hex_editor.search.find_next", "Find next" },
{ "hex.builtin.view.hexeditor.search.find_prev", "Find previous" }, { "hex.builtin.view.hex_editor.search.find_prev", "Find previous" },
{ "hex.builtin.view.hexeditor.menu.file.goto", "Goto" }, { "hex.builtin.view.hex_editor.menu.file.goto", "Goto" },
{ "hex.builtin.view.hexeditor.goto.offset.absolute", "Absolute" }, { "hex.builtin.view.hex_editor.goto.offset.absolute", "Absolute" },
{ "hex.builtin.view.hexeditor.goto.offset.current", "Current" }, { "hex.builtin.view.hex_editor.goto.offset.current", "Current" },
{ "hex.builtin.view.hexeditor.goto.offset.begin", "Begin" }, { "hex.builtin.view.hex_editor.goto.offset.begin", "Begin" },
{ "hex.builtin.view.hexeditor.goto.offset.end", "End" }, { "hex.builtin.view.hex_editor.goto.offset.end", "End" },
{ "hex.builtin.view.hexeditor.error.read_only", "Couldn't get write access. File opened in read-only mode." }, { "hex.builtin.view.hex_editor.error.read_only", "Couldn't get write access. File opened in read-only mode." },
{ "hex.builtin.view.hexeditor.error.open", "Failed to open file!" }, { "hex.builtin.view.hex_editor.error.open", "Failed to open file!" },
{ "hex.builtin.view.hexeditor.error.create", "Failed to create new file!" }, { "hex.builtin.view.hex_editor.error.create", "Failed to create new file!" },
{ "hex.builtin.view.hexeditor.menu.edit.undo", "Undo" }, { "hex.builtin.view.hex_editor.menu.edit.undo", "Undo" },
{ "hex.builtin.view.hexeditor.menu.edit.redo", "Redo" }, { "hex.builtin.view.hex_editor.menu.edit.redo", "Redo" },
{ "hex.builtin.view.hexeditor.menu.edit.copy", "Copy" }, { "hex.builtin.view.hex_editor.menu.edit.copy", "Copy" },
{ "hex.builtin.view.hexeditor.menu.edit.copy_as", "Copy as..." }, { "hex.builtin.view.hex_editor.menu.edit.copy_as", "Copy as..." },
{ "hex.builtin.view.hexeditor.copy.hex", "String" }, { "hex.builtin.view.hex_editor.copy.hex", "String" },
{ "hex.builtin.view.hexeditor.copy.c", "C Array" }, { "hex.builtin.view.hex_editor.copy.c", "C Array" },
{ "hex.builtin.view.hexeditor.copy.cpp", "C++ Array" }, { "hex.builtin.view.hex_editor.copy.cpp", "C++ Array" },
{ "hex.builtin.view.hexeditor.copy.csharp", "C# Array" }, { "hex.builtin.view.hex_editor.copy.csharp", "C# Array" },
{ "hex.builtin.view.hexeditor.copy.rust", "Rust Array" }, { "hex.builtin.view.hex_editor.copy.rust", "Rust Array" },
{ "hex.builtin.view.hexeditor.copy.python", "Python Array" }, { "hex.builtin.view.hex_editor.copy.python", "Python Array" },
{ "hex.builtin.view.hexeditor.copy.java", "Java Array" }, { "hex.builtin.view.hex_editor.copy.java", "Java Array" },
{ "hex.builtin.view.hexeditor.copy.js", "JavaScript Array" }, { "hex.builtin.view.hex_editor.copy.js", "JavaScript Array" },
{ "hex.builtin.view.hexeditor.copy.ascii", "ASCII Art" }, { "hex.builtin.view.hex_editor.copy.ascii", "ASCII Art" },
{ "hex.builtin.view.hexeditor.copy.html", "HTML" }, { "hex.builtin.view.hex_editor.copy.html", "HTML" },
{ "hex.builtin.view.hexeditor.menu.edit.paste", "Paste" }, { "hex.builtin.view.hex_editor.menu.edit.paste", "Paste" },
{ "hex.builtin.view.hexeditor.menu.edit.select_all", "Select all" }, { "hex.builtin.view.hex_editor.menu.edit.select_all", "Select all" },
{ "hex.builtin.view.hexeditor.menu.edit.bookmark", "Create bookmark" }, { "hex.builtin.view.hex_editor.menu.edit.bookmark", "Create bookmark" },
{ "hex.builtin.view.hexeditor.menu.edit.set_base", "Set base address" }, { "hex.builtin.view.hex_editor.menu.edit.set_base", "Set base address" },
{ "hex.builtin.view.hexeditor.menu.edit.resize", "Resize..." }, { "hex.builtin.view.hex_editor.menu.edit.resize", "Resize..." },
{ "hex.builtin.view.hexeditor.menu.edit.insert", "Insert..." }, { "hex.builtin.view.hex_editor.menu.edit.insert", "Insert..." },
{ "hex.builtin.view.information.name", "Data Information" }, { "hex.builtin.view.information.name", "Data Information" },
{ "hex.builtin.view.information.control", "Control" }, { "hex.builtin.view.information.control", "Control" },

View File

@ -199,83 +199,83 @@ namespace hex::plugin::builtin {
{ "hex.builtin.view.help.pattern_cheat_sheet", "Pattern Language Cheat Sheet"}, { "hex.builtin.view.help.pattern_cheat_sheet", "Pattern Language Cheat Sheet"},
{ "hex.builtin.view.help.calc_cheat_sheet", "Calcolatrice Cheat Sheet" }, { "hex.builtin.view.help.calc_cheat_sheet", "Calcolatrice Cheat Sheet" },
{ "hex.builtin.view.hexeditor.name", "Hex editor" }, { "hex.builtin.view.hex_editor.name", "Hex editor" },
{ "hex.builtin.view.hexeditor.create_file", "Nuovo" }, { "hex.builtin.view.hex_editor.create_file", "Nuovo" },
{ "hex.builtin.view.hexeditor.open_file", "Apri" }, { "hex.builtin.view.hex_editor.open_file", "Apri" },
{ "hex.builtin.view.hexeditor.menu.file.open_recent", "File recenti" }, { "hex.builtin.view.hex_editor.menu.file.open_recent", "File recenti" },
{ "hex.builtin.view.hexeditor.menu.file.clear_recent", "Pulisci" }, { "hex.builtin.view.hex_editor.menu.file.clear_recent", "Pulisci" },
{ "hex.builtin.view.hexeditor.menu.file.open_other", "Apri altro..." }, { "hex.builtin.view.hex_editor.menu.file.open_other", "Apri altro..." },
{ "hex.builtin.view.hexeditor.open_project", "Apri i Progetti" }, { "hex.builtin.view.hex_editor.open_project", "Apri i Progetti" },
{ "hex.builtin.view.hexeditor.save_project", "Salva i Progetti" }, { "hex.builtin.view.hex_editor.save_project", "Salva i Progetti" },
{ "hex.builtin.view.hexeditor.save_data", "Salva i Dati" }, { "hex.builtin.view.hex_editor.save_data", "Salva i Dati" },
{ "hex.builtin.view.hexeditor.open_base64", "Apri Base64 File" }, { "hex.builtin.view.hex_editor.open_base64", "Apri Base64 File" },
{ "hex.builtin.view.hexeditor.load_enconding_file", "Carica un File di codfica personalizzato" }, { "hex.builtin.view.hex_editor.load_enconding_file", "Carica un File di codfica personalizzato" },
{ "hex.builtin.view.hexeditor.page", "Pagina {0} / {1}" }, { "hex.builtin.view.hex_editor.page", "Pagina {0} / {1}" },
{ "hex.builtin.view.hexeditor.save_as", "Salva come" }, { "hex.builtin.view.hex_editor.save_as", "Salva come" },
{ "hex.builtin.view.hexeditor.exit_application.title", "Uscire dall'applicazione?" }, { "hex.builtin.view.hex_editor.exit_application.title", "Uscire dall'applicazione?" },
{ "hex.builtin.view.hexeditor.exit_application.desc", "Hai delle modifiche non salvate nel tuo progetto.\nSei sicuro di voler uscire?" }, { "hex.builtin.view.hex_editor.exit_application.desc", "Hai delle modifiche non salvate nel tuo progetto.\nSei sicuro di voler uscire?" },
{ "hex.builtin.view.hexeditor.script.title", "Carica un File tramite il Caricatore di Script" }, { "hex.builtin.view.hex_editor.script.title", "Carica un File tramite il Caricatore di Script" },
{ "hex.builtin.view.hexeditor.script.desc", "Carica un file tramite il Caricatore di Script di Python." }, { "hex.builtin.view.hex_editor.script.desc", "Carica un file tramite il Caricatore di Script di Python." },
{ "hex.builtin.view.hexeditor.script.script", "Script" }, { "hex.builtin.view.hex_editor.script.script", "Script" },
{ "hex.builtin.view.hexeditor.script.script.title", "Caricatore Script: Apri Script" }, { "hex.builtin.view.hex_editor.script.script.title", "Caricatore Script: Apri Script" },
{ "hex.builtin.view.hexeditor.script.file", "File" }, { "hex.builtin.view.hex_editor.script.file", "File" },
{ "hex.builtin.view.hexeditor.script.file.title", "Caricatore Script: Apri File" }, { "hex.builtin.view.hex_editor.script.file.title", "Caricatore Script: Apri File" },
{ "hex.builtin.view.hexeditor.processing", "Importa / Esporta" }, { "hex.builtin.view.hex_editor.processing", "Importa / Esporta" },
{ "hex.builtin.view.hexeditor.menu.file.open_file", "Apri File..." }, { "hex.builtin.view.hex_editor.menu.file.open_file", "Apri File..." },
{ "hex.builtin.view.hexeditor.menu.file.save", "Salva" }, { "hex.builtin.view.hex_editor.menu.file.save", "Salva" },
{ "hex.builtin.view.hexeditor.menu.file.save_as", "Salva come..." }, { "hex.builtin.view.hex_editor.menu.file.save_as", "Salva come..." },
{ "hex.builtin.view.hexeditor.menu.file.close", "Chiudi" }, { "hex.builtin.view.hex_editor.menu.file.close", "Chiudi" },
{ "hex.builtin.view.hexeditor.menu.file.quit", "Uscita ImHex" }, { "hex.builtin.view.hex_editor.menu.file.quit", "Uscita ImHex" },
{ "hex.builtin.view.hexeditor.menu.file.open_project", "Apri un Progetto..." }, { "hex.builtin.view.hex_editor.menu.file.open_project", "Apri un Progetto..." },
{ "hex.builtin.view.hexeditor.menu.file.save_project", "Salva Progetto..." }, { "hex.builtin.view.hex_editor.menu.file.save_project", "Salva Progetto..." },
{ "hex.builtin.view.hexeditor.menu.file.load_encoding_file", "Carica una codifica personalizzata..." }, { "hex.builtin.view.hex_editor.menu.file.load_encoding_file", "Carica una codifica personalizzata..." },
{ "hex.builtin.view.hexeditor.menu.file.import", "Importa..." }, { "hex.builtin.view.hex_editor.menu.file.import", "Importa..." },
{ "hex.builtin.view.hexeditor.menu.file.import.base64", "Base64 File" }, { "hex.builtin.view.hex_editor.menu.file.import.base64", "Base64 File" },
{ "hex.builtin.view.hexeditor.base64.import_error", "Il file non è in un formato bas64 corretto!" }, { "hex.builtin.view.hex_editor.base64.import_error", "Il file non è in un formato bas64 corretto!" },
{ "hex.builtin.view.hexeditor.file_open_error", "Impossibile aprire il File!" }, { "hex.builtin.view.hex_editor.file_open_error", "Impossibile aprire il File!" },
{ "hex.builtin.view.hexeditor.menu.file.import.ips", "IPS Patch" }, { "hex.builtin.view.hex_editor.menu.file.import.ips", "IPS Patch" },
{ "hex.builtin.view.hexeditor.menu.file.import.ips32", "IPS32 Patch" }, { "hex.builtin.view.hex_editor.menu.file.import.ips32", "IPS32 Patch" },
{ "hex.builtin.view.hexeditor.menu.file.import.script", "File con il Caricatore di Script" }, { "hex.builtin.view.hex_editor.menu.file.import.script", "File con il Caricatore di Script" },
{ "hex.builtin.view.hexeditor.menu.file.export", "Esporta..." }, { "hex.builtin.view.hex_editor.menu.file.export", "Esporta..." },
{ "hex.builtin.view.hexeditor.menu.file.export.title", "Esporta File" }, { "hex.builtin.view.hex_editor.menu.file.export.title", "Esporta File" },
{ "hex.builtin.view.hexeditor.menu.file.export.ips", "IPS Patch" }, { "hex.builtin.view.hex_editor.menu.file.export.ips", "IPS Patch" },
{ "hex.builtin.view.hexeditor.menu.file.export.ips32", "IPS32 Patch" }, { "hex.builtin.view.hex_editor.menu.file.export.ips32", "IPS32 Patch" },
{ "hex.builtin.view.hexeditor.menu.file.search", "Cerca" }, { "hex.builtin.view.hex_editor.menu.file.search", "Cerca" },
{ "hex.builtin.view.hexeditor.search.string", "Stringa" }, { "hex.builtin.view.hex_editor.search.string", "Stringa" },
{ "hex.builtin.view.hexeditor.search.hex", "Hex" }, { "hex.builtin.view.hex_editor.search.hex", "Hex" },
{ "hex.builtin.view.hexeditor.search.find", "Cerca" }, { "hex.builtin.view.hex_editor.search.find", "Cerca" },
{ "hex.builtin.view.hexeditor.search.find_next", "Cerca il prossimo" }, { "hex.builtin.view.hex_editor.search.find_next", "Cerca il prossimo" },
{ "hex.builtin.view.hexeditor.search.find_prev", "Cerca il precedente" }, { "hex.builtin.view.hex_editor.search.find_prev", "Cerca il precedente" },
{ "hex.builtin.view.hexeditor.menu.file.goto", "Vai a" }, { "hex.builtin.view.hex_editor.menu.file.goto", "Vai a" },
{ "hex.builtin.view.hexeditor.goto.offset.absolute", "Assoluto" }, { "hex.builtin.view.hex_editor.goto.offset.absolute", "Assoluto" },
{ "hex.builtin.view.hexeditor.goto.offset.current", "Corrente" }, { "hex.builtin.view.hex_editor.goto.offset.current", "Corrente" },
{ "hex.builtin.view.hexeditor.goto.offset.begin", "Inizo" }, { "hex.builtin.view.hex_editor.goto.offset.begin", "Inizo" },
{ "hex.builtin.view.hexeditor.goto.offset.end", "Fine" }, { "hex.builtin.view.hex_editor.goto.offset.end", "Fine" },
{ "hex.builtin.view.hexeditor.error.read_only", "Impossibile scrivere sul File. File aperto solo in modalità lettura" }, { "hex.builtin.view.hex_editor.error.read_only", "Impossibile scrivere sul File. File aperto solo in modalità lettura" },
{ "hex.builtin.view.hexeditor.error.open", "Impossibile aprire il File!" }, { "hex.builtin.view.hex_editor.error.open", "Impossibile aprire il File!" },
{ "hex.builtin.view.hexeditor.error.create", "Impossibile creare il nuovo File!" }, { "hex.builtin.view.hex_editor.error.create", "Impossibile creare il nuovo File!" },
{ "hex.builtin.view.hexeditor.menu.edit.undo", "Annulla" }, { "hex.builtin.view.hex_editor.menu.edit.undo", "Annulla" },
{ "hex.builtin.view.hexeditor.menu.edit.redo", "Ripeti" }, { "hex.builtin.view.hex_editor.menu.edit.redo", "Ripeti" },
{ "hex.builtin.view.hexeditor.menu.edit.copy", "Copia" }, { "hex.builtin.view.hex_editor.menu.edit.copy", "Copia" },
{ "hex.builtin.view.hexeditor.menu.edit.copy_as", "Copia come..." }, { "hex.builtin.view.hex_editor.menu.edit.copy_as", "Copia come..." },
{ "hex.builtin.view.hexeditor.copy.hex", "Stringa" }, { "hex.builtin.view.hex_editor.copy.hex", "Stringa" },
{ "hex.builtin.view.hexeditor.copy.c", "C Array" }, { "hex.builtin.view.hex_editor.copy.c", "C Array" },
{ "hex.builtin.view.hexeditor.copy.cpp", "C++ Array" }, { "hex.builtin.view.hex_editor.copy.cpp", "C++ Array" },
{ "hex.builtin.view.hexeditor.copy.csharp", "C# Array" }, { "hex.builtin.view.hex_editor.copy.csharp", "C# Array" },
{ "hex.builtin.view.hexeditor.copy.rust", "Rust Array" }, { "hex.builtin.view.hex_editor.copy.rust", "Rust Array" },
{ "hex.builtin.view.hexeditor.copy.python", "Python Array" }, { "hex.builtin.view.hex_editor.copy.python", "Python Array" },
{ "hex.builtin.view.hexeditor.copy.java", "Java Array" }, { "hex.builtin.view.hex_editor.copy.java", "Java Array" },
{ "hex.builtin.view.hexeditor.copy.js", "JavaScript Array" }, { "hex.builtin.view.hex_editor.copy.js", "JavaScript Array" },
{ "hex.builtin.view.hexeditor.copy.ascii", "ASCII Art" }, { "hex.builtin.view.hex_editor.copy.ascii", "ASCII Art" },
{ "hex.builtin.view.hexeditor.copy.html", "HTML" }, { "hex.builtin.view.hex_editor.copy.html", "HTML" },
{ "hex.builtin.view.hexeditor.menu.edit.paste", "Incolla" }, { "hex.builtin.view.hex_editor.menu.edit.paste", "Incolla" },
{ "hex.builtin.view.hexeditor.menu.edit.select_all", "Seleziona tutti" }, { "hex.builtin.view.hex_editor.menu.edit.select_all", "Seleziona tutti" },
{ "hex.builtin.view.hexeditor.menu.edit.bookmark", "Crea segnalibro" }, { "hex.builtin.view.hex_editor.menu.edit.bookmark", "Crea segnalibro" },
{ "hex.builtin.view.hexeditor.menu.edit.set_base", "Imposta indirizzo di base" }, { "hex.builtin.view.hex_editor.menu.edit.set_base", "Imposta indirizzo di base" },
{ "hex.builtin.view.hexeditor.menu.edit.resize", "Ridimensiona..." }, { "hex.builtin.view.hex_editor.menu.edit.resize", "Ridimensiona..." },
{ "hex.builtin.view.hexeditor.menu.edit.insert", "Inserisci..." }, { "hex.builtin.view.hex_editor.menu.edit.insert", "Inserisci..." },
{ "hex.builtin.view.information.name", "Informazione sui Dati" }, { "hex.builtin.view.information.name", "Informazione sui Dati" },
{ "hex.builtin.view.information.control", "Controllo" }, { "hex.builtin.view.information.control", "Controllo" },

View File

@ -200,83 +200,83 @@ namespace hex::plugin::builtin {
{ "hex.builtin.view.help.pattern_cheat_sheet", "模式语言帮助"}, { "hex.builtin.view.help.pattern_cheat_sheet", "模式语言帮助"},
{ "hex.builtin.view.help.calc_cheat_sheet", "计算器帮助" }, { "hex.builtin.view.help.calc_cheat_sheet", "计算器帮助" },
{ "hex.builtin.view.hexeditor.name", "Hex编辑器" }, { "hex.builtin.view.hex_editor.name", "Hex编辑器" },
{ "hex.builtin.view.hexeditor.create_file", "新建" }, { "hex.builtin.view.hex_editor.create_file", "新建" },
{ "hex.builtin.view.hexeditor.open_file", "打开" }, { "hex.builtin.view.hex_editor.open_file", "打开" },
{ "hex.builtin.view.hexeditor.open_project", "打开项目" }, { "hex.builtin.view.hex_editor.open_project", "打开项目" },
{ "hex.builtin.view.hexeditor.save_project", "保存项目" }, { "hex.builtin.view.hex_editor.save_project", "保存项目" },
{ "hex.builtin.view.hexeditor.save_data", "保存数据" }, { "hex.builtin.view.hex_editor.save_data", "保存数据" },
{ "hex.builtin.view.hexeditor.open_base64", "打开Base64文件" }, { "hex.builtin.view.hex_editor.open_base64", "打开Base64文件" },
{ "hex.builtin.view.hexeditor.load_enconding_file", "加载自定义编码定义文件" }, { "hex.builtin.view.hex_editor.load_enconding_file", "加载自定义编码定义文件" },
{ "hex.builtin.view.hexeditor.page", "页 {0} / {1}" }, { "hex.builtin.view.hex_editor.page", "页 {0} / {1}" },
{ "hex.builtin.view.hexeditor.save_as", "另存为" }, { "hex.builtin.view.hex_editor.save_as", "另存为" },
{ "hex.builtin.view.hexeditor.exit_application.title", "退出?" }, { "hex.builtin.view.hex_editor.exit_application.title", "退出?" },
{ "hex.builtin.view.hexeditor.exit_application.desc", "工程还有为保存的更改。\n确定要退出吗?" }, { "hex.builtin.view.hex_editor.exit_application.desc", "工程还有为保存的更改。\n确定要退出吗?" },
{ "hex.builtin.view.hexeditor.script.title", "通过加载器脚本加载文件" }, { "hex.builtin.view.hex_editor.script.title", "通过加载器脚本加载文件" },
{ "hex.builtin.view.hexeditor.script.desc", "通过Python加载器脚本加载文件。" }, { "hex.builtin.view.hex_editor.script.desc", "通过Python加载器脚本加载文件。" },
{ "hex.builtin.view.hexeditor.script.script", "脚本" }, { "hex.builtin.view.hex_editor.script.script", "脚本" },
{ "hex.builtin.view.hexeditor.script.script.title", "加载器脚本:打开脚本" }, { "hex.builtin.view.hex_editor.script.script.title", "加载器脚本:打开脚本" },
{ "hex.builtin.view.hexeditor.script.file", "文件" }, { "hex.builtin.view.hex_editor.script.file", "文件" },
{ "hex.builtin.view.hexeditor.script.file.title", "加载器脚本:打开文件" }, { "hex.builtin.view.hex_editor.script.file.title", "加载器脚本:打开文件" },
{ "hex.builtin.view.hexeditor.processing", "导入 / 导出" }, { "hex.builtin.view.hex_editor.processing", "导入 / 导出" },
{ "hex.builtin.view.hexeditor.menu.file.open_file", "打开文件..." }, { "hex.builtin.view.hex_editor.menu.file.open_file", "打开文件..." },
{ "hex.builtin.view.hexeditor.menu.file.open_recent", "打开最近" }, { "hex.builtin.view.hex_editor.menu.file.open_recent", "打开最近" },
{ "hex.builtin.view.hexeditor.menu.file.clear_recent", "清除" }, { "hex.builtin.view.hex_editor.menu.file.clear_recent", "清除" },
{ "hex.builtin.view.hexeditor.menu.file.open_other", "打开其他..." }, { "hex.builtin.view.hex_editor.menu.file.open_other", "打开其他..." },
{ "hex.builtin.view.hexeditor.menu.file.save", "保存" }, { "hex.builtin.view.hex_editor.menu.file.save", "保存" },
{ "hex.builtin.view.hexeditor.menu.file.save_as", "另存为..." }, { "hex.builtin.view.hex_editor.menu.file.save_as", "另存为..." },
{ "hex.builtin.view.hexeditor.menu.file.close", "关闭" }, { "hex.builtin.view.hex_editor.menu.file.close", "关闭" },
{ "hex.builtin.view.hexeditor.menu.file.quit", "退出ImHex" }, { "hex.builtin.view.hex_editor.menu.file.quit", "退出ImHex" },
{ "hex.builtin.view.hexeditor.menu.file.open_project", "打开项目..." }, { "hex.builtin.view.hex_editor.menu.file.open_project", "打开项目..." },
{ "hex.builtin.view.hexeditor.menu.file.save_project", "保存项目..." }, { "hex.builtin.view.hex_editor.menu.file.save_project", "保存项目..." },
{ "hex.builtin.view.hexeditor.menu.file.load_encoding_file", "加载自定义编码..." }, { "hex.builtin.view.hex_editor.menu.file.load_encoding_file", "加载自定义编码..." },
{ "hex.builtin.view.hexeditor.menu.file.import", "导入..." }, { "hex.builtin.view.hex_editor.menu.file.import", "导入..." },
{ "hex.builtin.view.hexeditor.menu.file.import.base64", "Base64文件" }, { "hex.builtin.view.hex_editor.menu.file.import.base64", "Base64文件" },
{ "hex.builtin.view.hexeditor.base64.import_error", "文件不是有效的Base64格式" }, { "hex.builtin.view.hex_editor.base64.import_error", "文件不是有效的Base64格式" },
{ "hex.builtin.view.hexeditor.file_open_error", "打开文件失败!" }, { "hex.builtin.view.hex_editor.file_open_error", "打开文件失败!" },
{ "hex.builtin.view.hexeditor.menu.file.import.ips", "IPS补丁" }, { "hex.builtin.view.hex_editor.menu.file.import.ips", "IPS补丁" },
{ "hex.builtin.view.hexeditor.menu.file.import.ips32", "IPS32补丁" }, { "hex.builtin.view.hex_editor.menu.file.import.ips32", "IPS32补丁" },
{ "hex.builtin.view.hexeditor.menu.file.import.script", "带有加载器脚本的文件" }, { "hex.builtin.view.hex_editor.menu.file.import.script", "带有加载器脚本的文件" },
{ "hex.builtin.view.hexeditor.menu.file.export", "导出..." }, { "hex.builtin.view.hex_editor.menu.file.export", "导出..." },
{ "hex.builtin.view.hexeditor.menu.file.export.title", "导出文件" }, { "hex.builtin.view.hex_editor.menu.file.export.title", "导出文件" },
{ "hex.builtin.view.hexeditor.menu.file.export.ips", "IPS补丁" }, { "hex.builtin.view.hex_editor.menu.file.export.ips", "IPS补丁" },
{ "hex.builtin.view.hexeditor.menu.file.export.ips32", "IPS32补丁" }, { "hex.builtin.view.hex_editor.menu.file.export.ips32", "IPS32补丁" },
{ "hex.builtin.view.hexeditor.menu.file.search", "搜索" }, { "hex.builtin.view.hex_editor.menu.file.search", "搜索" },
{ "hex.builtin.view.hexeditor.search.string", "字符串" }, { "hex.builtin.view.hex_editor.search.string", "字符串" },
{ "hex.builtin.view.hexeditor.search.hex", "Hex" }, { "hex.builtin.view.hex_editor.search.hex", "Hex" },
{ "hex.builtin.view.hexeditor.search.find", "查找" }, { "hex.builtin.view.hex_editor.search.find", "查找" },
{ "hex.builtin.view.hexeditor.search.find_next", "查找下一个" }, { "hex.builtin.view.hex_editor.search.find_next", "查找下一个" },
{ "hex.builtin.view.hexeditor.search.find_prev", "查找上一个" }, { "hex.builtin.view.hex_editor.search.find_prev", "查找上一个" },
{ "hex.builtin.view.hexeditor.menu.file.goto", "转到" }, { "hex.builtin.view.hex_editor.menu.file.goto", "转到" },
{ "hex.builtin.view.hexeditor.goto.offset.absolute", "绝对" }, { "hex.builtin.view.hex_editor.goto.offset.absolute", "绝对" },
{ "hex.builtin.view.hexeditor.goto.offset.current", "当前" }, { "hex.builtin.view.hex_editor.goto.offset.current", "当前" },
{ "hex.builtin.view.hexeditor.goto.offset.begin", "起始" }, { "hex.builtin.view.hex_editor.goto.offset.begin", "起始" },
{ "hex.builtin.view.hexeditor.goto.offset.end", "末尾" }, { "hex.builtin.view.hex_editor.goto.offset.end", "末尾" },
{ "hex.builtin.view.hexeditor.error.read_only", "无法获得写权限,文件以只读方式打开。" }, { "hex.builtin.view.hex_editor.error.read_only", "无法获得写权限,文件以只读方式打开。" },
{ "hex.builtin.view.hexeditor.error.open", "打开文件失败!" }, { "hex.builtin.view.hex_editor.error.open", "打开文件失败!" },
{ "hex.builtin.view.hexeditor.error.create", "创建新文件失败!" }, { "hex.builtin.view.hex_editor.error.create", "创建新文件失败!" },
{ "hex.builtin.view.hexeditor.menu.edit.undo", "撤销" }, { "hex.builtin.view.hex_editor.menu.edit.undo", "撤销" },
{ "hex.builtin.view.hexeditor.menu.edit.redo", "重做" }, { "hex.builtin.view.hex_editor.menu.edit.redo", "重做" },
{ "hex.builtin.view.hexeditor.menu.edit.copy", "复制" }, { "hex.builtin.view.hex_editor.menu.edit.copy", "复制" },
{ "hex.builtin.view.hexeditor.menu.edit.copy_as", "复制为..." }, { "hex.builtin.view.hex_editor.menu.edit.copy_as", "复制为..." },
{ "hex.builtin.view.hexeditor.copy.hex", "字符串" }, { "hex.builtin.view.hex_editor.copy.hex", "字符串" },
{ "hex.builtin.view.hexeditor.copy.c", "C数组" }, { "hex.builtin.view.hex_editor.copy.c", "C数组" },
{ "hex.builtin.view.hexeditor.copy.cpp", "C++数组" }, { "hex.builtin.view.hex_editor.copy.cpp", "C++数组" },
{ "hex.builtin.view.hexeditor.copy.csharp", "C#数组" }, { "hex.builtin.view.hex_editor.copy.csharp", "C#数组" },
{ "hex.builtin.view.hexeditor.copy.rust", "Rust数组" }, { "hex.builtin.view.hex_editor.copy.rust", "Rust数组" },
{ "hex.builtin.view.hexeditor.copy.python", "Python数组" }, { "hex.builtin.view.hex_editor.copy.python", "Python数组" },
{ "hex.builtin.view.hexeditor.copy.java", "Java数组" }, { "hex.builtin.view.hex_editor.copy.java", "Java数组" },
{ "hex.builtin.view.hexeditor.copy.js", "JavaScript数组" }, { "hex.builtin.view.hex_editor.copy.js", "JavaScript数组" },
{ "hex.builtin.view.hexeditor.copy.ascii", "ASCII Art" }, { "hex.builtin.view.hex_editor.copy.ascii", "ASCII Art" },
{ "hex.builtin.view.hexeditor.copy.html", "HTML" }, { "hex.builtin.view.hex_editor.copy.html", "HTML" },
{ "hex.builtin.view.hexeditor.menu.edit.paste", "粘贴" }, { "hex.builtin.view.hex_editor.menu.edit.paste", "粘贴" },
{ "hex.builtin.view.hexeditor.menu.edit.select_all", "全选" }, { "hex.builtin.view.hex_editor.menu.edit.select_all", "全选" },
{ "hex.builtin.view.hexeditor.menu.edit.bookmark", "添加书签" }, { "hex.builtin.view.hex_editor.menu.edit.bookmark", "添加书签" },
{ "hex.builtin.view.hexeditor.menu.edit.set_base", "设置基地址" }, { "hex.builtin.view.hex_editor.menu.edit.set_base", "设置基地址" },
{ "hex.builtin.view.hexeditor.menu.edit.resize", "修改大小..." }, { "hex.builtin.view.hex_editor.menu.edit.resize", "修改大小..." },
{ "hex.builtin.view.hexeditor.menu.edit.insert", "插入..." }, { "hex.builtin.view.hex_editor.menu.edit.insert", "插入..." },
{ "hex.builtin.view.information.name", "数据信息" }, { "hex.builtin.view.information.name", "数据信息" },
{ "hex.builtin.view.information.control", "控制" }, { "hex.builtin.view.information.control", "控制" },