From 0d556b66e8227e165a7dea5499541eb24798f6c4 Mon Sep 17 00:00:00 2001 From: bancika Date: Wed, 22 Apr 2020 23:52:37 +0200 Subject: [PATCH] language selection UI --- .../src/org/diylc/common/IPlugInPort.java | 3 +- .../src/org/diylc/lang/TranslateUtil.java | 5 +-- diylc/diylc-swing/dict.txt | 18 +++++------ .../src/org/diylc/images/IconLoader.java | 2 +- .../src/org/diylc/images/earth.png | Bin 0 -> 990 bytes .../swing/plugins/config/ConfigPlugin.java | 29 ++++++++++++++++++ 6 files changed, 42 insertions(+), 15 deletions(-) create mode 100644 diylc/diylc-swing/src/org/diylc/images/earth.png 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 0000000000000000000000000000000000000000..a5517db6de75e55c3708880210b66b37274a761b GIT binary patch literal 990 zcmV<410np0P)WdKcSATc)}L3L*!GB7YTATcpIG&MRgF(4~2F)%Pb%&Rv5000McNliru z)&&<0F*|Y-$N>NV010qNS#tmY3h)2`3h)6!tTdPa000DMK}|sb0I`n?{9y$E00TBj zL_t(|+D()1Z&Otm$G^QldP}?NT}#(3WNc-iOj#ggVnQ%c6ExYzcw=G+!B>VDHU0-C zz9zmhA;xHU0lXj(AV#u?8rejPQAUk03KQ6m(#`hXt-WpUuXBI-Tx^rx{gq1j-nFG}lV=9MS@zKj4?n!p z;I77ZMc>EJ;7{n?QbEjo50=Z&@S{-dWSsTRPYejJDz)XCPe^8lCj7-eo0&P~^pB0` z*NHy!JVwMfkme7e8CitvOrT~3V9~2!{2er-m-w9Y&H?4&{9nFZTPFjXE3Q{RUgu7w z)JHd9_MC1AI}5T&!LZ=Or=LAj*xgeAqq?Gm7|)r7tG2+ zc2B|&1UNp>WDKh5z;JCev`N^|fZ;b$;{t4bfgi6FFiHkb13DRBc*moE#*^8oc z3h~km)Ru=*(?LadV0#e+EC)ydoa!V**%~HsNRQC4TzH0u=L7+s>%!+4ipnB38iS}B z7HaetmJJ9yrs0;xAlBc4v-vz}zmlIF!BjJkm6SRrLP9?!M&vmxtYzr-O*)2+y5#|e z2-l$S>NK{>d9Fs(ed!aMEE3a7AHmc!@EwiLOldYqXc7jat!AM-vIwk(XKj)so-=MQBTKsED5Qy+bdkSbs5%b ziNwDW<**X{O7Xi#S@+$|{(-Py?7aoJ1S}B zhFSA$An$xFojWv@dr8_a2`>*Z$AhA7tSsLzJaE^4Zo)IyDDD<Qm;aR2}S literal 0 HcmV?d00001 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