diff --git a/src/main/java/de/neemann/digital/core/element/Keys.java b/src/main/java/de/neemann/digital/core/element/Keys.java index 030d5e03f..7b0e43e7d 100644 --- a/src/main/java/de/neemann/digital/core/element/Keys.java +++ b/src/main/java/de/neemann/digital/core/element/Keys.java @@ -2,8 +2,7 @@ package de.neemann.digital.core.element; import de.neemann.digital.core.io.IntFormat; import de.neemann.digital.core.memory.DataField; -import de.neemann.digital.lang.Language; -import de.neemann.digital.lang.Languages; +import de.neemann.gui.language.Language; import java.util.Locale; @@ -207,7 +206,7 @@ public final class Keys { * The Gui Language */ public static final Key SETTINGS_LANGUAGE - = new Key<>("Language", Languages.getInstance().getDefault()); + = new Key<>("Language", new Language()); /** diff --git a/src/main/java/de/neemann/digital/draw/elements/Circuit.java b/src/main/java/de/neemann/digital/draw/elements/Circuit.java index 1185c1104..4469cabb0 100644 --- a/src/main/java/de/neemann/digital/draw/elements/Circuit.java +++ b/src/main/java/de/neemann/digital/draw/elements/Circuit.java @@ -18,7 +18,7 @@ import de.neemann.digital.draw.shapes.Drawable; import de.neemann.digital.draw.shapes.ShapeFactory; import de.neemann.digital.gui.components.AttributeDialog; import de.neemann.digital.lang.Lang; -import de.neemann.digital.lang.Language; +import de.neemann.gui.language.Language; import java.awt.*; import java.io.*; diff --git a/src/main/java/de/neemann/digital/gui/components/EditorFactory.java b/src/main/java/de/neemann/digital/gui/components/EditorFactory.java index 174fccda5..79a91aba0 100644 --- a/src/main/java/de/neemann/digital/gui/components/EditorFactory.java +++ b/src/main/java/de/neemann/digital/gui/components/EditorFactory.java @@ -7,10 +7,10 @@ import de.neemann.digital.core.io.IntFormat; import de.neemann.digital.core.memory.DataField; import de.neemann.digital.core.memory.ROM; import de.neemann.digital.lang.Lang; -import de.neemann.digital.lang.Language; -import de.neemann.digital.lang.Languages; import de.neemann.gui.ErrorMessage; import de.neemann.gui.ToolTipAction; +import de.neemann.gui.language.Bundle; +import de.neemann.gui.language.Language; import javax.swing.*; import java.awt.*; @@ -18,6 +18,7 @@ import java.awt.event.ActionEvent; import java.io.IOException; import java.lang.reflect.Constructor; import java.util.HashMap; +import java.util.List; /** * @author hneemann @@ -312,8 +313,10 @@ public final class EditorFactory { private JComboBox comb; public LanguageEditor(Language language, Key key) { - comb = new JComboBox<>(Languages.getInstance().getSupportedLanguages()); - comb.setSelectedIndex(Languages.getInstance().getIndexOf(language)); + Bundle b = Lang.getBundle(); + List supLang = b.getSupportedLanguages(); + comb = new JComboBox<>(supLang.toArray(new Language[supLang.size()])); + comb.setSelectedItem(Lang.currentLanguage()); } @Override @@ -323,7 +326,7 @@ public final class EditorFactory { @Override public Language getValue() { - return Languages.getInstance().getByIndex(comb.getSelectedIndex()); + return (Language) comb.getSelectedItem(); } } } diff --git a/src/main/java/de/neemann/digital/lang/Lang.java b/src/main/java/de/neemann/digital/lang/Lang.java index 5024e26f4..7c66b9cd4 100644 --- a/src/main/java/de/neemann/digital/lang/Lang.java +++ b/src/main/java/de/neemann/digital/lang/Lang.java @@ -1,9 +1,11 @@ package de.neemann.digital.lang; +import de.neemann.gui.language.Bundle; +import de.neemann.gui.language.Language; +import de.neemann.gui.language.Resources; + import java.text.MessageFormat; import java.util.Locale; -import java.util.MissingResourceException; -import java.util.ResourceBundle; import java.util.prefs.Preferences; /** @@ -49,44 +51,58 @@ public final class Lang { return InstanceHolder.INSTANCE.getKeyNull(key, params); } - private final ResourceBundle defaultBundle; - private ResourceBundle localeBundle; + /** + * @return the resource bundle + */ + public static Bundle getBundle() { + return InstanceHolder.INSTANCE.bundle; + } + + /** + * @return the current language + */ + public static Language currentLanguage() { + return InstanceHolder.INSTANCE.currentLanguage; + } + + + private final Bundle bundle; + private final Resources defaultBundle; + private final Resources localeBundle; + private final Language currentLanguage; private Lang() { - defaultBundle = ResourceBundle.getBundle("lang/lang", Locale.ENGLISH); - try { - String lang = PREFS.get(LANGUAGE, null); - Locale currentLocale = Languages.getInstance().getLocaleByName(lang); - localeBundle = ResourceBundle.getBundle("lang/lang", currentLocale); - } catch (MissingResourceException e) { - } + bundle = new Bundle("lang/lang"); + defaultBundle = bundle.getResources("en"); + String lang = PREFS.get(LANGUAGE, Locale.getDefault().getLanguage()); + localeBundle = bundle.getResources(lang); + + if (localeBundle != null) + currentLanguage = new Language(lang); + else + currentLanguage = new Language("en"); } private String getKey(String key, Object... params) { - try { - return decodeString(localeBundle, key, params); - } catch (MissingResourceException e) { + String str = null; + if (localeBundle != null) + str = decodeString(localeBundle, key, params); + if (str == null) { System.out.println(key + "=" + key.substring(key.indexOf("_") + 1)); - try { - return decodeString(defaultBundle, key, params); - } catch (MissingResourceException e1) { - return key; - } + str = decodeString(defaultBundle, key, params); + if (str == null) + str = key; } + return str; } private String getKeyNull(String key, Object... params) { - try { - return decodeString(localeBundle, key, params); - } catch (MissingResourceException e) { -// System.out.println(key + "=" + key.substring(key.indexOf("_") + 1)); - return null; - } + return decodeString(localeBundle, key, params); } - private String decodeString(ResourceBundle bundle, String key, Object[] params) { - String str = bundle.getString(key); - if (params != null && params.length > 0) + private String decodeString(Resources resources, String key, Object[] params) { + String str = resources.get(key); + if (str != null && params != null && params.length > 0) str = MessageFormat.format(str, params); return str; } diff --git a/src/main/java/de/neemann/digital/lang/Language.java b/src/main/java/de/neemann/digital/lang/Language.java deleted file mode 100644 index f7c1d5fea..000000000 --- a/src/main/java/de/neemann/digital/lang/Language.java +++ /dev/null @@ -1,54 +0,0 @@ -package de.neemann.digital.lang; - -import java.util.Locale; - -/** - * @author hneemann - */ -public final class Language { - - private final String name; - private transient Locale locale; - - /** - * Creates a new instance - * - * @param name the languages name - */ - public Language(String name) { - this.name = name; - } - - /** - * Creates a new instance - * - * @param locale the locale - */ - public Language(Locale locale) { - this(locale.getLanguage()); - this.locale = locale; - } - - @Override - public String toString() { - return name; - } - - /** - * Returns the locale - * - * @return the locale - */ - Locale getLocale() { - return locale; - } - - /** - * returns the name - * - * @return the name - */ - public String getName() { - return name; - } -} diff --git a/src/main/java/de/neemann/digital/lang/Languages.java b/src/main/java/de/neemann/digital/lang/Languages.java deleted file mode 100644 index bee873a9f..000000000 --- a/src/main/java/de/neemann/digital/lang/Languages.java +++ /dev/null @@ -1,106 +0,0 @@ -package de.neemann.digital.lang; - -import java.util.ArrayList; -import java.util.Locale; - -/** - * @author hneemann - */ -public final class Languages { - - private static final class InstanceHolder { - private static final Languages INSTANCE = new Languages(); - } - - /** - * @return the languages instance - */ - public static Languages getInstance() { - return InstanceHolder.INSTANCE; - } - - private final ArrayList list = new ArrayList<>(); - private String[] strArray; - - private Languages() { - add(Locale.US); - add(Locale.GERMANY); - } - - private void add(Locale locale) { - list.add(new Language(locale)); - } - - /** - * Returns a list of all supported languages - * - * @return the languages list - */ - public String[] getSupportedLanguages() { - if (strArray == null) { - strArray = new String[list.size()]; - for (int i = 0; i < strArray.length; i++) - strArray[i] = list.get(i).getLocale().getDisplayName(); - } - return strArray; - } - - /** - * Returns the index of the given language - * - * @param language the language - * @return the index - */ - public int getIndexOf(Language language) { - for (int i = 0; i < list.size(); i++) - if (list.get(i).getName().equals(language.getName())) - return i; - return 0; - } - - /** - * Returns the language by the languages index - * - * @param index the index - * @return the language - */ - public Language getByIndex(int index) { - return list.get(index); - } - - /** - * Returns the default language - * - * @return the systems language, if there is a translation, US otherwise - */ - public Language getDefault() { - String lang = Locale.getDefault().getLanguage(); - for (Language l : list) { - if (l.getLocale().getLanguage().equals(lang)) - return l; - } - return list.get(0); - } - - /** - * Returns a locale by the given name - * - * @param lang the language name - * @return the locale matching the language - */ - public Locale getLocaleByName(String lang) { - return getLanguageByName(lang).getLocale(); - } - - private Language getLanguageByName(String lang) { - if (lang == null) - return getDefault(); - - for (Language l : list) - if (l.getName().equals(lang)) - return l; - - return getDefault(); - } - -} diff --git a/src/main/java/de/neemann/gui/language/Bundle.java b/src/main/java/de/neemann/gui/language/Bundle.java new file mode 100644 index 000000000..e2bc12c81 --- /dev/null +++ b/src/main/java/de/neemann/gui/language/Bundle.java @@ -0,0 +1,65 @@ +package de.neemann.gui.language; + +import com.thoughtworks.xstream.XStream; +import com.thoughtworks.xstream.io.xml.StaxDriver; + +import java.io.InputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author hneemann + */ +public class Bundle { + + private final HashMap languages; + private final String name; + private final ArrayList list; + + private static XStream getxStream() { + XStream xStream = new XStream(new StaxDriver()); + xStream.alias("languages", Map.class); + xStream.registerConverter(new Resources.MapEntryConverter()); + return xStream; + } + + /** + * Creates a new instance + * + * @param name the bundles name + */ + public Bundle(String name) { + this.name = name; + InputStream in = getClass().getClassLoader().getResourceAsStream(name + ".xml"); + XStream xStream = getxStream(); + languages = (HashMap) xStream.fromXML(in); + list = new ArrayList<>(); + for (Map.Entry e : languages.entrySet()) + list.add(new Language(e.getKey(), e.getValue())); + } + + /** + * returnce the resources for the given language + * + * @param lang the language + * @return the resources + */ + public Resources getResources(String lang) { + if (!languages.containsKey(lang)) + return null; + + InputStream in = getClass().getClassLoader().getResourceAsStream(name + "_" + lang + ".xml"); + return new Resources(in); + } + + /** + * Returns all supported languages + * + * @return the languages + */ + public List getSupportedLanguages() { + return list; + } +} diff --git a/src/main/java/de/neemann/gui/language/Language.java b/src/main/java/de/neemann/gui/language/Language.java new file mode 100644 index 000000000..f6eb03be4 --- /dev/null +++ b/src/main/java/de/neemann/gui/language/Language.java @@ -0,0 +1,75 @@ +package de.neemann.gui.language; + +import java.util.Locale; + +/** + * @author hneemann + */ +public final class Language implements Comparable { + + private final String name; + private final String displayName; + + /** + * Creates a new instance + * + * @param name the languages name + */ + public Language(String name) { + this(name, ""); + } + + /** + * Creates a new instance with the current language + */ + public Language() { + this(Locale.getDefault().getLanguage()); + } + + /** + * Creates new instance + * + * @param name name, eq. "en" or "de" + * @param displayName displayname + */ + public Language(String name, String displayName) { + this.name = name; + this.displayName = displayName; + } + + + @Override + public String toString() { + return displayName; + } + + /** + * returns the name + * + * @return the name + */ + public String getName() { + return name; + } + + @Override + public int compareTo(Language o) { + return displayName.compareTo(o.displayName); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + Language language = (Language) o; + + return name != null ? name.equals(language.name) : language.name == null; + + } + + @Override + public int hashCode() { + return name != null ? name.hashCode() : 0; + } +} diff --git a/src/main/java/de/neemann/gui/language/Resources.java b/src/main/java/de/neemann/gui/language/Resources.java new file mode 100644 index 000000000..cda95d3a6 --- /dev/null +++ b/src/main/java/de/neemann/gui/language/Resources.java @@ -0,0 +1,125 @@ +package de.neemann.gui.language; + +import com.thoughtworks.xstream.XStream; +import com.thoughtworks.xstream.converters.Converter; +import com.thoughtworks.xstream.converters.MarshallingContext; +import com.thoughtworks.xstream.converters.UnmarshallingContext; +import com.thoughtworks.xstream.io.HierarchicalStreamReader; +import com.thoughtworks.xstream.io.HierarchicalStreamWriter; +import com.thoughtworks.xstream.io.xml.PrettyPrintWriter; +import com.thoughtworks.xstream.io.xml.StaxDriver; + +import java.io.*; +import java.util.*; + +/** + * @author hneemann + */ +public class Resources { + + private static XStream getxStream() { + XStream xStream = new XStream(new StaxDriver()); + xStream.alias("resources", Map.class); + xStream.registerConverter(new MapEntryConverter()); + return xStream; + } + + private final Map resourceMap; + + Resources() { + this(new HashMap()); + } + + private Resources(ResourceBundle bundle) { + this(createMap(bundle)); + } + + private static Map createMap(ResourceBundle bundle) { + Map map = new TreeMap<>(); + Enumeration en = bundle.getKeys(); + while (en.hasMoreElements()) { + String key = en.nextElement(); + String value = bundle.getString(key); + map.put(key, value); + } + return map; + } + + + private Resources(Map map) { + resourceMap = map; + } + + /** + * Reads the recources from the given stream + * + * @param in the input stream + */ + public Resources(InputStream in) { + this(loadMap(in)); + } + + private static HashMap loadMap(InputStream in) { + XStream xStream = getxStream(); + return (HashMap) xStream.fromXML(in); + } + + void save(OutputStream out) throws IOException { + XStream xStream = getxStream(); + try (Writer w = new OutputStreamWriter(out, "utf-8")) { + w.write("\n"); + xStream.marshal(resourceMap, new PrettyPrintWriter(w)); + } + } + + void put(String key, String value) { + resourceMap.put(key, value); + } + + /** + * Returns a entry by the given key + * + * @param key the key + * @return the entry + */ + public String get(String key) { + return resourceMap.get(key); + } + + static class MapEntryConverter implements Converter { + + public boolean canConvert(Class clazz) { + return Map.class.isAssignableFrom(clazz); + } + + public void marshal(Object value, HierarchicalStreamWriter writer, MarshallingContext context) { + Map map = (Map) value; + for (Object obj : map.entrySet()) { + Map.Entry entry = (Map.Entry) obj; + writer.startNode("string"); + writer.addAttribute("name", entry.getKey().toString()); + writer.setValue(entry.getValue().toString()); + writer.endNode(); + } + } + + public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) { + Map map = new HashMap<>(); + while (reader.hasMoreChildren()) { + reader.moveDown(); + String key = reader.getAttribute("name"); + String value = reader.getValue(); + map.put(key, value); + reader.moveUp(); + } + return map; + } + } + + /** + public static void main(String[] args) throws IOException { + ResourceBundle bundle = ResourceBundle.getBundle("lang/lang", Locale.GERMAN); + Resources r = new Resources(bundle); + r.save(new FileOutputStream("/home/hneemann/Dokumente/Java/digital/src/main/resources/lang/lang_de.xml")); + }*/ +} diff --git a/src/main/java/de/neemann/gui/language/package-info.java b/src/main/java/de/neemann/gui/language/package-info.java new file mode 100644 index 000000000..efd78a04a --- /dev/null +++ b/src/main/java/de/neemann/gui/language/package-info.java @@ -0,0 +1,6 @@ +/** + * Simple classes to replace the java resource bundles + * + * @author hneemann + */ +package de.neemann.gui.language; diff --git a/src/main/resources/lang/lang.xml b/src/main/resources/lang/lang.xml new file mode 100644 index 000000000..125fda88c --- /dev/null +++ b/src/main/resources/lang/lang.xml @@ -0,0 +1,5 @@ + + + English + Deutsch + diff --git a/src/main/resources/lang/lang_de.properties b/src/main/resources/lang/lang_de.properties deleted file mode 100644 index 397127b8c..000000000 --- a/src/main/resources/lang/lang_de.properties +++ /dev/null @@ -1,356 +0,0 @@ -digital=Digital -message=Digital\n\nEin einfacher Simulator f\u00FCr digitale Schaltkreise.\n\nGeschrieben von Helmut Neemann 2016 -ok=Ok -addr=Adresse -#Library -lib_Logic=Logisch -lib_io=IO -lib_mux=Multiplexer -lib_wires=Leitungen -lib_flipFlops=FlipFlops -lib_memory=Speicher -lib_arithmetic=Arithmetik -key_Bits=Datenbits -key_Inputs=Anzahl der Eing\u00E4nge -key_Label=Bezeichnung -key_Value=Wert -key_Default=Vorgabe -key_Default_tt=Wird beim Schaltungsstart gesetzt -key_Color=Farbe -key_InputSplitting=Eingangsaufteilung -key_InputSplitting_tt=Zum Beispiel "4,2,2" oder "[Bits]*[Anzahl] wie "1*16" f\u00FCr 16 einzelne Bits -key_OutputSplitting=Ausgangsaufteilung -key_OutputSplitting_tt=Zum Beispiel "4,2,2" oder "[Bits]*[Anzahl] wie "1*16" f\u00FCr 16 einzelne Bits -key_runRealTime=Echtzeittakt starten -key_runRealTime_tt=Wenn eingeschaltet, wird beim Start der Schaltung der Echtzeittakt gestartet -key_Frequency=Frequenz/Hz -key_Frequency_tt=Gibt die Frequenz an, wenn der Echtzeittakt aktiviert ist -key_SelectorBits=Anzahl der Auswahlbits -key_Signed=Vorzeichen -key_Data=Daten -key_AddrBits=Adress Bits -key_flipSelPos=Tausche Position des Selectors -key_rotation=Rotation -key_Width=Breite -key_Width_tt=Breite des Symbols wenn diese Schaltung in eine andere eingef\u00FCgt wird. -key_Cycles=Timeout Zyklen -key_Cycles_tt=Wenn nach dieser Anzahl von Takten kein Break eingegangen ist, wird ein Fehler erzeugt -key_termWidth=Zeichen pro Zeile -key_termHeight=Zeilen -key_valueIsProbe=Als Messwert verwenden -key_valueIsProbe_tt=Wenn gesetzt, taucht der Wert als Messwert in Graph und Tabelle auf -key_showList=Zeige Listing an, wenn verf\u00FCgbar -key_showDataTable=Zeige Messwertetabelle -key_showDataGraph=Zeige Messwertegraph -key_showDataGraphMicro=Zeige Messwertgraph im Gatterschrittmodus -key_maxStepCount=Maximale Messpunktezahl -key_microStep=Zeige Einzelgatterschritte -key_isHighZ=Eingang kann hochohmig sein -key_Description=Beschreibung -key_NetName=Netzname -key_NetName_tt=Alle Netze mit identischem Namen werden miteinander verbunden. -key_IEEEShapes=Verwende US Symbole (IEEE 91-1984) -key_IEEEShapes_tt=Verwende IEEE 91-1984 Symbole anstelle der rechteckige Symbole -key_intFormat=Zahlenformat -key_intFormat_def=Vorgabe -key_intFormat_dec=Dezimal -key_intFormat_hex=Hexadezimal -key_intFormat_bin=Bin\u00E4r -key_intFormat_ascii=ASCII -key_Language=Sprache - -attr_openCircuitLabel=Enthaltene Schaltung: -attr_openCircuit=Anzeigen -attr_openCircuit_tt=\u00D6ffnet die Schaltung in einem neuen Fenster. - - -elem_And=Und -elem_NAnd=Nicht Und -elem_Or=Oder -elem_NOr=Nicht Oder -elem_XOr=Exclusiv Oder -elem_XNOr=Nicht Exclusiv Oder -elem_Not=Nicht -elem_LookUpTable=LookUpTable -elem_LookUpTable_tt=Erzeugt einen Ausgabewert aus einer Tabelle.\nAuf diese Weise kann jedes kombinatorische Gatter erzeugt werden. -elem_In=Eingang -elem_In_tt=Ein Eingang der genutzt werden kann, um eine Verbindung zu einem eingebettetem Element herzustellen. -elem_Out=Ausgang -elem_Out_tt=Ein Ausgang der genutzt werden kann, um eine Verbindung zu einem eingebettetem Element herzustellen. -elem_LED=LED -elem_Button=Taster -elem_Probe=Messwert -elem_Probe_tt=Ein Messwert, welcher im Messwertgraphen dargestellt werden kann. -elem_Seven-Seg=Siebensegmentanzeige -elem_Seven-Seg_tt=Siebensegmentanzeige bei der jedes Segment \u00FCber einen eigenen Eingang gesteuert werden kann. -elem_Seven-Seg-Hex=Siebensegmentanzeige Hex -elem_Seven-Seg-Hex_tt=Siebensegmentanzeige mit einem 4 Bit hexadezimalem Eingang. -elem_Terminal=Terminal -elem_Terminal_tt=Ein Terminal auf dem ASCII-Zeichen ausgegeben werden k\u00F6nnen. \u00D6ffnet ein eigenes Fenster. -elem_Terminal_pin_D=Terminal_pin_D -elem_Terminal_pin_C=Terminal_pin_C -elem_Data=Messwertgraph -elem_Data_tt=Zeigt einen Messwertgraphen innerhalb des Schaltkreisbereichs.\nEs k\u00F6nnen sowohl komplette Takte als auch einzelne Gatter-Ver\u00E4nderungen angezeigt werden. -elem_Multiplexer=Multiplexer -elem_Multiplexer_tt=W\u00E4hlt eine der Eingangsleitungen aus, und gibt dessen Wert am Ausgang aus. -elem_Multiplexer_pin_sel=Mit dieser Leitung wird der Eingang ausgew\u00E4hlt -elem_Demultiplexer=Demultiplexer -elem_Demultiplexer_tt=Gibt ein Eingangssignal auf einem w\u00E4hlbaren Ausgang aus, die anderen Ausg\u00E4nge sind Null. -elem_Demultiplexer_pin_sel=Mit dieser Leitung wird der Ausgang ausgew\u00E4hlt -elem_Decoder=Decoder -elem_Decoder_tt=Eine w\u00E4hlbare Ausgangsleitung geht auf Eins, alle anderen sind Null. -elem_Decode_pin_sel=Mit dieser Leitung wird der zu aktivierende Ausgang ausgew\u00E4hlt -elem_Const=Konstante -elem_Const_tt=Eine einfache Konstante. -elem_Splitter=Splitter -elem_Splitter_tt=F\u00FChrt mehrere Leitungen zu einer gemeinsamen Leitung zusammen, bzw. splittet diese wieder auf. -elem_Clock=Takt -elem_Clock_tt=Ein Takstignal. Dieses Taksignal kann \u00FCber die Echtzeituhr gesteuert werden. -elem_Delay=Verz\u00F6gerung -elem_Delay_tt=Verz\u00F6gert ein Signal f\u00FCr eine Gatterlaufzeit. -elem_Driver=Treiber -elem_DriverInvSel=Treiber, invertierte Auswahl -elem_Reset=Reset -elem_Reset_tt=Der Ausgang dieses Elements ist Null, solange sich die Schaltung nach dem Einschalten in der Stabilisierungsphase befindet.\nHat sich die Schaltung stabilisiert wird der Ausgang auf Eins gesetzt. -elem_Break=Break -elem_Break_tt=Wenn der Eingang dieses Elementes zu Eins wird, wird der schnelle Simulationslauf beendet.\nDieses Element kann verwendet werden, um einen Assemblerbefehl BRK zu implementieren.\nEs kann dann ein Programm bis zum n\u00E4chsten BRK-Befehl ausgef\u00FChrt werden. -elem_RS_FF=RS_FF -elem_JK_FF=JK_FF -elem_D_FF=D_FF -elem_T_FF=T_FF -elem_Register=Register -elem_ROM=ROM -elem_ROM_pin_address=Adresse des Datenwortes welches ausgelesen werden soll. -elem_ROM_pin_sel=Ist dieser Pin high (1) ist der Ausgang aktiviert. Ist er low (0) ist der Ausgang hochohmig. -elem_ROM_pin_data=Hier wird das Datenwort ausgegeben, wenn der Baustein aktiviert ist. -elem_RAMDualPort=RAMDualPort -elem_RAMDualPort_tt=Ein RAM Modul mit getrennten Anschl\u00FCssen f\u00FCr Lesen und Schreiben.\nEin gibt einen Eingang f\u00FCr das Beschreiben und einen Ausgang f\u00FCr das Auslesen der gespeicherten Daten. -elem_RAMDualPort_pin_addr=Die Adresse, an der gelesen und geschrieben wird. -elem_RAMDualPort_pin_dataIn=Der Daten die gespeichert werden sollen -elem_RAMDualPort_pin_str=Ist diese Leitung high wird das Datenwort gespeichert, wenn der Takt ansteigt. -elem_RAMDualPort_pin_c=Der Takt -elem_RAMDualPort_pin_ld=Ist diese Leitung high, wird der Ausgang aktiviert, und die Daten liegen dort an -elem_RAMDualPort_pin_dataOut=Der Datenausgang -elem_RAMSinglePort=RAMSinglePort -elem_RAMSinglePort_tt=Ein RAM Module mit einem bidirektionellem Anschluss f\u00FCr das Lesen und Schreiben von Daten. -elem_RAMSinglePort_pin_addr=Der Adresseingang. -elem_RAMSinglePort_pin_str=Ist dieser Eingang 1 wird mit steigendem Takt das Datenwort gespeichert. -elem_RAMSinglePort_pin_c=Takt -elem_RAMSinglePort_pin_ld=Ist dieser Eingang 1 wird das Datenwort ausgegeben. -elem_RAMSinglePort_pin_d=Der bidirektionale Datenanschlu\u00DF. - -elem_Counter=Z\u00E4hler -elem_Add=Addierer -elem_Sub=Subtrahierer -elem_Mul=Multiplikator -elem_Comparator=Komparator - -elem_Text=Text -elem_Text_tt=Zeigt einen einfachen Text in der Schaltung an. - -rot_0=0\u00B0 -rot_90=90\u00B0 -rot_180=180\u00B0 -rot_270=270\u00B0 -err_seemsToOscillate=Die Schaltung scheint zu oszillieren!\nZur Analyse k\u00F6nnen Sie die Schaltung im Gatterschrittmodus ausf\u00FChren. -err_notInitialized=Die Schaltung ist nicht initialisiert -err_isAlreadyInitialized=Die Schaltung wurde bereits initialisiert -err_noClockFound=Kein Taktgeber in der Schaltung gefunden -err_moreThenOneClocksFound=Es gibt mehr als einen Taktgeber -err_noInputsAvailable=Es sind keine Eing\u00E4nge vorhanden -err_burnError=Es sind mehrere zusammengeschaltete Ausg\u00E4nge gleichzeitig aktiv -err_needs_N0_bits_found_N2_bits=Es werden {0} Bits ben\u00F6tigt, aber es wurden {1} Bits gefunden -err_selectorInputCountMismatch=Die Zahl der Eing\u00E4nge passt nicht zur Bitbreite der Auswahlleitung -err_splitterBitsMismatch=Die Bitzahl am Spiltter passt nicht -err_pinWithoutName=Es gibt einen Pin ohne einen Namen in {0} -err_pin_N_unknown=Pin {0} ist unbekannt -err_pin_N_notFound=Pin {0} wurde nicht gefunden. -err_netOfPin_N_notFound=Das Netz von Pin {0} wurde nicht gefunden -err_N_isNotInputOrOutput=Pin {0} in Element {1} ist werder Eingang noch Ausgang -err_duplicatePinLabel=Pin {0} in Element {1} exitiert mehrfach -err_pin_N0_atElement_N1_notFound=Pin {0} von Element {1} wurde nicht gefunden -err_noValueSetFor_N0_atElement_N1=Kein Wert gesetzt f\u00FCr {0} an Element {1} -err_onOutConnectedToWire=Kein Ausgang mit der Leitung verbunden -err_output_N_notDefined=Ausgang {0} ist nicht definiert -err_pinNotPresent=Pin nicht vorhanden -err_duplicateElement_N=Doppeltes Element {0} -err_element_N_notFound=Element {0} nicht gefunden -err_spitterDefSyntaxError=Fehler in der Definition {0} eines Splitters -err_noShapeFoundFor_N=Es wurde kein Diagramm f\u00FCr {0} gefunden. -err_invalidFileFormat=Ung\u00FCltiges Dateiformat -err_readOfHighZ=Lesen einer hochohmigen Leitung -err_notAllOutputsSameBits=Es haben nicht alle Ausg\u00E4nge die gleiche Bitbreite -err_notAllOutputsSupportHighZ=Wenn mehrere Ausg\u00E4nge verbunden sind, m\u00FCssen alle Ausg\u00E4nge Tri-State Ausg\u00E4nge sein -err_breakTimeOut=Nach {0} Zyklen ist kein Break aufgetreten -err_labelNotConnectedToNet_N=Ein Tunnel {0} ist nicht verbunden! -err_DFlipflopWithoutALabel=Flipflop hat keine Bezeichnung! -err_analyseNoInputs=Die Schaltung hat keine benannten Eing\u00E4nge -err_analyseNoOutputs=Die Schaltung hat keine benannten Ausg\u00E4nge -err_analyseValue_N_IsNotBinary=Der Wert {0} hat mehr als ein Bit. -err_containsVarAndNotVar=Enth\u00E4lt [var] und [nicht var] -err_varNotDefined_N=Variable {0} ist nicht definiert. -err_exact_N0_valuesNecessaryNot_N1=Es sind {0} Variablen erforderlich, nicht {1} -err_builder_exprNotSupported=Ausdruck {0} wird nicht unterst\u00FCtzt. -err_builder_operationNotSupported=Operation {0} wird nicht unterst\u00FCtzt. -err_toManyInputs_N=Zu viele Eing\u00E4nge. Es sind nur {0} Eing\u00E4nge erlaubt. -err_oneResultIsRequired=Table zu klein: Mindestens ein Ergebnis ist erforderlich! -err_tableBecomesToSmall=Es sind mindestens zwei Eing\u00E4nge erforderlich! -err_varNotAllowedInCUPL_N= In CUPL ist die Variable {0} nicht erlaubt! -err_pinMap_Pin_N_AssignedTwicerPin=Pin {0} doppelt belegt! -err_pinMap_toMannyInputsDefined=Zu viele Eing\u00E4nge definiert! -err_pinMap_toMannyOutputsDefined=Zu viele Ausg\u00E4nge definiert! -err_pinMap_noEqualsfound=Kein \"=\" gefunden! -err_pinMap_NoNameForPin_N=Kein Name f\u00FCr Pin {0} -err_pinMap_input_N_notAllowed=Eingang {0} ist nicht erlaubt! -err_pinMap_output_N_notAllowed=Ausgang {0} ist nicht erlaubt! -err_cannotAnalyse_N=Element {0} kann nicht analysiert werden. -err_ffNeedsToBeConnectedToClock=Flipflops m\u00FCssen direkt mit dem Takt verbunden sein. -err_aSingleClockNecessary=Es darf nur einen Takt geben. - -attr_dialogTitle=Eigenschaften -msg_errorEditingValue=Fehler bei der Eingabe eines Wertes -msg_color=Farbe -msg_errorImportingModel=Fehler beim Import einer Schaltung -msg_errorCreatingModel=Fehler beim Erzeugen der Schaltung -msg_errorWritingFile=Fehler beim Schreiben einer Datei -msg_errorReadingFile=Fehler beim Lesen einer Datei -msg_errorCalculatingStep=Fehler beim Berechnen eines Schrittes -msg_missingShape_N=Es fehlt ein Diagramm f\u00FCr {0} -msg_fastRunError=Ein Fehler beim schnellen Lauf -msg_errorReadingListing_N0=Fehler beim Laden des Listings {0} -msg_clockError=Fehler bei der Berechnung einer Takt\u00E4nderung -msg_frequency_N=Die maximale Frequenz ber\u00E4gt {0}Hz. -msg_annalyseErr=Fehler bei der Analyse der Schaltung -msg_errorDuringCalculation=Fehler w\u00E4hrend der Vereinfachung. -msg_N_nodes={0} aktive Elemente -msg_restartNeeded=Die \u00C4nderung erfordert einen Neustart! -msg_pinMap_inputs=Eing\u00E4nge -msg_pinMap_outputs=Ausg\u00E4nge -msg_pinMap_pin_N_is_N=Pin {0}: {1} -msg_pinMap_notUsed=nicht verwendet - - -stat_clocks={0} Halbzyklen - -btn_edit=Bearbeiten -btn_load=Laden -btn_reload=Neu Laden -btn_reload_tt=Letzte Datei noch einmal laden -btn_discard=Verwerfen -btn_save=Speichern -btn_editFurther=Weiter bearbeiten - - -tt_moveItemUp=Eintrag nach oben schieben -tt_moveItemDown=Eintrag nach unten schieben -tt_deleteItem=Eintrag l\u00F6schen - -menu_file=Datei -menu_new=Neu -menu_open=\u00D6ffnen -menu_openWin=\u00D6ffnen in neuem Fenster -menu_openWin_tt=\u00D6ffnet eine Schaltung in einem neuen Fenster -menu_openRecent=Zuletzt verwendet -menu_save=Speichern -menu_saveAs=Speichern unter -menu_elements=Elemente -menu_custom=Benutzerdefiniert -menu_import=Importieren -menu_import_tt=Importiert eine Schaltung als verwendbares Bauteil -menu_refresh=Alle neu laden -menu_refresh_tt=Alle importierten Schaltungen werden neu geladen -menu_element=Elemente bearbeiten -menu_element_tt=Bearbeitet die vorhandenen Elemente oder dessen Eigenschaften -menu_edit=Bearbeiten -menu_orderInputs=Sortieren der Eing\u00E4nge -menu_orderInputs_tt=Sortiert die Eing\u00E4nge f\u00FCr die Verwendung als eingebettete Schaltung -menu_orderOutputs=Sortieren der Ausg\u00E4nge -menu_orderOutputs_tt=Sortiert die Ausg\u00E4nge f\u00FCr die Verwendung als eingebettete Schaltung -menu_orderMeasurements=Sortieren der Messwerte -menu_orderMeasurements_tt=Sortiert die Messwerte f\u00FCr die grafische Anzeige und die Tabellenansicht -menu_run=Start -menu_run_tt=Startet die Simulation der Schaltung -menu_step=Schritt -menu_step_tt=F\u00FChrt einen Einzelgatterschritt aus -menu_micro=Gatterschrittmodus -menu_micro_tt=Startet die Schaltung im Gatterschrittmodus -menu_speedTest=Geschwindigkeitstest -menu_speedTest_tt=F\u00FChrt einen Geschwindigkeitstest durch. Es wird die maximal m\u00F6gliche Taktfrequenz ermittelt -menu_help=Hilfe -menu_editAttributes=Schaltungsattribute bearbeiten -menu_editAttributes_tt=Diese Attribute beeinflussen die Schaltung, wenn sie in andere Schaltungen eingebettet wird. -menu_fast=Schneller Lauf -menu_fast_tt=F\u00FChrt die Schaltung aus, bis ein Stopsignal \u00FCber ein BRK-Element detektiert wird. -menu_export=Export -menu_exportPNGSmall=Export PNG klein -menu_exportPNGLarge=Export PNG gro\u00DF -menu_exportSVG=Export SVG -menu_exportSVGLaTex=Export SVG+LaTeX -menu_delete=L\u00F6schen -menu_delete_tt=L\u00F6scht ausgew\u00E4hlte Elemente -menu_editRunAttributes=Simulationseinstellungen -menu_editRunAttributes_tt=Einstellungen f\u00FCr den Start der Simulation -menu_saveData=Daten speichern -menu_saveData_tt=Speichert die Daten als CSV Datei -menu_analyse=Analyse -menu_analyse_tt=Analyse der aktuellen Schaltung -menu_synthesise=Synthese -menu_synthesise_tt=Erzeugt minimale boolsche Ausdr\u00FCcke, welche durch eine Wahrheitstabelle beschrieben werden. -menu_view=Ansicht -menu_maximize=Maximieren -menu_zoomIn=Vergr\u00F6\u00DFern -menu_zoomOut=Verkleinern -menu_table_new=Neu -menu_table_N_variables={0} Variablen -menu_table_new_combinatorial=Kombintorisch -menu_table_new_sequential=Automat -menu_table_reorder=Umsortieren -menu_table_inputs=Eing\u00E4nge -menu_table_outputs=Ausg\u00E4nge -menu_table_newColumns=Spalten hinzuf\u00FCgen -menu_table_columnsAdd=Ergebnisspalte hinzuf\u00FCgen -menu_table_columnsAdd_tt=F\u00FCgt der Tabelle eine Ergebnisspalte hinzu. -menu_table_columnsAddVariable=Variable hinzuf\u00FCgen -menu_table_columnsAddVariable_tt=F\u00FCgt der Tabelle eine Variablenspalte hinzu. -menu_table_create=Erzeugen -menu_table_createCircuit=Schaltung -menu_table_createCircuit_tt=Erzeugt eine Schaltung, welche der Wahrheitstabelle entspricht. -menu_table_createNAnd=Schaltung mit NAnd-Gattern -menu_table_createNAnd_tt=Erzeugt eine Schaltung, welche der Wahrheitstabelle entspricht nur mit NAnd-Gattern. -menu_table_createNOr=Schaltung mit NOr-Gattern -menu_table_createNOr_tt=Erzeugt eine Schaltung, welches der Wahrheitstabelle entspricht nur mit NOr-Gattern. -menu_table_createTwo=Schaltung mit Gattern mit zwei Eing\u00E4ngen -menu_table_createTwo_tt=Erzeugt eine Schaltung und verwendt nur Gatter mit zwei Eing\u00E4ngen -menu_table_createNAndTwo=Schaltung mit NAnd-Gattern mit zwei Eing\u00E4ngen -menu_table_createNAndTwo_tt=Erzeugt eine Schaltung, welches der Wahrheitstabelle entspricht nur mit NAnd-Gattern mit zwei Eing\u00E4ngen. -menu_table_createNOrTwo=Schaltung mit NOr-Gattern mit zwei Eing\u00E4ngen -menu_table_createNOrTwo_tt=Erzeugt eine Schaltung, welches der Wahrheitstabelle entspricht nur mit NOr-Gattern mit zwei Eing\u00E4ngen. -menu_table_createCUPL=CUPL -menu_table_createCUPL_tt=Erzeugt eine CUPL Quelldatei welche die Schaltung beschreibt. -menu_table_create_hardware=Bausteine -menu_table_create_jedec=JEDEC (*.jed) -menu_table_create_jedec_tt=Erzeugt eine JEDEC Datei f\u00FCr den Baustein -menu_table_exportTableLaTeX=Export LaTeX -menu_copy=Kopieren -menu_paste=Einf\u00FCgen -menu_rotate=Rotieren - - -menu_editSettings=Einstellungen -menu_editSettings_tt=Bearbeitet die globalen Einstellungen - -menu_about=\u00DCber Digital - -win_saveChanges=\u00C4nderungen speichern? -win_confirmExit=Beenden best\u00E4tigen! -win_stateChanged=Die Datei wurde ver\u00E4ndert! -win_measures=Messwerte -win_measures_microstep=Messwerte im Einzelgattermodus -win_measures_fullstep=Messwerte im Vollschrittmodus - -win_listing=Listing -win_table=Tabelle -win_allSolutions=Alle m\u00F6glichen L\u00F6sungen -win_pinMapDialog=Pin-Zuordnung -win_table_exportDialog=Export - diff --git a/src/main/resources/lang/lang_de.xml b/src/main/resources/lang/lang_de.xml new file mode 100644 index 000000000..c6ebcf6d8 --- /dev/null +++ b/src/main/resources/lang/lang_de.xml @@ -0,0 +1,408 @@ + + + Adresse + Eigenschaften + Anzeigen + Enthaltene Schaltung: + Öffnet die Schaltung in einem neuen Fenster. + Verwerfen + Bearbeiten + Weiter bearbeiten + Laden + Neu Laden + Letzte Datei noch einmal laden + Speichern + Digital + Addierer + Und + Break + Wenn der Eingang dieses Elementes zu Eins wird, wird der schnelle Simulationslauf + beendet. + Dieses Element kann verwendet werden, um einen Assemblerbefehl BRK zu implementieren. + Es kann dann ein Programm bis zum nächsten BRK-Befehl ausgeführt werden. + + Taster + Takt + Ein Takstignal. Dieses Taksignal kann über die Echtzeituhr gesteuert werden. + Komparator + Konstante + Eine einfache Konstante. + Zähler + D_FF + Messwertgraph + Zeigt einen Messwertgraphen innerhalb des Schaltkreisbereichs. + Es können sowohl komplette Takte als auch einzelne Gatter-Veränderungen angezeigt werden. + + Mit dieser Leitung wird der zu aktivierende Ausgang ausgewählt + Decoder + Eine wählbare Ausgangsleitung geht auf Eins, alle anderen sind Null. + Verzögerung + Verzögert ein Signal für eine Gatterlaufzeit. + Demultiplexer + Mit dieser Leitung wird der Ausgang ausgewählt + Gibt ein Eingangssignal auf einem wählbaren Ausgang aus, die anderen Ausgänge + sind Null. + + Treiber + Treiber, invertierte Auswahl + Eingang + Ein Eingang der genutzt werden kann, um eine Verbindung zu einem eingebettetem Element + herzustellen. + + JK_FF + LED + LookUpTable + Erzeugt einen Ausgabewert aus einer Tabelle. + Auf diese Weise kann jedes kombinatorische Gatter erzeugt werden. + + Multiplikator + Multiplexer + Mit dieser Leitung wird der Eingang ausgewählt + Wählt eine der Eingangsleitungen aus, und gibt dessen Wert am Ausgang aus. + + Nicht Und + Nicht Oder + Nicht + Oder + Ausgang + Ein Ausgang der genutzt werden kann, um eine Verbindung zu einem eingebettetem Element + herzustellen. + + Messwert + Ein Messwert, welcher im Messwertgraphen dargestellt werden kann. + RAMDualPort + Die Adresse, an der gelesen und geschrieben wird. + Der Takt + Der Daten die gespeichert werden sollen + Der Datenausgang + Ist diese Leitung high, wird der Ausgang aktiviert, und die Daten liegen dort + an + + Ist diese Leitung high wird das Datenwort gespeichert, wenn der Takt + ansteigt. + + Ein RAM Modul mit getrennten Anschlüssen für Lesen und Schreiben. + Ein gibt einen Eingang für das Beschreiben und einen Ausgang für das Auslesen der gespeicherten Daten. + + RAMSinglePort + Der Adresseingang. + Takt + Der bidirektionale Datenanschluß. + Ist dieser Eingang 1 wird das Datenwort ausgegeben. + Ist dieser Eingang 1 wird mit steigendem Takt das Datenwort gespeichert. + + Ein RAM Module mit einem bidirektionellem Anschluss für das Lesen und Schreiben + von Daten. + + ROM + Adresse des Datenwortes welches ausgelesen werden soll. + Hier wird das Datenwort ausgegeben, wenn der Baustein aktiviert ist. + Ist dieser Pin high (1) ist der Ausgang aktiviert. Ist er low (0) ist der Ausgang + hochohmig. + + RS_FF + Register + Reset + Der Ausgang dieses Elements ist Null, solange sich die Schaltung nach dem Einschalten + in der Stabilisierungsphase befindet. + Hat sich die Schaltung stabilisiert wird der Ausgang auf Eins gesetzt. + + Siebensegmentanzeige + Siebensegmentanzeige Hex + Siebensegmentanzeige mit einem 4 Bit hexadezimalem Eingang. + Siebensegmentanzeige bei der jedes Segment über einen eigenen Eingang gesteuert + werden kann. + + Splitter + Führt mehrere Leitungen zu einer gemeinsamen Leitung zusammen, bzw. splittet diese + wieder auf. + + Subtrahierer + T_FF + Terminal + Terminal_pin_C + Terminal_pin_D + Ein Terminal auf dem ASCII-Zeichen ausgegeben werden können. Öffnet ein eigenes + Fenster. + + Text + Zeigt einen einfachen Text in der Schaltung an. + Nicht Exclusiv Oder + Exclusiv Oder + Flipflop hat keine Bezeichnung! + Pin {0} in Element {1} ist werder Eingang noch Ausgang + Es darf nur einen Takt geben. + Die Schaltung hat keine benannten Eingänge + Die Schaltung hat keine benannten Ausgänge + Der Wert {0} hat mehr als ein Bit. + Nach {0} Zyklen ist kein Break aufgetreten + Ausdruck {0} wird nicht unterstützt. + Operation {0} wird nicht unterstützt. + Es sind mehrere zusammengeschaltete Ausgänge gleichzeitig aktiv + Element {0} kann nicht analysiert werden. + Enthält [var] und [nicht var] + Doppeltes Element {0} + Pin {0} in Element {1} exitiert mehrfach + Element {0} nicht gefunden + Es sind {0} Variablen erforderlich, nicht {1} + Flipflops müssen direkt mit dem Takt verbunden sein. + Ungültiges Dateiformat + Die Schaltung wurde bereits initialisiert + Ein Tunnel {0} ist nicht verbunden! + Es gibt mehr als einen Taktgeber + Es werden {0} Bits benötigt, aber es wurden {1} Bits gefunden + + Das Netz von Pin {0} wurde nicht gefunden + Kein Taktgeber in der Schaltung gefunden + Es sind keine Eingänge vorhanden + Es wurde kein Diagramm für {0} gefunden. + Kein Wert gesetzt für {0} an Element {1} + Es haben nicht alle Ausgänge die gleiche Bitbreite + Wenn mehrere Ausgänge verbunden sind, müssen alle Ausgänge Tri-State + Ausgänge sein + + Die Schaltung ist nicht initialisiert + Kein Ausgang mit der Leitung verbunden + Table zu klein: Mindestens ein Ergebnis ist erforderlich! + Ausgang {0} ist nicht definiert + Kein Name für Pin {0} + Pin {0} doppelt belegt! + Eingang {0} ist nicht erlaubt! + Kein "=" gefunden! + Ausgang {0} ist nicht erlaubt! + Zu viele Eingänge definiert! + Zu viele Ausgänge definiert! + Pin nicht vorhanden + Es gibt einen Pin ohne einen Namen in {0} + Pin {0} von Element {1} wurde nicht gefunden + Pin {0} wurde nicht gefunden. + Pin {0} ist unbekannt + Lesen einer hochohmigen Leitung + Die Schaltung scheint zu oszillieren! + Zur Analyse können Sie die Schaltung im Gatterschrittmodus ausführen. + + Die Zahl der Eingänge passt nicht zur Bitbreite der Auswahlleitung + + Fehler in der Definition {0} eines Splitters + Die Bitzahl am Spiltter passt nicht + Es sind mindestens zwei Eingänge erforderlich! + Zu viele Eingänge. Es sind nur {0} Eingänge erlaubt. + In CUPL ist die Variable {0} nicht erlaubt! + Variable {0} ist nicht definiert. + Adress Bits + Datenbits + Farbe + Timeout Zyklen + Wenn nach dieser Anzahl von Takten kein Break eingegangen ist, wird ein Fehler + erzeugt + + Daten + Vorgabe + Wird beim Schaltungsstart gesetzt + Beschreibung + Frequenz/Hz + Gibt die Frequenz an, wenn der Echtzeittakt aktiviert ist + Verwende US Symbole (IEEE 91-1984) + Verwende IEEE 91-1984 Symbole anstelle der rechteckige Symbole + Eingangsaufteilung + Zum Beispiel "4,2,2" oder "[Bits]*[Anzahl] wie "1*16" + für 16 einzelne Bits + + Anzahl der Eingänge + Bezeichnung + Sprache + Netzname + Alle Netze mit identischem Namen werden miteinander verbunden. + Ausgangsaufteilung + Zum Beispiel "4,2,2" oder "[Bits]*[Anzahl] wie "1*16" + für 16 einzelne Bits + + Anzahl der Auswahlbits + Vorzeichen + Wert + Breite + Breite des Symbols wenn diese Schaltung in eine andere eingefügt wird. + Tausche Position des Selectors + Zahlenformat + ASCII + Binär + Dezimal + Vorgabe + Hexadezimal + Eingang kann hochohmig sein + Maximale Messpunktezahl + Zeige Einzelgatterschritte + Rotation + Echtzeittakt starten + Wenn eingeschaltet, wird beim Start der Schaltung der Echtzeittakt gestartet + + Zeige Messwertegraph + Zeige Messwertgraph im Gatterschrittmodus + Zeige Messwertetabelle + Zeige Listing an, wenn verfügbar + Zeilen + Zeichen pro Zeile + Als Messwert verwenden + Wenn gesetzt, taucht der Wert als Messwert in Graph und Tabelle auf + Logisch + Arithmetik + FlipFlops + IO + Speicher + Multiplexer + Leitungen + Über Digital + Analyse + Analyse der aktuellen Schaltung + Kopieren + Benutzerdefiniert + Löschen + Löscht ausgewählte Elemente + Bearbeiten + Schaltungsattribute bearbeiten + Diese Attribute beeinflussen die Schaltung, wenn sie in andere Schaltungen + eingebettet wird. + + Simulationseinstellungen + Einstellungen für den Start der Simulation + Einstellungen + Bearbeitet die globalen Einstellungen + Elemente bearbeiten + Bearbeitet die vorhandenen Elemente oder dessen Eigenschaften + Elemente + Export + Export PNG groß + Export PNG klein + Export SVG + Export SVG+LaTeX + Schneller Lauf + Führt die Schaltung aus, bis ein Stopsignal über ein BRK-Element detektiert wird. + + Datei + Hilfe + Importieren + Importiert eine Schaltung als verwendbares Bauteil + Maximieren + Gatterschrittmodus + Startet die Schaltung im Gatterschrittmodus + Neu + Öffnen + Zuletzt verwendet + Öffnen in neuem Fenster + Öffnet eine Schaltung in einem neuen Fenster + Sortieren der Eingänge + Sortiert die Eingänge für die Verwendung als eingebettete Schaltung + Sortieren der Messwerte + Sortiert die Messwerte für die grafische Anzeige und die Tabellenansicht + + Sortieren der Ausgänge + Sortiert die Ausgänge für die Verwendung als eingebettete Schaltung + Einfügen + Alle neu laden + Alle importierten Schaltungen werden neu geladen + Rotieren + Start + Startet die Simulation der Schaltung + Speichern + Speichern unter + Daten speichern + Speichert die Daten als CSV Datei + Geschwindigkeitstest + Führt einen Geschwindigkeitstest durch. Es wird die maximal mögliche Taktfrequenz + ermittelt + + Schritt + Führt einen Einzelgatterschritt aus + Synthese + Erzeugt minimale boolsche Ausdrücke, welche durch eine Wahrheitstabelle + beschrieben werden. + + {0} Variablen + Ergebnisspalte hinzufügen + Variable hinzufügen + Fügt der Tabelle eine Variablenspalte hinzu. + Fügt der Tabelle eine Ergebnisspalte hinzu. + Erzeugen + CUPL + Erzeugt eine CUPL Quelldatei welche die Schaltung beschreibt. + Schaltung + Erzeugt eine Schaltung, welche der Wahrheitstabelle entspricht. + Schaltung mit NAnd-Gattern + Schaltung mit NAnd-Gattern mit zwei Eingängen + Erzeugt eine Schaltung, welches der Wahrheitstabelle entspricht nur mit + NAnd-Gattern mit zwei Eingängen. + + Erzeugt eine Schaltung, welche der Wahrheitstabelle entspricht nur mit + NAnd-Gattern. + + Schaltung mit NOr-Gattern + Schaltung mit NOr-Gattern mit zwei Eingängen + Erzeugt eine Schaltung, welches der Wahrheitstabelle entspricht nur mit + NOr-Gattern mit zwei Eingängen. + + Erzeugt eine Schaltung, welches der Wahrheitstabelle entspricht nur mit + NOr-Gattern. + + Schaltung mit Gattern mit zwei Eingängen + Erzeugt eine Schaltung und verwendt nur Gatter mit zwei Eingängen + Bausteine + JEDEC (*.jed) + Erzeugt eine JEDEC Datei für den Baustein + Export LaTeX + Eingänge + Neu + Spalten hinzufügen + Kombintorisch + Automat + Ausgänge + Umsortieren + Ansicht + Vergrößern + Verkleinern + Digital + + Ein einfacher Simulator für digitale Schaltkreise. + + Geschrieben von Helmut Neemann 2016 + + {0} aktive Elemente + Fehler bei der Analyse der Schaltung + Fehler bei der Berechnung einer Taktänderung + Farbe + Fehler beim Berechnen eines Schrittes + Fehler beim Erzeugen der Schaltung + Fehler während der Vereinfachung. + Fehler bei der Eingabe eines Wertes + Fehler beim Import einer Schaltung + Fehler beim Lesen einer Datei + Fehler beim Laden des Listings {0} + Fehler beim Schreiben einer Datei + Ein Fehler beim schnellen Lauf + Die maximale Frequenz berägt {0}Hz. + Es fehlt ein Diagramm für {0} + Eingänge + nicht verwendet + Ausgänge + Pin {0}: {1} + Die Änderung erfordert einen Neustart! + Ok + + 180° + 270° + 90° + {0} Halbzyklen + Eintrag löschen + Eintrag nach unten schieben + Eintrag nach oben schieben + Alle möglichen Lösungen + Beenden bestätigen! + Listing + Messwerte + Messwerte im Vollschrittmodus + Messwerte im Einzelgattermodus + Pin-Zuordnung + Änderungen speichern? + Die Datei wurde verändert! + Tabelle + Export + \ No newline at end of file diff --git a/src/main/resources/lang/lang_en.properties b/src/main/resources/lang/lang_en.properties deleted file mode 100644 index 7244483ce..000000000 --- a/src/main/resources/lang/lang_en.properties +++ /dev/null @@ -1,351 +0,0 @@ -digital=Digital -message=Digital\nA simple simulator for digital circuits.\n\nWritten bei H.Neemann in 2016 -ok=Ok -addr=Address -#Library -lib_Logic=Logic -lib_io=IO -lib_mux=Plexers -lib_wires=Wires -lib_flipFlops=FlipFlops -lib_memory=Memory -lib_arithmetic=Arithmetic - -# Attribute Keys -key_Bits=Data Bits -key_Inputs=Number of Inputs -key_Label=Label -key_Value=Value -key_Default=Default -key_Color=Color -key_InputSplitting=Input Splitting -key_OutputSplitting=Otput Splitting -key_Frequency=Frequency/Hz -key_SelectorBits=Number of Selector Bits -key_Signed=Signed -key_Data=Data -key_AddrBits=Address Bits -key_flipSelPos=Flip selector position -key_rotation=Rotation -key_Width=Width -key_Cycles=Timeout cycles -key_termWidth=Characters per line -key_termHeight=Lines -key_valueIsProbe=Use as measurment value -key_showList=Show list file if available -key_showDataTable=Show measurement values -key_showDataGraph=Show measurement graph -key_showDataGraphMicro=Show measurement graph in single gatem step mode -key_maxStepCount=Max number of steps to show -key_microStep=Show single gate steps -key_isHighZ=Is three-state input -key_runRealTime=Start real time clock -key_Description=Description -key_NetName=Netname -key_NetName_tt=All nets with identical name are connected together. -key_IEEEShapes=Use IEEE 91-1984 shapes -key_IEEEShapes_tt=Use IEEE 91-1984 shapes instead of rectangular shapes -key_intFormat=Number Format -key_intFormat_def=default -key_intFormat_dec=decimal -key_intFormat_hex=hex -key_intFormat_bin=bin -key_intFormat_ascii=ascii -key_Language=Language - -attr_openCircuitLabel=Included circuit: -attr_openCircuit=Show -attr_openCircuit_tt=Opens the circuit in a new window. - -elem_And=And -elem_NAnd=NAnd -elem_Or=Or -elem_NOr=NOr -elem_XOr=XOr -elem_XNOr=XNOr -elem_Not=Not -elem_LookUpTable=LookUpTable -elem_LookUpTable_tt=Gets the output value from a stored table.\nSo this gate can emulate every combinatorial gate. -elem_In=In -elem_In_tt=A input which can be used to connect the circuit if it is included in an other circuit. -elem_Out=Out -elem_Out_tt=A output which can be used to connect the circuit if it is included in an other circuit. -elem_LED=LED -elem_Button=Button -elem_Probe=Probe -elem_Probe_tt=A measurement value which can be shown in the data graph. -elem_Seven-Seg=Seven-Seg -elem_Seven-Seg_tt=Seven Segment Display, every segment has its own input. -elem_Seven-Seg-Hex=Seven-Seg-Hex -elem_Seven-Seg-Hex_tt=Seven Segment Display with a 4 bit input -elem_Terminal=Terminal -elem_Terminal_tt=You can write ASCI characters to this terminal.\nThe terminal opens its own window. -elem_Terminal_pin_D=The data to show in the terminal -elem_Terminal_pin_C=If this pin becomes high the data is displayed -elem_Data=Data graph -elem_Data_tt=Shows a data plot inside of the circuit panel.\nYou can plot complete clock steps or single gate changes. -elem_Multiplexer=Multiplexer -elem_Demultiplexer=Demultiplexer -elem_Decoder=Decoder -elem_Const=Const -elem_Const_tt=A simple constant value. -elem_Splitter=Splitter -elem_Splitter_tt=Splits or creates a wire bundle or a data bus with more than one bit. -elem_Clock=Clock -elem_Clock_tt=A clock signal. Its possible to control it by the real time clock. -elem_Delay=Delay -elem_Delay_tt=Delays the signal by on gate delay -elem_Driver=Driver -elem_DriverInvSel=Driver, inverted select -elem_Reset=Reset -elem_Reset_tt=The output of this element is hold down during the initialisation of the circuit.\nAfter the circuit has stabilized the output goes up. -elem_Break=Break -elem_Break_tt=If the input of this Element becomes high, the fast forward clocking is stopped.\nYou can use the element to implement a BRK assembly instruction.\nThen you can execute the circuit to the next BRK instruction. -elem_RS_FF=RS_FF -elem_JK_FF=JK_FF -elem_D_FF=D_FF -elem_T_FF=T_FF -elem_Register=Register -elem_ROM=ROM -elem_ROM_pin_address=Address of data word to output. -elem_ROM_pin_sel=If the input is high, the output is activated. If it is low, the data output is in high Z state. -elem_ROM_pin_data=The selected data word. Only readable if select input is high. -elem_RAMDualPort=RAMDualPort -elem_RAMDualPort_tt=A RAM module with separate inputs for storing and output for reading the stored data. -elem_RAMDualPort_pin_addr=The address to read and write -elem_RAMDualPort_pin_dataIn=The data to be stored in the RAM -elem_RAMDualPort_pin_str=If this input is high when the clock becomes high, the the data is stored -elem_RAMDualPort_pin_c=Clock -elem_RAMDualPort_pin_ld=If this input is high the output is activated and the data is visible at the output -elem_RAMDualPort_pin_dataOut=The data output pin -elem_RAMSinglePort=RAMSinglePort -elem_RAMSinglePort_tt=A RAM module with a bidirectional connection for reading and writing the data. -elem_RAMSinglePort_pin_addr=The address to read and write -elem_RAMSinglePort_pin_str=If this input is high when the clock becomes high, the the data is stored -elem_RAMSinglePort_pin_c=Clock -elem_RAMSinglePort_pin_ld=If this input is high the output is activated and the data is visible at the output -elem_RAMSinglePort_pin_d=Bidirectional data connection. -elem_Counter=Counter -elem_Add=Add -elem_Sub=Sub -elem_Mul=Mul -elem_Comparator=Comparator -elem_Text=Text - -rot_0=0\u00B0 -rot_90=90\u00B0 -rot_180=180\u00B0 -rot_270=270\u00B0 -err_seemsToOscillate=Logic seems to oscillate\nTo analyse you can run the circuit in single gate step mode. -err_notInitialized=Logic not initialized -err_isAlreadyInitialized=Logic is already initialized -err_noClockFound=No clock found in logic -err_moreThenOneClocksFound=There are more then one clock -err_noInputsAvailable=No inputs available to set -err_burnError=More then one output is active on a wire -err_needs_N0_bits_found_N2_bits=There are {0} bits needed, but {1} bits found -err_selectorInputCountMismatch=Number of inputs does not match selector bit count -err_splitterBitsMismatch=Bit count of splitter is not matching -err_pinWithoutName=Found a pin without a name in {0} -err_pin_N_unknown=Pin {0} unknown -err_pin_N_notFound=Pin {0} not found -err_netOfPin_N_notFound=Net of pin {0} not found -err_N_isNotInputOrOutput=Pin {0} in element {1} is not a input or output -err_duplicatePinLabel=Pin {0} in element {1} exists twice -err_pin_N0_atElement_N1_notFound=Pin {0} not found at Element {1} -err_noValueSetFor_N0_atElement_N1=No value set for {0} at Element {1} -err_onOutConnectedToWire=No output connected to a wire -err_output_N_notDefined=Output {0} not defined -err_pinNotPresent=Pin not present -err_duplicateElement_N=Duplicate element {0} -err_element_N_notFound=Element {0} not found -err_spitterDefSyntaxError=Syntax error in splitter definition {0} -err_noShapeFoundFor_N=No shape found for Element {0} -err_invalidFileFormat=Invalid file format -err_readOfHighZ=Read of high Z value -err_notAllOutputsSameBits=Not all connected outputs have the same bit count -err_notAllOutputsSupportHighZ=If multiple outputs are connected together, all of them have to be three-state outputs -err_breakTimeOut=Break timeout after {0} cycles -err_varNotDefined_N=Variable {0} not defined -err_containsVarAndNotVar=Contains [var] and [not var] -err_exact_N0_valuesNecessaryNot_N1=Exact {0} variables necessary, not {1} -err_builder_exprNotSupported=Expression {0} not supported -err_builder_operationNotSupported=Operation {0} not supported -err_toManyInputs_N=To many inputs, allowed are {0} -err_oneResultIsRequired=Table to small: One result is required! -err_tableBecomesToSmall=Two inputs are required! -err_varNotAllowedInCUPL_N= Variable {0} is not allowed in CUPL source! -err_pinMap_Pin_N_AssignedTwicerPin=Pin {0} assigned twice! -err_pinMap_toMannyInputsDefined=To manny inputs defined -err_pinMap_toMannyOutputsDefined=To manny outputs defined -err_pinMap_noEqualsfound=No = found! -err_pinMap_NoNameForPin_N=No Name for pin {0} -err_pinMap_input_N_notAllowed=Input {0} not allowed! -err_pinMap_output_N_notAllowed=Output {0} not allowed! -err_cannotAnalyse_N=Cannot analyse Node {0} -err_ffNeedsToBeConnectedToClock=Flipflop needs to be connected to the clock. -err_aSingleClockNecessary=A single clock is necessary. - -attr_dialogTitle=Attributes - -msg_errorEditingValue=Error editing a atribute value -msg_color=Color -msg_errorImportingModel=Error importing a circuit -msg_errorCreatingModel=Error creating the circuit -msg_errorWritingFile=Error writing a file -msg_errorReadingFile=Error reading a file -msg_errorCalculatingStep=Error calculating a step -msg_missingShape_N=Shape {0} is missing -msg_fastRunError=Error at fast run -msg_errorReadingListing_N0=Error reading the listing {0} -msg_clockError=Error during a clock state change -msg_frequency_N=The maximum frequency is {0}Hz -msg_errorDuringCalculation=Error during simplification -msg_N_nodes={0} nodes -msg_restartNeeded=Change needs a restart to take effect! -msg_pinMap_inputs=Inputs -msg_pinMap_outputs=Onputs -msg_pinMap_pin_N_is_N=Pin {0}: {1} -msg_pinMap_notUsed=not used - -stat_clocks={0} half cycles - -btn_edit=Edit -btn_load=Load -btn_reload=Reload -btn_reload_tt=Reload last hex file -btn_discard=Discard Changes -btn_save=Save -btn_editFurther=Continue editing - - -tt_moveItemUp=Move the item up -tt_moveItemDown=Move the item down -tt_deleteItem=Deletes the selected item -menu_file=File -menu_new=New -menu_open=Open -menu_openWin=Open in New Window -menu_openWin_tt=Opens a circuit in a new window -menu_openRecent=Open Recent -menu_save=Save -menu_saveAs=Save As -menu_elements=Elements -menu_custom=Custom -menu_import=Import -menu_import_tt=Imports a circuit as a useable Element! -menu_refresh=Reload -menu_refresh_tt=Reload all imported circuits -menu_element=Edit Elements -menu_element_tt=Edits the circuit. Moves a single Element or edits its properties -menu_edit=Edit -menu_orderInputs=Order Inputs -menu_orderInputs_tt=Order the inputs for the usage as nested circuit -menu_orderOutputs=Order Outputs -menu_orderOutputs_tt=Order the outputs for the usage as nested circuit -menu_orderMeasurements=Order measurement values -menu_orderMeasurements_tt=Orders the measurement values in the graphical and table view -menu_run=Run -menu_run_tt=Runs the circuit -menu_step=Step -menu_step_tt=Calculating a single gate step -menu_micro=Single gate stepping -menu_micro_tt=Runs the circuit in single gate step mode -menu_speedTest=Speed Test -menu_speedTest_tt=Performs a speed test by calculating the max. clock frequency. -menu_help=Help -menu_about=About -menu_editAttributes=Edit circuit attributes -menu_editAttributes_tt=These attributes effect the behavior if the circuit is included in other circuits. -menu_fast=Run Fast -menu_fast_tt=Runs the circuit until a break is detected by the BRK element. -menu_export=Export -menu_exportSVG=Export SVG -menu_exportSVGLaTex=Export SVG+LaTeX -menu_exportPNGSmall=Export PNG small -menu_exportPNGLarge=Export PNG large -menu_delete=Delete elements -menu_delete_tt=Delete selected single element or group of elements -menu_editRunAttributes=Simulation Settings -menu_editRunAttributes_tt=Settings used to start the simulation -menu_saveData=Save Data -menu_saveData_tt=Save data as CSV file -menu_analyse=Analyse -menu_analyse_tt=Analyses the actual circuit -menu_synthesise=Synthesise -menu_synthesise_tt=Generates the minimal bool expressions described by a truth table. -menu_view=View -menu_maximize=Maximize -menu_zoomIn=Zoom In -menu_zoomOut=Zoom Out -menu_table_new=New -menu_table_N_variables={0} variables -menu_table_new_combinatorial=Combinatorial -menu_table_new_sequential=Sequential -menu_table_reorder=Reorder -menu_table_inputs=Inputs -menu_table_outputs=Outputs -menu_table_newColumns=Add Columns -menu_table_columnsAdd=Add a result Column -menu_table_columnsAdd_tt=Adds a new result column. -menu_table_columnsAddVariable=Add a variable Column -menu_table_columnsAddVariable_tt=Adds a new variable column. -menu_table_create=Create -menu_table_createCircuit=Circuit -menu_table_createCircuit_tt=Creates a circuit which reproduces the truth table. -menu_table_createNAnd=Circuit with NAnd gates -menu_table_createNAnd_tt=Creates a circuit which reproduces the truth table only with NAnd gates. -menu_table_createNOr=Circuit with NOr gates -menu_table_createNOr_tt=Creates a circuit which reproduces the truth table only with NOr gates. -menu_table_createTwo=Circuit with two input gates -menu_table_createTwo_tt=create circuit, use only gates with two inputs -menu_table_createNAndTwo=Circuit with NAnd gates with two inputs -menu_table_createNAndTwo_tt=Use only NAnd gates with two inputs. -menu_table_createNOrTwo=Circuit with NOr gates with two inputs -menu_table_createNOrTwo_tt=Use only NOr gates with two inputs. -menu_table_createCUPL=CUPL source -menu_table_createCUPL_tt=Creates a CUPL source file containing the define circuit. -menu_table_create_hardware=Device -menu_table_create_jedec=JEDEC (*.jed) -menu_table_create_jedec_tt=Creates a JEDEC file for the device -menu_table_exportTableLaTeX=Export LaTeX - -menu_editSettings=Settings -menu_editSettings_tt=Edits Digitals Preferences -menu_copy=Copy -menu_paste=Paste -menu_rotate=Rotate - -win_saveChanges=Save Changes? -win_confirmExit=Confirm Exit! -win_stateChanged=State Changed! -win_measures=Measurements -win_measures_microstep=Measurements single gate step -win_measures_fullstep=Measurements full clock step -win_listing=Listing -win_pinMapDialog=Pin Mapping -win_table_exportDialog=Export - -key_InputSplitting_tt=Example "4,2,2" or "[Bits]*[Count] like "1*16" for 16 single bits -key_OutputSplitting_tt=Example "4,2,2" or "[Bits]*[Count] like "1*16" for 16 single bits -key_runRealTime_tt=If enabled the runtime clock is started when the circuit is started -key_Frequency_tt=The realtime frequency used for the real time clock -key_Cycles_tt=If this ammount of cycles is reached without a break signal, an error is created -key_valueIsProbe_tt=Is set the value is a measurement value and appears in the graph and data table -elem_Multiplexer_tt=Selects on of the input lines -elem_Multiplexer_pin_sel=This pin selects the input -elem_Demultiplexer_tt=Outputs the input to on of the outputs. The other outputs are zero. -elem_Demultiplexer_pin_sel=Selects the output -elem_Decoder_tt=One selectable output line is high, all other outputs are low. -elem_Decode_pin_sel=This input selects the enabled output -elem_Text_tt=Shows a text in the circuit -key_Default_tt=Is set if the circuit is started -err_labelNotConnectedToNet_N=A tunnel {0} is not connected! -key_Width_tt=With of symbol if this circuit is used in an element ins an other circuit. -err_analyseNoInputs=The circuit has no Inputs -err_analyseNoOutputs=The circuit has no outputs -err_analyseValue_N_IsNotBinary=The value {0} has more the one bit. -err_DFlipflopWithoutALabel=D-Flipflop has no label set -msg_annalyseErr=Error analysing the circuit -win_table=Table -win_allSolutions=All possible solutions diff --git a/src/main/resources/lang/lang_en.xml b/src/main/resources/lang/lang_en.xml new file mode 100644 index 000000000..823ee76b4 --- /dev/null +++ b/src/main/resources/lang/lang_en.xml @@ -0,0 +1,384 @@ + + + Address + Attributes + Show + Included circuit: + Opens the circuit in a new window. + Discard Changes + Edit + Continue editing + Load + Reload + Reload last hex file + Save + Digital + Add + And + Break + If the input of this Element becomes high, the fast forward clocking is stopped. + You can use the element to implement a BRK assembly instruction. + Then you can execute the circuit to the next BRK instruction. + + Button + Clock + A clock signal. Its possible to control it by the real time clock. + Comparator + Const + A simple constant value. + Counter + D_FF + Data graph + Shows a data plot inside of the circuit panel. + You can plot complete clock steps or single gate changes. + + This input selects the enabled output + Decoder + One selectable output line is high, all other outputs are low. + Delay + Delays the signal by on gate delay + Demultiplexer + Selects the output + Outputs the input to on of the outputs. The other outputs are zero. + Driver + Driver, inverted select + In + A input which can be used to connect the circuit if it is included in an other circuit. + + JK_FF + LED + LookUpTable + Gets the output value from a stored table. + So this gate can emulate every combinatorial gate. + + Mul + Multiplexer + This pin selects the input + Selects on of the input lines + NAnd + NOr + Not + Or + Out + A output which can be used to connect the circuit if it is included in an other + circuit. + + Probe + A measurement value which can be shown in the data graph. + RAMDualPort + The address to read and write + Clock + The data to be stored in the RAM + The data output pin + If this input is high the output is activated and the data is visible at the + output + + If this input is high when the clock becomes high, the the data is stored + + A RAM module with separate inputs for storing and output for reading the stored + data. + + RAMSinglePort + The address to read and write + Clock + Bidirectional data connection. + If this input is high the output is activated and the data is visible at + the output + + If this input is high when the clock becomes high, the the data is + stored + + A RAM module with a bidirectional connection for reading and writing the + data. + + ROM + Address of data word to output. + The selected data word. Only readable if select input is high. + If the input is high, the output is activated. If it is low, the data output is in + high Z state. + + RS_FF + Register + Reset + The output of this element is hold down during the initialisation of the circuit. + After the circuit has stabilized the output goes up. + + Seven-Seg + Seven-Seg-Hex + Seven Segment Display with a 4 bit input + Seven Segment Display, every segment has its own input. + Splitter + Splits or creates a wire bundle or a data bus with more than one bit. + Sub + T_FF + Terminal + If this pin becomes high the data is displayed + The data to show in the terminal + You can write ASCI characters to this terminal. + The terminal opens its own window. + + Text + Shows a text in the circuit + XNOr + XOr + D-Flipflop has no label set + Pin {0} in element {1} is not a input or output + A single clock is necessary. + The circuit has no Inputs + The circuit has no outputs + The value {0} has more the one bit. + Break timeout after {0} cycles + Expression {0} not supported + Operation {0} not supported + More then one output is active on a wire + Cannot analyse Node {0} + Contains [var] and [not var] + Duplicate element {0} + Pin {0} in element {1} exists twice + Element {0} not found + Exact {0} variables necessary, not {1} + Flipflop needs to be connected to the clock. + Invalid file format + Logic is already initialized + A tunnel {0} is not connected! + There are more then one clock + There are {0} bits needed, but {1} bits found + Net of pin {0} not found + No clock found in logic + No inputs available to set + No shape found for Element {0} + No value set for {0} at Element {1} + Not all connected outputs have the same bit count + If multiple outputs are connected together, all of them have to be + three-state outputs + + Logic not initialized + No output connected to a wire + Table to small: One result is required! + Output {0} not defined + No Name for pin {0} + Pin {0} assigned twice! + Input {0} not allowed! + No = found! + Output {0} not allowed! + To manny inputs defined + To manny outputs defined + Pin not present + Found a pin without a name in {0} + Pin {0} not found at Element {1} + Pin {0} not found + Pin {0} unknown + Read of high Z value + Logic seems to oscillate + To analyse you can run the circuit in single gate step mode. + + Number of inputs does not match selector bit count + Syntax error in splitter definition {0} + Bit count of splitter is not matching + Two inputs are required! + To many inputs, allowed are {0} + Variable {0} is not allowed in CUPL source! + Variable {0} not defined + Address Bits + Data Bits + Color + Timeout cycles + If this ammount of cycles is reached without a break signal, an error is created + + Data + Default + Is set if the circuit is started + Description + Frequency/Hz + The realtime frequency used for the real time clock + Use IEEE 91-1984 shapes + Use IEEE 91-1984 shapes instead of rectangular shapes + Input Splitting + Example "4,2,2" or "[Bits]*[Count] like "1*16" for 16 + single bits + + Number of Inputs + Label + Language + Netname + All nets with identical name are connected together. + Otput Splitting + Example "4,2,2" or "[Bits]*[Count] like "1*16" for 16 + single bits + + Number of Selector Bits + Signed + Value + Width + With of symbol if this circuit is used in an element ins an other circuit. + Flip selector position + Number Format + ascii + bin + decimal + default + hex + Is three-state input + Max number of steps to show + Show single gate steps + Rotation + Start real time clock + If enabled the runtime clock is started when the circuit is started + Show measurement graph + Show measurement graph in single gatem step mode + Show measurement values + Show list file if available + Lines + Characters per line + Use as measurment value + Is set the value is a measurement value and appears in the graph and data table + + Logic + Arithmetic + FlipFlops + IO + Memory + Plexers + Wires + About + Analyse + Analyses the actual circuit + Copy + Custom + Delete elements + Delete selected single element or group of elements + Edit + Edit circuit attributes + These attributes effect the behavior if the circuit is included in other + circuits. + + Simulation Settings + Settings used to start the simulation + Settings + Edits Digitals Preferences + Edit Elements + Edits the circuit. Moves a single Element or edits its properties + Elements + Export + Export PNG large + Export PNG small + Export SVG + Export SVG+LaTeX + Run Fast + Runs the circuit until a break is detected by the BRK element. + File + Help + Import + Imports a circuit as a useable Element! + Maximize + Single gate stepping + Runs the circuit in single gate step mode + New + Open + Open Recent + Open in New Window + Opens a circuit in a new window + Order Inputs + Order the inputs for the usage as nested circuit + Order measurement values + Orders the measurement values in the graphical and table view + Order Outputs + Order the outputs for the usage as nested circuit + Paste + Reload + Reload all imported circuits + Rotate + Run + Runs the circuit + Save + Save As + Save Data + Save data as CSV file + Speed Test + Performs a speed test by calculating the max. clock frequency. + Step + Calculating a single gate step + Synthesise + Generates the minimal bool expressions described by a truth table. + {0} variables + Add a result Column + Add a variable Column + Adds a new variable column. + Adds a new result column. + Create + CUPL source + Creates a CUPL source file containing the define circuit. + Circuit + Creates a circuit which reproduces the truth table. + Circuit with NAnd gates + Circuit with NAnd gates with two inputs + Use only NAnd gates with two inputs. + Creates a circuit which reproduces the truth table only with NAnd gates. + + Circuit with NOr gates + Circuit with NOr gates with two inputs + Use only NOr gates with two inputs. + Creates a circuit which reproduces the truth table only with NOr gates. + + Circuit with two input gates + create circuit, use only gates with two inputs + Device + JEDEC (*.jed) + Creates a JEDEC file for the device + Export LaTeX + Inputs + New + Add Columns + Combinatorial + Sequential + Outputs + Reorder + View + Zoom In + Zoom Out + Digital + A simple simulator for digital circuits. + + Written bei H.Neemann in 2016 + + {0} nodes + Error analysing the circuit + Error during a clock state change + Color + Error calculating a step + Error creating the circuit + Error during simplification + Error editing a atribute value + Error importing a circuit + Error reading a file + Error reading the listing {0} + Error writing a file + Error at fast run + The maximum frequency is {0}Hz + Shape {0} is missing + Inputs + not used + Onputs + Pin {0}: {1} + Change needs a restart to take effect! + Ok + + 180° + 270° + 90° + {0} half cycles + Deletes the selected item + Move the item down + Move the item up + All possible solutions + Confirm Exit! + Listing + Measurements + Measurements full clock step + Measurements single gate step + Pin Mapping + Save Changes? + State Changed! + Table + Export + \ No newline at end of file diff --git a/src/test/java/de/neemann/gui/language/ResourcesTest.java b/src/test/java/de/neemann/gui/language/ResourcesTest.java new file mode 100644 index 000000000..48cf2052e --- /dev/null +++ b/src/test/java/de/neemann/gui/language/ResourcesTest.java @@ -0,0 +1,35 @@ +package de.neemann.gui.language; + +import junit.framework.TestCase; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; + +/** + * @author hneemann + */ +public class ResourcesTest extends TestCase { + private static final String example + = "\n" + + "\n" + + " Speichern\n" + + " Öffnen\n" + + ""; + + public void testWrite() throws Exception { + Resources res = new Resources(); + res.put("menu_open", "Öffnen"); + res.put("menu_save", "Speichern"); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + res.save(baos); + assertEquals(example, baos.toString()); + } + + public void testRead() throws Exception { + Resources res = new Resources(new ByteArrayInputStream(example.getBytes())); + + assertEquals("Öffnen", res.get("menu_open")); + assertEquals("Speichern", res.get("menu_save")); + } +} \ No newline at end of file