diff --git a/src/main/java/de/neemann/digital/lang/Lang.java b/src/main/java/de/neemann/digital/lang/Lang.java index 24021bdbc..a54b53bd3 100644 --- a/src/main/java/de/neemann/digital/lang/Lang.java +++ b/src/main/java/de/neemann/digital/lang/Lang.java @@ -18,27 +18,36 @@ public class Lang { return InstanceHolder.INSTANCE.getKey(key, params); } - private ResourceBundle bundle; + private final ResourceBundle defaultBundle; + private ResourceBundle localeBundle; private Lang() { Locale currentLocale = Locale.getDefault(); + defaultBundle = ResourceBundle.getBundle("lang/lang", Locale.ENGLISH); try { - bundle = ResourceBundle.getBundle("lang/lang", currentLocale); + localeBundle = ResourceBundle.getBundle("lang/lang", currentLocale); } catch (MissingResourceException e) { - bundle = ResourceBundle.getBundle("lang/lang", Locale.ENGLISH); } } private String getKey(String key, Object... params) { try { - String str = bundle.getString(key); - if (params != null && params.length > 0) - str = MessageFormat.format(str, params); - return str; + return decodeString(localeBundle, key, params); } catch (MissingResourceException e) { System.out.println(key + "=" + key.substring(key.indexOf("_") + 1)); - return key + " is missing"; + try { + return decodeString(defaultBundle, key, params); + } catch (MissingResourceException e1) { + return key; + } } } + private String decodeString(ResourceBundle bundle, String key, Object[] params) { + String str = bundle.getString(key); + if (params != null && params.length > 0) + str = MessageFormat.format(str, params); + return str; + } + } diff --git a/src/main/resources/lang/lang_de.properties b/src/main/resources/lang/lang_de.properties new file mode 100644 index 000000000..0aeef0988 --- /dev/null +++ b/src/main/resources/lang/lang_de.properties @@ -0,0 +1,82 @@ +digital=Digital +message=Digital\n\nEin einfacher Simulator f\u00FCr digitale Schaltkreise.\n\nGeschrieben von Helmut Neemann 2016 +ok=Ok +key_dataBits=Datenbits +key_numberInputs=Anzahl der Eing\u00E4nge +key_label=Bezeichnung +key_value=Wert +key_default=Vorgabe +key_color=Farbe +key_inputSplitting=Eingansaufteilung +key_outputSplitting=Ausgangsaufteilung +key_frequency=Frequenz +key_selectorBits=Anzahl der Auswahlbits +key_signed=Vorzeichen +key_data=Daten +err_seemsToOscillate=Die Schaltung scheint zu oszillieren +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 Ausg\u00E4nge zusammengeschaltet +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 +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} wirde nicht gefunden +err_N_isNotInputOrOutput=Pin {0} ist werden Eingang noch Ausgang +err_pin_N0_atElement_N1_notFound=Pin {0} von Element {1} wurde nicht gefunden +err_noValueSetFor_N0_atElement_N1=Kein Wet 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 +attr_dialogTitle=Eigenschaften +msg_errorEditingValue=Fehler bei der Eingabe eines Wertes +msg_color= +msg_errorImportingModel= +msg_errorCreatingModel= +msg_errorWritingFile= +msg_errorReadingFile= +msg_errorCalculatingStep=Fehler beim Berechnen eines Schrittes +btn_edit=Bearbeiten +btn_load=Laden +tt_moveItemUp=Eintrag nach oben schieben +tt_moveItemDown=Eintrag nach unten schieben +menu_file=Datei +menu_new=Neu +menu_open=\u00D6ffnen +menu_save=Speichern +menu_saveAs=Speichern unter +menu_elements=Elemente +menu_custom=Benutzerdefiniert +menu_import=Importieren +menu_import_tt=Importiert ein Model als verwendbares Bauteil +menu_refresh=Neu Laden +menu_refresh_tt=Alle importieren Modelle werden neu geladen +menu_wire=Verbindung +menu_wire_tt=Erzeugt eine neue Verbindung +menu_element=Element +menu_element_tt=Verschiebt Elemente oder bearbeitet dessen Eigenschaften +menu_select=Auswahl +menu_select_tt=W\u00E4hlt Elemente aus um diese zu verschieben. Per Rechtsklick k\u00F6nnen diese Elemente kopiert werden +menu_edit=Bearbeiten +menu_orderInputs=Ordnen der Eing\u00E4nge +menu_orderInputs_tt=Sortiert die Eing\u00E4nge f\u00FCr die Verwendeung als eingebettetes Model +menu_orderOutputs=Sortieren der Ausg\u00E4nge +menu_orderOutputs_tt=Sortiert die Ausg\u00E4nge f\u00FCr die Verwendeung als eingebettetes Model +menu_run=Starten +menu_run_tt=Startet das Modell +menu_step=Schritt +menu_step_tt=F\u00FChrt einen Schritt aus +menu_micro=Mikro +menu_micro_tt=Startet das Modell im Mikroschrittmodus +menu_speedTest=Geschwindigkeitstest +menu_speedTest_tt=F\u00FChrt einen Geschwindigkeitstest durch. Es wird die maximal m\u00F6gliche Taktfrequenz ermittelt +menu_trace=Signalverlauf +menu_runClock=Taktgeber starten +menu_runClock_tt=Wenn gew\u00E4hlt, werden beim Starten auch die Taktgeber gestartet \ No newline at end of file diff --git a/src/main/resources/lang/lang_en.properties b/src/main/resources/lang/lang_en.properties new file mode 100644 index 000000000..bd95c7b20 --- /dev/null +++ b/src/main/resources/lang/lang_en.properties @@ -0,0 +1,83 @@ +digital=Digital +message=Digital\nA simple simulator for digital circuits.\n\nWritten bei H.Neemann in 2016 +ok=Ok +# Attribute Keys +key_dataBits=Data Bits +key_numberInputs=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 +key_selectorBits=Number of Selector Bits +key_signed=Signed +key_data=Data +err_seemsToOscillate=Logic seems to oscillate +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 +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} is not a input or output +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 +attr_dialogTitle=Attributes +msg_errorEditingValue=Error editing a atribute value +msg_color=Color +msg_errorImportingModel=Error importing a model +msg_errorCreatingModel=Error creating the model +msg_errorWritingFile=Error writing a file +msg_errorReadingFile=Error reading a file +msg_errorCalculatingStep=Error calculating a step +btn_edit=Edit +btn_load=Load +tt_moveItemUp=Move the item up +tt_moveItemDown=Move the item down +menu_file=File +menu_new=New +menu_open=Open +menu_save=Save +menu_saveAs=Save As +menu_elements=Elements +menu_custom=Custom +menu_import=Import +menu_import_tt=Imports a model as a useable Element! +menu_refresh=Reload +menu_refresh_tt=Reload all imported models +menu_wire=Wire +menu_wire_tt=Add new wires to circuit +menu_element=Element +menu_element_tt=Moves Elements or edits its properties +menu_select=Select +menu_select_tt=Selects elements to move or delete them. Also right click copies the selected elements. +menu_edit=Edit +menu_orderInputs=Order Inputs +menu_orderInputs_tt=Order the inputs for the usage as nested model +menu_orderOutputs=Order Outputs +menu_orderOutputs_tt=Order the outputs for the usage as nested model +menu_run=Run +menu_run_tt=Runs the model +menu_step=Step +menu_step_tt=Calculating a micro step +menu_micro=Micro +menu_micro_tt=Runs the Model in micro stepping mode +menu_speedTest=Speed Test +menu_speedTest_tt=Performs a speed test by calculating the max. clock frequency. +menu_trace=Trace +menu_runClock=Run Clock +menu_runClock_tt=If selected the clocks in the circuit are started \ No newline at end of file