diff --git a/Core/nbproject/project.properties b/Core/nbproject/project.properties index 747b6adfe86995b282980c9ab9f283d9df59c87e..613202ab1d564afdec6fee3ab64e63e7a168bd12 100644 --- a/Core/nbproject/project.properties +++ b/Core/nbproject/project.properties @@ -78,8 +78,8 @@ file.reference.Rejistry-1.1-SNAPSHOT.jar=release/modules/ext/Rejistry-1.1-SNAPSH file.reference.serializer-2.7.2.jar=release/modules/ext/serializer-2.7.2.jar file.reference.sevenzipjbinding-AllPlatforms.jar=release/modules/ext/sevenzipjbinding-AllPlatforms.jar file.reference.sevenzipjbinding.jar=release/modules/ext/sevenzipjbinding.jar -file.reference.sleuthkit-4.11.1.jar=release/modules/ext/sleuthkit-4.11.1.jar -file.reference.sleuthkit-caseuco-4.11.1.jar=release/modules/ext/sleuthkit-caseuco-4.11.1.jar +file.reference.sleuthkit-4.12.0.jar=release/modules/ext/sleuthkit-4.12.0.jar +file.reference.sleuthkit-caseuco-4.12.0.jar=release/modules/ext/sleuthkit-caseuco-4.12.0.jar file.reference.slf4j-api-1.7.36.jar=release/modules/ext/slf4j-api-1.7.36.jar file.reference.snakeyaml-1.30.jar=release/modules/ext/snakeyaml-1.30.jar file.reference.SparseBitSet-1.1.jar=release/modules/ext/SparseBitSet-1.1.jar diff --git a/Core/nbproject/project.xml b/Core/nbproject/project.xml index 92c2c7e8b3b5581e7b0898b97f941670026e0955..beae4bcd0146e855c8e4261e2eaa68dd9bb89fce 100644 --- a/Core/nbproject/project.xml +++ b/Core/nbproject/project.xml @@ -689,12 +689,12 @@ <binary-origin>release/modules/ext/sevenzipjbinding.jar</binary-origin> </class-path-extension> <class-path-extension> - <runtime-relative-path>ext/sleuthkit-4.11.1.jar</runtime-relative-path> - <binary-origin>release/modules/ext/sleuthkit-4.11.1.jar</binary-origin> + <runtime-relative-path>ext/sleuthkit-4.12.0.jar</runtime-relative-path> + <binary-origin>release/modules/ext/sleuthkit-4.12.0.jar</binary-origin> </class-path-extension> <class-path-extension> - <runtime-relative-path>ext/sleuthkit-caseuco-4.11.1.jar</runtime-relative-path> - <binary-origin>release/modules/ext/sleuthkit-caseuco-4.11.1.jar</binary-origin> + <runtime-relative-path>ext/sleuthkit-caseuco-4.12.0.jar</runtime-relative-path> + <binary-origin>release/modules/ext/sleuthkit-caseuco-4.12.0.jar</binary-origin> </class-path-extension> <class-path-extension> <runtime-relative-path>ext/slf4j-api-1.7.36.jar</runtime-relative-path> diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/casemodule/Bundle.properties-MERGED index 528d3a50883e09c4b05254b8d14b9e691356d6de..67df327004785f633bef104d601ab5edf237c53c 100755 --- a/Core/src/org/sleuthkit/autopsy/casemodule/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/casemodule/Bundle.properties-MERGED @@ -247,15 +247,10 @@ AddImageWizardIngestConfigPanel.dsProcDone.errs.text=*Errors encountered in addi AddImageWizardIngestConfigVisual.getName.text=Configure Ingest AddImageWizardIterator.stepXofN=Step {0} of {1} AddLocalFilesTask.localFileAdd.progress.text=Adding: {0}/{1} -Case.getCurCase.exception.noneOpen=Cannot get the current case; there is no case open\! +Case.getCurCase.exception.noneOpen=Cannot get the current case; there is no case open! Case.open.msgDlg.updated.msg=Updated case database schema.\nA backup copy of the database with the following path has been made:\n {0} Case.open.msgDlg.updated.title=Case Database Schema Update -Case.checkImgExist.confDlg.doesntExist.msg=One of the images associated with \n\ -this case are missing. Would you like to search for them now?\n\ -Previously, the image was located at:\n\ -{0}\n\ -Please note that you will still be able to browse directories and generate reports\n\ -if you choose No, but you will not be able to view file content or run the ingest process. +Case.checkImgExist.confDlg.doesntExist.msg=One of the images associated with \nthis case are missing. Would you like to search for them now?\nPreviously, the image was located at:\n{0}\nPlease note that you will still be able to browse directories and generate reports\nif you choose No, but you will not be able to view file content or run the ingest process. Case.checkImgExist.confDlg.doesntExist.title=Missing Image Case.addImg.exception.msg=Error adding image to the case Case.updateCaseName.exception.msg=Error while trying to update the case name. @@ -274,12 +269,9 @@ Case.GetCaseTypeGivenPath.Failure=Unable to get case type Case.metaDataFileCorrupt.exception.msg=The case metadata file (.aut) is corrupted. Case.deleteReports.deleteFromDiskException.log.msg=Unable to delete the report from the disk. Case.deleteReports.deleteFromDiskException.msg=Unable to delete the report {0} from the disk.\nYou may manually delete it from {1} -CaseDeleteAction.closeConfMsg.text=Are you sure want to close and delete this case? \n\ - Case Name: {0}\n\ - Case Directory: {1} +CaseDeleteAction.closeConfMsg.text=Are you sure want to close and delete this case? \nCase Name: {0}\nCase Directory: {1} CaseDeleteAction.closeConfMsg.title=Warning: Closing the Current Case -CaseDeleteAction.msgDlg.fileInUse.msg=The delete action cannot be fully completed because the folder or file in it is open by another program.\n\n\ -Close the folder and file and try again or you can delete the case manually. +CaseDeleteAction.msgDlg.fileInUse.msg=The delete action cannot be fully completed because the folder or file in it is open by another program.\n\nClose the folder and file and try again or you can delete the case manually. CaseDeleteAction.msgDlg.fileInUse.title=Error: Folder In Use CaseDeleteAction.msgDlg.caseDelete.msg=Case {0} has been deleted. CaseOpenAction.autFilter.title={0} Case File ( {1}) @@ -311,8 +303,7 @@ NewCaseWizardAction.databaseProblem1.text=Cannot open database. Cancelling case NewCaseWizardAction.databaseProblem2.text=Error NewCaseWizardPanel1.validate.errMsg.invalidSymbols=The Case Name cannot contain any of the following symbols: \\ / : * ? " < > | NewCaseWizardPanel1.validate.errMsg.dirExists=Case directory ''{0}'' already exists. -NewCaseWizardPanel1.validate.confMsg.createDir.msg=The base directory "{0}" does not exist. \n\n\ - Do you want to create that directory? +NewCaseWizardPanel1.validate.confMsg.createDir.msg=The base directory "{0}" does not exist. \n\nDo you want to create that directory? NewCaseWizardPanel1.validate.confMsg.createDir.title=Create directory NewCaseWizardPanel1.validate.errMsg.cantCreateParDir.msg=Error: Could not create case parent directory {0} NewCaseWizardPanel1.validate.errMsg.prevCreateBaseDir.msg=Prevented from creating base directory {0} @@ -369,8 +360,8 @@ UnpackageWorker.doInBackground.previouslySeenCase=Case has been previously opene UpdateRecentCases.menuItem.clearRecentCases.text=Clear Recent Cases UpdateRecentCases.menuItem.empty=-Empty- AddImageWizardIngestConfigPanel.CANCEL_BUTTON.text=Cancel -NewCaseVisualPanel1.CaseFolderOnCDriveError.text=Warning: Path to multi-user case folder is on \"C:\" drive -NewCaseVisualPanel1.CaseFolderOnInternalDriveWindowsError.text=Warning: Path to case folder is on \"C:\" drive. Case folder is created on the target system +NewCaseVisualPanel1.CaseFolderOnCDriveError.text=Warning: Path to multi-user case folder is on "C:" drive +NewCaseVisualPanel1.CaseFolderOnInternalDriveWindowsError.text=Warning: Path to case folder is on "C:" drive. Case folder is created on the target system NewCaseVisualPanel1.CaseFolderOnInternalDriveLinuxError.text=Warning: Path to case folder is on the target system. Create case folder in mounted drive. NewCaseVisualPanel1.uncPath.error=Error: UNC paths are not allowed for Single-User cases CollaborationMonitor.addingDataSourceStatus.msg={0} adding data source @@ -378,7 +369,7 @@ CollaborationMonitor.analyzingDataSourceStatus.msg={0} analyzing {1} MissingImageDialog.lbWarning.text= MissingImageDialog.lbWarning.toolTipText= NewCaseVisualPanel1.caseParentDirWarningLabel.text= -NewCaseVisualPanel1.multiUserCaseRadioButton.text=Multi-User +NewCaseVisualPanel1.multiUserCaseRadioButton.text=Multi-User\t\t NewCaseVisualPanel1.singleUserCaseRadioButton.text=Single-User NewCaseVisualPanel1.caseTypeLabel.text=Case Type: SingleUserCaseConverter.BadDatabaseFileName=Database file does not exist! diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/centralrepository/Bundle.properties-MERGED index b4f7f835efc65713049a4fe951c31a81e5a25d29..b2320b5408ce38b42ef38b0990be8afb06c8a25b 100755 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/Bundle.properties-MERGED @@ -5,10 +5,7 @@ CentralRepoCommentDialog.title.addEditCentralRepoComment=Add/Edit Central Reposi OpenIDE-Module-Name=Central Repository OpenIDE-Module-Display-Category=Ingest Module OpenIDE-Module-Short-Description=Central Repository Ingest Module -OpenIDE-Module-Long-Description=\ - Central Repository ingest module and central database. \n\n\ - The Central Repository ingest module stores attributes of artifacts matching selected correlation types into a central database.\n\ - Stored attributes are used in future cases to correlate and analyzes files and artifacts during ingest. +OpenIDE-Module-Long-Description=Central Repository ingest module and central database. \n\nThe Central Repository ingest module stores attributes of artifacts matching selected correlation types into a central database.\nStored attributes are used in future cases to correlate and analyzes files and artifacts during ingest. CentralRepoCommentDialog.commentLabel.text=Comment: CentralRepoCommentDialog.okButton.text=&OK CentralRepoCommentDialog.cancelButton.text=C&ancel diff --git a/Core/src/org/sleuthkit/autopsy/contentviewers/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/contentviewers/Bundle.properties-MERGED index be121574740c2aa6f082bebb85e982a39a93936d..925e77c27c3cee0b065b1fe34bde4cfd3747a66e 100644 --- a/Core/src/org/sleuthkit/autopsy/contentviewers/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/contentviewers/Bundle.properties-MERGED @@ -180,837 +180,776 @@ TranslatablePanel.comboBoxOption.translatedText=Translated Text # {0} - exception message TranslatablePanel.onSetContentError.text=There was an error displaying the text: {0} ## Window toolbar Title -viewer.window.title.default = ICEpdf Viewer -viewer.window.title.open.default = ICEpdf Viewer - [{0}] +viewer.window.title.default=ICEpdf Viewer +viewer.window.title.open.default=ICEpdf Viewer - [{0}] #status bar -viewer.statusbar.currentPage = Page {0} / {1} - -viewer.common.number.one = 1 -viewer.common.number.two = 2 -viewer.common.number.three = 3 -viewer.common.number.four = 4 -viewer.common.number.five = 5 -viewer.common.number.six = 6 -viewer.common.number.seven = 7 -viewer.common.number.eight = 8 -viewer.common.number.nine = 9 -viewer.common.number.ten = 10 -viewer.common.number.eleven = 11 -viewer.common.number.twelve = 12 -viewer.common.number.thirteen = 13 -viewer.common.number.fourteen = 14 -viewer.common.number.fifteen = 15 -viewer.common.number.sixteen = 16 -viewer.common.number.seventeen = 17 -viewer.common.number.eighteen = 18 -viewer.common.number.nineteen = 19 -viewer.common.number.twenty = 20 -viewer.common.number.twentyOne = 21 -viewer.common.number.twentyTwo = 22 -viewer.common.number.twentyThree = 23 -viewer.common.number.twentyFour = 24 -viewer.common.number.twentyFive = 25 -viewer.common.number.twentySix = 26 -viewer.common.number.twentySeven = 27 -viewer.common.number.thirtySix = 36 -viewer.common.number.fortyEight = 48 +viewer.statusbar.currentPage=Page {0} / {1} + +viewer.common.number.one=1 +viewer.common.number.two=2 +viewer.common.number.three=3 +viewer.common.number.four=4 +viewer.common.number.five=5 +viewer.common.number.six=6 +viewer.common.number.seven=7 +viewer.common.number.eight=8 +viewer.common.number.nine=9 +viewer.common.number.ten=10 +viewer.common.number.eleven=11 +viewer.common.number.twelve=12 +viewer.common.number.thirteen=13 +viewer.common.number.fourteen=14 +viewer.common.number.fifteen=15 +viewer.common.number.sixteen=16 +viewer.common.number.seventeen=17 +viewer.common.number.eighteen=18 +viewer.common.number.nineteen=19 +viewer.common.number.twenty=20 +viewer.common.number.twentyOne=21 +viewer.common.number.twentyTwo=22 +viewer.common.number.twentyThree=23 +viewer.common.number.twentyFour=24 +viewer.common.number.twentyFive=25 +viewer.common.number.twentySix=26 +viewer.common.number.twentySeven=27 +viewer.common.number.thirtySix=36 +viewer.common.number.fortyEight=48 ## Top Page Control Toolbar -viewer.toolbar.hideToolBar.label = Hide Toolbar -viewer.toolbar.showToolBar.label = Show Toolbar -viewer.toolbar.showUtilityPane.label = Show Utility Pane -viewer.toolbar.hideUtilityPane.label = Hide Utility Pane -viewer.toolbar.open.label = -viewer.toolbar.open.tooltip = Open Document -viewer.toolbar.saveAs.label = Save As -viewer.toolbar.saveAs.tooltip = Save As... -viewer.toolbar.print.label = Print -viewer.toolbar.print.tooltip = Print Document -viewer.toolbar.search.label = Search -viewer.toolbar.search.tooltip = Search Document -viewer.toolbar.utilityPane.label = Utility Pane -viewer.toolbar.utilityPane.tooltip = Show/Hide Utility Pane -viewer.toolbar.navigation.label = -viewer.toolbar.navigation.pages.tooltip = Number of Pages -viewer.toolbar.navigation.pages.firstPage.label = -viewer.toolbar.navigation.current.tooltip = Current Page Number -viewer.toolbar.navigation.current.firstPage.label = -viewer.toolbar.navigation.firstPage.label = -viewer.toolbar.navigation.firstPage.tooltip = First Page -viewer.toolbar.navigation.previousPage.label = -viewer.toolbar.navigation.previousPage.tooltip = Previous Page -viewer.toolbar.navigation.nextPage.label = -viewer.toolbar.navigation.nextPage.tooltip = Next Page -viewer.toolbar.navigation.lastPage.label = -viewer.toolbar.navigation.lastPage.tooltip = Last Page -viewer.toolbar.pageIndicator = of {0} -viewer.toolbar.zoom.label = -viewer.toolbar.zoom.tooltip = Zoom -viewer.toolbar.zoom.out.label = -viewer.toolbar.zoom.out.tooltip = Zoom Out -viewer.toolbar.zoom.in.label = -viewer.toolbar.zoom.in.tooltip = Zoom In -viewer.toolbar.pageFit.actualsize.label = -viewer.toolbar.pageFit.actualsize.tooltip = Actual Size -viewer.toolbar.pageFit.fitWindow.label = -viewer.toolbar.pageFit.fitWindow.tooltip = Fit in Window -viewer.toolbar.pageFit.fitWidth.label = -viewer.toolbar.pageFit.fitWidth.tooltip = Fit Width -viewer.toolbar.rotation.left.label = -viewer.toolbar.rotation.left.tooltip = Rotate Left -viewer.toolbar.rotation.right.label = -viewer.toolbar.rotation.right.tooltip = Rotate Right -viewer.toolbar.tool.pan.label = -viewer.toolbar.tool.pan.tooltip = Pan Tool -viewer.toolbar.tool.text.label = -viewer.toolbar.tool.text.tooltip = Text Select Tool -viewer.toolbar.tool.select.label = -viewer.toolbar.tool.select.tooltip = Select Tool -viewer.toolbar.tool.link.label = -viewer.toolbar.tool.link.tooltip = Link Annotation Tool -viewer.toolbar.tool.highlight.label = Highlight -viewer.toolbar.tool.highlight.tooltip = Highlight Annotation Tool -viewer.toolbar.tool.strikeOut.label = Strike Out -viewer.toolbar.tool.strikeOut.tooltip = Strike Out Annotation Tool -viewer.toolbar.tool.underline.label = Underline -viewer.toolbar.tool.underline.tooltip = Underline Annotation Tool -viewer.toolbar.tool.line.label = Line -viewer.toolbar.tool.line.tooltip = Line Annotation Tool -viewer.toolbar.tool.lineArrow.label = Line Arrow -viewer.toolbar.tool.lineArrow.tooltip = Line Arrow Annotation Tool -viewer.toolbar.tool.rectangle.label = Rectangle -viewer.toolbar.tool.rectangle.tooltip = Rectangle Annotation Tool -viewer.toolbar.tool.circle.label = Circle -viewer.toolbar.tool.circle.tooltip = Circle Annotation Tool -viewer.toolbar.tool.ink.label = Ink -viewer.toolbar.tool.ink.tooltip = Ink Annotation Tool -viewer.toolbar.tool.freeText.label = Free Text -viewer.toolbar.tool.freeText.tooltip = Free Text Annotation Tool -viewer.toolbar.tool.textAnno.label = Text Annotation -viewer.toolbar.tool.textAnno.tooltip = Text Annotation Tool -viewer.toolbar.tool.plolyLine.label = Poly Line -viewer.toolbar.tool.plolyLine.tooltip = Poly Line Annotation Tool -viewer.toolbar.tool.zoomIn.label = -viewer.toolbar.tool.zoomIn.tooltip = Zoom In Tool -viewer.toolbar.tool.zoomMarquis.label = -viewer.toolbar.tool.zoomMarquis.tooltip = Zoom Marquee Tool -viewer.toolbar.tool.zoomDynamic.label = -viewer.toolbar.tool.zoomDynamic.tooltip = Zoom Dynamic Tool -viewer.toolbar.tool.zoomOut.label = -viewer.toolbar.tool.zoomOut.tooltip = Zoom Out Tool -viewer.toolbar.pageFit.fontEngine.label = -viewer.toolbar.pageFit.fontEngine.tooltip = Enable/Disable Font Engine -viewer.toolbar.tool.forms.highlight.label = Highlight Forms -viewer.toolbar.tool.forms.highlight.tooltip = Show/Hide Form Highlighting +viewer.toolbar.hideToolBar.label=Hide Toolbar +viewer.toolbar.showToolBar.label=Show Toolbar +viewer.toolbar.showUtilityPane.label=Show Utility Pane +viewer.toolbar.hideUtilityPane.label=Hide Utility Pane +viewer.toolbar.open.label= +viewer.toolbar.open.tooltip=Open Document +viewer.toolbar.saveAs.label=Save As +viewer.toolbar.saveAs.tooltip=Save As... +viewer.toolbar.print.label=Print +viewer.toolbar.print.tooltip=Print Document +viewer.toolbar.search.label=Search +viewer.toolbar.search.tooltip=Search Document +viewer.toolbar.utilityPane.label=Utility Pane +viewer.toolbar.utilityPane.tooltip=Show/Hide Utility Pane +viewer.toolbar.navigation.label= +viewer.toolbar.navigation.pages.tooltip=Number of Pages +viewer.toolbar.navigation.pages.firstPage.label= +viewer.toolbar.navigation.current.tooltip=Current Page Number +viewer.toolbar.navigation.current.firstPage.label= +viewer.toolbar.navigation.firstPage.label= +viewer.toolbar.navigation.firstPage.tooltip=First Page +viewer.toolbar.navigation.previousPage.label= +viewer.toolbar.navigation.previousPage.tooltip=Previous Page +viewer.toolbar.navigation.nextPage.label= +viewer.toolbar.navigation.nextPage.tooltip=Next Page +viewer.toolbar.navigation.lastPage.label= +viewer.toolbar.navigation.lastPage.tooltip=Last Page +viewer.toolbar.pageIndicator=of {0} +viewer.toolbar.zoom.label= +viewer.toolbar.zoom.tooltip=Zoom +viewer.toolbar.zoom.out.label= +viewer.toolbar.zoom.out.tooltip=Zoom Out +viewer.toolbar.zoom.in.label= +viewer.toolbar.zoom.in.tooltip=Zoom In +viewer.toolbar.pageFit.actualsize.label= +viewer.toolbar.pageFit.actualsize.tooltip=Actual Size +viewer.toolbar.pageFit.fitWindow.label= +viewer.toolbar.pageFit.fitWindow.tooltip=Fit in Window +viewer.toolbar.pageFit.fitWidth.label= +viewer.toolbar.pageFit.fitWidth.tooltip=Fit Width +viewer.toolbar.rotation.left.label= +viewer.toolbar.rotation.left.tooltip=Rotate Left +viewer.toolbar.rotation.right.label= +viewer.toolbar.rotation.right.tooltip=Rotate Right +viewer.toolbar.tool.pan.label= +viewer.toolbar.tool.pan.tooltip=Pan Tool +viewer.toolbar.tool.text.label= +viewer.toolbar.tool.text.tooltip=Text Select Tool +viewer.toolbar.tool.select.label= +viewer.toolbar.tool.select.tooltip=Select Tool +viewer.toolbar.tool.link.label= +viewer.toolbar.tool.link.tooltip=Link Annotation Tool +viewer.toolbar.tool.highlight.label=Highlight +viewer.toolbar.tool.highlight.tooltip=Highlight Annotation Tool +viewer.toolbar.tool.strikeOut.label=Strike Out +viewer.toolbar.tool.strikeOut.tooltip=Strike Out Annotation Tool +viewer.toolbar.tool.underline.label=Underline +viewer.toolbar.tool.underline.tooltip=Underline Annotation Tool +viewer.toolbar.tool.line.label=Line +viewer.toolbar.tool.line.tooltip=Line Annotation Tool +viewer.toolbar.tool.lineArrow.label=Line Arrow +viewer.toolbar.tool.lineArrow.tooltip=Line Arrow Annotation Tool +viewer.toolbar.tool.rectangle.label=Rectangle +viewer.toolbar.tool.rectangle.tooltip=Rectangle Annotation Tool +viewer.toolbar.tool.circle.label=Circle +viewer.toolbar.tool.circle.tooltip=Circle Annotation Tool +viewer.toolbar.tool.ink.label=Ink +viewer.toolbar.tool.ink.tooltip=Ink Annotation Tool +viewer.toolbar.tool.freeText.label=Free Text +viewer.toolbar.tool.freeText.tooltip=Free Text Annotation Tool +viewer.toolbar.tool.textAnno.label=Text Annotation +viewer.toolbar.tool.textAnno.tooltip=Text Annotation Tool +viewer.toolbar.tool.plolyLine.label=Poly Line +viewer.toolbar.tool.plolyLine.tooltip=Poly Line Annotation Tool +viewer.toolbar.tool.zoomIn.label= +viewer.toolbar.tool.zoomIn.tooltip=Zoom In Tool +viewer.toolbar.tool.zoomMarquis.label= +viewer.toolbar.tool.zoomMarquis.tooltip=Zoom Marquee Tool +viewer.toolbar.tool.zoomDynamic.label= +viewer.toolbar.tool.zoomDynamic.tooltip=Zoom Dynamic Tool +viewer.toolbar.tool.zoomOut.label= +viewer.toolbar.tool.zoomOut.tooltip=Zoom Out Tool +viewer.toolbar.pageFit.fontEngine.label= +viewer.toolbar.pageFit.fontEngine.tooltip=Enable/Disable Font Engine +viewer.toolbar.tool.forms.highlight.label=Highlight Forms +viewer.toolbar.tool.forms.highlight.tooltip=Show/Hide Form Highlighting ## Bottom Page View Control Toolbar -viewer.toolbar.pageView.nonContinuous.singlePage.label = -viewer.toolbar.pageView.nonContinuous.singlePage.tooltip = Single Page View Non-Continuous -viewer.toolbar.pageView.nonContinuous.facingPage.label = -viewer.toolbar.pageView.nonContinuous.facingPage.tooltip = Facing Page View Non-Continuous -viewer.toolbar.pageView.continuous.singlePage.label = -viewer.toolbar.pageView.continuous.singlePage.tooltip = Single Page View Continuous -viewer.toolbar.pageView.continuous.facingPage.label = -viewer.toolbar.pageView.continuous.facingPage.tooltip = Facing Page View Continuous +viewer.toolbar.pageView.nonContinuous.singlePage.label= +viewer.toolbar.pageView.nonContinuous.singlePage.tooltip=Single Page View Non-Continuous +viewer.toolbar.pageView.nonContinuous.facingPage.label= +viewer.toolbar.pageView.nonContinuous.facingPage.tooltip=Facing Page View Non-Continuous +viewer.toolbar.pageView.continuous.singlePage.label= +viewer.toolbar.pageView.continuous.singlePage.tooltip=Single Page View Continuous +viewer.toolbar.pageView.continuous.facingPage.label= +viewer.toolbar.pageView.continuous.facingPage.tooltip=Facing Page View Continuous ## File Menu and submenu items -viewer.menu.file.label = File -viewer.menu.file.mnemonic = F -viewer.menu.open.label = Open -viewer.menu.open.file.label = File... -viewer.menu.open.URL.label = URL... -viewer.menu.close.label = Close -viewer.menu.saveAs.label = Save As... -viewer.menu.exportText.label = Export Text... -viewer.menu.exportSVG.label = Export SVG... -viewer.menu.documentPermission.label = Document Permissions... -viewer.menu.documentInformation.label = Document Information... -viewer.menu.documentFonts.label = Document Fonts... -viewer.menu.printSetup.label = Print Setup... -viewer.menu.print.label = Print... -viewer.menu.exit.label = Exit +viewer.menu.file.label=File +viewer.menu.file.mnemonic=F +viewer.menu.open.label=Open +viewer.menu.open.file.label=File... +viewer.menu.open.URL.label=URL... +viewer.menu.close.label=Close +viewer.menu.saveAs.label=Save As... +viewer.menu.exportText.label=Export Text... +viewer.menu.exportSVG.label=Export SVG... +viewer.menu.documentPermission.label=Document Permissions... +viewer.menu.documentInformation.label=Document Information... +viewer.menu.documentFonts.label=Document Fonts... +viewer.menu.printSetup.label=Print Setup... +viewer.menu.print.label=Print... +viewer.menu.exit.label=Exit ## View Menu and submenu items -viewer.menu.edit.label = Edit -viewer.menu.edit.mnemonic = E -viewer.menu.edit.undo.label = Undo -viewer.menu.edit.redo.label = Redo -viewer.menu.edit.copy.label = Copy -viewer.menu.edit.delete.label = Delete -viewer.menu.edit.selectAll.label = Select All -viewer.menu.edit.deselectAll.label = Deselect All +viewer.menu.edit.label=Edit +viewer.menu.edit.mnemonic=E +viewer.menu.edit.undo.label=Undo +viewer.menu.edit.redo.label=Redo +viewer.menu.edit.copy.label=Copy +viewer.menu.edit.delete.label=Delete +viewer.menu.edit.selectAll.label=Select All +viewer.menu.edit.deselectAll.label=Deselect All ## View Menu and submenu items -viewer.menu.view.label = View -viewer.menu.view.mnemonic = V -viewer.menu.view.actualSize.label = Actual Size -viewer.menu.view.fitInWindow.label = Fit in Window -viewer.menu.view.fitWidth.label = Fit Width -viewer.menu.view.zoomIn.label = Zoom In -viewer.menu.view.zoomOut.label = Zoom Out -viewer.menu.view.rotateLeft.label = Rotate Left -viewer.menu.view.rotateRight.label = Rotate Right -viewer.menu.view.hideToolBar.label = Hide Toolbar -viewer.menu.view.showToolBar.label = Show Toolbar -viewer.menu.view.showUtilityPane.label = Show Utility Pane -viewer.menu.view.hideUtilityPane.label = Hide Utility Pane +viewer.menu.view.label=View +viewer.menu.view.mnemonic=V +viewer.menu.view.actualSize.label=Actual Size +viewer.menu.view.fitInWindow.label=Fit in Window +viewer.menu.view.fitWidth.label=Fit Width +viewer.menu.view.zoomIn.label=Zoom In +viewer.menu.view.zoomOut.label=Zoom Out +viewer.menu.view.rotateLeft.label=Rotate Left +viewer.menu.view.rotateRight.label=Rotate Right +viewer.menu.view.hideToolBar.label=Hide Toolbar +viewer.menu.view.showToolBar.label=Show Toolbar +viewer.menu.view.showUtilityPane.label=Show Utility Pane +viewer.menu.view.hideUtilityPane.label=Hide Utility Pane ## Document Menu and submenu items -viewer.menu.document.label = Document -viewer.menu.document.mnemonic = D -viewer.menu.document.firstPage.label = First Page -viewer.menu.document.previousPage.label = Previous Page -viewer.menu.document.nextPage.label = Next Page -viewer.menu.document.lastPage.label = Last Page -viewer.menu.document.search.label = Search... -viewer.menu.document.gotToPage.label = Go To Page... +viewer.menu.document.label=Document +viewer.menu.document.mnemonic=D +viewer.menu.document.firstPage.label=First Page +viewer.menu.document.previousPage.label=Previous Page +viewer.menu.document.nextPage.label=Next Page +viewer.menu.document.lastPage.label=Last Page +viewer.menu.document.search.label=Search... +viewer.menu.document.gotToPage.label=Go To Page... ## Window Menu and submenu items -viewer.menu.window.label = Window -viewer.menu.window.mnemonic = W -viewer.menu.window.minAll.label = Minimize All -viewer.menu.window.minAll.mnemonic = M -viewer.menu.window.frontAll.label = Bring All to Front -viewer.menu.window.frontAll.mnemonic = B -viewer.menu.window.1.label = 1 -viewer.menu.window.1.mnemonic = 1 -viewer.menu.window.2.label = 2 -viewer.menu.window.2.mnemonic = 2 -viewer.menu.window.3.label = 3 -viewer.menu.window.3.mnemonic = 3 -viewer.menu.window.4.label = 4 -viewer.menu.window.4.mnemonic = 4 -viewer.menu.window.5.label = 5 -viewer.menu.window.5.mnemonic = 5 -viewer.menu.window.6.label = 6 -viewer.menu.window.6.mnemonic = 6 -viewer.menu.window.7.label = 7 -viewer.menu.window.7.mnemonic = 7 -viewer.menu.window.8.label = 8 -viewer.menu.window.8.mnemonic = 8 -viewer.menu.window.9.label = 9 -viewer.menu.window.9.mnemonic = 9 +viewer.menu.window.label=Window +viewer.menu.window.mnemonic=W +viewer.menu.window.minAll.label=Minimize All +viewer.menu.window.minAll.mnemonic=M +viewer.menu.window.frontAll.label=Bring All to Front +viewer.menu.window.frontAll.mnemonic=B +viewer.menu.window.1.label=1 +viewer.menu.window.1.mnemonic=1 +viewer.menu.window.2.label=2 +viewer.menu.window.2.mnemonic=2 +viewer.menu.window.3.label=3 +viewer.menu.window.3.mnemonic=3 +viewer.menu.window.4.label=4 +viewer.menu.window.4.mnemonic=4 +viewer.menu.window.5.label=5 +viewer.menu.window.5.mnemonic=5 +viewer.menu.window.6.label=6 +viewer.menu.window.6.mnemonic=6 +viewer.menu.window.7.label=7 +viewer.menu.window.7.mnemonic=7 +viewer.menu.window.8.label=8 +viewer.menu.window.8.mnemonic=8 +viewer.menu.window.9.label=9 +viewer.menu.window.9.mnemonic=9 ## Add as many entries as you want, to viewer.menu.window.X.label and mnemonic ## where X is an incrementing integer. The mnemonic should be one unique ## character found within the label ## Help Menu and submenu items -viewer.menu.help.label = Help -viewer.menu.help.mnemonic = H -viewer.menu.help.about.label = About ICEpdf viewer... +viewer.menu.help.label=Help +viewer.menu.help.mnemonic=H +viewer.menu.help.about.label=About ICEpdf viewer... ## General error dialog -viewer.dialog.error.exception.title = ICEsoft ICEpdf - Exception -viewer.dialog.error.exception.msg = \ - There was an error executing your command do to the following exception\n\ - {0}. +viewer.dialog.error.exception.title=ICEsoft ICEpdf - Exception +viewer.dialog.error.exception.msg=There was an error executing your command do to the following exception\n{0}. ## Open File Dialog -viewer.dialog.openFile.title = Open File -viewer.dialog.openFile.error.title = ICEsoft ICEpdf - Open File Error -viewer.dialog.openFile.error.msg = \ - ICEpdf could not open the specified file at {0}\n\ - The file may be corrupt or not a supported file type. - -viewer.dialog.openDocument.pdfException.title = ICEsoft ICEpdf - PDF Exception -viewer.dialog.openDocument.pdfException.msg = \ - ICEpdf could not open the specified file {0} \n\ - The file may be corrupt or not a supported file type. - -viewer.dialog.openDocument.pdfSecurityException.title = ICEsoft ICEpdf - PDF Security Exception -viewer.dialog.openDocument.pdfSecurityException.msg = \ - ICEpdf could not open the encrypted file at {0}\n\ - This may be the result of an invalid password or a missing JCE Security Provider.\n\n\ - Please refer to ICEpdf Developer's Guide for more information. - -viewer.dialog.openDocument.exception.title = ICEsoft ICEpdf - Exception -viewer.dialog.openDocument.exception.msg = \ - ICEpdf could not open the specified file at {0}\n\ - The file may be corrupt or not a supported file type. - -viewer.dialog.openURL.exception.title = ICEsoft ICEpdf - URL Exception -viewer.dialog.openURL.exception.msg = \ - ICEpdf could not open the specified file. {0} \n\ - at URL: {1} -viewer.dialog.openURL.downloading.msg = Downloading {0} +viewer.dialog.openFile.title=Open File +viewer.dialog.openFile.error.title=ICEsoft ICEpdf - Open File Error +viewer.dialog.openFile.error.msg=ICEpdf could not open the specified file at {0}\nThe file may be corrupt or not a supported file type. + +viewer.dialog.openDocument.pdfException.title=ICEsoft ICEpdf - PDF Exception +viewer.dialog.openDocument.pdfException.msg=ICEpdf could not open the specified file {0} \nThe file may be corrupt or not a supported file type. + +viewer.dialog.openDocument.pdfSecurityException.title=ICEsoft ICEpdf - PDF Security Exception +viewer.dialog.openDocument.pdfSecurityException.msg=ICEpdf could not open the encrypted file at {0}\nThis may be the result of an invalid password or a missing JCE Security Provider.\n\nPlease refer to ICEpdf Developer's Guide for more information. + +viewer.dialog.openDocument.exception.title=ICEsoft ICEpdf - Exception +viewer.dialog.openDocument.exception.msg=ICEpdf could not open the specified file at {0}\nThe file may be corrupt or not a supported file type. + +viewer.dialog.openURL.exception.title=ICEsoft ICEpdf - URL Exception +viewer.dialog.openURL.exception.msg=ICEpdf could not open the specified file. {0} \nat URL: {1} +viewer.dialog.openURL.downloading.msg=Downloading {0} ## General error dialog -viewer.dialog.information.copyAll.title = ICEsoft ICEpdf - Information -viewer.dialog.information.copyAll.msg = \ - The document has more than {0} pages, please use\n\ - "Export text..." to extract document text. +viewer.dialog.information.copyAll.title=ICEsoft ICEpdf - Information +viewer.dialog.information.copyAll.msg=The document has more than {0} pages, please use\n"Export text..." to extract document text. ## Open URL Dialog -viewer.dialog.security.title = Document Security -viewer.dialog.security.msg = This PDF is protected -viewer.dialog.security.password.label = Password: -viewer.dialog.security.okButton.label = Ok -viewer.dialog.security.okButton.mnemonic = O -viewer.dialog.security.cancelButton.label = Cancel -viewer.dialog.security.cancelButton.mnemonic = C +viewer.dialog.security.title=Document Security +viewer.dialog.security.msg=This PDF is protected +viewer.dialog.security.password.label=Password: +viewer.dialog.security.okButton.label=Ok +viewer.dialog.security.okButton.mnemonic=O +viewer.dialog.security.cancelButton.label=Cancel +viewer.dialog.security.cancelButton.mnemonic=C ## Open URL Dialog -viewer.dialog.openURL.title = Open URL +viewer.dialog.openURL.title=Open URL ### Save a Copy Dialog -viewer.dialog.saveAs.title = Save As -viewer.dialog.saveAs.extensionError.title = ICEsoft ICEpdf - Save Error -viewer.dialog.saveAs.extensionError.msg = \ - ICEpdf could not save to {0} because it is not a supported file type. -viewer.dialog.saveAs.noExtensionError.title = ICEsoft ICEpdf - Save Error -viewer.dialog.saveAs.noExtensionError.msg = Please specify a file extension. -viewer.dialog.saveAs.noneUniqueName.title = ICEsoft ICEpdf - Save Error -viewer.dialog.saveAs.noneUniqueName.msg = \ - The file named {0} already exists. Please specify a unique name. -viewer.dialog.saveAs.noPermission.title = ICEpdf Viewer RI - Save Error -viewer.dialog.saveAs.noPermission.msg = You do not have permission or the credentials to save this document. -viewer.dialog.saveAs.noUpdates.title = ICEpdf Viewer RI -viewer.dialog.saveAs.noUpdates.msg = Document changes will not be saved, please upgrade to ICEpdf PRO. -viewer.dialog.saveOnClose.noUpdates.title = ICEpdf Viewer RI -viewer.dialog.saveOnClose.noUpdates.msg = Do you want to save changes to {0}? +viewer.dialog.saveAs.title=Save As +viewer.dialog.saveAs.extensionError.title=ICEsoft ICEpdf - Save Error +viewer.dialog.saveAs.extensionError.msg=ICEpdf could not save to {0} because it is not a supported file type. +viewer.dialog.saveAs.noExtensionError.title=ICEsoft ICEpdf - Save Error +viewer.dialog.saveAs.noExtensionError.msg=Please specify a file extension. +viewer.dialog.saveAs.noneUniqueName.title=ICEsoft ICEpdf - Save Error +viewer.dialog.saveAs.noneUniqueName.msg=The file named {0} already exists. Please specify a unique name. +viewer.dialog.saveAs.noPermission.title=ICEpdf Viewer RI - Save Error +viewer.dialog.saveAs.noPermission.msg=You do not have permission or the credentials to save this document. +viewer.dialog.saveAs.noUpdates.title=ICEpdf Viewer RI +viewer.dialog.saveAs.noUpdates.msg=Document changes will not be saved, please upgrade to ICEpdf PRO. +viewer.dialog.saveOnClose.noUpdates.title=ICEpdf Viewer RI +viewer.dialog.saveOnClose.noUpdates.msg=Do you want to save changes to {0}? ## Export Text Dialog -viewer.dialog.exportText.title = Export Document Text -viewer.dialog.exportText.progress.msg = Extracting PDF Text -viewer.dialog.exportText.noExtensionError.title = ICEsoft ICEpdf - Save Error -viewer.dialog.exportText.noExtensionError.msg = Please specify a file extension. +viewer.dialog.exportText.title=Export Document Text +viewer.dialog.exportText.progress.msg=Extracting PDF Text +viewer.dialog.exportText.noExtensionError.title=ICEsoft ICEpdf - Save Error +viewer.dialog.exportText.noExtensionError.msg=Please specify a file extension. # Text extraction output file -viewer.exportText.fileStamp.msg = ICEsoft ICEpdf Viewer, (c) ICEsoft Technologies, Inc. -viewer.exportText.pageStamp.msg = <!----- Page {0} Text ----> +viewer.exportText.fileStamp.msg=ICEsoft ICEpdf Viewer, (c) ICEsoft Technologies, Inc. +viewer.exportText.pageStamp.msg=<!----- Page {0} Text ----> # Completed x out of y page(s). -viewer.exportText.fileStamp.progress.msg = \ - Completed {0} out of {1}. -viewer.exportText.fileStamp.progress.oneFile.msg = {2} page -viewer.exportText.fileStamp.progress.moreFile.msg = {2} pages +viewer.exportText.fileStamp.progress.msg=Completed {0} out of {1}. +viewer.exportText.fileStamp.progress.oneFile.msg={2} page +viewer.exportText.fileStamp.progress.moreFile.msg={2} pages ## Export SVG Dialog -viewer.dialog.exportSVG.title = Export to SVG -viewer.dialog.exportSVG.status.exporting.msg = Exporting page {0} to SVG file {1} ... -viewer.dialog.exportSVG.status.error.msg = \ - Problem exporting page {0} to SVG file {1} : {2} -viewer.dialog.exportSVG.status.finished.msg = \ - Finished exporting page {0} to SVG file {1} -viewer.dialog.exportSVG.noExtensionError.title = ICEsoft ICEpdf - SVG Error -viewer.dialog.exportSVG.noExtensionError.msg = Please specify a file extension. -viewer.dialog.exportSVG.exportError.title = ICEsoft ICEpdf - SVG Error -viewer.dialog.exportSVG.exportError.msg = \ - ICEpdf could not export to {0} \n\ - becuase it is either not a supported file type or \n\ - because the file has been corrupted. +viewer.dialog.exportSVG.title=Export to SVG +viewer.dialog.exportSVG.status.exporting.msg=Exporting page {0} to SVG file {1} ... +viewer.dialog.exportSVG.status.error.msg=Problem exporting page {0} to SVG file {1} : {2} +viewer.dialog.exportSVG.status.finished.msg=Finished exporting page {0} to SVG file {1} +viewer.dialog.exportSVG.noExtensionError.title=ICEsoft ICEpdf - SVG Error +viewer.dialog.exportSVG.noExtensionError.msg=Please specify a file extension. +viewer.dialog.exportSVG.exportError.title=ICEsoft ICEpdf - SVG Error +viewer.dialog.exportSVG.exportError.msg=ICEpdf could not export to {0} \nbecuase it is either not a supported file type or \nbecause the file has been corrupted. # Printing Progress bar -viewer.dialog.printing.status.progress.msg = Page {0} of {1} -viewer.dialog.printing.status.start.msg = Spooling Page(s) to Printer +viewer.dialog.printing.status.progress.msg=Page {0} of {1} +viewer.dialog.printing.status.start.msg=Spooling Page(s) to Printer ## Document Permissions Dialog -viewer.dialog.documentPermissions.title = Document Permissions -viewer.dialog.documentPermissions.securityMethod.label = Security Method: -viewer.dialog.documentPermissions.userPassword.label = User Password: -viewer.dialog.documentPermissions.ownerPassword.label = Owner Password: -viewer.dialog.documentPermissions.printing.label = Printing: -viewer.dialog.documentPermissions.changing.label = Changing the Document: -viewer.dialog.documentPermissions.copyExtraction.label = Content Copying or Extraction: -viewer.dialog.documentPermissions.comments.label = Aurthoring Comments and Form Fields: -viewer.dialog.documentPermissions.formFillingIn.label = Form Field Fill-in or Signing: -viewer.dialog.documentPermissions.accessibility.label = Content Accessibility Enabled: -viewer.dialog.documentPermissions.assembly.label = Document Assembly: -viewer.dialog.documentPermissions.encryptionLevel.label = Encryption Level: -viewer.dialog.documentPermissions.securityLevel = {0}-bit v{1} R {2} -viewer.dialog.documentPermissions.none = None -viewer.dialog.documentPermissions.no = No -viewer.dialog.documentPermissions.yes = Yes -viewer.dialog.documentPermissions.allowed = Allowed -viewer.dialog.documentPermissions.notAllowed = Not Allowed -viewer.dialog.documentPermissions.fullyAllowed = Fully Allowed -viewer.dialog.documentPermissions.standardSecurity = Adobe Acrobat Standard Security -viewer.dialog.documentPermissions.partial = Partial (Low Quality) +viewer.dialog.documentPermissions.title=Document Permissions +viewer.dialog.documentPermissions.securityMethod.label=Security Method: +viewer.dialog.documentPermissions.userPassword.label=User Password: +viewer.dialog.documentPermissions.ownerPassword.label=Owner Password: +viewer.dialog.documentPermissions.printing.label=Printing: +viewer.dialog.documentPermissions.changing.label=Changing the Document: +viewer.dialog.documentPermissions.copyExtraction.label=Content Copying or Extraction: +viewer.dialog.documentPermissions.comments.label=Aurthoring Comments and Form Fields: +viewer.dialog.documentPermissions.formFillingIn.label=Form Field Fill-in or Signing: +viewer.dialog.documentPermissions.accessibility.label=Content Accessibility Enabled: +viewer.dialog.documentPermissions.assembly.label=Document Assembly: +viewer.dialog.documentPermissions.encryptionLevel.label=Encryption Level: +viewer.dialog.documentPermissions.securityLevel={0}-bit v{1} R {2} +viewer.dialog.documentPermissions.none=None +viewer.dialog.documentPermissions.no=No +viewer.dialog.documentPermissions.yes=Yes +viewer.dialog.documentPermissions.allowed=Allowed +viewer.dialog.documentPermissions.notAllowed=Not Allowed +viewer.dialog.documentPermissions.fullyAllowed=Fully Allowed +viewer.dialog.documentPermissions.standardSecurity=Adobe Acrobat Standard Security +viewer.dialog.documentPermissions.partial=Partial (Low Quality) ## Document Information Dialog -viewer.dialog.documentInformation.title = Document Information -viewer.dialog.documentInformation.title.label = Title: -viewer.dialog.documentInformation.subject.label = Subject: -viewer.dialog.documentInformation.author.label = Author: -viewer.dialog.documentInformation.keywords.label = Keywords: -viewer.dialog.documentInformation.creator.label = Creator: -viewer.dialog.documentInformation.producer.label = Producer: -viewer.dialog.documentInformation.created.label = Created: -viewer.dialog.documentInformation.modified.label = Modified: -viewer.dialog.documentInformation.notAvailable = Not Available +viewer.dialog.documentInformation.title=Document Information +viewer.dialog.documentInformation.title.label=Title: +viewer.dialog.documentInformation.subject.label=Subject: +viewer.dialog.documentInformation.author.label=Author: +viewer.dialog.documentInformation.keywords.label=Keywords: +viewer.dialog.documentInformation.creator.label=Creator: +viewer.dialog.documentInformation.producer.label=Producer: +viewer.dialog.documentInformation.created.label=Created: +viewer.dialog.documentInformation.modified.label=Modified: +viewer.dialog.documentInformation.notAvailable=Not Available ## Go to Page Dialog -viewer.dialog.goToPage.title = Go to Page... -viewer.dialog.goToPage.description.label = Page Number +viewer.dialog.goToPage.title=Go to Page... +viewer.dialog.goToPage.description.label=Page Number ## About Dialog -viewer.dialog.about.title = About ICEpdf Viewer -viewer.dialog.about.pageNumber.label = \n\ -\n\ -Check the ICEpdf web site for the latest news:\n\ -http://www.icepdf.org/ \n\n +viewer.dialog.about.title=About ICEpdf Viewer +viewer.dialog.about.pageNumber.label=\n\nCheck the ICEpdf web site for the latest news:\nhttp://www.icepdf.org/ \n\n ## Font Properties Dialog -viewer.dialog.fonts.title = Document Font Properties -viewer.dialog.fonts.border.label = Fonts used by this document -viewer.dialog.fonts.info.type.label = Type: {0} -viewer.dialog.fonts.info.encoding.label = Encoding: {0} -viewer.dialog.fonts.info.substitution.type.label = Actual Type: {0} -viewer.dialog.fonts.info.substitution.path.label = Path: {0} -viewer.dialog.fonts.searching.label = Collecting font data ({0}%). -viewer.dialog.fonts.resetCache.label = Reset Cache -viewer.dialog.fonts.resetCache.tip = Reset font properties cache file and rescan system for new fonts. +viewer.dialog.fonts.title=Document Font Properties +viewer.dialog.fonts.border.label=Fonts used by this document +viewer.dialog.fonts.info.type.label=Type: {0} +viewer.dialog.fonts.info.encoding.label=Encoding: {0} +viewer.dialog.fonts.info.substitution.type.label=Actual Type: {0} +viewer.dialog.fonts.info.substitution.path.label=Path: {0} +viewer.dialog.fonts.searching.label=Collecting font data ({0}%). +viewer.dialog.fonts.resetCache.label=Reset Cache +viewer.dialog.fonts.resetCache.tip=Reset font properties cache file and rescan system for new fonts. ## Utility Pane Bookmarks Tab -viewer.utilityPane.bookmarks.tab.title = Bookmarks +viewer.utilityPane.bookmarks.tab.title=Bookmarks ## Utility Pane Bookmarks Tab -viewer.utilityPane.attachments.tab.title = Attachments -viewer.utilityPane.attachments.column.fileName.title = Name -viewer.utilityPane.attachments.column.description.title = Description -viewer.utilityPane.attachments.column.modified.title = Modified -viewer.utilityPane.attachments.column.size.title = Size -viewer.utilityPane.attachments.column.compressedSize.title = Compressed size -viewer.utilityPane.attachments.menu.saveAs.label = Save As... -viewer.utilityPane.attachments.saveAs.replace.title = ICEsoft ICEpdf - Save Error -viewer.utilityPane.attachments.saveAs.replace.msg = \ - The file named {0} already exists. Do you want to replace It? +viewer.utilityPane.attachments.tab.title=Attachments +viewer.utilityPane.attachments.column.fileName.title=Name +viewer.utilityPane.attachments.column.description.title=Description +viewer.utilityPane.attachments.column.modified.title=Modified +viewer.utilityPane.attachments.column.size.title=Size +viewer.utilityPane.attachments.column.compressedSize.title=Compressed size +viewer.utilityPane.attachments.menu.saveAs.label=Save As... +viewer.utilityPane.attachments.saveAs.replace.title=ICEsoft ICEpdf - Save Error +viewer.utilityPane.attachments.saveAs.replace.msg=The file named {0} already exists. Do you want to replace It? ## Utility Pane Thumbnails -viewer.utilityPane.thumbs.tab.title = Thumbnails +viewer.utilityPane.thumbs.tab.title=Thumbnails ## Layers Pane -viewer.utilityPane.layers.tab.title = Layers +viewer.utilityPane.layers.tab.title=Layers ## Signature Pane -viewer.utilityPane.signatures.tab.title = Signatures -viewer.utilityPane.signatures.tab.certTree.error.label = \ - Unsigned Signature Fields Signer certificate could not be validated {0} {1} -viewer.utilityPane.signatures.tab.certTree.rootSigned.label = Signed by {0} {1} -viewer.utilityPane.signatures.tab.certTree.rootValidating.label = Validating signature {0} {1} -viewer.utilityPane.signatures.tab.certTree.cert.invalid.label = Signature is invalid: -viewer.utilityPane.signatures.tab.certTree.cert.unknown.label = Signature is valid: -viewer.utilityPane.signatures.tab.certTree.cert.valid.label = Signature validity is unknown: -viewer.utilityPane.signatures.tab.certTree.doc.modified.label = \ - This version of the document is unaltered but subsequent changes have been made -viewer.utilityPane.signatures.tab.certTree.doc.unmodified.label = Document has not been modified since it was signed -viewer.utilityPane.signatures.tab.certTree.doc.major.label = Document has been altered or corrupted since it was signed -viewer.utilityPane.signatures.tab.certTree.signature.identity.unknown.label = \ - Signer's identity is unknown because it could not be found in your keystore -viewer.utilityPane.signatures.tab.certTree.signature.identity.unchecked.label = \ - Signature is valid, but revocation of the signer's identity could not be checked -viewer.utilityPane.signatures.tab.certTree.signature.identity.valid.label = Signer's identity is valid -viewer.utilityPane.signatures.tab.certTree.signature.time.local.label = Signing time is from the clock on this signer's computer -viewer.utilityPane.signatures.tab.certTree.signature.time.embedded.label = \ - Signature included an embedded timestamp but it could not be validated -viewer.utilityPane.signatures.tab.certTree.signature.details.label = Signature Details -viewer.utilityPane.signatures.tab.certTree.signature.details.reason.label = Reason: {0} -viewer.utilityPane.signatures.tab.certTree.signature.details.location.label = Location: {0} -viewer.utilityPane.signatures.tab.certTree.signature.details.full.label = Certificate Details... -viewer.utilityPane.signatures.tab.certTree.signature.lastChecked.label = Last Checked: {0} -viewer.utilityPane.signatures.tab.certTree.unsigned.label = Unsigned Signature Fields +viewer.utilityPane.signatures.tab.title=Signatures +viewer.utilityPane.signatures.tab.certTree.error.label=Unsigned Signature Fields Signer certificate could not be validated {0} {1} +viewer.utilityPane.signatures.tab.certTree.rootSigned.label=Signed by {0} {1} +viewer.utilityPane.signatures.tab.certTree.rootValidating.label=Validating signature {0} {1} +viewer.utilityPane.signatures.tab.certTree.cert.invalid.label=Signature is invalid: +viewer.utilityPane.signatures.tab.certTree.cert.unknown.label=Signature is valid: +viewer.utilityPane.signatures.tab.certTree.cert.valid.label=Signature validity is unknown: +viewer.utilityPane.signatures.tab.certTree.doc.modified.label=This version of the document is unaltered but subsequent changes have been made +viewer.utilityPane.signatures.tab.certTree.doc.unmodified.label=Document has not been modified since it was signed +viewer.utilityPane.signatures.tab.certTree.doc.major.label=Document has been altered or corrupted since it was signed +viewer.utilityPane.signatures.tab.certTree.signature.identity.unknown.label=Signer's identity is unknown because it could not be found in your keystore +viewer.utilityPane.signatures.tab.certTree.signature.identity.unchecked.label=Signature is valid, but revocation of the signer's identity could not be checked +viewer.utilityPane.signatures.tab.certTree.signature.identity.valid.label=Signer's identity is valid +viewer.utilityPane.signatures.tab.certTree.signature.time.local.label=Signing time is from the clock on this signer's computer +viewer.utilityPane.signatures.tab.certTree.signature.time.embedded.label=Signature included an embedded timestamp but it could not be validated +viewer.utilityPane.signatures.tab.certTree.signature.details.label=Signature Details +viewer.utilityPane.signatures.tab.certTree.signature.details.reason.label=Reason: {0} +viewer.utilityPane.signatures.tab.certTree.signature.details.location.label=Location: {0} +viewer.utilityPane.signatures.tab.certTree.signature.details.full.label=Certificate Details... +viewer.utilityPane.signatures.tab.certTree.signature.lastChecked.label=Last Checked: {0} +viewer.utilityPane.signatures.tab.certTree.unsigned.label=Unsigned Signature Fields ## Signature certificate view dialog. -viewer.utilityPane.signatures.cert.dialog.title = Certificate Details -viewer.utilityPane.signatures.cert.dialog.closeButton.label = Close -viewer.utilityPane.signatures.cert.dialog.closeButton.mnemonic = C -viewer.utilityPane.signatures.cert.dialog.info.notAvailable.label = N/A -viewer.utilityPane.signatures.cert.dialog.info.unknownSubject.label = N/A Subject -viewer.utilityPane.signatures.cert.dialog.info.unknownIssuer.label = N/A Issuer -viewer.utilityPane.signatures.cert.dialog.info.certificateInfo.label = {0} - {1} -viewer.utilityPane.signatures.cert.dialog.info.column1.label = Field -viewer.utilityPane.signatures.cert.dialog.info.column2.label = Value -viewer.utilityPane.signatures.cert.dialog.info.version.label = Version -viewer.utilityPane.signatures.cert.dialog.info.version.value = v{0} -viewer.utilityPane.signatures.cert.dialog.info.serialNumber.label = Serial Number -viewer.utilityPane.signatures.cert.dialog.info.serialNumber.value = {0} -viewer.utilityPane.signatures.cert.dialog.info.signatureAlgorithm.label = Signature Algorithm -viewer.utilityPane.signatures.cert.dialog.info.signatureAlgorithm.value = {0} -viewer.utilityPane.signatures.cert.dialog.info.issuer.label = Issuer -viewer.utilityPane.signatures.cert.dialog.info.issuer.value = \ - Organization: {0} \nOrganization Unit: {1} \nCommon Name: {2} \nLocal: {3} \nState: {4} \nCountry: {5} \nEmail: {6} -viewer.utilityPane.signatures.cert.dialog.info.validity.label = Validity -viewer.utilityPane.signatures.cert.dialog.info.validity.value = From: {0}\n To: {1} -viewer.utilityPane.signatures.cert.dialog.info.subject.label = Subject -viewer.utilityPane.signatures.cert.dialog.info.subject.value = \ - Organization: {0} \nOrganization Unit: {1} \nCommon Name: {2} \nLocal: {3} \nState: {4} \nCountry: {5} \nEmail: {6} -viewer.utilityPane.signatures.cert.dialog.info.signature.label = Signature -viewer.utilityPane.signatures.cert.dialog.info.md5.label = MD5 Fingerprint -viewer.utilityPane.signatures.cert.dialog.info.md5.value = {0} -viewer.utilityPane.signatures.cert.dialog.info.sha1.label = SHA1 Fingerprint -viewer.utilityPane.signatures.cert.dialog.info.sha1.value = {0} -viewer.utilityPane.signatures.verify.initializingMessage.label = Validating {0} of {1} Signatures -viewer.utilityPane.signatures.verify.completeMessage.label = Validating process complete -viewer.utilityPane.signatures.verify.validating.label = Validating signature... +viewer.utilityPane.signatures.cert.dialog.title=Certificate Details +viewer.utilityPane.signatures.cert.dialog.closeButton.label=Close +viewer.utilityPane.signatures.cert.dialog.closeButton.mnemonic=C +viewer.utilityPane.signatures.cert.dialog.info.notAvailable.label=N/A +viewer.utilityPane.signatures.cert.dialog.info.unknownSubject.label=N/A Subject +viewer.utilityPane.signatures.cert.dialog.info.unknownIssuer.label=N/A Issuer +viewer.utilityPane.signatures.cert.dialog.info.certificateInfo.label={0} - {1} +viewer.utilityPane.signatures.cert.dialog.info.column1.label=Field +viewer.utilityPane.signatures.cert.dialog.info.column2.label=Value +viewer.utilityPane.signatures.cert.dialog.info.version.label=Version +viewer.utilityPane.signatures.cert.dialog.info.version.value=v{0} +viewer.utilityPane.signatures.cert.dialog.info.serialNumber.label=Serial Number +viewer.utilityPane.signatures.cert.dialog.info.serialNumber.value={0} +viewer.utilityPane.signatures.cert.dialog.info.signatureAlgorithm.label=Signature Algorithm +viewer.utilityPane.signatures.cert.dialog.info.signatureAlgorithm.value={0} +viewer.utilityPane.signatures.cert.dialog.info.issuer.label=Issuer +viewer.utilityPane.signatures.cert.dialog.info.issuer.value=Organization: {0} \nOrganization Unit: {1} \nCommon Name: {2} \nLocal: {3} \nState: {4} \nCountry: {5} \nEmail: {6} +viewer.utilityPane.signatures.cert.dialog.info.validity.label=Validity +viewer.utilityPane.signatures.cert.dialog.info.validity.value=From: {0}\n To: {1} +viewer.utilityPane.signatures.cert.dialog.info.subject.label=Subject +viewer.utilityPane.signatures.cert.dialog.info.subject.value=Organization: {0} \nOrganization Unit: {1} \nCommon Name: {2} \nLocal: {3} \nState: {4} \nCountry: {5} \nEmail: {6} +viewer.utilityPane.signatures.cert.dialog.info.signature.label=Signature +viewer.utilityPane.signatures.cert.dialog.info.md5.label=MD5 Fingerprint +viewer.utilityPane.signatures.cert.dialog.info.md5.value={0} +viewer.utilityPane.signatures.cert.dialog.info.sha1.label=SHA1 Fingerprint +viewer.utilityPane.signatures.cert.dialog.info.sha1.value={0} +viewer.utilityPane.signatures.verify.initializingMessage.label=Validating {0} of {1} Signatures +viewer.utilityPane.signatures.verify.completeMessage.label=Validating process complete +viewer.utilityPane.signatures.verify.validating.label=Validating signature... ## Annotation Tab -viewer.utilityPane.annotation.tab.title = Annotations +viewer.utilityPane.annotation.tab.title=Annotations ## Utility Pane Annotation Link Tab -viewer.utilityPane.annotation.link.appearance.title = Link Annotation -viewer.utilityPane.annotation.link.highlightType = Highlight Style: -viewer.utilityPane.annotation.link.none = None -viewer.utilityPane.annotation.link.invert = Invert` -viewer.utilityPane.annotation.link.outline = Outline -viewer.utilityPane.annotation.link.push = Push +viewer.utilityPane.annotation.link.appearance.title=Link Annotation +viewer.utilityPane.annotation.link.highlightType=Highlight Style: +viewer.utilityPane.annotation.link.none=None +viewer.utilityPane.annotation.link.invert=Invert` +viewer.utilityPane.annotation.link.outline=Outline +viewer.utilityPane.annotation.link.push=Push ## Utility Pane Annotation text markup Tab -viewer.utilityPane.annotation.textMarkup.appearance.title = Text Markup Annotation -viewer.utilityPane.annotation.textMarkup.highlightType = Type: -viewer.utilityPane.annotation.textMarkup.colorChooserTitle = MarKup Color -viewer.utilityPane.annotation.textMarkup.colorLabel = Color: -viewer.utilityPane.annotation.textMarkup.transparencyLabel = Transparency: +viewer.utilityPane.annotation.textMarkup.appearance.title=Text Markup Annotation +viewer.utilityPane.annotation.textMarkup.highlightType=Type: +viewer.utilityPane.annotation.textMarkup.colorChooserTitle=MarKup Color +viewer.utilityPane.annotation.textMarkup.colorLabel=Color: +viewer.utilityPane.annotation.textMarkup.transparencyLabel=Transparency: ## Utility Pane Annotation line Tab -viewer.utilityPane.annotation.line.appearance.title = Line Annotation -viewer.utilityPane.annotation.line.lineThickness = Line Thickness: -viewer.utilityPane.annotation.line.lineStyle = Line Style: -viewer.utilityPane.annotation.line.startStyle = Start: -viewer.utilityPane.annotation.line.endStyle = End: -viewer.utilityPane.annotation.line.colorChooserTitle = Line Color -viewer.utilityPane.annotation.line.colorInternalChooserTitle = Line Internal Color -viewer.utilityPane.annotation.line.colorLabel = Color: -viewer.utilityPane.annotation.line.colorInternalLabel = Fill Color: -viewer.utilityPane.annotation.line.end.none = None -viewer.utilityPane.annotation.line.end.openArrow = Open Arrow -viewer.utilityPane.annotation.line.end.closedArrow = Closed Arrow -viewer.utilityPane.annotation.line.end.diamond = Diamond -viewer.utilityPane.annotation.line.end.square = Square -viewer.utilityPane.annotation.line.end.circle = Circle -viewer.utilityPane.annotation.line.transparencyLabel = Transparency: +viewer.utilityPane.annotation.line.appearance.title=Line Annotation +viewer.utilityPane.annotation.line.lineThickness=Line Thickness: +viewer.utilityPane.annotation.line.lineStyle=Line Style: +viewer.utilityPane.annotation.line.startStyle=Start: +viewer.utilityPane.annotation.line.endStyle=End: +viewer.utilityPane.annotation.line.colorChooserTitle=Line Color +viewer.utilityPane.annotation.line.colorInternalChooserTitle=Line Internal Color +viewer.utilityPane.annotation.line.colorLabel=Color: +viewer.utilityPane.annotation.line.colorInternalLabel=Fill Color: +viewer.utilityPane.annotation.line.end.none=None +viewer.utilityPane.annotation.line.end.openArrow=Open Arrow +viewer.utilityPane.annotation.line.end.closedArrow=Closed Arrow +viewer.utilityPane.annotation.line.end.diamond=Diamond +viewer.utilityPane.annotation.line.end.square=Square +viewer.utilityPane.annotation.line.end.circle=Circle +viewer.utilityPane.annotation.line.transparencyLabel=Transparency: ## Utility Pane Annotation square Tab -viewer.utilityPane.annotation.square.appearance.title = Square Annotation -viewer.utilityPane.annotation.square.lineThickness = Border Thickness: -viewer.utilityPane.annotation.square.lineStyle = Border Style: -viewer.utilityPane.annotation.square.colorBorderChooserTitle = Border Color -viewer.utilityPane.annotation.square.colorInteriorChooserTitle = Fill Color -viewer.utilityPane.annotation.square.borderTypeLabel = Border Type: -viewer.utilityPane.annotation.square.colorBorderLabel = Border Color: -viewer.utilityPane.annotation.square.colorInteriorLabel = Fill Color: -viewer.utilityPane.annotation.square.fillTypeLabel = Fill Type: -viewer.utilityPane.annotation.square.transparencyLabel = Transparency: +viewer.utilityPane.annotation.square.appearance.title=Square Annotation +viewer.utilityPane.annotation.square.lineThickness=Border Thickness: +viewer.utilityPane.annotation.square.lineStyle=Border Style: +viewer.utilityPane.annotation.square.colorBorderChooserTitle=Border Color +viewer.utilityPane.annotation.square.colorInteriorChooserTitle=Fill Color +viewer.utilityPane.annotation.square.borderTypeLabel=Border Type: +viewer.utilityPane.annotation.square.colorBorderLabel=Border Color: +viewer.utilityPane.annotation.square.colorInteriorLabel=Fill Color: +viewer.utilityPane.annotation.square.fillTypeLabel=Fill Type: +viewer.utilityPane.annotation.square.transparencyLabel=Transparency: ## Utility Pane Annotation free text Tab -viewer.utilityPane.annotation.freeText.appearance.title = FreeText Annotation -viewer.utilityPane.annotation.freeText.font.name = Font Name: -viewer.utilityPane.annotation.freeText.font.style = Font Style: -viewer.utilityPane.annotation.freeText.font.size = Font Size: -viewer.utilityPane.annotation.freeText.font.color = Font Color: -viewer.utilityPane.annotation.freeText.font.color.ChooserTitle = Font Color -viewer.utilityPane.annotation.freeText.border.thickness = Border Thickness: -viewer.utilityPane.annotation.freeText.border.type = Border Type: -viewer.utilityPane.annotation.freeText.border.style = Border Style: -viewer.utilityPane.annotation.freeText.border.color = Border Color: -viewer.utilityPane.annotation.freeText.border.color.ChooserTitle = Border Color -viewer.utilityPane.annotation.freeText.fill.type = Fill Type: -viewer.utilityPane.annotation.freeText.fill.color = Fill Color: -viewer.utilityPane.annotation.freeText.transparencyLabel = Transparency: -viewer.utilityPane.annotation.freeText.fill.color.ChooserTitle = Fill Color -viewer.utilityPane.annotation.freeText.font.dialog = Dialog -viewer.utilityPane.annotation.freeText.font.dialogInput = DialogInput -viewer.utilityPane.annotation.freeText.font.monospaced = Monospaced -viewer.utilityPane.annotation.freeText.font.serif = Serif -viewer.utilityPane.annotation.freeText.font.sanSerif = SansSerif -viewer.utilityPane.annotation.freeText.font.style.plain = Plain -viewer.utilityPane.annotation.freeText.font.style.italic = Italic -viewer.utilityPane.annotation.freeText.font.style.bold = Bold -viewer.utilityPane.annotation.freeText.font.name.helvetica = Helvetica -viewer.utilityPane.annotation.freeText.font.name.helveticaOblique = Helvetica-Oblique -viewer.utilityPane.annotation.freeText.font.name.helveticaBold = Helvetica-Bold -viewer.utilityPane.annotation.freeText.font.name.HelveticaBoldOblique = Helvetica-BoldOblique -viewer.utilityPane.annotation.freeText.font.name.timesItalic = Times-Italic -viewer.utilityPane.annotation.freeText.font.name.timesBold = Times-Bold -viewer.utilityPane.annotation.freeText.font.name.timesBoldItalic = Times-BoldItalic -viewer.utilityPane.annotation.freeText.font.name.timesRoman = Times-Roman -viewer.utilityPane.annotation.freeText.font.name.courier = Courier -viewer.utilityPane.annotation.freeText.font.name.courierOblique = Courier-Oblique -viewer.utilityPane.annotation.freeText.font.name.courierBoldOblique = Courier-BoldOblique -viewer.utilityPane.annotation.freeText.font.name.courierBold = Courier-Bold +viewer.utilityPane.annotation.freeText.appearance.title=FreeText Annotation +viewer.utilityPane.annotation.freeText.font.name=Font Name: +viewer.utilityPane.annotation.freeText.font.style=Font Style: +viewer.utilityPane.annotation.freeText.font.size=Font Size: +viewer.utilityPane.annotation.freeText.font.color=Font Color: +viewer.utilityPane.annotation.freeText.font.color.ChooserTitle=Font Color +viewer.utilityPane.annotation.freeText.border.thickness=Border Thickness: +viewer.utilityPane.annotation.freeText.border.type=Border Type: +viewer.utilityPane.annotation.freeText.border.style=Border Style: +viewer.utilityPane.annotation.freeText.border.color=Border Color: +viewer.utilityPane.annotation.freeText.border.color.ChooserTitle=Border Color +viewer.utilityPane.annotation.freeText.fill.type=Fill Type: +viewer.utilityPane.annotation.freeText.fill.color=Fill Color: +viewer.utilityPane.annotation.freeText.transparencyLabel=Transparency: +viewer.utilityPane.annotation.freeText.fill.color.ChooserTitle=Fill Color +viewer.utilityPane.annotation.freeText.font.dialog=Dialog +viewer.utilityPane.annotation.freeText.font.dialogInput=DialogInput +viewer.utilityPane.annotation.freeText.font.monospaced=Monospaced +viewer.utilityPane.annotation.freeText.font.serif=Serif +viewer.utilityPane.annotation.freeText.font.sanSerif=SansSerif +viewer.utilityPane.annotation.freeText.font.style.plain=Plain +viewer.utilityPane.annotation.freeText.font.style.italic=Italic +viewer.utilityPane.annotation.freeText.font.style.bold=Bold +viewer.utilityPane.annotation.freeText.font.name.helvetica=Helvetica +viewer.utilityPane.annotation.freeText.font.name.helveticaOblique=Helvetica-Oblique +viewer.utilityPane.annotation.freeText.font.name.helveticaBold=Helvetica-Bold +viewer.utilityPane.annotation.freeText.font.name.HelveticaBoldOblique=Helvetica-BoldOblique +viewer.utilityPane.annotation.freeText.font.name.timesItalic=Times-Italic +viewer.utilityPane.annotation.freeText.font.name.timesBold=Times-Bold +viewer.utilityPane.annotation.freeText.font.name.timesBoldItalic=Times-BoldItalic +viewer.utilityPane.annotation.freeText.font.name.timesRoman=Times-Roman +viewer.utilityPane.annotation.freeText.font.name.courier=Courier +viewer.utilityPane.annotation.freeText.font.name.courierOblique=Courier-Oblique +viewer.utilityPane.annotation.freeText.font.name.courierBoldOblique=Courier-BoldOblique +viewer.utilityPane.annotation.freeText.font.name.courierBold=Courier-Bold ## Utility Pane Annotation text Tab -viewer.utilityPane.annotation.text.appearance.title = Text Annotation -viewer.utilityPane.annotation.text.iconName = Icon: -viewer.utilityPane.annotation.text.iconName.comment = Comment -viewer.utilityPane.annotation.text.iconName.check = Check -viewer.utilityPane.annotation.text.iconName.checkMark = CheckMark -viewer.utilityPane.annotation.text.iconName.circle = Circle -viewer.utilityPane.annotation.text.iconName.cross = Cross -viewer.utilityPane.annotation.text.iconName.crossHairs = CrossHairs -viewer.utilityPane.annotation.text.iconName.help = Help -viewer.utilityPane.annotation.text.iconName.insert = Insert -viewer.utilityPane.annotation.text.iconName.key = Key -viewer.utilityPane.annotation.text.iconName.newParagraph = NewParagraph -viewer.utilityPane.annotation.text.iconName.paragraph = Paragraph -viewer.utilityPane.annotation.text.iconName.rightArrow = RightArrow -viewer.utilityPane.annotation.text.iconName.rightPointer = RightPointer -viewer.utilityPane.annotation.text.iconName.star = Star -viewer.utilityPane.annotation.text.iconName.upArrow = UpArrow -viewer.utilityPane.annotation.text.iconName.upLeftArrow = UpLeftArrow +viewer.utilityPane.annotation.text.appearance.title=Text Annotation +viewer.utilityPane.annotation.text.iconName=Icon: +viewer.utilityPane.annotation.text.iconName.comment=Comment +viewer.utilityPane.annotation.text.iconName.check=Check +viewer.utilityPane.annotation.text.iconName.checkMark=CheckMark +viewer.utilityPane.annotation.text.iconName.circle=Circle +viewer.utilityPane.annotation.text.iconName.cross=Cross +viewer.utilityPane.annotation.text.iconName.crossHairs=CrossHairs +viewer.utilityPane.annotation.text.iconName.help=Help +viewer.utilityPane.annotation.text.iconName.insert=Insert +viewer.utilityPane.annotation.text.iconName.key=Key +viewer.utilityPane.annotation.text.iconName.newParagraph=NewParagraph +viewer.utilityPane.annotation.text.iconName.paragraph=Paragraph +viewer.utilityPane.annotation.text.iconName.rightArrow=RightArrow +viewer.utilityPane.annotation.text.iconName.rightPointer=RightPointer +viewer.utilityPane.annotation.text.iconName.star=Star +viewer.utilityPane.annotation.text.iconName.upArrow=UpArrow +viewer.utilityPane.annotation.text.iconName.upLeftArrow=UpLeftArrow ## Utility Pane Annotation circle Tab -viewer.utilityPane.annotation.circle.appearance.title = Circle Annotation -viewer.utilityPane.annotation.circle.lineThickness = Border Thickness: -viewer.utilityPane.annotation.circle.lineStyle = Border Style: -viewer.utilityPane.annotation.circle.colorBorderChooserTitle = Border Color -viewer.utilityPane.annotation.circle.colorInteriorChooserTitle = Interior Color -viewer.utilityPane.annotation.circle.colorBorderLabel = Border Color: -viewer.utilityPane.annotation.circle.colorInteriorLabel = Fill Color: -viewer.utilityPane.annotation.circle.fillTypeLabel = Fill Type: -viewer.utilityPane.annotation.circle.transparencyLabel = Transparency: +viewer.utilityPane.annotation.circle.appearance.title=Circle Annotation +viewer.utilityPane.annotation.circle.lineThickness=Border Thickness: +viewer.utilityPane.annotation.circle.lineStyle=Border Style: +viewer.utilityPane.annotation.circle.colorBorderChooserTitle=Border Color +viewer.utilityPane.annotation.circle.colorInteriorChooserTitle=Interior Color +viewer.utilityPane.annotation.circle.colorBorderLabel=Border Color: +viewer.utilityPane.annotation.circle.colorInteriorLabel=Fill Color: +viewer.utilityPane.annotation.circle.fillTypeLabel=Fill Type: +viewer.utilityPane.annotation.circle.transparencyLabel=Transparency: ## Utility Pane Annotation ink Tab -viewer.utilityPane.annotation.ink.appearance.title = Ink Annotation -viewer.utilityPane.annotation.ink.lineThickness = Ink Thickness: -viewer.utilityPane.annotation.ink.lineStyle = Ink Style: -viewer.utilityPane.annotation.ink.colorBorderChooserTitle = Ink Color -viewer.utilityPane.annotation.ink.colorBorderLabel = Ink Color: -viewer.utilityPane.annotation.ink.transparencyLabel = Transparency: +viewer.utilityPane.annotation.ink.appearance.title=Ink Annotation +viewer.utilityPane.annotation.ink.lineThickness=Ink Thickness: +viewer.utilityPane.annotation.ink.lineStyle=Ink Style: +viewer.utilityPane.annotation.ink.colorBorderChooserTitle=Ink Color +viewer.utilityPane.annotation.ink.colorBorderLabel=Ink Color: +viewer.utilityPane.annotation.ink.transparencyLabel=Transparency: ## Utility Pane border Tab -viewer.utilityPane.annotation.border.title = Border -viewer.utilityPane.annotation.border.linkType = Border Type: -viewer.utilityPane.annotation.border.lineThickness = Border Thickness: -viewer.utilityPane.annotation.border.lineStyle = Border Style: -viewer.utilityPane.annotation.border.colorChooserTitle = Border Color -viewer.utilityPane.annotation.border.colorLabel = Color: -viewer.utilityPane.annotation.border.borderType.visibleRectangle = Visible -viewer.utilityPane.annotation.border.borderType.invisibleRectangle = Invisible -viewer.utilityPane.annotation.border.solid = Solid -viewer.utilityPane.annotation.border.dashed = Dashed -viewer.utilityPane.annotation.border.beveled = Beveled -viewer.utilityPane.annotation.border.inset = Inset -viewer.utilityPane.annotation.border.underline = Underline +viewer.utilityPane.annotation.border.title=Border +viewer.utilityPane.annotation.border.linkType=Border Type: +viewer.utilityPane.annotation.border.lineThickness=Border Thickness: +viewer.utilityPane.annotation.border.lineStyle=Border Style: +viewer.utilityPane.annotation.border.colorChooserTitle=Border Color +viewer.utilityPane.annotation.border.colorLabel=Color: +viewer.utilityPane.annotation.border.borderType.visibleRectangle=Visible +viewer.utilityPane.annotation.border.borderType.invisibleRectangle=Invisible +viewer.utilityPane.annotation.border.solid=Solid +viewer.utilityPane.annotation.border.dashed=Dashed +viewer.utilityPane.annotation.border.beveled=Beveled +viewer.utilityPane.annotation.border.inset=Inset +viewer.utilityPane.annotation.border.underline=Underline ## Utility Pane border Tab -viewer.utilityPane.annotation.flags.title = Flags -viewer.utilityPane.annotation.flags.noRotate = No Rotate: -viewer.utilityPane.annotation.flags.noZoom = No Zoom: -viewer.utilityPane.annotation.flags.readOnly = Read Only: -viewer.utilityPane.annotation.flags.printable = Printable: -viewer.utilityPane.annotation.flags.yes = Printable: -viewer.utilityPane.annotation.flags.enabled = Enabled -viewer.utilityPane.annotation.flags.disabled = Disabled +viewer.utilityPane.annotation.flags.title=Flags +viewer.utilityPane.annotation.flags.noRotate=No Rotate: +viewer.utilityPane.annotation.flags.noZoom=No Zoom: +viewer.utilityPane.annotation.flags.readOnly=Read Only: +viewer.utilityPane.annotation.flags.printable=Printable: +viewer.utilityPane.annotation.flags.yes=Printable: +viewer.utilityPane.annotation.flags.enabled=Enabled +viewer.utilityPane.annotation.flags.disabled=Disabled ## annotation action pane and dialogs. -viewer.utilityPane.action.selectionTitle = Action -viewer.utilityPane.action.addAction = Add -viewer.utilityPane.action.editAction = Edit -viewer.utilityPane.action.removeAction = Remove -viewer.utilityPane.action.type.destination.label = Destination -viewer.utilityPane.action.type.uriAction.label = URI Action -viewer.utilityPane.action.type.goToAction.label = GoTo Action -viewer.utilityPane.action.type.launchAction.label = Launch Action -viewer.utilityPane.action.dialog.new.title = Add New Action -viewer.utilityPane.action.dialog.new.msgs = Action Type: -viewer.utilityPane.action.dialog.delete.title = Delete Confirmation -viewer.utilityPane.action.dialog.delete.msgs = Are you sure your want to delete this action? +viewer.utilityPane.action.selectionTitle=Action +viewer.utilityPane.action.addAction=Add +viewer.utilityPane.action.editAction=Edit +viewer.utilityPane.action.removeAction=Remove +viewer.utilityPane.action.type.destination.label=Destination +viewer.utilityPane.action.type.uriAction.label=URI Action +viewer.utilityPane.action.type.goToAction.label=GoTo Action +viewer.utilityPane.action.type.launchAction.label=Launch Action +viewer.utilityPane.action.dialog.new.title=Add New Action +viewer.utilityPane.action.dialog.new.msgs=Action Type: +viewer.utilityPane.action.dialog.delete.title=Delete Confirmation +viewer.utilityPane.action.dialog.delete.msgs=Are you sure your want to delete this action? ## uri action dialog test -viewer.utilityPane.action.dialog.uri.title = URI Action Properties -viewer.utilityPane.action.dialog.uri.msgs = URI: +viewer.utilityPane.action.dialog.uri.title=URI Action Properties +viewer.utilityPane.action.dialog.uri.msgs=URI: ## launch action dialog test -viewer.utilityPane.action.dialog.launch.title = Launch Action Properties -viewer.utilityPane.action.dialog.launch.msgs = File Path: +viewer.utilityPane.action.dialog.launch.title=Launch Action Properties +viewer.utilityPane.action.dialog.launch.msgs=File Path: ## GoTo action dialog text -viewer.utilityPane.action.dialog.goto.title = GoTo Action Properties -viewer.utilityPane.action.dialog.goto.page.label = Page: -viewer.utilityPane.action.dialog.goto.type.label = Type -viewer.utilityPane.action.dialog.goto.type.xyz.label = Absolute -viewer.utilityPane.action.dialog.goto.type.fit.label = Fit Page -viewer.utilityPane.action.dialog.goto.type.fith.label = Fit Top Width -viewer.utilityPane.action.dialog.goto.type.fitv.label = Fit Left Width -viewer.utilityPane.action.dialog.goto.type.fitr.label = Fit Zoom Box -viewer.utilityPane.action.dialog.goto.type.fitb.label = Fit Page Bounds -viewer.utilityPane.action.dialog.goto.type.fitbh.label = Fit Bounds Top -viewer.utilityPane.action.dialog.goto.type.fitbv.label = Fit Bounds Left -viewer.utilityPane.action.dialog.goto.right.label = Right: -viewer.utilityPane.action.dialog.goto.left.label = Left: -viewer.utilityPane.action.dialog.goto.top.label = Top: -viewer.utilityPane.action.dialog.goto.bottom.label = Bottom: -viewer.utilityPane.action.dialog.goto.zoom.label = Zoom: -viewer.utilityPane.action.dialog.goto.unassigned.label = NaN -viewer.utilityPane.action.dialog.goto.current.label = Current View: -viewer.utilityPane.action.dialog.goto.current = Set Location -viewer.utilityPane.action.dialog.goto.name.label = Name: -viewer.utilityPane.action.dialog.goto.browse = Browse... -viewer.utilityPane.action.dialog.goto.explicitDestination.title = Implicit Destination -viewer.utilityPane.action.dialog.goto.nameDestination.title = Named Destination +viewer.utilityPane.action.dialog.goto.title=GoTo Action Properties +viewer.utilityPane.action.dialog.goto.page.label=Page: +viewer.utilityPane.action.dialog.goto.type.label=Type +viewer.utilityPane.action.dialog.goto.type.xyz.label=Absolute +viewer.utilityPane.action.dialog.goto.type.fit.label=Fit Page +viewer.utilityPane.action.dialog.goto.type.fith.label=Fit Top Width +viewer.utilityPane.action.dialog.goto.type.fitv.label=Fit Left Width +viewer.utilityPane.action.dialog.goto.type.fitr.label=Fit Zoom Box +viewer.utilityPane.action.dialog.goto.type.fitb.label=Fit Page Bounds +viewer.utilityPane.action.dialog.goto.type.fitbh.label=Fit Bounds Top +viewer.utilityPane.action.dialog.goto.type.fitbv.label=Fit Bounds Left +viewer.utilityPane.action.dialog.goto.right.label=Right: +viewer.utilityPane.action.dialog.goto.left.label=Left: +viewer.utilityPane.action.dialog.goto.top.label=Top: +viewer.utilityPane.action.dialog.goto.bottom.label=Bottom: +viewer.utilityPane.action.dialog.goto.zoom.label=Zoom: +viewer.utilityPane.action.dialog.goto.unassigned.label=NaN +viewer.utilityPane.action.dialog.goto.current.label=Current View: +viewer.utilityPane.action.dialog.goto.current=Set Location +viewer.utilityPane.action.dialog.goto.name.label=Name: +viewer.utilityPane.action.dialog.goto.browse=Browse... +viewer.utilityPane.action.dialog.goto.explicitDestination.title=Implicit Destination +viewer.utilityPane.action.dialog.goto.nameDestination.title=Named Destination # Destination Named Tree -viewer.utilityPane.action.dialog.goto.nameTree.title = Document Name Tree -viewer.utilityPane.action.dialog.goto.nameTree.root.label = Name Tree -viewer.utilityPane.action.dialog.goto.nameTree.branch.label = {0} to {1} +viewer.utilityPane.action.dialog.goto.nameTree.title=Document Name Tree +viewer.utilityPane.action.dialog.goto.nameTree.root.label=Name Tree +viewer.utilityPane.action.dialog.goto.nameTree.branch.label={0} to {1} ## Utility Pane Search Tab -viewer.utilityPane.search.tab.title = Search -viewer.utilityPane.search.searchText.label = Search Text: -viewer.utilityPane.search.results.label = Results: -viewer.utilityPane.search.searchButton.label = Search -viewer.utilityPane.search.clearSearchButton.label = Clear -viewer.utilityPane.search.caseSenstiveCheckbox.label = Case-sensitive -viewer.utilityPane.search.wholeWordCheckbox.label = Whole words only -viewer.utilityPane.search.cumlitiveCheckbox.label = Cumulative -viewer.utilityPane.search.showPagesCheckbox.label = Show Pages -viewer.utilityPane.search.stopButton.label = Stop -viewer.utilityPane.search.searching.msg = Search... +viewer.utilityPane.search.tab.title=Search +viewer.utilityPane.search.searchText.label=Search Text: +viewer.utilityPane.search.results.label=Results: +viewer.utilityPane.search.searchButton.label=Search +viewer.utilityPane.search.clearSearchButton.label=Clear +viewer.utilityPane.search.caseSenstiveCheckbox.label=Case-sensitive +viewer.utilityPane.search.wholeWordCheckbox.label=Whole words only +viewer.utilityPane.search.cumlitiveCheckbox.label=Cumulative +viewer.utilityPane.search.showPagesCheckbox.label=Show Pages +viewer.utilityPane.search.stopButton.label=Stop +viewer.utilityPane.search.searching.msg=Search... # Searching x out of y page(s) -viewer.utilityPane.search.searching1.msg = \ - Searching {0} out of {1} -viewer.utilityPane.search.searching1.oneFile.msg = {2} page -viewer.utilityPane.search.searching1.moreFile.msg = {2} pages +viewer.utilityPane.search.searching1.msg=Searching {0} out of {1} +viewer.utilityPane.search.searching1.oneFile.msg={2} page +viewer.utilityPane.search.searching1.moreFile.msg={2} pages # Page x (y result(s)) -viewer.utilityPane.search.result.msg = Page {0} ({1}) -viewer.utilityPane.search.result.oneFile.msg = {2} result -viewer.utilityPane.search.result.moreFile.msg = {2} results +viewer.utilityPane.search.result.msg=Page {0} ({1}) +viewer.utilityPane.search.result.oneFile.msg={2} result +viewer.utilityPane.search.result.moreFile.msg={2} results # Searched x page(s) (y matches) -viewer.utilityPane.search.progress.msg = \ - Searched {0} {1} ({2}) -viewer.utilityPane.search.progress.onePage.msg = page -viewer.utilityPane.search.progress.morePage.msg = pages -viewer.utilityPane.search.progress.oneMatch.msg = {2} match -viewer.utilityPane.search.progress.moreMatch.msg = {2} matches +viewer.utilityPane.search.progress.msg=Searched {0} {1} ({2}) +viewer.utilityPane.search.progress.onePage.msg=page +viewer.utilityPane.search.progress.morePage.msg=pages +viewer.utilityPane.search.progress.oneMatch.msg={2} match +viewer.utilityPane.search.progress.moreMatch.msg={2} matches ## Popup Annotation component -viewer.annotation.popup.reply.label = Reply -viewer.annotation.popup.delete.label = Delete -viewer.annotation.popup.status.label = Set Status -viewer.annotation.popup.status.accepted.label = Accepted -viewer.annotation.popup.status.cancelled.label = Cancelled -viewer.annotation.popup.status.completed.label = Completed -viewer.annotation.popup.status.rejected.label = Rejected -viewer.annotation.popup.status.none.label = None -viewer.annotation.popup.openAll.label = Open all Popups -viewer.annotation.popup.minimizeAll.label = Minimize Popups -viewer.annotation.popup.replyTo.label = Re: {0} -viewer.annotation.popup.status.none.title = None: {0} -viewer.annotation.popup.status.none.msg = None set by {0} -viewer.annotation.popup.status.accepted.title = Accepted: {0} -viewer.annotation.popup.status.accepted.msg = Accepted set by {0} -viewer.annotation.popup.status.cancelled.title = Cancelled: {0} -viewer.annotation.popup.status.cancelled.msg = Cancelled set by {0} -viewer.annotation.popup.status.completed.title = Completed: {0} -viewer.annotation.popup.status.completed.msg = Completed set by {0} -viewer.annotation.popup.status.rejected.title = Rejected: {0} -viewer.annotation.popup.status.rejected.msg = Rejected set by {0} +viewer.annotation.popup.reply.label=Reply +viewer.annotation.popup.delete.label=Delete +viewer.annotation.popup.status.label=Set Status +viewer.annotation.popup.status.accepted.label=Accepted +viewer.annotation.popup.status.cancelled.label=Cancelled +viewer.annotation.popup.status.completed.label=Completed +viewer.annotation.popup.status.rejected.label=Rejected +viewer.annotation.popup.status.none.label=None +viewer.annotation.popup.openAll.label=Open all Popups +viewer.annotation.popup.minimizeAll.label=Minimize Popups +viewer.annotation.popup.replyTo.label=Re: {0} +viewer.annotation.popup.status.none.title=None: {0} +viewer.annotation.popup.status.none.msg=None set by {0} +viewer.annotation.popup.status.accepted.title=Accepted: {0} +viewer.annotation.popup.status.accepted.msg=Accepted set by {0} +viewer.annotation.popup.status.cancelled.title=Cancelled: {0} +viewer.annotation.popup.status.cancelled.msg=Cancelled set by {0} +viewer.annotation.popup.status.completed.title=Completed: {0} +viewer.annotation.popup.status.completed.msg=Completed set by {0} +viewer.annotation.popup.status.rejected.title=Rejected: {0} +viewer.annotation.popup.status.rejected.msg=Rejected set by {0} ## Signature component -viewer.annotation.signature.menu.validateSignature.label = Validate Signature -viewer.annotation.signature.menu.showCertificates.label = Show Certificate Properties -viewer.annotation.signature.menu.signatureProperties.label = Show Signature Properties -viewer.annotation.signature.menu.signaturePageNavigation.label = Go to Page... +viewer.annotation.signature.menu.validateSignature.label=Validate Signature +viewer.annotation.signature.menu.showCertificates.label=Show Certificate Properties +viewer.annotation.signature.menu.signatureProperties.label=Show Signature Properties +viewer.annotation.signature.menu.signaturePageNavigation.label=Go to Page... ## Signature validation dialog. -viewer.annotation.signature.validation.dialog.title = Signature Validation Summary -viewer.annotation.signature.validation.dialog.close.button.label = Close -viewer.annotation.signature.validation.dialog.signerProperties.button.label = Signature Properties... +viewer.annotation.signature.validation.dialog.title=Signature Validation Summary +viewer.annotation.signature.validation.dialog.close.button.label=Close +viewer.annotation.signature.validation.dialog.signerProperties.button.label=Signature Properties... # common validation messages -viewer.annotation.signature.validation.common.invalid.label = Signature is invalid: -viewer.annotation.signature.validation.common.unknown.label = Signature is valid: -viewer.annotation.signature.validation.common.valid.label = Signature validity is unknown: -viewer.annotation.signature.validation.common.signedBy.label = - Signed by {0} {1} -viewer.annotation.signature.validation.common.doc.modified.label = \ - - This version of the document is unaltered but subsequent changes have been made -viewer.annotation.signature.validation.common.doc.unmodified.label = - Document has not been modified since it was signed -viewer.annotation.signature.validation.common.doc.major.label = - Document has been altered or corrupted since it was signed -viewer.annotation.signature.validation.common.identity.unknown.label = \ - - Signer's identity is unknown because it could not be found in your keystore -viewer.annotation.signature.validation.common.identity.unchecked.label = \ - - Signature is valid, but revocation of the signer's identity could not be checked -viewer.annotation.signature.validation.common.identity.valid.label = - Signer's identity is valid -viewer.annotation.signature.validation.common.time.local.label = - Signing time is from the clock on this signer's computer -viewer.annotation.signature.validation.common.time.embedded.label = \ - - Signature included an embedded timestamp but it could not be validated -viewer.annotation.signature.validation.common.notAvailable.label = N/A +viewer.annotation.signature.validation.common.invalid.label=Signature is invalid: +viewer.annotation.signature.validation.common.unknown.label=Signature is valid: +viewer.annotation.signature.validation.common.valid.label=Signature validity is unknown: +viewer.annotation.signature.validation.common.signedBy.label=- Signed by {0} {1} +viewer.annotation.signature.validation.common.doc.modified.label=- This version of the document is unaltered but subsequent changes have been made +viewer.annotation.signature.validation.common.doc.unmodified.label=- Document has not been modified since it was signed +viewer.annotation.signature.validation.common.doc.major.label=- Document has been altered or corrupted since it was signed +viewer.annotation.signature.validation.common.identity.unknown.label=- Signer's identity is unknown because it could not be found in your keystore +viewer.annotation.signature.validation.common.identity.unchecked.label=- Signature is valid, but revocation of the signer's identity could not be checked +viewer.annotation.signature.validation.common.identity.valid.label=- Signer's identity is valid +viewer.annotation.signature.validation.common.time.local.label=- Signing time is from the clock on this signer's computer +viewer.annotation.signature.validation.common.time.embedded.label=- Signature included an embedded timestamp but it could not be validated +viewer.annotation.signature.validation.common.notAvailable.label=N/A ## Signatures properties Dialog. -viewer.annotation.signature.properties.dialog.title = Signature Properties -viewer.annotation.signature.properties.dialog.invalid.label = Signature is invalid -viewer.annotation.signature.properties.dialog.unknown.label = Signature is valid -viewer.annotation.signature.properties.dialog.valid.label = Signature validity is unknown -viewer.annotation.signature.properties.dialog.signedBy.label = Signed by {0} {1} -viewer.annotation.signature.properties.dialog.signingTime.label = Signed time: {0} -viewer.annotation.signature.properties.dialog.reason.label = Reason: {0} -viewer.annotation.signature.properties.dialog.location.label = Location: {0} +viewer.annotation.signature.properties.dialog.title=Signature Properties +viewer.annotation.signature.properties.dialog.invalid.label=Signature is invalid +viewer.annotation.signature.properties.dialog.unknown.label=Signature is valid +viewer.annotation.signature.properties.dialog.valid.label=Signature validity is unknown +viewer.annotation.signature.properties.dialog.signedBy.label=Signed by {0} {1} +viewer.annotation.signature.properties.dialog.signingTime.label=Signed time: {0} +viewer.annotation.signature.properties.dialog.reason.label=Reason: {0} +viewer.annotation.signature.properties.dialog.location.label=Location: {0} # SignatureSigner Info -viewer.annotation.signature.properties.dialog.pathValidation.success = - Path validation checks were successful. -viewer.annotation.signature.properties.dialog.pathValidation.failure = - Path validation checks were unsuccessful. -viewer.annotation.signature.properties.dialog.revocation.success = - Signer's certificate is valid and has not been revoked. -viewer.annotation.signature.properties.dialog.revocation.failure = - Revocation checking was not performed. -viewer.annotation.signature.properties.dialog.certificateExpired.failure = - Signer certificate has expired. -viewer.annotation.signature.properties.dialog.showCertificates.label = Signer's Certificate... -viewer.annotation.signature.properties.dialog.validity.title = Validity Summary -viewer.annotation.signature.properties.dialog.signerInfo.title = Signer Info +viewer.annotation.signature.properties.dialog.pathValidation.success=- Path validation checks were successful. +viewer.annotation.signature.properties.dialog.pathValidation.failure=- Path validation checks were unsuccessful. +viewer.annotation.signature.properties.dialog.revocation.success=- Signer's certificate is valid and has not been revoked. +viewer.annotation.signature.properties.dialog.revocation.failure=- Revocation checking was not performed. +viewer.annotation.signature.properties.dialog.certificateExpired.failure=- Signer certificate has expired. +viewer.annotation.signature.properties.dialog.showCertificates.label=Signer's Certificate... +viewer.annotation.signature.properties.dialog.validity.title=Validity Summary +viewer.annotation.signature.properties.dialog.signerInfo.title=Signer Info ## Common Button Labels -viewer.button.ok.label = Ok -viewer.button.ok.mnemonic = O -viewer.button.cancel.label = Cancel -viewer.button.cancel.mnemonic = C +viewer.button.ok.label=Ok +viewer.button.ok.mnemonic=O +viewer.button.cancel.label=Cancel +viewer.button.cancel.mnemonic=C ## Pilot Specific Mesages -pilot.title = ICEbrowser - ICEpdf Pilot Errror -pilot.loading.msg =Opening document {0} ... -pilot.display.msg = Displaying {0} -pilot.loading.error.msg = PDF Pilot: Failed to load {0}. -pilot.error.classLoading = Required class {0} not found. Required library \ - 'icepdf.jar' may not be on the classpath - PDF Pilot disabled."; +pilot.title=ICEbrowser - ICEpdf Pilot Errror +pilot.loading.msg=Opening document {0} ... +pilot.display.msg=Displaying {0} +pilot.loading.error.msg=PDF Pilot: Failed to load {0}. +pilot.error.classLoading=Required class {0} not found. Required library 'icepdf.jar' may not be on the classpath - PDF Pilot disabled."; ### # General Error Messages # Command Line Errors -viewer.commandLin.error = \ - Usage: java org.icepdf.ri.viewer.Main [-loadfile <value>] [-loadurl <value>] +viewer.commandLin.error=Usage: java org.icepdf.ri.viewer.Main [-loadfile <value>] [-loadurl <value>] # Launcher errors -viewer.launcher.URLError.dialog.title =ICEsoft ICEpdf -viewer.launcher.URLError.dialog.message = ICEpdf could not open the specified file. {0} at URL: {1}. -viewer.launcher.lookAndFeel.error.message = The specified look-and-feel ({0}) is not accessible from this platform. +viewer.launcher.URLError.dialog.title=ICEsoft ICEpdf +viewer.launcher.URLError.dialog.message=ICEpdf could not open the specified file. {0} at URL: {1}. +viewer.launcher.lookAndFeel.error.message=The specified look-and-feel ({0}) is not accessible from this platform. # Pilot Loading Errors ### parser error dialogs -parse.title = Properties Parsing Error -parse.integer = Warning : {0} is not a correct integer. -parse.float = Warning : {0} is not a correct float. -parse.double = Warning : {0} is not a correct double. -parse.choice = Warning : {0} is not a valid choice. -parse.laf = Warning : look-and-feel {0} is not supported. +parse.title=Properties Parsing Error +parse.integer=Warning : {0} is not a correct integer. +parse.float=Warning : {0} is not a correct float. +parse.double=Warning : {0} is not a correct double. +parse.choice=Warning : {0} is not a valid choice. +parse.laf=Warning : look-and-feel {0} is not supported. ### Properties Manager Errors -manager.properties.title = ICEpdf Properties Manager -fontManager.properties.title = ICEpdf Font Manager +manager.properties.title=ICEpdf Properties Manager +fontManager.properties.title=ICEpdf Font Manager -manager.properties.createNewDirectory = \ - To create the directory {0},\n\ - where the ICEpdf Viewer will store changes to its setup, click Yes.\n\n\ - If you click "No", all changes you make to the ICEpdf Viewer setup\n\ - will be lost when you quit the application. \n\n +manager.properties.createNewDirectory=To create the directory {0},\nwhere the ICEpdf Viewer will store changes to its setup, click Yes.\n\nIf you click "No", all changes you make to the ICEpdf Viewer setup\nwill be lost when you quit the application. \n\n -manager.properties.failedCreation = \ - ICEpdf Viewer directory to store user data can not be created:\n\ - {0}\n\ - ICEpdf Viewer will not save changes to its default setup. +manager.properties.failedCreation=ICEpdf Viewer directory to store user data can not be created:\n{0}\nICEpdf Viewer will not save changes to its default setup. -manager.properties.session.nolock = \ - Error creating the lock file :\n\ - {0}\n +manager.properties.session.nolock=Error creating the lock file :\n{0}\n -manager.properties.session.readError = \ - Error loading properties file: \n\ - {0} +manager.properties.session.readError=Error loading properties file: \n{0} -manager.properties.deleted = Property file has been deleted\n\ - ({0})\n\ - Recreate it ? +manager.properties.deleted=Property file has been deleted\n({0})\nRecreate it ? -manager.properties.modified = Property file has been modified since last update\n\ -({0,date,long})\n\ -Would you like to merge changes in the file with the current properties? +manager.properties.modified=Property file has been modified since last update\n({0,date,long})\nWould you like to merge changes in the file with the current properties? -manager.properties.saveError = Impossible to save property file.\n\ -Encountered the folowing error :\n\ -{0} +manager.properties.saveError=Impossible to save property file.\nEncountered the folowing error :\n{0} -manager.properties.lafError =\ - Look&Feel {0} given in the default properties is unsupported.\n\ - Using system default. +manager.properties.lafError=Look&Feel {0} given in the default properties is unsupported.\nUsing system default. -manager.properties.brokenProperty = Broken default property {0} value: {1} +manager.properties.brokenProperty=Broken default property {0} value: {1} -manager.properties.missingProperty = Missing default property {0} value: {1} +manager.properties.missingProperty=Missing default property {0} value: {1} diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/AboutWindowAction.java b/Core/src/org/sleuthkit/autopsy/corecomponents/AboutWindowAction.java index db68527f0e9ff467b0d0c134ea4c6a94c642372e..6f80399b1ff96f37d69879aeb3b2bc92ff350f6e 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/AboutWindowAction.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/AboutWindowAction.java @@ -24,6 +24,7 @@ import org.openide.DialogDisplayer; import org.openide.awt.ActionID; import org.openide.awt.ActionReference; +import org.openide.awt.ActionRegistration; import org.openide.util.NbBundle; import org.openide.util.NbBundle.Messages; @@ -32,6 +33,7 @@ * menu. */ @ActionID(id = "org.sleuthkit.autopsy.corecomponents.AboutWindowAction", category = "Help") +@ActionRegistration(displayName = "#CTL_CustomAboutAction", iconInMenu = true, lazy = false) @ActionReference(path = "Menu/Help", position = 3000, separatorBefore = 2999) public class AboutWindowAction extends AboutAction { diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle.properties b/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle.properties index 584ba1dcd1add40287576c9956f74da5bbbd93f1..d11006a6feeb0d83b1da745f0105cdd00262e55f 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle.properties @@ -1,3 +1,4 @@ +CTL_CustomAboutAction=About CTL_DataContentAction=DataContent CTL_DataContentTopComponent=Data Content OptionsCategory_Name_General=Application diff --git a/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/Bundle.properties-MERGED index dd5aa258ccf9531dfe46cd68237a93478b232a24..8dbb55e35f86a2f8843ed91bb9c30723d2de8710 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/Bundle.properties-MERGED @@ -61,10 +61,7 @@ ImportCentralRepoDbProgressDialog.errorParsingFile.message=Error parsing hash se ImportCentralRepoDbProgressDialog.linesProcessed.message=\ hashes processed ImportCentralRepoDbProgressDialog.title.text=Central Repository Import Progress OpenIDE-Module-Display-Category=Ingest Module -OpenIDE-Module-Long-Description=\ - Hash Set ingest module. \n\n\ - The ingest module analyzes files in the disk image and marks them as "known" (based on NSRL hashset lookup for "known" files) and "bad / interesting" (based on one or more hash sets supplied by the user).\n\n\ - The module also contains additional non-ingest tools that are integrated in the GUI, such as file lookup by hash and hash set configuration. +OpenIDE-Module-Long-Description=Hash Set ingest module. \n\nThe ingest module analyzes files in the disk image and marks them as "known" (based on NSRL hashset lookup for "known" files) and "bad / interesting" (based on one or more hash sets supplied by the user).\n\nThe module also contains additional non-ingest tools that are integrated in the GUI, such as file lookup by hash and hash set configuration. OpenIDE-Module-Name=HashDatabases OptionsCategory_Name_HashDatabase=Hash Sets OptionsCategory_Keywords_HashDatabase=Hash Sets @@ -191,10 +188,7 @@ HashDbSearchThread.name.searching=Searching HashDbSearchThread.noMoreFilesWithMD5Msg=No other files with the same MD5 hash were found. ModalNoButtons.indexingDbsTitle=Indexing hash sets ModalNoButtons.indexingDbTitle=Indexing hash set -ModalNoButtons.exitHashDbIndexingMsg=You are about to exit out of indexing your hash sets. \n\ -The generated index will be left unusable. If you choose to continue,\n\ - please delete the corresponding -md5.idx file in the hash folder.\n\ - Exit indexing? +ModalNoButtons.exitHashDbIndexingMsg=You are about to exit out of indexing your hash sets. \nThe generated index will be left unusable. If you choose to continue,\nplease delete the corresponding -md5.idx file in the hash folder.\nExit indexing? ModalNoButtons.dlgTitle.unfinishedIndexing=Unfinished Indexing ModalNoButtons.indexThis.currentlyIndexing1Db=Currently indexing 1 hash set ModalNoButtons.indexThese.currentlyIndexing1OfNDbs=Currently indexing 1 of {0} diff --git a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/Bundle.properties-MERGED index e0dd7ce62289c4e8d4444e628c3c7f2eadbf9e2c..3c079529fd6cf9dd11d43e8462ee868a28d7f203 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/Bundle.properties-MERGED @@ -123,8 +123,8 @@ FilesSetRulePanel.nameTextField.text= FilesSetRulePanel.ruleNameLabel.text=Rule Name (Optional): FilesSetRulePanel.messages.emptyNameCondition=You must specify a name pattern for this rule. FilesSetRulePanel.messages.invalidNameRegex=The name regular expression is not valid:\n\n{0} -FilesSetRulePanel.messages.invalidCharInName=The name cannot contain \\, /, :, *, ?, \", <, or > unless it is a regular expression. -FilesSetRulePanel.messages.invalidCharInPath=The path cannot contain \\, :, *, ?, \", <, or > unless it is a regular expression. +FilesSetRulePanel.messages.invalidCharInName=The name cannot contain \\, /, :, *, ?, ", <, or > unless it is a regular expression. +FilesSetRulePanel.messages.invalidCharInPath=The path cannot contain \\, :, *, ?, ", <, or > unless it is a regular expression. FilesSetRulePanel.messages.invalidPathRegex=The path regular expression is not valid:\n\n{0} FilesSetDefsPanel.doFileSetsDialog.duplicateRuleSet.text=Rule set with name {0} already exists. FilesSetRulePanel.pathSeparatorInfoLabel.text=Folder must be in parent path. Use '/' to give consecutive names diff --git a/Core/src/org/sleuthkit/autopsy/modules/photoreccarver/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/modules/photoreccarver/Bundle.properties-MERGED index 1d07988e4ccff7acc6a98472e783519d8ad045fc..f5dd54dc50b18eb5338bef915c37a30af612afa0 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/photoreccarver/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/modules/photoreccarver/Bundle.properties-MERGED @@ -24,7 +24,7 @@ PhotoRecIngestModule.complete.totalParsetime=Total Parsing Time: PhotoRecIngestModule.complete.photoRecResults=PhotoRec Results PhotoRecIngestModule.NotEnoughDiskSpace.detail.msg=PhotoRec error processing {0} with {1} Not enough space on primary disk to save unallocated space. PhotoRecIngestModule.cancelledByUser=PhotoRec cancelled by user. -PhotoRecIngestModule.error.exitValue=PhotoRec carver returned error exit value \= {0} when scanning {1} +PhotoRecIngestModule.error.exitValue=PhotoRec carver returned error exit value = {0} when scanning {1} PhotoRecIngestModule.error.msg=Error processing {0} with PhotoRec carver. PhotoRecIngestModule.complete.numberOfErrors=Number of Errors while Carving: PhotoRecCarverIngestJobSettingsPanel.detectionSettingsLabel.text=PhotoRec Settings diff --git a/Core/src/org/sleuthkit/autopsy/report/infrastructure/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/report/infrastructure/Bundle.properties-MERGED index 5dcbb7f7dda2fc9a9fd8eaa19554d316bb0bee00..ab713103e7444f91a689eb7c544677052654b1a0 100755 --- a/Core/src/org/sleuthkit/autopsy/report/infrastructure/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/report/infrastructure/Bundle.properties-MERGED @@ -9,6 +9,21 @@ PortableCaseTagsListPanel.error.noOpenCase=There is no case open ReportGenerator.artTableColHdr.comment=Comment ReportGenerator.errList.failedGetBBArtifactTags=Failed to get result tags. ReportGenerator.errList.noOpenCase=No open case available. +# {0} - report module name +ReportGenerator.error.exception=Exception while running report module {0} +# {0} - report module name +ReportGenerator.error.invalidSettings=Invalid settings for report module {0} +# {0} - report module name +ReportGenerator.error.moduleNotFound=Report module {0} not found +# {0} - report module name +ReportGenerator.error.noFileReportSettings=No file report settings for report module {0} +ReportGenerator.error.noReportModules=No report modules found +# {0} - report module name +ReportGenerator.error.noTableReportSettings=No table report settings for report module {0} +# {0} - report configuration name +ReportGenerator.error.unableToLoadConfig=Unable to load reporting configuration {0}. +# {0} - report module name +ReportGenerator.error.unsupportedType=Report module {0} has unsupported report module type ReportGenerator.tagTable.header.userName=User Name ReportProgressIndicator.cancelledMessage=Report generation cancelled ReportProgressIndicator.completedMessage=Report generation completed diff --git a/Core/src/org/sleuthkit/autopsy/report/modules/html/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/report/modules/html/Bundle.properties-MERGED index 3db1b822eaaa9d5746d080e9a23dbdcc4f1aa52d..fce93671b3f2b73f57aa5815aae325aefb274361 100755 --- a/Core/src/org/sleuthkit/autopsy/report/modules/html/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/report/modules/html/Bundle.properties-MERGED @@ -5,8 +5,8 @@ ReportHTML.getName.text=HTML Report ReportHTML.getDesc.text=A report about results and tagged items in HTML format. ReportHTML.writeIndex.title=for case {0} ReportHTML.writeIndex.noFrames.msg=Your browser is not compatible with our frame setup. -ReportHTML.writeIndex.noFrames.seeNav=Please see <a href\="content\nav.html">the navigation page</a> for artifact links, -ReportHTML.writeIndex.seeSum=and <a href\="content\summary.html">the summary page</a> for a case summary. +ReportHTML.writeIndex.noFrames.seeNav=Please see <a href="content\nav.html">the navigation page</a> for artifact links, +ReportHTML.writeIndex.seeSum=and <a href="contentsummary.html">the summary page</a> for a case summary. ReportHTML.writeNav.title=Report Navigation ReportHTML.writeNav.h1=Report Navigation ReportHTML.writeNav.summary=Case Summary @@ -16,7 +16,7 @@ ReportHTML.writeSum.caseNumber=Case Number: ReportHTML.writeSum.caseNumImages=Number of data sources in case: ReportHTML.writeSum.examiner=Examiner: ReportHTML.writeSum.title=Case Summary -ReportHTML.writeSum.warningMsg=<span>Warning, this report was run before ingest services completed\!</span> +ReportHTML.writeSum.warningMsg=<span>Warning, this report was run before ingest services completed!</span> # # autopsy/test/scripts/regression.py._html_report_diff() uses reportGenOn.text, caseName, caseNum, # examiner as a regex signature to skip report.html and summary.html diff --git a/CoreLibs/ivy.xml b/CoreLibs/ivy.xml index 9c90bbc3047c2cbce913f3448999372e39c91d36..017c3fbf7a6966a4000e73c6583bd0af82855c42 100644 --- a/CoreLibs/ivy.xml +++ b/CoreLibs/ivy.xml @@ -14,7 +14,7 @@ <!-- for viewers --> <dependency conf="autopsy_core->default" org="org.freedesktop.gstreamer" name="gst1-java-core" rev="1.4.0"/> - <dependency conf="autopsy_core->default" org="net.java.dev.jna" name="jna-platform" rev="5.12.0"/> + <dependency conf="autopsy_core->default" org="net.java.dev.jna" name="jna-platform" rev="5.13.0"/> <!-- for file search --> <dependency conf="autopsy_core->default" org="com.github.lgooddatepicker" name="LGoodDatePicker" rev="11.2.1"/> diff --git a/CoreLibs/nbproject/project.properties b/CoreLibs/nbproject/project.properties index 7c3b3fc496b8f31ead06905a135fc92a49991bfb..6a6ace636185734995875aea2031f79c7dce7d75 100644 --- a/CoreLibs/nbproject/project.properties +++ b/CoreLibs/nbproject/project.properties @@ -88,8 +88,8 @@ file.reference.jericho-html-3.4.jar=release/modules/ext/jericho-html-3.4.jar file.reference.jfxtras-common-17-r1.jar=release/modules/ext/jfxtras-common-17-r1.jar file.reference.jfxtras-controls-17-r1.jar=release/modules/ext/jfxtras-controls-17-r1.jar file.reference.jfxtras-fxml-17-r1.jar=release/modules/ext/jfxtras-fxml-17-r1.jar -file.reference.jna-5.12.1.jar=release/modules/ext/jna-5.12.1.jar -file.reference.jna-platform-5.12.0.jar=release/modules/ext/jna-platform-5.12.0.jar +file.reference.jna-5.13.0.jar=release/modules/ext/jna-5.13.0.jar +file.reference.jna-platform-5.13.0.jar=release/modules/ext/jna-platform-5.13.0.jar file.reference.joda-time-2.10.14.jar=release/modules/ext/joda-time-2.10.14.jar file.reference.jsr305-3.0.2.jar=release/modules/ext/jsr305-3.0.2.jar file.reference.LGoodDatePicker-11.2.1.jar=release/modules/ext/LGoodDatePicker-11.2.1.jar diff --git a/CoreLibs/nbproject/project.xml b/CoreLibs/nbproject/project.xml index 8b0f52600daf41a7993ee064f11883635b76fcdb..39c4e8786ba93a673864c1bae4e84fa793d2c4f5 100644 --- a/CoreLibs/nbproject/project.xml +++ b/CoreLibs/nbproject/project.xml @@ -832,12 +832,12 @@ <binary-origin>release/modules/ext/jfxtras-fxml-17-r1.jar</binary-origin> </class-path-extension> <class-path-extension> - <runtime-relative-path>ext/jna-5.12.1.jar</runtime-relative-path> - <binary-origin>release/modules/ext/jna-5.12.1.jar</binary-origin> + <runtime-relative-path>ext/jna-5.13.0.jar</runtime-relative-path> + <binary-origin>release/modules/ext/jna-5.13.0.jar</binary-origin> </class-path-extension> <class-path-extension> - <runtime-relative-path>ext/jna-platform-5.12.0.jar</runtime-relative-path> - <binary-origin>release/modules/ext/jna-platform-5.12.0.jar</binary-origin> + <runtime-relative-path>ext/jna-platform-5.13.0.jar</runtime-relative-path> + <binary-origin>release/modules/ext/jna-platform-5.13.0.jar</binary-origin> </class-path-extension> <class-path-extension> <runtime-relative-path>ext/joda-time-2.10.14.jar</runtime-relative-path> diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle.properties-MERGED b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle.properties-MERGED index 388f951276615b6de105f7c0cdd99c31403018ee..15099026808e4e9a7b23a0e0ddaec1f905f052c0 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle.properties-MERGED +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle.properties-MERGED @@ -371,7 +371,6 @@ SolrSearchService.exceptionMessage.noCurrentSolrCore=IndexMetadata did not conta SolrSearchService.exceptionMessage.noIndexMetadata=Unable to create IndexMetaData from case directory: {0} # {0} - collection name SolrSearchService.exceptionMessage.unableToDeleteCollection=Unable to delete collection {0} -SolrSearchService.indexingError=Unable to index blackboard artifact. SolrSearchService.ServiceName=Solr Keyword Search Service SolrSearchService.DeleteDataSource.msg=Error Deleting Solr data for data source id {0} DropdownSingleTermSearchPanel.dataSourceCheckBox.text=Restrict search to the selected data sources: diff --git a/NEWS.txt b/NEWS.txt index a675c6fb05f6dc2d15c4280f17ceeec681c13d95..11c56f01c82252906e3658d45245cc85b2bde5f4 100644 --- a/NEWS.txt +++ b/NEWS.txt @@ -1,3 +1,52 @@ +---------------- VERSION 4.20.0 -------------- +Recent Activity Updates: +- Added Favicons, Profiles and Extensions to Chromium Browsers +- Added Security Questions/Answers from SAM registry Hive + +Data Source Processing +- Added Jython Support for Data Source Processor modules. +- Added example Python DSP plugin + +Ingest Pipelines +- Added new DataArtifact ingest pipeline that artifacts will go down. +- Moved Keyword search functionality for artifacts to the new pipeline. + +Linux / Mac Improvements +- Script to install prerequisites using Homebrew and Debian package. +- Script that allows you to install TSK from source +- Script that sets JAVA home per install +- Updating Linux and Mac Installation Documentation + +Command Line Interface +- Simplified command line input parameters +- The -listAllIngestProfiles switch was added +- The -nogui switch now works. +- Return codes now reflect if the application failed + +Bug Fixes: +- Solr 8.11.2 Upgrade which includes update to Log4j to version 2.17.1 +- Change Timezone format for Plaso output. +- Regex fix for Mbox parsing. +- Portable Case report string index out of range -1 fixed +- Extracting files, numbering of files and overwriting of files. +- Image tagging +- Joda-Time updated from 2.4 to 2.10 - fixes certain timezone errors + +Misc: +- Update to USB id's. +- Update Tesseract to 4.10. +- Moved configuration settings to separate ones that are machine-dependent. +- Interesting files and file filters can now exclude certain features, such as folders. +- Adds host to artifact content viewer. +- When an OS Account is selected the Other Occurrences tab will no longer show the open case in the case list. + +- The Communication window Message Viewer Threads panel layout was cleaned up so that the buttons are visible despite the subject length. +- Limit ingest inbox messages to first 20 keyword hits +- GStreamer update to version 1.20.0 +- libheif v1.12.0 replaces ImageMagick +- Removal of 32bit version of Autopsy + + ---------------- VERSION 4.19.3 -------------- Bug Fixes: - Updates for log4j vulnerabilities. diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Bundle.properties-MERGED b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Bundle.properties-MERGED index 3713b44c2d38d7c4b895d23719bc93fa4d1ba095..bd7737dfb9a0a27b04793098e55f05cc2eeaf05e 100755 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Bundle.properties-MERGED +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Bundle.properties-MERGED @@ -4,10 +4,15 @@ cannotParseXml=Unable to parse XML file: ChromeCacheExtract_adding_artifacts_msg=Chrome Cache: Adding %d artifacts for analysis. ChromeCacheExtract_adding_extracted_files_msg=Chrome Cache: Adding %d extracted files for analysis. ChromeCacheExtract_loading_files_msg=Chrome Cache: Loading files from %s. +# {0} - module name +# {1} - row number +# {2} - table length +# {3} - cache path ChromeCacheExtractor.progressMsg={0}: Extracting cache entry {1} of {2} entries from {3} DataSourceUsage_AndroidMedia=Android Media Card DataSourceUsage_DJU_Drone_DAT=DJI Internal SD Card DataSourceUsage_FlashDrive=Flash Drive +# {0} - OS name DataSourceUsageAnalyzer.customVolume.label=OS Drive ({0}) DataSourceUsageAnalyzer.displayName=Data Source Usage Analyzer DefaultPriorityDomainCategorizer_searchEngineCategory=Search Engine @@ -21,6 +26,7 @@ ExtractEdge_process_errMsg_spartanFail=Failure processing Microsoft Edge spartan ExtractEdge_process_errMsg_unableFindESEViewer=Unable to find ESEDatabaseViewer ExtractEdge_process_errMsg_webcacheFail=Failure processing Microsoft Edge WebCacheV01.dat file ExtractFavicon_Display_Name=Favicon +# {0} - sub module name ExtractIE_executePasco_errMsg_errorRunningPasco={0}: Error analyzing Internet Explorer web history ExtractOs.androidOs.label=Android ExtractOs.androidVolume.label=OS Drive (Android) @@ -53,6 +59,7 @@ ExtractOs.windowsVolume.label=OS Drive (Windows) ExtractOs.yellowDogLinuxOs.label=Linux (Yellow Dog) ExtractOs.yellowDogLinuxVolume.label=OS Drive (Linux Yellow Dog) ExtractOS_progressMessage=Checking for OS +# {0} - sub module name ExtractPrefetch_errMsg_prefetchParsingFailed={0}: Error analyzing prefetch files ExtractPrefetch_module_name=Windows Prefetch Analyzer ExtractRecycleBin_module_name=Recycle Bin Analyzer @@ -163,15 +170,21 @@ Firefox.getDlV24.errMsg.errAnalyzeFile={0}: Error while trying to analyze file:{ Firefox.getDlV24.errMsg.errParsingArtifacts={0}: Error parsing {1} Firefox web download artifacts. Progress_Message_Analyze_Registry=Analyzing Registry Files Progress_Message_Analyze_Usage=Data Sources Usage Analysis +# {0} - browserName Progress_Message_Chrome_AutoFill=Chrome Auto Fill Browser {0} +# {0} - browserName Progress_Message_Chrome_Bookmarks=Chrome Bookmarks Browser {0} Progress_Message_Chrome_Cache=Chrome Cache +# {0} - browserName Progress_Message_Chrome_Cookies=Chrome Cookies Browser {0} +# {0} - browserName Progress_Message_Chrome_Downloads=Chrome Downloads Browser {0} Progress_Message_Chrome_Extensions=Chrome Extensions {0} Progress_Message_Chrome_Favicons=Chrome Downloads Favicons {0} Progress_Message_Chrome_FormHistory=Chrome Form History +# {0} - browserName Progress_Message_Chrome_History=Chrome History Browser {0} +# {0} - browserName Progress_Message_Chrome_Logins=Chrome Logins Browser {0} Progress_Message_Chrome_Profiles=Chrome Profiles {0} Progress_Message_Edge_Bookmarks=Microsoft Edge Bookmarks @@ -234,6 +247,7 @@ Sam_Security_Answer_3_Attribute_Display_Name=Security Answer 3 Sam_Security_Question_1_Attribute_Display_Name=Security Question 1 Sam_Security_Question_2_Attribute_Display_Name=Security Question 2 Sam_Security_Question_3_Attribute_Display_Name=Security Question 3 +# {0} - file name SearchEngineURLQueryAnalyzer.init.exception.msg=Unable to find {0}. SearchEngineURLQueryAnalyzer.moduleName.text=Search Engine Query Analyzer SearchEngineURLQueryAnalyzer.engineName.none=NONE diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Chromium.java b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Chromium.java index 41eefc21f8ad572d3cb315191bfc786b323d7210..f34b265442345985b72f63cf5f565bf4dfc19672 100644 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Chromium.java +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Chromium.java @@ -570,11 +570,13 @@ private void getExtensions(String browser, String browserLocation, String userNa JsonObject permissions = ext.get("active_permissions").getAsJsonObject(); JsonArray apiPermissions = permissions.get("api").getAsJsonArray(); for (JsonElement apiPermission : apiPermissions) { - String apigrantEl = apiPermission.getAsString(); - if (apigrantEl != null) { - apiGrantedPermissions = apiGrantedPermissions + ", " + apigrantEl; - } else { - apiGrantedPermissions = apiGrantedPermissions + ""; + if (apiPermission.isJsonPrimitive()) { + String apigrantEl = apiPermission.getAsString(); + if (apigrantEl != null) { + apiGrantedPermissions = apiGrantedPermissions + ", " + apigrantEl; + } else { + apiGrantedPermissions = apiGrantedPermissions + ""; + } } } } diff --git a/Running_Linux_OSX.md b/Running_Linux_OSX.md index 34aec80ae4975e70b15a2907ba8e7b227fa1d64b..5c5cdd07f2079f6664bf7124820bde04079a6e41 100644 --- a/Running_Linux_OSX.md +++ b/Running_Linux_OSX.md @@ -1,138 +1,22 @@ # Overview -*The installation process requires some [prerequisites](#installing-prerequisites), [The Sleuth Kit](#install-sleuthkit), and installing [Autopsy itself](#install-autopsy). If using Windows, there is a pre-built installer bundling all dependencies that can be found in the [Autopsy downloads section](https://www.autopsy.com/download/) or in the [Releases section on GitHub](https://github.com/sleuthkit/autopsy/releases/).* +When installing on Debian-based Linux or macOS systems, there are three general steps: [installing prerequisites](#installing-prerequisites), [installing The Sleuth Kit](#installing-the-sleuth-kit), and [installing Autopsy](#installing-autopsy) itself. On macOS, you will want to [setup the JNA paths](#setup-macos-jna-paths). # Installing Prerequisites +- **Linux**: Run [`linux_macos_install_scripts/install_prereqs_ubuntu.sh`](./linux_macos_install_scripts/install_prereqs_ubuntu.sh). +- **macOS**: Run [`linux_macos_install_scripts/install_prereqs_macos.sh`](./linux_macos_install_scripts/install_prereqs_macos.sh). This script requires the package manager: [Homebrew](https://brew.sh/), which has installation steps on their site. -## On macOS +*NOTE: The last output of the script is the path to the Java 8 installation. You will want to note that path when installing Autopsy.* -*A script to install these dependencies that can be found [here](./linux_macos_install_scripts/install_prereqs_macos.sh). Make sure the script is executable before running.* -- Using [Homebrew](https://brew.sh/), install dependencies that have formulas: - ``` - brew install ant automake libtool afflib libewf postgresql testdisk - ``` -- You will also need to install Java 8 and JavaFX to run autopsy. We recommend Liberica OpenJDK which can be installed by tapping this third-party dependency: - ``` - brew tap bell-sw/liberica - ``` -- Then, you can install this dependency using `brew`: - ``` - brew install --cask liberica-jdk8-full - ``` -- - Confirm that java has been successfully installed by running `java -version`. You should get a result like the following: - ``` - % java -version - openjdk version "1.8.0_342" - OpenJDK Runtime Environment (build 1.8.0_342-b07) - OpenJDK 64-Bit Server VM (build 25.342-b07, mixed mode) - ``` -- You will need the java path for properly setting up autopsy. You can get the path to java by calling: - ``` - /usr/libexec/java_home -v 1.8 - ``` -- If you want gstreamer to open media, you can download and install gstreamer here: `https://gstreamer.freedesktop.org/data/pkg/osx/1.20.3/gstreamer-1.0-1.20.3-universal.pkg` - -## On Linux (Ubuntu / Debian-based) - -*A script to install these dependencies that can be found [here](./linux_macos_install_scripts/install_prereqs_ubuntu.sh). Make sure the script is executable before running.* -- You will need to include some repositories in order to install this software. One way to do that is to uncomment lines in your `sources.list`: - ``` - sudo sed -Ei 's/^# deb-src /deb-src /' /etc/apt/sources.list - ``` -- Use `apt` to install dependencies: - ``` - sudo apt update && \ - sudo apt -y install build-essential autoconf libtool git-core automake git zip wget ant \ - libde265-dev libheif-dev \ - libpq-dev \ - testdisk libafflib-dev libewf-dev libvhdi-dev libvmdk-dev \ - libgstreamer1.0-0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad \ - gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-x \ - gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio - ``` -- You will also need to install Java 8 and JavaFX to run autopsy. We recommend Liberica OpenJDK which can be installed as follows: - ``` - pushd /usr/src/ && \ - wget -q -O - https://download.bell-sw.com/pki/GPG-KEY-bellsoft | sudo apt-key add - && \ - echo "deb [arch=amd64] https://apt.bell-sw.com/ stable main" | sudo tee /etc/apt/sources.list.d/bellsoft.list && \ - sudo apt update && \ - sudo apt -y install bellsoft-java8-full && \ - popd - ``` -- Confirm that java has been successfully installed by running `java -version`. You should get a result like the following: - ``` - % java -version - openjdk version "1.8.0_342" - OpenJDK Runtime Environment (build 1.8.0_342-b07) - OpenJDK 64-Bit Server VM (build 25.342-b07, mixed mode) - ``` -- Take note of the location of the java 1.8 install. This will be necessary to properly setup Autopsy. If using the recommended method, the path should be `/usr/lib/jvm/bellsoft-java8-full-amd64` - -# Install The Sleuth Kit - -The Sleuth Kit must be installed before trying to install Autopsy. If you are on a Debian-like system (i.e. Ubuntu) you can download the most recent deb file from the [github release section](https://github.com/sleuthkit/sleuthkit/releases), and install by running something like `sudo apt install ./sleuthkit-java_4.11.1-1_amd64.deb`. Otherwise, you can follow the directions below to install The Sleuth Kit from source code. - -## Install The Sleuth Kit from Source -*A script to install these dependencies on Unix-like systems (i.e. macOS, Linux) that can be found [here](./linux_macos_install_scripts/install_tsk_from_src.sh). Make sure the script is executable before running.* -- Please ensure you have all the prerequisites installed on your system (see the directions [here](#installing-prerequisites)). -- If you don't have a copy of the repository on your local machine, clone it (this requires git): - ``` - git clone --depth 1 https://github.com/sleuthkit/sleuthkit.git - ``` -- If you want to build source from a particular branch or tag (i.e. `develop` or `release-4.11.0`), check out that branch: - ``` - git checkout <YOUR BRANCH HERE> && git pull - ``` -- Then, with The Sleuth Kit repo as your working directory, you can build with: - ``` - ./bootstrap && ./configure && make - ``` -- If the output from `make` looks good, then install: - ``` - sudo make install - ``` - -# Install Autopsy - -## Create Autopsy Zip File from Source -*In most instances, you should download the Autopsy Zip file from the [Autopsy downloads section](https://www.autopsy.com/download/) or in the [Releases section on GitHub](https://github.com/sleuthkit/autopsy/releases/), but if you have a special use case you can do the following. Please make sure you have the [prerequisites installed](#installing-prerequisites) and have [installed The Sleuth Kit](#install-sleuthkit).* -- If you haven't already, clone the repo: - ``` - git clone --depth 1 https://github.com/sleuthkit/autopsy.git - ``` -- With the autopsy repo as your working directory, you can run: - ``` - ant clean && ant build && ant build-zip - ``` -- The zip file should be created within the `dist` folder of the Autopsy repository and will have the version in the name (i.e. `autopsy-4.18.0.zip`). - -## Install Autopsy from Zip File -*These instructions are for Unix-like systems like macOS and Linux. If you are on Windows, there is an installer that can be downloaded from the [Autopsy downloads section](https://www.autopsy.com/download/) or in the [Releases section on GitHub](https://github.com/sleuthkit/autopsy/releases/). Please make sure you have the [prerequisites installed](#installing-prerequisites) and have [installed The Sleuth Kit](#install-sleuthkit). A script to perform these steps can be found [here](./linux_macos_install_scripts/install_application.sh). Make sure the script is executable before running.* - -- Download the zip file from the [Autopsy downloads section](https://www.autopsy.com/download/) or in the [Releases section on GitHub](https://github.com/sleuthkit/autopsy/releases/). You can also create a zip file from source using [these directions](#create-autopsy-zip-file-from-source). -- If you downloaded the zip file, you can verify the zip file with the [The Sleuth Kit key](https://sleuthkit.org/carrier.asc) and the related `.asc` file found in the [Releases section on GitHub](https://github.com/sleuthkit/autopsy/releases/). For instance, you would use `autopsy-4.18.0.zip.asc` with `autopsy-4.18.0.zip`. Here is an example where `$ASC_FILE` is the path to the `.asc` file and `$AUTOPSY_ZIP_PATH` is the path to the autopsy zip file: - ``` - mkdir -p ${VERIFY_DIR} && \ - pushd ${VERIFY_DIR} && \ - wget https://sleuthkit.org/carrier.asc && \ - gpg --homedir "${VERIFY_DIR}" --import https://sleuthkit.org/carrier.asc && \ - gpg --homedir "${VERIFY_DIR}" --keyring "${VERIFY_DIR}/pubring.kbx" ${ASC_FILE} ${AUTOPSY_ZIP_PATH} && \ - rm -r ${VERIFY_DIR} - popd - ``` -- Extract the zip file to a location where you would like to have Autopsy installed. -- Set up java path. There are two ways to provide the path to java: `JAVA_HOME` can be set as an environmental variable or the `autopsy.conf` file can define the home for java. - - To update the `autopsy.conf` file, navigate to where autopsy has been extracted and then open `etc/autopsy.conf`. Within that file, replace the commented line or add a new line specifying the java home like: `jdkhome=<JAVA_PATH>`. Another option is to provide an argument to `unix_setup.sh` like the following `unix_setup.sh -j <JAVA_PATH>` when performing the next step. -- With the extracted folder as the working directory, you can run the following commands to perform setup: - ``` - chown -R $(whoami) . && \ - chmod u+x ./unix_setup.sh && \ - ./unix_setup.sh - ``` -- At this point, you should be able to run Autopsy with the command `./autopsy` from within the `bin` directory of the extracted folder. +# Installing The Sleuth Kit +- **Linux**: Download the .deb file for the release you want to install from the [release section](https://github.com/sleuthkit/sleuthkit/releases). Install The Sleuth Kit package from the repositories with the following command: `sudo apt update && sudo apt install /path/to/sleuthkit-version.deb`. +- **macOS**: Ensure that for this session, your `JAVA_HOME` variable is set to the java 8 installation by running `export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)/bin/java`. Then, install The Sleuth Kit from source by running [`linux_macos_install_scripts/install_tsk_from_src.sh`](./linux_macos_install_scripts/install_tsk_from_src.sh), which will download, build, and install The Sleuth Kit. It can be run as follows: `install_tsk_from_src.sh -p ~/src/sleuthkit -b sleuthkit-4.11.1`. Make sure that your path to download source ends with "sleuthkit" as the last directory, and the release is the corresponding tag in the [repository](https://github.com/sleuthkit/sleuthkit). -## Setup macOS JNA paths -A few features in Autopsy will only work (i.e. gstreamer) if the JNA paths are specified. If you installed the necessary dependencies through Homebrew, you will want to either run this [script](./linux_macos_install_scripts/add_macos_jna.sh) or manually add all the gstreamer lib and dependency lib paths to the env variable `jre_flags` with jre flag: `-Djna.library.path`. +# Installing Autopsy +- Download the Autopsy zip file from [repository releases](https://github.com/sleuthkit/autopsy/releases). The file will be marked as "autopsy-<release>.zip" (i.e. "autopsy-4.19.2.zip"). +- Run [`install_application.sh`](./linux_macos_install_scripts/install_application.sh) with the following parameters: `install_application.sh [-z zip_path] [-i install_directory] [-j java_home]`. An example would be `install_application.sh -z ~/Downloads/autopsy-4.19.2.zip -i ~/autopsy -j /usr/lib/jvm/bellsoft-java8-full-amd64`. The path to the Java 8 home is the last output from the [prequisites installation scripts](#installing-prerequisites), but typically, the path will be `/usr/lib/jvm/bellsoft-java8-full-amd64` on Debian-based Linux or the output of running `/usr/libexec/java_home -v 1.8` on macOS. +# Setup macOS JNA paths +If you are on macOS, run [linux_macos_install_scripts/add_macos_jna.sh](./linux_macos_install_scripts/add_macos_jna.sh) to properly setup the jna path to get things like gstreamer working. An example would be `add_macos_jna.sh -i ~/autopsy`. # Troubleshooting - If you see something like "Cannot create case: javafx/scene/paint/Color" it is an indication that Java FX @@ -166,6 +50,5 @@ A few features in Autopsy will only work (i.e. gstreamer) if the JNA paths are s - Recent Activity - The LEAPP processors - HEIF processing - - Timeline does not work on OS X - Video thumbnails - VHD and VMDK files not supported on OS X diff --git a/TSKVersion.xml b/TSKVersion.xml index b728d88ccd22f0c4ceb393c3efbe41759e2fa7da..087dac09128e271f15a2e9e07e0b034669ed173a 100644 --- a/TSKVersion.xml +++ b/TSKVersion.xml @@ -1,3 +1,3 @@ <project name="TSK_VERSION"> - <property name="TSK_VERSION" value="4.11.1"/> + <property name="TSK_VERSION" value="4.12.0"/> </project> diff --git a/Testing/nbproject/project.xml b/Testing/nbproject/project.xml index 4ea556369c7afade72a0f39935f8ee00e041aba5..c27ee220ec2acbc1251d388ec4dd237f961d86a1 100644 --- a/Testing/nbproject/project.xml +++ b/Testing/nbproject/project.xml @@ -50,6 +50,15 @@ <specification-version>10.24</specification-version> </run-dependency> </dependency> + <dependency> + <code-name-base>org.sleuthkit.autopsy.corelibs</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <release-version>3</release-version> + <specification-version>1.4</specification-version> + </run-dependency> + </dependency> <dependency> <code-name-base>org.sleuthkit.autopsy.coretestlibs</code-name-base> <build-prerequisite/> diff --git a/Testing/src/org/sleuthkit/autopsy/testing/AutopsyTestCases.java b/Testing/src/org/sleuthkit/autopsy/testing/AutopsyTestCases.java index c4d5c8dae8178280f2ecad3b05ac9043ca20f24d..dd7593eceb9c37206f559009b458a21123d22299 100644 --- a/Testing/src/org/sleuthkit/autopsy/testing/AutopsyTestCases.java +++ b/Testing/src/org/sleuthkit/autopsy/testing/AutopsyTestCases.java @@ -25,18 +25,33 @@ import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.text.DateFormat; +import java.text.MessageFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Comparator; import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Random; +import java.util.Set; +import java.util.function.Function; import java.util.logging.Logger; import java.util.logging.Level; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; +import java.util.stream.Stream; import javax.imageio.ImageIO; import javax.swing.JDialog; import javax.swing.text.JTextComponent; import javax.swing.tree.TreePath; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.tuple.Pair; +import org.apache.commons.lang3.tuple.Triple; import org.netbeans.jellytools.MainWindowOperator; import org.netbeans.jellytools.NbDialogOperator; import org.netbeans.jellytools.WizardOperator; @@ -59,6 +74,7 @@ import org.netbeans.jemmy.operators.JTreeOperator.NoSuchPathException; import org.sleuthkit.autopsy.core.UserPreferences; import org.sleuthkit.autopsy.core.UserPreferencesException; +import org.sleuthkit.autopsy.coreutils.PlatformUtil; import org.sleuthkit.autopsy.events.MessageServiceConnectionInfo; import org.sleuthkit.autopsy.ingest.IngestManager; import org.sleuthkit.datamodel.CaseDbConnectionInfo; @@ -68,6 +84,13 @@ public class AutopsyTestCases { private static final Logger logger = Logger.getLogger(AutopsyTestCases.class.getName()); // DO NOT USE AUTOPSY LOGGER private long start; + + // by default, how many minutes jemmy waits for a dialog to appear (default is 1 minute). + private static final long DIALOG_FIND_TIMEOUT_MINUTES = 5; + + static { + Timeouts.setDefault("Waiter.WaitingTime", DIALOG_FIND_TIMEOUT_MINUTES * 60 * 1000); + } /** * Escapes the slashes in a file or directory path. @@ -104,8 +127,9 @@ public void testNewCaseWizardOpen(String title) { JButtonOperator jbo = new JButtonOperator(nbdo, 0); // the "New Case" button jbo.pushNoBlock(); } catch (TimeoutExpiredException ex) { - screenshot("TimeoutScreenshot"); logger.log(Level.SEVERE, "AutopsyTestCases.testNewCaseWizard encountered timed out", ex); + logSystemDiagnostics(); + screenshot("TimeoutScreenshot"); } } @@ -125,8 +149,9 @@ public void testNewCaseWizard() { start = System.currentTimeMillis(); wo.btFinish().clickMouse(); } catch (TimeoutExpiredException ex) { - screenshot("TimeoutScreenshot"); logger.log(Level.SEVERE, "AutopsyTestCases.testNewCaseWizard encountered timed out", ex); + logSystemDiagnostics(); + screenshot("TimeoutScreenshot"); } } @@ -159,8 +184,9 @@ public void testStartAddImageFileDataSource() { comboBoxOperator.setSelectedItem("(GMT-5:00) America/New_York"); wo.btNext().clickMouse(); } catch (TimeoutExpiredException ex) { - screenshot("TimeoutScreenshot"); logger.log(Level.SEVERE, "AutopsyTestCases.testNewCaseWizard encountered timed out", ex); + logSystemDiagnostics(); + screenshot("TimeoutScreenshot"); } } @@ -194,8 +220,9 @@ public void testStartAddLogicalFilesDataSource() { fileChooserOperator.chooseFile(new File(getEscapedPath(System.getProperty("img_path"))).getName()); wo.btNext().clickMouse(); } catch (TimeoutExpiredException ex) { - screenshot("TimeoutScreenshot"); logger.log(Level.SEVERE, "AutopsyTestCases.testNewCaseWizard encountered timed out", ex); + logSystemDiagnostics(); + screenshot("TimeoutScreenshot"); } } @@ -208,8 +235,9 @@ public void testAddSourceWizard1() { logger.log(Level.INFO, "Add image took {0}ms", (System.currentTimeMillis() - start)); wo.btFinish().clickMouse(); } catch (TimeoutExpiredException ex) { - screenshot("TimeoutScreenshot"); logger.log(Level.SEVERE, "AutopsyTestCases.testNewCaseWizard encountered timed out", ex); + logSystemDiagnostics(); + screenshot("TimeoutScreenshot"); } } @@ -234,8 +262,9 @@ public void testConfigureIngest1() { jbo1.pushNoBlock(); logger.info("Pushed Global Settings button for hash lookup module in ingest job settings panel"); } catch (TimeoutExpiredException ex) { - screenshot("TimeoutScreenshot"); logger.log(Level.SEVERE, "AutopsyTestCases.testNewCaseWizard encountered timed out", ex); + logSystemDiagnostics(); + screenshot("TimeoutScreenshot"); } } @@ -273,8 +302,9 @@ public void testConfigureHash() { JButtonOperator jbo4 = new JButtonOperator(hashMainDialogOperator, "OK", 0); jbo4.pushNoBlock(); } catch (TimeoutExpiredException ex) { - screenshot("TimeoutScreenshot"); logger.log(Level.SEVERE, "AutopsyTestCases.testNewCaseWizard encountered timed out", ex); + logSystemDiagnostics(); + screenshot("TimeoutScreenshot"); } } @@ -293,8 +323,9 @@ public void testConfigureIngest2() { jbo1.pushNoBlock(); logger.info("Pushed Global Settings button for keyword search module in ingest job settings panel"); } catch (TimeoutExpiredException ex) { - screenshot("TimeoutScreenshot"); logger.log(Level.SEVERE, "AutopsyTestCases.testNewCaseWizard encountered timed out", ex); + logSystemDiagnostics(); + screenshot("TimeoutScreenshot"); } } @@ -326,8 +357,9 @@ public void testConfigureSearch() { new Timeout("pausing", 10000).sleep(); // let things catch up wo.btNext().clickMouse(); } catch (TimeoutExpiredException ex) { - screenshot("TimeoutScreenshot"); logger.log(Level.SEVERE, "AutopsyTestCases.testNewCaseWizard encountered timed out", ex); + logSystemDiagnostics(); + screenshot("TimeoutScreenshot"); } } @@ -347,8 +379,9 @@ public void testIngest() { Random rand = new Random(); new Timeout("pausing", 10000 + (rand.nextInt(15000) + 5000)).sleep(); } catch (TimeoutExpiredException ex) { - screenshot("TimeoutScreenshot"); logger.log(Level.SEVERE, "AutopsyTestCases.testNewCaseWizard encountered timed out", ex); + logSystemDiagnostics(); + screenshot("TimeoutScreenshot"); } } @@ -362,8 +395,9 @@ public void testExpandDataSourcesTree() { TreePath tp = jto.findPath(nodeNames); expandNodes(jto, tp); } catch (TimeoutExpiredException ex) { - screenshot("TimeoutScreenshot"); logger.log(Level.SEVERE, "AutopsyTestCases.testNewCaseWizard encountered timed out", ex); + logSystemDiagnostics(); + screenshot("TimeoutScreenshot"); } } @@ -374,8 +408,9 @@ public void testGenerateReportToolbar() { JButtonOperator jbo = new JButtonOperator(mwo, "Generate Report"); jbo.pushNoBlock(); } catch (TimeoutExpiredException ex) { - screenshot("TimeoutScreenshot"); logger.log(Level.SEVERE, "AutopsyTestCases.testNewCaseWizard encountered timed out", ex); + logSystemDiagnostics(); + screenshot("TimeoutScreenshot"); } } @@ -409,8 +444,9 @@ public void testGenerateReportButton() throws IOException { new Timeout("pausing", 10000).sleep(); System.setProperty("ReportStr", datenotime); } catch (TimeoutExpiredException ex) { - screenshot("TimeoutScreenshot"); logger.log(Level.SEVERE, "AutopsyTestCases.testNewCaseWizard encountered timed out", ex); + logSystemDiagnostics(); + screenshot("TimeoutScreenshot"); } } @@ -456,6 +492,7 @@ private void setMultiUserPerferences() { UserPreferences.setDatabaseConnectionInfo(connectionInfo); } catch (UserPreferencesException ex) { logger.log(Level.SEVERE, "Error saving case database connection info", ex); //NON-NLS + logSystemDiagnostics(); } //Solr Index settings UserPreferences.setIndexingServerHost(System.getProperty("solrHost")); @@ -470,6 +507,7 @@ private void setMultiUserPerferences() { UserPreferences.setMessageServiceConnectionInfo(msgServiceInfo); } catch (UserPreferencesException ex) { logger.log(Level.SEVERE, "Error saving messaging service connection info", ex); //NON-NLS + logSystemDiagnostics(); } UserPreferences.setZkServerHost(System.getProperty("zooKeeperHost")); @@ -484,6 +522,253 @@ private void expandNodes(JTreeOperator jto, TreePath tp) { } } catch (NoSuchPathException ne) { logger.log(Level.SEVERE, "Error expanding tree path", ne); + logSystemDiagnostics(); + } + } + + + private void logSystemDiagnostics() { + logger.log(Level.INFO, getSystemDiagnostics()); + } + + private static final String NEWLINE = System.lineSeparator(); + + private static final int TOP_NUM = 10; + + private static Set<String> IGNORED_PROCESSES = Stream.of("_Total", "Idle", "Memory Compression").collect(Collectors.toSet()); + + + + /** + * @return A string of system diagnostic information. + * + * NOTE: currently only works for windows. + */ + private static String getSystemDiagnostics() { + if (PlatformUtil.isWindowsOS()) { + try { + List<Map<String, String>> processPerformance = getWmicTable("wmic path Win32_PerfFormattedData_PerfProc_Process get Name,PercentProcessorTime,IOReadBytesPerSec,IOWriteBytesPerSec,WorkingSetPeak").stream() + .filter(obj -> !IGNORED_PROCESSES.contains(obj.get("name"))) + .collect(Collectors.toList()); + + List<Pair<String, Long>> cpuUsageProcesses = getKeyValLimited(processPerformance, "name", "percentprocessortime"); + List<Pair<String, Long>> memUsageProcesses = getKeyValLimited(processPerformance, "name", "workingsetpeak"); + + List<Triple<String, Long, Long>> ioProcesses = getFilteredLimited( + processPerformance, + obj -> { + String key = obj.get("name"); + if (key == null) { + return null; + } + + try { + return Triple.of(key, Long.parseLong(obj.get("ioreadbytespersec")), Long.parseLong(obj.get("iowritebytespersec"))); + } catch (NumberFormatException | NullPointerException ex) { + return null; + } + + }, + Comparator.comparing(pr -> -(pr.getMiddle() + pr.getRight()))); + + String cpuLoad = getWmicString("wmic cpu get loadpercentage", "loadpercentage"); + String cpuCores = getWmicString("wmic cpu get numberofcores", "numberofcores"); + String freePhysicalMemory = getWmicString("wmic OS get FreeSpaceInPagingFiles", "freespaceinpagingfiles"); // in kb + String totalPhysicalMemory = getWmicString("wmic ComputerSystem get TotalPhysicalMemory", "totalphysicalmemory"); // bytes + String memUsage; + try { + double freeMemMb = Double.parseDouble(freePhysicalMemory) / 1000; + double totalMemMb = Double.parseDouble(totalPhysicalMemory) / 1000 / 1000; + memUsage = MessageFormat.format("Free Physical Memory: {0,number,#.##}MB and total physical: {1,number,#.##}MB", freeMemMb, totalMemMb); + } catch (NumberFormatException ex) { + memUsage = MessageFormat.format("Free Physical Memory: \"{0}\" and total physical: \"{1}\"", freePhysicalMemory, totalPhysicalMemory); + } + + List<Triple<String, Long, String>> networkStatus = getFilteredLimited( + getWmicTable("wmic path win32_networkadapter where \"netconnectionstatus = 2 OR NOT errordescription IS NULL\" get netconnectionid, name, speed, maxspeed, errordescription"), + (Map<String, String> obj) -> { + String name = obj.get("netconnectionid"); + if (StringUtils.isBlank(name)) { + name = obj.get("name"); + } + + if (StringUtils.isBlank(name)) { + return null; + } + + String errorDescription = obj.get("errordescription"); + + Long speed = 0L; + try { + speed = Long.parseLong(obj.get("speed")); + } catch (NumberFormatException | NullPointerException ex) { + } + + return Triple.of(name, speed, errorDescription); + }, + (a, b) -> StringUtils.compareIgnoreCase(a.getLeft(), b.getRight())); + + List<Pair<String, Long>> diskStatus = getKeyValLimited( + getWmicTable("wmic path Win32_PerfFormattedData_PerfDisk_LogicalDisk get AvgDiskQueueLength,Name").stream() + .filter(obj -> !IGNORED_PROCESSES.contains(obj.get("name"))) + .collect(Collectors.toList()), + "name", + "avgdiskqueuelength"); + + return "SYSTEM DIAGNOSTICS:" + NEWLINE + + MessageFormat.format("CPU Load Percentage: {0}% with {1} cores", cpuLoad, cpuCores) + NEWLINE + + MessageFormat.format("Memory Usage: {0}", memUsage) + NEWLINE + + "Disk Usage (disk to average disk queue length): " + NEWLINE + + diskStatus.stream().map(pr -> pr.getKey() + ": " + pr.getValue()).collect(Collectors.joining(NEWLINE)) + NEWLINE + + NEWLINE + + "Network Status (of only connected or error): " + NEWLINE + + networkStatus.stream().map(obj -> { + String errorString = StringUtils.isBlank(obj.getRight()) ? "" : MessageFormat.format(" (error: {0})", obj.getRight()); + return MessageFormat.format("{0}: {1,number,#.##}MB/S possible {2}", obj.getLeft(), ((double) obj.getMiddle()) / 1000 / 1000, errorString); + }).collect(Collectors.joining(NEWLINE)) + NEWLINE + + NEWLINE + + "CPU consuming processes: " + NEWLINE + + cpuUsageProcesses.stream().map(pr -> MessageFormat.format("{0}: {1}%", pr.getKey(), pr.getValue())).collect(Collectors.joining(NEWLINE)) + NEWLINE + + NEWLINE + + "Memory consuming processes (working set peak): " + NEWLINE + + memUsageProcesses.stream() + .map( + pr -> MessageFormat.format( + "{0}: {1,number,#.##}MB", + pr.getKey(), + ((double) pr.getValue()) / 1000 / 1000 + ) + ) + .collect(Collectors.joining(NEWLINE)) + NEWLINE + + NEWLINE + + "I/O consuming processes (read/write): " + NEWLINE + + ioProcesses.stream() + .map( + pr -> MessageFormat.format( + "{0}: {1,number,#.##}MB/{2,number,#.##}MB", pr.getLeft(), + ((double) pr.getMiddle()) / 1000 / 1000, + ((double) pr.getRight()) / 1000 / 1000 + ) + ) + .collect(Collectors.joining(NEWLINE)) + NEWLINE; + } catch (Throwable ex) { + return "SYSTEM DIAGNOSTICS:" + NEWLINE + + "Encountered IO exception: " + ex.getMessage() + NEWLINE; + } + + } else { + return "System diagnostics only implemented for windows at this time."; + } + } + + /** + * Returns a pair of a string key and long number value limited to TOP_NUM of the highest number values. + * @param objects The list of objects. + * @param keyId The id of the key in the map. + * @param valId The id of the value in the map. + * @return The highest valued key value pairs. + */ + private static List<Pair<String, Long>> getKeyValLimited(List<Map<String, String>> objects, String keyId, String valId) { + return getFilteredLimited( + objects, + obj -> { + String key = obj.get(keyId); + if (key == null) { + return null; + } + + try { + return Pair.of(key, Long.parseLong(obj.get(valId))); + } catch (NumberFormatException | NullPointerException ex) { + return null; + } + }, + Comparator.comparing(pr -> -pr.getValue())); + } + + /** + * Returns a list of a given type limited to TOP_NUM of the first values. + * @param objects The objects to sort and filter. + * @param keyObjMapper Maps the list of map objects to the new new value. + * @param comparator Comparator determining first values. + * @return The list capped at TOP_NUM. + */ + private static <T> List<T> getFilteredLimited(List<Map<String, String>> objects, Function<Map<String, String>, T> keyObjMapper, Comparator<T> comparator) { + return objects.stream() + .map(keyObjMapper) + .filter(a -> a != null) + .sorted(comparator) + .limit(TOP_NUM) + .collect(Collectors.toList()); + } + + /** + * Runs the command line entry returning standard output. + * @param cmd The command. + * @return The standard output. + * @throws IOException + */ + private static String getProcStdOut(String... cmd) throws IOException { + ProcessBuilder pb = new ProcessBuilder(cmd); + String output = IOUtils.toString(pb.start().getInputStream(), StandardCharsets.UTF_8); + return output; + } + + // matches key=value + private static final Pattern EQUALS_PATTERN = Pattern.compile("^([^=]*)=(.*)$"); + + /** + * Returns a list of maps mapping the wmic header column (lower cased) to + * the value for the row. + * + * @param cmd The wmic command to run. + * + * @return The list of rows. + * + * @throws IOException + */ + private static List<Map<String, String>> getWmicTable(String cmd) throws IOException { + String stdOut = getProcStdOut("cmd", "/c", cmd + " /format:list"); + + List<Map<String, String>> rows = new ArrayList<>(); + Map<String, String> curObj = new HashMap<>(); + for (String line : stdOut.split("\\r?\\n")) { + // if line, try to parse as key=value + if (StringUtils.isNotBlank(line)) { + Matcher matcher = EQUALS_PATTERN.matcher(line); + if (matcher.find()) { + String key = matcher.group(1).trim().toLowerCase(); + String value = matcher.group(2).trim(); + curObj.put(key, value); + } + // if no line and the object has keys, we have finished an entry, add it to the list. + } else if (!curObj.isEmpty()) { + rows.add(curObj); + curObj = new HashMap<>(); + } + } + + if (!curObj.isEmpty()) { + rows.add(curObj); + curObj = new HashMap<>(); + } + + return rows; + } + + /** + * Returns a string from a wmic query. + * @param wmicQuery The wmic query. + * @param key The key column to return. + * @return The first row's value for the given key. + * @throws IOException + */ + private static String getWmicString(String wmicQuery, String key) throws IOException { + List<Map<String, String>> retVal = getWmicTable(wmicQuery); + if (retVal != null && !retVal.isEmpty() && retVal.get(0) != null && retVal.get(0).get(key) != null) { + return retVal.get(0).get(key); + } else { + return null; } } } diff --git a/branding/core/core.jar/org/netbeans/core/startup/Bundle.properties b/branding/core/core.jar/org/netbeans/core/startup/Bundle.properties index 87be1c8010b195390c207e9c55124124dcc91ac5..6d7443a4a6fb434154bef3db464823bda5cd8e91 100644 --- a/branding/core/core.jar/org/netbeans/core/startup/Bundle.properties +++ b/branding/core/core.jar/org/netbeans/core/startup/Bundle.properties @@ -1,5 +1,5 @@ #Updated by build script -#Wed, 01 Dec 2021 12:53:03 -0500 +#Wed, 28 Sep 2022 13:57:05 -0400 LBL_splash_window_title=Starting Autopsy SPLASH_HEIGHT=314 SPLASH_WIDTH=538 @@ -8,4 +8,4 @@ SplashRunningTextBounds=0,289,538,18 SplashRunningTextColor=0x0 SplashRunningTextFontSize=19 -currentVersion=Autopsy 4.19.2 +currentVersion=Autopsy 4.19.3 diff --git a/branding/modules/org-netbeans-core-windows.jar/org/netbeans/core/windows/view/ui/Bundle.properties b/branding/modules/org-netbeans-core-windows.jar/org/netbeans/core/windows/view/ui/Bundle.properties index bfb787467d70c00e9876b7889391721a8e4b61d5..f28a6b96b3a4c077acea5ede72be916cea81c779 100644 --- a/branding/modules/org-netbeans-core-windows.jar/org/netbeans/core/windows/view/ui/Bundle.properties +++ b/branding/modules/org-netbeans-core-windows.jar/org/netbeans/core/windows/view/ui/Bundle.properties @@ -1,4 +1,4 @@ #Updated by build script -#Wed, 01 Dec 2021 12:53:03 -0500 -CTL_MainWindow_Title=Autopsy 4.19.2 -CTL_MainWindow_Title_No_Project=Autopsy 4.19.2 +#Wed, 28 Sep 2022 13:57:05 -0400 +CTL_MainWindow_Title=Autopsy 4.19.3 +CTL_MainWindow_Title_No_Project=Autopsy 4.19.3 diff --git a/docs/doxygen-user/multi-user/installActiveMQ.dox b/docs/doxygen-user/multi-user/installActiveMQ.dox index 5cedc7b348e8e4897f046350a67fad8fd9bd8f3e..a165bacd7487542a0713a0aeab58fe50a3d0d99f 100644 --- a/docs/doxygen-user/multi-user/installActiveMQ.dox +++ b/docs/doxygen-user/multi-user/installActiveMQ.dox @@ -9,7 +9,7 @@ ActiveMQ is a messaging service that allows the Autopsy clients to communicate w You will need: - 64-bit version of the Java 8 Runtime Environment (JRE) from https://github.com/ojdkbuild/ojdkbuild (<a href="https://github.com/ojdkbuild/ojdkbuild/releases/download/java-1.8.0-openjdk-1.8.0.242-1.b08/java-1.8.0-openjdk-1.8.0.242-1.b08.ojdkbuild.windows.x86_64.msi"> Link to installer</a>) -- Download ActiveMQ from: http://activemq.apache.org/download.html . Autopsy has been tested with ActiveMQ version 5.14.0. +- Download ActiveMQ from: http://activemq.apache.org/download.html . Autopsy has been tested with ActiveMQ version 5.14.0. Note that newer versions will not work with Java 8. \section install_activemq_install Installation @@ -29,7 +29,9 @@ If you need the JRE, install it with the default settings. <li>Open the <i>conf\\activemq.xml</i> file in the extracted folder in a text editor and make the following changes: <ul> -<li> Add <i>"schedulePeriodForDestinationPurge="10000""</i> to the _broker_ tag then add <i>"gcInactiveDestinations="true" inactiveTimoutBeforeGC="30000""</i> to the _policyEntry_ tag. This is highlighted in yellow below: +<li> Add <i>"schedulePeriodForDestinationPurge="10000""</i> to the _broker_ tag</li> +<li> Add <i>"gcInactiveDestinations="true" inactiveTimoutBeforeGC="30000""</i> to the _policyEntry_ tag. +<li> These are both highlighted in yellow below: \image html activeMQ_node_cleanup.png @@ -41,6 +43,8 @@ If you need the JRE, install it with the default settings. <li>Install ActiveMQ as a service by navigating to the folder <i>bin\\win64</i>, right-clicking _InstallService.bat_, clicking _Run as administrator_, then click _Yes_. +<li>Add the bin\\win64\\wrapper.exe and java.exe (from the JRE) to the Windows firewall so that they can accept network communications. + <li>Start the ActiveMQ service by pressing _Start_, type _services.msc_, and press _Enter_. Find _ActiveMQ_ in the list and press the _Start the service_ link. <li>ActiveMQ should now be installed and configured using the default credentials. @@ -48,7 +52,7 @@ If you need the JRE, install it with the default settings. \subsection install_activemq_test Testing -To test your installation, you can access the admin pages in your web browser via a URL like this: http://localhost:8161/admin. +To test your installation, you can access the admin pages in your web browser (on the server) via a URL like this: http://localhost:8161/admin. NOTE that you cannot access this page from other hosts unless you go into jetty.xml and change org.apache.activemq.web.WebConsolePort so that host is 0.0.0.0 (and ensure that it is properly secured). The default administrator username is _admin_ with a password of _admin_ and the default regular username is _user_ with a default password of _password_. You can change these passwords by following the instructions below. @@ -57,7 +61,7 @@ If you can see a page that looks like the following, it confirms that the Active \image html activemq.PNG <br><br> -You can confirm that your ActiveMQ installation is visible to other computers on the network by attempting to connect to a URL like the following (replacing the host name with that of the ActiveMQ computer) in a web browser: http://activemq-computer:61616 +You can also confirm that your ActiveMQ installation is visible to other computers on the network by attempting to connect to a URL like the following (replacing the host name with that of the ActiveMQ computer) in a web browser: http://activemq-computer:61616. This will not give you a nice web page, but will give you data from the server. If you are unable to connect to this address: - Double check that the ActiveMQ service is running diff --git a/docs/doxygen-user/multi-user/installPostgres.dox b/docs/doxygen-user/multi-user/installPostgres.dox index d56afe931b8b34e739e37f0ec96f116ad0f54533..07534da57627c26a92c5c8de4653fb35e2c12fa2 100644 --- a/docs/doxygen-user/multi-user/installPostgres.dox +++ b/docs/doxygen-user/multi-user/installPostgres.dox @@ -40,7 +40,7 @@ To install PostgreSQL, perform the following steps: <br><br> \image html newPassword.PNG <br><br> -- Check <i>"Can create databases"</i> on the <i>"Role Privileges"</i> tab. +- For <i>"Role Privileges"</i>, give the user <i>"Can Login?"</i> and <i>"Can create databases"</i>. <br><br> \image html newRights.PNG <br><br> @@ -86,7 +86,7 @@ To this: Note the removal of the leading number symbol-this uncomments that entry. <br><br> -4. Still in <i id="max_connections">"C:\Program Files\PostgreSQL\9.5\data\postgresql.conf"</i>, find the entry named _max_connections_ and set it to the number of suggested connections for your configuration. A rule of thumb is add 100 connections for each Automated Ingest Node and 100 connections for each Reviewer node you plan to have in the network. See the screenshot below. +4. Still in <i id="max_connections">"C:\Program Files\PostgreSQL\9.5\data\postgresql.conf"</i>, find the entry named _max_connections_ and set it to the number of suggested connections for your configuration. A rule of thumb is 100 connections per each Automated Ingest node and reviewer node. See the screenshot below. <br><br> \image html maxConnections.PNG <br><br> @@ -98,6 +98,8 @@ Note the removal of the leading number symbol-this uncomments that entry. \image html postgresqlinstall7.PNG <br><br> +6. Add the bin\\postgres.exe file to the Windows firewall to allow it to receive connections. + \section install_post_test Testing diff --git a/docs/doxygen-user/multi-user/installSolr.dox b/docs/doxygen-user/multi-user/installSolr.dox index dd380e6eefc57033f21c65f346e810f9a75fdb74..c2a25520c82826f9e874c50e20fe7788e4c7d734 100644 --- a/docs/doxygen-user/multi-user/installSolr.dox +++ b/docs/doxygen-user/multi-user/installSolr.dox @@ -114,6 +114,10 @@ Start the "Solr_8.6.3" service, and verify that the service status changes to "R \image html solr_start_2.png +\subsection install_solr_security AntiVirus Settings + +We have observed that Antivirus may detect strings in the Solr indexes as being malware. You should add the Solr data directory to the exclusion list for your security product. We saw this with Windows Defender. + \section install_solr_testing Testing There are two tests that you should perform to confirm that the Solr machine is configured correctly. diff --git a/linux_macos_install_scripts/add_macos_jna.sh b/linux_macos_install_scripts/add_macos_jna.sh index f186de8f7530b47b57ca59279f8586695d4ebbba..013ef35cf9e07e64017ab2441ccf709991e56b42 100644 --- a/linux_macos_install_scripts/add_macos_jna.sh +++ b/linux_macos_install_scripts/add_macos_jna.sh @@ -28,7 +28,17 @@ then exit 1 fi -awk '!/^\s*#?\s*export jreflags=.*$/' $INSTALL_LOC/etc/$APPLICATION_NAME.conf > $INSTALL_LOC/etc/$APPLICATION_NAME.conf.tmp && \ +GSTREAMER_LOC=$(brew --prefix gstreamer) +if [[ $? -ne 0 ]] +then + echo "Unable to find homebrew installation of gstreamer" >> /dev/stderr + exit 1 +fi + + awk '!/^ *#? *export +?(jreflags|GST_PLUGIN_SYSTEM_PATH|GST_PLUGIN_SCANNER)=.*$/' $INSTALL_LOC/etc/$APPLICATION_NAME.conf > $INSTALL_LOC/etc/$APPLICATION_NAME.conf.tmp && \ mv $INSTALL_LOC/etc/$APPLICATION_NAME.conf.tmp $INSTALL_LOC/etc/$APPLICATION_NAME.conf && \ -echo -e "\nexport jreflags=-Djna.library.path=\"/Library/Frameworks/GStreamer.framework/Versions/1.0/lib\"" >> $INSTALL_LOC/etc/$APPLICATION_NAME.conf +echo " +export jreflags=\"-Djna.library.path=\\\"/usr/local/lib\\\" \$jreflags\" +export GST_PLUGIN_SYSTEM_PATH=\"/usr/local/lib/gstreamer-1.0\" +export GST_PLUGIN_SCANNER=\"${GSTREAMER_LOC}/libexec/gstreamer-1.0/gst-plugin-scanner\"" >> $INSTALL_LOC/etc/$APPLICATION_NAME.conf diff --git a/linux_macos_install_scripts/install_application.sh b/linux_macos_install_scripts/install_application.sh index 6a7a7cd0cbf5a80fba8eb99cb96fb943e4c52b04..6a09324b855b70cd090a2a3796a907dea88059be 100644 --- a/linux_macos_install_scripts/install_application.sh +++ b/linux_macos_install_scripts/install_application.sh @@ -2,7 +2,7 @@ # Unzips an application platform zip to specified directory and does setup usage() { - echo "Usage: install_application_from_zip.sh [-z zip_path] [-i install_directory] [-j java_home] [-n application_name] [-v asc_file]" 1>&2 + echo "Usage: install_application.sh [-z zip_path] [-i install_directory] [-j java_home] [-n application_name] [-v asc_file]" 1>&2 echo "If specifying a .asc verification file (with -v flag), the program will attempt to create a temp folder in the working directory and verify the signature with gpg. If you already have an extracted zip, the '-z' flag can be ignored as long as the directory specifying the extracted contents is provided for the installation directory." 1>&2 } diff --git a/linux_macos_install_scripts/install_prereqs_macos.sh b/linux_macos_install_scripts/install_prereqs_macos.sh index b4da3b44b96a43f5be6101a7076c795cfe043095..61615f3032b407b5e53c68dd4fcdbeb87cedfec3 100644 --- a/linux_macos_install_scripts/install_prereqs_macos.sh +++ b/linux_macos_install_scripts/install_prereqs_macos.sh @@ -1,27 +1,14 @@ #!/bin/bash echo "Installing dependencies..." -# dependencies taken from: https://github.com/sleuthkit/autopsy/pull/5111/files -# brew install gettext cppunit && \ -brew install ant automake libtool afflib libewf postgresql testdisk +brew install ant automake libtool afflib libewf postgresql testdisk libheif \ + gst-libav gst-plugins-bad gst-plugins-base gst-plugins-good gst-plugins-ugly gstreamer + if [[ $? -ne 0 ]] then echo "Unable to install necessary dependencies" >> /dev/stderr exit 1 fi -# brew gstreamer packages don't seem to play nice with autopsy. Installing directly from gstreamer -echo "Installing gstreamer..." -gstreamer_tmp_path=$TMPDIR/gstreamer-1.0-1.20.3-universal.pkg -curl -k -o $gstreamer_tmp_path 'https://gstreamer.freedesktop.org/data/pkg/osx/1.20.3/gstreamer-1.0-1.20.3-universal.pkg' && \ -sudo installer -pkg //Users/4911_admin/Downloads/gstreamer-1.0-1.20.3-universal.pkg -target / -gstreamer_install_result=$? -rm $gstreamer_tmp_path -if [[ $? -ne 0 ]] -then - echo "Unable to install gstreamer" >> /dev/stderr - exit 1 -fi - echo "Installing liberica java 8..." brew tap bell-sw/liberica && \ brew install --cask liberica-jdk8-full diff --git a/linux_macos_install_scripts/install_tsk_from_src.sh b/linux_macos_install_scripts/install_tsk_from_src.sh index c89c2211471bd91c8aae902c1c61df59388fcaf3..83e1a4ae3e68db54342ad1aa35d695cf48cb8d77 100644 --- a/linux_macos_install_scripts/install_tsk_from_src.sh +++ b/linux_macos_install_scripts/install_tsk_from_src.sh @@ -1,10 +1,10 @@ #!/bin/bash # Clones sleuthkit repo from github (if necessary) and installs # this script does require sudo privileges -# called like: build_tsk.sh -p <repo path to be created or existing> -b <tsk branch to checkout> -r <non-standard remote repo (optional)> +# called like: install_tsk_from_src.sh -p <repo path to be created or existing> -b <tsk branch to checkout> -r <non-standard remote repo (optional)> usage() { - echo "Usage: install_tsk_from_src [-p repo_path (should end with '/sleuthkit')] [-b tsk_branch] [-r sleuthkit_repo]" 1>&2 + echo "Usage: install_tsk_from_src.sh [-p repo_path (should end with '/sleuthkit')] [-b tsk_branch] [-r sleuthkit_repo]" 1>&2 } # default repo path diff --git a/nbproject/project.properties b/nbproject/project.properties index 711a2d7cf210f2c30c00ee71f614c1bacada4f00..2632af3d11c8cc98e4067dfaa8979ba76a94d195 100644 --- a/nbproject/project.properties +++ b/nbproject/project.properties @@ -4,7 +4,7 @@ app.title=Autopsy ### lowercase version of above app.name=${branding.token} ### if left unset, version will default to today's date -app.version=4.19.3 +app.version=4.20.0 ### build.type must be one of: DEVELOPMENT, RELEASE #build.type=RELEASE build.type=DEVELOPMENT diff --git a/release_scripts/localization_scripts/requirements.txt b/release_scripts/localization_scripts/requirements.txt index 1f7c17562c9a1f3840cd3237bfe8c59fc82da336..19c4a070127efc6c1570aad8ae240efedbf68473 100644 --- a/release_scripts/localization_scripts/requirements.txt +++ b/release_scripts/localization_scripts/requirements.txt @@ -1,14 +1,14 @@ -et-xmlfile==1.0.1 -gitdb==4.0.5 -GitPython==3.1.12 -jdcal==1.4.1 -jproperties==2.1.0 -lml==0.1.0 -openpyxl==3.0.6 -pyexcel==0.6.6 -pyexcel-io==0.6.4 -pyexcel-xlsx==0.6.0 -six==1.15.0 -smmap==3.0.4 -texttable==1.6.3 -XlsxWriter==1.3.7 +et-xmlfile>=1.1.0 +gitdb>=4.0.10 +GitPython>=3.1.29 +jdcal>=1.4.1 +jproperties>=2.1.1 +lml>=0.1.0 +openpyxl>=3.0.10 +pyexcel>=0.7.0 +pyexcel-io>=0.6.6 +pyexcel-xlsx>=0.6.0 +six>=1.16.0 +smmap>=5.0.0 +texttable>=1.6.7 +XlsxWriter>=3.0.3 diff --git a/unix_setup.sh b/unix_setup.sh index bfb4e8ad011f70d73774b1fd5a3a880556ff171d..08448cadf82b54c6a4210e4ce15fa913da258c7e 100644 --- a/unix_setup.sh +++ b/unix_setup.sh @@ -5,7 +5,7 @@ # NOTE: update_sleuthkit_version.pl updates this value and relies # on it keeping the same name and whitespace. Don't change it. -TSK_VERSION=4.11.1 +TSK_VERSION=4.12.0 usage() {