diff --git a/diylc/diylc-core/src/org/diylc/common/IPlugInPort.java b/diylc/diylc-core/src/org/diylc/common/IPlugInPort.java index 880b06f4..284a2ab9 100644 --- a/diylc/diylc-core/src/org/diylc/common/IPlugInPort.java +++ b/diylc/diylc-core/src/org/diylc/common/IPlugInPort.java @@ -92,7 +92,8 @@ public interface IPlugInPort extends ISelectionProcessor, IMouseProcessor, IKeyP public static final String SNAP_TO_COMPONENTS = "Components"; public static final String SNAP_TO_DEFAULT = SNAP_TO_GRID; - public static final String LANGUAGE = "language"; + public static final String LANGUAGE = "language"; + public static final String LANGUAGE_DEFAULT = "English"; public static final int DND_TOGGLE_STICKY = 0x1; public static final int DND_TOGGLE_SNAP = 0x40000000; diff --git a/diylc/diylc-core/src/org/diylc/lang/TranslateUtil.java b/diylc/diylc-core/src/org/diylc/lang/TranslateUtil.java index f10795c7..ef828285 100644 --- a/diylc/diylc-core/src/org/diylc/lang/TranslateUtil.java +++ b/diylc/diylc-core/src/org/diylc/lang/TranslateUtil.java @@ -81,7 +81,7 @@ public class TranslateUtil { } public static void configure() { - String language = ConfigurationManager.getInstance().readString(IPlugInPort.LANGUAGE, "English"); + String language = ConfigurationManager.getInstance().readString(IPlugInPort.LANGUAGE, IPlugInPort.LANGUAGE_DEFAULT); if (language != null) load(language); } @@ -128,7 +128,8 @@ public class TranslateUtil { public static List getAvailableLanguages() { try (Stream walk = Files.walk(Paths.get(LANG_DIR))) { - return walk.filter(Files::isRegularFile).map(x -> x.toString()).collect(Collectors.toList()); + return walk.filter(Files::isRegularFile).map(x -> x.getFileName().toString().replaceFirst("[.][^.]+$", "")) + .collect(Collectors.toList()); } catch (IOException e) { LOG.error("Error fetching available languages"); return null; diff --git a/diylc/diylc-swing/dict.txt b/diylc/diylc-swing/dict.txt index 08b5f746..bc86dfa9 100644 --- a/diylc/diylc-swing/dict.txt +++ b/diylc/diylc-swing/dict.txt @@ -22,12 +22,7 @@ 5 band 5PDT 5PDT (Center OFF) -API de complemento -API de componentes AWG -Acceder a archivos de usuario -Acerca de -Actualizaciones recientes C-B-E BJT D-G-S JFET D-G-S MOSFET @@ -41,14 +36,13 @@ DP5T DPDT DPDT (Center OFF) E-B-C BJT -Enviar un error +English +French G-D-S JFET G-D-S MOSFET G-S-D JFET G-S-D MOSFET -Haz una donación -Help -Manual de usuario +Language NPN Nor Not @@ -56,19 +50,21 @@ Or PAF PCB PNP -Preguntas más frecuentes Project Cloud S-G-D JFET S-G-D MOSFET SPDT SPDT (Center OFF) SPST -Test +Spanish Xnor Xor cm ft in +lang\English.txt +lang\French.txt +lang\Spanish.txt mm px yd diff --git a/diylc/diylc-swing/src/org/diylc/images/IconLoader.java b/diylc/diylc-swing/src/org/diylc/images/IconLoader.java index 97c4a1b5..d1f444fb 100644 --- a/diylc/diylc-swing/src/org/diylc/images/IconLoader.java +++ b/diylc/diylc-swing/src/org/diylc/images/IconLoader.java @@ -66,7 +66,7 @@ public enum IconLoader { Node("node.png"), Web("web.png"), Guitar("guitar.png"), Scientist("scientist.png"), StarGrey("star_grey.png"), StarBlue("star_blue.png"), JarBeanInto("jar_bean_into.png"), GraphEdgeDirected("graph_edge_directed.png"), LaserPointer("laserpointer.png"), TapeMeasure("tape_measure1.png"), Elements("elements1.png"), GraphNodes("graph_nodes.png"), User("user1.png"), FlexibleLeads("flexible_leads.png"), Pads("pads.png"), Lock("lock.png"), - Unlock("lock_open.png"); + Unlock("lock_open.png"), Earth("earth.png"); protected String name; diff --git a/diylc/diylc-swing/src/org/diylc/images/earth.png b/diylc/diylc-swing/src/org/diylc/images/earth.png new file mode 100644 index 00000000..a5517db6 Binary files /dev/null and b/diylc/diylc-swing/src/org/diylc/images/earth.png differ diff --git a/diylc/diylc-swing/src/org/diylc/swing/plugins/config/ConfigPlugin.java b/diylc/diylc-swing/src/org/diylc/swing/plugins/config/ConfigPlugin.java index 4ee311c5..4d9412d4 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/plugins/config/ConfigPlugin.java +++ b/diylc/diylc-swing/src/org/diylc/swing/plugins/config/ConfigPlugin.java @@ -21,14 +21,18 @@ import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.util.EnumSet; +import java.util.List; import org.apache.log4j.Logger; +import org.diylc.appframework.miscutils.ConfigurationManager; +import org.diylc.appframework.miscutils.IConfigListener; import org.diylc.common.EventType; import org.diylc.common.IPlugIn; import org.diylc.common.IPlugInPort; import org.diylc.components.autocreate.SolderPadAutoCreator; import org.diylc.core.Theme; import org.diylc.images.IconLoader; +import org.diylc.lang.TranslateUtil; import org.diylc.swing.ActionFactory; import org.diylc.swing.ISwingUI; @@ -52,6 +56,7 @@ public class ConfigPlugin implements IPlugIn { public static final String COMPONENT_BROWSER = "componentBrowser"; public static final String SEARCHABLE_TREE = "Searchable Tree"; public static final String TABBED_TOOLBAR = "Tabbed Toolbar"; + private static final String LANGUAGE_MENU = "Language"; private ISwingUI swingUI; @@ -132,6 +137,21 @@ public class ConfigPlugin implements IPlugIn { swingUI.injectMenuAction( ActionFactory.getInstance() .createConfigAction(plugInPort, "Sticky Points", IPlugInPort.STICKY_POINTS_KEY, true), CONFIG_MENU); + + try { + List languages = TranslateUtil.getAvailableLanguages(); + if (languages != null && languages.size() > 0) { + swingUI.injectSubmenu(LANGUAGE_MENU, IconLoader.Earth.getIcon(), CONFIG_MENU); + for(String language : languages) { + swingUI.injectMenuAction( + ActionFactory.getInstance().createToggleAction(language, IPlugInPort.LANGUAGE, LANGUAGE_MENU, IPlugInPort.LANGUAGE_DEFAULT), + LANGUAGE_MENU); + } + } + } catch (Exception e) { + LOG.error("Error while setting up language menu", e); + } + File themeDir = new File("themes"); if (themeDir.exists()) { @@ -157,6 +177,15 @@ public class ConfigPlugin implements IPlugIn { COMPONENT_BROWSER_MENU); swingUI.injectMenuAction(ActionFactory.getInstance().createComponentBrowserAction(TABBED_TOOLBAR), COMPONENT_BROWSER_MENU); + + // notify the user that language selection is not immediate + ConfigurationManager.getInstance().addConfigListener(IPlugInPort.LANGUAGE, new IConfigListener() { + + @Override + public void valueChanged(String key, Object value) { + swingUI.showMessage("Language selection will be applied after the application is restarted.", "Language", ISwingUI.INFORMATION_MESSAGE); + } + }); } @Override