diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/AddImageAction.java b/Core/src/org/sleuthkit/autopsy/casemodule/AddImageAction.java index 469b600ac2..a769194ed3 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/AddImageAction.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/AddImageAction.java @@ -111,15 +111,18 @@ public final class AddImageAction extends CallableSystemAction implements Presen final IngestConfigurator ingestConfig = Lookup.getDefault().lookup(IngestConfigurator.class); if (null != ingestConfig && ingestConfig.isIngestRunning()) { - final String msg = "Ingest is ongoing on another data source. Adding a new source now might slow down the current ingest.
Do you want to proceed and add a new data source now?"; - if (JOptionPane.showConfirmDialog(null, msg, "Ingest in progress", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE) == JOptionPane.NO_OPTION) { + final String msg = NbBundle.getMessage(this.getClass(), "AddImageAction.ingestConfig.ongoingIngest.msg"); + if (JOptionPane.showConfirmDialog(null, msg, + NbBundle.getMessage(this.getClass(), + "AddImageAction.ingestConfig.ongoingIngest.title"), + JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE) == JOptionPane.NO_OPTION) { return; } } iterator = new AddImageWizardIterator(this); wizardDescriptor = new WizardDescriptor(iterator); - wizardDescriptor.setTitle("Add Data Source"); + wizardDescriptor.setTitle(NbBundle.getMessage(this.getClass(), "AddImageAction.wizard.title")); wizardDescriptor.putProperty(NAME, e); if (dialog != null) { diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/AddImageTask.java b/Core/src/org/sleuthkit/autopsy/casemodule/AddImageTask.java index 0057aa689f..1aecf44f31 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/AddImageTask.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/AddImageTask.java @@ -24,6 +24,8 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.logging.Level; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback; import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorProgressMonitor; import org.sleuthkit.autopsy.coreutils.Logger; @@ -97,7 +99,9 @@ import org.sleuthkit.datamodel.TskException; String currDir = process.currentDirectory(); if (currDir != null) { if (!currDir.isEmpty() ) { - progressMonitor.setProgressText("Adding: " + currDir); + progressMonitor.setProgressText( + NbBundle.getMessage(this.getClass(), "AddImageTask.run.progress.adding", + currDir)); } } // this sleep here prevents the UI from locking up @@ -298,7 +302,7 @@ import org.sleuthkit.datamodel.TskException; logger.log(Level.INFO, "interrupt() add image process"); addImageProcess.stop(); //it might take time to truly stop processing and writing to db } catch (TskCoreException ex) { - throw new Exception("Error stopping add-image process.", ex); + throw new Exception(NbBundle.getMessage(this.getClass(), "AddImageTask.interrupt.exception.msg"), ex); } } diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/AddImageWizardAddingProgressPanel.java b/Core/src/org/sleuthkit/autopsy/casemodule/AddImageWizardAddingProgressPanel.java index 951d60c834..14920f7183 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/AddImageWizardAddingProgressPanel.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/AddImageWizardAddingProgressPanel.java @@ -29,6 +29,7 @@ import javax.swing.event.ChangeListener; import org.openide.WizardDescriptor; import org.openide.util.HelpCtx; import org.openide.util.Lookup; +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorProgressMonitor; /** @@ -136,7 +137,8 @@ class AddImageWizardAddingProgressPanel implements WizardDescriptor.FinishablePa public boolean isValid() { // set the focus to the next button of the wizard dialog if it's enabled if (imgAdded) { - Lookup.getDefault().lookup(AddImageAction.class).requestFocusButton("Next >"); + Lookup.getDefault().lookup(AddImageAction.class).requestFocusButton( + NbBundle.getMessage(this.getClass(), "AddImageWizardAddingProgressPanel.isValid.focusNext")); } return imgAdded; @@ -147,7 +149,8 @@ class AddImageWizardAddingProgressPanel implements WizardDescriptor.FinishablePa */ void setStateStarted() { component.getProgressBar().setIndeterminate(true); - component.setProgressBarTextAndColor("*This process may take some time for large data sources.", 0, Color.black); + component.setProgressBarTextAndColor( + NbBundle.getMessage(this.getClass(), "AddImageWizardAddingProgressPanel.stateStarted.progressBarText"), 0, Color.black); } /** diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/AddImageWizardAddingProgressVisual.java b/Core/src/org/sleuthkit/autopsy/casemodule/AddImageWizardAddingProgressVisual.java index a7be36a1d7..afd5ec7281 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/AddImageWizardAddingProgressVisual.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/AddImageWizardAddingProgressVisual.java @@ -23,6 +23,7 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JProgressBar; import org.openide.WizardDescriptor; +import org.openide.util.NbBundle; /** * visual component to display progress bar and status updates while adding an @@ -30,7 +31,8 @@ import org.openide.WizardDescriptor; */ class AddImageWizardAddingProgressVisual extends javax.swing.JPanel { - private static final String ADDING_DATA_SOURCE_COMPLETE = "Adding Data Source - Complete"; + private static final String ADDING_DATA_SOURCE_COMPLETE = NbBundle + .getMessage(AddImageWizardAddingProgressVisual.class, "AddImageWizardAddingProgressVisual.addingDsComplete.text"); private String errorLog = ""; private boolean hasCriticalErrors = false; @@ -42,7 +44,7 @@ import org.openide.WizardDescriptor; */ @Override public String getName() { - return "Add Data Source"; + return NbBundle.getMessage(this.getClass(), "AddImageWizardAddingProgressVisual.getName.text"); } /** @@ -115,10 +117,12 @@ import org.openide.WizardDescriptor; //progressBar.setValue(100); //always invoked when process completed if (hasCriticalErrors) { statusLabel.setForeground(Color.RED); - statusLabel.setText("*Failed to add data source (critical errors encountered). Click below to view the log."); + statusLabel.setText( + NbBundle.getMessage(this.getClass(), "AddImageWizardAddingProgressVisual.showErrors.critText")); } else { statusLabel.setForeground(Color.BLACK); - statusLabel.setText("*Data Source added (non-critical errors encountered). Click below to view the log."); + statusLabel.setText( + NbBundle.getMessage(this.getClass(), "AddImageWizardAddingProgressVisual.showErrors.nonCritText")); } errorLog += errors + "\n"; diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/AddImageWizardChooseDataSourcePanel.java b/Core/src/org/sleuthkit/autopsy/casemodule/AddImageWizardChooseDataSourcePanel.java index d662439f3b..9f595e92d3 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/AddImageWizardChooseDataSourcePanel.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/AddImageWizardChooseDataSourcePanel.java @@ -25,6 +25,8 @@ import java.util.HashSet; import java.util.Iterator; import java.util.Set; import java.util.logging.Level; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; @@ -106,7 +108,8 @@ class AddImageWizardChooseDataSourcePanel implements WizardDescriptor.Panel"); + Lookup.getDefault().lookup(AddImageAction.class).requestFocusButton( + NbBundle.getMessage(this.getClass(), "AddImageWizardChooseDataSourcePanel.moveFocusNext")); } } diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/AddImageWizardChooseDataSourceVisual.java b/Core/src/org/sleuthkit/autopsy/casemodule/AddImageWizardChooseDataSourceVisual.java index 65a97761dd..e82774f3a9 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/AddImageWizardChooseDataSourceVisual.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/AddImageWizardChooseDataSourceVisual.java @@ -37,6 +37,7 @@ import javax.swing.JSeparator; import javax.swing.event.DocumentEvent; import javax.swing.ListCellRenderer; import org.openide.util.Lookup; +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessor; @@ -183,7 +184,7 @@ final class AddImageWizardChooseDataSourceVisual extends JPanel { */ @Override public String getName() { - return "Enter Data Source Information"; + return NbBundle.getMessage(this.getClass(), "AddImageWizardChooseDataSourceVisual.getName.text"); } diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/AddImageWizardIngestConfigPanel.java b/Core/src/org/sleuthkit/autopsy/casemodule/AddImageWizardIngestConfigPanel.java index c4c2f6d4dd..0e0726480b 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/AddImageWizardIngestConfigPanel.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/AddImageWizardIngestConfigPanel.java @@ -19,6 +19,7 @@ package org.sleuthkit.autopsy.casemodule; +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.ingest.IngestConfigurator; import java.awt.Color; import java.awt.Component; @@ -275,9 +276,11 @@ class AddImageWizardIngestConfigPanel implements WizardDescriptor.PanelIngest is ongoing on another data source. Adding a new source now might slow down the current ingest.
Do you want to proceed and add a new data source now? +AddImageAction.ingestConfig.ongoingIngest.title=Ingest in progress +AddImageTask.run.progress.adding=Adding\: {0} +AddImageTask.interrupt.exception.msg=Error stopping add-image process. +AddImageWizardAddingProgressPanel.isValid.focusNext=Next > +AddImageWizardAddingProgressPanel.stateStarted.progressBarText=*This process may take some time for large data sources. +AddImageWizardAddingProgressVisual.addingDsComplete.text=Adding Data Source - Complete +AddImageWizardAddingProgressVisual.getName.text=Add Data Source +AddImageWizardAddingProgressVisual.showErrors.critText=*Failed to add data source (critical errors encountered). Click below to view the log. +AddImageWizardAddingProgressVisual.showErrors.nonCritText=*Data Source added (non-critical errors encountered). Click below to view the log. +AddImageWizardChooseDataSourcePanel.moveFocusNext=Next > +AddImageWizardChooseDataSourceVisual.getName.text=Enter Data Source Information +AddImageWizardIngestConfigPanel.dsProcDone.noErrs.text=*Data Source added. +AddImageWizardIngestConfigPanel.dsProcDone.errs.text=*Errors encountered in adding Data Source. +AddImageWizardIngestConfigVisual.getName.text=Configure Ingest Modules +AddImageWizardIterator.stepXofN=Step {0} of {1} +AddLocalFilesTask.localFileAdd.progress.text=Adding\: {0}/{1} +Case.getCurCase.exception.noneOpen=Can't get the current case; there is no case open\! +Case.moduleErr=Module Error +Case.changeCase.errListenToCaseUpdates.msg=A module caused an error listening to Case updates. See log to determine which module. Some data could be incomplete. +Case.create.exception.msg=Error creating a case\: {0} in dir {1} +Case.open.exception.blankCase.msg=Case name is blank. +Case.open.msgDlg.updated.msg=Updated case database schema.\ +A backup copy of the database with the following path has been made\:\ + {0} +Case.open.msgDlg.updated.title=Case Database Schema Update +Case.open.exception.checkFile.msg=Check that you selected the correct case file (usually with {0} extension) +Case.open.exception.gen.msg=Error opening the case +Case.checkImgExist.confDlg.doesntExist.msg={0} has detected that one of the images associated with \ +this case are missing. Would you like to search for them now?\ +Previously, the image was located at\:\ +{1}\ +Please note that you will still be able to browse directories and generate reports\ +if 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.closeCase.exception.msg=Error while trying to close the current case. +Case.deleteCase.exception.msg=Error deleting the case dir\: {0} +Case.deleteCase.exception.msg2=Error deleting the case dir\: {0} +Case.updateCaseName.exception.msg=Error while trying to update the case name. +Case.updateExaminer.exception.msg=Error while trying to update the examiner. +Case.updateCaseNum.exception.msg=Error while trying to update the case number. +Case.exception.errGetRootObj=Error getting root objects. +Case.createCaseDir.exception.existNotDir=Cannot create case dir, already exists and is not a directory\: {0} +Case.createCaseDir.exception.existCantRW=Cannot create case dir, already exists and cannot read/write\: {0} +Case.createCaseDir.exception.cantCreate=Cannot create case dir\: {0} +Case.createCaseDir.exception.cantCreateCaseDir=Could not create case directory\: {0} +Case.createCaseDir.exception.cantCreateModDir=Could not create modules output directory\: {0} +Case.createCaseDir.exception.gen=Could not create case directory\: {0} +CaseDeleteAction.closeConfMsg.text=Are you sure want to close and delete this case? \ + Case Name\: {0}\ + Case Directory\: {1} +CaseDeleteAction.closeConfMsg.title=Warning\: Closing the Current Case +CaseDeleteAction.msgDlg.fileInUse.msg=The delete action can't be fully completed because the folder or file in it is open by another program.\ + \ +Close 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}) +CaseOpenAction.msgDlg.fileNotExist.msg=Error\: File doesn't exist. +CaseOpenAction.msgDlg.fileNotExist.title=Error +CaseOpenAction.msgDlg.cantOpenCase.msg=Error\: could not open the case in folder {0}\: {1} +CaseOpenAction.msgDlg.cantOpenCase.title=Error +CasePropertiesAction.window.title=Case Properties +CasePropertiesForm.updateCaseName.msgDlg.empty.msg=The caseName cannot be empty. +CasePropertiesForm.updateCaseName.msgDlg.empty.title=Error +CasePropertiesForm.updateCaseName.msgDlg.invalidSymbols.msg=The Case Name cannot contain any of this following symbol\: \\ / \: * ? " < > | +CasePropertiesForm.updateCaseName.msgDlg.invalidSymbols.title=Error +CasePropertiesForm.updateCaseName.confMsg.msg=Are you sure want to update the case name from "{0}" to "{1}"? +CasePropertiesForm.updateCaseName.confMsg.title=Create directory +CueBannerPanel.title.text=Open Recent Case +GeneralFilter.rawImageDesc.text=Raw Images (*.img, *.dd, *.001, *.aa, *.raw, *.bin) +GeneralFilter.encaseImageDesc.text=Encase Images (*.e01) +ImageDSProcessor.dsType.text=Image File +ImageDSProcessor.allDesc.text=All Supported Types +ImageFilePanel.moduleErr=Module Error +ImageFilePanel.moduleErr.msg=A module caused an error listening to ImageFilePanel updates. See log to determine which module. Some data could be incomplete. +LocalDiskDSProcessor.dsType.text=Local Disk +LocalDiskPanel.localDiskModel.loading.msg=Loading local disks... +LocalDiskPanel.moduleErr=Module Error +LocalDiskPanel.moduleErr.msg=A module caused an error listening to LocalDiskPanel updates. See log to determine which module. Some data could be incomplete. +LocalDiskPanel.errLabel.disksNotDetected.text=Disks were not detected. On some systems it requires admin privileges (or "Run as administrator"). +LocalDiskPanel.errLabel.disksNotDetected.toolTipText=Disks were not detected. On some systems it requires admin privileges (or "Run as administrator"). +LocalDiskPanel.errLabel.drivesNotDetected.text=Local drives were not detected. Auto-detection not supported on this OS or admin privileges required +LocalDiskPanel.errLabel.drivesNotDetected.toolTipText=Local drives were not detected. Auto-detection not supported on this OS or admin privileges required +LocalDiskPanel.errLabel.someDisksNotDetected.text=Some disks were not detected. On some systems it requires admin privileges (or "Run as administrator"). +LocalDiskPanel.errLabel.someDisksNotDetected.toolTipText=Some disks were not detected. On some systems it requires admin privileges (or "Run as administrator"). +LocalFilesDSProcessor.dsType=Logical Files +LocalFilesDSProcessor.toString.text=Logical Files +LocalFilesPanel.contentType.text=LOCAL +LocalFilesPanel.moduleErr=Module Error +LocalFilesPanel.moduleErr.msg=A module caused an error listening to LocalFilesPanel updates. See log to determine which module. Some data could be incomplete. +MissingImageDialog.allDesc.text=All Supported Types +MissingImageDialog.display.title=Search for Missing Image +MissingImageDialog.confDlg.noFileSel.msg=No image file has been selected, are you sure you\ +would like to exit without finding the image. +MissingImageDialog.confDlg.noFileSel.title=Missing Image +NewCaseVisualPanel1.getName.text=Case Info +NewCaseVisualPanel1.caseDirBrowse.selectButton.text=Select +NewCaseVisualPanel2.getName.text=Additional Information +NewCaseWizardAction.closeCurCase.confMsg.msg=Do you want to save and close this case and proceed with the new case creation? +NewCaseWizardAction.closeCurCase.confMsg.title=Warning\: Closing the Current Case +NewCaseWizardAction.newCase.windowTitle.text=New Case Information +NewCaseWizardAction.getName.text=New Case Wizard +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}'' doesn''t exist. \ + \ + Do you want to create that directory? +NewCaseWizardPanel1.validate.confMsg.createDir.title=Create directory +NewCaseWizardPanel1.validate.errMsg.cantCreateParDir.msg=Error\: Couldn''t create case parent directory {0} +NewCaseWizardPanel1.validate.errMsg.prevCreateBaseDir.msg=Prevented from creating base directory {0} +NewCaseWizardPanel1.validate.errMsg.cantCreateDir=Error\: Couldn't create directory. +NewCaseWizardPanel1.validate.errMsg.invalidBaseDir.msg=ERROR\: The Base Directory that you entered is not valid.\ +Please enter a valid Base Directory. +NewCaseWizardPanel1.createDir.errMsg.cantCreateDir.msg=ERROR\: Could not create the case directory. \ +Please enter a valid Case Name and Directory. +NewCaseWizardPanel2.validate.errCreateCase.msg=Error creating case +OpenRecentCasePanel.openCase.msgDlg.caseDoesntExist.msg=Error\: Case {0} doesn''t exist. +OpenRecentCasePanel.openCase.msgDlg.err=Error +OpenRecentCasePanel.colName.caseName=Case Name +OpenRecentCasePanel.colName.path=Path +RecentCases.exception.caseIdxOutOfRange.msg=Recent case index {0} is out of range. +RecentCases.getName.text=Clear Recent Cases +RecentItems.openRecentCase.msgDlg.text=Error\: Case {0} doesn''t exist. +RecentItems.openRecentCase.msgDlg.err=Error +StartupWindow.title.text=Welcome +UpdateRecentCases.menuItem.clearRecentCases.text=Clear Recent Cases +UpdateRecentCases.menuItem.empty=-Empty- +XMLCaseManagement.create.exception.msg=Error setting up Case XML file, +XMLCaseManagement.writeFile.exception.noCase.msg=No set case to write management file for. +XMLCaseManagement.writeFile.exception.errWriteToFile.msg=Error writing to case file +XMLCaseManagement.open.exception.errReadXMLFile.msg=Error reading case XML file\: {0} +XMLCaseManagement.open.msgDlg.notAutCase.msg=Error\: This is not an Autopsy config file ("{0}").\ + \ +Detail\: \ +Cannot open a non-Autopsy config file (at {1}). +XMLCaseManagement.open.msgDlg.notAutCase.title=Error diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/casemodule/Bundle_ja.properties new file mode 100644 index 0000000000..333bd7367c --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/casemodule/Bundle_ja.properties @@ -0,0 +1,90 @@ +CTL_AddImage=データソース追加... +CTL_AddImageButton=データソース追加 +CTL_CaseCloseAct=ケースを閉じる +CTL_CaseNewAction=New Case... +CTL_CaseOpenActionOld=Open Case(old)... +CTL_CasePropertiesAction=Case Properties... +CTL_OpenAction=Open Case... +CTL_CaseDeleteAction=ケース削除 +OpenIDE-Module-Name=Case +NewCaseVisualPanel1.jLabel1.text_1=新規ケース情報を入力: +#Nick: Does this mean info on new case or new info on existing case? +NewCaseVisualPanel1.caseNameLabel.text_1=ケース名 +NewCaseVisualPanel1.caseDirLabel.text=ベースディレクトリ: +NewCaseVisualPanel1.caseDirBrowseButton.text=閲覧 +NewCaseVisualPanel1.caseNameTextField.text_1= +NewCaseVisualPanel1.jLabel2.text_1=ケースデータは下記のディレクトリに保存されます: +#Nick: is "case data" and "case information" the same? +NewCaseVisualPanel1.caseParentDirTextField.text= +NewCaseVisualPanel1.caseDirTextField.text_1= +CasePropertiesForm.caseDirLabel.text=ケースディレクトリ: +CasePropertiesForm.crDateLabel.text=作成日: +CasePropertiesForm.caseNameLabel.text=ケース名: +CasePropertiesForm.crDateTextField.text= +CasePropertiesForm.caseNameTextField.text= +CasePropertiesForm.updateCaseNameButton.text=アップデート +CasePropertiesForm.casePropLabel.text=ケース情報 +CasePropertiesForm.genInfoLabel.text=一般情報 +CasePropertiesForm.imgInfoLabel.text=画像情報 +CasePropertiesForm.OKButton.text=OK +CasePropertiesForm.deleteCaseButton.text=ケース削除 +CueBannerPanel.autopsyLogo.text= +CueBannerPanel.createNewLabel.text=新規ケース作成 +CueBannerPanel.openLabel.text=既存ケースを開く +##オープンは日本語にするべき? +CueBannerPanel.closeButton.text=閉じる +CueBannerPanel.openRecentLabel.text=最近開いたケースを開く +CueBannerPanel.newCaseButton.text= +CueBannerPanel.openCaseButton.text= +CueBannerPanel.openRecentButton.text= +OpenRecentCasePanel.cancelButton.text=キャンセル +OpenRecentCasePanel.jLabel1.text=最近開いたファイル +CasePropertiesForm.caseNumberLabel.text=ケース番号: +CasePropertiesForm.examinerLabel.text=Examiner: +#審査官?カタカナ? +CasePropertiesForm.caseNumberTextField.text= +CasePropertiesForm.examinerTextField.text= +NewCaseVisualPanel2.caseNumberTextField.text= +NewCaseVisualPanel2.examinerLabel.text=Examiner: +#審査官?カタカナ? +NewCaseVisualPanel2.caseNumberLabel.text=ケース番号: +NewCaseVisualPanel2.examinerTextField.text= +NewCaseVisualPanel2.optionalLabel.text=オプショナル:ケース番号及び審査官を設定 +#審査官?カタカナ? +AddImageErrorsDialog.title=イメージログ追加 +AddImageErrorsDialog.copyButton.toolTipText=エラーをクリップボードにコピーします +AddImageErrorsDialog.copyButton.text=コピー +AddImageErrorsDialog.closeButton.toolTipText=このウィンドウを閉じます +AddImageErrorsDialog.closeButton.text=閉じる +OpenRecentCasePanel.openButton.text=開く +ImageFilePanel.pathLabel.text=画像ファイルを閲覧: +ImageFilePanel.browseButton.text=閲覧 +ImageFilePanel.pathTextField.text= +LocalDiskPanel.diskLabel.text=ローカルディスクを選択: +MissingImageDialog.selectButton.text=画像選択 +MissingImageDialog.titleLabel.text=欠落した画像の検索 +MissingImageDialog.cancelButton.text=キャンセル +LocalDiskPanel.errorLabel.text=エラーラベル +LocalFilesPanel.infoLabel.text=ローカルファイル及びフォルダーを追加: +LocalFilesPanel.selectButton.text=追加 +LocalFilesPanel.localFileChooser.dialogTitle=ローカルファイル又はフォルダーを選択 +LocalFilesPanel.selectButton.toolTipText=ローカルファイル及びフォルダーをロジカルファイルとして追加します +LocalFilesPanel.clearButton.text=クリアー +LocalFilesPanel.clearButton.toolTipText=現在選択されているローカルファイルパスがクリアされます +LocalFilesPanel.selectedPaths.toolTipText= +LocalFilesPanel.localFileChooser.approveButtonText=選択 +LocalFilesPanel.localFileChooser.approveButtonToolTipText= +LocalFilesPanel.selectButton.actionCommand=追加 +AddImageWizardIngestConfigVisual.subtitleLabel.text=このデータソースに対して実行したい追加モジュール群を設定します +#Nick: Does ingest module mean a module you added? +AddImageWizardIngestConfigVisual.titleLabel.text=追加モジュール設定 +AddImageWizardAddingProgressVisual.statusLabel.text=ファイルシステムがローカルデータベースに追加されました。ファイルを解析中です。 +AddImageWizardChooseDataSourceVisual.typeTabel.text=追加するソースタイプを選択: +AddImageWizardChooseDataSourceVisual.jLabel2.text=jLabel2 +AddImageWizardChooseDataSourceVisual.nextLabel.text= 「次へ」をクリックして、インプットデータを解析、ボリューム及びファイルシステムデータを抽出、ローカルデータベースにデータを投入。 +#Nick: Do I leave the and as is? +AddImageWizardChooseDataSourceVisual.imgInfoLabel.text=データソース情報を入力: +AddImageWizardAddingProgressVisual.progressLabel.text=<進捗状況> +AddImageWizardAddingProgressVisual.viewLogButton.text=ログ閲覧 +AddImageWizardAddingProgressVisual.titleLabel.text=データソース追加中 +AddImageWizardAddingProgressVisual.subTitle1Label.text=ローカルデータベースにファイルシステム情報を追加中です。こちらが完了次第、ファイル解析が始まります。 diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java index 29c5a2bae1..b04fc9aedf 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java @@ -37,8 +37,9 @@ import java.util.TimeZone; import java.util.logging.Level; import javax.swing.JOptionPane; import javax.swing.SwingUtilities; -import org.openide.util.Exceptions; + import org.openide.util.Lookup; +import org.openide.util.NbBundle; import org.openide.util.actions.CallableSystemAction; import org.openide.util.actions.SystemAction; import org.openide.windows.WindowManager; @@ -159,7 +160,7 @@ public class Case implements SleuthkitCase.ErrorObserver { if (currentCase != null) { return currentCase; } else { - throw new IllegalStateException("Can't get the current case; there is no case open!"); + throw new IllegalStateException(NbBundle.getMessage(Case.class, "Case.getCurCase.exception.noneOpen")); } } @@ -192,7 +193,10 @@ public class Case implements SleuthkitCase.ErrorObserver { } catch (Exception e) { logger.log(Level.SEVERE, "Case listener threw exception", e); - MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to Case updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show(NbBundle.getMessage(Case.class, "Case.moduleErr"), + NbBundle.getMessage(Case.class, + "Case.changeCase.errListenToCaseUpdates.msg"), + MessageNotifyUtil.MessageType.ERROR); } doCaseNameChange(""); @@ -201,7 +205,10 @@ public class Case implements SleuthkitCase.ErrorObserver { } catch (Exception e) { logger.log(Level.SEVERE, "Case listener threw exception", e); - MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to Case updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show(NbBundle.getMessage(Case.class, "Case.moduleErr"), + NbBundle.getMessage(Case.class, + "Case.changeCase.errListenToCaseUpdates.msg"), + MessageNotifyUtil.MessageType.ERROR); } } @@ -214,7 +221,10 @@ public class Case implements SleuthkitCase.ErrorObserver { } catch (Exception e) { logger.log(Level.SEVERE, "Case listener threw exception", e); - MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to Case updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show(NbBundle.getMessage(Case.class, "Case.moduleErr"), + NbBundle.getMessage(Case.class, + "Case.changeCase.errListenToCaseUpdates.msg"), + MessageNotifyUtil.MessageType.ERROR); } doCaseChange(currentCase); @@ -224,7 +234,10 @@ public class Case implements SleuthkitCase.ErrorObserver { } catch (Exception e) { logger.log(Level.SEVERE, "Case threw exception", e); - MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to Case updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show(NbBundle.getMessage(Case.class, "Case.moduleErr"), + NbBundle.getMessage(Case.class, + "Case.changeCase.errListenToCaseUpdates.msg"), + MessageNotifyUtil.MessageType.ERROR); } doCaseNameChange(currentCase.name); @@ -267,7 +280,8 @@ public class Case implements SleuthkitCase.ErrorObserver { db = SleuthkitCase.newCase(dbPath); } catch (TskCoreException ex) { logger.log(Level.SEVERE, "Error creating a case: " + caseName + " in dir " + caseDir, ex); - throw new CaseActionException("Error creating a case: " + caseName + " in dir " + caseDir, ex); + throw new CaseActionException( + NbBundle.getMessage(Case.class, "Case.create.exception.msg", caseName, caseDir), ex); } Case newCase = new Case(caseName, caseNumber, examiner, configFilePath, xmlcm, db); @@ -296,14 +310,18 @@ public class Case implements SleuthkitCase.ErrorObserver { String examiner = xmlcm.getCaseExaminer(); // if the caseName is "", case / config file can't be opened if (caseName.equals("")) { - throw new CaseActionException("Case name is blank."); + throw new CaseActionException(NbBundle.getMessage(Case.class, "Case.open.exception.blankCase.msg")); } String caseDir = xmlcm.getCaseDirectory(); String dbPath = caseDir + File.separator + "autopsy.db"; SleuthkitCase db = SleuthkitCase.openCase(dbPath); if (null != db.getBackupDatabasePath()) { - JOptionPane.showMessageDialog(null, "Updated case database schema.\nA backup copy of the database with the following path has been made:\n " + db.getBackupDatabasePath(), "Case Database Schema Update", JOptionPane.INFORMATION_MESSAGE); + JOptionPane.showMessageDialog(null, + NbBundle.getMessage(Case.class, "Case.open.msgDlg.updated.msg", + db.getBackupDatabasePath()), + NbBundle.getMessage(Case.class, "Case.open.msgDlg.updated.title"), + JOptionPane.INFORMATION_MESSAGE); } checkImagesExist(db); @@ -318,10 +336,10 @@ public class Case implements SleuthkitCase.ErrorObserver { CaseCloseAction closeCase = SystemAction.get(CaseCloseAction.class); closeCase.actionPerformed(null); if (!configFilePath.endsWith(CASE_DOT_EXTENSION)) { - throw new CaseActionException("Check that you selected the correct case file (usually with " - + CASE_DOT_EXTENSION + " extension)", ex); + throw new CaseActionException( + NbBundle.getMessage(Case.class, "Case.open.exception.checkFile.msg", CASE_DOT_EXTENSION), ex); } else { - throw new CaseActionException("Error opening the case", ex); + throw new CaseActionException(NbBundle.getMessage(Case.class, "Case.open.exception.gen.msg"), ex); } } } @@ -352,11 +370,13 @@ public class Case implements SleuthkitCase.ErrorObserver { boolean fileExists = (pathExists(path) || driveExists(path)); if (!fileExists) { - int ret = JOptionPane.showConfirmDialog(null, appName + " has detected that 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" + path - + "\nPlease 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.", "Missing Image", JOptionPane.YES_NO_OPTION); + int ret = JOptionPane.showConfirmDialog(null, + NbBundle.getMessage(Case.class, + "Case.checkImgExist.confDlg.doesntExist.msg", + appName, path), + NbBundle.getMessage(Case.class, + "Case.checkImgExist.confDlg.doesntExist.title"), + JOptionPane.YES_NO_OPTION); if (ret == JOptionPane.YES_OPTION) { MissingImageDialog.makeDialog(obj_id, db); @@ -389,12 +409,15 @@ public class Case implements SleuthkitCase.ErrorObserver { } catch (Exception e) { logger.log(Level.SEVERE, "Case listener threw exception", e); - MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to Case updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "Case.moduleErr"), + NbBundle.getMessage(this.getClass(), + "Case.changeCase.errListenToCaseUpdates.msg"), + MessageNotifyUtil.MessageType.ERROR); } CoreComponentControl.openCoreWindows(); return newImage; } catch (Exception ex) { - throw new CaseActionException("Error adding image to the case", ex); + throw new CaseActionException(NbBundle.getMessage(this.getClass(), "Case.addImg.exception.msg"), ex); } } @@ -423,7 +446,10 @@ public class Case implements SleuthkitCase.ErrorObserver { } catch (Exception e) { logger.log(Level.SEVERE, "Case threw exception", e); - MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to Case updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "Case.moduleErr"), + NbBundle.getMessage(this.getClass(), + "Case.changeCase.errListenToCaseUpdates.msg"), + MessageNotifyUtil.MessageType.ERROR); } CoreComponentControl.openCoreWindows(); } @@ -456,7 +482,7 @@ public class Case implements SleuthkitCase.ErrorObserver { this.xmlcm.close(); // close the xmlcm this.db.close(); } catch (Exception e) { - throw new CaseActionException("Error while trying to close the current case.", e); + throw new CaseActionException(NbBundle.getMessage(this.getClass(), "Case.closeCase.exception.msg"), e); } } @@ -478,11 +504,13 @@ public class Case implements SleuthkitCase.ErrorObserver { RecentCases.getInstance().removeRecentCase(this.name, this.configFilePath); // remove it from the recent case Case.changeCase(null); if (result == false) { - throw new CaseActionException("Error deleting the case dir: " + caseDir); + throw new CaseActionException( + NbBundle.getMessage(this.getClass(), "Case.deleteCase.exception.msg", caseDir)); } } catch (Exception ex) { logger.log(Level.SEVERE, "Error deleting the current case dir: " + caseDir, ex); - throw new CaseActionException("Error deleting the case dir: " + caseDir, ex); + throw new CaseActionException( + NbBundle.getMessage(this.getClass(), "Case.deleteCase.exception.msg2", caseDir), ex); } } @@ -504,12 +532,15 @@ public class Case implements SleuthkitCase.ErrorObserver { } catch (Exception e) { logger.log(Level.SEVERE, "Case listener threw exception", e); - MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to Case updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "Case.moduleErr"), + NbBundle.getMessage(this.getClass(), + "Case.changeCase.errListenToCaseUpdates.msg"), + MessageNotifyUtil.MessageType.ERROR); } doCaseNameChange(newCaseName); } catch (Exception e) { - throw new CaseActionException("Error while trying to update the case name.", e); + throw new CaseActionException(NbBundle.getMessage(this.getClass(), "Case.updateCaseName.exception.msg"), e); } } @@ -528,10 +559,13 @@ public class Case implements SleuthkitCase.ErrorObserver { } catch (Exception e) { logger.log(Level.SEVERE, "Case listener threw exception", e); - MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to Case updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "Case.moduleErr"), + NbBundle.getMessage(this.getClass(), + "Case.changeCase.errListenToCaseUpdates.msg"), + MessageNotifyUtil.MessageType.ERROR); } } catch (Exception e) { - throw new CaseActionException("Error while trying to update the examiner.", e); + throw new CaseActionException(NbBundle.getMessage(this.getClass(), "Case.updateExaminer.exception.msg"), e); } } @@ -551,10 +585,13 @@ public class Case implements SleuthkitCase.ErrorObserver { } catch (Exception e) { logger.log(Level.SEVERE, "Case listener threw exception", e); - MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to Case updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "Case.moduleErr"), + NbBundle.getMessage(this.getClass(), + "Case.changeCase.errListenToCaseUpdates.msg"), + MessageNotifyUtil.MessageType.ERROR); } } catch (Exception e) { - throw new CaseActionException("Error while trying to update the case number.", e); + throw new CaseActionException(NbBundle.getMessage(this.getClass(), "Case.updateCaseNum.exception.msg"), e); } } @@ -764,7 +801,7 @@ public class Case implements SleuthkitCase.ErrorObserver { try { return db.getRootObjects(); } catch (TskException ex) { - throw new RuntimeException("Error getting root objects.", ex); + throw new RuntimeException(NbBundle.getMessage(this.getClass(), "Case.exception.errGetRootObj"), ex); } } @@ -919,16 +956,19 @@ public class Case implements SleuthkitCase.ErrorObserver { File caseDirF = new File(caseDir); if (caseDirF.exists()) { if (caseDirF.isFile()) { - throw new CaseActionException("Cannot create case dir, already exists and is not a directory: " + caseDir); + throw new CaseActionException( + NbBundle.getMessage(Case.class, "Case.createCaseDir.exception.existNotDir", caseDir)); } else if (!caseDirF.canRead() || !caseDirF.canWrite()) { - throw new CaseActionException("Cannot create case dir, already exists and cannot read/write: " + caseDir); + throw new CaseActionException( + NbBundle.getMessage(Case.class, "Case.createCaseDir.exception.existCantRW", caseDir)); } } try { boolean result = (caseDirF).mkdirs(); // create root case Directory if (result == false) { - throw new CaseActionException("Cannot create case dir: " + caseDir); + throw new CaseActionException( + NbBundle.getMessage(Case.class, "Case.createCaseDir.exception.cantCreate", caseDir)); } // create the folders inside the case directory @@ -938,17 +978,21 @@ public class Case implements SleuthkitCase.ErrorObserver { && (new File(caseDir + File.separator + XMLCaseManagement.CACHE_FOLDER_RELPATH)).mkdir(); if (result == false) { - throw new CaseActionException("Could not create case directory: " + caseDir); + throw new CaseActionException( + NbBundle.getMessage(Case.class, "Case.createCaseDir.exception.cantCreateCaseDir", caseDir)); } final String modulesOutDir = caseDir + File.separator + getModulesOutputDirRelPath(); result = new File(modulesOutDir).mkdir(); if (result == false) { - throw new CaseActionException("Could not create modules output directory: " + modulesOutDir); + throw new CaseActionException( + NbBundle.getMessage(Case.class, "Case.createCaseDir.exception.cantCreateModDir", + modulesOutDir)); } } catch (Exception e) { - throw new CaseActionException("Could not create case directory: " + caseDir, e); + throw new CaseActionException( + NbBundle.getMessage(Case.class, "Case.createCaseDir.exception.gen", caseDir), e); } } diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/CaseDeleteAction.java b/Core/src/org/sleuthkit/autopsy/casemodule/CaseDeleteAction.java index 72ed22351b..229bbe2ca9 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/CaseDeleteAction.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/CaseDeleteAction.java @@ -99,8 +99,11 @@ import org.openide.util.actions.CallableSystemAction; } else{ // show the confirmation first to close the current case and open the "New Case" wizard panel - String closeCurrentCase = "Are you sure want to close and delete this case? \n Case Name: " + caseName + "\n Case Directory: "+ caseFolder.getPath(); - NotifyDescriptor d = new NotifyDescriptor.Confirmation(closeCurrentCase, "Warning: Closing the Current Case", NotifyDescriptor.YES_NO_OPTION, NotifyDescriptor.WARNING_MESSAGE); + String closeCurrentCase = NbBundle.getMessage(this.getClass(), "CaseDeleteAction.closeConfMsg.text", caseName, caseFolder.getPath()); + NotifyDescriptor d = new NotifyDescriptor.Confirmation(closeCurrentCase, + NbBundle.getMessage(this.getClass(), + "CaseDeleteAction.closeConfMsg.title"), + NotifyDescriptor.YES_NO_OPTION, NotifyDescriptor.WARNING_MESSAGE); d.setValue(NotifyDescriptor.NO_OPTION); Object res = DialogDisplayer.getDefault().notify(d); @@ -116,11 +119,18 @@ import org.openide.util.actions.CallableSystemAction; // show notification whether the case has been deleted or it failed to delete... if(!success){ - JOptionPane.showMessageDialog(caller, "The delete action can't 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.", "Error: Folder In Use", JOptionPane.ERROR_MESSAGE); // throw an error + JOptionPane.showMessageDialog(caller, + NbBundle.getMessage(this.getClass(), + "CaseDeleteAction.msgDlg.fileInUse.msg"), + NbBundle.getMessage(this.getClass(), + "CaseDeleteAction.msgDlg.fileInUse.title"), + JOptionPane.ERROR_MESSAGE); // throw an error } else{ CasePropertiesAction.closeCasePropertiesWindow(); // because the "Delete Case" button is in the "CaseProperties" window, we have to close that window when we delete the case. - JOptionPane.showMessageDialog(caller, "Case " + caseName + " has been deleted."); + JOptionPane.showMessageDialog(caller, NbBundle.getMessage(this.getClass(), + "CaseDeleteAction.msgDlg.caseDelete.msg", + caseName)); } } } diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/CaseOpenAction.java b/Core/src/org/sleuthkit/autopsy/casemodule/CaseOpenAction.java index 26dfb3b821..6c2ac4c0e6 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/CaseOpenAction.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/CaseOpenAction.java @@ -22,15 +22,17 @@ import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; -import java.util.Collections; import java.util.logging.Level; import javax.swing.JFileChooser; import javax.swing.JOptionPane; import javax.swing.filechooser.FileFilter; import javax.swing.filechooser.FileNameExtensionFilter; + +import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; import org.sleuthkit.autopsy.coreutils.ModuleSettings; import org.sleuthkit.autopsy.coreutils.Logger; +import org.sleuthkit.autopsy.coreutils.Version; /** * The action to open a existing case. This class is always enabled. @@ -47,8 +49,9 @@ public final class CaseOpenAction implements ActionListener { * The constructor */ public CaseOpenAction() { - autFilter = new FileNameExtensionFilter(org.sleuthkit.autopsy.coreutils.Version.getName() - + " Case File ( " + Case.CASE_DOT_EXTENSION + ")", + autFilter = new FileNameExtensionFilter( + NbBundle.getMessage(CaseOpenAction.class, "CaseOpenAction.autFilter.title", Version.getName(), + Case.CASE_DOT_EXTENSION), Case.CASE_EXTENSION); fc.setDragEnabled(false); fc.setFileSelectionMode(JFileChooser.FILES_ONLY); @@ -80,7 +83,12 @@ public final class CaseOpenAction implements ActionListener { ModuleSettings.setConfigSetting(ModuleSettings.MAIN_SETTINGS, PROP_BASECASE, dirPath.substring(0, dirPath.lastIndexOf(File.separator))); // check if the file exists if (!new File(path).exists()) { - JOptionPane.showMessageDialog(null, "Error: File doesn't exist.", "Error", JOptionPane.ERROR_MESSAGE); + JOptionPane.showMessageDialog(null, + NbBundle.getMessage(this.getClass(), + "CaseOpenAction.msgDlg.fileNotExist.msg"), + NbBundle.getMessage(this.getClass(), + "CaseOpenAction.msgDlg.fileNotExist.title"), + JOptionPane.ERROR_MESSAGE); this.actionPerformed(e); // show the dialog box again } else { // try to close Startup window if there's one @@ -93,8 +101,13 @@ public final class CaseOpenAction implements ActionListener { try { Case.open(path); // open the case } catch (CaseActionException ex) { - JOptionPane.showMessageDialog(null, "Error: could not open the case in folder " + path - + ": " + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE); + JOptionPane.showMessageDialog(null, + NbBundle.getMessage(this.getClass(), + "CaseOpenAction.msgDlg.cantOpenCase.msg", path, + ex.getMessage()), + NbBundle.getMessage(this.getClass(), + "CaseOpenAction.msgDlg.cantOpenCase.title"), + JOptionPane.ERROR_MESSAGE); logger.log(Level.WARNING, "Error opening case in folder " + path, ex); StartupWindowProvider.getInstance().open(); diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/CasePropertiesAction.java b/Core/src/org/sleuthkit/autopsy/casemodule/CasePropertiesAction.java index 76ff941278..26f86db61a 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/CasePropertiesAction.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/CasePropertiesAction.java @@ -62,7 +62,7 @@ import org.sleuthkit.autopsy.coreutils.Logger; try { // create the popUp window for it - String title = "Case Properties"; + String title = NbBundle.getMessage(this.getClass(), "CasePropertiesAction.window.title"); final JFrame frame = new JFrame(title); popUpWindow = new JDialog(frame, title, true); // to make the popUp Window to be modal diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/CasePropertiesForm.java b/Core/src/org/sleuthkit/autopsy/casemodule/CasePropertiesForm.java index 5ff08adcad..6da501f08f 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/CasePropertiesForm.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/CasePropertiesForm.java @@ -27,9 +27,10 @@ package org.sleuthkit.autopsy.casemodule; import java.awt.event.ActionListener; import java.io.File; -import java.util.List; import java.util.Map; import java.util.logging.Level; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import javax.swing.JOptionPane; import javax.swing.JPanel; @@ -365,7 +366,12 @@ class CasePropertiesForm extends javax.swing.JPanel{ // check if the case name is empty if(newCaseName.trim().equals("")){ - JOptionPane.showMessageDialog(caller, "The caseName cannot be empty.", "Error", JOptionPane.ERROR_MESSAGE); + JOptionPane.showMessageDialog(caller, + NbBundle.getMessage(this.getClass(), + "CasePropertiesForm.updateCaseName.msgDlg.empty.msg"), + NbBundle.getMessage(this.getClass(), + "CasePropertiesForm.updateCaseName.msgDlg.empty.title"), + JOptionPane.ERROR_MESSAGE); } else{ // check if case Name contain one of this following symbol: @@ -373,13 +379,22 @@ class CasePropertiesForm extends javax.swing.JPanel{ if(newCaseName.contains("\\") || newCaseName.contains("/") || newCaseName.contains(":") || newCaseName.contains("*") || newCaseName.contains("?") || newCaseName.contains("\"") || newCaseName.contains("<") || newCaseName.contains(">") || newCaseName.contains("|")){ - String errorMsg = "The Case Name cannot contain any of this following symbol: \\ / : * ? \" < > |"; - JOptionPane.showMessageDialog(caller, errorMsg, "Error", JOptionPane.ERROR_MESSAGE); + String errorMsg = NbBundle + .getMessage(this.getClass(), "CasePropertiesForm.updateCaseName.msgDlg.invalidSymbols.msg"); + JOptionPane.showMessageDialog(caller, errorMsg, + NbBundle.getMessage(this.getClass(), + "CasePropertiesForm.updateCaseName.msgDlg.invalidSymbols.title"), + JOptionPane.ERROR_MESSAGE); } else{ // ask for the confirmation first - String confMsg = "Are you sure want to update the case name from \"" + oldCaseName + "\" to \"" + newCaseName + "\"?"; - NotifyDescriptor d = new NotifyDescriptor.Confirmation(confMsg, "Create directory", NotifyDescriptor.YES_NO_OPTION, NotifyDescriptor.WARNING_MESSAGE); + String confMsg = NbBundle + .getMessage(this.getClass(), "CasePropertiesForm.updateCaseName.confMsg.msg", oldCaseName, + newCaseName); + NotifyDescriptor d = new NotifyDescriptor.Confirmation(confMsg, + NbBundle.getMessage(this.getClass(), + "CasePropertiesForm.updateCaseName.confMsg.title"), + NotifyDescriptor.YES_NO_OPTION, NotifyDescriptor.WARNING_MESSAGE); d.setValue(NotifyDescriptor.NO_OPTION); Object res = DialogDisplayer.getDefault().notify(d); diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/CueBannerPanel.java b/Core/src/org/sleuthkit/autopsy/casemodule/CueBannerPanel.java index 49c5b313a0..0d9f33cd89 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/CueBannerPanel.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/CueBannerPanel.java @@ -29,13 +29,14 @@ import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JPanel; import org.openide.util.Lookup; +import org.openide.util.NbBundle; /** * */ public class CueBannerPanel extends javax.swing.JPanel { - final private static String title = "Open Recent Case"; + final private static String title = NbBundle.getMessage(CueBannerPanel.class, "CueBannerPanel.title.text"); final private static JFrame frame = new JFrame(title); final static JDialog recentCasesWindow = new JDialog(frame, title, true); // to make the popUp Window to be modal diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/GeneralFilter.java b/Core/src/org/sleuthkit/autopsy/casemodule/GeneralFilter.java index 9b9a091466..4d972958c9 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/GeneralFilter.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/GeneralFilter.java @@ -19,6 +19,8 @@ package org.sleuthkit.autopsy.casemodule; +import org.openide.util.NbBundle; + import java.io.File; import java.util.List; import java.util.Arrays; @@ -32,10 +34,10 @@ public class GeneralFilter extends FileFilter{ // Extensions & Descriptions for commonly used filters public static final List RAW_IMAGE_EXTS = Arrays.asList(new String[]{".img", ".dd", ".001", ".aa", ".raw", ".bin"}); - public static final String RAW_IMAGE_DESC = "Raw Images (*.img, *.dd, *.001, *.aa, *.raw, *.bin)"; + public static final String RAW_IMAGE_DESC = NbBundle.getMessage(GeneralFilter.class, "GeneralFilter.rawImageDesc.text"); public static final List ENCASE_IMAGE_EXTS = Arrays.asList(new String[]{".e01"}); - public static final String ENCASE_IMAGE_DESC = "Encase Images (*.e01)"; + public static final String ENCASE_IMAGE_DESC = NbBundle.getMessage(GeneralFilter.class, "GeneralFilter.encaseImageDesc.text"); diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/ImageDSProcessor.java b/Core/src/org/sleuthkit/autopsy/casemodule/ImageDSProcessor.java index b22b94f300..d8c4b31de6 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/ImageDSProcessor.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/ImageDSProcessor.java @@ -22,6 +22,8 @@ import javax.swing.JPanel; import java.util.ArrayList; import java.util.List; import javax.swing.filechooser.FileFilter; + +import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorProgressMonitor; @@ -41,7 +43,7 @@ public class ImageDSProcessor implements DataSourceProcessor { static final Logger logger = Logger.getLogger(ImageDSProcessor.class.getName()); // Data source type handled by this processor - private final static String dsType = "Image File"; + private final static String dsType = NbBundle.getMessage(ImageDSProcessor.class, "ImageDSProcessor.dsType.text"); // The Config UI panel that plugins into the Choose Data Source Wizard private final ImageFilePanel imageFilePanel; @@ -70,7 +72,7 @@ public class ImageDSProcessor implements DataSourceProcessor { allExt.addAll(GeneralFilter.RAW_IMAGE_EXTS); allExt.addAll(GeneralFilter.ENCASE_IMAGE_EXTS); } - static final String allDesc = "All Supported Types"; + static final String allDesc = NbBundle.getMessage(ImageDSProcessor.class, "ImageDSProcessor.allDesc.text"); static final GeneralFilter allFilter = new GeneralFilter(allExt, allDesc); static final List filtersList = new ArrayList<>(); diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/ImageFilePanel.java b/Core/src/org/sleuthkit/autopsy/casemodule/ImageFilePanel.java index 52ccfd5c9d..1369745a57 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/ImageFilePanel.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/ImageFilePanel.java @@ -21,8 +21,6 @@ package org.sleuthkit.autopsy.casemodule; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import java.io.File; -import java.util.ArrayList; -import java.util.Arrays; import java.util.Calendar; import java.util.List; import java.util.SimpleTimeZone; @@ -32,6 +30,8 @@ import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.JPanel; import javax.swing.filechooser.FileFilter; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessor; import org.sleuthkit.autopsy.coreutils.ModuleSettings; import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; @@ -202,7 +202,9 @@ public class ImageFilePanel extends JPanel implements DocumentListener { } catch (Exception e) { logger.log(Level.SEVERE, "ImageFilePanel listener threw exception", e); - MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to ImageFilePanel updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "ImageFilePanel.moduleErr"), + NbBundle.getMessage(this.getClass(), "ImageFilePanel.moduleErr.msg"), + MessageNotifyUtil.MessageType.ERROR); } }//GEN-LAST:event_browseButtonActionPerformed @@ -330,7 +332,9 @@ public class ImageFilePanel extends JPanel implements DocumentListener { } catch (Exception ee) { logger.log(Level.SEVERE, "ImageFilePanel listener threw exception", ee); - MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to ImageFilePanel updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "ImageFilePanel.moduleErr"), + NbBundle.getMessage(this.getClass(), "ImageFilePanel.moduleErr.msg"), + MessageNotifyUtil.MessageType.ERROR); } } @@ -341,7 +345,9 @@ public class ImageFilePanel extends JPanel implements DocumentListener { } catch (Exception ee) { logger.log(Level.SEVERE, "ImageFilePanel listener threw exception", ee); - MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to ImageFilePanel updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "ImageFilePanel.moduleErr"), + NbBundle.getMessage(this.getClass(), "ImageFilePanel.moduleErr.msg"), + MessageNotifyUtil.MessageType.ERROR); } } @@ -353,7 +359,9 @@ public class ImageFilePanel extends JPanel implements DocumentListener { } catch (Exception ee) { logger.log(Level.SEVERE, "ImageFilePanel listener threw exception", ee); - MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to ImageFilePanel updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "ImageFilePanel.moduleErr"), + NbBundle.getMessage(this.getClass(), "ImageFilePanel.moduleErr.msg"), + MessageNotifyUtil.MessageType.ERROR); } } diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskDSProcessor.java b/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskDSProcessor.java index 5a74b31a7c..997e69348b 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskDSProcessor.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskDSProcessor.java @@ -20,6 +20,8 @@ package org.sleuthkit.autopsy.casemodule; import javax.swing.JPanel; + +import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback; import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorProgressMonitor; @@ -33,7 +35,7 @@ public class LocalDiskDSProcessor implements DataSourceProcessor { static final Logger logger = Logger.getLogger(ImageDSProcessor.class.getName()); // Data source type handled by this processor - private static final String dsType = "Local Disk"; + private static final String dsType = NbBundle.getMessage(LocalDiskDSProcessor.class, "LocalDiskDSProcessor.dsType.text"); // The Config UI panel that plugins into the Choose Data Source Wizard private final LocalDiskPanel localDiskPanel; diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.java b/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.java index 5c61abbd1f..a8c1165a44 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.java @@ -18,6 +18,7 @@ */ package org.sleuthkit.autopsy.casemodule; +import org.sleuthkit.autopsy.coreutils.LocalDisk; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; @@ -40,6 +41,8 @@ import javax.swing.ListCellRenderer; import javax.swing.SwingWorker; import javax.swing.border.EmptyBorder; import javax.swing.event.ListDataListener; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessor; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.PlatformUtil; @@ -297,7 +300,7 @@ import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; List partitions = new ArrayList(); //private String SELECT = "Select a local disk:"; - private String LOADING = "Loading local disks..."; + private String LOADING = NbBundle.getMessage(this.getClass(), "LocalDiskPanel.localDiskModel.loading.msg"); LocalDiskThread worker = null; @@ -335,7 +338,9 @@ import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; } catch (Exception e) { logger.log(Level.SEVERE, "LocalDiskPanel listener threw exception", e); - MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to LocalDiskPanel updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "LocalDiskPanel.moduleErr"), + NbBundle.getMessage(this.getClass(), "LocalDiskPanel.moduleErr.msg"), + MessageNotifyUtil.MessageType.ERROR); } } } @@ -409,16 +414,22 @@ import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; private void displayErrors() { if(physical.isEmpty() && partitions.isEmpty()) { if(PlatformUtil.isWindowsOS()) { - errorLabel.setText("Disks were not detected. On some systems it requires admin privileges (or \"Run as administrator\")."); - errorLabel.setToolTipText("Disks were not detected. On some systems it requires admin privileges (or \"Run as administrator\")."); + errorLabel.setText( + NbBundle.getMessage(this.getClass(), "LocalDiskPanel.errLabel.disksNotDetected.text")); + errorLabel.setToolTipText(NbBundle.getMessage(this.getClass(), + "LocalDiskPanel.errLabel.disksNotDetected.toolTipText")); } else { - errorLabel.setText("Local drives were not detected. Auto-detection not supported on this OS or admin privileges required"); - errorLabel.setToolTipText("Local drives were not detected. Auto-detection not supported on this OS or admin privileges required"); + errorLabel.setText( + NbBundle.getMessage(this.getClass(), "LocalDiskPanel.errLabel.drivesNotDetected.text")); + errorLabel.setToolTipText(NbBundle.getMessage(this.getClass(), + "LocalDiskPanel.errLabel.drivesNotDetected.toolTipText")); } diskComboBox.setEnabled(false); } else if(physical.isEmpty()) { - errorLabel.setText("Some disks were not detected. On some systems it requires admin privileges (or \"Run as administrator\")."); - errorLabel.setToolTipText("Some disks were not detected. On some systems it requires admin privileges (or \"Run as administrator\")."); + errorLabel.setText( + NbBundle.getMessage(this.getClass(), "LocalDiskPanel.errLabel.someDisksNotDetected.text")); + errorLabel.setToolTipText(NbBundle.getMessage(this.getClass(), + "LocalDiskPanel.errLabel.someDisksNotDetected.toolTipText")); } } diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/LocalFilesDSProcessor.java b/Core/src/org/sleuthkit/autopsy/casemodule/LocalFilesDSProcessor.java index 7ff306ae9a..898e414e8f 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/LocalFilesDSProcessor.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/LocalFilesDSProcessor.java @@ -20,6 +20,8 @@ package org.sleuthkit.autopsy.casemodule; import javax.swing.JPanel; + +import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback; import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorProgressMonitor; @@ -32,7 +34,7 @@ public class LocalFilesDSProcessor implements DataSourceProcessor { static final Logger logger = Logger.getLogger(LocalFilesDSProcessor.class.getName()); // Data source type handled by this processor - private static final String dsType = "Logical Files"; + private static final String dsType = NbBundle.getMessage(LocalFilesDSProcessor.class, "LocalFilesDSProcessor.dsType"); // The Config UI panel that plugins into the Choose Data Source Wizard private final LocalFilesPanel localFilesPanel; diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/LocalFilesPanel.java b/Core/src/org/sleuthkit/autopsy/casemodule/LocalFilesPanel.java index 863e3b2610..c03c293c1a 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/LocalFilesPanel.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/LocalFilesPanel.java @@ -25,6 +25,8 @@ import java.util.Set; import java.util.TreeSet; import javax.swing.JFileChooser; import javax.swing.JPanel; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessor; import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; import java.util.logging.Level; @@ -84,7 +86,7 @@ import org.sleuthkit.autopsy.coreutils.Logger; //@Override public String getContentType() { - return "LOCAL"; + return NbBundle.getMessage(this.getClass(), "LocalFilesPanel.contentType.text"); } //@Override @@ -127,7 +129,7 @@ import org.sleuthkit.autopsy.coreutils.Logger; @Override public String toString() { - return "Logical Files"; + return NbBundle.getMessage(this.getClass(), "LocalFilesDSProcessor.toString.text"); } /** @@ -242,7 +244,9 @@ import org.sleuthkit.autopsy.coreutils.Logger; } catch (Exception e) { logger.log(Level.SEVERE, "LocalFilesPanel listener threw exception", e); - MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to LocalFilesPanel updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "LocalFilesPanel.moduleErr"), + NbBundle.getMessage(this.getClass(), "LocalFilesPanel.moduleErr.msg"), + MessageNotifyUtil.MessageType.ERROR); } }//GEN-LAST:event_selectButtonActionPerformed diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/MissingImageDialog.java b/Core/src/org/sleuthkit/autopsy/casemodule/MissingImageDialog.java index d2d865aa0c..267a2c98c3 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/MissingImageDialog.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/MissingImageDialog.java @@ -31,6 +31,8 @@ import java.io.File; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JOptionPane; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.casemodule.GeneralFilter; import org.sleuthkit.autopsy.coreutils.Logger; @@ -54,7 +56,7 @@ import org.sleuthkit.datamodel.TskCoreException; allExt.addAll(GeneralFilter.RAW_IMAGE_EXTS); allExt.addAll(GeneralFilter.ENCASE_IMAGE_EXTS); } - static final String allDesc = "All Supported Types"; + static final String allDesc = NbBundle.getMessage(MissingImageDialog.class, "MissingImageDialog.allDesc.text"); static final GeneralFilter allFilter = new GeneralFilter(allExt, allDesc); private JFileChooser fc = new JFileChooser(); @@ -100,7 +102,7 @@ import org.sleuthkit.datamodel.TskCoreException; } private void display() { - this.setTitle("Search for Missing Image"); + this.setTitle(NbBundle.getMessage(this.getClass(), "MissingImageDialog.display.title")); Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize(); // set the popUp window / JFrame int w = this.getSize().width; @@ -316,9 +318,11 @@ import org.sleuthkit.datamodel.TskCoreException; // void cancel() { int ret = JOptionPane.showConfirmDialog(null, - "No image file has been selected, are you sure you\n" + - "would like to exit without finding the image.", - "Missing Image", JOptionPane.YES_NO_OPTION); + NbBundle.getMessage(this.getClass(), + "MissingImageDialog.confDlg.noFileSel.msg"), + NbBundle.getMessage(this.getClass(), + "MissingImageDialog.confDlg.noFileSel.title"), + JOptionPane.YES_NO_OPTION); if (ret == JOptionPane.YES_OPTION) { this.dispose(); } diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/NewCaseVisualPanel1.java b/Core/src/org/sleuthkit/autopsy/casemodule/NewCaseVisualPanel1.java index 3c4dd72bcf..d1faa81e7d 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/NewCaseVisualPanel1.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/NewCaseVisualPanel1.java @@ -19,6 +19,8 @@ package org.sleuthkit.autopsy.casemodule; +import org.openide.util.NbBundle; + import java.awt.Component; import java.io.File; import javax.swing.JFileChooser; @@ -52,7 +54,7 @@ final class NewCaseVisualPanel1 extends JPanel implements DocumentListener{ */ @Override public String getName() { - return "Case Info"; + return NbBundle.getMessage(this.getClass(), "NewCaseVisualPanel1.getName.text"); } /** @@ -179,7 +181,8 @@ final class NewCaseVisualPanel1 extends JPanel implements DocumentListener{ //fc.setSelectedFile(new File("C:\\Program Files\\")); //disableTextField(fc); // disable all the text field on the file chooser - int returnValue = fc.showDialog((Component)evt.getSource(), "Select"); + int returnValue = fc.showDialog((Component)evt.getSource(), NbBundle.getMessage(this.getClass(), + "NewCaseVisualPanel1.caseDirBrowse.selectButton.text")); if(returnValue == JFileChooser.APPROVE_OPTION){ String path = fc.getSelectedFile().getPath(); caseParentDirTextField.setText(path); // put the path to the textfield diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/NewCaseVisualPanel2.java b/Core/src/org/sleuthkit/autopsy/casemodule/NewCaseVisualPanel2.java index 5232f17835..d5180fdcce 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/NewCaseVisualPanel2.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/NewCaseVisualPanel2.java @@ -24,6 +24,8 @@ */ package org.sleuthkit.autopsy.casemodule; +import org.openide.util.NbBundle; + /** * * @author dfickling @@ -43,7 +45,7 @@ package org.sleuthkit.autopsy.casemodule; */ @Override public String getName() { - return "Additional Information"; + return NbBundle.getMessage(this.getClass(), "NewCaseVisualPanel2.getName.text"); } /** This method is called from within the constructor to diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/NewCaseWizardAction.java b/Core/src/org/sleuthkit/autopsy/casemodule/NewCaseWizardAction.java index 63f4ad5c56..c640054c69 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/NewCaseWizardAction.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/NewCaseWizardAction.java @@ -31,6 +31,7 @@ import org.openide.DialogDisplayer; import org.openide.NotifyDescriptor; import org.openide.WizardDescriptor; import org.openide.util.HelpCtx; +import org.openide.util.NbBundle; import org.openide.util.actions.CallableSystemAction; import org.openide.util.actions.SystemAction; import org.sleuthkit.autopsy.coreutils.Logger; @@ -52,8 +53,12 @@ import org.sleuthkit.autopsy.coreutils.Logger; // there's a case open if (Case.existsCurrentCase()) { // show the confirmation first to close the current case and open the "New Case" wizard panel - String closeCurrentCase = "Do you want to save and close this case and proceed with the new case creation?"; - NotifyDescriptor d = new NotifyDescriptor.Confirmation(closeCurrentCase, "Warning: Closing the Current Case", NotifyDescriptor.YES_NO_OPTION, NotifyDescriptor.WARNING_MESSAGE); + String closeCurrentCase = NbBundle + .getMessage(this.getClass(), "NewCaseWizardAction.closeCurCase.confMsg.msg"); + NotifyDescriptor d = new NotifyDescriptor.Confirmation(closeCurrentCase, + NbBundle.getMessage(this.getClass(), + "NewCaseWizardAction.closeCurCase.confMsg.title"), + NotifyDescriptor.YES_NO_OPTION, NotifyDescriptor.WARNING_MESSAGE); d.setValue(NotifyDescriptor.NO_OPTION); Object res = DialogDisplayer.getDefault().notify(d); @@ -77,7 +82,7 @@ import org.sleuthkit.autopsy.coreutils.Logger; WizardDescriptor wizardDescriptor = new WizardDescriptor(getPanels()); // {0} will be replaced by WizardDesriptor.Panel.getComponent().getName() wizardDescriptor.setTitleFormat(new MessageFormat("{0}")); - wizardDescriptor.setTitle("New Case Information"); + wizardDescriptor.setTitle(NbBundle.getMessage(this.getClass(), "NewCaseWizardAction.newCase.windowTitle.text")); Dialog dialog = DialogDisplayer.getDefault().createDialog(wizardDescriptor); dialog.setVisible(true); dialog.toFront(); @@ -149,7 +154,7 @@ import org.sleuthkit.autopsy.coreutils.Logger; @Override public String getName() { - return "New Case Wizard"; + return NbBundle.getMessage(this.getClass(), "NewCaseWizardAction.getName.text"); } @Override diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/NewCaseWizardPanel1.java b/Core/src/org/sleuthkit/autopsy/casemodule/NewCaseWizardPanel1.java index 52be7a1a7d..8bbc242059 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/NewCaseWizardPanel1.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/NewCaseWizardPanel1.java @@ -23,6 +23,8 @@ import java.util.HashSet; import java.util.Iterator; import java.util.Set; import java.util.logging.Level; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; @@ -205,13 +207,15 @@ class NewCaseWizardPanel1 implements WizardDescriptor.ValidatingPanel | if (!Case.isValidName(caseName)) { - String errorMsg = "The Case Name cannot contain any of the following symbols: \\ / : * ? \" < > |"; + String errorMsg = NbBundle + .getMessage(this.getClass(), "NewCaseWizardPanel1.validate.errMsg.invalidSymbols"); validationError(errorMsg); } else { // check if the directory exist if (new File(caseDirPath).exists()) { // throw a warning to enter new data or delete the existing directory - String errorMsg = "Case directory '" + caseDirPath + "' already exists."; + String errorMsg = NbBundle + .getMessage(this.getClass(), "NewCaseWizardPanel1.validate.errMsg.dirExists", caseDirPath); validationError(errorMsg); } else { // check if the "base" directory path is absolute @@ -220,8 +224,13 @@ class NewCaseWizardPanel1 implements WizardDescriptor.ValidatingPanel= LENGTH) { - throw new IllegalArgumentException("Recent case index " + i + " is out of range."); + throw new IllegalArgumentException( + NbBundle.getMessage(RecentCases.class, "RecentCases.exception.caseIdxOutOfRange.msg", i)); } } @@ -419,7 +421,7 @@ import org.sleuthkit.autopsy.coreutils.Logger; @Override public String getName() { //return NbBundle.getMessage(RecentCases.class, "CTL_RecentCases"); - return "Clear Recent Cases"; + return NbBundle.getMessage(this.getClass(), "RecentCases.getName.text"); } /** diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/RecentItems.java b/Core/src/org/sleuthkit/autopsy/casemodule/RecentItems.java index d8f5fcaca7..d7d66095e7 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/RecentItems.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/RecentItems.java @@ -26,6 +26,8 @@ import java.io.File; import java.util.logging.Level; import javax.swing.JOptionPane; import javax.swing.JPanel; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; /** @@ -56,7 +58,11 @@ class RecentItems implements ActionListener { // check if the file exists if(caseName.equals("") || casePath.equals("") || (!new File(casePath).exists())){ // throw an error here - JOptionPane.showMessageDialog(caller, "Error: Case " + caseName + " doesn't exist.", "Error", JOptionPane.ERROR_MESSAGE); + JOptionPane.showMessageDialog(caller, + NbBundle.getMessage(this.getClass(), "RecentItems.openRecentCase.msgDlg.text", + caseName), + NbBundle.getMessage(this.getClass(), "RecentItems.openRecentCase.msgDlg.err"), + JOptionPane.ERROR_MESSAGE); RecentCases.getInstance().removeRecentCase(caseName, casePath); // remove the recent case if it doesn't exist anymore //if case is not opened, open the start window diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/StartupWindow.java b/Core/src/org/sleuthkit/autopsy/casemodule/StartupWindow.java index f100123479..4c99d4f582 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/StartupWindow.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/StartupWindow.java @@ -26,6 +26,8 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JDialog; import javax.swing.JFrame; + +import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** @@ -35,7 +37,7 @@ import org.openide.util.lookup.ServiceProvider; public final class StartupWindow extends JDialog implements StartupWindowInterface { private static StartupWindow instance; - private static final String TITLE = "Welcome"; + private static final String TITLE = NbBundle.getMessage(StartupWindow.class, "StartupWindow.title.text"); private static Dimension DIMENSIONS = new Dimension(750, 400); public StartupWindow() { diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/UpdateRecentCases.java b/Core/src/org/sleuthkit/autopsy/casemodule/UpdateRecentCases.java index 9667768397..0355fc20fe 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/UpdateRecentCases.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/UpdateRecentCases.java @@ -23,6 +23,7 @@ import javax.swing.JComponent; import javax.swing.JMenuItem; import javax.swing.JSeparator; import org.openide.awt.DynamicMenuContent; +import org.openide.util.NbBundle; import org.openide.util.actions.SystemAction; /** @@ -66,14 +67,15 @@ import org.openide.util.actions.SystemAction; // if it has recent case, create clear menu if(hasRecentCase){ comps[length] = new JSeparator(); - JMenuItem clearMenu = new JMenuItem("Clear Recent Cases"); + JMenuItem clearMenu = new JMenuItem( + NbBundle.getMessage(this.getClass(), "UpdateRecentCases.menuItem.clearRecentCases.text")); clearMenu.addActionListener(SystemAction.get(RecentCases.class)); comps[length+1] = clearMenu; } // otherwise, just create a disabled empty menu else{ comps = new JComponent[1]; - JMenuItem emptyMenu = new JMenuItem("-Empty-"); + JMenuItem emptyMenu = new JMenuItem(NbBundle.getMessage(this.getClass(), "UpdateRecentCases.menuItem.empty")); emptyMenu.addActionListener(new RecentItems("", "")); comps[0] = emptyMenu; comps[0].setEnabled(false); diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/XMLCaseManagement.java b/Core/src/org/sleuthkit/autopsy/casemodule/XMLCaseManagement.java index 45d8ac4784..7fc760463c 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/XMLCaseManagement.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/XMLCaseManagement.java @@ -30,6 +30,7 @@ import javax.xml.transform.*; import javax.xml.transform.dom.*; import javax.xml.transform.stream.*; import org.openide.util.Exceptions; +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.XMLUtil; import org.w3c.dom.*; @@ -458,7 +459,8 @@ import org.xml.sax.SAXException; docBuilder = docFactory.newDocumentBuilder(); } catch (ParserConfigurationException ex) { clear(); - throw new CaseActionException("Error setting up Case XML file, ", ex); + throw new CaseActionException( + NbBundle.getMessage(this.getClass(), "XMLCaseManagement.create.exception.msg"), ex); } doc = docBuilder.newDocument(); @@ -531,7 +533,8 @@ import org.xml.sax.SAXException; @Override public void writeFile() throws CaseActionException { if (doc == null || caseName.equals("")) { - throw new CaseActionException("No set case to write management file for."); + throw new CaseActionException( + NbBundle.getMessage(this.getClass(), "XMLCaseManagement.writeFile.exception.noCase.msg")); } // Prepare the DOM document for writing @@ -549,7 +552,8 @@ import org.xml.sax.SAXException; xformer = tfactory.newTransformer(); } catch (TransformerConfigurationException ex) { logger.log(Level.SEVERE, "Could not setup tranformer and write case file"); - throw new CaseActionException("Error writing to case file", ex); + throw new CaseActionException( + NbBundle.getMessage(this.getClass(), "XMLCaseManagement.writeFile.exception.errWriteToFile.msg"), ex); } //Setup indenting to "pretty print" @@ -560,7 +564,8 @@ import org.xml.sax.SAXException; xformer.transform(source, result); } catch (TransformerException ex) { logger.log(Level.SEVERE, "Could not run tranformer and write case file"); - throw new CaseActionException("Error writing to case file", ex); + throw new CaseActionException( + NbBundle.getMessage(this.getClass(), "XMLCaseManagement.writeFile.exception.errWriteToFile.msg"), ex); } // preparing the output file @@ -597,11 +602,17 @@ import org.xml.sax.SAXException; db = dbf.newDocumentBuilder(); doc = db.parse(file); } catch (ParserConfigurationException ex) { - throw new CaseActionException("Error reading case XML file: " + conFilePath, ex); + throw new CaseActionException( + NbBundle.getMessage(this.getClass(), "XMLCaseManagement.open.exception.errReadXMLFile.msg", + conFilePath), ex); } catch (SAXException ex) { - throw new CaseActionException("Error reading case XML file: " + conFilePath, ex); + throw new CaseActionException( + NbBundle.getMessage(this.getClass(), "XMLCaseManagement.open.exception.errReadXMLFile.msg", + conFilePath), ex); } catch (IOException ex) { - throw new CaseActionException("Error reading case XML file: " + conFilePath, ex); + throw new CaseActionException( + NbBundle.getMessage(this.getClass(), "XMLCaseManagement.open.exception.errReadXMLFile.msg", + conFilePath), ex); } @@ -619,7 +630,13 @@ import org.xml.sax.SAXException; if (!rootName.equals(TOP_ROOT_NAME)) { // throw an error ... clear(); - JOptionPane.showMessageDialog(caller, "Error: This is not an Autopsy config file (\"" + file.getName() + "\").\n \nDetail: \nCannot open a non-Autopsy config file (at " + className + ").", "Error", JOptionPane.ERROR_MESSAGE); + JOptionPane.showMessageDialog(caller, + NbBundle.getMessage(this.getClass(), + "XMLCaseManagement.open.msgDlg.notAutCase.msg", + file.getName(), className), + NbBundle.getMessage(this.getClass(), + "XMLCaseManagement.open.msgDlg.notAutCase.title"), + JOptionPane.ERROR_MESSAGE); } else { /* Autopsy Created Version */ String createdVersion = getCreatedVersion(); // get the created version diff --git a/Core/src/org/sleuthkit/autopsy/contentviewers/Bundle.properties b/Core/src/org/sleuthkit/autopsy/contentviewers/Bundle.properties new file mode 100644 index 0000000000..a8565de787 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/contentviewers/Bundle.properties @@ -0,0 +1,16 @@ +Metadata.tableRowTitle.name=Name +Metadata.tableRowTitle.size=Size +Metadata.tableRowTitle.fileNameAlloc=File Name Allocation +Metadata.tableRowTitle.metadataAlloc=Metadata Allocation +Metadata.tableRowTitle.modified=Modified +Metadata.tableRowTitle.accessed=Accessed +Metadata.tableRowTitle.created=Created +Metadata.tableRowTitle.changed=Changed +Metadata.tableRowContent.md5notCalc=Not calculated +Metadata.tableRowTitle.md5=MD5 +Metadata.tableRowTitle.hashLookupResults=Hash Lookup Results +Metadata.tableRowTitle.internalid=Internal ID +Metadata.tableRowTitle.localPath=Local Path +Metadata.title=Metadata +Metadata.toolTip=Displays metadata about the file. +Metadata.nodeText.nonFilePassedIn=Non-file passed in \ No newline at end of file diff --git a/Core/src/org/sleuthkit/autopsy/contentviewers/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/contentviewers/Bundle_ja.properties new file mode 100644 index 0000000000..b3db39fbc1 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/contentviewers/Bundle_ja.properties @@ -0,0 +1,16 @@ +Metadata.tableRowTitle.name=\u540D\u79F0 +Metadata.tableRowTitle.size=\u30B5\u30A4\u30BA +Metadata.tableRowTitle.fileNameAlloc=\u30D5\u30A1\u30A4\u30EB\u30A2\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u72B6\u614B +Metadata.tableRowTitle.metadataAlloc=\u30E1\u30BF\u30C7\u30FC\u30BF\u30A2\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u72B6\u614B +Metadata.tableRowTitle.modified=\u4FEE\u6B63\u6E08\u307F +Metadata.tableRowTitle.accessed=\u30A2\u30AF\u30BB\u30B9\u6E08\u307F +Metadata.tableRowTitle.created=\u4F5C\u6210\u6E08\u307F +Metadata.tableRowTitle.changed=\u5909\u66F4\u6E08\u307F +Metadata.tableRowContent.md5notCalc=\u672A\u8A08\u7B97 +Metadata.tableRowTitle.md5=MD5 +Metadata.tableRowTitle.hashLookupResults=\u30CF\u30C3\u30B7\u30E5\u30EB\u30C3\u30AF\u30A2\u30C3\u30D7\u7D50\u679C +Metadata.tableRowTitle.internalid=\u5185\u90E8ID +Metadata.tableRowTitle.localPath=\u30ED\u30FC\u30AB\u30EB\u30D1\u30B9 +Metadata.title=\u30E1\u30BF\u30C7\u30FC\u30BF +Metadata.toolTip=\u30D5\u30A1\u30A4\u30EB\u306E\u30E1\u30BF\u30C7\u30FC\u30BF\u3092\u8868\u793A\u3057\u307E\u3059\u3002 +Metadata.nodeText.nonFilePassedIn=\u51E6\u7406\u4E2D\u306E\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306F\u30D5\u30A1\u30A4\u30EB\u3067\u306F\u3042\u308A\u307E\u305B\u3093 \ No newline at end of file diff --git a/Core/src/org/sleuthkit/autopsy/contentviewers/Metadata.java b/Core/src/org/sleuthkit/autopsy/contentviewers/Metadata.java index 20de49affd..ab29df1d2b 100755 --- a/Core/src/org/sleuthkit/autopsy/contentviewers/Metadata.java +++ b/Core/src/org/sleuthkit/autopsy/contentviewers/Metadata.java @@ -21,6 +21,7 @@ package org.sleuthkit.autopsy.contentviewers; import java.awt.Component; import org.openide.nodes.Node; +import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; import org.sleuthkit.autopsy.corecomponentinterfaces.DataContentViewer; import org.sleuthkit.autopsy.datamodel.AbstractAbstractFileNode; @@ -122,7 +123,7 @@ public class Metadata extends javax.swing.JPanel implements DataContentViewer public void setNode(Node node) { AbstractFile file = node.getLookup().lookup(AbstractFile.class); if (file == null) { - setText("Non-file passed in"); + setText(NbBundle.getMessage(this.getClass(), "Metadata.nodeText.nonFilePassedIn")); return; } @@ -130,29 +131,29 @@ public class Metadata extends javax.swing.JPanel implements DataContentViewer startTable(sb); try { - addRow(sb, "Name", file.getUniquePath()); + addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.name"), file.getUniquePath()); } catch (TskCoreException ex) { - addRow(sb, "Name", file.getParentPath() + "/" + file.getName()); + addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.name"), file.getParentPath() + "/" + file.getName()); } - addRow(sb, "Size", new Long(file.getSize()).toString() ); - addRow(sb, "File Name Allocation", file.getDirFlagAsString()); - addRow(sb, "Metadata Allocation", file.getMetaFlagsAsString()); - addRow(sb, "Modified", ContentUtils.getStringTime(file.getMtime(), file)); - addRow(sb, "Accessed", ContentUtils.getStringTime(file.getAtime(), file)); - addRow(sb, "Created", ContentUtils.getStringTime(file.getCrtime(), file)); - addRow(sb, "Changed", ContentUtils.getStringTime(file.getCtime(), file)); + addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.size"), new Long(file.getSize()).toString() ); + addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.fileNameAlloc"), file.getDirFlagAsString()); + addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.metadataAlloc"), file.getMetaFlagsAsString()); + addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.modified"), ContentUtils.getStringTime(file.getMtime(), file)); + addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.accessed"), ContentUtils.getStringTime(file.getAtime(), file)); + addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.created"), ContentUtils.getStringTime(file.getCrtime(), file)); + addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.changed"), ContentUtils.getStringTime(file.getCtime(), file)); String md5 = file.getMd5Hash(); if (md5 == null) { - md5 = "Not calculated"; + md5 = NbBundle.getMessage(this.getClass(), "Metadata.tableRowContent.md5notCalc"); } - addRow(sb, "MD5", md5); - addRow(sb, "Hash Lookup Results", file.getKnown().toString()); + addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.md5"), md5); + addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.hashLookupResults"), file.getKnown().toString()); - addRow(sb, "Internal ID", new Long(file.getId()).toString()); + addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.internalid"), new Long(file.getId()).toString()); if (file.getType().compareTo(TSK_DB_FILES_TYPE_ENUM.LOCAL) == 0) { - addRow(sb, "Local Path", file.getLocalAbsPath()); + addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.localPath"), file.getLocalAbsPath()); } endTable(sb); @@ -161,12 +162,12 @@ public class Metadata extends javax.swing.JPanel implements DataContentViewer @Override public String getTitle() { - return "Metadata"; + return NbBundle.getMessage(this.getClass(), "Metadata.title"); } @Override public String getToolTip() { - return "Displays metadata about the file."; + return NbBundle.getMessage(this.getClass(), "Metadata.toolTip"); } @Override diff --git a/Core/src/org/sleuthkit/autopsy/corecomponentinterfaces/Bundle.properties b/Core/src/org/sleuthkit/autopsy/corecomponentinterfaces/Bundle.properties index 1468238a77..a1c78ba931 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponentinterfaces/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/corecomponentinterfaces/Bundle.properties @@ -1 +1,3 @@ OpenIDE-Module-Name=CoreComponentInterfaces +CoreComponentControl.CTL_DirectoryTreeTopComponent=Directory Tree +CoreComponentControl.CTL_FavoritesTopComponent=Favorites diff --git a/Core/src/org/sleuthkit/autopsy/corecomponentinterfaces/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/corecomponentinterfaces/Bundle_ja.properties new file mode 100644 index 0000000000..8e2fd233f8 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/corecomponentinterfaces/Bundle_ja.properties @@ -0,0 +1,3 @@ +OpenIDE-Module-Name=\u4E3B\u8981\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u30A4\u30F3\u30BF\u30FC\u30D5\u30A7\u30A4\u30B9 +CoreComponentControl.CTL_DirectoryTreeTopComponent=\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306E\u30C4\u30EA\u30FC +CoreComponentControl.CTL_FavoritesTopComponent=\u304A\u6C17\u306B\u5165\u308A \ No newline at end of file diff --git a/Core/src/org/sleuthkit/autopsy/corecomponentinterfaces/CoreComponentControl.java b/Core/src/org/sleuthkit/autopsy/corecomponentinterfaces/CoreComponentControl.java index 2ada97d001..43b3c63629 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponentinterfaces/CoreComponentControl.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponentinterfaces/CoreComponentControl.java @@ -22,6 +22,8 @@ import java.util.Collection; import java.util.Iterator; import java.util.Set; import java.util.logging.Level; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import org.openide.util.Lookup; import org.openide.windows.Mode; @@ -37,6 +39,10 @@ import org.sleuthkit.autopsy.corecomponents.DataContentTopComponent; public class CoreComponentControl { private static final Logger logger = Logger.getLogger(CoreComponentControl.class.getName()); + private static final String DIRECTORY_TREE = NbBundle.getMessage(CoreComponentControl.class, + "CoreComponentControl.CTL_DirectoryTreeTopComponent"); + private static final String FAVORITES = NbBundle.getMessage(CoreComponentControl.class, + "CoreComponentControl.CTL_FavoritesTopComponent"); /** * Opens all TopComponent windows that are needed ({@link DataExplorer}, {@link DataResult}, and @@ -83,6 +89,7 @@ public class CoreComponentControl { Set modes = wm.getModes(); Iterator iter = wm.getModes().iterator(); + TopComponent directoryTree = null; TopComponent favorites = null; String tcName = ""; @@ -94,16 +101,13 @@ public class CoreComponentControl { logger.log(Level.INFO, "tcName was null"); tcName = ""; } - switch (tcName) { - case "Directory Tree": - directoryTree = tc; - break; - case "Favorites": - favorites = tc; - break; - default: - tc.close(); - break; + // switch requires constant strings, so converted to if/else. + if (DIRECTORY_TREE.equals(tcName)) { + directoryTree = tc; + } else if (FAVORITES.equals(tcName)) { + favorites = tc; + } else { + tc.close(); } } } diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle.properties b/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle.properties index 1cefe19010..d034667a2d 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle.properties @@ -1,38 +1,15 @@ CTL_DataContentAction=DataContent CTL_DataContentTopComponent=Data Content -CTL_NodeTableAction=NodeTable -CTL_NodeTableTopComponent=NodeTable Window -CTL_HexViewAction=HexView -CTL_HexViewTopComponent=Hex View -CTL_StringViewAction=StringView -CTL_StringViewTopComponent=String View CTL_CustomAboutAction=About +OptionsCategory_Name_General=General +OptionsCategory_Keywords_General=general HINT_DataContentTopComponent=This is a DataContent window HINT_NodeTableTopComponent=This is a DataResult window -HINT_HexViewTopComponent=This is a HexView window -HINT_StringViewTopComponent=This is a StringView window OpenIDE-Module-Name=CoreComponents -OutputViewPanel.prevPageButton.text=Previous Page -OutputViewPanel.totalPageLabel.text=100 -OutputViewPanel.ofLabel.text=of -OutputViewPanel.currentPageLabel.text=1 -OutputViewPanel.pageLabel.text=Page: -OutputViewPanel.filePathLabel.text=FilePath -OutputViewPanel.nextPageButton.text=Next Page -DataContentViewerHex.filePathLabel.text=FilePath -DataContentViewerHex.pageLabel.text=Page: -DataContentViewerHex.currentPageLabel.text=1 -DataContentViewerHex.ofLabel.text=of -DataContentViewerHex.totalPageLabel.text=100 DataContentViewerHex.prevPageButton.text= DataContentViewerHex.nextPageButton.text= -DataContentViewerString.totalPageLabel.text=100 DataContentViewerString.prevPageButton.text= DataContentViewerString.nextPageButton.text= -DataContentViewerString.filePathLabel.text=FilePath -DataContentViewerString.pageLabel.text=Page: -DataContentViewerString.currentPageLabel.text=1 -DataContentViewerString.ofLabel.text=of DataContentViewerHex.pageLabel.text_1=Page: DataContentViewerHex.currentPageLabel.text_1=1 DataContentViewerHex.ofLabel.text_1=of @@ -41,7 +18,6 @@ DataContentViewerString.pageLabel.text_1=Page: DataContentViewerString.currentPageLabel.text_1=1 DataContentViewerString.ofLabel.text_1=of DataContentViewerString.totalPageLabel.text_1=100 -DataContentViewerPicture.picLabel.text=[Picture goes Here] DataContentViewerHex.pageLabel2.text=Page DataContentViewerString.pageLabel2.text=Page @@ -54,13 +30,13 @@ URL_ON_IMG=http://www.sleuthkit.org/ #SwingBrowser -LBL_SwingBrowserDescription=Simple HTML Browser based on a Swing component -MSG_cannot_create_browser=Cannot create Swing HTML Browser. -Services/Browsers/SwingBrowser.settings=Swing HTML Browser +#LBL_SwingBrowserDescription=Simple HTML Browser based on a Swing component +#MSG_cannot_create_browser=Cannot create Swing HTML Browser. +#Services/Browsers/SwingBrowser.settings=Swing HTML Browser LBL_Close=Close -MNE_Close=C -ACSN_Close=Close -ACSD_Close=Close +#MNE_Close=C +#ACSN_Close=Close +#ACSD_Close=Close DataContentViewerString.copyMenuItem.text=Copy DataContentViewerHex.copyMenuItem.text=Copy DataContentViewerString.selectAllMenuItem.text=Select All @@ -112,3 +88,55 @@ GeneralPanel.useGMTTimeRB.text=Use GMT GeneralPanel.jLabel3.text=Hide known files in the Directory Listing when: GeneralPanel.viewsHideKnownCB.text=Selecting under Views GeneralPanel.dataSourcesHideKnownCB.text=Selecting under Data Sources +DataContentViewerArtifact.waitText=Retrieving and preparing data, please wait... +DataContentViewerArtifact.errorText=Error retrieving result +DataContentViewerArtifact.title=Results +DataContentViewerArtifact.toolTip=Displays Results associated with the file +DataContentViewerHex.goToPageTextField.msgDlg=Please enter a valid page number between 1 and {0} +DataContentViewerHex.goToPageTextField.err=Invalid page number +DataContentViewerHex.setDataView.errorText=(offset {0}-{1} could not be read) +DataContentViewerHex.title=Hex +DataContentViewerHex.toolTip=Displays the binary contents of a file as hexidecimal, with bytes that are displayable as ASCII characters on the right. +DataContentViewerMedia.title=Media +DataContentViewerMedia.toolTip=Displays supported multimedia files (images, videos, audio) +DataContentViewerString.goToPageTextField.msgDlg=Please enter a valid page number between 1 and {0} +DataContentViewerString.goToPageTextField.err=Invalid page number +DataContentViewerString.setDataView.errorText=(offset {0}-{1} could not be read) +DataContentViewerString.setDataView.errorNoText=(offset {0}-{1} contains no text) +DataContentViewerString.title=Strings +DataContentViewerString.toolTip=Displays ASCII and Unicode strings extracted from the file. +DataResultPanel.dummyNodeDisplayName=Please Wait... +DataResultViewerTable.firstColLbl=Name +DataResultViewerTable.illegalArgExc.noChildFromParent=Couldn't get a child Node from the given parent. +DataResultViewerTable.illegalArgExc.childWithoutPropertySet=Child Node doesn't have the regular PropertySet. +DataResultViewerTable.title=Table +DataResultViewerTable.dummyNodeDisplayName=Please Wait... +DataResultViewerThumbnail.title=Thumbnail +DataResultViewerThumbnail.goToPageTextField.msgDlg=Please enter a valid page number between 1 and {0} +DataResultViewerThumbnail.goToPageTextField.err=Invalid page number +DataResultViewerThumbnail.genThumbs=Generating Thumbnails... +DataResultViewerThumbnail.pageNumbers.curOfTotal={0} of {1} +FXVideoPanel.mediaPane.infoLabel=Playback of deleted videos is not supported, use an external player. +FXVideoPanel.progress.bufferingFile=Buffering {0} +FXVideoPanel.progressLabel.buffering=Buffering... +FXVideoPanel.media.unsupportedFormat=Unsupported Format. +GeneralOptionsPanelController.moduleErr=Module Error +GeneralOptionsPanelController.moduleErr.msg=A module caused an error listening to GeneralOptionsPanelController updates. See log to determine which module. Some data could be incomplete. +GstVideoPanel.cannotProcFile.err=The media player cannot process this file. +GstVideoPanel.initGst.gstException.msg=Error initializing gstreamer for audio/video viewing and frame extraction capabilities. Video and audio viewing will be disabled. +GstVideoPanel.initGst.otherException.msg=Error initializing gstreamer for audio/video viewing frame extraction capabilities. Video and audio viewing will be disabled. +GstVideoPanel.setupVideo.infoLabel.text=Playback of deleted videos is not supported, use an external player. +GstVideoPanel.exception.problemFile.msg=Cannot capture frames from this file ({0}). +GstVideoPanel.exception.problemPlay.msg=Problem with video file; problem when attempting to play while obtaining duration. +GstVideoPanel.exception.problemPause.msg=Problem with video file; problem when attempting to pause while obtaining duration. +GstVideoPanel.exception.problemPauseCaptFrame.msg=Problem with video file; problem when attempting to pause while capturing a frame. +GstVideoPanel.exception.problemPlayCaptFrame.msg=Problem with video file; problem when attempting to play while capturing a frame. +GstVideoPanel.exception.problemStopCaptFrame.msg=Problem with video file; problem when attempting to stop while capturing a frame. +GstVideoPanel.progress.buffering=Buffering... +GstVideoPanel.progressLabel.bufferingErr=Error buffering file +MediaViewImagePanel.imgFileTooLarge.msg=Could not load image file (too large)\: {0} +ProductInformationPanel.actVerboseLogging.text=Activate verbose logging +ProductInformationPanel.verbLoggingEnabled.text=Verbose logging enabled +ProductInformationPanel.propertyUnknown.text=unknown +ProductInformationPanel.getVMValue.text={0} {1} +TableFilterNode.displayName.text=Name diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle_ja.properties new file mode 100644 index 0000000000..19e5b3b3c7 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle_ja.properties @@ -0,0 +1,115 @@ +CTL_DataContentTopComponent=\u30C7\u30FC\u30BF\u30B3\u30F3\u30C6\u30F3\u30C4 +HINT_DataContentTopComponent=\u3053\u308C\u306F\u30C7\u30FC\u30BF\u30B3\u30F3\u30C6\u30F3\u30C4\u306E\u30A6\u30A3\u30F3\u30C9\u30A6\u3067\u3059 +HINT_NodeTableTopComponent=\u3053\u308C\u306F\u30C7\u30FC\u30BF\u7D50\u679C\u306E\u30A6\u30A3\u30F3\u30C9\u30A6\u3067\u3059 +OpenIDE-Module-Name=\u4E3B\u8981\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8 +DataContentViewerHex.pageLabel.text_1=\u30DA\u30FC\u30B8\uFF1A +DataContentViewerHex.currentPageLabel.text_1=1 +DataContentViewerHex.totalPageLabel.text_1=100 +DataContentViewerString.pageLabel.text_1=\u30DA\u30FC\u30B8\uFF1A +DataContentViewerString.currentPageLabel.text_1=1 +DataContentViewerString.totalPageLabel.text_1=100 +DataContentViewerHex.pageLabel2.text=\u30DA\u30FC\u30B8 +DataContentViewerString.pageLabel2.text=\u30DA\u30FC\u30B8 +Format_OperatingSystem_Value={0} \u30D0\u30FC\u30B8\u30E7\u30F3 {1} \u30A2\u30FC\u30AD\u30C6\u30AF\u30C1\u30E3\u3000{2} +URL_ON_IMG=http\://www.sleuthkit.org/ +LBL_Close=\u9589\u3058\u308B +DataContentViewerString.copyMenuItem.text=\u30B3\u30D4\u30FC +DataContentViewerHex.copyMenuItem.text=\u30B3\u30D4\u30FC +DataContentViewerString.selectAllMenuItem.text=\u3059\u3079\u3066\u9078\u629E +DataContentViewerHex.selectAllMenuItem.text=\u3059\u3079\u3066\u9078\u629E +DataContentViewerArtifact.totalPageLabel.text=100 +DataContentViewerArtifact.pageLabel2.text=\u7D50\u679C +DataContentViewerArtifact.currentPageLabel.text=1 +DataContentViewerArtifact.copyMenuItem.text=\u30B3\u30D4\u30FC +DataContentViewerArtifact.selectAllMenuItem.text=\u3059\u3079\u3066\u9078\u629E +DataContentViewerArtifact.pageLabel.text=\u7D50\u679C\uFF1A +AdvancedConfigurationDialog.applyButton.text=OK +DataContentViewerString.goToPageLabel.text=\u4E0B\u8A18\u306E\u30DA\u30FC\u30B8\u3078\u79FB\u52D5\uFF1A +DataContentViewerHex.goToPageLabel.text=\u4E0B\u8A18\u306E\u30DA\u30FC\u30B8\u3078\u79FB\u52D5\uFF1A +DataContentViewerString.languageLabel.text=\u30B9\u30AF\u30EA\u30D7\u30C8\uFF1A +DataContentViewerString.languageCombo.toolTipText=\u30D0\u30A4\u30CA\u30EA\u30B9\u30C8\u30EA\u30F3\u30B0\u306E\u51E6\u7406\uFF08\u62BD\u51FA\u304A\u3088\u3073\u30C7\u30B3\u30FC\u30C9\uFF09\u306E\u969B\u306B\u4F7F\u7528\u3059\u308B\u8A00\u8A9E +DataResultViewerThumbnail.pageLabel.text=\u30DA\u30FC\u30B8\uFF1A +DataResultViewerThumbnail.pagesLabel.text=\u30DA\u30FC\u30B8\uFF1A +DataResultViewerThumbnail.imagesLabel.text=\u30A4\u30E1\u30FC\u30B8\uFF1A +DataResultViewerThumbnail.imagesRangeLabel.text=- +DataResultViewerThumbnail.pageNumLabel.text=- +DataResultViewerThumbnail.goToPageLabel.text=\u4E0B\u8A18\u306E\u30DA\u30FC\u30B8\u306B\u79FB\u52D5\uFF1A +GeneralPanel.jLabel1.text=\u30D5\u30A1\u30A4\u30EB\u3092\u9078\u629E\u3059\u308B\u969B\uFF1A +GeneralPanel.useBestViewerRB.text=\u6700\u3082\u5C02\u9580\u7684\u306A\u30D5\u30A1\u30A4\u30EB\u30D3\u30E5\u30FC\u30A2\u306B\u5909\u66F4 +GeneralPanel.keepCurrentViewerRB.text=\u305D\u306E\u307E\u307E\u540C\u3058\u30D5\u30A1\u30A4\u30EB\u30D3\u30E5\u30FC\u30A2\u3092\u4F7F\u7528 +GeneralPanel.useBestViewerRB.toolTipText=\u4F8B\u3048\u3070\u3001JPEG\u304C\u9078\u629E\u3055\u308C\u305F\u969B\u306B\u306FHEX\u304B\u3089\u30E1\u30C7\u30A3\u30A2\u306B\u5909\u66F4\u3059\u308B\u3002 +GeneralPanel.keepCurrentViewerRB.toolTipText=\u4F8B\u3048\u3070\u3001JPEG\u304C\u9078\u629E\u3055\u308C\u305F\u969B\u306B\u305D\u306E\u307E\u307EHEX\u30D3\u30E5\u30FC\u3092\u4F7F\u7528\u3002 +AdvancedConfigurationDialog.cancelButton.text=\u30AD\u30E3\u30F3\u30BB\u30EB +DataResultPanel.directoryTablePath.text=\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u30D1\u30B9 +DataResultPanel.numberMatchLabel.text=0 +DataResultPanel.matchLabel.text=\u7D50\u679C +MediaViewVideoPanel.pauseButton.text=\u25BA +MediaViewVideoPanel.progressLabel.text=00\:00 +MediaViewVideoPanel.infoLabel.text=\u60C5\u5831 +GeneralPanel.jLabel2.text=\u30A2\u30A4\u30C6\u30E0\u3092\u8868\u793A\u3059\u308B\u969B\uFF1A +GeneralPanel.useLocalTimeRB.text=\u30ED\u30FC\u30AB\u30EB\u30BF\u30A4\u30E0\u30BE\u30FC\u30F3\u3092\u4F7F\u7528 +GeneralPanel.useGMTTimeRB.text=GMT\u3092\u4F7F\u7528 +GeneralPanel.jLabel3.text=\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u30EA\u30B9\u30C6\u30A3\u30F3\u30B0\u5185\u306E\u65E2\u77E5\u30D5\u30A1\u30A4\u30EB\u306F\u4E0B\u8A18\u306E\u5834\u5408\u306B\u96A0\u3059\uFF1A +GeneralPanel.viewsHideKnownCB.text=\u30D3\u30E5\u30FC\u304B\u3089\u9078\u629E\u3057\u3066\u3044\u308B\u5834\u5408 +GeneralPanel.dataSourcesHideKnownCB.text=\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9\u304B\u3089\u9078\u629E\u3057\u3066\u3044\u308B\u5834\u5408 +DataContentViewerArtifact.waitText=\u30C7\u30FC\u30BF\u3092\u53D6\u8FBC\u307F\u304A\u3088\u3073\u6E96\u5099\u4E2D\u3002\u3057\u3070\u3089\u304F\u304A\u5F85\u3061\u4E0B\u3055\u3044\u2026 +DataContentViewerArtifact.errorText=\u7D50\u679C\u306E\u53D6\u8FBC\u307F\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F +DataContentViewerArtifact.title=\u7D50\u679C +DataContentViewerArtifact.toolTip=\u30D5\u30A1\u30A4\u30EB\u306B\u95A2\u9023\u3059\u308B\u7D50\u679C\u3092\u8868\u793A\u3057\u307E\u3059 +DataContentViewerHex.goToPageTextField.msgDlg=\uFF11\u304B\u3089 {0}\u306E\u9593\u306E\u6709\u52B9\u306A\u30DA\u30FC\u30B8\u6570\u3092\u5165\u529B\u3057\u3066\u4E0B\u3055\u3044 +DataContentViewerHex.goToPageTextField.err=\u7121\u52B9\u306A\u30DA\u30FC\u30B8\u6570 +DataContentViewerHex.setDataView.errorText=\uFF08\u30AA\u30D5\u30BB\u30C3\u30C8{0}-{1}\u306F\u8AAD\u307F\u53D6\u308C\u307E\u305B\u3093\u3067\u3057\u305F\uFF09 +DataContentViewerHex.title=HEX +DataContentViewerHex.toolTip=\u30D0\u30A4\u30CA\u30EA\u30B3\u30F3\u30C6\u30F3\u30C4\u3092HEX\u30D5\u30A1\u30A4\u30EB\u3068\u3057\u3066\u8868\u793A\u3057\u3001ASCII\u3068\u3057\u3066\u8868\u793A\u3067\u304D\u308B\u30D0\u30A4\u30C8\u306F\u53F3\u5074\u306B\u8868\u793A\u3057\u307E\u3059\u3002 +DataContentViewerMedia.title=\u30E1\u30C7\u30A3\u30A2 +DataContentViewerMedia.toolTip=\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u308B\u30DE\u30EB\u30C1\u30E1\u30C7\u30A3\u30A2\u30D5\u30A1\u30A4\u30EB\uFF08\u753B\u50CF\u3001\u30D3\u30C7\u30AA\u3001\u30AA\u30FC\u30C7\u30A3\u30AA\uFF09\u3092\u8868\u793A\u3057\u307E\u3059\u3002 +DataContentViewerString.goToPageTextField.msgDlg=\uFF11\u304B\u3089{0}\u306E\u9593\u306E\u6709\u52B9\u306A\u30DA\u30FC\u30B8\u6570\u3092\u5165\u529B\u3057\u3066\u4E0B\u3055\u3044 +DataContentViewerString.goToPageTextField.err=\u7121\u52B9\u306A\u30DA\u30FC\u30B8\u6570 +DataContentViewerString.setDataView.errorText=\uFF08\u30AA\u30D5\u30BB\u30C3\u30C8{0}-{1}\u306F\u8AAD\u307F\u53D6\u308C\u307E\u305B\u3093\u3067\u3057\u305F\uFF09\ +DataContentViewerString.setDataView.errorNoText=\uFF08\u30AA\u30D5\u30BB\u30C3\u30C8{0}-{1}\u306B\u306F\u30C6\u30AD\u30B9\u30C8\u304C\u3042\u308A\u307E\u305B\u3093\uFF09 +DataContentViewerString.title=\u30B9\u30C8\u30EA\u30F3\u30B0 +DataContentViewerString.toolTip=\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u62BD\u51FA\u3055\u308C\u305FASCII\u304A\u3088\u3073\u30E6\u30CB\u30B3\u30FC\u30C9\u306E\u30B9\u30C8\u30EA\u30F3\u30B0\u304C\u8868\u793A\u3055\u308C\u307E\u3059\u3002 +DataResultPanel.dummyNodeDisplayName=\u3057\u3070\u3089\u304F\u304A\u5F85\u3061\u304F\u3060\u3055\u3044\u2026 +DataResultViewerTable.firstColLbl=\u540D\u79F0 +DataResultViewerTable.illegalArgExc.noChildFromParent=\u6307\u5B9A\u3055\u308C\u305F\u30DA\u30A2\u30EC\u30F3\u30C8\u304B\u3089\u30C1\u30E3\u30A4\u30EB\u30C9\u30CE\u30FC\u30C9\u3092\u5165\u624B\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002 +DataResultViewerTable.illegalArgExc.childWithoutPropertySet=\u30C1\u30E3\u30A4\u30EB\u30C9\u30CE\u30FC\u30C9\u306F\u901A\u5E38\u306EPropertySet\u3092\u6301\u3063\u3066\u3044\u307E\u305B\u3093\u3002 +DataResultViewerTable.title=\u30C6\u30FC\u30D6\u30EB +DataResultViewerTable.dummyNodeDisplayName=\u3057\u3070\u3089\u304F\u304A\u5F85\u3061\u304F\u3060\u3055\u3044\u2026 +DataResultViewerThumbnail.title=\u30B5\u30E0\u30CD\u30A4\u30EB +DataResultViewerThumbnail.goToPageTextField.msgDlg=\uFF11\u304B\u3089{0}\u306E\u9593\u306E\u6709\u52B9\u306A\u30DA\u30FC\u30B8\u6570\u3092\u5165\u529B\u3057\u3066\u4E0B\u3055\u3044 +DataResultViewerThumbnail.goToPageTextField.err=\u7121\u52B9\u306A\u30DA\u30FC\u30B8\u6570 +DataResultViewerThumbnail.genThumbs=\u30B5\u30E0\u30CD\u30A4\u30EB\u3092\u4F5C\u6210\u4E2D\u2026 +DataResultViewerThumbnail.pageNumbers.curOfTotal={0}\uFF0F{1}\u3064\u76EE +FXVideoPanel.mediaPane.infoLabel=\u524A\u9664\u3055\u308C\u305F\u30D3\u30C7\u30AA\u306E\u518D\u751F\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u5916\u90E8\u30D7\u30EC\u30FC\u30E4\u30FC\u3092\u4F7F\u7528\u3057\u3066\u4E0B\u3055\u3044\u3002 +FXVideoPanel.progress.bufferingFile={0}\u3092\u30D0\u30C3\u30D5\u30A1\u30EA\u30F3\u30B0 +FXVideoPanel.progressLabel.buffering=\u30D0\u30C3\u30D5\u30A1\u30EA\u30F3\u30B0\u4E2D\u2026 +FXVideoPanel.media.unsupportedFormat=\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u306A\u3044\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8\u3067\u3059\u3002 +GeneralOptionsPanelController.moduleErr=\u30E2\u30B8\u30E5\u30FC\u30EB\u30A8\u30E9\u30FC +GeneralOptionsPanelController.moduleErr.msg=GeneralOptionsPanelController\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u3092\u78BA\u8A8D\u4E2D\u306B\u30E2\u30B8\u30E5\u30FC\u30EB\u304C\u30A8\u30E9\u30FC\u3092\u8D77\u3053\u3057\u307E\u3057\u305F\u3002\u3069\u306E\u30E2\u30B8\u30E5\u30FC\u30EB\u304B\u30ED\u30B0\u3067\u78BA\u8A8D\u3057\u3066\u4E0B\u3055\u3044\u3002\u4E00\u90E8\u306E\u30C7\u30FC\u30BF\u304C\u4E0D\u5B8C\u5168\u304B\u3082\u3057\u308C\u307E\u305B\u3093\u3002 +GstVideoPanel.cannotProcFile.err=\u30E1\u30C7\u30A4\u30A2\u30D7\u30EC\u30FC\u30E4\u30FC\u304C\u3053\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u51E6\u7406\u3067\u304D\u307E\u305B\u3093\u3002 +GstVideoPanel.initGst.gstException.msg=\u30AA\u30FC\u30C7\u30A3\u30AA\uFF0F\u30D3\u30C7\u30AA\u306E\u518D\u751F\u304A\u3088\u3073\u30D5\u30EC\u30FC\u30E0\u306E\u62BD\u51FA\u306B\u4F7F\u7528\u3059\u308BGStreamer\u306E\u521D\u671F\u5316\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u30D3\u30C7\u30AA\u304A\u3088\u3073\u30AA\u30FC\u30C7\u30A3\u30AA\u518D\u751F\u304C\u7121\u52B9\u5316\u3055\u308C\u307E\u3059\u3002 +GstVideoPanel.initGst.otherException.msg=\u30AA\u30FC\u30C7\u30A3\u30AA\uFF0F\u30D3\u30C7\u30AA\u306E\u518D\u751F\u304A\u3088\u3073\u30D5\u30EC\u30FC\u30E0\u306E\u62BD\u51FA\u306B\u4F7F\u7528\u3059\u308BGStreamer\u306E\u521D\u671F\u5316\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u30D3\u30C7\u30AA\u304A\u3088\u3073\u30AA\u30FC\u30C7\u30A3\u30AA\u518D\u751F\u304C\u7121\u52B9\u5316\u3055\u308C\u307E\u3059\u3002 +GstVideoPanel.setupVideo.infoLabel.text=\u524A\u9664\u3055\u308C\u305F\u30D3\u30C7\u30AA\u306E\u518D\u751F\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u5916\u90E8\u30D7\u30EC\u30FC\u30E4\u30FC\u3092\u4F7F\u7528\u3057\u3066\u4E0B\u3055\u3044\u3002 +GstVideoPanel.exception.problemFile.msg=\u30D5\u30A1\u30A4\u30EB({0})\u304B\u3089\u306F\u30D5\u30EC\u30FC\u30E0\u3092\u62BD\u51FA\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002 +GstVideoPanel.exception.problemPlay.msg=\u30D3\u30C7\u30AA\u30D5\u30A1\u30A4\u30EB\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\uFF1B\u9577\u3055\u3092\u78BA\u8A8D\u4E2D\u306B\u518D\u751F\u3092\u3057\u3088\u3046\u3068\u3057\u305F\u969B\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 +LBL_Description=
\n \u88FD\u54C1\u30D0\u30FC\u30B8\u30E7\u30F3\uFF1A {0} ({9})
Sleuth Kit\u30D0\u30FC\u30B8\u30E7\u30F3\uFF1A {7}
Netbeans RCP\u30D3\u30EB\u30C9\: {8}
Java\: {1}; {2}
\u30B7\u30B9\u30C6\u30E0\uFF1A {3}; {4}; {5}
\u30E6\u30FC\u30B6\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u540D {6}
+LBL_Copyright=
Autopsy™\u306FSleuth Kit™\u3084\u305D\u306E\u4ED6\u30C4\u30FC\u30EB\u3092\u57FA\u306B\u3057\u305F\u30C7\u30B8\u30BF\u30EB\u30FB\u30D5\u30A9\u30EC\u30F3\u30B8\u30C3\u30AF\u30FB\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0\u3067\u3059\u3002

Copyright © 2003-2013. \u8A73\u7D30\u306F\u4E0B\u8A18\u3092\u3054\u89A7\u4E0B\u3055\u3044\u3002 http\://www.sleuthkit.org.
+GstVideoPanel.exception.problemPause.msg=\u30D3\u30C7\u30AA\u30D5\u30A1\u30A4\u30EB\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u9577\u3055\u3092\u78BA\u8A8D\u4E2D\u306B\u4E00\u6642\u505C\u6B62\u3092\u3057\u3088\u3046\u3068\u3057\u305F\u969B\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 +GstVideoPanel.exception.problemPauseCaptFrame.msg=\u30D3\u30C7\u30AA\u30D5\u30A1\u30A4\u30EB\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u30D5\u30EC\u30FC\u30E0\u306E\u62BD\u51FA\u4E2D\u306B\u4E00\u6642\u505C\u6B62\u3092\u3057\u3088\u3046\u3068\u3057\u305F\u969B\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 +GstVideoPanel.exception.problemPlayCaptFrame.msg=\u30D3\u30C7\u30AA\u30D5\u30A1\u30A4\u30EB\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u30D5\u30EC\u30FC\u30E0\u306E\u62BD\u51FA\u4E2D\u306B\u518D\u751F\u3057\u3088\u3046\u3068\u3057\u305F\u969B\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 +GstVideoPanel.exception.problemStopCaptFrame.msg=\u30D3\u30C7\u30AA\u30D5\u30A1\u30A4\u30EB\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u30D5\u30EC\u30FC\u30E0\u306E\u62BD\u51FA\u4E2D\u306B\u505C\u6B62\u3057\u3088\u3046\u3068\u3057\u305F\u969B\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 +GstVideoPanel.progress.buffering=\u30D0\u30C3\u30D5\u30A1\u30EA\u30F3\u30B0\u4E2D\u2026 +GstVideoPanel.progressLabel.bufferingErr=\u30D5\u30A1\u30A4\u30EB\u306E\u30D0\u30C3\u30D5\u30A1\u30EA\u30F3\u30B0\u30A8\u30E9\u30FC +MediaViewImagePanel.imgFileTooLarge.msg=\u753B\u50CF\u30D5\u30A1\u30A4\u30EB\u3092\u8AAD\u307F\u8FBC\u3081\u307E\u305B\u3093\u3067\u3057\u305F\uFF08\u5927\u304D\u3059\u304E\u3067\u3059\uFF09\uFF1A {0} +ProductInformationPanel.actVerboseLogging.text=Verbose\u30ED\u30B0\u3092\u6709\u52B9\u5316 +ProductInformationPanel.verbLoggingEnabled.text=Verbose\u30ED\u30B0\u304C\u6709\u52B9\u3067\u3059 +ProductInformationPanel.propertyUnknown.text=\u4E0D\u660E +ProductInformationPanel.getVMValue.text={0} {1} +TableFilterNode.displayName.text=\u540D\u79F0 +CTL_DataContentAction=\u30C7\u30FC\u30BF\u30B3\u30F3\u30C6\u30F3\u30C4 +OptionsCategory_Name_General=\u4E00\u822C +OptionsCategory_Keywords_General=\u4E00\u822C +CTL_CustomAboutAction=Autopsy\u306B\u3064\u3044\u3066 +DataContentViewerHex.ofLabel.text_1=of +DataContentViewerString.ofLabel.text_1=of +DataContentViewerArtifact.ofLabel.text=of \ No newline at end of file diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/CustomAboutAction.java b/Core/src/org/sleuthkit/autopsy/corecomponents/CustomAboutAction.java index 37d21e2748..8fd75651e5 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/CustomAboutAction.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/CustomAboutAction.java @@ -37,7 +37,7 @@ import org.sleuthkit.autopsy.coreutils.Logger; ProductInformationPanel pip = new ProductInformationPanel(); DialogDescriptor descriptor = new DialogDescriptor( pip, - NbBundle.getMessage(AboutAction.class, "About_title"), + NbBundle.getMessage(CustomAboutAction.class, "CTL_CustomAboutAction"), true, new Object[0], null, diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerArtifact.java b/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerArtifact.java index f979f74688..4cc0e394a6 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerArtifact.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerArtifact.java @@ -27,6 +27,8 @@ import java.util.ArrayList; import java.util.List; import java.util.concurrent.ExecutionException; import java.util.logging.Level; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import javax.swing.JMenuItem; import javax.swing.JTextPane; @@ -53,8 +55,8 @@ import org.sleuthkit.datamodel.TskCoreException; public class DataContentViewerArtifact extends javax.swing.JPanel implements DataContentViewer{ private final static Logger logger = Logger.getLogger(DataContentViewerArtifact.class.getName()); - private final static String WAIT_TEXT = "Retrieving and preparing data, please wait..."; - private final static String ERROR_TEXT = "Error retrieving result"; + private final static String WAIT_TEXT = NbBundle.getMessage(DataContentViewerArtifact.class, "DataContentViewerArtifact.waitText"); + private final static String ERROR_TEXT = NbBundle.getMessage(DataContentViewerArtifact.class, "DataContentViewerArtifact.errorText"); private Node currentNode; // @@@ Remove this when the redundant setNode() calls problem is fixed. private int currentPage = 1; private final Object lock = new Object(); @@ -288,12 +290,12 @@ public class DataContentViewerArtifact extends javax.swing.JPanel implements Dat @Override public String getTitle() { - return "Results"; + return NbBundle.getMessage(this.getClass(), "DataContentViewerArtifact.title"); } @Override public String getToolTip() { - return "Displays Results associated with the file"; + return NbBundle.getMessage(this.getClass(), "DataContentViewerArtifact.toolTip"); } @Override diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerHex.java b/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerHex.java index 0e28a337f8..fbf63346fb 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerHex.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerHex.java @@ -23,6 +23,8 @@ import java.awt.Cursor; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.logging.Level; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import javax.swing.JMenuItem; import javax.swing.JOptionPane; @@ -257,8 +259,13 @@ public class DataContentViewerHex extends javax.swing.JPanel implements DataCont pageNumber = totalPages + 1; } if (pageNumber > totalPages || pageNumber < 1) { - JOptionPane.showMessageDialog(this, "Please enter a valid page number between 1 and " + totalPages, - "Invalid page number", JOptionPane.WARNING_MESSAGE); + JOptionPane.showMessageDialog(this, + NbBundle.getMessage(this.getClass(), + "DataContentViewerHex.goToPageTextField.msgDlg", + totalPages), + NbBundle.getMessage(this.getClass(), + "DataContentViewerHex.goToPageTextField.err"), + JOptionPane.WARNING_MESSAGE); return; } setDataView(pageNumber); @@ -309,16 +316,16 @@ public class DataContentViewerHex extends javax.swing.JPanel implements DataCont try { bytesRead = dataSource.read(data, offset, pageLength); // read the data } catch (TskException ex) { - errorText = "(offset " + offset + "-" + (offset + pageLength) - + " could not be read)"; + errorText = NbBundle.getMessage(this.getClass(), "DataContentViewerHex.setDataView.errorText", offset, + offset + pageLength); logger.log(Level.WARNING, "Error while trying to show the hex content.", ex); } } // set the data on the bottom and show it if (bytesRead <= 0) { - errorText = "(offset " + offset + "-" + (offset + pageLength) - + " could not be read)"; + errorText = NbBundle.getMessage(this.getClass(), "DataContentViewerHex.setDataView.errorText", offset, + offset + pageLength); } @@ -378,13 +385,12 @@ public class DataContentViewerHex extends javax.swing.JPanel implements DataCont @Override public String getTitle() { - return "Hex"; + return NbBundle.getMessage(this.getClass(), "DataContentViewerHex.title"); } @Override public String getToolTip() { - return "Displays the binary contents of a file as hexidecimal, with " - + "bytes that are displayable as ASCII characters on the right."; + return NbBundle.getMessage(this.getClass(), "DataContentViewerHex.toolTip"); } @Override diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerMedia.java b/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerMedia.java index 7bd6c0d1cd..d7a2c63814 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerMedia.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerMedia.java @@ -24,6 +24,8 @@ import java.awt.Dimension; import java.util.Arrays; import java.util.logging.Level; import javax.imageio.ImageIO; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import org.openide.nodes.Node; import org.openide.util.lookup.ServiceProvider; @@ -164,12 +166,12 @@ public class DataContentViewerMedia extends javax.swing.JPanel implements DataCo @Override public String getTitle() { - return "Media"; + return NbBundle.getMessage(this.getClass(), "DataContentViewerMedia.title"); } @Override public String getToolTip() { - return "Displays supported multimedia files (images, videos, audio)"; + return NbBundle.getMessage(this.getClass(), "DataContentViewerMedia.toolTip"); } @Override diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerString.java b/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerString.java index 5223f61920..98dc842a1d 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerString.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerString.java @@ -24,6 +24,8 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.List; import java.util.logging.Level; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import javax.swing.JMenuItem; import javax.swing.JOptionPane; @@ -286,8 +288,13 @@ public class DataContentViewerString extends javax.swing.JPanel implements DataC pageNumber = maxPage + 1; } if (pageNumber > maxPage || pageNumber < 1) { - JOptionPane.showMessageDialog(this, "Please enter a valid page number between 1 and " + maxPage, - "Invalid page number", JOptionPane.WARNING_MESSAGE); + JOptionPane.showMessageDialog(this, + NbBundle.getMessage(this.getClass(), + "DataContentViewerString.goToPageTextField.msgDlg", + maxPage), + NbBundle.getMessage(this.getClass(), + "DataContentViewerString.goToPageTextField.err"), + JOptionPane.WARNING_MESSAGE); return; } currentOffset = (pageNumber - 1) * pageLength; @@ -346,8 +353,9 @@ public class DataContentViewerString extends javax.swing.JPanel implements DataC try { bytesRead = dataSource.read(data, offset, pageLength); // read the data } catch (TskException ex) { - text = "(offset " + currentOffset + "-" + (currentOffset + pageLength) - + " could not be read)"; + text = NbBundle.getMessage(this.getClass(), + "DataContentViewerString.setDataView.errorText", currentOffset, + currentOffset + pageLength); logger.log(Level.WARNING, "Error while trying to show the String content.", ex); } } @@ -359,12 +367,13 @@ public class DataContentViewerString extends javax.swing.JPanel implements DataC StringExtractResult res = stringExtract.extract(data, bytesRead, 0); text = res.getText(); if (text.trim().isEmpty()) { - text = "(offset " + currentOffset + "-" + (currentOffset + pageLength) - + " contains no text)"; + text = NbBundle.getMessage(this.getClass(), + "DataContentViewerString.setDataView.errorNoText", currentOffset, + currentOffset + pageLength); } } else { - text = "(offset " + currentOffset + "-" + (currentOffset + pageLength) - + " could not be read)"; + text = NbBundle.getMessage(this.getClass(), "DataContentViewerString.setDataView.errorText", currentOffset, + currentOffset + pageLength); } // disable or enable the next button @@ -459,12 +468,12 @@ public class DataContentViewerString extends javax.swing.JPanel implements DataC @Override public String getTitle() { - return "Strings"; + return NbBundle.getMessage(this.getClass(), "DataContentViewerString.title"); } @Override public String getToolTip() { - return "Displays ASCII and Unicode strings extracted from the file."; + return NbBundle.getMessage(this.getClass(), "DataContentViewerString.toolTip"); } @Override diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultPanel.java b/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultPanel.java index eb5ecf409b..9bd06d8718 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultPanel.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultPanel.java @@ -36,6 +36,7 @@ import org.openide.nodes.NodeListener; import org.openide.nodes.NodeMemberEvent; import org.openide.nodes.NodeReorderEvent; import org.openide.util.Lookup; +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.corecomponentinterfaces.DataContent; import org.sleuthkit.autopsy.corecomponentinterfaces.DataResult; @@ -67,8 +68,9 @@ public class DataResultPanel extends javax.swing.JPanel implements DataResult, C private final DummyNodeListener dummyNodeListener = new DummyNodeListener(); private static final Logger logger = Logger.getLogger(DataResultPanel.class.getName() ); - private boolean listeningToTabbedPane = false; - + private boolean listeningToTabbedPane = false; + private static final String DUMMY_NODE_DISPLAY_NAME = NbBundle.getMessage(DataResultPanel.class, + "DataResultPanel.dummyNodeDisplayName"); /** * Creates new DataResultPanel * Default constructor, needed mostly for the palette/UI builder @@ -619,7 +621,7 @@ public class DataResultPanel extends javax.swing.JPanel implements DataResult, C } private class DummyNodeListener implements NodeListener { - private static final String DUMMY_NODE_DISPLAY_NAME = "Please Wait..."; + private volatile boolean load = true; public void reset() { diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerTable.java b/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerTable.java index eac9dd763a..db03606920 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerTable.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerTable.java @@ -29,6 +29,8 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Set; import java.util.logging.Level; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import javax.swing.JTable; import javax.swing.ListSelectionModel; @@ -57,10 +59,11 @@ import org.sleuthkit.autopsy.corecomponentinterfaces.DataResultViewer; //@ServiceProvider(service = DataResultViewer.class) public class DataResultViewerTable extends AbstractDataResultViewer { - private String firstColumnLabel = "Name"; + private String firstColumnLabel = NbBundle.getMessage(DataResultViewerTable.class, "DataResultViewerTable.firstColLbl"); private Set propertiesAcc = new LinkedHashSet<>(); private static final Logger logger = Logger.getLogger(DataResultViewerTable.class.getName()); private final DummyNodeListener dummyNodeListener = new DummyNodeListener(); + private static final String DUMMY_NODE_DISPLAY_NAME = NbBundle.getMessage(DataResultViewerTable.class, "DataResultViewerTable.dummyNodeDisplayName"); /** * Creates a DataResultViewerTable object that is compatible with node @@ -154,7 +157,8 @@ import org.sleuthkit.autopsy.corecomponentinterfaces.DataResultViewer; Node firstChild = parent.getChildren().getNodeAt(0); if (firstChild == null) { - throw new IllegalArgumentException("Couldn't get a child Node from the given parent."); + throw new IllegalArgumentException( + NbBundle.getMessage(this.getClass(), "DataResultViewerTable.illegalArgExc.noChildFromParent")); } else { for (PropertySet ps : firstChild.getPropertySets()) { if (ps.getName().equals(Sheet.PROPERTIES)) { @@ -162,7 +166,8 @@ import org.sleuthkit.autopsy.corecomponentinterfaces.DataResultViewer; } } - throw new IllegalArgumentException("Child Node doesn't have the regular PropertySet."); + throw new IllegalArgumentException( + NbBundle.getMessage(this.getClass(), "DataResultViewerTable.illegalArgExc.childWithoutPropertySet")); } } @@ -180,7 +185,8 @@ import org.sleuthkit.autopsy.corecomponentinterfaces.DataResultViewer; Property[] properties = null; if (firstChild == null) { - throw new IllegalArgumentException("Couldn't get a child Node from the given parent."); + throw new IllegalArgumentException( + NbBundle.getMessage(this.getClass(), "DataResultViewerTable.illegalArgExc.noChildFromParent")); } else { Set allProperties = new LinkedHashSet(); while (firstChild != null) { @@ -410,7 +416,7 @@ import org.sleuthkit.autopsy.corecomponentinterfaces.DataResultViewer; @Override public String getTitle() { - return "Table"; + return NbBundle.getMessage(this.getClass(), "DataResultViewerTable.title"); } @Override @@ -481,7 +487,6 @@ import org.sleuthkit.autopsy.corecomponentinterfaces.DataResultViewer; } private class DummyNodeListener implements NodeListener { - private static final String DUMMY_NODE_DISPLAY_NAME = "Please Wait..."; private volatile boolean load = true; public void reset() { diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerThumbnail.java b/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerThumbnail.java index c1557e37dd..a2fdb54939 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerThumbnail.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerThumbnail.java @@ -27,6 +27,8 @@ import java.util.Arrays; import java.util.concurrent.ExecutionException; import java.util.logging.Level; import javax.swing.JOptionPane; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import javax.swing.ListSelectionModel; import javax.swing.SwingWorker; @@ -331,7 +333,7 @@ import org.sleuthkit.datamodel.TskCoreException; @Override public String getTitle() { - return "Thumbnail"; + return NbBundle.getMessage(this.getClass(), "DataResultViewerThumbnail.title"); } @Override @@ -384,8 +386,13 @@ import org.sleuthkit.datamodel.TskCoreException; } if (newPage > totalPages || newPage < 1) { - JOptionPane.showMessageDialog(this, "Please enter a valid page number between 1 and " + totalPages, - "Invalid page number", JOptionPane.WARNING_MESSAGE); + JOptionPane.showMessageDialog(this, + NbBundle.getMessage(this.getClass(), + "DataResultViewerThumbnail.goToPageTextField.msgDlg", + totalPages), + NbBundle.getMessage(this.getClass(), + "DataResultViewerThumbnail.goToPageTextField.err"), + JOptionPane.WARNING_MESSAGE); return; } @@ -411,7 +418,8 @@ import org.sleuthkit.datamodel.TskCoreException; pagePrevButton.setEnabled(false); pageNextButton.setEnabled(false); goToPageField.setEnabled(false); - progress = ProgressHandleFactory.createHandle("Generating Thumbnails..."); + progress = ProgressHandleFactory.createHandle( + NbBundle.getMessage(this.getClass(), "DataResultViewerThumbnail.genThumbs")); progress.start(); progress.switchToIndeterminate(); Node root = em.getRootContext(); @@ -449,7 +457,9 @@ import org.sleuthkit.datamodel.TskCoreException; pageNumLabel.setText(""); imagesRangeLabel.setText(""); } else { - pageNumLabel.setText(Integer.toString(curPage) + " of " + Integer.toString(totalPages)); + pageNumLabel.setText( + NbBundle.getMessage(this.getClass(), "DataResultViewerThumbnail.pageNumbers.curOfTotal", + Integer.toString(curPage), Integer.toString(totalPages))); final int imagesFrom = (curPage - 1) * ThumbnailViewChildren.IMAGES_PER_PAGE + 1; final int imagesTo = curPageImages + (curPage - 1) * ThumbnailViewChildren.IMAGES_PER_PAGE; imagesRangeLabel.setText(imagesFrom + "-" + imagesTo); diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/FXVideoPanel.java b/Core/src/org/sleuthkit/autopsy/corecomponents/FXVideoPanel.java index 584b140934..12156aad2c 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/FXVideoPanel.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/FXVideoPanel.java @@ -62,6 +62,7 @@ import javax.swing.SwingWorker; import org.netbeans.api.progress.ProgressHandle; import org.netbeans.api.progress.ProgressHandleFactory; import org.openide.util.Cancellable; +import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; import org.openide.util.lookup.ServiceProviders; import org.sleuthkit.autopsy.casemodule.Case; @@ -139,7 +140,7 @@ public class FXVideoPanel extends MediaViewVideoPanel { currentFile = file; final boolean deleted = file.isDirNameFlagSet(TskData.TSK_FS_NAME_FLAG_ENUM.UNALLOC); if (deleted) { - mediaPane.setInfoLabelText("Playback of deleted videos is not supported, use an external player."); + mediaPane.setInfoLabelText(NbBundle.getMessage(this.getClass(), "FXVideoPanel.mediaPane.infoLabel")); removeAll(); return; } @@ -242,13 +243,15 @@ public class FXVideoPanel extends MediaViewVideoPanel { @Override protected Object doInBackground() throws Exception { success = false; - progress = ProgressHandleFactory.createHandle("Buffering " + sFile.getName(), new Cancellable() { + progress = ProgressHandleFactory.createHandle( + NbBundle.getMessage(this.getClass(), "FXVideoPanel.progress.bufferingFile", sFile.getName()), + new Cancellable() { @Override public boolean cancel() { return ExtractMedia.this.cancel(true); } }); - mediaPane.setProgressLabelText("Buffering... "); + mediaPane.setProgressLabelText(NbBundle.getMessage(this.getClass(), "FXVideoPanel.progressLabel.buffering")); progress.start(); progress.switchToDeterminate(100); try { @@ -394,7 +397,7 @@ public class FXVideoPanel extends MediaViewVideoPanel { mediaView.setMediaPlayer(mediaPlayer); } catch (MediaException ex) { this.setProgressLabelText(""); - this.setInfoLabelText("Unsupported Format."); + this.setInfoLabelText(NbBundle.getMessage(this.getClass(), "FXVideoPanel.media.unsupportedFormat")); } } diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/GeneralOptionsPanelController.java b/Core/src/org/sleuthkit/autopsy/corecomponents/GeneralOptionsPanelController.java index 14b8ffec3f..42b95989c9 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/GeneralOptionsPanelController.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/GeneralOptionsPanelController.java @@ -10,6 +10,7 @@ import javax.swing.JComponent; import org.netbeans.spi.options.OptionsPanelController; import org.openide.util.HelpCtx; import org.openide.util.Lookup; +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; import java.util.logging.Level; import org.sleuthkit.autopsy.coreutils.Logger; @@ -20,7 +21,8 @@ iconBase = "org/sleuthkit/autopsy/corecomponents/general-options.png", position = 1, keywords = "#OptionsCategory_Keywords_General", keywordsCategory = "General") -@org.openide.util.NbBundle.Messages({"OptionsCategory_Name_General=General", "OptionsCategory_Keywords_General=general"}) +// moved to Bundle +//@org.openide.util.NbBundle.Messages({"OptionsCategory_Name_General=General", "OptionsCategory_Keywords_General=general"}) public final class GeneralOptionsPanelController extends OptionsPanelController { private GeneralPanel panel; @@ -81,7 +83,10 @@ public final class GeneralOptionsPanelController extends OptionsPanelController } catch (Exception e) { logger.log(Level.SEVERE, "GeneralOptionsPanelController listener threw exception", e); - MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to GeneralOptionsPanelController updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show( + NbBundle.getMessage(this.getClass(), "GeneralOptionsPanelController.moduleErr"), + NbBundle.getMessage(this.getClass(), "GeneralOptionsPanelController.moduleErr.msg"), + MessageNotifyUtil.MessageType.ERROR); } } @@ -90,7 +95,10 @@ public final class GeneralOptionsPanelController extends OptionsPanelController } catch (Exception e) { logger.log(Level.SEVERE, "GeneralOptionsPanelController listener threw exception", e); - MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to GeneralOptionsPanelController updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show( + NbBundle.getMessage(this.getClass(), "GeneralOptionsPanelController.moduleErr"), + NbBundle.getMessage(this.getClass(), "GeneralOptionsPanelController.moduleErr.msg"), + MessageNotifyUtil.MessageType.ERROR); } } } diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/GeneralPanel.form b/Core/src/org/sleuthkit/autopsy/corecomponents/GeneralPanel.form index a2c34ea3f8..432bd9b5c3 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/GeneralPanel.form +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/GeneralPanel.form @@ -148,6 +148,9 @@ + + + diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/GeneralPanel.java b/Core/src/org/sleuthkit/autopsy/corecomponents/GeneralPanel.java index 2b702bef4b..3d697b07ab 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/GeneralPanel.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/GeneralPanel.java @@ -20,6 +20,7 @@ package org.sleuthkit.autopsy.corecomponents; import java.util.prefs.Preferences; import org.openide.util.NbPreferences; +import org.sleuthkit.autopsy.datamodel.ContentUtils; final class GeneralPanel extends javax.swing.JPanel { @@ -33,6 +34,7 @@ final class GeneralPanel extends javax.swing.JPanel { GeneralPanel(GeneralOptionsPanelController controller) { this.controller = controller; initComponents(); + ContentUtils.setDisplayInLocalTime(useLocalTimeRB.isSelected()); // TODO listen to changes in form fields and call controller.changed() } @@ -80,6 +82,11 @@ final class GeneralPanel extends javax.swing.JPanel { buttonGroup3.add(useGMTTimeRB); org.openide.awt.Mnemonics.setLocalizedText(useGMTTimeRB, org.openide.util.NbBundle.getMessage(GeneralPanel.class, "GeneralPanel.useGMTTimeRB.text")); // NOI18N + useGMTTimeRB.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + useGMTTimeRBActionPerformed(evt); + } + }); org.openide.awt.Mnemonics.setLocalizedText(jLabel3, org.openide.util.NbBundle.getMessage(GeneralPanel.class, "GeneralPanel.jLabel3.text")); // NOI18N @@ -144,6 +151,10 @@ final class GeneralPanel extends javax.swing.JPanel { // TODO add your handling code here: }//GEN-LAST:event_useBestViewerRBActionPerformed + private void useGMTTimeRBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_useGMTTimeRBActionPerformed + ContentUtils.setDisplayInLocalTime(useLocalTimeRB.isSelected()); + }//GEN-LAST:event_useGMTTimeRBActionPerformed + void load() { boolean keepPreferredViewer = prefs.getBoolean(KEEP_PREFERRED_VIEWER, false); keepCurrentViewerRB.setSelected(keepPreferredViewer); diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/GstVideoPanel.java b/Core/src/org/sleuthkit/autopsy/corecomponents/GstVideoPanel.java index b28ba880f2..2dafec9ec0 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/GstVideoPanel.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/GstVideoPanel.java @@ -54,6 +54,7 @@ import org.netbeans.api.progress.ProgressHandleFactory; import org.openide.DialogDisplayer; import org.openide.NotifyDescriptor; import org.openide.util.Cancellable; +import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; import org.openide.util.lookup.ServiceProviders; import org.sleuthkit.autopsy.casemodule.Case; @@ -76,7 +77,7 @@ public class GstVideoPanel extends MediaViewVideoPanel { private boolean gstInited; private static final long MIN_FRAME_INTERVAL_MILLIS = 500; private static final long FRAME_CAPTURE_TIMEOUT_MILLIS = 1000; - private static final String MEDIA_PLAYER_ERROR_STRING = "The media player cannot process this file."; + private static final String MEDIA_PLAYER_ERROR_STRING = NbBundle.getMessage(GstVideoPanel.class, "GstVideoPanel.cannotProcFile.err"); //playback private long durationMillis = 0; private VideoProgressWorker videoProgressWorker; @@ -166,15 +167,15 @@ public class GstVideoPanel extends MediaViewVideoPanel { } catch (GstException e) { gstInited = false; logger.log(Level.SEVERE, "Error initializing gstreamer for audio/video viewing and frame extraction capabilities", e); - MessageNotifyUtil.Notify.error("Error initializing gstreamer for audio/video viewing and frame extraction capabilities. " - + " Video and audio viewing will be disabled. ", + MessageNotifyUtil.Notify.error( + NbBundle.getMessage(this.getClass(), "GstVideoPanel.initGst.gstException.msg"), e.getMessage()); return false; } catch (UnsatisfiedLinkError | NoClassDefFoundError | Exception e) { gstInited = false; logger.log(Level.SEVERE, "Error initializing gstreamer for audio/video viewing and extraction capabilities", e); - MessageNotifyUtil.Notify.error("Error initializing gstreamer for audio/video viewing frame extraction capabilities. " - + " Video and audio viewing will be disabled. ", + MessageNotifyUtil.Notify.error( + NbBundle.getMessage(this.getClass(), "GstVideoPanel.initGst.otherException.msg"), e.getMessage()); return false; } @@ -189,7 +190,7 @@ public class GstVideoPanel extends MediaViewVideoPanel { currentFile = file; final boolean deleted = file.isDirNameFlagSet(TskData.TSK_FS_NAME_FLAG_ENUM.UNALLOC); if (deleted) { - infoLabel.setText("Playback of deleted videos is not supported, use an external player."); + infoLabel.setText(NbBundle.getMessage(this.getClass(), "GstVideoPanel.setupVideo.infoLabel.text")); videoPanel.removeAll(); pauseButton.setEnabled(false); progressSlider.setEnabled(false); @@ -318,7 +319,8 @@ public class GstVideoPanel extends MediaViewVideoPanel { // throw exception if this file is known to be problematic if (badVideoFiles.contains(file.getName())) { - throw new Exception("Cannot capture frames from this file (" + file.getName() + ")."); + throw new Exception( + NbBundle.getMessage(this.getClass(), "GstVideoPanel.exception.problemFile.msg", file.getName())); } // set up a PlayBin2 object @@ -332,13 +334,13 @@ public class GstVideoPanel extends MediaViewVideoPanel { if (ret == StateChangeReturn.FAILURE) { // add this file to the set of known bad ones badVideoFiles.add(file.getName()); - throw new Exception("Problem with video file; problem when attempting to play while obtaining duration."); + throw new Exception(NbBundle.getMessage(this.getClass(), "GstVideoPanel.exception.problemPlay.msg")); } ret = playbin.pause(); if (ret == StateChangeReturn.FAILURE) { // add this file to the set of known bad ones badVideoFiles.add(file.getName()); - throw new Exception("Problem with video file; problem when attempting to pause while obtaining duration."); + throw new Exception(NbBundle.getMessage(this.getClass(), "GstVideoPanel.exception.problemPause.msg")); } playbin.getState(); @@ -364,7 +366,8 @@ public class GstVideoPanel extends MediaViewVideoPanel { if (ret == StateChangeReturn.FAILURE) { // add this file to the set of known bad ones badVideoFiles.add(file.getName()); - throw new Exception("Problem with video file; problem when attempting to pause while capturing a frame."); + throw new Exception( + NbBundle.getMessage(this.getClass(), "GstVideoPanel.exception.problemPauseCaptFrame.msg")); } playbin.getState(); @@ -377,7 +380,8 @@ public class GstVideoPanel extends MediaViewVideoPanel { if (ret == StateChangeReturn.FAILURE) { // add this file to the set of known bad ones badVideoFiles.add(file.getName()); - throw new Exception("Problem with video file; problem when attempting to play while capturing a frame."); + throw new Exception( + NbBundle.getMessage(this.getClass(), "GstVideoPanel.exception.problemPlayCaptFrame.msg")); } // wait for FrameCaptureRGBListener to finish @@ -394,7 +398,8 @@ public class GstVideoPanel extends MediaViewVideoPanel { if (ret == StateChangeReturn.FAILURE) { // add this file to the set of known bad ones badVideoFiles.add(file.getName()); - throw new Exception("Problem with video file; problem when attempting to stop while capturing a frame."); + throw new Exception( + NbBundle.getMessage(this.getClass(), "GstVideoPanel.exception.problemStopCaptFrame.msg")); } if (image == null) { @@ -705,7 +710,7 @@ public class GstVideoPanel extends MediaViewVideoPanel { return ExtractMedia.this.cancel(true); } }); - progressLabel.setText("Buffering... "); + progressLabel.setText(NbBundle.getMessage(this.getClass(), "GstVideoPanel.progress.buffering")); progress.start(); progress.switchToDeterminate(100); try { @@ -738,7 +743,7 @@ public class GstVideoPanel extends MediaViewVideoPanel { void playMedia() { if (jFile == null || !jFile.exists()) { - progressLabel.setText("Error buffering file"); + progressLabel.setText(NbBundle.getMessage(this.getClass(), "GstVideoPanel.progressLabel.bufferingErr")); return; } ClockTime dur = null; diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/MediaViewImagePanel.java b/Core/src/org/sleuthkit/autopsy/corecomponents/MediaViewImagePanel.java index e5acab4cb7..70505058bc 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/MediaViewImagePanel.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/MediaViewImagePanel.java @@ -33,6 +33,8 @@ import javafx.scene.image.ImageView; import javafx.scene.layout.BorderPane; import javax.imageio.ImageIO; import javax.swing.SwingUtilities; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.corelibs.ScalrWrapper; import org.sleuthkit.autopsy.coreutils.Logger; @@ -160,7 +162,9 @@ import org.sleuthkit.datamodel.ReadContentInputStream; return; } catch (OutOfMemoryError ex) { logger.log(Level.WARNING, "Could not load image file into media view (too large): " + fileName, ex); - MessageNotifyUtil.Notify.warn("Could not load image file (too large): " + file.getName(), ex.getMessage()); + MessageNotifyUtil.Notify.warn( + NbBundle.getMessage(this.getClass(), "MediaViewImagePanel.imgFileTooLarge.msg", file.getName()), + ex.getMessage()); return; } finally { try { diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/ProductInformationPanel.java b/Core/src/org/sleuthkit/autopsy/corecomponents/ProductInformationPanel.java index 0499404c42..81ad1dd840 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/ProductInformationPanel.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/ProductInformationPanel.java @@ -109,7 +109,8 @@ public class ProductInformationPanel extends JPanel implements HyperlinkListener jScrollPane2.setViewportView(description); verboseLoggingButton.setBackground(new java.awt.Color(255, 255, 255)); - verboseLoggingButton.setText("Activate verbose logging"); + verboseLoggingButton.setText( + NbBundle.getMessage(this.getClass(), "ProductInformationPanel.actVerboseLogging.text")); verboseLoggingButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { activateVerboseLogging(evt); @@ -196,7 +197,8 @@ private void jLabel1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:eve private void disableVerboseLoggingButton() { this.verboseLoggingButton.setEnabled(false); - this.verboseLoggingButton.setText("Verbose logging enabled"); + this.verboseLoggingButton.setText( + NbBundle.getMessage(this.getClass(), "ProductInformationPanel.verbLoggingEnabled.text")); } private void closeDialog() { @@ -225,17 +227,30 @@ private void jLabel1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:eve private static String getOperatingSystemValue() { return NbBundle.getMessage(ProductInformationPanel.class, "Format_OperatingSystem_Value", - System.getProperty("os.name", "unknown"), - System.getProperty("os.version", "unknown"), - System.getProperty("os.arch", "unknown")); + System.getProperty("os.name", + NbBundle.getMessage(ProductInformationPanel.class, + "ProductInformationPanel.propertyUnknown.text")), + System.getProperty("os.version", + NbBundle.getMessage(ProductInformationPanel.class, + "ProductInformationPanel.propertyUnknown.text")), + System.getProperty("os.arch", + NbBundle.getMessage(ProductInformationPanel.class, + "ProductInformationPanel.propertyUnknown.text"))); } private static String getJavaValue() { - return System.getProperty("java.version", "unknown"); + return System.getProperty("java.version", + NbBundle.getMessage(ProductInformationPanel.class, + "ProductInformationPanel.propertyUnknown.text")); } private static String getVMValue() { - return System.getProperty("java.vm.name", "unknown") + " " + System.getProperty("java.vm.version", ""); + return NbBundle.getMessage(ProductInformationPanel.class, + "ProductInformationPanel.getVMValue.text", + System.getProperty("java.vm.name", + NbBundle.getMessage(ProductInformationPanel.class, + "ProductInformationPanel.propertyUnknown.text")), + System.getProperty("java.vm.version", "")); } private static String getSystemLocaleValue() { @@ -248,7 +263,8 @@ private void jLabel1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:eve } private static String getEncodingValue() { - return System.getProperty("file.encoding", "unknown"); + return System.getProperty("file.encoding", + NbBundle.getMessage(ProductInformationPanel.class, "ProductInformationPanel.propertyUnknown.text")); } public void setCopyright(String text) { diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/TableFilterNode.java b/Core/src/org/sleuthkit/autopsy/corecomponents/TableFilterNode.java index 535d541a02..4715658265 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/TableFilterNode.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/TableFilterNode.java @@ -20,6 +20,7 @@ package org.sleuthkit.autopsy.corecomponents; import org.openide.nodes.FilterNode; import org.openide.nodes.Node; +import org.openide.util.NbBundle; /** * This class is used to filter the nodes that we want to show on the "TreeTableView". @@ -46,7 +47,7 @@ public class TableFilterNode extends FilterNode { @Override public String getDisplayName() { if (createChild) { - return "Name"; + return NbBundle.getMessage(this.getClass(), "TableFilterNode.displayName.text"); } else { return super.getDisplayName(); } diff --git a/Core/src/org/sleuthkit/autopsy/coreutils/Bundle.properties b/Core/src/org/sleuthkit/autopsy/coreutils/Bundle.properties index 1c9c5c6495..771ee6d97f 100644 --- a/Core/src/org/sleuthkit/autopsy/coreutils/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/coreutils/Bundle.properties @@ -1,2 +1,24 @@ OpenIDE-Module-Name=CoreUtils +JLNK.noPrefPath.text=No preferred path found +PlatformUtil.nameUnknown=unknown +PlatformUtil.verUnknown=unknown +PlatformUtil.archUnknown=unknown +PlatformUtil.jrePath.jreDir.msg=Embedded jre directory found in\: {0} +PlatformUtil.jrePath.usingJavaPath.msg=Using java binary path\: {0} +PlatformUtil.getPID.sigarNotInit.msg=Can't get PID, sigar not initialized +PlatformUtil.getPID.gen.msg=Can't get PID,{0} +PlatformUtil.getJavaPID.sigarNotInit.msg=Can't get PID of a java process, sigar not initialized +PlatformUtil.getJavaPID.gen.msg=Can't get PID for query\: {0}, {1} +PlatformUtil.getJavaPIDs.sigarNotInit=Can't get PIDs of a java process, sigar not initialized +PlatformUtil.getJavaPIDs.gen.msg=Can't get PIDs for query\: {0}, {1} +PlatformUtil.killProcess.sigarNotInit.msg=Can't kill process by pid, sigar not initialized. +PlatformUtil.killProcess.gen.msg=Can't kill process\: {0}, {1} +PlatformUtil.getProcVmUsed.sigarNotInit.msg=Can't get virt mem used, sigar not initialized. +PlatformUtil.getProcVmUsed.gen.msg=Can't get virt mem used, {0} +PlatformUtil.getJvmMemInfo.usageText=JVM heap usage\: {0}, JVM non-heap usage\: {1} +PlatformUtil.getPhysicalMemInfo.usageText=Physical memory usage (max, total, free)\: {0}, {1}, {2} +PlatformUtil.getAllMemUsageInfo.usageText={0}\ +{1}\ +Process Virtual Memory\: {2} +StringExtract.illegalStateException.cannotInit.msg=Unicode table not properly initialized, cannot instantiate StringExtract diff --git a/Core/src/org/sleuthkit/autopsy/coreutils/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/coreutils/Bundle_ja.properties new file mode 100644 index 0000000000..dd15cb064c --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/coreutils/Bundle_ja.properties @@ -0,0 +1,23 @@ +OpenIDE-Module-Name=\u4E3B\u8981\u30E6\u30FC\u30C6\u30A3\u30EA\u30C6\u30A3 +JLNK.noPrefPath.text=\u512A\u5148\u7684\u306B\u4F7F\u7528\u3059\u308B\u30D1\u30B9\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093 +PlatformUtil.nameUnknown=\u4E0D\u660E +PlatformUtil.verUnknown=\u4E0D\u660E +PlatformUtil.archUnknown=\u4E0D\u660E +PlatformUtil.jrePath.jreDir.msg=\u57CB\u3081\u8FBC\u307E\u308C\u305FJRE\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u304C\u4E0B\u8A18\u3067\u767A\u898B\u3055\u308C\u307E\u3057\u305F\uFF1A{0} +PlatformUtil.jrePath.usingJavaPath.msg=JAVA\u30D0\u30A4\u30CA\u30EA\u30D1\u30B9\u3092\u4F7F\u7528\uFF1A{0} +PlatformUtil.getPID.sigarNotInit.msg=PID\u3092\u5165\u624B\u3067\u304D\u307E\u305B\u3093\u3001Sigar\u304C\u521D\u671F\u5316\u3055\u308C\u3066\u3044\u307E\u305B\u3093 +PlatformUtil.getPID.gen.msg=PID\u3092\u5165\u624B\u3067\u304D\u307E\u305B\u3093\u3001{0} +PlatformUtil.getJavaPID.sigarNotInit.msg=JAVA\u30D7\u30ED\u30BB\u30B9\u306EPID\u304C\u5165\u624B\u3067\u304D\u307E\u305B\u3093\u3001Sigar\u304C\u521D\u671F\u5316\u3055\u308C\u3066\u3044\u307E\u305B\u3093 +PlatformUtil.getJavaPID.gen.msg=\u30AF\u30A8\u30EA\u30FC\u306EPID\u304C\u5165\u624B\u3067\u304D\u307E\u305B\u3093\uFF1A{0}, {1} +PlatformUtil.getJavaPIDs.sigarNotInit=JAVA\u30D7\u30ED\u30BB\u30B9\u306EPID\u304C\u5165\u624B\u3067\u304D\u307E\u305B\u3093\u3001Sigar\u304C\u521D\u671F\u5316\u3055\u308C\u3066\u3044\u307E\u305B\u3093 +PlatformUtil.getJavaPIDs.gen.msg=\u30AF\u30A8\u30EA\u30FC\u306EPID\u304C\u5165\u624B\u3067\u304D\u307E\u305B\u3093\uFF1A{0}, {1} +PlatformUtil.killProcess.sigarNotInit.msg=PID\u3092\u4F7F\u7528\u3057\u3066\u30D7\u30ED\u30BB\u30B9\u3092\u5F37\u5236\u4FEE\u4E86\u3067\u304D\u307E\u305B\u3093\u3001Sigar\u304C\u521D\u671F\u5316\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002 +PlatformUtil.killProcess.gen.msg=\u30D7\u30ED\u30BB\u30B9\u3092\u5F37\u5236\u4FEE\u4E86\u3067\u304D\u307E\u305B\u3093\uFF1A {0}, {1} +PlatformUtil.getProcVmUsed.sigarNotInit.msg=\u4F7F\u7528\u4E2D\u306E\u4EEE\u60F3\u30E1\u30E2\u30EA\u91CF\u3092\u78BA\u8A8D\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3001Sigar\u304C\u521D\u671F\u5316\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002 +PlatformUtil.getProcVmUsed.gen.msg=\u4F7F\u7528\u4E2D\u306E\u4EEE\u60F3\u30E1\u30E2\u30EA\u91CF\u3092\u78BA\u8A8D\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3001{0} +PlatformUtil.getJvmMemInfo.usageText=JVM\u30D2\u30FC\u30D7\u4F7F\u7528\u72B6\u6CC1\uFF1A{0}\u3001JVM\u975E\u30D2\u30FC\u30D7\u4F7F\u7528\u72B6\u6CC1\uFF1A{1} +PlatformUtil.getPhysicalMemInfo.usageText=\u7269\u7406\u30E1\u30E2\u30EA\u4F7F\u7528\u72B6\u6CC1\uFF08\u6700\u5927\u3001\u5408\u8A08\u3001\u5229\u7528\u53EF\u80FD\uFF09\uFF1A {0}, {1}, {2} +PlatformUtil.getAllMemUsageInfo.usageText={0}\ +{1}\ +\u30D7\u30ED\u30BB\u30B9\u4EEE\u60F3\u30E1\u30E2\u30EA\uFF1A{2} +StringExtract.illegalStateException.cannotInit.msg=\u30E6\u30CB\u30B3\u30FC\u30C9\u30C6\u30FC\u30D6\u30EB\u304C\u6B63\u3057\u304F\u521D\u671F\u5316\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3001StringExtract\u3092\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\u5316\u3067\u304D\u307E\u305B\u3093 \ No newline at end of file diff --git a/Core/src/org/sleuthkit/autopsy/coreutils/JLNK.java b/Core/src/org/sleuthkit/autopsy/coreutils/JLNK.java index 3312ab7b06..ff9787c405 100644 --- a/Core/src/org/sleuthkit/autopsy/coreutils/JLNK.java +++ b/Core/src/org/sleuthkit/autopsy/coreutils/JLNK.java @@ -21,6 +21,8 @@ package org.sleuthkit.autopsy.coreutils; import java.io.File; import java.util.ArrayList; import java.util.List; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.LnkEnums.CommonNetworkRelativeLinkFlags; import org.sleuthkit.autopsy.coreutils.LnkEnums.DriveType; import org.sleuthkit.autopsy.coreutils.LnkEnums.FileAttributesFlags; @@ -294,7 +296,7 @@ import org.sleuthkit.autopsy.coreutils.LnkEnums.NetworkProviderType; } return ret; } - return "No preferred path found"; + return NbBundle.getMessage(this.getClass(), "JLNK.noPrefPath.text"); } public String getBestName() { diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/LocalDisk.java b/Core/src/org/sleuthkit/autopsy/coreutils/LocalDisk.java similarity index 97% rename from Core/src/org/sleuthkit/autopsy/casemodule/LocalDisk.java rename to Core/src/org/sleuthkit/autopsy/coreutils/LocalDisk.java index 14853bcc12..c082250dea 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/LocalDisk.java +++ b/Core/src/org/sleuthkit/autopsy/coreutils/LocalDisk.java @@ -16,7 +16,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.sleuthkit.autopsy.casemodule; +package org.sleuthkit.autopsy.coreutils; /** * Representation of a PhysicalDisk or partition. diff --git a/Core/src/org/sleuthkit/autopsy/coreutils/ModuleSettings.java b/Core/src/org/sleuthkit/autopsy/coreutils/ModuleSettings.java index 15d5e3d7a3..e6d97afe0f 100644 --- a/Core/src/org/sleuthkit/autopsy/coreutils/ModuleSettings.java +++ b/Core/src/org/sleuthkit/autopsy/coreutils/ModuleSettings.java @@ -36,7 +36,7 @@ import java.util.logging.Level; */ public class ModuleSettings { - // The directory where the properties file is lcoated + // The directory where the properties file is located private final static String moduleDirPath = PlatformUtil.getUserConfigDirectory(); public static final String DEFAULT_CONTEXT = "GeneralContext"; public static final String MAIN_SETTINGS = "Case"; diff --git a/Core/src/org/sleuthkit/autopsy/coreutils/PlatformUtil.java b/Core/src/org/sleuthkit/autopsy/coreutils/PlatformUtil.java index 40ced93327..0a753e9b00 100644 --- a/Core/src/org/sleuthkit/autopsy/coreutils/PlatformUtil.java +++ b/Core/src/org/sleuthkit/autopsy/coreutils/PlatformUtil.java @@ -37,7 +37,7 @@ import org.hyperic.sigar.Sigar; import org.hyperic.sigar.ptql.ProcessFinder; import org.openide.modules.InstalledFileLocator; import org.openide.modules.Places; -import org.sleuthkit.autopsy.casemodule.LocalDisk; +import org.openide.util.NbBundle; import org.sleuthkit.datamodel.SleuthkitJNI; import org.sleuthkit.datamodel.TskCoreException; @@ -48,9 +48,9 @@ import org.sleuthkit.datamodel.TskCoreException; public class PlatformUtil { private static String javaPath = null; - public static final String OS_NAME_UNKNOWN = "unknown"; - public static final String OS_VERSION_UNKNOWN = "unknown"; - public static final String OS_ARCH_UNKNOWN = "unknown"; + public static final String OS_NAME_UNKNOWN = NbBundle.getMessage(PlatformUtil.class, "PlatformUtil.nameUnknown"); + public static final String OS_VERSION_UNKNOWN = NbBundle.getMessage(PlatformUtil.class, "PlatformUtil.verUnknown"); + public static final String OS_ARCH_UNKNOWN = NbBundle.getMessage(PlatformUtil.class, "PlatformUtil.archUnknown"); private static volatile long pid = -1; private static volatile Sigar sigar = null; private static volatile MemoryMXBean memoryManager = null; @@ -118,7 +118,10 @@ public class PlatformUtil { File jrePath = new File(getInstallPath() + File.separator + "jre"); if (jrePath != null && jrePath.exists() && jrePath.isDirectory()) { - System.out.println("Embedded jre directory found in: " + jrePath.getAbsolutePath()); + System.out.println( + NbBundle.getMessage(PlatformUtil.class, + "PlatformUtil.jrePath.jreDir.msg", + jrePath.getAbsolutePath())); javaPath = jrePath.getAbsolutePath() + File.separator + "bin" + File.separator + "java"; } else { //else use system installed java in PATH env variable @@ -126,7 +129,7 @@ public class PlatformUtil { } - System.out.println("Using java binary path: " + javaPath); + System.out.println(NbBundle.getMessage(PlatformUtil.class, "PlatformUtil.jrePath.usingJavaPath.msg", javaPath)); return javaPath; @@ -427,10 +430,10 @@ public class PlatformUtil { if (sigar != null) { pid = sigar.getPid(); } else { - System.out.println("Can't get PID, sigar not initialized"); + System.out.println(NbBundle.getMessage(PlatformUtil.class, "PlatformUtil.getPID.sigarNotInit.msg")); } } catch (Exception e) { - System.out.println("Can't get PID," + e.toString()); + System.out.println(NbBundle.getMessage(PlatformUtil.class, "PlatformUtil.getPID.gen.msg", e.toString())); } return pid; @@ -457,10 +460,11 @@ public class PlatformUtil { ProcessFinder finder = new ProcessFinder(sigar); jpid = finder.findSingleProcess(sigarQuery); } else { - System.out.println("Can't get PID of a java process, sigar not initialized"); + System.out.println(NbBundle.getMessage(PlatformUtil.class, "PlatformUtil.getJavaPID.sigarNotInit.msg")); } } catch (Exception e) { - System.out.println("Can't get PID for query: " + sigarQuery + ", " + e.toString()); + System.out.println( + NbBundle.getMessage(PlatformUtil.class, "PlatformUtil.getJavaPID.gen.msg", sigarQuery, e.toString())); } return jpid; @@ -487,10 +491,11 @@ public class PlatformUtil { ProcessFinder finder = new ProcessFinder(sigar); jpids = finder.find(sigarQuery); } else { - System.out.println("Can't get PIDs of a java process, sigar not initialized"); + System.out.println(NbBundle.getMessage(PlatformUtil.class, "PlatformUtil.getJavaPIDs.sigarNotInit")); } } catch (Exception e) { - System.out.println("Can't get PIDs for query: " + sigarQuery + ", " + e.toString()); + System.out.println( + NbBundle.getMessage(PlatformUtil.class, "PlatformUtil.getJavaPIDs.gen.msg", sigarQuery, e.toString())); } return jpids; @@ -509,10 +514,11 @@ public class PlatformUtil { if (sigar != null) { sigar.kill(pid, 9); } else { - System.out.println("Can't kill process by pid, sigar not initialized."); + System.out.println(NbBundle.getMessage(PlatformUtil.class, "PlatformUtil.killProcess.sigarNotInit.msg")); } } catch (Exception e) { - System.out.println("Can't kill process: " + pid + ", " + e.toString()); + System.out.println( + NbBundle.getMessage(PlatformUtil.class, "PlatformUtil.killProcess.gen.msg", pid, e.toString())); } } @@ -532,12 +538,12 @@ public class PlatformUtil { } if (sigar == null || pid == -1) { - System.out.println("Can't get virt mem used, sigar not initialized. "); + System.out.println(NbBundle.getMessage(PlatformUtil.class, "PlatformUtil.getProcVmUsed.sigarNotInit.msg")); return -1; } virtMem = sigar.getProcMem(pid).getSize(); } catch (Exception e) { - System.out.println("Can't get virt mem used, " + e.toString()); + System.out.println(NbBundle.getMessage(PlatformUtil.class, "PlatformUtil.getProcVmUsed.gen.msg", e.toString())); } return virtMem; @@ -557,9 +563,9 @@ public class PlatformUtil { final MemoryUsage heap = memoryManager.getHeapMemoryUsage(); final MemoryUsage nonHeap = memoryManager.getNonHeapMemoryUsage(); - return "JVM heap usage: " + heap.toString() + ", JVM non-heap usage: " + nonHeap.toString(); - - + return NbBundle.getMessage(PlatformUtil.class, + "PlatformUtil.getJvmMemInfo.usageText", + heap.toString(), nonHeap.toString()); } /** @@ -572,9 +578,9 @@ public class PlatformUtil { final long maxMemory = runTime.maxMemory(); final long totalMemory = runTime.totalMemory(); final long freeMemory = runTime.freeMemory(); - return "Physical memory usage (max, total, free): " - + Long.toString(maxMemory) + ", " + Long.toString(totalMemory) - + ", " + Long.toString(freeMemory); + return NbBundle.getMessage(PlatformUtil.class, + "PlatformUtil.getPhysicalMemInfo.usageText", + Long.toString(maxMemory), Long.toString(totalMemory), Long.toString(freeMemory)); } /** @@ -583,10 +589,14 @@ public class PlatformUtil { * @return formatted string with all memory usage info */ public static String getAllMemUsageInfo() { - StringBuilder sb = new StringBuilder(); - sb.append(PlatformUtil.getPhysicalMemInfo()).append("\n"); - sb.append(PlatformUtil.getJvmMemInfo()).append("\n"); - sb.append("Process Virtual Memory: ").append(PlatformUtil.getProcessVirtualMemoryUsed()); - return sb.toString(); +// StringBuilder sb = new StringBuilder(); +// sb.append(PlatformUtil.getPhysicalMemInfo()).append("\n"); +// sb.append(PlatformUtil.getJvmMemInfo()).append("\n"); +// sb.append("Process Virtual Memory: ").append(PlatformUtil.getProcessVirtualMemoryUsed()); +// return sb.toString(); + return NbBundle.getMessage(PlatformUtil.class, + "PlatformUtil.getAllMemUsageInfo.usageText", + PlatformUtil.getPhysicalMemInfo(), PlatformUtil.getJvmMemInfo(), + PlatformUtil.getProcessVirtualMemoryUsed()); } } diff --git a/Core/src/org/sleuthkit/autopsy/coreutils/StringExtract.java b/Core/src/org/sleuthkit/autopsy/coreutils/StringExtract.java index d6c43c24cc..5179859211 100644 --- a/Core/src/org/sleuthkit/autopsy/coreutils/StringExtract.java +++ b/Core/src/org/sleuthkit/autopsy/coreutils/StringExtract.java @@ -26,6 +26,8 @@ import java.util.List; import java.util.Properties; import java.util.StringTokenizer; import java.util.logging.Level; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.StringExtract.StringExtractUnicodeTable.SCRIPT; @@ -78,7 +80,8 @@ public class StringExtract { unicodeTable = StringExtractUnicodeTable.getInstance(); if (unicodeTable == null) { - throw new IllegalStateException("Unicode table not properly initialized, cannot instantiate StringExtract"); + throw new IllegalStateException( + NbBundle.getMessage(StringExtract.class, "StringExtract.illegalStateException.cannotInit.msg")); } setEnabledScripts(SUPPORTED_SCRIPTS); diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/AbstractAbstractFileNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/AbstractAbstractFileNode.java index 6b3a8cbc54..1c3eebdc70 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/AbstractAbstractFileNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/AbstractAbstractFileNode.java @@ -22,6 +22,8 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.Map; import java.util.logging.Level; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.datamodel.AbstractFile; import org.sleuthkit.datamodel.BlackboardArtifact; @@ -52,117 +54,125 @@ public abstract class AbstractAbstractFileNode extends A NAME { @Override public String toString() { - return "Name"; + return NbBundle.getMessage(this.getClass(), "AbstractAbstractFileNode.nameColLbl"); } }, LOCATION { @Override public String toString() { - return "Location"; + return NbBundle.getMessage(this.getClass(), "AbstractAbstractFileNode.locationColLbl"); } }, MOD_TIME { @Override public String toString() { - return "Modified Time"; + return NbBundle.getMessage(this.getClass(), "AbstractAbstractFileNode.modifiedTimeColLbl"); } }, CHANGED_TIME { @Override public String toString() { - return "Change Time"; + return NbBundle.getMessage(this.getClass(), "AbstractAbstractFileNode.changeTimeColLbl"); } }, ACCESS_TIME { @Override public String toString() { - return "Access Time"; + return NbBundle.getMessage(this.getClass(), "AbstractAbstractFileNode.accessTimeColLbl"); } }, CREATED_TIME { @Override public String toString() { - return "Created Time"; + return NbBundle.getMessage(this.getClass(), "AbstractAbstractFileNode.createdTimeColLbl"); } }, SIZE { @Override public String toString() { - return "Size"; + return NbBundle.getMessage(this.getClass(), "AbstractAbstractFileNode.sizeColLbl"); } }, FLAGS_DIR { @Override public String toString() { - return "Flags(Dir)"; + return NbBundle.getMessage(this.getClass(), "AbstractAbstractFileNode.flagsDirColLbl"); } }, FLAGS_META { @Override public String toString() { - return "Flags(Meta)"; + return NbBundle.getMessage(this.getClass(), "AbstractAbstractFileNode.flagsMetaColLbl"); } }, MODE { @Override public String toString() { - return "Mode"; + return NbBundle.getMessage(this.getClass(), "AbstractAbstractFileNode.modeColLbl"); } }, USER_ID { @Override public String toString() { - return "UserID"; + return NbBundle.getMessage(this.getClass(), "AbstractAbstractFileNode.useridColLbl"); } }, GROUP_ID { @Override public String toString() { - return "GroupID"; + return NbBundle.getMessage(this.getClass(), "AbstractAbstractFileNode.groupidColLbl"); } }, META_ADDR { @Override public String toString() { - return "Meta Addr."; + return NbBundle.getMessage(this.getClass(), "AbstractAbstractFileNode.metaAddrColLbl"); } }, ATTR_ADDR { @Override public String toString() { - return "Attr. Addr."; + return NbBundle.getMessage(this.getClass(), "AbstractAbstractFileNode.attrAddrColLbl"); } }, TYPE_DIR { @Override public String toString() { - return "Type(Dir)"; + return NbBundle.getMessage(this.getClass(), "AbstractAbstractFileNode.typeDirColLbl"); } }, TYPE_META { @Override public String toString() { - return "Type(Meta)"; + return NbBundle.getMessage(this.getClass(), "AbstractAbstractFileNode.typeMetaColLbl"); } }, KNOWN { @Override public String toString() { - return "Known"; + return NbBundle.getMessage(this.getClass(), "AbstractAbstractFileNode.knownColLbl"); } }, HASHSETS { @Override public String toString() { - return "In Hashsets"; + return NbBundle.getMessage(this.getClass(), "AbstractAbstractFileNode.inHashsetsColLbl"); } }, MD5HASH { @Override public String toString() { - return "MD5 Hash"; + + return NbBundle.getMessage(this.getClass(), "AbstractAbstractFileNode.md5HashColLbl"); + } + }, + ObjectID { + @Override + public String toString() { + return "Object ID"; + } - } + }, } @@ -201,6 +211,7 @@ public abstract class AbstractAbstractFileNode extends A map.put(AbstractFilePropertyType.KNOWN.toString(), content.getKnown().getName()); map.put(AbstractFilePropertyType.HASHSETS.toString(), getHashSetHitsForFile(content)); map.put(AbstractFilePropertyType.MD5HASH.toString(), content.getMd5Hash() == null ? "" : content.getMd5Hash()); + map.put(AbstractFilePropertyType.ObjectID.toString(), content.getId()); } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/AbstractContentChildren.java b/Core/src/org/sleuthkit/autopsy/datamodel/AbstractContentChildren.java index 87494f2e1f..73cc5186b2 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/AbstractContentChildren.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/AbstractContentChildren.java @@ -21,7 +21,7 @@ package org.sleuthkit.autopsy.datamodel; import org.openide.nodes.AbstractNode; import org.openide.nodes.Children.Keys; import org.openide.nodes.Node; -import org.sleuthkit.autopsy.datamodel.KeywordHits.KeywordHitsRootNode; +import org.openide.util.NbBundle; import org.sleuthkit.datamodel.DerivedFile; import org.sleuthkit.datamodel.Directory; import org.sleuthkit.datamodel.File; @@ -106,7 +106,8 @@ abstract class AbstractContentChildren extends Keys { @Override protected AbstractContentNode defaultVisit(SleuthkitVisitableItem di) { - throw new UnsupportedOperationException("No Node defined for the given SleuthkitItem"); + throw new UnsupportedOperationException(NbBundle.getMessage(this.getClass(), + "AbstractContentChildren.CreateTSKNodeVisitor.exception.noNodeMsg")); } } @@ -186,7 +187,9 @@ abstract class AbstractContentChildren extends Keys { @Override protected AbstractNode defaultVisit(AutopsyVisitableItem di) { - throw new UnsupportedOperationException("No Node defined for the given DisplayableItem"); + throw new UnsupportedOperationException( + NbBundle.getMessage(this.getClass(), + "AbstractContentChildren.createAutopsyNodeVisitor.exception.noNodeMsg")); } } } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/AbstractContentNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/AbstractContentNode.java index cf16f2b07f..94d853c749 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/AbstractContentNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/AbstractContentNode.java @@ -20,6 +20,8 @@ package org.sleuthkit.autopsy.datamodel; import java.util.List; import java.util.logging.Level; + +import org.openide.util.NbBundle; import org.openide.util.lookup.Lookups; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.datamodel.Content; @@ -63,7 +65,8 @@ public abstract class AbstractContentNode extends ContentNode @Override public void setName(String name) { - throw new UnsupportedOperationException("Can't change the system name."); + throw new UnsupportedOperationException( + NbBundle.getMessage(this.getClass(), "AbstractContentNode.exception.cannotChangeSysName.msg")); } @Override diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/AbstractFsContentNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/AbstractFsContentNode.java index 782541ca78..366025da11 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/AbstractFsContentNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/AbstractFsContentNode.java @@ -21,6 +21,7 @@ package org.sleuthkit.autopsy.datamodel; import java.util.LinkedHashMap; import java.util.Map; import org.openide.nodes.Sheet; +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.datamodel.AbstractFile; @@ -73,7 +74,7 @@ public abstract class AbstractFsContentNode extends Abst AbstractFilePropertyType[] fsTypes = AbstractFilePropertyType.values(); final int FS_PROPS_LEN = fsTypes.length; - final String NO_DESCR = "no description"; + final String NO_DESCR = NbBundle.getMessage(this.getClass(), "AbstractFsContentNode.noDesc.text"); for (int i = 0; i < FS_PROPS_LEN; ++i) { final AbstractFilePropertyType propType = AbstractFilePropertyType.values()[i]; final String propString = propType.toString(); diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/ArtifactStringContent.java b/Core/src/org/sleuthkit/autopsy/datamodel/ArtifactStringContent.java index 12470453c1..088d18588b 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/ArtifactStringContent.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/ArtifactStringContent.java @@ -22,6 +22,8 @@ import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.TimeZone; import java.util.logging.Level; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.datamodel.BlackboardArtifact; import org.sleuthkit.datamodel.BlackboardAttribute; @@ -135,7 +137,9 @@ public class ArtifactStringContent implements StringContent { //add file path buffer.append(""); - buffer.append("Source File Path"); + buffer.append(""); + buffer.append(NbBundle.getMessage(this.getClass(), "ArtifactStringContent.getStr.srcFilePath.text")); + buffer.append(""); buffer.append(""); buffer.append(path); buffer.append(""); @@ -146,7 +150,7 @@ public class ArtifactStringContent implements StringContent { stringContent = buffer.toString(); } catch (TskException ex) { - stringContent = "Error getting content"; + stringContent = NbBundle.getMessage(this.getClass(), "ArtifactStringContent.getStr.err"); } } @@ -159,7 +163,7 @@ public class ArtifactStringContent implements StringContent { } catch (TskException ex) { logger.log(Level.WARNING, "Getting file failed", ex); } - throw new IllegalArgumentException("Couldn't get file from database"); + throw new IllegalArgumentException(NbBundle.getMessage(ArtifactStringContent.class, "ArtifactStringContent.exception.msg")); } private static TimeZone getTimeZone(BlackboardArtifact artifact) { diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/ArtifactTypeNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/ArtifactTypeNode.java index f97fa2c6fc..92d1be9395 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/ArtifactTypeNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/ArtifactTypeNode.java @@ -18,10 +18,10 @@ */ package org.sleuthkit.autopsy.datamodel; -import java.util.Map; import java.util.logging.Level; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; -import org.openide.nodes.AbstractNode; import org.openide.nodes.Children; import org.openide.nodes.Sheet; import org.openide.util.lookup.Lookups; @@ -65,15 +65,15 @@ public class ArtifactTypeNode extends DisplayableItemNode { s.put(ss); } - ss.put(new NodeProperty("Artifact Type", - "Artifact Type", - "no description", - type.getDisplayName())); + ss.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "ArtifactTypeNode.createSheet.artType.name"), + NbBundle.getMessage(this.getClass(), "ArtifactTypeNode.createSheet.artType.displayName"), + NbBundle.getMessage(this.getClass(), "ArtifactTypeNode.createSheet.artType.desc"), + type.getDisplayName())); - ss.put(new NodeProperty("Child Count", - "Child Count", - "no description", - childCount)); + ss.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "ArtifactTypeNode.createSheet.childCnt.name"), + NbBundle.getMessage(this.getClass(), "ArtifactTypeNode.createSheet.childCnt.displayName"), + NbBundle.getMessage(this.getClass(), "ArtifactTypeNode.createSheet.childCnt.desc"), + childCount)); return s; } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/BlackboardArtifactNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/BlackboardArtifactNode.java index 2178d3be0e..d15b1fc0c3 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/BlackboardArtifactNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/BlackboardArtifactNode.java @@ -24,6 +24,8 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.logging.Level; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import org.openide.nodes.Children; import org.openide.nodes.Sheet; @@ -103,15 +105,15 @@ public class BlackboardArtifactNode extends DisplayableItemNode { ss = Sheet.createPropertiesSet(); s.put(ss); } - final String NO_DESCR = "no description"; + final String NO_DESCR = NbBundle.getMessage(this.getClass(), "BlackboardArtifactNode.noDesc.text"); Map map = new LinkedHashMap(); fillPropertyMap(map, artifact); - ss.put(new NodeProperty("Source File", - "Source File", - NO_DESCR, - associated.getName())); + ss.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "BlackboardArtifactNode.createSheet.srcFile.name"), + NbBundle.getMessage(this.getClass(), "BlackboardArtifactNode.createSheet.srcFile.displayName"), + NO_DESCR, + associated.getName())); for (Map.Entry entry : map.entrySet()) { ss.put(new NodeProperty(entry.getKey(), @@ -135,7 +137,10 @@ public class BlackboardArtifactNode extends DisplayableItemNode { AbstractFile af = (AbstractFile) associated; ext = af.getNameExtension(); } - ss.put(new NodeProperty("Extension", "Extension", NO_DESCR, ext)); + ss.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "BlackboardArtifactNode.createSheet.ext.name"), + NbBundle.getMessage(this.getClass(), "BlackboardArtifactNode.createSheet.ext.displayName"), + NO_DESCR, + ext)); try { String actualMimeType = ""; @@ -151,7 +156,11 @@ public class BlackboardArtifactNode extends DisplayableItemNode { if (actualMimeType.isEmpty()) { logger.log(Level.WARNING, "Could not find expected TSK_FILE_TYPE_SIG attribute."); } else { - ss.put(new NodeProperty("MIME Type", "MIME Type", NO_DESCR, actualMimeType)); + ss.put(new NodeProperty( + NbBundle.getMessage(this.getClass(), "BlackboardArtifactNode.createSheet.mimeType.name"), + NbBundle.getMessage(this.getClass(), "BlackboardArtifactNode.createSheet.mimeType.displayName"), + NO_DESCR, + actualMimeType)); } } catch (TskCoreException ex) { logger.log(Level.WARNING, "Error while searching for TSK_FILE_TYPE_SIG attribute: ", ex); @@ -167,8 +176,11 @@ public class BlackboardArtifactNode extends DisplayableItemNode { } if (sourcePath.isEmpty() == false) { - ss.put(new NodeProperty("File Path", "File Path", - NO_DESCR, sourcePath)); + ss.put(new NodeProperty( + NbBundle.getMessage(this.getClass(), "BlackboardArtifactNode.createSheet.filePath.name"), + NbBundle.getMessage(this.getClass(), "BlackboardArtifactNode.createSheet.filePath.displayName"), + NO_DESCR, + sourcePath)); } } else { String dataSource = ""; @@ -184,8 +196,11 @@ public class BlackboardArtifactNode extends DisplayableItemNode { } if (dataSource.isEmpty() == false) { - ss.put(new NodeProperty("Data Source", "Data Source", - NO_DESCR, dataSource)); + ss.put(new NodeProperty( + NbBundle.getMessage(this.getClass(), "BlackboardArtifactNode.createSheet.dataSrc.name"), + NbBundle.getMessage(this.getClass(), "BlackboardArtifactNode.createSheet.dataSrc.displayName"), + NO_DESCR, + dataSource)); } } @@ -300,7 +315,8 @@ public class BlackboardArtifactNode extends DisplayableItemNode { } catch (TskException ex) { logger.log(Level.WARNING, "Getting file failed", ex); } - throw new IllegalArgumentException("Couldn't get file from database"); + throw new IllegalArgumentException( + NbBundle.getMessage(BlackboardArtifactNode.class, "BlackboardArtifactNode.getAssocCont.exception.msg")); } private static HighlightLookup getHighlightLookup(BlackboardArtifact artifact, Content content) { diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/BlackboardArtifactTagNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/BlackboardArtifactTagNode.java index 3503776324..29cf64cefa 100755 --- a/Core/src/org/sleuthkit/autopsy/datamodel/BlackboardArtifactTagNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/BlackboardArtifactTagNode.java @@ -24,6 +24,7 @@ import java.util.logging.Logger; import javax.swing.Action; import org.openide.nodes.Children; import org.openide.nodes.Sheet; +import org.openide.util.NbBundle; import org.openide.util.lookup.Lookups; import org.sleuthkit.autopsy.actions.DeleteBlackboardArtifactTagAction; import org.sleuthkit.datamodel.BlackboardArtifactTag; @@ -57,18 +58,34 @@ public class BlackboardArtifactTagNode extends DisplayableItemNode { propertySheet.put(properties); } - properties.put(new NodeProperty("Source File", "Source File", "", tag.getContent().getName())); + properties.put(new NodeProperty( + NbBundle.getMessage(this.getClass(), "BlackboardArtifactTagNode.createSheet.srcFile.text"), + NbBundle.getMessage(this.getClass(), "BlackboardArtifactTagNode.createSheet.srcFile.text"), + "", + tag.getContent().getName())); String contentPath; try { contentPath = tag.getContent().getUniquePath(); } catch (TskCoreException ex) { Logger.getLogger(ContentTagNode.class.getName()).log(Level.SEVERE, "Failed to get path for content (id = " + tag.getContent().getId() + ")", ex); - contentPath = "Unavailable"; + contentPath = NbBundle.getMessage(this.getClass(), "BlackboardArtifactTagNode.createSheet.unavail.text"); } - properties.put(new NodeProperty("Source File Path", "Source File Path", "", contentPath)); - properties.put(new NodeProperty("Result Type", "Result Type", "", tag.getArtifact().getDisplayName())); - properties.put(new NodeProperty("Comment", "Comment", "", tag.getComment())); + properties.put(new NodeProperty( + NbBundle.getMessage(this.getClass(), "BlackboardArtifactTagNode.createSheet.srcFilePath.text"), + NbBundle.getMessage(this.getClass(), "BlackboardArtifactTagNode.createSheet.srcFilePath.text"), + "", + contentPath)); + properties.put(new NodeProperty( + NbBundle.getMessage(this.getClass(), "BlackboardArtifactTagNode.createSheet.resultType.text"), + NbBundle.getMessage(this.getClass(), "BlackboardArtifactTagNode.createSheet.resultType.text"), + "", + tag.getArtifact().getDisplayName())); + properties.put(new NodeProperty( + NbBundle.getMessage(this.getClass(), "BlackboardArtifactTagNode.createSheet.comment.text"), + NbBundle.getMessage(this.getClass(), "BlackboardArtifactTagNode.createSheet.comment.text"), + "", + tag.getComment())); return propertySheet; } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/Bundle.properties b/Core/src/org/sleuthkit/autopsy/datamodel/Bundle.properties index cd313e7b75..a14b5f8d58 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/datamodel/Bundle.properties @@ -1 +1,254 @@ OpenIDE-Module-Name=DataModel +AbstractAbstractFileNode.nameColLbl=Name +AbstractAbstractFileNode.locationColLbl=Location +AbstractAbstractFileNode.modifiedTimeColLbl=Modified Time +AbstractAbstractFileNode.changeTimeColLbl=Change Time +AbstractAbstractFileNode.accessTimeColLbl=Access Time +AbstractAbstractFileNode.createdTimeColLbl=Created Time +AbstractAbstractFileNode.sizeColLbl=Size +AbstractAbstractFileNode.flagsDirColLbl=Flags(Dir) +AbstractAbstractFileNode.flagsMetaColLbl=Flags(Meta) +AbstractAbstractFileNode.modeColLbl=Mode +AbstractAbstractFileNode.useridColLbl=UserID +AbstractAbstractFileNode.groupidColLbl=GroupID +AbstractAbstractFileNode.metaAddrColLbl=Meta Addr. +AbstractAbstractFileNode.attrAddrColLbl=Attr. Addr. +AbstractAbstractFileNode.typeDirColLbl=Type(Dir) +AbstractAbstractFileNode.typeMetaColLbl=Type(Meta) +AbstractAbstractFileNode.knownColLbl=Known +AbstractAbstractFileNode.inHashsetsColLbl=In Hashsets +AbstractAbstractFileNode.md5HashColLbl=MD5 Hash +AbstractContentChildren.CreateTSKNodeVisitor.exception.noNodeMsg=No Node defined for the given SleuthkitItem +AbstractContentChildren.createAutopsyNodeVisitor.exception.noNodeMsg=No Node defined for the given DisplayableItem +AbstractContentNode.exception.cannotChangeSysName.msg=Can't change the system name. +AbstractFsContentNode.noDesc.text=no description +ArtifactStringContent.getStr.srcFilePath.text=Source File Path +ArtifactStringContent.getStr.err=Error getting content +ArtifactStringContent.exception.msg=Couldn't get file from database +ArtifactTypeNode.createSheet.artType.name=Artifact Type +ArtifactTypeNode.createSheet.artType.displayName=Artifact Type +ArtifactTypeNode.createSheet.artType.desc=no description +ArtifactTypeNode.createSheet.childCnt.name=Child Count +ArtifactTypeNode.createSheet.childCnt.displayName=Child Count +ArtifactTypeNode.createSheet.childCnt.desc=no description +BlackboardArtifactNode.noDesc.text=no description +BlackboardArtifactNode.createSheet.srcFile.name=Source File +BlackboardArtifactNode.createSheet.srcFile.displayName=Source File +BlackboardArtifactNode.createSheet.ext.name=Extension +BlackboardArtifactNode.createSheet.ext.displayName=Extension +BlackboardArtifactNode.createSheet.mimeType.name=MIME Type +BlackboardArtifactNode.createSheet.mimeType.displayName=MIME Type +BlackboardArtifactNode.createSheet.filePath.name=File Path +BlackboardArtifactNode.createSheet.filePath.displayName=File Path +BlackboardArtifactNode.createSheet.dataSrc.name=Data Source +BlackboardArtifactNode.createSheet.dataSrc.displayName=Data Source +BlackboardArtifactNode.getAssocCont.exception.msg=Couldn't get file from database +BlackboardArtifactTagNode.createSheet.srcFile.text=Source File +BlackboardArtifactTagNode.createSheet.unavail.text=Unavailable +BlackboardArtifactTagNode.createSheet.srcFilePath.text=Source File Path +BlackboardArtifactTagNode.createSheet.resultType.text=Result Type +BlackboardArtifactTagNode.createSheet.comment.text=Comment +ContentTagNode.createSheet.file.name=File +ContentTagNode.createSheet.file.displayName=File +ContentTagNode.createSheet.unavail.path=Unavailable +ContentTagNode.createSheet.filePath.name=File Path +ContentTagNode.createSheet.filePath.displayName=File Path +ContentTagNode.createSheet.comment.name=Comment +ContentTagNode.createSheet.comment.displayName=Comment +ContentTagTypeNode.displayName.text=File Tags +ContentTagTypeNode.createSheet.name.name=Name +ContentTagTypeNode.createSheet.name.displayName=Name +ContentUtils.exception.msg=Can't extract a {0} +DataModelActionsFactory.srcFileInDir.text=View Source File in Directory +DataModelActionsFactory.fileInDir.text=View File in Directory +DataModelActionsFactory.viewNewWin.text=View in New Window +DataModelActionsFactory.openExtViewer.text=Open in External Viewer +DataModelActionsFactory.srfFileSameMD5.text=Search for files with the same MD5 hash +DataSourcesNode.name=Data Sources +DataSourcesNode.createSheet.name.name=Name +DataSourcesNode.createSheet.name.displayName=Name +DataSourcesNode.createSheet.name.desc=no description +DeletedContent.fsDelFilter.text=File System +DeletedContent.allDelFilter.text=All +DeletedContent.deletedContentsNode.name=Deleted Files +DeletedContent.createSheet.name.name=Name +DeletedContent.createSheet.name.displayName=Name +DeletedContent.createSheet.name.desc=no description +DeletedContent.createSheet.filterType.name=Filter Type +DeletedContent.createSheet.filterType.displayName=Filter Type +DeletedContent.createSheet.filterType.desc=no description +DeletedContent.createKeys.maxObjects.msg=There are more Deleted Files than can be displayed. Only the first {0} Deleted Files will be shown. +DeletedContent.createNodeForKey.typeNotSupported.msg=Not supported for this type of Displayable Item\: {0} +DirectoryNode.parFolder.text=[parent folder] +DirectoryNode.curFolder.text=[current folder] +DirectoryNode.getActions.viewFileInDir.text=View File in Directory +DirectoryNode.viewInNewWin.text=View in New Window +EmailExtracted.mailAccount.text=Account +EmailExtracted.mailFolder.text=Folder +EmailExtracted.defaultAcct.text=Default +EmailExtracted.defaultFolder.text=Default +EmailExtracted.createSheet.name.name=Name +EmailExtracted.createSheet.name.displayName=Name +EmailExtracted.createSheet.name.desc=no description +ExtractedContentNode.name.text=Extracted Content +ExtractedContentNode.createSheet.name.name=Name +ExtractedContentNode.createSheet.name.displayName=Name +ExtractedContentNode.createSheet.name.desc=no description +FileNode.viewFileInDir.text=View File in Directory +FileNode.getActions.viewInNewWin.text=View in New Window +FileNode.getActions.openInExtViewer.text=Open in External Viewer +FileNode.getActions.searchFilesSameMD5.text=Search for files with the same MD5 hash +FileSize.fileSizeRootNode.name=File Size +FileSize.createSheet.name.name=Name +FileSize.createSheet.name.displayName=Name +FileSize.createSheet.name.desc=no description +FileSize.createSheet.filterType.name=Filter Type +FileSize.createSheet.filterType.displayName=Filter Type +FileSize.createSheet.filterType.desc=no description +FileSize.exception.notSupported.msg=Not supported for this type of Displayable Item\: {0} +FileTypeChildren.exception.notSupported.msg=Not supported for this type of Displayable Item\: {0} +FileTypeExtensionFilters.tskImgFilter.text=Images +FileTypeExtensionFilters.tskVideoFilter.text=Videos +FileTypeExtensionFilters.tskAudioFilter.text=Audio +FileTypeExtensionFilters.tskArchiveFilter.text=Archives +FileTypeExtensionFilters.tskDocumentFilter.text=Documents +FileTypeExtensionFilters.tskExecFilter.text=Executable +FileTypeExtensionFilters.autDocHtmlFilter.text=HTML +FileTypeExtensionFilters.autDocOfficeFilter.text=Office +FileTypeExtensionFilters.autoDocPdfFilter.text=PDF +FileTypeExtensionFilters.autDocTxtFilter.text=Plain Text +FileTypeExtensionFilters.autDocRtfFilter.text=Rich Text +FileTypeNode.createSheet.filterType.name=Filter Type +FileTypeNode.createSheet.filterType.displayName=Filter Type +FileTypeNode.createSheet.filterType.desc=no description +FileTypeNode.createSheet.fileExt.name=File Extensions +FileTypeNode.createSheet.fileExt.displayName=File Extensions +FileTypeNode.createSheet.fileExt.desc=no description +FileTypesNode.fname.text=File Types +FileTypesNode.createSheet.name.name=Name +FileTypesNode.createSheet.name.displayName=Name +FileTypesNode.createSheet.name.desc=no description +HashsetHits.createSheet.name.name=Name +HashsetHits.createSheet.name.displayName=Name +HashsetHits.createSheet.name.desc=no description +ImageNode.getActions.viewInNewWin.text=View in New Window +ImageNode.getActions.openFileSearchByAttr.text=Open File Search by Attributes +ImageNode.createSheet.name.name=Name +ImageNode.createSheet.name.displayName=Name +ImageNode.createSheet.name.desc=no description +Installer.exception.tskVerStringNull.msg=Sleuth Kit JNI test call returned without error, but version string was null\! +Installer.exception.taskVerStringBang.msg=Sleuth Kit JNI test call returned without error, but version string was ""\! +Installer.tskLibErr.msg=Problem with Sleuth Kit JNI. Test call failed\!\ +\ +Details\: {0} +Installer.tskLibErr.err=Fatal Error\! +InterestingHits.interestingItems.text=INTERESTING ITEMS +InterestingHits.displayName.text=Interesting Items +InterestingHits.createSheet.name.name=Name +InterestingHits.createSheet.name.displayName=Name +InterestingHits.createSheet.name.desc=no description +KeyValueNode.createSheet.name.name=Name +KeyValueNode.createSheet.name.displayName=Name +KeyValueNode.createSheet.name.desc=n/a +KeyValueNode.createSheet.map.desc=n/a +KeywordHits.kwHits.text=Keyword Hits +KeywordHits.simpleLiteralSearch.text=Single Literal Keyword Search +KeywordHits.singleRegexSearch.text=Single Regular Expression Search +KeywordHits.createSheet.name.name=Name +KeywordHits.createSheet.name.displayName=Name +KeywordHits.createSheet.name.desc=no description +KeywordHits.createSheet.listName.name=List Name +KeywordHits.createSheet.listName.displayName=List Name +KeywordHits.createSheet.listName.desc=no description +KeywordHits.createSheet.numChildren.name=Number of Children +KeywordHits.createSheet.numChildren.displayName=Number of Children +KeywordHits.createSheet.numChildren.desc=no description +KeywordHits.createSheet.filesWithHits.name=Files with Hits +KeywordHits.createSheet.filesWithHits.displayName=Files with Hits +KeywordHits.createSheet.filesWithHits.desc=no description +KeywordHits.createNodeForKey.modTime.displayName=Modified Time +KeywordHits.createNodeForKey.modTime.desc=Modified Time +KeywordHits.createNodeForKey.accessTime.displayName=Access Time +KeywordHits.createNodeForKey.accessTime.desc=Access Time +KeywordHits.createNodeForKey.chgTime.displayName=Change Time +KeywordHits.createNodeForKey.chgTime.desc=Change Time +KeywordHits.createNodeForKey.chgTime.name=ChangeTime +KeywordHits.createNodeForKey.accessTime.name=AccessTime +KeywordHits.createNodeForKey.modTime.name=ModifiedTime +KnownFileFilterNode.selectionContext.dataSources=Data Sources +KnownFileFilterNode.selectionContext.views=Views +LayoutFileNode.propertyType.parts=Parts +LayoutFileNode.createSheet.name.name=Name +LayoutFileNode.createSheet.name.displayName=Name +LayoutFileNode.createSheet.name.desc=no description +LayoutFileNode.createSheet.noDescr.text=no description +LayoutFileNode.getActions.viewInNewWin.text=View in New Window +LayoutFileNode.getActions.openInExtViewer.text=Open in External Viewer +LocalFileNode.createSheet.name.name=Name +LocalFileNode.createSheet.name.displayName=Name +LocalFileNode.createSheet.name.desc=no description +LocalFileNode.createSheet.noDescr.text=no description +LocalFileNode.getActions.viewInNewWin.text=View in New Window +LocalFileNode.getActions.openInExtViewer.text=Open in External Viewer +LocalFileNode.getActions.searchFilesSameMd5.text=Search for files with the same MD5 hash +RecentFiles.aut0DayFilter.displayName.text=Final Day +RecentFiles.aut1dayFilter.displayName.text=Final Day - 1 +RecentFiles.aut2dayFilter.displayName.text=Final Day - 2 +RecentFiles.aut3dayFilter.displayName.text=Final Day - 3 +RecentFiles.aut4dayFilter.displayName.text=Final Day - 4 +RecentFiles.aut5dayFilter.displayName.text=Final Day - 5 +RecentFiles.aut6dayFilter.displayName.text=Final Day - 6 +RecentFilesFilterChildren.exception.defaultVisit.msg=Not supported for this type of Displayable Item\: {0} +RecentFilesFilterNode.createSheet.filterType.name=Filter Type +RecentFilesFilterNode.createSheet.filterType.displayName=Filter Type +RecentFilesFilterNode.createSheet.filterType.desc=no description +RecentFilesNode.createSheet.name.name=Name +RecentFilesNode.createSheet.name.displayName=Name +RecentFilesNode.createSheet.name.desc=no description +RecentFilesNode.name.text=Recent Files +ResultsNode.name.text=Results +ResultsNode.createSheet.name.name=Name +ResultsNode.createSheet.name.displayName=Name +ResultsNode.createSheet.name.desc=no description +TagNameNode.namePlusTags.text={0} Tags +TagNameNode.contentTagTypeNodeKey.text=Content Tags +TagNameNode.bbArtTagTypeNodeKey.text=Result Tags +TagNameNode.bookmark.text=Bookmark +TagNameNode.createSheet.name.name=Name +TagNameNode.createSheet.name.displayName=Name +TagsNode.displayName.text=Tags +TagsNode.createSheet.name.name=Name +TagsNode.createSheet.name.displayName=Name +ViewsNode.name.text=Views +ViewsNode.createSheet.name.name=Name +ViewsNode.createSheet.name.displayName=Name +ViewsNode.createSheet.name.desc=no description +VirtualDirectoryNode.getActions.viewInNewWin.text=View in New Window +VirtualDirectoryNode.createSheet.name.name=Name +VirtualDirectoryNode.createSheet.name.displayName=Name +VirtualDirectoryNode.createSheet.name.desc=no description +VirtualDirectoryNode.createSheet.noDesc=no description +VolumeNode.getActions.viewInNewWin.text=View in New Window +VolumeNode.createSheet.name.name=Name +VolumeNode.createSheet.name.displayName=Name +VolumeNode.createSheet.name.desc=no description +VolumeNode.createSheet.id.name=ID +VolumeNode.createSheet.id.displayName=ID +VolumeNode.createSheet.id.desc=no description +VolumeNode.createSheet.startSector.name=Starting Sector +VolumeNode.createSheet.startSector.displayName=Starting Sector +VolumeNode.createSheet.startSector.desc=no description +VolumeNode.createSheet.lenSectors.name=Length in Sectors +VolumeNode.createSheet.lenSectors.displayName=Length in Sectors +VolumeNode.createSheet.lenSectors.desc=no description +VolumeNode.createSheet.description.name=Description +VolumeNode.createSheet.description.displayName=Description +VolumeNode.createSheet.description.desc=no description +VolumeNode.createSheet.flags.name=Flags +VolumeNode.createSheet.flags.displayName=Flags +VolumeNode.createSheet.flags.desc=no description + + + + + diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/datamodel/Bundle_ja.properties new file mode 100644 index 0000000000..3f672341fa --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/datamodel/Bundle_ja.properties @@ -0,0 +1,249 @@ +OpenIDE-Module-Name=\u30C7\u30FC\u30BF\u30E2\u30C7\u30EB +AbstractAbstractFileNode.nameColLbl=\u540D\u79F0 +AbstractAbstractFileNode.locationColLbl=\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3 +AbstractAbstractFileNode.modifiedTimeColLbl=\u4FEE\u6B63\u65E5\u6642 +AbstractAbstractFileNode.changeTimeColLbl=\u5909\u66F4\u65E5\u6642 +AbstractAbstractFileNode.accessTimeColLbl=\u30A2\u30AF\u30BB\u30B9\u65E5\u6642 +AbstractAbstractFileNode.createdTimeColLbl=\u4F5C\u6210\u65E5\u6642 +AbstractAbstractFileNode.sizeColLbl=\u30B5\u30A4\u30BA +AbstractAbstractFileNode.modeColLbl=\u30E2\u30FC\u30C9 +AbstractAbstractFileNode.useridColLbl=\u30E6\u30FC\u30B6ID +AbstractAbstractFileNode.groupidColLbl=\u30B0\u30EB\u30FC\u30D7ID +AbstractAbstractFileNode.knownColLbl=\u65E2\u77E5 +AbstractAbstractFileNode.inHashsetsColLbl=HashSet\u306B\u5B58\u5728 +AbstractAbstractFileNode.md5HashColLbl=MD5\u30CF\u30C3\u30B7\u30E5 +AbstractContentChildren.CreateTSKNodeVisitor.exception.noNodeMsg=\u6307\u5B9A\u3055\u308C\u305FSleuthkitItem\u306E\u30CE\u30FC\u30C9\u304C\u5B9A\u7FA9\u3055\u308C\u3066\u3044\u307E\u305B\u3093 +AbstractContentChildren.createAutopsyNodeVisitor.exception.noNodeMsg=\u6307\u5B9A\u3055\u308C\u305F\u8868\u793A\u53EF\u80FD\u306A\u30A2\u30A4\u30C6\u30E0\u306E\u30CE\u30FC\u30C9\u304C\u5B9A\u7FA9\u3055\u308C\u3066\u3044\u307E\u305B\u3093 +AbstractContentNode.exception.cannotChangeSysName.msg=\u30B7\u30B9\u30C6\u30E0\u540D\u3092\u5909\u66F4\u3067\u304D\u307E\u305B\u3093\u3002 +AbstractFsContentNode.noDesc.text=\u8AAC\u660E\u304C\u3042\u308A\u307E\u305B\u3093 +ArtifactStringContent.getStr.srcFilePath.text=\u30BD\u30FC\u30B9\u30D5\u30A1\u30A4\u30EB\u30D1\u30B9 +ArtifactStringContent.getStr.err=\u30B3\u30F3\u30C6\u30F3\u30C4\u5165\u624B\u30A8\u30E9\u30FC +ArtifactStringContent.exception.msg=\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u304B\u3089\u30D5\u30A1\u30A4\u30EB\u3092\u5165\u624B\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F +ArtifactTypeNode.createSheet.artType.desc=\u8AAC\u660E\u304C\u3042\u308A\u307E\u305B\u3093 +ArtifactTypeNode.createSheet.childCnt.name=\u30C1\u30E3\u30A4\u30EB\u30C9\u6570 +ArtifactTypeNode.createSheet.childCnt.desc=\u8AAC\u660E\u304C\u3042\u308A\u307E\u305B\u3093 +BlackboardArtifactNode.noDesc.text=\u8AAC\u660E\u304C\u3042\u308A\u307E\u305B\u3093 +BlackboardArtifactNode.createSheet.srcFile.name=\u30BD\u30FC\u30B9\u30D5\u30A1\u30A4\u30EB +BlackboardArtifactNode.createSheet.srcFile.displayName=\u30BD\u30FC\u30B9\u30D5\u30A1\u30A4\u30EB +BlackboardArtifactNode.createSheet.ext.name=\u62E1\u5F35\u5B50 +BlackboardArtifactNode.createSheet.ext.displayName=\u62E1\u5F35\u5B50 +BlackboardArtifactNode.createSheet.mimeType.name=MIME\u30BF\u30A4\u30D7 +BlackboardArtifactNode.createSheet.mimeType.displayName=MIME\u30BF\u30A4\u30D7 +BlackboardArtifactNode.createSheet.filePath.name=\u30D5\u30A1\u30A4\u30EB\u30D1\u30B9 +BlackboardArtifactNode.createSheet.filePath.displayName=\u30D5\u30A1\u30A4\u30EB\u30D1\u30B9 +BlackboardArtifactNode.createSheet.dataSrc.name=\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9 +BlackboardArtifactNode.createSheet.dataSrc.displayName=\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9 +BlackboardArtifactNode.getAssocCont.exception.msg=\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u304B\u3089\u30D5\u30A1\u30A4\u30EB\u3092\u5165\u624B\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F +BlackboardArtifactTagNode.createSheet.srcFile.text=\u30BD\u30FC\u30B9\u30D5\u30A1\u30A4\u30EB +BlackboardArtifactTagNode.createSheet.unavail.text=\u4F7F\u7528\u3067\u304D\u307E\u305B\u3093 +BlackboardArtifactTagNode.createSheet.srcFilePath.text=\u30BD\u30FC\u30B9\u30D5\u30A1\u30A4\u30EB\u30D1\u30B9 +BlackboardArtifactTagNode.createSheet.resultType.text=\u7D50\u679C\u30BF\u30A4\u30D7 +BlackboardArtifactTagNode.createSheet.comment.text=\u30B3\u30E1\u30F3\u30C8 +ContentTagNode.createSheet.file.name=\u30D5\u30A1\u30A4\u30EB +ContentTagNode.createSheet.file.displayName=\u30D5\u30A1\u30A4\u30EB +ContentTagNode.createSheet.unavail.path=\u4F7F\u7528\u3067\u304D\u307E\u305B\u3093 +ContentTagNode.createSheet.filePath.name=\u30D5\u30A1\u30A4\u30EB\u30D1\u30B9 +ContentTagNode.createSheet.filePath.displayName=\u30D5\u30A1\u30A4\u30EB\u30D1\u30B9 +ContentTagNode.createSheet.comment.name=\u30B3\u30E1\u30F3\u30C8 +ContentTagNode.createSheet.comment.displayName=\u30B3\u30E1\u30F3\u30C8 +ContentTagTypeNode.displayName.text=\u30D5\u30A1\u30A4\u30EB\u30BF\u30B0 +ContentTagTypeNode.createSheet.name.name=\u540D\u79F0 +ContentTagTypeNode.createSheet.name.displayName=\u540D\u79F0 +ContentUtils.exception.msg={0}\u3092\u62BD\u51FA\u3067\u304D\u307E\u305B\u3093 +DataModelActionsFactory.srcFileInDir.text=\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u5185\u306E\u30BD\u30FC\u30B9\u30D5\u30A1\u30A4\u30EB\u3092\u8868\u793A +DataModelActionsFactory.fileInDir.text=\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u5185\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u8868\u793A +DataModelActionsFactory.viewNewWin.text=\u65B0\u898F\u30A6\u30A3\u30F3\u30C9\u30A6\u306B\u8868\u793A +DataModelActionsFactory.openExtViewer.text=\u5916\u90E8\u30D3\u30E5\u30FC\u30A2\u306B\u8868\u793A +DataModelActionsFactory.srfFileSameMD5.text=\u540C\u3058MD5\u30CF\u30C3\u30B7\u30E5\u3092\u6301\u3064\u30D5\u30A1\u30A4\u30EB\u3092\u691C\u7D22 +DataSourcesNode.name=\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9 +DataSourcesNode.createSheet.name.name=\u540D\u79F0 +DataSourcesNode.createSheet.name.displayName=\u540D\u79F0 +DataSourcesNode.createSheet.name.desc=\u8AAC\u660E\u304C\u3042\u308A\u307E\u305B\u3093 +DeletedContent.fsDelFilter.text=\u30D5\u30A1\u30A4\u30EB\u30B7\u30B9\u30C6\u30E0 +DeletedContent.allDelFilter.text=\u3059\u3079\u3066 +DeletedContent.deletedContentsNode.name=\u524A\u9664\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB +DeletedContent.createSheet.name.name=\u540D\u79F0 +DeletedContent.createSheet.name.displayName=\u540D\u79F0 +DeletedContent.createSheet.name.desc=\u8AAC\u660E\u304C\u3042\u308A\u307E\u305B\u3093 +DeletedContent.createSheet.filterType.name=\u30D5\u30A1\u30A4\u30EB\u30BF\u30FC\u30BF\u30A4\u30D7 +DeletedContent.createSheet.filterType.displayName=\u30D5\u30A3\u30EB\u30BF\u30FC\u30BF\u30A4\u30D7 +DeletedContent.createSheet.filterType.desc=\u8AAC\u660E\u304C\u3042\u308A\u307E\u305B\u3093 +DeletedContent.createKeys.maxObjects.msg=\u8868\u793A\u53EF\u80FD\u306A\u6570\u3088\u308A\u3082\u591A\u304F\u306E\u524A\u9664\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u304C\u5B58\u5728\u3057\u307E\u3059\u3002\u6700\u521D\u306E{0}\u306E\u524A\u9664\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u304C\u8868\u793A\u3055\u308C\u307E\u3059\u3002 +DeletedContent.createNodeForKey.typeNotSupported.msg=\u3053\u306E\u30BF\u30A4\u30D7\u306E\u8868\u793A\u53EF\u80FD\u306A\u30A2\u30A4\u30C6\u30E0\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\uFF1A{0} +DirectoryNode.parFolder.text=[\u30DA\u30A2\u30EC\u30F3\u30C8\u30D5\u30A9\u30EB\u30C0\u30FC] +DirectoryNode.curFolder.text=[\u73FE\u5728\u306E\u30D5\u30A9\u30EB\u30C0\u30FC] +DirectoryNode.getActions.viewFileInDir.text=\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u5185\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u8868\u793A +DirectoryNode.viewInNewWin.text=\u65B0\u898F\u30A6\u30A3\u30F3\u30C9\u30A6\u306B\u8868\u793A +EmailExtracted.mailAccount.text=\u30A2\u30AB\u30A6\u30F3\u30C8 +EmailExtracted.mailFolder.text=\u30D5\u30A9\u30EB\u30C0\u30FC +EmailExtracted.defaultAcct.text=\u30C7\u30D5\u30A9\u30EB\u30C8 +EmailExtracted.defaultFolder.text=\u30C7\u30D5\u30A9\u30EB\u30C8 +EmailExtracted.createSheet.name.name=\u540D\u79F0 +EmailExtracted.createSheet.name.displayName=\u540D\u79F0 +EmailExtracted.createSheet.name.desc=\u8AAC\u660E\u304C\u3042\u308A\u307E\u305B\u3093 +ExtractedContentNode.name.text=\u62BD\u51FA\u3055\u308C\u305F\u30B3\u30F3\u30C6\u30F3\u30C4 +ExtractedContentNode.createSheet.name.name=\u540D\u79F0 +ExtractedContentNode.createSheet.name.displayName=\u540D\u79F0 +ExtractedContentNode.createSheet.name.desc=\u8AAC\u660E\u304C\u3042\u308A\u307E\u305B\u3093 +FileNode.viewFileInDir.text=\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u5185\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u8868\u793A +FileNode.getActions.viewInNewWin.text=\u65B0\u898F\u30A6\u30A3\u30F3\u30C9\u30A6\u306B\u8868\u793A +FileNode.getActions.openInExtViewer.text=\u5916\u90E8\u30D3\u30E5\u30FC\u30A2\u3067\u958B\u304F +FileNode.getActions.searchFilesSameMD5.text=\u540C\u3058MD5\u30CF\u30C3\u30B7\u30E5\u3092\u6301\u3064\u30D5\u30A1\u30A4\u30EB\u3092\u691C\u7D22 +FileSize.fileSizeRootNode.name=\u30D5\u30A1\u30A4\u30EB\u30B5\u30A4\u30BA +FileSize.createSheet.name.name=\u540D\u79F0 +FileSize.createSheet.name.displayName=\u540D\u79F0 +FileSize.createSheet.name.desc=\u8AAC\u660E\u304C\u3042\u308A\u307E\u305B\u3093 +FileSize.createSheet.filterType.name=\u30D5\u30A3\u30EB\u30BF\u30FC\u30BF\u30A4\u30D7 +FileSize.createSheet.filterType.displayName=\u30D5\u30A3\u30EB\u30BF\u30FC\u30BF\u30A4\u30D7 +FileSize.createSheet.filterType.desc=\u8AAC\u660E\u304C\u3042\u308A\u307E\u305B\u3093 +FileSize.exception.notSupported.msg=\u3053\u306E\u30BF\u30A4\u30D7\u306E\u8868\u793A\u53EF\u80FD\u306A\u30A2\u30A4\u30C6\u30E0\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\uFF1A{0} +FileTypeChildren.exception.notSupported.msg=\u3053\u306E\u30BF\u30A4\u30D7\u306E\u8868\u793A\u53EF\u80FD\u306A\u30A2\u30A4\u30C6\u30E0\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\uFF1A{0} +FileTypeExtensionFilters.tskImgFilter.text=\u753B\u50CF +FileTypeExtensionFilters.tskVideoFilter.text=\u30D3\u30C7\u30AA +FileTypeExtensionFilters.tskAudioFilter.text=\u30AA\u30FC\u30C7\u30A3\u30AA +FileTypeExtensionFilters.tskArchiveFilter.text=\u30A2\u30FC\u30AB\u30A4\u30D6 +FileTypeExtensionFilters.tskDocumentFilter.text=\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8 +FileTypeExtensionFilters.tskExecFilter.text=\u5B9F\u884C\u53EF\u80FD +FileTypeExtensionFilters.autDocHtmlFilter.text=HTML +FileTypeExtensionFilters.autDocOfficeFilter.text=\u30AA\u30D5\u30A3\u30B9 +FileTypeExtensionFilters.autoDocPdfFilter.text=PDF +FileTypeExtensionFilters.autDocTxtFilter.text=\u30D7\u30EC\u30FC\u30F3\u30C6\u30AD\u30B9\u30C8 +FileTypeExtensionFilters.autDocRtfFilter.text=\u30EA\u30C3\u30C1\u30C6\u30AD\u30B9\u30C8 +FileTypeNode.createSheet.filterType.name=\u30D5\u30A3\u30EB\u30BF\u30FC\u30BF\u30A4\u30D7 +FileTypeNode.createSheet.filterType.displayName=\u30D5\u30A3\u30EB\u30BF\u30FC\u30BF\u30A4\u30D7 +FileTypeNode.createSheet.filterType.desc=\u8AAC\u660E\u304C\u3042\u308A\u307E\u305B\u3093 +FileTypeNode.createSheet.fileExt.name=\u30D5\u30A1\u30A4\u30EB\u62E1\u5F35\u5B50 +FileTypeNode.createSheet.fileExt.displayName=\u30D5\u30A1\u30A4\u30EB\u62E1\u5F35\u5B50 +FileTypeNode.createSheet.fileExt.desc=\u8AAC\u660E\u304C\u3042\u308A\u307E\u305B\u3093 +FileTypesNode.fname.text=\u30D5\u30A1\u30A4\u30EB\u30BF\u30A4\u30D7 +FileTypesNode.createSheet.name.name=\u540D\u79F0 +FileTypesNode.createSheet.name.displayName=\u540D\u79F0 +FileTypesNode.createSheet.name.desc=\u8AAC\u660E\u304C\u3042\u308A\u307E\u305B\u3093 +HashsetHits.createSheet.name.name=\u540D\u79F0 +HashsetHits.createSheet.name.displayName=\u540D\u79F0 +HashsetHits.createSheet.name.desc=\u8AAC\u660E\u304C\u3042\u308A\u307E\u305B\u3093 +ImageNode.getActions.viewInNewWin.text=\u65B0\u898F\u30A6\u30A3\u30F3\u30C9\u30A6\u306B\u8868\u793A +ImageNode.getActions.openFileSearchByAttr.text=\u5C5E\u6027\u306B\u3088\u308B\u30D5\u30A1\u30A4\u30EB\u691C\u7D22\u3092\u958B\u304F +ImageNode.createSheet.name.name=\u540D\u79F0 +ImageNode.createSheet.name.displayName=\u540D\u79F0 +ImageNode.createSheet.name.desc=\u8AAC\u660E\u304C\u3042\u308A\u307E\u305B\u3093 +Installer.exception.tskVerStringNull.msg=Sleuth Kit JNI\u30C6\u30B9\u30C8\u30B3\u30FC\u30EB\u3067\u306F\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u305B\u3093\u3067\u3057\u305F\u304C\u3001\u30D0\u30FC\u30B8\u30E7\u30F3\u30B9\u30C8\u30EA\u30F3\u30B0\u306F\u30CC\u30EB\u3067\u3057\u305F\uFF01 +Installer.tskLibErr.msg=Sleuth Kit JNI\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u30C6\u30B9\u30C8\u30B3\u30FC\u30EB\u304C\u5931\u6557\u3057\u307E\u3057\u305F\uFF1A\ +\ +\u8A73\u7D30\uFF1A {0} +Installer.tskLibErr.err=\u81F4\u547D\u7684\u30A8\u30E9\u30FC\uFF1A +InterestingHits.interestingItems.text=\u602A\u3057\u3044\u30A2\u30A4\u30C6\u30E0 +InterestingHits.displayName.text=\u602A\u3057\u3044\u30A2\u30A4\u30C6\u30E0 +InterestingHits.createSheet.name.name=\u540D\u79F0 +InterestingHits.createSheet.name.displayName=\u540D\u79F0 +InterestingHits.createSheet.name.desc=\u8AAC\u660E\u304C\u3042\u308A\u307E\u305B\u3093 +KeyValueNode.createSheet.name.name=\u540D\u79F0 +KeyValueNode.createSheet.name.displayName=\u540D\u79F0 +KeyValueNode.createSheet.name.desc=\u8A72\u5F53\u306A\u3057 +KeyValueNode.createSheet.map.desc=\u8A72\u5F53\u306A\u3057 +KeywordHits.kwHits.text=\u30AD\u30FC\u30EF\u30FC\u30C9\u30D2\u30C3\u30C8 +KeywordHits.createSheet.name.name=\u540D\u79F0 +KeywordHits.createSheet.name.displayName=\u540D\u79F0 +KeywordHits.createSheet.name.desc=\u8AAC\u660E\u304C\u3042\u308A\u307E\u305B\u3093 +KeywordHits.createSheet.listName.name=\u30EA\u30B9\u30C8\u540D +KeywordHits.createSheet.listName.displayName=\u30EA\u30B9\u30C8\u540D +KeywordHits.createSheet.listName.desc=\u8AAC\u660E\u304C\u3042\u308A\u307E\u305B\u3093 +KeywordHits.createSheet.numChildren.desc=\u8AAC\u660E\u304C\u3042\u308A\u307E\u305B\u3093 +KeywordHits.createSheet.filesWithHits.name=\u30D2\u30C3\u30C8\u3057\u305F\u30D5\u30A1\u30A4\u30EB +KeywordHits.createSheet.filesWithHits.displayName=\u30D2\u30C3\u30C8\u3057\u305F\u30D5\u30A1\u30A4\u30EB +KeywordHits.createSheet.filesWithHits.desc=\u8AAC\u660E\u304C\u3042\u308A\u307E\u305B\u3093 +KeywordHits.createNodeForKey.modTime.displayName= +KeywordHits.createNodeForKey.modTime.desc=\u4FEE\u6B63\u65E5\u6642 +KeywordHits.createNodeForKey.accessTime.displayName=\u30A2\u30AF\u30BB\u30B9\u65E5\u6642 +KeywordHits.createNodeForKey.accessTime.desc=\u30A2\u30AF\u30BB\u30B9\u65E5\u6642 +KeywordHits.createNodeForKey.chgTime.displayName=\u5909\u66F4\u65E5\u6642 +KeywordHits.createNodeForKey.chgTime.desc=\u5909\u66F4\u65E5\u6642 +KeywordHits.createNodeForKey.chgTime.name=\u5909\u66F4\u65E5\u6642 +KeywordHits.createNodeForKey.accessTime.name=\u30A2\u30AF\u30BB\u30B9\u65E5\u6642 +KeywordHits.createNodeForKey.modTime.name=\u4FEE\u6B63\u65E5\u6642 +KnownFileFilterNode.selectionContext.dataSources=\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9 +KnownFileFilterNode.selectionContext.views=\u30D3\u30E5\u30FC +LayoutFileNode.propertyType.parts=\u30D1\u30FC\u30C4 +LayoutFileNode.createSheet.name.name=\u540D\u79F0 +LayoutFileNode.createSheet.name.displayName=\u540D\u79F0 +LayoutFileNode.createSheet.name.desc=\u8AAC\u660E\u304C\u3042\u308A\u307E\u305B\u3093 +LayoutFileNode.createSheet.noDescr.text=\u8AAC\u660E\u304C\u3042\u308A\u307E\u305B\u3093 +LayoutFileNode.getActions.viewInNewWin.text=\u65B0\u898F\u30A6\u30A3\u30F3\u30C9\u30A6\u3067\u8868\u793A +LayoutFileNode.getActions.openInExtViewer.text=\u5916\u90E8\u30D3\u30E5\u30FC\u30A2\u3067\u958B\u304F +LocalFileNode.createSheet.name.name=\u540D\u79F0 +LocalFileNode.createSheet.name.displayName=\u540D\u79F0 +LocalFileNode.createSheet.name.desc=\u8AAC\u660E\u304C\u3042\u308A\u307E\u305B\u3093 +LocalFileNode.createSheet.noDescr.text=\u8AAC\u660E\u304C\u3042\u308A\u307E\u305B\u3093 +LocalFileNode.getActions.viewInNewWin.text=\u65B0\u898F\u30A6\u30A3\u30F3\u30C9\u30A6\u306B\u8868\u793A +LocalFileNode.getActions.openInExtViewer.text=\u5916\u90E8\u30D3\u30E5\u30FC\u30A2\u3067\u958B\u304F +LocalFileNode.getActions.searchFilesSameMd5.text=\u540C\u3058MD5\u30CF\u30C3\u30B7\u30E5\u3092\u6301\u3064\u30D5\u30A1\u30A4\u30EB\u3092\u691C\u7D22 +RecentFiles.aut0DayFilter.displayName.text=\u6700\u7D42\u65E5 +RecentFiles.aut1dayFilter.displayName.text=\u6700\u7D42\u65E5 - 1 +RecentFiles.aut2dayFilter.displayName.text=\u6700\u7D42\u65E5 - \uFF12 +RecentFiles.aut3dayFilter.displayName.text=\u6700\u7D42\u65E5 - \uFF13 +RecentFiles.aut4dayFilter.displayName.text=\u6700\u7D42\u65E5 - \uFF14 +RecentFiles.aut5dayFilter.displayName.text=\u6700\u7D42\u65E5 - \uFF15 +RecentFiles.aut6dayFilter.displayName.text=\u6700\u7D42\u65E5 - \uFF16 +RecentFilesFilterChildren.exception.defaultVisit.msg=\u3053\u306E\u30BF\u30A4\u30D7\u306E\u8868\u793A\u3067\u304D\u308B\u30A2\u30A4\u30C6\u30E0 +Installer.exception.taskVerStringBang.msg=Sleuth Kit JNI\u30C6\u30B9\u30C8\u30B3\u30FC\u30EB\u3067\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u305B\u3093\u3067\u3057\u305F\u304C\u3001\u30D0\u30FC\u30B8\u30E7\u30F3\u30B9\u30C8\u30EA\u30F3\u30B0\u306F""\u3067\u3057\u305F\uFF01 +RecentFilesFilterNode.createSheet.filterType.name=\u30D5\u30A3\u30EB\u30BF\u30FC\u30BF\u30A4\u30D7 +RecentFilesFilterNode.createSheet.filterType.displayName=\u30D5\u30A3\u30EB\u30BF\u30FC\u30BF\u30A4\u30D7 +RecentFilesFilterNode.createSheet.filterType.desc=\u8AAC\u660E\u304C\u3042\u308A\u307E\u305B\u3093 +RecentFilesNode.createSheet.name.name=\u540D\u79F0 +RecentFilesNode.createSheet.name.displayName=\u540D\u79F0 +RecentFilesNode.createSheet.name.desc=\u8AAC\u660E\u304C\u3042\u308A\u307E\u305B\u3093 +RecentFilesNode.name.text=\u6700\u8FD1\u4F7F\u7528\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB +ResultsNode.name.text=\u7D50\u679C +ResultsNode.createSheet.name.name=\u540D\u79F0 +ResultsNode.createSheet.name.displayName=\u540D\u79F0 +ResultsNode.createSheet.name.desc=\u8AAC\u660E\u304C\u3042\u308A\u307E\u305B\u3093 +TagNameNode.namePlusTags.text={0}\u30BF\u30B0 +TagNameNode.contentTagTypeNodeKey.text=\u30B3\u30F3\u30C6\u30F3\u30C4\u30BF\u30B0 +TagNameNode.bbArtTagTypeNodeKey.text=\u7D50\u679C\u30BF\u30B0 +TagNameNode.bookmark.text=\u30D6\u30C3\u30AF\u30DE\u30FC\u30AF +TagNameNode.createSheet.name.name=\u540D\u79F0 +TagNameNode.createSheet.name.displayName=\u540D\u79F0 +TagsNode.displayName.text=\u30BF\u30B0 +TagsNode.createSheet.name.name=\u540D\u79F0 +AbstractAbstractFileNode.flagsDirColLbl=\u30D5\u30E9\u30B0\uFF08\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\uFF09 +AbstractAbstractFileNode.flagsMetaColLbl=\u30D5\u30E9\u30B0\uFF08\u30E1\u30BF\u30C7\u30FC\u30BF\uFF09 +AbstractAbstractFileNode.metaAddrColLbl=\u30E1\u30BF\u30C7\u30FC\u30BF\u30A2\u30C9\u30EC\u30B9 +AbstractAbstractFileNode.attrAddrColLbl=\u5C5E\u6027\u30A2\u30C9\u30EC\u30B9 +AbstractAbstractFileNode.typeDirColLbl=\u30BF\u30A4\u30D7\uFF08\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\uFF09 +AbstractAbstractFileNode.typeMetaColLbl=\u30BF\u30A4\u30D7\uFF08\u30E1\u30BF\u30C7\u30FC\u30BF\uFF09 +ArtifactTypeNode.createSheet.childCnt.displayName=\u30C1\u30E3\u30A4\u30EB\u30C9\u6570 +TagsNode.createSheet.name.displayName=\u540D\u79F0 +ViewsNode.name.text=\u30D3\u30E5\u30FC +ViewsNode.createSheet.name.name=\u540D\u79F0 +ViewsNode.createSheet.name.displayName=\u540D\u79F0 +ViewsNode.createSheet.name.desc=\u8AAC\u660E\u304C\u3042\u308A\u307E\u305B\u3093 +VirtualDirectoryNode.getActions.viewInNewWin.text=\u65B0\u898F\u30A6\u30A3\u30F3\u30C9\u30A6\u306B\u8868\u793A +VirtualDirectoryNode.createSheet.name.name=\u540D\u79F0 +VirtualDirectoryNode.createSheet.name.displayName=\u540D\u79F0 +VirtualDirectoryNode.createSheet.name.desc=\u8AAC\u660E\u304C\u3042\u308A\u307E\u305B\u3093 +VirtualDirectoryNode.createSheet.noDesc=\u8AAC\u660E\u304C\u3042\u308A\u307E\u305B\u3093 +VolumeNode.getActions.viewInNewWin.text=\u65B0\u898F\u30A6\u30A3\u30F3\u30C9\u30A6\u306B\u8868\u793A +VolumeNode.createSheet.name.name=\u540D\u79F0 +VolumeNode.createSheet.name.displayName=\u540D\u79F0 +VolumeNode.createSheet.name.desc=\u8AAC\u660E\u304C\u3042\u308A\u307E\u305B\u3093 +VolumeNode.createSheet.id.name=ID +VolumeNode.createSheet.id.displayName=ID +VolumeNode.createSheet.id.desc=\u8AAC\u660E\u304C\u3042\u308A\u307E\u305B\u3093 +VolumeNode.createSheet.startSector.name=\u6700\u521D\u306E\u30BB\u30AF\u30BF\u30FC +VolumeNode.createSheet.startSector.displayName=\u6700\u521D\u306E\u30BB\u30AF\u30BF\u30FC +VolumeNode.createSheet.startSector.desc=\u8AAC\u660E\u304C\u3042\u308A\u307E\u305B\u3093 +VolumeNode.createSheet.lenSectors.name=\u30BB\u30AF\u30BF\u30FC\u306E\u9577\u3055 +VolumeNode.createSheet.lenSectors.displayName=\u30BB\u30AF\u30BF\u30FC\u306E\u9577\u3055 +VolumeNode.createSheet.lenSectors.desc=\u8AAC\u660E\u304C\u3042\u308A\u307E\u305B\u3093 +VolumeNode.createSheet.description.name=\u8AAC\u660E +VolumeNode.createSheet.description.displayName=\u8AAC\u660E +VolumeNode.createSheet.description.desc=\u8AAC\u660E\u304C\u3042\u308A\u307E\u305B\u3093 +VolumeNode.createSheet.flags.name=\u30D5\u30E9\u30B0 +VolumeNode.createSheet.flags.displayName=\u30D5\u30E9\u30B0 +VolumeNode.createSheet.flags.desc=\u8AAC\u660E\u304C\u3042\u308A\u307E\u305B\u3093 +ArtifactTypeNode.createSheet.artType.name=\u6210\u679C\u7269\u30BF\u30A4\u30D7 +ArtifactTypeNode.createSheet.artType.displayName=\u6210\u679C\u7269\u30BF\u30A4\u30D7 +KeywordHits.createSheet.numChildren.name=\u30C1\u30E3\u30A4\u30EB\u30C9\u6570 +KeywordHits.createSheet.numChildren.displayName=\u30C1\u30E3\u30A4\u30EB\u30C9\u6570 +KeywordHits.simpleLiteralSearch.text=\u30B7\u30F3\u30B0\u30EB\u30EA\u30C6\u30E9\u30EB\u691C\u7D22 +KeywordHits.singleRegexSearch.text=\u30B7\u30F3\u30B0\u30EB\u6B63\u898F\u8868\u73FE\u691C\u7D22 \ No newline at end of file diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/ContentTagNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/ContentTagNode.java index 5749b53aa3..efaa296933 100755 --- a/Core/src/org/sleuthkit/autopsy/datamodel/ContentTagNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/ContentTagNode.java @@ -25,6 +25,7 @@ import java.util.logging.Logger; import javax.swing.Action; import org.openide.nodes.Children; import org.openide.nodes.Sheet; +import org.openide.util.NbBundle; import org.openide.util.lookup.Lookups; import org.sleuthkit.autopsy.actions.DeleteContentTagAction; import org.sleuthkit.datamodel.ContentTag; @@ -57,17 +58,26 @@ import org.sleuthkit.datamodel.TskCoreException; propertySheet.put(properties); } - properties.put(new NodeProperty("File", "File", "", tag.getContent().getName())); + properties.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "ContentTagNode.createSheet.file.name"), + NbBundle.getMessage(this.getClass(), "ContentTagNode.createSheet.file.displayName"), + "", + tag.getContent().getName())); String contentPath; try { contentPath = tag.getContent().getUniquePath(); } catch (TskCoreException ex) { Logger.getLogger(ContentTagNode.class.getName()).log(Level.SEVERE, "Failed to get path for content (id = " + tag.getContent().getId() + ")", ex); - contentPath = "Unavailable"; + contentPath = NbBundle.getMessage(this.getClass(), "ContentTagNode.createSheet.unavail.path"); } - properties.put(new NodeProperty("File Path", "File Path", "", contentPath)); - properties.put(new NodeProperty("Comment", "Comment", "", tag.getComment())); + properties.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "ContentTagNode.createSheet.filePath.name"), + NbBundle.getMessage(this.getClass(), "ContentTagNode.createSheet.filePath.displayName"), + "", + contentPath)); + properties.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "ContentTagNode.createSheet.comment.name"), + NbBundle.getMessage(this.getClass(), "ContentTagNode.createSheet.comment.displayName"), + "", + tag.getComment())); return propertySheet; } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/ContentTagTypeNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/ContentTagTypeNode.java index 41dad8ac5b..b6a39b0266 100755 --- a/Core/src/org/sleuthkit/autopsy/datamodel/ContentTagTypeNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/ContentTagTypeNode.java @@ -24,6 +24,7 @@ import org.openide.nodes.ChildFactory; import org.openide.nodes.Children; import org.openide.nodes.Node; import org.openide.nodes.Sheet; +import org.openide.util.NbBundle; import org.openide.util.lookup.Lookups; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.coreutils.Logger; @@ -37,7 +38,7 @@ import org.sleuthkit.datamodel.TskCoreException; * then by tag name. */ public class ContentTagTypeNode extends DisplayableItemNode { - private static final String DISPLAY_NAME = "File Tags"; + private static final String DISPLAY_NAME = NbBundle.getMessage(ContentTagTypeNode.class, "ContentTagTypeNode.displayName.text"); private static final String ICON_PATH = "org/sleuthkit/autopsy/images/tag-folder-blue-icon-16.png"; public ContentTagTypeNode(TagName tagName) { @@ -65,7 +66,10 @@ public class ContentTagTypeNode extends DisplayableItemNode { propertySheet.put(properties); } - properties.put(new NodeProperty("Name", "Name", "", getName())); + properties.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "ContentTagTypeNode.createSheet.name.name"), + NbBundle.getMessage(this.getClass(), "ContentTagTypeNode.createSheet.name.displayName"), + "", + getName())); return propertySheet; } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/ContentUtils.java b/Core/src/org/sleuthkit/autopsy/datamodel/ContentUtils.java index 121b5a1cfa..ff27c94124 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/ContentUtils.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/ContentUtils.java @@ -25,6 +25,8 @@ import java.text.SimpleDateFormat; import java.util.TimeZone; import java.util.logging.Level; import java.util.prefs.Preferences; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import javax.swing.SwingWorker; import org.netbeans.api.progress.ProgressHandle; @@ -50,7 +52,7 @@ public final class ContentUtils { private final static Logger logger = Logger.getLogger(ContentUtils.class.getName()); private static final SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z"); private static final SimpleDateFormat dateFormatterISO8601 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); - + private static boolean displayInLocalTime; // don't instantiate private ContentUtils() { throw new AssertionError(); @@ -104,12 +106,11 @@ public final class ContentUtils { public static String getStringTimeISO8601(long epochSeconds, Content c) { return getStringTimeISO8601(epochSeconds, getTimeZone(c)); } - + public static TimeZone getTimeZone(Content c) { - Preferences generalPanelPrefs = NbPreferences.root().node("/org/sleuthkit/autopsy/core"); - boolean useLocalTime = generalPanelPrefs.getBoolean("useLocalTime", true); + try { - if (!useLocalTime) { + if (!getDisplayInLocalTime()) { return TimeZone.getTimeZone("GMT"); } else { @@ -356,8 +357,23 @@ public final class ContentUtils { @Override protected Void defaultVisit(Content cntnt) { - throw new UnsupportedOperationException("Can't extract a " - + cntnt.getClass().getSimpleName()); + throw new UnsupportedOperationException(NbBundle.getMessage(this.getClass(), + "ContentUtils.exception.msg", + cntnt.getClass().getSimpleName())); } } + /**sets displayInlocalTime value based on button in GeneralPanel.java + * + * @param flag + */ + public static void setDisplayInLocalTime(boolean flag) { + displayInLocalTime = flag; + } + /** get global timezone setting for displaying time values + * + * @return + */ + public static boolean getDisplayInLocalTime(){ + return displayInLocalTime; + } } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/DataModelActionsFactory.java b/Core/src/org/sleuthkit/autopsy/datamodel/DataModelActionsFactory.java index 6660d61868..b69f25ef6d 100755 --- a/Core/src/org/sleuthkit/autopsy/datamodel/DataModelActionsFactory.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/DataModelActionsFactory.java @@ -21,6 +21,8 @@ package org.sleuthkit.autopsy.datamodel; import java.util.ArrayList; import java.util.List; import javax.swing.Action; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.actions.AddBlackboardArtifactTagAction; import org.sleuthkit.autopsy.actions.AddContentTagAction; import org.sleuthkit.autopsy.coreutils.ContextMenuExtensionPoint; @@ -46,17 +48,28 @@ import org.sleuthkit.datamodel.VirtualDirectory; // method could be implemented. If the different nodes are necessary, is it merely because of some misuse of the Visitor pattern somewhere? // 2. All of this would be much improved by not constructing nodes with actions, but this might be necessary with pushing of nodes rather than use of lookups to // handle selections. -class DataModelActionsFactory { +class DataModelActionsFactory { + public static final String VIEW_SOURCE_FILE_IN_DIR = NbBundle + .getMessage(DataModelActionsFactory.class, "DataModelActionsFactory.srcFileInDir.text"); + public static final String VIEW_FILE_IN_DIR = NbBundle + .getMessage(DataModelActionsFactory.class, "DataModelActionsFactory.fileInDir.text"); + public static final String VIEW_IN_NEW_WINDOW = NbBundle + .getMessage(DataModelActionsFactory.class, "DataModelActionsFactory.viewNewWin.text"); + public static final String OPEN_IN_EXTERNAL_VIEWER = NbBundle + .getMessage(DataModelActionsFactory.class, "DataModelActionsFactory.openExtViewer.text"); + public static final String SEARCH_FOR_FILES_SAME_MD5 = NbBundle + .getMessage(DataModelActionsFactory.class, "DataModelActionsFactory.srfFileSameMD5.text"); + static List getActions(File file, boolean isArtifactSource) { List actions = new ArrayList<>(); - actions.add(new ViewContextAction((isArtifactSource ? "View Source File in Directory" : "View File in Directory"), file)); + actions.add(new ViewContextAction((isArtifactSource ? VIEW_SOURCE_FILE_IN_DIR : VIEW_FILE_IN_DIR), file)); final FileNode fileNode = new FileNode(file); actions.add(null); // creates a menu separator - actions.add(new NewWindowViewAction("View in New Window", fileNode)); - actions.add(new ExternalViewerAction("Open in External Viewer", fileNode)); + actions.add(new NewWindowViewAction(VIEW_IN_NEW_WINDOW, fileNode)); + actions.add(new ExternalViewerAction(OPEN_IN_EXTERNAL_VIEWER, fileNode)); actions.add(null); // creates a menu separator actions.add(ExtractAction.getInstance()); - actions.add(new HashSearchAction("Search for files with the same MD5 hash", fileNode)); + actions.add(new HashSearchAction(SEARCH_FOR_FILES_SAME_MD5, fileNode)); actions.add(null); // creates a menu separator actions.add(AddContentTagAction.getInstance()); if (isArtifactSource) { @@ -68,11 +81,11 @@ class DataModelActionsFactory { static List getActions(LayoutFile file, boolean isArtifactSource) { List actions = new ArrayList<>(); - actions.add(new ViewContextAction((isArtifactSource ? "View Source File in Directory" : "View File in Directory"), file)); + actions.add(new ViewContextAction((isArtifactSource ? VIEW_SOURCE_FILE_IN_DIR : VIEW_FILE_IN_DIR), file)); LayoutFileNode layoutFileNode = new LayoutFileNode(file); actions.add(null); // creates a menu separator - actions.add(new NewWindowViewAction("View in New Window", layoutFileNode)); - actions.add(new ExternalViewerAction("Open in External Viewer", layoutFileNode)); + actions.add(new NewWindowViewAction(VIEW_IN_NEW_WINDOW, layoutFileNode)); + actions.add(new ExternalViewerAction(OPEN_IN_EXTERNAL_VIEWER, layoutFileNode)); actions.add(null); // creates a menu separator actions.add(ExtractAction.getInstance());// actions.add(null); // creates a menu separator @@ -86,11 +99,11 @@ class DataModelActionsFactory { static List getActions(Directory directory, boolean isArtifactSource) { List actions = new ArrayList<>(); - actions.add(new ViewContextAction((isArtifactSource ? "View Source File in Directory" : "View File in Directory"), directory)); + actions.add(new ViewContextAction((isArtifactSource ? VIEW_SOURCE_FILE_IN_DIR : VIEW_FILE_IN_DIR), directory)); DirectoryNode directoryNode = new DirectoryNode(directory); actions.add(null); // creates a menu separator - actions.add(new NewWindowViewAction("View in New Window", directoryNode)); - actions.add(new ExternalViewerAction("Open in External Viewer", directoryNode)); + actions.add(new NewWindowViewAction(VIEW_IN_NEW_WINDOW, directoryNode)); + actions.add(new ExternalViewerAction(OPEN_IN_EXTERNAL_VIEWER, directoryNode)); actions.add(null); // creates a menu separator actions.add(ExtractAction.getInstance()); actions.add(null); // creates a menu separator @@ -104,11 +117,11 @@ class DataModelActionsFactory { static List getActions(VirtualDirectory directory, boolean isArtifactSource) { List actions = new ArrayList<>(); - actions.add(new ViewContextAction((isArtifactSource ? "View Source File in Directory" : "View File in Directory"), directory)); + actions.add(new ViewContextAction((isArtifactSource ? VIEW_SOURCE_FILE_IN_DIR : VIEW_FILE_IN_DIR), directory)); VirtualDirectoryNode directoryNode = new VirtualDirectoryNode(directory); actions.add(null); // creates a menu separator - actions.add(new NewWindowViewAction("View in New Window", directoryNode)); - actions.add(new ExternalViewerAction("Open in External Viewer", directoryNode)); + actions.add(new NewWindowViewAction(VIEW_IN_NEW_WINDOW, directoryNode)); + actions.add(new ExternalViewerAction(OPEN_IN_EXTERNAL_VIEWER, directoryNode)); actions.add(null); // creates a menu separator actions.add(ExtractAction.getInstance()); actions.add(null); // creates a menu separator @@ -122,11 +135,11 @@ class DataModelActionsFactory { static List getActions(LocalFile file, boolean isArtifactSource) { List actions = new ArrayList<>(); - actions.add(new ViewContextAction((isArtifactSource ? "View Source File in Directory" : "View File in Directory"), file)); + actions.add(new ViewContextAction((isArtifactSource ? VIEW_SOURCE_FILE_IN_DIR : VIEW_FILE_IN_DIR), file)); final LocalFileNode localFileNode = new LocalFileNode(file); actions.add(null); // creates a menu separator - actions.add(new NewWindowViewAction("View in New Window", localFileNode)); - actions.add(new ExternalViewerAction("Open in External Viewer", localFileNode)); + actions.add(new NewWindowViewAction(VIEW_IN_NEW_WINDOW, localFileNode)); + actions.add(new ExternalViewerAction(OPEN_IN_EXTERNAL_VIEWER, localFileNode)); actions.add(null); // creates a menu separator actions.add(ExtractAction.getInstance()); actions.add(null); // creates a menu separator @@ -140,11 +153,11 @@ class DataModelActionsFactory { static List getActions(DerivedFile file, boolean isArtifactSource) { List actions = new ArrayList<>(); - actions.add(new ViewContextAction((isArtifactSource ? "View Source File in Directory" : "View File in Directory"), file)); + actions.add(new ViewContextAction((isArtifactSource ? VIEW_SOURCE_FILE_IN_DIR : VIEW_FILE_IN_DIR), file)); final LocalFileNode localFileNode = new LocalFileNode(file); actions.add(null); // creates a menu separator - actions.add(new NewWindowViewAction("View in New Window", localFileNode)); - actions.add(new ExternalViewerAction("Open in External Viewer", localFileNode)); + actions.add(new NewWindowViewAction(VIEW_IN_NEW_WINDOW, localFileNode)); + actions.add(new ExternalViewerAction(OPEN_IN_EXTERNAL_VIEWER, localFileNode)); actions.add(null); // creates a menu separator actions.add(ExtractAction.getInstance()); actions.add(null); // creates a menu separator diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/DataSourcesNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/DataSourcesNode.java index c8f2e93e29..26d2409bf4 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/DataSourcesNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/DataSourcesNode.java @@ -19,8 +19,9 @@ package org.sleuthkit.autopsy.datamodel; import java.util.List; -import org.openide.nodes.AbstractNode; + import org.openide.nodes.Sheet; +import org.openide.util.NbBundle; import org.openide.util.lookup.Lookups; import org.sleuthkit.datamodel.Content; @@ -29,7 +30,7 @@ import org.sleuthkit.datamodel.Content; */ public class DataSourcesNode extends DisplayableItemNode { - public static final String NAME = "Data Sources"; + public static final String NAME = NbBundle.getMessage(DataSourcesNode.class, "DataSourcesNode.name"); public DataSourcesNode(List images) { super(new RootContentChildren(images), Lookups.singleton(NAME)); @@ -57,10 +58,10 @@ public class DataSourcesNode extends DisplayableItemNode { s.put(ss); } - ss.put(new NodeProperty("Name", - "Name", - "no description", - NAME)); + ss.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "DataSourcesNode.createSheet.name.name"), + NbBundle.getMessage(this.getClass(), "DataSourcesNode.createSheet.name.displayName"), + NbBundle.getMessage(this.getClass(), "DataSourcesNode.createSheet.name.desc"), + NAME)); return s; } } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/DeletedContent.java b/Core/src/org/sleuthkit/autopsy/datamodel/DeletedContent.java index bf85dd703a..f2e6bc1912 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/DeletedContent.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/DeletedContent.java @@ -29,6 +29,7 @@ import org.openide.nodes.ChildFactory; import org.openide.nodes.Children; import org.openide.nodes.Node; import org.openide.nodes.Sheet; +import org.openide.util.NbBundle; import org.openide.util.lookup.Lookups; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.datamodel.AbstractFile; @@ -51,8 +52,12 @@ public class DeletedContent implements AutopsyVisitableItem { public enum DeletedContentFilter implements AutopsyVisitableItem { - FS_DELETED_FILTER(0, "FS_DELETED_FILTER", "File System"), - ALL_DELETED_FILTER(1, "ALL_DELETED_FILTER", "All"); + FS_DELETED_FILTER(0, + "FS_DELETED_FILTER", + NbBundle.getMessage(DeletedContent.class, "DeletedContent.fsDelFilter.text")), + ALL_DELETED_FILTER(1, + "ALL_DELETED_FILTER", + NbBundle.getMessage(DeletedContent.class, "DeletedContent.allDelFilter.text")); private int id; private String name; private String displayName; @@ -97,7 +102,8 @@ public class DeletedContent implements AutopsyVisitableItem { public static class DeletedContentsNode extends DisplayableItemNode { - private static final String NAME = "Deleted Files"; + private static final String NAME = NbBundle.getMessage(DeletedContent.class, + "DeletedContent.deletedContentsNode.name"); private SleuthkitCase skCase; DeletedContentsNode(SleuthkitCase skCase) { @@ -127,10 +133,10 @@ public class DeletedContent implements AutopsyVisitableItem { s.put(ss); } - ss.put(new NodeProperty("Name", - "Name", - "no description", - NAME)); + ss.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "DeletedContent.createSheet.name.name"), + NbBundle.getMessage(this.getClass(), "DeletedContent.createSheet.name.displayName"), + NbBundle.getMessage(this.getClass(), "DeletedContent.createSheet.name.desc"), + NAME)); return s; } } @@ -191,9 +197,10 @@ public class DeletedContent implements AutopsyVisitableItem { s.put(ss); } - ss.put(new NodeProperty("Filter Type", - "Filter Type", - "no description", + ss.put(new NodeProperty( + NbBundle.getMessage(this.getClass(), "DeletedContent.createSheet.filterType.name"), + NbBundle.getMessage(this.getClass(), "DeletedContent.createSheet.filterType.displayName"), + NbBundle.getMessage(this.getClass(), "DeletedContent.createSheet.filterType.desc"), filter.getDisplayName())); return s; @@ -225,9 +232,9 @@ public class DeletedContent implements AutopsyVisitableItem { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { - JOptionPane.showMessageDialog(null, "There are more Deleted Files than can be displayed. Only the first " - + (MAX_OBJECTS - 1) - + " Deleted Files will be shown."); + JOptionPane.showMessageDialog(null, NbBundle.getMessage(this.getClass(), + "DeletedContent.createKeys.maxObjects.msg", + MAX_OBJECTS - 1)); } }); } @@ -330,7 +337,9 @@ public class DeletedContent implements AutopsyVisitableItem { @Override protected AbstractNode defaultVisit(Content di) { - throw new UnsupportedOperationException("Not supported for this type of Displayable Item: " + di.toString()); + throw new UnsupportedOperationException(NbBundle.getMessage(this.getClass(), + "DeletedContent.createNodeForKey.typeNotSupported.msg", + di.toString())); } }); } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/DirectoryNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/DirectoryNode.java index 624facfebc..ced9942d07 100755 --- a/Core/src/org/sleuthkit/autopsy/datamodel/DirectoryNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/DirectoryNode.java @@ -21,6 +21,8 @@ package org.sleuthkit.autopsy.datamodel; import java.util.ArrayList; import java.util.List; import javax.swing.Action; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.ContextMenuExtensionPoint; import org.sleuthkit.autopsy.actions.AddContentTagAction; import org.sleuthkit.autopsy.directorytree.ExtractAction; @@ -36,8 +38,8 @@ import org.sleuthkit.datamodel.TskData.TSK_FS_NAME_FLAG_ENUM; */ public class DirectoryNode extends AbstractFsContentNode { - public static final String DOTDOTDIR = "[parent folder]"; - public static final String DOTDIR = "[current folder]"; + public static final String DOTDOTDIR = NbBundle.getMessage(DirectoryNode.class, "DirectoryNode.parFolder.text"); + public static final String DOTDIR = NbBundle.getMessage(DirectoryNode.class, "DirectoryNode.curFolder.text"); public DirectoryNode(Directory dir) { this(dir, true); @@ -70,10 +72,11 @@ public class DirectoryNode extends AbstractFsContentNode { public Action[] getActions(boolean popup) { List actions = new ArrayList<>(); if (!getDirectoryBrowseMode()) { - actions.add(new ViewContextAction("View File in Directory", this)); + actions.add(new ViewContextAction( + NbBundle.getMessage(this.getClass(), "DirectoryNode.getActions.viewFileInDir.text"), this)); actions.add(null); // creates a menu separator } - actions.add(new NewWindowViewAction("View in New Window", this)); + actions.add(new NewWindowViewAction(NbBundle.getMessage(this.getClass(), "DirectoryNode.viewInNewWin.text"), this)); actions.add(null); // creates a menu separator actions.add(ExtractAction.getInstance()); actions.add(null); // creates a menu separator diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/EmailExtracted.java b/Core/src/org/sleuthkit/autopsy/datamodel/EmailExtracted.java index c5311b3d20..0a993de2ec 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/EmailExtracted.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/EmailExtracted.java @@ -26,8 +26,9 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.logging.Level; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; -import org.openide.nodes.AbstractNode; import org.openide.nodes.ChildFactory; import org.openide.nodes.Children; import org.openide.nodes.Node; @@ -49,8 +50,8 @@ public class EmailExtracted implements AutopsyVisitableItem { private static final String LABEL_NAME = BlackboardArtifact.ARTIFACT_TYPE.TSK_EMAIL_MSG.getLabel(); private static final String DISPLAY_NAME = BlackboardArtifact.ARTIFACT_TYPE.TSK_EMAIL_MSG.getDisplayName(); private static final Logger logger = Logger.getLogger(EmailExtracted.class.getName()); - private static final String MAIL_ACCOUNT = "Account"; - private static final String MAIL_FOLDER = "Folder"; + private static final String MAIL_ACCOUNT = NbBundle.getMessage(EmailExtracted.class, "EmailExtracted.mailAccount.text"); + private static final String MAIL_FOLDER = NbBundle.getMessage(EmailExtracted.class, "EmailExtracted.mailFolder.text"); private static final String MAIL_PATH_SEPARATOR = "/"; private SleuthkitCase skCase; private Map>> accounts; @@ -104,8 +105,8 @@ public class EmailExtracted implements AutopsyVisitableItem { if (split.length < 4) { logger.log(Level.WARNING, "Unexpected number of tokens when parsing email PATH: " + split.length + ", will use defaults"); - parsed.put(MAIL_ACCOUNT, "Default"); - parsed.put(MAIL_FOLDER, "Default"); + parsed.put(MAIL_ACCOUNT, NbBundle.getMessage(EmailExtracted.class, "EmailExtracted.defaultAcct.text")); + parsed.put(MAIL_FOLDER, NbBundle.getMessage(EmailExtracted.class, "EmailExtracted.defaultFolder.text")); return parsed; } @@ -152,10 +153,10 @@ public class EmailExtracted implements AutopsyVisitableItem { s.put(ss); } - ss.put(new NodeProperty("Name", - "Name", - "no description", - getName())); + ss.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "EmailExtracted.createSheet.name.name"), + NbBundle.getMessage(this.getClass(), "EmailExtracted.createSheet.name.displayName"), + NbBundle.getMessage(this.getClass(), "EmailExtracted.createSheet.name.desc"), + getName())); return s; } @@ -234,10 +235,10 @@ public class EmailExtracted implements AutopsyVisitableItem { s.put(ss); } - ss.put(new NodeProperty("Name", - "Name", - "no description", - getName())); + ss.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "EmailExtracted.createSheet.name.name"), + NbBundle.getMessage(this.getClass(), "EmailExtracted.createSheet.name.displayName"), + NbBundle.getMessage(this.getClass(), "EmailExtracted.createSheet.name.desc"), + getName())); return s; } @@ -281,10 +282,10 @@ public class EmailExtracted implements AutopsyVisitableItem { s.put(ss); } - ss.put(new NodeProperty("Name", - "Name", - "no description", - getName())); + ss.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "EmailExtracted.createSheet.name.name"), + NbBundle.getMessage(this.getClass(), "EmailExtracted.createSheet.name.displayName"), + NbBundle.getMessage(this.getClass(), "EmailExtracted.createSheet.name.desc"), + getName())); return s; } @@ -351,10 +352,10 @@ public class EmailExtracted implements AutopsyVisitableItem { s.put(ss); } - ss.put(new NodeProperty("Name", - "Name", - "no description", - getName())); + ss.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "EmailExtracted.createSheet.name.name"), + NbBundle.getMessage(this.getClass(), "EmailExtracted.createSheet.name.displayName"), + NbBundle.getMessage(this.getClass(), "EmailExtracted.createSheet.name.desc"), + getName())); return s; } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/ExtractedContentNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/ExtractedContentNode.java index bd63cdb7e2..781d975f85 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/ExtractedContentNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/ExtractedContentNode.java @@ -18,9 +18,9 @@ */ package org.sleuthkit.autopsy.datamodel; -import org.openide.nodes.AbstractNode; import org.openide.nodes.Children; import org.openide.nodes.Sheet; +import org.openide.util.NbBundle; import org.openide.util.lookup.Lookups; import org.sleuthkit.datamodel.SleuthkitCase; @@ -29,7 +29,7 @@ import org.sleuthkit.datamodel.SleuthkitCase; */ public class ExtractedContentNode extends DisplayableItemNode { - public static final String NAME = "Extracted Content"; + public static final String NAME = NbBundle.getMessage(ExtractedContentNode.class, "ExtractedContentNode.name.text"); public ExtractedContentNode(SleuthkitCase skCase) { super(Children.create(new ExtractedContentChildren(skCase), true), Lookups.singleton(NAME)); @@ -57,9 +57,9 @@ public class ExtractedContentNode extends DisplayableItemNode { s.put(ss); } - ss.put(new NodeProperty("Name", - "Name", - "no description", + ss.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "ExtractedContentNode.createSheet.name.name"), + NbBundle.getMessage(this.getClass(), "ExtractedContentNode.createSheet.name.displayName"), + NbBundle.getMessage(this.getClass(), "ExtractedContentNode.createSheet.name.desc"), NAME)); return s; } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/FileNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/FileNode.java index f16325609a..7c6fc354dd 100755 --- a/Core/src/org/sleuthkit/autopsy/datamodel/FileNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/FileNode.java @@ -21,6 +21,8 @@ package org.sleuthkit.autopsy.datamodel; import java.util.ArrayList; import java.util.List; import javax.swing.Action; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.ContextMenuExtensionPoint; import org.sleuthkit.autopsy.actions.AddContentTagAction; import org.sleuthkit.autopsy.directorytree.ExternalViewerAction; @@ -76,14 +78,17 @@ public class FileNode extends AbstractFsContentNode { public Action[] getActions(boolean popup) { List actionsList = new ArrayList<>(); if (!this.getDirectoryBrowseMode()) { - actionsList.add(new ViewContextAction("View File in Directory", this)); + actionsList.add(new ViewContextAction(NbBundle.getMessage(this.getClass(), "FileNode.viewFileInDir.text"), this)); actionsList.add(null); // creates a menu separator } - actionsList.add(new NewWindowViewAction("View in New Window", this)); - actionsList.add(new ExternalViewerAction("Open in External Viewer", this)); + actionsList.add(new NewWindowViewAction( + NbBundle.getMessage(this.getClass(), "FileNode.getActions.viewInNewWin.text"), this)); + actionsList.add(new ExternalViewerAction( + NbBundle.getMessage(this.getClass(), "FileNode.getActions.openInExtViewer.text"), this)); actionsList.add(null); // creates a menu separator actionsList.add(ExtractAction.getInstance()); - actionsList.add(new HashSearchAction("Search for files with the same MD5 hash", this)); + actionsList.add(new HashSearchAction( + NbBundle.getMessage(this.getClass(), "FileNode.getActions.searchFilesSameMD5.text"), this)); actionsList.add(null); // creates a menu separator actionsList.add(AddContentTagAction.getInstance()); actionsList.addAll(ContextMenuExtensionPoint.getActions()); diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/FileSize.java b/Core/src/org/sleuthkit/autopsy/datamodel/FileSize.java index 2d8b44f8e5..0c2ca91b45 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/FileSize.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/FileSize.java @@ -27,6 +27,7 @@ import org.openide.nodes.ChildFactory; import org.openide.nodes.Children; import org.openide.nodes.Node; import org.openide.nodes.Sheet; +import org.openide.util.NbBundle; import org.openide.util.lookup.Lookups; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.datamodel.AbstractFile; @@ -99,7 +100,7 @@ public class FileSize implements AutopsyVisitableItem { public static class FileSizeRootNode extends DisplayableItemNode { - private static final String NAME = "File Size"; + private static final String NAME = NbBundle.getMessage(FileSize.class, "FileSize.fileSizeRootNode.name"); private SleuthkitCase skCase; FileSizeRootNode(SleuthkitCase skCase) { @@ -129,9 +130,9 @@ public class FileSize implements AutopsyVisitableItem { s.put(ss); } - ss.put(new NodeProperty("Name", - "Name", - "no description", + ss.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "FileSize.createSheet.name.name"), + NbBundle.getMessage(this.getClass(), "FileSize.createSheet.name.displayName"), + NbBundle.getMessage(this.getClass(), "FileSize.createSheet.name.desc"), NAME)); return s; } @@ -193,10 +194,10 @@ public class FileSize implements AutopsyVisitableItem { s.put(ss); } - ss.put(new NodeProperty("Filter Type", - "Filter Type", - "no description", - filter.getDisplayName())); + ss.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "FileSize.createSheet.filterType.name"), + NbBundle.getMessage(this.getClass(), "FileSize.createSheet.filterType.displayName"), + NbBundle.getMessage(this.getClass(), "FileSize.createSheet.filterType.desc"), + filter.getDisplayName())); return s; } @@ -327,7 +328,10 @@ public class FileSize implements AutopsyVisitableItem { @Override protected AbstractNode defaultVisit(Content di) { - throw new UnsupportedOperationException("Not supported for this type of Displayable Item: " + di.toString()); + throw new UnsupportedOperationException( + NbBundle.getMessage(this.getClass(), + "FileSize.exception.notSupported.msg", + di.toString())); } }); } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/FileTypeChildren.java b/Core/src/org/sleuthkit/autopsy/datamodel/FileTypeChildren.java index 3376e9f0d9..4628c6f607 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/FileTypeChildren.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/FileTypeChildren.java @@ -21,6 +21,8 @@ package org.sleuthkit.autopsy.datamodel; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import org.openide.nodes.AbstractNode; import org.openide.nodes.ChildFactory; @@ -125,7 +127,10 @@ class FileTypeChildren extends ChildFactory { @Override protected AbstractNode defaultVisit(Content di) { - throw new UnsupportedOperationException("Not supported for this type of Displayable Item: " + di.toString()); + throw new UnsupportedOperationException( + NbBundle.getMessage(this.getClass(), + "FileTypeChildren.exception.notSupported.msg", + di.toString())); } }); } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/FileTypeExtensionFilters.java b/Core/src/org/sleuthkit/autopsy/datamodel/FileTypeExtensionFilters.java index b90a257419..aa98f52fd4 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/FileTypeExtensionFilters.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/FileTypeExtensionFilters.java @@ -20,6 +20,8 @@ package org.sleuthkit.autopsy.datamodel; import java.util.Arrays; import java.util.List; + +import org.openide.util.NbBundle; import org.sleuthkit.datamodel.SleuthkitCase; /** @@ -31,12 +33,24 @@ import org.sleuthkit.datamodel.SleuthkitCase; // root node filters public enum RootFilter implements AutopsyVisitableItem,SearchFilterInterface { - TSK_IMAGE_FILTER(0, "TSK_IMAGE_FILTER", "Images", FileTypeExtensions.getImageExtensions()), - TSK_VIDEO_FILTER(1, "TSK_VIDEO_FILTER", "Videos", FileTypeExtensions.getVideoExtensions()), - TSK_AUDIO_FILTER(2, "TSK_AUDIO_FILTER", "Audio", FileTypeExtensions.getAudioExtensions()), - TSK_ARCHIVE_FILTER(3, "TSK_ARCHIVE_FILTER", "Archives", FileTypeExtensions.getArchiveExtensions()), - TSK_DOCUMENT_FILTER(3, "TSK_DOCUMENT_FILTER", "Documents", Arrays.asList(".doc", ".docx", ".pdf", ".xls", ".rtf", ".txt")), - TSK_EXECUTABLE_FILTER(3, "TSK_EXECUTABLE_FILTER", "Executable", Arrays.asList(".exe", ".dll", ".bat", ".cmd", ".com")); + TSK_IMAGE_FILTER(0, "TSK_IMAGE_FILTER", + NbBundle.getMessage(FileTypeExtensionFilters.class, "FileTypeExtensionFilters.tskImgFilter.text"), + FileTypeExtensions.getImageExtensions()), + TSK_VIDEO_FILTER(1, "TSK_VIDEO_FILTER", + NbBundle.getMessage(FileTypeExtensionFilters.class, "FileTypeExtensionFilters.tskVideoFilter.text"), + FileTypeExtensions.getVideoExtensions()), + TSK_AUDIO_FILTER(2, "TSK_AUDIO_FILTER", + NbBundle.getMessage(FileTypeExtensionFilters.class, "FileTypeExtensionFilters.tskAudioFilter.text"), + FileTypeExtensions.getAudioExtensions()), + TSK_ARCHIVE_FILTER(3, "TSK_ARCHIVE_FILTER", + NbBundle.getMessage(FileTypeExtensionFilters.class, "FileTypeExtensionFilters.tskArchiveFilter.text"), + FileTypeExtensions.getArchiveExtensions()), + TSK_DOCUMENT_FILTER(3, "TSK_DOCUMENT_FILTER", + NbBundle.getMessage(FileTypeExtensionFilters.class, "FileTypeExtensionFilters.tskDocumentFilter.text"), + Arrays.asList(".doc", ".docx", ".pdf", ".xls", ".rtf", ".txt")), + TSK_EXECUTABLE_FILTER(3, "TSK_EXECUTABLE_FILTER", + NbBundle.getMessage(FileTypeExtensionFilters.class, "FileTypeExtensionFilters.tskExecFilter.text"), + Arrays.asList(".exe", ".dll", ".bat", ".cmd", ".com")); private int id; private String name; @@ -78,12 +92,21 @@ import org.sleuthkit.datamodel.SleuthkitCase; // document sub-node filters public enum DocumentFilter implements AutopsyVisitableItem,SearchFilterInterface { - AUT_DOC_HTML(0, "AUT_DOC_HTML", "HTML", Arrays.asList(".htm", ".html")), - AUT_DOC_OFFICE(1, "AUT_DOC_OFFICE", "Office", Arrays.asList(".doc", ".docx", - ".odt", ".xls", ".xlsx", ".ppt", ".pptx")), - AUT_DOC_PDF(2, "AUT_DOC_PDF", "PDF", Arrays.asList(".pdf")), - AUT_DOC_TXT(3, "AUT_DOC_TXT", "Plain Text", Arrays.asList(".txt")), - AUT_DOC_RTF(4, "AUT_DOC_RTF", "Rich Text", Arrays.asList(".rtf")); + AUT_DOC_HTML(0, "AUT_DOC_HTML", + NbBundle.getMessage(FileTypeExtensionFilters.class, "FileTypeExtensionFilters.autDocHtmlFilter.text"), + Arrays.asList(".htm", ".html")), + AUT_DOC_OFFICE(1, "AUT_DOC_OFFICE", + NbBundle.getMessage(FileTypeExtensionFilters.class, "FileTypeExtensionFilters.autDocOfficeFilter.text"), + Arrays.asList(".doc", ".docx", ".odt", ".xls", ".xlsx", ".ppt", ".pptx")), + AUT_DOC_PDF(2, "AUT_DOC_PDF", + NbBundle.getMessage(FileTypeExtensionFilters.class, "FileTypeExtensionFilters.autoDocPdfFilter.text"), + Arrays.asList(".pdf")), + AUT_DOC_TXT(3, "AUT_DOC_TXT", + NbBundle.getMessage(FileTypeExtensionFilters.class, "FileTypeExtensionFilters.autDocTxtFilter.text"), + Arrays.asList(".txt")), + AUT_DOC_RTF(4, "AUT_DOC_RTF", + NbBundle.getMessage(FileTypeExtensionFilters.class, "FileTypeExtensionFilters.autDocRtfFilter.text"), + Arrays.asList(".rtf")); private int id; private String name; diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/FileTypeNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/FileTypeNode.java index 02c8b89e1c..317dbe0a63 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/FileTypeNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/FileTypeNode.java @@ -20,6 +20,7 @@ package org.sleuthkit.autopsy.datamodel; import org.openide.nodes.Children; import org.openide.nodes.Sheet; +import org.openide.util.NbBundle; import org.openide.util.lookup.Lookups; import org.sleuthkit.datamodel.SleuthkitCase; @@ -61,19 +62,19 @@ public class FileTypeNode extends DisplayableItemNode { s.put(ss); } - ss.put(new NodeProperty("Filter Type", - "Filter Type", - "no description", - filter.getDisplayName())); + ss.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "FileTypeNode.createSheet.filterType.name"), + NbBundle.getMessage(this.getClass(), "FileTypeNode.createSheet.filterType.displayName"), + NbBundle.getMessage(this.getClass(), "FileTypeNode.createSheet.filterType.desc"), + filter.getDisplayName())); String extensions = ""; for (String ext : filter.getFilter()) { extensions += "'" + ext + "', "; } extensions = extensions.substring(0, extensions.lastIndexOf(',')); - ss.put(new NodeProperty("File Extensions", - "File Extensions", - "no description", - extensions)); + ss.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "FileTypeNode.createSheet.fileExt.name"), + NbBundle.getMessage(this.getClass(), "FileTypeNode.createSheet.fileExt.displayName"), + NbBundle.getMessage(this.getClass(), "FileTypeNode.createSheet.fileExt.desc"), + extensions)); return s; } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/FileTypesNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/FileTypesNode.java index 98b64f7d9b..953e7a1d45 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/FileTypesNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/FileTypesNode.java @@ -20,6 +20,7 @@ package org.sleuthkit.autopsy.datamodel; import org.openide.nodes.Children; import org.openide.nodes.Sheet; +import org.openide.util.NbBundle; import org.openide.util.lookup.Lookups; import org.sleuthkit.datamodel.SleuthkitCase; @@ -28,7 +29,7 @@ import org.sleuthkit.datamodel.SleuthkitCase; */ public class FileTypesNode extends DisplayableItemNode { - private static final String FNAME = "File Types"; + private static final String FNAME = NbBundle.getMessage(FileTypesNode.class, "FileTypesNode.fname.text"); private SleuthkitCase skCase; /** @@ -71,9 +72,9 @@ public class FileTypesNode extends DisplayableItemNode { s.put(ss); } - ss.put(new NodeProperty("Name", - "Name", - "no description", + ss.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "FileTypesNode.createSheet.name.name"), + NbBundle.getMessage(this.getClass(), "FileTypesNode.createSheet.name.displayName"), + NbBundle.getMessage(this.getClass(), "FileTypesNode.createSheet.name.desc"), getName())); return s; } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/HashsetHits.java b/Core/src/org/sleuthkit/autopsy/datamodel/HashsetHits.java index 846cd5f7f5..602b952c20 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/HashsetHits.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/HashsetHits.java @@ -20,21 +20,19 @@ package org.sleuthkit.autopsy.datamodel; import java.sql.ResultSet; import java.sql.SQLException; -import java.sql.Statement; -import java.util.ArrayList; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.logging.Level; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; -import org.openide.nodes.AbstractNode; import org.openide.nodes.ChildFactory; import org.openide.nodes.Children; import org.openide.nodes.Node; import org.openide.nodes.Sheet; -import org.openide.util.Exceptions; import org.openide.util.lookup.Lookups; import org.sleuthkit.datamodel.BlackboardArtifact; import org.sleuthkit.datamodel.BlackboardAttribute; @@ -131,10 +129,10 @@ public class HashsetHits implements AutopsyVisitableItem { s.put(ss); } - ss.put(new NodeProperty("Name", - "Name", - "no description", - getName())); + ss.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "HashsetHits.createSheet.name.name"), + NbBundle.getMessage(this.getClass(), "HashsetHits.createSheet.name.displayName"), + NbBundle.getMessage(this.getClass(), "HashsetHits.createSheet.name.desc"), + getName())); return s; } @@ -177,10 +175,10 @@ public class HashsetHits implements AutopsyVisitableItem { s.put(ss); } - ss.put(new NodeProperty("Name", - "Name", - "no description", - getName())); + ss.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "HashsetHits.createSheet.name.name"), + NbBundle.getMessage(this.getClass(), "HashsetHits.createSheet.name.displayName"), + NbBundle.getMessage(this.getClass(), "HashsetHits.createSheet.name.desc"), + getName())); return s; } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/ImageNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/ImageNode.java index bea81eebc7..b3a3274d55 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/ImageNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/ImageNode.java @@ -22,6 +22,7 @@ import java.util.ArrayList; import java.util.List; import javax.swing.Action; import org.openide.nodes.Sheet; +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.directorytree.ExplorerNodeActionVisitor; import org.sleuthkit.autopsy.directorytree.FileSearchAction; import org.sleuthkit.autopsy.directorytree.NewWindowViewAction; @@ -66,8 +67,10 @@ public class ImageNode extends AbstractContentNode { public Action[] getActions(boolean context) { List actionsList = new ArrayList(); - actionsList.add(new NewWindowViewAction("View in New Window", this)); - actionsList.add(new FileSearchAction("Open File Search by Attributes")); + actionsList.add(new NewWindowViewAction( + NbBundle.getMessage(this.getClass(), "ImageNode.getActions.viewInNewWin.text"), this)); + actionsList.add(new FileSearchAction( + NbBundle.getMessage(this.getClass(), "ImageNode.getActions.openFileSearchByAttr.text"))); actionsList.addAll(ExplorerNodeActionVisitor.getActions(content)); return actionsList.toArray(new Action[0]); @@ -82,7 +85,10 @@ public class ImageNode extends AbstractContentNode { s.put(ss); } - ss.put(new NodeProperty("Name", "Name", "no description", getName())); + ss.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "ImageNode.createSheet.name.name"), + NbBundle.getMessage(this.getClass(), "ImageNode.createSheet.name.displayName"), + NbBundle.getMessage(this.getClass(), "ImageNode.createSheet.name.desc"), + getName())); // @@@ add more properties here... return s; diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/Installer.java b/Core/src/org/sleuthkit/autopsy/datamodel/Installer.java index 1357b0ccd6..a9fa9c2a48 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/Installer.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/Installer.java @@ -20,6 +20,8 @@ package org.sleuthkit.autopsy.datamodel; import java.awt.Component; import java.util.logging.Level; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import javax.swing.JOptionPane; import org.openide.LifecycleManager; @@ -62,9 +64,9 @@ public class Installer extends ModuleInstall { String skVersion = SleuthkitJNI.getVersion(); if (skVersion == null) { - throw new Exception("Sleuth Kit JNI test call returned without error, but version string was null!"); + throw new Exception(NbBundle.getMessage(this.getClass(), "Installer.exception.tskVerStringNull.msg")); } else if (skVersion.length() == 0) { - throw new Exception("Sleuth Kit JNI test call returned without error, but version string was \"\"!"); + throw new Exception(NbBundle.getMessage(this.getClass(), "Installer.exception.taskVerStringBang.msg")); } else { logger.log(Level.CONFIG, "Sleuth Kit Version: {0}", skVersion); } @@ -75,8 +77,8 @@ public class Installer extends ModuleInstall { // Normal error box log handler won't be loaded yet, so show error here. final Component parentComponent = null; // Use default window frame. - final String message = "Problem with Sleuth Kit JNI. Test call failed!\n\nDetails: " + e.toString(); - final String title = "Fatal Error!"; + final String message = NbBundle.getMessage(this.getClass(), "Installer.tskLibErr.msg", e.toString()); + final String title = NbBundle.getMessage(this.getClass(), "Installer.tskLibErr.err"); final int messageType = JOptionPane.ERROR_MESSAGE; JOptionPane.showMessageDialog( diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/InterestingHits.java b/Core/src/org/sleuthkit/autopsy/datamodel/InterestingHits.java index cc165631f4..214eec198f 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/InterestingHits.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/InterestingHits.java @@ -27,6 +27,8 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.logging.Level; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import org.openide.nodes.ChildFactory; import org.openide.nodes.Children; @@ -41,8 +43,9 @@ import org.sleuthkit.datamodel.TskException; public class InterestingHits implements AutopsyVisitableItem { - private static final String INTERESTING_ITEMS = "INTERESTING ITEMS"; - private static final String DISPLAY_NAME = "Interesting Items"; + private static final String INTERESTING_ITEMS = NbBundle + .getMessage(InterestingHits.class, "InterestingHits.interestingItems.text"); + private static final String DISPLAY_NAME = NbBundle.getMessage(InterestingHits.class, "InterestingHits.displayName.text"); private static final Logger logger = Logger.getLogger(InterestingHits.class.getName()); private SleuthkitCase skCase; private Map> interestingItemsMap; @@ -132,10 +135,10 @@ public class InterestingHits implements AutopsyVisitableItem { s.put(ss); } - ss.put(new NodeProperty("Name", - "Name", - "no description", - getName())); + ss.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "InterestingHits.createSheet.name.name"), + NbBundle.getMessage(this.getClass(), "InterestingHits.createSheet.name.displayName"), + NbBundle.getMessage(this.getClass(), "InterestingHits.createSheet.name.desc"), + getName())); return s; } @@ -178,10 +181,10 @@ public class InterestingHits implements AutopsyVisitableItem { s.put(ss); } - ss.put(new NodeProperty("Name", - "Name", - "no description", - getName())); + ss.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "InterestingHits.createSheet.name.name"), + NbBundle.getMessage(this.getClass(), "InterestingHits.createSheet.name.name"), + NbBundle.getMessage(this.getClass(), "InterestingHits.createSheet.name.desc"), + getName())); return s; } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/KeyValueNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/KeyValueNode.java index e1330f0f92..0ed726de05 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/KeyValueNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/KeyValueNode.java @@ -23,6 +23,7 @@ import org.openide.nodes.AbstractNode; import org.openide.nodes.Children; import org.openide.nodes.Sheet; import org.openide.util.Lookup; +import org.openide.util.NbBundle; import org.openide.util.lookup.Lookups; import org.sleuthkit.datamodel.AbstractFile; @@ -78,12 +79,18 @@ import org.sleuthkit.datamodel.AbstractFile; // table view drops first column of properties under assumption // that it contains the node's name - ss.put(new NodeProperty("Name", "Name", "n/a", data.getName())); + ss.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "KeyValueNode.createSheet.name.name"), + NbBundle.getMessage(this.getClass(), "KeyValueNode.createSheet.name.displayName"), + NbBundle.getMessage(this.getClass(), "KeyValueNode.createSheet.name.desc"), + data.getName())); for (Map.Entry entry : data.getMap().entrySet()) { String key = entry.getKey(); Object value = entry.getValue(); - ss.put(new NodeProperty(key, key, "n/a", value)); + ss.put(new NodeProperty(key, + key, + NbBundle.getMessage(this.getClass(), "KeyValueNode.createSheet.map.desc"), + value)); } return s; diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/KeywordHits.java b/Core/src/org/sleuthkit/autopsy/datamodel/KeywordHits.java index 59055bdcff..b517642978 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/KeywordHits.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/KeywordHits.java @@ -27,12 +27,13 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.logging.Level; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import org.openide.nodes.ChildFactory; import org.openide.nodes.Children; import org.openide.nodes.Node; import org.openide.nodes.Sheet; -import org.openide.util.Exceptions; import org.openide.util.lookup.Lookups; import org.sleuthkit.datamodel.BlackboardArtifact; import org.sleuthkit.datamodel.BlackboardAttribute; @@ -48,10 +49,12 @@ public class KeywordHits implements AutopsyVisitableItem { private SleuthkitCase skCase; private static final Logger logger = Logger.getLogger(KeywordHits.class.getName()); - private static final String KEYWORD_HITS = "Keyword Hits"; + private static final String KEYWORD_HITS = NbBundle.getMessage(KeywordHits.class, "KeywordHits.kwHits.text"); public static final String NAME = BlackboardArtifact.ARTIFACT_TYPE.TSK_KEYWORD_HIT.getLabel(); - public static final String SIMPLE_LITERAL_SEARCH = "Single Literal Keyword Search"; - public static final String SIMPLE_REGEX_SEARCH = "Single Regular Expression Search"; + public static final String SIMPLE_LITERAL_SEARCH = NbBundle + .getMessage(KeywordHits.class, "KeywordHits.simpleLiteralSearch.text"); + public static final String SIMPLE_REGEX_SEARCH = NbBundle + .getMessage(KeywordHits.class, "KeywordHits.singleRegexSearch.text"); // Map from String (list name) to Map from string (keyword) to set (artifact ids) private Map>> topLevelMap; private Map>> listsMap; @@ -190,10 +193,10 @@ public class KeywordHits implements AutopsyVisitableItem { s.put(ss); } - ss.put(new NodeProperty("Name", - "Name", - "no description", - getName())); + ss.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "KeywordHits.createSheet.name.name"), + NbBundle.getMessage(this.getClass(), "KeywordHits.createSheet.name.displayName"), + NbBundle.getMessage(this.getClass(), "KeywordHits.createSheet.name.desc"), + getName())); return s; } @@ -240,16 +243,16 @@ public class KeywordHits implements AutopsyVisitableItem { s.put(ss); } - ss.put(new NodeProperty("List Name", - "List Name", - "no description", - name)); + ss.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "KeywordHits.createSheet.listName.name"), + NbBundle.getMessage(this.getClass(), "KeywordHits.createSheet.listName.displayName"), + NbBundle.getMessage(this.getClass(), "KeywordHits.createSheet.listName.desc"), + name)); - ss.put(new NodeProperty("Number of Children", - "Number of Children", - "no description", - children.size())); + ss.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "KeywordHits.createSheet.numChildren.name"), + NbBundle.getMessage(this.getClass(), "KeywordHits.createSheet.numChildren.displayName"), + NbBundle.getMessage(this.getClass(), "KeywordHits.createSheet.numChildren.desc"), + children.size())); return s; } @@ -321,16 +324,16 @@ public class KeywordHits implements AutopsyVisitableItem { s.put(ss); } - ss.put(new NodeProperty("List Name", - "List Name", - "no description", - getDisplayName())); + ss.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "KeywordHits.createSheet.listName.name"), + NbBundle.getMessage(this.getClass(), "KeywordHits.createSheet.listName.displayName"), + NbBundle.getMessage(this.getClass(), "KeywordHits.createSheet.listName.desc"), + getDisplayName())); - ss.put(new NodeProperty("Files with Hits", - "Files with Hits", - "no description", - children.size())); + ss.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "KeywordHits.createSheet.filesWithHits.name"), + NbBundle.getMessage(this.getClass(), "KeywordHits.createSheet.filesWithHits.displayName"), + NbBundle.getMessage(this.getClass(), "KeywordHits.createSheet.filesWithHits.desc"), + children.size())); return s; } @@ -371,19 +374,28 @@ public class KeywordHits implements AutopsyVisitableItem { return n; } - n.addNodeProperty(new NodeProperty("ModifiedTime", - "Modified Time", - "Modified Time", + n.addNodeProperty(new NodeProperty( + NbBundle.getMessage(this.getClass(), "KeywordHits.createNodeForKey.modTime.name"), + NbBundle.getMessage(this.getClass(), + "KeywordHits.createNodeForKey.modTime.displayName"), + NbBundle.getMessage(this.getClass(), + "KeywordHits.createNodeForKey.modTime.desc"), ContentUtils.getStringTime(file.getMtime(), file))); - n.addNodeProperty(new NodeProperty("AccessTime", - "Access Time", - "Access Time", + n.addNodeProperty(new NodeProperty( + NbBundle.getMessage(this.getClass(), "KeywordHits.createNodeForKey.accessTime.name"), + NbBundle.getMessage(this.getClass(), + "KeywordHits.createNodeForKey.accessTime.displayName"), + NbBundle.getMessage(this.getClass(), + "KeywordHits.createNodeForKey.accessTime.desc"), ContentUtils.getStringTime(file.getAtime(), file))); - n.addNodeProperty(new NodeProperty("ChangeTime", - "Change Time", - "Change Time", + n.addNodeProperty(new NodeProperty( + NbBundle.getMessage(this.getClass(), "KeywordHits.createNodeForKey.chgTime.name"), + NbBundle.getMessage(this.getClass(), + "KeywordHits.createNodeForKey.chgTime.displayName"), + NbBundle.getMessage(this.getClass(), + "KeywordHits.createNodeForKey.chgTime.desc"), ContentUtils.getStringTime(file.getCtime(), file))); - + return n; } } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/KnownFileFilterNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/KnownFileFilterNode.java index 30cb2ddab3..ce37222728 100755 --- a/Core/src/org/sleuthkit/autopsy/datamodel/KnownFileFilterNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/KnownFileFilterNode.java @@ -23,6 +23,7 @@ import java.util.prefs.PreferenceChangeListener; import java.util.prefs.Preferences; import org.openide.nodes.FilterNode; import org.openide.nodes.Node; +import org.openide.util.NbBundle; import org.openide.util.NbPreferences; import org.sleuthkit.datamodel.AbstractFile; import org.sleuthkit.datamodel.TskData; @@ -56,8 +57,8 @@ public class KnownFileFilterNode extends FilterNode { * is a sub-node of. (i.e. Data Sources, Views, Results) */ public enum SelectionContext { - DATA_SOURCES("Data Sources"), // Subnode of DataSources - VIEWS("Views"), // Subnode of Views + DATA_SOURCES(NbBundle.getMessage(KnownFileFilterNode.class, "KnownFileFilterNode.selectionContext.dataSources")), // Subnode of DataSources + VIEWS(NbBundle.getMessage(KnownFileFilterNode.class, "KnownFileFilterNode.selectionContext.views")), // Subnode of Views OTHER(""); // Subnode of another node. private final String displayName; diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/LayoutFileNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/LayoutFileNode.java index a896442f04..569318dd02 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/LayoutFileNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/LayoutFileNode.java @@ -24,6 +24,7 @@ import java.util.List; import java.util.Map; import javax.swing.Action; import org.openide.nodes.Sheet; +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.ContextMenuExtensionPoint; import org.sleuthkit.autopsy.directorytree.ExternalViewerAction; import org.sleuthkit.autopsy.directorytree.ExtractAction; @@ -42,7 +43,7 @@ public class LayoutFileNode extends AbstractAbstractFileNode { PARTS { @Override public String toString() { - return "Parts"; + return NbBundle.getMessage(this.getClass(), "LayoutFileNode.propertyType.parts"); } } } @@ -75,9 +76,12 @@ public class LayoutFileNode extends AbstractAbstractFileNode { Map map = new LinkedHashMap(); fillPropertyMap(map, content); - ss.put(new NodeProperty("Name", "Name", "no description", getName())); + ss.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "LayoutFileNode.createSheet.name.name"), + NbBundle.getMessage(this.getClass(), "LayoutFileNode.createSheet.name.displayName"), + NbBundle.getMessage(this.getClass(), "LayoutFileNode.createSheet.name.desc"), + getName())); - final String NO_DESCR = "no description"; + final String NO_DESCR = NbBundle.getMessage(this.getClass(), "LayoutFileNode.createSheet.noDescr.text"); for (Map.Entry entry : map.entrySet()) { ss.put(new NodeProperty(entry.getKey(), entry.getKey(), NO_DESCR, entry.getValue())); } @@ -104,8 +108,10 @@ public class LayoutFileNode extends AbstractAbstractFileNode { @Override public Action[] getActions(boolean context) { List actionsList = new ArrayList<>(); - actionsList.add(new NewWindowViewAction("View in New Window", this)); - actionsList.add(new ExternalViewerAction("Open in External Viewer", this)); + actionsList.add(new NewWindowViewAction( + NbBundle.getMessage(this.getClass(), "LayoutFileNode.getActions.viewInNewWin.text"), this)); + actionsList.add(new ExternalViewerAction( + NbBundle.getMessage(this.getClass(), "LayoutFileNode.getActions.openInExtViewer.text"), this)); actionsList.add(null); // creates a menu separator actionsList.add(ExtractAction.getInstance()); actionsList.add(null); // creates a menu separator diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/LocalFileNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/LocalFileNode.java index 02121410da..38aa2d7ab7 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/LocalFileNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/LocalFileNode.java @@ -25,6 +25,7 @@ import java.util.List; import java.util.Map; import javax.swing.Action; import org.openide.nodes.Sheet; +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.ContextMenuExtensionPoint; import org.sleuthkit.autopsy.directorytree.ExternalViewerAction; import org.sleuthkit.autopsy.directorytree.ExtractAction; @@ -67,9 +68,12 @@ public class LocalFileNode extends AbstractAbstractFileNode { Map map = new LinkedHashMap(); fillPropertyMap(map, content); - ss.put(new NodeProperty("Name", "Name", "no description", getName())); + ss.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "LocalFileNode.createSheet.name.name"), + NbBundle.getMessage(this.getClass(), "LocalFileNode.createSheet.name.displayName"), + NbBundle.getMessage(this.getClass(), "LocalFileNode.createSheet.name.desc"), + getName())); - final String NO_DESCR = "no description"; + final String NO_DESCR = NbBundle.getMessage(this.getClass(), "LocalFileNode.createSheet.noDescr.text"); for (Map.Entry entry : map.entrySet()) { ss.put(new NodeProperty(entry.getKey(), entry.getKey(), NO_DESCR, entry.getValue())); } @@ -81,11 +85,14 @@ public class LocalFileNode extends AbstractAbstractFileNode { @Override public Action[] getActions(boolean context) { List actionsList = new ArrayList<>(); - actionsList.add(new NewWindowViewAction("View in New Window", this)); - actionsList.add(new ExternalViewerAction("Open in External Viewer", this)); + actionsList.add(new NewWindowViewAction( + NbBundle.getMessage(this.getClass(), "LocalFileNode.getActions.viewInNewWin.text"), this)); + actionsList.add(new ExternalViewerAction( + NbBundle.getMessage(this.getClass(), "LocalFileNode.getActions.openInExtViewer.text"), this)); actionsList.add(null); // creates a menu separator actionsList.add(ExtractAction.getInstance()); - actionsList.add(new HashSearchAction("Search for files with the same MD5 hash", this)); + actionsList.add(new HashSearchAction( + NbBundle.getMessage(this.getClass(), "LocalFileNode.getActions.searchFilesSameMd5.text"), this)); actionsList.add(null); // creates a menu separator actionsList.add(AddContentTagAction.getInstance()); actionsList.addAll(ContextMenuExtensionPoint.getActions()); diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/RecentFiles.java b/Core/src/org/sleuthkit/autopsy/datamodel/RecentFiles.java index 2745951574..75168f8b21 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/RecentFiles.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/RecentFiles.java @@ -18,6 +18,7 @@ */ package org.sleuthkit.autopsy.datamodel; +import org.openide.util.NbBundle; import org.sleuthkit.datamodel.SleuthkitCase; /** @@ -28,13 +29,20 @@ import org.sleuthkit.datamodel.SleuthkitCase; SleuthkitCase skCase; public enum RecentFilesFilter implements AutopsyVisitableItem { - AUT_0DAY_FILTER(0, "AUT_0DAY_FILTER", "Final Day", 0), - AUT_1DAY_FILTER(0, "AUT_1DAY_FILTER", "Final Day - 1", 1), - AUT_2DAY_FILTER(0, "AUT_2DAY_FILTER", "Final Day - 2", 2), - AUT_3DAY_FILTER(0, "AUT_3DAY_FILTER", "Final Day - 3", 3), - AUT_4DAY_FILTER(0, "AUT_4DAY_FILTER", "Final Day - 4", 4), - AUT_5DAY_FILTER(0, "AUT_5DAY_FILTER", "Final Day - 5", 5), - AUT_6DAY_FILTER(0, "AUT_6DAY_FILTER", "Final Day - 6", 6); + AUT_0DAY_FILTER(0, "AUT_0DAY_FILTER", + NbBundle.getMessage(RecentFiles.class, "RecentFiles.aut0DayFilter.displayName.text"), 0), + AUT_1DAY_FILTER(0, "AUT_1DAY_FILTER", + NbBundle.getMessage(RecentFiles.class, "RecentFiles.aut1dayFilter.displayName.text"), 1), + AUT_2DAY_FILTER(0, "AUT_2DAY_FILTER", + NbBundle.getMessage(RecentFiles.class, "RecentFiles.aut2dayFilter.displayName.text"), 2), + AUT_3DAY_FILTER(0, "AUT_3DAY_FILTER", + NbBundle.getMessage(RecentFiles.class, "RecentFiles.aut3dayFilter.displayName.text"), 3), + AUT_4DAY_FILTER(0, "AUT_4DAY_FILTER", + NbBundle.getMessage(RecentFiles.class, "RecentFiles.aut4dayFilter.displayName.text"), 4), + AUT_5DAY_FILTER(0, "AUT_5DAY_FILTER", + NbBundle.getMessage(RecentFiles.class, "RecentFiles.aut5dayFilter.displayName.text"), 5), + AUT_6DAY_FILTER(0, "AUT_6DAY_FILTER", + NbBundle.getMessage(RecentFiles.class, "RecentFiles.aut6dayFilter.displayName.text"), 6); private int id; private String name; diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/RecentFilesFilterChildren.java b/Core/src/org/sleuthkit/autopsy/datamodel/RecentFilesFilterChildren.java index 374fe54db2..636f1f82e8 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/RecentFilesFilterChildren.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/RecentFilesFilterChildren.java @@ -22,6 +22,8 @@ import java.util.ArrayList; import java.util.Calendar; import java.util.List; import java.util.logging.Level; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import org.openide.nodes.AbstractNode; import org.openide.nodes.ChildFactory; @@ -136,7 +138,10 @@ import org.sleuthkit.datamodel.TskData; @Override protected AbstractNode defaultVisit(Content di) { - throw new UnsupportedOperationException("Not supported for this type of Displayable Item: " + di.toString()); + throw new UnsupportedOperationException( + NbBundle.getMessage(this.getClass(), + "RecentFilesFilterChildren.exception.defaultVisit.msg", + di.toString())); } }); } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/RecentFilesFilterNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/RecentFilesFilterNode.java index 6646eb24c3..4b898b1aa6 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/RecentFilesFilterNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/RecentFilesFilterNode.java @@ -20,6 +20,8 @@ package org.sleuthkit.autopsy.datamodel; import java.util.Calendar; import java.util.Locale; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import org.openide.nodes.AbstractNode; import org.openide.nodes.Children; @@ -71,9 +73,10 @@ public class RecentFilesFilterNode extends DisplayableItemNode { s.put(ss); } - ss.put(new NodeProperty("Filter Type", - "Filter Type", - "no description", + ss.put(new NodeProperty( + NbBundle.getMessage(this.getClass(), "RecentFilesFilterNode.createSheet.filterType.name"), + NbBundle.getMessage(this.getClass(), "RecentFilesFilterNode.createSheet.filterType.displayName"), + NbBundle.getMessage(this.getClass(), "RecentFilesFilterNode.createSheet.filterType.desc"), filter.getDisplayName())); return s; diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/RecentFilesNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/RecentFilesNode.java index ecacf715e2..83488e4bff 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/RecentFilesNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/RecentFilesNode.java @@ -21,6 +21,7 @@ package org.sleuthkit.autopsy.datamodel; import org.openide.nodes.AbstractNode; import org.openide.nodes.Children; import org.openide.nodes.Sheet; +import org.openide.util.NbBundle; import org.openide.util.lookup.Lookups; import org.sleuthkit.datamodel.SleuthkitCase; @@ -29,7 +30,7 @@ import org.sleuthkit.datamodel.SleuthkitCase; */ public class RecentFilesNode extends DisplayableItemNode { - private static final String NAME = "Recent Files"; + private static final String NAME = NbBundle.getMessage(RecentFilesNode.class, "RecentFilesNode.name.text"); private SleuthkitCase skCase; RecentFilesNode(SleuthkitCase skCase) { @@ -60,10 +61,10 @@ public class RecentFilesNode extends DisplayableItemNode { s.put(ss); } - ss.put(new NodeProperty("Name", - "Name", - "no description", - NAME)); + ss.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "RecentFilesNode.createSheet.name.name"), + NbBundle.getMessage(this.getClass(), "RecentFilesNode.createSheet.name.displayName"), + NbBundle.getMessage(this.getClass(), "RecentFilesNode.createSheet.name.desc"), + NAME)); return s; } } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/ResultsNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/ResultsNode.java index cbd1d941ea..eb48ab3ff0 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/ResultsNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/ResultsNode.java @@ -20,6 +20,7 @@ package org.sleuthkit.autopsy.datamodel; import java.util.Arrays; import org.openide.nodes.Sheet; +import org.openide.util.NbBundle; import org.openide.util.lookup.Lookups; import org.sleuthkit.datamodel.SleuthkitCase; @@ -28,7 +29,7 @@ import org.sleuthkit.datamodel.SleuthkitCase; */ public class ResultsNode extends DisplayableItemNode { - public static final String NAME = "Results"; + public static final String NAME = NbBundle.getMessage(ResultsNode.class, "ResultsNode.name.text"); public ResultsNode(SleuthkitCase sleuthkitCase) { super(new RootContentChildren(Arrays.asList(new ExtractedContent(sleuthkitCase), @@ -62,10 +63,10 @@ public class ResultsNode extends DisplayableItemNode { s.put(ss); } - ss.put(new NodeProperty("Name", - "Name", - "no description", - NAME)); + ss.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "ResultsNode.createSheet.name.name"), + NbBundle.getMessage(this.getClass(), "ResultsNode.createSheet.name.displayName"), + NbBundle.getMessage(this.getClass(), "ResultsNode.createSheet.name.desc"), + NAME)); return s; } } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/TagNameNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/TagNameNode.java index 38d140b039..eb6d09a4d0 100755 --- a/Core/src/org/sleuthkit/autopsy/datamodel/TagNameNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/TagNameNode.java @@ -24,6 +24,7 @@ import org.openide.nodes.ChildFactory; import org.openide.nodes.Children; import org.openide.nodes.Node; import org.openide.nodes.Sheet; +import org.openide.util.NbBundle; import org.openide.util.lookup.Lookups; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.coreutils.Logger; @@ -40,9 +41,14 @@ public class TagNameNode extends DisplayableItemNode { private static final String ICON_PATH = "org/sleuthkit/autopsy/images/tag-folder-blue-icon-16.png"; private static final String BOOKMARK_TAG_ICON_PATH = "org/sleuthkit/autopsy/images/star-bookmark-icon-16.png"; private final TagName tagName; + private static final String CONTENT_TAG_TYPE_NODE_KEY = NbBundle.getMessage(TagNameNode.class, + "TagNameNode.contentTagTypeNodeKey.text"); + private static final String BLACKBOARD_ARTIFACT_TAG_TYPE_NODE_KEY = NbBundle.getMessage(TagNameNode.class, + "TagNameNode.bbArtTagTypeNodeKey.text"); public TagNameNode(TagName tagName) { - super(Children.create(new TagTypeNodeFactory(tagName), true), Lookups.singleton(tagName.getDisplayName() + " Tags")); + super(Children.create(new TagTypeNodeFactory(tagName), true), Lookups.singleton( + NbBundle.getMessage(TagNameNode.class, "TagNameNode.namePlusTags.text", tagName.getDisplayName()))); this.tagName = tagName; long tagsCount = 0; @@ -56,7 +62,7 @@ public class TagNameNode extends DisplayableItemNode { super.setName(tagName.getDisplayName()); super.setDisplayName(tagName.getDisplayName() + " (" + tagsCount + ")"); - if (tagName.getDisplayName().equals("Bookmark")) { + if (tagName.getDisplayName().equals(NbBundle.getMessage(this.getClass(), "TagNameNode.bookmark.text"))) { setIconBaseWithExtension(BOOKMARK_TAG_ICON_PATH); } else { @@ -73,7 +79,10 @@ public class TagNameNode extends DisplayableItemNode { propertySheet.put(properties); } - properties.put(new NodeProperty("Name", "Name", tagName.getDescription(), getName())); + properties.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "TagNameNode.createSheet.name.name"), + NbBundle.getMessage(this.getClass(), "TagNameNode.createSheet.name.displayName"), + tagName.getDescription(), + getName())); return propertySheet; } @@ -91,8 +100,6 @@ public class TagNameNode extends DisplayableItemNode { } private static class TagTypeNodeFactory extends ChildFactory { - private static final String CONTENT_TAG_TYPE_NODE_KEY = "Content Tags"; - private static final String BLACKBOARD_ARTIFACT_TAG_TYPE_NODE_KEY = "Result Tags"; private final TagName tagName; TagTypeNodeFactory(TagName tagName) { @@ -108,14 +115,23 @@ public class TagNameNode extends DisplayableItemNode { @Override protected Node createNodeForKey(String key) { - switch (key) { - case CONTENT_TAG_TYPE_NODE_KEY: - return new ContentTagTypeNode(tagName); - case BLACKBOARD_ARTIFACT_TAG_TYPE_NODE_KEY: - return new BlackboardArtifactTagTypeNode(tagName); - default: - Logger.getLogger(TagNameNode.class.getName()).log(Level.SEVERE, "{0} not a recognized key", key); - return null; +// switch (key) { +// case CONTENT_TAG_TYPE_NODE_KEY: +// return new ContentTagTypeNode(tagName); +// case BLACKBOARD_ARTIFACT_TAG_TYPE_NODE_KEY: +// return new BlackboardArtifactTagTypeNode(tagName); +// default: +// Logger.getLogger(TagNameNode.class.getName()).log(Level.SEVERE, "{0} not a recognized key", key); +// return null; +// } + // converted switch to if/else due to non-constant strings in case key + if (CONTENT_TAG_TYPE_NODE_KEY.equals(key)) { + return new ContentTagTypeNode(tagName); + } else if (BLACKBOARD_ARTIFACT_TAG_TYPE_NODE_KEY.equals(key)) { + return new BlackboardArtifactTagTypeNode(tagName); + } else { + Logger.getLogger(TagNameNode.class.getName()).log(Level.SEVERE, "{0} not a recognized key", key); + return null; } } } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/TagsNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/TagsNode.java index b9acc010e7..6b6569319a 100755 --- a/Core/src/org/sleuthkit/autopsy/datamodel/TagsNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/TagsNode.java @@ -24,6 +24,7 @@ import org.openide.nodes.ChildFactory; import org.openide.nodes.Children; import org.openide.nodes.Node; import org.openide.nodes.Sheet; +import org.openide.util.NbBundle; import org.openide.util.lookup.Lookups; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.coreutils.Logger; @@ -37,7 +38,7 @@ import org.sleuthkit.datamodel.TskCoreException; * tag name. */ class TagsNode extends DisplayableItemNode { - private static final String DISPLAY_NAME = "Tags"; + private static final String DISPLAY_NAME = NbBundle.getMessage(TagsNode.class, "TagsNode.displayName.text"); private static final String ICON_PATH = "org/sleuthkit/autopsy/images/tag-folder-blue-icon-16.png"; public TagsNode() { @@ -66,7 +67,10 @@ import org.sleuthkit.datamodel.TskCoreException; propertySheet.put(properties); } - properties.put(new NodeProperty("Name", "Name", "", getName())); + properties.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "TagsNode.createSheet.name.name"), + NbBundle.getMessage(this.getClass(), "TagsNode.createSheet.name.displayName"), + "", + getName())); return propertySheet; } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/ViewsNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/ViewsNode.java index 1690eb310b..50473bb5db 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/ViewsNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/ViewsNode.java @@ -20,6 +20,7 @@ package org.sleuthkit.autopsy.datamodel; import java.util.Arrays; import org.openide.nodes.Sheet; +import org.openide.util.NbBundle; import org.openide.util.lookup.Lookups; import org.sleuthkit.datamodel.SleuthkitCase; @@ -30,7 +31,7 @@ import org.sleuthkit.datamodel.SleuthkitCase; */ public class ViewsNode extends DisplayableItemNode { - public static final String NAME = "Views"; + public static final String NAME = NbBundle.getMessage(ViewsNode.class, "ViewsNode.name.text"); public ViewsNode(SleuthkitCase sleuthkitCase) { super(new RootContentChildren(Arrays.asList( @@ -64,10 +65,10 @@ public class ViewsNode extends DisplayableItemNode { s.put(ss); } - ss.put(new NodeProperty("Name", - "Name", - "no description", - NAME)); + ss.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "ViewsNode.createSheet.name.name"), + NbBundle.getMessage(this.getClass(), "ViewsNode.createSheet.name.displayName"), + NbBundle.getMessage(this.getClass(), "ViewsNode.createSheet.name.desc"), + NAME)); return s; } } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/VirtualDirectoryNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/VirtualDirectoryNode.java index d1a66fd25c..400275f62b 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/VirtualDirectoryNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/VirtualDirectoryNode.java @@ -24,6 +24,7 @@ import java.util.List; import java.util.Map; import javax.swing.Action; import org.openide.nodes.Sheet; +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.ContextMenuExtensionPoint; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.directorytree.ExtractAction; @@ -77,7 +78,8 @@ public class VirtualDirectoryNode extends AbstractAbstractFileNode actions = new ArrayList<>(); - actions.add(new NewWindowViewAction("View in New Window", this)); + actions.add(new NewWindowViewAction( + NbBundle.getMessage(this.getClass(), "VirtualDirectoryNode.getActions.viewInNewWin.text"), this)); actions.add(null); // creates a menu separator actions.add(ExtractAction.getInstance()); actions.add(null); // creates a menu separator @@ -97,9 +99,13 @@ public class VirtualDirectoryNode extends AbstractAbstractFileNode map = new LinkedHashMap(); fillPropertyMap(map, content); - ss.put(new NodeProperty("Name", "Name", "no description", getName())); + ss.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "VirtualDirectoryNode.createSheet.name.name"), + NbBundle.getMessage(this.getClass(), + "VirtualDirectoryNode.createSheet.name.displayName"), + NbBundle.getMessage(this.getClass(), "VirtualDirectoryNode.createSheet.name.desc"), + getName())); - final String NO_DESCR = "no description"; + final String NO_DESCR = NbBundle.getMessage(this.getClass(), "VirtualDirectoryNode.createSheet.noDesc"); for (Map.Entry entry : map.entrySet()) { ss.put(new NodeProperty(entry.getKey(), entry.getKey(), NO_DESCR, entry.getValue())); } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/VolumeNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/VolumeNode.java index 9e009a8f0a..26d7b8dde5 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/VolumeNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/VolumeNode.java @@ -22,6 +22,7 @@ import java.util.ArrayList; import java.util.List; import javax.swing.Action; import org.openide.nodes.Sheet; +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.directorytree.ExplorerNodeActionVisitor; import org.sleuthkit.autopsy.directorytree.NewWindowViewAction; import org.sleuthkit.datamodel.Volume; @@ -70,7 +71,8 @@ public class VolumeNode extends AbstractContentNode { public Action[] getActions(boolean popup) { List actionsList = new ArrayList(); - actionsList.add(new NewWindowViewAction("View in New Window", this)); + actionsList.add(new NewWindowViewAction( + NbBundle.getMessage(this.getClass(), "VolumeNode.getActions.viewInNewWin.text"), this)); actionsList.addAll(ExplorerNodeActionVisitor.getActions(content)); return actionsList.toArray(new Action[0]); @@ -85,12 +87,30 @@ public class VolumeNode extends AbstractContentNode { s.put(ss); } - ss.put(new NodeProperty("Name", "Name", "no description", this.getDisplayName())); - ss.put(new NodeProperty("ID", "ID", "no description", content.getAddr())); - ss.put(new NodeProperty("Starting Sector", "Starting Sector", "no description", content.getStart())); - ss.put(new NodeProperty("Length in Sectors", "Length in Sectors", "no description", content.getLength())); - ss.put(new NodeProperty("Description", "Description", "no description", content.getDescription())); - ss.put(new NodeProperty("Flags", "Flags", "no description", content.getFlagsAsString())); + ss.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "VolumeNode.createSheet.name.name"), + NbBundle.getMessage(this.getClass(), "VolumeNode.createSheet.name.displayName"), + NbBundle.getMessage(this.getClass(), "VolumeNode.createSheet.name.desc"), + this.getDisplayName())); + ss.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "VolumeNode.createSheet.id.name"), + NbBundle.getMessage(this.getClass(), "VolumeNode.createSheet.id.displayName"), + NbBundle.getMessage(this.getClass(), "VolumeNode.createSheet.id.desc"), + content.getAddr())); + ss.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "VolumeNode.createSheet.startSector.name"), + NbBundle.getMessage(this.getClass(), "VolumeNode.createSheet.startSector.displayName"), + NbBundle.getMessage(this.getClass(), "VolumeNode.createSheet.startSector.desc"), + content.getStart())); + ss.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "VolumeNode.createSheet.lenSectors.name"), + NbBundle.getMessage(this.getClass(), "VolumeNode.createSheet.lenSectors.displayName"), + NbBundle.getMessage(this.getClass(), "VolumeNode.createSheet.lenSectors.desc"), + content.getLength())); + ss.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "VolumeNode.createSheet.description.name"), + NbBundle.getMessage(this.getClass(), "VolumeNode.createSheet.description.displayName"), + NbBundle.getMessage(this.getClass(), "VolumeNode.createSheet.description.desc"), + content.getDescription())); + ss.put(new NodeProperty(NbBundle.getMessage(this.getClass(), "VolumeNode.createSheet.flags.name"), + NbBundle.getMessage(this.getClass(), "VolumeNode.createSheet.flags.displayName"), + NbBundle.getMessage(this.getClass(), "VolumeNode.createSheet.flags.desc"), + content.getFlagsAsString())); return s; } diff --git a/Core/src/org/sleuthkit/autopsy/directorytree/BlackboardArtifactTagTypeNode.java b/Core/src/org/sleuthkit/autopsy/directorytree/BlackboardArtifactTagTypeNode.java index 067b68a49c..0b3d2099d7 100755 --- a/Core/src/org/sleuthkit/autopsy/directorytree/BlackboardArtifactTagTypeNode.java +++ b/Core/src/org/sleuthkit/autopsy/directorytree/BlackboardArtifactTagTypeNode.java @@ -24,6 +24,7 @@ import org.openide.nodes.ChildFactory; import org.openide.nodes.Children; import org.openide.nodes.Node; import org.openide.nodes.Sheet; +import org.openide.util.NbBundle; import org.openide.util.lookup.Lookups; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.coreutils.Logger; @@ -42,7 +43,8 @@ import org.sleuthkit.datamodel.TskCoreException; * and blackboard artifact tags, grouped first by tag type, then by tag name. */ public class BlackboardArtifactTagTypeNode extends DisplayableItemNode { - private static final String DISPLAY_NAME = "Result Tags"; + private static final String DISPLAY_NAME = NbBundle.getMessage(BlackboardArtifactTagTypeNode.class, + "BlackboardArtifactTagTypeNode.displayName.text"); private static final String ICON_PATH = "org/sleuthkit/autopsy/images/tag-folder-blue-icon-16.png"; public BlackboardArtifactTagTypeNode(TagName tagName) { @@ -70,7 +72,11 @@ public class BlackboardArtifactTagTypeNode extends DisplayableItemNode { propertySheet.put(properties); } - properties.put(new NodeProperty("Name", "Name", "", getName())); + properties.put(new NodeProperty( + NbBundle.getMessage(this.getClass(), "BlackboardArtifactTagTypeNode.createSheet.name.name"), + NbBundle.getMessage(this.getClass(), "BlackboardArtifactTagTypeNode.createSheet.name.displayName"), + "", + getName())); return propertySheet; } diff --git a/Core/src/org/sleuthkit/autopsy/directorytree/Bundle.properties b/Core/src/org/sleuthkit/autopsy/directorytree/Bundle.properties index 0420f6278a..2bd981934c 100644 --- a/Core/src/org/sleuthkit/autopsy/directorytree/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/directorytree/Bundle.properties @@ -1,7 +1,6 @@ -CTL_DirectoryTreeAction=DirectoryTree -CTL_DirectoryTreeExplorerAction=DirectoryTreeExplorer +#CTL_DirectoryTreeAction=DirectoryTree +#CTL_DirectoryTreeExplorerAction=DirectoryTreeExplorer CTL_DirectoryTreeTopComponent=Directory Tree -#CTL_FileBrowserAction=FileBrowser (new) HINT_DirectoryTreeTopComponent=This is a DirectoryTree window OpenIDE-Module-Name=DirectoryTree FileSystemDetailsPanel.imgOffsetLabel.text=Image Offset: @@ -51,3 +50,53 @@ ImageDetailsPanel.imgTotalSizeValue.text=... ImageDetailsPanel.imgTotalSizeLabel.text=Total Size: ImageDetailsPanel.imgHashValue.text=... ImageDetailsPanel.imgHashLabel.text=Hash Value: +BlackboardArtifactTagTypeNode.displayName.text=Result Tags +BlackboardArtifactTagTypeNode.createSheet.name.name=Name +BlackboardArtifactTagTypeNode.createSheet.name.displayName=Name +ChangeViewAction.menuItem.view=View +ChangeViewAction.menuItem.view.hex=Hex +ChangeViewAction.menuItem.view.string=String +DataResultFilterNode.action.viewFileInDir.text=View File in Directory +DataResultFilterNode.action.viewSrcFileInDir.text=View Source File in Directory +DataResultFilterNode.action.viewInNewWin.text=View in New Window +DataResultFilterNode.action.openInExtViewer.text=Open in External Viewer +DataResultFilterNode.action.searchFilesSameMd5.text=Search for files with the same MD5 hash +DataResultFilterNode.action.viewInDir.text=View in Directory +DirectoryTreeFilterNode.action.collapseAll.text=Collapse All +DirectoryTreeFilterNode.action.openFileSrcByAttr.text=Open File Search by Attributes +DirectoryTreeFilterNode.action.runIngestMods.text=Run Ingest Modules +DirectoryTreeTopComponent.title.text=Directory Listing +DirectoryTreeTopComponent.action.viewArtContent.text=View Artifact Content +DirectoryTreeTopComponent.moduleErr=Module Error +DirectoryTreeTopComponent.moduleErr.msg=A module caused an error listening to DirectoryTreeTopComponent updates. See log to determine which module. Some data could be incomplete. +ExplorerNodeActionVisitor.action.imgDetails.title=Image Details +ExplorerNodeActionVisitor.action.extUnallocToSingleFiles=Extract Unallocated Space to Single Files +ExplorerNodeActionVisitor.action.fileSystemDetails.title=File System Details +ExplorerNodeActionVisitor.action.volumeDetails.title=Volume Details +ExplorerNodeActionVisitor.action.extUnallocToSingleFile=Extract Unallocated Space to Single File +ExplorerNodeActionVisitor.volDetail.noVolMatchErr=Error\: No Volume Matches. +ExplorerNodeActionVisitor.imgDetail.noVolMatchesErr=Error\: No Volume Matches. +ExplorerNodeActionVisitor.exception.probGetParent.text=Problem getting parent from {0}\: {1} +ExtractAction.title.extractFiles.text=Extract File(s) +ExtractAction.extractFiles.cantCreateFolderErr.msg=Couldn't create selected folder. +ExtractAction.confDlg.destFileExist.msg=Destination file {0} already exists, overwrite? +ExtractAction.confDlg.destFileExist.title=File Exists +ExtractAction.msgDlg.cantOverwriteFile.msg=Couldn't overwrite existing file {0} +ExtractAction.notifyDlg.noFileToExtr.msg=No file(s) to extract. +ExtractAction.progress.extracting=Extracting +ExtractAction.progress.cancellingExtraction={0} (Cancelling...) +ExtractAction.done.notifyMsg.fileExtr.text=File(s) extracted. +ExtractUnallocAction.notifyMsg.unallocAlreadyBeingExtr.msg=Unallocated Space is already being extracted on this Image. Please select a different Image. +ExtractUnallocAction.msgDlg.folderDoesntExist.msg=Folder does not exist. Please choose a valid folder before continuing +ExtractUnallocAction.dlgTitle.selectDirToSaveTo.msg=Select directory to save to +ExtractUnallocAction.confDlg.unallocFileAlreadyExist.msg=The Unalloc File for this volume, {0} already exists, do you want to replace it? +ExtractUnallocAction.progress.extractUnalloc.title=Extracting Unallocated Space +ExtractUnallocAction.progress.displayName.cancelling.text=Extracting Unallocated Space (Cancelling...) +ExtractUnallocAction.processing.counter.msg=processing {0} of {1} MBs +ExtractUnallocAction.done.notifyMsg.completedExtract.title=Completed extraction of unallocated space. +ExtractUnallocAction.done.notifyMsg.completedExtract.msg=Files were extracted to {0} +ResultDeleteAction.actionPerf.confDlg.delAllResults.msg=Are you sure you want to delete all {0} results? +ResultDeleteAction.actoinPerf.confDlg.delAllresults.details={0} Results Deletion +ResultDeleteAction.exception.invalidAction.msg=Invalid action type\: {0} +ExtractUnallocAction.done.errMsg.title=Error Extracting +ExtractUnallocAction.done.errMsg.msg=Error extracting unallocated space\: {0} diff --git a/Core/src/org/sleuthkit/autopsy/directorytree/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/directorytree/Bundle_ja.properties new file mode 100644 index 0000000000..cee27ecc4b --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/directorytree/Bundle_ja.properties @@ -0,0 +1,100 @@ +CTL_DirectoryTreeTopComponent=\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u30C4\u30EA\u30FC +HINT_DirectoryTreeTopComponent=\u3053\u308C\u306F\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u30C4\u30EA\u30FC\u3067\u3059 +OpenIDE-Module-Name=\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u30C4\u30EA\u30FC +FileSystemDetailsPanel.imgOffsetLabel.text=\u30A4\u30E1\u30FC\u30B8\u30AA\u30D5\u30BB\u30C3\u30C8\uFF1A +FileSystemDetailsPanel.fsTypeLabel.text=\u30D5\u30A1\u30A4\u30EB\u30B7\u30B9\u30C6\u30E0\u30BF\u30A4\u30D7\uFF1A +FileSystemDetailsPanel.genInfoLabel.text=\u30D5\u30A1\u30A4\u30EB\u4E00\u822C\u60C5\u5831 +FileSystemDetailsPanel.jLabel2.text=\u30D0\u30A4\u30C8 +FileSystemDetailsPanel.jLabel3.text=\u30D0\u30A4\u30C8 +FileSystemDetailsPanel.fsTypeValue.text=... +FileSystemDetailsPanel.imgOffsetValue.text=... +FileSystemDetailsPanel.volumeIDValue.text=... +FileSystemDetailsPanel.blockSizeValue.text=... +FileSystemDetailsPanel.blockCountValue.text=... +FileSystemDetailsPanel.rootInumValue.text=... +FileSystemDetailsPanel.firstInumValue.text=... +FileSystemDetailsPanel.lastInumValue.text=... +FileSystemDetailsPanel.jLabel1.text=\u30D5\u30A1\u30A4\u30EB\u8A73\u7D30\u60C5\u5831 +FileSystemDetailsPanel.volumeIDLabel.text=\u30DC\u30EA\u30E5\u30FC\u30E0ID\uFF1A +FileSystemDetailsPanel.blockSizeLabel.text=\u30D6\u30ED\u30C3\u30AF\u30B5\u30A4\u30BA\uFF1A +FileSystemDetailsPanel.blockCountLabel.text=\u30D6\u30ED\u30C3\u30AF\u6570\uFF1A +#todo better translation? +FileSystemDetailsPanel.rootInumLabel.text=\u30EB\u30FC\u30C8\u30E1\u30BF\u30C7\u30FC\u30BF\u30A8\u30F3\u30C8\u30EA\u30FC\uFF1A +FileSystemDetailsPanel.firstInumLabel.text=\u6700\u521D\u306E\u30E1\u30BF\u30C7\u30FC\u30BF\u30A8\u30F3\u30C8\u30EA\u30FC\uFF1A +FileSystemDetailsPanel.lastInumLabel.text=\u6700\u5F8C\u306E\u30E1\u30BF\u30C7\u30FC\u30BF\u30A8\u30F3\u30C8\u30EA\u30FC\uFF1A +FileSystemDetailsPanel.OKButton.text=OK +VolumeDetailsPanel.volumeIDLabel.text=\u30DC\u30EA\u30E5\u30FC\u30E0ID\uFF1A +VolumeDetailsPanel.volumeIDValue.text=... +VolumeDetailsPanel.startValue.text=... +VolumeDetailsPanel.lengthValue.text=... +VolumeDetailsPanel.descValue.text=... +VolumeDetailsPanel.flagsValue.text=... +VolumeDetailsPanel.startLabel.text=\u6700\u521D\u306E\u30BB\u30AF\u30BF\u30FC\uFF1A +VolumeDetailsPanel.lengthLabel.text=\u30BB\u30AF\u30BF\u30FC\u306E\u9577\u3055\uFF1A +VolumeDetailsPanel.descLabel.text=\u8AAC\u660E\uFF1A +VolumeDetailsPanel.flagsLabel.text=\u30D5\u30E9\u30B0\uFF1A +VolumeDetailsPanel.jLabel1.text=\u30DC\u30EA\u30E5\u30FC\u30E0\u4E00\u822C\u60C5\u5831 +VolumeDetailsPanel.OKButton.text=OK +ImageDetailsPanel.imageInfoLabel.text=\u30A4\u30E1\u30FC\u30B8\u60C5\u5831 +ImageDetailsPanel.imgNameLabel.text=\u540D\u79F0\uFF1A +ImageDetailsPanel.imgNameValue.text=... +ImageDetailsPanel.imgTypeLabel.text=\u30BF\u30A4\u30D7\uFF1A +ImageDetailsPanel.imgTypeValue.text=... +ImageDetailsPanel.OKButton.text=OK +ImageDetailsPanel.imgSectorSizeLabel.text=\u30BB\u30AF\u30BF\u30FC\u30B5\u30A4\u30BA\uFF1A +ImageDetailsPanel.imgSectorSizeValue.text=... +ImageDetailsPanel.imgTotalSizeValue.text=... +ImageDetailsPanel.imgTotalSizeLabel.text=\u5408\u8A08\u30B5\u30A4\u30BA\uFF1A +ImageDetailsPanel.imgHashValue.text=... +ImageDetailsPanel.imgHashLabel.text=\u30CF\u30C3\u30B7\u30E5\u5024\uFF1A +BlackboardArtifactTagTypeNode.displayName.text=\u7D50\u679C\u30BF\u30B0 +BlackboardArtifactTagTypeNode.createSheet.name.name=\u540D\u79F0 +BlackboardArtifactTagTypeNode.createSheet.name.displayName=\u540D\u79F0 +ChangeViewAction.menuItem.view=\u30D3\u30E5\u30FC +ChangeViewAction.menuItem.view.hex=Hex +ChangeViewAction.menuItem.view.string=\u30B9\u30C8\u30EA\u30F3\u30B0 +DataResultFilterNode.action.viewFileInDir.text=\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u5185\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u8868\u793A +DataResultFilterNode.action.viewSrcFileInDir.text=\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u5185\u306E\u30BD\u30FC\u30B9\u30D5\u30A1\u30A4\u30EB\u3092\u8868\u793A +DataResultFilterNode.action.viewInNewWin.text=\u65B0\u898F\u30A6\u30A3\u30F3\u30C9\u30A6\u306B\u8868\u793A +DataResultFilterNode.action.openInExtViewer.text=\u5916\u90E8\u30D3\u30E5\u30FC\u30A2\u3067\u958B\u304F +DataResultFilterNode.action.searchFilesSameMd5.text=\u540C\u3058MD5\u30CF\u30C3\u30B7\u30E5\u3092\u6301\u3064\u30D5\u30A1\u30A4\u30EB\u3092\u691C\u7D22 +DataResultFilterNode.action.viewInDir.text=\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u30FC\u306B\u8868\u793A +DirectoryTreeFilterNode.action.openFileSrcByAttr.text=\u5C5E\u6027\u306B\u3088\u308B\u30D5\u30A1\u30A4\u30EB\u691C\u7D22\u3092\u958B\u304F +DirectoryTreeFilterNode.action.runIngestMods.text=\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u30E2\u30B8\u30E5\u30FC\u30EB\u3092\u5B9F\u884C +DirectoryTreeTopComponent.title.text=\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u30EA\u30B9\u30C6\u30A3\u30F3\u30B0 +DirectoryTreeTopComponent.action.viewArtContent.text=\u6210\u679C\u7269\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u8868\u793A +DirectoryTreeTopComponent.moduleErr=\u30E2\u30B8\u30E5\u30FC\u30EB\u30A8\u30E9\u30FC +DirectoryTreeTopComponent.moduleErr.msg=DirectoryTreeTopComponent\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u3092\u78BA\u8A8D\u4E2D\u306B\u30E2\u30B8\u30E5\u30FC\u30EB\u304C\u30A8\u30E9\u30FC\u3092\u8D77\u3053\u3057\u307E\u3057\u305F\u3002\u30ED\u30B0\u3067\u3069\u306E\u30E2\u30B8\u30E5\u30FC\u30EB\u304B\u78BA\u8A8D\u3057\u3066\u4E0B\u3055\u3044\u3002\u4E00\u90E8\u306E\u30C7\u30FC\u30BF\u304C\u4E0D\u5B8C\u5168\u304B\u3082\u3057\u308C\u307E\u305B\u3093\u3002 +ExplorerNodeActionVisitor.action.imgDetails.title=\u30A4\u30E1\u30FC\u30B8\u8A73\u7D30 +ExplorerNodeActionVisitor.action.extUnallocToSingleFiles=\u672A\u5272\u308A\u5F53\u3066\u9818\u57DF\u5185\u306E\u30C7\u30FC\u30BF\u3092\u8907\u6570\u306E\u30B7\u30F3\u30B0\u30EB\u30D5\u30A1\u30A4\u30EB\u306B\u62BD\u51FA +ExplorerNodeActionVisitor.action.fileSystemDetails.title=\u30D5\u30A1\u30A4\u30EB\u30B7\u30B9\u30C6\u30E0\u8A73\u7D30 +ExplorerNodeActionVisitor.action.volumeDetails.title=\u30DC\u30EA\u30E5\u30FC\u30E0\u8A73\u7D30 +ExplorerNodeActionVisitor.action.extUnallocToSingleFile=\u672A\u5272\u308A\u5F53\u3066\u9818\u57DF\u5185\u306E\u30C7\u30FC\u30BF\u3092\u4E00\u3064\u306E\u30B7\u30F3\u30B0\u30EB\u30D5\u30A1\u30A4\u30EB\u306B\u62BD\u51FA +ExplorerNodeActionVisitor.volDetail.noVolMatchErr=\u30A8\u30E9\u30FC\uFF1A\u4E00\u81F4\u3059\u308B\u30DC\u30EA\u30E5\u30FC\u30E0\u304C\u3042\u308A\u307E\u305B\u3093\u3002 +ExplorerNodeActionVisitor.imgDetail.noVolMatchesErr=\u30A8\u30E9\u30FC\uFF1A\u4E00\u81F4\u3059\u308B\u30DC\u30EA\u30E5\u30FC\u30E0\u304C\u3042\u308A\u307E\u305B\u3093\u3002 +ExplorerNodeActionVisitor.exception.probGetParent.text={0}\: {1}\u304B\u3089\u30DA\u30A2\u30EC\u30F3\u30C8\u3092\u5165\u624B\u3059\u308B\u969B\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F +ExtractAction.title.extractFiles.text=\u30D5\u30A1\u30A4\u30EB\u3092\u62BD\u51FA +ExtractAction.extractFiles.cantCreateFolderErr.msg=\u6307\u5B9A\u3055\u308C\u305F\u30D5\u30A9\u30EB\u30C0\u30FC\u3092\u4F5C\u6210\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002 +ExtractAction.confDlg.destFileExist.msg=\u4FDD\u5B58\u5148\u306E\u30D5\u30A1\u30A4\u30EB{0}\u306F\u65E2\u306B\u5B58\u5728\u3057\u307E\u3059\u3001\u4E0A\u66F8\u304D\u3057\u307E\u3059\u304B\uFF1F +ExtractAction.confDlg.destFileExist.title=\u30D5\u30A1\u30A4\u30EB\u304C\u5B58\u5728\u3057\u307E\u3059 +ExtractAction.msgDlg.cantOverwriteFile.msg=\u65E2\u5B58\u30D5\u30A1\u30A4\u30EB{0}\u3092\u4E0A\u66F8\u304D\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F +ExtractAction.notifyDlg.noFileToExtr.msg=\u62BD\u51FA\u3067\u304D\u308B\u30D5\u30A1\u30A4\u30EB\u304C\u3042\u308A\u307E\u305B\u3093\u3002 +ExtractAction.progress.extracting=\u62BD\u51FA\u4E2D +ExtractAction.progress.cancellingExtraction={0}\uFF08\u30AD\u30E3\u30F3\u30BB\u30EB\u4E2D\u2026\uFF09 +ExtractAction.done.notifyMsg.fileExtr.text=\u30D5\u30A1\u30A4\u30EB\u304C\u62BD\u51FA\u3055\u308C\u307E\u3057\u305F\u3002 +ExtractUnallocAction.notifyMsg.unallocAlreadyBeingExtr.msg=\u3053\u306E\u30A4\u30E1\u30FC\u30B8\u306E\u672A\u5272\u308A\u5F53\u3066\u9818\u57DF\u306E\u30C7\u30FC\u30BF\u306F\u65E2\u306B\u62BD\u51FA\u4E2D\u3067\u3059\u3002\u5225\u306E\u30A4\u30E1\u30FC\u30B8\u3092\u9078\u629E\u3057\u3066\u4E0B\u3055\u3044\u3002 +ExtractUnallocAction.msgDlg.folderDoesntExist.msg=\u30D5\u30A9\u30EB\u30C0\u306F\u5B58\u5728\u3057\u307E\u305B\u3093\u3002\u7D9A\u884C\u3059\u308B\u524D\u306B\u6709\u52B9\u306A\u30D5\u30A9\u30EB\u30C0\u3092\u9078\u629E\u3057\u3066\u4E0B\u3055\u3044\u3002 +ExtractUnallocAction.dlgTitle.selectDirToSaveTo.msg=\u4FDD\u5B58\u5148\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3092\u9078\u629E\u3057\u3066\u4E0B\u3055\u3044 +#todo check meaning +ExtractUnallocAction.confDlg.unallocFileAlreadyExist.msg=\u3053\u306E\u30DC\u30EA\u30E5\u30FC\u30E0\u306E\u672A\u5272\u308A\u5F53\u3066\u9818\u57DF\u306E\u30D5\u30A1\u30A4\u30EB{0}\u306F\u65E2\u306B\u5B58\u5728\u3057\u307E\u3059\u3002\u65E2\u5B58\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u7F6E\u304D\u63DB\u3048\u307E\u3059\u304B\uFF1F +ExtractUnallocAction.progress.extractUnalloc.title=\u672A\u5272\u308A\u5F53\u3066\u9818\u57DF\u306E\u30C7\u30FC\u30BF\u3092\u62BD\u51FA\u4E2D +ExtractUnallocAction.progress.displayName.cancelling.text=\u672A\u5272\u308A\u5F53\u3066\u9818\u57DF\u306E\u30C7\u30FC\u30BF\u3092\u62BD\u51FA\u4E2D\uFF08\u30AD\u30E3\u30F3\u30BB\u30EB\u4E2D\u2026\uFF09 +ExtractUnallocAction.processing.counter.msg=\u51E6\u7406\u4E2D\u3000{0}\uFF0F{1} MBs +ExtractUnallocAction.done.notifyMsg.completedExtract.title=\u672A\u5272\u308A\u5F53\u3066\u9818\u57DF\u306E\u62BD\u51FA\u304C\u5B8C\u4E86\u3057\u307E\u3057\u305F\u3002 +ExtractUnallocAction.done.notifyMsg.completedExtract.msg=\u30D5\u30A1\u30A4\u30EB\u306F{0}\u3078\u62BD\u51FA\u3055\u308C\u307E\u3057\u305F +ResultDeleteAction.actionPerf.confDlg.delAllResults.msg={0}\u306E\u7D50\u679C\u5168\u3066\u3092\u672C\u5F53\u306B\u524A\u9664\u3057\u307E\u3059\u304B\uFF1F +ResultDeleteAction.actoinPerf.confDlg.delAllresults.details={0}\u7D50\u679C\u524A\u9664 +ResultDeleteAction.exception.invalidAction.msg=\u7121\u52B9\u306A\u30A2\u30AF\u30B7\u30E7\u30F3\u30BF\u30A4\u30D7\uFF1A{0} +ExtractUnallocAction.done.errMsg.title=\u62BD\u51FA\u30A8\u30E9\u30FC +ExtractUnallocAction.done.errMsg.msg=\u672A\u5272\u308A\u5F53\u3066\u9818\u57DF\u306E\u62BD\u51FA\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\uFF1A{0} +DirectoryTreeFilterNode.action.collapseAll.text=\u3059\u3079\u3066\u30B3\u30E9\u30D7\u30B9 \ No newline at end of file diff --git a/Core/src/org/sleuthkit/autopsy/directorytree/ChangeViewAction.java b/Core/src/org/sleuthkit/autopsy/directorytree/ChangeViewAction.java index 1c6c42ce58..751948690f 100644 --- a/Core/src/org/sleuthkit/autopsy/directorytree/ChangeViewAction.java +++ b/Core/src/org/sleuthkit/autopsy/directorytree/ChangeViewAction.java @@ -23,6 +23,7 @@ import javax.swing.AbstractAction; import javax.swing.JMenu; import javax.swing.JMenuItem; import org.openide.nodes.Node; +import org.openide.util.NbBundle; import org.openide.util.actions.Presenter; import org.sleuthkit.autopsy.corecomponents.DataContentTopComponent; import org.sleuthkit.autopsy.corecomponents.DataContentViewerHex; @@ -95,9 +96,9 @@ import org.sleuthkit.autopsy.coreutils.Logger; */ @Override public JMenuItem getPopupPresenter() { - JMenu item = new JMenu("View"); - item.add(new ChangeViewAction("Hex", 1, node)); - item.add(new ChangeViewAction("String", 2, node)); + JMenu item = new JMenu(NbBundle.getMessage(this.getClass(), "ChangeViewAction.menuItem.view")); + item.add(new ChangeViewAction(NbBundle.getMessage(this.getClass(), "ChangeViewAction.menuItem.view.hex"), 1, node)); + item.add(new ChangeViewAction(NbBundle.getMessage(this.getClass(), "ChangeViewAction.menuItem.view.string"), 2, node)); return item; } } diff --git a/Core/src/org/sleuthkit/autopsy/directorytree/DataResultFilterNode.java b/Core/src/org/sleuthkit/autopsy/directorytree/DataResultFilterNode.java index 2d1941968f..506a37741c 100755 --- a/Core/src/org/sleuthkit/autopsy/directorytree/DataResultFilterNode.java +++ b/Core/src/org/sleuthkit/autopsy/directorytree/DataResultFilterNode.java @@ -18,6 +18,7 @@ */ package org.sleuthkit.autopsy.directorytree; +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.actions.AddBlackboardArtifactTagAction; import org.sleuthkit.autopsy.actions.AddContentTagAction; import java.awt.event.ActionEvent; @@ -190,16 +191,19 @@ public class DataResultFilterNode extends FilterNode { if (artifactTypeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_HASHSET_HIT.getTypeID() || artifactTypeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_KEYWORD_HIT.getTypeID() ) { - actions.add(new ViewContextAction("View File in Directory", ban)); + actions.add(new ViewContextAction( + NbBundle.getMessage(this.getClass(), "DataResultFilterNode.action.viewFileInDir.text"), ban)); } else { // if the artifact links to another file, add an action to go to // that file Content c = findLinked(ban); if (c != null) { - actions.add(new ViewContextAction("View File in Directory", c)); + actions.add(new ViewContextAction( + NbBundle.getMessage(this.getClass(), "DataResultFilterNode.action.viewFileInDir.text"), c)); } // action to go to the source file of the artifact - actions.add(new ViewContextAction("View Source File in Directory", ban)); + actions.add(new ViewContextAction( + NbBundle.getMessage(this.getClass(), "DataResultFilterNode.action.viewSrcFileInDir.text"), ban)); } File f = ban.getLookup().lookup(File.class); LayoutFile lf = null; @@ -209,11 +213,14 @@ public class DataResultFilterNode extends FilterNode { if (f != null) { final FileNode fn = new FileNode(f); actions.add(null); // creates a menu separator - actions.add(new NewWindowViewAction("View in New Window", fn)); - actions.add(new ExternalViewerAction("Open in External Viewer", fn)); + actions.add(new NewWindowViewAction( + NbBundle.getMessage(this.getClass(), "DataResultFilterNode.action.viewInNewWin.text"), fn)); + actions.add(new ExternalViewerAction( + NbBundle.getMessage(this.getClass(), "DataResultFilterNode.action.openInExtViewer.text"), fn)); actions.add(null); // creates a menu separator actions.add(ExtractAction.getInstance()); - actions.add(new HashSearchAction("Search for files with the same MD5 hash", fn)); + actions.add(new HashSearchAction( + NbBundle.getMessage(this.getClass(), "DataResultFilterNode.action.searchFilesSameMd5.text"), fn)); //add file/result tag if itself is not a tag if (artifactTypeID != BlackboardArtifact.ARTIFACT_TYPE.TSK_TAG_FILE.getTypeID() @@ -227,8 +234,10 @@ public class DataResultFilterNode extends FilterNode { if ((d = ban.getLookup().lookup(Directory.class)) != null) { DirectoryNode dn = new DirectoryNode(d); actions.add(null); // creates a menu separator - actions.add(new NewWindowViewAction("View in New Window", dn)); - actions.add(new ExternalViewerAction("Open in External Viewer", dn)); + actions.add(new NewWindowViewAction( + NbBundle.getMessage(this.getClass(), "DataResultFilterNode.action.viewInNewWin.text"), dn)); + actions.add(new ExternalViewerAction( + NbBundle.getMessage(this.getClass(), "DataResultFilterNode.action.openInExtViewer.text"), dn)); actions.add(null); // creates a menu separator actions.add(ExtractAction.getInstance()); @@ -244,8 +253,10 @@ public class DataResultFilterNode extends FilterNode { if ((vd = ban.getLookup().lookup(VirtualDirectory.class)) != null) { VirtualDirectoryNode dn = new VirtualDirectoryNode(vd); actions.add(null); // creates a menu separator - actions.add(new NewWindowViewAction("View in New Window", dn)); - actions.add(new ExternalViewerAction("Open in External Viewer", dn)); + actions.add(new NewWindowViewAction( + NbBundle.getMessage(this.getClass(), "DataResultFilterNode.action.viewInNewWin.text"), dn)); + actions.add(new ExternalViewerAction( + NbBundle.getMessage(this.getClass(), "DataResultFilterNode.action.openInExtViewer.text"), dn)); actions.add(null); // creates a menu separator actions.add(ExtractAction.getInstance()); @@ -260,8 +271,10 @@ public class DataResultFilterNode extends FilterNode { } else if ((lf = ban.getLookup().lookup(LayoutFile.class)) != null) { LayoutFileNode lfn = new LayoutFileNode(lf); actions.add(null); // creates a menu separator - actions.add(new NewWindowViewAction("View in New Window", lfn)); - actions.add(new ExternalViewerAction("Open in External Viewer", lfn)); + actions.add(new NewWindowViewAction( + NbBundle.getMessage(this.getClass(), "DataResultFilterNode.action.viewInNewWin.text"), lfn)); + actions.add(new ExternalViewerAction( + NbBundle.getMessage(this.getClass(), "DataResultFilterNode.action.openInExtViewer.text"), lfn)); actions.add(null); // creates a menu separator actions.add(ExtractAction.getInstance()); @@ -277,8 +290,10 @@ public class DataResultFilterNode extends FilterNode { || (locF = ban.getLookup().lookup(DerivedFile.class)) != null) { final LocalFileNode locfn = new LocalFileNode(locF); actions.add(null); // creates a menu separator - actions.add(new NewWindowViewAction("View in New Window", locfn)); - actions.add(new ExternalViewerAction("Open in External Viewer", locfn)); + actions.add(new NewWindowViewAction( + NbBundle.getMessage(this.getClass(), "DataResultFilterNode.action.viewInNewWin.text"), locfn)); + actions.add(new ExternalViewerAction( + NbBundle.getMessage(this.getClass(), "DataResultFilterNode.action.openInExtViewer.text"), locfn)); actions.add(null); // creates a menu separator actions.add(ExtractAction.getInstance()); @@ -423,7 +438,8 @@ public class DataResultFilterNode extends FilterNode { @Override public AbstractAction visit(BlackboardArtifactNode ban) { - return new ViewContextAction("View in Directory", ban); + return new ViewContextAction( + NbBundle.getMessage(this.getClass(), "DataResultFilterNode.action.viewInDir.text"), ban); } @Override diff --git a/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeFilterNode.java b/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeFilterNode.java index cd3322fd81..836dc68710 100755 --- a/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeFilterNode.java +++ b/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeFilterNode.java @@ -27,6 +27,7 @@ import javax.swing.AbstractAction; import javax.swing.Action; import org.openide.nodes.FilterNode; import org.openide.nodes.Node; +import org.openide.util.NbBundle; import org.openide.util.lookup.Lookups; import org.openide.util.lookup.ProxyLookup; import org.sleuthkit.autopsy.coreutils.Logger; @@ -46,7 +47,8 @@ import org.sleuthkit.datamodel.TskCoreException; */ class DirectoryTreeFilterNode extends FilterNode { - private static final Action collapseAll = new CollapseAction("Collapse All"); + private static final Action collapseAll = new CollapseAction( + NbBundle.getMessage(DirectoryTreeFilterNode.class, "DirectoryTreeFilterNode.action.collapseAll.text")); private static final Logger logger = Logger.getLogger(DirectoryTreeFilterNode.class.getName()); /** @@ -105,11 +107,13 @@ class DirectoryTreeFilterNode extends FilterNode { // file search action final Image img = this.getLookup().lookup(Image.class); if (img != null) { - actions.add(new FileSearchAction("Open File Search by Attributes")); + actions.add(new FileSearchAction( + NbBundle.getMessage(this.getClass(), "DirectoryTreeFilterNode.action.openFileSrcByAttr.text"))); } //ingest action - actions.add(new AbstractAction("Run Ingest Modules") { + actions.add(new AbstractAction( + NbBundle.getMessage(this.getClass(), "DirectoryTreeFilterNode.action.runIngestMods.text")) { @Override public void actionPerformed(ActionEvent e) { final IngestDialog ingestDialog = new IngestDialog(); diff --git a/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java b/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java index ae09e6cffa..c00b54811f 100644 --- a/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java +++ b/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java @@ -81,7 +81,8 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat private transient ExplorerManager em = new ExplorerManager(); private static DirectoryTreeTopComponent instance; - private DataResultTopComponent dataResult = new DataResultTopComponent(true, "Directory Listing"); + private DataResultTopComponent dataResult = new DataResultTopComponent(true, NbBundle.getMessage(this.getClass(), + "DirectoryTreeTopComponent.title.text")); private LinkedList backList; private LinkedList forwardList; /** @@ -1014,7 +1015,9 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat @Override public void viewArtifactContent(BlackboardArtifact art) { - new ViewContextAction("View Artifact Content", new BlackboardArtifactNode(art)).actionPerformed(null); + new ViewContextAction( + NbBundle.getMessage(this.getClass(), "DirectoryTreeTopComponent.action.viewArtContent.text"), + new BlackboardArtifactNode(art)).actionPerformed(null); } // private class HistoryManager { @@ -1033,7 +1036,10 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat } catch (Exception e) { logger.log(Level.SEVERE, "DirectoryTreeTopComponent listener threw exception", e); - MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to DirectoryTreeTopComponent updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "DirectoryTreeTopComponent.moduleErr"), + NbBundle.getMessage(this.getClass(), + "DirectoryTreeTopComponent.moduleErr.msg"), + MessageNotifyUtil.MessageType.ERROR); } } } diff --git a/Core/src/org/sleuthkit/autopsy/directorytree/ExplorerNodeActionVisitor.java b/Core/src/org/sleuthkit/autopsy/directorytree/ExplorerNodeActionVisitor.java index 8ea28dd457..55dd6deef8 100755 --- a/Core/src/org/sleuthkit/autopsy/directorytree/ExplorerNodeActionVisitor.java +++ b/Core/src/org/sleuthkit/autopsy/directorytree/ExplorerNodeActionVisitor.java @@ -18,6 +18,7 @@ */ package org.sleuthkit.autopsy.directorytree; +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.actions.AddContentTagAction; import java.awt.Toolkit; import java.awt.Dimension; @@ -81,22 +82,27 @@ public class ExplorerNodeActionVisitor extends ContentVisitor.Default visit(final Image img) { List lst = new ArrayList(); - lst.add(new ImageDetails("Image Details", img)); + lst.add(new ImageDetails( + NbBundle.getMessage(this.getClass(), "ExplorerNodeActionVisitor.action.imgDetails.title"), img)); //TODO lst.add(new ExtractAction("Extract Image", img)); - lst.add(new ExtractUnallocAction("Extract Unallocated Space to Single Files", img)); + lst.add(new ExtractUnallocAction( + NbBundle.getMessage(this.getClass(), "ExplorerNodeActionVisitor.action.extUnallocToSingleFiles"), img)); return lst; } @Override public List visit(final FileSystem fs) { - return Collections.singletonList(new FileSystemDetails("File System Details", fs)); + return Collections.singletonList(new FileSystemDetails( + NbBundle.getMessage(this.getClass(), "ExplorerNodeActionVisitor.action.fileSystemDetails.title"), fs)); } @Override public List visit(final Volume vol) { List lst = new ArrayList(); - lst.add(new VolumeDetails("Volume Details", vol)); - lst.add(new ExtractUnallocAction("Extract Unallocated Space to Single File", vol)); + lst.add(new VolumeDetails( + NbBundle.getMessage(this.getClass(), "ExplorerNodeActionVisitor.action.volumeDetails.title"), vol)); + lst.add(new ExtractUnallocAction( + NbBundle.getMessage(this.getClass(), "ExplorerNodeActionVisitor.action.extUnallocToSingleFile"), vol)); return lst; } @@ -197,7 +203,8 @@ public class ExplorerNodeActionVisitor extends ContentVisitor.Default 0) { if (lockedImages.contains(currentImage)) { - MessageNotifyUtil.Message.info("Unallocated Space is already being extracted on this Image. Please select a different Image."); + MessageNotifyUtil.Message.info(NbBundle.getMessage(this.getClass(), "ExtractUnallocAction.notifyMsg.unallocAlreadyBeingExtr.msg")); //JOptionPane.showMessageDialog(new Frame(), "Unallocated Space is already being extracted on this Image. Please select a different Image."); return; } @@ -113,7 +114,8 @@ import org.sleuthkit.datamodel.VolumeSystem; public void approveSelection() { File f = getSelectedFile(); if (!f.exists() && getDialogType() == SAVE_DIALOG || !f.canWrite()) { - JOptionPane.showMessageDialog(this, "Folder does not exist. Please choose a valid folder before continuing"); + JOptionPane.showMessageDialog(this, NbBundle.getMessage(this.getClass(), + "ExtractUnallocAction.msgDlg.folderDoesntExist.msg")); return; } super.approveSelection(); @@ -121,7 +123,8 @@ import org.sleuthkit.datamodel.VolumeSystem; }; fc.setCurrentDirectory(new File(Case.getCurrentCase().getCaseDirectory() + File.separator + "Export")); - fc.setDialogTitle("Select directory to save to"); + fc.setDialogTitle( + NbBundle.getMessage(this.getClass(), "ExtractUnallocAction.dlgTitle.selectDirToSaveTo.msg")); fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); fc.setAcceptAllFileFilterUsed(false); int returnValue = fc.showSaveDialog((Component) e.getSource()); @@ -132,7 +135,9 @@ import org.sleuthkit.datamodel.VolumeSystem; if (u.llf != null && u.llf.size() > 0 && !lockedVols.contains(u.getFileName())) { //Format for single Unalloc File is ImgName-Unalloc-ImgObjectID-VolumeID.dat if (u.FileInstance.exists()) { - int res = JOptionPane.showConfirmDialog(new Frame(), "The Unalloc File for this volume, " + u.getFileName() + " already exists, do you want to replace it?"); + int res = JOptionPane.showConfirmDialog(new Frame(), NbBundle.getMessage(this.getClass(), + "ExtractUnallocAction.confDlg.unallocFileAlreadyExist.msg", + u.getFileName())); if (res == JOptionPane.YES_OPTION) { u.FileInstance.delete(); } else { @@ -224,13 +229,15 @@ import org.sleuthkit.datamodel.VolumeSystem; @Override protected Integer doInBackground() { try { - progress = ProgressHandleFactory.createHandle("Extracting Unallocated Space", new Cancellable() { + progress = ProgressHandleFactory.createHandle( + NbBundle.getMessage(this.getClass(), "ExtractUnallocAction.progress.extractUnalloc.title"), new Cancellable() { @Override public boolean cancel() { logger.log(Level.INFO, "Canceling extraction of unallocated space"); canceled = true; if (progress != null) { - progress.setDisplayName("Extracting Unallocated Space" + " (Cancelling...)"); + progress.setDisplayName(NbBundle.getMessage(this.getClass(), + "ExtractUnallocAction.progress.displayName.cancelling.text")); } return true; } @@ -256,7 +263,9 @@ import org.sleuthkit.datamodel.VolumeSystem; while(offsetPerFile != f.getSize() && !canceled){ if (++kbs % 128 == 0) { mbs++; - progress.progress("processing " + mbs + " of " + totalSizeinMegs + " MBs", mbs-1); + progress.progress(NbBundle.getMessage(this.getClass(), + "ExtractUnallocAction.processing.counter.msg", + mbs, totalSizeinMegs), mbs-1); } bytesRead = f.read(buf, offsetPerFile, MAX_BYTES); offsetPerFile+= bytesRead; @@ -300,10 +309,16 @@ import org.sleuthkit.datamodel.VolumeSystem; try { get(); if (!canceled && !lus.isEmpty()) { - MessageNotifyUtil.Notify.info("Completed extraction of unallocated space.", "Files were extracted to " + lus.get(0).getFile().getParent()); + MessageNotifyUtil.Notify.info(NbBundle.getMessage(this.getClass(), + "ExtractUnallocAction.done.notifyMsg.completedExtract.title"), + NbBundle.getMessage(this.getClass(), + "ExtractUnallocAction.done.notifyMsg.completedExtract.msg", + lus.get(0).getFile().getParent())); } } catch (InterruptedException | ExecutionException ex) { - MessageNotifyUtil.Notify.error("Error Extracting", "Error extracting unallocated space: " + ex.getMessage()); + MessageNotifyUtil.Notify.error( + NbBundle.getMessage(this.getClass(), "ExtractUnallocAction.done.errMsg.title"), + NbBundle.getMessage(this.getClass(), "ExtractUnallocAction.done.errMsg.msg", ex.getMessage())); } } } diff --git a/Core/src/org/sleuthkit/autopsy/directorytree/ResultDeleteAction.java b/Core/src/org/sleuthkit/autopsy/directorytree/ResultDeleteAction.java index 05ff64d947..43e5891fbb 100644 --- a/Core/src/org/sleuthkit/autopsy/directorytree/ResultDeleteAction.java +++ b/Core/src/org/sleuthkit/autopsy/directorytree/ResultDeleteAction.java @@ -23,6 +23,8 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; import java.util.logging.Level; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import javax.swing.AbstractAction; import javax.swing.JOptionPane; @@ -89,15 +91,21 @@ import org.sleuthkit.datamodel.SleuthkitCase; viewer.refreshTree(BlackboardArtifact.ARTIFACT_TYPE.fromID(art.getArtifactTypeID())); } else if (this.actionType == ActionType.TYPE_ARTIFACTS) { if (JOptionPane.showConfirmDialog(null, - "Are you sure you want to delete all " + artType.getDisplayName() + " results?", - artType.getDisplayName() + " Results Deletion", JOptionPane.YES_NO_OPTION, - JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION) { + NbBundle.getMessage(this.getClass(), + "ResultDeleteAction.actionPerf.confDlg.delAllResults.msg", + artType.getDisplayName()), + NbBundle.getMessage(this.getClass(), + "ResultDeleteAction.actoinPerf.confDlg.delAllresults.details", + artType.getDisplayName()), JOptionPane.YES_NO_OPTION, + JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION) { deleteArtifacts(artType); DirectoryTreeTopComponent viewer = DirectoryTreeTopComponent.findInstance(); viewer.refreshTree(artType); } } else { - throw new IllegalArgumentException("Invalid action type: " + this.actionType); + throw new IllegalArgumentException( + NbBundle.getMessage(this.getClass(), "ResultDeleteAction.exception.invalidAction.msg", + this.actionType)); } } diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/Bundle.properties b/Core/src/org/sleuthkit/autopsy/filesearch/Bundle.properties index afeec73469..b8958f62c5 100644 --- a/Core/src/org/sleuthkit/autopsy/filesearch/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/filesearch/Bundle.properties @@ -1,31 +1,9 @@ -CTL_FileSearchAction=File Search by Attributes -CTL_FileSearchTopComponent=File Search by Attributes -HINT_FileSearchTopComponent=This is a FileSearch window OpenIDE-Module-Name=FileSearch -FileSearchTopComponent.searchTermLabel1.text=Search for files that match the following criteria: -FileSearchTopComponent.searchButton1.text=Search -FileSearchTopComponent.sizeCheckBox1.text=Size: -FileSearchTopComponent.noteNameLabel1.text=*Note: Name match is case insensitive and matches
any part of the file name. Regular expressions are
not currently supported. -FileSearchTopComponent.searchTextField1.text= -FileSearchTopComponent.nameCheckBox1.text=Name: -FileSearchTopComponent.jLabel8.text=Timezone: -FileSearchTopComponent.jLabel7.text=*The date format is mm/dd/yyyy -FileSearchTopComponent.jLabel6.text=*Empty fields mean "No Limit" -FileSearchTopComponent.createdCheckBox1.text=Created -FileSearchTopComponent.accessedCheckBox1.text=Accessed -FileSearchTopComponent.changedCheckBox1.text=Changed -FileSearchTopComponent.modifiedCheckBox1.text=Modified -FileSearchTopComponent.dateToButtonCalendar1.text= -FileSearchTopComponent.dateToTextField1.text= -FileSearchTopComponent.jLabel5.text=to -FileSearchTopComponent.dateFromTextField1.text= -FileSearchTopComponent.dateFromButtonCalendar1.text= -FileSearchTopComponent.dateCheckBox1.text=Date: -FileSearchTopComponent.dateFiltersButton1.text=Date Filters KnownStatusSearchPanel.knownCheckBox.text=Known Status: KnownStatusSearchPanel.knownBadOptionCheckBox.text=Known bad KnownStatusSearchPanel.knownOptionCheckBox.text=Known (NSRL or other) KnownStatusSearchPanel.unknownOptionCheckBox.text=Unknown +DateSearchFilter.noneSelectedMsg.text=At least one date type must be selected\! DateSearchPanel.dateCheckBox.text=Date: DateSearchPanel.jLabel4.text=Timezone: DateSearchPanel.jLabel3.text=*The date format is mm/dd/yyyy @@ -55,3 +33,20 @@ DateSearchPanel.cutMenuItem.text=Cut DateSearchPanel.selectAllMenuItem.text=Select All DateSearchPanel.pasteMenuItem.text=Paste DateSearchPanel.copyMenuItem.text=Copy +FileSearchAction.getName.text=File Search by Attributes +FileSearchDialog.frame.title=File Search by Attributes +FileSearchDialog.frame.msg=File Search by Attributes +FileSearchPanel.custComp.label.text=Search for files that match the following criteria\: +FileSearchPanel.filterTitle.name=Name +FileSearchPanel.filterTitle.metadata=Metadata +FileSearchPanel.filterTitle.knownStatus=Known Status +FileSearchPanel.searchButton.text=Search +FileSearchPanel.search.results.title=File Search Results {0} +FileSearchPanel.search.results.pathText=Filename Search Results\: +FileSearchPanel.search.results.msg=File Search\: {0} matches found +FileSearchPanel.search.results.details=Large number of matches may impact performance on some operations +FileSearchPanel.search.exception.noFilterSelected.msg=At least one filter must be selected. +FileSearchPanel.search.validationErr.msg=Validation Error\: {0} +KnownStatusSearchFilter.noneSelectedMsg.text=At least one known status must be selected\! +NameSearchFilter.emptyNameMsg.text=Must enter something for name search. +SearchNode.getName.text=Search Result diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/filesearch/Bundle_ja.properties new file mode 100644 index 0000000000..9c1b3da39f --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/filesearch/Bundle_ja.properties @@ -0,0 +1,47 @@ +OpenIDE-Module-Name=\u30D5\u30A1\u30A4\u30EB\u691C\u7D22 +KnownStatusSearchPanel.knownCheckBox.text=\u65E2\u77E5\u30B9\u30C6\u30FC\u30BF\u30B9\uFF1A +KnownStatusSearchPanel.knownBadOptionCheckBox.text=\u65E2\u77E5\u60AA\u8CEA +KnownStatusSearchPanel.knownOptionCheckBox.text=\u65E2\u77E5\uFF08NSRL\u307E\u305F\u306F\u305D\u306E\u4ED6\uFF09 +KnownStatusSearchPanel.unknownOptionCheckBox.text=\u4E0D\u660E +DateSearchFilter.noneSelectedMsg.text=\u6700\u4F4E\u4E00\u3064\u306E\u30C7\u30FC\u30BF\u30BF\u30A4\u30D7\u3092\u9078\u629E\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\uFF01 +DateSearchPanel.dateCheckBox.text=\u65E5\u6642\uFF1A +DateSearchPanel.jLabel4.text=\u30BF\u30A4\u30E0\u30BE\u30FC\u30F3\uFF1A +DateSearchPanel.jLabel3.text=*\u65E5\u6642\u306E\u5F62\u5F0F\u306Fmm/dd/yyyy +DateSearchPanel.jLabel2.text=*\u7A7A\u767D\u306E\u9805\u76EE\u306F\u300C\u5236\u9650\u306A\u3057\u300D\u3068\u3044\u3046\u610F\u5473\u3067\u3059 +DateSearchPanel.createdCheckBox.text=\u4F5C\u6210\u6E08\u307F +DateSearchPanel.accessedCheckBox.text=\u30A2\u30AF\u30BB\u30B9\u6E08\u307F +DateSearchPanel.changedCheckBox.text=\u5909\u66F4\u6E08\u307F +DateSearchPanel.modifiedCheckBox.text=\u4FEE\u6B63\u6E08\u307F +DateSearchPanel.jLabel1.text=to +NameSearchPanel.nameCheckBox.text=\u540D\u79F0\uFF1A +NameSearchPanel.noteNameLabel.text=*\u6CE8\u610F\uFF1A\u540D\u79F0\u30DE\u30C3\u30C1\u306F\u5927\u6587\u5B57\u3068\u5C0F\u6587\u5B57\u3092\u533A\u5225\u3057\u307E\u3059\u3002\u307E\u305F\u3001
\u30D5\u30A1\u30A4\u30EB\u540D\u306E\u3044\u304B\u306A\u308B\u90E8\u5206\u3082\u30DE\u30C3\u30C1\u3057\u307E\u3059\u3002\u6B63\u898F\u8868\u73FE\u306F
\u73FE\u5728\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002 +SizeSearchPanel.sizeCheckBox.text=\u30B5\u30A4\u30BA\uFF1A +NameSearchPanel.cutMenuItem.text=\u30AB\u30C3\u30C8 +NameSearchPanel.copyMenuItem.text=\u30B3\u30D4\u30FC +NameSearchPanel.pasteMenuItem.text=\u8CBC\u308A\u4ED8\u3051 +NameSearchPanel.selectAllMenuItem.text=\u3059\u3079\u3066\u9078\u629E +SizeSearchPanel.selectAllMenuItem.text=\u3059\u3079\u3066\u9078\u629E +SizeSearchPanel.pasteMenuItem.text=\u8CBC\u308A\u4ED8\u3051 +SizeSearchPanel.copyMenuItem.text=\u30B3\u30D4\u30FC +SizeSearchPanel.cutMenuItem.text=\u30AB\u30C3\u30C8 +DateSearchPanel.cutMenuItem.text=\u30AB\u30C3\u30C8 +DateSearchPanel.selectAllMenuItem.text=\u3059\u3079\u3066\u9078\u629E +DateSearchPanel.pasteMenuItem.text=\u8CBC\u308A\u4ED8\u3051 +DateSearchPanel.copyMenuItem.text=\u30B3\u30D4\u30FC +FileSearchAction.getName.text=\u5C5E\u6027\u306B\u3088\u308B\u30D5\u30A1\u30A4\u30EB\u691C\u7D22 +FileSearchDialog.frame.title=\u5C5E\u6027\u306B\u3088\u308B\u30D5\u30A1\u30A4\u30EB\u691C\u7D22 +FileSearchDialog.frame.msg=\u5C5E\u6027\u306B\u3088\u308B\u30D5\u30A1\u30A4\u30EB\u691C\u7D22 +FileSearchPanel.custComp.label.text=\u4E0B\u8A18\u306E\u6761\u4EF6\u306B\u4E00\u81F4\u3059\u308B\u30D5\u30A1\u30A4\u30EB\u3092\u691C\u7D22\uFF1A +FileSearchPanel.filterTitle.name=\u540D\u79F0 +FileSearchPanel.filterTitle.metadata=\u30E1\u30BF\u30C7\u30FC\u30BF +FileSearchPanel.filterTitle.knownStatus=\u65E2\u77E5\u30B9\u30C6\u30FC\u30BF\u30B9 +FileSearchPanel.searchButton.text=\u691C\u7D22 +FileSearchPanel.search.results.title=\u30D5\u30A1\u30A4\u30EB\u691C\u7D22\u7D50\u679C{0} +FileSearchPanel.search.results.pathText=\u30D5\u30A1\u30A4\u30EB\u540D\u691C\u7D22\u7D50\u679C\uFF1A +FileSearchPanel.search.results.msg=\u30D5\u30A1\u30A4\u30EB\u691C\u7D22\uFF1A{0}\u500B\u306E\u30DE\u30C3\u30C1\u304C\u898B\u3064\u304B\u308A\u307E\u3057\u305F +FileSearchPanel.search.results.details=\u591A\u304F\u306E\u30DE\u30C3\u30C1\u304C\u3042\u308B\u5834\u5408\u3001\u4E00\u90E8\u306E\u51E6\u7406\u306E\u30D1\u30D5\u30A9\u30FC\u30DE\u30F3\u30B9\u306B\u5F71\u97FF\u3092\u4E0E\u3048\u308B\u304B\u3082\u3057\u308C\u307E\u305B\u3093 +FileSearchPanel.search.exception.noFilterSelected.msg=\u6700\u4F4E\uFF11\u500B\u306E\u30D5\u30A3\u30EB\u30BF\u3092\u9078\u629E\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002 +FileSearchPanel.search.validationErr.msg=\u30D0\u30EA\u30C7\u30FC\u30B7\u30E7\u30F3\u30A8\u30E9\u30FC\uFF1A{0} +KnownStatusSearchFilter.noneSelectedMsg.text=\u6700\u4F4E\uFF11\u500B\u306E\u65E2\u77E5\u30B9\u30C6\u30FC\u30BF\u30B9\u3092\u9078\u629E\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\uFF01 +NameSearchFilter.emptyNameMsg.text=\u540D\u79F0\u691C\u7D22\u306B\u4F55\u304B\u8A18\u5165\u3057\u306A\u3051\u308C\u3070\u3044\u3051\u307E\u305B\u3093\u3002 +SearchNode.getName.text=\u691C\u7D22\u7D50\u679C \ No newline at end of file diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchFilter.java b/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchFilter.java index d61c174358..86f954a57a 100644 --- a/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchFilter.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchFilter.java @@ -38,6 +38,8 @@ import javax.swing.JList; import javax.swing.JSeparator; import javax.swing.ListCellRenderer; import javax.swing.border.EmptyBorder; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.casemodule.Case; /** @@ -46,7 +48,7 @@ import org.sleuthkit.autopsy.casemodule.Case; */ class DateSearchFilter extends AbstractFileSearchFilter { - private static final String NONE_SELECTED_MESSAGE = "At least one date type must be selected!"; + private static final String NONE_SELECTED_MESSAGE = NbBundle.getMessage(DateSearchFilter.class, "DateSearchFilter.noneSelectedMsg.text"); private static final DateFormat DATE_FORMAT = new SimpleDateFormat("MM/dd/yyyy"); private static final String SEPARATOR = "SEPARATOR"; diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/FileSearchAction.java b/Core/src/org/sleuthkit/autopsy/filesearch/FileSearchAction.java index c6b2e28697..fc76a5c0e3 100644 --- a/Core/src/org/sleuthkit/autopsy/filesearch/FileSearchAction.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/FileSearchAction.java @@ -22,6 +22,7 @@ import java.awt.event.ActionEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import org.openide.util.HelpCtx; +import org.openide.util.NbBundle; import org.openide.util.actions.CallableSystemAction; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.directorytree.FileSearchProvider; @@ -66,7 +67,7 @@ import org.sleuthkit.autopsy.directorytree.FileSearchProvider; @Override public String getName() { - return "File Search by Attributes"; + return NbBundle.getMessage(this.getClass(), "FileSearchAction.getName.text"); } @Override diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/FileSearchDialog.java b/Core/src/org/sleuthkit/autopsy/filesearch/FileSearchDialog.java index 726f0826e2..f689d34640 100644 --- a/Core/src/org/sleuthkit/autopsy/filesearch/FileSearchDialog.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/FileSearchDialog.java @@ -24,6 +24,8 @@ */ package org.sleuthkit.autopsy.filesearch; +import org.openide.util.NbBundle; + import java.awt.Dimension; import java.awt.Toolkit; import java.awt.event.ActionEvent; @@ -37,7 +39,8 @@ import javax.swing.JFrame; /** Creates new form FileSearchDialog */ public FileSearchDialog() { - super(new JFrame("File Search by Attributes"), "File Search by Attributes", true); + super(new JFrame(NbBundle.getMessage(FileSearchDialog.class, "FileSearchDialog.frame.title")), + NbBundle.getMessage(FileSearchDialog.class, "FileSearchDialog.frame.msg"), true); initComponents(); setResizable(false); diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/FileSearchPanel.java b/Core/src/org/sleuthkit/autopsy/filesearch/FileSearchPanel.java index 492510e739..e063636c24 100644 --- a/Core/src/org/sleuthkit/autopsy/filesearch/FileSearchPanel.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/FileSearchPanel.java @@ -35,6 +35,8 @@ import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.logging.Level; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import javax.swing.BoxLayout; import javax.swing.JButton; @@ -84,20 +86,20 @@ import org.sleuthkit.datamodel.TskCoreException; this.add(filterPanel, BorderLayout.CENTER); - JLabel label = new JLabel("Search for files that match the following criteria:"); + JLabel label = new JLabel(NbBundle.getMessage(this.getClass(), "FileSearchPanel.custComp.label.text")); label.setAlignmentX(Component.LEFT_ALIGNMENT); label.setBorder(new EmptyBorder(0, 0, 10, 0)); filterPanel.add(label); // Create and add filter areas - this.filterAreas.add(new FilterArea("Name", new NameSearchFilter())); + this.filterAreas.add(new FilterArea(NbBundle.getMessage(this.getClass(), "FileSearchPanel.filterTitle.name"), new NameSearchFilter())); List metadataFilters = new ArrayList(); metadataFilters.add(new SizeSearchFilter()); metadataFilters.add(new DateSearchFilter()); - this.filterAreas.add(new FilterArea("Metadata", metadataFilters)); + this.filterAreas.add(new FilterArea(NbBundle.getMessage(this.getClass(), "FileSearchPanel.filterTitle.metadata"), metadataFilters)); - this.filterAreas.add(new FilterArea("Known Status", new KnownStatusSearchFilter())); + this.filterAreas.add(new FilterArea(NbBundle.getMessage(this.getClass(), "FileSearchPanel.filterTitle.knownStatus"), new KnownStatusSearchFilter())); for (FilterArea fa : this.filterAreas) { fa.setMaximumSize(new Dimension(Integer.MAX_VALUE, fa.getMinimumSize().height)); @@ -106,7 +108,7 @@ import org.sleuthkit.datamodel.TskCoreException; } // Create and add search button - this.searchButton = new JButton("Search"); + this.searchButton = new JButton(NbBundle.getMessage(this.getClass(), "FileSearchPanel.searchButton.text")); this.searchButton.setAlignmentX(Component.LEFT_ALIGNMENT); filterPanel.add(searchButton); @@ -140,8 +142,8 @@ import org.sleuthkit.datamodel.TskCoreException; this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); try { if (this.anyFiltersEnabled()) { - String title = "File Search Results " + (++resultWindowCount); - String pathText = "Filename Search Results:"; + String title = NbBundle.getMessage(this.getClass(), "FileSearchPanel.search.results.title", ++resultWindowCount); + String pathText = NbBundle.getMessage(this.getClass(), "FileSearchPanel.search.results.pathText"); // try to get the number of matches first Case currentCase = Case.getCurrentCase(); // get the most updated case @@ -173,15 +175,17 @@ import org.sleuthkit.datamodel.TskCoreException; */ if (totalMatches > 10000) { // show info - String msg = "File Search: " + totalMatches + " matches found"; - String details = "Large number of matches may impact performance on some operations"; + String msg = NbBundle.getMessage(this.getClass(), "FileSearchPanel.search.results.msg", totalMatches); + String details = NbBundle.getMessage(this.getClass(), "FileSearchPanel.search.results.details"); MessageNotifyUtil.Notify.info(msg, details); } } else { - throw new FilterValidationException("At least one filter must be selected."); + throw new FilterValidationException( + NbBundle.getMessage(this.getClass(), "FileSearchPanel.search.exception.noFilterSelected.msg")); } } catch (FilterValidationException ex) { - NotifyDescriptor d = new NotifyDescriptor.Message("Validation Error: " + ex.getMessage()); + NotifyDescriptor d = new NotifyDescriptor.Message( + NbBundle.getMessage(this.getClass(), "FileSearchPanel.search.validationErr.msg", ex.getMessage())); DialogDisplayer.getDefault().notify(d); } finally { this.setCursor(null); diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/KnownStatusSearchFilter.java b/Core/src/org/sleuthkit/autopsy/filesearch/KnownStatusSearchFilter.java index 501a13c440..f76ae9d664 100644 --- a/Core/src/org/sleuthkit/autopsy/filesearch/KnownStatusSearchFilter.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/KnownStatusSearchFilter.java @@ -19,6 +19,8 @@ package org.sleuthkit.autopsy.filesearch; import java.awt.event.ActionListener; + +import org.openide.util.NbBundle; import org.sleuthkit.datamodel.TskData.FileKnown; /** @@ -26,7 +28,8 @@ import org.sleuthkit.datamodel.TskData.FileKnown; */ class KnownStatusSearchFilter extends AbstractFileSearchFilter { - private static final String NONE_SELECTED_MESSAGE = "At least one known status must be selected!"; + private static final String NONE_SELECTED_MESSAGE = NbBundle + .getMessage(KnownStatusSearchFilter.class, "KnownStatusSearchFilter.noneSelectedMsg.text"); KnownStatusSearchFilter(KnownStatusSearchPanel panel) { super(panel); diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/NameSearchFilter.java b/Core/src/org/sleuthkit/autopsy/filesearch/NameSearchFilter.java index 3940a6fff8..7fd24a5d8d 100644 --- a/Core/src/org/sleuthkit/autopsy/filesearch/NameSearchFilter.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/NameSearchFilter.java @@ -19,6 +19,8 @@ package org.sleuthkit.autopsy.filesearch; import java.awt.event.ActionListener; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.filesearch.FileSearchFilter.FilterValidationException; /** @@ -27,7 +29,8 @@ import org.sleuthkit.autopsy.filesearch.FileSearchFilter.FilterValidationExcepti */ class NameSearchFilter extends AbstractFileSearchFilter { - private static final String EMPTY_NAME_MESSAGE = "Must enter something for name search."; + private static final String EMPTY_NAME_MESSAGE = NbBundle + .getMessage(NameSearchFilter.class, "NameSearchFilter.emptyNameMsg.text"); public NameSearchFilter() { this(new NameSearchPanel()); diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/SearchNode.java b/Core/src/org/sleuthkit/autopsy/filesearch/SearchNode.java index 9984f6ea74..bde25acd3b 100644 --- a/Core/src/org/sleuthkit/autopsy/filesearch/SearchNode.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/SearchNode.java @@ -21,6 +21,7 @@ package org.sleuthkit.autopsy.filesearch; import java.util.List; import org.openide.nodes.AbstractNode; +import org.openide.util.NbBundle; import org.sleuthkit.datamodel.AbstractFile; /** @@ -38,6 +39,6 @@ class SearchNode extends AbstractNode { @Override public String getName() { - return "Search Result"; + return NbBundle.getMessage(this.getClass(), "SearchNode.getName.text"); } } diff --git a/Core/src/org/sleuthkit/autopsy/ingest/Bundle.properties b/Core/src/org/sleuthkit/autopsy/ingest/Bundle.properties index 0674b59bf7..af1f7bea14 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/ingest/Bundle.properties @@ -1,21 +1,6 @@ OpenIDE-Module-Name=Ingest -CTL_IngestAction=Ingest -CTL_IngestMessagesAction=Ingest Messages CTL_IngestMessageTopComponent=Messages -CTL_IngestTopComponent=Ingest HINT_IngestMessageTopComponent=Messages windows -HINT_IngestTopComponent=Ingest window -IngestTopComponent.messageFrame.title=Messages -IngestTopComponent.ingestProgressLabel.text=File Ingest Progress -IngestControlPanel.topLable.text=Image ingest modules -IngestControlPanel.startButton.text=Start -IngestDialogPanel.ingestServicesLabel.text=Image Ingest Modules -IngestDialogForm2.okButton.text=OK -IngestDialogForm2.cancelButton.text=Cancel -IngestDialogForm.cancelButton.text=Cancel -IngestDialogForm.startButton.text=Start -IngestDialogForm.jLabel1.text=Ingest Modules -IngestTopComponent.refreshFreqLabel.text=Refresh frequency IngestMessageDetailsPanel.backButton.text= IngestMessageDetailsPanel.viewArtifactButton.text=Go to Result IngestMessageDetailsPanel.viewContentButton.text=Go to Directory @@ -34,3 +19,86 @@ IngestMessagePanel.totalUniqueMessagesNameLabel.text=Unique: IngestMessagePanel.totalUniqueMessagesNameVal.text=- IngestDialogPanel.processUnallocCheckbox.text=Process Unallocated Space IngestDialogPanel.processUnallocCheckbox.toolTipText=Processes unallocated space, such as deleted files. Produces more complete results, but it may take longer to process on large images. +DataSourceTask.toString.text=ScheduledTask'{'input\={0}, modules\={1}'}' +GeneralIngestConfigurator.modName.tbirdParser.text=Thunderbird Parser +GeneralIngestConfigurator.modName.mboxParser.text=MBox Parser +GeneralIngestConfigurator.modName.emailParser.text=Email Parser +GeneralIngestConfigurator.enabledMods.notFound.msg={0} was previously enabled, but could not be found +IngestDataSourceThread.displayName.text={0} dataSource id\:{1} +IngestDataSourceThread.progress.pending={0} (Pending...) +IngestDataSourceThread.progress.cancelling={0} (Cancelling...) +IngestDialog.title.text=Ingest Modules +IngestDialog.startButton.title=Start +IngestDialog.closeButton.title=Close +IngestManager.moduleProperties.text=ingest +IngestManager.moduleErr=Module Error +IngestManager.moduleErr.errListenToUpdates.msg=A module caused an error listening to Ingest Manager updates. See log to determine which module. Some data could be incomplete. +IngestManager.displayInitError.failedToLoad.msg=Failed to load {0} ingest module.\ +\ +No ingest modules will be run. Please disable the module or fix the error and restart ingest by right clicking on the data source and selecting Run Ingest Modules.\ +\ +Error\: {1} +IngestManager.getFileModStats.moduleInfo.text={0} took\: {1} secs. to process() +IngestManager.toString.startTime.text=Start time\: {0}{1} +IngestManager.toString.endTime.text=End time\: {0}{1} +IngestManager.toString.totalIngestTime.text=Total ingest time\: {0}{1} +IngestManager.toString.totalErrs.text=Total errors\: {0}{1} +IngestManager.toString.errsPerMod.text=Errors per module\: +IngestManager.toHtmlStr.ingestTime.text=Ingest time\: {0} +IngestManager.toHtmlStr.totalErrs.text=Total errors\: {0} +IngestManager.toHtmlStr.module.text=Module +IngestManager.toHtmlStr.time.text=Time +IngestManager.toHtmlStr.errors.text=Errors +IngestManager.IngestAbstractFileProcessor.displayName=File Ingest +IngestManager.IngestAbstractFileProcessor.process.cancelling={0} (Cancelling...) +IngestManager.EnqueueWorker.displayName.text=Queueing Ingest +IngestManager.EnqueueWorker.process.cancelling={0} (Cancelling...) +IngestManager.datatSourceIngest.progress.text=DataSource Ingest {0} +IngestManager.fileIngest.progress.text=File Ingest {0} +IngestMessage.toString.type.text=type\: {0} +IngestMessage.toString.source.text=\ source\: {0} +IngestMessage.toString.date.text=\ date\: {0} +IngestMessage.toString.subject.text=\ subject\: {0} +IngestMessage.toString.details.text=\ details\: {0} +IngestMessage.toString.data.text=\ data\: {0} +IngestMessage.exception.typeSrcSubjNotNull.msg=message type, source and subject cannot be null +IngestMessage.exception.srcSubjNotNull.msg=source and subject cannot be null +IngestMessage.exception.srcSubjDetailsDataNotNull.msg=source, subject, details and data cannot be null +IngestMessagePanel.moduleErr=Module Error +IngestMessagePanel.moduleErr.errListenUpdates.text=A module caused an error listening to IngestMessagePanel updates. See log to determine which module. Some data could be incomplete. +IngestMessagePanel.MsgTableMod.colNames.module=Module +IngestMessagePanel.MsgTableMod.colNames.num=Num +IngestMessagePanel.MsgTableMod.colNames.new=New? +IngestMessagePanel.MsgTableMod.colNames.subject=Subject +IngestMessagePanel.MsgTableMod.colNames.timestamp=Timestamp +IngestMessagePanel.BooleanRenderer.exception.nonBoolVal.msg=Tried to use BooleanRenderer on non-boolean value. +IngestMessagePanel.DateRenderer.exception.nonDateVal.text=Tried to use DateRenderer on non-Date value. +IngestMessageTopComponent.displayReport.option.OK=OK +IngestMessageTopComponent.displayReport.option.GenRpt=Generate Report +IngestMessageTopComponent.msgDlg.ingestRpt.text=Ingest Report +IngestModuleLoader.moduleErr=Module Error +IngestModuleLoader.moduleErr.errListenUpdates.msg=A module caused an error listening to IngestModuleLoader updates. See log to determine which module. Some data could be incomplete. +IngestModuleLoader.exception.notImplemented.msg=Not yet implemented +IngestModuleLoader.exception.cantFindPipeline.msg=Could not find expected pipeline of type\: {0}, cannot add autodiscovered module\: {1} +IngestModuleLoader.save.comment.text=Saved by\: {0} on\: {1} +IngestModuleLoader.loadRawPipeline.exception.cantLoadXML.msg=Could not load pipeline config XML\: {0} +IngestModuleLoader.loadRawPipeline.exception.invalidFileFormat.msg=Error loading pipeline configuration\: invalid file format. +IngestModuleLoader.loadRawPipeline.exception.noPipelinesInConf.msg=No pipelines found in the pipeline configuration\: {0} +IngestModuleLoader.exception.noPipelineTypeForStr.msg=No PIPELINE_TYPE for string\: {0} +IngestMonitor.mgrErrMsg.lowDiskSpace.title=Ingest stopped - low disk space on {0} +IngestMonitor.mgrErrMsg.lowDiskSpace.msg=Stopping ingest due to low disk space on disk {0}. \ +Ensure the Case drive has at least 1GB free space and restart ingest. +IngestScheduler.FileSched.toString.rootDirs.text=\ +RootDirs(sorted), size\: {0} +IngestScheduler.FileSched.toString.curDirs.text=\ +CurDirs(stack), size\: {0} +IngestScheduler.FileSched.toString.curFiles.text=\ +CurFiles, size\: {0} +IngestScheduler.fileTask.toString.long=ProcessTask'{'file\={0}\: {1}'}' +IngestScheduler.fileTask.toString.short=ProcessTask'{'file\={0}\: {1}'}' +IngestScheduler.FileTask.next.exception.msg=No next ProcessTask, check hasNext() first\! +IngestScheduler.remove.exception.notSupported.msg=Not supported. +IngestScheduler.DataSourceScheduler.exception.next.msg=There is no data source tasks in the queue, check hasNext() +IngestScheduler.DataSourceScheduler.exception.remove.msg=Removing of scheduled data source ingest tasks is not supported. +IngestScheduler.DataSourceScheduler.toString.size=DataSourceQueue, size\: {0} +PipelineContext.toString.text=pipelineContext'{'task\={0}'}' diff --git a/Core/src/org/sleuthkit/autopsy/ingest/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/ingest/Bundle_ja.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/Core/src/org/sleuthkit/autopsy/ingest/DataSourceTask.java b/Core/src/org/sleuthkit/autopsy/ingest/DataSourceTask.java index 01bac09f19..7877057d80 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/DataSourceTask.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/DataSourceTask.java @@ -20,6 +20,8 @@ package org.sleuthkit.autopsy.ingest; import java.util.List; + +import org.openide.util.NbBundle; import org.sleuthkit.datamodel.Content; /** @@ -72,7 +74,7 @@ class DataSourceTask { @Override public String toString() { - return "ScheduledTask{" + "input=" + input + ", modules=" + modules + '}'; + return NbBundle.getMessage(this.getClass(), "DataSourceTask.toString.text", input, modules); } /** diff --git a/Core/src/org/sleuthkit/autopsy/ingest/GeneralIngestConfigurator.java b/Core/src/org/sleuthkit/autopsy/ingest/GeneralIngestConfigurator.java index 203e98cbe8..b96ad9cd49 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/GeneralIngestConfigurator.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/GeneralIngestConfigurator.java @@ -22,6 +22,8 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import javax.swing.JPanel; + +import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; import org.sleuthkit.autopsy.coreutils.ModuleSettings; import org.sleuthkit.datamodel.Content; @@ -104,9 +106,11 @@ public class GeneralIngestConfigurator implements IngestConfigurator { // the UI component. List enabledModules = new ArrayList<>(); for (String moduleName : enabledList) { - if (moduleName.equals("Thunderbird Parser") - || moduleName.equals("MBox Parser")) { - moduleName = "Email Parser"; + if (moduleName.equals( + NbBundle.getMessage(this.getClass(), "GeneralIngestConfigurator.modName.tbirdParser.text")) + || moduleName.equals( + NbBundle.getMessage(this.getClass(), "GeneralIngestConfigurator.modName.mboxParser.text"))) { + moduleName = NbBundle.getMessage(this.getClass(), "GeneralIngestConfigurator.modName.emailParser.text"); } IngestModuleAbstract moduleFound = null; @@ -120,7 +124,8 @@ public class GeneralIngestConfigurator implements IngestConfigurator { enabledModules.add(moduleFound); } else { - messages.add(moduleName + " was previously enabled, but could not be found"); + messages.add(NbBundle.getMessage(this.getClass(), "GeneralIngestConfigurator.enabledMods.notFound.msg", + moduleName)); } } ingestDialogPanel.setEnabledIngestModules(enabledModules); diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestDataSourceThread.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestDataSourceThread.java index 8c427eeff1..217a568344 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestDataSourceThread.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestDataSourceThread.java @@ -23,6 +23,8 @@ import java.awt.EventQueue; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantReadWriteLock; import java.util.logging.Level; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import javax.swing.SwingWorker; import org.netbeans.api.progress.ProgressHandle; @@ -95,13 +97,17 @@ import org.sleuthkit.datamodel.Content; logger.log(Level.INFO, "Pending module: " + module.getName()); - final String displayName = module.getName() + " dataSource id:" + dataSource.getId(); - progress = ProgressHandleFactory.createHandle(displayName + " (Pending...)", new Cancellable() { + final String displayName = NbBundle.getMessage(this.getClass(), "IngestDataSourceThread.displayName.text", + module.getName(), + dataSource.getId()); + progress = ProgressHandleFactory.createHandle( + NbBundle.getMessage(this.getClass(), "IngestDataSourceThread.progress.pending", displayName), new Cancellable() { @Override public boolean cancel() { logger.log(Level.INFO, "DataSource ingest module " + module.getName() + " cancelled by user."); if (progress != null) { - progress.setDisplayName(displayName + " (Cancelling...)"); + progress.setDisplayName( + NbBundle.getMessage(this.getClass(), "IngestDataSourceThread.progress.cancelling", displayName)); } return IngestDataSourceThread.this.cancel(true); } diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestDialog.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestDialog.java index fb68c15a5e..b6cedc099f 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestDialog.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestDialog.java @@ -32,6 +32,8 @@ import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; + +import org.openide.util.NbBundle; import org.sleuthkit.datamodel.Content; /** @@ -40,7 +42,7 @@ import org.sleuthkit.datamodel.Content; */ public class IngestDialog extends JDialog { - private static final String TITLE = "Ingest Modules"; + private static final String TITLE = NbBundle.getMessage(IngestDialog.class, "IngestDialog.title.text"); private static Dimension DIMENSIONS = new Dimension(500, 300); private IngestConfigurator ingestConfigurator; @@ -77,8 +79,8 @@ public class IngestDialog extends JDialog { setLocation((screenDimension.width - w) / 2, (screenDimension.height - h) / 2); add(ingestConfigurator.getIngestConfigPanel(), BorderLayout.PAGE_START); - JButton startButton = new JButton("Start"); - JButton closeButton = new JButton("Close"); + JButton startButton = new JButton(NbBundle.getMessage(this.getClass(), "IngestDialog.startButton.title")); + JButton closeButton = new JButton(NbBundle.getMessage(this.getClass(), "IngestDialog.closeButton.title")); startButton.addActionListener(new ActionListener() { @Override diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestManager.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestManager.java index 6ccd1b89dd..2ec75440d2 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestManager.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestManager.java @@ -32,6 +32,8 @@ import java.util.concurrent.CancellationException; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.logging.Level; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import javax.swing.SwingWorker; import org.netbeans.api.progress.ProgressHandle; @@ -77,7 +79,8 @@ public class IngestManager { //module loader private IngestModuleLoader moduleLoader = null; //property file name id for the module - public final static String MODULE_PROPERTIES = "ingest"; + public final static String MODULE_PROPERTIES = NbBundle.getMessage(IngestManager.class, + "IngestManager.moduleProperties.text"); private volatile int messageID = 0; /** @@ -212,7 +215,9 @@ public class IngestManager { } catch (Exception e) { logger.log(Level.SEVERE, "Ingest manager listener threw exception", e); - MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to Ingest Manager updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show(NbBundle.getMessage(IngestManager.class, "IngestManager.moduleErr"), + NbBundle.getMessage(IngestManager.class, "IngestManager.moduleErr.errListenToUpdates.msg"), + MessageNotifyUtil.MessageType.ERROR); } } @@ -227,7 +232,9 @@ public class IngestManager { } catch (Exception e) { logger.log(Level.SEVERE, "Ingest manager listener threw exception", e); - MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to Ingest Manager updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show(NbBundle.getMessage(IngestManager.class, "IngestManager.moduleErr"), + NbBundle.getMessage(IngestManager.class, "IngestManager.moduleErr.errListenToUpdates.msg"), + MessageNotifyUtil.MessageType.ERROR); } } @@ -242,7 +249,9 @@ public class IngestManager { } catch (Exception e) { logger.log(Level.SEVERE, "Ingest manager listener threw exception", e); - MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to Ingest Manager updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show(NbBundle.getMessage(IngestManager.class, "IngestManager.moduleErr"), + NbBundle.getMessage(IngestManager.class, "IngestManager.moduleErr.errListenToUpdates.msg"), + MessageNotifyUtil.MessageType.ERROR); } } @@ -256,7 +265,9 @@ public class IngestManager { } catch (Exception e) { logger.log(Level.SEVERE, "Ingest manager listener threw exception", e); - MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to Ingest Manager updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show(NbBundle.getMessage(IngestManager.class, "IngestManager.moduleErr"), + NbBundle.getMessage(IngestManager.class, "IngestManager.moduleErr.errListenToUpdates.msg"), + MessageNotifyUtil.MessageType.ERROR); } } @@ -495,11 +506,8 @@ public class IngestManager { */ private void displayInitError(String moduleName, String errorMessage) { MessageNotifyUtil.Message.error( - "Failed to load " + moduleName + " ingest module.\n\n" - + "No ingest modules will be run. Please disable the module " - + "or fix the error and restart ingest by right clicking on " - + "the data source and selecting Run Ingest Modules.\n\n" - + "Error: " + errorMessage); + NbBundle.getMessage(this.getClass(), "IngestManager.displayInitError.failedToLoad.msg", moduleName, + errorMessage)); } /** @@ -856,9 +864,9 @@ public class IngestManager { String getFileModuleStats() { StringBuilder sb = new StringBuilder(); for (final String moduleName : fileModuleTimers.keySet()) { - sb.append(moduleName).append(" took: ") - .append(fileModuleTimers.get(moduleName) / 1000) - .append(" secs. to process()").append('\n'); + sb.append(NbBundle.getMessage(this.getClass(), + "IngestManager.getFileModStats.moduleInfo.text", + moduleName, fileModuleTimers.get(moduleName) / 1000)); } return sb.toString(); } @@ -868,15 +876,18 @@ public class IngestManager { final String EOL = System.getProperty("line.separator"); StringBuilder sb = new StringBuilder(); if (startTime != null) { - sb.append("Start time: ").append(dateFormatter.format(startTime)).append(EOL); + sb.append(NbBundle.getMessage(this.getClass(), "IngestManager.toString.startTime.text", + dateFormatter.format(startTime), EOL)); } if (endTime != null) { - sb.append("End time: ").append(dateFormatter.format(endTime)).append(EOL); + sb.append(NbBundle.getMessage(this.getClass(), "IngestManager.toString.endTime.text", + dateFormatter.format(endTime), EOL)); } - sb.append("Total ingest time: ").append(getTotalTimeString()).append(EOL); - sb.append("Total errors: ").append(errorsTotal).append(EOL); + sb.append(NbBundle.getMessage(this.getClass(), "IngestManager.toString.totalIngestTime.text", + getTotalTimeString(), EOL)); + sb.append(NbBundle.getMessage(this.getClass(), "IngestManager.toString.totalErrs.text", errorsTotal, EOL)); if (errorsTotal > 0) { - sb.append("Errors per module:"); + sb.append(NbBundle.getMessage(this.getClass(), "IngestManager.toString.errsPerMod.text")); for (String moduleName : errors.keySet()) { sb.append("\t").append(moduleName).append(": ").append(errors.get(moduleName)).append(EOL); } @@ -887,9 +898,18 @@ public class IngestManager { public String toHtmlString() { StringBuilder sb = new StringBuilder(); sb.append(""); - sb.append("Ingest time: ").append(getTotalTimeString()).append("
"); - sb.append("Total errors: ").append(errorsTotal).append("
"); - sb.append("\n"); + sb.append(NbBundle.getMessage(this.getClass(), "IngestManager.toHtmlStr.ingestTime.text", + getTotalTimeString())) + .append("
"); + sb.append(NbBundle.getMessage(this.getClass(), "IngestManager.toHtmlStr.totalErrs.text", errorsTotal)) + .append("
"); + sb.append("
ModuleTimeErrors
\n"); for (final String moduleName : fileModuleTimers.keySet()) { sb.append("
") + .append(NbBundle.getMessage(this.getClass(), "IngestManager.toHtmlStr.module.text")) + .append("") + .append(NbBundle.getMessage(this.getClass(), "IngestManager.toHtmlStr.time.text")) + .append("") + .append(NbBundle.getMessage(this.getClass(), "IngestManager.toHtmlStr.errors.text")) + .append("
").append(moduleName).append(""); @@ -993,13 +1013,16 @@ public class IngestManager { IngestManager.fireModuleEvent(IngestModuleEvent.STARTED.toString(), s.getName()); } - final String displayName = "File Ingest"; + final String displayName = NbBundle + .getMessage(this.getClass(), "IngestManager.IngestAbstractFileProcessor.displayName"); progress = ProgressHandleFactory.createHandle(displayName, new Cancellable() { @Override public boolean cancel() { logger.log(Level.INFO, "Filed ingest cancelled by user."); if (progress != null) { - progress.setDisplayName(displayName + " (Cancelling...)"); + progress.setDisplayName(NbBundle.getMessage(this.getClass(), + "IngestManager.IngestAbstractFileProcessor.process.cancelling", + displayName)); } return IngestAbstractFileProcessor.this.cancel(true); } @@ -1169,13 +1192,16 @@ public class IngestManager { @Override protected Object doInBackground() throws Exception { - final String displayName = "Queueing Ingest"; + final String displayName = NbBundle + .getMessage(this.getClass(), "IngestManager.EnqueueWorker.displayName.text"); progress = ProgressHandleFactory.createHandle(displayName, new Cancellable() { @Override public boolean cancel() { logger.log(Level.INFO, "Queueing ingest cancelled by user."); if (progress != null) { - progress.setDisplayName(displayName + " (Cancelling...)"); + progress.setDisplayName( + NbBundle.getMessage(this.getClass(), "IngestManager.EnqueueWorker.process.cancelling", + displayName)); } return EnqueueWorker.this.cancel(true); } @@ -1274,10 +1300,12 @@ public class IngestManager { logger.log(Level.INFO, "Queing data source ingest task: " + dataSourceTask); - progress.progress("DataSource Ingest" + " " + inputName, processed); + progress.progress(NbBundle.getMessage(this.getClass(), "IngestManager.datatSourceIngest.progress.text", + inputName), processed); final IngestScheduler.DataSourceScheduler dataSourceScheduler = scheduler.getDataSourceScheduler(); dataSourceScheduler.schedule(dataSourceTask); - progress.progress("DataSource Ingest" + " " + inputName, ++processed); + progress.progress(NbBundle.getMessage(this.getClass(), "IngestManager.datatSourceIngest.progress.text", + inputName), ++processed); /* Schedule the file-level ingest modules for the children of the data source */ @@ -1285,10 +1313,12 @@ public class IngestManager { new DataSourceTask(input, fileMods, getProcessUnallocSpace()); logger.log(Level.INFO, "Queing file ingest task: " + fTask); - progress.progress("File Ingest" + " " + inputName, processed); + progress.progress( + NbBundle.getMessage(this.getClass(), "IngestManager.fileIngest.progress.text", inputName), processed); final IngestScheduler.FileScheduler fileScheduler = scheduler.getFileScheduler(); fileScheduler.schedule(fTask); - progress.progress("File Ingest" + " " + inputName, ++processed); + progress.progress( + NbBundle.getMessage(this.getClass(), "IngestManager.fileIngest.progress.text", inputName), ++processed); } //for data sources } diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestMessage.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestMessage.java index de0da0cae3..77e22204e1 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestMessage.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestMessage.java @@ -20,7 +20,8 @@ package org.sleuthkit.autopsy.ingest; import java.text.SimpleDateFormat; import java.util.Date; -import org.sleuthkit.autopsy.datamodel.KeyValue; + +import org.openide.util.NbBundle; import org.sleuthkit.datamodel.BlackboardArtifact; /** @@ -101,18 +102,19 @@ public class IngestMessage { public String toString() { StringBuilder sb = new StringBuilder(); sb.append(Long.toString(ID)).append(": "); - sb.append("type: ").append(messageType.name()); + sb.append(NbBundle.getMessage(this.getClass(), "IngestMessage.toString.type.text", messageType.name())); if (source != null) //can be null for manager messages { - sb.append(" source: ").append(source.getName()); + sb.append(NbBundle.getMessage(this.getClass(), "IngestMessage.toString.source.text", source.getName())); } - sb.append(" date: ").append(dateFormat.format(datePosted)); - sb.append(" subject: ").append(subject); + sb.append( + NbBundle.getMessage(this.getClass(), "IngestMessage.toString.date.text", dateFormat.format(datePosted))); + sb.append(NbBundle.getMessage(this.getClass(), "IngestMessage.toString.subject.text", subject)); if (detailsHtml != null) { - sb.append(" details: ").append(detailsHtml); + sb.append(NbBundle.getMessage(this.getClass(), "IngestMessage.toString.details.text", detailsHtml)); } if (data != null) { - sb.append(" data: ").append(data.toString()).append(' '); + sb.append(NbBundle.getMessage(this.getClass(), "IngestMessage.toString.data.text", data.toString())); } return sb.toString(); } @@ -176,7 +178,8 @@ public class IngestMessage { */ public static IngestMessage createMessage(long ID, MessageType messageType, IngestModuleAbstract source, String subject, String detailsHtml) { if (messageType == null || source == null || subject == null) { - throw new IllegalArgumentException("message type, source and subject cannot be null"); + throw new IllegalArgumentException( + NbBundle.getMessage(IngestMessage.class, "IngestMessage.exception.typeSrcSubjNotNull.msg")); } return new IngestMessage(ID, messageType, source, subject, detailsHtml, null); } @@ -204,7 +207,8 @@ public class IngestMessage { */ public static IngestMessage createErrorMessage(long ID, IngestModuleAbstract source, String subject, String detailsHtml) { if (source == null || subject == null) { - throw new IllegalArgumentException("source and subject cannot be null"); + throw new IllegalArgumentException( + NbBundle.getMessage(IngestMessage.class, "IngestMessage.exception.srcSubjNotNull.msg")); } return new IngestMessage(ID, MessageType.ERROR, source, subject, detailsHtml, null); } @@ -219,7 +223,8 @@ public class IngestMessage { */ public static IngestMessage createWarningMessage(long ID, IngestModuleAbstract source, String subject, String detailsHtml) { if (source == null || subject == null) { - throw new IllegalArgumentException("source and subject cannot be null"); + throw new IllegalArgumentException( + NbBundle.getMessage(IngestMessage.class, "IngestMessage.exception.srcSubjNotNull.msg")); } return new IngestMessage(ID, MessageType.WARNING, source, subject, detailsHtml, null); } @@ -236,7 +241,8 @@ public class IngestMessage { */ public static IngestMessage createDataMessage(long ID, IngestModuleAbstract source, String subject, String detailsHtml, String uniqueKey, BlackboardArtifact data) { if (source == null || subject == null || detailsHtml == null || data == null) { - throw new IllegalArgumentException("source, subject, details and data cannot be null"); + throw new IllegalArgumentException( + NbBundle.getMessage(IngestMessage.class, "IngestMessage.exception.srcSubjDetailsDataNotNull.msg")); } IngestMessage im = new IngestMessage(ID, MessageType.DATA, source, subject, detailsHtml, uniqueKey); diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestMessagePanel.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestMessagePanel.java index 782737bb15..0a2eed57c0 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestMessagePanel.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestMessagePanel.java @@ -38,6 +38,8 @@ import java.util.Map; import java.util.logging.Level; import javax.swing.JLabel; import javax.swing.JPanel; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import javax.swing.JTable; import javax.swing.ListSelectionModel; @@ -52,8 +54,6 @@ import javax.swing.table.TableCellRenderer; import org.sleuthkit.autopsy.ingest.IngestMessage.*; import org.sleuthkit.datamodel.BlackboardArtifact; import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; -import java.util.logging.Level; -import org.sleuthkit.autopsy.coreutils.Logger; /** * Notification window showing messages from modules to user @@ -300,7 +300,10 @@ class IngestMessagePanel extends JPanel implements TableModelListener { } catch (Exception e) { logger.log(Level.SEVERE, "IngestMessagePanel listener threw exception", e); - MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to IngestMessagePanel updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "IngestMessagePanel.moduleErr"), + NbBundle.getMessage(this.getClass(), + "IngestMessagePanel.moduleErr.errListenUpdates.text"), + MessageNotifyUtil.MessageType.ERROR); } //update labels @@ -325,7 +328,10 @@ class IngestMessagePanel extends JPanel implements TableModelListener { } catch (Exception e) { logger.log(Level.SEVERE, "IngestMessagePanel listener threw exception", e); - MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to IngestMessagePanel updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "IngestMessagePanel.moduleErr"), + NbBundle.getMessage(this.getClass(), + "IngestMessagePanel.moduleErr.errListenUpdates.text"), + MessageNotifyUtil.MessageType.ERROR); } } @@ -344,7 +350,10 @@ class IngestMessagePanel extends JPanel implements TableModelListener { } catch (Exception e) { logger.log(Level.SEVERE, "IngestMessagePanel listener threw exception", e); - MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to IngestMessagePanel updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "IngestMessagePanel.moduleErr"), + NbBundle.getMessage(this.getClass(), + "IngestMessagePanel.moduleErr.errListenUpdates.text"), + MessageNotifyUtil.MessageType.ERROR); } } @@ -357,13 +366,21 @@ class IngestMessagePanel extends JPanel implements TableModelListener { } catch (Exception ee) { logger.log(Level.SEVERE, "IngestMessagePanel listener threw exception", ee); - MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to IngestMessagePanel updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "IngestMessagePanel.moduleErr"), + NbBundle.getMessage(this.getClass(), + "IngestMessagePanel.moduleErr.errListenUpdates.text"), + MessageNotifyUtil.MessageType.ERROR); } } private class MessageTableModel extends AbstractTableModel { - private String[] columnNames = new String[]{"Module", "Num", "New?", "Subject", "Timestamp"}; + private String[] columnNames = new String[]{ + NbBundle.getMessage(this.getClass(), "IngestMessagePanel.MsgTableMod.colNames.module"), + NbBundle.getMessage(this.getClass(), "IngestMessagePanel.MsgTableMod.colNames.num"), + NbBundle.getMessage(this.getClass(), "IngestMessagePanel.MsgTableMod.colNames.new"), + NbBundle.getMessage(this.getClass(), "IngestMessagePanel.MsgTableMod.colNames.subject"), + NbBundle.getMessage(this.getClass(), "IngestMessagePanel.MsgTableMod.colNames.timestamp")}; private List messageData = new ArrayList(); //for keeping track of messages to group, per module, by uniqness private Map>> groupings = new HashMap>>(); @@ -845,7 +862,8 @@ class IngestMessagePanel extends JPanel implements TableModelListener { if (value instanceof Boolean) { boolVal = ((Boolean)value).booleanValue(); } else { - throw new RuntimeException("Tried to use BooleanRenderer on non-boolean value."); + throw new RuntimeException(NbBundle.getMessage(this.getClass(), + "IngestMessagePanel.BooleanRenderer.exception.nonBoolVal.msg")); } String aValue = boolVal ? bulletChar : ""; @@ -928,7 +946,8 @@ class IngestMessagePanel extends JPanel implements TableModelListener { DateFormat df = new SimpleDateFormat("HH:mm:ss"); aValue = df.format(date); } else { - throw new RuntimeException("Tried to use DateRenderer on non-Date value."); + throw new RuntimeException(NbBundle.getMessage(this.getClass(), + "IngestMessagePanel.DateRenderer.exception.nonDateVal.text")); } Component cell = super.getTableCellRendererComponent(table, aValue, isSelected, hasFocus, row, column); diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestMessageTopComponent.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestMessageTopComponent.java index c37ef96c28..13acce0d2d 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestMessageTopComponent.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestMessageTopComponent.java @@ -249,11 +249,12 @@ import org.sleuthkit.datamodel.Content; @Override public void displayReport(String ingestReport) { - Object[] options = {"OK", - "Generate Report"}; + Object[] options = {NbBundle.getMessage(this.getClass(), "IngestMessageTopComponent.displayReport.option.OK"), + NbBundle.getMessage(this.getClass(), + "IngestMessageTopComponent.displayReport.option.GenRpt")}; final int choice = JOptionPane.showOptionDialog(null, ingestReport, - "Ingest Report", + NbBundle.getMessage(this.getClass(), "IngestMessageTopComponent.msgDlg.ingestRpt.text"), JOptionPane.YES_NO_OPTION, JOptionPane.INFORMATION_MESSAGE, null, diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestModuleLoader.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestModuleLoader.java index c3f406c89e..d5ba207771 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestModuleLoader.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestModuleLoader.java @@ -48,10 +48,7 @@ import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.openide.modules.ModuleInfo; -import org.openide.util.Exceptions; -import org.openide.util.Lookup; -import org.openide.util.LookupEvent; -import org.openide.util.LookupListener; +import org.openide.util.*; import org.reflections.Reflections; import org.reflections.scanners.ResourcesScanner; import org.reflections.scanners.SubTypesScanner; @@ -611,7 +608,10 @@ import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; } catch (Exception e) { logger.log(Level.SEVERE, "IngestModuleLoader listener threw exception", e); - MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to IngestModuleLoader updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "IngestModuleLoader.moduleErr"), + NbBundle.getMessage(this.getClass(), + "IngestModuleLoader.moduleErr.errListenUpdates.msg"), + MessageNotifyUtil.MessageType.ERROR); } } @@ -633,7 +633,8 @@ import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; * @param newOrder new order to set */ void setModuleOrder(IngestModuleLoader.XmlPipelineRaw.PIPELINE_TYPE pipeLineType, String moduleLocation, int newOrder) throws IngestModuleLoaderException { - throw new IngestModuleLoaderException("Not yet implemented"); + throw new IngestModuleLoaderException( + NbBundle.getMessage(this.getClass(), "IngestModuleLoader.exception.notImplemented.msg")); } /** @@ -665,7 +666,9 @@ import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; } } if (pipeline == null) { - throw new IngestModuleLoaderException("Could not find expected pipeline of type: " + pipelineType.toString() + ", cannot add autodiscovered module: " + moduleLocation); + throw new IngestModuleLoaderException( + NbBundle.getMessage(this.getClass(), "IngestModuleLoader.exception.cantFindPipeline.msg", + pipelineType.toString(), moduleLocation)); } else { pipeline.modules.add(modRaw); logger.log(Level.INFO, "Added a new module " + moduleClass.getName() + " to pipeline " + pipelineType.toString()); @@ -706,8 +709,9 @@ import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; Document doc = docBuilder.newDocument(); - Comment comment = doc.createComment("Saved by: " + getClass().getName() - + " on: " + dateFormatter.format(System.currentTimeMillis())); + Comment comment = doc.createComment( + NbBundle.getMessage(this.getClass(), "IngestModuleLoader.save.comment.text", getClass().getName(), + dateFormatter.format(System.currentTimeMillis()))); doc.appendChild(comment); Element rootEl = doc.createElement(IngestModuleLoader.XmlPipelineRaw.XML_PIPELINE_ROOT); doc.appendChild(rootEl); @@ -885,18 +889,23 @@ import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; private void loadRawPipeline() throws IngestModuleLoaderException { final Document doc = XMLUtil.loadDoc(IngestModuleLoader.class, absFilePath, XSDFILE); if (doc == null) { - throw new IngestModuleLoaderException("Could not load pipeline config XML: " + this.absFilePath); + throw new IngestModuleLoaderException( + NbBundle.getMessage(this.getClass(), "IngestModuleLoader.loadRawPipeline.exception.cantLoadXML.msg", + this.absFilePath)); } Element root = doc.getDocumentElement(); if (root == null) { - String msg = "Error loading pipeline configuration: invalid file format."; + String msg = NbBundle + .getMessage(this.getClass(), "IngestModuleLoader.loadRawPipeline.exception.invalidFileFormat.msg"); logger.log(Level.SEVERE, msg); throw new IngestModuleLoaderException(msg); } NodeList pipelineNodes = root.getElementsByTagName(IngestModuleLoader.XmlPipelineRaw.XML_PIPELINE_EL); int numPipelines = pipelineNodes.getLength(); if (numPipelines == 0) { - throw new IngestModuleLoaderException("No pipelines found in the pipeline configuration: " + absFilePath); + throw new IngestModuleLoaderException(NbBundle.getMessage(this.getClass(), + "IngestModuleLoader.loadRawPipeline.exception.noPipelinesInConf.msg", + absFilePath)); } for (int pipelineNum = 0; pipelineNum < numPipelines; ++pipelineNum) { //process pipelines @@ -1026,7 +1035,8 @@ import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; return types[i]; } } - throw new IllegalArgumentException("No PIPELINE_TYPE for string: " + s); + throw new IllegalArgumentException( + NbBundle.getMessage(IngestModuleLoader.class, "IngestModuleLoader.exception.noPipelineTypeForStr.msg", s)); } private static final String XML_PIPELINE_ROOT = "PIPELINE_CONFIG"; private static final String XML_PIPELINE_EL = "PIPELINE"; diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestMonitor.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestMonitor.java index 1eee1baf25..c97875d69d 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestMonitor.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestMonitor.java @@ -27,6 +27,8 @@ import java.io.IOException; import java.util.logging.FileHandler; import java.util.logging.Level; import java.util.logging.SimpleFormatter; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import javax.swing.Timer; import org.openide.util.Exceptions; @@ -164,9 +166,9 @@ import org.sleuthkit.autopsy.coreutils.PlatformUtil; MONITOR_LOGGER.log(Level.SEVERE, "Stopping ingest due to low disk space on disk " + diskPath); logger.log(Level.SEVERE, "Stopping ingest due to low disk space on disk " + diskPath); manager.stopAll(); - manager.postMessage(IngestMessage.createManagerErrorMessage("Ingest stopped - low disk space on " + diskPath, - "Stopping ingest due to low disk space on disk " + diskPath - + ". \nEnsure the Case drive has at least 1GB free space and restart ingest.")); + manager.postMessage(IngestMessage.createManagerErrorMessage( + NbBundle.getMessage(this.getClass(), "IngestMonitor.mgrErrMsg.lowDiskSpace.title", diskPath), + NbBundle.getMessage(this.getClass(), "IngestMonitor.mgrErrMsg.lowDiskSpace.msg", diskPath))); } } diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestScheduler.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestScheduler.java index 3b9836bf68..b663b2ac28 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestScheduler.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestScheduler.java @@ -31,8 +31,9 @@ import java.util.logging.Level; import java.util.logging.Logger; import java.util.regex.Matcher; import java.util.regex.Pattern; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.casemodule.Case; -import org.sleuthkit.autopsy.ingest.IngestScheduler.FileScheduler.FileTask; import org.sleuthkit.datamodel.AbstractFile; import org.sleuthkit.datamodel.Content; import org.sleuthkit.datamodel.ContentVisitor; @@ -134,15 +135,18 @@ class IngestScheduler { @Override public synchronized String toString() { StringBuilder sb = new StringBuilder(); - sb.append("\nRootDirs(sorted), size: ").append(rootProcessTasks.size()); + sb.append(NbBundle.getMessage(this.getClass(), "IngestScheduler.FileSched.toString.rootDirs.text", + rootProcessTasks.size())); for (FileTask task : rootProcessTasks) { sb.append(task.toString()).append(" "); } - sb.append("\nCurDirs(stack), size: ").append(curDirProcessTasks.size()); + sb.append(NbBundle.getMessage(this.getClass(), "IngestScheduler.FileSched.toString.curDirs.text", + curDirProcessTasks.size())); for (FileTask task : curDirProcessTasks) { sb.append(task.toString()).append(" "); } - sb.append("\nCurFiles, size: ").append(curFileProcessTasks.size()); + sb.append(NbBundle.getMessage(this.getClass(), "IngestScheduler.FileSched.toString.curFiles.text", + curFileProcessTasks.size())); for (FileTask task : curFileProcessTasks) { sb.append(task.toString()).append(" "); } @@ -224,13 +228,13 @@ class IngestScheduler { @Override public String toString() { try { - return "ProcessTask{" + "file=" + file.getId() + ": " - + file.getUniquePath() + "}"; // + ", dataSourceTask=" + dataSourceTask + '}'; + return NbBundle.getMessage(this.getClass(), "IngestScheduler.fileTask.toString.long", file.getId(), + file.getUniquePath()); // + ", dataSourceTask=" + dataSourceTask + '}'; } catch (TskCoreException ex) { logger.log(Level.SEVERE, "Cound not get unique path of file in queue, ", ex); } - return "ProcessTask{" + "file=" + file.getId() + ": " - + file.getName() + '}'; + return NbBundle.getMessage(this.getClass(), "IngestScheduler.fileTask.toString.short", file.getId(), + file.getName()); } /** @@ -432,7 +436,8 @@ class IngestScheduler { @Override public synchronized FileTask next() { if (!hasNext()) { - throw new IllegalStateException("No next ProcessTask, check hasNext() first!"); + throw new IllegalStateException( + NbBundle.getMessage(this.getClass(), "IngestScheduler.FileTask.next.exception.msg")); } //dequeue the last in the list @@ -502,7 +507,8 @@ class IngestScheduler { @Override public void remove() { - throw new UnsupportedOperationException("Not supported."); + throw new UnsupportedOperationException( + NbBundle.getMessage(this.getClass(), "IngestScheduler.remove.exception.notSupported.msg")); } /** @@ -933,7 +939,8 @@ class IngestScheduler { @Override public synchronized DataSourceTask next() throws IllegalStateException { if (!hasNext()) { - throw new IllegalStateException("There is no data source tasks in the queue, check hasNext()"); + throw new IllegalStateException( + NbBundle.getMessage(this.getClass(), "IngestScheduler.DataSourceScheduler.exception.next.msg")); } final DataSourceTask ret = tasks.pollFirst(); @@ -960,7 +967,8 @@ class IngestScheduler { @Override public void remove() { - throw new UnsupportedOperationException("Removing of scheduled data source ingest tasks is not supported. "); + throw new UnsupportedOperationException( + NbBundle.getMessage(this.getClass(), "IngestScheduler.DataSourceScheduler.exception.remove.msg")); } synchronized void empty() { @@ -974,7 +982,8 @@ class IngestScheduler { @Override public String toString() { StringBuilder sb = new StringBuilder(); - sb.append("DataSourceQueue, size: ").append(getCount()); + sb.append(NbBundle.getMessage(this.getClass(), "IngestScheduler.DataSourceScheduler.toString.size", + getCount())); for (DataSourceTask task : tasks) { sb.append(task.toString()).append(" "); } diff --git a/Core/src/org/sleuthkit/autopsy/ingest/PipelineContext.java b/Core/src/org/sleuthkit/autopsy/ingest/PipelineContext.java index 1e2b69e981..1ea7de6033 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/PipelineContext.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/PipelineContext.java @@ -18,6 +18,8 @@ */ package org.sleuthkit.autopsy.ingest; +import org.openide.util.NbBundle; + import java.util.Objects; /** @@ -45,7 +47,7 @@ public class PipelineContext { @Override public String toString() { - return "pipelineContext{" + "task=" + task + '}'; + return NbBundle.getMessage(this.getClass(), "PipelineContext.toString.text", task); } @Override diff --git a/Core/src/org/sleuthkit/autopsy/menuactions/Bundle.properties b/Core/src/org/sleuthkit/autopsy/menuactions/Bundle.properties index e84d83f597..27a95765fe 100644 --- a/Core/src/org/sleuthkit/autopsy/menuactions/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/menuactions/Bundle.properties @@ -1,2 +1,7 @@ -#CTL_FileBrowserAction=File Browser OpenIDE-Module-Name=MenuActions +DataContentDynamicMenu.menu.dataContentWin.text=Data Content Windows +DataContentMenu.getName.text=DataContent Menu +DataExplorerMenu.getName.text=DataExplorer Tools +DataResultMenu.menu.dataResWin.text=DataResult Windows +DataResultMenu.getName.text=DataResult Menu +SearchResultMenu.menu.dataRes.text=Data Results diff --git a/Core/src/org/sleuthkit/autopsy/menuactions/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/menuactions/Bundle_ja.properties new file mode 100644 index 0000000000..9bbd244f08 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/menuactions/Bundle_ja.properties @@ -0,0 +1,7 @@ +OpenIDE-Module-Name=\u30E1\u30CB\u30E5\u30FC\u30A2\u30AF\u30B7\u30E7\u30F3 +DataContentDynamicMenu.menu.dataContentWin.text=\u30C7\u30FC\u30BF\u30B3\u30F3\u30C6\u30F3\u30C4\u30A6\u30A3\u30F3\u30C9\u30A6 +DataContentMenu.getName.text=\u30C7\u30FC\u30BF\u30B3\u30F3\u30C6\u30F3\u30C4\u30E1\u30CB\u30E5\u30FC +DataExplorerMenu.getName.text=\u30C7\u30FC\u30BF\u30A8\u30AF\u30B9\u30D7\u30ED\u30FC\u30E9\u30C4\u30FC\u30EB +DataResultMenu.menu.dataResWin.text=\u30C7\u30FC\u30BF\u7D50\u679C\u30A6\u30A3\u30F3\u30C9\u30A6 +DataResultMenu.getName.text=\u30C7\u30FC\u30BF\u7D50\u679C\u30E1\u30CB\u30E5\u30FC +SearchResultMenu.menu.dataRes.text=\u30C7\u30FC\u30BF\u7D50\u679C \ No newline at end of file diff --git a/Core/src/org/sleuthkit/autopsy/menuactions/DataContentDynamicMenu.java b/Core/src/org/sleuthkit/autopsy/menuactions/DataContentDynamicMenu.java index 8c09bef862..75a5e2533b 100644 --- a/Core/src/org/sleuthkit/autopsy/menuactions/DataContentDynamicMenu.java +++ b/Core/src/org/sleuthkit/autopsy/menuactions/DataContentDynamicMenu.java @@ -25,6 +25,7 @@ import javax.swing.JMenu; import javax.swing.JMenuItem; import org.openide.awt.DynamicMenuContent; import org.openide.util.Lookup; +import org.openide.util.NbBundle; import org.openide.windows.TopComponent; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.corecomponentinterfaces.DataContent; @@ -62,7 +63,8 @@ import org.sleuthkit.autopsy.corecomponents.DataContentTopComponent; if (newWindowLists != null) { if (newWindowLists.size() > 0) { - JMenu submenu = new JMenu("Data Content Windows"); + JMenu submenu = new JMenu( + NbBundle.getMessage(this.getClass(), "DataContentDynamicMenu.menu.dataContentWin.text")); for (int i = 0; i < newWindowLists.size(); i++) { DataContentTopComponent dctc = newWindowLists.get(i); JMenuItem item = new JMenuItem(dctc.getName()); diff --git a/Core/src/org/sleuthkit/autopsy/menuactions/DataContentMenu.java b/Core/src/org/sleuthkit/autopsy/menuactions/DataContentMenu.java index c68b9f84c2..12a653af3e 100644 --- a/Core/src/org/sleuthkit/autopsy/menuactions/DataContentMenu.java +++ b/Core/src/org/sleuthkit/autopsy/menuactions/DataContentMenu.java @@ -21,6 +21,7 @@ package org.sleuthkit.autopsy.menuactions; import javax.swing.JMenuItem; import org.openide.util.HelpCtx; +import org.openide.util.NbBundle; import org.openide.util.actions.CallableSystemAction; import org.openide.util.actions.Presenter; @@ -43,7 +44,7 @@ import org.openide.util.actions.Presenter; @Override public String getName() { - return "DataContent Menu"; + return NbBundle.getMessage(this.getClass(), "DataContentMenu.getName.text"); } @Override diff --git a/Core/src/org/sleuthkit/autopsy/menuactions/DataExplorerMenu.java b/Core/src/org/sleuthkit/autopsy/menuactions/DataExplorerMenu.java index 947b754e70..6acb069d6e 100644 --- a/Core/src/org/sleuthkit/autopsy/menuactions/DataExplorerMenu.java +++ b/Core/src/org/sleuthkit/autopsy/menuactions/DataExplorerMenu.java @@ -21,6 +21,7 @@ package org.sleuthkit.autopsy.menuactions; import javax.swing.JMenuItem; import org.openide.util.HelpCtx; +import org.openide.util.NbBundle; import org.openide.util.actions.CallableSystemAction; import org.openide.util.actions.Presenter; @@ -42,7 +43,7 @@ class DataExplorerMenu extends CallableSystemAction implements Presenter.Menu { @Override public String getName() { - return "DataExplorer Tools"; + return NbBundle.getMessage(this.getClass(), "DataExplorerMenu.getName.text"); } @Override diff --git a/Core/src/org/sleuthkit/autopsy/menuactions/DataResultMenu.java b/Core/src/org/sleuthkit/autopsy/menuactions/DataResultMenu.java index 682d6f62f8..857b5b4241 100644 --- a/Core/src/org/sleuthkit/autopsy/menuactions/DataResultMenu.java +++ b/Core/src/org/sleuthkit/autopsy/menuactions/DataResultMenu.java @@ -24,6 +24,7 @@ import java.beans.PropertyChangeListener; import javax.swing.JMenu; import javax.swing.JMenuItem; import org.openide.util.HelpCtx; +import org.openide.util.NbBundle; import org.openide.util.actions.CallableSystemAction; import org.openide.util.actions.Presenter; import org.sleuthkit.autopsy.casemodule.Case; @@ -33,7 +34,7 @@ import org.sleuthkit.autopsy.casemodule.Case; */ class DataResultMenu extends CallableSystemAction implements Presenter.Menu, PropertyChangeListener { - JMenu menu = new JMenu("DataResult Windows"); + JMenu menu = new JMenu(NbBundle.getMessage(this.getClass(), "DataResultMenu.menu.dataResWin.text")); DataResultMenu(){ } @@ -73,7 +74,7 @@ import org.sleuthkit.autopsy.casemodule.Case; @Override public String getName() { - return "DataResult Menu"; + return NbBundle.getMessage(this.getClass(), "DataResultMenu.getName.text"); } @Override diff --git a/Core/src/org/sleuthkit/autopsy/menuactions/SearchResultMenu.java b/Core/src/org/sleuthkit/autopsy/menuactions/SearchResultMenu.java index 851405e880..fee03df45d 100644 --- a/Core/src/org/sleuthkit/autopsy/menuactions/SearchResultMenu.java +++ b/Core/src/org/sleuthkit/autopsy/menuactions/SearchResultMenu.java @@ -25,6 +25,7 @@ import javax.swing.JComponent; import javax.swing.JMenu; import javax.swing.JMenuItem; import org.openide.awt.DynamicMenuContent; +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.corecomponents.DataResultTopComponent; import org.sleuthkit.autopsy.directorytree.DirectoryTreeTopComponent; @@ -57,7 +58,7 @@ import org.sleuthkit.autopsy.directorytree.DirectoryTreeTopComponent; // add search results if there are any if(dataResultsIds.size() > 0){ - JMenu submenu = new JMenu("Data Results"); + JMenu submenu = new JMenu(NbBundle.getMessage(this.getClass(), "SearchResultMenu.menu.dataRes.text")); for(String resultTabId : dataResultsIds){ JMenuItem item = new JMenuItem(resultTabId); item.addActionListener(new OpenTopComponentAction(resultTabId)); diff --git a/Core/src/org/sleuthkit/autopsy/report/ArtifactSelectionDialog.java b/Core/src/org/sleuthkit/autopsy/report/ArtifactSelectionDialog.java index b283da2e79..5bbaeb5545 100644 --- a/Core/src/org/sleuthkit/autopsy/report/ArtifactSelectionDialog.java +++ b/Core/src/org/sleuthkit/autopsy/report/ArtifactSelectionDialog.java @@ -36,6 +36,8 @@ import javax.swing.JList; import javax.swing.ListCellRenderer; import javax.swing.ListModel; import javax.swing.event.ListDataListener; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.datamodel.BlackboardArtifact; @@ -110,7 +112,7 @@ public class ArtifactSelectionDialog extends javax.swing.JDialog { * Display this dialog, and return the selected artifacts. */ Map display() { - this.setTitle("Advanced Artifact Selection"); + this.setTitle(NbBundle.getMessage(this.getClass(), "ArtifactSelectionDialog.dlgTitle.text")); Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize(); // set the popUp window / JFrame int w = this.getSize().width; diff --git a/Core/src/org/sleuthkit/autopsy/report/Bundle.properties b/Core/src/org/sleuthkit/autopsy/report/Bundle.properties index 351203751b..dcdf222e29 100644 --- a/Core/src/org/sleuthkit/autopsy/report/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/report/Bundle.properties @@ -1,13 +1,14 @@ OpenIDE-Module-Name=Report -Toolbars/Reports/org-sleuthkit-autopsy-report-ReportAction.shadow=Reports -GenerateReportPanel.selectAllLabel.text=Select All -GenerateReportPanel.deselectAllLabel.text=Deselect All -GenerateReportPanel.generateReportButton.text=Generate Report -GenerateReportPanel.advancedButton.text=Advanced -GenerateReportPanel.reportModulesLabel.text=Report Modules: -GenerateReportPanel.dataLabel.text=Select which data to report on: -GenerateReportPanel.artifactsRadioButton.text=All Artifacts -GenerateReportPanel.tagsRadioButton.text=User Tags +CTL_ReportWizardAction=Run Report +#Toolbars/Reports/org-sleuthkit-autopsy-report-ReportAction.shadow=Reports +#GenerateReportPanel.selectAllLabel.text=Select All +#GenerateReportPanel.deselectAllLabel.text=Deselect All +#GenerateReportPanel.generateReportButton.text=Generate Report +#GenerateReportPanel.advancedButton.text=Advanced +#GenerateReportPanel.reportModulesLabel.text=Report Modules: +#GenerateReportPanel.dataLabel.text=Select which data to report on: +#GenerateReportPanel.artifactsRadioButton.text=All Artifacts +#GenerateReportPanel.tagsRadioButton.text=User Tags ArtifactSelectionDialog.titleLabel.text=Select which artifacts you would like to report on: ArtifactSelectionDialog.okButton.text=OK ReportVisualPanel1.reportModulesLabel.text=Report Modules: @@ -18,7 +19,7 @@ ReportVisualPanel2.selectAllButton.text=Select All ReportVisualPanel2.advancedButton.text=Data Types ArtifactSelectionDialog.deselectAllButton.text=Deselect All ArtifactSelectionDialog.selectAllButton.text=Select All -=Browse... +#=Browse... ReportGenerationPanel.closeButton.text=Close ReportGenerationPanel.cancelAllButton.text=Cancel All ReportProgressPanel.reportLabel.text=reportLabel @@ -30,13 +31,173 @@ ReportProgressPanel.processingLabel.text=processingLabel ReportGenerationPanel.titleLabel.text=Report Generation Progress ReportVisualPanel2.taggedResultsRadioButton.text=Tagged Results ReportVisualPanel2.allResultsRadioButton.text=All Results -FileReportConfigurationPanel.jLabel1.text=Select Items to Report: -FileReportConfigurationPanel.selectAllButton.text=Select All -FileReportConfigurationPanel.deselectAllButton.text=Deselect All -FileReportConfigurationDialog.selectAllButton.text=Select All -FileReportConfigurationDialog.deselectAllButton.text=Deselect All -FileReportConfigurationDialog.jLabel1.text=Select items to include in the File Report -FileReportConfigurationDialog.okButton.text=OK +#FileReportConfigurationPanel.jLabel1.text=Select Items to Report: +#FileReportConfigurationPanel.selectAllButton.text=Select All +#FileReportConfigurationPanel.deselectAllButton.text=Deselect All +#FileReportConfigurationDialog.selectAllButton.text=Select All +#FileReportConfigurationDialog.deselectAllButton.text=Deselect All +#FileReportConfigurationDialog.jLabel1.text=Select items to include in the File Report +#FileReportConfigurationDialog.okButton.text=OK ReportWizardFileOptionsVisualPanel.selectAllButton.text=Select All ReportWizardFileOptionsVisualPanel.deselectAllButton.text=Deselect All ReportWizardFileOptionsVisualPanel.jLabel1.text=Select items to include in File Report: +ArtifactSelectionDialog.dlgTitle.text=Advanced Artifact Selection +FileReportDataTypes.filename.text=Name +FileReportDataTypes.fileExt.text=File Extension +FileReportDataTypes.fileType.text=File Type +FileReportDataTypes.isDel.text=Is Deleted +FileReportDataTypes.aTime.text=Last Accessed +FileReportDataTypes.crTime.text=File Created +FileReportDataTypes.mTime.text=Last Modified +FileReportDataTypes.size.text=Size +FileReportDataTypes.address.text=Address +FileReportDataTypes.hash.text=Hash Value +FileReportDataTypes.knownStatus.text=Known Status +FileReportDataTypes.perms.text=Permissions +FileReportDataTypes.path.text=Full Path +FileReportText.getName.text=Files - Text +FileReportText.getDesc.text=A tab delimited text file containing information about individual files in the case. +ReportBodyFile.progress.querying=Querying files... +ReportBodyFile.ingestWarning.text=Warning, this report was run before ingest services completed\!\ + +ReportBodyFile.progress.loading=Loading files... +ReportBodyFile.progress.processing=Now processing {0}... +ReportBodyFile.getName.text=TSK Body File +ReportBodyFile.getDesc.text=Body file format report with MAC times for every file. This format can be used for a timeline view. +ReportBodyFile.getFilePath.text=BodyFile.txt +ReportBranding.defaultReportTitle.text=Autopsy Forensic Report +ReportBranding.defaultReportFooter.text=Powered by Autopsy Open Source Digital Forensics Platform - www.sleuthkit.org +ReportExcel.numAartifacts.text=Number of artifacts\: +ReportExcel.getName.text=Results - Excel +ReportExcel.getDesc.text=A report about results and tagged items in Excel (XLS) format. +ReportExcel.getFilePath.text=Excel.xlsx +ReportExcel.sheetName.text=Summary +ReportExcel.cellVal.summary=Summary +ReportExcel.cellVal.caseName=Case Name\: +ReportExcel.cellVal.caseNum=Case Number\: +ReportExcel.cellVal.examiner=Examiner\: +ReportExcel.cellVal.numImages=Number of Images\: +ReportGenerationPanel.confDlg.sureToClose.msg=Are you sure you'd like to close the dialog?\ +All reports will be canceled. +ReportGenerationPanel.confDlg.title.closing=Closing +ReportGenerationPanel.confDlg.cancelReports.msg=Are you sure you'd like to cancel all the reports? +ReportGenerator.displayProgress.title.text=Report Generation Progress... +ReportGenerator.progress.queryingDb.text=Querying database... +ReportGenerator.progress.processingFile.text=Now processing {0} +ReportGenerator.artifactTable.taggedResults.text=Contains results that were tagged with one of the following\: +ReportGenerator.progress.processing=Now processing {0}... +ReportGenerator.msgShow.skippingArtType.title=Skipping artifact type {0} in reports +ReportGenerator.msgShow.skippingArtType.msg=Unknown columns to report on +ReportGenerator.msgShow.skippingArtRow.title=Skipping artifact rows for type {0} in reports +ReportGenerator.msgShow.skippingArtRow.msg=Unknown columns to report on +ReportGenerator.makeContTagTab.taggedFiles.msg=Contains files that were tagged with one of the following\: +ReportGenerator.makeBbArtTagTab.taggedRes.msg=This report only includes results tagged with\: +ReportGenerator.tagTable.header.resultType=Result Type +ReportGenerator.tagTable.header.tag=Tag +ReportGenerator.tagTable.header.comment=Comment +ReportGenerator.tagTable.header.srcFile=Source File +ReportGenerator.progress.createdThumb.text=Creating thumbnails... +ReportGenerator.thumbnailTable.name=Thumbnails +ReportGenerator.thumbnailTable.desc=Contains thumbnails of images that are associated with tagged files and results. +ReportGenerator.writeKwHits.userSrchs=User Searches +ReportGenerator.progress.processingList=Now processing {0} ({1})... +ReportGenerator.artTableColHdr.url=URL +ReportGenerator.artTableColHdr.title=Title +ReportGenerator.artTableColHdr.dateCreated=Date Created +ReportGenerator.artTableColHdr.program=Program +ReportGenerator.artTableColHdr.srcFile=Source File +ReportGenerator.artTableColHdr.dateTime=Date/Time +ReportGenerator.artTableColHdr.name=Name +ReportGenerator.artTableColHdr.value=Value +ReportGenerator.artTableColHdr.dateAccessed=Date Accessed +ReportGenerator.artTableColHdr.referrer=Referrer +ReportGenerator.artTableColHdr.dest=Destination +ReportGenerator.artTableColHdr.sourceUrl=Source URL +ReportGenerator.artTableColHdr.path=Path +ReportGenerator.artTableColHdr.progName=Program Name +ReportGenerator.artTableColHdr.instDateTime=Install Date/Time +ReportGenerator.artTableColHdr.preview=Preview +ReportGenerator.artTableColHdr.file=File +ReportGenerator.artTableColHdr.size=Size +ReportGenerator.artTableColHdr.deviceId=Device ID +ReportGenerator.artTableColHdr.text=Text +ReportGenerator.artTableColHdr.domain=Domain +ReportGenerator.artTableColHdr.dateTaken=Date Taken +ReportGenerator.artTableColHdr.devManufacturer=Device Manufacturer +ReportGenerator.artTableColHdr.devModel=Device Model +ReportGenerator.artTableColHdr.latitude=Latitude +ReportGenerator.artTableColHdr.longitude=Longitude +ReportGenerator.artTableColHdr.personName=Person Name +ReportGenerator.artTableColHdr.phoneNumber=Phone Number +ReportGenerator.artTableColHdr.phoneNumHome=Phone Number (Home) +ReportGenerator.artTableColHdr.phoneNumOffice=Phone Number (Office) +ReportGenerator.artTableColHdr.phoneNumMobile=Phone Number (Mobile) +ReportGenerator.artTableColHdr.email=Email +ReportGenerator.artTableColHdr.msgType=Message Type +ReportGenerator.artTableColHdr.direction=Direction +ReportGenerator.artTableColHdr.fromPhoneNum=From Phone Number +ReportGenerator.artTableColHdr.fromEmail=From Email +ReportGenerator.artTableColHdr.toPhoneNum=To Phone Number +ReportGenerator.artTableColHdr.toEmail=To Email +ReportGenerator.artTableColHdr.subject=Subject +ReportGenerator.artTableColHdr.calendarEntryType=Calendar Entry Type +ReportGenerator.artTableColHdr.description=Description +ReportGenerator.artTableColHdr.startDateTime=Start Date/Time +ReportGenerator.artTableColHdr.endDateTime=End Date/Time +ReportGenerator.artTableColHdr.location=Location +ReportGenerator.artTableColHdr.shortCut=Short Cut +ReportGenerator.artTableColHdr.deviceName=Device Name +ReportGenerator.artTableColHdr.deviceAddress=Device Address +ReportGenerator.artTableColHdr.altitude=Altitude +ReportGenerator.artTableColHdr.locationAddress=Location Address +ReportGenerator.artTableColHdr.category=Category +ReportGenerator.artTableColHdr.userId=User ID +ReportGenerator.artTableColHdr.password=Password +ReportGenerator.artTableColHdr.appName=App Name +ReportGenerator.artTableColHdr.appPath=App Path +ReportGenerator.artTableColHdr.replytoAddress=ReplyTo Address +ReportGenerator.artTableColHdr.mailServer=Mail Server +ReportGenerator.artTableColHdr.tags=Tags +ReportHTML.link.viewFile=View File +ReportHTML.addThumbRows.dataType.title=Tagged Images - {0} +ReportHTML.addThumbRows.dataType.msg=Tagged Results and Contents that contain images. +ReportHTML.thumbLink.tags=Tags\: +ReportHTML.getName.text=Results - HTML +ReportHTML.getDesc.text=A report about results and tagged items in HTML format. +ReportHTML.writeIndex.title=Autopsy Report for case {0} +ReportHTML.writeIndex.noFrames.msg=Your browser is not compatible with our frame setup. +ReportHTML.writeIndex.noFrames.seeNav=Please see the navigation page for artifact links, +ReportHTML.writeIndex.seeSum=and the summary page for a case summary. +ReportHTML.writeNav.title=Report Navigation +ReportHTML.writeNav.h1=Report Navigation +ReportHTML.writeNav.summary=Case Summary +ReportHTML.writeSum.title=Case Summary +ReportHTML.writeSum.warningMsg=Warning, this report was run before ingest services completed\! +ReportHTML.writeSum.reportGenOn.text=HTML Report Generated on {0} +ReportHTML.writeSum.caseName=Case\: +ReportHTML.writeSum.caseNum=Case Number\: +ReportHTML.writeSum.examiner=Examiner\: +ReportHTML.writeSum.noExaminer=No examiner +ReportHTML.writeSum.numImages=Number of Images\: +ReportHTML.writeSum.imageInfoHeading=

Image Information\:

\ +ReportHTML.writeSum.timezone=Timezone\: +ReportHTML.writeSum.path=Path\: +ReportProgressPanel.progress.queuing=Queuing... +ReportProgressPanel.initPathLabel.noFile=No report file +ReportProgressPanel.start.cancelButton.text=Cancel +ReportProgressPanel.start.progress.text=Starting report... +ReportProgressPanel.complete.processLbl.text=Complete +ReportProgressPanel.complete.cancelButton.text=Complete +ReportProgressPanel.cancel.cancelButton.toolTipText=Canceled +ReportProgressPanel.cancel.procLbl.text=Canceled +ReportVisualPanel1.getName.text=Select and Configure Report Modules +ReportVisualPanel2.getName.text=Configure Artifact Reports +ReportWizardAction.actionName.text=Generate Report +ReportWizardAction.reportWiz.title=Generate Report +ReportWizardAction.toolBarButton.text=Generate Report +ReportWizardFileOptionsPanel.finishButton.text=Finish +ReportWizardFileOptionsVisualPanel.getName.text=Configure File Report +ReportWizardPanel1.nextButton.text=Next > +ReportWizardPanel1.finishButton.text=Finish +ReportWizardPanel2.finishButton.text=Finish +ReportWizardPanel2.nextButton.text=Next > diff --git a/Core/src/org/sleuthkit/autopsy/report/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/report/Bundle_ja.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/Core/src/org/sleuthkit/autopsy/report/FileReportDataTypes.java b/Core/src/org/sleuthkit/autopsy/report/FileReportDataTypes.java index ef6eb1c0ba..a118ef23f2 100755 --- a/Core/src/org/sleuthkit/autopsy/report/FileReportDataTypes.java +++ b/Core/src/org/sleuthkit/autopsy/report/FileReportDataTypes.java @@ -18,6 +18,7 @@ */ package org.sleuthkit.autopsy.report; +import org.openide.util.NbBundle; import org.sleuthkit.datamodel.AbstractFile; import org.sleuthkit.datamodel.TskCoreException; import org.sleuthkit.datamodel.TskData; @@ -31,13 +32,13 @@ import org.sleuthkit.datamodel.TskData; */ enum FileReportDataTypes { - NAME("Name") { + NAME(NbBundle.getMessage(FileReportText.class, "FileReportDataTypes.filename.text")) { @Override public String getValue(AbstractFile file) { return file.getName(); } }, - FILE_EXT("File Extension") { + FILE_EXT(NbBundle.getMessage(FileReportText.class, "FileReportDataTypes.fileExt.text")) { @Override public String getValue(AbstractFile file) { String name = file.getName(); @@ -45,13 +46,13 @@ import org.sleuthkit.datamodel.TskData; return (extIndex == -1 ? "" : name.substring(extIndex)); } }, - FILE_TYPE("File Type") { + FILE_TYPE(NbBundle.getMessage(FileReportText.class, "FileReportDataTypes.fileType.text")) { @Override public String getValue(AbstractFile file) { return file.getMetaTypeAsString(); } }, - DELETED("Is Deleted") { + DELETED(NbBundle.getMessage(FileReportText.class, "FileReportDataTypes.isDel.text")) { @Override public String getValue(AbstractFile file) { if (file.getMetaFlagsAsString().equals(TskData.TSK_FS_META_FLAG_ENUM.UNALLOC.toString())) { @@ -60,55 +61,55 @@ import org.sleuthkit.datamodel.TskData; return ""; } }, - A_TIME("Last Accessed") { + A_TIME(NbBundle.getMessage(FileReportText.class, "FileReportDataTypes.aTime.text")) { @Override public String getValue(AbstractFile file) { return file.getAtimeAsDate(); } }, - CR_TIME("File Created") { + CR_TIME(NbBundle.getMessage(FileReportText.class, "FileReportDataTypes.crTime.text")) { @Override public String getValue(AbstractFile file) { return file.getCrtimeAsDate(); } }, - M_TIME("Last Modified") { + M_TIME(NbBundle.getMessage(FileReportText.class, "FileReportDataTypes.mTime.text")) { @Override public String getValue(AbstractFile file) { return file.getMtimeAsDate(); } }, - SIZE("Size") { + SIZE(NbBundle.getMessage(FileReportText.class, "FileReportDataTypes.size.text")) { @Override public String getValue(AbstractFile file) { return String.valueOf(file.getSize()); } }, - ADDRESS("Address") { + ADDRESS(NbBundle.getMessage(FileReportText.class, "FileReportDataTypes.address.text")) { @Override public String getValue(AbstractFile file) { return String.valueOf(file.getMetaAddr()); } }, - HASH_VALUE("Hash Value") { + HASH_VALUE(NbBundle.getMessage(FileReportText.class, "FileReportDataTypes.hash.text")) { @Override public String getValue(AbstractFile file) { return file.getMd5Hash(); } }, - KNOWN_STATUS("Known Status") { + KNOWN_STATUS(NbBundle.getMessage(FileReportText.class, "FileReportDataTypes.knownStatus.text")) { @Override public String getValue(AbstractFile file) { return file.getKnown().getName(); } }, - PERMISSIONS("Permissions") { + PERMISSIONS(NbBundle.getMessage(FileReportText.class, "FileReportDataTypes.perms.text")) { @Override public String getValue(AbstractFile file) { return file.getModesAsString(); } }, - FULL_PATH("Full Path") { + FULL_PATH(NbBundle.getMessage(FileReportText.class, "FileReportDataTypes.path.text")) { @Override public String getValue(AbstractFile file) { try { diff --git a/Core/src/org/sleuthkit/autopsy/report/FileReportText.java b/Core/src/org/sleuthkit/autopsy/report/FileReportText.java index de9144e626..68268cf4d5 100755 --- a/Core/src/org/sleuthkit/autopsy/report/FileReportText.java +++ b/Core/src/org/sleuthkit/autopsy/report/FileReportText.java @@ -28,6 +28,8 @@ import java.util.Iterator; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; + +import org.openide.util.NbBundle; import org.sleuthkit.datamodel.AbstractFile; /** @@ -118,12 +120,12 @@ import org.sleuthkit.datamodel.AbstractFile; @Override public String getName() { - return "Files - Text"; + return NbBundle.getMessage(this.getClass(), "FileReportText.getName.text"); } @Override public String getDescription() { - return "A tab delimited text file containing information about individual files in the case."; + return NbBundle.getMessage(this.getClass(), "FileReportText.getDesc.text"); } @Override diff --git a/Core/src/org/sleuthkit/autopsy/report/ReportBodyFile.java b/Core/src/org/sleuthkit/autopsy/report/ReportBodyFile.java index d31af46908..d49c630774 100644 --- a/Core/src/org/sleuthkit/autopsy/report/ReportBodyFile.java +++ b/Core/src/org/sleuthkit/autopsy/report/ReportBodyFile.java @@ -30,6 +30,8 @@ import java.sql.SQLException; import java.util.List; import java.util.logging.Level; import javax.swing.JPanel; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.ingest.IngestManager; @@ -72,7 +74,7 @@ import org.sleuthkit.datamodel.*; // Start the progress bar and setup the report progressPanel.setIndeterminate(false); progressPanel.start(); - progressPanel.updateStatusLabel("Querying files..."); + progressPanel.updateStatusLabel(NbBundle.getMessage(this.getClass(), "ReportBodyFile.progress.querying")); reportPath = path + "BodyFile.txt"; currentCase = Case.getCurrentCase(); skCase = currentCase.getSleuthkitCase(); @@ -84,13 +86,13 @@ import org.sleuthkit.datamodel.*; final String query = "type = " + TskData.TSK_DB_FILES_TYPE_ENUM.FS.getFileType() + " AND name != '.' AND name != '..'"; - progressPanel.updateStatusLabel("Loading files..."); + progressPanel.updateStatusLabel(NbBundle.getMessage(this.getClass(), "ReportBodyFile.progress.loading")); List fs = skCase.findFilesWhere(query); // Check if ingest has finished String ingestwarning = ""; if (IngestManager.getDefault().isIngestRunning()) { - ingestwarning = "Warning, this report was run before ingest services completed!\n"; + ingestwarning = NbBundle.getMessage(this.getClass(), "ReportBodyFile.ingestWarning.text"); } int size = fs.size(); @@ -109,7 +111,9 @@ import org.sleuthkit.datamodel.*; } if(count++ == 100) { progressPanel.increment(); - progressPanel.updateStatusLabel("Now processing " + file.getName() + "..."); + progressPanel.updateStatusLabel( + NbBundle.getMessage(this.getClass(), "ReportBodyFile.progress.processing", + file.getName())); count = 0; } @@ -161,13 +165,13 @@ import org.sleuthkit.datamodel.*; @Override public String getName() { - String name = "TSK Body File"; + String name = NbBundle.getMessage(this.getClass(), "ReportBodyFile.getName.text"); return name; } @Override public String getFilePath() { - return "BodyFile.txt"; + return NbBundle.getMessage(this.getClass(), "ReportBodyFile.getFilePath.text"); } @Override @@ -178,7 +182,7 @@ import org.sleuthkit.datamodel.*; @Override public String getDescription() { - String desc = "Body file format report with MAC times for every file. This format can be used for a timeline view."; + String desc = NbBundle.getMessage(this.getClass(), "ReportBodyFile.getDesc.text"); return desc; } diff --git a/Core/src/org/sleuthkit/autopsy/report/ReportBranding.java b/Core/src/org/sleuthkit/autopsy/report/ReportBranding.java index e8759358e7..f71e047f6e 100644 --- a/Core/src/org/sleuthkit/autopsy/report/ReportBranding.java +++ b/Core/src/org/sleuthkit/autopsy/report/ReportBranding.java @@ -26,6 +26,7 @@ import java.io.OutputStream; import java.util.logging.Level; import java.util.logging.Logger; import org.openide.filesystems.FileUtil; +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.coreutils.ModuleSettings; import org.sleuthkit.autopsy.coreutils.PlatformUtil; @@ -46,8 +47,10 @@ public final class ReportBranding implements ReportBrandingProviderI { private static final String REPORT_FOOTER_PROP = "ReportFooter"; //default settings private static final String DEFAULT_GENERATOR_LOGO = "/org/sleuthkit/autopsy/report/images/default_generator_logo.png"; - private static final String DEFAULT_REPORT_TITLE = "Autopsy Forensic Report"; - private static final String DEFAULT_REPORT_FOOTER = "Powered by Autopsy Open Source Digital Forensics Platform - www.sleuthkit.org"; + private static final String DEFAULT_REPORT_TITLE = NbBundle + .getMessage(ReportBranding.class, "ReportBranding.defaultReportTitle.text"); + private static final String DEFAULT_REPORT_FOOTER = NbBundle + .getMessage(ReportBranding.class, "ReportBranding.defaultReportFooter.text"); private String reportsBrandingDir; //dir with extracted reports branding resources private static final String MODULE_NAME = ReportBranding.class.getSimpleName(); private static final Logger logger = Logger.getLogger(ReportBranding.class.getName()); diff --git a/Core/src/org/sleuthkit/autopsy/report/ReportExcel.java b/Core/src/org/sleuthkit/autopsy/report/ReportExcel.java index ecb97ac83c..2b9c9c18f7 100644 --- a/Core/src/org/sleuthkit/autopsy/report/ReportExcel.java +++ b/Core/src/org/sleuthkit/autopsy/report/ReportExcel.java @@ -26,6 +26,7 @@ import java.util.logging.Level; import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.coreutils.Logger; @@ -146,7 +147,7 @@ import org.sleuthkit.autopsy.coreutils.Logger; // Add an artifacts count row. The actual count will be filled in later. row = sheet.createRow(rowIndex); row.setRowStyle(setStyle); - row.createCell(0).setCellValue("Number of artifacts:"); + row.createCell(0).setCellValue(NbBundle.getMessage(this.getClass(), "ReportExcel.numAartifacts.text")); ++rowIndex; // Add a comment row, if a comment was supplied. @@ -277,12 +278,12 @@ import org.sleuthkit.autopsy.coreutils.Logger; @Override public String getName() { - return "Results - Excel"; + return NbBundle.getMessage(this.getClass(), "ReportExcel.getName.text"); } @Override public String getDescription() { - return "A report about results and tagged items in Excel (XLS) format."; + return NbBundle.getMessage(this.getClass(), "ReportExcel.getDesc.text"); } @Override @@ -292,7 +293,7 @@ import org.sleuthkit.autopsy.coreutils.Logger; @Override public String getFilePath() { - return "Excel.xlsx"; + return NbBundle.getMessage(this.getClass(), "ReportExcel.getFilePath.text"); } /** @@ -306,12 +307,12 @@ import org.sleuthkit.autopsy.coreutils.Logger; } private void writeSummaryWorksheet() { - sheet = wb.createSheet("Summary"); + sheet = wb.createSheet(NbBundle.getMessage(this.getClass(), "ReportExcel.sheetName.text")); rowIndex = 0; Row row = sheet.createRow(rowIndex); row.setRowStyle(setStyle); - row.createCell(0).setCellValue("Summary"); + row.createCell(0).setCellValue(NbBundle.getMessage(this.getClass(), "ReportExcel.cellVal.summary")); ++rowIndex; sheet.createRow(rowIndex); @@ -321,25 +322,25 @@ import org.sleuthkit.autopsy.coreutils.Logger; row = sheet.createRow(rowIndex); row.setRowStyle(setStyle); - row.createCell(0).setCellValue("Case Name:"); + row.createCell(0).setCellValue(NbBundle.getMessage(this.getClass(), "ReportExcel.cellVal.caseName")); row.createCell(1).setCellValue(currentCase.getName()); ++rowIndex; row = sheet.createRow(rowIndex); row.setRowStyle(setStyle); - row.createCell(0).setCellValue("Case Number:"); + row.createCell(0).setCellValue(NbBundle.getMessage(this.getClass(), "ReportExcel.cellVal.caseNum")); row.createCell(1).setCellValue(currentCase.getNumber()); ++rowIndex; row = sheet.createRow(rowIndex); row.setRowStyle(setStyle); - row.createCell(0).setCellValue("Examiner:"); + row.createCell(0).setCellValue(NbBundle.getMessage(this.getClass(), "ReportExcel.cellVal.examiner")); row.createCell(1).setCellValue(currentCase.getExaminer()); ++rowIndex; row = sheet.createRow(rowIndex); row.setRowStyle(setStyle); - row.createCell(0).setCellValue("Number of Images:"); + row.createCell(0).setCellValue(NbBundle.getMessage(this.getClass(), "ReportExcel.cellVal.numImages")); row.createCell(1).setCellValue(currentCase.getImageIDs().length); ++rowIndex; diff --git a/Core/src/org/sleuthkit/autopsy/report/ReportGenerationPanel.java b/Core/src/org/sleuthkit/autopsy/report/ReportGenerationPanel.java index f4bf9cc14c..f79a9b02f7 100644 --- a/Core/src/org/sleuthkit/autopsy/report/ReportGenerationPanel.java +++ b/Core/src/org/sleuthkit/autopsy/report/ReportGenerationPanel.java @@ -27,6 +27,8 @@ import java.util.ArrayList; import java.util.List; import javax.swing.Box; import javax.swing.JOptionPane; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.report.ReportProgressPanel.ReportStatus; class ReportGenerationPanel extends javax.swing.JPanel { @@ -96,7 +98,12 @@ import org.sleuthkit.autopsy.report.ReportProgressPanel.ReportStatus; if (closeable) { actionListener.actionPerformed(null); } else { - int result = JOptionPane.showConfirmDialog(null, "Are you sure you'd like to close the dialog?\nAll reports will be canceled.", "Closing", JOptionPane.YES_NO_OPTION); + int result = JOptionPane.showConfirmDialog(null, + NbBundle.getMessage(this.getClass(), + "ReportGenerationPanel.confDlg.sureToClose.msg"), + NbBundle.getMessage(this.getClass(), + "ReportGenerationPanel.confDlg.title.closing"), + JOptionPane.YES_NO_OPTION); if (result == 0) { cancelAllReports(); actionListener.actionPerformed(null); @@ -215,7 +222,11 @@ import org.sleuthkit.autopsy.report.ReportProgressPanel.ReportStatus; }//GEN-LAST:event_closeButtonActionPerformed private void cancelAllButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelAllButtonActionPerformed - int result = JOptionPane.showConfirmDialog(null, "Are you sure you'd like to cancel all the reports?", "Cancel All", JOptionPane.YES_NO_OPTION); + int result = JOptionPane.showConfirmDialog(null, NbBundle.getMessage(this.getClass(), + "ReportGenerationPanel.confDlg.cancelReports.msg"), + NbBundle.getMessage(this.getClass(), + "ReportGenerationPanel.cancelAllButton.text"), + JOptionPane.YES_NO_OPTION); if (result == 0) { cancelAllReports(); } diff --git a/Core/src/org/sleuthkit/autopsy/report/ReportGenerator.java b/Core/src/org/sleuthkit/autopsy/report/ReportGenerator.java index d7cb217697..1399580b83 100644 --- a/Core/src/org/sleuthkit/autopsy/report/ReportGenerator.java +++ b/Core/src/org/sleuthkit/autopsy/report/ReportGenerator.java @@ -47,7 +47,7 @@ import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.SwingWorker; import org.openide.filesystems.FileUtil; -import org.openide.util.Exceptions; +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.coreutils.EscapeUtil; import org.sleuthkit.autopsy.coreutils.ImageUtils; @@ -65,7 +65,6 @@ import org.sleuthkit.datamodel.ContentTag; import org.sleuthkit.datamodel.SleuthkitCase; import org.sleuthkit.datamodel.TskCoreException; import org.sleuthkit.datamodel.TskData; -import org.sleuthkit.datamodel.TskException; /** * Instances of this class use GeneralReportModules, TableReportModules and @@ -169,7 +168,7 @@ import org.sleuthkit.datamodel.TskException; public void displayProgressPanels() { final JDialog dialog = new JDialog(new JFrame(), true); dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE); - dialog.setTitle("Report Generation Progress..."); + dialog.setTitle(NbBundle.getMessage(this.getClass(), "ReportGenerator.displayProgress.title.text")); dialog.add(this.panel); dialog.pack(); @@ -283,7 +282,8 @@ import org.sleuthkit.datamodel.TskException; ReportProgressPanel progress = fileProgress.get(module); if (progress.getStatus() != ReportStatus.CANCELED) { progress.start(); - progress.updateStatusLabel("Querying database..."); + progress.updateStatusLabel( + NbBundle.getMessage(this.getClass(), "ReportGenerator.progress.queryingDb.text")); } } @@ -316,7 +316,9 @@ import org.sleuthkit.datamodel.TskException; } if ((i % 100) == 0) { - progress.updateStatusLabel("Now processing " + file.getName()); + progress.updateStatusLabel( + NbBundle.getMessage(this.getClass(), "ReportGenerator.progress.processingFile.text", + file.getName())); } } i++; @@ -431,7 +433,7 @@ import org.sleuthkit.datamodel.TskException; // Make a comment string describing the tag names filter in effect. StringBuilder comment = new StringBuilder(); if (!tagNamesFilter.isEmpty()) { - comment.append("Contains results that were tagged with one of the following: "); + comment.append(NbBundle.getMessage(this.getClass(), "ReportGenerator.artifactTable.taggedResults.text")); comment.append(makeCommaSeparatedList(tagNamesFilter)); } @@ -444,7 +446,9 @@ import org.sleuthkit.datamodel.TskException; } for (TableReportModule module : tableModules) { - tableProgress.get(module).updateStatusLabel("Now processing " + type.getDisplayName() + "..."); + tableProgress.get(module).updateStatusLabel( + NbBundle.getMessage(this.getClass(), "ReportGenerator.progress.processing", + type.getDisplayName())); } // Keyword hits and hashset hit artifacts get sepcial handling. @@ -476,7 +480,10 @@ import org.sleuthkit.datamodel.TskException; List columnHeaders = getArtifactTableColumnHeaders(type.getTypeID()); if (columnHeaders == null) { // @@@ Hack to prevent system from hanging. Better solution is to merge all attributes into a single column or analyze the artifacts to find out how many are needed. - MessageNotifyUtil.Notify.show("Skipping artifact type " + type + " in reports", "Unknown columns to report on", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show( + NbBundle.getMessage(this.getClass(), "ReportGenerator.msgShow.skippingArtType.title", type), + NbBundle.getMessage(this.getClass(), "ReportGenerator.msgShow.skippingArtType.msg"), + MessageNotifyUtil.MessageType.ERROR); continue; } @@ -494,7 +501,12 @@ import org.sleuthkit.datamodel.TskException; List rowData = artifactData.getRow(); if (rowData.isEmpty()) { if (msgSent == false) { - MessageNotifyUtil.Notify.show("Skipping artifact rows for type " + type + " in reports", "Unknown columns to report on", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), + "ReportGenerator.msgShow.skippingArtRow.title", + type), + NbBundle.getMessage(this.getClass(), + "ReportGenerator.msgShow.skippingArtRow.msg"), + MessageNotifyUtil.MessageType.ERROR); msgSent = true; } continue; @@ -537,11 +549,14 @@ import org.sleuthkit.datamodel.TskException; for (TableReportModule module : tableModules) { // @@@ This casting is a tricky little workaround to allow the HTML report module to slip in a content hyperlink. // @@@ Alos Using the obsolete ARTIFACT_TYPE.TSK_TAG_FILE is also an expedient hack. - tableProgress.get(module).updateStatusLabel("Now processing " + ARTIFACT_TYPE.TSK_TAG_FILE.getDisplayName() + "..."); + tableProgress.get(module).updateStatusLabel( + NbBundle.getMessage(this.getClass(), "ReportGenerator.progress.processing", + ARTIFACT_TYPE.TSK_TAG_FILE.getDisplayName())); ArrayList columnHeaders = new ArrayList<>(Arrays.asList("File", "Tag", "Comment")); StringBuilder comment = new StringBuilder(); if (!tagNamesFilter.isEmpty()) { - comment.append("Contains files that were tagged with one of the following: "); + comment.append( + NbBundle.getMessage(this.getClass(), "ReportGenerator.makeContTagTab.taggedFiles.msg")); comment.append(makeCommaSeparatedList(tagNamesFilter)); } if (module instanceof ReportHTML) { @@ -624,14 +639,21 @@ import org.sleuthkit.datamodel.TskException; // Tell the modules reporting on blackboard artifact tags data type is beginning. // @@@ Using the obsolete ARTIFACT_TYPE.TSK_TAG_ARTIFACT is an expedient hack. for (TableReportModule module : tableModules) { - tableProgress.get(module).updateStatusLabel("Now processing " + ARTIFACT_TYPE.TSK_TAG_ARTIFACT.getDisplayName() + "..."); + tableProgress.get(module).updateStatusLabel( + NbBundle.getMessage(this.getClass(), "ReportGenerator.progress.processing", + ARTIFACT_TYPE.TSK_TAG_ARTIFACT.getDisplayName())); StringBuilder comment = new StringBuilder(); if (!tagNamesFilter.isEmpty()) { - comment.append("This report only includes results tagged with: "); + comment.append( + NbBundle.getMessage(this.getClass(), "ReportGenerator.makeBbArtTagTab.taggedRes.msg")); comment.append(makeCommaSeparatedList(tagNamesFilter)); } module.startDataType(ARTIFACT_TYPE.TSK_TAG_ARTIFACT.getDisplayName(), comment.toString()); - module.startTable(new ArrayList<>(Arrays.asList("Result Type", "Tag", "Comment", "Source File"))); + module.startTable(new ArrayList<>(Arrays.asList( + NbBundle.getMessage(this.getClass(), "ReportGenerator.tagTable.header.resultType"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.tagTable.header.tag"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.tagTable.header.comment"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.tagTable.header.srcFile")))); } // Give the modules the rows for the content tags. @@ -683,11 +705,14 @@ import org.sleuthkit.datamodel.TskException; */ private void makeThumbnailTable() { for (TableReportModule module : tableModules) { - tableProgress.get(module).updateStatusLabel("Creating thumbnails..."); + tableProgress.get(module).updateStatusLabel( + NbBundle.getMessage(this.getClass(), "ReportGenerator.progress.createdThumb.text")); if (module instanceof ReportHTML) { ReportHTML htmlModule = (ReportHTML) module; - htmlModule.startDataType("Thumbnails", "Contains thumbnails of images that are associated with tagged files and results."); + htmlModule.startDataType( + NbBundle.getMessage(this.getClass(), "ReportGenerator.thumbnailTable.name"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.thumbnailTable.desc")); List emptyHeaders = new ArrayList<>(); for (int i = 0; i < ReportHTML.THUMBNAIL_COLUMNS; i++) { emptyHeaders.add(""); @@ -813,7 +838,7 @@ import org.sleuthkit.datamodel.TskException; while(listsRs.next()) { String list = listsRs.getString("list"); if(list.isEmpty()) { - list = "User Searches"; + list = NbBundle.getMessage(this.getClass(), "ReportGenerator.writeKwHits.userSrchs"); } lists.add(list); } @@ -822,8 +847,9 @@ import org.sleuthkit.datamodel.TskException; for (TableReportModule module : tableModules) { module.startDataType(ARTIFACT_TYPE.TSK_KEYWORD_HIT.getDisplayName(), comment); module.addSetIndex(lists); - tableProgress.get(module).updateStatusLabel("Now processing " - + ARTIFACT_TYPE.TSK_KEYWORD_HIT.getDisplayName() + "..."); + tableProgress.get(module).updateStatusLabel( + NbBundle.getMessage(this.getClass(), "ReportGenerator.progress.processing", + ARTIFACT_TYPE.TSK_KEYWORD_HIT.getDisplayName())); } } catch (SQLException ex) { @@ -890,20 +916,22 @@ import org.sleuthkit.datamodel.TskException; } // If the lists aren't the same, we've started a new list - if((!list.equals(currentList) && !list.isEmpty()) || (list.isEmpty() && !currentList.equals("User Searches"))) { + if((!list.equals(currentList) && !list.isEmpty()) || (list.isEmpty() && !currentList.equals( + NbBundle.getMessage(this.getClass(), "ReportGenerator.writeKwHits.userSrchs")))) { if(!currentList.isEmpty()) { for (TableReportModule module : tableModules) { module.endTable(); module.endSet(); } } - currentList = list.isEmpty() ? "User Searches" : list; + currentList = list.isEmpty() ? NbBundle + .getMessage(this.getClass(), "ReportGenerator.writeKwHits.userSrchs") : list; currentKeyword = ""; // reset the current keyword because it's a new list for (TableReportModule module : tableModules) { module.startSet(currentList); - tableProgress.get(module).updateStatusLabel("Now processing " - + ARTIFACT_TYPE.TSK_KEYWORD_HIT.getDisplayName() - + " (" + currentList + ")..."); + tableProgress.get(module).updateStatusLabel( + NbBundle.getMessage(this.getClass(), "ReportGenerator.progress.processingList", + ARTIFACT_TYPE.TSK_KEYWORD_HIT.getDisplayName(), currentList)); } } if (!keyword.equals(currentKeyword)) { @@ -965,8 +993,9 @@ import org.sleuthkit.datamodel.TskException; for (TableReportModule module : tableModules) { module.startDataType(ARTIFACT_TYPE.TSK_HASHSET_HIT.getDisplayName(), comment); module.addSetIndex(lists); - tableProgress.get(module).updateStatusLabel("Now processing " - + ARTIFACT_TYPE.TSK_HASHSET_HIT.getDisplayName() + "..."); + tableProgress.get(module).updateStatusLabel( + NbBundle.getMessage(this.getClass(), "ReportGenerator.progress.processing", + ARTIFACT_TYPE.TSK_HASHSET_HIT.getDisplayName())); } } catch (SQLException ex) { logger.log(Level.SEVERE, "Failed to query hashset lists.", ex); @@ -1037,9 +1066,9 @@ import org.sleuthkit.datamodel.TskException; for (TableReportModule module : tableModules) { module.startSet(currentSet); module.startTable(getArtifactTableColumnHeaders(ARTIFACT_TYPE.TSK_HASHSET_HIT.getTypeID())); - tableProgress.get(module).updateStatusLabel("Now processing " - + ARTIFACT_TYPE.TSK_HASHSET_HIT.getDisplayName() - + " (" + currentSet + ")..."); + tableProgress.get(module).updateStatusLabel( + NbBundle.getMessage(this.getClass(), "ReportGenerator.progress.processingList", + ARTIFACT_TYPE.TSK_HASHSET_HIT.getDisplayName(), currentSet)); } } @@ -1078,81 +1107,208 @@ import org.sleuthkit.datamodel.TskException; BlackboardArtifact.ARTIFACT_TYPE type = BlackboardArtifact.ARTIFACT_TYPE.fromID(artifactTypeId); switch (type) { case TSK_WEB_BOOKMARK: - columnHeaders = new ArrayList<>(Arrays.asList(new String[] {"URL", "Title", "Date Created", "Program", "Source File"})); + columnHeaders = new ArrayList<>(Arrays.asList(new String[] { + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.url"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.title"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.dateCreated"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.program"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.srcFile")})); break; case TSK_WEB_COOKIE: - columnHeaders = new ArrayList<>(Arrays.asList(new String[] {"URL", "Date/Time", "Name", "Value", "Program", "Source File"})); + columnHeaders = new ArrayList<>(Arrays.asList(new String[] { + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.url"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.dateTime"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.name"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.value"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.program"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.srcFile")})); break; case TSK_WEB_HISTORY: - columnHeaders = new ArrayList<>(Arrays.asList(new String[] {"URL", "Date Accessed", "Referrer", "Title", "Program", "Source File"})); + columnHeaders = new ArrayList<>(Arrays.asList(new String[] { + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.url"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.dateAccessed"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.referrer"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.title"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.program"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.srcFile")})); break; case TSK_WEB_DOWNLOAD: - columnHeaders = new ArrayList<>(Arrays.asList(new String[] {"Destination", "Source URL", "Date Accessed", "Program", "Source File"})); + columnHeaders = new ArrayList<>(Arrays.asList(new String[] { + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.dest"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.sourceUrl"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.dateAccessed"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.program"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.srcFile")})); break; case TSK_RECENT_OBJECT: - columnHeaders = new ArrayList<>(Arrays.asList(new String[] {"Path", "Date/Time", "Source File"})); + columnHeaders = new ArrayList<>(Arrays.asList(new String[] { + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.path"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.dateTime"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.srcFile")})); break; case TSK_INSTALLED_PROG: - columnHeaders = new ArrayList<>(Arrays.asList(new String[] {"Program Name", "Install Date/Time", "Source File"})); + columnHeaders = new ArrayList<>(Arrays.asList(new String[] { + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.progName"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.instDateTime"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.srcFile")})); break; case TSK_KEYWORD_HIT: - columnHeaders = new ArrayList<>(Arrays.asList(new String[] {"Preview", "Source File"})); + columnHeaders = new ArrayList<>(Arrays.asList(new String[] { + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.preview"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.srcFile")})); break; case TSK_HASHSET_HIT: - columnHeaders = new ArrayList<>(Arrays.asList(new String[] {"File", "Size"})); + columnHeaders = new ArrayList<>(Arrays.asList(new String[] { + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.file"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.size")})); break; case TSK_DEVICE_ATTACHED: - columnHeaders = new ArrayList<>(Arrays.asList(new String[] {"Name", "Device ID", "Date/Time", "Source File"})); + columnHeaders = new ArrayList<>(Arrays.asList(new String[] { + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.name"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.deviceId"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.dateTime"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.srcFile")})); break; case TSK_WEB_SEARCH_QUERY: - columnHeaders = new ArrayList<>(Arrays.asList(new String[] {"Text", "Domain", "Date Accessed", "Program Name", "Source File"})); + columnHeaders = new ArrayList<>(Arrays.asList(new String[] { + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.text"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.domain"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.dateAccessed"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.progName"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.srcFile")})); break; case TSK_METADATA_EXIF: - columnHeaders = new ArrayList<>(Arrays.asList(new String[] {"Date Taken", "Device Manufacturer", "Device Model", "Latitude", "Longitude", "Source File"})); + columnHeaders = new ArrayList<>(Arrays.asList(new String[] { + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.dateTaken"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.devManufacturer"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.devModel"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.latitude"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.longitude"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.srcFile")})); break; case TSK_CONTACT: - columnHeaders = new ArrayList<>(Arrays.asList(new String[] {"Person Name", "Phone Number", "Phone Number (Home)", "Phone Number (Office)", "Phone Number (Mobile)", "Email", "Source File" })); + columnHeaders = new ArrayList<>(Arrays.asList(new String[] { + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.personName"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.phoneNumber"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.phoneNumHome"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.phoneNumOffice"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.phoneNumMobile"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.email"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.srcFile") })); break; case TSK_MESSAGE: - columnHeaders = new ArrayList<>(Arrays.asList(new String[] {"Message Type", "Direction", "Date/Time", "From Phone Number", "From Email", "To Phone Number", "To Email", "Subject", "Text", "Source File" })); + columnHeaders = new ArrayList<>(Arrays.asList(new String[] { + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.msgType"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.direction"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.dateTime"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.fromPhoneNum"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.fromEmail"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.toPhoneNum"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.toEmail"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.subject"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.text"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.srcFile") })); break; case TSK_CALLLOG: - columnHeaders = new ArrayList<>(Arrays.asList(new String[] {"Person Name", "Phone Number", "Date/Time", "Direction", "Source File" })); + columnHeaders = new ArrayList<>(Arrays.asList(new String[] { + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.personName"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.phoneNumber"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.dateTime"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.direction"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.srcFile") })); break; case TSK_CALENDAR_ENTRY: - columnHeaders = new ArrayList<>(Arrays.asList(new String[] {"Calendar Entry Type", "Description", "Start Date/Time", "End Date/Time", "Location", "Source File" })); + columnHeaders = new ArrayList<>(Arrays.asList(new String[] { + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.calendarEntryType"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.description"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.startDateTime"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.endDateTime"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.location"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.srcFile") })); break; case TSK_SPEED_DIAL_ENTRY: - columnHeaders = new ArrayList<>(Arrays.asList(new String[] {"Short Cut", "Person Name", "Phone Number", "Source File" })); + columnHeaders = new ArrayList<>(Arrays.asList(new String[] { + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.shortCut"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.personName"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.phoneNumber"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.srcFile") })); break; case TSK_BLUETOOTH_PAIRING: - columnHeaders = new ArrayList<>(Arrays.asList(new String[] {"Device Name", "Device Address", "Date/Time", "Source File" })); + columnHeaders = new ArrayList<>(Arrays.asList(new String[] { + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.deviceName"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.deviceAddress"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.dateTime"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.srcFile") })); break; case TSK_GPS_TRACKPOINT: - columnHeaders = new ArrayList<>(Arrays.asList(new String[] {"Latitude", "Longitude", "Altitude", "Name", "Location Address", "Date/Time", "Source File" })); + columnHeaders = new ArrayList<>(Arrays.asList(new String[] { + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.latitude"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.longitude"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.altitude"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.name"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.locationAddress"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.dateTime"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.srcFile") })); break; case TSK_GPS_BOOKMARK: - columnHeaders = new ArrayList<>(Arrays.asList(new String[] {"Latitude", "Longitude", "Altitude", "Name", "Location Address", "Date/Time", "Source File" })); + columnHeaders = new ArrayList<>(Arrays.asList(new String[] { + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.latitude"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.longitude"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.altitude"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.name"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.locationAddress"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.dateTime"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.srcFile") })); break; case TSK_GPS_LAST_KNOWN_LOCATION: - columnHeaders = new ArrayList<>(Arrays.asList(new String[] {"Latitude", "Longitude", "Altitude", "Name", "Location Address", "Date/Time", "Source File" })); + columnHeaders = new ArrayList<>(Arrays.asList(new String[] { + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.latitude"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.longitude"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.altitude"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.name"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.locationAddress"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.dateTime"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.srcFile") })); break; case TSK_GPS_SEARCH: - columnHeaders = new ArrayList<>(Arrays.asList(new String[] {"Latitude", "Longitude", "Altitude", "Name", "Location Address", "Date/Time", "Source File" })); + columnHeaders = new ArrayList<>(Arrays.asList(new String[] { + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.latitude"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.longitude"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.altitude"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.name"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.locationAddress"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.dateTime"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.srcFile") })); break; case TSK_SERVICE_ACCOUNT: - columnHeaders = new ArrayList<>(Arrays.asList(new String[] {"Category", "User ID", "Password", "Person Name", "App Name", "URL", "App Path", "Description", "ReplyTo Address", "Mail Server", "Source File" })); + columnHeaders = new ArrayList<>(Arrays.asList(new String[] { + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.category"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.userId"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.password"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.personName"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.appName"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.url"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.appPath"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.description"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.replytoAddress"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.mailServer"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.srcFile") })); break; case TSK_TOOL_OUTPUT: - columnHeaders = new ArrayList<>(Arrays.asList(new String[] {"Program Name", "Text", "Source File"})); + columnHeaders = new ArrayList<>(Arrays.asList(new String[] { + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.progName"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.text"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.srcFile")})); break; case TSK_ENCRYPTION_DETECTED: - columnHeaders = new ArrayList<>(Arrays.asList(new String[] {"Name", "Source File"})); + columnHeaders = new ArrayList<>(Arrays.asList(new String[] { + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.name"), + NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.srcFile")})); break; default: return null; } - columnHeaders.add("Tags"); + columnHeaders.add(NbBundle.getMessage(this.getClass(), "ReportGenerator.artTableColHdr.tags")); return columnHeaders; } diff --git a/Core/src/org/sleuthkit/autopsy/report/ReportHTML.java b/Core/src/org/sleuthkit/autopsy/report/ReportHTML.java index 857037fa72..5beff2bc7a 100644 --- a/Core/src/org/sleuthkit/autopsy/report/ReportHTML.java +++ b/Core/src/org/sleuthkit/autopsy/report/ReportHTML.java @@ -42,6 +42,7 @@ import java.util.TreeMap; import java.util.logging.Level; import org.openide.filesystems.FileObject; import org.openide.util.Exceptions; +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.casemodule.Case; import org.openide.filesystems.FileUtil; import org.sleuthkit.autopsy.casemodule.services.Services; @@ -542,7 +543,7 @@ import org.sleuthkit.datamodel.TskData.TSK_DB_FILES_TYPE_ENUM; StringBuilder localFileLink = new StringBuilder(); localFileLink.append("View File"); + localFileLink.append("\">").append(NbBundle.getMessage(this.getClass(), "ReportHTML.link.viewFile")).append(""); row.add(localFileLink.toString()); StringBuilder builder = new StringBuilder(); @@ -587,7 +588,8 @@ import org.sleuthkit.datamodel.TskData.TSK_DB_FILES_TYPE_ENUM; pages++; endTable(); endDataType(); - startDataType("Tagged Images - " + pages, "Tagged Results and Contents that contain images."); + startDataType(NbBundle.getMessage(this.getClass(), "ReportHTML.addThumbRows.dataType.title", pages), + NbBundle.getMessage(this.getClass(), "ReportHTML.addThumbRows.dataType.msg")); List emptyHeaders = new ArrayList<>(); for (int i = 0; i < THUMBNAIL_COLUMNS; i++) { emptyHeaders.add(""); @@ -627,7 +629,7 @@ import org.sleuthkit.datamodel.TskData.TSK_DB_FILES_TYPE_ENUM; try { List tags = tagsManager.getContentTagsByContent(content); if (tags.size() > 0) { - linkToThumbnail.append("Tags: " ); + linkToThumbnail.append(NbBundle.getMessage(this.getClass(), "ReportHTML.thumbLink.tags") ); } for (int i = 0; i < tags.size(); i++) { ContentTag tag = tags.get(i); @@ -739,12 +741,12 @@ import org.sleuthkit.datamodel.TskData.TSK_DB_FILES_TYPE_ENUM; @Override public String getName() { - return "Results - HTML"; + return NbBundle.getMessage(this.getClass(), "ReportHTML.getName.text"); } @Override public String getDescription() { - return "A report about results and tagged items in HTML format."; + return NbBundle.getMessage(this.getClass(), "ReportHTML.getDesc.text"); } @@ -802,15 +804,17 @@ import org.sleuthkit.datamodel.TskData.TSK_DB_FILES_TYPE_ENUM; try { indexOut = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(path + "index.html"), "UTF-8")); StringBuilder index = new StringBuilder(); - index.append("\nAutopsy Report for case ").append(currentCase.getName()).append("\n"); + index.append("\n").append( + NbBundle.getMessage(this.getClass(), "ReportHTML.writeIndex.title", currentCase.getName())).append( + "\n"); index.append("\n"); index.append("\n"); index.append("\n"); index.append("\n"); index.append("\n"); - index.append("Your browser is not compatible with our frame setup.<br />\n"); - index.append("Please see <a href=\"nav.html\">the navigation page</a> for artifact links,<br />\n"); - index.append("and <a href=\"summary.html\">the summary page</a> for a case summary.\n"); + index.append("").append(NbBundle.getMessage(this.getClass(), "ReportHTML.writeIndex.noFrames.msg")).append("<br />\n"); + index.append(NbBundle.getMessage(this.getClass(), "ReportHTML.writeIndex.noFrames.seeNav")).append("<br />\n"); + index.append(NbBundle.getMessage(this.getClass(), "ReportHTML.writeIndex.seeSum")).append("\n"); index.append("\n"); index.append(""); indexOut.write(index.toString()); @@ -835,10 +839,14 @@ import org.sleuthkit.datamodel.TskData.TSK_DB_FILES_TYPE_ENUM; try { navOut = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(path + "nav.html"), "UTF-8")); StringBuilder nav = new StringBuilder(); - nav.append("\n\n\tReport Navigation\n\t\n\n\n"); - nav.append("
\n

Report Navigation

\n"); + nav.append("\n\n\t").append( + NbBundle.getMessage(this.getClass(), "ReportHTML.writeNav.title")) + .append("\n\t\n\n\n"); + nav.append("
\n

").append( + NbBundle.getMessage(this.getClass(), "ReportHTML.writeNav.h1")).append("

\n"); nav.append("
    \n"); - nav.append("
  • Case Summary
  • \n"); + nav.append("
  • ") + .append(NbBundle.getMessage(this.getClass(), "ReportHTML.writeNav.summary")).append("
  • \n"); for (String dataType : dataTypes.keySet()) { String dataTypeEsc = dataTypeToFileName(dataType); @@ -923,7 +931,8 @@ import org.sleuthkit.datamodel.TskData.TSK_DB_FILES_TYPE_ENUM; try { out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(path + "summary.html"), "UTF-8")); StringBuilder head = new StringBuilder(); - head.append("\n\nCase Summary\n"); + head.append("\n\n").append( + NbBundle.getMessage(this.getClass(), "ReportHTML.writeSum.title")).append("\n"); head.append("