diff --git a/stepmania/src/smpackage/CreateLanguageDlg.h b/stepmania/src/smpackage/CreateLanguageDlg.h index 7943e7fdce..2f115a0337 100644 --- a/stepmania/src/smpackage/CreateLanguageDlg.h +++ b/stepmania/src/smpackage/CreateLanguageDlg.h @@ -13,7 +13,7 @@ public: virtual ~CreateLanguageDlg(); // Dialog Data - enum { IDD = IDD_DIALOG1 }; + enum { IDD = IDD_CREATE_LANGUAGE }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support diff --git a/stepmania/src/smpackage/LanguagesDlg.cpp b/stepmania/src/smpackage/LanguagesDlg.cpp index d24eb637ff..d40138777f 100644 --- a/stepmania/src/smpackage/LanguagesDlg.cpp +++ b/stepmania/src/smpackage/LanguagesDlg.cpp @@ -35,6 +35,7 @@ void LanguagesDlg::DoDataExchange(CDataExchange* pDX) CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_LIST_THEMES, m_listThemes); DDX_Control(pDX, IDC_LIST_LANGUAGES, m_listLanguages); + DDX_Control(pDX, IDC_CHECK_EXPORT_ALREADY_TRANSLATED, m_buttonExportAlreadyTranslated); } BOOL LanguagesDlg::OnInitDialog() @@ -173,6 +174,7 @@ void LanguagesDlg::OnSelchangeListLanguages() GetDlgItem(IDC_BUTTON_DELETE)->EnableWindow( !sLanguage.empty() ); GetDlgItem(IDC_BUTTON_EXPORT)->EnableWindow( !sLanguage.empty() ); GetDlgItem(IDC_BUTTON_IMPORT)->EnableWindow( !sLanguage.empty() ); + GetDlgItem(IDC_CHECK_EXPORT_ALREADY_TRANSLATED)->EnableWindow( !sLanguage.empty() ); } @@ -223,6 +225,11 @@ void LanguagesDlg::OnBnClickedButtonDelete() sLanguage = SMPackageUtil::GetLanguageCodeFromDisplayString( sLanguage ); RString sLanguageFile = GetLanguageFile( sTheme, sLanguage ); + + int iRet = MessageBox( ssprintf("This will permanently delete '%s'. Continue?",sLanguageFile.c_str()), NULL, MB_OKCANCEL ); + if( iRet != IDOK ) + return; + FILEMAN->Remove( sLanguageFile ); FlushDirCache(); @@ -246,11 +253,14 @@ void LanguagesDlg::OnBnClickedButtonExport() RString sBaseLanguageFile = GetLanguageFile( sTheme, SpecialFiles::BASE_LANGUAGE ); RString sLanguageFile = GetLanguageFile( sTheme, sLanguage ); + bool bExportAlreadyTranslated = !!m_buttonExportAlreadyTranslated.GetCheck(); + CsvFile csv; IniFile ini1; ini1.ReadFile( sBaseLanguageFile ); IniFile ini2; ini2.ReadFile( sLanguageFile ); + int iNumExpored = 0; FOREACH_CONST_Child( &ini1, key ) { FOREACH_CONST_Attr( key, value ) @@ -261,16 +271,25 @@ void LanguagesDlg::OnBnClickedButtonExport() tl.sBaseLanguage = value->second; ini2.GetValue( tl.sSection, tl.sID, tl.sCurrentLanguage ); - vector vs; - vs.push_back( tl.sSection ); - vs.push_back( tl.sID ); - vs.push_back( tl.sBaseLanguage ); - vs.push_back( tl.sCurrentLanguage ); - csv.m_vvs.push_back( vs ); + if( tl.sCurrentLanguage.empty() || bExportAlreadyTranslated ) + { + vector vs; + vs.push_back( tl.sSection ); + vs.push_back( tl.sID ); + vs.push_back( tl.sBaseLanguage ); + vs.push_back( tl.sCurrentLanguage ); + csv.m_vvs.push_back( vs ); + iNumExpored++; + } } } RString sFile = sTheme+"-"+sLanguage+".csv"; RString sFullFile = "Desktop/"+sFile; + if( iNumExpored == 0 ) + { + MessageBox( "There are no strings to export for this language." ); + return; + } if( csv.WriteFile(sFullFile) ) MessageBox( ssprintf("Exported to your Desktop as '%s'.",sFile.c_str()) ); else @@ -320,25 +339,41 @@ void LanguagesDlg::OnBnClickedButtonImport() } IniFile ini; + if( !ini.ReadFile(sLanguageFile) ) + { + MessageBox( ssprintf("Error reading '%s'.",sLanguageFile.c_str()) ); + return; + } + int iNumImported = 0; + int iNumIgnored = 0; FOREACH_CONST( CsvFile::StringVector, csv.m_vvs, line ) { TranslationLine tl; - if( line->size() != 3 && line->size() != 4 ) + int iNumValues = line->size(); + if( iNumValues != 3 && iNumValues != 4 ) { - MessageBox( ssprintf("Error reading '%s': Each line must have either 3 or 4 values. This row has %d values",sCsvFile.c_str(),(int)line->size()) ); + MessageBox( ssprintf("Error reading '%s': Each line must have either 3 or 4 values. This row has %d values",sCsvFile.c_str(),iNumValues) ); return; } tl.sSection = (*line)[0]; tl.sID = (*line)[1]; tl.sBaseLanguage = (*line)[2]; - tl.sCurrentLanguage = line->size() == 4 ? (*line)[3] : RString(); + tl.sCurrentLanguage = iNumValues == 4 ? (*line)[3] : RString(); - ini.SetValue( tl.sSection, tl.sID, tl.sCurrentLanguage ); + if( tl.sCurrentLanguage.empty() ) + { + iNumIgnored++; + } + else + { + ini.SetValue( tl.sSection, tl.sID, tl.sCurrentLanguage ); + iNumImported++; + } } if( ini.WriteFile(sLanguageFile) ) - MessageBox( ssprintf("Saved '%s'.",sLanguageFile.c_str()) ); + MessageBox( ssprintf("Imported %d strings into '%s'. %d empty strings were ignored.",iNumImported,sLanguageFile.c_str(),iNumIgnored) ); else MessageBox( ssprintf("Failed to save '%s'.",sLanguageFile.c_str()) ); } diff --git a/stepmania/src/smpackage/LanguagesDlg.h b/stepmania/src/smpackage/LanguagesDlg.h index bb5a72eef3..f76f768c6f 100644 --- a/stepmania/src/smpackage/LanguagesDlg.h +++ b/stepmania/src/smpackage/LanguagesDlg.h @@ -13,7 +13,7 @@ public: virtual ~LanguagesDlg(); // Dialog Data - enum { IDD = IDD_THEMES }; + enum { IDD = IDD_LANGUAGES }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support @@ -29,4 +29,5 @@ public: afx_msg void OnBnClickedButtonDelete(); afx_msg void OnBnClickedButtonExport(); afx_msg void OnBnClickedButtonImport(); + CButton m_buttonExportAlreadyTranslated; }; diff --git a/stepmania/src/smpackage/resource.h b/stepmania/src/smpackage/resource.h index 27ed169678..8a7a863e81 100644 --- a/stepmania/src/smpackage/resource.h +++ b/stepmania/src/smpackage/resource.h @@ -17,8 +17,8 @@ #define IDD_SHOW_COMMENT 147 #define IDD_UNINSTALL_OLD_PACKAGES 148 #define IDD_CHANGE_GAME_SETTINGS 149 -#define IDD_THEMES 150 -#define IDD_DIALOG1 151 +#define IDD_LANGUAGES 150 +#define IDD_CREATE_LANGUAGE 151 #define IDC_LIST_SONGS 1000 #define IDC_LIST 1000 #define IDC_BUTTON_PLAY 1001 @@ -85,8 +85,9 @@ #define IDC_LIST_LANGUAGES 1058 #define IDC_STATIC_TOTAL_STRINGS 1060 #define IDC_STATIC_NEED_TRANSLATION 1061 -#define IDC_COMBO1 1065 #define IDC_COMBO_LANGUAGES 1065 +#define IDC_CHECK_EXPORT_ALREADY_TRANSLATED 1066 +#define IDC_CHECK1 1066 // Next default values for new objects // @@ -94,7 +95,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 152 #define _APS_NEXT_COMMAND_VALUE 32771 -#define _APS_NEXT_CONTROL_VALUE 1066 +#define _APS_NEXT_CONTROL_VALUE 1067 #define _APS_NEXT_SYMED_VALUE 104 #endif #endif diff --git a/stepmania/src/smpackage/smpackage.rc b/stepmania/src/smpackage/smpackage.rc index 8ebf65d1a1..6c73c64d07 100644 --- a/stepmania/src/smpackage/smpackage.rc +++ b/stepmania/src/smpackage/smpackage.rc @@ -274,21 +274,21 @@ BEGIN IDC_STATIC,7,234,147,26 END -IDD_THEMES DIALOGEX 0, 0, 329, 194 +IDD_LANGUAGES DIALOGEX 0, 0, 329, 188 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Language Translations" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - DEFPUSHBUTTON "Close",IDOK,272,173,50,14 + DEFPUSHBUTTON "Close",IDOK,272,167,50,14 LTEXT "Themes",IDC_STATIC,7,7,101,10 LTEXT "Languages",IDC_STATIC,118,7,98,10 - PUSHBUTTON "Create Language",IDC_BUTTON_CREATE,232,45,85,15 - PUSHBUTTON "Delete Language",IDC_BUTTON_DELETE,232,67,85,15 - PUSHBUTTON "Export CSV",IDC_BUTTON_EXPORT,232,89,85,15 - PUSHBUTTON "Import CSV",IDC_BUTTON_IMPORT,232,111,85,15 - LTEXT "Create a new language, export the theme strings to a CSV, edit the CSV using Excel or a text editor, then import the CSV file back into the same language.", - IDC_STATIC,7,144,315,25 + PUSHBUTTON "Create Language",IDC_BUTTON_CREATE,226,41,91,15 + PUSHBUTTON "Delete Language",IDC_BUTTON_DELETE,226,62,91,15 + PUSHBUTTON "Export CSV",IDC_BUTTON_EXPORT,226,83,91,15 + PUSHBUTTON "Import CSV",IDC_BUTTON_IMPORT,226,123,91,15 + LTEXT "- Create a new language\n- Export the theme strings to a CSV\n- Edit the CSV using Excel or a text editor\n- Import the CSV file back into the same language", + IDC_STATIC,7,144,240,37 LTEXT "Selection details",IDC_STATIC,222,7,100,9 LTEXT "Total Strings:",IDC_STATIC,225,17,62,10 LTEXT "Need translation:",IDC_STATIC,225,28,69,10 @@ -298,9 +298,13 @@ BEGIN LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP LISTBOX IDC_LIST_LANGUAGES,116,17,100,121,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + CONTROL "Export already translated strings", + IDC_CHECK_EXPORT_ALREADY_TRANSLATED,"Button", + BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,220,100,109, + 16 END -IDD_DIALOG1 DIALOGEX 0, 0, 186, 47 +IDD_CREATE_LANGUAGE DIALOGEX 0, 0, 186, 47 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Create Language" @@ -432,15 +436,15 @@ BEGIN BOTTOMMARGIN, 274 END - IDD_THEMES, DIALOG + IDD_LANGUAGES, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 322 TOPMARGIN, 7 - BOTTOMMARGIN, 187 + BOTTOMMARGIN, 181 END - IDD_DIALOG1, DIALOG + IDD_CREATE_LANGUAGE, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 179