diff --git a/diylc/diylc-core/src/org/diylc/common/IPlugInPort.java b/diylc/diylc-core/src/org/diylc/common/IPlugInPort.java index 403fc525..880b06f4 100644 --- a/diylc/diylc-core/src/org/diylc/common/IPlugInPort.java +++ b/diylc/diylc-core/src/org/diylc/common/IPlugInPort.java @@ -90,7 +90,9 @@ public interface IPlugInPort extends ISelectionProcessor, IMouseProcessor, IKeyP public static final String SNAP_TO_NONE = "None"; public static final String SNAP_TO_GRID = "Grid"; public static final String SNAP_TO_COMPONENTS = "Components"; - public static final String SNAP_TO_DEFAULT = SNAP_TO_GRID; + public static final String SNAP_TO_DEFAULT = SNAP_TO_GRID; + + public static final String LANGUAGE = "language"; public static final int DND_TOGGLE_STICKY = 0x1; public static final int DND_TOGGLE_SNAP = 0x40000000; @@ -101,7 +103,7 @@ public interface IPlugInPort extends ISelectionProcessor, IMouseProcessor, IKeyP public static final int NOBUTTON = 0; public static final int BUTTON1 = 1; public static final int BUTTON2 = 2; - public static final int BUTTON3 = 3; + public static final int BUTTON3 = 3; /** * Returns size of the canvas that takes project dimensions into account as well as zoom level. diff --git a/diylc/diylc-core/src/org/diylc/lang/TranslateUtil.java b/diylc/diylc-core/src/org/diylc/lang/TranslateUtil.java new file mode 100644 index 00000000..f10795c7 --- /dev/null +++ b/diylc/diylc-core/src/org/diylc/lang/TranslateUtil.java @@ -0,0 +1,137 @@ +/* + * + * 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.lang; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.PrintWriter; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.apache.log4j.Logger; +import org.diylc.appframework.miscutils.ConfigurationManager; +import org.diylc.common.IPlugInPort; + +public class TranslateUtil { + + private static final String LANG_DIR = "lang"; + + private static final Logger LOG = Logger.getLogger(TranslateUtil.class); + + private static Map dict = null; + private static List missing; + + public static String translate(String text) { + if (text == null || text.length() <= 1) + return text; + + try { + // don't translate numbers + Double.parseDouble(text); + return text; + } catch (Exception e) { + } + + if (dict != null) { + if (dict.containsKey(text.toLowerCase())) { + return dict.get(text.toLowerCase()); + } else { + if ("true".equalsIgnoreCase(System.getProperty("org.diylc.storeDict"))) { + List missing = getMissing(); + if (!missing.contains(text)) { + missing.add(text); + Collections.sort(missing); + try (PrintWriter out = new PrintWriter("dict.txt")) { + for (String m : missing) { + out.println(m); + } + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + } + } + } + } + return text; + } + + public static void configure() { + String language = ConfigurationManager.getInstance().readString(IPlugInPort.LANGUAGE, "English"); + if (language != null) + load(language); + } + + private static void load(String language) { + LOG.info("Loading translation for " + language); + dict = new HashMap(); + try { + try (Stream stream = Files.lines( + Paths.get(LANG_DIR + File.separator + language + ".txt"), StandardCharsets.UTF_8)) { + stream.forEach(s -> { + if (s.contains("|")) { + String[] parts = s.split("\\|"); + if (parts.length == 2) + dict.put(parts[0].toLowerCase().trim(), parts[1].trim()); + } else { + dict.put(s.toLowerCase(), s); + } + }); + } catch (IOException e) { + LOG.error("Error loading language file", e); + } + } catch (Exception e) { + LOG.error("Error loading language file", e); + } + } + + private static List getMissing() { + if (missing == null) { + missing = new ArrayList(); + try { + try (Stream stream = Files.lines(Paths.get("dict.txt"), StandardCharsets.UTF_8)) { + stream.forEach(s -> missing.add(s)); + } catch (IOException e) { + e.printStackTrace(); + } + } catch (Exception e) { + + } + } + return missing; + } + + 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()); + } catch (IOException e) { + LOG.error("Error fetching available languages"); + return null; + } + } +} diff --git a/diylc/diylc-core/src/org/diylc/presenter/ComponentProcessor.java b/diylc/diylc-core/src/org/diylc/presenter/ComponentProcessor.java index 4a269309..4ef1a41a 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/ComponentProcessor.java +++ b/diylc/diylc-core/src/org/diylc/presenter/ComponentProcessor.java @@ -46,7 +46,8 @@ import org.diylc.core.IPropertyValidator; import org.diylc.core.annotations.BomPolicy; import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.core.annotations.EditableProperty; -import org.diylc.core.annotations.KeywordPolicy; +import org.diylc.core.annotations.KeywordPolicy; +import org.diylc.lang.TranslateUtil; /** * Utility class with component processing methods. @@ -173,7 +174,15 @@ public class ComponentProcessor { setterName = setter.getName(); } catch (NoSuchMethodException e) { LOG.debug("No matching setter found for \"" + getter.getName() + "\". Skipping..."); - } + } + + TranslateUtil.translate(name); // temporary, just to make sure we catch it in the dict + if (getter.getReturnType().isEnum()) { + for(Object o : getter.getReturnType().getEnumConstants()) { + TranslateUtil.translate(o.toString()); + } + } + PropertyWrapper property = new PropertyWrapper(name, getter.getReturnType(), getter.getName(), setterName, annotation.defaultable(), validator, annotation.sortOrder()); diff --git a/diylc/diylc-core/src/org/diylc/presenter/Presenter.java b/diylc/diylc-core/src/org/diylc/presenter/Presenter.java index f0a13e59..c9fc5740 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/Presenter.java +++ b/diylc/diylc-core/src/org/diylc/presenter/Presenter.java @@ -81,6 +81,7 @@ import org.diylc.core.VisibilityPolicy; import org.diylc.core.annotations.IAutoCreator; import org.diylc.core.measures.Size; import org.diylc.core.measures.SizeUnit; +import org.diylc.lang.TranslateUtil; import org.diylc.netlist.Group; import org.diylc.netlist.Netlist; import org.diylc.netlist.NetlistAnalyzer; @@ -102,6 +103,32 @@ import com.thoughtworks.xstream.io.xml.DomDriver; */ public class Presenter implements IPlugInPort { + private static final String REACHED_BOTTOM = + TranslateUtil.translate("Selected component(s) have reached the bottom of their layer. Do you want to force the selection to the back?"); + private static final String SEND_SELECTION_TO_BACK = TranslateUtil.translate("Send Selection to Back"); + private static final String SAVE_AS_VARIANT = TranslateUtil.translate("Save as Variant"); + private static final String VARIANT_EXISTS = TranslateUtil.translate("A variant with that name already exists. Overwrite?"); + private static final String ROTATE_CHANGE = + TranslateUtil.translate("Selection contains components that cannot be rotated. Do you want to exclude them?"); + private static final String MIRRORING_CHANGE = + TranslateUtil.translate("Mirroring operation will change the circuit. Do you want to continue?"); + private static final String MIRROR_SELECTION = TranslateUtil.translate("Mirror Selection"); + private static final String ROTATE_SELECTION = TranslateUtil.translate("Rotate Selection"); + private static final String CANNOT_MIRROR = + TranslateUtil.translate("Selection contains components that cannot be mirrored. Do you want to exclude them?"); + private static final String BRING_SELECTION_TO_FRONT = TranslateUtil.translate("Bring Selection to Front"); + private static final String REACHED_TOP = + TranslateUtil.translate("Selected component(s) have reached the top of their layer. Do you want to force the selection to the top?"); + private static final String WARNING = TranslateUtil.translate("Warning"); + private static final String UNSAVED_CHANGES = TranslateUtil.translate("There are unsaved changes. Would you like to save them?"); + private static final String ERROR_SLOT = TranslateUtil.translate("Could not set component type slot. Check log for details."); + private static final String ERROR_SAVE = TranslateUtil.translate("Could not save the project to file. Check the log for details."); + private static final String ERROR_CREATE = TranslateUtil.translate("Could not create component. Check log for details."); + private static final String ERROR_EDIT = TranslateUtil.translate("Error occured while editing selection. Check the log for details."); + private static final String ERROR_NEW = TranslateUtil.translate("Could not create a new file. Check the log for details."); + private static final String ERROR = TranslateUtil.translate("Error"); + private static final String APPLY_ERROR = "Could not apply changes. Check the log for details."; + private static final Logger LOG = Logger.getLogger(Presenter.class); public static VersionNumber CURRENT_VERSION = new VersionNumber(4, 0, 0); @@ -137,7 +164,7 @@ public class Presenter implements IPlugInPort { public static final int ICON_SIZE = 32; - private static final int MAX_RECENT_FILES = 20; + private static final int MAX_RECENT_FILES = 20; private Project currentProject; private Map> componentTypes; @@ -294,7 +321,7 @@ public class Presenter implements IPlugInPort { DrawingCache.Instance.clear(); } catch (Exception e) { LOG.error("Could not create new file", e); - view.showMessage("Could not create a new file. Check the log for details.", "Error", IView.ERROR_MESSAGE); + view.showMessage(ERROR_NEW, ERROR, IView.ERROR_MESSAGE); } } @@ -314,7 +341,7 @@ public class Presenter implements IPlugInPort { builder.append("
"); } builder.append(">) clazz); if (componentType == null) continue; + + // just to store in the cache + ComponentProcessor.getInstance().extractProperties(clazz); + List nestedList; if (componentTypes.containsKey(componentType.getCategory())) { nestedList = componentTypes.get(componentType.getCategory()); @@ -628,7 +659,7 @@ public class Presenter implements IPlugInPort { try { instantiationManager.instatiatePointByPoint(scaledPoint, currentProject); } catch (Exception e) { - view.showMessage("Could not create component. Check log for details.", "Error", IView.ERROR_MESSAGE); + view.showMessage(ERROR_CREATE, ERROR, IView.ERROR_MESSAGE); LOG.error("Could not create component", e); } messageDispatcher.dispatchMessage(EventType.SLOT_CHANGED, componentTypeSlot, @@ -827,7 +858,7 @@ public class Presenter implements IPlugInPort { try { applyPropertiesToSelection(properties); } catch (Exception e1) { - view.showMessage("Error occured while editing selection. Check the log for details.", "Error", + view.showMessage(ERROR_EDIT, ERROR, JOptionPane.ERROR_MESSAGE); LOG.error("Error applying properties", e1); } @@ -1395,8 +1426,8 @@ public class Presenter implements IPlugInPort { } if (!canRotate) - if (view.showConfirmDialog("Selection contains components that cannot be rotated. Do you want to exclude them?", - "Mirror Selection", IView.YES_NO_OPTION, IView.QUESTION_MESSAGE) != IView.YES_OPTION) + if (view.showConfirmDialog(ROTATE_CHANGE, + ROTATE_SELECTION, IView.YES_NO_OPTION, IView.QUESTION_MESSAGE) != IView.YES_OPTION) return; for (IDIYComponent component : selectedComponents) { @@ -1482,7 +1513,7 @@ public class Presenter implements IPlugInPort { mirrorComponents(selectedComponents, direction, isSnapToGrid()); messageDispatcher.dispatchMessage(EventType.PROJECT_MODIFIED, oldProject, currentProject.clone(), - "Mirror Selection"); + MIRROR_SELECTION); messageDispatcher.dispatchMessage(EventType.REPAINT); drawingManager.clearContinuityArea(); } @@ -1507,13 +1538,13 @@ public class Presenter implements IPlugInPort { } if (!canMirror) - if (view.showConfirmDialog("Selection contains components that cannot be mirrored. Do you want to exclude them?", - "Mirror Selection", IView.YES_NO_OPTION, IView.QUESTION_MESSAGE) != IView.YES_OPTION) + if (view.showConfirmDialog(CANNOT_MIRROR, + MIRROR_SELECTION, IView.YES_NO_OPTION, IView.QUESTION_MESSAGE) != IView.YES_OPTION) return; if (changesCircuit) - if (view.showConfirmDialog("Mirroring operation will change the circuit. Do you want to continue?", - "Mirror Selection", IView.YES_NO_OPTION, IView.QUESTION_MESSAGE) != IView.YES_OPTION) + if (view.showConfirmDialog(MIRRORING_CHANGE, + MIRROR_SELECTION, IView.YES_NO_OPTION, IView.QUESTION_MESSAGE) != IView.YES_OPTION) return; for (IDIYComponent component : components) { @@ -1821,8 +1852,8 @@ public class Presenter implements IPlugInPort { && (forceConfirmation = this.view .showConfirmDialog( - "Selected component(s) have reached the bottom of their layer. Do you want to force the selection to the back?", - "Send Selection to Back", IView.YES_NO_OPTION, IView.QUESTION_MESSAGE)) != IView.YES_OPTION) + REACHED_BOTTOM, + SEND_SELECTION_TO_BACK, IView.YES_NO_OPTION, IView.QUESTION_MESSAGE)) != IView.YES_OPTION) break; } Collections.swap(currentProject.getComponents(), index, index - 1); @@ -1874,8 +1905,8 @@ public class Presenter implements IPlugInPort { && (forceConfirmation = this.view .showConfirmDialog( - "Selected component(s) have reached the top of their layer. Do you want to force the selection to the top?", - "Bring Selection to Front", IView.YES_NO_OPTION, IView.QUESTION_MESSAGE)) != IView.YES_OPTION) + REACHED_TOP, + BRING_SELECTION_TO_FRONT, IView.YES_NO_OPTION, IView.QUESTION_MESSAGE)) != IView.YES_OPTION) break; } Collections.swap(currentProject.getComponents(), index, index + 1); @@ -2291,7 +2322,7 @@ public class Presenter implements IPlugInPort { } } catch (Exception e) { LOG.error("Could not apply selection properties", e); - view.showMessage("Could not apply changes to the selection. Check the log for details.", "Error", + view.showMessage("Could not apply changes to the selection. Check the log for details.", ERROR, IView.ERROR_MESSAGE); } finally { // Notify the listeners. @@ -2330,7 +2361,7 @@ public class Presenter implements IPlugInPort { } } catch (Exception e) { LOG.error("Could not apply properties", e); - view.showMessage("Could not apply changes. Check the log for details.", "Error", IView.ERROR_MESSAGE); + view.showMessage(APPLY_ERROR, ERROR, IView.ERROR_MESSAGE); } finally { // Notify the listeners. if (!oldProject.equals(currentProject)) { @@ -2353,7 +2384,7 @@ public class Presenter implements IPlugInPort { updateSelection(newSelection); } catch (Exception e) { LOG.error("Could not apply editor", e); - view.showMessage("Could not apply " + editor.getEditAction() + ". Check the log for details.", "Error", IView.ERROR_MESSAGE); + view.showMessage("Could not apply " + editor.getEditAction() + ". Check the log for details.", ERROR, IView.ERROR_MESSAGE); } finally { // Notify the listeners. if (!oldProject.equals(currentProject)) { @@ -2425,7 +2456,7 @@ public class Presenter implements IPlugInPort { instantiationManager.getFirstControlPoint(), forceInstatiate); } catch (Exception e) { LOG.error("Could not set component type slot", e); - view.showMessage("Could not set component type slot. Check log for details.", "Error", IView.ERROR_MESSAGE); + view.showMessage(ERROR_SLOT, ERROR, IView.ERROR_MESSAGE); } } @@ -2486,7 +2517,7 @@ public class Presenter implements IPlugInPort { if (exists) { int result = - view.showConfirmDialog("A variant with that name already exists. Overwrite?", "Save as Variant", + view.showConfirmDialog(VARIANT_EXISTS, SAVE_AS_VARIANT, IView.YES_NO_OPTION, IView.WARNING_MESSAGE); if (result != IView.YES_OPTION) { return; diff --git a/diylc/diylc-library/lib/diylc-core.jar b/diylc/diylc-library/lib/diylc-core.jar index 7c471980..e425a718 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-library/src/org/diylc/components/connectivity/Line.java b/diylc/diylc-library/src/org/diylc/components/connectivity/Line.java index 530c81be..9ebe1973 100644 --- a/diylc/diylc-library/src/org/diylc/components/connectivity/Line.java +++ b/diylc/diylc-library/src/org/diylc/components/connectivity/Line.java @@ -162,7 +162,7 @@ public class Line extends AbstractLeadedComponent { this.thickness = thickness; } - @EditableProperty + @EditableProperty(name = "Arrow Size") public Size getArrowSize() { if (arrowSize == null) arrowSize = thickness = new Size(1d, SizeUnit.px); diff --git a/diylc/diylc-library/src/org/diylc/components/shapes/TapeMeasure.java b/diylc/diylc-library/src/org/diylc/components/shapes/TapeMeasure.java index c3bf480e..a7bf064d 100644 --- a/diylc/diylc-library/src/org/diylc/components/shapes/TapeMeasure.java +++ b/diylc/diylc-library/src/org/diylc/components/shapes/TapeMeasure.java @@ -213,7 +213,7 @@ public class TapeMeasure extends AbstractLeadedComponent { this.thickness = thickness; } - @EditableProperty + @EditableProperty(name = "Arrow Size") public Size getArrowSize() { if (arrowSize == null) arrowSize = thickness = new Size(1d, SizeUnit.px); diff --git a/diylc/diylc-swing/.settings/org.eclipse.core.resources.prefs b/diylc/diylc-swing/.settings/org.eclipse.core.resources.prefs index a1b350a1..f434c153 100644 --- a/diylc/diylc-swing/.settings/org.eclipse.core.resources.prefs +++ b/diylc/diylc-swing/.settings/org.eclipse.core.resources.prefs @@ -1,2 +1,3 @@ eclipse.preferences.version=1 +encoding//lang/Spanish.txt=UTF-8 encoding//src/org/diylc/swing/gui/CollapsiblePanel.java=UTF-8 diff --git a/diylc/diylc-swing/DIYLCStarter.launch b/diylc/diylc-swing/DIYLCStarter.launch index d631a4c5..2aec2372 100644 --- a/diylc/diylc-swing/DIYLCStarter.launch +++ b/diylc/diylc-swing/DIYLCStarter.launch @@ -12,5 +12,5 @@ - + diff --git a/diylc/diylc-swing/dict.txt b/diylc/diylc-swing/dict.txt new file mode 100644 index 00000000..08b5f746 --- /dev/null +++ b/diylc/diylc-swing/dict.txt @@ -0,0 +1,74 @@ +#10 (2.59mm / 0.10190in) +#12 (2.05mm / 0.08081in) +#14 (1.63mm / 0.06409in) +#16 (1.29mm / 0.05082in) +#18 (1.02mm / 0.04030in) +#20 (0.81mm / 0.03196in) +#22 (0.64mm / 0.02535in) +#24 (0.51mm / 0.02010in) +#26 (0.40mm / 0.01594in) +#28 (0.32mm / 0.01264in) +#30 (0.25mm / 0.01003in) +#32 (0.20mm / 0.00795in) +#34 (0.16mm / 0.00631in) +#36 (0.13mm / 0.00500in) +#8 (3.26mm / 0.12849in) +3PDT +3PDT (Center OFF) +4 band +4P5T (Super/Mega) +4PDT +4PDT (Center OFF) +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 +D-S-G JFET +D-S-G MOSFET +DFM A +DFM B +DIP +DP3T +DP5T +DPDT +DPDT (Center OFF) +E-B-C BJT +Enviar un error +G-D-S JFET +G-D-S MOSFET +G-S-D JFET +G-S-D MOSFET +Haz una donación +Help +Manual de usuario +NPN +Nor +Not +Or +PAF +PCB +PNP +Preguntas más frecuentes +Project Cloud +S-G-D JFET +S-G-D MOSFET +SPDT +SPDT (Center OFF) +SPST +Test +Xnor +Xor +cm +ft +in +mm +px +yd diff --git a/diylc/diylc-swing/lang/English.txt b/diylc/diylc-swing/lang/English.txt new file mode 100644 index 00000000..049c0da6 --- /dev/null +++ b/diylc/diylc-swing/lang/English.txt @@ -0,0 +1,403 @@ +180 degrees clockwise +270 degrees clockwise +90 degrees clockwise +A variant with that name already exists. Overwrite? +About +Above +Access User Files +Add Flexible Leads +Add Validation Step +All Connected +Alpha +Analyze +Analyze Guitar Diagrams +And +Angle +Anti-Aliasing +Arrow Size +Author +Auto-Create Pads +Auto-Edit Mode +Base +Below +Blueprint +Board +Board Color +Board Width +Bobin 1 +Bobin 2 +Body +Border +Border Thickness +Both +Both Sides +Bottom +Bottom Left +Bottom Right +Bring Forward +Bring Selection to Front +Buffer +Center +Center Negative +Center Positive +Center Terminal +Central +Change Password +Channel +Chassis +Circular +Coil +Coil Border +Coil Length +Coil Width +Color +Color 1 +Color 2 +Color code +Columns +Component +Component API +Components +Config +Connector +Connector (Mirrored) +Contacts +Continuous Creation +Coordinate Color +Coordinate Origin +Coordinates +Copy +Core +Core Border +Core Thickness +Core Width +Could not create a new file. Check the log for details. +Could not create component. Check log for details. +Could not save the project to file. Check the log for details. +Could not set component type slot. Check log for details. +Cover +Create B.O.M. +Create New Account +Current +Cut +Cut Between Holes +Cut Orientation +DIP (Mirrored) +DP3T (Standard 3-Position Strat) +DP3T (Standard 5-Position Strat) +DP4T (4-Position Tele) +Dark +Dashed +Decimals +Default +Default Font +Default Font Size +Delete Selection +Description +Diameter +Directional +Directly heated +Display +Display Pin #s +Dog Ear +Dot Spacing +Dotted +Dual Rail Humbucker +Dual Rods +Duodecar B12C +Duplicate +Edges +Edit +Edit Project Settings +Edit Selection +Electrode Labels +Enable Cache Boost +End Arrow +Enjoying DIYLC? Click here to buy me a coffe :) +Error +Error occured while editing selection. Check the log for details. +Exit +Expand Selection +Explicit Dimensions +Explicit Length +Explicit Width +Export Building Blocks +Export Grid +Export Variants +Export to PDF +Export to PNG +Extra Working Area +Eyelet color +FAQ +File +Fill +Filtertron +Find +Five +Flip +Folded +Font +Font Bold +Font Italic +Font Size +Four +Full +Fuse +Generate DIYLC Netlist +Generate Spice Netlist +Grid +Grid Spacing +Group Selection +Half +Hardware Acceleration +Heaters +Height +Help +Hi-Quality Rendering +Highlight Connected Areas +Hole +Hole Size +Hole Spacing +Hole size +Holes per strip +Horizontal +Horizontal Alignment +Horizontal Large +Horizontal Medium +Horizontal Small 1 +Horizontal Small 2 +Horizontal X-Small +Humbucking +Image +Immediate Only +Import +Import Building Blocks +Import Variants +In-Line D-44 +In-line +Indent +Inline +Inside color +Integration +Invert polarity +Label +Label Color +Label Orientation +Label Position +Labels +Layer +Layers +Lead Color +Lead Count +Lead Length +Lead Spacing +Left +Left-to-Right +Legs +Length +Letters +Light +Lin +Lip +Lock +Log +Log In +Log Out +Lug Size +Lugs +Make a Donation +Manage Account +Manage My Uploads +Mark Common Lugs +Marker +Mini +Miniature +Mirror Horizontally +Mirror Selection +Mirror Vertically +Mirroring operation will change the circuit. Do you want to continue? +Model +Mono +Mount +Mounting Lugs +Mouse Wheel Zoom +Moveable Label +Name +Nand +Negative +New +No +None +North +Noval B9A +Nudge +Numbers +Nut +Octal +Offset +One Side +Open +Opposing Points +Orientation +Outer Foil +Outer Foil Mark +Outline Mode +Outside +Oval horizontal +Oval vertical +Pad Color +Paste +Pin Arrangement +Pin Color +Pin Spacing +Pin spacing +Pinout +Pins +Play Test +Plugin API +Point Count +Polarity +Polarized +Pole Color +Pole Pieces +Pole Pieces 1 +Pole Pieces 2 +Positions +Positive +Power Rating +Power Strip +Primary CT +Print... +Radius +Rail +Recent Files +Recent Updates +Redo +Renumber On Paste +Renumber Selection +Resistance +Rev log +Reverse (standing) +Right +Rods +Rotate Clockwise +Rotate Counterclockwise +Rotate Selection +Round +Round WOG A +Round WOG B +Row Spacing +Rows +Ruler Inch Subdivision... +Same Type Only +Save +Save As +Save as Variant +Scale +Screws +Search The Cloud +Searchable Tree +Secondary CT +Select All +Selected component(s) have reached the bottom of their layer. Do you want to force the selection to the back? +Selected component(s) have reached the top of their layer. Do you want to force the selection to the top? +Selection contains components that cannot be mirrored. Do you want to exclude them? +Selection contains components that cannot be rotated. Do you want to exclude them? +Send Backward +Send Selection to Back +Seven +Shaft Down +Shaft Up +Shape +Show Grid +Show Rulers +Shroud +Shrouded +Single Rail +Single Rods +Size +Sizing Mode +Small-button B7G +Smooth +Snap To... +Soap Bar +Solid +South +Spacing +Square +Square BR-3 +Standard +Start Arrow +Start Recording +Stereo +Sticky Points +Stop Recording +Stratocaster +Strip Color +Stripe +Stripe 1 +Stripe 2 +Stripe Color +Stripe Color 1 +Stripe Color 2 +Style +Submit a Bug +Suppressor grid +Switched +Switches +Tab +Tab Border +Tabbed Toolbar +Taper +Telecaster +Terminal Spacing +Terminals +Test +Text +Text Color +Theme +There are unsaved changes. Would you like to save them? +Thickness +Three +Through Hole +Tick +Title +Toolbox +Top +Top Lead +Top Left +Top Right +Top-to-Bottom +Trace +Trace Color +Trace Mask +Transform Selection +Triangle +Tubular +Two +Type +Ultra-miniature +Underside Pad Color +Underside Trace Color +Undo +Ungroup Selection +Unit +Upload A Project +User Manual +Value +Vertical +Vertical Alignment +Vertical Inline +Vertical Offset 1 +Vertical Offset 2 +View +Visible +Voltage +Wafer +Warning +Width +Winding Spacing +X-axis +Y-axis +base of 10 +base of 2 \ No newline at end of file diff --git a/diylc/diylc-swing/lang/French.txt b/diylc/diylc-swing/lang/French.txt new file mode 100644 index 00000000..3d5c0e0a --- /dev/null +++ b/diylc/diylc-swing/lang/French.txt @@ -0,0 +1,403 @@ +180 degrees clockwise|180 degrés dans le sens horaire +270 degrees clockwise|270 degrés dans le sens des aiguilles d'une montre +90 degrees clockwise|90 degrés dans le sens horaire +A variant with that name already exists. Overwrite?|Une variante avec ce nom existe déjà. Écraser? +About|À propos de +Above|Au dessus de +Access User Files|Accéder aux fichiers utilisateur +Add Flexible Leads|Ajouter des prospects flexibles +Add Validation Step|Ajouter une étape de validation +All Connected|Tous connectés +Alpha|Alpha +Analyze|Analyser +Analyze Guitar Diagrams|Analyser les diagrammes de guitare +And|Et +Angle|Angle +Anti-Aliasing|Anti crénelage +Arrow Size|Taille de la flèche +Author|Auteur +Auto-Create Pads|Pads de création automatique +Auto-Edit Mode|Mode d'édition automatique +Base|Base +Below|Au dessous de +Blueprint|Plan +Board|Planche +Board Color|Couleur du plateau +Board Width|Largeur du panneau +Bobin 1|Bobin 1 +Bobin 2|Bobin 2 +Body|Corps +Border|Frontière +Border Thickness|Épaisseur de bordure +Both|Tous les deux +Both Sides|Des deux côtés +Bottom|Bas +Bottom Left|En bas à gauche +Bottom Right|En bas à droite +Bring Forward|Avancer +Bring Selection to Front|Mettre la sélection au premier plan +Buffer|Tampon +Center|Centre +Center Negative|Centre négatif +Center Positive|Centre positif +Center Terminal|Terminal central +Central|Central +Change Password|Changer le mot de passe +Channel|Canal +Chassis|Châssis +Circular|Circulaire +Coil|Bobine +Coil Border|Bordure de bobine +Coil Length|Longueur de bobine +Coil Width|Largeur de bobine +Color|Couleur +Color 1|Couleur 1 +Color 2|Couleur 2 +Color code|Code couleur +Columns|Colonnes +Component|Composant +Component API|API de composant +Components|Composants +Config|Config +Connector|Connecteur +Connector (Mirrored)|Connecteur (en miroir) +Contacts|Contacts +Continuous Creation|Création continue +Coordinate Color|Couleur coordonnée +Coordinate Origin|Origine des coordonnées +Coordinates|Coordonnées +Copy|Copie +Core|Coeur +Core Border|Frontière centrale +Core Thickness|Épaisseur du noyau +Core Width|Largeur de noyau +Could not create a new file. Check the log for details.|Impossible de créer un nouveau fichier. Consultez le journal pour plus de détails. +Could not create component. Check log for details.|Impossible de créer le composant. Consultez le journal pour plus de détails. +Could not save the project to file. Check the log for details.|Impossible d'enregistrer le projet dans un fichier. Consultez le journal pour plus de détails. +Could not set component type slot. Check log for details.|Impossible de définir l'emplacement du type de composant. Consultez le journal pour plus de détails. +Cover|Couverture +Create B.O.M.|Créez B.O.M. +Create New Account|Créer un nouveau compte +Current|Courant +Cut|Couper +Cut Between Holes|Couper entre les trous +Cut Orientation|Orientation de coupe +DIP (Mirrored)|DIP (en miroir) +DP3T (Standard 3-Position Strat)|DP3T (Strat standard à 3 positions) +DP3T (Standard 5-Position Strat)|DP3T (Strat standard à 5 positions) +DP4T (4-Position Tele)|DP4T (télé 4 positions) +Dark|Foncé +Dashed|Dashed +Decimals|Décimales +Default|Défaut +Default Font|Police par défaut +Default Font Size|Taille de police par défaut +Delete Selection|Supprimer la sélection +Description|La description +Diameter|Diamètre +Directional|Directionnel +Directly heated|Directement chauffé +Display|Afficher +Display Pin #s|Afficher les broches # +Dog Ear|Oreille de chien +Dot Spacing|Espacement des points +Dotted|À pois +Dual Rail Humbucker|Humbucker à double rail +Dual Rods|Dual Rods +Duodecar B12C|Duodecar B12C +Duplicate|Dupliquer +Edges|Bords +Edit|Éditer +Edit Project Settings|Modifier les paramètres du projet +Edit Selection|Modifier la sélection +Electrode Labels|Étiquettes d'électrode +Enable Cache Boost|Activer le boost de cache +End Arrow|Flèche de fin +Enjoying DIYLC? Click here to buy me a coffe :)|Vous aimez DIYLC? Cliquez ici pour m'acheter un café :) +Error|Erreur +Error occured while editing selection. Check the log for details.|Une erreur s'est produite lors de la modification de la sélection. Consultez le journal pour plus de détails. +Exit|Sortie +Expand Selection|Développer la sélection +Explicit Dimensions|Dimensions explicites +Explicit Length|Longueur explicite +Explicit Width|Largeur explicite +Export Building Blocks|Exporter des blocs de construction +Export Grid|Grille d'exportation +Export Variants|Exporter les variantes +Export to PDF|Exporter au format PDF +Export to PNG|Exporter en PNG +Extra Working Area|Zone de travail supplémentaire +Eyelet color|Couleur oeillet +FAQ|FAQ +File|Fichier +Fill|Remplir +Filtertron|Filtertron +Find|Trouver +Five|Cinq +Flip|Retourner +Folded|Plié +Font|Police de caractère +Font Bold|Caractères gras +Font Italic|Italic +Font Size|Taille de police +Four|Quatre +Full|Plein +Fuse|Fusible +Generate DIYLC Netlist|Générer une netlist DIYLC +Generate Spice Netlist|Générer la netlist Spice +Grid|la grille +Grid Spacing|Espacement de la grille +Group Selection|Sélection de groupe +Half|Moitié +Hardware Acceleration|Accélération matérielle +Heaters|Radiateurs +Height|la taille +Help|Aider +Hi-Quality Rendering|Rendu de haute qualité +Highlight Connected Areas|Mettez en surbrillance les zones connectées +Hole|Trou +Hole Size|Taille du trou +Hole Spacing|Espacement des trous +Hole size|Taille du trou +Holes per strip|Trous par bande +Horizontal|Horizontal +Horizontal Alignment|Alignement horizontal +Horizontal Large|Horizontal Large +Horizontal Medium|Moyen horizontal +Horizontal Small 1|Horizontal petit 1 +Horizontal Small 2|Horizontal petit 2 +Horizontal X-Small|X-Small horizontal +Humbucking|Humbucking +Image|Image +Immediate Only|Immédiatement seulement +Import|Importation +Import Building Blocks|Importer des blocs de construction +Import Variants|Importer des variantes +In-Line D-44|En ligne D-44 +In-line|En ligne +Indent|Retrait +Inline|En ligne +Inside color|Couleur intérieure +Integration|L'intégration +Invert polarity|Inverser la polarité +Label|Étiquette +Label Color|Couleur de l'étiquette +Label Orientation|Orientation de l'étiquette +Label Position|Position de l'étiquette +Labels|Étiquettes +Layer|Couche +Layers|Couches +Lead Color|Couleur de plomb +Lead Count|Nombre de prospects +Lead Length|Longueur de fil +Lead Spacing|Espacement des fils +Left|La gauche +Left-to-Right|De gauche à droite +Legs|Jambes +Length|Longueur +Letters|Des lettres +Light|Lumière +Lin|Lin +Lip|Lèvre +Lock|Fermer à clé +Log|Journal +Log In|S'identifier +Log Out|Se déconnecter +Lug Size|Taille des cosses +Lugs|Cosses +Make a Donation|Faire un don +Manage Account|Gérer son compte +Manage My Uploads|Gérer mes téléchargements +Mark Common Lugs|Marquer les cosses communes +Marker|Marqueur +Mini|Mini +Miniature|Miniature +Mirror Horizontally|Miroir horizontalement +Mirror Selection|Sélection miroir +Mirror Vertically|Miroir verticalement +Mirroring operation will change the circuit. Do you want to continue?|L'opération de mise en miroir changera le circuit. Voulez-vous continuer? +Model|Modèle +Mono|Mono +Mount|Monter +Mounting Lugs|Pattes de montage +Mouse Wheel Zoom|Zoom de la molette de la souris +Moveable Label|Étiquette mobile +Name|Nom +Nand|Nand +Negative|Négatif +New|Nouveau +No|Non +None|Aucun +North|Nord +Noval B9A|Noval B9A +Nudge|Coup de coude +Numbers|Nombres +Nut|Écrou +Octal|Octal +Offset|Décalage +One Side|Un côté +Open|Ouvert +Opposing Points|Points opposés +Orientation|Orientation +Outer Foil|Feuille extérieure +Outer Foil Mark|Marque de feuille extérieure +Outline Mode|Mode contour +Outside|À l'extérieur +Oval horizontal|Ovale horizontal +Oval vertical|Verticale ovale +Pad Color|Couleur du tampon +Paste|Pâte +Pin Arrangement|Disposition des broches +Pin Color|Couleur de broche +Pin Spacing|Espacement des broches +Pin spacing|Espacement des broches +Pinout|Brochage +Pins|Épingles +Play Test|Jouer le test +Plugin API|API de plugin +Point Count|Nombre de points +Polarity|Polarité +Polarized|Polarisé +Pole Color|Couleur de poteau +Pole Pieces|Pièces de poteau +Pole Pieces 1|Pièces de poteau 1 +Pole Pieces 2|Pièces de poteau 2 +Positions|Postes +Positive|Positif +Power Rating|Puissance nominale +Power Strip|Power Strip +Primary CT|TDM primaire +Print...|Impression... +Radius|Rayon +Rail|Rail +Recent Files|Fichiers récents +Recent Updates|Mises à jour récentes +Redo|Refaire +Renumber On Paste|Renuméroter sur la pâte +Renumber Selection|Renuméroter la sélection +Resistance|La résistance +Rev log|Journal de rév. +Reverse (standing)|Marche arrière (debout) +Right|Droite +Rods|Cannes +Rotate Clockwise|Le sens des aiguilles d'une montre +Rotate Counterclockwise|Rotation dans le sens antihoraire +Rotate Selection|Faire pivoter la sélection +Round|Rond +Round WOG A|Round WOG A +Round WOG B|Round WOG B +Row Spacing|Écartement des rangs +Rows|Lignes +Ruler Inch Subdivision...|Subdivision en pouces de la règle ... +Same Type Only|Même type uniquement +Save|sauvegarder +Save As|Enregistrer sous +Save as Variant|Enregistrer en tant que variante +Scale|Échelle +Screws|Des vis +Search The Cloud|Rechercher dans le cloud +Searchable Tree|Arbre consultable +Secondary CT|CT secondaire +Select All|Tout sélectionner +Selected component(s) have reached the bottom of their layer. Do you want to force the selection to the back?|Les composants sélectionnés ont atteint le bas de leur couche. Voulez-vous forcer la sélection vers l'arrière? +Selected component(s) have reached the top of their layer. Do you want to force the selection to the top?|Les composants sélectionnés ont atteint le haut de leur couche. Voulez-vous forcer la sélection vers le haut? +Selection contains components that cannot be mirrored. Do you want to exclude them?|La sélection contient des composants qui ne peuvent pas être mis en miroir. Voulez-vous les exclure? +Selection contains components that cannot be rotated. Do you want to exclude them?|La sélection contient des composants qui ne peuvent pas être pivotés. Voulez-vous les exclure? +Send Backward|Envoyer vers l'arrière +Send Selection to Back|Envoyer la sélection à l'arrière +Seven|Sept +Shaft Down|Shaft Down +Shaft Up|Shaft Up +Shape|Forme +Show Grid|Afficher la grille +Show Rulers|Afficher les règles +Shroud|Envelopper +Shrouded|Enveloppé +Single Rail|Rail unique +Single Rods|Tiges simples +Size|Taille +Sizing Mode|Mode de dimensionnement +Small-button B7G|Petit bouton B7G +Smooth|Lisse +Snap To...|Accrocher à ... +Soap Bar|Barre de savon +Solid|Solide +South|Sud +Spacing|Espacement +Square|Carré +Square BR-3|Carré BR-3 +Standard|la norme +Start Arrow|Flèche de départ +Start Recording|Commencer l'enregistrement +Stereo|Stéréo +Sticky Points|Points collants +Stop Recording|Arrête d'enregistrer +Stratocaster|Stratocaster +Strip Color|Couleur de bande +Stripe|Bande +Stripe 1|Stripe 1 +Stripe 2|Stripe 2 +Stripe Color|Couleur des rayures +Stripe Color 1|Couleur de rayure 1 +Stripe Color 2|Couleur de rayure 2 +Style|Style +Submit a Bug|Soumettre un bug +Suppressor grid|Grille de suppression +Switched|Switched +Switches|Commutateurs +Tab|Languette +Tab Border|Bordure de tabulation +Tabbed Toolbar|Barre d'outils à onglets +Taper|Taper +Telecaster|Telecaster +Terminal Spacing|Espacement des bornes +Terminals|Terminaux +Test|Tester +Text|Texte +Text Color|Couleur du texte +Theme|Thème +There are unsaved changes. Would you like to save them?|Il y a des modifications non enregistrées. Voulez-vous les enregistrer? +Thickness|Épaisseur +Three|Trois +Through Hole|À travers le trou +Tick|Cocher +Title|Titre +Toolbox|Boîte à outils +Top|Haut +Top Lead|Plaider +Top Left|En haut à gauche +Top Right|En haut à droite +Top-to-Bottom|De haut en bas +Trace|Trace +Trace Color|Couleur de trace +Trace Mask|Masque Trace +Transform Selection|Transformer la sélection +Triangle|Triangle +Tubular|Tubulaire +Two|Deux +Type|Type +Ultra-miniature|Ultra-miniature +Underside Pad Color|Couleur du tampon inférieur +Underside Trace Color|Couleur de trace en dessous +Undo|annuler +Ungroup Selection|Dissocier la sélection +Unit|Unité +Upload A Project|Télécharger un projet +User Manual|Manuel de l'Utilisateur +Value|Valeur +Vertical|Verticale +Vertical Alignment|Alignement vertical +Vertical Inline|Vertical en ligne +Vertical Offset 1|Décalage vertical 1 +Vertical Offset 2|Décalage vertical 2 +View|Vue +Visible|Visible +Voltage|Tension +Wafer|Tranche +Warning|avertissement +Width|Largeur +Winding Spacing|Espacement des enroulements +X-axis|Axe X +Y-axis|Axe Y +base of 10|base de 10 +base of 2|base de 2 diff --git a/diylc/diylc-swing/lang/Spanish.txt b/diylc/diylc-swing/lang/Spanish.txt new file mode 100644 index 00000000..5fe2cd2a --- /dev/null +++ b/diylc/diylc-swing/lang/Spanish.txt @@ -0,0 +1,403 @@ +180 degrees clockwise|180 grados en sentido horario +270 degrees clockwise|270 grados en sentido horario +90 degrees clockwise|90 grados en sentido horario +A variant with that name already exists. Overwrite?|Ya existe una variante con ese nombre. ¿Sobrescribir? +About|Acerca de +Above|Encima +Access User Files|Acceder a archivos de usuario +Add Flexible Leads|Agregar cables flexibles +Add Validation Step|Agregar paso de validación +All Connected|Todos conectados +Alpha|Alfa +Analyze|Analizar +Analyze Guitar Diagrams|Analizar diagramas de guitarra +And|Y +Angle|Ángulo +Anti-Aliasing|Anti-Aliasing +Arrow Size|Tamaño de la flecha +Author|Autor +Auto-Create Pads|Almohadillas de creación automática +Auto-Edit Mode|Modo de edición automática +Base|Base +Below|Abajo +Blueprint|Plano +Board|Tablero +Board Color|Color del tablero +Board Width|Ancho del tablero +Bobin 1|Bobin 1 +Bobin 2|Bobin 2 +Body|Cuerpo +Border|Frontera +Border Thickness|Espesor de la frontera +Both|Ambos +Both Sides|Ambos lados +Bottom|Fondo +Bottom Left|Abajo a la izquierda +Bottom Right|Abajo a la derecha +Bring Forward|Adelantar +Bring Selection to Front|Traer selección al frente +Buffer|Buffer +Center|Centrar +Center Negative|Centro negativo +Center Positive|Centro positivo +Center Terminal|Terminal central +Central|Central +Change Password|Cambia la contraseña +Channel|Canal +Chassis|Chasis +Circular|Circular +Coil|Bobina +Coil Border|Borde de la bobina +Coil Length|Longitud de la bobina +Coil Width|Ancho de la bobina +Color|Color +Color 1|Color 1 +Color 2|Color 2 +Color code|Codigo de color +Columns|Columnas +Component|Componente +Component API|API de componentes +Components|Componentes +Config|Config +Connector|Conector +Connector (Mirrored)|Conector (reflejado) +Contacts|Contactos +Continuous Creation|Creación continua +Coordinate Color|Color coordinado +Coordinate Origin|Origen coordinado +Coordinates|Coordenadas +Copy|Copiar +Core|Núcleo +Core Border|Borde central +Core Thickness|Espesor del núcleo +Core Width|Ancho del núcleo +Could not create a new file. Check the log for details.|No se pudo crear un nuevo archivo. Consulte el registro para más detalles. +Could not create component. Check log for details.|No se pudo crear el componente. Verifique el registro para más detalles. +Could not save the project to file. Check the log for details.|No se pudo guardar el proyecto en el archivo. Consulte el registro para más detalles. +Could not set component type slot. Check log for details.|No se pudo establecer la ranura de tipo de componente. Verifique el registro para más detalles. +Cover|Cubrir +Create B.O.M.|Crea B.O.M. +Create New Account|Crear una nueva cuenta +Current|Actual +Cut|Cortar +Cut Between Holes|Cortar entre agujeros +Cut Orientation|Orientación de corte +DIP (Mirrored)|DIP (reflejado) +DP3T (Standard 3-Position Strat)|DP3T (Strat estándar de 3 posiciones) +DP3T (Standard 5-Position Strat)|DP3T (Strat estándar de 5 posiciones) +DP4T (4-Position Tele)|DP4T (Tele de 4 posiciones) +Dark|Oscuro +Dashed|Rayado +Decimals|Decimales +Default|Defecto +Default Font|Fuente predeterminada +Default Font Size|Tamaño de fuente predeterminado +Delete Selection|Eliminar selección +Description|Descripción +Diameter|Diámetro +Directional|Direccional +Directly heated|Calentado directamente +Display|Monitor +Display Pin #s|Display Pin #s +Dog Ear|Oreja de perro +Dot Spacing|Espaciado de puntos +Dotted|Punteado +Dual Rail Humbucker|Humbucker de doble riel +Dual Rods|Varillas dobles +Duodecar B12C|Duodecar B12C +Duplicate|Duplicar +Edges|Bordes +Edit|Editar +Edit Project Settings|Editar configuración del proyecto +Edit Selection|Editar selección +Electrode Labels|Etiquetas de electrodos +Enable Cache Boost|Habilitar el refuerzo de caché +End Arrow|Flecha final +Enjoying DIYLC? Click here to buy me a coffe :)|¿Estás disfrutando de DIYLC? Haga clic aquí para comprarme un café :) +Error|Error +Error occured while editing selection. Check the log for details.|Se produjo un error al editar la selección. Consulte el registro para más detalles. +Exit|Salida +Expand Selection|Expandir selección +Explicit Dimensions|Dimensiones explícitas +Explicit Length|Longitud explícita +Explicit Width|Ancho explícito +Export Building Blocks|Exportar bloques de construcción +Export Grid|Exportar cuadrícula +Export Variants|Exportar variantes +Export to PDF|Exportar a PDF +Export to PNG|Exportar a PNG +Extra Working Area|Área de trabajo extra +Eyelet color|Color del ojal +FAQ|Preguntas más frecuentes +File|Archivo +Fill|Llenar +Filtertron|Filtertron +Find|Encontrar +Five|Cinco +Flip|Dar la vuelta +Folded|Doblada +Font|Fuente +Font Bold|Negrita +Font Italic|Font Italic +Font Size|Tamaño de fuente +Four|Cuatro +Full|Lleno +Fuse|Fusible +Generate DIYLC Netlist|Generar Netlist DIYLC +Generate Spice Netlist|Generar lista de especias +Grid|Cuadrícula +Grid Spacing|Espaciado de la cuadrícula +Group Selection|Selección de grupo +Half|Medio +Hardware Acceleration|Aceleracion de hardware +Heaters|Calentadores +Height|Altura +Help|Ayuda +Hi-Quality Rendering|Renderizado de alta calidad +Highlight Connected Areas|Destacar áreas conectadas +Hole|Agujero +Hole Size|Tamaño del agujero +Hole Spacing|Espaciamiento del agujero +Hole size|Tamaño del agujero +Holes per strip|Agujeros por tira +Horizontal|Horizontal +Horizontal Alignment|Alineación horizontal +Horizontal Large|Horizontal grande +Horizontal Medium|Medio horizontal +Horizontal Small 1|Horizontal Pequeño 1 +Horizontal Small 2|Horizontal Pequeño 2 +Horizontal X-Small|Horizontal X-Small +Humbucking|Humbucking +Image|Imagen +Immediate Only|Solo inmediato +Import|Importar +Import Building Blocks|Importar bloques de construcción +Import Variants|Importar variantes +In-Line D-44|En línea D-44 +In-line|En línea +Indent|Sangrar +Inline|En línea +Inside color|Color interior +Integration|Integración +Invert polarity|Polaridad invertida +Label|Etiqueta +Label Color|Color de etiqueta +Label Orientation|Orientación de etiqueta +Label Position|Posición de etiqueta +Labels|Etiquetas +Layer|Capa +Layers|Capas +Lead Color|Color de plomo +Lead Count|Cuenta de plomo +Lead Length|Longitud del cable +Lead Spacing|Espaciado de plomo +Left|Izquierda +Left-to-Right|De izquierda a derecha +Legs|Piernas +Length|Longitud +Letters|Letras +Light|Ligero +Lin|Lin +Lip|Labio +Lock|Bloquear +Log|Iniciar sesión +Log In|Iniciar sesión +Log Out|Cerrar sesión +Lug Size|Tamaño de orejeta +Lugs|Agarradera +Make a Donation|Haz una donación +Manage Account|Administrar cuenta +Manage My Uploads|Administrar mis cargas +Mark Common Lugs|Marcar orejetas comunes +Marker|Marcador +Mini|Mini +Miniature|Miniatura +Mirror Horizontally|Espejo horizontalmente +Mirror Selection|Selección de espejo +Mirror Vertically|Espejo verticalmente +Mirroring operation will change the circuit. Do you want to continue?|La operación de duplicación cambiará el circuito. ¿Quieres continuar? +Model|Modelo +Mono|Mono +Mount|Montar +Mounting Lugs|Orejetas de montaje +Mouse Wheel Zoom|Mouse Wheel Zoom +Moveable Label|Etiqueta movible +Name|Nombre +Nand|Nand +Negative|Negativo +New|Nuevo +No|No +None|Ninguna +North|norte +Noval B9A|Noval B9A +Nudge|Empujar +Numbers|Números +Nut|Nuez +Octal|Octal +Offset|Compensar +One Side|Un lado +Open|Abierto +Opposing Points|Puntos de oposición +Orientation|Orientación +Outer Foil|Lámina exterior +Outer Foil Mark|Marca exterior de aluminio +Outline Mode|Modo de esquema +Outside|Fuera de +Oval horizontal|Oval horizontal +Oval vertical|Vertical oval +Pad Color|Color de la almohadilla +Paste|Pegar +Pin Arrangement|Arreglo de pin +Pin Color|Pin Color +Pin Spacing|Espaciado de clavijas +Pin spacing|Espaciado de pin +Pinout|Pinout +Pins|Patas +Play Test|Prueba de juego +Plugin API|API de complemento +Point Count|Recuento de puntos +Polarity|Polaridad +Polarized|Polarizado +Pole Color|Color de poste +Pole Pieces|Piezas de poste +Pole Pieces 1|Pole Pieces 1 +Pole Pieces 2|Piezas de poste 2 +Positions|Posiciones +Positive|Positivo +Power Rating|Potencia nominal +Power Strip|Tira de energía +Primary CT|TC primaria +Print...|Impresión... +Radius|Radio +Rail|Carril +Recent Files|Archivos recientes +Recent Updates|Actualizaciones recientes +Redo|Rehacer +Renumber On Paste|Renumerar en pasta +Renumber Selection|Renumerar selección +Resistance|Resistencia +Rev log|Rev log +Reverse (standing)|Reverso (de pie) +Right|Derecho +Rods|Varillas +Rotate Clockwise|Rotar las agujas del reloj +Rotate Counterclockwise|Girar en sentido antihorario +Rotate Selection|Girar selección +Round|Redondo +Round WOG A|Round WOG A +Round WOG B|Round WOG B +Row Spacing|Distancia entre filas +Rows|Filas +Ruler Inch Subdivision...|Subdivisión de pulgadas de regla ... +Same Type Only|Mismo tipo solo +Save|Salvar +Save As|Guardar como +Save as Variant|Guardar como variante +Scale|Escala +Screws|Empulgueras +Search The Cloud|Busca en la nube +Searchable Tree|Árbol de búsqueda +Secondary CT|CT secundaria +Select All|Seleccionar todo +Selected component(s) have reached the bottom of their layer. Do you want to force the selection to the back?|Los componentes seleccionados han alcanzado el fondo de su capa. ¿Desea forzar la selección hacia atrás? +Selected component(s) have reached the top of their layer. Do you want to force the selection to the top?|Los componentes seleccionados han alcanzado la parte superior de su capa. ¿Quieres forzar la selección a la cima? +Selection contains components that cannot be mirrored. Do you want to exclude them?|La selección contiene componentes que no se pueden reflejar. ¿Quieres excluirlos? +Selection contains components that cannot be rotated. Do you want to exclude them?|La selección contiene componentes que no se pueden girar. ¿Quieres excluirlos? +Send Backward|Enviar atrás +Send Selection to Back|Enviar selección al reverso +Seven|Siete +Shaft Down|Eje abajo +Shaft Up|Eje arriba +Shape|Forma +Show Grid|Mostrar cuadrícula +Show Rulers|Mostrar gobernantes +Shroud|Sudario +Shrouded|Envuelto +Single Rail|Single Rail +Single Rods|Varillas individuales +Size|Talla +Sizing Mode|Modo de dimensionamiento +Small-button B7G|Botón pequeño B7G +Smooth|Suave +Snap To...|Ajustar a... +Soap Bar|Pastilla de jabón +Solid|Sólido +South|Sur +Spacing|Espaciado +Square|Cuadrado +Square BR-3|Square BR-3 +Standard|Estándar +Start Arrow|Flecha de inicio +Start Recording|Iniciar la grabación +Stereo|Estéreo +Sticky Points|Puntos pegajosos +Stop Recording|Para de grabar +Stratocaster|Stratocaster +Strip Color|Color de la tira +Stripe|Raya +Stripe 1|Raya 1 +Stripe 2|Raya 2 +Stripe Color|Color de la raya +Stripe Color 1|Color de raya 1 +Stripe Color 2|Color de rayas 2 +Style|Estilo +Submit a Bug|Enviar un error +Suppressor grid|Rejilla supresora +Switched|Conmutado +Switches|Interruptores +Tab|Lengüeta +Tab Border|Borde de tabulación +Tabbed Toolbar|Barra de herramientas con pestañas +Taper|Cirio +Telecaster|Telecaster +Terminal Spacing|Espaciado de terminal +Terminals|Terminales +Test|Prueba +Text|Texto +Text Color|Color de texto +Theme|Tema +There are unsaved changes. Would you like to save them?|Hay cambios sin guardar. ¿Te gustaría salvarlos? +Thickness|Grosor +Three|Tres +Through Hole|A través del orificio +Tick|garrapata +Title|Título +Toolbox|Caja de herramientas +Top|Parte superior +Top Lead|Top Lead +Top Left|Arriba a la izquierda +Top Right|Parte superior derecha +Top-to-Bottom|De arriba hacia abajo +Trace|Rastro +Trace Color|Traza de color +Trace Mask|Trace Mask +Transform Selection|Transformar selección +Triangle|Triángulo +Tubular|Tubular +Two|Dos +Type|Tipo +Ultra-miniature|Ultra miniatura +Underside Pad Color|Color de la almohadilla inferior +Underside Trace Color|Color de trazo inferior +Undo|Deshacer +Ungroup Selection|Desagrupar selección +Unit|Unidad +Upload A Project|Subir un proyecto +User Manual|Manual de usuario +Value|Valor +Vertical|Vertical +Vertical Alignment|Alineamiento vertical +Vertical Inline|En línea vertical +Vertical Offset 1|Desplazamiento vertical 1 +Vertical Offset 2|Desplazamiento vertical 2 +View|Ver +Visible|Visible +Voltage|voltaje +Wafer|Oblea +Warning|Advertencia +Width|Anchura +Winding Spacing|Espaciado sinuoso +X-axis|Eje X +Y-axis|Eje Y +base of 10|base de 10 +base of 2|base de 2 diff --git a/diylc/diylc-swing/lib/diylc-core.jar b/diylc/diylc-swing/lib/diylc-core.jar index 38d1e3a2..e425a718 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 7456a898..6d3c6597 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/DIYLCStarter.java b/diylc/diylc-swing/src/org/diylc/DIYLCStarter.java index 5e4f23f2..ec619d6c 100644 --- a/diylc/diylc-swing/src/org/diylc/DIYLCStarter.java +++ b/diylc/diylc-swing/src/org/diylc/DIYLCStarter.java @@ -34,6 +34,7 @@ import org.apache.log4j.PropertyConfigurator; import org.diylc.appframework.miscutils.ConfigurationManager; import org.diylc.appframework.miscutils.PropertyInjector; import org.diylc.core.IView; +import org.diylc.lang.TranslateUtil; import org.diylc.presenter.Presenter; import org.diylc.swing.gui.MainFrame; import org.diylc.swing.gui.TemplateDialog; @@ -67,7 +68,7 @@ public class DIYLCStarter { } catch (Exception e) { System.out.println("Splash screen could not be initialized: " + e.getMessage()); splashException = e; - } + } URL url = DIYLCStarter.class.getResource("log4j.properties"); Properties properties = new Properties(); @@ -79,6 +80,8 @@ public class DIYLCStarter { } ConfigurationManager.initialize("diylc"); + + TranslateUtil.configure(); LOG.debug("Java version: " + System.getProperty("java.runtime.version") + " by " + System.getProperty("java.vm.vendor")); diff --git a/diylc/diylc-swing/src/org/diylc/swing/gui/MainFrame.java b/diylc/diylc-swing/src/org/diylc/swing/gui/MainFrame.java index 59d21c24..9c4de7c7 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/gui/MainFrame.java +++ b/diylc/diylc-swing/src/org/diylc/swing/gui/MainFrame.java @@ -67,6 +67,7 @@ import org.diylc.common.ITask; import org.diylc.common.PropertyWrapper; import org.diylc.core.IView; import org.diylc.images.IconLoader; +import org.diylc.lang.TranslateUtil; import org.diylc.presenter.Presenter; import org.diylc.swing.IDynamicSubmenuHandler; import org.diylc.swing.ISwingUI; @@ -279,7 +280,7 @@ public class MainFrame extends JFrame implements ISwingUI { @Override public void showMessage(String message, String title, int messageType) { - JOptionPane.showMessageDialog(this, message, title, messageType); + JOptionPane.showMessageDialog(this, message, TranslateUtil.translate(title), messageType); } @Override @@ -295,7 +296,7 @@ public class MainFrame extends JFrame implements ISwingUI { @Override public boolean editProperties(List properties, Set defaultedProperties) { PropertyEditorDialog editor = - DialogFactory.getInstance().createPropertyEditorDialog(properties, "Edit Selection", true); + DialogFactory.getInstance().createPropertyEditorDialog(properties, TranslateUtil.translate("Edit Selection"), true); editor.setVisible(true); defaultedProperties.addAll(editor.getDefaultedProperties()); return ButtonDialog.OK.equals(editor.getSelectedButtonCaption()); @@ -346,11 +347,19 @@ public class MainFrame extends JFrame implements ISwingUI { @Override public void injectMenuAction(Action action, String menuName) { LOG.info(String.format("injectMenuAction(%s, %s)", action == null ? "Separator" : action.getValue(Action.NAME), - menuName)); - JMenu menu = findOrCreateMenu(menuName); + menuName)); + if (menuName != null) + menuName = TranslateUtil.translate(menuName); + + JMenu menu = findOrCreateMenu(menuName); if (action == null) { menu.addSeparator(); - } else { + } else { + // translate + String name = (String) action.getValue(Action.NAME); + if (name != null) + action.putValue(Action.NAME, TranslateUtil.translate(name)); + Boolean isCheckBox = (Boolean) action.getValue(IView.CHECK_BOX_MENU_ITEM); String groupName = (String) action.getValue(IView.RADIO_BUTTON_GROUP_KEY); if (isCheckBox != null && isCheckBox) { @@ -373,8 +382,13 @@ public class MainFrame extends JFrame implements ISwingUI { } @Override - public void injectSubmenu(String name, Icon icon, String parentMenuName) { - LOG.info(String.format("injectSubmenu(%s, icon, %s)", name, parentMenuName)); + public void injectSubmenu(String name, Icon icon, String parentMenuName) { + LOG.info(String.format("injectSubmenu(%s, icon, %s)", name, parentMenuName)); + + // translate + name = TranslateUtil.translate(name); + parentMenuName = parentMenuName == null ? null : TranslateUtil.translate(parentMenuName); + JMenu menu = findOrCreateMenu(parentMenuName); JMenu submenu = new JMenu(name); submenu.setIcon(icon); @@ -389,7 +403,12 @@ public class MainFrame extends JFrame implements ISwingUI { @Override public void injectDynamicSubmenu(String name, Icon icon, String parentMenuName, final IDynamicSubmenuHandler handler) { - LOG.info(String.format("injectDynamicSubmenu(%s, icon, %s)", name, parentMenuName)); + LOG.info(String.format("injectDynamicSubmenu(%s, icon, %s)", name, parentMenuName)); + + // translate + name = TranslateUtil.translate(name); + parentMenuName = parentMenuName == null ? null : TranslateUtil.translate(parentMenuName); + final JMenu menu = findOrCreateMenu(parentMenuName); final JMenu submenu = new JMenu(name); submenu.setIcon(icon); diff --git a/diylc/diylc-swing/src/org/diylc/swing/gui/actionbar/ActionBarPlugin.java b/diylc/diylc-swing/src/org/diylc/swing/gui/actionbar/ActionBarPlugin.java index e19c5440..3f6ae0d7 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/gui/actionbar/ActionBarPlugin.java +++ b/diylc/diylc-swing/src/org/diylc/swing/gui/actionbar/ActionBarPlugin.java @@ -36,6 +36,7 @@ import org.diylc.common.IComponentTransformer; import org.diylc.common.IPlugIn; import org.diylc.common.IPlugInPort; import org.diylc.images.IconLoader; +import org.diylc.lang.TranslateUtil; import org.diylc.swing.ActionFactory; import org.diylc.swing.ISwingUI; import org.diylc.swing.plugins.help.HelpMenuPlugin; @@ -55,7 +56,7 @@ public class ActionBarPlugin implements IPlugIn { private ConfigToolbar configToolbar; private JLabel donateLabel; - private static final String DONATE_HTML = "Enjoying DIYLC? Click here to buy me a coffe :)"; + private static final String DONATE_HTML = "" + TranslateUtil.translate("Enjoying DIYLC? Click here to buy me a coffe :)") + ""; public ActionBarPlugin(ISwingUI swingUI) { this.swingUI = swingUI; diff --git a/diylc/diylc-swing/src/org/diylc/swing/gui/editor/EnumEditor.java b/diylc/diylc-swing/src/org/diylc/swing/gui/editor/EnumEditor.java index d5dec1c7..49e925bd 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/gui/editor/EnumEditor.java +++ b/diylc/diylc-swing/src/org/diylc/swing/gui/editor/EnumEditor.java @@ -21,14 +21,18 @@ */ package org.diylc.swing.gui.editor; -import java.awt.Color; +import java.awt.Color; +import java.awt.Component; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; -import javax.swing.DefaultComboBoxModel; -import javax.swing.JComboBox; - -import org.diylc.common.PropertyWrapper; +import javax.swing.DefaultComboBoxModel; +import javax.swing.DefaultListCellRenderer; +import javax.swing.JComboBox; +import javax.swing.JList; + +import org.diylc.common.PropertyWrapper; +import org.diylc.lang.TranslateUtil; import org.diylc.utils.Constants; public class EnumEditor extends JComboBox { @@ -44,7 +48,19 @@ public class EnumEditor extends JComboBox { Object[] values = property.getType().getEnumConstants(); if (property.isReadOnly()) setEnabled(false); - setModel(new DefaultComboBoxModel(values)); + setModel(new DefaultComboBoxModel(values)); + setRenderer(new DefaultListCellRenderer() { + + private static final long serialVersionUID = 1L; + + @Override + public Component getListCellRendererComponent(JList list, Object value, int index, + boolean isSelected, boolean cellHasFocus) { + // TODO Auto-generated method stub + return super.getListCellRendererComponent(list, value == null ? null : TranslateUtil.translate(value.toString()), index, isSelected, cellHasFocus); + } + + }); setSelectedItem(property.getValue()); addItemListener(new ItemListener() { diff --git a/diylc/diylc-swing/src/org/diylc/swing/gui/editor/PropertyEditorDialog.java b/diylc/diylc-swing/src/org/diylc/swing/gui/editor/PropertyEditorDialog.java index 82a716fa..950f1d98 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/gui/editor/PropertyEditorDialog.java +++ b/diylc/diylc-swing/src/org/diylc/swing/gui/editor/PropertyEditorDialog.java @@ -43,6 +43,7 @@ import javax.swing.JPanel; import org.apache.log4j.Logger; import org.diylc.common.PropertyWrapper; import org.diylc.core.ValidationException; +import org.diylc.lang.TranslateUtil; import org.diylc.swingframework.ButtonDialog; public class PropertyEditorDialog extends ButtonDialog { @@ -127,7 +128,7 @@ public class PropertyEditorDialog extends ButtonDialog { gbc.weightx = 0; gbc.insets = new Insets(4, 2, 2, 2); gbc.anchor = GridBagConstraints.WEST; - editorPanel.add(new JLabel(property.getName() + ": "), gbc); + editorPanel.add(new JLabel(TranslateUtil.translate(property.getName()) + ": "), gbc); gbc.gridx = 1; gbc.fill = GridBagConstraints.HORIZONTAL; diff --git a/diylc/diylc-swing/src/org/diylc/swing/plugins/help/HelpMenuPlugin.java b/diylc/diylc-swing/src/org/diylc/swing/plugins/help/HelpMenuPlugin.java index c3bd847f..71b3acea 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/plugins/help/HelpMenuPlugin.java +++ b/diylc/diylc-swing/src/org/diylc/swing/plugins/help/HelpMenuPlugin.java @@ -39,6 +39,7 @@ import org.diylc.common.IPlugIn; import org.diylc.common.IPlugInPort; import org.diylc.core.IView; import org.diylc.images.IconLoader; +import org.diylc.lang.TranslateUtil; import org.diylc.swing.ISwingUI; import org.diylc.swing.gui.DialogFactory; import org.diylc.swingframework.AboutDialog; @@ -122,7 +123,7 @@ public class HelpMenuPlugin implements IPlugIn { public AboutAction() { super(); - putValue(AbstractAction.NAME, "About"); + putValue(AbstractAction.NAME, TranslateUtil.translate("About")); putValue(AbstractAction.SMALL_ICON, IconLoader.About.getIcon()); } @@ -138,7 +139,7 @@ public class HelpMenuPlugin implements IPlugIn { public RecentUpdatesAction() { super(); - putValue(AbstractAction.NAME, "Recent Updates"); + putValue(AbstractAction.NAME, TranslateUtil.translate("Recent Updates")); putValue(AbstractAction.SMALL_ICON, IconLoader.ScrollInformation.getIcon()); } @@ -164,7 +165,7 @@ public class HelpMenuPlugin implements IPlugIn { public NavigateURLAction(String name, Icon icon, String url) { super(); this.url = url; - putValue(AbstractAction.NAME, name); + putValue(AbstractAction.NAME, TranslateUtil.translate(name)); putValue(AbstractAction.SMALL_ICON, icon); } @@ -187,7 +188,7 @@ public class HelpMenuPlugin implements IPlugIn { public NavigateFolderAction(String name, Icon icon, String url) { super(); this.url = url; - putValue(AbstractAction.NAME, name); + putValue(AbstractAction.NAME, TranslateUtil.translate(name)); putValue(AbstractAction.SMALL_ICON, icon); }