diff --git a/Core/src/org/sleuthkit/autopsy/actions/Bundle.properties b/Core/src/org/sleuthkit/autopsy/actions/Bundle.properties index 370ea83377..2151fafa49 100755 --- a/Core/src/org/sleuthkit/autopsy/actions/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/actions/Bundle.properties @@ -14,9 +14,7 @@ GetTagNameAndCommentDialog.commentLabel.text=Comment: GetTagNameAndCommentDialog.cancelButton.text=Cancel GetTagNameAndCommentDialog.tagCombo.toolTipText=Select tag to use GetTagNameAndCommentDialog.tagLabel.text=Tag: -#todo this means to tag a result? not result of a tag? AddBlackboardArtifactTagAction.singularTagResult=Tag Result -#todo check meaning AddBlackboardArtifactTagAction.pluralTagResult=Tag Results AddBlackboardArtifactTagAction.unableToTag.msg=Unable to tag {0}. AddBlackboardArtifactTagAction.taggingErr=Tagging Error diff --git a/Core/src/org/sleuthkit/autopsy/actions/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/actions/Bundle_ja.properties index bb42ba0a82..0cf5a8be40 100644 --- a/Core/src/org/sleuthkit/autopsy/actions/Bundle_ja.properties +++ b/Core/src/org/sleuthkit/autopsy/actions/Bundle_ja.properties @@ -10,8 +10,8 @@ GetTagNameAndCommentDialog.commentLabel.text=\u30B3\u30E1\u30F3\u30C8\uFF1A GetTagNameAndCommentDialog.cancelButton.text=\u30AD\u30E3\u30F3\u30BB\u30EB GetTagNameAndCommentDialog.tagCombo.toolTipText=\u4F7F\u7528\u3059\u308B\u30BF\u30B0\u3092\u9078\u629E GetTagNameAndCommentDialog.tagLabel.text=\u30BF\u30B0\uFF1A -AddBlackboardArtifactTagAction.singularTagResult=\u30BF\u30B0\u306E\u7D50\u679C -AddBlackboardArtifactTagAction.pluralTagResult=\u30BF\u30B0\u306E\u7D50\u679C +AddBlackboardArtifactTagAction.singularTagResult=\u7D50\u679C\u306B\u30BF\u30B0\u3092\u8FFD\u52A0 +AddBlackboardArtifactTagAction.pluralTagResult=\u7D50\u679C\u306B\u30BF\u30B0\u3092\u8FFD\u52A0 AddBlackboardArtifactTagAction.unableToTag.msg={0}\u306B\u30BF\u30B0\u3092\u8FFD\u52A0\u3067\u304D\u307E\u305B\u3093\u3002 AddBlackboardArtifactTagAction.taggingErr=\u30BF\u30B0\u4ED8\u3051\u30A8\u30E9\u30FC AddContentTagAction.singularTagFile=\u30D5\u30A1\u30A4\u30EB\u306B\u30BF\u30B0\u3092\u8FFD\u52A0 diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.java b/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.java index 5c61abbd1f..b85ec86e4f 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; diff --git a/Core/src/org/sleuthkit/autopsy/core/Bundle.properties b/Core/src/org/sleuthkit/autopsy/core/Bundle.properties index 1bc91ef607..ff08a90d89 100644 --- a/Core/src/org/sleuthkit/autopsy/core/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/core/Bundle.properties @@ -10,3 +10,5 @@ OpenIDE-Module-Name=Autopsy-Core OpenIDE-Module-Short-Description=Autopsy Core Module org_sleuthkit_autopsy_core_update_center=http://sleuthkit.org/autopsy/updates.xml Services/AutoupdateType/org_sleuthkit_autopsy_core_update_center.settings=Autopsy Update Center +Installer.errorInitJavafx.msg=Error initializing JavaFX. +Installer.errorInitJavafx.details=\ Some features will not be available. Check that you have the right JRE installed (Oracle JRE > 1.7.10). diff --git a/Core/src/org/sleuthkit/autopsy/core/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/core/Bundle_ja.properties new file mode 100644 index 0000000000..4acb349e27 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/core/Bundle_ja.properties @@ -0,0 +1,14 @@ +OpenIDE-Module-Display-Category=\u57FA\u76E4 +OpenIDE-Module-Long-Description=\ + Autopsy\u30E2\u30B8\u30E5\u30FC\u30EB\u306E\u30B3\u30A2\u3067\u3059\u3002\n\n\ + \u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u306E\u307F\u3067\u5B9F\u884C\u3059\u308B\u306E\u306B\u5FC5\u8981\u306A\u4E3B\u8981\u306A\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u304C\u542B\u307E\u308C\u3066\u3044\u307E\u3059\uFF1ARCP\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0\u3001\u30A6\u30A3\u30F3\u30C9\u30A6\u30A4\u30F3\u30B0GUI\u3001Sleuth Kit\u30D0\u30A4\u30F3\u30C7\u30A3\u30F3\u30B0\u3001\u30C7\u30FC\u30BF\u30E2\u30C7\u30EB\uFF0F\u30B9\u30C8\u30EC\u30FC\u30B8\u3001\u30A8\u30AF\u30B9\u30D7\u30ED\u30FC\u30E9\u3001\u7D50\u679C\u30D3\u30E5\u30FC\u30A2\u30FC\u3001\u30B3\u30F3\u30C6\u30F3\u30C4\u30D3\u30E5\u30FC\u30A2\u30FC\u3001\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u7528\u30D5\u30EC\u30FC\u30E0\u30EF\u30FC\u30AF\u3001\u30EC\u30DD\u30FC\u30C8\u751F\u6210\u3001\u30D5\u30A1\u30A4\u30EB\u691C\u7D22\u7B49\u306E\u4E3B\u8981\u30C4\u30FC\u30EB\u3002\n\n\ + \u30E2\u30B8\u30E5\u30FC\u30EB\u5185\u306E\u30D5\u30EC\u30FC\u30E0\u30EF\u30FC\u30AF\u306B\u306F\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u3001\u30D3\u30E5\u30FC\u30A2\u30FC\u3001\u30EC\u30DD\u30FC\u30C8\u751F\u6210\u306E\u30E2\u30B8\u30E5\u30FC\u30EB\u958B\u767A\u7528\u306EAPI\u304C\u542B\u307E\u308C\u307E\u3059\u3002\ + \u30E2\u30B8\u30E5\u30FC\u30EB\u306FAutopsy\u30D7\u30E9\u30B0\u30A4\u30F3\u30A4\u30F3\u30B9\u30C8\u30FC\u30E9\u30FC\u3092\u4F7F\u7528\u3057\u3001\u30D7\u30E9\u30B0\u30A4\u30F3\u3068\u3057\u3066\u5B9F\u88C5\u3067\u304D\u307E\u3059\u3002\n\ + \u3053\u306E\u30E2\u30B8\u30E5\u30FC\u30EB\u306F\u30A2\u30F3\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3057\u3066\u306F\u3044\u3051\u307E\u305B\u3093\u3002\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3055\u308C\u3066\u3044\u306A\u3051\u308C\u3070\u3001Autopsy\u306F\u4F7F\u7528\u3067\u304D\u307E\u305B\u3093\u3002\n\n\ + \u8A73\u7D30\u306F\u4E0B\u8A18\u3092\u3054\u89A7\u4E0B\u3055\u3044\u3002http\://www.sleuthkit.org/autopsy/ +OpenIDE-Module-Name=Autopsy-\u30B3\u30A2 +OpenIDE-Module-Short-Description=Autopsy\u30B3\u30A2\u30E2\u30B8\u30E5\u30FC\u30EB +org_sleuthkit_autopsy_core_update_center=http\://sleuthkit.org/autopsy/updates.xml +Services/AutoupdateType/org_sleuthkit_autopsy_core_update_center.settings=Autopsy\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u30BB\u30F3\u30BF\u30FC +Installer.errorInitJavafx.msg=JavaFX\u521D\u671F\u5316\u30A8\u30E9\u30FC +Installer.errorInitJavafx.details=\u4E00\u90E8\u306E\u6A5F\u80FD\u304C\u4F7F\u7528\u3067\u304D\u307E\u305B\u3093\u3002\u6B63\u3057\u3044JRE\u304C\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3055\u308C\u3066\u3044\u308B\u306E\u3092\u78BA\u8A8D\u3057\u3066\u4E0B\u3055\u3044\u3002\uFF08Oracle JRE > 1.7.10\uFF09 \ No newline at end of file diff --git a/Core/src/org/sleuthkit/autopsy/core/Installer.java b/Core/src/org/sleuthkit/autopsy/core/Installer.java index 38f6862352..66a132114b 100644 --- a/Core/src/org/sleuthkit/autopsy/core/Installer.java +++ b/Core/src/org/sleuthkit/autopsy/core/Installer.java @@ -23,6 +23,7 @@ import java.util.List; import java.util.logging.Level; import javafx.application.Platform; import javafx.embed.swing.JFXPanel; +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import org.openide.modules.ModuleInstall; import org.openide.windows.WindowManager; @@ -113,9 +114,8 @@ public class Installer extends ModuleInstall { javaFxInit = true; } catch (UnsatisfiedLinkError | NoClassDefFoundError | Exception e) { //in case javafx not present - final String msg = "Error initializing JavaFX. "; - final String details = " Some features will not be available. " - + " Check that you have the right JRE installed (Oracle JRE > 1.7.10). "; + final String msg = NbBundle.getMessage(Installer.class, "Installer.errorInitJavafx.msg"); + final String details = NbBundle.getMessage(Installer.class, "Installer.errorInitJavafx.details"); logger.log(Level.SEVERE, msg + details, e); 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/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/PlatformUtil.java b/Core/src/org/sleuthkit/autopsy/coreutils/PlatformUtil.java index 40ced93327..1ccc4132a4 100644 --- a/Core/src/org/sleuthkit/autopsy/coreutils/PlatformUtil.java +++ b/Core/src/org/sleuthkit/autopsy/coreutils/PlatformUtil.java @@ -37,7 +37,6 @@ 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.sleuthkit.datamodel.SleuthkitJNI; import org.sleuthkit.datamodel.TskCoreException; diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/AbstractAbstractFileNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/AbstractAbstractFileNode.java index 6b3a8cbc54..e37bff7245 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/AbstractAbstractFileNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/AbstractAbstractFileNode.java @@ -161,8 +161,14 @@ public abstract class AbstractAbstractFileNode extends A @Override public String toString() { return "MD5 Hash"; + } + }, + ObjectID { + @Override + public String toString() { + return "Object ID"; } - } + }, } @@ -201,6 +207,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/ContentUtils.java b/Core/src/org/sleuthkit/autopsy/datamodel/ContentUtils.java index 121b5a1cfa..9cc844cae6 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/ContentUtils.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/ContentUtils.java @@ -50,7 +50,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 +104,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 { @@ -360,4 +359,18 @@ public final class ContentUtils { + 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/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/AbstractFileChunk.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/AbstractFileChunk.java index 9e5e0a2da2..cccd6896b0 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/AbstractFileChunk.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/AbstractFileChunk.java @@ -20,6 +20,8 @@ package org.sleuthkit.autopsy.keywordsearch; import java.nio.charset.Charset; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.keywordsearch.Ingester.IngesterException; /** @@ -59,7 +61,8 @@ class AbstractFileChunk { //logger.log(Level.INFO, "Ingesting string chunk: " + this.getName() + ": " + chunkID); } catch (Exception ingEx) { success = false; - throw new IngesterException("Problem ingesting file string chunk: " + parent.getSourceFile().getId() + ", chunk: " + chunkID, ingEx); + throw new IngesterException(NbBundle.getMessage(this.getClass(), "AbstractFileChunk.index.exception.msg", + parent.getSourceFile().getId(), chunkID), ingEx); } return success; } diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/AbstractFileStringContentStream.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/AbstractFileStringContentStream.java index 63873f9dd3..22c3c5a5fb 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/AbstractFileStringContentStream.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/AbstractFileStringContentStream.java @@ -23,6 +23,8 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.nio.charset.Charset; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import org.apache.solr.common.util.ContentStream; import org.sleuthkit.datamodel.AbstractContent; @@ -69,12 +71,13 @@ import org.sleuthkit.datamodel.AbstractFile; @Override public Long getSize() { //return convertedLength; - throw new UnsupportedOperationException("Cannot tell how many chars in converted string, until entire string is converted"); + throw new UnsupportedOperationException( + NbBundle.getMessage(this.getClass(), "AbstractFileStringContentStream.getSize.exception.msg")); } @Override public String getSourceInfo() { - return "File:" + content.getId(); + return NbBundle.getMessage(this.getClass(), "AbstractFileStringContentStream.getSrcInfo.text", content.getId()); } @Override diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle.properties b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle.properties index eca055301d..f0b4ad61e9 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle.properties +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle.properties @@ -90,7 +90,6 @@ KeywordSearchListsViewerPanel.manageListsButton.toolTipText=Manage keyword lists KeywordSearchConfigurationPanel2.frequencyLabel.text=Results update frequency during ingest: KeywordSearchConfigurationPanel2.timeRadioButton4.text_1=1 minute (faster feedback, longest ingest) KeywordSearchConfigurationPanel2.timeRadioButton4.toolTipText=1 minute (overall ingest time will be longest) -KeywordSearchConfigurationPanel2.showSnippetsCB.text=Show Keyword Preview in Keyword Search Results (will result in longer search times) AbstractKeywordSearchPerformer.search.dialogErrorHeader=Keyword Search Error AbstractKeywordSearchPerformer.search.invalidSyntaxHeader=Invalid query syntax. AbstractKeywordSearchPerformer.search.searchIngestInProgressTitle=Keyword Search Ingest in Progress @@ -149,6 +148,9 @@ KeywordSearchIngestModule.init.badInitMsg=Keyword search server was not properly KeywordSearchIngestModule.init.tryStopSolrMsg={0}
Please try stopping old java Solr process (if it exists) and restart the application. KeywordSearchIngestModule.init.noKwInLstMsg=No keywords in keyword list. KeywordSearchIngestModule.init.onlyIdxKwSkipMsg=Only indexing will be done and and keyword search will be skipped (you can still add keyword lists using the Keyword Lists - Add to Ingest). +KeywordSearchIngestModule.doInBackGround.displayName=Keyword Search +KeywordSearchIngestModule.doInBackGround.finalizeMsg=Finalizing... +KeywordSearchIngestModule.doInBackGround.pendingMsg=Working on Keyword Search... KeywordSearchIngestModule.postIndexSummary.knowFileHeaderLbl=Files with known types KeywordSearchIngestModule.postIndexSummary.fileGenStringsHead=Files with general strings extracted KeywordSearchIngestModule.postIndexSummary.mdOnlyLbl=Metadata only was indexed @@ -183,4 +185,83 @@ KeywordSearch.listImportFeatureTitle=Keyword List Import KeywordSearchIngestModule.hashDbModuleName=Hash Lookup KeywordSearchIngestModule.moduleName=Keyword Search KeywordSearchIngestModule.moduleDescription=Performs file indexing and periodic search using keywords and regular expressions in lists. +AbstractFileChunk.index.exception.msg=Problem ingesting file string chunk\: {0}, chunk\: {1} +AbstractFileStringContentStream.getSize.exception.msg=Cannot tell how many chars in converted string, until entire string is converted +AbstractFileStringContentStream.getSrcInfo.text=File\:{0} +ByteContentStream.getSrcInfo.text=File\:{0} +ExtractedContentPanel.SetMarkup.progress.loading=Loading text +ExtractedContentPanel.SetMarkup.progress.displayName=Loading text +ExtractedContentViewer.nextPage.exception.msg=No next page. +ExtractedContentViewer.previousPage.exception.msg=No previous page. +ExtractedContentViewer.hasNextItem.exception.msg=Not supported, not a searchable source. +ExtractedContentViewer.hasPreviousItem.exception.msg=Not supported, not a searchable source. +ExtractedContentViewer.nextItem.exception.msg=Not supported, not a searchable source. +ExtractedContentViewer.previousItem.exception.msg=Not supported, not a searchable source. +ExtractedContentViewer.currentItem.exception.msg=Not supported, not a searchable source. +HighlightedMatchesSource.nextPage.exception.msg=No next page. +HighlightedMatchesSource.previousPage.exception.msg=No previous page. +HighlightedMatchesSource.nextItem.exception.msg=No next item. +HighlightedMatchesSource.previousItem.exception.msg=No previous item. +Ingester.ingest.exception.unknownImgId.msg=Skipping indexing the file, unknown image id, for file\: {0} +Ingester.ingest.exception.cantReadStream.msg=Could not read content stream\: {0} +Ingester.ingest.exception.err.msg=Error ingesting document\: {0} +Ingester.ingestExtract.exception.solrTimeout.msg=Solr index request time out for id\: {0}, name\: {1} +Ingester.ingestExtract.exception.probPostToSolr.msg=Problem posting content to Solr, id\: {0}, name\: {1} +Ingester.UpReqestTask.run.exception.sorlNotAvail.msg=No Solr core available, cannot index the content +Ingester.UpRequestTask.run.exception.probReadFile.msg=Problem reading file. +Ingester.UpRequestTask.run.exception.solrProb.msg=Problem with Solr +Ingester.UpRequestTask.run.exception.probPostToSolr.msg=Problem posting file contents to Solr. SolrException error code\: {0} +Ingester.FscContentStream.getSrcInfo=File\:{0} +Ingester.FscContentStream.getReader=Not supported yet. +Ingester.NullContentStream.getSrcInfo.text=File\:{0} +Ingester.NullContentStream.getReader=Not supported yet. +Keyword.toString.text=Keyword'{'query\={0}, isLiteral\={1}, keywordType\={2}'}' +KeywordSearch.moduleErr=Module Error +KeywordSearch.fireNumIdxFileChg.moduleErr.msg=A module caused an error listening to KeywordSearch updates. See log to determine which module. Some data could be incomplete. +KeywordSearchIngestModule.init.exception.errConnToSolr.msg=Error connecting to SOLR server\: {0} +KeywordSearchListsEncase.save.exception.msg=Not supported yet. +KeywordSearchListsEncase.save2.exception.msg=Not supported yet. +KeywordSearchListsEncase.encaseMetaType.exception.msg=Unsupported EncaseMetaType\: {0} +KeywordSearchListsManagementPanel.getColName.text=Name +KeywordSearchListsManagementPanel.setValueAt.exception.msg=Editing of cells is not supported +KeywordSearchListsViewerPanel.isLuceneQuerySel.exception.msg=Not supported for multi-word queries. +KeywordSearchListsViewerPanel.getQueryText.exception.msg=Not supported for multi-word queries. +KeywordSearchOptionsPanelController.moduleErr=Module Error +KeywordSearchOptionsPanelController.moduleErr.msg1=A module caused an error listening to KeywordSearchOptionsPanelController updates. See log to determine which module. Some data could be incomplete. +KeywordSearchOptionsPanelController.moduleErr.msg2=A module caused an error listening to KeywordSearchOptionsPanelController updates. See log to determine which module. Some data could be incomplete. +KeywordSearchPanel.getQueryList.exception.msg=No list for single-keyword search +KeywordSearchQueryManager.pathText.text=Keyword search +KeywordSearchResultFactory.progress.saving=Saving results\: {0} +KeywordSearchSettings.moduleName.text=KeywordSearch +KeywordSearchSettings.properties_options.text={0}_Options +KeywordSearchSettings.propertiesNSRL.text={0}_NSRL +KeywordSearchSettings.propertiesScripts.text={0}_Scripts +NoOpenCoreException.err.noOpenSorlCore.msg=No currently open Solr core. +Server.start.exception.cantStartSolr.msg=Could not start Solr server process +Server.start.exception.cantStartSolr.msg2=Could not start Solr server process +Server.isRunning.exception.errCheckSolrRunning.msg=Error checking if Solr server is running +Server.isRunning.exception.errCheckSolrRunning.msg2=Error checking if Solr server is running +Server.openCore.exception.alreadyOpen.msg=Already an open Core\! Explicitely close Core first. +Server.queryNumIdxFiles.exception.msg=Error querying number of indexed files, +Server.queryNumIdxChunks.exception.msg=Error querying number of indexed chunks, +Server.queryNumIdxDocs.exception.msg=Error querying number of indexed documents, +Server.queryIsIdxd.exception.msg=Error checkign if content is indexed, +Server.queryNumFileChunks.exception.msg=Error getting number of file chunks, +Server.query.exception.msg=Error running query\: {0} +Server.query2.exception.msg=Error running query\: {0} +Server.queryTerms.exception.msg=Error running terms query\: {0} +Server.openCore.exception.msg=Core open requested, but server not yet running +Server.openCore.exception.cantOpen.msg=Could not open Core +Server.openCore.exception.cantOpen.msg2=Could not open Core +Server.request.exception.exception.msg=Could not issue Solr request +Server.commit.exception.msg=Could not commit index +Server.addDoc.exception.msg=Could not add document to index via update handler\: {0} +Server.addDoc.exception.msg2=Could not add document to index via update handler\: {0} +Server.close.exception.msg=Cannot close Core +Server.close.exception.msg2=Cannot close Core +Server.solrServerNoPortException.msg=Indexing server could not bind to port {0}, port is not available, consider change the default {1} port. +KeywordSearchIngestModule.doInBackGround.displayName=Keyword Search +KeywordSearchIngestModule.doInBackGround.finalizeMsg= - Finalizing +KeywordSearchIngestModule.doInBackGround.pendingMsg= (Pending) +KeywordSearchIngestModule.doInBackGround.cancelMsg= (Cancelling...) diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle_ja.properties b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle_ja.properties index 993ce3cad9..7a662bfabc 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle_ja.properties +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle_ja.properties @@ -8,16 +8,16 @@ ListBundleName=\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8 ListBundleConfig=\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u8A2D\u5B9A IndexProgressPanel.statusText.text=\u30B9\u30C6\u30FC\u30BF\u30B9\u30C6\u30AD\u30B9\u30C8 IndexProgressPanel.cancelButton.text=\u30AD\u30E3\u30F3\u30BB\u30EB -ExtractedContentPanel.hitLabel.text=\u30DA\u30FC\u30B8\u4E0A\u306E\u4E00\u81F4 -ExtractedContentPanel.hitCountLabel.text= -ExtractedContentPanel.hitOfLabel.text= -ExtractedContentPanel.hitTotalLabel.text= +ExtractedContentPanel.hitLabel.text=\u30DA\u30FC\u30B8\u5185\u306E\u4E00\u81F4\uFF1A +ExtractedContentPanel.hitCountLabel.text=- +ExtractedContentPanel.hitOfLabel.text=of +ExtractedContentPanel.hitTotalLabel.text=- ExtractedContentPanel.hitButtonsLabel.text=\u4E00\u81F4 ExtractedContentPanel.copyMenuItem.text=\u30B3\u30D4\u30FC ExtractedContentPanel.selectAllMenuItem.text=\u3059\u3079\u3066\u9078\u629E KeywordSearchEditListPanel.saveListButton.text=\u30EA\u30B9\u30C8\u3092\u30B3\u30D4\u30FC KeywordSearchEditListPanel.addWordButton.text=\u8FFD\u52A0 -KeywordSearchEditListPanel.chRegex.text=\u4E00\u822C\u7684\u306A\u8868\u73FE +KeywordSearchEditListPanel.chRegex.text=\u6B63\u898F\u8868\u73FE KeywordSearchEditListPanel.deleteWordButton.text=\u9078\u629E\u3057\u305F\u3082\u306E\u3092\u524A\u9664 KeywordSearchEditListPanel.cutMenuItem.text=\u30AB\u30C3\u30C8 KeywordSearchEditListPanel.selectAllMenuItem.text=\u3059\u3079\u3066\u9078\u629E @@ -28,8 +28,8 @@ KeywordSearchEditListPanel.deleteListButton.text=\u30EA\u30B9\u30C8\u3092\u524A\ KeywordSearchListsManagementPanel.newListButton.text=\u65B0\u898F\u30EA\u30B9\u30C8 KeywordSearchEditListPanel.useForIngestCheckbox.text=\u51E6\u7406\u4E2D\u306B\u4F7F\u7528 KeywordSearchListsManagementPanel.importButton.text=\u30EA\u30B9\u30C8\u3092\u30A4\u30F3\u30DD\u30FC\u30C8 -KeywordSearchPanel.searchBox.text=\u691C\u7D22... -KeywordSearchPanel.regExCheckboxMenuItem.text=\u4E00\u822C\u7684\u306A\u8868\u73FE\u3092\u4F7F\u7528 +KeywordSearchPanel.searchBox.text=\u691C\u7D22\u2026 +KeywordSearchPanel.regExCheckboxMenuItem.text=\u6B63\u898F\u8868\u73FE\u3092\u4F7F\u7528 KeywordSearchListsViewerPanel.searchAddButton.text=\u691C\u7D22 KeywordSearchListsViewerPanel.manageListsButton.text=\u30EA\u30B9\u30C8\u3092\u7BA1\u7406 KeywordSearchListsViewerPanel.ingestIndexLabel.text=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\uFF1A @@ -42,10 +42,10 @@ ExtractedContentPanel.pagesLabel.text=\u30DA\u30FC\u30B8\uFF1A KeywordSearchEditListPanel.ingestMessagesCheckbox.text=\u51E6\u7406\u4E2D\u306B\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u30A4\u30F3\u30DC\u30C3\u30AF\u30B9\u306B\u9001\u4FE1 KeywordSearchEditListPanel.ingestMessagesCheckbox.toolTipText=\u3053\u306E\u30EA\u30B9\u30C8\u306E\u30AD\u30FC\u30EF\u30FC\u30C9\u304C\u691C\u7D22\u306B\u30D2\u30C3\u30C8\u3057\u305F\u5834\u5408\u3001\u51E6\u7406\u4E2D\u306B\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u30A4\u30F3\u30DC\u30C3\u30AF\u30B9\u306B\u9001\u4FE1 KeywordSearchConfigurationPanel2.skipNSRLCheckBox.text=\u51E6\u7406\u4E2D\u306BNSRL\u306E\u30D5\u30A1\u30A4\u30EB\uFF08\u65E2\u77E5\u306E\u30D5\u30A1\u30A4\u30EB\uFF09\u3092\u30AD\u30FC\u30EF\u30FC\u30C9\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u306B\u8FFD\u52A0\u3057\u306A\u3044 -KeywordSearchConfigurationPanel2.skipNSRLCheckBox.toolTipText=Hash DB\u30B5\u30FC\u30D3\u30B9\u3092\u4E8B\u524D\u306B\u5B9F\u884C\u3059\u308B\u304B\u3001\u6B21\u56DE\u306E\u51E6\u7406\u6642\u306B\u9078\u629E\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002 +KeywordSearchConfigurationPanel2.skipNSRLCheckBox.toolTipText=Hash DB\u30B5\u30FC\u30D3\u30B9\u3092\u4E8B\u524D\u306B\u5B9F\u884C\u3059\u308B\u304B\u3001\u6B21\u56DE\u306E\u51E6\u7406\u306B\u9078\u629E\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002 KeywordSearchConfigurationPanel2.filesIndexedLabel.text=\u30AD\u30FC\u30EF\u30FC\u30C9\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5185\u306E\u30D5\u30A1\u30A4\u30EB\uFF1A KeywordSearchIngestSimplePanel.languagesLabel.text=\u4E0D\u660E\u306A\u30D5\u30A1\u30A4\u30EB\u5F62\u5F0F\u304B\u3089\u306E\u30B9\u30C8\u30EA\u30F3\u30B0\u62BD\u51FA\u3092\u6709\u52B9\u306B\u3057\u305F\u30B9\u30AF\u30EA\u30D7\u30C8\uFF1A -KeywordSearchIngestSimplePanel.languagesLabel.toolTipText=\u4E0D\u660E\u306A\u30D5\u30A1\u30A4\u30EB\u5F62\u5F0F\u304B\u3089\u306E\u30B9\u30C8\u30EA\u30F3\u30B0\u62BD\u51FA\u3092\u6709\u52B9\u306B\u3057\u305F\u30B9\u30AF\u30EA\u30D7\u30C8\u3002\u30A2\u30C9\u30D0\u30F3\u30B9\u8A2D\u5B9A\u3067\u5909\u66F4\u304C\u53EF\u80FD\u3067\u3059\u3002 +KeywordSearchIngestSimplePanel.languagesLabel.toolTipText=\u4E0D\u660E\u306A\u30D5\u30A1\u30A4\u30EB\u5F62\u5F0F\u304B\u3089\u306E\u30B9\u30C8\u30EA\u30F3\u30B0\u62BD\u51FA\u3092\u6709\u52B9\u306B\u3057\u305F\u30B9\u30AF\u30EA\u30D7\u30C8\u3002\u30A2\u30C9\u30D0\u30F3\u30B9\u8A2D\u5B9A\u304B\u3089\u5909\u66F4\u304C\u53EF\u80FD\u3067\u3059\u3002 KeywordSearchConfigurationPanel3.languagesLabel.text=\u6709\u52B9\u306A\u30B9\u30AF\u30EA\u30D7\u30C8\uFF08\u8A00\u8A9E\uFF09\uFF1A KeywordSearchConfigurationPanel2.chunksLabel.text=\u30AD\u30FC\u30EF\u30FC\u30C9\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5185\u306E\u30C1\u30E3\u30F3\u30AF\uFF1A KeywordSearchConfigurationPanel3.enableUTF8Checkbox.text=UTF8\u30C6\u30AD\u30B9\u30C8\u62BD\u51FA\u306E\u6709\u52B9\u5316 @@ -70,7 +70,6 @@ KeywordSearchListsViewerPanel.manageListsButton.toolTipText=\u30AD\u30FC\u30EF\u KeywordSearchConfigurationPanel2.frequencyLabel.text=\u51E6\u7406\u4E2D\u306E\u7D50\u679C\u66F4\u65B0\u306E\u983B\u5EA6\uFF1A KeywordSearchConfigurationPanel2.timeRadioButton4.text_1=\uFF11\u5206\uFF08\u3088\u308A\u901F\u3044\u30D5\u30A3\u30FC\u30C9\u30D0\u30C3\u30AF\u3001\u6700\u3082\u9577\u3044\u51E6\u7406\u6642\u9593\uFF09 KeywordSearchConfigurationPanel2.timeRadioButton4.toolTipText=\uFF11\u5206\uFF08\u5168\u4F53\u7684\u306A\u51E6\u7406\u6642\u9593\u304C\u9577\u304F\u306A\u308A\u307E\u3059\uFF09 -KeywordSearchConfigurationPanel2.showSnippetsCB.text=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u7D50\u679C\u306B\u30AD\u30FC\u30EF\u30FC\u30C9\u30D7\u30EC\u30D3\u30E5\u30FC\u3092\u8868\u793A\uFF08\u691C\u7D22\u6642\u9593\u304C\u9577\u304F\u306A\u308A\u307E\u3059\uFF09 AbstractKeywordSearchPerformer.search.dialogErrorHeader=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u30A8\u30E9\u30FC AbstractKeywordSearchPerformer.search.invalidSyntaxHeader=\u30B7\u30F3\u30BF\u30C3\u30AF\u30B9\u30A8\u30E9\u30FC AbstractKeywordSearchPerformer.search.searchIngestInProgressTitle=\u30AD\u30FC\u30EF\u30FC\u30C9\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3092\u5B9F\u884C\u4E2D @@ -105,22 +104,22 @@ KeywordSearch.newKwListTitle=\u65B0\u898F\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u3 KeywordSearchConfigurationPanel1.customizeComponents.noOwDefaultMsg=\u30C7\u30D5\u30A9\u30EB\u30C8\u30EA\u30B9\u30C8\u306F\u4E0A\u66F8\u304D\u3067\u304D\u307E\u305B\u3093 KeywordSearchConfigurationPanel1.customizeComponents.kwListExistMsg=\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8 <{0}> \u306F\u65E2\u306B\u5B58\u5728\u3057\u307E\u3059\u3002\u4E0A\u66F8\u304D\u3057\u307E\u3059\u304B\uFF1F KeywordSearchConfigurationPanel1.customizeComponents.kwListSavedMsg=\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8 <{0}> \u4FDD\u5B58\u3055\u308C\u307E\u3057\u305F -KeywordSearchEditListPanel.customizeComponents.kwReToolTip=\u30AD\u30FC\u30EF\u30FC\u30C9\u306F\u4E00\u822C\u7684\u306A\u8868\u73FE\u3067\u3059 +KeywordSearchEditListPanel.customizeComponents.kwReToolTip=\u30AD\u30FC\u30EF\u30FC\u30C9\u306F\u6B63\u7FA9\u8868\u73FE\u3067\u3059 KeywordSearchEditListPanel.customizeComponents.addWordToolTip=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u30EA\u30B9\u30C8\u306B\u5358\u8A9E\u3092\u8FFD\u52A0 -KeywordSearchEditListPanel.customizeComponents.enterNewWordToolTip=\u65B0\u898F\u5358\u8A9E\u3084\u4E00\u822C\u7684\u306A\u8868\u73FE\u3092\u5165\u529B +KeywordSearchEditListPanel.customizeComponents.enterNewWordToolTip=\u65B0\u898F\u5358\u8A9E\u3084\u4E00\u6B63\u898F\u8868\u73FE\u3092\u5165\u529B KeywordSearchEditListPanel.customizeComponents.exportToFile=\u65E2\u5B58\u306E\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u3092\u30D5\u30A1\u30A4\u30EB\u306B\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8 KeywordSearchEditListPanel.customizeComponents.saveCurrentWIthNewNameToolTip=\u65E2\u5B58\u306E\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u306B\u540D\u524D\u3092\u4ED8\u3051\u3066\u4FDD\u5B58 KeywordSearchEditListPanel.customizeComponents.removeSelectedMsg=\u9078\u629E\u3057\u305F\u30AD\u30FC\u30EF\u30FC\u30C9\u3092\u30EA\u30B9\u30C8\u304B\u3089\u524A\u9664 KeywordSearchEditListPanel.newKwTitle=\u65B0\u898F\u30AD\u30FC\u30EF\u30FC\u30C9\u30A8\u30F3\u30C8\u30EA\u30FC KeywordSearchEditListPanel.addWordButtonAction.kwAlreadyExistsMsg=\u30AD\u30FC\u30EF\u30FC\u30C9\u306F\u65E2\u306B\u30EA\u30B9\u30C8\u306B\u5B58\u5728\u3057\u307E\u3059\u3002 -KeywordSearchEditListPanel.invalidKwMsg=\u7121\u52B9\u306A\u30AD\u30FC\u30EF\u30FC\u30C9\u30D1\u30BF\u30FC\u30F3\u3002\u5358\u8A9E\u3082\u3057\u304F\u306F\u6B63\u3057\u3044\u4E00\u822C\u7684\u306A\u8868\u73FE\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002 +KeywordSearchEditListPanel.invalidKwMsg=\u7121\u52B9\u306A\u30AD\u30FC\u30EF\u30FC\u30C9\u30D1\u30BF\u30FC\u30F3\u3002\u5358\u8A9E\u3082\u3057\u304F\u306F\u6B63\u3057\u3044\u6B63\u898F\u8868\u73FE\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002 KeywordSearchEditListPanel.removeKwMsg=\u30AD\u30FC\u30EF\u30FC\u30C9\u3092\u524A\u9664 KeywordSearchEditListPanel.deleteWordButtonActionPerformed.delConfirmMsg=\u5168\u3066\u306E\u30B1\u30FC\u30B9\u306B\u304A\u3051\u308B\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u3092\u524A\u9664\u3057\u307E\u3059\u3002\u3053\u306E\u524A\u9664\u3092\u5B9F\u884C\u3057\u307E\u3059\u304B\uFF1F KeywordSearchEditListPanel.exportButtonActionPerformed.fileFilterLabel=\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8XML\u30D5\u30A1\u30A4\u30EB KeywordSearchEditListPanel.exportButtonActionPerformed.fileExistPrompt=\ {0} \u30D5\u30A1\u30A4\u30EB\u306F\u65E2\u306B\u5B58\u5728\u3057\u307E\u3059\u3002\u4E0A\u66F8\u304D\u3057\u307E\u3059\u304B\uFF1F KeywordSearchEditListPanel.exportButtonActionPerformed.kwListExportedMsg=\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u3055\u308C\u305F\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8 KeywordSearchEditListPanel.kwColName=\u30AD\u30FC\u30EF\u30FC\u30C9 -KeywordSearchEditListPanel.exportButtonActionPerformed.regExColName=\u4E00\u822C\u7684\u306A\u8868\u73FE +KeywordSearchEditListPanel.exportButtonActionPerformed.regExColName=\u6B63\u898F\u8868\u73FE KeywordSearchFilterNode.getFileActions.openExternViewActLbl=\u5916\u90E8\u30D3\u30E5\u30FC\u30A2\u3067\u958B\u304F KeywordSearchFilterNode.getFileActions.searchSameMd5=\u540C\u4E00\u306EMD5\u30CF\u30C3\u30B7\u30E5\u3092\u6301\u3064\u30D5\u30A1\u30A4\u30EB\u3092\u691C\u7D22 KeywordSearchFilterNode.getFileActions.viewInNewWinActionLbl=\u65B0\u3057\u3044\u30A6\u30A3\u30F3\u30C9\u30A6\u3067\u8868\u793A @@ -128,7 +127,7 @@ KeywordSearchIngestModule.init.badInitMsg=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u KeywordSearchIngestModule.init.tryStopSolrMsg={0}
\u53E4\u3044java Solr\u51E6\u7406\u3092\u505C\u6B62\u3057\uFF08\u3082\u3057\u5B58\u5728\u3059\u308C\u3070\uFF09\u3001\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u3092\u518D\u8D77\u52D5\u3057\u3066\u304F\u3060\u3055\u3044\u3002 KeywordSearchIngestModule.init.noKwInLstMsg=\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u306B\u30AD\u30FC\u30EF\u30FC\u30C9\u304C\u3042\u308A\u307E\u305B\u3093\u3002 KeywordSearchIngestModule.init.onlyIdxKwSkipMsg=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3060\u3051\u5B9F\u884C\u3055\u308C\u3001\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u306F\u30B9\u30AD\u30C3\u30D7\u3055\u308C\u307E\u3059\uFF08\u300C\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8 - \u51E6\u7406\u306B\u8FFD\u52A0\u300D\u3092\u4F7F\u7528\u3057\u3001\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u3092\u8FFD\u52A0\u3059\u308B\u306E\u306F\u53EF\u80FD\u3067\u3059 -KeywordSearchIngestModule.postIndexSummary.knowFileHeaderLbl=\u65E2\u77E5\u306E\u7A2E\u985E\u306E\u30D5\u30A1\u30A4\u30EB +KeywordSearchIngestModule.postIndexSummary.knowFileHeaderLbl=\u65E2\u77E5\u30BF\u30A4\u30D7\u306E\u30D5\u30A1\u30A4\u30EB KeywordSearchIngestModule.postIndexSummary.fileGenStringsHead=\u4E00\u822C\u7684\u306A\u30B9\u30C8\u30EA\u30F3\u30B0\u304C\u62BD\u51FA\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB KeywordSearchIngestModule.postIndexSummary.mdOnlyLbl=\u30E1\u30BF\u30C7\u30FC\u30BF\u306E\u307F\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3055\u308C\u307E\u3057\u305F KeywordSearchIngestModule.postIndexSummary.idxErrLbl=\u30A8\u30E9\u30FC\uFF08\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u30A8\u30E9\u30FC\uFF09 @@ -136,7 +135,7 @@ KeywordSearchIngestModule.postIndexSummary.errTxtLbl=\u30A8\u30E9\u30FC\uFF08\u3 KeywordSearchIngestModule.postIndexSummary.errIoLbl=\u30A8\u30E9\u30FC\uFF08I/O\uFF09 KeywordSearchIngestModule.postIndexSummary.kwIdxResultsLbl=\u30AD\u30FC\u30EF\u30FC\u30C9\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u7D50\u679C KeywordSearchIngestModule.postIndexSummary.kwIdxErrsTitle=\u30AD\u30FC\u30EF\u30FC\u30C9\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u30A8\u30E9\u30FC -KeywordSearchIngestModule.postIndexSummary.kwIdxErrMsgFiles=\u30AD\u30FC\u30EF\u30FC\u30C9\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u30B5\u30FC\u30D3\u30B9\u4E2D\u306B {0} \u30D5\u30A1\u30A4\u30EB\u306E\u51E6\u7406\u30A8\u30E9\u30FC\u304C\u3042\u308A\u307E\u3057\u305F\u3002 +KeywordSearchIngestModule.postIndexSummary.kwIdxErrMsgFiles=\u30AD\u30FC\u30EF\u30FC\u30C9\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u30B5\u30FC\u30D3\u30B9\u4E2D\u306B{0}\u30D5\u30A1\u30A4\u30EB\u306E\u51E6\u7406\u30A8\u30E9\u30FC\u304C\u3042\u308A\u307E\u3057\u305F\u3002 KeywordSearchIngestModule.postIndexSummary.kwIdxWarnMsgTitle=\u30AD\u30FC\u30EF\u30FC\u30C9\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u8B66\u544A KeywordSearchIngestModule.postIndexSummary.idxErrReadFilesMsg=\u30AD\u30FC\u30EF\u30FC\u30C9\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u30B5\u30FC\u30D3\u30B9\u4E2D\u306B\u30D5\u30A1\u30A4\u30EB\u306E\u8AAD\u307F\u8FBC\u307F\u3084\u30C6\u30AD\u30B9\u30C8\u62BD\u51FA\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u3042\u308A\u307E\u3057\u305F\u3002\u539F\u56E0\u306F\u7834\u640D\u3057\u305F\u30E1\u30C7\u30A3\u30A2\u3084\u30D5\u30A1\u30A4\u30EB\u304B\u3082\u3057\u308C\u307E\u305B\u3093\u3002 KeywordSearchListsViewerPanel.initIngest.addIngestTitle=\u51E6\u7406\u306B\u8FFD\u52A0 @@ -146,11 +145,11 @@ KeywordSearchListsViewerPanel.initIngest.addIdxSearchMsg=\u9078\u629E\u3057\u305 KeywordSearchListsViewerPanel.initIngest.ongoingIngestMsg=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\uFF1A {0} \uFF08\u51E6\u7406\u306F\u5B9F\u884C\u4E2D\uFF09 KeywordSearchListsViewerPanel.initIngest.fileIndexCtMsg=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\uFF1A {0} KeywordSearch.selectedColLbl=\u9078\u629E\u6E08\u307F -KeywordSearch.nameColLbl=\u540D\u524D -KeywordSearch.regExColLbl=\u4E00\u822C\u7684\u306A\u8868\u73FE +KeywordSearch.nameColLbl=\u540D\u79F0 +KeywordSearch.regExColLbl=\u6B63\u898F\u8868\u73FE KeywordSearchQueryManager.execute.exeWinTitle=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22 {0} - {1} KeywordSearch.newKeywordListMsg=\u65B0\u898F\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8 -KeywordSearch.importListFileDialogMsg=\ {0}\u3000\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u3092\u30A4\u30F3\u30DD\u30FC\u30C8\u3059\u308B\u306E\u306B\u30A8\u30E9\u30FC\u304C\u3042\u308A\u307E\u3057\u305F +KeywordSearch.importListFileDialogMsg={0}\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u3092\u30A4\u30F3\u30DD\u30FC\u30C8\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u3042\u308A\u307E\u3057\u305F KeywordSearch.yesOwMsg=\u306F\u3044\u3001\u4E0A\u66F8\u304D\u3057\u307E\u3059 KeywordSearch.noSkipMsg=\u3044\u3044\u3048\u3001\u30B9\u30AD\u30C3\u30D7\u3057\u307E\u3059 KeywordSearch.cancelImportMsg=\u30A4\u30F3\u30DD\u30FC\u30C8\u3092\u30AD\u30E3\u30F3\u30BB\u30EB @@ -161,6 +160,94 @@ KeywordSearchListsManagementPanel.fileExtensionFilterLbl=\u30AD\u30FC\u30EF\u30F KeywordSearch.listImportFeatureTitle=\u30AD\u30FC\u30EF\u30FC\u30C9\u30EA\u30B9\u30C8\u30A4\u30F3\u30DD\u30FC\u30C8 KeywordSearchIngestModule.hashDbModuleName=\u30CF\u30C3\u30B7\u30E5\u30EB\u30C3\u30AF\u30A2\u30C3\u30D7 KeywordSearchIngestModule.moduleName=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22 -KeywordSearchIngestModule.moduleDescription=\u30EA\u30B9\u30C8\u5185\u306E\u30AD\u30FC\u30EF\u30FC\u30C9\u304A\u3088\u3073\u4E00\u822C\u7684\u306A\u8868\u73FE\u3092\u4F7F\u3044\u3001\u30D5\u30A1\u30A4\u30EB\u306E\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u304A\u3088\u3073\u5B9A\u671F\u7684\u306A\u691C\u7D22\u3092\u5B9F\u884C\u3057\u307E\u3059\u3002 +KeywordSearchIngestModule.moduleDescription=\u30EA\u30B9\u30C8\u5185\u306E\u30AD\u30FC\u30EF\u30FC\u30C9\u304A\u3088\u3073\u6B63\u898F\u8868\u73FE\u3092\u4F7F\u3044\u3001\u30D5\u30A1\u30A4\u30EB\u306E\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u304A\u3088\u3073\u5B9A\u671F\u7684\u306A\u691C\u7D22\u3092\u5B9F\u884C\u3057\u307E\u3059\u3002 OptionsCategory_Name_KeywordSearchOptions=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22 -OptionsCategory_Keywords_KeywordSearchOptions=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22 \ No newline at end of file +OptionsCategory_Keywords_KeywordSearchOptions=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22 +ExtractedContentPanel.pagePreviousButton.actionCommand= +ExtractedContentPanel.pageOfLabel.text=of +ExtractedContentPanel.pageCurLabel.text=- +ExtractedContentPanel.pageTotalLabel.text=- +KeywordSearchConfigurationPanel2.filesIndexedValue.text=- +KeywordSearchIngestSimplePanel.languagesValLabel.text=- +KeywordSearchConfigurationPanel2.chunksValLabel.text=- +KeywordSearchIngestSimplePanel.keywordSearchEncodings.text=- +AbstractFileChunk.index.exception.msg=\u30D5\u30A1\u30A4\u30EB\u30B9\u30C8\u30EA\u30F3\u30B0\u30C1\u30E3\u30F3\u30AF\u306E\u51E6\u7406\u4E2D\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\uFF1A {0}, \u30C1\u30E3\u30F3\u30AF\: {1} +AbstractFileStringContentStream.getSize.exception.msg=\u30B9\u30C8\u30EA\u30F3\u30B0\u5168\u4F53\u304C\u5909\u63DB\u3055\u308C\u306A\u3051\u308C\u3070\u3001\u5909\u63DB\u3055\u308C\u305F\u30B9\u30C8\u30EA\u30F3\u30B0\u5185\u306E\u30AD\u30E3\u30E9\u30AF\u30BF\u30FC\u6570\u306F\u4E0D\u660E\u3067\u3059\u3002 +AbstractFileStringContentStream.getSrcInfo.text=\u30D5\u30A1\u30A4\u30EB\uFF1A{0} +ByteContentStream.getSrcInfo.text=\u30D5\u30A1\u30A4\u30EB\uFF1A{0} +ExtractedContentPanel.SetMarkup.progress.loading=\u30C6\u30AD\u30B9\u30C8\u3092\u8AAD\u307F\u8FBC\u307F\u4E2D +ExtractedContentPanel.SetMarkup.progress.displayName=\u30C6\u30AD\u30B9\u30C8\u3092\u8AAD\u307F\u8FBC\u307F\u4E2D +ExtractedContentViewer.nextPage.exception.msg=\u6B21\u306E\u30DA\u30FC\u30B8\u304C\u3042\u308A\u307E\u305B\u3093\u3002 +ExtractedContentViewer.previousPage.exception.msg=\u524D\u306E\u30DA\u30FC\u30B8\u304C\u3042\u308A\u307E\u305B\u3093\u3002 +ExtractedContentViewer.hasNextItem.exception.msg=\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u691C\u7D22\u53EF\u80FD\u306A\u30BD\u30FC\u30B9\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002 +ExtractedContentViewer.hasPreviousItem.exception.msg=\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u691C\u7D22\u53EF\u80FD\u306A\u30BD\u30FC\u30B9\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002 +ExtractedContentViewer.nextItem.exception.msg=\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u691C\u7D22\u53EF\u80FD\u306A\u30BD\u30FC\u30B9\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002 +ExtractedContentViewer.previousItem.exception.msg=\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u691C\u7D22\u53EF\u80FD\u306A\u30BD\u30FC\u30B9\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002 +ExtractedContentViewer.currentItem.exception.msg=\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u691C\u7D22\u53EF\u80FD\u306A\u30BD\u30FC\u30B9\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002 +HighlightedMatchesSource.nextPage.exception.msg=\u6B21\u306E\u30DA\u30FC\u30B8\u304C\u3042\u308A\u307E\u305B\u3093\u3002 +HighlightedMatchesSource.previousPage.exception.msg=\u524D\u306E\u30DA\u30FC\u30B8\u304C\u3042\u308A\u307E\u305B\u3093\u3002 +HighlightedMatchesSource.nextItem.exception.msg=\u6B21\u306E\u30A2\u30A4\u30C6\u30E0\u304C\u3042\u308A\u307E\u305B\u3093\u3002 +HighlightedMatchesSource.previousItem.exception.msg=\u524D\u306E\u30A2\u30A4\u30C6\u30E0\u304C\u3042\u308A\u307E\u305B\u3093\u3002 +Ingester.ingest.exception.unknownImgId.msg=\u4E0B\u8A18\u306E\u30D5\u30A1\u30A4\u30EB\u306E\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3092\u30B9\u30AD\u30C3\u30D7\u3057\u3066\u3044\u307E\u3059\u3002\u4E0D\u660E\u306A\u30A4\u30E1\u30FC\u30B8ID\uFF1A{0} +Ingester.ingest.exception.cantReadStream.msg=\u30B3\u30F3\u30C6\u30F3\u30C4\u30B9\u30C8\u30EA\u30FC\u30E0\u3092\u8AAD\u307F\u53D6\u308C\u307E\u305B\u3093\u3067\u3057\u305F\uFF1A{0} +Ingester.ingest.exception.err.msg=\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u51E6\u7406\u4E2D\u306E\u30A8\u30E9\u30FC\uFF1A{0} +Ingester.ingestExtract.exception.solrTimeout.msg=\u4E0B\u8A18\u306EID\u306B\u5BFE\u3059\u308B\u3001Solr\u306E\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u30EA\u30AF\u30A8\u30B9\u30C8\u306F\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\u3057\u307E\u3057\u305F\uFF1A{0}, name\: {1} +Ingester.ingestExtract.exception.probPostToSolr.msg=Solr\u306B\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u30DD\u30B9\u30C8\u3059\u308B\u306E\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002ID\uFF1A{0}, \u540D\u79F0\: {1} +Ingester.UpReqestTask.run.exception.sorlNotAvail.msg=Solr\u30B3\u30A2\u304C\u5229\u7528\u4E0D\u53EF\u3067\u3059\u3002\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3067\u304D\u307E\u305B\u3093\u3002 +Ingester.UpRequestTask.run.exception.probReadFile.msg=\u30D5\u30A1\u30A4\u30EB\u306E\u8AAD\u307F\u53D6\u308A\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 +Ingester.UpRequestTask.run.exception.solrProb.msg=Solr\u306B\u306F\u554F\u984C\u304C\u3042\u308A\u307E\u3059 +Ingester.UpRequestTask.run.exception.probPostToSolr.msg=\u30D5\u30A1\u30A4\u30EB\u30B3\u30F3\u30C6\u30F3\u30C4\u3092Solr\u306B\u30DD\u30B9\u30C8\u3059\u308B\u306E\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002SolrException\u30A8\u30E9\u30FC\u30B3\u30FC\u30C9\uFF1A{0} +Ingester.FscContentStream.getSrcInfo=\u30D5\u30A1\u30A4\u30EB\uFF1A{0} +Ingester.FscContentStream.getReader=\u307E\u3060\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002 +Ingester.NullContentStream.getSrcInfo.text=\u30D5\u30A1\u30A4\u30EB\uFF1A{0} +Ingester.NullContentStream.getReader=\u307E\u3060\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002 +KeywordSearch.moduleErr=\u30E2\u30B8\u30E5\u30FC\u30EB\u30A8\u30E9\u30FC +KeywordSearch.fireNumIdxFileChg.moduleErr.msg=KeywordSearch\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 +KeywordSearchIngestModule.init.exception.errConnToSolr.msg=Solr\u30B5\u30FC\u30D0\u3078\u63A5\u7D9A\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\uFF1A{0} +KeywordSearchListsEncase.save.exception.msg=\u307E\u3060\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002 +KeywordSearchListsEncase.save2.exception.msg=\u307E\u3060\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002 +KeywordSearchListsEncase.encaseMetaType.exception.msg=\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u306A\u3044EncaseMetaType\uFF1A{0} +KeywordSearchListsManagementPanel.getColName.text=\u540D\u79F0 +KeywordSearchListsManagementPanel.setValueAt.exception.msg=\u30BB\u30EB\u306E\u7DE8\u96C6\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093 +KeywordSearchListsViewerPanel.isLuceneQuerySel.exception.msg=\u30DE\u30EB\u30C1\u30EF\u30FC\u30C9\u30AF\u30A8\u30EA\u3067\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002 +KeywordSearchListsViewerPanel.getQueryText.exception.msg=\u30DE\u30EB\u30C1\u30EF\u30FC\u30C9\u30AF\u30A8\u30EA\u3067\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002 +KeywordSearchOptionsPanelController.moduleErr=\u30E2\u30B8\u30E5\u30FC\u30EB\u30A8\u30E9\u30FC +KeywordSearchOptionsPanelController.moduleErr.msg1=KeywordSearchOptionsPanelController\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 +KeywordSearchOptionsPanelController.moduleErr.msg2=KeywordSearchOptionsPanelController\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 +KeywordSearchPanel.getQueryList.exception.msg=\u30B7\u30F3\u30B0\u30EB\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u306E\u30EA\u30B9\u30C8\u304C\u3042\u308A\u307E\u305B\u3093 +KeywordSearchQueryManager.pathText.text=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22 +KeywordSearchResultFactory.progress.saving=\u7D50\u679C\u3092\u4FDD\u5B58\u4E2D\uFF1A{0} +KeywordSearchSettings.moduleName.text=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22 +KeywordSearchSettings.properties_options.text={0}_\u30AA\u30D7\u30B7\u30E7\u30F3 +KeywordSearchSettings.propertiesNSRL.text={0}_NSRL +KeywordSearchSettings.propertiesScripts.text={0}_\u30B9\u30AF\u30EA\u30D7\u30C8 +NoOpenCoreException.err.noOpenSorlCore.msg=\u73FE\u5728\u958B\u3044\u3066\u3044\u308BSolr\u30B3\u30A2\u306F\u3042\u308A\u307E\u305B\u3093\u3002 +Server.start.exception.cantStartSolr.msg=Solr\u30B5\u30FC\u30D0\u30D7\u30ED\u30BB\u30B9\u3092\u958B\u59CB\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F +Server.start.exception.cantStartSolr.msg2=Solr\u30B5\u30FC\u30D0\u30D7\u30ED\u30BB\u30B9\u3092\u958B\u59CB\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F +Server.isRunning.exception.errCheckSolrRunning.msg=Solr\u30B5\u30FC\u30D0\u304C\u7A3C\u50CD\u3057\u3066\u3044\u308B\u304B\u78BA\u8A8D\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F +Server.isRunning.exception.errCheckSolrRunning.msg2=Solr\u30B5\u30FC\u30D0\u304C\u7A3C\u50CD\u3057\u3066\u3044\u308B\u304B\u78BA\u8A8D\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F +Server.openCore.exception.alreadyOpen.msg=\u3059\u3067\u306B\u958B\u3044\u3066\u3044\u308B\u30B3\u30A2\u3067\u3059\uFF01\u307E\u305A\u660E\u793A\u7684\u306B\u30B3\u30A2\u3092\u9589\u3058\u3066\u4E0B\u3055\u3044\u3002 +Server.queryNumIdxFiles.exception.msg=\u8907\u6570\u306E\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u306B\u5BFE\u3057\u3066\u306E\u30AF\u30A8\u30EA\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 +Server.queryNumIdxChunks.exception.msg=\u8907\u6570\u306E\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3055\u308C\u305F\u30C1\u30E3\u30F3\u30AF\u306B\u5BFE\u3057\u3066\u306E\u30AF\u30A8\u30EA\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 +Server.queryNumIdxDocs.exception.msg=\u8907\u6570\u306E\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3055\u308C\u305F\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u306B\u5BFE\u3057\u3066\u306E\u30AF\u30A8\u30EA\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 +Server.queryIsIdxd.exception.msg=\u30B3\u30F3\u30C6\u30F3\u30C4\u304C\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u3055\u308C\u305F\u304B\u78BA\u8A8D\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 +Server.queryNumFileChunks.exception.msg=\u30D5\u30A1\u30A4\u30EB\u30C1\u30E3\u30F3\u30AF\u306E\u6570\u3092\u78BA\u8A8D\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 +Server.query.exception.msg=\u30AF\u30A8\u30EA\u306E\u5B9F\u884C\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\uFF1A{0} +Server.query2.exception.msg=\u30AF\u30A8\u30EA\u306E\u5B9F\u884C\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\uFF1A{0} +Server.queryTerms.exception.msg=Terms\u30AF\u30A8\u30EA\u306E\u5B9F\u884C\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F +Server.openCore.exception.msg=\u30B3\u30A2\u3092\u958B\u304F\u30EA\u30AF\u30A8\u30B9\u30C8\u3092\u3057\u307E\u3057\u305F\u304C\u3001\u30B5\u30FC\u30D0\u304C\u307E\u3060\u7A3C\u50CD\u3057\u3066\u3044\u307E\u305B\u3093\u3002 +Server.openCore.exception.cantOpen.msg=\u30B3\u30A2\u3092\u958B\u3051\u307E\u305B\u3093\u3067\u3057\u305F +Server.openCore.exception.cantOpen.msg2=\u30B3\u30A2\u3092\u958B\u3051\u307E\u305B\u3093\u3067\u3057\u305F +Server.request.exception.exception.msg=Solr\u30EA\u30AF\u30A8\u30B9\u30C8\u3092\u767A\u884C\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F +Server.commit.exception.msg=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u3092\u30B3\u30DF\u30C3\u30C8\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F +Server.addDoc.exception.msg=\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u30CF\u30F3\u30C9\u30E9\u30FC\u3092\u4F7F\u7528\u3057\u307E\u3057\u305F\u304C\u3001\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u306B\u4E0B\u8A18\u306E\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3092\u8FFD\u52A0\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF1A{0} +Server.close.exception.msg=\u30B3\u30A2\u3092\u9589\u3058\u308C\u307E\u305B\u3093 +Server.close.exception.msg2=\u30B3\u30A2\u3092\u9589\u3058\u308C\u307E\u305B\u3093 +Server.solrServerNoPortException.msg=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u5316\u306B\u4F7F\u7528\u3057\u3066\u3044\u308B\u30B5\u30FC\u30D0\u306F\u30DD\u30FC\u30C8{0}\u306B\u30D0\u30A4\u30F3\u30C9\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u30DD\u30FC\u30C8\u306F\u4F7F\u7528\u4E0D\u53EF\u3067\u3059\u3002\u30C7\u30D5\u30A9\u30EB\u30C8{1}\u30DD\u30FC\u30C8\u306E\u5909\u66F4\u3092\u691C\u8A0E\u3057\u3066\u4E0B\u3055\u3044\u3002 +KeywordSearchIngestModule.doInBackGround.displayName=\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22 +KeywordSearchIngestModule.doInBackGround.finalizeMsg=-\u3000\u6700\u7D42\u51E6\u7406\u4E2D +KeywordSearchIngestModule.doInBackGround.pendingMsg=\uFF08\u30DA\u30F3\u30C7\u30A3\u30F3\u30B0\uFF09 +KeywordSearchIngestModule.doInBackGround.cancelMsg=\uFF08\u30AD\u30E3\u30F3\u30BB\u30EB\u4E2D\u2026\uFF09 +Server.addDoc.exception.msg2=\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u30CF\u30F3\u30C9\u30E9\u30FC\u3092\u4F7F\u7528\u3057\u307E\u3057\u305F\u304C\u3001\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u306B\u4E0B\u8A18\u306E\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3092\u8FFD\u52A0\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF1A{0} +ExtractedContentViewer.getSolrContent.txtBodyItal={0} +Keyword.toString.text=Keyword'{'query\={0}, isLiteral\={1}, keywordType\={2}'}' \ No newline at end of file diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/ByteContentStream.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/ByteContentStream.java index fc8d132596..8dc2b4fe80 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/ByteContentStream.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/ByteContentStream.java @@ -24,6 +24,8 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.nio.charset.Charset; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import org.apache.solr.common.util.ContentStream; import org.sleuthkit.datamodel.AbstractContent; @@ -84,7 +86,7 @@ class ByteContentStream implements ContentStream { @Override public String getSourceInfo() { - return "File:" + aContent.getId(); + return NbBundle.getMessage(this.getClass(), "ByteContentStream.getSrcInfo.text", aContent.getId()); } @Override diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/ExtractedContentPanel.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/ExtractedContentPanel.java index 1718e7cd31..7904102c99 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/ExtractedContentPanel.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/ExtractedContentPanel.java @@ -685,8 +685,10 @@ class ExtractedContentPanel extends javax.swing.JPanel { @Override protected Object doInBackground() throws Exception { - progress = ProgressHandleFactory.createHandle("Loading text"); - progress.setDisplayName("Loading text"); + progress = ProgressHandleFactory.createHandle( + NbBundle.getMessage(this.getClass(), "ExtractedContentPanel.SetMarkup.progress.loading")); + progress.setDisplayName( + NbBundle.getMessage(this.getClass(), "ExtractedContentPanel.SetMarkup.progress.displayName")); progress.start(); progress.switchToIndeterminate(); diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/ExtractedContentViewer.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/ExtractedContentViewer.java index e8368e14b6..a72b33bd37 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/ExtractedContentViewer.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/ExtractedContentViewer.java @@ -134,7 +134,8 @@ public class ExtractedContentViewer implements DataContentViewer { @Override public int nextPage() { if (!hasNextPage()) { - throw new IllegalStateException("No next page."); + throw new IllegalStateException( + NbBundle.getMessage(this.getClass(), "ExtractedContentViewer.nextPage.exception.msg")); } ++currentPage; return currentPage; @@ -143,7 +144,8 @@ public class ExtractedContentViewer implements DataContentViewer { @Override public int previousPage() { if (!hasPreviousPage()) { - throw new IllegalStateException("No previous page."); + throw new IllegalStateException( + NbBundle.getMessage(this.getClass(), "ExtractedContentViewer.previousPage.exception.msg")); } --currentPage; return currentPage; @@ -151,27 +153,32 @@ public class ExtractedContentViewer implements DataContentViewer { @Override public boolean hasNextItem() { - throw new UnsupportedOperationException("Not supported, not a searchable source."); + throw new UnsupportedOperationException( + NbBundle.getMessage(this.getClass(), "ExtractedContentViewer.hasNextItem.exception.msg")); } @Override public boolean hasPreviousItem() { - throw new UnsupportedOperationException("Not supported, not a searchable source."); + throw new UnsupportedOperationException( + NbBundle.getMessage(this.getClass(), "ExtractedContentViewer.hasPreviousItem.exception.msg")); } @Override public int nextItem() { - throw new UnsupportedOperationException("Not supported, not a searchable source."); + throw new UnsupportedOperationException( + NbBundle.getMessage(this.getClass(), "ExtractedContentViewer.nextItem.exception.msg")); } @Override public int previousItem() { - throw new UnsupportedOperationException("Not supported, not a searchable source."); + throw new UnsupportedOperationException( + NbBundle.getMessage(this.getClass(), "ExtractedContentViewer.previousItem.exception.msg")); } @Override public int currentItem() { - throw new UnsupportedOperationException("Not supported, not a searchable source."); + throw new UnsupportedOperationException( + NbBundle.getMessage(this.getClass(), "ExtractedContentViewer.currentItem.exception.msg")); } @Override diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/HighlightedMatchesSource.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/HighlightedMatchesSource.java index a7d08fdcd3..a94d2865ad 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/HighlightedMatchesSource.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/HighlightedMatchesSource.java @@ -223,7 +223,8 @@ class HighlightedMatchesSource implements MarkupSource, HighlightLookup { @Override public int nextPage() { if (!hasNextPage()) { - throw new IllegalStateException("No next page."); + throw new IllegalStateException( + NbBundle.getMessage(this.getClass(), "HighlightedMatchesSource.nextPage.exception.msg")); } int idx = pages.indexOf(this.currentPage); currentPage = pages.get(idx + 1); @@ -233,7 +234,8 @@ class HighlightedMatchesSource implements MarkupSource, HighlightLookup { @Override public int previousPage() { if (!hasPreviousPage()) { - throw new IllegalStateException("No previous page."); + throw new IllegalStateException( + NbBundle.getMessage(this.getClass(), "HighlightedMatchesSource.previousPage.exception.msg")); } int idx = pages.indexOf(this.currentPage); currentPage = pages.get(idx - 1); @@ -259,7 +261,8 @@ class HighlightedMatchesSource implements MarkupSource, HighlightLookup { @Override public int nextItem() { if (!hasNextItem()) { - throw new IllegalStateException("No next item."); + throw new IllegalStateException( + NbBundle.getMessage(this.getClass(), "HighlightedMatchesSource.nextItem.exception.msg")); } int cur = pagesToHits.get(currentPage) + 1; pagesToHits.put(currentPage, cur); @@ -269,7 +272,8 @@ class HighlightedMatchesSource implements MarkupSource, HighlightLookup { @Override public int previousItem() { if (!hasPreviousItem()) { - throw new IllegalStateException("No previous item."); + throw new IllegalStateException( + NbBundle.getMessage(this.getClass(), "HighlightedMatchesSource.previousItem.exception.msg")); } int cur = pagesToHits.get(currentPage) - 1; pagesToHits.put(currentPage, cur); diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Ingester.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Ingester.java index d4a7c2fffc..12d9999b01 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Ingester.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Ingester.java @@ -41,6 +41,7 @@ import org.apache.solr.common.SolrException.ErrorCode; import org.apache.solr.common.util.ContentStream; import org.apache.solr.common.SolrInputDocument; import org.openide.util.Exceptions; +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.datamodel.ContentUtils; @@ -279,7 +280,8 @@ class Ingester { if (fields.get(Server.Schema.IMAGE_ID.toString()) == null) { //skip the file, image id unknown - String msg = "Skipping indexing the file, unknown image id, for file: " + cs.getName(); + String msg = NbBundle.getMessage(this.getClass(), + "Ingester.ingest.exception.unknownImgId.msg", cs.getName()); logger.log(Level.SEVERE, msg); throw new IngesterException(msg); } @@ -301,7 +303,9 @@ class Ingester { is = cs.getStream(); read = is.read(docChunkContentBuf); } catch (IOException ex) { - throw new IngesterException("Could not read content stream: " + cs.getName()); + throw new IngesterException( + NbBundle.getMessage(this.getClass(), "Ingester.ingest.exception.cantReadStream.msg", + cs.getName())); } finally { try { is.close(); @@ -333,7 +337,8 @@ class Ingester { solrServer.addDocument(updateDoc); uncommitedIngests = true; } catch (KeywordSearchModuleException ex) { - throw new IngesterException("Error ingestint document: " + cs.getName(), ex); + throw new IngesterException( + NbBundle.getMessage(this.getClass(), "Ingester.ingest.exception.err.msg", cs.getName()), ex); } @@ -373,9 +378,13 @@ class Ingester { logger.log(Level.WARNING, "Solr timeout encountered, trying to restart Solr"); //restart may be needed to recover from some error conditions hardSolrRestart(); - throw new IngesterException("Solr index request time out for id: " + fields.get("id") + ", name: " + fields.get("file_name")); + throw new IngesterException( + NbBundle.getMessage(this.getClass(), "Ingester.ingestExtract.exception.solrTimeout.msg", + fields.get("id"), fields.get("file_name"))); } catch (Exception e) { - throw new IngesterException("Problem posting content to Solr, id: " + fields.get("id") + ", name: " + fields.get("file_name"), e); + throw new IngesterException( + NbBundle.getMessage(this.getClass(), "Ingester.ingestExtract.exception.probPostToSolr.msg", + fields.get("id"), fields.get("file_name")), e); } uncommitedIngests = true; } @@ -443,14 +452,17 @@ class Ingester { up.setMethod(METHOD.POST); solrServer.request(up); } catch (NoOpenCoreException ex) { - throw new RuntimeException("No Solr core available, cannot index the content", ex); + throw new RuntimeException( + NbBundle.getMessage(this.getClass(), "Ingester.UpReqestTask.run.exception.sorlNotAvail.msg"), ex); } catch (IllegalStateException ex) { // problems with content - throw new RuntimeException("Problem reading file.", ex); + throw new RuntimeException( + NbBundle.getMessage(this.getClass(), "Ingester.UpRequestTask.run.exception.probReadFile.msg"), ex); } catch (SolrServerException ex) { // If there's a problem talking to Solr, something is fundamentally // wrong with ingest - throw new RuntimeException("Problem with Solr", ex); + throw new RuntimeException( + NbBundle.getMessage(this.getClass(), "Ingester.UpRequestTask.run.exception.solrProb.msg"), ex); } catch (SolrException ex) { // Tika problems result in an unchecked SolrException ErrorCode ec = ErrorCode.getErrorCode(ex.code()); @@ -458,7 +470,10 @@ class Ingester { // When Tika has problems with a document, it throws a server error // but it's okay to continue with other documents if (ec.equals(ErrorCode.SERVER_ERROR)) { - throw new RuntimeException("Problem posting file contents to Solr. SolrException error code: " + ec, ex); + throw new RuntimeException(NbBundle.getMessage(this.getClass(), + "Ingester.UpRequestTask.run.exception.probPostToSolr.msg", + ec), + ex); } else { // shouldn't get any other error codes throw ex; @@ -513,7 +528,7 @@ class Ingester { @Override public String getSourceInfo() { - return "File:" + f.getId(); + return NbBundle.getMessage(this.getClass(), "Ingester.FscContentStream.getSrcInfo", f.getId()); } @Override @@ -533,7 +548,8 @@ class Ingester { @Override public Reader getReader() throws IOException { - throw new UnsupportedOperationException("Not supported yet."); + throw new UnsupportedOperationException( + NbBundle.getMessage(this.getClass(), "Ingester.FscContentStream.getReader")); } } @@ -555,7 +571,7 @@ class Ingester { @Override public String getSourceInfo() { - return "File:" + aContent.getId(); + return NbBundle.getMessage(this.getClass(), "Ingester.NullContentStream.getSrcInfo.text", aContent.getId()); } @Override @@ -575,7 +591,8 @@ class Ingester { @Override public Reader getReader() throws IOException { - throw new UnsupportedOperationException("Not supported yet."); + throw new UnsupportedOperationException( + NbBundle.getMessage(this.getClass(), "Ingester.NullContentStream.getReader")); } } diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Keyword.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Keyword.java index 39035a1684..65acb171b1 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Keyword.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Keyword.java @@ -19,6 +19,7 @@ package org.sleuthkit.autopsy.keywordsearch; +import org.openide.util.NbBundle; import org.sleuthkit.datamodel.BlackboardAttribute; /** @@ -72,7 +73,7 @@ class Keyword { @Override public String toString() { - return "Keyword{" + "query=" + keywordString + ", isLiteral=" + isLiteral + ", keywordType=" + keywordType + '}'; + return NbBundle.getMessage(this.getClass(), "Keyword.toString.text", keywordString, isLiteral, keywordType); } diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearch.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearch.java index 59f218fc09..c849833d00 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearch.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearch.java @@ -28,6 +28,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import java.util.logging.SimpleFormatter; import org.openide.util.Exceptions; +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.coreutils.PlatformUtil; import org.sleuthkit.autopsy.keywordsearch.KeywordSearchResultFactory.ResultWriter; @@ -107,7 +108,10 @@ public class KeywordSearch { } catch (Exception e) { logger.log(Level.SEVERE, "KeywordSearch listener threw exception", e); - MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to KeywordSearch updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show(NbBundle.getMessage(KeywordSearch.class, "KeywordSearch.moduleErr"), + NbBundle.getMessage(KeywordSearch.class, + "KeywordSearch.fireNumIdxFileChg.moduleErr.msg"), + MessageNotifyUtil.MessageType.ERROR); } } diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java index a4f0b78921..fc7913cf1f 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java @@ -377,7 +377,9 @@ public final class KeywordSearchIngestModule extends IngestModuleAbstractFile { // we had cases where getStatus was OK, but the connection resulted in a 404 server.queryNumIndexedDocuments(); } catch (KeywordSearchModuleException | NoOpenCoreException ex) { - throw new IngestModuleException("Error connecting to SOLR server: " + ex.getMessage()); + throw new IngestModuleException( + NbBundle.getMessage(this.getClass(), "KeywordSearchIngestModule.init.exception.errConnToSolr.msg", + ex.getMessage())); } //initialize extractors diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchListsEncase.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchListsEncase.java index 9ad11804a3..a8ea8dee9e 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchListsEncase.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchListsEncase.java @@ -18,6 +18,8 @@ */ package org.sleuthkit.autopsy.keywordsearch; +import org.openide.util.NbBundle; + import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -115,12 +117,14 @@ class KeywordSearchListsEncase extends KeywordSearchListsAbstract{ @Override public boolean save() { - throw new UnsupportedOperationException("Not supported yet."); + throw new UnsupportedOperationException( + NbBundle.getMessage(this.getClass(), "KeywordSearchListsEncase.save.exception.msg")); } @Override public boolean save(boolean isExport) { - throw new UnsupportedOperationException("Not supported yet."); + throw new UnsupportedOperationException( + NbBundle.getMessage(this.getClass(), "KeywordSearchListsEncase.save2.exception.msg")); } @Override @@ -173,7 +177,10 @@ class KeywordSearchListsEncase extends KeywordSearchListsAbstract{ } else if(type.equals("")) { return Expression; } else { - throw new IllegalArgumentException("Unsupported EncaseMetaType: " + type); + throw new IllegalArgumentException( + NbBundle.getMessage(KeywordSearchListsEncase.class, + "KeywordSearchListsEncase.encaseMetaType.exception.msg", + type)); } } } diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchListsManagementPanel.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchListsManagementPanel.java index e406580f7d..225a077610 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchListsManagementPanel.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchListsManagementPanel.java @@ -342,7 +342,7 @@ class KeywordSearchListsManagementPanel extends javax.swing.JPanel implements Op @Override public String getColumnName(int column) { - return "Name"; + return NbBundle.getMessage(this.getClass(), "KeywordSearchListsManagementPanel.getColName.text"); } @Override @@ -357,7 +357,8 @@ class KeywordSearchListsManagementPanel extends javax.swing.JPanel implements Op @Override public void setValueAt(Object aValue, int rowIndex, int columnIndex) { - throw new UnsupportedOperationException("Editing of cells is not supported"); + throw new UnsupportedOperationException( + NbBundle.getMessage(this.getClass(), "KeywordSearchListsManagementPanel.setValueAt.exception.msg")); } @Override diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchListsViewerPanel.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchListsViewerPanel.java index 3444d19d16..aff684af70 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchListsViewerPanel.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchListsViewerPanel.java @@ -322,12 +322,14 @@ class KeywordSearchListsViewerPanel extends AbstractKeywordSearchPerformer { @Override public boolean isLuceneQuerySelected() { - throw new UnsupportedOperationException("Not supported for multi-word queries."); + throw new UnsupportedOperationException( + NbBundle.getMessage(this.getClass(), "KeywordSearchListsViewerPanel.isLuceneQuerySel.exception.msg")); } @Override public String getQueryText() { - throw new UnsupportedOperationException("Not supported for multi-word queries."); + throw new UnsupportedOperationException( + NbBundle.getMessage(this.getClass(), "KeywordSearchListsViewerPanel.getQueryText.exception.msg")); } void addSearchButtonActionListener(ActionListener al) { diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchOptionsPanelController.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchOptionsPanelController.java index cf28279578..9d050184df 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchOptionsPanelController.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchOptionsPanelController.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; @@ -82,7 +83,10 @@ public final class KeywordSearchOptionsPanelController extends OptionsPanelContr } catch (Exception e) { logger.log(Level.SEVERE, "KeywordSearchOptionsPanelController listener threw exception", e); - MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to KeywordSearchOptionsPanelController updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show( + NbBundle.getMessage(this.getClass(), "KeywordSearchOptionsPanelController.moduleErr"), + NbBundle.getMessage(this.getClass(), "KeywordSearchOptionsPanelController.moduleErr.msg1"), + MessageNotifyUtil.MessageType.ERROR); } } try { @@ -90,7 +94,10 @@ public final class KeywordSearchOptionsPanelController extends OptionsPanelContr } catch (Exception e) { logger.log(Level.SEVERE, "KeywordSearchOptionsPanelController listener threw exception", e); - MessageNotifyUtil.Notify.show("Module Error", "A module caused an error listening to KeywordSearchOptionsPanelController updates. See log to determine which module. Some data could be incomplete.", MessageNotifyUtil.MessageType.ERROR); + MessageNotifyUtil.Notify.show( + NbBundle.getMessage(this.getClass(), "KeywordSearchOptionsPanelController.moduleErr"), + NbBundle.getMessage(this.getClass(), "KeywordSearchOptionsPanelController.moduleErr.msg2"), + MessageNotifyUtil.MessageType.ERROR); } } diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchPanel.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchPanel.java index 3dd2b3f14f..d402eecba9 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchPanel.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchPanel.java @@ -34,12 +34,14 @@ import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; 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.SwingUtilities; import javax.swing.event.PopupMenuEvent; import javax.swing.event.PopupMenuListener; -import org.apache.solr.client.solrj.SolrServerException; + import org.sleuthkit.autopsy.casemodule.Case; /** @@ -384,7 +386,8 @@ class KeywordSearchPanel extends AbstractKeywordSearchPerformer { @Override public List getQueryList() { - throw new UnsupportedOperationException("No list for single-keyword search"); + throw new UnsupportedOperationException( + NbBundle.getMessage(this.getClass(), "KeywordSearchPanel.getQueryList.exception.msg")); } private class KeywordPropertyChangeListener implements PropertyChangeListener { diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchQueryManager.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchQueryManager.java index b3243cf9b1..2982c5cb0a 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchQueryManager.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchQueryManager.java @@ -165,7 +165,7 @@ class KeywordSearchQueryManager { rootNode = Node.EMPTY; } - final String pathText = "Keyword search"; + final String pathText = NbBundle.getMessage(this.getClass(), "KeywordSearchQueryManager.pathText.text"); DataResultTopComponent.initInstance(pathText, rootNode, things.size(), searchResultWin); diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchResultFactory.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchResultFactory.java index 4682ad09d4..bc0855cf71 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchResultFactory.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchResultFactory.java @@ -28,6 +28,8 @@ import java.util.Map; import java.util.concurrent.ExecutionException; 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.SwingUtilities; import javax.swing.SwingWorker; @@ -571,7 +573,8 @@ class KeywordSearchResultFactory extends ChildFactory { try { final String queryStr = query.getQueryString(); final String queryDisp = queryStr.length() > QUERY_DISPLAY_LEN ? queryStr.substring(0, QUERY_DISPLAY_LEN - 1) + " ..." : queryStr; - progress = ProgressHandleFactory.createHandle("Saving results: " + queryDisp, new Cancellable() { + progress = ProgressHandleFactory.createHandle( + NbBundle.getMessage(this.getClass(), "KeywordSearchResultFactory.progress.saving", queryDisp), new Cancellable() { @Override public boolean cancel() { diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchSettings.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchSettings.java index e4b667141e..0f0dca2956 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchSettings.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchSettings.java @@ -25,6 +25,8 @@ import java.util.HashMap; 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.sleuthkit.autopsy.coreutils.ModuleSettings; import org.sleuthkit.autopsy.coreutils.StringExtract; @@ -34,10 +36,10 @@ import org.sleuthkit.autopsy.keywordsearch.KeywordSearchIngestModule.UpdateFrequ //This file contains constants and settings for KeywordSearch class KeywordSearchSettings { - public static final String MODULE_NAME = "KeywordSearch"; - static final String PROPERTIES_OPTIONS = MODULE_NAME+"_Options"; - static final String PROPERTIES_NSRL = MODULE_NAME+"_NSRL"; - static final String PROPERTIES_SCRIPTS = MODULE_NAME+"_Scripts"; + public static final String MODULE_NAME = NbBundle.getMessage(KeywordSearchSettings.class, "KeywordSearchSettings.moduleName.text"); + static final String PROPERTIES_OPTIONS = NbBundle.getMessage(KeywordSearchSettings.class, "KeywordSearchSettings.properties_options.text", MODULE_NAME); + static final String PROPERTIES_NSRL = NbBundle.getMessage(KeywordSearchSettings.class, "KeywordSearchSettings.propertiesNSRL.text", MODULE_NAME); + static final String PROPERTIES_SCRIPTS = NbBundle.getMessage(KeywordSearchSettings.class, "KeywordSearchSettings.propertiesScripts.text", MODULE_NAME); private static boolean skipKnown = true; private static final Logger logger = Logger.getLogger(KeywordSearchSettings.class.getName()); private static UpdateFrequency UpdateFreq = UpdateFrequency.DEFAULT; diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/NoOpenCoreException.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/NoOpenCoreException.java index dc9f0b61ac..8c18f39423 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/NoOpenCoreException.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/NoOpenCoreException.java @@ -18,6 +18,8 @@ */ package org.sleuthkit.autopsy.keywordsearch; +import org.openide.util.NbBundle; + /** * * Exception thrown when no core is open @@ -25,7 +27,7 @@ package org.sleuthkit.autopsy.keywordsearch; public class NoOpenCoreException extends Exception { NoOpenCoreException() { - super("No currently open Solr core."); + super(NbBundle.getMessage(NoOpenCoreException.class, "NoOpenCoreException.err.noOpenSorlCore.msg")); } diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Server.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Server.java index 998d25f24c..a6e55758d9 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Server.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Server.java @@ -30,7 +30,6 @@ import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.lang.Long; -import java.lang.Long; import java.net.ConnectException; import java.net.ServerSocket; import java.net.SocketException; @@ -38,9 +37,10 @@ import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Paths; 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.coreutils.Logger; import javax.swing.AbstractAction; import org.apache.solr.client.solrj.SolrQuery; @@ -57,7 +57,6 @@ import org.openide.modules.Places; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.coreutils.ModuleSettings; import org.sleuthkit.autopsy.coreutils.PlatformUtil; -import org.sleuthkit.autopsy.coreutils.Version; import org.sleuthkit.datamodel.Content; import org.apache.solr.common.SolrInputDocument; import org.apache.solr.client.solrj.impl.XMLResponseParser; @@ -403,10 +402,12 @@ public class Server { } catch (SecurityException ex) { logger.log(Level.WARNING, "Could not start Solr process!", ex); - throw new KeywordSearchModuleException("Could not start Solr server process", ex); + throw new KeywordSearchModuleException( + NbBundle.getMessage(this.getClass(), "Server.start.exception.cantStartSolr.msg"), ex); } catch (IOException ex) { logger.log(Level.WARNING, "Could not start Solr server process!", ex); - throw new KeywordSearchModuleException("Could not start Solr server process", ex); + throw new KeywordSearchModuleException( + NbBundle.getMessage(this.getClass(), "Server.start.exception.cantStartSolr.msg2"), ex); } } else { logger.log(Level.WARNING, "Could not start Solr server process, port [" + currentSolrServerPort + "] not available!"); @@ -537,10 +538,12 @@ public class Server { logger.log(Level.INFO, "Solr server is not running, cause: " + cause.getMessage()); return false; } else { - throw new KeywordSearchModuleException("Error checking if Solr server is running", ex); + throw new KeywordSearchModuleException( + NbBundle.getMessage(this.getClass(), "Server.isRunning.exception.errCheckSolrRunning.msg"), ex); } } catch (IOException ex) { - throw new KeywordSearchModuleException("Error checking if Solr server is running", ex); + throw new KeywordSearchModuleException( + NbBundle.getMessage(this.getClass(), "Server.isRunning.exception.errCheckSolrRunning.msg2"), ex); } return true; @@ -552,7 +555,8 @@ public class Server { synchronized void openCore() throws KeywordSearchModuleException { if (currentCore != null) { - throw new KeywordSearchModuleException("Already an open Core! Explicitely close Core first. "); + throw new KeywordSearchModuleException( + NbBundle.getMessage(this.getClass(), "Server.openCore.exception.alreadyOpen.msg")); } Case currentCase = Case.getCurrentCase(); @@ -665,7 +669,8 @@ public class Server { try { return currentCore.queryNumIndexedFiles(); } catch (SolrServerException ex) { - throw new KeywordSearchModuleException("Error querying number of indexed files, ", ex); + throw new KeywordSearchModuleException( + NbBundle.getMessage(this.getClass(), "Server.queryNumIdxFiles.exception.msg"), ex); } @@ -686,7 +691,8 @@ public class Server { try { return currentCore.queryNumIndexedChunks(); } catch (SolrServerException ex) { - throw new KeywordSearchModuleException("Error querying number of indexed chunks, ", ex); + throw new KeywordSearchModuleException( + NbBundle.getMessage(this.getClass(), "Server.queryNumIdxChunks.exception.msg"), ex); } } @@ -705,7 +711,8 @@ public class Server { try { return currentCore.queryNumIndexedDocuments(); } catch (SolrServerException ex) { - throw new KeywordSearchModuleException("Error querying number of indexed documents, ", ex); + throw new KeywordSearchModuleException( + NbBundle.getMessage(this.getClass(), "Server.queryNumIdxDocs.exception.msg"), ex); } } @@ -724,7 +731,8 @@ public class Server { try { return currentCore.queryIsIndexed(contentID); } catch (SolrServerException ex) { - throw new KeywordSearchModuleException("Error checkign if content is indexed, ", ex); + throw new KeywordSearchModuleException( + NbBundle.getMessage(this.getClass(), "Server.queryIsIdxd.exception.msg"), ex); } } @@ -744,7 +752,8 @@ public class Server { try { return currentCore.queryNumFileChunks(fileID); } catch (SolrServerException ex) { - throw new KeywordSearchModuleException("Error getting number of file chunks, ", ex); + throw new KeywordSearchModuleException( + NbBundle.getMessage(this.getClass(), "Server.queryNumFileChunks.exception.msg"), ex); } } @@ -763,7 +772,8 @@ public class Server { try { return currentCore.query(sq); } catch (SolrServerException ex) { - throw new KeywordSearchModuleException("Error running query: " + sq.getQuery(), ex); + throw new KeywordSearchModuleException( + NbBundle.getMessage(this.getClass(), "Server.query.exception.msg", sq.getQuery()), ex); } } @@ -783,7 +793,8 @@ public class Server { try { return currentCore.query(sq, method); } catch (SolrServerException ex) { - throw new KeywordSearchModuleException("Error running query: " + sq.getQuery(), ex); + throw new KeywordSearchModuleException( + NbBundle.getMessage(this.getClass(), "Server.query2.exception.msg", sq.getQuery()), ex); } } @@ -802,7 +813,8 @@ public class Server { try { return currentCore.queryTerms(sq); } catch (SolrServerException ex) { - throw new KeywordSearchModuleException("Error running terms query: " + sq.getQuery(), ex); + throw new KeywordSearchModuleException( + NbBundle.getMessage(this.getClass(), "Server.queryTerms.exception.msg", sq.getQuery()), ex); } } @@ -873,7 +885,8 @@ public class Server { //handle a possible scenario when server process might not be fully started if (!this.isRunning()) { logger.log(Level.WARNING, "Core open requested, but server not yet running"); - throw new KeywordSearchModuleException("Core open requested, but server not yet running"); + throw new KeywordSearchModuleException( + NbBundle.getMessage(this.getClass(), "Server.openCore.exception.msg")); } CoreAdminRequest.Create createCore = new CoreAdminRequest.Create(); @@ -888,9 +901,11 @@ public class Server { return newCore; } catch (SolrServerException ex) { - throw new KeywordSearchModuleException("Could not open Core", ex); + throw new KeywordSearchModuleException( + NbBundle.getMessage(this.getClass(), "Server.openCore.exception.cantOpen.msg"), ex); } catch (IOException ex) { - throw new KeywordSearchModuleException("Could not open Core", ex); + throw new KeywordSearchModuleException( + NbBundle.getMessage(this.getClass(), "Server.openCore.exception.cantOpen.msg2"), ex); } } @@ -931,7 +946,8 @@ public class Server { return solrCore.request(request); } catch (IOException e) { logger.log(Level.WARNING, "Could not issue Solr request. ", e); - throw new SolrServerException("Could not issue Solr request", e); + throw new SolrServerException( + NbBundle.getMessage(this.getClass(), "Server.request.exception.exception.msg"), e); } } @@ -951,7 +967,7 @@ public class Server { solrCore.commit(true, true); } catch (IOException e) { logger.log(Level.WARNING, "Could not commit index. ", e); - throw new SolrServerException("Could not commit index", e); + throw new SolrServerException(NbBundle.getMessage(this.getClass(), "Server.commit.exception.msg"), e); } } @@ -960,10 +976,12 @@ public class Server { solrCore.add(doc); } catch (SolrServerException ex) { logger.log(Level.SEVERE, "Could not add document to index via update handler: " + doc.getField("id"), ex); - throw new KeywordSearchModuleException("Could not add document to index via update handler: " + doc.getField("id"), ex); + throw new KeywordSearchModuleException( + NbBundle.getMessage(this.getClass(), "Server.addDoc.exception.msg", doc.getField("id")), ex); } catch (IOException ex) { logger.log(Level.SEVERE, "Could not add document to index via update handler: " + doc.getField("id"), ex); - throw new KeywordSearchModuleException("Could not add document to index via update handler: " + doc.getField("id"), ex); + throw new KeywordSearchModuleException( + NbBundle.getMessage(this.getClass(), "Server.addDoc.exception.msg2", doc.getField("id")), ex); } } @@ -994,9 +1012,11 @@ public class Server { try { CoreAdminRequest.unloadCore(this.name, solrServer); } catch (SolrServerException ex) { - throw new KeywordSearchModuleException("Cannot close Core", ex); + throw new KeywordSearchModuleException( + NbBundle.getMessage(this.getClass(), "Server.close.exception.msg"), ex); } catch (IOException ex) { - throw new KeywordSearchModuleException("Cannot close Core", ex); + throw new KeywordSearchModuleException( + NbBundle.getMessage(this.getClass(), "Server.close.exception.msg2"), ex); } } @@ -1092,9 +1112,8 @@ public class Server { private int port; SolrServerNoPortException(int port) { - super("Indexing server could not bind to port " + port - + ", port is not available, consider change the default " - + Server.PROPERTIES_CURRENT_SERVER_PORT + " port."); + super(NbBundle.getMessage(Server.class, "Server.solrServerNoPortException.msg", port, + Server.PROPERTIES_CURRENT_SERVER_PORT)); this.port = port; } diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Extract.java b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Extract.java index 66a628f389..12b82bbc65 100644 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Extract.java +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Extract.java @@ -30,7 +30,6 @@ import java.util.logging.Level; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.ingest.IngestModuleDataSource; -import org.sleuthkit.autopsy.report.SQLiteDBConnect; import org.sleuthkit.datamodel.*; abstract class Extract extends IngestModuleDataSource{ diff --git a/Core/src/org/sleuthkit/autopsy/report/SQLiteDBConnect.java b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/SQLiteDBConnect.java similarity index 98% rename from Core/src/org/sleuthkit/autopsy/report/SQLiteDBConnect.java rename to RecentActivity/src/org/sleuthkit/autopsy/recentactivity/SQLiteDBConnect.java index 97142c840a..067145c5e6 100644 --- a/Core/src/org/sleuthkit/autopsy/report/SQLiteDBConnect.java +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/SQLiteDBConnect.java @@ -20,7 +20,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.sleuthkit.autopsy.report; +package org.sleuthkit.autopsy.recentactivity; import java.sql.Connection; import java.sql.DriverManager; @@ -32,7 +32,7 @@ import org.sleuthkit.autopsy.coreutils.Logger; /** * Database connection class & utilities * */ - public class SQLiteDBConnect { +class SQLiteDBConnect { public String sDriver = ""; public String sUrl = null; diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Util.java b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Util.java index c5346df9b1..c27d216ae8 100644 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Util.java +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Util.java @@ -41,7 +41,6 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.services.FileManager; -import org.sleuthkit.autopsy.report.SQLiteDBConnect; import org.sleuthkit.datamodel.AbstractFile; import org.sleuthkit.datamodel.Content; import org.sleuthkit.datamodel.TskCoreException; diff --git a/Testing/test/qa-functional/src/org/sleuthkit/autopsy/testing/RegressionTest.java b/Testing/test/qa-functional/src/org/sleuthkit/autopsy/testing/RegressionTest.java index 6d6c078280..b331d47518 100755 --- a/Testing/test/qa-functional/src/org/sleuthkit/autopsy/testing/RegressionTest.java +++ b/Testing/test/qa-functional/src/org/sleuthkit/autopsy/testing/RegressionTest.java @@ -56,6 +56,7 @@ import org.netbeans.jemmy.operators.JLabelOperator; import org.netbeans.jemmy.operators.JTabbedPaneOperator; import org.netbeans.jemmy.operators.JTableOperator; import org.netbeans.jemmy.operators.JTextFieldOperator; +import org.netbeans.jemmy.operators.JListOperator; import org.netbeans.junit.NbModuleSuite; import org.openide.util.Exceptions; import org.sleuthkit.autopsy.ingest.IngestManager; @@ -265,14 +266,13 @@ public class RegressionTest extends TestCase { } logger.info("Enqueue took " + (System.currentTimeMillis() - start) + "ms"); while (man.isIngestRunning()) { - new Timeout("pausing", 1000).sleep(); // give it a second (or five) to process } new Timeout("pausing", 15000).sleep(); // give it a second (or fifteen) to process - boolean sleep = true; while (man.areModulesRunning()) { - new Timeout("pausing", 5000).sleep(); // give it a second (or five) to process + new Timeout("pausing", 5000).sleep(); // give it a second (or five) to process } + logger.info("Ingest (including enqueue) took " + (System.currentTimeMillis() - start) + "ms"); // allow keyword search to finish saving artifacts, just in case // but randomize the timing so that we don't always get the same error @@ -299,10 +299,13 @@ public class RegressionTest extends TestCase { logger.info("Generate Report Button"); JDialog reportDialog = JDialogOperator.waitJDialog("Generate Report", false, false); JDialogOperator reportDialogOperator = new JDialogOperator(reportDialog); + JListOperator listOperator = new JListOperator(reportDialogOperator); JButtonOperator jbo0 = new JButtonOperator(reportDialogOperator, "Next"); DateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy-HH-mm-ss"); Date date = new Date(); String datenotime = dateFormat.format(date); + listOperator.clickOnItem(1, 1); + new Timeout("pausing", 1000).sleep(); jbo0.pushNoBlock(); new Timeout("pausing", 1000).sleep(); JButtonOperator jbo1 = new JButtonOperator(reportDialogOperator, "Finish"); diff --git a/Timeline/src/org/sleuthkit/autopsy/timeline/Bundle.properties b/Timeline/src/org/sleuthkit/autopsy/timeline/Bundle.properties index ac06311ca1..b997744697 100644 --- a/Timeline/src/org/sleuthkit/autopsy/timeline/Bundle.properties +++ b/Timeline/src/org/sleuthkit/autopsy/timeline/Bundle.properties @@ -4,6 +4,29 @@ OpenIDE-Module-Long-Description=\ Events for a selected day are viewable in the built-in result and content viewers. OpenIDE-Module-Name=Timeline CTL_MakeTimeline="Make Timeline (Beta)" +CTL_TimelineView=Generate Timeline OpenIDE-Module-Short-Description=Displays user activity timeline TimelineProgressDialog.jLabel1.text=Creating timeline . . . TimelineFrame.title=Timeline +Timeline.frameName.text={0} - Autopsy Timeline (Beta) +Timeline.resultsPanel.title=Timeline Results +Timeline.getName=Make Timeline (Beta) +Timeline.runJavaFxThread.progress.creating=Creating timeline . . . +Timeline.runJavaFxThread.progress.genBodyFile=Generating Bodyfile +Timeline.runJavaFxThread.progress.genMacTime=Generating Mactime +Timeline.runJavaFxThread.progress.parseMacTime=Parsing Mactime +Timeline.zoomOutButton.text=Zoom Out +Timeline.goToButton.text=Go To\: +Timeline.yearBarChart.x.years=Years +Timeline.yearBarChart.y.numEvents=Number of Events +Timeline.MonthsBarChart.x.monthYY=Month ({0}) +Timeline.MonthsBarChart.y.numEvents=Number of Events +Timeline.eventsByMoBarChart.x.dayOfMo=Day of Month +Timeline.eventsByMoBarChart.y.numEvents=Number of Events +Timeline.node.emptyRoot=Empty Root +Timeline.resultPanel.loading=Loading... +Timeline.node.root=Root +Timeline.propChg.confDlg.timelineOOD.msg=Timeline is out of date. Would you like to regenerate it? +Timeline.propChg.confDlg.timelineOOD.details=Select an option +Timeline.initTimeline.confDlg.genBeforeIngest.msg=You are trying to generate a timeline before ingest has been completed. The timeline may be incomplete. Do you want to continue? +Timeline.initTimeline.confDlg.genBeforeIngest.deails=Timeline diff --git a/Timeline/src/org/sleuthkit/autopsy/timeline/Bundle_ja.properties b/Timeline/src/org/sleuthkit/autopsy/timeline/Bundle_ja.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/Timeline/src/org/sleuthkit/autopsy/timeline/Timeline.java b/Timeline/src/org/sleuthkit/autopsy/timeline/Timeline.java index 479b98cfe0..cac604ad5d 100644 --- a/Timeline/src/org/sleuthkit/autopsy/timeline/Timeline.java +++ b/Timeline/src/org/sleuthkit/autopsy/timeline/Timeline.java @@ -41,7 +41,9 @@ import java.util.List; import java.util.Locale; import java.util.Scanner; import java.util.Stack; +import java.util.TimeZone; import java.util.logging.Level; +import java.util.prefs.Preferences; import javafx.application.Platform; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; @@ -75,11 +77,11 @@ import org.openide.awt.ActionReference; import org.openide.awt.ActionReferences; import org.openide.awt.ActionRegistration; import org.openide.modules.InstalledFileLocator; -import org.openide.modules.ModuleInstall; import org.openide.nodes.Children; import org.openide.nodes.Node; import org.openide.util.HelpCtx; import org.openide.util.NbBundle; +import org.openide.util.NbPreferences; import org.openide.util.actions.CallableSystemAction; import org.openide.util.actions.Presenter; import org.openide.util.lookup.Lookups; @@ -97,6 +99,7 @@ import org.sleuthkit.autopsy.datamodel.DisplayableItemNodeVisitor; import org.sleuthkit.autopsy.datamodel.FileNode; import org.sleuthkit.autopsy.ingest.IngestManager; import org.sleuthkit.autopsy.coreutils.ExecUtil; +import org.sleuthkit.autopsy.datamodel.ContentUtils; import org.sleuthkit.datamodel.AbstractFile; import org.sleuthkit.datamodel.SleuthkitCase; import org.sleuthkit.datamodel.TskCoreException; @@ -105,14 +108,14 @@ import org.sleuthkit.datamodel.TskCoreException; @ActionRegistration(displayName = "#CTL_MakeTimeline", lazy = false) @ActionReferences(value = { @ActionReference(path = "Menu/Tools", position = 100)}) -@NbBundle.Messages(value = "CTL_TimelineView=Generate Timeline") +//@NbBundle.Messages(value = "CTL_TimelineView=Generate Timeline") /** * The Timeline Action entry point. Collects data and pushes data to javafx * widgets * */ public class Timeline extends CallableSystemAction implements Presenter.Toolbar, PropertyChangeListener { - + private static final Logger logger = Logger.getLogger(Timeline.class.getName()); private final java.io.File macRoot = InstalledFileLocator.getDefault().locate("mactime", Timeline.class.getPackage().getName(), false); private TimelineFrame mainFrame; //frame for holding all the elements @@ -129,6 +132,7 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar, private ComboBox fxDropdownSelectYears; //Dropdown box for selecting years. Useful when the charts' scale means some years are unclickable, despite having events. private final Stack> fxStackPrevCharts = new Stack>(); //Stack for storing drill-up information. private BarChart fxChartTopLevel; //the topmost chart, used for resetting to default view. + private BarChart fxMonthView; //the month chart private DataResultPanel dataResultPanel; private DataContentPanel dataContentPanel; private ProgressHandle progress; @@ -142,12 +146,13 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar, private EventHandler fxMouseExitedListener; private SleuthkitCase skCase; private boolean fxInited = false; + private int monthCounter = 0; public Timeline() { super(); fxInited = Installer.isJavaFxInited(); - + // TimeZone.setDefault(TimeZone.getTimeZone("UTC")); //sets the default timezone to UTC unless otherwise stated } //Swing components and JavafX components don't play super well together @@ -175,7 +180,8 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar, //Making the main frame * mainFrame = new TimelineFrame(); - mainFrame.setFrameName(Case.getCurrentCase().getName() + " - Autopsy Timeline (Beta)"); + mainFrame.setFrameName( + NbBundle.getMessage(this.getClass(), "Timeline.frameName.text", Case.getCurrentCase().getName())); //use the same icon on jframe as main application mainFrame.setIconImage(WindowManager.getDefault().getMainWindow().getIconImage()); @@ -186,7 +192,9 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar, //dataContentPanel.setAlignmentX(Component.RIGHT_ALIGNMENT); //dataContentPanel.setPreferredSize(new Dimension(FRAME_WIDTH, (int) (FRAME_HEIGHT * 0.4))); - dataResultPanel = DataResultPanel.createInstance("Timeline Results", "", Node.EMPTY, 0, dataContentPanel); + dataResultPanel = DataResultPanel.createInstance( + NbBundle.getMessage(this.getClass(), "Timeline.resultsPanel.title"), + "", Node.EMPTY, 0, dataContentPanel); dataResultPanel.setContentViewer(dataContentPanel); //dataResultPanel.setAlignmentX(Component.LEFT_ALIGNMENT); //dataResultPanel.setPreferredSize(new Dimension((int)(FRAME_WIDTH * 0.5), (int) (FRAME_HEIGHT * 0.5))); @@ -211,7 +219,8 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar, public void run() { try { // start the progress bar - progress = ProgressHandleFactory.createHandle("Creating timeline . . ."); + progress = ProgressHandleFactory.createHandle( + NbBundle.getMessage(this.getClass(), "Timeline.runJavaFxThread.progress.creating")); progress.start(); fxChartEvents = null; //important to reset old data @@ -239,11 +248,13 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar, if (!mactimeFile.exists()) { progressDialog.setProgressTotal(3); //total 3 units logger.log(Level.INFO, "Creating body file"); - progressDialog.updateProgressBar("Generating Bodyfile"); + progressDialog.updateProgressBar( + NbBundle.getMessage(this.getClass(), "Timeline.runJavaFxThread.progress.genBodyFile")); String bodyFilePath = makeBodyFile(); progressDialog.updateProgressBar(++currentProgress); logger.log(Level.INFO, "Creating mactime file: " + mactimeFile.getAbsolutePath()); - progressDialog.updateProgressBar("Generating Mactime"); + progressDialog.updateProgressBar( + NbBundle.getMessage(this.getClass(), "Timeline.runJavaFxThread.progress.genMacTime")); makeMacTime(bodyFilePath); progressDialog.updateProgressBar(++currentProgress); data = null; @@ -253,7 +264,8 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar, } - progressDialog.updateProgressBar("Parsing Mactime"); + progressDialog.updateProgressBar( + NbBundle.getMessage(this.getClass(), "Timeline.runJavaFxThread.progress.parseMacTime")); if (data == null) { logger.log(Level.INFO, "Parsing mactime file: " + mactimeFile.getAbsolutePath()); data = parseMacTime(mactimeFile); //The sum total of the mactime parsing. YearEpochs contain everything you need to make a timeline. @@ -269,7 +281,7 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar, fxDropdownSelectYears = new ComboBox(listSelect); //Buttons for navigating up and down the timeline - fxZoomOutButton = new Button("Zoom Out"); + fxZoomOutButton = new Button(NbBundle.getMessage(this.getClass(), "Timeline.zoomOutButton.text")); fxZoomOutButton.setOnAction(new EventHandler() { @Override public void handle(ActionEvent e) { @@ -277,7 +289,7 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar, if (fxStackPrevCharts.size() == 0) { bc = fxChartTopLevel; } else { - bc = fxStackPrevCharts.pop(); + bc = fxStackPrevCharts.pop(); } fxChartEvents = bc; fxScrollEvents.setContent(fxChartEvents); @@ -301,7 +313,8 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar, //Adding things to the V and H boxes. //hBox_Charts stores the pseudo menu bar at the top of the timeline. |Zoom Out|View Year: [Select Year]|►| - fxHBoxCharts.getChildren().addAll(fxZoomOutButton, new Label("Go To:"), fxDropdownSelectYears); + fxHBoxCharts.getChildren().addAll(fxZoomOutButton, new Label( + NbBundle.getMessage(this.getClass(), "Timeline.goToButton.text")), fxDropdownSelectYears); fxVBox.getChildren().addAll(fxHBoxCharts, fxScrollEvents); //FxBox_V holds things in a visual stack. fxGroupCharts.getChildren().add(fxVBox); //Adding the FxBox to the group. Groups make things easier to manipulate without having to update a hundred things every change. fxPanelCharts.setScene(fxSceneCharts); @@ -346,8 +359,8 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar, final Label l = new Label(""); l.setStyle("-fx-font: 24 arial;"); l.setTextFill(Color.AZURE); - xAxis.setLabel("Years"); - yAxis.setLabel("Number of Events"); + xAxis.setLabel(NbBundle.getMessage(this.getClass(), "Timeline.yearBarChart.x.years")); + yAxis.setLabel(NbBundle.getMessage(this.getClass(), "Timeline.yearBarChart.y.numEvents")); //Charts are made up of individual pieces of Chart.Data. In this case, a piece of barData is a single bar on the graph. //Data is packaged into a series, which can be assigned custom colors or styling //After the series are created, 1 or more series are packaged into a single chart. @@ -410,11 +423,10 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar, * Always 12 per year, empty months are represented by no bar. */ private BarChart createMonthsWithDrill(final YearEpoch ye) { - final CategoryAxis xAxis = new CategoryAxis(); final NumberAxis yAxis = new NumberAxis(); - xAxis.setLabel("Month (" + ye.year + ")"); - yAxis.setLabel("Number of Events"); + xAxis.setLabel(NbBundle.getMessage(this.getClass(), "Timeline.MonthsBarChart.x.monthYY", ye.year)); + yAxis.setLabel(NbBundle.getMessage(this.getClass(), "Timeline.MonthsBarChart.y.numEvents")); ObservableList> bcData = FXCollections.observableArrayList(); BarChart.Series se = new BarChart.Series(); @@ -465,7 +477,7 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar, bc.autosize(); bc.setPrefWidth(FRAME_WIDTH); bc.setLegendVisible(false); - fxStackPrevCharts.push(bc); + fxMonthView= bc; return bc; } @@ -477,8 +489,8 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar, private BarChart createEventsByMonth(final MonthEpoch me, final YearEpoch ye) { final CategoryAxis xAxis = new CategoryAxis(); final NumberAxis yAxis = new NumberAxis(); - xAxis.setLabel("Day of Month"); - yAxis.setLabel("Number of Events"); + xAxis.setLabel(NbBundle.getMessage(this.getClass(), "Timeline.eventsByMoBarChart.x.dayOfMo")); + yAxis.setLabel(NbBundle.getMessage(this.getClass(), "Timeline.eventsByMoBarChart.y.numEvents")); ObservableList> bcData = makeObservableListByMonthAllDays(me, ye.getYear()); BarChart.Series series = new BarChart.Series(bcData); series.setName(me.getMonthName() + " " + ye.getYear()); @@ -507,9 +519,10 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar, @Override public void run() { //reset the view and free the current nodes before loading new ones - final FileRootNode d = new FileRootNode("Empty Root", new ArrayList()); + final FileRootNode d = new FileRootNode( + NbBundle.getMessage(this.getClass(), "Timeline.node.emptyRoot"), new ArrayList()); dataResultPanel.setNode(d); - dataResultPanel.setPath("Loading..."); + dataResultPanel.setPath(NbBundle.getMessage(this.getClass(), "Timeline.resultPanel.loading")); } }); final int day = (Integer.valueOf((barData.getXValue()).split("-")[1])); @@ -525,7 +538,8 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar, SwingUtilities.invokeLater(new Runnable() { @Override public void run() { - final FileRootNode d = new FileRootNode("Root", afs); + final FileRootNode d = new FileRootNode( + NbBundle.getMessage(this.getClass(), "Timeline.node.root"), afs); dataResultPanel.setNode(d); //set result viewer title path with the current date String dateString = ye.getYear() + "-" + (1 + me.getMonthInt()) + "-" + +de.dayNum; @@ -538,7 +552,13 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar, }); } bc.autosize(); - bc.setPrefWidth(FRAME_WIDTH); + bc.setPrefWidth(FRAME_WIDTH); + monthCounter++; + if (monthCounter==12) + { + fxStackPrevCharts.push(fxMonthView); + monthCounter=0; + } return bc; } @@ -620,7 +640,12 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar, return; } - int answer = JOptionPane.showConfirmDialog(mainFrame, "Timeline is out of date. Would you like to regenerate it?", "Select an option", JOptionPane.YES_NO_OPTION); + int answer = JOptionPane.showConfirmDialog(mainFrame, + NbBundle.getMessage(this.getClass(), + "Timeline.propChg.confDlg.timelineOOD.msg"), + NbBundle.getMessage(this.getClass(), + "Timeline.propChg.confDlg.timelineOOD.details"), + JOptionPane.YES_NO_OPTION); if (answer != JOptionPane.YES_OPTION) { return; } @@ -914,17 +939,35 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar, int prevYear = -1; YearEpoch ye = null; + while (scan.hasNextLine()) { String[] s = scan.nextLine().split(","); //1999-02-08T11:08:08Z, 78706, m..b, rrwxrwxrwx, 0, 0, 8355, /img... - // break the date into mon, day and year: Note that the ISO times are in GMT - String[] datetime = s[0].split("T"); //{1999-02-08, 11:08:08Z} - String[] date = datetime[0].split("-"); // {1999, 02, 08} + // break the date into year,month,day,hour,minute, and second: Note that the ISO times are in GMT + String delims = "[T:Z\\-]+"; //split by the delimiters + String[] date = s[0].split(delims); //{1999,02,08,11,08,08,...} + int year = Integer.valueOf(date[0]); int month = Integer.valueOf(date[1]) - 1; //Months are zero indexed: 1 = February, 6 = July, 11 = December int day = Integer.valueOf(date[2]); //Days are 1 indexed + int hour=Integer.valueOf(date[3]); + int minute=Integer.valueOf(date[4]); + int second=Integer.valueOf(date[5]); + + Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT")); //set calendar to GMT due to ISO format + calendar.set(year, month, day, hour, minute, second); + day=calendar.get(Calendar.DAY_OF_MONTH); // this is needed or else timezone change wont work. probably incorrect optimization by compiler + + //conversion to GMT + + if (!ContentUtils.getDisplayInLocalTime()) { + calendar.setTimeZone(TimeZone.getTimeZone("GMT")); + } + else{ + calendar.setTimeZone(TimeZone.getDefault());// local timezone OF the user. should be what the user SETS at startup + } - // get the object id out of the modified outpu + day=calendar.get(Calendar.DAY_OF_MONTH);//get the day which may be affected by timezone change long ObjId = Long.valueOf(s[4]); // when the year changes, create and add a new YearEpoch object to the list @@ -961,7 +1004,6 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar, // Get report path String bodyFilePath = moduleDir.getAbsolutePath() + java.io.File.separator + currentCase.getName() + "-" + datenotime + ".txt"; - // Run query to get all files final String filesAndDirs = "name != '.' " + "AND name != '..'"; @@ -1107,7 +1149,7 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar, public void performAction() { initTimeline(); } - + private void initTimeline() { if (!Case.existsCurrentCase()) { return; @@ -1123,10 +1165,11 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar, if (IngestManager.getDefault().isIngestRunning()) { int answer = JOptionPane.showConfirmDialog(new JFrame(), - "You are trying to generate a timeline before " - + "ingest has been completed. The timeline may be " - + "incomplete. Do you want to continue?", "Timeline", - JOptionPane.YES_NO_OPTION); + NbBundle.getMessage(this.getClass(), + "Timeline.initTimeline.confDlg.genBeforeIngest.msg"), + NbBundle.getMessage(this.getClass(), + "Timeline.initTimeline.confDlg.genBeforeIngest.deails"), + JOptionPane.YES_NO_OPTION); if (answer != JOptionPane.YES_OPTION) { return; } @@ -1177,7 +1220,7 @@ public class Timeline extends CallableSystemAction implements Presenter.Toolbar, @Override public String getName() { - return "Make Timeline (Beta)"; + return NbBundle.getMessage(this.getClass(), "Timeline.getName"); } @Override diff --git a/thunderbirdparser/nbproject/project.xml b/thunderbirdparser/nbproject/project.xml index 950a9d78b0..c31a584419 100644 --- a/thunderbirdparser/nbproject/project.xml +++ b/thunderbirdparser/nbproject/project.xml @@ -6,6 +6,14 @@ org.sleuthkit.autopsy.thunderbirdparser + + org.openide.util + + + + 8.25.1 + + org.sleuthkit.autopsy.core diff --git a/thunderbirdparser/src/org/sleuthkit/autopsy/thunderbirdparser/Bundle.properties b/thunderbirdparser/src/org/sleuthkit/autopsy/thunderbirdparser/Bundle.properties index c94d63cf4f..ddbf65245e 100644 --- a/thunderbirdparser/src/org/sleuthkit/autopsy/thunderbirdparser/Bundle.properties +++ b/thunderbirdparser/src/org/sleuthkit/autopsy/thunderbirdparser/Bundle.properties @@ -4,3 +4,24 @@ OpenIDE-Module-Long-Description=\ The module extracts Thunderbird e-mail folder hierarchy from the ingested disk image and posts the folder hierarchy and e-mail messages found as results. OpenIDE-Module-Name=ThunderbirdParser OpenIDE-Module-Short-Description=Thunderbird Parser e-mail extractor ingest module +MboxParser.parse.errMsg.failedToReadFile=Failed to read mbox file from disk. +MboxParser.parse.errMsg.couldntFindCharset=Couldn't find appropriate charset encoder. +MboxParser.parse.errMsg.failedToParseNMsgs=Failed to extract {0} email messages. +MboxParser.handleAttch.errMsg.failedToCreateOnDisk=Failed to extract attachment to disk\: {0} +MboxParser.handleAttch.failedWriteToDisk=Failed to extract attachment to disk\: {0} +PstParser.parse.errMsg.failedToParseNMsgs=Failed to extract {0} email messages. +PstParser.extractAttch.errMsg.failedToExtractToDisk=Failed to extract attachment to disk\: {0} +ThunderbirdMboxFileIngestModule.moduleName=Email Parser +ThunderbirdMboxFileIngestModule.hashDbModuleName=Hash Lookup +ThunderbirdMboxFileIngestModule.processPst.errMsg.outOfDiskSpace=Out of disk space. Can''t copy {0} to parse. +ThunderbirdMboxFileIngestModule.encryptionFileLevel=File-level Encryption +ThunderbirdMboxFileIngestModule.processPst.errProcFile.msg=Error while processing {0} +ThunderbirdMboxFileIngestModule.processPst.errProcFile.details=Only files from Outlook 2003 and later are supported. +ThunderbirdMboxFileIngestModule.processPst.errProcFile.msg2=Error while processing {0} +ThunderbirdMboxFileIngestModule.processMBox.errProcFile.msg=Error while processing {0} +ThunderbirdMboxFileIngestModule.processMBox.errProfFile.details=Out of disk space. Can't copy file to parse. +ThunderbirdMboxFileIngestModule.processMBox.errProcFile.msg2=Error while processing {0} +ThunderbirdMboxFileIngestModule.getDesc.text=This module detects and parses mbox and pst/ost files and populates email artifacts in the blackboard. +ThunderbirdMboxFileIngestModule.handleAttch.errMsg=Error processing {0} +ThunderbirdMboxFileIngestModule.handleAttch.errMsg.details=Failed to add attachment named {0} to the case. +ThunderbirdMboxFileIngestModule.notAvail=Not available diff --git a/thunderbirdparser/src/org/sleuthkit/autopsy/thunderbirdparser/Bundle_ja.properties b/thunderbirdparser/src/org/sleuthkit/autopsy/thunderbirdparser/Bundle_ja.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/thunderbirdparser/src/org/sleuthkit/autopsy/thunderbirdparser/MboxParser.java b/thunderbirdparser/src/org/sleuthkit/autopsy/thunderbirdparser/MboxParser.java index 05086b1ee6..f30b9ce27c 100755 --- a/thunderbirdparser/src/org/sleuthkit/autopsy/thunderbirdparser/MboxParser.java +++ b/thunderbirdparser/src/org/sleuthkit/autopsy/thunderbirdparser/MboxParser.java @@ -54,6 +54,7 @@ import org.apache.james.mime4j.message.DefaultMessageBuilder; import org.apache.james.mime4j.stream.MimeConfig; import org.apache.tika.parser.txt.CharsetDetector; import org.apache.tika.parser.txt.CharsetMatch; +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.ingest.IngestServices; /** @@ -116,14 +117,14 @@ import org.sleuthkit.autopsy.ingest.IngestServices; // Not the right encoder } catch (IOException ex) { logger.log(Level.WARNING, "couldn't find mbox file.", ex); - addErrorMessage("Failed to read mbox file from disk."); + addErrorMessage(NbBundle.getMessage(this.getClass(), "MboxParser.parse.errMsg.failedToReadFile")); return Collections.EMPTY_LIST; } } // If no encoders work, post an error message and return. if (mboxIterator == null || theEncoder == null) { - addErrorMessage("Couldn't find appropriate charset encoder."); + addErrorMessage(NbBundle.getMessage(this.getClass(), "MboxParser.parse.errMsg.couldntFindCharset")); return Collections.EMPTY_LIST; } @@ -142,7 +143,8 @@ import org.sleuthkit.autopsy.ingest.IngestServices; } if (failCount > 0) { - addErrorMessage("Failed to extract " + failCount + " email messages."); + addErrorMessage( + NbBundle.getMessage(this.getClass(), "MboxParser.parse.errMsg.failedToParseNMsgs", failCount)); } return emails; } @@ -255,7 +257,9 @@ import org.sleuthkit.autopsy.ingest.IngestServices; try { fos = new FileOutputStream(outPath); } catch (FileNotFoundException ex) { - addErrorMessage("Failed to extract attachment to disk: " + filename); + addErrorMessage( + NbBundle.getMessage(this.getClass(), + "MboxParser.handleAttch.errMsg.failedToCreateOnDisk", filename)); logger.log(Level.INFO, "Failed to create file output stream for: " + outPath, ex); return; } @@ -270,7 +274,7 @@ import org.sleuthkit.autopsy.ingest.IngestServices; } } catch (IOException ex) { logger.log(Level.INFO, "Failed to write mbox email attachment to disk.", ex); - addErrorMessage("Failed to extract attachment to disk: " + filename); + addErrorMessage(NbBundle.getMessage(this.getClass(), "MboxParser.handleAttch.failedWriteToDisk", filename)); return; } finally { try { diff --git a/thunderbirdparser/src/org/sleuthkit/autopsy/thunderbirdparser/PstParser.java b/thunderbirdparser/src/org/sleuthkit/autopsy/thunderbirdparser/PstParser.java index a43aef5dc9..566ab3eb48 100755 --- a/thunderbirdparser/src/org/sleuthkit/autopsy/thunderbirdparser/PstParser.java +++ b/thunderbirdparser/src/org/sleuthkit/autopsy/thunderbirdparser/PstParser.java @@ -33,6 +33,8 @@ import java.util.Collections; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.ingest.IngestServices; import static org.sleuthkit.autopsy.thunderbirdparser.ThunderbirdMboxFileIngestModule.getRelModuleOutputPath; import org.sleuthkit.datamodel.AbstractFile; @@ -80,7 +82,8 @@ class PstParser { pstFile = new PSTFile(file); failures = processFolder(pstFile.getRootFolder(), "\\", true); if (failures > 0) { - addErrorMessage("Failed to extract " + failures + " email messages."); + addErrorMessage( + NbBundle.getMessage(this.getClass(), "PstParser.parse.errMsg.failedToParseNMsgs", failures)); } return ParseResult.OK; } catch (PSTException | IOException ex) { @@ -219,7 +222,9 @@ class PstParser { attachment.setSize(attach.getFilesize()); email.addAttachment(attachment); } catch (PSTException | IOException ex) { - addErrorMessage("Failed to extract attachment to disk: " + filename); + addErrorMessage( + NbBundle.getMessage(this.getClass(), "PstParser.extractAttch.errMsg.failedToExtractToDisk", + filename)); logger.log(Level.WARNING, "Failed to extract attachment from pst file.", ex); } } diff --git a/thunderbirdparser/src/org/sleuthkit/autopsy/thunderbirdparser/ThunderbirdMboxFileIngestModule.java b/thunderbirdparser/src/org/sleuthkit/autopsy/thunderbirdparser/ThunderbirdMboxFileIngestModule.java index 82a4ffcb6e..b6ae70ba60 100644 --- a/thunderbirdparser/src/org/sleuthkit/autopsy/thunderbirdparser/ThunderbirdMboxFileIngestModule.java +++ b/thunderbirdparser/src/org/sleuthkit/autopsy/thunderbirdparser/ThunderbirdMboxFileIngestModule.java @@ -23,6 +23,8 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; + +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.services.FileManager; import org.sleuthkit.autopsy.coreutils.Logger; @@ -53,8 +55,10 @@ public class ThunderbirdMboxFileIngestModule extends IngestModuleAbstractFile { private static final Logger logger = Logger.getLogger(ThunderbirdMboxFileIngestModule.class.getName()); private static ThunderbirdMboxFileIngestModule instance = null; private IngestServices services; - private static final String MODULE_NAME = "Email Parser"; - private final String hashDBModuleName = "Hash Lookup"; + private static final String MODULE_NAME = NbBundle.getMessage(ThunderbirdMboxFileIngestModule.class, + "ThunderbirdMboxFileIngestModule.moduleName"); + private final String hashDBModuleName = NbBundle.getMessage(ThunderbirdMboxFileIngestModule.class, + "ThunderbirdMboxFileIngestModule.hashDbModuleName"); final public static String MODULE_VERSION = Version.getVersion(); private int messageId = 0; private FileManager fileManager; @@ -132,7 +136,10 @@ public class ThunderbirdMboxFileIngestModule extends IngestModuleAbstractFile { if (abstractFile.getSize() >= services.getFreeDiskSpace()) { logger.log(Level.WARNING, "Not enough disk space to write file to disk."); - IngestMessage msg = IngestMessage.createErrorMessage(messageId++, this, getName(), "Out of disk space. Can't copy " + abstractFile.getName() + " to parse."); + IngestMessage msg = IngestMessage.createErrorMessage(messageId++, this, getName(), + NbBundle.getMessage(this.getClass(), + "ThunderbirdMboxFileIngestModule.processPst.errMsg.outOfDiskSpace", + abstractFile.getName())); services.postMessage(msg); return ProcessResult.OK; } @@ -155,14 +162,18 @@ public class ThunderbirdMboxFileIngestModule extends IngestModuleAbstractFile { try { BlackboardArtifact generalInfo = abstractFile.getGenInfoArtifact(); generalInfo.addAttribute(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_ENCRYPTION_DETECTED.getTypeID(), - MODULE_NAME, "File-level Encryption")); + MODULE_NAME, + NbBundle.getMessage(this.getClass(), "ThunderbirdMboxFileIngestModule.encryptionFileLevel"))); } catch (TskCoreException ex) { logger.log(Level.INFO, "Failed to add encryption attribute to file: " + abstractFile.getName()); } } else { // parsing error: log message - postErrorMessage("Error while processing " + abstractFile.getName(), - "Only files from Outlook 2003 and later are supported."); + postErrorMessage( + NbBundle.getMessage(this.getClass(), "ThunderbirdMboxFileIngestModule.processPst.errProcFile.msg", + abstractFile.getName()), + NbBundle.getMessage(this.getClass(), + "ThunderbirdMboxFileIngestModule.processPst.errProcFile.details")); logger.log(Level.INFO, "PSTParser failed to parse " + abstractFile.getName()); return ProcessResult.ERROR; } @@ -173,7 +184,9 @@ public class ThunderbirdMboxFileIngestModule extends IngestModuleAbstractFile { String errors = parser.getErrors(); if (errors.isEmpty() == false) { - postErrorMessage("Error while processing " + abstractFile.getName(), errors); + postErrorMessage( + NbBundle.getMessage(this.getClass(), "ThunderbirdMboxFileIngestModule.processPst.errProcFile.msg2", + abstractFile.getName()), errors); } return ProcessResult.OK; @@ -206,8 +219,11 @@ public class ThunderbirdMboxFileIngestModule extends IngestModuleAbstractFile { if (abstractFile.getSize() >= services.getFreeDiskSpace()) { logger.log(Level.WARNING, "Not enough disk space to write file to disk."); - postErrorMessage("Error while processing " + abstractFile.getName(), - "Out of disk space. Can't copy file to parse."); + postErrorMessage( + NbBundle.getMessage(this.getClass(), "ThunderbirdMboxFileIngestModule.processMBox.errProcFile.msg", + abstractFile.getName()), + NbBundle.getMessage(this.getClass(), + "ThunderbirdMboxFileIngestModule.processMBox.errProfFile.details")); return ProcessResult.OK; } @@ -229,7 +245,9 @@ public class ThunderbirdMboxFileIngestModule extends IngestModuleAbstractFile { String errors = parser.getErrors(); if (errors.isEmpty() == false) { - postErrorMessage("Error while processing " + abstractFile.getName(), errors); + postErrorMessage( + NbBundle.getMessage(this.getClass(), "ThunderbirdMboxFileIngestModule.processMBox.errProcFile.msg2", + abstractFile.getName()), errors); } return ProcessResult.OK; @@ -275,7 +293,7 @@ public class ThunderbirdMboxFileIngestModule extends IngestModuleAbstractFile { @Override public String getDescription() { - return "This module detects and parses mbox and pst/ost files and populates email artifacts in the blackboard."; + return NbBundle.getMessage(this.getClass(), "ThunderbirdMboxFileIngestModule.getDesc.text"); } @Override @@ -347,8 +365,11 @@ public class ThunderbirdMboxFileIngestModule extends IngestModuleAbstractFile { MODULE_NAME, MODULE_VERSION, ""); files.add(df); } catch (TskCoreException ex) { - postErrorMessage("Error processing " + abstractFile.getName(), - "Failed to add attachment named " + filename + " to the case."); + postErrorMessage( + NbBundle.getMessage(this.getClass(), "ThunderbirdMboxFileIngestModule.handleAttch.errMsg", + abstractFile.getName()), + NbBundle.getMessage(this.getClass(), + "ThunderbirdMboxFileIngestModule.handleAttch.errMsg.details", filename)); logger.log(Level.INFO, "", ex); } } @@ -399,7 +420,8 @@ public class ThunderbirdMboxFileIngestModule extends IngestModuleAbstractFile { if (rtf.isEmpty() == false) { bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_EMAIL_CONTENT_RTF.getTypeID(), MODULE_NAME, rtf)); } - bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_MSG_ID.getTypeID(), MODULE_NAME, ((id < 0L) ? "Not available" : String.valueOf(id)))); + bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_MSG_ID.getTypeID(), MODULE_NAME, ((id < 0L) ? NbBundle + .getMessage(this.getClass(), "ThunderbirdMboxFileIngestModule.notAvail") : String.valueOf(id)))); if (subject.isEmpty() == false) { bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_SUBJECT.getTypeID(), MODULE_NAME, subject)); }