diff --git a/.gitattributes b/.gitattributes index faa6ecec70..a3bbf81a7a 100644 --- a/.gitattributes +++ b/.gitattributes @@ -3441,6 +3441,7 @@ components/printers/win32/winprndialogs.inc svneol=native#text/pascal components/printers/win32/winutilprn.pas svneol=native#text/pascal components/printers/win32/winutilprnconst.inc svneol=native#text/pascal components/projectgroups/README.txt svneol=native#text/plain +components/projectgroups/languages/projectgroupstrconst.po svneol=native#text/plain components/projectgroups/lazprojectgroup.pas svneol=native#text/plain components/projectgroups/lazprojectgroups.lpk svneol=native#text/plain components/projectgroups/projectgroup.pp svneol=native#text/plain diff --git a/components/projectgroups/languages/projectgroupstrconst.po b/components/projectgroups/languages/projectgroupstrconst.po new file mode 100644 index 0000000000..8e3fc7739d --- /dev/null +++ b/components/projectgroups/languages/projectgroupstrconst.po @@ -0,0 +1,441 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +#: projectgroupstrconst.lisabort +msgid "Abort" +msgstr "" + +#: projectgroupstrconst.lisabortloadingprojectgroup +msgid "Abort loading project group" +msgstr "" + +#: projectgroupstrconst.lisactivetarget +msgid "Target: %s" +msgstr "" + +#: projectgroupstrconst.lisallfiles +msgid "All files" +msgstr "" + +#: projectgroupstrconst.lisbepatient +msgid "Be patient!" +msgstr "" + +#: projectgroupstrconst.lisbuildmode +msgid ", build mode \"%s\"" +msgstr "" + +#: projectgroupstrconst.lisbuildmode2 +msgid "Build Mode \"%s\"" +msgstr "" + +#: projectgroupstrconst.lisbuildmodenotfound +msgid "Build mode not found" +msgstr "" + +#: projectgroupstrconst.lisbuildmodenotfound2 +msgid "Build mode \"%s\" not found." +msgstr "" + +#: projectgroupstrconst.liscompilepackage +msgid "Compile Package %s" +msgstr "" + +#: projectgroupstrconst.liscompileproject +msgid "Compile Project %s" +msgstr "" + +#: projectgroupstrconst.lisdiscard +msgid "Discard changes" +msgstr "" + +#: projectgroupstrconst.liserrnosuchfile +msgid "" +"Could not find target file\n" +"\"%s\"\n" +"What do you want to do ?\n" +msgstr "" + +#: projectgroupstrconst.liserronlyprojectgroupallowed +msgid "Only target type \"projectgroup\" is allowed for root project group" +msgstr "" + +#: projectgroupstrconst.liserrorreadingprojectgroupfile +msgid "Error reading project group file \"%s\"%s%s" +msgstr "" + +#: projectgroupstrconst.liserrtargetdoesnotexist +msgid "Target does not exist. Remove ?" +msgstr "" + +#: projectgroupstrconst.lisinvalidcycleaprojectgroupcannothaveitselfastarget +msgid "Invalid cycle. A project group cannot have itself as target." +msgstr "" + +#: projectgroupstrconst.lisinvalidfile +msgid "Invalid File" +msgstr "" + +#: projectgroupstrconst.lisinvalidxmlfilename +msgid "Invalid xml file name \"%s\"" +msgstr "" + +#: projectgroupstrconst.lislazaruspackageslpk +msgid "Lazarus packages (*.lpk)" +msgstr "" + +#: projectgroupstrconst.lislazarusprojectgroup +msgid "Lazarus project group (*.lpg)" +msgstr "" + +#: projectgroupstrconst.lislazarusprojectgroupslpg +msgid "Lazarus project groups (*.lpg)" +msgstr "" + +#: projectgroupstrconst.lislazarusprojectslpi +msgid "Lazarus projects (*.lpi)" +msgstr "" + +#: projectgroupstrconst.lislazbuildnotfound +msgid "lazbuild not found" +msgstr "" + +#: projectgroupstrconst.lisneedsave +msgid "Need save" +msgstr "" + +#: projectgroupstrconst.lisnewprojectgroup +msgid "New project group" +msgstr "" + +#: projectgroupstrconst.lisnodebuildmodes +msgid "Build Modes" +msgstr "" + +#: projectgroupstrconst.lisnodedependencies +msgid "Dependencies" +msgstr "" + +#: projectgroupstrconst.lisnodefiles +msgid "Files" +msgstr "" + +#: projectgroupstrconst.lisnoderemoveddependencies +msgid "Removed dependencies" +msgstr "" + +#: projectgroupstrconst.lisnoderemovedfiles +msgid "Removed files" +msgstr "" + +#: projectgroupstrconst.lisnoderemovedtargets +msgid "Removed targets" +msgstr "" + +#: projectgroupstrconst.lisnodetargets +msgid "Targets" +msgstr "" + +#: projectgroupstrconst.lisopenprojectgroup +msgid "Open project group" +msgstr "" + +#: projectgroupstrconst.lisopenrecentprojectgroup +msgid "Open recent project group" +msgstr "" + +#: projectgroupstrconst.lisotherproject +msgid "Other Project" +msgstr "" + +#: projectgroupstrconst.lispackage +msgid "Package" +msgstr "" + +#: projectgroupstrconst.lispackagenotfound +msgid "Package not found" +msgstr "" + +#: projectgroupstrconst.lispackagenotfound2 +msgid "Package \"%s\" not found." +msgstr "" + +#: projectgroupstrconst.lispascalfilepasppp +msgid "Pascal file (*.pas;*.pp;*.p)" +msgstr "" + +#: projectgroupstrconst.lispleasesaveyourchangesbeforereloadingtheprojectgrou +msgid "Please save your changes before reloading the project group." +msgstr "" + +#: projectgroupstrconst.lisprojectgroup +msgid "Project group %s" +msgstr "" + +#: projectgroupstrconst.lisprojectgroup2 +msgid "Project Group: %s" +msgstr "" + +#: projectgroupstrconst.lisprojectgroupaddexistingcaption +msgid "Add" +msgstr "" + +#: projectgroupstrconst.lisprojectgroupaddexistinghint +msgid "Add existing target to project group" +msgstr "" + +#: projectgroupstrconst.lisprojectgroupaddnewcaption +msgid "New" +msgstr "" + +#: projectgroupstrconst.lisprojectgroupaddnewhint +msgid "Add new target to project group" +msgstr "" + +#: projectgroupstrconst.lisprojectgroupdeletecaption +msgid "Remove" +msgstr "" + +#: projectgroupstrconst.lisprojectgroupdeletehint +msgid "Remove target from project group" +msgstr "" + +#: projectgroupstrconst.lisprojectgroupmodified +msgid "Project group modified" +msgstr "" + +#: projectgroupstrconst.lisprojectgroupmodifiedconfirm +msgid "" +"Project group \"%s\" is modified.\n" +"what do you want to do?\n" +msgstr "" + +#: projectgroupstrconst.lisprojectgroupsaveascaption +msgid "Save As" +msgstr "" + +#: projectgroupstrconst.lisprojectgroupsaveashint +msgid "Save project group with a new name" +msgstr "" + +#: projectgroupstrconst.lisprojectgroupsavecaption +msgid "Save" +msgstr "" + +#: projectgroupstrconst.lisprojectgroupsavehint +msgctxt "projectgroupstrconst.lisprojectgroupsavehint" +msgid "Save project group" +msgstr "" + +#: projectgroupstrconst.lisreaderror +msgid "Read error" +msgstr "" + +#: projectgroupstrconst.lisreaderror2 +msgid "Read Error" +msgstr "" + +#: projectgroupstrconst.lisremovetarget +msgctxt "projectgroupstrconst.lisremovetarget" +msgid "Remove target" +msgstr "" + +#: projectgroupstrconst.lissavepg +msgctxt "projectgroupstrconst.lissavepg" +msgid "Save project group" +msgstr "" + +#: projectgroupstrconst.lissaveprojectgroup +msgctxt "projectgroupstrconst.lissaveprojectgroup" +msgid "Save project group" +msgstr "" + +#: projectgroupstrconst.lissaveprojectgroupas +msgid "Save project group as" +msgstr "" + +#: projectgroupstrconst.lisskipalltargets +msgid "Remove all invalid targets" +msgstr "" + +#: projectgroupstrconst.listargetactivate +msgid "Activate target" +msgstr "" + +#: projectgroupstrconst.listargetactivatecaption +msgid "Activate" +msgstr "" + +#: projectgroupstrconst.listargetactivatehint +msgid "Activate selected target" +msgstr "" + +#: projectgroupstrconst.listargetadd +msgid "Add target" +msgstr "" + +#: projectgroupstrconst.listargetcompile +msgctxt "projectgroupstrconst.listargetcompile" +msgid "Compile" +msgstr "" + +#: projectgroupstrconst.listargetcompilecaption +msgctxt "projectgroupstrconst.listargetcompilecaption" +msgid "Compile" +msgstr "" + +#: projectgroupstrconst.listargetcompileclean +msgctxt "projectgroupstrconst.listargetcompileclean" +msgid "Compile clean" +msgstr "" + +#: projectgroupstrconst.listargetcompilecleancaption +msgctxt "projectgroupstrconst.listargetcompilecleancaption" +msgid "Compile clean" +msgstr "" + +#: projectgroupstrconst.listargetcompilecleanhint +msgid "Compile selected target clean" +msgstr "" + +#: projectgroupstrconst.listargetcompilefromhere +msgid "Compile from here" +msgstr "" + +#: projectgroupstrconst.listargetcompilehint +msgid "Compile selected target" +msgstr "" + +#: projectgroupstrconst.listargetcopyfilename +msgid "Copy file name" +msgstr "" + +#: projectgroupstrconst.listargetcount +msgid "%d targets" +msgstr "" + +#: projectgroupstrconst.listargetearlier +msgid "Compile target earlier" +msgstr "" + +#: projectgroupstrconst.listargetearliercaption +msgid "Earlier" +msgstr "" + +#: projectgroupstrconst.listargetearlierhint +msgid "Build target earlier" +msgstr "" + +#: projectgroupstrconst.listargetinstall +msgctxt "projectgroupstrconst.listargetinstall" +msgid "Install" +msgstr "" + +#: projectgroupstrconst.listargetinstallcaption +msgctxt "projectgroupstrconst.listargetinstallcaption" +msgid "Install" +msgstr "" + +#: projectgroupstrconst.listargetinstallhint +msgid "Install selected target" +msgstr "" + +#: projectgroupstrconst.listargetlater +msgid "Compile target later" +msgstr "" + +#: projectgroupstrconst.listargetlatercaption +msgid "Later" +msgstr "" + +#: projectgroupstrconst.listargetlaterhint +msgid "Build target later" +msgstr "" + +#: projectgroupstrconst.listargetopen +msgid "Open Target" +msgstr "" + +#: projectgroupstrconst.listargetopencaption +msgid "Open" +msgstr "" + +#: projectgroupstrconst.listargetopenhint +msgid "Open selected target" +msgstr "" + +#: projectgroupstrconst.listargetproperties +msgid "Target properties" +msgstr "" + +#: projectgroupstrconst.listargetpropertiescaption +msgid "Properties" +msgstr "" + +#: projectgroupstrconst.listargetpropertieshint +msgid "Show property dialog for selected target" +msgstr "" + +#: projectgroupstrconst.listargetremove +msgctxt "projectgroupstrconst.listargetremove" +msgid "Remove target" +msgstr "" + +#: projectgroupstrconst.listargetrun +msgid "Run Target" +msgstr "" + +#: projectgroupstrconst.listargetruncaption +msgid "Run" +msgstr "" + +#: projectgroupstrconst.listargetrunhint +msgid "Run selected target" +msgstr "" + +#: projectgroupstrconst.listargetuninstall +msgctxt "projectgroupstrconst.listargetuninstall" +msgid "Uninstall" +msgstr "" + +#: projectgroupstrconst.listargetuninstallcaption +msgctxt "projectgroupstrconst.listargetuninstallcaption" +msgid "Uninstall" +msgstr "" + +#: projectgroupstrconst.listargetuninstallhint +msgid "Uninstall selected target" +msgstr "" + +#: projectgroupstrconst.listhelazbuildwasnotfound +msgid "The lazbuild%s was not found." +msgstr "" + +#: projectgroupstrconst.listhereisstillanotherbuildinprogress +msgid "There is still another build in progress." +msgstr "" + +#: projectgroupstrconst.lisunabletocreatefile +msgid "Unable to create file \"%s\": %s" +msgstr "" + +#: projectgroupstrconst.lisunabletoloadfile +msgid "Unable to load file \"%s\"" +msgstr "" + +#: projectgroupstrconst.lisunabletowriteprojectgroupfile +msgid "Unable to write project group file \"%s\"%s%s" +msgstr "" + +#: projectgroupstrconst.liswriteerror +msgid "Write error" +msgstr "" + +#: projectgroupstrconst.liswriteerror2 +msgid "Write Error" +msgstr "" + +#: projectgroupstrconst.lisxmlsyntaxerrorinfile +msgid "XML syntax error in file \"%s\": %s" +msgstr "" + diff --git a/components/projectgroups/lazprojectgroups.lpk b/components/projectgroups/lazprojectgroups.lpk index 3f1bd89edf..2c34ad5b94 100644 --- a/components/projectgroups/lazprojectgroups.lpk +++ b/components/projectgroups/lazprojectgroups.lpk @@ -41,6 +41,11 @@ Modified LGPL-2."/> + + + + + diff --git a/components/projectgroups/projectgroup.pp b/components/projectgroups/projectgroup.pp index e855f31b4f..d367c93f09 100644 --- a/components/projectgroups/projectgroup.pp +++ b/components/projectgroups/projectgroup.pp @@ -255,14 +255,14 @@ begin if (aFilename='') or (not FilenameIsAbsolute(aFilename)) then begin debugln(['Error: (lazarus) [TIDECompileTarget.LoadXML] invalid filename "',aFilename,'"']); if not Quiet then - IDEMessageDialog('Invalid File','Invalid xml file name "'+aFilename+'"',mtError,[mbOk]); + IDEMessageDialog(lisInvalidFile, Format(lisInvalidXmlFileName, [aFilename]), mtError, [mbOk]); exit; end; Code:=CodeToolBoss.LoadFile(aFilename,true,false); if Code=nil then begin debugln(['Error: (lazarus) [TIDECompileTarget.LoadXML] unable to load file "',aFilename,'"']); if not Quiet then - IDEMessageDialog('Read error','Unable to load file "'+aFilename+'"',mtError,[mbOk]); + IDEMessageDialog(lisReadError, Format(lisUnableToLoadFile, [aFilename]), mtError, [mbOk]); exit; end; try @@ -271,7 +271,7 @@ begin on E: Exception do begin debugln(['Error: (lazarus) [TIDECompileTarget.LoadXML] xml syntax error in "',aFilename,'": '+E.Message]); if not Quiet then - IDEMessageDialog('Read error','XML syntax error in file "'+aFilename+'": '+E.Message,mtError,[mbOk]); + IDEMessageDialog(lisReadError, Format(lisXMLSyntaxErrorInFile, [aFilename, E.Message]), mtError, [mbOk]); end; end; end; @@ -290,7 +290,7 @@ begin on E: Exception do begin debugln(['Error: (lazarus) [TIDECompileTarget.CreateXML] unable to create file "',aFilename,'": '+E.Message]); if not Quiet then - IDEMessageDialog('Write error','Unable to create file "'+aFilename+'": '+E.Message,mtError,[mbOk]); + IDEMessageDialog(lisWriteError, Format(lisUnableToCreateFile, [aFilename, E.Message]), mtError, [mbOk]); end; end; end; @@ -516,7 +516,7 @@ begin try InitIDEFileDialog(F); F.Options:=[ofFileMustExist,ofEnableSizing]; - F.Filter:='Lazarus project group (*.lpg)|*.lpg|All files|'+AllFilesMask; + F.Filter:=lisLazarusProjectGroup+'|*.lpg|'+lisAllFiles+'|'+AllFilesMask; if F.Execute then LoadProjectGroup(FileName,[pgloLoadRecursively]); StoreIDEFileDialog(F); @@ -711,7 +711,7 @@ begin if not FilenameIsAbsolute(AFileName) then RaiseGDBException(AFileName); if CompareFilenames(AFileName,FileName)=0 then - raise Exception.Create('Invalid cycle. A project group cannot have itself as target.'); + raise Exception.Create(lisInvalidCycleAProjectGroupCannotHaveItselfAsTarget); if not FileExistsCached(AFileName) then exit; Result:=TIDECompileTarget.Create(CompileTarget); Result.FileName:=AFileName; @@ -866,7 +866,7 @@ begin Result:=true; except on E: Exception do begin - IDEMessageDialog('Read Error','Error reading project group file "'+Filename+'"'#13+E.Message, + IDEMessageDialog(lisReadError2, Format(lisErrorReadingProjectGroupFile, [Filename, #13, E.Message]), mtError,[mbOk]); end; end; @@ -908,7 +908,7 @@ begin end; except on E: Exception do begin - IDEMessageDialog('Write Error','Unable to write project group file "'+Filename+'"'#13+E.Message, + IDEMessageDialog(lisWriteError2, Format(lisUnableToWriteProjectGroupFile, [Filename, #13, E.Message]), mtError,[mbOk]); Result:=false; end; @@ -1010,25 +1010,24 @@ begin case TargetType of ttProject: begin - ToolTitle:='Compile Project '+ExtractFileNameOnly(Filename); + ToolTitle := Format(lisCompileProject, [ExtractFileNameOnly(Filename)]); if aBuildMode<>'' then - ToolTitle+=', build mode "'+aBuildMode+'"'; - ToolKind:='Other Project'; + ToolTitle += Format(lisBuildMode, [aBuildMode]); + ToolKind := lisOtherProject; end; ttPackage: begin - ToolTitle:='Compile Package '+ExtractFileNameOnly(Filename); - ToolKind:='Package'; + ToolTitle := Format(lisCompilePackage, [ExtractFileNameOnly(Filename)]); + ToolKind := lisPackage; end; else exit; end; - CompileHint:='Project Group: '+Parent.Filename+LineEnding; + CompileHint := Format(lisProjectGroup2, [Parent.Filename + LineEnding]); LazBuildFilename:=GetLazBuildFilename; if LazBuildFilename='' then begin - IDEMessageDialog('lazbuild not found', 'The lazbuild'+ExeExt+' was not ' - +'found.' + IDEMessageDialog(lisLazbuildNotFound, Format(lisTheLazbuildWasNotFound, [ExeExt]) , mtError, [mbOk]); exit(arFailed); end; @@ -1072,7 +1071,7 @@ function TIDECompileTarget.CheckIDEIsReadyForBuild: boolean; begin // check toolstatus if LazarusIDE.ToolStatus<>itNone then begin - IDEMessageDialog('Be patient!', 'There is still another build in progress.', + IDEMessageDialog(lisBePatient, lisThereIsStillAnotherBuildInProgress, mtInformation, [mbOk]); exit(false); end; @@ -1380,7 +1379,7 @@ begin aProject.ActiveBuildModeID:=aMode.Identifier; if aProject.ActiveBuildModeID<>aMode.Identifier then begin - IDEMessageDialog('Build mode not found','Build mode "'+aMode.Identifier+'" not found.',mtError,[mbOk]); + IDEMessageDialog(lisBuildModeNotFound, Format(lisBuildModeNotFound2, [aMode.Identifier]), mtError, [mbOk]); exit; end; // compile project in active buildmode diff --git a/components/projectgroups/projectgroupeditor.pas b/components/projectgroups/projectgroupeditor.pas index 22d762fd89..59b55b6458 100644 --- a/components/projectgroups/projectgroupeditor.pas +++ b/components/projectgroups/projectgroupeditor.pas @@ -582,7 +582,7 @@ begin PkgName:=ND.Value; if PackageEditingInterface.DoOpenPackageWithName(PkgName,[pofAddToRecent],false)<>mrOk then begin - IDEMessageDialog('Package not found','Package "'+PkgName+'" not found.',mtError,[mbOk]); + IDEMessageDialog(lisPackageNotFound, Format(lisPackageNotFound2, [PkgName]), mtError, [mbOk]); exit; end; end; @@ -631,7 +631,7 @@ begin s:=ND.Target.Filename; end else begin case ND.NodeType of - ntBuildMode: s:='Build Mode "'+ND.Value+'"'; + ntBuildMode: s := Format(lisBuildMode2, [ND.Value]); ntFile: s:=ND.Value; end; end; @@ -751,10 +751,10 @@ begin InitIDEFileDialog(OpenDialogTarget); With OpenDialogTarget do begin - Filter:='Lazarus projects (*.lpi)|*.lpi' - +'|Lazarus packages (*.lpk)|*.lpk' - +'|Lazarus project groups (*.lpg)|*.lpg' - +'|Pascal file (*.pas;*.pp;*.p)|*.pas;*.pp;*.p'; + Filter := lisLazarusProjectsLpi + '|*.lpi' + + '|' + lisLazarusPackagesLpk + '|*.lpk' + + '|' + lisLazarusProjectGroupsLpg + '|*.lpg' + + '|' + lisPascalFilePasPpP + '|*.pas;*.pp;*.p'; If Execute then begin aTarget:=FProjectGroup.AddTarget(FileName) as TIDECompileTarget; @@ -800,7 +800,7 @@ begin begin PG:=TIDEProjectGroup(ProjectGroup); if PG.Modified then begin - IDEMessageDialog('Need save','Please save your changes before reloading the project group.', + IDEMessageDialog(lisNeedSave, lisPleaseSaveYourChangesBeforeReloadingTheProjectGrou, mtError,[mbOK]); exit; end; diff --git a/components/projectgroups/projectgroupstrconst.pas b/components/projectgroups/projectgroupstrconst.pas index 64586e63a1..6830c90f50 100644 --- a/components/projectgroups/projectgroupstrconst.pas +++ b/components/projectgroups/projectgroupstrconst.pas @@ -16,7 +16,7 @@ Resourcestring lisAbortLoadingProjectGroup = 'Abort loading project group'; lisSkipAllTargets = 'Remove all invalid targets'; lisErrOnlyProjectGroupAllowed = 'Only target type "projectgroup" is allowed for root project group'; - lisLazarusProjectGroup = 'Lazarus project group'; + lisLazarusProjectGroup = 'Lazarus project group (*.lpg)'; lisAllFiles = 'All files'; lisProjectGroupModified = 'Project group modified'; lisProjectGroupModifiedConfirm = 'Project group "%s" is modified.'+sLineBreak+ @@ -87,6 +87,39 @@ Resourcestring lisTargetActivateHint = 'Activate selected target'; lisTargetOpenCaption = 'Open'; lisTargetOpenHint = 'Open selected target'; + lisInvalidFile = 'Invalid File'; + lisInvalidXmlFileName = 'Invalid xml file name "%s"'; + lisReadError = 'Read error'; + lisUnableToLoadFile = 'Unable to load file "%s"'; + lisXMLSyntaxErrorInFile = 'XML syntax error in file "%s": %s'; + lisWriteError = 'Write error'; + lisUnableToCreateFile = 'Unable to create file "%s": %s'; + lisInvalidCycleAProjectGroupCannotHaveItselfAsTarget = 'Invalid cycle. A project group cannot have itself as target.'; + lisReadError2 = 'Read Error'; + lisErrorReadingProjectGroupFile = 'Error reading project group file "%s"%s%s'; + lisWriteError2 = 'Write Error'; + lisUnableToWriteProjectGroupFile = 'Unable to write project group file "%s"%s%s'; + lisLazbuildNotFound = 'lazbuild not found'; + lisTheLazbuildWasNotFound = 'The lazbuild%s was not found.'; + lisProjectGroup2 = 'Project Group: %s'; + lisBePatient = 'Be patient!'; + lisThereIsStillAnotherBuildInProgress = 'There is still another build in progress.'; + lisCompileProject = 'Compile Project %s'; + lisBuildMode = ', build mode "%s"'; + lisCompilePackage = 'Compile Package %s'; + lisOtherProject = 'Other Project'; + lisPackage = 'Package'; + lisBuildModeNotFound = 'Build mode not found'; + lisBuildModeNotFound2 = 'Build mode "%s" not found.'; + lisPackageNotFound = 'Package not found'; + lisPackageNotFound2 = 'Package "%s" not found.'; + lisBuildMode2 = 'Build Mode "%s"'; + lisLazarusProjectsLpi = 'Lazarus projects (*.lpi)'; + lisLazarusPackagesLpk = 'Lazarus packages (*.lpk)'; + lisLazarusProjectGroupsLpg = 'Lazarus project groups (*.lpg)'; + lisPascalFilePasPpP = 'Pascal file (*.pas;*.pp;*.p)'; + lisNeedSave = 'Need save'; + lisPleaseSaveYourChangesBeforeReloadingTheProjectGrou = 'Please save your changes before reloading the project group.'; implementation