diff --git a/diylc/diylc-core/src/org/diylc/presenter/update.xml b/diylc/diylc-core/src/org/diylc/presenter/update.xml
index c810356a..94ccd301 100644
--- a/diylc/diylc-core/src/org/diylc/presenter/update.xml
+++ b/diylc/diylc-core/src/org/diylc/presenter/update.xml
@@ -3089,6 +3089,10 @@
IMPROVEMENT
Dismissing the closing confirmation dialog using the "X" button should behave the same as selecting "Cancel"
+
+
+ IMPROVEMENT
+ Apply translation to the context menu
https://github.com/bancika/diy-layout-creator/releases
diff --git a/diylc/diylc-library/lib/diylc-core.jar b/diylc/diylc-library/lib/diylc-core.jar
index 57c06acc..d8f357b9 100644
Binary files a/diylc/diylc-library/lib/diylc-core.jar and b/diylc/diylc-library/lib/diylc-core.jar differ
diff --git a/diylc/diylc-swing/dict.txt b/diylc/diylc-swing/dict.txt
index 955f2e8b..abb8aad5 100644
--- a/diylc/diylc-swing/dict.txt
+++ b/diylc/diylc-swing/dict.txt
@@ -24,6 +24,7 @@
5PDT (Center OFF)
AWG
And
+Apply Variant
C-B-E BJT
D-G-S JFET
D-G-S MOSFET
@@ -44,6 +45,7 @@ G-D-S JFET
G-D-S MOSFET
G-S-D JFET
G-S-D MOSFET
+Jezik
Lin
Loadline Editor
Log
@@ -63,7 +65,10 @@ SMD
SPDT
SPDT (Center OFF)
SPST
+Save as Building Block
+Select
Srpski
+Unlock
Xnor
Xor
cm
diff --git a/diylc/diylc-swing/lib/diylc-core.jar b/diylc/diylc-swing/lib/diylc-core.jar
index 57c06acc..d8f357b9 100644
Binary files a/diylc/diylc-swing/lib/diylc-core.jar and b/diylc/diylc-swing/lib/diylc-core.jar differ
diff --git a/diylc/diylc-swing/library/main.jar b/diylc/diylc-swing/library/main.jar
index f3bf38f7..3bfa6177 100644
Binary files a/diylc/diylc-swing/library/main.jar and b/diylc/diylc-swing/library/main.jar differ
diff --git a/diylc/diylc-swing/src/org/diylc/swing/gui/TranslatedMenu.java b/diylc/diylc-swing/src/org/diylc/swing/gui/TranslatedMenu.java
new file mode 100644
index 00000000..66571384
--- /dev/null
+++ b/diylc/diylc-swing/src/org/diylc/swing/gui/TranslatedMenu.java
@@ -0,0 +1,41 @@
+/*
+ *
+ * DIY Layout Creator (DIYLC). Copyright (c) 2009-2018 held jointly by the individual authors.
+ *
+ * This file is part of DIYLC.
+ *
+ * DIYLC is free software: you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License as published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * DIYLC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
+ * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+ * Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with DIYLC. If not, see
+ * .
+ */
+package org.diylc.swing.gui;
+
+import javax.swing.Action;
+import javax.swing.JMenu;
+import javax.swing.JMenuItem;
+
+import org.diylc.lang.LangUtil;
+
+public class TranslatedMenu extends JMenu {
+
+ private static final long serialVersionUID = 1L;
+
+ public TranslatedMenu(String name) {
+ super(LangUtil.translate(name));
+ }
+
+ @Override
+ public JMenuItem add(Action action) {
+ String name = (String) action.getValue(Action.NAME);
+ if (name != null)
+ action.putValue(Action.NAME, LangUtil.translate(name));
+ return super.add(action);
+ }
+}
diff --git a/diylc/diylc-swing/src/org/diylc/swing/gui/TranslatedPopupMenu.java b/diylc/diylc-swing/src/org/diylc/swing/gui/TranslatedPopupMenu.java
new file mode 100644
index 00000000..b6b9f825
--- /dev/null
+++ b/diylc/diylc-swing/src/org/diylc/swing/gui/TranslatedPopupMenu.java
@@ -0,0 +1,37 @@
+/*
+ *
+ * DIY Layout Creator (DIYLC). Copyright (c) 2009-2018 held jointly by the individual authors.
+ *
+ * This file is part of DIYLC.
+ *
+ * DIYLC is free software: you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License as published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * DIYLC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
+ * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+ * Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with DIYLC. If not, see
+ * .
+ */
+package org.diylc.swing.gui;
+
+import javax.swing.Action;
+import javax.swing.JMenuItem;
+import javax.swing.JPopupMenu;
+
+import org.diylc.lang.LangUtil;
+
+public class TranslatedPopupMenu extends JPopupMenu {
+
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public JMenuItem add(Action action) {
+ String name = (String) action.getValue(Action.NAME);
+ if (name != null)
+ action.putValue(Action.NAME, LangUtil.translate(name));
+ return super.add(action);
+ }
+}
diff --git a/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPlugin.java b/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPlugin.java
index 34f2c7d4..5107bd33 100644
--- a/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPlugin.java
+++ b/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPlugin.java
@@ -50,7 +50,6 @@ import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import org.apache.log4j.Logger;
-import org.diylc.appframework.miscutils.ConfigurationManager;
import org.diylc.appframework.miscutils.IConfigListener;
import org.diylc.appframework.miscutils.IConfigurationManager;
import org.diylc.appframework.miscutils.Utils;
@@ -67,6 +66,8 @@ import org.diylc.core.measures.SizeUnit;
import org.diylc.images.IconLoader;
import org.diylc.swing.ActionFactory;
import org.diylc.swing.ISwingUI;
+import org.diylc.swing.gui.TranslatedMenu;
+import org.diylc.swing.gui.TranslatedPopupMenu;
import org.diylc.swing.plugins.edit.ComponentTransferable;
import org.diylc.swing.plugins.file.ProjectDrawingProvider;
import org.diylc.swingframework.ruler.IRulerListener;
@@ -452,7 +453,7 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner {
public JPopupMenu getPopupMenu() {
if (popupMenu == null) {
- popupMenu = new JPopupMenu();
+ popupMenu = new TranslatedPopupMenu();
popupMenu.add(getSelectionMenu());
popupMenu.addSeparator();
popupMenu.add(getCutAction());
@@ -480,7 +481,7 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner {
public JMenu getSelectionMenu() {
if (selectionMenu == null) {
- selectionMenu = new JMenu("Select");
+ selectionMenu = new TranslatedMenu("Select");
selectionMenu.setIcon(IconLoader.ElementsSelection.getIcon());
}
return selectionMenu;
@@ -488,7 +489,7 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner {
public JMenu getExpandMenu() {
if (expandMenu == null) {
- expandMenu = new JMenu("Expand Selection");
+ expandMenu = new TranslatedMenu("Expand Selection");
expandMenu.setIcon(IconLoader.BranchAdd.getIcon());
expandMenu.add(getExpandSelectionAllAction());
expandMenu.add(getExpandSelectionImmediateAction());
@@ -499,7 +500,7 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner {
public JMenu getLockMenu() {
if (lockMenu == null) {
- lockMenu = new JMenu("Lock");
+ lockMenu = new TranslatedMenu("Lock");
lockMenu.setIcon(IconLoader.Lock.getIcon());
}
return lockMenu;
@@ -507,7 +508,7 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner {
public JMenu getUnlockMenu() {
if (unlockMenu == null) {
- unlockMenu = new JMenu("Unlock");
+ unlockMenu = new TranslatedMenu("Unlock");
unlockMenu.setIcon(IconLoader.Unlock.getIcon());
}
return unlockMenu;
@@ -515,7 +516,7 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner {
public JMenu getTransformMenu() {
if (transformMenu == null) {
- transformMenu = new JMenu("Transform Selection");
+ transformMenu = new TranslatedMenu("Transform Selection");
transformMenu.setIcon(IconLoader.MagicWand.getIcon());
transformMenu.add(getRotateClockwiseAction());
transformMenu.add(getRotateCounterclockwiseAction());
@@ -536,7 +537,7 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner {
public JMenu getApplyTemplateMenu() {
if (applyTemplateMenu == null) {
- applyTemplateMenu = new JMenu("Apply Variant");
+ applyTemplateMenu = new TranslatedMenu("Apply Variant");
applyTemplateMenu.setIcon(IconLoader.BriefcaseInto.getIcon());
}
return applyTemplateMenu;