diff --git a/res/locale/rufus.loc b/res/locale/rufus.loc new file mode 100644 index 00000000..a552b61f --- /dev/null +++ b/res/locale/rufus.loc @@ -0,0 +1,74 @@ +l "Chinese (Simplified)" 0x0804, 0x1004, 0x0404, 0x0c04, 0x1404 +t IDC_START "开始" +t IDC_STOP "关闭" +t IDS_DEVICE_TXT "设备" +t IDS_PARTITION_TYPE_TXT "分区计划和目标系统类型" +t IDS_FILESYSTEM_TXT "文件系统" +t IDS_CLUSTERSIZE_TXT "簇的大小" +t IDS_LABEL_TXT "新卷标" +t IDS_FORMATOPTIONS_TXT "格式选项 " +t IDC_BADBLOCKS "检查设备的坏块:" +t IDC_QUICKFORMAT "快速格式化" +t IDC_BOOT "创建一个可启动的磁盘使用:" +r IDC_BOOT +10,0 +t IDC_SET_ICON "创建扩展标签和图标文件" +m IDC_ADVANCED -24,0 +m IDC_NBPASSES 8,0 +m IDC_BOOTTYPE 8,0 +m IDC_SELECT_ISO 6,0 +t IDC_ABOUT "关于..." +t IDC_LOG "日志" +m IDC_LOG -5,0 +r IDC_LOG +5,0 +t IDCANCEL "关闭" +t IDC_START "开始" +t IDC_ADVANCED_GROUP "高级选项" +t IDC_ENABLE_FIXED_DISKS "列表固定(非flash)或USB磁盘分区" +t IDC_EXTRA_PARTITION "添加修复旧的BIOS(额外的分区,校准等等)" +t IDC_RUFUS_MBR "使用 Rufus MBR BIOS ID:" + +p IDD_ABOUTBOX +t IDD_ABOUTBOX "关于 Rufus" +t IDC_ABOUT_LICENSE "许可证" +t IDC_ABOUT_UPDATES "更新" +t IDOK "确定" + +p IDD_ISO_EXTRACT +t IDD_ISO_EXTRACT "复制ISO文件..." +t IDC_ISO_FILENAME "打开ISO映像 - 请稍候..." +t IDC_ISO_ABORT "取消" + +p IDD_LICENSE +t IDD_LICENSE "Rufus 许可证" +t IDOK "取消" + +p IDD_NOTIFICATION +t IDC_MORE_INFO "更多信息" +t IDYES "是" +t IDNO "否" + +p IDD_LOG +t IDD_LOG "日志" +t IDC_LOG_CLEAR "清除日志" +t IDC_LOG_SAVE "保存日志" +t IDCANCEL "关闭日志" + +p IDD_LICENSE +t IDOK "取消" + +p IDD_UPDATE_POLICY +t IDD_UPDATE_POLICY "更新方案和设置" +t IDS_UPDATE_SETTINGS_TXT "设置" +t IDS_UPDATE_FREQUENCY_TXT "检查更新:" +t IDS_INCLUDE_BETAS_TXT "包括测试版本:" +t IDC_CHECK_NOW "立即检查" +t IDCANCEL "取消" + +p IDD_NEW_VERSION +t IDD_NEW_VERSION "检查更新 - Rufus" +t IDS_NEW_VERSION_AVAIL_TXT "更新的版本可用。请下载最新版本!" +t IDC_WEBSITE "点击这里进入网站" +t IDS_NEW_VERSION_NOTES_TXT "发行说明" +t IDS_NEW_VERSION_DOWNLOAD_TXT "下载" +t IDC_DOWNLOAD "下载" +t IDCANCEL "取消" diff --git a/src/msapi_utf8.h b/src/msapi_utf8.h index 80dce69b..aa970b04 100644 --- a/src/msapi_utf8.h +++ b/src/msapi_utf8.h @@ -354,6 +354,20 @@ static __inline DWORD GetCurrentDirectoryU(DWORD nBufferLength, char* lpBuffer) return ret; } +static __inline DWORD GetTempPathU(DWORD nBufferLength, char* lpBuffer) +{ + DWORD ret = 0, err = ERROR_INVALID_DATA; + walloc(lpBuffer, nBufferLength); + ret = GetTempPathW(nBufferLength, wlpBuffer); + err = GetLastError(); + if ((ret != 0) && ((ret = wchar_to_utf8_no_alloc(wlpBuffer, lpBuffer, nBufferLength)) == 0)) { + err = GetLastError(); + } + wfree(lpBuffer); + SetLastError(err); + return ret; +} + static __inline DWORD GetModuleFileNameU(HMODULE hModule, char* lpFilename, DWORD nSize) { DWORD ret = 0, err = ERROR_INVALID_DATA; diff --git a/src/parser.c b/src/parser.c index 7cd8d00c..38f1a918 100644 --- a/src/parser.c +++ b/src/parser.c @@ -199,7 +199,7 @@ char* get_loc_data_file(const char* filename) char *ret = NULL; size_t i = 0; int r = 0, line_nr_incr = 1; - wchar_t wc = 0, last_wc, eol_char = 0; + wchar_t wc = 0, eol_char = 0; BOOL eol = FALSE; if ((filename == NULL) || (filename[0] == 0)) @@ -224,7 +224,6 @@ char* get_loc_data_file(const char* filename) } do { // custom readline handling for string collation, realloc, line numbers, etc. - last_wc = wc; wc = getwc(fd); switch(wc) { case WEOF: @@ -238,7 +237,7 @@ char* get_loc_data_file(const char* filename) // This assumes that the EOL sequence is always the same throughout the file if (eol_char == 0) eol_char = wc; - if (wc = eol_char) { + if (wc == eol_char) { if (eol) { line_nr_incr++; } else { diff --git a/src/resource.h b/src/resource.h index 708d0624..4a788b07 100644 --- a/src/resource.h +++ b/src/resource.h @@ -45,6 +45,7 @@ #define IDR_SL_LDLINUX_V4_SYS 401 #define IDR_SL_LDLINUX_V5_BSS 402 #define IDR_SL_LDLINUX_V5_SYS 403 +#define IDR_LC_RUFUS_LOC 500 #define IDC_DEVICE 1001 #define IDC_FILESYSTEM 1002 #define IDC_START 1003 diff --git a/src/rufus.c b/src/rufus.c index 40c7ca16..50fcaab0 100644 --- a/src/rufus.c +++ b/src/rufus.c @@ -1915,12 +1915,16 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine #endif { const char* old_wait_option = "/W"; + const char* loc_name = "rufus.loc"; int i, opt, option_index = 0, argc = 0, si = 0; BOOL attached_console = FALSE; + BYTE* loc_data; + DWORD loc_size, Size; + char loc_path[MAX_PATH]; char** argv = NULL; wchar_t **wenv, **wargv; PF_DECL(__wgetmainargs); - HANDLE mutex = NULL; + HANDLE hFile = NULL, mutex = NULL; HWND hDlg = NULL; MSG msg; int wait_for_mutex = 0; @@ -2022,6 +2026,21 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine // 0x9e disables removable and fixed drive notifications SetLGP(FALSE, &existing_key, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer", "NoDriveTypeAutorun", 0x9e); + // Extract the embedded localization data into the user's temp dir + loc_data = (BYTE*)GetResource(hMainInstance, MAKEINTRESOURCEA(IDR_LC_RUFUS_LOC), _RT_RCDATA, loc_name, &loc_size, FALSE); + GetTempPathU(sizeof(loc_path), loc_path); + safe_strcat(loc_path, sizeof(loc_name), loc_name); + + hFile = CreateFileU(loc_path, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, + NULL, CREATE_ALWAYS, 0, 0); + if ((hFile == INVALID_HANDLE_VALUE)|| (!WriteFile(hFile, loc_data, loc_size, &Size, 0)) || (loc_size != Size)) { + uprintf("Unable to create file '%s': %s.\n", loc_path, WindowsErrorString()); + } else { + uprintf("Successfully extracted '%s'\n", loc_path); + get_loc_data_file(loc_path); + } + safe_closehandle(hFile); + // Create the main Window hDlg = CreateDialogW(hInstance, MAKEINTRESOURCEW(IDD_DIALOG), NULL, MainCallback); if (hDlg == NULL) { diff --git a/src/rufus.h b/src/rufus.h index def99cc7..2dd5502f 100644 --- a/src/rufus.h +++ b/src/rufus.h @@ -29,7 +29,7 @@ /* Program options */ #define RUFUS_DEBUG // print debug info to Debug facility /* Features not ready for prime time and that may *DESTROY* your data - USE AT YOUR OWN RISKS! */ -#define RUFUS_TEST +// #define RUFUS_TEST #define APPLICATION_NAME "Rufus" #define COMPANY_NAME "Akeo Consulting" diff --git a/src/rufus.rc b/src/rufus.rc index 96574e3b..3369f950 100644 --- a/src/rufus.rc +++ b/src/rufus.rc @@ -71,7 +71,7 @@ END IDD_ABOUTBOX DIALOGEX 0, 0, 287, 201 STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "About Rufus" -FONT 8, "Microsoft Sans Serif", 400, 0, 0x0 +FONT 8, "MS Shell Dlg", 400, 0, 0x0 BEGIN ICON IDI_ICON,IDC_ABOUT_ICON,11,8,20,20 DEFPUSHBUTTON "OK",IDOK,231,181,50,14,WS_GROUP @@ -128,7 +128,7 @@ END IDD_UPDATE_POLICY DIALOGEX 0, 0, 287, 198 STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Update policy and settings" -FONT 8, "Microsoft Sans Serif", 400, 0, 0x0 +FONT 8, "MS Shell Dlg", 400, 0, 0x0 BEGIN ICON IDI_ICON,IDC_ABOUT_ICON,11,8,20,20 DEFPUSHBUTTON "Close",IDCANCEL,221,172,50,14,WS_GROUP @@ -145,7 +145,7 @@ END IDD_NEW_VERSION DIALOGEX 0, 0, 384, 268 STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Check For Updates - Rufus" -FONT 8, "Microsoft Sans Serif", 400, 0, 0x0 +FONT 8, "MS Shell Dlg", 400, 0, 0x0 BEGIN PUSHBUTTON "Close",IDCANCEL,167,244,50,14,WS_GROUP CONTROL "",IDC_RELEASE_NOTES,"RichEdit20W",ES_MULTILINE | ES_READONLY | WS_VSCROLL,15,77,352,88,WS_EX_STATICEDGE @@ -184,6 +184,7 @@ END 3 TEXTINCLUDE BEGIN "\r\n" + "IDR_LC_RUFUS_LOC RCDATA ""../res/locale/rufus.loc""\r\n" "IDR_SL_LDLINUX_V4_BSS RCDATA ""../res/syslinux/ldlinux_v4.bss""\r\n" "IDR_SL_LDLINUX_V4_SYS RCDATA ""../res/syslinux/ldlinux_v4.sys""\r\n" "IDR_SL_LDLINUX_V5_BSS RCDATA ""../res/syslinux/ldlinux_v5.bss""\r\n" @@ -332,6 +333,7 @@ IDI_DOWN ICON "../res/down.ico" // Generated from the TEXTINCLUDE 3 resource. // +IDR_LC_RUFUS_LOC RCDATA "../res/locale/rufus.loc" IDR_SL_LDLINUX_V4_BSS RCDATA "../res/syslinux/ldlinux_v4.bss" IDR_SL_LDLINUX_V4_SYS RCDATA "../res/syslinux/ldlinux_v4.sys" IDR_SL_LDLINUX_V5_BSS RCDATA "../res/syslinux/ldlinux_v5.bss"