From c55b6080b91476af350b8772a262a9d16e22579c Mon Sep 17 00:00:00 2001 From: Hacker <787699274@qq.com> Date: Tue, 18 Aug 2026 11:55:15 +0800 Subject: [PATCH] feat: add Simplified Chinese (zh-CN) localization via Win32 resources --- src/NppJsonViewer/Define.h | 96 +-- src/NppJsonViewer/LocalizedStrings.cpp | 178 +++++ src/NppJsonViewer/NPPJSONViewer.vcxproj | 7 + src/NppJsonViewer/NppJsonPlugin.cpp | 2 + src/NppJsonViewer/resource.h | 37 +- src/NppJsonViewer/resource.rc | 883 +++++++++++++++--------- src/UtilityLib/UtilityLib.vcxproj | 6 + 7 files changed, 854 insertions(+), 355 deletions(-) create mode 100644 src/NppJsonViewer/LocalizedStrings.cpp diff --git a/src/NppJsonViewer/Define.h b/src/NppJsonViewer/Define.h index 5ee80f1..9268066 100644 --- a/src/NppJsonViewer/Define.h +++ b/src/NppJsonViewer/Define.h @@ -1,5 +1,6 @@ #pragma once #include "PluginInterface.h" +#include // Define the number of plugin commands here enum class CallBackID : int @@ -14,48 +15,62 @@ enum class CallBackID : int }; constexpr const int nTotalCommandCount = static_cast(CallBackID::ABOUT) + 1; -// Define plugin name here -const TCHAR PLUGIN_NAME[] = TEXT("JSON Viewer"); -const TCHAR PLUGIN_CONFIG[] = TEXT("JSONViewer.ini"); +// --------------------------------------------------------------------------- +// Localizable UI strings. +// These are loaded from the STRINGTABLE resource at init time, so they +// automatically follow the system's UI language (English, Chinese, etc.) +// --------------------------------------------------------------------------- +void LoadLocalizedStrings(HMODULE hModule); -// Text which can be considered for localization -const TCHAR TITLE_JSON_PANEL[] = TEXT("JSON Viewer"); -const TCHAR MENU_SHOW_JSON_PANEL[] = TEXT("Show &JSON Viewer"); -const TCHAR MENU_FORMAT_JSON[] = TEXT("&Format JSON"); -const TCHAR MENU_COMPRESS_JSON[] = TEXT("&Compress JSON"); -const TCHAR MENU_SORT_BY_KEY[] = TEXT("Sort by &key (ascending)"); -const TCHAR MENU_SETTING[] = TEXT("&Settings"); -const TCHAR MENU_ABOUT[] = TEXT("&About"); -const TCHAR MENU_SEPERATOR[] = TEXT("-SEPARATOR-"); - -const TCHAR TOOLTIP_REFRESH[] = TEXT("Refresh JSON tree"); -const TCHAR TOOLTIP_VALIDATE[] = TEXT("Validate JSON to detect any errors"); -const TCHAR TOOLTIP_FORMAT[] = TEXT("Format JSON to beautify it"); -const TCHAR TOOLTIP_SEARCH[] = TEXT("Search in JSON"); +// Plugin name and config filename (config filename must not be localized) +extern const TCHAR* PLUGIN_NAME; +const TCHAR PLUGIN_CONFIG[] = TEXT("JSONViewer.ini"); +// Menu and panel +extern const TCHAR* TITLE_JSON_PANEL; +extern const TCHAR* MENU_SHOW_JSON_PANEL; +extern const TCHAR* MENU_FORMAT_JSON; +extern const TCHAR* MENU_COMPRESS_JSON; +extern const TCHAR* MENU_SORT_BY_KEY; +extern const TCHAR* MENU_SETTING; +extern const TCHAR* MENU_ABOUT; +extern const TCHAR* MENU_SEPERATOR; + +// Tooltips +extern const TCHAR* TOOLTIP_REFRESH; +extern const TCHAR* TOOLTIP_VALIDATE; +extern const TCHAR* TOOLTIP_FORMAT; +extern const TCHAR* TOOLTIP_SEARCH; + +// URLs (not localized) const TCHAR URL_SOURCE_CODE[] = TEXT("https://github.com/NPP-JSONViewer/JSON-Viewer"); const TCHAR URL_REPORT_ISSUE[] = TEXT("https://github.com/NPP-JSONViewer/JSON-Viewer/issues/new"); -const TCHAR JSON_ROOT[] = TEXT("JSON"); - -const TCHAR JSON_ERROR_TITLE[] = TEXT("JSON Viewer: Error"); -const TCHAR JSON_WARNING_TITLE[] = TEXT("JSON Viewer: Warning"); -const TCHAR JSON_INFO_TITLE[] = TEXT("JSON Viewer: Information"); - -const TCHAR JSON_ERR_PARSE[] = TEXT("Unable to parse JSON. Please ensure a valid JSON string is selected."); -const TCHAR JSON_ERR_VALIDATE[] = TEXT("An error occurred while parsing the JSON. Check the current selection for the potential issue."); -const TCHAR JSON_ERR_VALIDATE_SUCCESS[] = TEXT("The JSON appears valid. No errors were found during validation."); -const TCHAR JSON_ERR_SAVE_SETTING[] = TEXT("Could not save the settings. Please try again."); -const TCHAR JSON_ERR_MULTI_SELECTION[] = TEXT("JSON-Viewer does not currently support multiple selections."); - -const TCHAR STR_VERSION[] = TEXT("Version: "); -const TCHAR STR_COPY[] = TEXT("Copy"); -const TCHAR STR_COPYNAME[] = TEXT("Copy name"); -const TCHAR STR_COPYVALUE[] = TEXT("Copy value"); -const TCHAR STR_COPYPATH[] = TEXT("Copy path"); -const TCHAR STR_EXPANDALL[] = TEXT("Expand all"); -const TCHAR STR_COLLAPSEALL[] = TEXT("Collapse all"); - +// Misc +extern const TCHAR* JSON_ROOT; + +// Message titles +extern const TCHAR* JSON_ERROR_TITLE; +extern const TCHAR* JSON_WARNING_TITLE; +extern const TCHAR* JSON_INFO_TITLE; + +// Message content +extern const TCHAR* JSON_ERR_PARSE; +extern const TCHAR* JSON_ERR_VALIDATE; +extern const TCHAR* JSON_ERR_VALIDATE_SUCCESS; +extern const TCHAR* JSON_ERR_SAVE_SETTING; +extern const TCHAR* JSON_ERR_MULTI_SELECTION; + +// Context menu and misc +extern const TCHAR* STR_VERSION; +extern const TCHAR* STR_COPY; +extern const TCHAR* STR_COPYNAME; +extern const TCHAR* STR_COPYVALUE; +extern const TCHAR* STR_COPYPATH; +extern const TCHAR* STR_EXPANDALL; +extern const TCHAR* STR_COLLAPSEALL; + +// INI section/key names (must NOT be localized - config compatibility) const TCHAR STR_INI_FORMATTING_SEC[] = TEXT("Formatting"); const TCHAR STR_INI_FORMATTING_EOL[] = TEXT("EOL"); const TCHAR STR_INI_FORMATTING_LINE[] = TEXT("LINE_FORMATTING"); @@ -70,9 +85,10 @@ const TCHAR STR_INI_OTHER_IGNORE_COMMENT[] = TEXT("IGNORE_COMMENT"); const TCHAR STR_INI_OTHER_IGNORE_COMMA[] = TEXT("IGNORE_TRAILLING_COMMA"); const TCHAR STR_INI_OTHER_REPLACE_UNDEFINED[] = TEXT("REPLACE_VALUE_UNDEFINED"); -const TCHAR STR_SRCH_SEARCHING[] = TEXT("Searching for: "); -const TCHAR STR_SRCH_NOTFOUND[] = TEXT("Not found: "); -const TCHAR STR_SRCH_NOMOREFOUND[] = TEXT("No more found: "); +// Search status +extern const TCHAR* STR_SRCH_SEARCHING; +extern const TCHAR* STR_SRCH_NOTFOUND; +extern const TCHAR* STR_SRCH_NOMOREFOUND; enum class LineEnding { diff --git a/src/NppJsonViewer/LocalizedStrings.cpp b/src/NppJsonViewer/LocalizedStrings.cpp new file mode 100644 index 0000000..045024a --- /dev/null +++ b/src/NppJsonViewer/LocalizedStrings.cpp @@ -0,0 +1,178 @@ +#include "Define.h" +#include "resource.h" +#include +#include + +// Storage for all localized strings loaded from STRINGTABLE resource. +// Sized generously to hold the longest expected string. +struct LocalizedStrings +{ + TCHAR szPluginName[64]; + TCHAR szTitleJsonPanel[64]; + TCHAR szMenuShowJsonPanel[64]; + TCHAR szMenuFormatJson[64]; + TCHAR szMenuCompressJson[64]; + TCHAR szMenuSortByKey[64]; + TCHAR szMenuSeparator[64]; + TCHAR szMenuSetting[64]; + TCHAR szMenuAbout[64]; + TCHAR szTooltipRefresh[64]; + TCHAR szTooltipValidate[128]; + TCHAR szTooltipFormat[128]; + TCHAR szTooltipSearch[64]; + TCHAR szJsonRoot[32]; + TCHAR szJsonErrorTitle[64]; + TCHAR szJsonWarningTitle[64]; + TCHAR szJsonInfoTitle[64]; + TCHAR szJsonErrParse[256]; + TCHAR szJsonErrValidate[256]; + TCHAR szJsonErrValidateSuccess[256]; + TCHAR szJsonErrSaveSetting[128]; + TCHAR szJsonErrMultiSelection[256]; + TCHAR szStrVersion[32]; + TCHAR szStrCopy[32]; + TCHAR szStrCopyName[32]; + TCHAR szStrCopyValue[32]; + TCHAR szStrCopyPath[32]; + TCHAR szStrExpandAll[32]; + TCHAR szStrCollapseAll[32]; + TCHAR szSrchSearching[64]; + TCHAR szSrchNotFound[64]; + TCHAR szSrchNoMoreFound[64]; +}; + +static LocalizedStrings s_strings = {}; +static bool s_bLoaded = false; + +// Fallback (English) values - used if LoadString fails for any reason. +#define FALLBACK(name, val) static const TCHAR s_fallback_##name[] = TEXT(val) + +FALLBACK(PluginName, "JSON Viewer"); +FALLBACK(TitleJsonPanel, "JSON Viewer"); +FALLBACK(MenuShowJsonPanel, "Show &JSON Viewer"); +FALLBACK(MenuFormatJson, "&Format JSON"); +FALLBACK(MenuCompressJson, "&Compress JSON"); +FALLBACK(MenuSortByKey, "Sort by &key (ascending)"); +FALLBACK(Separator, "-SEPARATOR-"); +FALLBACK(Setting, "&Settings"); +FALLBACK(About, "&About"); +FALLBACK(TooltipRefresh, "Refresh JSON tree"); +FALLBACK(TooltipValidate, "Validate JSON to detect any errors"); +FALLBACK(TooltipFormat, "Format JSON to beautify it"); +FALLBACK(TooltipSearch, "Search in JSON"); +FALLBACK(JsonRoot, "JSON"); +FALLBACK(ErrorTitle, "JSON Viewer: Error"); +FALLBACK(WarningTitle, "JSON Viewer: Warning"); +FALLBACK(InfoTitle, "JSON Viewer: Information"); +FALLBACK(ErrParse, "Unable to parse JSON. Please ensure a valid JSON string is selected."); +FALLBACK(ErrValidate, "An error occurred while parsing the JSON. Check the current selection for the potential issue."); +FALLBACK(ErrValidateSuccess, "The JSON appears valid. No errors were found during validation."); +FALLBACK(ErrSaveSetting, "Could not save the settings. Please try again."); +FALLBACK(ErrMultiSelection, "JSON-Viewer does not currently support multiple selections."); +FALLBACK(StrVersion, "Version: "); +FALLBACK(StrCopy, "Copy"); +FALLBACK(StrCopyName, "Copy name"); +FALLBACK(StrCopyValue, "Copy value"); +FALLBACK(StrCopyPath, "Copy path"); +FALLBACK(StrExpandAll, "Expand all"); +FALLBACK(StrCollapseAll, "Collapse all"); +FALLBACK(SrchSearching, "Searching for: "); +FALLBACK(SrchNotFound, "Not found: "); +FALLBACK(SrchNoMoreFound, "No more found: "); + +#undef FALLBACK + +static int LoadStrSafe(HMODULE hMod, UINT uId, LPTSTR pszBuf, int cchBuf, const TCHAR* pszFallback) +{ + int cch = LoadString(hMod, uId, pszBuf, cchBuf); + if (cch == 0) + { + // Fallback to default (English) string + lstrcpyn(pszBuf, pszFallback, cchBuf); + cch = static_cast(_tcslen(pszBuf)); + } + return cch; +} + +void LoadLocalizedStrings(HMODULE hModule) +{ + if (s_bLoaded) + return; + s_bLoaded = true; + + #define LOAD(field, id, fallback) \ + LoadStrSafe(hModule, id, s_strings.sz##field, _countof(s_strings.sz##field), s_fallback_##fallback) + + LOAD(PluginName, IDS_PLUGIN_NAME, PluginName); + LOAD(TitleJsonPanel, IDS_TITLE_JSON_PANEL, TitleJsonPanel); + LOAD(MenuShowJsonPanel, IDS_MENU_SHOW_JSON_PANEL, MenuShowJsonPanel); + LOAD(MenuFormatJson, IDS_MENU_FORMAT_JSON, MenuFormatJson); + LOAD(MenuCompressJson, IDS_MENU_COMPRESS_JSON, MenuCompressJson); + LOAD(MenuSortByKey, IDS_MENU_SORT_BY_KEY, MenuSortByKey); + LOAD(MenuSeparator, IDS_MENU_SEPARATOR, Separator); + LOAD(MenuSetting, IDS_MENU_SETTING, Setting); + LOAD(MenuAbout, IDS_MENU_ABOUT, About); + LOAD(TooltipRefresh, IDS_TOOLTIP_REFRESH, TooltipRefresh); + LOAD(TooltipValidate, IDS_TOOLTIP_VALIDATE, TooltipValidate); + LOAD(TooltipFormat, IDS_TOOLTIP_FORMAT, TooltipFormat); + LOAD(TooltipSearch, IDS_TOOLTIP_SEARCH, TooltipSearch); + LOAD(JsonRoot, IDS_JSON_ROOT, JsonRoot); + LOAD(JsonErrorTitle, IDS_JSON_ERROR_TITLE, ErrorTitle); + LOAD(JsonWarningTitle, IDS_JSON_WARNING_TITLE, WarningTitle); + LOAD(JsonInfoTitle, IDS_JSON_INFO_TITLE, InfoTitle); + LOAD(JsonErrParse, IDS_JSON_ERR_PARSE, ErrParse); + LOAD(JsonErrValidate, IDS_JSON_ERR_VALIDATE, ErrValidate); + LOAD(JsonErrValidateSuccess, IDS_JSON_ERR_VALIDATE_SUCCESS, ErrValidateSuccess); + LOAD(JsonErrSaveSetting, IDS_JSON_ERR_SAVE_SETTING, ErrSaveSetting); + LOAD(JsonErrMultiSelection, IDS_JSON_ERR_MULTI_SELECTION, ErrMultiSelection); + LOAD(StrVersion, IDS_STR_VERSION, StrVersion); + LOAD(StrCopy, IDS_STR_COPY, StrCopy); + LOAD(StrCopyName, IDS_STR_COPYNAME, StrCopyName); + LOAD(StrCopyValue, IDS_STR_COPYVALUE, StrCopyValue); + LOAD(StrCopyPath, IDS_STR_COPYPATH, StrCopyPath); + LOAD(StrExpandAll, IDS_STR_EXPANDALL, StrExpandAll); + LOAD(StrCollapseAll, IDS_STR_COLLAPSEALL, StrCollapseAll); + LOAD(SrchSearching, IDS_SRCH_SEARCHING, SrchSearching); + LOAD(SrchNotFound, IDS_SRCH_NOTFOUND, SrchNotFound); + LOAD(SrchNoMoreFound, IDS_SRCH_NOMOREFOUND, SrchNoMoreFound); + + #undef LOAD +} + +// Extern variable definitions - point to the loaded buffer +#define DEFINE_STR(name, field) const TCHAR* name = s_strings.sz##field + +DEFINE_STR(PLUGIN_NAME, PluginName); +DEFINE_STR(TITLE_JSON_PANEL, TitleJsonPanel); +DEFINE_STR(MENU_SHOW_JSON_PANEL, MenuShowJsonPanel); +DEFINE_STR(MENU_FORMAT_JSON, MenuFormatJson); +DEFINE_STR(MENU_COMPRESS_JSON, MenuCompressJson); +DEFINE_STR(MENU_SORT_BY_KEY, MenuSortByKey); +DEFINE_STR(MENU_SETTING, MenuSetting); +DEFINE_STR(MENU_ABOUT, MenuAbout); +DEFINE_STR(MENU_SEPERATOR, MenuSeparator); +DEFINE_STR(TOOLTIP_REFRESH, TooltipRefresh); +DEFINE_STR(TOOLTIP_VALIDATE, TooltipValidate); +DEFINE_STR(TOOLTIP_FORMAT, TooltipFormat); +DEFINE_STR(TOOLTIP_SEARCH, TooltipSearch); +DEFINE_STR(JSON_ROOT, JsonRoot); +DEFINE_STR(JSON_ERROR_TITLE, JsonErrorTitle); +DEFINE_STR(JSON_WARNING_TITLE, JsonWarningTitle); +DEFINE_STR(JSON_INFO_TITLE, JsonInfoTitle); +DEFINE_STR(JSON_ERR_PARSE, JsonErrParse); +DEFINE_STR(JSON_ERR_VALIDATE, JsonErrValidate); +DEFINE_STR(JSON_ERR_VALIDATE_SUCCESS, JsonErrValidateSuccess); +DEFINE_STR(JSON_ERR_SAVE_SETTING, JsonErrSaveSetting); +DEFINE_STR(JSON_ERR_MULTI_SELECTION, JsonErrMultiSelection); +DEFINE_STR(STR_VERSION, StrVersion); +DEFINE_STR(STR_COPY, StrCopy); +DEFINE_STR(STR_COPYNAME, StrCopyName); +DEFINE_STR(STR_COPYVALUE, StrCopyValue); +DEFINE_STR(STR_COPYPATH, StrCopyPath); +DEFINE_STR(STR_EXPANDALL, StrExpandAll); +DEFINE_STR(STR_COLLAPSEALL, StrCollapseAll); +DEFINE_STR(STR_SRCH_SEARCHING, SrchSearching); +DEFINE_STR(STR_SRCH_NOTFOUND, SrchNotFound); +DEFINE_STR(STR_SRCH_NOMOREFOUND, SrchNoMoreFound); + +#undef DEFINE_STR diff --git a/src/NppJsonViewer/NPPJSONViewer.vcxproj b/src/NppJsonViewer/NPPJSONViewer.vcxproj index fe41d18..79d8dbb 100644 --- a/src/NppJsonViewer/NPPJSONViewer.vcxproj +++ b/src/NppJsonViewer/NPPJSONViewer.vcxproj @@ -108,6 +108,7 @@ + /utf-8 %(AdditionalOptions) Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;NPPJSONVIEWER_EXPORTS;%(PreprocessorDefinitions) false @@ -123,6 +124,7 @@ + /utf-8 %(AdditionalOptions) Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;NPPJSONVIEWER_EXPORTS;%(PreprocessorDefinitions) false @@ -137,6 +139,7 @@ + /utf-8 %(AdditionalOptions) WIN32;NDEBUG;_WINDOWS;_USRDLL;NPPJSONVIEWER_EXPORTS;%(PreprocessorDefinitions) ProgramDatabase @@ -149,6 +152,7 @@ + /utf-8 %(AdditionalOptions) WIN32;NDEBUG;_WINDOWS;_USRDLL;NPPJSONVIEWER_EXPORTS;%(PreprocessorDefinitions) ProgramDatabase @@ -160,6 +164,7 @@ + /utf-8 %(AdditionalOptions) WIN32;NDEBUG;_WINDOWS;_USRDLL;NPPJSONVIEWER_EXPORTS;%(PreprocessorDefinitions) ProgramDatabase @@ -172,6 +177,7 @@ + /utf-8 %(AdditionalOptions) Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;NPPJSONVIEWER_EXPORTS;%(PreprocessorDefinitions) false @@ -199,6 +205,7 @@ + diff --git a/src/NppJsonViewer/NppJsonPlugin.cpp b/src/NppJsonViewer/NppJsonPlugin.cpp index f251481..5e83dd4 100644 --- a/src/NppJsonViewer/NppJsonPlugin.cpp +++ b/src/NppJsonViewer/NppJsonPlugin.cpp @@ -1,6 +1,7 @@ #include "NppJsonPlugin.h" #include "resource.h" #include "Profile.h" +#include "Define.h" #include NppJsonPlugin* NppJsonPlugin::Callback::m_pNppJsonPlugin = nullptr; @@ -14,6 +15,7 @@ NppJsonPlugin::NppJsonPlugin() void NppJsonPlugin::PluginInit(HMODULE hModule) { m_hModule = hModule; + LoadLocalizedStrings(hModule); } void NppJsonPlugin::PluginCleanup() {} diff --git a/src/NppJsonViewer/resource.h b/src/NppJsonViewer/resource.h index 13d1e52..d36aabb 100644 --- a/src/NppJsonViewer/resource.h +++ b/src/NppJsonViewer/resource.h @@ -51,6 +51,41 @@ #define IDM_EXPANDALL 40005 #define IDM_COLLAPSEALL 40006 + +// String table IDs for localization +#define IDS_PLUGIN_NAME 1000 +#define IDS_TITLE_JSON_PANEL 1001 +#define IDS_MENU_SHOW_JSON_PANEL 1002 +#define IDS_MENU_FORMAT_JSON 1003 +#define IDS_MENU_COMPRESS_JSON 1004 +#define IDS_MENU_SORT_BY_KEY 1005 +#define IDS_MENU_SEPARATOR 1006 +#define IDS_MENU_SETTING 1007 +#define IDS_MENU_ABOUT 1008 +#define IDS_TOOLTIP_REFRESH 1009 +#define IDS_TOOLTIP_VALIDATE 1010 +#define IDS_TOOLTIP_FORMAT 1011 +#define IDS_TOOLTIP_SEARCH 1012 +#define IDS_JSON_ROOT 1013 +#define IDS_JSON_ERROR_TITLE 1014 +#define IDS_JSON_WARNING_TITLE 1015 +#define IDS_JSON_INFO_TITLE 1016 +#define IDS_JSON_ERR_PARSE 1017 +#define IDS_JSON_ERR_VALIDATE 1018 +#define IDS_JSON_ERR_VALIDATE_SUCCESS 1019 +#define IDS_JSON_ERR_SAVE_SETTING 1020 +#define IDS_JSON_ERR_MULTI_SELECTION 1021 +#define IDS_STR_VERSION 1022 +#define IDS_STR_COPY 1023 +#define IDS_STR_COPYNAME 1024 +#define IDS_STR_COPYVALUE 1025 +#define IDS_STR_COPYPATH 1026 +#define IDS_STR_EXPANDALL 1027 +#define IDS_STR_COLLAPSEALL 1028 +#define IDS_SRCH_SEARCHING 1029 +#define IDS_SRCH_NOTFOUND 1030 +#define IDS_SRCH_NOMOREFOUND 1031 + // Next default values for new objects // #ifdef APSTUDIO_INVOKED @@ -58,6 +93,6 @@ #define _APS_NEXT_RESOURCE_VALUE 110 #define _APS_NEXT_COMMAND_VALUE 40007 #define _APS_NEXT_CONTROL_VALUE 1036 -#define _APS_NEXT_SYMED_VALUE 101 +#define _APS_NEXT_SYMED_VALUE 1032 #endif #endif diff --git a/src/NppJsonViewer/resource.rc b/src/NppJsonViewer/resource.rc index 2c10a78..b34b71d 100644 --- a/src/NppJsonViewer/resource.rc +++ b/src/NppJsonViewer/resource.rc @@ -1,314 +1,569 @@ -// Microsoft Visual C++ generated resource script. -// -#include "resource.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include "winres.h" - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// English (United States) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -#pragma code_page(1252) - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "resource.h\0" -END - -2 TEXTINCLUDE -BEGIN - "#include ""winres.h""\r\n" - "\0" -END - -3 TEXTINCLUDE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Dialog -// - -IDD_ABOUTDLG DIALOGEX 0, 0, 286, 155 -STYLE DS_ABSALIGN | DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_WINDOWEDGE -CAPTION "About JSON Viewer" -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - DEFPUSHBUTTON "OK",IDOK,118,136,50,14 - GROUPBOX "JSON Viewer",IDC_GB_TITLE,10,7,266,124,BS_CENTER - LTEXT "Hopefully a decent JSON plugin for Notepad++ which can validate, format and compress any JSON file.",IDC_STATIC,15,18,255,18 - LTEXT "Developed by:",IDC_STATIC,15,45,70,8 - LTEXT "Kapil Ratnani",IDC_STATIC,85,45,185,8 - LTEXT "Maintained by:",IDC_STATIC,15,55,70,8 - CONTROL "Rajendra Singh [singh.rajen15@gmail.com]",IDC_SYSLINK_EMAIL, - "SysLink",WS_TABSTOP,85,55,185,8 - LTEXT "Source code:",IDC_STATIC,15,75,70,8 - CONTROL "https://github.com/NPP-JSONViewer/JSON-Viewer",IDC_WEB_SOURCE, - "SysLink",WS_TABSTOP,85,75,185,8 - LTEXT "Report an issue:",IDC_STATIC,15,85,70,8 - CONTROL "https://github.com/NPP-JSONViewer/JSON-Viewer/issues",IDC_WEB_ISSUE, - "SysLink",WS_TABSTOP,85,85,185,8 - LTEXT "License:",IDC_STATIC,15,105,70,8 - LTEXT "MIT license",IDC_STATIC,85,105,185,8 - LTEXT "Special thanks to:",IDC_STATIC,15,115,70,8 - LTEXT "Don Ho for Notepad++",IDC_STATIC,85,115,185,8 -END - -IDD_TREEDLG DIALOGEX 0, 0, 187, 320 -STYLE DS_SETFONT | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_CHILD | WS_VISIBLE | WS_CAPTION | WS_VSCROLL | WS_HSCROLL -EXSTYLE WS_EX_TOPMOST | WS_EX_TOOLWINDOW -CAPTION "JSON Viewer" -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - PUSHBUTTON "",IDC_BTN_REFRESH,2,2,16,12,BS_ICON - PUSHBUTTON "",IDC_BTN_VALIDATE,20,2,16,12,BS_ICON - PUSHBUTTON "",IDC_BTN_FORMAT,38,2,16,12,BS_ICON - CONTROL "",IDC_DIVIDER,"Static",SS_ETCHEDVERT,56,1,2,16 - EDITTEXT IDC_EDT_SEARCH,60,2,99,12,ES_AUTOHSCROLL - PUSHBUTTON "",IDC_BTN_SEARCH,160,2,16,12,BS_ICON - CONTROL "",IDC_ZOOM_SLIDER,"msctls_trackbar32",TBS_AUTOTICKS | TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,2,16,58,12 - RTEXT "100%",IDC_ZOOM_PERCENT,60,16,22,12,SS_NOTIFY | NOT WS_GROUP,WS_EX_RIGHT - CONTROL "",IDC_TREE,"SysTreeView32",TVS_HASBUTTONS | TVS_HASLINES | TVS_DISABLEDRAGDROP | TVS_SHOWSELALWAYS | TVS_FULLROWSELECT | WS_HSCROLL | WS_TABSTOP,2,30,173,264,WS_EX_CLIENTEDGE - EDITTEXT IDC_EDT_NODEPATH,2,296,173,12,ES_AUTOHSCROLL | ES_READONLY -END - -IDD_SETTING DIALOGEX 0, 0, 300, 170 -STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "JSON Viewer Settings" -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - PUSHBUTTON "",IDC_HOR_BAR_TOP,0,1,300,1,WS_DISABLED,WS_EX_STATICEDGE - CONTROL "Follow current tab if it is json file",IDC_CHK_FOLLOW_CURRENT_DOC, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,7,140,10 - CONTROL "Auto format json file when opened",IDC_CHK_FORMAT_ON_OPEN, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,20,140,10 - CONTROL "Ignore trailing comma",IDC_CHK_IGNORE_COMMA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,33,140,10 - CONTROL "Ignore comments in json",IDC_CHK_IGNORE_COMMENT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,46,140,10 - CONTROL "Use json highlighting",IDC_CHK_JSON_HIGHLIGHT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,59,140,10 - CONTROL "Replace value 'undefined' with 'null'",IDC_CHK_REPLACE_UNDEFINED, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,72,140,10 - GROUPBOX " Indentation: ",IDC_STATIC,153,7,140,43 - CONTROL "Auto detect",IDC_RADIO_INDENT_AUTO,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,160,21,50,10 - CONTROL "Use tab",IDC_RADIO_INDENT_TAB,"Button",BS_AUTORADIOBUTTON,240,21,50,10 - CONTROL "Use space",IDC_RADIO_INDENT_SPACE,"Button",BS_AUTORADIOBUTTON,160,33,50,10 - LTEXT "Count:",IDC_STATIC_SPACECOUNT,240,33,24,8 - EDITTEXT IDC_EDT_INDENT_SPACECOUNT,266,32,20,11,ES_AUTOHSCROLL | ES_NUMBER - GROUPBOX " Line Ending: ",IDC_STATIC,153,52,140,43 - CONTROL "Auto detect",IDC_RADIO_LINE_AUTO,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,160,66,50,10 - CONTROL "Window (CR LF)",IDC_RADIO_LINE_WINDOW,"Button",BS_AUTORADIOBUTTON,218,66,65,10 - CONTROL "Unix (LF)",IDC_RADIO_LINE_UNIX,"Button",BS_AUTORADIOBUTTON,160,78,50,10 - CONTROL "Macintosh (LF)",IDC_RADIO_LINE_MAC,"Button",BS_AUTORADIOBUTTON,218,78,65,10 - GROUPBOX " Line formatting: ",IDC_STATIC,153,97,140,43 - CONTROL "Default formatting",IDC_RADIO_LINEFORMAT_DEFAULT,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,160,111,110,10 - CONTROL "Format arrays on a single line",IDC_RADIO_LINEFORMAT_SINGLE, - "Button",BS_AUTORADIOBUTTON,160,123,110,10 - PUSHBUTTON "",IDC_HOR_BAR_BOTTOM,0,145,300,1,WS_DISABLED,WS_EX_STATICEDGE - DEFPUSHBUTTON "OK",IDOK,185,151,50,14 - PUSHBUTTON "Cancel",IDCANCEL,243,151,50,14 -END - - -///////////////////////////////////////////////////////////////////////////// -// -// DESIGNINFO -// - -#ifdef APSTUDIO_INVOKED -GUIDELINES DESIGNINFO -BEGIN - IDD_ABOUTDLG, DIALOG - BEGIN - LEFTMARGIN, 4 - RIGHTMARGIN, 281 - TOPMARGIN, 7 - BOTTOMMARGIN, 150 - END - - IDD_TREEDLG, DIALOG - BEGIN - LEFTMARGIN, 7 - TOPMARGIN, 7 - BOTTOMMARGIN, 308 - END - - IDD_SETTING, DIALOG - BEGIN - LEFTMARGIN, 1 - RIGHTMARGIN, 299 - TOPMARGIN, 1 - END -END -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Version -// - -VS_VERSION_INFO VERSIONINFO - FILEVERSION 2,2,0,0 - PRODUCTVERSION 2,2,0,0 - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS 0x1L -#else - FILEFLAGS 0x0L -#endif - FILEOS 0x40004L - FILETYPE 0x2L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "CompanyName", "NPP-JSONViewer" - VALUE "FileDescription", "Notepad++ plugin for JSON file" - VALUE "FileVersion", "2.2.0.0" - VALUE "InternalName", "JSONViewer" - VALUE "LegalCopyright", "Copyright 2026" - VALUE "OriginalFilename", "NPPJSONViewer.dll" - VALUE "ProductName", "JSONViewer plugin for Notepad++" - VALUE "ProductVersion", "2.2.0.0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END -END - - -///////////////////////////////////////////////////////////////////////////// -// -// AFX_DIALOG_LAYOUT -// - -IDD_ABOUTDLG AFX_DIALOG_LAYOUT -BEGIN - 0 -END - -IDD_TREEDLG AFX_DIALOG_LAYOUT -BEGIN - 0 -END - -IDD_SETTING AFX_DIALOG_LAYOUT -BEGIN - 0 -END - - -///////////////////////////////////////////////////////////////////////////// -// -// Menu -// - -IDR_TREEITEM_MENU MENU -BEGIN - POPUP "" - BEGIN - MENUITEM "Copy", IDM_COPY_TREEITEM - MENUITEM SEPARATOR - MENUITEM "Copy Node Name", IDM_COPY_NODENAME - MENUITEM "Copy Node Value", IDM_COPY_NODEVALUE - MENUITEM "Copy Node Path", IDM_COPY_NODEPATH - MENUITEM SEPARATOR - MENUITEM "Expand All", IDM_EXPANDALL - MENUITEM "Collapse All", IDM_COLLAPSEALL - END -END - - -///////////////////////////////////////////////////////////////////////////// -// -// Icon -// - -// Icon with lowest ID value placed first to ensure application icon -// remains consistent on all systems. -IDI_ICON_REFRESH ICON "res\\Refresh.ico" - -IDI_ICON_SEARCH ICON "res\\search.ico" - -IDI_ICON_FORMAT ICON "res\\format.ico" - -IDI_ICON_VALIDATE ICON "res\\validate.ico" - -IDI_ICON_TOOLBAR ICON "res\\Icon.ico" - -#endif // English (United States) resources -///////////////////////////////////////////////////////////////////////////// - - -///////////////////////////////////////////////////////////////////////////// -// English (India) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENN) -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_INDIA -#pragma code_page(1252) - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "resource.h\0" -END - -2 TEXTINCLUDE -BEGIN - "#include ""winres.h""\r\n" - "\0" -END - -3 TEXTINCLUDE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - -#endif // English (India) resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_ABOUTDLG DIALOGEX 0, 0, 286, 155 +STYLE DS_ABSALIGN | DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_WINDOWEDGE +CAPTION "About JSON Viewer" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + DEFPUSHBUTTON "OK",IDOK,118,136,50,14 + GROUPBOX "JSON Viewer",IDC_GB_TITLE,10,7,266,124,BS_CENTER + LTEXT "Hopefully a decent JSON plugin for Notepad++ which can validate, format and compress any JSON file.",IDC_STATIC,15,18,255,18 + LTEXT "Developed by:",IDC_STATIC,15,45,70,8 + LTEXT "Kapil Ratnani",IDC_STATIC,85,45,185,8 + LTEXT "Maintained by:",IDC_STATIC,15,55,70,8 + CONTROL "Rajendra Singh [singh.rajen15@gmail.com]",IDC_SYSLINK_EMAIL, + "SysLink",WS_TABSTOP,85,55,185,8 + LTEXT "Source code:",IDC_STATIC,15,75,70,8 + CONTROL "https://github.com/NPP-JSONViewer/JSON-Viewer",IDC_WEB_SOURCE, + "SysLink",WS_TABSTOP,85,75,185,8 + LTEXT "Report an issue:",IDC_STATIC,15,85,70,8 + CONTROL "https://github.com/NPP-JSONViewer/JSON-Viewer/issues",IDC_WEB_ISSUE, + "SysLink",WS_TABSTOP,85,85,185,8 + LTEXT "License:",IDC_STATIC,15,105,70,8 + LTEXT "MIT license",IDC_STATIC,85,105,185,8 + LTEXT "Special thanks to:",IDC_STATIC,15,115,70,8 + LTEXT "Don Ho for Notepad++",IDC_STATIC,85,115,185,8 +END + +IDD_TREEDLG DIALOGEX 0, 0, 187, 320 +STYLE DS_SETFONT | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_CHILD | WS_VISIBLE | WS_CAPTION | WS_VSCROLL | WS_HSCROLL +EXSTYLE WS_EX_TOPMOST | WS_EX_TOOLWINDOW +CAPTION "JSON Viewer" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + PUSHBUTTON "",IDC_BTN_REFRESH,2,2,16,12,BS_ICON + PUSHBUTTON "",IDC_BTN_VALIDATE,20,2,16,12,BS_ICON + PUSHBUTTON "",IDC_BTN_FORMAT,38,2,16,12,BS_ICON + CONTROL "",IDC_DIVIDER,"Static",SS_ETCHEDVERT,56,1,2,16 + EDITTEXT IDC_EDT_SEARCH,60,2,99,12,ES_AUTOHSCROLL + PUSHBUTTON "",IDC_BTN_SEARCH,160,2,16,12,BS_ICON + CONTROL "",IDC_ZOOM_SLIDER,"msctls_trackbar32",TBS_AUTOTICKS | TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,2,16,58,12 + RTEXT "100%",IDC_ZOOM_PERCENT,60,16,22,12,SS_NOTIFY | NOT WS_GROUP,WS_EX_RIGHT + CONTROL "",IDC_TREE,"SysTreeView32",TVS_HASBUTTONS | TVS_HASLINES | TVS_DISABLEDRAGDROP | TVS_SHOWSELALWAYS | TVS_FULLROWSELECT | WS_HSCROLL | WS_TABSTOP,2,30,173,264,WS_EX_CLIENTEDGE + EDITTEXT IDC_EDT_NODEPATH,2,296,173,12,ES_AUTOHSCROLL | ES_READONLY +END + +IDD_SETTING DIALOGEX 0, 0, 300, 170 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "JSON Viewer Settings" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + PUSHBUTTON "",IDC_HOR_BAR_TOP,0,1,300,1,WS_DISABLED,WS_EX_STATICEDGE + CONTROL "Follow current tab if it is json file",IDC_CHK_FOLLOW_CURRENT_DOC, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,7,140,10 + CONTROL "Auto format json file when opened",IDC_CHK_FORMAT_ON_OPEN, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,20,140,10 + CONTROL "Ignore trailing comma",IDC_CHK_IGNORE_COMMA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,33,140,10 + CONTROL "Ignore comments in json",IDC_CHK_IGNORE_COMMENT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,46,140,10 + CONTROL "Use json highlighting",IDC_CHK_JSON_HIGHLIGHT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,59,140,10 + CONTROL "Replace value 'undefined' with 'null'",IDC_CHK_REPLACE_UNDEFINED, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,72,140,10 + GROUPBOX " Indentation: ",IDC_STATIC,153,7,140,43 + CONTROL "Auto detect",IDC_RADIO_INDENT_AUTO,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,160,21,50,10 + CONTROL "Use tab",IDC_RADIO_INDENT_TAB,"Button",BS_AUTORADIOBUTTON,240,21,50,10 + CONTROL "Use space",IDC_RADIO_INDENT_SPACE,"Button",BS_AUTORADIOBUTTON,160,33,50,10 + LTEXT "Count:",IDC_STATIC_SPACECOUNT,240,33,24,8 + EDITTEXT IDC_EDT_INDENT_SPACECOUNT,266,32,20,11,ES_AUTOHSCROLL | ES_NUMBER + GROUPBOX " Line Ending: ",IDC_STATIC,153,52,140,43 + CONTROL "Auto detect",IDC_RADIO_LINE_AUTO,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,160,66,50,10 + CONTROL "Window (CR LF)",IDC_RADIO_LINE_WINDOW,"Button",BS_AUTORADIOBUTTON,218,66,65,10 + CONTROL "Unix (LF)",IDC_RADIO_LINE_UNIX,"Button",BS_AUTORADIOBUTTON,160,78,50,10 + CONTROL "Macintosh (LF)",IDC_RADIO_LINE_MAC,"Button",BS_AUTORADIOBUTTON,218,78,65,10 + GROUPBOX " Line formatting: ",IDC_STATIC,153,97,140,43 + CONTROL "Default formatting",IDC_RADIO_LINEFORMAT_DEFAULT,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,160,111,110,10 + CONTROL "Format arrays on a single line",IDC_RADIO_LINEFORMAT_SINGLE, + "Button",BS_AUTORADIOBUTTON,160,123,110,10 + PUSHBUTTON "",IDC_HOR_BAR_BOTTOM,0,145,300,1,WS_DISABLED,WS_EX_STATICEDGE + DEFPUSHBUTTON "OK",IDOK,185,151,50,14 + PUSHBUTTON "Cancel",IDCANCEL,243,151,50,14 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_ABOUTDLG, DIALOG + BEGIN + LEFTMARGIN, 4 + RIGHTMARGIN, 281 + TOPMARGIN, 7 + BOTTOMMARGIN, 150 + END + + IDD_TREEDLG, DIALOG + BEGIN + LEFTMARGIN, 7 + TOPMARGIN, 7 + BOTTOMMARGIN, 308 + END + + IDD_SETTING, DIALOG + BEGIN + LEFTMARGIN, 1 + RIGHTMARGIN, 299 + TOPMARGIN, 1 + END +END +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 2,2,0,0 + PRODUCTVERSION 2,2,0,0 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "CompanyName", "NPP-JSONViewer" + VALUE "FileDescription", "Notepad++ plugin for JSON file" + VALUE "FileVersion", "2.2.0.0" + VALUE "InternalName", "JSONViewer" + VALUE "LegalCopyright", "Copyright � 2026" + VALUE "OriginalFilename", "NPPJSONViewer.dll" + VALUE "ProductName", "JSONViewer plugin for Notepad++" + VALUE "ProductVersion", "2.2.0.0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + + +///////////////////////////////////////////////////////////////////////////// +// +// AFX_DIALOG_LAYOUT +// + +IDD_ABOUTDLG AFX_DIALOG_LAYOUT +BEGIN + 0 +END + +IDD_TREEDLG AFX_DIALOG_LAYOUT +BEGIN + 0 +END + +IDD_SETTING AFX_DIALOG_LAYOUT +BEGIN + 0 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +IDR_TREEITEM_MENU MENU +BEGIN + POPUP "" + BEGIN + MENUITEM "Copy", IDM_COPY_TREEITEM + MENUITEM SEPARATOR + MENUITEM "Copy Node Name", IDM_COPY_NODENAME + MENUITEM "Copy Node Value", IDM_COPY_NODEVALUE + MENUITEM "Copy Node Path", IDM_COPY_NODEPATH + MENUITEM SEPARATOR + MENUITEM "Expand All", IDM_EXPANDALL + MENUITEM "Collapse All", IDM_COLLAPSEALL + END +END + + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE +BEGIN + IDS_PLUGIN_NAME "JSON Viewer" + IDS_TITLE_JSON_PANEL "JSON Viewer" + IDS_MENU_SHOW_JSON_PANEL "Show &JSON Viewer" + IDS_MENU_FORMAT_JSON "&Format JSON" + IDS_MENU_COMPRESS_JSON "&Compress JSON" + IDS_MENU_SORT_BY_KEY "Sort by &key (ascending)" + IDS_MENU_SEPARATOR "-SEPARATOR-" + IDS_MENU_SETTING "&Settings" + IDS_MENU_ABOUT "&About" + IDS_TOOLTIP_REFRESH "Refresh JSON tree" + IDS_TOOLTIP_VALIDATE "Validate JSON to detect any errors" + IDS_TOOLTIP_FORMAT "Format JSON to beautify it" + IDS_TOOLTIP_SEARCH "Search in JSON" + IDS_JSON_ROOT "JSON" + IDS_JSON_ERROR_TITLE "JSON Viewer: Error" + IDS_JSON_WARNING_TITLE "JSON Viewer: Warning" + IDS_JSON_INFO_TITLE "JSON Viewer: Information" + IDS_JSON_ERR_PARSE "Unable to parse JSON. Please ensure a valid JSON string is selected." + IDS_JSON_ERR_VALIDATE "An error occurred while parsing the JSON. Check the current selection for the potential issue." + IDS_JSON_ERR_VALIDATE_SUCCESS "The JSON appears valid. No errors were found during validation." + IDS_JSON_ERR_SAVE_SETTING "Could not save the settings. Please try again." + IDS_JSON_ERR_MULTI_SELECTION "JSON-Viewer does not currently support multiple selections." + IDS_STR_VERSION "Version: " + IDS_STR_COPY "Copy" + IDS_STR_COPYNAME "Copy name" + IDS_STR_COPYVALUE "Copy value" + IDS_STR_COPYPATH "Copy path" + IDS_STR_EXPANDALL "Expand all" + IDS_STR_COLLAPSEALL "Collapse all" + IDS_SRCH_SEARCHING "Searching for: " + IDS_SRCH_NOTFOUND "Not found: " + IDS_SRCH_NOMOREFOUND "No more found: " +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_ICON_REFRESH ICON "res\\Refresh.ico" + +IDI_ICON_SEARCH ICON "res\\search.ico" + +IDI_ICON_FORMAT ICON "res\\format.ico" + +IDI_ICON_VALIDATE ICON "res\\validate.ico" + +IDI_ICON_TOOLBAR ICON "res\\Icon.ico" + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + +///////////////////////////////////////////////////////////////////////////// +// Chinese (Simplified) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS) +LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED +#pragma code_page(65001) + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog (Chinese) +// + +IDD_ABOUTDLG DIALOGEX 0, 0, 286, 155 +STYLE DS_ABSALIGN | DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_WINDOWEDGE +CAPTION "关于 JSON Viewer" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + DEFPUSHBUTTON "确定",IDOK,118,136,50,14 + GROUPBOX "JSON Viewer",IDC_GB_TITLE,10,7,266,124,BS_CENTER + LTEXT "一款实用的 Notepad++ JSON 插件,支持验证、格式化和压缩 JSON 文件。",IDC_STATIC,15,18,255,18 + LTEXT "开发者:",IDC_STATIC,15,45,70,8 + LTEXT "Kapil Ratnani",IDC_STATIC,85,45,185,8 + LTEXT "维护者:",IDC_STATIC,15,55,70,8 + CONTROL "Rajendra Singh [singh.rajen15@gmail.com]",IDC_SYSLINK_EMAIL, + "SysLink",WS_TABSTOP,85,55,185,8 + LTEXT "源代码:",IDC_STATIC,15,75,70,8 + CONTROL "https://github.com/NPP-JSONViewer/JSON-Viewer",IDC_WEB_SOURCE, + "SysLink",WS_TABSTOP,85,75,185,8 + LTEXT "报告问题:",IDC_STATIC,15,85,70,8 + CONTROL "https://github.com/NPP-JSONViewer/JSON-Viewer/issues",IDC_WEB_ISSUE, + "SysLink",WS_TABSTOP,85,85,185,8 + LTEXT "许可证:",IDC_STATIC,15,105,70,8 + LTEXT "MIT 许可证",IDC_STATIC,85,105,185,8 + LTEXT "特别感谢:",IDC_STATIC,15,115,70,8 + LTEXT "Don Ho 的 Notepad++",IDC_STATIC,85,115,185,8 +END + +IDD_TREEDLG DIALOGEX 0, 0, 187, 320 +STYLE DS_SETFONT | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_CHILD | WS_VISIBLE | WS_CAPTION | WS_VSCROLL | WS_HSCROLL +EXSTYLE WS_EX_TOPMOST | WS_EX_TOOLWINDOW +CAPTION "JSON Viewer" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + PUSHBUTTON "",IDC_BTN_REFRESH,2,2,16,12,BS_ICON + PUSHBUTTON "",IDC_BTN_VALIDATE,20,2,16,12,BS_ICON + PUSHBUTTON "",IDC_BTN_FORMAT,38,2,16,12,BS_ICON + CONTROL "",IDC_DIVIDER,"Static",SS_ETCHEDVERT,56,1,2,16 + EDITTEXT IDC_EDT_SEARCH,60,2,99,12,ES_AUTOHSCROLL + PUSHBUTTON "",IDC_BTN_SEARCH,160,2,16,12,BS_ICON + CONTROL "",IDC_ZOOM_SLIDER,"msctls_trackbar32",TBS_AUTOTICKS | TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,2,16,58,12 + RTEXT "100%",IDC_ZOOM_PERCENT,60,16,22,12,SS_NOTIFY | NOT WS_GROUP,WS_EX_RIGHT + CONTROL "",IDC_TREE,"SysTreeView32",TVS_HASBUTTONS | TVS_HASLINES | TVS_DISABLEDRAGDROP | TVS_SHOWSELALWAYS | TVS_FULLROWSELECT | WS_HSCROLL | WS_TABSTOP,2,30,173,264,WS_EX_CLIENTEDGE + EDITTEXT IDC_EDT_NODEPATH,2,296,173,12,ES_AUTOHSCROLL | ES_READONLY +END + +IDD_SETTING DIALOGEX 0, 0, 300, 170 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "JSON Viewer 设置" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + PUSHBUTTON "",IDC_HOR_BAR_TOP,0,1,300,1,WS_DISABLED,WS_EX_STATICEDGE + CONTROL "打开 JSON 文件时跟随当前标签页",IDC_CHK_FOLLOW_CURRENT_DOC, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,7,140,10 + CONTROL "打开 JSON 文件时自动格式化",IDC_CHK_FORMAT_ON_OPEN, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,20,140,10 + CONTROL "忽略尾随逗号",IDC_CHK_IGNORE_COMMA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,33,140,10 + CONTROL "忽略 JSON 中的注释",IDC_CHK_IGNORE_COMMENT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,46,140,10 + CONTROL "启用 JSON 语法高亮",IDC_CHK_JSON_HIGHLIGHT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,59,140,10 + CONTROL "将 'undefined' 值替换为 'null'",IDC_CHK_REPLACE_UNDEFINED, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,72,140,10 + GROUPBOX " 缩进:",IDC_STATIC,153,7,140,43 + CONTROL "自动检测",IDC_RADIO_INDENT_AUTO,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,160,21,50,10 + CONTROL "使用制表符",IDC_RADIO_INDENT_TAB,"Button",BS_AUTORADIOBUTTON,240,21,50,10 + CONTROL "使用空格",IDC_RADIO_INDENT_SPACE,"Button",BS_AUTORADIOBUTTON,160,33,50,10 + LTEXT "数量:",IDC_STATIC_SPACECOUNT,240,33,24,8 + EDITTEXT IDC_EDT_INDENT_SPACECOUNT,266,32,20,11,ES_AUTOHSCROLL | ES_NUMBER + GROUPBOX " 换行符:",IDC_STATIC,153,52,140,43 + CONTROL "自动检测",IDC_RADIO_LINE_AUTO,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,160,66,50,10 + CONTROL "Windows (CR LF)",IDC_RADIO_LINE_WINDOW,"Button",BS_AUTORADIOBUTTON,218,66,65,10 + CONTROL "Unix (LF)",IDC_RADIO_LINE_UNIX,"Button",BS_AUTORADIOBUTTON,160,78,50,10 + CONTROL "Macintosh (CR)",IDC_RADIO_LINE_MAC,"Button",BS_AUTORADIOBUTTON,218,78,65,10 + GROUPBOX " 行格式化:",IDC_STATIC,153,97,140,43 + CONTROL "默认格式化",IDC_RADIO_LINEFORMAT_DEFAULT,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,160,111,110,10 + CONTROL "将数组格式化为单行",IDC_RADIO_LINEFORMAT_SINGLE, + "Button",BS_AUTORADIOBUTTON,160,123,110,10 + PUSHBUTTON "",IDC_HOR_BAR_BOTTOM,0,145,300,1,WS_DISABLED,WS_EX_STATICEDGE + DEFPUSHBUTTON "确定",IDOK,185,151,50,14 + PUSHBUTTON "取消",IDCANCEL,243,151,50,14 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Version (Chinese) +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 2,2,0,0 + PRODUCTVERSION 2,2,0,0 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "080404b0" + BEGIN + VALUE "CompanyName", "NPP-JSONViewer" + VALUE "FileDescription", "Notepad++ JSON 查看插件" + VALUE "FileVersion", "2.2.0.0" + VALUE "InternalName", "JSONViewer" + VALUE "LegalCopyright", "版权所有 © 2026" + VALUE "OriginalFilename", "NPPJSONViewer.dll" + VALUE "ProductName", "JSONViewer plugin for Notepad++" + VALUE "ProductVersion", "2.2.0.0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x804, 1200 + END +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Menu (Chinese) +// + +IDR_TREEITEM_MENU MENU +BEGIN + POPUP "" + BEGIN + MENUITEM "复制", IDM_COPY_TREEITEM + MENUITEM SEPARATOR + MENUITEM "复制节点名称", IDM_COPY_NODENAME + MENUITEM "复制节点值", IDM_COPY_NODEVALUE + MENUITEM "复制节点路径", IDM_COPY_NODEPATH + MENUITEM SEPARATOR + MENUITEM "全部展开", IDM_EXPANDALL + MENUITEM "全部折叠", IDM_COLLAPSEALL + END +END + + +///////////////////////////////////////////////////////////////////////////// +// +// String Table (Chinese) +// + +STRINGTABLE +BEGIN + IDS_PLUGIN_NAME "JSON Viewer" + IDS_TITLE_JSON_PANEL "JSON Viewer" + IDS_MENU_SHOW_JSON_PANEL "显示 JSON 查看器(&J)" + IDS_MENU_FORMAT_JSON "格式化 JSON(&F)" + IDS_MENU_COMPRESS_JSON "压缩 JSON(&C)" + IDS_MENU_SORT_BY_KEY "按键排序(升序)(&K)" + IDS_MENU_SEPARATOR "-SEPARATOR-" + IDS_MENU_SETTING "设置(&S)" + IDS_MENU_ABOUT "关于(&A)" + IDS_TOOLTIP_REFRESH "刷新 JSON 树" + IDS_TOOLTIP_VALIDATE "验证 JSON 是否存在错误" + IDS_TOOLTIP_FORMAT "格式化 JSON,美化显示" + IDS_TOOLTIP_SEARCH "在 JSON 中搜索" + IDS_JSON_ROOT "JSON" + IDS_JSON_ERROR_TITLE "JSON Viewer:错误" + IDS_JSON_WARNING_TITLE "JSON Viewer:警告" + IDS_JSON_INFO_TITLE "JSON Viewer:提示" + IDS_JSON_ERR_PARSE "无法解析 JSON。请确保已选择有效的 JSON 字符串。" + IDS_JSON_ERR_VALIDATE "解析 JSON 时出错。请检查当前选中内容是否存在问题。" + IDS_JSON_ERR_VALIDATE_SUCCESS "JSON 验证通过。验证过程中未发现错误。" + IDS_JSON_ERR_SAVE_SETTING "无法保存设置,请重试。" + IDS_JSON_ERR_MULTI_SELECTION "JSON Viewer 目前不支持多选。" + IDS_STR_VERSION "版本:" + IDS_STR_COPY "复制" + IDS_STR_COPYNAME "复制名称" + IDS_STR_COPYVALUE "复制值" + IDS_STR_COPYPATH "复制路径" + IDS_STR_EXPANDALL "全部展开" + IDS_STR_COLLAPSEALL "全部折叠" + IDS_SRCH_SEARCHING "正在搜索:" + IDS_SRCH_NOTFOUND "未找到:" + IDS_SRCH_NOMOREFOUND "无更多结果:" +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon (shared - only one copy needed, referenced by same IDs) +// + +IDI_ICON_REFRESH ICON "res\\Refresh.ico" + +IDI_ICON_SEARCH ICON "res\\search.ico" + +IDI_ICON_FORMAT ICON "res\\format.ico" + +IDI_ICON_VALIDATE ICON "res\\validate.ico" + +IDI_ICON_TOOLBAR ICON "res\\Icon.ico" + +#endif // Chinese (Simplified) resources +///////////////////////////////////////////////////////////////////////////// + + +///////////////////////////////////////////////////////////////////////////// +// English (India) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENN) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_INDIA +#pragma code_page(1252) + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + +#endif // English (India) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/src/UtilityLib/UtilityLib.vcxproj b/src/UtilityLib/UtilityLib.vcxproj index bec2768..fdb7644 100644 --- a/src/UtilityLib/UtilityLib.vcxproj +++ b/src/UtilityLib/UtilityLib.vcxproj @@ -115,6 +115,7 @@ + /utf-8 %(AdditionalOptions) WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) @@ -125,6 +126,7 @@ + /utf-8 %(AdditionalOptions) true true WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) @@ -139,6 +141,7 @@ + /utf-8 %(AdditionalOptions) _DEBUG;_LIB;%(PreprocessorDefinitions) @@ -149,6 +152,7 @@ + /utf-8 %(AdditionalOptions) _DEBUG;_LIB;%(PreprocessorDefinitions) @@ -159,6 +163,7 @@ + /utf-8 %(AdditionalOptions) true true NDEBUG;_LIB;%(PreprocessorDefinitions) @@ -173,6 +178,7 @@ + /utf-8 %(AdditionalOptions) true true NDEBUG;_LIB;%(PreprocessorDefinitions)