From 46a00c6c56ecf01c0bfaba58cf4bc3e32ba2c88d Mon Sep 17 00:00:00 2001 From: leehaoze Date: Tue, 29 Sep 2026 13:36:39 +0800 Subject: [PATCH] Improve Chinese localization and display adaptation - Complete Chinese translations for goto navigation, taskbar menus, file manage, and tooltips - Add baseline fallback keys in en.nss for backward compatibility - Fix submenu grouping in modify.nss for localized environments - Add locale alias support (zh, zh-SG, zh-HK, zh-MO) and two-tier fallback in shell.nss - Add Chinese resource strings and dialogs in Shell.rc - Add dynamic localized text loading and system UI font adaptation in shell.exe --- src/bin/imports/file-manage.nss | 4 +- src/bin/imports/goto.nss | 30 ++++++------ src/bin/imports/lang/en.nss | 26 +++++++++++ src/bin/imports/lang/zh-CN.nss | 40 +++++++++++++--- src/bin/imports/lang/zh-HK.nss | 4 ++ src/bin/imports/lang/zh-MO.nss | 4 ++ src/bin/imports/lang/zh-SG.nss | 4 ++ src/bin/imports/lang/zh-TW.nss | 54 +++++++++++++++------ src/bin/imports/lang/zh.nss | 4 ++ src/bin/imports/modify.nss | 12 ++--- src/bin/imports/taskbar.nss | 14 +++--- src/bin/imports/terminal.nss | 2 +- src/bin/shell.nss | 6 ++- src/exe/src/Control.h | 22 +++++++-- src/exe/src/Main.cpp | 83 +++++++++++++++++++++------------ src/shared/Resource.h | 10 ++++ src/shared/Resource/Shell.rc | 70 ++++++++++++++++++++++++++- src/tools/version/Resource.h | 10 ++++ 18 files changed, 309 insertions(+), 90 deletions(-) create mode 100644 src/bin/imports/lang/zh-HK.nss create mode 100644 src/bin/imports/lang/zh-MO.nss create mode 100644 src/bin/imports/lang/zh-SG.nss create mode 100644 src/bin/imports/lang/zh.nss diff --git a/src/bin/imports/file-manage.nss b/src/bin/imports/file-manage.nss index cc3a6547..14387da5 100644 --- a/src/bin/imports/file-manage.nss +++ b/src/bin/imports/file-manage.nss @@ -1,4 +1,4 @@ -menu(where=sel.count>0 type='file|dir|drive|namespace|back' mode="multiple" title=loc.file_manage image=\uE253) +menu(where=sel.count>0 type='file|dir|drive|namespace|back' mode="multiple" title=loc.file_manage image=\uE253) { menu(separator="after" title=title.copy_path image=icon.copy_path) { @@ -13,7 +13,7 @@ item(mode="single" type='file' where=sel.file.ext.len>0 title=sel.file.ext cmd=command.copy(sel.file.ext)) } - item(mode="single" type="file" title=loc.change_extension image=\uE0B5 cmd=if(input(loc.change_extension, "Type extension"), + item(mode="single" type="file" title=loc.change_extension image=\uE0B5 cmd=if(input(loc.change_extension, loc.type_extension), io.rename(sel.path, path.join(sel.dir, sel.file.title + "." + input.result)))) menu(separator="after" image=\uE290 title=title.select) diff --git a/src/bin/imports/goto.nss b/src/bin/imports/goto.nss index 41ab526a..dde9e1e2 100644 --- a/src/bin/imports/goto.nss +++ b/src/bin/imports/goto.nss @@ -2,23 +2,23 @@ menu(type='*' where=window.is_taskbar||sel.count mode=mode.multiple title=title. { menu(title=loc.folder image=\uE1F4) { - item(title='Windows' image=inherit cmd=sys.dir) - item(title='System' image=inherit cmd=sys.bin) - item(title='Program Files' image=inherit cmd=sys.prog) - item(title='Program Files x86' image=inherit cmd=sys.prog32) - item(title='ProgramData' image=inherit cmd=sys.programdata) - item(title='Applications' image=inherit cmd='shell:appsfolder') - item(title='Users' image=inherit cmd=sys.users) + item(title=loc.windows image=inherit cmd=sys.dir) + item(title=loc.system_bin image=inherit cmd=sys.bin) + item(title=loc.program_files image=inherit cmd=sys.prog) + item(title=loc.program_files_x86 image=inherit cmd=sys.prog32) + item(title=loc.program_data image=inherit cmd=sys.programdata) + item(title=loc.applications image=inherit cmd='shell:appsfolder') + item(title=loc.users image=inherit cmd=sys.users) separator //item(title='@user.name@@@sys.name' vis=label) - item(title='Desktop' image=inherit cmd=user.desktop) - item(title='Downloads' image=inherit cmd=user.downloads) - item(title='Pictures' image=inherit cmd=user.pictures) - item(title='Documents' image=inherit cmd=user.documents) - item(title='Startmenu' image=inherit cmd=user.startmenu) - item(title='Profile' image=inherit cmd=user.dir) - item(title='AppData' image=inherit cmd=user.appdata) - item(title='Temp' image=inherit cmd=user.temp) + item(title=loc.desktop image=inherit cmd=user.desktop) + item(title=loc.downloads image=inherit cmd=user.downloads) + item(title=loc.pictures image=inherit cmd=user.pictures) + item(title=loc.documents image=inherit cmd=user.documents) + item(title=loc.startmenu image=inherit cmd=user.startmenu) + item(title=loc.profile image=inherit cmd=user.dir) + item(title=loc.appdata image=inherit cmd=user.appdata) + item(title=loc.temp image=inherit cmd=user.temp) } item(title=title.control_panel image=\uE0F3 cmd='shell:::{5399E694-6CE5-4D6C-8FCE-1D8870FDCBA0}') item(title=loc.all_control_panel_items image=\uE0F3 cmd='shell:::{ED7BA470-8E54-465E-825C-99712043E01C}') diff --git a/src/bin/imports/lang/en.nss b/src/bin/imports/lang/en.nss index e584947d..2f5cc5f3 100644 --- a/src/bin/imports/lang/en.nss +++ b/src/bin/imports/lang/en.nss @@ -19,6 +19,7 @@ all="All" invert="Invert" none="None" change_extension="Change extension" +type_extension="Type extension" take_ownership="Take ownership" show_hide="Show/Hide" system_files="System files" @@ -41,6 +42,21 @@ guid="Guid" // goto.nss folder="Folder" +windows="Windows" +system_bin="System" +program_files="Program Files" +program_files_x86="Program Files x86" +program_data="ProgramData" +applications="Applications" +users="Users" +desktop="Desktop" +downloads="Downloads" +pictures="Pictures" +documents="Documents" +startmenu="Startmenu" +profile="Profile" +appdata="AppData" +temp="Temp" all_control_panel_items="All Control Panel Items" system="System" about="About" @@ -70,6 +86,12 @@ connections="Connections" // taskbar.nss +config="Config" +manager="Manager" +directory="Directory" +version="Version" +docs="Documentation" +donate="Donate" apps="Apps" paint="Paint" edge="Edge" @@ -82,3 +104,7 @@ minimize_all_windows="Minimize all windows" restore_all_windows="Restore all windows" task_manager="Task Manager" taskbar_Settings="Taskbar Settings" + +// terminal.nss +tip_run_admin_prefix="Press [SHIFT key] or [RIGHT-CLICK] to run " +tip_run_admin_suffix=" as administrator" diff --git a/src/bin/imports/lang/zh-CN.nss b/src/bin/imports/lang/zh-CN.nss index 8a59c39e..f00e85b4 100644 --- a/src/bin/imports/lang/zh-CN.nss +++ b/src/bin/imports/lang/zh-CN.nss @@ -4,7 +4,7 @@ by: github.com/JohnsonRan github.com/XY0797 */ -xxx="欢迎用中文" +xxx="欢迎使用中文" // shell.nss pin_unpin="固定/取消固定" @@ -15,12 +15,13 @@ windows_notepad="Windows 记事本" // file-manage.nss file_manage="文件管理" -copy_multiple_paths='复制选中的 (@sel.count) 个项目' +copy_multiple_paths='复制选中的 (@sel.count) 个项目路径' all="全选" invert="反选" none="全不选" change_extension="更改扩展名" -take_ownership="更改所有权" +type_extension="请输入扩展名" +take_ownership="取得所有权" show_hide="显示/隐藏" system_files="系统文件" file_name_extensions="文件扩展名" @@ -41,12 +42,27 @@ datetime="当前时间" guid="Guid" // goto.nss -folder="文件夹" +folder="常用文件夹" +windows="Windows" +system_bin="System32" +program_files="Program Files" +program_files_x86="Program Files (x86)" +program_data="ProgramData" +applications="应用程序" +users="用户" +desktop="桌面" +downloads="下载" +pictures="图片" +documents="文档" +startmenu="开始菜单" +profile="个人文件夹" +appdata="应用数据 (AppData)" +temp="临时文件 (Temp)" all_control_panel_items="所有控制面板项" system="系统" -about="系统信息" -your_info="账户信息" -system_info="系统信息(CMD)" +about="关于" +your_info="你的信息" +system_info="系统信息 (CMD)" search="搜索" usb="USB" windows_update="Windows 更新" @@ -71,6 +87,12 @@ connections="网络连接" // taskbar.nss +config="配置文件" +manager="管理器" +directory="程序目录" +version="版本" +docs="帮助文档" +donate="赞助支持" apps="应用" paint="画图" edge="Edge" @@ -83,3 +105,7 @@ minimize_all_windows="最小化所有窗口" restore_all_windows="还原所有窗口" task_manager="任务管理器" taskbar_Settings="任务栏设置" + +// terminal.nss +tip_run_admin_prefix="按住 [Shift 键] 或 [单击右键] 以管理员身份运行 " +tip_run_admin_suffix="" diff --git a/src/bin/imports/lang/zh-HK.nss b/src/bin/imports/lang/zh-HK.nss new file mode 100644 index 00000000..0845d53d --- /dev/null +++ b/src/bin/imports/lang/zh-HK.nss @@ -0,0 +1,4 @@ +/* +Chinese (Hong Kong SAR - Traditional Chinese) +*/ +import lang "zh-TW.nss" diff --git a/src/bin/imports/lang/zh-MO.nss b/src/bin/imports/lang/zh-MO.nss new file mode 100644 index 00000000..a6631d63 --- /dev/null +++ b/src/bin/imports/lang/zh-MO.nss @@ -0,0 +1,4 @@ +/* +Chinese (Macau SAR - Traditional Chinese) +*/ +import lang "zh-TW.nss" diff --git a/src/bin/imports/lang/zh-SG.nss b/src/bin/imports/lang/zh-SG.nss new file mode 100644 index 00000000..6ef7c8de --- /dev/null +++ b/src/bin/imports/lang/zh-SG.nss @@ -0,0 +1,4 @@ +/* +Chinese (Singapore - Simplified Chinese) +*/ +import lang "zh-CN.nss" diff --git a/src/bin/imports/lang/zh-TW.nss b/src/bin/imports/lang/zh-TW.nss index 8c0781d5..2f61f98f 100644 --- a/src/bin/imports/lang/zh-TW.nss +++ b/src/bin/imports/lang/zh-TW.nss @@ -14,17 +14,18 @@ windows_notepad="Windows 記事本" // file-manage.nss file_manage="檔案管理" -copy_multiple_paths='複製選中的 (@sel.count) 個項目' +copy_multiple_paths='複製選中的 (@sel.count) 個項目路徑' all="全選" invert="反向選擇" none="全部不選" -change_extension="更改副檔名" -take_ownership="更改所有權" +change_extension="變更副檔名" +type_extension="請輸入副檔名" +take_ownership="取得所有權" show_hide="顯示/隱藏" system_files="系統檔案" -file_name_extensions="檔案副檔名" +file_name_extensions="副檔名" attributes="屬性" -register_server="註冊服務" +register_server="註冊伺服器" register="註冊" unregister="取消註冊" hidden="隱藏" @@ -36,20 +37,35 @@ modified="修改時間" accessed="存取時間" new_folder="新增資料夾" new_file="新增檔案" -datetime="當前時間" +datetime="目前時間" guid="Guid" // goto.nss -folder="資料夾" +folder="常用資料夾" +windows="Windows" +system_bin="System32" +program_files="Program Files" +program_files_x86="Program Files (x86)" +program_data="ProgramData" +applications="應用程式" +users="使用者" +desktop="桌面" +downloads="下載" +pictures="圖片" +documents="文件" +startmenu="開始功能表" +profile="個人資料夾" +appdata="應用程式資料 (AppData)" +temp="暫存檔案 (Temp)" all_control_panel_items="所有控制台項目" system="系統" -about="系統資訊" -your_info="帳戶資訊" -system_info="系統資訊(命令提示字元)" +about="關於" +your_info="您的資訊" +system_info="系統資訊 (CMD)" search="搜尋" usb="USB" windows_update="Windows 更新" -windows_defender="Windows Update" +windows_defender="Windows 安全性" apps="應用程式" apps_features="已安裝的應用程式" default_apps="預設應用程式" @@ -70,15 +86,25 @@ connections="網路連線" // taskbar.nss +config="設定檔" +manager="管理員" +directory="程式目錄" +version="版本" +docs="說明文件" +donate="贊助支援" apps="應用程式" paint="小畫家" edge="Edge" calculator="小算盤" windows="視窗" -cascade_windows="階梯式視窗" -Show_windows_stacked="堆疊視窗" -Show_windows_side_by_side="並排視窗" +cascade_windows="重疊顯示視窗" +Show_windows_stacked="堆疊顯示視窗" +Show_windows_side_by_side="並排顯示視窗" minimize_all_windows="最小化所有視窗" restore_all_windows="還原所有視窗" task_manager="工作管理員" taskbar_Settings="工作列設定" + +// terminal.nss +tip_run_admin_prefix="按住 [Shift 鍵] 或 [按右鍵] 以系統管理員身分執行 " +tip_run_admin_suffix="" diff --git a/src/bin/imports/lang/zh.nss b/src/bin/imports/lang/zh.nss new file mode 100644 index 00000000..3ac428ee --- /dev/null +++ b/src/bin/imports/lang/zh.nss @@ -0,0 +1,4 @@ +/* +Chinese (Generic / Fallback to Simplified Chinese) +*/ +import lang "zh-CN.nss" diff --git a/src/bin/imports/modify.nss b/src/bin/imports/modify.nss index a8976b5e..cb2e2a1b 100644 --- a/src/bin/imports/modify.nss +++ b/src/bin/imports/modify.nss @@ -6,14 +6,14 @@ modify(mode=mode.multiple modify(type="recyclebin" where=window.is_desktop and this.id==id.empty_recycle_bin pos=1 sep) -modify(find="unpin*" pos="bottom" menu="Pin/Unpin") -modify(find="pin*" pos="top" menu="Pin/Unpin") +modify(where=this.id(id.unpin_from_start, id.unpin_from_taskbar, id.unpin_from_quick_access, id.unpin_from_start_menu) || find="unpin*|*取消固定*" pos="bottom" menu=loc.pin_unpin) +modify(where=this.id(id.pin_to_start, id.pin_to_taskbar, id.pin_to_quick_access, id.pin_to_start_menu, id.pin_current_folder_to_quick_access) || find="pin*|*固定*" pos="top" menu=loc.pin_unpin) -modify(where=this.id==id.copy_as_path menu="file manage") -modify(type="dir.back|drive.back" where=this.id==id.customize_this_folder pos=1 sep="top" menu="file manage") +modify(where=this.id==id.copy_as_path menu=loc.file_manage) +modify(type="dir.back|drive.back" where=this.id==id.customize_this_folder pos=1 sep="top" menu=loc.file_manage) -modify(where=str.equals(this.name, ["open in terminal", "open linux shell here"]) || this.id==id.open_powershell_window_here - pos="bottom" menu="Terminal") +modify(where=str.equals(this.name, ["open in terminal", "open linux shell here", "在终端中打开", "在終端機中開啟"]) || this.id==id.open_powershell_window_here + pos="bottom" menu=title.terminal) modify(mode=mode.multiple where=this.id( diff --git a/src/bin/imports/taskbar.nss b/src/bin/imports/taskbar.nss index a08bacc7..07cd50ff 100644 --- a/src/bin/imports/taskbar.nss +++ b/src/bin/imports/taskbar.nss @@ -1,11 +1,11 @@ -menu(type="taskbar" vis=key.shift() or key.lbutton() pos=0 title=app.name image=\uE249) +menu(type="taskbar" vis=key.shift() or key.lbutton() pos=0 title=app.name image=\uE249) { - item(title="config" image=\uE10A cmd='"@app.cfg"') - item(title="manager" image=\uE0F3 admin cmd='"@app.exe"') - item(title="directory" image=\uE0E8 cmd='"@app.dir"') - item(title="version\t"+@app.ver vis=label col=1) - item(title="docs" image=\uE1C4 cmd='https://nilesoft.org/docs') - item(title="donate" image=\uE1A7 cmd='https://nilesoft.org/donate') + item(title=loc.config image=\uE10A cmd='"@app.cfg"') + item(title=loc.manager image=\uE0F3 admin cmd='"@app.exe"') + item(title=loc.directory image=\uE0E8 cmd='"@app.dir"') + item(title=loc.version+"\t"+@app.ver vis=label col=1) + item(title=loc.docs image=\uE1C4 cmd='https://nilesoft.org/docs') + item(title=loc.donate image=\uE1A7 cmd='https://nilesoft.org/donate') } menu(where=@(this.count == 0) type="taskbar" image=icon.settings expanded=true) { diff --git a/src/bin/imports/terminal.nss b/src/bin/imports/terminal.nss index c3c199b1..11c45d50 100644 --- a/src/bin/imports/terminal.nss +++ b/src/bin/imports/terminal.nss @@ -1,6 +1,6 @@ menu(type='*' where=(sel.count or wnd.is_taskbar or wnd.is_edit) title=title.terminal sep=sep.top image=icon.run_with_powershell) { - $tip_run_admin=["\xE1A7 Press [SHIFT key] or [RIGHT-CLICK] to run " + this.title + " as administrator", tip.warning, 1.0] + $tip_run_admin=["\xE1A7 " + loc.tip_run_admin_prefix + this.title + loc.tip_run_admin_suffix, tip.warning, 1.0] $has_admin=key.shift() or key.rbutton() item(title=title.command_prompt tip=tip_run_admin admin=has_admin image cmd-prompt=`/K TITLE Command Prompt &ver& PUSHD "@sel.dir"`) diff --git a/src/bin/shell.nss b/src/bin/shell.nss index 8ddaacae..9716d269 100644 --- a/src/bin/shell.nss +++ b/src/bin/shell.nss @@ -1,4 +1,4 @@ -settings +settings { priority=1 exclude.where = !process.is_explorer @@ -13,7 +13,9 @@ $loc_path='imports\lang\' import lang loc_path + "en.nss" import lang if(path.exists(loc_path + sys.lang + ".nss"), loc_path + sys.lang + ".nss", - loc_path + "en.nss") + if(path.exists(loc_path + sys.lang.name + ".nss"), + loc_path + sys.lang.name + ".nss", + loc_path + "en.nss")) // or import lang 'imports/lang/en.nss' diff --git a/src/exe/src/Control.h b/src/exe/src/Control.h index 15cb7ba4..fd7c0ea4 100644 --- a/src/exe/src/Control.h +++ b/src/exe/src/Control.h @@ -109,14 +109,26 @@ namespace Nilesoft Control() { - Font.Handle = (HFONT)::GetStockObject(DEFAULT_GUI_FONT); LOGFONT lf{}; - if(::GetObject(Font.Handle, sizeof(LOGFONT), &lf)) + NONCLIENTMETRICSW ncm{ sizeof(ncm) }; + if(::SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, sizeof(ncm), &ncm, 0)) { - if(lf.lfQuality < ANTIALIASED_QUALITY) + lf = ncm.lfMessageFont; + lf.lfQuality = CLEARTYPE_NATURAL_QUALITY; + _hfont = ::CreateFontIndirectW(&lf); + Font.Handle = _hfont; + } + else + { + Font.Handle = (HFONT)::GetStockObject(DEFAULT_GUI_FONT); + if(::GetObject(Font.Handle, sizeof(LOGFONT), &lf)) { - lf.lfQuality = CLEARTYPE_NATURAL_QUALITY; - _hfont = CreateFontIndirectW(&lf); + if(lf.lfQuality < ANTIALIASED_QUALITY) + { + lf.lfQuality = CLEARTYPE_NATURAL_QUALITY; + _hfont = ::CreateFontIndirectW(&lf); + Font.Handle = _hfont; + } } } } diff --git a/src/exe/src/Main.cpp b/src/exe/src/Main.cpp index d2899d5f..f9d5e4c3 100644 --- a/src/exe/src/Main.cpp +++ b/src/exe/src/Main.cpp @@ -414,7 +414,8 @@ bool Register(REGOP reg, HWND hwnd = nullptr) if(!dll) { - auto ernf = L"shell.dll not found."; + string ernf = string::Extract(IDS_DLL_NOT_FOUND); + if(ernf.empty()) ernf = L"shell.dll not found."; _log->error(ernf); if(!reg.SILENT) MessageBox::Show(ernf, APP_FULLNAME, MessageBoxIcon::Warning); @@ -703,26 +704,44 @@ int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE, _In_ LPWSTR, PlutoVG pluto(dd.data(), static_cast(dd.length()), dpi(96), dpi(96), 96); hbitmap_logo = pluto.tobitmap(); - auto btn_close = new UI::Button(L"\uE256", { rc_window.right - dpi(27), dpi(1), dpi(26), dpi(26) }, ID_CLOSE, main_window, BS_OWNERDRAW, _hfont_icon, L"Close"); + string str_close = string::Extract(IDS_BTN_CLOSE); + if(str_close.empty()) str_close = L"Close"; + auto btn_close = new UI::Button(L"\uE256", { rc_window.right - dpi(27), dpi(1), dpi(26), dpi(26) }, ID_CLOSE, main_window, BS_OWNERDRAW, _hfont_icon, str_close); - auto btn_reg = new UI::Button(L"Register\tCtrl+R", rc_reg, ID_REG, main_window, BS_OWNERDRAW); - auto btn_unreg = new UI::Button(L"Unregister\tCtrl+U", rc_unreg, ID_UNREG, main_window, BS_OWNERDRAW); - auto btn_restart = new UI::Button(L"Restart Explorer\tCtrl+X", { rc_reg.left, rc_unreg.top + offset_2 + btn_h, btn_w, btn_h }, ID_RESTART, main_window, BS_OWNERDRAW); + string str_reg = string::Extract(IDS_BTN_REGISTER); + if(str_reg.empty()) str_reg = L"Register\tCtrl+R"; + auto btn_reg = new UI::Button(str_reg, rc_reg, ID_REG, main_window, BS_OWNERDRAW); - auto tt = btn_restart->Rect.top + dpi(30) + btn_h + offset_2; - auto tl = btn_restart->Rect.left; + string str_unreg = string::Extract(IDS_BTN_UNREGISTER); + if(str_unreg.empty()) str_unreg = L"Unregister\tCtrl+U"; + auto btn_unreg = new UI::Button(str_unreg, rc_unreg, ID_UNREG, main_window, BS_OWNERDRAW); - auto btn_web = new UI::Button(L"\uE11F", { tl, tt, btn_h, btn_h }, ID_WEB, main_window, BS_OWNERDRAW, _hfont_icon, L"Website Ctrl+W"); + string str_restart = string::Extract(IDS_BTN_RESTART_EXPLORER); + if(str_restart.empty()) str_restart = L"Restart Explorer\tCtrl+X"; + auto btn_restart = new UI::Button(str_restart, { rc_reg.left, rc_unreg.top + offset_2 + btn_h, btn_w, btn_h }, ID_RESTART, main_window, BS_OWNERDRAW); + + auto tt = btn_restart->Rect.top + dpi(30) + btn_h + offset_2; + auto tl = btn_restart->Rect.left; + + string str_web = string::Extract(IDS_BTN_WEBSITE); + if(str_web.empty()) str_web = L"Website Ctrl+W"; + auto btn_web = new UI::Button(L"\uE11F", { tl, tt, btn_h, btn_h }, ID_WEB, main_window, BS_OWNERDRAW, _hfont_icon, str_web); - tl += btn_h + offset_2; - auto btn_email = new UI::Button(L"\uE115", { tl, tt, btn_h, btn_h }, ID_EMAIL, main_window, BS_OWNERDRAW, _hfont_icon, L"Email Ctrl+E"); + tl += btn_h + offset_2; + string str_email = string::Extract(IDS_BTN_EMAIL); + if(str_email.empty()) str_email = L"Email Ctrl+E"; + auto btn_email = new UI::Button(L"\uE115", { tl, tt, btn_h, btn_h }, ID_EMAIL, main_window, BS_OWNERDRAW, _hfont_icon, str_email); - tl += btn_h + offset_2; - auto btn_bug = new UI::Button(L"\uE22B", { tl, tt, btn_h, btn_h }, ID_GITHUB, main_window, BS_OWNERDRAW, _hfont_icon, L"Github Ctrl+G"); + tl += btn_h + offset_2; + string str_github = string::Extract(IDS_BTN_GITHUB); + if(str_github.empty()) str_github = L"Github Ctrl+G"; + auto btn_bug = new UI::Button(L"\uE22B", { tl, tt, btn_h, btn_h }, ID_GITHUB, main_window, BS_OWNERDRAW, _hfont_icon, str_github); //tl += (dpi(50) - btn_h) + btn_h + dpi(12); tl += btn_h + offset_2; - auto btn_donate = new UI::Button(L"\uE1A8", { tl, tt, btn_h, btn_h }, ID_DONATE, main_window, BS_OWNERDRAW, _hfont_icon, L"Donate Ctrl+D"); + string str_donate = string::Extract(IDS_BTN_DONATE); + if(str_donate.empty()) str_donate = L"Donate Ctrl+D"; + auto btn_donate = new UI::Button(L"\uE1A8", { tl, tt, btn_h, btn_h }, ID_DONATE, main_window, BS_OWNERDRAW, _hfont_icon, str_donate); main_window->SetColor({ btn_reg, btn_unreg,btn_restart,btn_donate,btn_web,btn_email,btn_bug }, @@ -1014,9 +1033,16 @@ LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPara dc.set_text(0x808080); - auto ofont = (HFONT)::GetStockObject(DEFAULT_GUI_FONT); - auto cfont = FontSize(ofont, dpi(14), CLEARTYPE_NATURAL_QUALITY); - ofont = dc.set_font(cfont); + LOGFONT lf_ui{}; + NONCLIENTMETRICSW ncm_ui{ sizeof(ncm_ui) }; + if(::SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, sizeof(ncm_ui), &ncm_ui, 0)) + lf_ui = ncm_ui.lfMessageFont; + else + ::GetObject(::GetStockObject(DEFAULT_GUI_FONT), sizeof(LOGFONT), &lf_ui); + lf_ui.lfHeight = -dpi(14); + lf_ui.lfQuality = CLEARTYPE_NATURAL_QUALITY; + auto cfont = ::CreateFontIndirectW(&lf_ui); + auto ofont = dc.set_font(cfont); RECT rect = { 0, dpi(150 + 10), dpi(150), dpi(25 + 128 + 32) }; @@ -1142,19 +1168,18 @@ BOOL CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, [[maybe_unused]] L { //WCHAR szTitle[100]; // LoadString(g_hInstance, IDS_APP_TITLE, szTitle, ARRAYSIZE(szTitle)); - auto usage = L"Command-Line Help\r\n\r\n" - //L"shell.exe [-[r][u]] [-i] [-s] [-re]\n\n" - L"-register\t\tRegistering.\r\n" - L"-unregister\tUnregistering.\r\n" - L"-treat\t\tDisable Windows 11 context menu.\r\n" - L"-silent\t\tPrevents displaying messages.\r\n" - L"-restart\t\tRestart Windows Explorer.\r\n\r\n" - //L"-runas:N\t\tLaunch with elevated privileges.\r\n" - //L"\t\tN=[admin | system | trustedinsaller]\r\n\r\n" - L"-?\t\tDispay this help message.\r\n\r\n" - L"Examples:\r\nshell.exe -register -treat\r\n" - // L"shell.exe -runas:admin -cmd:'cmd.exe' -args:\"/K echo Hello world!\"\r\n" - ; + string usage = string::Extract(IDS_CMDLINE_HELP); + if(usage.empty()) + { + usage = L"Command-Line Help\r\n\r\n" + L"-register\t\tRegistering.\r\n" + L"-unregister\tUnregistering.\r\n" + L"-treat\t\tDisable Windows 11 context menu.\r\n" + L"-silent\t\tPrevents displaying messages.\r\n" + L"-restart\t\tRestart Windows Explorer.\r\n\r\n" + L"-?\t\tDispay this help message.\r\n\r\n" + L"Examples:\r\nshell.exe -register -treat\r\n"; + } ::SetDlgItemTextW(hwnd, IDC_CMDLINE_TEXT, usage); // SendDlgItemMessage(hwnd, IDC_CMDLINE_TEXT, EM_SETSEL, -1, -1); break; diff --git a/src/shared/Resource.h b/src/shared/Resource.h index a159bf6c..8509599c 100644 --- a/src/shared/Resource.h +++ b/src/shared/Resource.h @@ -80,4 +80,14 @@ constexpr auto APP_WEBSITELINK = L"https://nilesoft.org"; #define IDS_RESTART_EXPLORERQ 2006 #define IDS_RESTART_EXPLORER 2007 #define IDS_SELECT_FOLDER 2008 +#define IDS_BTN_REGISTER 2009 +#define IDS_BTN_UNREGISTER 2010 +#define IDS_BTN_RESTART_EXPLORER 2011 +#define IDS_BTN_WEBSITE 2012 +#define IDS_BTN_EMAIL 2013 +#define IDS_BTN_GITHUB 2014 +#define IDS_BTN_DONATE 2015 +#define IDS_BTN_CLOSE 2016 +#define IDS_DLL_NOT_FOUND 2017 +#define IDS_CMDLINE_HELP 2018 } diff --git a/src/shared/Resource/Shell.rc b/src/shared/Resource/Shell.rc index 82f32919..a4841f9d 100644 --- a/src/shared/Resource/Shell.rc +++ b/src/shared/Resource/Shell.rc @@ -1,5 +1,4 @@ -//#pragma code_page(65001) // utf-8 -//#pragma code_page(1252) // English +#pragma code_page(65001) // utf-8 #include #include @@ -82,6 +81,16 @@ STRINGTABLE IDS_WINDOWS_COMPATIBILITY L"Windows Version Not Supported, You need at least Windows 7." IDS_RESTART_EXPLORERQ L"Restart Windows Explorer?" IDS_RESTART_EXPLORER L"Restart Explorer." + IDS_BTN_REGISTER L"Register\tCtrl+R" + IDS_BTN_UNREGISTER L"Unregister\tCtrl+U" + IDS_BTN_RESTART_EXPLORER L"Restart Explorer\tCtrl+X" + IDS_BTN_WEBSITE L"Website Ctrl+W" + IDS_BTN_EMAIL L"Email Ctrl+E" + IDS_BTN_GITHUB L"Github Ctrl+G" + IDS_BTN_DONATE L"Donate Ctrl+D" + IDS_BTN_CLOSE L"Close" + IDS_DLL_NOT_FOUND L"shell.dll not found." + IDS_CMDLINE_HELP L"Command-Line Help\r\n\r\n-register\t\tRegistering.\r\n-unregister\tUnregistering.\r\n-treat\t\tDisable Windows 11 context menu.\r\n-silent\t\tPrevents displaying messages.\r\n-restart\t\tRestart Windows Explorer.\r\n\r\n-?\t\tDispay this help message.\r\n\r\nExamples:\r\nshell.exe -register -treat\r\n" } // @@ -112,3 +121,60 @@ FONT 8, "MS Shell Dlg", 0, 0, 0x1 } #endif + +// +// Simplified Chinese Resources +// +LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED + +STRINGTABLE +{ +#ifdef _WINDLL + IDS_SELECT_FOLDER L"请选择一个文件夹。" +#endif + IDS_REGISTER_SUCCESS L"注册成功完成。" + IDS_UNREGISTER_SUCCESS L"取消注册成功完成。" + IDS_REGISTER_NOT_SUCCESS L"注册未完成。" + IDS_UNREGISTER_NOT_SUCCESS L"取消注册未完成。" + IDS_ADMIN_PRIVILEGES L"缺少管理员权限!" + IDS_WINDOWS_COMPATIBILITY L"不支持的 Windows 版本,至少需要 Windows 7。" + IDS_RESTART_EXPLORERQ L"是否重启 Windows 资源管理器?" + IDS_RESTART_EXPLORER L"正在重启资源管理器。" + IDS_BTN_REGISTER L"注册\tCtrl+R" + IDS_BTN_UNREGISTER L"取消注册\tCtrl+U" + IDS_BTN_RESTART_EXPLORER L"重启资源管理器\tCtrl+X" + IDS_BTN_WEBSITE L"官方网站 Ctrl+W" + IDS_BTN_EMAIL L"反馈邮箱 Ctrl+E" + IDS_BTN_GITHUB L"开源主页 Ctrl+G" + IDS_BTN_DONATE L"捐赠支持 Ctrl+D" + IDS_BTN_CLOSE L"关闭" + IDS_DLL_NOT_FOUND L"未找到 shell.dll。" + IDS_CMDLINE_HELP L"命令行帮助\r\n\r\n-register\t\t注册扩展组件。\r\n-unregister\t取消注册扩展组件。\r\n-treat\t\t接管/禁用 Windows 11 原生右键菜单。\r\n-silent\t\t静默模式,不弹出任何消息框。\r\n-restart\t\t重启 Windows 资源管理器。\r\n\r\n-?\t\t显示此帮助信息。\r\n\r\n示例:\r\nshell.exe -register -treat\r\n" +} + +#ifdef _WINDLL + +IDD_INPUTBOX DIALOGEX 0, 0, 300, 60 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_CAPTION | WS_SYSMENU | DS_CENTER +CAPTION "Shell 输入" +FONT 9, "MS Shell Dlg", 0, 0, 0x1 +{ + LTEXT "提示:", IDC_INPUTBOX_PROMPT, 5, 5, 290, 14, SS_NOPREFIX + EDITTEXT IDC_INPUTBOX_EDIT, 5, 20, 290, 14, ES_AUTOHSCROLL + DEFPUSHBUTTON "确定", IDOK, 245, 40, 50, 14, WS_GROUP + PUSHBUTTON "取消", IDCANCEL, 190, 40, 50, 14, WS_GROUP +} + +#else + +IDD_CMDLINE DIALOGEX 0, 0, 280, 185 +STYLE DS_SETFONT | DS_CENTER | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Nilesoft Shell 命令行帮助" +FONT 9, "MS Shell Dlg", 0, 0, 0x1 +{ + EDITTEXT IDC_CMDLINE_TEXT, 10, 10, 260, 150, ES_MULTILINE | ES_READONLY | NOT WS_BORDER | WS_VSCROLL | NOT WS_TABSTOP + DEFPUSHBUTTON "确定", IDOK, 220, 165, 50, 15 +} + +#endif + diff --git a/src/tools/version/Resource.h b/src/tools/version/Resource.h index 8ce376e5..c1e3bc90 100644 --- a/src/tools/version/Resource.h +++ b/src/tools/version/Resource.h @@ -80,4 +80,14 @@ constexpr auto APP_WEBSITELINK = L"https://nilesoft.org"; #define IDS_RESTART_EXPLORERQ 2006 #define IDS_RESTART_EXPLORER 2007 #define IDS_SELECT_FOLDER 2008 +#define IDS_BTN_REGISTER 2009 +#define IDS_BTN_UNREGISTER 2010 +#define IDS_BTN_RESTART_EXPLORER 2011 +#define IDS_BTN_WEBSITE 2012 +#define IDS_BTN_EMAIL 2013 +#define IDS_BTN_GITHUB 2014 +#define IDS_BTN_DONATE 2015 +#define IDS_BTN_CLOSE 2016 +#define IDS_DLL_NOT_FOUND 2017 +#define IDS_CMDLINE_HELP 2018 } \ No newline at end of file