More Translation Support

This commit is contained in:
Konloch 2021-07-07 03:39:29 -07:00
parent 29c816c13e
commit 820a086a93
11 changed files with 101 additions and 17 deletions

View file

@ -759,6 +759,10 @@ public class MainViewerGUI extends JFrame
JMenuItem waitIcon = waitIcons.get(0); JMenuItem waitIcon = waitIcons.get(0);
waitIcons.remove(0); waitIcons.remove(0);
rootMenu.remove(waitIcon); rootMenu.remove(waitIcon);
//re-enable the Refresh Button incase it gets stuck
if(waitIcons.isEmpty() && !workPane.refreshClass.isEnabled())
workPane.refreshClass.setEnabled(true);
} }
rootMenu.updateUI(); rootMenu.updateUI();

View file

@ -30,11 +30,11 @@ import javax.swing.JInternalFrame;
public abstract class VisibleComponent extends JInternalFrame public abstract class VisibleComponent extends JInternalFrame
{ {
private static final long serialVersionUID = -6453413772343643526L;
public VisibleComponent(final String title) public VisibleComponent(final String title)
{ {
super(title, false, false, false, false); super(title, false, false, false, false);
this.setFrameIcon(null); this.setFrameIcon(null);
} }
private static final long serialVersionUID = -6453413772343643526L;
} }

View file

@ -32,6 +32,7 @@ import the.bytecode.club.bytecodeviewer.BytecodeViewer;
import the.bytecode.club.bytecodeviewer.gui.components.VisibleComponent; import the.bytecode.club.bytecodeviewer.gui.components.VisibleComponent;
import the.bytecode.club.bytecodeviewer.translation.Translation; import the.bytecode.club.bytecodeviewer.translation.Translation;
import the.bytecode.club.bytecodeviewer.translation.components.TranslatedJCheckBox; import the.bytecode.club.bytecodeviewer.translation.components.TranslatedJCheckBox;
import the.bytecode.club.bytecodeviewer.translation.components.TranslatedVisibleComponent;
import the.bytecode.club.bytecodeviewer.util.FileContainer; import the.bytecode.club.bytecodeviewer.util.FileContainer;
import the.bytecode.club.bytecodeviewer.util.FileDrop; import the.bytecode.club.bytecodeviewer.util.FileDrop;
import the.bytecode.club.bytecodeviewer.util.LazyNameUtil; import the.bytecode.club.bytecodeviewer.util.LazyNameUtil;
@ -63,7 +64,7 @@ import the.bytecode.club.bytecodeviewer.util.LazyNameUtil;
* @since 09/26/2011 * @since 09/26/2011
*/ */
public class ResourceListPane extends VisibleComponent implements FileDrop.Listener public class ResourceListPane extends TranslatedVisibleComponent implements FileDrop.Listener
{ {
public final JPopupMenu rightClickMenu = new JPopupMenu(); public final JPopupMenu rightClickMenu = new JPopupMenu();
public final JCheckBox exact = new TranslatedJCheckBox("Exact", Translation.EXACT); public final JCheckBox exact = new TranslatedJCheckBox("Exact", Translation.EXACT);
@ -116,11 +117,10 @@ public class ResourceListPane extends VisibleComponent implements FileDrop.Liste
public ResourceListPane() public ResourceListPane()
{ {
super("ClassNavigation"); super("Files", Translation.FILES);
tree.setRootVisible(false); tree.setRootVisible(false);
tree.setShowsRootHandles(true); tree.setShowsRootHandles(true);
quickSearch.setForeground(Color.gray); quickSearch.setForeground(Color.gray);
setTitle("Files");
attachTreeListeners(); attachTreeListeners();
attachQuickSearchListeners(); attachQuickSearchListeners();

View file

@ -1,6 +1,7 @@
package the.bytecode.club.bytecodeviewer.gui.resourcelist; package the.bytecode.club.bytecodeviewer.gui.resourcelist;
import the.bytecode.club.bytecodeviewer.gui.util.StringMetricsUtil; import the.bytecode.club.bytecodeviewer.gui.util.StringMetricsUtil;
import the.bytecode.club.bytecodeviewer.translation.TranslatedStrings;
import javax.swing.*; import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultMutableTreeNode;
@ -38,7 +39,7 @@ public class ResourceTree extends JTree
g.setColor(new Color(0, 0, 0, 100)); g.setColor(new Color(0, 0, 0, 100));
g.fillRect(0, 0, getWidth(), getHeight()); g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(Color.white); g.setColor(Color.white);
String s = "Drag class/jar/zip/APK/DEX here"; String s = TranslatedStrings.DRAG_CLASS_JAR.toString();
g.drawString(s, g.drawString(s,
((int) ((getWidth() / 2) - (m.getWidth(s) / 2))), ((int) ((getWidth() / 2) - (m.getWidth(s) / 2))),
getHeight() / 2); getHeight() / 2);

View file

@ -21,7 +21,9 @@ import the.bytecode.club.bytecodeviewer.gui.resourceviewer.viewer.ResourceViewer
import the.bytecode.club.bytecodeviewer.searching.BackgroundSearchThread; import the.bytecode.club.bytecodeviewer.searching.BackgroundSearchThread;
import the.bytecode.club.bytecodeviewer.searching.SearchResultNotifier; import the.bytecode.club.bytecodeviewer.searching.SearchResultNotifier;
import the.bytecode.club.bytecodeviewer.translation.Translation; import the.bytecode.club.bytecodeviewer.translation.Translation;
import the.bytecode.club.bytecodeviewer.translation.components.TranslatedJButton;
import the.bytecode.club.bytecodeviewer.translation.components.TranslatedJCheckBox; import the.bytecode.club.bytecodeviewer.translation.components.TranslatedJCheckBox;
import the.bytecode.club.bytecodeviewer.translation.components.TranslatedVisibleComponent;
import the.bytecode.club.bytecodeviewer.util.FileContainer; import the.bytecode.club.bytecodeviewer.util.FileContainer;
/*************************************************************************** /***************************************************************************
@ -51,7 +53,7 @@ import the.bytecode.club.bytecodeviewer.util.FileContainer;
*/ */
@SuppressWarnings("rawtypes") @SuppressWarnings("rawtypes")
public class SearchBoxPane extends VisibleComponent public class SearchBoxPane extends TranslatedVisibleComponent
{ {
public static final SearchRadius[] SEARCH_RADII = SearchRadius.values(); public static final SearchRadius[] SEARCH_RADII = SearchRadius.values();
public static final SearchType[] SEARCH_TYPES = SearchType.values(); public static final SearchType[] SEARCH_TYPES = SearchType.values();
@ -64,13 +66,13 @@ public class SearchBoxPane extends VisibleComponent
public SearchType searchType = null; public SearchType searchType = null;
public final JComboBox searchRadiusBox; public final JComboBox searchRadiusBox;
public JButton search = new JButton("Search"); public JButton search = new TranslatedJButton("Search", Translation.SEARCH);
public BackgroundSearchThread performSearchThread; public BackgroundSearchThread performSearchThread;
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public SearchBoxPane() public SearchBoxPane()
{ {
super("Search"); super("Search", Translation.SEARCH);
final JPanel optionPanel = new JPanel(new BorderLayout()); final JPanel optionPanel = new JPanel(new BorderLayout());
final JPanel searchRadiusOpt = new JPanel(new BorderLayout()); final JPanel searchRadiusOpt = new JPanel(new BorderLayout());

View file

@ -18,6 +18,9 @@ import the.bytecode.club.bytecodeviewer.gui.components.VisibleComponent;
import the.bytecode.club.bytecodeviewer.gui.resourceviewer.viewer.ClassViewer; import the.bytecode.club.bytecodeviewer.gui.resourceviewer.viewer.ClassViewer;
import the.bytecode.club.bytecodeviewer.gui.resourceviewer.viewer.FileViewer; import the.bytecode.club.bytecodeviewer.gui.resourceviewer.viewer.FileViewer;
import the.bytecode.club.bytecodeviewer.gui.resourceviewer.viewer.ResourceViewer; import the.bytecode.club.bytecodeviewer.gui.resourceviewer.viewer.ResourceViewer;
import the.bytecode.club.bytecodeviewer.translation.Translation;
import the.bytecode.club.bytecodeviewer.translation.components.TranslatedJButton;
import the.bytecode.club.bytecodeviewer.translation.components.TranslatedVisibleComponent;
import the.bytecode.club.bytecodeviewer.util.FileContainer; import the.bytecode.club.bytecodeviewer.util.FileContainer;
import static the.bytecode.club.bytecodeviewer.Constants.BLOCK_TAB_MENU; import static the.bytecode.club.bytecodeviewer.Constants.BLOCK_TAB_MENU;
@ -47,7 +50,7 @@ import static the.bytecode.club.bytecodeviewer.Constants.BLOCK_TAB_MENU;
* @author WaterWolf * @author WaterWolf
* @since 09/26/2011 * @since 09/26/2011
*/ */
public class WorkPaneMainComponent extends VisibleComponent public class WorkPaneMainComponent extends TranslatedVisibleComponent
{ {
public final JTabbedPane tabs; public final JTabbedPane tabs;
public final JPanel buttonPanel; public final JPanel buttonPanel;
@ -56,8 +59,7 @@ public class WorkPaneMainComponent extends VisibleComponent
public WorkPaneMainComponent() public WorkPaneMainComponent()
{ {
super("WorkPanel"); super("Workspace", Translation.WORK_SPACE);
setTitle("Work Space");
this.tabs = new JTabbedPane(); this.tabs = new JTabbedPane();
@ -88,6 +90,7 @@ public class WorkPaneMainComponent extends VisibleComponent
tabs.remove(1); tabs.remove(1);
} }
}); });
tabs.addMouseListener(new MouseListener() tabs.addMouseListener(new MouseListener()
{ {
@Override @Override
@ -139,16 +142,17 @@ public class WorkPaneMainComponent extends VisibleComponent
buttonPanel = new JPanel(new FlowLayout()); buttonPanel = new JPanel(new FlowLayout());
refreshClass = new JButton("Refresh"); refreshClass = new TranslatedJButton("Refresh", Translation.REFRESH);
refreshClass.addActionListener((event)->{ refreshClass.addActionListener((event)->
{
refreshClass.setEnabled(false); refreshClass.setEnabled(false);
Thread t = new Thread(() -> new WorkPaneRefresh(event).run(), "Refresh"); Thread t = new Thread(() -> new WorkPaneRefresh(event).run(), "Refresh");
t.start(); t.start();
}); });
buttonPanel.add(refreshClass); buttonPanel.add(refreshClass);
buttonPanel.setVisible(false); buttonPanel.setVisible(false);
getContentPane().add(buttonPanel, BorderLayout.SOUTH); getContentPane().add(buttonPanel, BorderLayout.SOUTH);
tabs.addContainerListener(new TabRemovalEvent()); tabs.addContainerListener(new TabRemovalEvent());

View file

@ -102,8 +102,8 @@ public enum Language
//check if translation key has been assigned to a component, //check if translation key has been assigned to a component,
//on fail print an error alerting the devs //on fail print an error alerting the devs
if(translation.getTranslatedComponent().runOnUpdate.isEmpty() if(translation.getTranslatedComponent().runOnUpdate.isEmpty())
&& TranslatedStrings.nameSet.contains(translation.name())) //&& TranslatedStrings.nameSet.contains(translation.name()))
{ {
System.err.println("Translation Reference " + translation.name() + " is missing component attachment, skipping..."); System.err.println("Translation Reference " + translation.name() + " is missing component attachment, skipping...");
continue; continue;

View file

@ -29,6 +29,7 @@ public enum TranslatedStrings
DISASSEMBLER("Disassembler"), DISASSEMBLER("Disassembler"),
SUGGESTED_FIX_DECOMPILER_ERROR("Suggested Fix: Click refresh class, if it fails again try another decompiler."), SUGGESTED_FIX_DECOMPILER_ERROR("Suggested Fix: Click refresh class, if it fails again try another decompiler."),
SUGGESTED_FIX_COMPILER_ERROR("Suggested Fix: Try View>Pane>Krakatau>Bytecode and enable Editable."), SUGGESTED_FIX_COMPILER_ERROR("Suggested Fix: Try View>Pane>Krakatau>Bytecode and enable Editable."),
DRAG_CLASS_JAR("Drag class/jar/zip/APK/DEX here"),
; ;
public static final HashSet<String> nameSet = new HashSet<>(); public static final HashSet<String> nameSet = new HashSet<>();

View file

@ -0,0 +1,36 @@
package the.bytecode.club.bytecodeviewer.translation.components;
import the.bytecode.club.bytecodeviewer.translation.TranslatedComponent;
import the.bytecode.club.bytecodeviewer.translation.Translation;
import javax.swing.*;
/**
* @author Konloch
* @since 7/7/2021
*/
public class TranslatedJButton extends JButton
{
private final TranslatedComponent component;
public TranslatedJButton(String text, Translation translation)
{
super(text);
if(translation != null)
{
this.component = translation.getTranslatedComponent();
this.component.runOnUpdate.add(this::updateText);
}
else
{
this.component = null;
}
}
public void updateText()
{
if(component != null)
setText(component.value);
}
}

View file

@ -0,0 +1,35 @@
package the.bytecode.club.bytecodeviewer.translation.components;
import the.bytecode.club.bytecodeviewer.gui.components.VisibleComponent;
import the.bytecode.club.bytecodeviewer.translation.TranslatedComponent;
import the.bytecode.club.bytecodeviewer.translation.Translation;
/**
* @author Konloch
* @since 7/7/2021
*/
public class TranslatedVisibleComponent extends VisibleComponent
{
private final TranslatedComponent component;
public TranslatedVisibleComponent(String title, Translation translation)
{
super(title);
if(translation != null)
{
this.component = translation.getTranslatedComponent();
this.component.runOnUpdate.add(this::updateText);
}
else
{
this.component = null;
}
}
public void updateText()
{
if(component != null)
setTitle(component.value);
}
}

View file

@ -107,6 +107,7 @@
"ERROR": "Error", "ERROR": "Error",
"SUGGESTED_FIX_DECOMPILER_ERROR": "Suggested Fix: Click refresh class, if it fails again try another decompiler.", "SUGGESTED_FIX_DECOMPILER_ERROR": "Suggested Fix: Click refresh class, if it fails again try another decompiler.",
"SUGGESTED_FIX_COMPILER_ERROR": "Suggested Fix: Try View>Pane>Krakatau>Bytecode and enable Editable.", "SUGGESTED_FIX_COMPILER_ERROR": "Suggested Fix: Try View>Pane>Krakatau>Bytecode and enable Editable.",
"DRAG_CLASS_JAR": "Drag class/jar/zip/APK/DEX here",
"FILES": "Files", "FILES": "Files",
"QUICK_FILE_SEARCH_NO_FILE_EXTENSION": "Quick file search (no file extension)", "QUICK_FILE_SEARCH_NO_FILE_EXTENSION": "Quick file search (no file extension)",